diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 18e8e9ad02688bc37d5eca4f8135eb053190b1a6..e6202cf37c7658f2d83e9d98ef83737e49e00728 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,6 +1,6 @@
 repos:
 -   repo: https://github.com/pre-commit/mirrors-autopep8
-    rev: ''  # Use the sha / tag you want to point at
+    rev: 'v1.6.0'  # Use the sha / tag you want to point at
     hooks:
     -   id: autopep8
         types: [file]
diff --git a/Custom_EasyBlocks/README.md b/Custom_EasyBlocks/README.md
index a756efd0c4fe3bbcbb885a12934f9832cb9c17fe..3ef27f61e737494dccbb9086e57d027ad2fb6f5e 100644
--- a/Custom_EasyBlocks/README.md
+++ b/Custom_EasyBlocks/README.md
@@ -35,6 +35,12 @@ Overview of the custom EasyBlocks.
 - __*needed because*__ https://github.com/easybuilders/easybuild-easyblocks/pull/2593
 - __*can not be removed*__ Once the PR is merged upstream. Likely with v4.5.0
 
+## numexpr
+
+- __*added by*__ s.achilles
+- __*needed because*__ https://github.com/easybuilders/easybuild-easyblocks/pull/2678
+- __*can not be removed*__ until the PR is merged upstream. Likely with v4.5.4
+
 ## NVIDIA_DRIVER
 
 - __*added by*__ d.alvarez
@@ -89,4 +95,11 @@ Overview of the custom EasyBlocks.
 - __*added_by*__ d.alvarez
 - __*needed because*__ to autodetect CUDA and support CUDA compute capabilities
 - __*difference compared to upstream*__ upstream doesn't have such a feature
-- __*can not be removed*__ until merged upstream
+- __*can not be removed*__ until merged upstream (https://github.com/easybuilders/easybuild-easyblocks/pull/2673)
+
+## CP2K
+- __*added_by*__ th.mueller
+- __*needed because*__  support for libvori; alternative versions of dbcsr; contains loads of widely obsolete stuff; is  essentially a highly non-portable easyblock working only with intel and gnu (which I am not going to change!); running the tests will not work within an eb environment - at least not sensibly. 
+- __*difference compared to upstream*__ no support for libvori 
+- __*can not be removed*__
+
diff --git a/Custom_EasyBlocks/cp2k.py b/Custom_EasyBlocks/cp2k.py
new file mode 100644
index 0000000000000000000000000000000000000000..f2901e2f18590d898c1bbdcfa110aac9ce597404
--- /dev/null
+++ b/Custom_EasyBlocks/cp2k.py
@@ -0,0 +1,905 @@
+##
+# Copyright 2009-2019 Ghent University
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be),
+# Flemish Research Foundation (FWO) (http://www.fwo.be/en)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# https://github.com/easybuilders/easybuild
+#
+# EasyBuild 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 v2.
+#
+# EasyBuild 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 EasyBuild.  If not, see <http://www.gnu.org/licenses/>.
+##
+"""
+EasyBuild support for building and installing CP2K, implemented as an easyblock
+
+@author: Stijn De Weirdt (Ghent University)
+@author: Dries Verdegem (Ghent University)
+@author: Kenneth Hoste (Ghent University)
+@author: Pieter De Baets (Ghent University)
+@author: Jens Timmerman (Ghent University)
+@author: Ward Poelmans (Ghent University)
+@author: Luca Marsella (CSCS)
+@author: Damian Alvarez (Forschungszentrum Juelich GmbH)
+@author: Alan O'Cais (Forschungszentrum Juelich GmbH)
+@author: Balazs Hajgato (Free University Brussels (VUB))
+"""
+
+import fileinput
+import glob
+import re
+import os
+import sys
+from distutils.version import LooseVersion
+
+import easybuild.tools.toolchain as toolchain
+from easybuild.framework.easyblock import EasyBlock
+from easybuild.framework.easyconfig import CUSTOM
+from easybuild.tools.build_log import EasyBuildError
+from easybuild.tools.environment import setvar
+from easybuild.tools.filetools import change_dir, copy_dir, copy_file, mkdir, write_file
+from easybuild.tools.config import build_option
+from easybuild.tools.modules import get_software_root, get_software_version
+from easybuild.tools.run import run_cmd
+from easybuild.tools.systemtools import get_avail_core_count
+
+
+class EB_CP2K(EasyBlock):
+    """
+    Support for building CP2K
+    - prepare module include files if required
+    - generate custom config file in 'arch' directory
+    - build CP2K
+    - run regression test if desired
+    - install by copying binary executables
+    """
+
+    def __init__(self, *args, **kwargs):
+        super(EB_CP2K, self).__init__(*args, **kwargs)
+
+        self.typearch = None
+
+        # this should be set to False for old versions of GCC (e.g. v4.1)
+        self.compilerISO_C_BINDING = True
+
+        # compiler options that need to be set in Makefile
+        self.debug = ''
+        self.fpic = ''
+
+        # used for both libsmm and libxsmm
+        self.libsmm = ''
+        self.modincpath = ''
+        self.openmp = ''
+
+        self.make_instructions = ''
+
+    @staticmethod
+    def extra_options():
+        extra_vars = {
+            'extracflags': ['', "Extra CFLAGS to be added", CUSTOM],
+            'extradflags': ['', "Extra DFLAGS to be added", CUSTOM],
+            'ignore_regtest_fails': [False, ("Ignore failures in regression test "
+                                             "(should be used with care)"), CUSTOM],
+            'library': [False, "Also build CP2K as a library", CUSTOM],
+            'maxtasks': [4, ("Maximum number of CP2K instances run at "
+                             "the same time during testing"), CUSTOM],
+            'modinc': [[], ("List of modinc's to use (*.f90], or 'True' to use "
+                            "all found at given prefix"), CUSTOM],
+            'modincprefix': ['', "Intel MKL prefix for modinc include dir", CUSTOM],
+            'runtest': [True, "Build and run CP2K tests", CUSTOM],
+            'omp_num_threads': [None, "Value to set $OMP_NUM_THREADS to during testing", CUSTOM],
+            'plumed': [None, "Enable PLUMED support", CUSTOM],
+            'cuda': [True, "Enable CUDA support", CUSTOM],
+            'type': ['popt', "Type of build ('popt' or 'psmp')", CUSTOM],
+            'typeopt': [True, "Enable optimization", CUSTOM],
+            'dbcsr_version': ['2.0.1',"DBCSR version used",CUSTOM],
+            'libvori_version': ['-210412',"libvori version used",CUSTOM],
+        }
+        return EasyBlock.extra_options(extra_vars)
+
+    def _generate_makefile(self, options):
+        """Generate Makefile based on options dictionary and optional make instructions"""
+
+        text = "# Makefile generated by CP2K easyblock in EasyBuild\n"
+        for key, value in sorted(options.items()):
+            text += "%s = %s\n" % (key, value)
+        return text + self.make_instructions
+
+    def configure_step(self):
+        """Configure build
+        - build Libint wrapper
+        - generate Makefile
+        """
+
+        known_types = ['psmp']
+        if self.cfg['type'] not in known_types:
+            raise EasyBuildError("Unknown build type specified: '%s', known types are %s",
+                                 self.cfg['type'], known_types)
+        self.log.info("initial start_dir %s" %self.cfg['start_dir']) 
+        cpstring="cp -r %s../dbcsr-%s/* %sexts/dbcsr/" %(self.cfg['start_dir'],self.cfg['dbcsr_version'],self.cfg['start_dir'])
+        if self.cfg['dbcsr_version'] == '2.1.0':
+            cpstringb="cp -r %s../dbcsr-%s/.cp2k %sexts/dbcsr/" %(self.cfg['start_dir'],self.cfg['dbcsr_version'],self.cfg['start_dir'])
+
+        vorbis="cd  %s../libvori%s/ && mkdir build && cd build && cmake .. && gmake && cp libvori.a %s/ " %(self.cfg['start_dir'],self.cfg['libvori_version'], self.cfg['start_dir'])
+#       run_cmd(cpstring)
+        self.log.info(cpstring) 
+#       self.log.info(cpstringb) 
+        self.log.info(vorbis) 
+        os.system(cpstring)
+        if self.cfg['dbcsr_version'] == '2.1.0':
+            os.system(cpstringb)
+
+        os.system(vorbis)
+
+        # correct start dir, if needed
+        # recent CP2K versions have a 'cp2k' dir in the unpacked 'cp2k' dir
+        cp2k_path = os.path.join(self.cfg['start_dir'], 'cp2k')
+        if os.path.exists(cp2k_path):
+            self.cfg['start_dir'] = cp2k_path
+            self.log.info("Corrected start_dir to %s" % self.cfg['start_dir'])
+
+        # set compilers options according to toolchain config
+        # full debug: -g -traceback -check all -fp-stack-check
+        # -g links to mpi debug libs
+        if self.toolchain.options['debug']:
+            self.debug = '-g'
+            self.log.info("Debug build")
+        if self.toolchain.options['pic']:
+            self.fpic = "-fPIC"
+            self.log.info("Using fPIC")
+
+        # report on extra flags being used
+        if self.cfg['extracflags']:
+            self.log.info("Using extra CFLAGS: %s" % self.cfg['extracflags'])
+        if self.cfg['extradflags']:
+            self.log.info("Using extra DFLAGS: %s" % self.cfg['extradflags'])
+
+        # lib(x)smm support
+        libsmm = get_software_root('libsmm')
+        libxsmm = get_software_root('libxsmm')
+        if libxsmm:
+            self.cfg.update('extradflags', '-D__LIBXSMM')
+            self.libsmm = '-lxsmm -lxsmmf'
+            self.log.debug('Using libxsmm %s' % libxsmm)
+        elif libsmm:
+            libsmms = glob.glob(os.path.join(libsmm, 'lib', 'libsmm_*nn.a'))
+            dfs = [os.path.basename(os.path.splitext(x)[0]).replace('lib', '-D__HAS_') for x in libsmms]
+            moredflags = ' ' + ' '.join(dfs)
+            self.cfg.update('extradflags', moredflags)
+            self.libsmm = ' '.join(libsmms)
+            self.log.debug('Using libsmm %s (extradflags %s)' % (self.libsmm, moredflags))
+
+        # obtain list of modinc's to use
+        if self.cfg["modinc"]:
+            self.modincpath = self.prepmodinc()
+
+        # set typearch
+        self.typearch = "Linux-x86-64-%s" % self.toolchain.name
+
+        # extra make instructions
+        self.make_instructions = ''  # "graphcon.o: graphcon.F\n\t$(FC) -c $(FCFLAGS2) $<\n"
+
+        # compiler toolchain specific configuration
+        comp_fam = self.toolchain.comp_family()
+        if comp_fam == toolchain.INTELCOMP:
+            options = self.configure_intel_based()
+        elif comp_fam == toolchain.GCC:
+            options = self.configure_GCC_based()
+        else:
+            raise EasyBuildError("Don't know how to tweak configuration for compiler family %s" % comp_fam)
+
+        # BLAS/FFTW
+        if get_software_root('imkl'):
+            options = self.configure_MKL(options)
+        else:
+            # BLAS
+            if get_software_root('ACML'):
+                options = self.configure_ACML(options)
+            else:
+                options = self.configure_BLAS_lib(options)
+
+            # FFTW (no MKL involved)
+            if 'fftw3' in os.getenv('LIBFFT', ''):
+                options = self.configure_FFTW3(options)
+
+            # LAPACK
+            if os.getenv('LIBLAPACK_MT', None) is not None:
+                options = self.configure_LAPACK(options)
+
+            if os.getenv('LIBSCALAPACK', None) is not None:
+                options = self.configure_ScaLAPACK(options)
+
+        # PLUMED
+        plumed = get_software_root('PLUMED')
+        if self.cfg['plumed'] and not plumed:
+            raise EasyBuildError("The PLUMED module needs to be loaded to build CP2K with PLUMED support")
+
+        # enable PLUMED support if PLUMED is listed as a dependency
+        # and PLUMED support is either explicitly enabled (plumed = True) or unspecified ('plumed' not defined)
+        if plumed and (self.cfg['plumed'] or self.cfg['plumed'] is None):
+            options['LIBS'] += ' -lplumed'
+            options['DFLAGS'] += ' -D__PLUMED2'
+
+        # ELPA
+        elpa = get_software_root('ELPA')
+        if elpa:
+            options['LIBS'] += ' -lelpa'
+            elpa_inc_dir = os.path.join(elpa, 'include', 'elpa-%s' % get_software_version('ELPA'), 'modules')
+            options['FCFLAGSOPT'] += ' -I%s ' % elpa_inc_dir
+            if LooseVersion(self.version) >= LooseVersion('6.1'):
+                elpa_ver = ''.join(get_software_version('ELPA').split('.')[:2])
+                options['DFLAGS'] += ' -D__ELPA=%s' % elpa_ver
+                elpa_inc_dir = os.path.join(elpa, 'include', 'elpa-%s' % get_software_version('ELPA'), 'elpa')
+                options['FCFLAGSOPT'] += ' -I%s ' % elpa_inc_dir
+            else:
+                options['DFLAGS'] += ' -D__ELPA3'
+
+        # CUDA
+        if self.cfg['cuda']:
+            cuda = get_software_root('CUDA')
+            if cuda:
+                  options['DFLAGS'] += ' -D__ACC -D__DBCSR_ACC'
+                  options['LIBS'] += ' -lcudart -lcublas -lcufft -lrt'
+                  options['NVCC'] = ' nvcc'
+
+        # libvorbi
+        # avoid group nesting
+        options['LIBS'] = options['LIBS'].replace('-Wl,--start-group', '').replace('-Wl,--end-group', '')
+
+        options['LIBS'] = "-Wl,--start-group %s -Wl,--end-group" % options['LIBS']
+        options['LIBS'] = "%s %slibvori.a " % (options['LIBS'], self.cfg['start_dir'])
+
+        # specify correct location for 'data' directory in final installation
+        options['DATA_DIR'] = os.path.join(self.installdir, 'data')
+
+        # create arch file using options set
+        archfile = os.path.join(self.cfg['start_dir'], 'arch', '%s.%s' % (self.typearch, self.cfg['type']))
+        txt = self._generate_makefile(options)
+        write_file(archfile, txt)
+        self.log.info("Content of makefile (%s):\n%s" % (archfile, txt))
+
+    def prepmodinc(self):
+        """Prepare list of module files"""
+
+        self.log.debug("Preparing module files")
+
+        imkl = get_software_root('imkl')
+
+        if imkl:
+
+            # prepare modinc target path
+            modincpath = os.path.join(os.path.dirname(os.path.normpath(self.cfg['start_dir'])), 'modinc')
+            self.log.debug("Preparing module files in %s" % modincpath)
+
+            mkdir(modincpath, parents=True)
+
+            # get list of modinc source files
+            modincdir = os.path.join(imkl, self.cfg["modincprefix"], 'include')
+
+            if isinstance(self.cfg["modinc"], list):
+                modfiles = [os.path.join(modincdir, x) for x in self.cfg["modinc"]]
+
+            elif isinstance(self.cfg["modinc"], bool) and self.cfg["modinc"]:
+                modfiles = glob.glob(os.path.join(modincdir, '*.f90'))
+
+            else:
+                raise EasyBuildError("prepmodinc: Please specify either a boolean value or a list of files in modinc "
+                                     "(found: %s).", self.cfg["modinc"])
+
+            f77 = os.getenv('F77')
+            if not f77:
+                raise EasyBuildError("F77 environment variable not set, can't continue.")
+
+            # create modinc files
+            for f in modfiles:
+                if f77.endswith('ifort'):
+                    cmd = "%s -module %s -c %s" % (f77, modincpath, f)
+                elif f77 in ['gfortran', 'mpif77']:
+                    cmd = "%s -J%s -c %s" % (f77, modincpath, f)
+                else:
+                    raise EasyBuildError("prepmodinc: Unknown value specified for F77 (%s)", f77)
+
+                run_cmd(cmd, log_all=True, simple=True)
+
+            return modincpath
+        else:
+            raise EasyBuildError("Don't know how to prepare modinc, imkl not found")
+
+    def configure_common(self):
+        """Common configuration for all toolchains"""
+
+        # openmp introduces 2 major differences
+        # -automatic is default: -noautomatic -auto-scalar
+        # some mem-bandwidth optimisation
+        if self.cfg['type'] == 'psmp':
+            self.openmp = self.toolchain.get_flag('openmp')
+
+        # determine which opt flags to use
+        if self.cfg['typeopt']:
+            optflags = 'OPT'
+            regflags = 'OPT2'
+        else:
+            optflags = 'NOOPT'
+            regflags = 'NOOPT'
+
+        # make sure a MPI-2 able MPI lib is used
+        mpi2 = False
+        if hasattr(self.toolchain, 'MPI_FAMILY') and self.toolchain.MPI_FAMILY is not None:
+            known_mpi2_fams = [toolchain.MPICH, toolchain.MPICH2, toolchain.MVAPICH2, toolchain.OPENMPI,
+                               toolchain.INTELMPI]
+            mpi_fam = self.toolchain.mpi_family()
+            if mpi_fam in known_mpi2_fams:
+                mpi2 = True
+                self.log.debug("Determined MPI2 compatibility based on MPI toolchain component: %s" % mpi_fam)
+            else:
+                self.log.debug("Cannot determine MPI2 compatibility based on MPI toolchain component: %s" % mpi_fam)
+        else:
+            # can't use toolchain.mpi_family, because of system toolchain
+            mpi2libs = ['impi', 'MVAPICH2', 'OpenMPI', 'MPICH2', 'MPICH']
+            for mpi2lib in mpi2libs:
+                if get_software_root(mpi2lib):
+                    mpi2 = True
+                    self.log.debug("Determined MPI2 compatibility based on loaded MPI module: %s")
+                else:
+                    self.log.debug("MPI-2 supporting MPI library %s not loaded.")
+
+        if not mpi2:
+            raise EasyBuildError("CP2K needs MPI-2, no known MPI-2 supporting library loaded?")
+
+        cppflags = os.getenv('CPPFLAGS')
+        ldflags = os.getenv('LDFLAGS')
+        cflags = os.getenv('CFLAGS')
+        fflags = os.getenv('FFLAGS')
+        fflags_lowopt = re.sub('-O[0-9]', '-O1', fflags)
+        options = {
+            'CC': os.getenv('MPICC'),
+            'CPP': '',
+            'FC': '%s %s' % (os.getenv('MPIF90'), self.openmp),
+            'LD': '%s %s' % (os.getenv('MPIF90'), self.openmp),
+            'AR': 'ar -r',
+            'CPPFLAGS': '',
+
+            'FPIC': self.fpic,
+            'DEBUG': self.debug,
+
+            'FCFLAGS': '$(FCFLAGS%s)' % optflags,
+            'FCFLAGS2': '$(FCFLAGS%s)' % regflags,
+
+            'CFLAGS': ' %s %s %s $(FPIC) $(DEBUG) %s ' % (cflags, cppflags, ldflags, self.cfg['extracflags']),
+            'DFLAGS': ' -D__parallel -D__BLACS -D__SCALAPACK -D__FFTSG %s' % self.cfg['extradflags'],
+
+            'LIBS': os.getenv('LIBS', ''),
+
+            'FCFLAGSNOOPT': '$(DFLAGS) $(CFLAGS) -O0  $(FREE) $(FPIC) $(DEBUG)',
+            'FCFLAGSOPT': '%s $(FREE) $(SAFE) $(FPIC) $(DEBUG)' % fflags,
+            'FCFLAGSOPT2': '%s $(FREE) $(SAFE) $(FPIC) $(DEBUG)' % fflags_lowopt,
+        }
+
+        libint = get_software_root('LibInt')
+        if libint:
+            options['DFLAGS'] += ' -D__LIBINT'
+
+            libintcompiler = "%s %s" % (os.getenv('CC'), os.getenv('CFLAGS'))
+
+            # Build libint-wrapper, if required
+            libint_wrapper = ''
+
+            # required for old versions of GCC
+            if not self.compilerISO_C_BINDING:
+                options['DFLAGS'] += ' -D__HAS_NO_ISO_C_BINDING'
+
+                # determine path for libint_tools dir
+                libinttools_paths = ['libint_tools', 'tools/hfx_tools/libint_tools']
+                libinttools_path = None
+                for path in libinttools_paths:
+                    path = os.path.join(self.cfg['start_dir'], path)
+                    if os.path.isdir(path):
+                        libinttools_path = path
+                        change_dir(libinttools_path)
+                if not libinttools_path:
+                    raise EasyBuildError("No libinttools dir found")
+
+                # build libint wrapper
+                cmd = "%s -c libint_cpp_wrapper.cpp -I%s/include" % (libintcompiler, libint)
+                if not run_cmd(cmd, log_all=True, simple=True):
+                    raise EasyBuildError("Building the libint wrapper failed")
+                libint_wrapper = '%s/libint_cpp_wrapper.o' % libinttools_path
+
+            # determine Libint libraries based on major version number
+            libint_maj_ver = get_software_version('Libint').split('.')[0]
+            if libint_maj_ver == '1':
+                libint_libs = "$(LIBINTLIB)/libderiv.a $(LIBINTLIB)/libint.a $(LIBINTLIB)/libr12.a"
+            elif libint_maj_ver == '2':
+                # libint_libs = "$(LIBINTLIB)/libint2.a"
+                libint_libs = "-L$(LIBINTLIB) -lint2"
+            else:
+                raise EasyBuildError("Don't know how to handle libint version %s", libint_maj_ver)
+            self.log.info("Using Libint version %s" % (libint_maj_ver))
+
+            options['LIBINTLIB'] = '%s/lib' % libint
+            options['LIBS'] += ' %s -lstdc++ %s' % (libint_libs, libint_wrapper)
+
+            # add Libint include dir to $FCFLAGS
+            options['FCFLAGS'] += ' -I' + os.path.join(libint, 'include')
+
+        else:
+            # throw a warning, since CP2K without Libint doesn't make much sense
+            self.log.warning("Libint module not loaded, so building without Libint support")
+
+        libxc = get_software_root('libxc')
+        if libxc:
+            cur_libxc_version = get_software_version('libxc')
+            if LooseVersion(self.version) >= LooseVersion('6.1'):
+                libxc_min_version = '4.0.3'
+                options['DFLAGS'] += ' -D__LIBXC'
+            else:
+                libxc_min_version = '2.0.1'
+                options['DFLAGS'] += ' -D__LIBXC2'
+
+            if LooseVersion(cur_libxc_version) < LooseVersion(libxc_min_version):
+                raise EasyBuildError("This version of CP2K is not compatible with libxc < %s" % libxc_min_version)
+
+            if LooseVersion(cur_libxc_version) >= LooseVersion('4.0.3'):
+                # cfr. https://www.cp2k.org/howto:compile#k_libxc_optional_wider_choice_of_xc_functionals
+                options['LIBS'] += ' -L%s/lib -lxcf03 -lxc' % libxc
+            elif LooseVersion(cur_libxc_version) >= LooseVersion('2.2'):
+                options['LIBS'] += ' -L%s/lib -lxcf90 -lxc' % libxc
+            else:
+                options['LIBS'] += ' -L%s/lib -lxc' % libxc
+            self.log.info("Using Libxc-%s" % cur_libxc_version)
+            options['FCFLAGSOPT'] += ' -I%s/include ' %libxc
+        else:
+            self.log.info("libxc module not loaded, so building without libxc support")
+
+        return options
+
+    def configure_intel_based(self):
+        """Configure for Intel based toolchains"""
+
+        # based on guidelines available at
+        # http://software.intel.com/en-us/articles/build-cp2k-using-intel-fortran-compiler-professional-edition/
+        intelurl = ''.join(["http://software.intel.com/en-us/articles/",
+                            "build-cp2k-using-intel-fortran-compiler-professional-edition/"])
+
+        options = self.configure_common()
+
+        extrainc = ''
+        if self.modincpath:
+            extrainc = '-I%s' % self.modincpath
+
+        options.update({
+            # -Vaxlib : older options
+            'FREE': '-fpp -free',
+
+            # SAFE = -assume protect_parens -fp-model precise -ftz  # causes problems, so don't use this
+            'SAFE': '-assume protect_parens -no-unroll-aggressive',
+
+            'INCFLAGS': '$(DFLAGS) -I$(INTEL_INC) -I$(INTEL_INCF) %s' % extrainc,
+
+            'LDFLAGS': '$(INCFLAGS) ',
+            'OBJECTS_ARCHITECTURE': 'machine_intel.o',
+        })
+
+        options['DFLAGS'] += ' -D__INTEL'
+
+        options['FCFLAGSOPT'] += ' $(INCFLAGS) -heap-arrays 64'
+        options['FCFLAGSOPT2'] += ' $(INCFLAGS) -heap-arrays 64'
+
+        ifortver_string = get_software_version('ifort')
+        if not ifortver_string:
+                ifortver_string = get_software_version('intel-compilers')
+        ifortver = LooseVersion(ifortver_string)
+
+        # -i-static has been deprecated prior to 2013, but was still usable. From 2015 it is not.
+        if ifortver < LooseVersion("2013"):
+            options['LDFLAGS'] += ' -i-static '
+        else:
+            options['LDFLAGS'] += ' -static-intel '
+
+        # Otherwise it fails on linking, since there are 2 definitions of main
+        if LooseVersion(self.version) >= LooseVersion('4.1'):
+            options['LDFLAGS'] += ' -nofor-main '
+
+        failmsg = "CP2K won't build correctly with the Intel %%s compilers prior to %%s, see %s" % intelurl
+        fypp="{}tools/build_utils/fypp".format(self.cfg['start_dir'])
+        fyppsrc="{}src".format(self.cfg['start_dir']) 
+
+        self.make_instructions += "pao_param_linpot.o:{}/pao_param_linpot.F\n\t{} -n $<  pao_param_linpot.F90\n\t$(FC) -c -I{} -Iexts/dbcsr  $(FCFLAGS2) pao_param_linpot.F90\n\n".format(fyppsrc,fypp,fyppsrc)
+        self.make_instructions += "lri_forces.o:{}/lri_forces.F\n\t{} -n $< lri_forces.F90\n\t$(FC) -c -I{} -Iexts/dbcsr $(FCFLAGS2) lri_forces.F90\n\n".format(fyppsrc,fypp,fyppsrc)
+        self.make_instructions += "mp2_optimize_ri_basis.o:{}/mp2_optimize_ri_basis.F\n\t{} -n $< mp2_optimize_ri_basis.F90\n\t$(FC) -c -I{} -Iexts/dbcsr $(FCFLAGS2) mp2_optimize_ri_basis.F90\n\n".format(fyppsrc,fypp,fyppsrc)
+        self.make_instructions += "lri_optimize_ri_basis.o:{}/lri_optimize_ri_basis.F\n\t{} -n $< lri_optimize_ri_basis.F90\n\t$(FC) -c -I{} -Iexts/dbcsr $(FCFLAGS2) lri_optimize_ri_basis.F90\n\n".format(fyppsrc,fypp,fyppsrc)
+        self.make_instructions += "hfx_contraction_methods.o:{}/hfxbase/hfx_contraction_methods.F\n\t{} -n $< hfx_contraction_methods.F90\n\t$(FC) -c -I{}/hfxbase -Iexts/dbcsr  $(FCFLAGS2) hfx_contraction_methods.F90\n\n".format(fyppsrc,fypp,fyppsrc)
+
+        return options
+
+    def configure_GCC_based(self):
+        """Configure for GCC based toolchains"""
+        options = self.configure_common()
+
+        options.update({
+            # need this to prevent "Unterminated character constant beginning" errors
+            'FREE': '-ffree-form -ffree-line-length-none',
+
+            'LDFLAGS': '$(FCFLAGS)',
+            'OBJECTS_ARCHITECTURE': 'machine_gfortran.o',
+        })
+
+        options['DFLAGS'] += ' -D__GFORTRAN'
+
+        options['FCFLAGSOPT'] += ' $(DFLAGS) $(CFLAGS) -fmax-stack-var-size=32768'
+        options['FCFLAGSOPT2'] += ' $(DFLAGS) $(CFLAGS)'
+
+        return options
+
+    def configure_ACML(self, options):
+        """Configure for AMD Math Core Library (ACML)"""
+
+        openmp_suffix = ''
+        if self.openmp:
+            openmp_suffix = '_mp'
+
+        options['ACML_INC'] = '%s/gfortran64%s/include' % (get_software_root('ACML'), openmp_suffix)
+        options['CFLAGS'] += ' -I$(ACML_INC) -I$(FFTW_INC)'
+        options['DFLAGS'] += ' -D__FFTACML'
+
+        blas = os.getenv('LIBBLAS', '')
+        blas = blas.replace('gfortran64', 'gfortran64%s' % openmp_suffix)
+        options['LIBS'] += ' %s %s %s' % (self.libsmm, os.getenv('LIBSCALAPACK', ''), blas)
+
+        return options
+
+    def configure_BLAS_lib(self, options):
+        """Configure for BLAS library."""
+        options['LIBS'] += ' %s %s' % (self.libsmm, os.getenv('LIBBLAS', ''))
+        return options
+
+    def configure_MKL(self, options):
+        """Configure for Intel Math Kernel Library (MKL)"""
+
+        options['INTEL_INC'] = '$(MKLROOT)/include'
+        options['DFLAGS'] += ' -D__FFTW3'
+
+        extra = ''
+        if self.modincpath:
+            extra = '-I%s' % self.modincpath
+        options['CFLAGS'] += ' -I$(INTEL_INC) %s $(FPIC) $(DEBUG)' % extra
+
+        options['LIBS'] += ' %s %s' % (self.libsmm, os.getenv('LIBSCALAPACK', ''))
+
+        fftw_root = get_software_root('FFTW')
+        if fftw_root:
+            libfft = '-lfftw3'
+            if self.cfg['type'] == 'psmp':
+                libfft += ' -lfftw3_omp'
+
+            options['CFLAGS'] += ' -I$(INTEL_INCF)'
+            options['INTEL_INCF'] = os.path.join(fftw_root, 'include')
+            options['LIBS'] += ' -L%s %s' % (os.path.join(fftw_root, 'lib'), libfft)
+
+        else:
+            # only use Intel FFTW wrappers if FFTW is not loaded
+            options['CFLAGS'] += ' -I$(INTEL_INCF)'
+            options['DFLAGS'] += ' -D__FFTMKL'
+            options['INTEL_INCF'] = '$(INTEL_INC)/fftw'
+            options['LIBS'] = '%s %s' % (os.getenv('LIBFFT', ''), options['LIBS'])
+
+        return options
+
+    def configure_FFTW3(self, options):
+        """Configure for FFTW3"""
+
+        options.update({
+            'FFTW_INC': os.getenv('FFT_INC_DIR', ''),  # GCC
+            'FFTW3INC': os.getenv('FFT_INC_DIR', ''),  # Intel
+            'FFTW3LIB': os.getenv('FFT_LIB_DIR', ''),  # Intel
+        })
+
+        options['DFLAGS'] += ' -D__FFTW3'
+        if self.cfg['type'] == 'psmp':
+            libfft = os.getenv('LIBFFT_MT', '')
+        else:
+            libfft = os.getenv('LIBFFT', '')
+        options['LIBS'] += ' -L%s %s' % (os.getenv('FFT_LIB_DIR', '.'), libfft)
+
+        return options
+
+    def configure_LAPACK(self, options):
+        """Configure for LAPACK library"""
+        options['LIBS'] += ' %s' % os.getenv('LIBLAPACK_MT', '')
+        return options
+
+    def configure_ScaLAPACK(self, options):
+        """Configure for ScaLAPACK library"""
+
+        options['LIBS'] += ' %s' % os.getenv('LIBSCALAPACK', '')
+
+        return options
+
+    def build_step(self):
+        """Start the actual build
+        - go into makefiles dir
+        - patch Makefile
+        -build_and_install
+        """
+
+#       makefiles = os.path.join(self.cfg['start_dir'], 'makefiles')
+#       try:
+#           os.chdir(makefiles)
+#       except OSError, err:
+#           raise EasyBuildError("Can't change to makefiles dir %s: %s", makefiles, err)
+
+#       # modify makefile for parallel build
+#       parallel = self.cfg['parallel']
+#       if parallel:
+#
+#           try:
+#               for line in fileinput.input('Makefile', inplace=1, backup='.orig.patchictce'):
+#                   line = re.sub(r"^PMAKE\s*=.*$", "PMAKE\t= $(SMAKE) -j %s" % parallel, line)
+#                   sys.stdout.write(line)
+#           except IOError, err:
+#               raise EasyBuildError("Can't modify/write Makefile in %s: %s", makefiles, err)
+#
+        # update make options with MAKE
+        self.cfg.update('buildopts', 'MAKE="make -j %s"' % self.cfg['parallel'])
+
+        # update make options with ARCH and VERSION
+        self.cfg.update('buildopts', 'ARCH=%s VERSION=%s' % (self.typearch, self.cfg['type']))
+
+        cmd = "make %s" % self.cfg['buildopts']
+
+        # clean first
+        run_cmd(cmd + " clean", log_all=True, simple=True, log_output=True)
+
+        # build and install
+        if self.cfg['library']:
+            cmd += ' libcp2k'
+        run_cmd(cmd + " all", log_all=True, simple=True, log_output=True)
+
+    def test_step(self):
+        """Run regression test."""
+
+        if self.cfg['runtest']:
+
+            if not build_option('mpi_tests'):
+                self.log.info("Skipping testing of CP2K since MPI testing is disabled")
+                return
+
+            if self.cfg['omp_num_threads']:
+                setvar('OMP_NUM_THREADS', self.cfg['omp_num_threads'])
+
+            # change to root of build dir
+            try:
+                os.chdir(self.builddir)
+            except OSError as err:
+                raise EasyBuildError("Failed to change to %s: %s", self.builddir, err)
+
+            # use regression test reference output if available
+            # try and find an unpacked directory that starts with 'LAST-'
+            regtest_refdir = None
+            for d in os.listdir(self.builddir):
+                if d.startswith("LAST-"):
+                    regtest_refdir = d
+                    break
+
+            # location of do_regtest script
+            cfg_fn = "cp2k_regtest.cfg"
+            regtest_script = os.path.join(self.cfg['start_dir'], 'tools', 'regtesting', 'do_regtest')
+            regtest_cmd = "%s -nosvn -nobuild -config %s" % (regtest_script, cfg_fn)
+            # older version of CP2K
+            if not os.path.exists(regtest_script):
+                regtest_script = os.path.join(self.cfg['start_dir'], 'tools', 'do_regtest')
+                regtest_cmd = "%s -nocvs -quick -nocompile -config %s" % (regtest_script, cfg_fn)
+
+            # patch do_regtest so that reference output is used
+            if regtest_refdir:
+                self.log.info("Using reference output available in %s" % regtest_refdir)
+                try:
+                    for line in fileinput.input(regtest_script, inplace=1, backup='.orig.refout'):
+                        line = re.sub(r"^(dir_last\s*=\${dir_base})/.*$", r"\1/%s" % regtest_refdir, line)
+                        sys.stdout.write(line)
+                except IOError as err:
+                    raise EasyBuildError("Failed to modify '%s': %s", regtest_script, err)
+
+            else:
+                self.log.info("No reference output found for regression test, just continuing without it...")
+
+            # prefer using 4 cores, since some tests require/prefer square (n^2) numbers or powers of 2 (2^n)
+            test_core_cnt = min(self.cfg['parallel'], 4)
+            if get_avail_core_count() < test_core_cnt:
+                raise EasyBuildError("Cannot run MPI tests as not enough cores (< %s) are available", test_core_cnt)
+            else:
+                self.log.info("Using %s cores for the MPI tests" % test_core_cnt)
+
+            # configure regression test
+            cfg_txt = '\n'.join([
+                'FORT_C_NAME="%(f90)s"',
+                'dir_base=%(base)s',
+                'cp2k_version=%(cp2k_version)s',
+                'dir_triplet=%(triplet)s',
+                'export ARCH=${dir_triplet}',
+                'cp2k_dir=%(cp2k_dir)s',
+                'leakcheck="YES"',
+                'maxtasks=%(maxtasks)s',
+                'cp2k_run_prefix="%(mpicmd_prefix)s"',
+            ]) % {
+                'f90': os.getenv('F90'),
+                'base': os.path.dirname(os.path.normpath(self.cfg['start_dir'])),
+                'cp2k_version': self.cfg['type'],
+                'triplet': self.typearch,
+                'cp2k_dir': os.path.basename(os.path.normpath(self.cfg['start_dir'])),
+                'maxtasks': self.cfg['maxtasks'],
+                'mpicmd_prefix': self.toolchain.mpi_cmd_for('', test_core_cnt),
+            }
+
+            write_file(cfg_fn, cfg_txt)
+            self.log.debug("Contents of %s: %s" % (cfg_fn, cfg_txt))
+
+            # run regression test
+            (regtest_output, ec) = run_cmd(regtest_cmd, log_all=True, simple=False, log_output=True)
+
+            if ec == 0:
+                self.log.info("Regression test output:\n%s" % regtest_output)
+            else:
+                raise EasyBuildError("Regression test failed (non-zero exit code): %s", regtest_output)
+
+            # pattern to search for regression test summary
+            re_pattern = "number\s+of\s+%s\s+tests\s+(?P<cnt>[0-9]+)"
+
+            # find total number of tests
+            regexp = re.compile(re_pattern % "", re.M | re.I)
+            res = regexp.search(regtest_output)
+            tot_cnt = None
+            if res:
+                tot_cnt = int(res.group('cnt'))
+            else:
+                raise EasyBuildError("Finding total number of tests in regression test summary failed")
+
+            # function to report on regtest results
+            def test_report(test_result):
+                """Report on tests with given result."""
+
+                postmsg = ''
+
+                test_result = test_result.upper()
+                regexp = re.compile(re_pattern % test_result, re.M | re.I)
+
+                cnt = None
+                res = regexp.search(regtest_output)
+                if not res:
+                    raise EasyBuildError("Finding number of %s tests in regression test summary failed",
+                                         test_result.lower())
+                else:
+                    cnt = int(res.group('cnt'))
+
+                logmsg = "Regression test reported %s / %s %s tests"
+                logmsg_values = (cnt, tot_cnt, test_result.lower())
+
+                # failed tests indicate problem with installation
+                # wrong tests are only an issue when there are excessively many
+                if (test_result == "FAILED" and cnt > 0) or (test_result == "WRONG" and (cnt / tot_cnt) > 0.1):
+                    if self.cfg['ignore_regtest_fails']:
+                        self.log.warning(logmsg, *logmsg_values)
+                        self.log.info("Ignoring failures in regression test, as requested.")
+                    else:
+                        raise EasyBuildError(logmsg, *logmsg_values)
+                elif test_result == "CORRECT" or cnt == 0:
+                    self.log.info(logmsg, *logmsg_values)
+                else:
+                    self.log.warning(logmsg, *logmsg_values)
+
+                return postmsg
+
+            # number of failed/wrong tests, will report error if count is positive
+            self.postmsg += test_report("FAILED")
+            self.postmsg += test_report("WRONG")
+
+            # number of new tests, will be high if a non-suitable regtest reference was used
+            # will report error if count is positive (is that what we want?)
+            self.postmsg += test_report("NEW")
+
+            # number of correct tests: just report
+            test_report("CORRECT")
+
+    def install_step(self):
+        """Install built CP2K
+        - copy from exe to bin
+        - copy data dir (if exists)
+        - copy tests
+        """
+
+        # copy executables
+        exedir = os.path.join(self.cfg['start_dir'], 'exe', self.typearch)
+        targetdir = os.path.join(self.installdir, 'bin')
+        copy_dir(exedir, targetdir)
+
+        # copy libraries and include files, not sure what is strictly required so we take everything
+        if self.cfg['library']:
+            libdir = os.path.join(self.cfg['start_dir'], 'lib', self.typearch, self.cfg['type'])
+            targetdir = os.path.join(self.installdir, 'lib')
+            copy_dir(libdir, targetdir)
+            # Also need to populate the include directory
+            targetdir = os.path.join(self.installdir, 'include')
+            libcp2k_header = os.path.join(self.cfg['start_dir'], 'src', 'start', 'libcp2k.h')
+            target_header = os.path.join(targetdir, os.path.basename(libcp2k_header))
+            copy_file(libcp2k_header, target_header)
+            # include all .mod files for fortran users (don't know the exact list so take everything)
+            mod_path = os.path.join(self.cfg['start_dir'], 'obj', self.typearch, self.cfg['type'])
+            for mod_file in glob.glob(os.path.join(mod_path, '*.mod')):
+                target_mod = os.path.join(targetdir, os.path.basename(mod_file))
+                copy_file(mod_file, target_mod)
+
+        # copy data dir
+        datadir = os.path.join(self.cfg['start_dir'], 'data')
+        targetdir = os.path.join(self.installdir, 'data')
+        if os.path.exists(targetdir):
+            self.log.info("Won't copy data dir. Destination directory %s already exists" % targetdir)
+        elif os.path.exists(datadir):
+            copy_dir(datadir, targetdir)
+        else:
+            self.log.info("Won't copy data dir. Source directory %s does not exist" % datadir)
+
+        # copy tests
+#        targetdir = os.path.join(self.installdir, 'tests')
+#        if os.path.exists(targetdir):
+#            self.log.info("Won't copy tests. Destination directory %s already exists" % targetdir)
+#        else:
+#            copy_dir(srctests, targetdir)
+        # tests constitute several thousand files
+        # rather tar them and copy to tests.tgz 
+        srctests = os.path.join(self.cfg['start_dir'], 'tests')
+        tmcmd = "tar -czf {}/tests.tgz  {} ".format(self.installdir,srctests);
+        os.system(tmcmd)
+
+        # copy regression test results
+        if self.cfg['runtest']:
+            try:
+                testdir = os.path.dirname(os.path.normpath(self.cfg['start_dir']))
+                for d in os.listdir(testdir):
+                    if d.startswith('TEST-%s-%s' % (self.typearch, self.cfg['type'])):
+                        path = os.path.join(testdir, d)
+                        target = os.path.join(self.installdir, d)
+                        copy_dir(path, target)
+                        self.log.info("Regression test results dir %s copied to %s" % (d, self.installdir))
+                        break
+            except (OSError, IOError) as err:
+                raise EasyBuildError("Failed to copy regression test results dir: %s", err)
+
+    def sanity_check_step(self):
+        """Custom sanity check for CP2K"""
+
+        cp2k_type = self.cfg['type']
+        custom_paths = {
+            'files': ["bin/%s.%s" % (x, cp2k_type) for x in ["cp2k", "cp2k_shell"]] + ["tests.tgz"],
+            'dirs': ["data"]
+        }
+        if self.cfg['library']:
+            custom_paths['files'].append(os.path.join('lib', 'libcp2k.a'))
+            custom_paths['files'].append(os.path.join('include', 'libcp2k.h'))
+            custom_paths['files'].append(os.path.join('include', 'libcp2k.mod'))
+        super(EB_CP2K, self).sanity_check_step(custom_paths=custom_paths)
+
+    def make_module_extra(self):
+        """Set up a CP2K_DATA_DIR environment variable to find CP2K provided basis sets"""
+
+        txt = super(EB_CP2K, self).make_module_extra()
+
+        # also define $CP2K_DATA_DIR in module,
+        # even though CP2K was already configured to pick up 'data' from install dir
+        # this could be useful for users to access the 'data' dir in a documented way (and it doesn't hurt)
+        datadir = os.path.join(self.installdir, 'data')
+        if os.path.exists(datadir):
+            txt += self.module_generator.set_environment('CP2K_DATA_DIR', datadir)
+
+        return txt
diff --git a/Custom_EasyBlocks/elpa.py b/Custom_EasyBlocks/elpa.py
index c0c5c5be527d452aa0fc66fb56a59dd970a3ca07..663832f0abf000d22efbdcc12de8c2e59d6a328d 100644
--- a/Custom_EasyBlocks/elpa.py
+++ b/Custom_EasyBlocks/elpa.py
@@ -37,7 +37,6 @@ from easybuild.framework.easyconfig import CUSTOM
 from easybuild.tools.build_log import EasyBuildError
 from easybuild.tools.config import build_option
 from easybuild.tools.filetools import apply_regex_substitutions
-from easybuild.tools.modules import get_software_root
 from easybuild.tools.systemtools import get_cpu_features, get_shared_lib_ext
 from easybuild.tools.toolchain.compiler import OPTARCH_GENERIC
 from easybuild.tools.utilities import nub
@@ -54,7 +53,7 @@ class EB_ELPA(ConfigureMake):
         """Custom easyconfig parameters for ELPA."""
         extra_vars = {
             'auto_detect_cpu_features': [True, "Auto-detect available CPU features, and configure accordingly", CUSTOM],
-            'cuda': [True, "Enable CUDA build if CUDA is among the dependencies", CUSTOM],
+            'cuda': [None, "Enable CUDA build if CUDA is among the dependencies", CUSTOM],
             'with_shared': [True, "Enable building of shared ELPA libraries", CUSTOM],
             'with_single': [True, "Enable building of single precision ELPA functions", CUSTOM],
             'with_generic_kernel': [True, "Enable building of ELPA generic kernels", CUSTOM],
@@ -110,7 +109,6 @@ class EB_ELPA(ConfigureMake):
                     self.log.info("Enabling use of %s (should be supported based on CPU features)", flag.upper())
                     setattr(self, flag, True)
 
-
     def run_all_steps(self, *args, **kwargs):
         """
         Put configure options in place for different builds (with and without openmp).
@@ -164,18 +162,22 @@ class EB_ELPA(ConfigureMake):
             self.cfg.update('configopts', 'LIBS="$LIBLAPACK"')
 
         # Add CUDA features
-        if 'CUDA' in [i['name'] for i in self.cfg.dependencies()]:
+        cuda_is_dep = 'CUDA' in [i['name'] for i in self.cfg.dependencies()]
+        if cuda_is_dep and (self.cfg['cuda'] is None or self.cfg['cuda']):
             self.cfg.update('configopts', '--enable-nvidia-gpu')
-            cuda_cc_space_sep = self.cfg.template_values['cuda_cc_space_sep'].replace('.','').split()
+            cuda_cc_space_sep = self.cfg.template_values['cuda_cc_space_sep'].replace('.', '').split()
             # Just one is supported, so pick the highest one (but prioritize sm_80)
             selected_cc = "0"
             for cc in cuda_cc_space_sep:
                 if int(cc) > int(selected_cc) and int(selected_cc) != 80:
                     selected_cc = cc
-            self.cfg.update('configopts', f'--with-NVIDIA-GPU-compute-capability=sm_{selected_cc}')
+            self.cfg.update('configopts', '--with-NVIDIA-GPU-compute-capability=sm_%s' % selected_cc)
             if selected_cc == "80":
                 self.cfg.update('configopts', '--enable-nvidia-sm80-gpu')
-
+        elif not self.cfg['cuda']:
+            self.log.warning("CUDA is disabled")
+        elif not cuda_is_dep and self.cfg['cuda']:
+            raise EasyBuildError("CUDA is not a dependency, but support for CUDA is enabled.")
 
         # make all builds verbose
         self.cfg.update('buildopts', 'V=1')
diff --git a/Custom_EasyBlocks/lammps.py b/Custom_EasyBlocks/lammps.py
index c058e04ec1f42d715caba41dceb0e4884ff938f2..9cc640ad5d34826252b07ffb5ce5ebb6db0baa18 100644
--- a/Custom_EasyBlocks/lammps.py
+++ b/Custom_EasyBlocks/lammps.py
@@ -29,7 +29,10 @@
 @author: Alan O'Cais (Juelich Supercomputing Centre)
 """
 
+import fileinput
 import os
+import re
+import sys
 import tempfile
 
 import easybuild.tools.environment as env
@@ -141,6 +144,30 @@ class EB_LAMMPS(CMakeMake):
         extra_vars['separate_build_dir'][0] = True
         return extra_vars
 
+    def patch_step(self):
+        """
+        Changes the default SM in the wrapper. One can also specify it in the command line, but we would have to
+        distinguish between when it needs to be done and when not. Seems like changing the default is easier
+        """
+
+        nvcc_wrapper = os.path.join(os.getcwd(), "lib", "kokkos", "bin", "nvcc_wrapper")
+        cuda_cc = get_cuda_cc(self)
+        if isinstance(cuda_cc, list):
+            sm = 'sm_'+''.join(cuda_cc[0].split('.'))
+        else:
+            sm = 'sm_'+''.join(cuda_cc.split('.'))
+
+        try:
+            for line in fileinput.input(nvcc_wrapper, inplace=1, backup='.orig'):
+                line = re.sub(r"^\s*(%s\s*=\s*).*\n$" % "default_arch",
+                              r'\1"%s" # patched by EasyBuild\n' % sm,
+                              line)
+                sys.stdout.write(line)
+        except IOError as err:
+            raise EasyBuildError("Failed to patch %s in: %s", fp, err)
+
+        super(EB_LAMMPS, self).patch_step()
+
     def prepare_step(self, *args, **kwargs):
         """Custom prepare step for LAMMPS."""
         super(EB_LAMMPS, self).prepare_step(*args, **kwargs)
@@ -152,15 +179,7 @@ class EB_LAMMPS(CMakeMake):
     def configure_step(self, **kwargs):
         """Custom configuration procedure for LAMMPS."""
 
-        # list of CUDA compute capabilities to use can be specifed in two ways (where (2) overrules (1)):
-        # (1) in the easyconfig file, via the custom cuda_compute_capabilities;
-        # (2) in the EasyBuild configuration, via --cuda-compute-capabilities configuration option;
-        ec_cuda_cc = self.cfg['cuda_compute_capabilities']
-        cfg_cuda_cc = build_option('cuda_compute_capabilities')
-        if cfg_cuda_cc and not isinstance(cfg_cuda_cc, list):
-            raise EasyBuildError("cuda_compute_capabilities in easyconfig should be provided as list of strings, " +
-                                 "(for example ['8.0', '7.5']). Got %s" % cfg_cuda_cc)
-        cuda_cc = check_cuda_compute_capabilities(cfg_cuda_cc, ec_cuda_cc, cuda=self.cuda)
+        cuda_cc = get_cuda_cc(self)
 
         # cmake has its own folder
         self.cfg['srcdir'] = os.path.join(self.start_dir, 'cmake')
@@ -219,7 +238,7 @@ class EB_LAMMPS(CMakeMake):
             self.cfg.update('configopts', pkg_opt + 'on')
 
         # USER-INTEL enables optimizations on Intel processors. GCC has also partial support for some of them.
-        pkg_user_intel = '-D%sINTEL=' % PKG_USER_PREFIX
+        pkg_user_intel = '-D%sINTEL=' % PKG_PREFIX
         if pkg_user_intel not in self.cfg['configopts']:
             if self.toolchain.comp_family() in [toolchain.GCC, toolchain.INTELCOMP]:
                 self.cfg.update('configopts', pkg_user_intel + 'on')
@@ -229,7 +248,7 @@ class EB_LAMMPS(CMakeMake):
             self.cfg.update('configopts', '-DBUILD_MPI=yes')
         if self.toolchain.options.get('openmp', None):
             self.cfg.update('configopts', '-DBUILD_OMP=yes')
-            self.cfg.update('configopts', '-D%sOMP=on' % PKG_USER_PREFIX)
+            self.cfg.update('configopts', '-D%sOMP=on' % PKG_PREFIX)
 
         # FFTW
         if get_software_root("imkl") or get_software_root("FFTW"):
@@ -326,7 +345,6 @@ class EB_LAMMPS(CMakeMake):
             txt += self.module_generator.prepend_paths('PYTHONPATH', [pythonpath])
 
         txt += self.module_generator.prepend_paths('PYTHONPATH', ["lib64"])
-        txt += self.module_generator.prepend_paths('LD_LIBRARY_PATH', ["lib64"])
 
         return txt
 
@@ -435,3 +453,14 @@ def get_cpu_arch():
     if ec:
         raise EasyBuildError("Failed to determine CPU architecture: %s", out)
     return out.strip()
+
+def get_cuda_cc(self):
+    # list of CUDA compute capabilities to use can be specifed in two ways (where (2) overrules (1)):
+    # (1) in the easyconfig file, via the custom cuda_compute_capabilities;
+    # (2) in the EasyBuild configuration, via --cuda-compute-capabilities configuration option;
+    ec_cuda_cc = self.cfg['cuda_compute_capabilities']
+    cfg_cuda_cc = build_option('cuda_compute_capabilities')
+    if cfg_cuda_cc and not isinstance(cfg_cuda_cc, list):
+        raise EasyBuildError("cuda_compute_capabilities in easyconfig should be provided as list of strings, " +
+                             "(for example ['8.0', '7.5']). Got %s" % cfg_cuda_cc)
+    return check_cuda_compute_capabilities(cfg_cuda_cc, ec_cuda_cc, cuda=self.cuda)
diff --git a/Custom_EasyBlocks/numexpr.py b/Custom_EasyBlocks/numexpr.py
new file mode 100644
index 0000000000000000000000000000000000000000..dc7e301ceb4dad323b53a137f2874c1358556967
--- /dev/null
+++ b/Custom_EasyBlocks/numexpr.py
@@ -0,0 +1,129 @@
+##
+# Copyright 2019-2021 Ghent University
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be),
+# Flemish Research Foundation (FWO) (http://www.fwo.be/en)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# https://github.com/easybuilders/easybuild
+#
+# EasyBuild 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 v2.
+#
+# EasyBuild 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 EasyBuild.  If not, see <http://www.gnu.org/licenses/>.
+##
+"""
+EasyBuild support for building and installing numexpr, implemented as an easyblock
+"""
+import os
+from distutils.version import LooseVersion
+
+from easybuild.easyblocks.generic.pythonpackage import PythonPackage
+from easybuild.tools.filetools import write_file
+from easybuild.tools.modules import get_software_root, get_software_version
+from easybuild.tools.systemtools import get_cpu_features
+
+
+class EB_numexpr(PythonPackage):
+    """Support for building/installing numexpr."""
+
+    @staticmethod
+    def extra_options():
+        """Override some custom easyconfig parameters specifically for numexpr."""
+        extra_vars = PythonPackage.extra_options()
+
+        extra_vars['download_dep_fail'][0] = True
+        extra_vars['use_pip'][0] = True
+
+        return extra_vars
+
+    def __init__(self, *args, **kwargs):
+        """Initialisation of custom class variables for numexpr."""
+        super(EB_numexpr, self).__init__(*args, **kwargs)
+
+        self.imkl_root = None
+
+    def configure_step(self):
+        """Custom configuration procedure for numexpr."""
+        super(EB_numexpr, self).configure_step()
+
+        self.imkl_root = get_software_root('imkl')
+
+        # if Intel MKL is available, set up site.cfg such that the right VML library is used;
+        # this makes a *big* difference in terms of performance;
+        # see also https://github.com/pydata/numexpr/blob/master/site.cfg.example
+        if self.imkl_root:
+
+            # figure out which VML library to link to
+            cpu_features = get_cpu_features()
+            if 'avx512f' in cpu_features:
+                mkl_vml_lib = 'mkl_vml_avx512'
+            elif 'avx2' in cpu_features:
+                mkl_vml_lib = 'mkl_vml_avx2'
+            elif 'avx' in cpu_features:
+                mkl_vml_lib = 'mkl_vml_avx'
+            else:
+                # use default kernels as fallback for non-AVX systems
+                mkl_vml_lib = 'mkl_vml_def'
+
+            mkl_ver = get_software_version('imkl')
+
+            if LooseVersion(mkl_ver) >= LooseVersion('2021'):
+                mkl_lib_dirs = [
+                    os.path.join(self.imkl_root, 'mkl',
+                                 'latest', 'lib', 'intel64'),
+                ]
+                mkl_include_dirs = os.path.join(
+                    self.imkl_root, 'mkl', 'latest', 'include')
+                mkl_libs = ['mkl_intel_lp64',
+                            'mkl_intel_thread', 'mkl_core', 'iomp5']
+            else:
+                mkl_lib_dirs = [
+                    os.path.join(self.imkl_root, 'mkl', 'lib', 'intel64'),
+                    os.path.join(self.imkl_root, 'lib', 'intel64'),
+                ]
+                mkl_include_dirs = os.path.join(
+                    self.imkl_root, 'mkl', 'include')
+                mkl_libs = ['mkl_intel_lp64', 'mkl_intel_thread',
+                            'mkl_core', 'mkl_def', mkl_vml_lib, 'iomp5']
+
+            site_cfg_txt = '\n'.join([
+                "[mkl]",
+                "include_dirs = %s" % mkl_include_dirs,
+                "library_dirs = %s" % os.pathsep.join(
+                    mkl_lib_dirs + self.toolchain.get_variable('LDFLAGS', typ=list)),
+            ])
+
+            if LooseVersion(self.version) >= LooseVersion("2.8.0"):
+                site_cfg_txt = '\n'.join([
+                    site_cfg_txt,
+                    "libraries = %s" % os.pathsep.join(mkl_libs),
+                ])
+            else:
+                site_cfg_txt = '\n'.join([
+                    site_cfg_txt,
+                    "mkl_libs = %s" % ', '.join(mkl_libs),
+                ])
+            write_file('site.cfg', site_cfg_txt)
+
+    def sanity_check_step(self):
+        """Custom sanity check for numexpr."""
+
+        custom_commands = []
+
+        # if Intel MKL is available, make sure VML is used
+        if self.imkl_root:
+            custom_commands.append(
+                "python -c 'import numexpr; assert(numexpr.use_vml)'")
+
+        return super(EB_numexpr, self).sanity_check_step(custom_commands=custom_commands)
diff --git a/Custom_EasyBlocks/sundials.py b/Custom_EasyBlocks/sundials.py
new file mode 100644
index 0000000000000000000000000000000000000000..a05d08e20ddec4efc36c4879ed156057184afc5e
--- /dev/null
+++ b/Custom_EasyBlocks/sundials.py
@@ -0,0 +1,17 @@
+from easybuild.easyblocks.generic.cmakemake import CMakeMake
+from easybuild.tools.modules import get_software_root
+
+class EB_SUNDIALS(CMakeMake):     
+    """Support for building Sundials."""
+
+    def __init__(self, *args, **kwargs):
+        """Custom constructor for SuiteSparse easyblock, initialize custom class parameters."""        
+        super(EB_SUNDIALS, self).__init__(*args, **kwargs)
+
+    def configure_step(self):        
+        cuda = get_software_root('CUDA')
+        if cuda:            
+            cuda_cc_space_sep = self.cfg.template_values['cuda_cc_space_sep'].replace('.','').split()            
+            _max = max(cuda_cc_space_sep)
+            self.cfg['configopts'] += '-DCMAKE_CUDA_ARCHITECTURES=\"%s\"' %_max            
+        super(EB_SUNDIALS, self).configure_step()
diff --git a/Custom_Hooks/eb_hooks.py b/Custom_Hooks/eb_hooks.py
index e4346aa4db289d39c40661b6aa592fc9504561a6..3e3e3b931e9b32d3b02935e4c21f03c14e6a8066 100644
--- a/Custom_Hooks/eb_hooks.py
+++ b/Custom_Hooks/eb_hooks.py
@@ -237,6 +237,8 @@ def parse_hook(ec, *args, **kwargs):
 
     ec = tweak_moduleclass(ec)
 
+    ec = tweak_module_conflict_side_compilers(ec)
+
     # If we are parsing we are not searching, in this case if the easyconfig is
     # located in the search path, warn that it's dependencies will (most probably)
     # not be resolved
@@ -296,6 +298,22 @@ def tweak_moduleclass(ec):
     return ec
 
 
+def tweak_module_conflict_side_compilers(ec):
+    ec_dict = ec.asdict()
+    if ec['name'] in SIDECOMPILERS:
+        key = "modluafooter"
+        value = 'conflict(%s)' % ','.join('"'+x+'"' for x in SIDECOMPILERS)
+        if key in ec_dict:
+            if not value in ec_dict[key]:
+                ec[key] = "\n".join([ec_dict[key], value])
+        else:
+            ec[key] = value
+        ec.log.info(
+            "[parse hook] Injecting Lmod conflict property for SIDECOMPILERS")
+
+    return ec
+
+
 def inject_site_contact_and_user_labels(ec):
     ec_dict = ec.asdict()
     # Check where installations are going to go and add appropriate site contact
@@ -386,8 +404,15 @@ def inject_ucx_tweaks(ec):
     if ec.name in 'UCX' and install_path().lower().startswith('/p/software'):
         key = "modluafooter"
         value = '''
-if not ( isloaded("UCX-settings") ) then
-    load("UCX-settings")
+-- This weird construct is to prevent lmod from loading the default settings when reloading/swapping UCX
+-- Unfortunately we can't do better (like preserving the UCX transport for CUDA, since the loaded
+-- UCX-settings module is lost during the reload
+if mode()=="load" then
+    if isloaded("mpi-settings/CUDA") then
+        try_load("UCX-settings/RC-CUDA")
+    else
+        try_load("UCX-settings")
+    end
 end
         '''
         if key in ec_dict:
diff --git a/Golden_Repo/a/ADIOS2/ADIOS2-2.7.1-intel-para-2021b.eb b/Golden_Repo/a/ADIOS2/ADIOS2-2.7.1-intel-para-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..ff47b40c76d9a4ee10c67b9a5f11bb458093a8f2
--- /dev/null
+++ b/Golden_Repo/a/ADIOS2/ADIOS2-2.7.1-intel-para-2021b.eb
@@ -0,0 +1,169 @@
+easyblock = 'CMakeMake'
+
+name = 'ADIOS2'
+version = '2.7.1'
+
+homepage = 'https://www.olcf.ornl.gov/center-projects/adios/'
+description = """The Adaptable IO System (ADIOS) provides a simple,
+flexible way for scientists to describe the data in their code that may
+need to be written, read, or processed outside of the running
+simulation."""
+
+toolchain = {'name': 'intel-para', 'version': '2021b'}
+toolchainopts = {'pic': True, 'usempi': False}
+
+github_account = 'ornladios'
+source_urls = [GITHUB_SOURCE]
+sources = ['v%(version)s.tar.gz']
+patches = ['include4gcc11.patch']
+checksums = [
+    'c8e237fd51f49d8a62a0660db12b72ea5067512aa7970f3fcf80b70e3f87ca3e',
+    'ea10445fc942796568c6196a4bed7d506e8a6bf381b2a01c9bdaae38f1601ea2',
+]
+
+builddependencies = [
+    ('CMake', '3.21.1'),
+    ('pkg-config', '0.29.2'),
+]
+
+dependencies = [
+    ('Python', '3.9.6'),
+    ('SciPy-Stack', '2021b', '', ('gcccoremkl', '11.2.0-2021.4.0')),
+    ('zlib', '1.2.11'),
+    ('bzip2', '1.0.8'),
+    ('Szip', '2.1.1'),
+    ('SZ', '2.1.12'),
+    ('zfp', '0.5.5'),
+    ('Blosc', '1.21.1'),
+    ('HDF5', '1.12.1'),
+    ('mpi4py', '3.1.3'),
+    ('libpng', '1.6.37'),
+    ('ZeroMQ', '4.3.4'),
+    ('nlohmann-json', '3.10.4'),
+    ('pybind11', '2.7.1'),
+]
+
+separate_build_dir = True
+
+configopts = "-DCMAKE_VERBOSE_MAKEFILE=ON "
+
+configopts += "-DADIOS2_USE_Fortran=ON "
+configopts += "-DADIOS2_USE_MPI=ON "
+
+# Examples/Testing
+configopts += "-DADIOS2_BUILD_EXAMPLES=OFF "
+configopts += "-DADIOS2_BUILD_EXAMPLES_EXPERIMENTAL=OFF "
+configopts += "-DADIOS2_BUILD_TESTING=OFF "
+
+# Compression
+configopts += "-DADIOS2_USE_BZip2=ON "
+configopts += "-DBZIP2_DIR=${EBROOTBZIP2} "
+
+configopts += "-DADIOS2_USE_PNG=ON "
+configopts += "-DPNG_DIR=${EBROOTLIBPNG} "
+
+configopts += "-DADIOS2_USE_SZ=ON "
+configopts += "-DSZ_DIR=${EBROOTSZ} "
+
+configopts += "-DADIOS2_USE_ZFP=ON "
+configopts += "-DZFP_DIR=${EBROOTZFP} "
+
+configopts += "-DADIOS2_USE_Blosc=ON "
+configopts += "-DBLOSC_DIR=${EBROOTBLOSC} "
+
+configopts += "-DZLIB_DIR=${EBROOTZLIB} "
+configopts += "-DADIOS2_USE_MGARD=OFF "
+
+# HDF5
+configopts += "-DADIOS2_USE_HDF5=ON "
+configopts += "-DHDF5_DIR=${EBROOTHDF5} "
+
+# ZeroMQ
+configopts += "-DADIOS2_USE_ZeroMQ=ON "
+configopts += "-DZeroMQ_DIR=${EBROOTZEROMQ} "
+
+# Python
+configopts += "-DADIOS2_USE_Python=ON "
+configopts += "-DPython_DIR=${EBROOTPYTHON} "
+
+# System Virtual Shared Memory
+configopts += "-DADIOS2_USE_SysVShMem=ON "
+
+# Strong Staging Coupler
+# https://adios2.readthedocs.io/en/latest/engines/engines.html#ssc-strong-staging-coupler
+configopts += "-DADIOS2_USE_SSC=ON "
+
+# Sustainable Staging Transport
+# https://adios2.readthedocs.io/en/latest/engines/engines.html#sst-sustainable-staging-transport
+configopts += "-DADIOS2_USE_SST=ON "
+# Can optionally use LibFabric for RDMA transport: if -DLIBFABRIC_ROOT=<path> is set.
+
+# DataMan
+# https://adios2.readthedocs.io/en/latest/engines/engines.html#dataman-for-wide-area-network-data-staging
+configopts += "-DADIOS2_USE_DataMan=ON "
+
+# DataSpaces (mind. version 1.8)
+configopts += "-DADIOS2_USE_DataSpaces=OFF "
+
+# external libs
+configopts += "-DADIOS2_USE_EXTERNAL_PYBIND11=ON "
+configopts += "-Dpybind11_DIR=${EBROOTPYBIND11} "
+configopts += "-DADIOS2_USE_EXTERNAL_NLOHMANN_JSON=ON "
+configopts += "-Dnlohmann_json_DIR=${EBROOTNLOHMANNMINJSON} "
+
+# more options
+configopts += "-DADIOS2_USE_IME=OFF "
+configopts += "-DADIOS2_USE_Profiling=OFF "
+configopts += "-DADIOS2_USE_Table=OFF "
+# configopts += "-DADIOS2_USE_Endian_Reverse=ON "
+
+runtest = False
+
+# create pkgconfig files
+postinstallcmds = [
+    'mkdir %(installdir)s/lib/pkgconfig',
+    """echo -e "Name: adios2
+Description: ADIOS2 I/O library
+Version: %(version)s
+Requires: bzip2, zfp, sz, libpng, blosc
+Libs: $(%(installdir)s/bin/adios2-config --c-libs)
+Cflags: $(%(installdir)s/bin/adios2-config --c-flags)" > %(installdir)s/lib/pkgconfig/adios2.pc""",
+    """echo -e "Name: adios2_cxx
+Description: ADIOS2 I/O library (C++)
+Version: %(version)s
+Libs: $(%(installdir)s/bin/adios2-config --cxx-libs)
+Cflags: $(%(installdir)s/bin/adios2-config --cxx-flags)" > %(installdir)s/lib/pkgconfig/adios2_cxx.pc""",
+    """echo -e "Name: adios2_f
+Description: ADIOS2 I/O library (Fortran)
+Version: %(version)s
+Libs: $(%(installdir)s/bin/adios2-config --fortran-libs)
+Cflags: $(%(installdir)s/bin/adios2-config --fortran-flags)" > %(installdir)s/lib/pkgconfig/adios2_f.pc""",
+]
+
+sanity_check_paths = {
+    'files': ['bin/adios2-config', 'bin/bpls', 'bin/bp4dbg'],
+    'files': ['include/adios2.h', 'include/adios2_c.h', 'include/adios2/fortran/adios2.mod'],
+    'files': [
+        'lib64/libadios2_core.so', 'lib64/libadios2_core_mpi.so', 'lib64/cmake/adios2/adios2-config.cmake',
+        'lib64/libadios2_c.so', 'lib64/libadios2_c_mpi.so', 'lib64/libadios2_cxx11.so',
+        'lib64/libadios2_cxx11_mpi.so', 'lib64/libadios2_fortran.so', 'lib64/libadios2_fortran_mpi.so'
+    ],
+    'dirs': ['lib/python%(pyshortver)s/site-packages']
+}
+
+sanity_check_paths = {
+    'files': ['bin/adios2-config', 'bin/bpls'],
+    'dirs': ['include/adios2', 'lib/python%(pyshortver)s'],
+}
+
+modextrapaths = {
+    'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages',
+}
+
+modextravars = {
+    'ADIOS2_PKGCONFIG_LIBS': 'adios2',
+    'ADIOS2_CXX_PKGCONFIG_LIBS': 'adios2_cxx',
+    'ADIOS2_FORTRAN_PKGCONFIG_LIBS': 'adios2_f',
+}
+
+moduleclass = 'data'
diff --git a/Golden_Repo/a/AMBER/AMBER-20-gpsmkl-2021b.eb b/Golden_Repo/a/AMBER/AMBER-20-gpsmkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..b3d1e396dc2c15f6856d70fd4de96b875e115442
--- /dev/null
+++ b/Golden_Repo/a/AMBER/AMBER-20-gpsmkl-2021b.eb
@@ -0,0 +1,90 @@
+easyblock = 'CMakeMake'
+
+name = 'AMBER'
+version = '20'
+versionsuffix = '-AmberTools-21'
+
+homepage = 'http://ambermd.org'
+description = """
+AMBER: 'Assisted Model Building with Energy Refinement' is a set of molecular
+mechanics force fields and a package of molecular simulation programs.
+
+Citation:
+D.A. Case, K. Belfon, I.Y. Ben-Shalom, S.R. Brozell, D.S. Cerutti,
+T.E. Cheatham, III, V.W.D. Cruzeiro, T.A. Darden, R.E. Duke, G. Giambasu,
+M.K. Gilson, H. Gohlke, A.W. Goetz, R. Harris, S. Izadi, S.A. Izmailov,
+K. Kasavajhala, A. Kovalenko, R. Krasny, T. Kurtzman, T.S. Lee, S. LeGrand,
+P. Li, C. Lin, J. Liu, T. Luchko, R. Luo, V. Man, K.M. Merz, Y. Miao,
+O. Mikhailovskii, G. Monard, H. Nguyen, A. Onufriev, F.Pan, S. Pantano,
+R. Qi, D.R. Roe, A. Roitberg, C. Sagui, S. Schott-Verdugo, J. Shen,
+C. Simmerling, N.R.Skrynnikov, J. Smith, J. Swails, R.C. Walker, J. Wang,
+L. Wilson, R.M. Wolf, X. Wu, Y. Xiong, Y. Xue, D.M. York
+and P.A. Kollman (2020),
+AMBER 2020, University of California, San Francisco.
+"""
+
+
+toolchain = {'name': 'gpsmkl', 'version': '2021b'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('CMake', '3.21.1', '', SYSTEM),
+]
+dependencies = [
+    ('FFTW', '3.3.10'),
+    ('Python', '3.9.6'),
+    ('SciPy-Stack', '2021b', '', ('gcccoremkl', '11.2.0-2021.4.0')),
+    ('Boost', '1.78.0'),
+    ('flex', '2.6.4'),
+    ('NCCL', '2.11.4', '-CUDA-11.5'),
+]
+
+sources = [
+    'AmberTools21.tar.bz2',
+    'Amber20.tar.bz2',
+]
+patches = [
+    'fix_nmrat_error.patch',
+]
+checksums = [
+    'f55fa930598d5a8e9749e8a22d1f25cab7fcf911d98570e35365dd7f262aaafd',
+    'a4c53639441c8cc85adee397933d07856cc4a723c82c6bea585cd76c197ead75',
+    'af92af090fc4df06b504bd9aabc88f3c63b006aa15b70ee118a789ce19f60b98',
+]
+
+separate_build_dir = True
+local_build_mpi_parts = "TRUE"
+local_build_cuda_parts = "TRUE"
+local_build_cuda_nccl = "TRUE"
+
+preconfigopts = "CC=gcc && CXX=g++ && COMPILER=GNU "
+preconfigopts += " && cd %(builddir)s/amber20_src && "
+preconfigopts += " ./update_amber --update && cd ../easybuild_obj && "
+
+configopts = "-DCOMPILER=GNU -DCHECK_UPDATES=OFF -DAPPLY_UPDATES=OFF -DBUILD_GUI=FALSE "
+configopts += " -DINSTALL_TESTS=TRUE  -DMPI=%s " % local_build_mpi_parts
+configopts += " -DDOWNLOAD_MINICONDA=FALSE -DTRUST_SYSTEM_LIBS=TRUE "
+configopts += " -DCUDA=%s " % local_build_cuda_parts
+configopts += " -DNCCL=%s " % local_build_cuda_nccl
+buildopts = 'NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 \
+                           -gencode=arch=compute_75,code=sm_75 \
+                           -gencode=arch=compute_80,code=sm_80"'
+
+modextravars = {
+    'AMBERHOME': '%(installdir)s/',
+}
+
+modluafooter = '''
+add_property("arch","gpu")
+'''
+
+group = "amber"
+
+modloadmsg = '''
+The access to this software is restricted to members of the group "amber".
+The JSC has a site licence for academic users. If you would like to get
+access please see:
+"http://www.fz-juelich.de/ias/jsc/EN/Expertise/Support/Software/Chemistry/AmberConfirmationOfLicence.html"
+'''
+
+moduleclass = 'bio'
diff --git a/Golden_Repo/a/AMBER/fix_nmrat_error.patch b/Golden_Repo/a/AMBER/fix_nmrat_error.patch
new file mode 100644
index 0000000000000000000000000000000000000000..76804f018070277c9a77c09fe05a9e4c4a90ee9c
--- /dev/null
+++ b/Golden_Repo/a/AMBER/fix_nmrat_error.patch
@@ -0,0 +1,12 @@
+diff -ruN amber20_src/src/pmemd/src/cuda/gpu.cpp amber20_src1/src/pmemd/src/cuda/gpu.cpp
+--- amber20_src/src/pmemd/src/cuda/gpu.cpp	2022-02-28 12:02:56.035534480 +0100
++++ amber20_src1/src/pmemd/src/cuda/gpu.cpp	2022-02-28 12:26:15.265104588 +0100
+@@ -2849,7 +2849,7 @@
+     }
+     // torsions, resttype = 3
+     else if (resttype[i] == 3) {
+-      if (nmrat[i][0] >= 0 && nmrat[i][1] >= 0 && nmrat[i][2] >= 0 && nmrat[3] >= 0) {
++      if (nmrat[i][0] >= 0 && nmrat[i][1] >= 0 && nmrat[i][2] >= 0 && nmrat[i][3] >= 0) {
+         torsions++;
+       }
+       else {
diff --git a/Golden_Repo/a/AMD-uProf/AMD-uProf-3.4.502-GCCcore-11.2.0.eb b/Golden_Repo/a/AMD-uProf/AMD-uProf-3.4.502-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..ca81e393f2faf833b185d9a6a816db42d211ea3f
--- /dev/null
+++ b/Golden_Repo/a/AMD-uProf/AMD-uProf-3.4.502-GCCcore-11.2.0.eb
@@ -0,0 +1,51 @@
+##
+# Author:    Robert Mijakovic <robert.mijakovic@lxp.lu>
+#            Ilya Zhukov <i.zhukov@fz-juelich.de>
+##
+easyblock = 'Binary'
+
+name = 'AMD-uProf'
+version = '3.4.502'
+
+homepage = 'https://developer.amd.com/amd-uprof/'
+
+description = """AMD uProf is a performance analysis tool for applications running on Windows, Linux & FreeBSD
+ operating systems. It allows developers to better understand the runtime performance of their application and
+ to identify ways to improve its performance."""
+
+usage = """
+Provide '--disable-perfparanoid' option to your sbatch command to enable collection of required perf events.
+
+Typical workflow consists of three phases:
+
+1. Collect phase - run the application program and collect the profile data, e.g.
+   $ srun <srun_options> AMDuProfCLI collect <additional_collect_options> <program> [<args>]
+
+2. Translate phase - process the profile data to aggregate, correlate, and organize into database
+   $ AMDuProfCLI report -i <report_directory>
+
+3. Analyze phase - view and analyze the performance data to identify the bottlenecks
+   $ AMDuProf <report_directory>
+"""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['https://developer.amd.com/wordpress/media/files/']
+sources = ['AMDuProf_Linux_x64_%(version)s.tar.bz2']
+checksums = ['891463c0e4f20e1c67a145441e983c863156a52716234cd8d5a96a8d09635ba7']
+
+extract_sources = True
+
+sanity_check_paths = {
+    'files': ['include/AMDTPowerProfileApi.h', 'lib/x64/libAMDProfileController.a',
+              'bin/libAMDThreadProfileAPI.%s' % SHLIB_EXT, 'bin/AMDuProf'],
+    'dirs': ['Examples']
+}
+
+sanity_check_commands = ['AMDuProfCLI info --system']
+
+modextrapaths = {
+    'LD_LIBRARY_PATH': 'bin'
+}
+
+moduleclass = 'perf'
diff --git a/Golden_Repo/a/AMD-uProf/AMD-uProf-3.5.671-GCCcore-11.2.0.eb b/Golden_Repo/a/AMD-uProf/AMD-uProf-3.5.671-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..c0874c40b53e287a2ac5cfd30cc708bda7f7e84b
--- /dev/null
+++ b/Golden_Repo/a/AMD-uProf/AMD-uProf-3.5.671-GCCcore-11.2.0.eb
@@ -0,0 +1,53 @@
+##
+# Author:    Robert Mijakovic <robert.mijakovic@lxp.lu>
+#            Ilya Zhukov <i.zhukov@fz-juelich.de>
+##
+easyblock = 'Binary'
+
+name = 'AMD-uProf'
+version = '3.5.671'
+
+homepage = 'https://developer.amd.com/amd-uprof/'
+
+description = """AMD uProf is a performance analysis tool for applications running on Windows, Linux & FreeBSD
+ operating systems. It allows developers to better understand the runtime performance of their application and
+ to identify ways to improve its performance."""
+
+usage = """
+Provide "--disable-perfparanoid" option to your sbatch command to enable collection of required perf events.
+
+Typical workflow consists of three phases:
+Provide "--disable-perfparanoid" option to your sbatch command to enable to collect all required perf events.
+
+1. Collect phase - run the application program and collect the profile data, e.g.
+   $ srun <srun_options> AMDuProfCLI collect <additional_collect_options> <program> [<args>]
+
+2. Translate phase - process the profile data to aggregate, correlate, and organize into database
+   $ AMDuProfCLI report -i <report_directory>
+
+3. Analyze phase - view and analyze the performance data to identify the bottlenecks
+   $ AMDuProf <report_directory>
+
+"""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['https://developer.amd.com/wordpress/media/files/']
+sources = ['AMDuProf_Linux_x64_%(version)s.tar.bz2']
+checksums = ['a73066305228658a14af5ecd6cf45a1aa47ae94f7e9d14db31f43013d3ef1a43']
+
+extract_sources = True
+
+sanity_check_paths = {
+    'files': ['include/AMDTPowerProfileApi.h', 'lib/x64/libAMDProfileController.a',
+              'bin/libAMDThreadProfileAPI.%s' % SHLIB_EXT, 'bin/AMDuProf'],
+    'dirs': ['Examples']
+}
+
+sanity_check_commands = ['AMDuProfCLI info --system']
+
+modextrapaths = {
+    'LD_LIBRARY_PATH': 'bin'
+}
+
+moduleclass = 'perf'
diff --git a/Golden_Repo/a/AOCC/AOCC-3.2.0-GCCcore-11.2.0.eb b/Golden_Repo/a/AOCC/AOCC-3.2.0-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..de77f0ac9a63b700ec9e072c45114003015fac49
--- /dev/null
+++ b/Golden_Repo/a/AOCC/AOCC-3.2.0-GCCcore-11.2.0.eb
@@ -0,0 +1,24 @@
+name = 'AOCC'
+version = '3.2.0'
+
+homepage = 'https://developer.amd.com/amd-aocc/'
+description = "AMD Optimized C/C++ & Fortran compilers (AOCC) based on LLVM 13.0"
+
+# Clang also depends on libstdc++ during runtime, but this dependency is
+# already specified as the toolchain.
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['http://developer.amd.com/wordpress/media/files/']
+sources = ['aocc-compiler-%(version)s.tar']
+checksums = ['8493525b3df77f48ee16f3395a68ad4c42e18233a44b4d9282b25dbb95b113ec']
+
+clangversion = '13.0.0'
+
+dependencies = [
+    ('binutils', '2.37'),
+    ('ncurses', '6.2'),
+    ('zlib', '1.2.11'),
+    ('libxml2', '2.9.10'),
+]
+
+moduleclass = 'compiler'
diff --git a/Golden_Repo/b/bokeh/bokeh-2.4.1-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/b/bokeh/bokeh-2.4.1-gcccoremkl-11.2.0-2021.4.0.eb
index 97cbb39f3b45785bc9f2c6578fa5001a9f33391f..7564c979a374e241eb0e8a84e10d0d2ec2d13f16 100644
--- a/Golden_Repo/b/bokeh/bokeh-2.4.1-gcccoremkl-11.2.0-2021.4.0.eb
+++ b/Golden_Repo/b/bokeh/bokeh-2.4.1-gcccoremkl-11.2.0-2021.4.0.eb
@@ -12,7 +12,7 @@ toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
 dependencies = [
     ('Python', '3.9.6'),
     ('PyYAML', '5.4.1'),
-    ('Pillow-SIMD', '8.3.1'),
+    ('Pillow-SIMD', '9.0.1'),
     ('SciPy-bundle', '2021.10'),
     ('typing-extensions', '3.10.0.0'),
 ]
diff --git a/Golden_Repo/c/CGAL/CGAL-5.2-gpsmpi-2021b.eb b/Golden_Repo/c/CGAL/CGAL-5.2-GCCcore-11.2.0.eb
similarity index 93%
rename from Golden_Repo/c/CGAL/CGAL-5.2-gpsmpi-2021b.eb
rename to Golden_Repo/c/CGAL/CGAL-5.2-GCCcore-11.2.0.eb
index cbd4e021d1d54d971fc63158f7d3941369abe281..ceec52409069d465b3778a8c8c4d8a93857bbb40 100644
--- a/Golden_Repo/c/CGAL/CGAL-5.2-gpsmpi-2021b.eb
+++ b/Golden_Repo/c/CGAL/CGAL-5.2-GCCcore-11.2.0.eb
@@ -7,7 +7,7 @@ description = """The goal of the CGAL Open Source Project is to provide easy acc
  """
 
 
-toolchain = {'name': 'gpsmpi', 'version': '2021b'}
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
 toolchainopts = {'strict': True}
 
 source_urls = [
@@ -18,6 +18,7 @@ checksums = ['744c86edb6e020ab0238f95ffeb9cf8363d98cde17ebb897d3ea93dac4145923']
 builddependencies = [
     ('CMake', '3.21.1', '', SYSTEM),
     ('Eigen', '3.3.9'),
+    ('binutils', '2.37'),
 ]
 
 dependencies = [
diff --git a/Golden_Repo/c/CP2K/CP2K-8.2.0-intel-para-2021b.eb b/Golden_Repo/c/CP2K/CP2K-8.2.0-intel-para-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..250241c881ac12fd4f2a48407c3e542a115cffc8
--- /dev/null
+++ b/Golden_Repo/c/CP2K/CP2K-8.2.0-intel-para-2021b.eb
@@ -0,0 +1,94 @@
+name = 'CP2K'
+version = '8.2.0'
+
+homepage = 'http://www.cp2k.org/'
+description = """CP2K is a freely available (GPL) program, written in Fortran 95, to perform atomistic and molecular
+ simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different
+ methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and
+ classical pair and many-body potentials. 
+ The default eigensolver is set to Scalapack. This setting can be overridden by specifiying 
+ PREFERRED_DIAG_LIBRARY ELPA in the global section of the cp2k input. Note, that application-dependent 
+ - in particular for small basis sizes - the use of the ELPA eigensolver library can cause dead-locks:
+ the program might be killed with a corresponding message from the MPI library ( parastation mpi) 
+ or even hang (openmpi). The user is advised to check whether the particular application is prone to 
+ deadlocks if ELPA is switched on.
+ The Libvori library for  Voronoi integration and the BQB compressed volumetric trajectory data is included
+ (https://brehm-research.de/voronoi, https://brehm-research.de/bqb).
+ Tree-Monte-Carlo is disfunctional;
+"""
+
+toolchain = {'name': 'intel-para', 'version': '2021b'}
+toolchainopts = {'pic': True, 'openmp': True}
+
+local_dbcsr_version = '2.1.0m'
+local_libvori_version = '-210412'
+
+sources = [
+    'v%(version)s.tar.gz',
+    'v%s.tar.gz' % local_dbcsr_version,
+    'libvori%s.tar.gz' % local_libvori_version,
+]
+source_urls = [
+    'https://github.com/cp2k/cp2k/archive/',
+    'https://github.com/cp2k/dbcsr/archive/'
+]
+
+patches = [
+    'CP2K-8.2_fftw3_lib.patch',
+    'CP2K-8.2_elpa.patch',
+]
+
+checksums = [
+    'd82c554e764dc16f94c1f671d0cf6523be58360bf9a2d2cbabbad0e73fbcffb2',
+    'ba6b53dae5afaccd5d80199c61989ab34405608b50bef16577f780a86518e6b8',
+    '331886aea9d093d8c44b95a07fab13d47f101b1f94a0640d7d670eb722bf90ac',
+    'a8f484930953c3689b4bffbb45d1d3e9abec69a7425b79dfb2d2b64459359c97',
+    '33c765f5e119541d943c0d9386059e1ef6f82ca1f2e9490adeca6b86656b5b2d'
+]
+
+dependencies = [
+    ('ELPA', '2021.11.001'),
+    ('Libint', '2.7.0-beta.6', '_cp2k_lmax5', ('intel-compilers', '2021.4.0')),
+    ('libxsmm', '1.16.3', '', ('intel-compilers', '2021.4.0')),
+    ('libxc', '5.1.7', '', ('intel-compilers', '2021.4.0')),
+    ('FFTW', '3.3.10'),
+    ('PLUMED', '2.7.2'),
+]
+
+builddependencies = [
+    ('flex', '2.6.4'),
+    ('Bison', '3.7.6'),
+    ('CMake', '3.21.1'),
+    ('Python', '3.9.6', '', ('GCCcore', '11.2.0')),
+]
+
+
+# Add PLUMED support
+plumed = True
+
+# Disable CUDA
+cuda = False
+
+# explicit unrolled loops up to __MAX_CONTR, 4 gives excessive compiler times
+configopts = '-D__MAX_CONTR=3'
+
+# popt or psmp
+type = 'psmp'
+
+# run tests separately (2 nodes of juwels approx 1 hour)
+runtest = False
+
+# which dbcsr_version
+dbcsr_version = '2.1.0'
+
+# additional DFLAGS
+extradflags = '-D__MKL -D__LIBVORI'
+
+# regression test reports failures
+ignore_regtest_fails = False
+
+modextravars = {
+    'CP2K_DATA_DIR': '%(installdir)s/data',
+}
+
+moduleclass = 'chem'
diff --git a/Golden_Repo/c/CP2K/CP2K-8.2.0-iomkl-2021b.eb b/Golden_Repo/c/CP2K/CP2K-8.2.0-iomkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..19d13eccc77029510878edd888e890b9c1404fb6
--- /dev/null
+++ b/Golden_Repo/c/CP2K/CP2K-8.2.0-iomkl-2021b.eb
@@ -0,0 +1,94 @@
+name = 'CP2K'
+version = '8.2.0'
+
+homepage = 'http://www.cp2k.org/'
+description = """CP2K is a freely available (GPL) program, written in Fortran 95, to perform atomistic and molecular
+ simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different
+ methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and
+ classical pair and many-body potentials. 
+ The default eigensolver is set to Scalapack. This setting can be overridden by specifiying 
+ PREFERRED_DIAG_LIBRARY ELPA in the global section of the cp2k input. Note, that application-dependent 
+ - in particular for small basis sizes - the use of the ELPA eigensolver library can cause dead-locks:
+ the program might be killed with a corresponding message from the MPI library ( parastation mpi) 
+ or even hang (openmpi). The user is advised to check whether the particular application is prone to 
+ deadlocks if ELPA is switched on.
+ The Libvori library for  Voronoi integration and the BQB compressed volumetric trajectory data is included
+ (https://brehm-research.de/voronoi, https://brehm-research.de/bqb).
+ Tree-Monte-Carlo is disfunctional;
+"""
+
+toolchain = {'name': 'iomkl', 'version': '2021b'}
+toolchainopts = {'pic': True, 'openmp': True}
+
+local_dbcsr_version = '2.1.0m'
+local_libvori_version = '-210412'
+
+sources = [
+    'v%(version)s.tar.gz',
+    'v%s.tar.gz' % local_dbcsr_version,
+    'libvori%s.tar.gz' % local_libvori_version,
+]
+source_urls = [
+    'https://github.com/cp2k/cp2k/archive/',
+    'https://github.com/cp2k/dbcsr/archive/'
+]
+
+patches = [
+    'CP2K-8.2_fftw3_lib.patch',
+    'CP2K-8.2_elpa.patch',
+]
+
+checksums = [
+    'd82c554e764dc16f94c1f671d0cf6523be58360bf9a2d2cbabbad0e73fbcffb2',
+    'ba6b53dae5afaccd5d80199c61989ab34405608b50bef16577f780a86518e6b8',
+    '331886aea9d093d8c44b95a07fab13d47f101b1f94a0640d7d670eb722bf90ac',
+    'a8f484930953c3689b4bffbb45d1d3e9abec69a7425b79dfb2d2b64459359c97',
+    '33c765f5e119541d943c0d9386059e1ef6f82ca1f2e9490adeca6b86656b5b2d'
+]
+
+dependencies = [
+    ('ELPA', '2021.11.001'),
+    ('Libint', '2.7.0-beta.6', '_cp2k_lmax5', ('intel-compilers', '2021.4.0')),
+    ('libxsmm', '1.16.3', '', ('intel-compilers', '2021.4.0')),
+    ('libxc', '5.1.7', '', ('intel-compilers', '2021.4.0')),
+    ('FFTW', '3.3.10'),
+    ('PLUMED', '2.7.2'),
+]
+
+builddependencies = [
+    ('flex', '2.6.4'),
+    ('Bison', '3.7.6'),
+    ('CMake', '3.21.1'),
+    ('Python', '3.9.6', '', ('GCCcore', '11.2.0')),
+]
+
+
+# Add PLUMED support
+plumed = True
+
+# Disable CUDA
+cuda = False
+
+# explicit unrolled loops up to __MAX_CONTR, 4 gives excessive compiler times
+configopts = '-D__MAX_CONTR=3'
+
+# popt or psmp
+type = 'psmp'
+
+# run tests separately (2 nodes of juwels approx 1 hour)
+runtest = False
+
+# which dbcsr_version
+dbcsr_version = '2.1.0'
+
+# additional DFLAGS
+extradflags = '-D__MKL -D__LIBVORI'
+
+# regression test reports failures
+ignore_regtest_fails = False
+
+modextravars = {
+    'CP2K_DATA_DIR': '%(installdir)s/data',
+}
+
+moduleclass = 'chem'
diff --git a/Golden_Repo/c/CP2K/CP2K-9.1.0-intel-para-2021b.eb b/Golden_Repo/c/CP2K/CP2K-9.1.0-intel-para-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..3ce9ed501b7ba83dbc7cd2f61103317de5437c48
--- /dev/null
+++ b/Golden_Repo/c/CP2K/CP2K-9.1.0-intel-para-2021b.eb
@@ -0,0 +1,95 @@
+name = 'CP2K'
+version = '9.1.0'
+
+homepage = 'http://www.cp2k.org/'
+description = """CP2K is a freely available (GPL) program, written in Fortran 95, to perform atomistic and molecular
+ simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different
+ methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and
+ classical pair and many-body potentials. 
+ The default eigensolver is set to Scalapack. This setting can be overridden by specifiying 
+ PREFERRED_DIAG_LIBRARY ELPA in the global section of the cp2k input. Note, that application-dependent 
+ - in particular for small basis sizes - the use of the ELPA eigensolver library can cause dead-locks:
+ the program might be killed with a corresponding message from the MPI library ( parastation mpi) 
+ or even hang (openmpi). The user is advised to check whether the particular application is prone to 
+ deadlocks if ELPA is switched on.
+ The Libvori library for  Voronoi integration and the BQB compressed volumetric trajectory data is included
+ (https://brehm-research.de/voronoi, https://brehm-research.de/bqb).
+ Tree-Monte-Carlo is disfunctional; this is the hybrid MPI/OpenMP version of CP2K.
+"""
+
+toolchain = {'name': 'intel-para', 'version': '2021b'}
+toolchainopts = {'pic': True, 'openmp': True}
+
+# which dbcsr_version
+dbcsr_version = '2.2.0'
+local_libvori_version = '-210412'
+
+sources = [
+    'v%(version)s.tar.gz',
+    'v%s.tar.gz' % dbcsr_version,
+    'libvori%s.tar.gz' % local_libvori_version,
+]
+source_urls = [
+    'https://github.com/cp2k/cp2k/archive/',
+    'https://github.com/cp2k/dbcsr/archive/'
+]
+
+patches = [
+    'CP2K-9.1_fftw3_lib.patch',
+    'CP2K-9.1_elpa.patch',
+    'CP2K-9.1_dbcsr.patch',
+]
+
+checksums = [
+    'e0cd859e506435a38454eeaaa3bc2c1656ffd5d22698062957c84f8b4f426126',
+    '96ce3c630b78529b9cf063b6d710a682a9c6702a6e74d642e7f469d754f954a5',
+    '331886aea9d093d8c44b95a07fab13d47f101b1f94a0640d7d670eb722bf90ac',
+    '1b7674b0046d329f9913ed99e92b53481e878a04a4856c817228d4816d0ea624',
+    '33c765f5e119541d943c0d9386059e1ef6f82ca1f2e9490adeca6b86656b5b2d',
+    'c480c46d31290056079f6a9d5fa17454d34169d1a7850af22378dd794257c3b7'
+]
+
+dependencies = [
+    ('ELPA', '2021.11.001'),
+    ('Libint', '2.7.0-beta.6', '_cp2k_lmax5', ('intel-compilers', '2021.4.0')),
+    ('libxsmm', '1.16.3', '', ('intel-compilers', '2021.4.0')),
+    ('libxc', '5.1.7', '', ('intel-compilers', '2021.4.0')),
+    ('FFTW', '3.3.10'),
+    ('PLUMED', '2.7.2'),
+]
+
+builddependencies = [
+    ('flex', '2.6.4'),
+    ('Bison', '3.7.6'),
+    ('CMake', '3.21.1'),
+    ('Python', '3.9.6', '', ('GCCcore', '11.2.0')),
+]
+
+
+# Add PLUMED support
+plumed = True
+
+# Disable CUDA
+cuda = False
+
+# explicit unrolled loops up to __MAX_CONTR, 4 gives excessive compiler times
+configopts = '-D__MAX_CONTR=3'
+
+# popt or psmp
+type = 'psmp'
+
+# run tests separately (2 nodes of juwels approx 1 hour)
+runtest = False
+
+
+# additional DFLAGS
+extradflags = '-D__MKL -D__LIBVORI'
+
+# regression test reports failures
+ignore_regtest_fails = False
+
+modextravars = {
+    'CP2K_DATA_DIR': '%(installdir)s/data',
+}
+
+moduleclass = 'chem'
diff --git a/Golden_Repo/c/CP2K/CP2K-9.1.0-iomkl-2021b.eb b/Golden_Repo/c/CP2K/CP2K-9.1.0-iomkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..c2a37d0c33b8a399ec3eadaf65ebcc9fe73805c2
--- /dev/null
+++ b/Golden_Repo/c/CP2K/CP2K-9.1.0-iomkl-2021b.eb
@@ -0,0 +1,95 @@
+name = 'CP2K'
+version = '9.1.0'
+
+homepage = 'http://www.cp2k.org/'
+description = """CP2K is a freely available (GPL) program, written in Fortran 95, to perform atomistic and molecular
+ simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different
+ methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and
+ classical pair and many-body potentials. 
+ The default eigensolver is set to Scalapack. This setting can be overridden by specifiying 
+ PREFERRED_DIAG_LIBRARY ELPA in the global section of the cp2k input. Note, that application-dependent 
+ - in particular for small basis sizes - the use of the ELPA eigensolver library can cause dead-locks:
+ the program might be killed with a corresponding message from the MPI library ( parastation mpi) 
+ or even hang (openmpi). The user is advised to check whether the particular application is prone to 
+ deadlocks if ELPA is switched on.
+ The Libvori library for  Voronoi integration and the BQB compressed volumetric trajectory data is included
+ (https://brehm-research.de/voronoi, https://brehm-research.de/bqb).
+ Tree-Monte-Carlo is disfunctional; this is the hybrid MPI/OpenMP version of CP2K.
+"""
+
+toolchain = {'name': 'iomkl', 'version': '2021b'}
+toolchainopts = {'pic': True, 'openmp': True}
+
+# which dbcsr_version
+dbcsr_version = '2.2.0'
+local_libvori_version = '-210412'
+
+sources = [
+    'v%(version)s.tar.gz',
+    'v%s.tar.gz' % dbcsr_version,
+    'libvori%s.tar.gz' % local_libvori_version,
+]
+source_urls = [
+    'https://github.com/cp2k/cp2k/archive/',
+    'https://github.com/cp2k/dbcsr/archive/'
+]
+
+patches = [
+    'CP2K-9.1_fftw3_lib.patch',
+    'CP2K-9.1_elpa.patch',
+    'CP2K-9.1_dbcsr.patch',
+]
+
+checksums = [
+    'e0cd859e506435a38454eeaaa3bc2c1656ffd5d22698062957c84f8b4f426126',
+    '96ce3c630b78529b9cf063b6d710a682a9c6702a6e74d642e7f469d754f954a5',
+    '331886aea9d093d8c44b95a07fab13d47f101b1f94a0640d7d670eb722bf90ac',
+    '1b7674b0046d329f9913ed99e92b53481e878a04a4856c817228d4816d0ea624',
+    '33c765f5e119541d943c0d9386059e1ef6f82ca1f2e9490adeca6b86656b5b2d',
+    'c480c46d31290056079f6a9d5fa17454d34169d1a7850af22378dd794257c3b7'
+]
+
+dependencies = [
+    ('ELPA', '2021.11.001'),
+    ('Libint', '2.7.0-beta.6', '_cp2k_lmax5', ('intel-compilers', '2021.4.0')),
+    ('libxsmm', '1.16.3', '', ('intel-compilers', '2021.4.0')),
+    ('libxc', '5.1.7', '', ('intel-compilers', '2021.4.0')),
+    ('FFTW', '3.3.10'),
+    ('PLUMED', '2.7.2'),
+]
+
+builddependencies = [
+    ('flex', '2.6.4'),
+    ('Bison', '3.7.6'),
+    ('CMake', '3.21.1'),
+    ('Python', '3.9.6', '', ('GCCcore', '11.2.0')),
+]
+
+
+# Add PLUMED support
+plumed = True
+
+# Disable CUDA
+cuda = False
+
+# explicit unrolled loops up to __MAX_CONTR, 4 gives excessive compiler times
+configopts = '-D__MAX_CONTR=3'
+
+# popt or psmp
+type = 'psmp'
+
+# run tests separately (2 nodes of juwels approx 1 hour)
+runtest = False
+
+
+# additional DFLAGS
+extradflags = '-D__MKL -D__LIBVORI'
+
+# regression test reports failures
+ignore_regtest_fails = False
+
+modextravars = {
+    'CP2K_DATA_DIR': '%(installdir)s/data',
+}
+
+moduleclass = 'chem'
diff --git a/Golden_Repo/c/Cartopy/Cartopy-0.20.0-GCCcore-11.2.0.eb b/Golden_Repo/c/Cartopy/Cartopy-0.20.0-GCCcore-11.2.0.eb
index 532e489bdc4f0a6c110374adbdaa9f4486aceee1..edaaf6e9777830d220327db79587ab41a6261f6a 100644
--- a/Golden_Repo/c/Cartopy/Cartopy-0.20.0-GCCcore-11.2.0.eb
+++ b/Golden_Repo/c/Cartopy/Cartopy-0.20.0-GCCcore-11.2.0.eb
@@ -20,7 +20,7 @@ dependencies = [
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('Shapely', '1.8.0'),
     ('lxml', '4.6.3'),
-    ('Pillow-SIMD', '8.3.1'),
+    ('Pillow-SIMD', '9.0.1'),
     ('PROJ', '8.1.0'),
     ('PyYAML', '5.4.1'),
 ]
diff --git a/Golden_Repo/c/Clang/Clang-13.0.1-GCCcore-11.2.0.eb b/Golden_Repo/c/Clang/Clang-13.0.1-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..135209dc002389aac79d8516ce323b6ca860eb65
--- /dev/null
+++ b/Golden_Repo/c/Clang/Clang-13.0.1-GCCcore-11.2.0.eb
@@ -0,0 +1,111 @@
+# For using $SYSTEMNAME to determine compute capability. The local prefix is to appease the checker
+import os as local_os
+
+##
+# This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild
+#
+# Copyright:: Copyright 2013-2015 Dmitri Gribenko, Ward Poelmans
+# Authors:: Dmitri Gribenko <gribozavr@gmail.com>
+# Authors:: Ward Poelmans <wpoely86@gmail.com>
+# License:: GPLv2 or later, MIT, three-clause BSD.
+# $Id$
+##
+
+name = 'Clang'
+version = '13.0.1'
+
+homepage = 'https://clang.llvm.org/'
+description = """C, C++, Objective-C compiler, based on LLVM.  Does not
+ include C++ standard library -- use libstdc++ from GCC."""
+
+# Clang also depends on libstdc++ during runtime, but this dependency is
+# already specified as the toolchain.
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = [
+    "https://github.com/llvm/llvm-project/releases/download/llvmorg-%(version)s"]
+sources = [
+    'llvm-%(version)s.src.tar.xz',
+    'clang-%(version)s.src.tar.xz',
+    'compiler-rt-%(version)s.src.tar.xz',
+    'polly-%(version)s.src.tar.xz',
+    'openmp-%(version)s.src.tar.xz',
+    # Also include the LLVM linker
+    'lld-%(version)s.src.tar.xz',
+    'libcxx-%(version)s.src.tar.xz',
+    'libcxxabi-%(version)s.src.tar.xz',
+    'clang-tools-extra-%(version)s.src.tar.xz',
+    'libunwind-%(version)s.src.tar.xz',
+]
+checksums = [
+    # llvm-13.0.1.src.tar.xz
+    'ec6b80d82c384acad2dc192903a6cf2cdbaffb889b84bfb98da9d71e630fc834',
+    # clang-13.0.1.src.tar.xz
+    '787a9e2d99f5c8720aa1773e4be009461cd30d3bd40fdd24591e473467c917c9',
+    # compiler-rt-13.0.1.src.tar.xz
+    '7b33955031f9a9c5d63077dedb0f99d77e4e7c996266952c1cec55626dca5dfc',
+    # polly-13.0.1.src.tar.xz
+    'f4003e03da57b53bf206faadd0cf53f7b198c38498c605dec45743db23c10ad0',
+    # openmp-13.0.1.src.tar.xz
+    '6b79261371616c31fea18cd3ee1797c79ee38bcaf8417676d4fa366a24c96b4f',
+    # lld-13.0.1.src.tar.xz
+    '666af745e8bf7b680533b4d18b7a31dc7cab575b1e6e4d261922bbafd9644cfb',
+    # libcxx-13.0.1.src.tar.xz
+    '2f446acc00bb7cfb4e866c2fa46d1b6dbf4e7d2ab62e3c3d84e56f7b9e28110f',
+    # libcxxabi-13.0.1.src.tar.xz
+    'db5fa6093c786051e8b1c85527240924eceb6c95eeff0a2bbc57be8422b3cef1',
+    # clang-tools-extra-13.0.1.src.tar.xz
+    'cc2bc8598848513fa2257a270083e986fd61048347eccf1d801926ea709392d0',
+    # libunwind-13.0.1.src.tar.xz
+    'e206dbf1bbe058a113bffe189386ded99a160b2443ee1e2cd41ff810f78551ba',
+]
+
+dependencies = [
+    # since Clang is a compiler, binutils is a runtime dependency too
+    ('binutils', '2.37'),
+    ('hwloc', '2.5.0'),
+    ('libxml2', '2.9.10'),
+    ('ncurses', '6.2'),
+    ('GMP', '6.2.1'),
+    ('Z3', '4.8.12'),
+]
+
+builddependencies = [
+    ('CMake', '3.21.1'),
+    ('Python', '3.9.6'),
+    ('Perl', '5.34.0'),
+    ('elfutils', '0.185'),
+]
+
+default_cuda_capability = {
+    'juwels': '7.0',
+    'juwelsbooster': '8.0',
+    'jurecadc': '8.0',
+    'jusuf': '7.0',
+    'hdfml': '7.0'
+}[local_os.environ['SYSTEMNAME']]
+
+configopts = '-DLIBOMP_INSTALL_ALIASES=OFF'
+
+assertions = True
+usepolly = True
+build_lld = True
+libcxx = True
+enable_rtti = True
+build_extra_clang_tools = True
+
+skip_all_tests = True
+
+sanity_check_paths = {
+    'files': ['bin/clang', 'bin/clang++', 'bin/llvm-ar', 'bin/llvm-nm',
+              'bin/llvm-as', 'bin/opt', 'bin/llvm-link', 'bin/llvm-config',
+              'bin/llvm-symbolizer', 'include/llvm-c/Core.h', 'include/clang-c/Index.h',
+              'lib/libclang.so', 'lib/clang/13.0.1/include/stddef.h', 'bin/scan-build',
+              'bin/scan-view', 'bin/clang-tidy', 'lib/LLVMPolly.so', 'bin/lld',
+              'lib/libc++.so', 'lib/libc++abi.so', 'lib/libomp.so',
+              'lib/clang/13.0.1/include/omp.h', 'lib/libomptarget.so',
+              'lib/libomptarget.rtl.cuda.so', 'lib/libomptarget.rtl.x86_64.so'],
+    'dirs': ['include/clang', 'include/llvm', 'lib/clang/13.0.1/lib', 'include/polly'],
+}
+
+moduleclass = 'sidecompiler'
diff --git a/Golden_Repo/c/Code_Saturne/Code_Saturne-7.0.2-gpsmkl-2021b.eb b/Golden_Repo/c/Code_Saturne/Code_Saturne-7.0.2-gpsmkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..f1d1254fe7718d4777646c3289589d1f0015fad5
--- /dev/null
+++ b/Golden_Repo/c/Code_Saturne/Code_Saturne-7.0.2-gpsmkl-2021b.eb
@@ -0,0 +1,55 @@
+# easyconfig file for Code_Saturne
+name = 'Code_Saturne'
+version = '7.0.2'
+
+# extra option for the SLURM batch system
+slurm = True
+
+homepage = 'https://www.code-saturne.org'
+description = """
+Code_saturne is the free, open-source software developed to analyze CFD applications.
+It solves the Navier-Stokes equations for 2D, 2D-axisymmetric and 3D flows, steady or
+unsteady, laminar or turbulent, incompressible or weakly dilatable, isothermal or not,
+with scalar transport.
+
+Code_Saturne %(version)s%(versionsuffix)s is installed in
+$EBROOTCODE_SATURNE
+"""
+
+toolchain = {'name': 'gpsmkl', 'version': '2021b'}
+toolchainopts = {'optarch': True, 'pic': True, 'usempi': True}
+
+source_urls = ['https://github.com/code-saturne/code_saturne/archive/refs/tags/']
+sources = ['v%(version)s.tar.gz']
+checksums = ['639879201b42fa5e47ef5acc797a61deadac9d2a6ad82fbb192ebccaa75a0c43']
+
+builddependencies = [
+    ('Autotools', '20210726', '', SYSTEM),
+    ('gettext', '0.21', '', SYSTEM),
+    ('Bison', '3.7.6', '', SYSTEM),
+    ('flex', '2.6.4', '', SYSTEM),
+    ('texlive', '20200406'),
+    ('Doxygen', '1.9.1'),
+]
+
+dependencies = [
+    ('Python', '3.9.6'),
+    ('HDF5', '1.12.1'),
+    ('CGNS', '4.2.0'),
+    ('ParMETIS', '4.0.3'),
+    ('SCOTCH', '6.1.2'),
+    ('MED', '4.1.0'),
+    ('PyQt5', '5.15.4'),
+]
+
+configopts = '--with-med=$EBROOTMED --without-medcoupling '
+configopts += '--with-cgns=$EBROOTCGNS '
+configopts += '--with-metis=$EBROOTPARMETIS '
+configopts += '--with-scotch=$EBROOTSCOTCH '
+configopts += '--with-python_prefix=%(installdir)s --with-python_exec_prefix=%(installdir)s '
+
+modloadmsg = "To benefit from shell completion for %(name)s commands and\n"
+modloadmsg += "options, you may also source a bash completion file by;\n"
+modloadmsg += "source $CS_BASH\n"
+
+moduleclass = 'cae'
diff --git a/Golden_Repo/c/Colmap/Colmap-3.7-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/c/Colmap/Colmap-3.7-gcccoremkl-11.2.0-2021.4.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..e2a6ee22ea6ca88adf3d729dee8ca89bb6c8dc4c
--- /dev/null
+++ b/Golden_Repo/c/Colmap/Colmap-3.7-gcccoremkl-11.2.0-2021.4.0.eb
@@ -0,0 +1,48 @@
+easyblock = 'CMakeMake'
+
+name = 'Colmap'
+version = '3.7'
+
+homepage = 'https://colmap.github.io'
+description = """COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MVS) pipeline
+with a graphical and command-line interface.
+"""
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+toolchainopts = {'cstd': 'c++14'}
+
+github_account = 'colmap'
+source_urls = [GITHUB_SOURCE]
+sources = ['%(version)s.tar.gz']
+checksums = ['ceb7cca204550d65b890cd0082c66f4bc69193daf9da64616d8147a46b76cc55']
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('CMake', '3.21.1'),
+]
+
+dependencies = [
+    ('Eigen', '3.3.9'),
+    ('Boost', '1.78.0'),
+    ('gflags', '2.2.2'),
+    ('glog', '0.5.0'),
+    ('SuiteSparse', '5.10.1', '-nompi'),
+    ('CGAL', '5.2'),
+    ('ceres-solver', '2.0.0'),
+    ('FreeImage', '3.18.0'),
+    ('CUDA', '11.5', '', SYSTEM),
+    ('OpenGL', '2021b'),
+    ('Qt5', '5.15.2'),
+]
+
+configopts = "-DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF "
+configopts += "-DCUDA_ENABLED=ON "
+configopts += "-DCUDA_ARCHS='%(cuda_cc_space_sep)s' "
+configopts += "-DCUDA_NVCC_FLAGS='--std c++14' "
+
+sanity_check_paths = {
+    'files': ['bin/colmap', 'lib/colmap/libcolmap.a'],
+    'dirs': [],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/c/ccache/ccache-4.5.1.eb b/Golden_Repo/c/ccache/ccache-4.3.eb
similarity index 88%
rename from Golden_Repo/c/ccache/ccache-4.5.1.eb
rename to Golden_Repo/c/ccache/ccache-4.3.eb
index 5e1f8b66ceaea21851fd5347038ea127fa6c82c9..41469a2e9fb9dcbacac032f2469b310f4b281191 100644
--- a/Golden_Repo/c/ccache/ccache-4.5.1.eb
+++ b/Golden_Repo/c/ccache/ccache-4.3.eb
@@ -5,17 +5,15 @@
 easyblock = 'CMakeNinja'
 
 name = 'ccache'
-version = '4.5.1'
+version = '4.3'
 
 homepage = 'https://ccache.dev/'
 description = """Ccache (or “ccache”) is a compiler cache. It speeds up recompilation by
 caching previous compilations and detecting when the same compilation is being done again"""
 
-
 toolchain = SYSTEM
 
-source_urls = [
-    'https://github.com/ccache/ccache/releases/download/v%(version)s/']
+source_urls = ['https://github.com/ccache/ccache/releases/download/v%(version)s/']
 sources = [SOURCE_TAR_GZ]
 checksums = ['b9789c42e52c73e99428f311a34def9ffec3462736439afd12dbacc7987c1533']
 
@@ -24,7 +22,7 @@ osdependencies = [('glibc-static', 'libc6-dev')]
 local_gccver = '11.2.0'
 builddependencies = [
     ('GCC', local_gccver),
-    ('CMake', '3.21.1', '', SYSTEM),
+    ('CMake', '3.21.1', '', ('GCCcore', local_gccver)),
     ('Ninja', '1.10.2', '', ('GCCcore', local_gccver)),
     ('zstd', '1.5.0', '', ('GCCcore', local_gccver)),
 ]
diff --git a/Golden_Repo/c/ceres-solver/ceres-solver-2.0.0-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/c/ceres-solver/ceres-solver-2.0.0-gcccoremkl-11.2.0-2021.4.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..6b5de316ca75467a0661a3134854e2e17eae48dd
--- /dev/null
+++ b/Golden_Repo/c/ceres-solver/ceres-solver-2.0.0-gcccoremkl-11.2.0-2021.4.0.eb
@@ -0,0 +1,38 @@
+easyblock = 'CMakeMake'
+
+name = 'ceres-solver'
+version = '2.0.0'
+
+homepage = 'http://ceres-solver.org'
+description = """
+Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems.
+"""
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+toolchainopts = {'pic': True}
+
+source_urls = ['http://ceres-solver.org/']
+sources = ['%(name)s-%(version)s.tar.gz']
+checksums = ['10298a1d75ca884aa0507d1abb0e0f04800a92871cd400d4c361b56a777a7603']
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('CMake', '3.21.1', '', SYSTEM)
+]
+
+dependencies = [
+    ('Eigen', '3.3.9'),
+    ('SuiteSparse', '5.10.1', '-nompi'),  # ('gcccoremkl', '11.2.0-2021.4.0')),
+    ('gflags', '2.2.2'),
+    ('glog', '0.5.0'),
+]
+
+configopts = '-DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF '
+configopts += '-DBUILD_SHARED_LIBS=on '
+
+sanity_check_paths = {
+    'files': ['lib/libceres.so', 'include/ceres/ceres.h'],
+    'dirs': [],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/c/cuTENSOR/cuTENSOR-1.4.0.6-GCCcore-11.2.0.eb b/Golden_Repo/c/cuTENSOR/cuTENSOR-1.4.0.6-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..2f13445dfe49473391c240df39700cdb6721a1bb
--- /dev/null
+++ b/Golden_Repo/c/cuTENSOR/cuTENSOR-1.4.0.6-GCCcore-11.2.0.eb
@@ -0,0 +1,41 @@
+easyblock = 'Tarball'
+
+name = 'cuTENSOR'
+version = '1.4.0.6'
+
+homepage = 'https://developer.nvidia.com/cutensor'
+description = """The cuTENSOR Library is a GPU-accelerated tensor linear algebra library providing tensor contraction,
+reduction and elementwise operations."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = [
+    'https://developer.download.nvidia.com/compute/cutensor/redist/libcutensor/linux-%(arch)s/'
+]
+sources = ['libcutensor-linux-%(arch)s-%(version)s-archive.tar.xz']
+checksums = [
+    {
+        'libcutensor-linux-x86_64-1.4.0.6-archive.tar.xz':
+            '467ba189195fcc4b868334fc16a0ae1e51574139605975cc8004cedebf595964',
+        'libcutensor-linux-ppc64le-1.4.0.6-archive.tar.xz':
+            '5da44ff2562ab7b9286122653e54f28d2222c8aab4bb02e9bdd4cf7e4b7809be',
+        'libcutensor-linux-sbsa-1.4.0.6-archive.tar.xz':
+            '6b06d63a5bc49c1660be8c307795f8a901c93dcde7b064455a6c81333c7327f4',
+    }
+]
+
+dependencies = [('CUDA', '11.5', '', SYSTEM)]
+
+sanity_check_paths = {
+    'files': ['include/cutensor.h', 'include/cutensor/types.h',
+              'lib/%s/libcutensor.%s' % ('%(cudamajver)s', SHLIB_EXT),
+              'lib/%s/libcutensor_static.a' % '%(cudamajver)s'],
+    'dirs': [],
+}
+
+modextrapaths = {
+    'LD_LIBRARY_PATH': ['lib/%s' % '%(cudamajver)s'],
+    'LIBRARY_PATH': ['lib/%s' % '%(cudamajver)s'],
+}
+
+moduleclass = 'numlib'
diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001-gomkl-2021b.eb b/Golden_Repo/e/ELPA/ELPA-2021.11.001-gomkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..cd313db7f33e93dd93834a820b48cc2727306f6c
--- /dev/null
+++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001-gomkl-2021b.eb
@@ -0,0 +1,107 @@
+name = 'ELPA'
+version = '2021.11.001'
+
+homepage = 'https://elpa.rzg.mpg.de'
+description = """Eigenvalue SoLvers for Petaflop-Applications. ELPA has been installed as module in
+$EBROOTELPA ($ELPA_ROOT is also defined). This installation
+contains the pure MPI version and the hybrid MPI/OpenMP version.
+Notice: If you want to use OpenMP threads you have to set
+export ELPA_DEFAULT_omp=<number of threads per MPI process>
+in your batch job and start MPI with MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,....
+
+Several assembly kernels have been compiled. They can be chosen at runtime when calling the library or
+with the environment variables REAL_ELPA_KERNEL or COMPLEX_ELPA_KERNEL.
+
+An example is
+export REAL_ELPA_KERNEL=REAL_ELPA_KERNEL_GENERIC
+which chooses the generic real kernel for elpa2.
+Starting with version 2019.11.001 the legacy interface is no longer available.
+"""
+
+usage = """You can get an overview over the available kernels by loading ELPA and then submitting a batch job with
+
+srun --ntasks=1 $EBROOTELPA/bin/elpa2_print_kernels
+
+Programs using this ELPA library have to be compiled with
+
+-I$ELPA_INCLUDE[_OPENMP]/ -I$ELPA_INCLUDE[_OPENMP]/elpa -I$ELPA_MODULES[_OPENMP]
+
+and linked with
+
+-L$EBROOTELPA/lib -lelpa[_openmp]
+-lmkl_scalapack_lp64
+${MKLROOT}/lib/intel64/libmkl_blacs_openmpi_lp64.a
+-lmkl_gf_lp64 -lmkl_sequential[-lmkl_gnu_thread]
+-lmkl_core -lgomp -lpthread -lm -ldl -lstdc++
+"""
+
+examples = 'Examples can be found in $EBROOTELPA/examples'
+
+toolchain = {'name': 'gomkl', 'version': '2021b'}
+toolchainopts = {'openmp': True, 'usempi': True}
+
+source_urls = ['https://gitlab.mpcdf.mpg.de/elpa/elpa/-/archive/new_release_%(version)s/']
+sources = ["elpa-new_release_%(version)s.tar.gz"]
+patches = [
+    '%(name)s-%(version)s_fix_hardcoded_perl_path.patch',
+    'ELPA-%(version)s_install-libelpatest.patch',
+]
+checksums = [
+    'e61048393a5e5f460858a11b216547fa3f434dd620c478cb20a52ebf543260f1',  # elpa-new_release_2021.11.001.tar.gz
+    # ELPA-2021.11.001_fix_hardcoded_perl_path.patch
+    '5fc40b6f3f948fd026efc688f9bafba0461d68ad007d9dc161bfd1507e2fc13b',
+    '2ce155ccbcdd61e8036d859aa204b48883695eff5f4decee3e5c2677516d8272',  # ELPA-2021.11.001_install-libelpatest.patch
+]
+
+builddependencies = [
+    ('Autotools', '20210726'),
+    # remove_xcompiler script requires 'python' command,
+    ('Python', '3.9.6'),
+    ('Perl', '5.34.0'),
+]
+
+preconfigopts = './autogen.sh && '
+preconfigopts += 'export LDFLAGS="-lm $LDFLAGS" && '
+preconfigopts += 'autoreconf && '
+
+# The checking of MPI_THREAD_MULTIPLE does not work because the check uses an
+# MPI program that is then executed by just ./conftest
+# Unfortunately you cannot turn of checking during runtime, too
+configopts = '--without-threading-support-check-during-build '
+
+with_single = False
+
+# When building in parallel, the file test_setup_mpi.mod is sometimes
+# used before it is built, leading to an error.  This must be a bug in
+# the makefile affecting parallel builds.
+maxparallel = 1
+
+
+postinstallcmds = [
+    'cp -r %(builddir)s/elpa-new_release_%(version)s/examples %(installdir)s/examples/',
+    'rm %(installdir)s/examples/*.orig',
+    'rm %(installdir)s/examples/*_cuda',
+    'rm %(installdir)s/examples/C/*.orig',
+    'rm %(installdir)s/examples/C/*_cuda',
+    'rm %(installdir)s/examples/Fortran/*.orig',
+    'rm %(installdir)s/examples/Fortran/*_cuda',
+    'cp %(builddir)s/elpa-new_release_%(version)s/test/shared/generated.h %(installdir)s/examples/C/generated.h',
+    'cp config.h config-f90.h %(installdir)s/include/elpa_openmp-%(version)s/elpa/',
+    'grep -v WITH_OPENMP config.h > %(installdir)s/include/elpa-%(version)s/elpa/config.h',
+    'grep -v WITH_OPENMP config-f90.h > %(installdir)s/include/elpa-%(version)s/elpa/config-f90.h',
+    'cp %(builddir)s/elpa-new_release_%(version)s/private_modules/* %(installdir)s/include/elpa-%(version)s/modules',
+    'cp %(builddir)s/elpa-new_release_%(version)s/test_modules/* %(installdir)s/include/elpa-%(version)s/modules',
+]
+
+modextravars = {
+    'ELPA_ROOT': '%(installdir)s',
+    'ELPAROOT': '%(installdir)s',
+    'ELPA_INCLUDE': '%(installdir)s/include/elpa-%(version)s/',
+    'ELPA_INCLUDE_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/',
+    'ELPA_LIB': '%(installdir)s/lib',
+    'ELPA_LIB_OPENMP': '%(installdir)s/lib',
+    'ELPA_MODULES': '%(installdir)s/include/elpa-%(version)s/modules',
+    'ELPA_MODULES_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/modules',
+}
+
+moduleclass = 'math'
diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001-gpsmkl-2021b.eb b/Golden_Repo/e/ELPA/ELPA-2021.11.001-gpsmkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..eeeef09bff2024c840a5b531087aebdc8b6181ae
--- /dev/null
+++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001-gpsmkl-2021b.eb
@@ -0,0 +1,105 @@
+name = 'ELPA'
+version = '2021.11.001'
+
+homepage = 'https://elpa.rzg.mpg.de'
+description = """Eigenvalue SoLvers for Petaflop-Applications. ELPA has been installed as module in
+$EBROOTELPA ($ELPA_ROOT is also defined). This installation
+contains the pure MPI version and the hybrid MPI/OpenMP version.
+Notice: If you want to use OpenMP threads you have to set
+export ELPA_DEFAULT_omp=<number of threads per MPI process>
+in your batch job and start MPI with MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,....
+
+Several assembly kernels have been compiled. They can be chosen at runtime when calling the library or
+with the environment variables REAL_ELPA_KERNEL or COMPLEX_ELPA_KERNEL.
+
+An example is
+export REAL_ELPA_KERNEL=REAL_ELPA_KERNEL_GENERIC
+which chooses the generic real kernel for elpa2.
+Starting with version 2019.11.001 the legacy interface is no longer available.
+"""
+
+usage = """You can get an overview over the available kernels by loading ELPA and then submitting a batch job with
+
+srun --ntasks=1 $EBROOTELPA/bin/elpa2_print_kernels
+
+Programs using this ELPA library have to be compiled with
+
+-I$ELPA_INCLUDE[_OPENMP]/ -I$ELPA_INCLUDE[_OPENMP]/elpa -I$ELPA_MODULES[_OPENMP]
+
+and linked with
+
+-L$EBROOTELPA/lib -lelpa[_openmp]
+-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_gf_lp64
+-lmkl_sequential[-lmkl_gnu_thread]
+-lmkl_core -lgomp -lpthread -lm -ldl -lstdc++
+"""
+
+examples = 'Examples can be found in $EBROOTELPA/examples'
+
+toolchain = {'name': 'gpsmkl', 'version': '2021b'}
+toolchainopts = {'openmp': True, 'usempi': True}
+
+source_urls = ['https://gitlab.mpcdf.mpg.de/elpa/elpa/-/archive/new_release_%(version)s/']
+sources = ["elpa-new_release_%(version)s.tar.gz"]
+patches = [
+    '%(name)s-%(version)s_fix_hardcoded_perl_path.patch',
+    'ELPA-%(version)s_install-libelpatest.patch',
+]
+checksums = [
+    'e61048393a5e5f460858a11b216547fa3f434dd620c478cb20a52ebf543260f1',  # elpa-new_release_2021.11.001.tar.gz
+    # ELPA-2021.11.001_fix_hardcoded_perl_path.patch
+    '5fc40b6f3f948fd026efc688f9bafba0461d68ad007d9dc161bfd1507e2fc13b',
+    '2ce155ccbcdd61e8036d859aa204b48883695eff5f4decee3e5c2677516d8272',  # ELPA-2021.11.001_install-libelpatest.patch
+]
+
+builddependencies = [
+    ('Autotools', '20210726'),
+    # remove_xcompiler script requires 'python' command,
+    ('Python', '3.9.6'),
+    ('Perl', '5.34.0'),
+]
+
+preconfigopts = './autogen.sh && '
+preconfigopts += 'export LDFLAGS="-lm $LDFLAGS" && '
+preconfigopts += 'autoreconf && '
+
+# The checking of MPI_THREAD_MULTIPLE does not work because the check uses an
+# MPI program that is then executed by just ./conftest
+# Unfortunately you cannot turn of checking during runtime, too
+configopts = '--without-threading-support-check-during-build '
+
+with_single = False
+
+# When building in parallel, the file test_setup_mpi.mod is sometimes
+# used before it is built, leading to an error.  This must be a bug in
+# the makefile affecting parallel builds.
+maxparallel = 1
+
+postinstallcmds = [
+    'cp -r %(builddir)s/elpa-new_release_%(version)s/examples %(installdir)s/examples/',
+    'rm %(installdir)s/examples/*.orig',
+    'rm %(installdir)s/examples/*_cuda',
+    'rm %(installdir)s/examples/C/*.orig',
+    'rm %(installdir)s/examples/C/*_cuda',
+    'rm %(installdir)s/examples/Fortran/*.orig',
+    'rm %(installdir)s/examples/Fortran/*_cuda',
+    'cp config.h config-f90.h %(installdir)s/include/elpa_openmp-%(version)s/elpa/',
+    'grep -v WITH_OPENMP config.h > %(installdir)s/include/elpa-%(version)s/elpa/config.h',
+    'grep -v WITH_OPENMP config-f90.h > %(installdir)s/include/elpa-%(version)s/elpa/config-f90.h',
+    'cp %(builddir)s/elpa-new_release_%(version)s/test/shared/generated.h %(installdir)s/examples/C/generated.h',
+    'cp %(builddir)s/elpa-new_release_%(version)s/private_modules/* %(installdir)s/include/elpa-%(version)s/modules',
+    'cp %(builddir)s/elpa-new_release_%(version)s/test_modules/* %(installdir)s/include/elpa-%(version)s/modules',
+]
+
+modextravars = {
+    'ELPA_ROOT': '%(installdir)s',
+    'ELPAROOT': '%(installdir)s',
+    'ELPA_INCLUDE': '%(installdir)s/include/elpa-%(version)s/',
+    'ELPA_INCLUDE_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/',
+    'ELPA_LIB': '%(installdir)s/lib',
+    'ELPA_LIB_OPENMP': '%(installdir)s/lib',
+    'ELPA_MODULES': '%(installdir)s/include/elpa-%(version)s/modules',
+    'ELPA_MODULES_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/modules',
+}
+
+moduleclass = 'math'
diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-2021b.eb b/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..2f80e05e2ba06c1ed2fb01d8dffdb1af26859701
--- /dev/null
+++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-2021b.eb
@@ -0,0 +1,104 @@
+name = 'ELPA'
+version = '2021.11.001'
+
+homepage = 'https://elpa.rzg.mpg.de'
+description = """Eigenvalue SoLvers for Petaflop-Applications. ELPA has been installed as module in
+$EBROOTELPA ($ELPA_ROOT is also defined). This installation
+contains the pure MPI version and the hybrid MPI/OpenMP version.
+Notice: If you want to use OpenMP threads you have to set
+export ELPA_DEFAULT_omp=<number of threads per MPI process>
+in your batch job and start MPI with MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,....
+
+Several assembly kernels have been compiled. They can be chosen at runtime when calling the library or
+with the environment variables REAL_ELPA_KERNEL or COMPLEX_ELPA_KERNEL.
+
+An example is
+export REAL_ELPA_KERNEL=REAL_ELPA_KERNEL_GENERIC
+which chooses the generic real kernel for elpa2.
+Starting with version 2019.11.001 the legacy interface is no longer available.
+"""
+
+usage = """You can get an overview over the available kernels by loading ELPA and then submitting a batch job with
+
+srun --ntasks=1 $EBROOTELPA/bin/elpa2_print_kernels
+
+Programs using this ELPA library have to be compiled with
+
+-I$ELPA_INCLUDE[_OPENMP]/ -I$ELPA_INCLUDE[_OPENMP]/elpa -I$ELPA_MODULES[_OPENMP]
+
+and linked with
+
+-L$EBROOTELPA/lib -lelpa[_openmp]
+-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_intel_lp64
+-lmkl_sequential[-lmkl_intel_thread]
+-lmkl_core -liomp5 -lpthread -lstdc++
+"""
+
+examples = 'Examples can be found in $EBROOTELPA/examples'
+
+toolchain = {'name': 'intel', 'version': '2021b'}
+toolchainopts = {'openmp': True, 'usempi': True}
+
+source_urls = ['https://gitlab.mpcdf.mpg.de/elpa/elpa/-/archive/new_release_%(version)s/']
+sources = ["elpa-new_release_%(version)s.tar.gz"]
+patches = [
+    '%(name)s-%(version)s_fix_hardcoded_perl_path.patch',
+    'ELPA-%(version)s_install-libelpatest.patch',
+]
+checksums = [
+    'e61048393a5e5f460858a11b216547fa3f434dd620c478cb20a52ebf543260f1',  # elpa-new_release_2021.11.001.tar.gz
+    # ELPA-2021.11.001_fix_hardcoded_perl_path.patch
+    '5fc40b6f3f948fd026efc688f9bafba0461d68ad007d9dc161bfd1507e2fc13b',
+    '2ce155ccbcdd61e8036d859aa204b48883695eff5f4decee3e5c2677516d8272',  # ELPA-2021.11.001_install-libelpatest.patch
+]
+
+builddependencies = [
+    ('Autotools', '20210726'),
+    # remove_xcompiler script requires 'python' command,
+    ('Python', '3.9.6'),
+    ('Perl', '5.34.0'),
+]
+
+preconfigopts = './autogen.sh && '
+preconfigopts += 'autoreconf && '
+
+# The checking of MPI_THREAD_MULTIPLE does not work because the check uses an
+# MPI program that is then executed by just ./conftest
+# Unfortunately you cannot turn of checking during runtime, too
+configopts = '--without-threading-support-check-during-build '
+
+with_single = False
+
+# When building in parallel, the file test_setup_mpi.mod is sometimes
+# used before it is built, leading to an error.  This must be a bug in
+# the makefile affecting parallel builds.
+maxparallel = 1
+
+postinstallcmds = [
+    'cp -r %(builddir)s/elpa-new_release_%(version)s/examples %(installdir)s/examples/',
+    'rm %(installdir)s/examples/*.orig',
+    'rm %(installdir)s/examples/*_cuda',
+    'rm %(installdir)s/examples/C/*.orig',
+    'rm %(installdir)s/examples/C/*_cuda',
+    'rm %(installdir)s/examples/Fortran/*.orig',
+    'rm %(installdir)s/examples/Fortran/*_cuda',
+    'cp config.h config-f90.h %(installdir)s/include/elpa_openmp-%(version)s/elpa/',
+    'grep -v WITH_OPENMP config.h > %(installdir)s/include/elpa-%(version)s/elpa/config.h',
+    'grep -v WITH_OPENMP config-f90.h > %(installdir)s/include/elpa-%(version)s/elpa/config-f90.h',
+    'cp %(builddir)s/elpa-new_release_%(version)s/test/shared/generated.h %(installdir)s/examples/C/generated.h',
+    'cp %(builddir)s/elpa-new_release_%(version)s/private_modules/* %(installdir)s/include/elpa-%(version)s/modules',
+    'cp %(builddir)s/elpa-new_release_%(version)s/test_modules/* %(installdir)s/include/elpa-%(version)s/modules',
+]
+
+modextravars = {
+    'ELPA_ROOT': '%(installdir)s',
+    'ELPAROOT': '%(installdir)s',
+    'ELPA_INCLUDE': '%(installdir)s/include/elpa-%(version)s/',
+    'ELPA_INCLUDE_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/',
+    'ELPA_LIB': '%(installdir)s/lib',
+    'ELPA_LIB_OPENMP': '%(installdir)s/lib',
+    'ELPA_MODULES': '%(installdir)s/include/elpa-%(version)s/modules',
+    'ELPA_MODULES_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/modules',
+}
+
+moduleclass = 'math'
diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-para-2021b.eb b/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-para-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..8eda37582dd7d40372a09d88561616236b566c80
--- /dev/null
+++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-para-2021b.eb
@@ -0,0 +1,104 @@
+name = 'ELPA'
+version = '2021.11.001'
+
+homepage = 'https://elpa.rzg.mpg.de'
+description = """Eigenvalue SoLvers for Petaflop-Applications. ELPA has been installed as module in
+$EBROOTELPA ($ELPA_ROOT is also defined). This installation
+contains the pure MPI version and the hybrid MPI/OpenMP version.
+Notice: If you want to use OpenMP threads you have to set
+export ELPA_DEFAULT_omp=<number of threads per MPI process>
+in your batch job and start MPI with MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,....
+
+Several assembly kernels have been compiled. They can be chosen at runtime when calling the library or
+with the environment variables REAL_ELPA_KERNEL or COMPLEX_ELPA_KERNEL.
+
+An example is
+export REAL_ELPA_KERNEL=REAL_ELPA_KERNEL_GENERIC
+which chooses the generic real kernel for elpa2.
+Starting with version 2019.11.001 the legacy interface is no longer available.
+"""
+
+usage = """You can get an overview over the available kernels by loading ELPA and then submitting a batch job with
+
+srun --ntasks=1 $EBROOTELPA/bin/elpa2_print_kernels
+
+Programs using this ELPA library have to be compiled with
+
+-I$ELPA_INCLUDE[_OPENMP]/ -I$ELPA_INCLUDE[_OPENMP]/elpa -I$ELPA_MODULES[_OPENMP]
+
+and linked with
+
+-L$EBROOTELPA/lib -lelpa[_openmp]
+-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_intel_lp64
+-lmkl_sequential[-lmkl_intel_thread]
+-lmkl_core -liomp5 -lpthread -lstdc++
+"""
+
+examples = 'Examples can be found in $EBROOTELPA/examples'
+
+toolchain = {'name': 'intel-para', 'version': '2021b'}
+toolchainopts = {'openmp': True, 'usempi': True}
+
+source_urls = ['https://gitlab.mpcdf.mpg.de/elpa/elpa/-/archive/new_release_%(version)s/']
+sources = ["elpa-new_release_%(version)s.tar.gz"]
+patches = [
+    '%(name)s-%(version)s_fix_hardcoded_perl_path.patch',
+    'ELPA-%(version)s_install-libelpatest.patch',
+]
+checksums = [
+    'e61048393a5e5f460858a11b216547fa3f434dd620c478cb20a52ebf543260f1',  # elpa-new_release_2021.11.001.tar.gz
+    # ELPA-2021.11.001_fix_hardcoded_perl_path.patch
+    '5fc40b6f3f948fd026efc688f9bafba0461d68ad007d9dc161bfd1507e2fc13b',
+    '2ce155ccbcdd61e8036d859aa204b48883695eff5f4decee3e5c2677516d8272',  # ELPA-2021.11.001_install-libelpatest.patch
+]
+
+builddependencies = [
+    ('Autotools', '20210726'),
+    # remove_xcompiler script requires 'python' command,
+    ('Python', '3.9.6'),
+    ('Perl', '5.34.0'),
+]
+
+preconfigopts = './autogen.sh && '
+preconfigopts += 'autoreconf && '
+
+# The checking of MPI_THREAD_MULTIPLE does not work because the check uses an
+# MPI program that is then executed by just ./conftest
+# Unfortunately you cannot turn of checking during runtime, too
+configopts = '--without-threading-support-check-during-build '
+
+with_single = False
+
+# When building in parallel, the file test_setup_mpi.mod is sometimes
+# used before it is built, leading to an error.  This must be a bug in
+# the makefile affecting parallel builds.
+maxparallel = 1
+
+postinstallcmds = [
+    'cp -r %(builddir)s/elpa-new_release_%(version)s/examples %(installdir)s/examples/',
+    'rm %(installdir)s/examples/*.orig',
+    'rm %(installdir)s/examples/*_cuda',
+    'rm %(installdir)s/examples/C/*.orig',
+    'rm %(installdir)s/examples/C/*_cuda',
+    'rm %(installdir)s/examples/Fortran/*.orig',
+    'rm %(installdir)s/examples/Fortran/*_cuda',
+    'cp config.h config-f90.h %(installdir)s/include/elpa_openmp-%(version)s/elpa/',
+    'grep -v WITH_OPENMP config.h > %(installdir)s/include/elpa-%(version)s/elpa/config.h',
+    'grep -v WITH_OPENMP config-f90.h > %(installdir)s/include/elpa-%(version)s/elpa/config-f90.h',
+    'cp %(builddir)s/elpa-new_release_%(version)s/test/shared/generated.h %(installdir)s/examples/C/generated.h',
+    'cp %(builddir)s/elpa-new_release_%(version)s/private_modules/* %(installdir)s/include/elpa-%(version)s/modules',
+    'cp %(builddir)s/elpa-new_release_%(version)s/test_modules/* %(installdir)s/include/elpa-%(version)s/modules',
+]
+
+modextravars = {
+    'ELPA_ROOT': '%(installdir)s',
+    'ELPAROOT': '%(installdir)s',
+    'ELPA_INCLUDE': '%(installdir)s/include/elpa-%(version)s/',
+    'ELPA_INCLUDE_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/',
+    'ELPA_LIB': '%(installdir)s/lib',
+    'ELPA_LIB_OPENMP': '%(installdir)s/lib',
+    'ELPA_MODULES': '%(installdir)s/include/elpa-%(version)s/modules',
+    'ELPA_MODULES_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/modules',
+}
+
+moduleclass = 'math'
diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001-iomkl-2021b.eb b/Golden_Repo/e/ELPA/ELPA-2021.11.001-iomkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..08e7f242458aa3a1f8959cd1a89621a97e85a3cf
--- /dev/null
+++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001-iomkl-2021b.eb
@@ -0,0 +1,105 @@
+name = 'ELPA'
+version = '2021.11.001'
+
+homepage = 'https://elpa.rzg.mpg.de'
+description = """Eigenvalue SoLvers for Petaflop-Applications. ELPA has been installed as module in
+$EBROOTELPA ($ELPA_ROOT is also defined). This installation
+contains the pure MPI version and the hybrid MPI/OpenMP version.
+Notice: If you want to use OpenMP threads you have to set
+export ELPA_DEFAULT_omp=<number of threads per MPI process>
+in your batch job and start MPI with MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,....
+
+Several assembly kernels have been compiled. They can be chosen at runtime when calling the library or
+with the environment variables REAL_ELPA_KERNEL or COMPLEX_ELPA_KERNEL.
+
+An example is
+export REAL_ELPA_KERNEL=REAL_ELPA_KERNEL_GENERIC
+which chooses the generic real kernel for elpa2.
+Starting with version 2019.11.001 the legacy interface is no longer available.
+"""
+
+usage = """You can get an overview over the available kernels by loading ELPA and then submitting a batch job with
+
+srun --ntasks=1 $EBROOTELPA/bin/elpa2_print_kernels
+
+Programs using this ELPA library have to be compiled with
+
+-I$ELPA_INCLUDE[_OPENMP]/ -I$ELPA_INCLUDE[_OPENMP]/elpa -I$ELPA_MODULES[_OPENMP]
+
+and linked with
+
+-L$EBROOTELPA/lib -lelpa[_openmp]
+-lmkl_scalapack_lp64
+${MKLROOT}/lib/intel64/libmkl_blacs_openmpi_lp64.a
+-lmkl_intel_lp64 -lmkl_sequential[-lmkl_intel_thread]
+-lmkl_core -liomp -lpthread -ldl -lstdc++
+"""
+
+examples = 'Examples can be found in $EBROOTELPA/examples'
+
+toolchain = {'name': 'iomkl', 'version': '2021b'}
+toolchainopts = {'openmp': True, 'usempi': True}
+
+source_urls = ['https://gitlab.mpcdf.mpg.de/elpa/elpa/-/archive/new_release_%(version)s/']
+sources = ["elpa-new_release_%(version)s.tar.gz"]
+patches = [
+    '%(name)s-%(version)s_fix_hardcoded_perl_path.patch',
+    'ELPA-%(version)s_install-libelpatest.patch',
+]
+checksums = [
+    'e61048393a5e5f460858a11b216547fa3f434dd620c478cb20a52ebf543260f1',  # elpa-new_release_2021.11.001.tar.gz
+    # ELPA-2021.11.001_fix_hardcoded_perl_path.patch
+    '5fc40b6f3f948fd026efc688f9bafba0461d68ad007d9dc161bfd1507e2fc13b',
+    '2ce155ccbcdd61e8036d859aa204b48883695eff5f4decee3e5c2677516d8272',  # ELPA-2021.11.001_install-libelpatest.patch
+]
+
+builddependencies = [
+    ('Autotools', '20210726'),
+    # remove_xcompiler script requires 'python' command,
+    ('Python', '3.9.6'),
+    ('Perl', '5.34.0'),
+]
+
+preconfigopts = './autogen.sh && '
+preconfigopts += 'autoreconf && '
+
+# The checking of MPI_THREAD_MULTIPLE does not work because the check uses an
+# MPI program that is then executed by just ./conftest
+# Unfortunately you cannot turn of checking during runtime, too
+configopts = '--without-threading-support-check-during-build '
+
+with_single = False
+
+# When building in parallel, the file test_setup_mpi.mod is sometimes
+# used before it is built, leading to an error.  This must be a bug in
+# the makefile affecting parallel builds.
+maxparallel = 1
+
+postinstallcmds = [
+    'cp -r %(builddir)s/elpa-new_release_%(version)s/examples %(installdir)s/examples/',
+    'rm %(installdir)s/examples/*.orig',
+    'rm %(installdir)s/examples/*_cuda',
+    'rm %(installdir)s/examples/C/*.orig',
+    'rm %(installdir)s/examples/C/*_cuda',
+    'rm %(installdir)s/examples/Fortran/*.orig',
+    'rm %(installdir)s/examples/Fortran/*_cuda',
+    'cp %(builddir)s/elpa-new_release_%(version)s/test/shared/generated.h %(installdir)s/examples/C/generated.h',
+    'cp config.h config-f90.h %(installdir)s/include/elpa_openmp-%(version)s/elpa/',
+    'grep -v WITH_OPENMP config.h > %(installdir)s/include/elpa-%(version)s/elpa/config.h',
+    'grep -v WITH_OPENMP config-f90.h > %(installdir)s/include/elpa-%(version)s/elpa/config-f90.h',
+    'cp %(builddir)s/elpa-new_release_%(version)s/private_modules/* %(installdir)s/include/elpa-%(version)s/modules',
+    'cp %(builddir)s/elpa-new_release_%(version)s/test_modules/* %(installdir)s/include/elpa-%(version)s/modules',
+]
+
+modextravars = {
+    'ELPA_ROOT': '%(installdir)s',
+    'ELPAROOT': '%(installdir)s',
+    'ELPA_INCLUDE': '%(installdir)s/include/elpa-%(version)s/',
+    'ELPA_INCLUDE_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/',
+    'ELPA_LIB': '%(installdir)s/lib',
+    'ELPA_LIB_OPENMP': '%(installdir)s/lib',
+    'ELPA_MODULES': '%(installdir)s/include/elpa-%(version)s/modules',
+    'ELPA_MODULES_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/modules',
+}
+
+moduleclass = 'math'
diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001_fix_hardcoded_perl_path.patch b/Golden_Repo/e/ELPA/ELPA-2021.11.001_fix_hardcoded_perl_path.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5c7ae5eae05ce11d3a24b3202194616933db38da
--- /dev/null
+++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001_fix_hardcoded_perl_path.patch
@@ -0,0 +1,40 @@
+--- elpa-new_release_2021.11.001/test_project_1stage/fdep/fortran_dependencies.pl	2021-12-17 08:20:49.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/test_project_1stage/fdep/fortran_dependencies.pl	2022-01-25 17:07:21.169362000 +0100
+@@ -1,4 +1,4 @@
+-#!/usr/bin/perl -w
++#!/usr/bin/env perl
+ 
+ use strict;
+ 
+--- elpa-new_release_2021.11.001/fdep/fortran_dependencies.pl	2021-12-17 08:20:49.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/fdep/fortran_dependencies.pl	2022-01-25 17:08:17.272544000 +0100
+@@ -1,4 +1,4 @@
+-#!/usr/bin/perl -w
++#!/usr/bin/env perl
+ #
+ # Copyright 2015 Lorenz Hüdepohl
+ #
+--- elpa-new_release_2021.11.001/test_project_C_2stage/fdep/fortran_dependencies.pl	2021-12-17 08:20:49.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/test_project_C_2stage/fdep/fortran_dependencies.pl	2022-01-25 17:06:20.088471000 +0100
+@@ -1,4 +1,4 @@
+-#!/usr/bin/perl -w
++#!/usr/bin/env perl
+ 
+ use strict;
+ 
+--- elpa-new_release_2021.11.001/test_project_2stage/fdep/fortran_dependencies.pl	2021-12-17 08:20:49.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/test_project_2stage/fdep/fortran_dependencies.pl	2022-01-25 17:05:10.675886000 +0100
+@@ -1,4 +1,4 @@
+-#!/usr/bin/perl -w
++#!/usr/bin/env perl
+ 
+ use strict;
+ 
+--- elpa-new_release_2021.11.001/test_project_C/fdep/fortran_dependencies.pl	2021-12-17 08:20:49.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/test_project_C/fdep/fortran_dependencies.pl	2022-01-25 17:04:14.834326000 +0100
+@@ -1,4 +1,4 @@
+-#!/usr/bin/perl -w
++#!/usr/bin/env perl
+ 
+ use strict;
+ 
diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001_install-libelpatest.patch b/Golden_Repo/e/ELPA/ELPA-2021.11.001_install-libelpatest.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ad5240130a3f09af760ed386157af998597a8f24
--- /dev/null
+++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001_install-libelpatest.patch
@@ -0,0 +1,12790 @@
+--- elpa-new_release_2021.11.001/Makefile.am	2021-12-17 08:20:49.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/Makefile.am	2022-01-26 10:47:31.956245709 +0100
+@@ -665,7 +665,7 @@
+ test_program_fcflags = $(AM_FCFLAGS) $(FC_MODOUT)test_modules $(FC_MODINC)test_modules $(FC_MODINC)modules $(FC_MODINC)private_modules
+ 
+ # library with shared sources for the test files
+-noinst_LTLIBRARIES += libelpatest@SUFFIX@.la
++lib_LTLIBRARIES += libelpatest@SUFFIX@.la
+ libelpatest@SUFFIX@_la_FCFLAGS = $(test_program_fcflags)
+ libelpatest@SUFFIX@_la_SOURCES = \
+   test/shared/tests_variable_definitions.F90 \
+diff -ruN elpa-new_release_2021.11.001/examples/C/Makefile_examples_hybrid elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_hybrid
+--- elpa-new_release_2021.11.001/examples/C/Makefile_examples_hybrid	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_hybrid	2022-01-28 09:53:19.118256000 +0100
+@@ -0,0 +1,31 @@
++# MPICH, that is IntelMPI or ParaStationMPI
++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
++# OpenMPI
++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a
++LAPACK_LIB = 
++# Intel compiler
++MKL = -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lstdc++
++# GCC
++# MKL = -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lstdc++ -lm
++F90 = mpif90 -O3 -qopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa
++# GCC
++# F90 = mpif90 -O3 -fopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa
++LIBS = -L$(ELPA_LIB_OPENMP) -lelpa_openmp -lelpatest_openmp $(SCALAPACK_LIB) $(MKL)
++CC            = mpicc -O3 -qopenmp
++# GCC
++# CC            = mpicc -O3 -fopenmp
++
++all: test_real_1stage_hybrid test_real_2stage_all_kernels_hybrid test_autotune_hybrid test_multiple_objs_hybrid
++
++test_real_1stage_hybrid: test.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DWITH_OPENMP_TRADITIONAL -DTEST_EIGENVECTORS -DWITH_MPI -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS)
++
++test_real_2stage_all_kernels_hybrid: test.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DWITH_OPENMP_TRADITIONAL -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_MPI -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS)
++
++test_autotune_hybrid: test_autotune.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_autotune.c $(LIBS)
++
++test_multiple_objs_hybrid: test_multiple_objs.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_multiple_objs.c $(LIBS)
++
+diff -ruN elpa-new_release_2021.11.001/examples/C/Makefile_examples_pure elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_pure
+--- elpa-new_release_2021.11.001/examples/C/Makefile_examples_pure	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_pure	2022-01-28 09:53:42.223490000 +0100
+@@ -0,0 +1,27 @@
++# MPICH, that is IntelMPI or ParaStationMPI
++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
++# OpenMPI
++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a
++LAPACK_LIB = 
++# Intel compiler
++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++
++# GCC
++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm
++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa
++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL)
++CC            = mpicc -O3 
++
++all: test_real_1stage test_real_2stage_all_kernels test_autotune test_multiple_objs
++
++test_real_1stage: test.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DTEST_EIGENVECTORS -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS)
++
++test_real_2stage_all_kernels: test.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS)
++
++test_autotune: test_autotune.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_autotune.c $(LIBS)
++
++test_multiple_objs: test_multiple_objs.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_multiple_objs.c $(LIBS)
++
+diff -ruN elpa-new_release_2021.11.001/examples/C/Makefile_examples_pure_cuda elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_pure_cuda
+--- elpa-new_release_2021.11.001/examples/C/Makefile_examples_pure_cuda	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_pure_cuda	2022-01-28 09:53:55.785592000 +0100
+@@ -0,0 +1,27 @@
++# MPICH, that is IntelMPI or ParaStationMPI
++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
++# OpenMPI
++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a
++LAPACK_LIB = 
++# Intel compiler
++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++
++# GCC
++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm
++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa
++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL) -lcublas -lcudart
++CC            = mpicc -O3 
++
++all: test_real_1stage test_real_2stage_all_kernels test_autotune test_multiple_objs
++
++test_real_1stage: test.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DTEST_EIGENVECTORS -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS)
++
++test_real_2stage_all_kernels: test.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS)
++
++test_autotune: test_autotune.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_autotune.c $(LIBS)
++
++test_multiple_objs: test_multiple_objs.c
++	$(CC) -DCURRENT_API_VERSION=20211125 -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_multiple_objs.c $(LIBS)
++
+diff -ruN elpa-new_release_2021.11.001/examples/C/test_autotune.c elpa-new_release_2021.11.001_ok/examples/C/test_autotune.c
+--- elpa-new_release_2021.11.001/examples/C/test_autotune.c	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/C/test_autotune.c	2022-02-01 18:20:00.273429184 +0100
+@@ -0,0 +1,342 @@
++/*   This file is part of ELPA.
++
++     The ELPA library was originally created by the ELPA consortium,
++     consisting of the following organizations:
++
++     - Max Planck Computing and Data Facility (MPCDF), formerly known as
++       Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++     - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++       Informatik,
++     - Technische Universität München, Lehrstuhl für Informatik mit
++       Schwerpunkt Wissenschaftliches Rechnen ,
++     - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++     - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++       Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++       and
++     - IBM Deutschland GmbH
++
++
++     More information can be found here:
++     http://elpa.mpcdf.mpg.de/
++
++     ELPA is free software: you can redistribute it and/or modify
++     it under the terms of the version 3 of the license of the
++     GNU Lesser General Public License as published by the Free
++     Software Foundation.
++
++     ELPA 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 Lesser General Public License for more details.
++
++     You should have received a copy of the GNU Lesser General Public License
++     along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++
++     ELPA reflects a substantial effort on the part of the original
++     ELPA consortium, and we ask you to respect the spirit of the
++     license that we chose: i.e., please contribute any changes you
++     may have back to the original ELPA library distribution, and keep
++     any derivatives of ELPA under the same license that we chose for
++     the original distribution, the GNU Lesser General Public License.
++*/
++
++#include "config.h"
++
++#include <string.h>
++#include <stdio.h>
++#include <stdlib.h>
++#ifdef WITH_MPI
++#include <mpi.h>
++#endif
++#include <math.h>
++
++#include <elpa/elpa.h>
++#include <assert.h>
++
++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX))
++//#error "define exactly one of TEST_REAL or TEST_COMPLEX"
++#endif
++
++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE))
++//#error "define exactly one of TEST_SINGLE or TEST_DOUBLE"
++#endif
++
++#if !(defined(TEST_SOLVER_1STAGE) ^ defined(TEST_SOLVER_2STAGE))
++//#error "define exactly one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE"
++#endif
++
++#ifdef TEST_SINGLE
++#  define EV_TYPE float
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE float
++#  else
++#    define MATRIX_TYPE complex float
++#  endif
++#else
++#  define EV_TYPE double
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE double
++#  else
++#    define MATRIX_TYPE complex double
++#  endif
++#endif
++
++#define assert_elpa_ok(x) assert(x == ELPA_OK)
++
++#ifdef HAVE_64BIT_INTEGER_SUPPORT
++#define TEST_C_INT_TYPE_PTR long int*
++#define C_INT_TYPE_PTR long int*
++#define TEST_C_INT_TYPE long int
++#define C_INT_TYPE long int
++#else
++#define TEST_C_INT_TYPE_PTR int*
++#define C_INT_TYPE_PTR int*
++#define TEST_C_INT_TYPE int
++#define C_INT_TYPE int
++#endif
++
++#include "generated.h"
++
++int main(int argc, char** argv) {
++   /* matrix dimensions */
++   C_INT_TYPE na, nev, nblk;
++
++   /* mpi */
++   C_INT_TYPE myid, nprocs;
++   C_INT_TYPE na_cols, na_rows;
++   C_INT_TYPE np_cols, np_rows;
++   C_INT_TYPE my_prow, my_pcol;
++   C_INT_TYPE mpi_comm;
++
++   /* blacs */
++   C_INT_TYPE my_blacs_ctxt, sc_desc[9], info;
++
++   /* The Matrix */
++   MATRIX_TYPE *a, *as, *z;
++   EV_TYPE *ev;
++
++   C_INT_TYPE status;
++   int error_elpa; 
++   elpa_t handle;
++
++   elpa_autotune_t autotune_handle;
++   C_INT_TYPE i, unfinished;
++
++   C_INT_TYPE value;
++#ifdef WITH_MPI
++   MPI_Init_thread(&argc, &argv, MPI_THREAD_SERIALIZED, &info);
++   MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
++   MPI_Comm_rank(MPI_COMM_WORLD, &myid);
++#else
++   nprocs = 1;
++   myid = 0;
++#endif
++
++   if (argc == 4) {
++     na = atoi(argv[1]);
++     nev = atoi(argv[2]);
++     nblk = atoi(argv[3]);
++   } else {
++     na = 500;
++     nev = 250;
++     nblk = 16;
++   }
++
++   for (np_cols = (C_INT_TYPE) sqrt((double) nprocs); np_cols > 1; np_cols--) {
++     if (nprocs % np_cols == 0) {
++       break;
++     }
++   }
++
++   np_rows = nprocs/np_cols;
++
++   /* set up blacs */
++   /* convert communicators before */
++#ifdef WITH_MPI
++   mpi_comm = MPI_Comm_c2f(MPI_COMM_WORLD);
++#else
++   mpi_comm = 0;
++#endif
++   set_up_blacsgrid_f(mpi_comm, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
++   set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, np_rows, np_cols, &na_rows, &na_cols, sc_desc, my_blacs_ctxt, &info);
++
++   /* allocate the matrices needed for elpa */
++   a  = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   z  = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   as = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   ev = calloc(na, sizeof(EV_TYPE));
++
++#ifdef TEST_REAL
++#ifdef TEST_DOUBLE
++   prepare_matrix_random_real_double_f(na, myid, na_rows, na_cols, sc_desc, a, z, as);
++#else
++   prepare_matrix_random_real_single_f(na, myid, na_rows, na_cols, sc_desc, a, z, as);
++#endif
++#else
++#ifdef TEST_DOUBLE
++   prepare_matrix_random_complex_double_f(na, myid, na_rows, na_cols, sc_desc, a, z, as);
++#else
++   prepare_matrix_random_complex_single_f(na, myid, na_rows, na_cols, sc_desc, a, z, as);
++#endif
++#endif
++
++   if (elpa_init(CURRENT_API_VERSION) != ELPA_OK) {
++     fprintf(stderr, "Error: ELPA API version not supported");
++     exit(1);
++   }
++
++#if OPTIONAL_C_ERROR_ARGUMENT == 1
++   handle = elpa_allocate();
++#else
++   handle = elpa_allocate(&error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++   assert_elpa_ok(error_elpa);
++
++   /* Set parameters */
++   elpa_set(handle, "na", (int) na, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(handle, "nev", (int) nev, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   if (myid == 0) {
++     printf("Setting the matrix parameters na=%d, nev=%d \n",na,nev);
++   }
++   elpa_set(handle, "local_nrows", (int) na_rows, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(handle, "local_ncols", (int) na_cols, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(handle, "nblk", (int) nblk, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++#ifdef WITH_MPI
++   elpa_set(handle, "mpi_comm_parent", (int) (MPI_Comm_c2f(MPI_COMM_WORLD)), &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(handle, "process_row", (int) my_prow, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(handle, "process_col", (int) my_pcol, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++   /* Setup */
++   assert_elpa_ok(elpa_setup(handle));
++
++#if TEST_NVIDIA_GPU == 1
++   elpa_set(handle, "nvidia-gpu", 0, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++#if TEST_INTEL_GPU == 1
++   elpa_set(handle, "intel-gpu", 0, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++ 
++   autotune_handle = elpa_autotune_setup(handle, ELPA_AUTOTUNE_FAST, ELPA_AUTOTUNE_DOMAIN_REAL, &error_elpa);
++   assert_elpa_ok(error_elpa);
++   /* mimic 20 scf steps */
++
++   for (i=0; i < 20; i++) {
++
++      unfinished = elpa_autotune_step(handle, autotune_handle, &error_elpa);
++
++      if (unfinished == 0) {
++        if (myid == 0) {
++       	  printf("ELPA autotuning finished in the %d th scf step \n",i);
++        }
++	break;
++      }
++      if (myid == 0) {
++	printf("The current setting of the ELPA object: \n");
++        elpa_print_settings(handle, &error_elpa);
++
++	printf("The state of the autotuning: \n");
++        elpa_autotune_print_state(handle, autotune_handle, &error_elpa);
++      }
++
++
++      /* Solve EV problem */
++      elpa_eigenvectors(handle, a, ev, z, &error_elpa);
++      assert_elpa_ok(error_elpa);
++
++      /* check the results */
++#ifdef TEST_REAL
++#ifdef TEST_DOUBLE
++      status = check_correctness_evp_numeric_residuals_real_double_f(na, nev, na_rows, na_cols, as, z, ev,
++                                sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol);
++      memcpy(a, as, na_rows*na_cols*sizeof(double));
++
++#else
++      status = check_correctness_evp_numeric_residuals_real_single_f(na, nev, na_rows, na_cols, as, z, ev,
++                                sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol);
++      memcpy(a, as, na_rows*na_cols*sizeof(float));
++#endif
++#else
++#ifdef TEST_DOUBLE
++      status = check_correctness_evp_numeric_residuals_complex_double_f(na, nev, na_rows, na_cols, as, z, ev,
++                                sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol);
++      memcpy(a, as, na_rows*na_cols*sizeof(complex double));
++#else
++      status = check_correctness_evp_numeric_residuals_complex_single_f(na, nev, na_rows, na_cols, as, z, ev,
++                                sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol);
++      memcpy(a, as, na_rows*na_cols*sizeof(complex float));
++#endif
++#endif
++
++      if (status !=0){
++        printf("The computed EVs are not correct !\n");
++	break;
++      }
++      printf("hier %d \n",myid);
++   }
++
++   if (unfinished == 1) {
++     if (myid == 0) {
++        printf("ELPA autotuning did not finished during %d scf cycles\n",i);
++
++     }	     
++
++   }
++   elpa_autotune_set_best(handle, autotune_handle, &error_elpa);
++
++   if (myid == 0) {
++     printf("The best combination found by the autotuning:\n");
++     elpa_autotune_print_best(handle, autotune_handle, &error_elpa);
++   }
++
++#if OPTIONAL_C_ERROR_ARGUMENT == 1
++   elpa_autotune_deallocate(autotune_handle);
++   elpa_deallocate(handle);
++#else
++   elpa_autotune_deallocate(autotune_handle, &error_elpa);
++   elpa_deallocate(handle, &error_elpa);
++#endif
++   elpa_uninit(&error_elpa);
++
++   if (myid == 0) {
++     printf("\n");
++     printf("2stage ELPA real solver complete\n");
++     printf("\n");
++   }
++
++   if (status ==0){
++     if (myid ==0) {
++       printf("All ok!\n");
++     }
++   }
++
++   free(a);
++   free(z);
++   free(as);
++   free(ev);
++
++#ifdef WITH_MPI
++   MPI_Finalize();
++#endif
++
++   return !!status;
++}
+diff -ruN elpa-new_release_2021.11.001/examples/C/test.c elpa-new_release_2021.11.001_ok/examples/C/test.c
+--- elpa-new_release_2021.11.001/examples/C/test.c	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/C/test.c	2022-01-28 09:45:19.528434910 +0100
+@@ -0,0 +1,359 @@
++/*   This file is part of ELPA.
++
++     The ELPA library was originally created by the ELPA consortium,
++     consisting of the following organizations:
++
++     - Max Planck Computing and Data Facility (MPCDF), formerly known as
++       Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++     - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++       Informatik,
++     - Technische Universität München, Lehrstuhl für Informatik mit
++       Schwerpunkt Wissenschaftliches Rechnen ,
++     - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++     - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++       Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++       and
++     - IBM Deutschland GmbH
++
++
++     More information can be found here:
++     http://elpa.mpcdf.mpg.de/
++
++     ELPA is free software: you can redistribute it and/or modify
++     it under the terms of the version 3 of the license of the
++     GNU Lesser General Public License as published by the Free
++     Software Foundation.
++
++     ELPA 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 Lesser General Public License for more details.
++
++     You should have received a copy of the GNU Lesser General Public License
++     along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++
++     ELPA reflects a substantial effort on the part of the original
++     ELPA consortium, and we ask you to respect the spirit of the
++     license that we chose: i.e., please contribute any changes you
++     may have back to the original ELPA library distribution, and keep
++     any derivatives of ELPA under the same license that we chose for
++     the original distribution, the GNU Lesser General Public License.
++*/
++
++#include "config.h"
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#ifdef WITH_MPI
++#include <mpi.h>
++#endif
++#include <math.h>
++
++#include <elpa/elpa.h>
++#include <assert.h>
++
++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX))
++#error "define exactly one of TEST_REAL or TEST_COMPLEX"
++#endif
++
++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE))
++#error "define exactly one of TEST_SINGLE or TEST_DOUBLE"
++#endif
++
++#if !(defined(TEST_SOLVER_1STAGE) ^ defined(TEST_SOLVER_2STAGE))
++#error "define exactly one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE"
++#endif
++
++#ifdef TEST_GENERALIZED_DECOMP_EIGENPROBLEM
++#define TEST_GENERALIZED_EIGENPROBLEM
++#endif
++
++#ifdef TEST_SINGLE
++#  define EV_TYPE float
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE float
++#    define PREPARE_MATRIX_RANDOM prepare_matrix_random_real_single_f
++#    define PREPARE_MATRIX_RANDOM_SPD prepare_matrix_random_spd_real_single_f
++#    define CHECK_CORRECTNESS_EVP_NUMERIC_RESIDUALS check_correctness_evp_numeric_residuals_real_single_f
++#    define CHECK_CORRECTNESS_EVP_GEN_NUMERIC_RESIDUALS check_correctness_evp_gen_numeric_residuals_real_single_f
++#  else
++#    define MATRIX_TYPE complex float
++#    define PREPARE_MATRIX_RANDOM prepare_matrix_random_complex_single_f
++#    define PREPARE_MATRIX_RANDOM_SPD prepare_matrix_random_spd_complex_single_f
++#    define CHECK_CORRECTNESS_EVP_NUMERIC_RESIDUALS check_correctness_evp_numeric_residuals_complex_single_f
++#    define CHECK_CORRECTNESS_EVP_GEN_NUMERIC_RESIDUALS check_correctness_evp_gen_numeric_residuals_complex_single_f
++#  endif
++#else
++#  define EV_TYPE double
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE double
++#    define PREPARE_MATRIX_RANDOM prepare_matrix_random_real_double_f
++#    define PREPARE_MATRIX_RANDOM_SPD prepare_matrix_random_spd_real_double_f
++#    define CHECK_CORRECTNESS_EVP_NUMERIC_RESIDUALS check_correctness_evp_numeric_residuals_real_double_f
++#    define CHECK_CORRECTNESS_EVP_GEN_NUMERIC_RESIDUALS check_correctness_evp_gen_numeric_residuals_real_double_f
++#  else
++#    define MATRIX_TYPE complex double
++#    define PREPARE_MATRIX_RANDOM prepare_matrix_random_complex_double_f
++#    define PREPARE_MATRIX_RANDOM_SPD prepare_matrix_random_spd_complex_double_f
++#    define CHECK_CORRECTNESS_EVP_NUMERIC_RESIDUALS check_correctness_evp_numeric_residuals_complex_double_f
++#    define CHECK_CORRECTNESS_EVP_GEN_NUMERIC_RESIDUALS check_correctness_evp_gen_numeric_residuals_complex_double_f
++#  endif
++#endif
++
++#define assert_elpa_ok(x) assert(x == ELPA_OK)
++
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_C_INT_TYPE_PTR long int*
++#define C_INT_TYPE_PTR long int*
++#define TEST_C_INT_TYPE long int
++#define C_INT_TYPE long int
++#else
++#define TEST_C_INT_TYPE_PTR int*
++#define C_INT_TYPE_PTR int*
++#define TEST_C_INT_TYPE int
++#define C_INT_TYPE int
++#endif
++
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_C_INT_MPI_TYPE_PTR long int*
++#define C_INT_MPI_TYPE_PTR long int*
++#define TEST_C_INT_MPI_TYPE long int
++#define C_INT_MPI_TYPE long int
++#else
++#define TEST_C_INT_MPI_TYPE_PTR int*
++#define C_INT_MPI_TYPE_PTR int*
++#define TEST_C_INT_MPI_TYPE int
++#define C_INT_MPI_TYPE int
++#endif
++
++#define TEST_GPU  0
++#if (TEST_NVIDIA_GPU == 1) || (TEST_AMD_GPU == 1) || (TEST_INTEL_GPU == 1)
++#undef TEST_GPU
++#define TEST_GPU  1
++#endif
++
++
++#include "generated.h"
++
++int main(int argc, char** argv) {
++   /* matrix dimensions */
++   C_INT_TYPE na, nev, nblk;
++
++   /* mpi */
++   C_INT_TYPE myid, nprocs;
++   C_INT_MPI_TYPE myidMPI, nprocsMPI;
++   C_INT_TYPE na_cols, na_rows;
++   C_INT_TYPE np_cols, np_rows;
++   C_INT_TYPE my_prow, my_pcol;
++   C_INT_TYPE mpi_comm;
++   C_INT_MPI_TYPE provided_mpi_thread_level;
++
++   /* blacs */
++   C_INT_TYPE my_blacs_ctxt, sc_desc[9], info;
++
++   /* The Matrix */
++   MATRIX_TYPE *a, *as, *z, *b, *bs;
++   EV_TYPE *ev;
++
++   C_INT_TYPE error, status;
++   int error_elpa;
++
++   elpa_t handle;
++
++   int  value;
++#ifdef WITH_MPI
++#ifndef WITH_OPENMP_TRADITIONAL
++   MPI_Init(&argc, &argv);
++#else
++   MPI_Init_thread(&argc, &argv, MPI_THREAD_SERIALIZED, &provided_mpi_thread_level);
++
++   if (provided_mpi_thread_level != MPI_THREAD_SERIALIZED) {
++     fprintf(stderr, "MPI ERROR: MPI_THREAD_SERIALIZED is not provided on this system\n");
++     MPI_Finalize();
++     exit(77);
++   }
++#endif
++
++   MPI_Comm_size(MPI_COMM_WORLD, &nprocsMPI);
++   nprocs = (C_INT_TYPE) nprocsMPI;
++   MPI_Comm_rank(MPI_COMM_WORLD, &myidMPI);
++   myid = (C_INT_TYPE) myidMPI;
++
++#else
++   nprocs = 1;
++   myid = 0;
++#endif
++
++   if (argc == 4) {
++     na = atoi(argv[1]);
++     nev = atoi(argv[2]);
++     nblk = atoi(argv[3]);
++   } else {
++     na = 500;
++     nev = 250;
++     nblk = 16;
++   }
++
++   for (np_cols = (C_INT_TYPE) sqrt((double) nprocs); np_cols > 1; np_cols--) {
++     if (nprocs % np_cols == 0) {
++       break;
++     }
++   }
++
++   np_rows = nprocs/np_cols;
++
++   /* set up blacs */
++   /* convert communicators before */
++#ifdef WITH_MPI
++   mpi_comm = MPI_Comm_c2f(MPI_COMM_WORLD);
++#else
++   mpi_comm = 0;
++#endif
++   set_up_blacsgrid_f(mpi_comm, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
++   set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, np_rows, np_cols, &na_rows, &na_cols, sc_desc, my_blacs_ctxt, &info);
++
++   /* allocate the matrices needed for elpa */
++   a  = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   z  = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   as = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   ev = calloc(na, sizeof(EV_TYPE));
++
++   PREPARE_MATRIX_RANDOM(na, myid, na_rows, na_cols, sc_desc, a, z, as);
++
++#if defined(TEST_GENERALIZED_EIGENPROBLEM)
++   b  = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   bs = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   PREPARE_MATRIX_RANDOM_SPD(na, myid, na_rows, na_cols, sc_desc, b, z, bs, nblk, np_rows, np_cols, my_prow, my_pcol);
++#endif
++
++   if (elpa_init(CURRENT_API_VERSION) != ELPA_OK) {
++     fprintf(stderr, "Error: ELPA API version not supported");
++     exit(1);
++   }
++
++   handle = elpa_allocate(&error_elpa);
++   //assert_elpa_ok(error_elpa);
++
++   /* Set parameters */
++   elpa_set(handle, "na", (int) na, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(handle, "nev", (int) nev, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   if (myid == 0) {
++     printf("Setting the matrix parameters na=%d, nev=%d \n",na,nev);
++   }
++   elpa_set(handle, "local_nrows", (int) na_rows, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(handle, "local_ncols", (int) na_cols, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(handle, "nblk", (int) nblk, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++#ifdef WITH_MPI
++   elpa_set(handle, "mpi_comm_parent", (int) (MPI_Comm_c2f(MPI_COMM_WORLD)), &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(handle, "process_row", (int) my_prow, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(handle, "process_col", (int) my_pcol, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++#ifdef TEST_GENERALIZED_EIGENPROBLEM
++   elpa_set(handle, "blacs_context", (int) my_blacs_ctxt, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++   /* Setup */
++   assert_elpa_ok(elpa_setup(handle));
++
++   /* Set tunables */
++#ifdef TEST_SOLVER_1STAGE
++   elpa_set(handle, "solver", ELPA_SOLVER_1STAGE, &error_elpa);
++#else
++   elpa_set(handle, "solver", ELPA_SOLVER_2STAGE, &error_elpa);
++#endif
++   assert_elpa_ok(error_elpa);
++
++#if TEST_NVIDIA_GPU == 1
++   elpa_set(handle, "nvidia-gpu", TEST_GPU, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++#if TEST_AMD_GPU == 1
++   elpa_set(handle, "amd-gpu", TEST_GPU, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++#if TEST_INTEL_GPU == 1
++   elpa_set(handle, "intel-gpu", TEST_GPU, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++#if defined(TEST_SOLVE_2STAGE) && defined(TEST_KERNEL)
++# ifdef TEST_COMPLEX
++   elpa_set(handle, "complex_kernel", TEST_KERNEL, &error_elpa);
++# else
++   elpa_set(handle, "real_kernel", TEST_KERNEL, &error_elpa);
++# endif
++   assert_elpa_ok(error_elpa);
++#endif
++
++   elpa_get(handle, "solver", &value, &error_elpa);
++   if (myid == 0) {
++     printf("Solver is set to %d \n", value);
++   }
++
++#if defined(TEST_GENERALIZED_EIGENPROBLEM)
++     elpa_generalized_eigenvectors(handle, a, b, ev, z, 0, &error_elpa);
++#if defined(TEST_GENERALIZED_DECOMP_EIGENPROBLEM)
++     //a = as, so that the problem can be solved again
++     memcpy(a, as, na_rows * na_cols * sizeof(MATRIX_TYPE));
++     elpa_generalized_eigenvectors(handle, a, b, ev, z, 1, &error_elpa);
++#endif
++#else
++   /* Solve EV problem */
++   elpa_eigenvectors(handle, a, ev, z, &error_elpa);
++#endif
++   assert_elpa_ok(error_elpa);
++
++   elpa_deallocate(handle, &error_elpa);
++   elpa_uninit(&error_elpa);
++
++   /* check the results */
++#if defined(TEST_GENERALIZED_EIGENPROBLEM)
++   status = CHECK_CORRECTNESS_EVP_GEN_NUMERIC_RESIDUALS(na, nev, na_rows, na_cols, as, z, ev,
++                                sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol, bs);
++#else
++   status = CHECK_CORRECTNESS_EVP_NUMERIC_RESIDUALS(na, nev, na_rows, na_cols, as, z, ev,
++                                sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol);
++#endif
++
++   if (status !=0){
++     printf("The computed EVs are not correct !\n");
++   }
++   if (status ==0){
++     printf("All ok!\n");
++   }
++
++   free(a);
++   free(z);
++   free(as);
++   free(ev);
++#if defined(TEST_GENERALIZED_EIGENPROBLEM)
++   free(b);
++   free(bs);
++#endif
++
++#ifdef WITH_MPI
++   MPI_Finalize();
++#endif
++
++   return !!status;
++}
+diff -ruN elpa-new_release_2021.11.001/examples/C/test_multiple_objs.c elpa-new_release_2021.11.001_ok/examples/C/test_multiple_objs.c
+--- elpa-new_release_2021.11.001/examples/C/test_multiple_objs.c	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/C/test_multiple_objs.c	2022-02-01 18:20:51.698668546 +0100
+@@ -0,0 +1,401 @@
++/*   This file is part of ELPA.
++
++     The ELPA library was originally created by the ELPA consortium,
++     consisting of the following organizations:
++
++     - Max Planck Computing and Data Facility (MPCDF), formerly known as
++       Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++     - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++       Informatik,
++     - Technische Universität München, Lehrstuhl für Informatik mit
++       Schwerpunkt Wissenschaftliches Rechnen ,
++     - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++     - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++       Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++       and
++     - IBM Deutschland GmbH
++
++
++     More information can be found here:
++     http://elpa.mpcdf.mpg.de/
++
++     ELPA is free software: you can redistribute it and/or modify
++     it under the terms of the version 3 of the license of the
++     GNU Lesser General Public License as published by the Free
++     Software Foundation.
++
++     ELPA 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 Lesser General Public License for more details.
++
++     You should have received a copy of the GNU Lesser General Public License
++     along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++
++     ELPA reflects a substantial effort on the part of the original
++     ELPA consortium, and we ask you to respect the spirit of the
++     license that we chose: i.e., please contribute any changes you
++     may have back to the original ELPA library distribution, and keep
++     any derivatives of ELPA under the same license that we chose for
++     the original distribution, the GNU Lesser General Public License.
++*/
++
++#include "config.h"
++
++#include <string.h>
++#include <stdio.h>
++#include <stdlib.h>
++#ifdef WITH_MPI
++#include <mpi.h>
++#endif
++#include <math.h>
++
++#include <elpa/elpa.h>
++#include <assert.h>
++
++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX))
++//#error "define exactly one of TEST_REAL or TEST_COMPLEX"
++#endif
++
++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE))
++//#error "define exactly one of TEST_SINGLE or TEST_DOUBLE"
++#endif
++
++#if !(defined(TEST_SOLVER_1STAGE) ^ defined(TEST_SOLVER_2STAGE))
++//#error "define exactly one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE"
++#endif
++
++#ifdef TEST_SINGLE
++#  define EV_TYPE float
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE float
++#  else
++#    define MATRIX_TYPE complex float
++#  endif
++#else
++#  define EV_TYPE double
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE double
++#  else
++#    define MATRIX_TYPE complex double
++#  endif
++#endif
++
++#define assert_elpa_ok(x) assert(x == ELPA_OK)
++#ifdef HAVE_64BIT_INTEGER_SUPPORT
++#define TEST_C_INT_TYPE_PTR long int*
++#define C_INT_TYPE_PTR long int*
++#define TEST_C_INT_TYPE long int
++#define C_INT_TYPE long int
++#else
++#define TEST_C_INT_TYPE_PTR int*
++#define C_INT_TYPE_PTR int*
++#define TEST_C_INT_TYPE int
++#define C_INT_TYPE int
++#endif
++
++#include "generated.h"
++void set_basic_parameters(elpa_t *handle, C_INT_TYPE na, C_INT_TYPE nev, C_INT_TYPE na_rows, C_INT_TYPE na_cols, C_INT_TYPE nblk, C_INT_TYPE my_prow, C_INT_TYPE my_pcol){
++   int error_elpa;
++   elpa_set(*handle, "na", (int) na, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(*handle, "nev", (int) nev, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(*handle, "local_nrows", (int) na_rows, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(*handle, "local_ncols", (int) na_cols, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(*handle, "nblk", (int) nblk, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++#ifdef WITH_MPI
++   elpa_set(*handle, "mpi_comm_parent", (int) (MPI_Comm_c2f(MPI_COMM_WORLD)), &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(*handle, "process_row", (int) my_prow, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(*handle, "process_col", (int) my_pcol, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++}
++
++
++int main(int argc, char** argv) {
++   /* matrix dimensions */
++   C_INT_TYPE na, nev, nblk;
++
++   /* mpi */
++   C_INT_TYPE myid, nprocs;
++   C_INT_TYPE na_cols, na_rows;
++   C_INT_TYPE np_cols, np_rows;
++   C_INT_TYPE my_prow, my_pcol;
++   C_INT_TYPE mpi_comm;
++
++   /* blacs */
++   C_INT_TYPE my_blacs_ctxt, sc_desc[9], info;
++
++   /* The Matrix */
++   MATRIX_TYPE *a, *as, *z;
++   EV_TYPE *ev;
++
++   C_INT_TYPE status;
++   int error_elpa;
++   int gpu, timings, debug; 
++   char str[400];
++
++   elpa_t elpa_handle_1, elpa_handle_2, *elpa_handle_ptr;
++
++   elpa_autotune_t autotune_handle;
++   C_INT_TYPE i, unfinished;
++
++   C_INT_TYPE value;
++#ifdef WITH_MPI
++   MPI_Init_thread(&argc, &argv, MPI_THREAD_SERIALIZED, &info);
++   MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
++   MPI_Comm_rank(MPI_COMM_WORLD, &myid);
++#else
++   nprocs = 1;
++   myid = 0;
++#endif
++
++   if (argc == 4) {
++     na = atoi(argv[1]);
++     nev = atoi(argv[2]);
++     nblk = atoi(argv[3]);
++   } else {
++     na = 500;
++     nev = 250;
++     nblk = 16;
++   }
++
++   for (np_cols = (C_INT_TYPE) sqrt((double) nprocs); np_cols > 1; np_cols--) {
++     if (nprocs % np_cols == 0) {
++       break;
++     }
++   }
++
++   np_rows = nprocs/np_cols;
++
++   /* set up blacs */
++   /* convert communicators before */
++#ifdef WITH_MPI
++   mpi_comm = MPI_Comm_c2f(MPI_COMM_WORLD);
++#else
++   mpi_comm = 0;
++#endif
++   set_up_blacsgrid_f(mpi_comm, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol);
++   set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, np_rows, np_cols, &na_rows, &na_cols, sc_desc, my_blacs_ctxt, &info);
++
++   /* allocate the matrices needed for elpa */
++   a  = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   z  = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   as = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE));
++   ev = calloc(na, sizeof(EV_TYPE));
++
++#ifdef TEST_REAL
++#ifdef TEST_DOUBLE
++   prepare_matrix_random_real_double_f(na, myid, na_rows, na_cols, sc_desc, a, z, as);
++#else
++   prepare_matrix_random_real_single_f(na, myid, na_rows, na_cols, sc_desc, a, z, as);
++#endif
++#else
++#ifdef TEST_DOUBLE
++   prepare_matrix_random_complex_double_f(na, myid, na_rows, na_cols, sc_desc, a, z, as);
++#else
++   prepare_matrix_random_complex_single_f(na, myid, na_rows, na_cols, sc_desc, a, z, as);
++#endif
++#endif
++
++   if (elpa_init(CURRENT_API_VERSION) != ELPA_OK) {
++     fprintf(stderr, "Error: ELPA API version not supported");
++     exit(1);
++   }
++
++   elpa_handle_1 = elpa_allocate(&error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   set_basic_parameters(&elpa_handle_1, na, nev, na_rows, na_cols, nblk, my_prow, my_pcol);
++   /* Setup */
++   assert_elpa_ok(elpa_setup(elpa_handle_1));
++
++#if TEST_NVIDIA_GPU == 1
++   elpa_set(elpa_handle_1, "nvidia-gpu", 0, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++#if TEST_INTEL_GPU == 1
++   elpa_set(elpa_handle_1, "intel-gpu", 0, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++   elpa_set(elpa_handle_1, "timings", 1, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_set(elpa_handle_1, "debug", 1, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_store_settings(elpa_handle_1, "initial_parameters.txt", &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++#ifdef WITH_MPI
++     // barrier after store settings, file created from one MPI rank only, but loaded everywhere
++     MPI_Barrier(MPI_COMM_WORLD);
++#endif
++
++#if OPTIONAL_C_ERROR_ARGUMENT == 1
++   elpa_handle_2 = elpa_allocate();
++#else
++   elpa_handle_2 = elpa_allocate(&error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++   set_basic_parameters(&elpa_handle_2, na, nev, na_rows, na_cols, nblk, my_prow, my_pcol);
++   /* Setup */
++   assert_elpa_ok(elpa_setup(elpa_handle_2));
++
++   elpa_load_settings(elpa_handle_2, "initial_parameters.txt", &error_elpa);
++
++#if TEST_NVIDIA_GPU == 1
++   elpa_get(elpa_handle_2, "nvidia-gpu", &gpu, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++#if TEST_INTEL_GPU == 1
++   elpa_get(elpa_handle_2, "intel-gpu", &gpu, &error_elpa);
++   assert_elpa_ok(error_elpa);
++#endif
++
++   elpa_get(elpa_handle_2, "timings", &timings, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   elpa_get(elpa_handle_2, "debug", &debug, &error_elpa);
++   assert_elpa_ok(error_elpa);
++
++   if ((timings != 1) || (debug != 1) || (gpu != 0)){
++     printf("Parameters not stored or loaded correctly. Aborting... %d, %d, %d\n", timings, debug, gpu);
++     exit(1);
++   }
++
++   elpa_handle_ptr = &elpa_handle_2;
++
++   autotune_handle = elpa_autotune_setup(*elpa_handle_ptr, ELPA_AUTOTUNE_FAST, ELPA_AUTOTUNE_DOMAIN_REAL, &error_elpa);
++   assert_elpa_ok(error_elpa);
++   /* mimic 20 scf steps */
++
++   for (i=0; i < 20; i++) {
++
++      unfinished = elpa_autotune_step(*elpa_handle_ptr, autotune_handle, &error_elpa);
++
++      if (unfinished == 0) {
++        if (myid == 0) {
++          printf("ELPA autotuning finished in the %d th scf step \n",i);
++        }
++        break;
++      }
++
++      elpa_print_settings(*elpa_handle_ptr, &error_elpa);
++      elpa_autotune_print_state(*elpa_handle_ptr, autotune_handle, &error_elpa);
++
++      sprintf(str, "saved_parameters_%d.txt", i);
++      elpa_store_settings(*elpa_handle_ptr, str, &error_elpa);
++      assert_elpa_ok(error_elpa);
++
++      /* Solve EV problem */
++      elpa_eigenvectors(*elpa_handle_ptr, a, ev, z, &error_elpa);
++      assert_elpa_ok(error_elpa);
++
++      /* check the results */
++#ifdef TEST_REAL
++#ifdef TEST_DOUBLE
++      status = check_correctness_evp_numeric_residuals_real_double_f(na, nev, na_rows, na_cols, as, z, ev,
++                                sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol);
++      memcpy(a, as, na_rows*na_cols*sizeof(double));
++
++#else
++      status = check_correctness_evp_numeric_residuals_real_single_f(na, nev, na_rows, na_cols, as, z, ev,
++                                sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol);
++      memcpy(a, as, na_rows*na_cols*sizeof(float));
++#endif
++#else
++#ifdef TEST_DOUBLE
++      status = check_correctness_evp_numeric_residuals_complex_double_f(na, nev, na_rows, na_cols, as, z, ev,
++                                sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol);
++      memcpy(a, as, na_rows*na_cols*sizeof(complex double));
++#else
++      status = check_correctness_evp_numeric_residuals_complex_single_f(na, nev, na_rows, na_cols, as, z, ev,
++                                sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol);
++      memcpy(a, as, na_rows*na_cols*sizeof(complex float));
++#endif
++#endif
++
++      if (status !=0){
++        printf("The computed EVs are not correct !\n");
++        break;
++      }
++
++     elpa_autotune_print_state(*elpa_handle_ptr, autotune_handle, &error_elpa);
++     assert_elpa_ok(error_elpa);
++
++     sprintf(str, "saved_state_%d.txt", i);
++     elpa_autotune_save_state(*elpa_handle_ptr, autotune_handle, str, &error_elpa);
++     assert_elpa_ok(error_elpa);
++
++#ifdef WITH_MPI
++     //barrier after save state, file created from one MPI rank only, but loaded everywhere
++     MPI_Barrier(MPI_COMM_WORLD);
++#endif
++
++     elpa_autotune_load_state(*elpa_handle_ptr, autotune_handle, str, &error_elpa);
++     assert_elpa_ok(error_elpa);
++
++     if (unfinished == 1) {
++       if (myid == 0) {
++          printf("ELPA autotuning did not finished during %d scf cycles\n",i);
++       }
++     }
++
++   }
++   elpa_autotune_set_best(*elpa_handle_ptr, autotune_handle, &error_elpa);
++
++   if (myid == 0) {
++     printf("The best combination found by the autotuning:\n");
++     elpa_autotune_print_best(*elpa_handle_ptr, autotune_handle, &error_elpa);
++   }
++
++   elpa_autotune_deallocate(autotune_handle, &error_elpa);
++   elpa_deallocate(elpa_handle_1, &error_elpa);
++#if OPTIONAL_C_ERROR_ARGUMENT == 1
++   elpa_deallocate(elpa_handle_2);
++#else
++   elpa_deallocate(elpa_handle_2, &error_elpa);
++#endif
++   elpa_uninit(&error_elpa);
++
++   if (myid == 0) {
++     printf("\n");
++     printf("2stage ELPA real solver complete\n");
++     printf("\n");
++   }
++
++   if (status ==0){
++     if (myid ==0) {
++       printf("All ok!\n");
++     }
++   }
++
++   free(a);
++   free(z);
++   free(as);
++   free(ev);
++
++#ifdef WITH_MPI
++   MPI_Finalize();
++#endif
++
++   return !!status;
++}
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/assert.h elpa-new_release_2021.11.001_ok/examples/Fortran/assert.h
+--- elpa-new_release_2021.11.001/examples/Fortran/assert.h	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/assert.h	2022-01-26 10:05:16.438246000 +0100
+@@ -0,0 +1,7 @@
++#define stringify_(x) "x"
++#define stringify(x) stringify_(x)
++#define assert(x) call x_a(x, stringify(x), "F", __LINE__)
++
++#define assert_elpa_ok(error_code) call x_ao(error_code, stringify(error_code), __FILE__, __LINE__)
++
++! vim: syntax=fortran
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa2/complex_2stage_banded.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/complex_2stage_banded.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/elpa2/complex_2stage_banded.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/complex_2stage_banded.F90	2022-01-26 10:09:19.163552000 +0100
+@@ -0,0 +1,300 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++#include "../assert.h"
++!>
++!> Fortran test programm to demonstrates the use of
++!> ELPA 2 complex case library.
++!> If "HAVE_REDIRECT" was defined at build time
++!> the stdout and stderr output of each MPI task
++!> can be redirected to files if the environment
++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set
++!> to "true".
++!>
++!> By calling executable [arg1] [arg2] [arg3] [arg4]
++!> one can define the size (arg1), the number of
++!> Eigenvectors to compute (arg2), and the blocking (arg3).
++!> If these values are not set default values (500, 150, 16)
++!> are choosen.
++!> If these values are set the 4th argument can be
++!> "output", which specifies that the EV's are written to
++!> an ascii file.
++!>
++!> The complex ELPA 2 kernel is set as the default kernel.
++!> However, this can be overriden by setting
++!> the environment variable "COMPLEX_ELPA_KERNEL" to an
++!> appropiate value.
++!>
++
++#include "config-f90.h"
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++program test_complex2_double_banded
++
++!-------------------------------------------------------------------------------
++! Standard eigenvalue problem - COMPLEX version
++!
++! This program demonstrates the use of the ELPA module
++! together with standard scalapack routines
++!
++! Copyright of the original code rests with the authors inside the ELPA
++! consortium. The copyright of any additional modifications shall rest
++! with their original authors, but shall adhere to the licensing terms
++! distributed along with the original code in the file "COPYING".
++!-------------------------------------------------------------------------------
++   use elpa
++
++   !use test_util
++   use test_read_input_parameters
++   use test_check_correctness
++   use test_setup_mpi
++   use test_blacs_infrastructure
++   use test_prepare_matrix
++#ifdef HAVE_REDIRECT
++   use test_redirect
++#endif
++   use test_output_type
++   implicit none
++
++   !-------------------------------------------------------------------------------
++   ! Please set system size parameters below!
++   ! na:   System size
++   ! nev:  Number of eigenvectors to be calculated
++   ! nblk: Blocking factor in block cyclic distribution
++   !-------------------------------------------------------------------------------
++
++   TEST_INT_TYPE              :: nblk
++   TEST_INT_TYPE              :: na, nev
++
++   TEST_INT_TYPE              :: np_rows, np_cols, na_rows, na_cols
++
++   TEST_INT_TYPE              :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols
++   TEST_INT_TYPE              :: i, my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++   TEST_INT_MPI_TYPE          :: mpierr
++#ifdef WITH_MPI
++   !TEST_INT_TYPE, external    :: numroc
++#endif
++   complex(kind=ck8), parameter   :: CZERO = (0.0_rk8,0.0_rk8), CONE = (1.0_rk8,0.0_rk8)
++   real(kind=rk8), allocatable    :: ev(:)
++
++   complex(kind=ck8), allocatable :: a(:,:), z(:,:), as(:,:)
++
++   TEST_INT_TYPE              :: STATUS
++#ifdef WITH_OPENMP_TRADITIONAL
++   TEST_INT_TYPE              :: omp_get_max_threads,  required_mpi_thread_level, provided_mpi_thread_level
++#endif
++   type(output_t)                :: write_to_file
++   integer(kind=c_int)          :: error_elpa
++   character(len=8)              :: task_suffix
++   TEST_INT_TYPE              :: j
++
++
++   TEST_INT_TYPE              :: numberOfDevices
++   TEST_INT_TYPE              :: global_row, global_col, local_row, local_col
++   TEST_INT_TYPE              :: bandwidth
++   class(elpa_t), pointer        :: e
++
++#define COMPLEXCASE
++#define DOUBLE_PRECISION_COMPLEX 1
++
++   call read_input_parameters(na, nev, nblk, write_to_file)
++
++   if (nblk .eq. 1) then
++     stop 77
++   endif
++
++   !-------------------------------------------------------------------------------
++   !  MPI Initialization
++   call setup_mpi(myid, nprocs)
++
++   STATUS = 0
++
++   !-------------------------------------------------------------------------------
++   ! Selection of number of processor rows/columns
++   ! We try to set up the grid square-like, i.e. start the search for possible
++   ! divisors of nprocs with a number next to the square root of nprocs
++   ! and decrement it until a divisor is found.
++
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++      if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++   ! at the end of the above loop, nprocs is always divisible by np_cols
++
++   np_rows = nprocs/np_cols
++
++   if(myid==0) then
++      print *
++      print '(a)','Standard eigenvalue problem - COMPLEX version'
++      print *
++      print '(3(a,i0))','Matrix size=',na,', Number of eigenvectors=',nev,', Block size=',nblk
++      print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs
++      print *
++   endif
++
++   !-------------------------------------------------------------------------------
++   ! Set up BLACS context and MPI communicators
++   !
++   ! The BLACS context is only necessary for using Scalapack.
++   !
++   ! For ELPA, the MPI communicators along rows/cols are sufficient,
++   ! and the grid setup may be done in an arbitrary way as long as it is
++   ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
++   ! process has a unique (my_prow,my_pcol) pair).
++
++   call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, 'C', &
++                         my_blacs_ctxt, my_prow, my_pcol)
++
++   if (myid==0) then
++     print '(a)','| Past BLACS_Gridinfo.'
++   end if
++
++   ! Determine the necessary size of the distributed matrices,
++   ! we use the Scalapack tools routine NUMROC for that.
++
++   call set_up_blacs_descriptor(na ,nblk, my_prow, my_pcol, np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   if (myid==0) then
++     print '(a)','| Past scalapack descriptor setup.'
++   end if
++   !-------------------------------------------------------------------------------
++   ! Allocate matrices and set up a test matrix for the eigenvalue problem
++
++   allocate(a (na_rows,na_cols))
++   allocate(z (na_rows,na_cols))
++   allocate(as(na_rows,na_cols))
++
++   allocate(ev(na))
++
++   call prepare_matrix_random(na, myid, sc_desc, a, z, as)
++
++   ! set values outside of the bandwidth to zero
++   bandwidth = nblk
++
++   do local_row = 1, na_rows
++     global_row = index_l2g( local_row, nblk, my_prow, np_rows )
++     do local_col = 1, na_cols
++       global_col = index_l2g( local_col, nblk, my_pcol, np_cols )
++
++       if (ABS(global_row-global_col) > bandwidth) then
++         a(local_row, local_col) = 0
++         as(local_row, local_col) = 0
++       end if
++     end do
++   end do
++
++
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++
++   e => elpa_allocate(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e%set("na", int(na,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nev", int(nev,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nblk", int(nblk,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#ifdef WITH_MPI
++   call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_row", int(my_prow,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++   call e%set("bandwidth", int(bandwidth,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   assert(e%setup() .eq. ELPA_OK)
++
++   call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%eigenvectors(a, ev, z, error_elpa)
++   assert_elpa_ok(error_elpa)
++   call elpa_deallocate(e, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call elpa_uninit(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   !-------------------------------------------------------------------------------
++   ! Test correctness of result (using plain scalapack routines)
++   status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol)
++
++   deallocate(a)
++   deallocate(as)
++
++   deallocate(z)
++   deallocate(ev)
++
++#ifdef WITH_MPI
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++#endif
++   call EXIT(STATUS)
++end
++
++!-------------------------------------------------------------------------------
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa2/double_instance.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/double_instance.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/elpa2/double_instance.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/double_instance.F90	2022-01-26 10:09:19.164133000 +0100
+@@ -0,0 +1,244 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++#include "../assert.h"
++
++program test_interface
++   use elpa
++
++   use precision_for_tests
++   !use test_util
++   use test_setup_mpi
++   use test_prepare_matrix
++   use test_read_input_parameters
++   use test_blacs_infrastructure
++   use test_check_correctness
++   implicit none
++
++   ! matrix dimensions
++   TEST_INT_TYPE :: na, nev, nblk
++
++   ! mpi
++   TEST_INT_TYPE :: myid, nprocs
++   TEST_INT_TYPE :: na_cols, na_rows  ! local matrix size
++   TEST_INT_TYPE :: np_cols, np_rows  ! number of MPI processes per column/row
++   TEST_INT_TYPE :: my_prow, my_pcol  ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1)
++   TEST_INT_MPI_TYPE :: mpierr
++
++   ! blacs
++   TEST_INT_TYPE :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++
++   ! The Matrix
++   real(kind=C_DOUBLE), allocatable :: a1(:,:), as1(:,:)
++   ! eigenvectors
++   real(kind=C_DOUBLE), allocatable :: z1(:,:)
++   ! eigenvalues
++   real(kind=C_DOUBLE), allocatable :: ev1(:)
++
++   ! The Matrix
++   complex(kind=C_DOUBLE_COMPLEX), allocatable :: a2(:,:), as2(:,:)
++   ! eigenvectors
++   complex(kind=C_DOUBLE_COMPLEX), allocatable :: z2(:,:)
++   ! eigenvalues
++   real(kind=C_DOUBLE), allocatable :: ev2(:)
++   TEST_INT_TYPE :: status
++   integer(kind=c_int) :: error_elpa
++
++   TEST_INT_TYPE :: solver
++   TEST_INT_TYPE :: qr
++
++   type(output_t) :: write_to_file
++   class(elpa_t), pointer :: e1, e2
++
++   call read_input_parameters(na, nev, nblk, write_to_file)
++   call setup_mpi(myid, nprocs)
++
++   status = 0
++
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++      if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++
++   np_rows = nprocs/np_cols
++
++   my_prow = mod(myid, np_cols)
++   my_pcol = myid / np_cols
++
++   call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, 'C', &
++                         my_blacs_ctxt, my_prow, my_pcol)
++
++   call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   allocate(a1 (na_rows,na_cols), as1(na_rows,na_cols))
++   allocate(z1 (na_rows,na_cols))
++   allocate(ev1(na))
++
++   a1(:,:) = 0.0
++   z1(:,:) = 0.0
++   ev1(:) = 0.0
++
++   call prepare_matrix_random(na, myid, sc_desc, a1, z1, as1)
++   allocate(a2 (na_rows,na_cols), as2(na_rows,na_cols))
++   allocate(z2 (na_rows,na_cols))
++   allocate(ev2(na))
++
++   a2(:,:) = 0.0
++   z2(:,:) = 0.0
++   ev2(:) = 0.0
++
++   call prepare_matrix_random(na, myid, sc_desc, a2, z2, as2)
++
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++
++   e1 => elpa_allocate(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e1%set("na", int(na,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e1%set("nev", int(nev,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e1%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e1%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e1%set("nblk", int(nblk,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#ifdef WITH_MPI
++   call e1%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e1%set("process_row", int(my_prow,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e1%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++   assert(e1%setup() .eq. ELPA_OK)
++
++   call e1%set("solver", ELPA_SOLVER_2STAGE, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e1%set("real_kernel", ELPA_2STAGE_REAL_DEFAULT, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++
++   e2 => elpa_allocate(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e2%set("na", int(na,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e2%set("nev", int(nev,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e2%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e2%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e2%set("nblk", int(nblk,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#ifdef WITH_MPI
++   call e2%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e2%set("process_row", int(my_prow,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e2%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++   assert(e2%setup() .eq. ELPA_OK)
++
++   call e2%set("solver", ELPA_SOLVER_1STAGE, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e1%eigenvectors(a1, ev1, z1, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call elpa_deallocate(e1, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e2%eigenvectors(a2, ev2, z2, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call elpa_deallocate(e2, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call elpa_uninit(error_elpa)
++
++   status = check_correctness_evp_numeric_residuals(na, nev, as1, z1, ev1, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol)
++
++   deallocate(a1)
++   deallocate(as1)
++   deallocate(z1)
++   deallocate(ev1)
++
++   status = check_correctness_evp_numeric_residuals(na, nev, as2, z2, ev2, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol)
++
++   deallocate(a2)
++   deallocate(as2)
++   deallocate(z2)
++   deallocate(ev2)
++
++#ifdef WITH_MPI
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++#endif
++   call EXIT(STATUS)
++
++
++end program
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa2/real_2stage_banded.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/real_2stage_banded.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/elpa2/real_2stage_banded.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/real_2stage_banded.F90	2022-01-26 10:09:19.164859000 +0100
+@@ -0,0 +1,298 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++#include "../assert.h"
++!>
++!> Fortran test programm to demonstrates the use of
++!> ELPA 2 real case library.
++!> If "HAVE_REDIRECT" was defined at build time
++!> the stdout and stderr output of each MPI task
++!> can be redirected to files if the environment
++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set
++!> to "true".
++!>
++!> By calling executable [arg1] [arg2] [arg3] [arg4]
++!> one can define the size (arg1), the number of
++!> Eigenvectors to compute (arg2), and the blocking (arg3).
++!> If these values are not set default values (500, 150, 16)
++!> are choosen.
++!> If these values are set the 4th argument can be
++!> "output", which specifies that the EV's are written to
++!> an ascii file.
++!>
++!> The real ELPA 2 kernel is set as the default kernel.
++!> However, this can be overriden by setting
++!> the environment variable "REAL_ELPA_KERNEL" to an
++!> appropiate value.
++!>
++
++#include "config-f90.h"
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++program test_real2_double_banded
++
++!-------------------------------------------------------------------------------
++! Standard eigenvalue problem - REAL version
++!
++! This program demonstrates the use of the ELPA module
++! together with standard scalapack routines
++!
++! Copyright of the original code rests with the authors inside the ELPA
++! consortium. The copyright of any additional modifications shall rest
++! with their original authors, but shall adhere to the licensing terms
++! distributed along with the original code in the file "COPYING".
++!
++!-------------------------------------------------------------------------------
++   use elpa
++
++   !use test_util
++   use test_read_input_parameters
++   use test_check_correctness
++   use test_setup_mpi
++   use test_blacs_infrastructure
++   use test_prepare_matrix
++#ifdef HAVE_REDIRECT
++   use test_redirect
++#endif
++   use test_output_type
++   implicit none
++
++   !-------------------------------------------------------------------------------
++   ! Please set system size parameters below!
++   ! na:   System size
++   ! nev:  Number of eigenvectors to be calculated
++   ! nblk: Blocking factor in block cyclic distribution
++   !-------------------------------------------------------------------------------
++
++   TEST_INT_TYPE           :: nblk
++   TEST_INT_TYPE           :: na, nev
++
++   TEST_INT_TYPE           :: np_rows, np_cols, na_rows, na_cols
++
++   TEST_INT_TYPE           :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols
++   TEST_INT_TYPE           :: i,  my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++   TEST_INT_MPI_TYPE       :: mpierr
++   !TEST_INT_TYPE, external :: numroc
++
++   real(kind=rk8), allocatable :: a(:,:), z(:,:), as(:,:), ev(:)
++
++   TEST_INT_TYPE           :: STATUS
++#ifdef WITH_OPENMP_TRADITIONAL
++   TEST_INT_TYPE           :: omp_get_max_threads,  required_mpi_thread_level, provided_mpi_thread_level
++#endif
++   integer(kind=c_int)          :: error_elpa
++   TEST_INT_TYPE           :: numberOfDevices
++   type(output_t)             :: write_to_file
++   character(len=8)           :: task_suffix
++   TEST_INT_TYPE           :: j
++   TEST_INT_TYPE           :: global_row, global_col, local_row, local_col
++   TEST_INT_TYPE           :: bandwidth
++   class(elpa_t), pointer     :: e
++#define DOUBLE_PRECISION_REAL 1
++
++
++   call read_input_parameters(na, nev, nblk, write_to_file)
++
++   if (nblk .eq. 1) then
++     stop 77
++   endif
++
++   !-------------------------------------------------------------------------------
++   !  MPI Initialization
++   call setup_mpi(myid, nprocs)
++
++   STATUS = 0
++
++#define REALCASE
++
++   !-------------------------------------------------------------------------------
++   ! Selection of number of processor rows/columns
++   ! We try to set up the grid square-like, i.e. start the search for possible
++   ! divisors of nprocs with a number next to the square root of nprocs
++   ! and decrement it until a divisor is found.
++
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++      if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++   ! at the end of the above loop, nprocs is always divisible by np_cols
++
++   np_rows = nprocs/np_cols
++
++   if(myid==0) then
++      print *
++      print '(a)','Standard eigenvalue problem - REAL version'
++      print *
++      print '(3(a,i0))','Matrix size=',na,', Number of eigenvectors=',nev,', Block size=',nblk
++      print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs
++      print *
++   endif
++
++   !-------------------------------------------------------------------------------
++   ! Set up BLACS context and MPI communicators
++   !
++   ! The BLACS context is only necessary for using Scalapack.
++   !
++   ! For ELPA, the MPI communicators along rows/cols are sufficient,
++   ! and the grid setup may be done in an arbitrary way as long as it is
++   ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
++   ! process has a unique (my_prow,my_pcol) pair).
++
++   call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, 'C', &
++                         my_blacs_ctxt, my_prow, my_pcol)
++
++   if (myid==0) then
++     print '(a)','| Past BLACS_Gridinfo.'
++   end if
++
++   call set_up_blacs_descriptor(na ,nblk, my_prow, my_pcol, np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   if (myid==0) then
++     print '(a)','| Past scalapack descriptor setup.'
++   end if
++
++   !-------------------------------------------------------------------------------
++   ! Allocate matrices and set up a test matrix for the eigenvalue problem
++   allocate(a (na_rows,na_cols))
++   allocate(z (na_rows,na_cols))
++   allocate(as(na_rows,na_cols))
++
++   allocate(ev(na))
++
++   call prepare_matrix_random(na, myid, sc_desc, a, z, as)
++
++   ! set values outside of the bandwidth to zero
++   bandwidth = nblk
++
++   do local_row = 1, na_rows
++     global_row = index_l2g(local_row, nblk, my_prow, np_rows)
++     do local_col = 1, na_cols
++       global_col = index_l2g(local_col, nblk, my_pcol, np_cols)
++
++       if (ABS(global_row-global_col) > bandwidth) then
++         a(local_row, local_col) = 0.0
++         as(local_row, local_col) = 0.0
++       end if
++     end do
++   end do
++
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++   e => elpa_allocate(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e%set("na", int(na,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nev", int(nev,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nblk", int(nblk,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#ifdef WITH_MPI
++   call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_row", int(my_prow,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++   call e%set("bandwidth", int(bandwidth,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   assert(e%setup() .eq. ELPA_OK)
++
++   call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e%eigenvectors(a, ev, z, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call elpa_deallocate(e, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call elpa_uninit(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++
++   !-------------------------------------------------------------------------------
++   ! Test correctness of result (using plain scalapack routines)
++
++   
++   status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol)
++
++
++   deallocate(a)
++   deallocate(as)
++
++   deallocate(z)
++   deallocate(ev)
++
++#ifdef WITH_MPI
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++#endif
++   call EXIT(STATUS)
++end
++
++!-------------------------------------------------------------------------------
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa2/single_complex_2stage_banded.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/single_complex_2stage_banded.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/elpa2/single_complex_2stage_banded.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/single_complex_2stage_banded.F90	2022-01-26 10:09:19.166040000 +0100
+@@ -0,0 +1,299 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++#include "../assert.h"
++!>
++!> Fortran test programm to demonstrates the use of
++!> ELPA 2 complex case library.
++!> If "HAVE_REDIRECT" was defined at build time
++!> the stdout and stderr output of each MPI task
++!> can be redirected to files if the environment
++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set
++!> to "true".
++!>
++!> By calling executable [arg1] [arg2] [arg3] [arg4]
++!> one can define the size (arg1), the number of
++!> Eigenvectors to compute (arg2), and the blocking (arg3).
++!> If these values are not set default values (500, 150, 16)
++!> are choosen.
++!> If these values are set the 4th argument can be
++!> "output", which specifies that the EV's are written to
++!> an ascii file.
++!>
++!> The complex ELPA 2 kernel is set as the default kernel.
++!> However, this can be overriden by setting
++!> the environment variable "COMPLEX_ELPA_KERNEL" to an
++!> appropiate value.
++!>
++program test_complex2_single_banded
++
++!-------------------------------------------------------------------------------
++! Standard eigenvalue problem - COMPLEX version
++!
++! This program demonstrates the use of the ELPA module
++! together with standard scalapack routines
++!
++! Copyright of the original code rests with the authors inside the ELPA
++! consortium. The copyright of any additional modifications shall rest
++! with their original authors, but shall adhere to the licensing terms
++! distributed along with the original code in the file "COPYING".
++!-------------------------------------------------------------------------------
++   use elpa
++
++   use test_util
++   use test_read_input_parameters
++   use test_check_correctness
++   use test_setup_mpi
++   use test_blacs_infrastructure
++   use test_prepare_matrix
++#ifdef HAVE_REDIRECT
++  use test_redirect
++#endif
++
++ use test_output_type
++   implicit none
++
++   !-------------------------------------------------------------------------------
++   ! Please set system size parameters below!
++   ! na:   System size
++   ! nev:  Number of eigenvectors to be calculated
++   ! nblk: Blocking factor in block cyclic distribution
++   !-------------------------------------------------------------------------------
++
++   TEST_INT_TYPE              :: nblk
++   TEST_INT_TYPE              :: na, nev
++
++   TEST_INT_TYPE              :: np_rows, np_cols, na_rows, na_cols
++
++   TEST_INT_TYPE              :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols
++   TEST_INT_TYPE              :: i, my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++   TEST_INT_MPI_TYPE          :: mpierr
++#ifdef WITH_MPI
++   !TEST_INT_TYPE, external    :: numroc
++#endif
++   complex(kind=ck4), parameter   :: CZERO = (0.0_rk4,0.0_rk4), CONE = (1.0_rk4,0.0_rk4)
++   real(kind=rk4), allocatable    :: ev(:)
++
++   complex(kind=ck4), allocatable :: a(:,:), z(:,:), as(:,:)
++
++   TEST_INT_TYPE              :: STATUS
++#ifdef WITH_OPENMP_TRADITIONAL
++   TEST_INT_TYPE              :: omp_get_max_threads,  required_mpi_thread_level, provided_mpi_thread_level
++#endif
++   type(output_t)                :: write_to_file
++   integer(kind=ik)              :: error_elpa
++   character(len=8)              :: task_suffix
++   TEST_INT_TYPE              :: j
++
++
++   TEST_INT_TYPE              :: global_row, global_col, local_row, local_col
++   TEST_INT_TYPE              :: bandwidth
++   class(elpa_t), pointer        :: e
++
++#define COMPLEXCASE
++#define DOUBLE_PRECISION_COMPLEX 1
++
++   call read_input_parameters(na, nev, nblk, write_to_file)
++   if (nblk .eq. 1) then
++     stop 77
++   endif
++
++   !-------------------------------------------------------------------------------
++   !  MPI Initialization
++   call setup_mpi(myid, nprocs)
++
++   STATUS = 0
++
++   !-------------------------------------------------------------------------------
++   ! Selection of number of processor rows/columns
++   ! We try to set up the grid square-like, i.e. start the search for possible
++   ! divisors of nprocs with a number next to the square root of nprocs
++   ! and decrement it until a divisor is found.
++
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++      if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++   ! at the end of the above loop, nprocs is always divisible by np_cols
++
++   np_rows = nprocs/np_cols
++
++   if(myid==0) then
++      print *
++      print '(a)','Standard eigenvalue problem - COMPLEX version'
++      print *
++      print '(3(a,i0))','Matrix size=',na,', Number of eigenvectors=',nev,', Block size=',nblk
++      print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs
++      print *
++   endif
++
++   !-------------------------------------------------------------------------------
++   ! Set up BLACS context and MPI communicators
++   !
++   ! The BLACS context is only necessary for using Scalapack.
++   !
++   ! For ELPA, the MPI communicators along rows/cols are sufficient,
++   ! and the grid setup may be done in an arbitrary way as long as it is
++   ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
++   ! process has a unique (my_prow,my_pcol) pair).
++
++   call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, 'C', &
++                         my_blacs_ctxt, my_prow, my_pcol)
++
++   if (myid==0) then
++     print '(a)','| Past BLACS_Gridinfo.'
++   end if
++
++   ! Determine the necessary size of the distributed matrices,
++   ! we use the Scalapack tools routine NUMROC for that.
++
++   call set_up_blacs_descriptor(na ,nblk, my_prow, my_pcol, np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   if (myid==0) then
++     print '(a)','| Past scalapack descriptor setup.'
++   end if
++   !-------------------------------------------------------------------------------
++   ! Allocate matrices and set up a test matrix for the eigenvalue problem
++
++   allocate(a (na_rows,na_cols))
++   allocate(z (na_rows,na_cols))
++   allocate(as(na_rows,na_cols))
++
++   allocate(ev(na))
++
++   call prepare_matrix_random(na, myid, sc_desc, a, z, as)
++
++   ! set values outside of the bandwidth to zero
++   bandwidth = nblk
++
++   do local_row = 1, na_rows
++     global_row = index_l2g( local_row, nblk, my_prow, np_rows )
++     do local_col = 1, na_cols
++       global_col = index_l2g( local_col, nblk, my_pcol, np_cols )
++
++       if (ABS(global_row-global_col) > bandwidth) then
++         a(local_row, local_col) = 0
++         as(local_row, local_col) = 0
++       end if
++     end do
++   end do
++
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++
++   e => elpa_allocate(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e%set("na", int(na,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nev", int(nev,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nblk", int(nblk,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#ifdef WITH_MPI
++   call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_row", int(my_prow,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++   call e%set("bandwidth", int(bandwidth,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   assert(e%setup() .eq. ELPA_OK)
++
++   call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%eigenvectors(a, ev, z, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call elpa_deallocate(e, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call elpa_uninit(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   !-------------------------------------------------------------------------------
++   ! Test correctness of result (using plain scalapack routines)
++   status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol)
++
++   deallocate(a)
++   deallocate(as)
++
++   deallocate(z)
++   deallocate(ev)
++
++#ifdef WITH_MPI
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++#endif
++   call EXIT(STATUS)
++end
++
++!-------------------------------------------------------------------------------
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa2/single_real_2stage_banded.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/single_real_2stage_banded.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/elpa2/single_real_2stage_banded.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/single_real_2stage_banded.F90	2022-01-26 10:09:19.166871000 +0100
+@@ -0,0 +1,290 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++#include "../assert.h"
++!>
++!> Fortran test programm to demonstrates the use of
++!> ELPA 2 real case library.
++!> If "HAVE_REDIRECT" was defined at build time
++!> the stdout and stderr output of each MPI task
++!> can be redirected to files if the environment
++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set
++!> to "true".
++!>
++!> By calling executable [arg1] [arg2] [arg3] [arg4]
++!> one can define the size (arg1), the number of
++!> Eigenvectors to compute (arg2), and the blocking (arg3).
++!> If these values are not set default values (500, 150, 16)
++!> are choosen.
++!> If these values are set the 4th argument can be
++!> "output", which specifies that the EV's are written to
++!> an ascii file.
++!>
++!> The real ELPA 2 kernel is set as the default kernel.
++!> However, this can be overriden by setting
++!> the environment variable "REAL_ELPA_KERNEL" to an
++!> appropiate value.
++!>
++program test_real2_single_banded
++
++!-------------------------------------------------------------------------------
++! Standard eigenvalue problem - REAL version
++!
++! This program demonstrates the use of the ELPA module
++! together with standard scalapack routines
++!
++! Copyright of the original code rests with the authors inside the ELPA
++! consortium. The copyright of any additional modifications shall rest
++! with their original authors, but shall adhere to the licensing terms
++! distributed along with the original code in the file "COPYING".
++!
++!-------------------------------------------------------------------------------
++   use elpa
++
++   !use test_util
++   use test_read_input_parameters
++   use test_check_correctness
++   use test_setup_mpi
++   use test_blacs_infrastructure
++   use test_prepare_matrix
++#ifdef HAVE_REDIRECT
++   use test_redirect
++#endif
++   use test_output_type
++   use tests_scalapack_interfaces
++   implicit none
++
++   !-------------------------------------------------------------------------------
++   ! Please set system size parameters below!
++   ! na:   System size
++   ! nev:  Number of eigenvectors to be calculated
++   ! nblk: Blocking factor in block cyclic distribution
++   !-------------------------------------------------------------------------------
++
++   TEST_INT_TYPE           :: nblk
++   TEST_INT_TYPE           :: na, nev
++
++   TEST_INT_TYPE           :: np_rows, np_cols, na_rows, na_cols
++
++   TEST_INT_TYPE           :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols
++   TEST_INT_TYPE           :: i, my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++   TEST_INT_MPI_TYPE       :: mpierr
++
++   real(kind=rk4), allocatable :: a(:,:), z(:,:), as(:,:), ev(:)
++
++   TEST_INT_TYPE           :: STATUS
++#ifdef WITH_OPENMP_TRADITIONAL
++   TEST_INT_TYPE           :: omp_get_max_threads,  required_mpi_thread_level, provided_mpi_thread_level
++#endif
++   integer(kind=c_int)     :: error_elpa
++   type(output_t)          :: write_to_file
++   character(len=8)        :: task_suffix
++   TEST_INT_TYPE           :: j
++   TEST_INT_TYPE           :: global_row, global_col, local_row, local_col
++   TEST_INT_TYPE           :: bandwidth
++   class(elpa_t), pointer  :: e
++#define DOUBLE_PRECISION_REAL 1
++
++   call read_input_parameters(na, nev, nblk, write_to_file)
++   if (nblk .eq. 1) then
++     stop 77
++   endif
++
++   !-------------------------------------------------------------------------------
++   !  MPI Initialization
++   call setup_mpi(myid, nprocs)
++
++
++   STATUS = 0
++
++#define REALCASE
++
++   !-------------------------------------------------------------------------------
++   ! Selection of number of processor rows/columns
++   ! We try to set up the grid square-like, i.e. start the search for possible
++   ! divisors of nprocs with a number next to the square root of nprocs
++   ! and decrement it until a divisor is found.
++
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++      if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++   ! at the end of the above loop, nprocs is always divisible by np_cols
++
++   np_rows = nprocs/np_cols
++
++   if(myid==0) then
++      print *
++      print '(a)','Standard eigenvalue problem - REAL version'
++      print *
++      print '(3(a,i0))','Matrix size=',na,', Number of eigenvectors=',nev,', Block size=',nblk
++      print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs
++      print *
++   endif
++
++   !-------------------------------------------------------------------------------
++   ! Set up BLACS context and MPI communicators
++   !
++   ! The BLACS context is only necessary for using Scalapack.
++   !
++   ! For ELPA, the MPI communicators along rows/cols are sufficient,
++   ! and the grid setup may be done in an arbitrary way as long as it is
++   ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every
++   ! process has a unique (my_prow,my_pcol) pair).
++
++   call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, 'C', &
++                         my_blacs_ctxt, my_prow, my_pcol)
++
++   if (myid==0) then
++     print '(a)','| Past BLACS_Gridinfo.'
++   end if
++
++   call set_up_blacs_descriptor(na ,nblk, my_prow, my_pcol, np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   if (myid==0) then
++     print '(a)','| Past scalapack descriptor setup.'
++   end if
++
++   !-------------------------------------------------------------------------------
++   ! Allocate matrices and set up a test matrix for the eigenvalue problem
++   allocate(a (na_rows,na_cols))
++   allocate(z (na_rows,na_cols))
++   allocate(as(na_rows,na_cols))
++
++   allocate(ev(na))
++
++   call prepare_matrix_random(na, myid, sc_desc, a, z, as)
++
++   ! set values outside of the bandwidth to zero
++   bandwidth = nblk
++
++   do local_row = 1, na_rows
++     global_row = index_l2g( local_row, nblk, my_prow, np_rows )
++     do local_col = 1, na_cols
++       global_col = index_l2g( local_col, nblk, my_pcol, np_cols )
++
++       if (ABS(global_row-global_col) > bandwidth) then
++         a(local_row, local_col) = 0.0
++         as(local_row, local_col) = 0.0
++       end if
++     end do
++   end do
++
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++   e => elpa_allocate(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e%set("na", int(na,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nev", int(nev,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nblk", int(nblk,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#ifdef WITH_MPI
++   call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_row", int(my_prow,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++   call e%set("bandwidth", int(bandwidth,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   assert(e%setup() .eq. ELPA_OK)
++
++   call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e%eigenvectors(a, ev, z, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call elpa_deallocate(e, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call elpa_uninit(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++
++   !-------------------------------------------------------------------------------
++   ! Test correctness of result (using plain scalapack routines)
++
++   status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol)
++   deallocate(a)
++   deallocate(as)
++
++   deallocate(z)
++   deallocate(ev)
++
++#ifdef WITH_MPI
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++#endif
++   call EXIT(STATUS)
++end
++
++!-------------------------------------------------------------------------------
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa_generalized/test_bindings.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa_generalized/test_bindings.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/elpa_generalized/test_bindings.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa_generalized/test_bindings.F90	2022-01-26 10:09:56.136747000 +0100
+@@ -0,0 +1,168 @@
++#include "config-f90.h"
++
++#include "../assert.h"
++
++program test_bindings
++   use elpa
++
++   use test_util
++   use test_setup_mpi
++!   use test_prepare_matrix
++   use test_read_input_parameters
++   use test_blacs_infrastructure
++!   use test_check_correctness
++!   use test_analytic
++!   use test_scalapack
++
++
++   implicit none
++
++#include "src/elpa_generated_fortran_interfaces.h"
++
++   ! matrix dimensions
++   integer                     :: na, nev, nblk
++
++   ! mpi
++   integer                     :: myid, nprocs
++   integer                     :: na_cols, na_rows  ! local matrix size
++   integer                     :: np_cols, np_rows  ! number of MPI processes per column/row
++   integer                     :: my_prow, my_pcol  ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1)
++   integer                     :: mpierr, mpi_comm_rows, mpi_comm_cols
++   type(output_t)              :: write_to_file
++
++   ! blacs
++   integer                     :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol, i, j
++   character(len=1)            :: layout
++
++
++   ! The Matrix
++   real(kind=C_DOUBLE) , allocatable    :: a(:,:), res(:,:)
++
++   logical                     :: skip_check_correctness
++
++   class(elpa_t), pointer      :: e
++
++   integer                     :: error, status
++
++     call read_input_parameters_traditional(na, nev, nblk, write_to_file, skip_check_correctness)
++     call setup_mpi(myid, nprocs)
++#ifdef WITH_MPI
++     call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++     !call redirect_stdout(myid)
++#endif
++
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++
++   layout = 'C'
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++      if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++
++   np_rows = nprocs/np_cols
++   assert(nprocs == np_rows * np_cols)
++
++   if (myid == 0) then
++     print '((a,i0))', 'Matrix size: ', na
++     print '((a,i0))', 'Num eigenvectors: ', nev
++     print '((a,i0))', 'Blocksize: ', nblk
++#ifdef WITH_MPI
++     print '((a,i0))', 'Num MPI proc: ', nprocs
++     print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs
++     print '(a)',      'Process layout: ' // layout
++#endif
++     print *,''
++   endif
++
++
++   call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, layout, &
++                         my_blacs_ctxt, my_prow, my_pcol)
++
++   call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   allocate(a (na_rows,na_cols))
++   allocate(res(na_rows,na_cols))   
++
++   e => elpa_allocate(error)
++   assert_elpa_ok(error)
++
++   call e%set("na", na, error)
++   assert_elpa_ok(error)
++   call e%set("nev", nev, error)
++   assert_elpa_ok(error)
++   call e%set("local_nrows", na_rows, error)
++   assert_elpa_ok(error)
++   call e%set("local_ncols", na_cols, error)
++   assert_elpa_ok(error)
++   call e%set("nblk", nblk, error)
++   assert_elpa_ok(error)
++
++#ifdef WITH_MPI
++   call e%set("mpi_comm_parent", MPI_COMM_WORLD, error)
++   assert_elpa_ok(error)
++   call e%set("process_row", my_prow, error)
++   assert_elpa_ok(error)
++   call e%set("process_col", my_pcol, error)
++   assert_elpa_ok(error)
++#endif
++
++   call e%get("mpi_comm_rows",mpi_comm_rows, error)
++   assert_elpa_ok(error)
++   call e%get("mpi_comm_cols",mpi_comm_cols, error)
++   assert_elpa_ok(error)
++
++   a(:,:) = 1.0
++   res(:,:) = 0.0
++
++   call test_c_bindings(a, na_rows, na_cols, np_rows, np_cols, my_prow, my_pcol, sc_desc, res, mpi_comm_rows, mpi_comm_cols)
++
++   status = 0
++   do i = 1, na_rows
++     do j = 1, na_cols
++       if(a(i,j) .ne. 1.0) then
++         write(*,*) i, j, ": wrong value of A: ", a(i,j), ", should be 1"
++         status = 1
++       endif
++       if(res(i,j) .ne. 3.0) then
++         write(*,*) i, j, ": wrong value of res: ", res(i,j), ", should be 3"
++         status = 1
++       endif
++     enddo
++   enddo
++
++   call check_status(status, myid)
++
++   call elpa_deallocate(e, error)
++   assert_elpa_ok(error)
++
++   deallocate(a)
++   deallocate(res)
++   call elpa_uninit(error)
++   assert_elpa_ok(error)
++
++#ifdef WITH_MPI
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++#endif
++
++   call exit(status)
++
++   contains
++
++     subroutine check_status(status, myid)
++       implicit none
++       integer, intent(in) :: status, myid
++       integer :: mpierr
++       if (status /= 0) then
++         if (myid == 0) print *, "Result incorrect!"
++#ifdef WITH_MPI
++         call mpi_finalize(mpierr)
++#endif
++         call exit(status)
++       endif
++     end subroutine
++
++end program
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa_print_headers.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa_print_headers.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/elpa_print_headers.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa_print_headers.F90	2022-01-26 10:04:52.441241000 +0100
+@@ -0,0 +1,282 @@
++#if 0
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++! ELPA1 -- Faster replacements for ScaLAPACK symmetric eigenvalue routines
++!
++! Copyright of the original code rests with the authors inside the ELPA
++! consortium. The copyright of any additional modifications shall rest
++! with their original authors, but shall adhere to the licensing terms
++! distributed along with the original code in the file "COPYING".
++#endif
++
++#ifdef WITH_OPENMP_TRADITIONAL
++   if (myid .eq. 0) then
++      print *,"Threaded version of test program"
++      print *,"Using ",omp_get_max_threads()," threads"
++      print *," "
++   endif
++#endif
++
++#ifndef WITH_MPI
++   if (myid .eq. 0) then
++     print *,"This version of ELPA does not support MPI parallelisation"
++     print *,"For MPI support re-build ELPA with appropiate flags"
++     print *," "
++   endif
++#endif
++
++#ifdef ELPA1
++
++#ifdef REALCASE
++#ifdef DOUBLE_PRECISION_REAL
++   if (myid .eq. 0) then
++     print *," "
++     print *,"Real valued double-precision version of ELPA1 is used"
++     print *," "
++   endif
++#else
++   if (myid .eq. 0) then
++     print *," "
++     print *,"Real valued single-precision version of ELPA1 is used"
++     print *," "
++   endif
++#endif
++
++#endif
++
++#ifdef COMPLEXCASE
++#ifdef DOUBLE_PRECISION_COMPLEX
++   if (myid .eq. 0) then
++     print *," "
++     print *,"Complex valued double-precision version of ELPA1 is used"
++     print *," "
++   endif
++#else
++   if (myid .eq. 0) then
++     print *," "
++     print *,"Complex valued single-precision version of ELPA1 is used"
++     print *," "
++   endif
++#endif
++
++#endif /* DATATYPE */
++
++#else /* ELPA1 */
++
++#ifdef REALCASE
++#ifdef DOUBLE_PRECISION_REAL
++   if (myid .eq. 0) then
++     print *," "
++     print *,"Real valued double-precision version of ELPA2 is used"
++     print *," "
++   endif
++#else
++   if (myid .eq. 0) then
++     print *," "
++     print *,"Real valued single-precision version of ELPA2 is used"
++     print *," "
++   endif
++#endif
++
++#endif
++
++#ifdef COMPLEXCASE
++#ifdef DOUBLE_PRECISION_COMPLEX
++   if (myid .eq. 0) then
++     print *," "
++     print *,"Complex valued double-precision version of ELPA2 is used"
++     print *," "
++   endif
++#else
++   if (myid .eq. 0) then
++     print *," "
++     print *,"Complex valued single-precision version of ELPA2 is used"
++     print *," "
++   endif
++#endif
++
++#endif /* DATATYPE */
++
++#endif /* ELPA1 */
++
++#ifdef WITH_MPI
++    call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++#endif
++#ifdef HAVE_REDIRECT
++   if (check_redirect_environment_variable()) then
++     if (myid .eq. 0) then
++       print *," "
++       print *,"Redirection of mpi processes is used"
++       print *," "
++       if (create_directories() .ne. 1) then
++         write(error_unit,*) "Unable to create directory for stdout and stderr!"
++         stop 1
++       endif
++     endif
++#ifdef WITH_MPI
++     call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++#endif
++     call redirect_stdout(myid)
++   endif
++#endif
++
++#ifndef ELPA1
++
++   if (myid .eq. 0) then
++      print *," "
++      print *,"This ELPA2 is build with"
++#ifdef WITH_NVIDIA_GPU_KERNEL
++        print *,"CUDA GPU support"
++#endif
++#ifdef WITH_NVIDIA_SM80_GPU_KERNEL
++        print *,"CUDA sm_80 GPU support"
++#endif
++#ifdef WITH_INTEL_GPU_KERNEL
++        print *,"INTEL GPU support"
++#endif
++#ifdef WITH_AMD_GPU_KERNEL
++        print *,"AMD GPU support"
++#endif
++      print *," "
++#ifdef REALCASE
++
++#ifdef HAVE_AVX2
++
++#ifdef WITH_REAL_AVX_BLOCK2_KERNEL
++      print *,"AVX2 optimized kernel (2 blocking) for real matrices"
++#endif
++#ifdef WITH_REAL_AVX_BLOCK4_KERNEL
++      print *,"AVX2 optimized kernel (4 blocking) for real matrices"
++#endif
++#ifdef WITH_REAL_AVX_BLOCK6_KERNEL
++      print *,"AVX2 optimized kernel (6 blocking) for real matrices"
++#endif
++
++#else /* no HAVE_AVX2 */
++
++#ifdef HAVE_AVX
++
++#ifdef WITH_REAL_AVX_BLOCK2_KERNEL
++      print *,"AVX optimized kernel (2 blocking) for real matrices"
++#endif
++#ifdef WITH_REAL_AVX_BLOCK4_KERNEL
++      print *,"AVX optimized kernel (4 blocking) for real matrices"
++#endif
++#ifdef WITH_REAL_AVX_BLOCK6_KERNEL
++      print *,"AVX optimized kernel (6 blocking) for real matrices"
++#endif
++
++#endif
++
++#endif /* HAVE_AVX2 */
++
++
++#ifdef WITH_REAL_GENERIC_KERNEL
++     print *,"GENERIC kernel for real matrices"
++#endif
++#ifdef WITH_REAL_GENERIC_SIMPLE_KERNEL
++     print *,"GENERIC SIMPLE kernel for real matrices"
++#endif
++#ifdef WITH_REAL_SSE_ASSEMBLY_KERNEL
++     print *,"SSE ASSEMBLER kernel for real matrices"
++#endif
++#ifdef WITH_REAL_BGP_KERNEL
++     print *,"BGP kernel for real matrices"
++#endif
++#ifdef WITH_REAL_BGQ_KERNEL
++     print *,"BGQ kernel for real matrices"
++#endif
++
++#endif /* DATATYPE == REAL */
++
++#ifdef COMPLEXCASE
++
++#ifdef HAVE_AVX2
++
++#ifdef  WITH_COMPLEX_AVX_BLOCK2_KERNEL
++      print *,"AVX2 optimized kernel (2 blocking) for complex matrices"
++#endif
++#ifdef WITH_COMPLEX_AVX_BLOCK1_KERNEL
++      print *,"AVX2 optimized kernel (1 blocking) for complex matrices"
++#endif
++
++#else /* no HAVE_AVX2 */
++
++#ifdef HAVE_AVX
++
++#ifdef  WITH_COMPLEX_AVX_BLOCK2_KERNEL
++      print *,"AVX optimized kernel (2 blocking) for complex matrices"
++#endif
++#ifdef WITH_COMPLEX_AVX_BLOCK1_KERNEL
++      print *,"AVX optimized kernel (1 blocking) for complex matrices"
++#endif
++
++#endif
++
++#endif /* HAVE_AVX2 */
++
++
++#ifdef WITH_COMPLEX_GENERIC_KERNEL
++     print *,"GENERIC kernel for complex matrices"
++#endif
++#ifdef WITH_COMPLEX_GENERIC_SIMPLE_KERNEL
++     print *,"GENERIC SIMPLE kernel for complex matrices"
++#endif
++#ifdef WITH_COMPLEX_SSE_ASSEMBLY_KERNEL
++     print *,"SSE ASSEMBLER kernel for complex matrices"
++#endif
++
++#endif /* DATATYPE == COMPLEX */
++
++   endif
++#endif /* ELPA1 */
++
++   if (write_to_file%eigenvectors) then
++     if (myid .eq. 0) print *,"Writing Eigenvectors to files"
++   endif
++
++   if (write_to_file%eigenvalues) then
++     if (myid .eq. 0) print *,"Writing Eigenvalues to files"
++   endif
++
++
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_hybrid elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_hybrid
+--- elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_hybrid	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_hybrid	2022-01-28 09:55:45.556223000 +0100
+@@ -0,0 +1,38 @@
++# MPICH, that is IntelMPI or ParaStationMPI
++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
++# OpenMPI
++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a
++LAPACK_LIB = 
++# Intel compiler
++MKL = -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lstdc++
++# GCC
++# MKL = -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lstdc++ -lm
++F90 = mpif90 -O3 -qopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_MODULES) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa
++# GCC
++# F90 = mpif90 -O3 -fopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_MODULES) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa
++LIBS = -L$(ELPA_LIB) -lelpatest_openmp -lelpa_openmp $(SCALAPACK_LIB) $(MKL)
++# CC            = mpicc -qopenmp -O3 
++# GCC
++# CC            = mpicc -fopenmp -O3
++
++all: test_real_1stage_omp test_real_2stage_all_kernels_omp test_autotune_omp test_multiple_objs_omp test_split_comm_omp test_skewsymmetric_omp
++
++test_real_1stage_omp: test.F90
++	/usr/bin/cpp -P -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DTEST_EIGENVECTORS -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -DWITH_MPI -I$(ELPA_INCLUDE_OPENMP)/elpa -o test_real_1stage_omp.F90 test.F90
++	$(F90) -o $@ test_real_1stage_omp.F90 $(LIBS)
++
++test_real_2stage_all_kernels_omp: test.F90
++	/usr/bin/cpp -P -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -DWITH_MPI -I$(ELPA_INCLUDE_OPENMP)/elpa -o test_real_2stage_all_kernels_omp.F90 test.F90
++	$(F90) -o $@ test_real_2stage_all_kernels_omp.F90 $(LIBS)
++
++test_autotune_omp: test_autotune.F90
++	$(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE_OPENMP)/elpa -o $@ test_autotune.F90 $(LIBS)
++
++test_multiple_objs_omp: test_multiple_objs.F90
++	$(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE_OPENMP)/elpa -o $@ test_multiple_objs.F90 $(LIBS)
++
++test_split_comm_omp: test_split_comm.F90
++	$(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE_OPENMP)/elpa -o $@ test_split_comm.F90 $(LIBS)
++
++test_skewsymmetric_omp: test_skewsymmetric.F90
++	$(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE_OPENMP)/elpa -o $@ test_skewsymmetric.F90 $(LIBS)
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_pure elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_pure
+--- elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_pure	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_pure	2022-01-28 09:54:41.176236000 +0100
+@@ -0,0 +1,34 @@
++# MPICH, that is IntelMPI or ParaStationMPI
++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
++# OpenMPI
++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a
++LAPACK_LIB = 
++# Intel compiler
++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++
++# GCC
++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm
++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa
++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL)
++# CC            = mpicc -O3 
++
++all: test_real_1stage test_real_2stage_all_kernels test_autotune test_multiple_objs test_split_comm test_skewsymmetric
++
++test_real_1stage: test.F90
++	/usr/bin/cpp -P -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DTEST_EIGENVECTORS -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o test_real_1stage.F90 test.F90
++	$(F90) -o $@ test_real_1stage.F90 $(LIBS)
++
++test_real_2stage_all_kernels: test.F90
++	/usr/bin/cpp -P -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o test_real_2stage_all_kernels.F90 test.F90
++	$(F90) -o $@ test_real_2stage_all_kernels.F90 $(LIBS)
++
++test_autotune: test_autotune.F90
++	$(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_autotune.F90 $(LIBS)
++
++test_multiple_objs: test_multiple_objs.F90
++	$(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_multiple_objs.F90 $(LIBS)
++
++test_split_comm: test_split_comm.F90
++	$(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_split_comm.F90 $(LIBS)
++
++test_skewsymmetric: test_skewsymmetric.F90
++	$(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_skewsymmetric.F90 $(LIBS)
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_pure_cuda elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_pure_cuda
+--- elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_pure_cuda	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_pure_cuda	2022-01-28 09:54:52.690358000 +0100
+@@ -0,0 +1,34 @@
++# MPICH, that is IntelMPI or ParaStationMPI
++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
++# OpenMPI
++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a
++LAPACK_LIB = 
++# Intel compiler
++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++
++# GCC
++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm
++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa
++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL) -lcudart
++# CC            = mpicc -O3 
++
++all: test_real_1stage test_real_2stage_all_kernels test_autotune test_multiple_objs test_split_comm test_skewsymmetric
++
++test_real_1stage: test.F90
++	/usr/bin/cpp -P -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DTEST_EIGENVECTORS -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o test_real_1stage.F90 test.F90
++	$(F90) -o $@ test_real_1stage.F90 $(LIBS)
++
++test_real_2stage_all_kernels: test.F90
++	/usr/bin/cpp -P -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o test_real_2stage_all_kernels.F90 test.F90
++	$(F90) -o $@ test_real_2stage_all_kernels.F90 $(LIBS)
++
++test_autotune: test_autotune.F90
++	$(F90) -DTEST_REAL -DTEST_NVIDIA_GPU=1 -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_autotune.F90 $(LIBS)
++
++test_multiple_objs: test_multiple_objs.F90
++	$(F90) -DTEST_REAL -DTEST_NVIDIA_GPU=1 -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_multiple_objs.F90 $(LIBS)
++
++test_split_comm: test_split_comm.F90
++	$(F90) -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_split_comm.F90 $(LIBS)
++
++test_skewsymmetric: test_skewsymmetric.F90
++	$(F90) -DTEST_REAL -DTEST_NVIDIA_GPU=1 -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_skewsymmetric.F90 $(LIBS)
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/test_autotune.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/test_autotune.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/test_autotune.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/test_autotune.F90	2022-01-28 18:31:05.305617544 +0100
+@@ -0,0 +1,345 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++! Define one of TEST_REAL or TEST_COMPLEX
++! Define one of TEST_SINGLE or TEST_DOUBLE
++! Define one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE
++! Define TEST_NVIDIA_GPU \in [0, 1]
++! Define TEST_INTEL_GPU \in [0, 1]
++! Define TEST_AMD_GPU \in [0, 1]
++! Define either TEST_ALL_KERNELS or a TEST_KERNEL \in [any valid kernel]
++
++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX))
++error: define exactly one of TEST_REAL or TEST_COMPLEX
++#endif
++
++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE))
++error: define exactly one of TEST_SINGLE or TEST_DOUBLE
++#endif
++
++#ifdef TEST_SINGLE
++#  define EV_TYPE real(kind=C_FLOAT)
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE real(kind=C_FLOAT)
++#  else
++#    define MATRIX_TYPE complex(kind=C_FLOAT_COMPLEX)
++#  endif
++#else
++#  define EV_TYPE real(kind=C_DOUBLE)
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE real(kind=C_DOUBLE)
++#  else
++#    define MATRIX_TYPE complex(kind=C_DOUBLE_COMPLEX)
++#  endif
++#endif
++
++
++#ifdef TEST_REAL
++#  define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_REAL
++#else
++#  define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_COMPLEX
++#endif
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++
++
++#define TEST_GPU 0
++#if (TEST_NVIDIA_GPU == 1) || (TEST_AMD_GPU == 1)
++#undef TEST_GPU
++#define TEST_GPU 1
++#endif
++
++
++#include "assert.h"
++
++program test
++   use elpa
++
++   !use test_util
++   use test_setup_mpi
++   use test_prepare_matrix
++   use test_read_input_parameters
++   use test_blacs_infrastructure
++   use test_check_correctness
++   use test_analytic
++   use iso_fortran_env
++
++#ifdef HAVE_REDIRECT
++   use test_redirect
++#endif
++   implicit none
++
++   ! matrix dimensions
++   TEST_INT_TYPE                     :: na, nev, nblk
++
++   ! mpi
++   TEST_INT_TYPE                     :: myid, nprocs
++   TEST_INT_TYPE                     :: na_cols, na_rows  ! local matrix size
++   TEST_INT_TYPE                     :: np_cols, np_rows  ! number of MPI processes per column/row
++   TEST_INT_TYPE                     :: my_prow, my_pcol  ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1)
++   TEST_INT_MPI_TYPE                 :: mpierr
++
++   ! blacs
++   character(len=1)            :: layout
++   TEST_INT_TYPE                     :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++
++   ! The Matrix
++   MATRIX_TYPE, allocatable    :: a(:,:), as(:,:)
++   ! eigenvectors
++   MATRIX_TYPE, allocatable    :: z(:,:)
++   ! eigenvalues
++   EV_TYPE, allocatable        :: ev(:)
++
++   TEST_INT_TYPE               :: status
++   integer(kind=c_int)         :: error_elpa
++
++   type(output_t)              :: write_to_file
++   class(elpa_t), pointer      :: e
++   class(elpa_autotune_t), pointer :: tune_state
++
++   TEST_INT_TYPE                     :: iter
++   character(len=5)            :: iter_string
++
++   call read_input_parameters(na, nev, nblk, write_to_file)
++!   call setup_mpi(myid, nprocs)
++    call MPI_INIT_THREAD(MPI_THREAD_SERIALIZED,info, mpierr)
++    call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs, mpierr)
++    call MPI_COMM_RANK(MPI_COMM_WORLD,myid, mpierr)
++#ifdef HAVE_REDIRECT
++#ifdef WITH_MPI
++   call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++   call redirect_stdout(myid)
++#endif
++#endif
++
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++
++   layout = 'C'
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++      if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++   np_rows = nprocs/np_cols
++   assert(nprocs == np_rows * np_cols)
++
++   if (myid == 0) then
++     print '((a,i0))', 'Matrix size: ', na
++     print '((a,i0))', 'Num eigenvectors: ', nev
++     print '((a,i0))', 'Blocksize: ', nblk
++#ifdef WITH_MPI
++     print '((a,i0))', 'Num MPI proc: ', nprocs
++     print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs
++     print '(a)',      'Process layout: ' // layout
++#endif
++     print *,''
++   endif
++
++   call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, layout, &
++                         my_blacs_ctxt, my_prow, my_pcol)
++
++   call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   allocate(a (na_rows,na_cols))
++   allocate(as(na_rows,na_cols))
++   allocate(z (na_rows,na_cols))
++   allocate(ev(na))
++
++   a(:,:) = 0.0
++   z(:,:) = 0.0
++   ev(:) = 0.0
++
++   call prepare_matrix_analytic(na, a, nblk, myid, np_rows, np_cols, my_prow, my_pcol, print_times=.false.)
++   as(:,:) = a(:,:)
++
++   e => elpa_allocate(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e%set("na", int(na,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nev", int(nev,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nblk", int(nblk,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   if (layout .eq. 'C') then
++     call e%set("matrix_order",COLUMN_MAJOR_ORDER,error_elpa)
++   else
++     call e%set("matrix_order",ROW_MAJOR_ORDER,error_elpa)
++   endif
++
++#ifdef WITH_MPI
++   call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_row", int(my_prow,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++   call e%set("timings",1, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e%set("debug",1, error_elpa)
++   assert_elpa_ok(error_elpa)
++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0)
++   call e%set("nvidia-gpu", 0, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++#if TEST_AMD_GPU == 1
++   call e%set("amd-gpu", 0, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++#if TEST_INTEL_GPU == 1
++   call e%set("intel-gpu", 0, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++   !call e%set("max_stored_rows", 15, error_elpa)
++
++   !call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa)
++
++   assert_elpa_ok(e%setup())
++
++   if (myid == 0) print *, ""
++
++   ! if you want to use the new autotuning implentation
++   !call e%autotune_set_api_version(20211125, error_elpa)
++   !assert_elpa_ok(error_elpa)
++   ! if you want to use the old one, either do not set autotune_set_api_version
++   ! or set autotune_set_api_version to a supported api version < 20211125
++   tune_state => e%autotune_setup(ELPA_AUTOTUNE_MEDIUM, AUTOTUNE_DOMAIN, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   iter=0
++   do while (e%autotune_step(tune_state, error_elpa))
++     assert_elpa_ok(error_elpa)
++     iter=iter+1
++     write(iter_string,'(I5.5)') iter
++     !call e%print_settings()
++     !call e%store_settings("saved_parameters_"//trim(iter_string)//".txt")
++     call e%timer_start("eigenvectors: iteration "//trim(iter_string))
++     call e%eigenvectors(a, ev, z, error_elpa)
++     assert_elpa_ok(error_elpa)
++     call e%timer_stop("eigenvectors: iteration "//trim(iter_string))
++
++     assert_elpa_ok(error_elpa)
++     if (myid .eq. 0) then
++       print *, ""
++       call e%print_times("eigenvectors: iteration "//trim(iter_string))
++     endif
++     status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, my_prow, my_pcol, &
++                                         .true., .true., print_times=.false.)
++     a(:,:) = as(:,:)
++     call e%autotune_print_state(tune_state)
++     call e%autotune_save_state(tune_state, "saved_state_"//trim(iter_string)//".txt")
++   end do
++
++   !! set and print the autotuned-settings
++   call e%autotune_set_best(tune_state, error_elpa)
++   assert_elpa_ok(error_elpa)
++   if (myid .eq. 0) then
++     flush(output_unit)
++     print *, "The best combination found by the autotuning:"
++     call e%autotune_print_best(tune_state, error_elpa)
++     assert_elpa_ok(error_elpa)
++   endif
++   ! de-allocate autotune object
++   call elpa_autotune_deallocate(tune_state, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   if (myid .eq. 0) then
++     print *, "Running once more time with the best found setting..."
++   endif
++   call e%timer_start("eigenvectors: best setting")
++   call e%eigenvectors(a, ev, z, error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%timer_stop("eigenvectors: best setting")
++   assert_elpa_ok(error_elpa)
++   if (myid .eq. 0) then
++   !  print *, ""
++     call e%print_times("eigenvectors: best setting")
++   endif
++   status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, my_prow, my_pcol, &
++                                       .true., .true., print_times=.false.)
++
++   call elpa_deallocate(e,error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   deallocate(a)
++   deallocate(as)
++   deallocate(z)
++   deallocate(ev)
++
++   call elpa_uninit(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++#ifdef WITH_MPI
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++#endif
++
++   call exit(status)
++
++end program
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/test.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/test.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/test.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/test.F90	2022-01-28 12:00:32.452129948 +0100
+@@ -0,0 +1,1207 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++! Define one of TEST_REAL or TEST_COMPLEX
++! Define one of TEST_SINGLE or TEST_DOUBLE
++! Define one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE
++! Define TEST_NVIDIA_GPU \in [0, 1]
++! Define TEST_INTEL_GPU \in [0, 1]
++! Define TEST_AMD_GPU \in [0, 1]
++! Define either TEST_ALL_KERNELS or a TEST_KERNEL \in [any valid kernel]
++
++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX))
++error: define exactly one of TEST_REAL or TEST_COMPLEX
++#endif
++
++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE))
++error: define exactly one of TEST_SINGLE or TEST_DOUBLE
++#endif
++
++#if !(defined(TEST_SOLVER_1STAGE) ^ defined(TEST_SOLVER_2STAGE) ^ defined(TEST_SCALAPACK_ALL) ^ defined(TEST_SCALAPACK_PART))
++error: define exactly one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE or TEST_SCALAPACK_ALL or TEST_SCALAPACK_PART
++#endif
++
++#ifdef TEST_SOLVER_1STAGE
++#ifdef TEST_ALL_KERNELS
++error: TEST_ALL_KERNELS cannot be defined for TEST_SOLVER_1STAGE
++#endif
++#ifdef TEST_KERNEL
++error: TEST_KERNEL cannot be defined for TEST_SOLVER_1STAGE
++#endif
++#endif
++
++#ifdef TEST_SOLVER_2STAGE
++#if !(defined(TEST_KERNEL) ^ defined(TEST_ALL_KERNELS))
++error: define either TEST_ALL_KERNELS or a valid TEST_KERNEL
++#endif
++#endif
++
++#ifdef TEST_GENERALIZED_DECOMP_EIGENPROBLEM
++#define TEST_GENERALIZED_EIGENPROBLEM
++#endif
++
++#ifdef TEST_SINGLE
++#  define EV_TYPE real(kind=C_FLOAT)
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE real(kind=C_FLOAT)
++#  else
++#    define MATRIX_TYPE complex(kind=C_FLOAT_COMPLEX)
++#  endif
++#else
++#  define EV_TYPE real(kind=C_DOUBLE)
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE real(kind=C_DOUBLE)
++#  else
++#    define MATRIX_TYPE complex(kind=C_DOUBLE_COMPLEX)
++#  endif
++#endif
++
++#ifdef TEST_REAL
++#define KERNEL_KEY "real_kernel"
++#endif
++#ifdef TEST_COMPLEX
++#define KERNEL_KEY "complex_kernel"
++#endif
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++#define TEST_GPU 0
++#if (TEST_NVIDIA_GPU == 1) || (TEST_AMD_GPU == 1) || (TEST_INTEL_GPU == 1)
++#undef TEST_GPU
++#define TEST_GPU 1
++#endif
++
++#include "assert.h"
++
++program test
++   use elpa 
++   !use test_util
++   use test_setup_mpi
++   use test_prepare_matrix
++   use test_read_input_parameters
++   use test_blacs_infrastructure
++   use test_check_correctness
++   use test_analytic
++#ifdef WITH_SCALAPACK_TESTS
++   use test_scalapack
++#endif
++
++#ifdef HAVE_REDIRECT
++   use test_redirect
++#endif
++#ifdef WITH_OPENMP_TRADITIONAL
++   use omp_lib
++#endif
++   use precision_for_tests
++
++#if TEST_GPU_DEVICE_POINTER_API == 1
++   use test_gpu
++#if TEST_NVIDIA_GPU == 1
++   use test_cuda_functions
++#endif
++#if TEST_AMD_GPU == 1
++   use test_hip_functions
++#endif
++
++#endif /* TEST_GPU_DEVICE_POINTER_API */
++
++   implicit none
++
++   ! matrix dimensions
++   TEST_INT_TYPE     :: na, nev, nblk
++
++   ! mpi
++   TEST_INT_TYPE     :: myid, nprocs
++   TEST_INT_MPI_TYPE :: myidMPI, nprocsMPI
++   TEST_INT_TYPE     :: na_cols, na_rows  ! local matrix size
++   TEST_INT_TYPE     :: np_cols, np_rows  ! number of MPI processes per column/row
++   TEST_INT_TYPE     :: my_prow, my_pcol  ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1)
++   TEST_INT_MPI_TYPE :: mpierr
++
++   ! blacs
++   TEST_INT_TYPE     :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++
++   ! The Matrix
++   MATRIX_TYPE, allocatable, target    :: a(:,:)
++   MATRIX_TYPE, allocatable           :: as(:,:)
++#if defined(TEST_HERMITIAN_MULTIPLY)
++   MATRIX_TYPE, allocatable    :: b(:,:), c(:,:)
++#endif
++#if defined(TEST_GENERALIZED_EIGENPROBLEM)
++   MATRIX_TYPE, allocatable    :: b(:,:), bs(:,:)
++#endif
++   ! eigenvectors
++   MATRIX_TYPE, allocatable, target    :: z(:,:)
++   ! eigenvalues
++   EV_TYPE, allocatable, target        :: ev(:)
++
++#if TEST_GPU_DEVICE_POINTER_API == 1
++   type(c_ptr)                :: a_dev, q_dev, ev_dev
++#endif
++
++
++   logical                     :: check_all_evals, skip_check_correctness
++
++#if defined(TEST_MATRIX_TOEPLITZ) || defined(TEST_MATRIX_FRANK)
++   EV_TYPE, allocatable        :: d(:), sd(:), ds(:), sds(:)
++   EV_TYPE                     :: diagonalELement, subdiagonalElement
++#endif
++
++   TEST_INT_TYPE               :: status
++   integer(kind=c_int)         :: error_elpa
++
++   type(output_t)              :: write_to_file
++   class(elpa_t), pointer      :: e
++#ifdef TEST_ALL_KERNELS
++   TEST_INT_TYPE      :: i
++#endif
++#ifdef TEST_ALL_LAYOUTS
++   TEST_INT_TYPE      :: i_layout
++#ifdef BUILD_FUGAKU
++   character(len=1) :: layouts(2)
++#else
++   character(len=1), parameter :: layouts(2) = [ 'C', 'R' ]
++#endif
++#endif
++   integer(kind=c_int):: kernel
++   character(len=1)   :: layout
++   logical            :: do_test_numeric_residual, do_test_numeric_residual_generalized, &
++                         do_test_analytic_eigenvalues, &
++                         do_test_analytic_eigenvalues_eigenvectors,   &
++                         do_test_frank_eigenvalues,  &
++                         do_test_toeplitz_eigenvalues, do_test_cholesky,   &
++                         do_test_hermitian_multiply
++   logical            :: ignoreError, success, successGPU
++#ifdef WITH_OPENMP_TRADITIONAL
++   TEST_INT_TYPE      :: max_threads, threads_caller
++#endif
++#if TEST_GPU_SET_ID == 1
++   TEST_INT_TYPE      :: gpuID
++#endif
++#ifdef SPLIT_COMM_MYSELF
++   TEST_INT_MPI_TYPE  :: mpi_comm_rows, mpi_comm_cols, mpi_string_length, mpierr2
++   character(len=MPI_MAX_ERROR_STRING) :: mpierr_string
++#endif
++
++
++#if TEST_GPU_DEVICE_POINTER_API == 1
++#if TEST_REAL == 1
++#if TEST_DOUBLE
++   integer(kind=c_intptr_t), parameter           :: size_of_datatype = size_of_double_real
++#endif
++#if TEST_SINGLE
++   integer(kind=c_intptr_t), parameter           :: size_of_datatype = size_of_single_real
++#endif
++#endif /* TEST_REAL == 1 */
++
++#if TEST_COMPLEX == 1
++#if TEST_DOUBLE
++   integer(kind=c_intptr_t), parameter           :: size_of_datatype = size_of_double_complex
++#endif
++#if TEST_SINGLE
++   integer(kind=c_intptr_t), parameter           :: size_of_datatype = size_of_single_complex
++#endif
++#endif
++#endif /* TEST_GPU_DEVICE_POINTER_API == 1 */
++
++#ifdef TEST_ALL_LAYOUTS
++#ifdef BUILD_FUGAKU
++   layouts(1) = 'C'
++   layouts(2) = 'R'
++#endif
++#endif
++
++   ignoreError = .false.
++
++   call read_input_parameters_traditional(na, nev, nblk, write_to_file, skip_check_correctness)
++!   call setup_mpi(myid, nprocs)
++    call MPI_INIT_THREAD(MPI_THREAD_SERIALIZED,info, mpierr)
++    call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs, mpierr)
++    call MPI_COMM_RANK(MPI_COMM_WORLD,myid, mpierr)
++
++#ifdef HAVE_REDIRECT
++#ifdef WITH_MPI
++     call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++     call redirect_stdout(myid)
++#endif
++#endif
++
++   check_all_evals = .true.
++
++
++   do_test_numeric_residual = .false.
++   do_test_numeric_residual_generalized = .false.
++   do_test_analytic_eigenvalues = .false.
++   do_test_analytic_eigenvalues_eigenvectors = .false.
++   do_test_frank_eigenvalues = .false.
++   do_test_toeplitz_eigenvalues = .false. 
++
++   do_test_cholesky = .false.
++#if defined(TEST_CHOLESKY)
++   do_test_cholesky = .true.
++#endif
++   do_test_hermitian_multiply = .false.
++#if defined(TEST_HERMITIAN_MULTIPLY)
++   do_test_hermitian_multiply = .true.
++#endif
++
++   status = 0
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++
++   if (myid == 0) then
++     print '((a,i0))', 'Program '
++     // TEST_CASE
++     print *, ""
++   endif
++
++#ifdef TEST_ALL_LAYOUTS
++   do i_layout = 1, size(layouts)               ! layouts
++     layout = layouts(i_layout)
++     do np_cols = 1, nprocs                     ! factors
++       if (mod(nprocs,np_cols) /= 0 ) then
++         cycle
++       endif
++#else
++   layout = 'C'
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++      if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++#endif
++
++   np_rows = nprocs/np_cols
++   assert(nprocs == np_rows * np_cols)
++
++   if (myid == 0) then
++     print '((a,i0))', 'Matrix size: ', na
++     print '((a,i0))', 'Num eigenvectors: ', nev
++     print '((a,i0))', 'Blocksize: ', nblk
++#ifdef WITH_MPI
++     print '((a,i0))', 'Num MPI proc: ', nprocs
++     print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs
++     print '(a)',      'Process layout: ' // layout
++#endif
++     print *,''
++   endif
++
++#if TEST_QR_DECOMPOSITION == 1
++
++#if (TEST_NVIDIA_GPU == 1) || (TEST_INTEL_GPU == 1) || (TEST_AMD_GPU == 1)
++#ifdef WITH_MPI
++     call mpi_finalize(mpierr)
++#endif
++     stop 77
++#endif /* TEST_NVIDIA_GPU || TEST_INTEL_GPU */
++   if (nblk .lt. 64) then
++     if (myid .eq. 0) then
++       print *,"At the moment QR decomposition need blocksize of at least 64"
++     endif
++     if ((na .lt. 64) .and. (myid .eq. 0)) then
++       print *,"This is why the matrix size must also be at least 64 or only 1 MPI task can be used"
++     endif
++
++#ifdef WITH_MPI
++     call mpi_finalize(mpierr)
++#endif
++     stop 77
++   endif
++#endif /* TEST_QR_DECOMPOSITION */
++
++
++   call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, &
++                         np_cols, layout, my_blacs_ctxt, my_prow, &
++                         my_pcol)
++
++
++#if defined(TEST_GENERALIZED_EIGENPROBLEM) && defined(TEST_ALL_LAYOUTS)
++#ifdef WITH_MPI
++     call mpi_finalize(mpierr)
++#endif
++     stop 77
++#endif
++
++
++   call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, &
++                                np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   allocate(a (na_rows,na_cols))
++   allocate(as(na_rows,na_cols))
++   allocate(z (na_rows,na_cols))
++   allocate(ev(na))
++
++#ifdef TEST_HERMITIAN_MULTIPLY
++   allocate(b (na_rows,na_cols))
++   allocate(c (na_rows,na_cols))
++#endif
++
++#ifdef TEST_GENERALIZED_EIGENPROBLEM
++   allocate(b (na_rows,na_cols))
++   allocate(bs (na_rows,na_cols))
++#endif
++
++#if defined(TEST_MATRIX_TOEPLITZ) || defined(TEST_MATRIX_FRANK)
++   allocate(d (na), ds(na))
++   allocate(sd (na), sds(na))
++#endif
++
++   a(:,:) = 0.0
++   z(:,:) = 0.0
++   ev(:) = 0.0
++
++#if defined(TEST_MATRIX_RANDOM) && !defined(TEST_SOLVE_TRIDIAGONAL) && !defined(TEST_CHOLESKY) && !defined(TEST_EIGENVALUES)
++   ! the random matrix can be used in allmost all tests; but for some no
++   ! correctness checks have been implemented; do not allow these
++   ! combinations
++   ! RANDOM + TEST_SOLVE_TRIDIAGONAL: we need a TOEPLITZ MATRIX
++   ! RANDOM + TEST_CHOLESKY: wee need SPD matrix
++   ! RANDOM + TEST_EIGENVALUES: no correctness check known
++
++   ! We also have to take care of special case in TEST_EIGENVECTORS
++#if !defined(TEST_EIGENVECTORS)
++    call prepare_matrix_random(na, myid, sc_desc, a, z, as)
++#else /* TEST_EIGENVECTORS */
++    if (nev .ge. 1) then
++      call prepare_matrix_random(na, myid, sc_desc, a, z, as)
++#ifndef TEST_HERMITIAN_MULTIPLY
++      do_test_numeric_residual = .true.
++#endif
++   else
++     if (myid .eq. 0) then
++       print *,"At the moment with the random matrix you need nev >=1"
++     endif
++#ifdef WITH_MPI
++     call mpi_finalize(mpierr)
++#endif
++     stop 77
++   endif
++#endif /* TEST_EIGENVECTORS */
++    do_test_analytic_eigenvalues = .false.
++    do_test_analytic_eigenvalues_eigenvectors = .false.
++    do_test_frank_eigenvalues = .false.
++    do_test_toeplitz_eigenvalues = .false.
++#endif /* (TEST_MATRIX_RANDOM) */
++
++#if defined(TEST_MATRIX_RANDOM) && defined(TEST_CHOLESKY)
++     call prepare_matrix_random_spd(na, myid, sc_desc, a, z, as, &
++                 nblk, np_rows, np_cols, my_prow, my_pcol)
++    do_test_analytic_eigenvalues = .false.
++    do_test_analytic_eigenvalues_eigenvectors = .false.
++    do_test_frank_eigenvalues = .false.
++    do_test_toeplitz_eigenvalues = .false.
++#endif /* TEST_MATRIX_RANDOM and TEST_CHOLESKY */
++
++#if defined(TEST_MATRIX_RANDOM) && defined(TEST_GENERALIZED_EIGENPROBLEM)
++   ! call prepare_matrix_random(na, myid, sc_desc, a, z, as)
++    call prepare_matrix_random_spd(na, myid, sc_desc, b, z, bs, &
++                 nblk, np_rows, np_cols, my_prow, my_pcol)
++    do_test_analytic_eigenvalues = .false.
++    do_test_analytic_eigenvalues_eigenvectors = .false.
++    do_test_frank_eigenvalues = .false.
++    do_test_toeplitz_eigenvalues = .false.
++    do_test_numeric_residual = .false.
++    do_test_numeric_residual_generalized = .true.
++#endif /* TEST_MATRIX_RANDOM and TEST_GENERALIZED_EIGENPROBLEM */
++
++#if defined(TEST_MATRIX_RANDOM) && (defined(TEST_SOLVE_TRIDIAGONAL) || defined(TEST_EIGENVALUES))
++#error "Random matrix is not allowed in this configuration"
++#endif
++
++#if defined(TEST_MATRIX_ANALYTIC)  && !defined(TEST_SOLVE_TRIDIAGONAL) && !defined(TEST_CHOLESKY)
++   ! the analytic matrix can be used in allmost all tests; but for some no
++   ! correctness checks have been implemented; do not allow these
++   ! combinations
++   ! ANALYTIC + TEST_SOLVE_TRIDIAGONAL: we need a TOEPLITZ MATRIX
++   ! ANALTIC  + TEST_CHOLESKY: no correctness check yet implemented
++
++   call prepare_matrix_analytic(na, a, nblk, myid, np_rows, np_cols, my_prow, my_pcol)
++   as(:,:) = a
++
++   do_test_numeric_residual = .false.
++   do_test_analytic_eigenvalues_eigenvectors = .false.
++#ifndef TEST_HERMITIAN_MULTIPLY
++   do_test_analytic_eigenvalues = .true.
++#endif
++#if defined(TEST_EIGENVECTORS)
++   if (nev .ge. 1) then
++     do_test_analytic_eigenvalues_eigenvectors = .true.
++     do_test_analytic_eigenvalues = .false.
++   else
++     do_test_analytic_eigenvalues_eigenvectors = .false.
++   endif
++#endif
++   do_test_frank_eigenvalues = .false.
++   do_test_toeplitz_eigenvalues = .false.
++#endif /* TEST_MATRIX_ANALYTIC */
++#if defined(TEST_MATRIX_ANALYTIC) && (defined(TEST_SOLVE_TRIDIAGONAL) || defined(TEST_CHOLESKY))
++#error "Analytic matrix is not allowd in this configuration"
++#endif
++
++#if defined(TEST_MATRIX_TOEPLITZ)
++   ! The Toeplitz matrix works in each test
++#ifdef TEST_SINGLE
++   diagonalElement = 0.45_c_float
++   subdiagonalElement =  0.78_c_float
++#else
++   diagonalElement = 0.45_c_double
++   subdiagonalElement =  0.78_c_double
++#endif
++
++! actually we test cholesky for diagonal matrix only
++#if defined(TEST_CHOLESKY)
++#ifdef TEST_SINGLE
++  diagonalElement = (2.546_c_float, 0.0_c_float)
++  subdiagonalElement =  (0.0_c_float, 0.0_c_float)
++#else
++  diagonalElement = (2.546_c_double, 0.0_c_double)
++  subdiagonalElement =  (0.0_c_double, 0.0_c_double)
++#endif
++#endif /* TEST_CHOLESKY */
++
++   ! check first whether to abort
++   if (na < 10) then
++#ifdef WITH_MPI
++     call mpi_finalize(mpierr)
++#endif
++     stop 77
++   endif
++   call prepare_matrix_toeplitz(na, diagonalElement, subdiagonalElement, &
++                                d, sd, ds, sds, a, as, nblk, np_rows, &
++                                np_cols, my_prow, my_pcol)
++
++
++   do_test_numeric_residual = .false.
++#if defined(TEST_EIGENVECTORS)
++   if (nev .ge. 1) then
++     do_test_numeric_residual = .true.
++   else
++     do_test_numeric_residual = .false.
++   endif
++#endif
++
++   do_test_analytic_eigenvalues = .false.
++   do_test_analytic_eigenvalues_eigenvectors = .false.
++   do_test_frank_eigenvalues = .false.
++#if defined(TEST_CHOLESKY)
++   do_test_toeplitz_eigenvalues = .false.
++#else
++   do_test_toeplitz_eigenvalues = .true.
++#endif
++
++#endif /* TEST_MATRIX_TOEPLITZ */
++
++
++#if defined(TEST_MATRIX_FRANK) && !defined(TEST_SOLVE_TRIDIAGONAL) && !defined(TEST_CHOLESKY)
++   ! the random matrix can be used in allmost all tests; but for some no
++   ! correctness checks have been implemented; do not allow these
++   ! combinations
++   ! FRANK + TEST_SOLVE_TRIDIAGONAL: we need a TOEPLITZ MATRIX
++   ! FRANK + TEST_CHOLESKY: no correctness check yet implemented
++
++   ! We also have to take care of special case in TEST_EIGENVECTORS
++#if !defined(TEST_EIGENVECTORS)
++    call prepare_matrix_frank(na, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol)
++
++    do_test_analytic_eigenvalues = .false.
++    do_test_analytic_eigenvalues_eigenvectors = .false.
++#ifndef TEST_HERMITIAN_MULTIPLY
++    do_test_frank_eigenvalues = .true.
++#endif
++    do_test_toeplitz_eigenvalues = .false.
++
++#else /* TEST_EIGENVECTORS */
++
++    if (nev .ge. 1) then
++      call prepare_matrix_frank(na, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol)
++
++    do_test_analytic_eigenvalues = .false.
++    do_test_analytic_eigenvalues_eigenvectors = .false.
++#ifndef TEST_HERMITIAN_MULTIPLY
++    do_test_frank_eigenvalues = .true.
++#endif
++    do_test_toeplitz_eigenvalues = .false.
++    do_test_numeric_residual = .false.
++   else
++    do_test_analytic_eigenvalues = .false.
++    do_test_analytic_eigenvalues_eigenvectors = .false.
++#ifndef TEST_HERMITIAN_MULTIPLY
++    do_test_frank_eigenvalues = .true.
++#endif
++    do_test_toeplitz_eigenvalues = .false.
++    do_test_numeric_residual = .false.
++
++   endif
++
++#endif /* TEST_EIGENVECTORS */
++#endif /* (TEST_MATRIX_FRANK) */
++#if defined(TEST_MATRIX_FRANK) && (defined(TEST_SOLVE_TRIDIAGONAL) || defined(TEST_CHOLESKY))
++#error "FRANK matrix is not allowed in this configuration"
++#endif
++
++
++#ifdef TEST_HERMITIAN_MULTIPLY
++#ifdef TEST_REAL
++
++#ifdef TEST_DOUBLE
++   b(:,:) = 2.0_c_double * a(:,:)
++   c(:,:) = 0.0_c_double
++#else
++   b(:,:) = 2.0_c_float * a(:,:)
++   c(:,:) = 0.0_c_float
++#endif
++
++#endif /* TEST_REAL */
++
++#ifdef TEST_COMPLEX
++
++#ifdef TEST_DOUBLE
++   b(:,:) = 2.0_c_double * a(:,:)
++   c(:,:) = (0.0_c_double, 0.0_c_double)
++#else
++   b(:,:) = 2.0_c_float * a(:,:)
++   c(:,:) = (0.0_c_float, 0.0_c_float)
++#endif
++
++#endif /* TEST_COMPLEX */
++
++#endif /* TEST_HERMITIAN_MULTIPLY */
++
++! if the test is used for (repeated) performacne tests, one might want to skip the checking
++! of the results, which might be time-consuming and not necessary.
++   if(skip_check_correctness) then
++     do_test_numeric_residual = .false.
++     do_test_numeric_residual_generalized = .false.
++     do_test_analytic_eigenvalues = .false.
++     do_test_analytic_eigenvalues_eigenvectors = .false.
++     do_test_frank_eigenvalues = .false.
++     do_test_toeplitz_eigenvalues = .false. 
++     do_test_cholesky = .false.
++   endif
++
++
++#ifdef WITH_OPENMP_TRADITIONAL
++   threads_caller = omp_get_max_threads()
++   if (myid == 0) then
++     print *,"The calling program uses ",threads_caller," threads"
++   endif
++#endif
++
++   e => elpa_allocate(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e%set("na", int(na,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nev", int(nev,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("nblk", int(nblk,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   if (layout .eq. 'C') then
++     call e%set("matrix_order",COLUMN_MAJOR_ORDER,error_elpa)
++   else
++     call e%set("matrix_order",ROW_MAJOR_ORDER,error_elpa)
++   endif
++
++#ifdef WITH_MPI
++#ifdef SPLIT_COMM_MYSELF
++   call mpi_comm_split(MPI_COMM_WORLD, int(my_pcol,kind=MPI_KIND), int(my_prow,kind=MPI_KIND), &
++                       mpi_comm_rows, mpierr)
++   if (mpierr .ne. MPI_SUCCESS) then
++     call MPI_ERROR_STRING(mpierr, mpierr_string, mpi_string_length, mpierr2)
++     write(error_unit,*) "MPI ERROR occured during mpi_comm_split for row communicator: ", trim(mpierr_string)
++     stop 1
++   endif
++
++   call mpi_comm_split(MPI_COMM_WORLD, int(my_prow,kind=MPI_KIND), int(my_pcol,kind=MPI_KIND), &
++                       mpi_comm_cols, mpierr)
++   if (mpierr .ne. MPI_SUCCESS) then
++     call MPI_ERROR_STRING(mpierr,mpierr_string, mpi_string_length, mpierr2)
++     write(error_unit,*) "MPI ERROR occured during mpi_comm_split for col communicator: ", trim(mpierr_string)
++     stop 1
++   endif
++
++   call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("mpi_comm_rows", int(mpi_comm_rows,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("mpi_comm_cols", int(mpi_comm_cols,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++
++#else
++   call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_row", int(my_prow,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++   call e%set("verbose", 1, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++#endif
++#ifdef TEST_GENERALIZED_EIGENPROBLEM
++   call e%set("blacs_context", int(my_blacs_ctxt,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++   call e%set("timings", 1_ik, error_elpa)
++   assert_elpa_ok(e%setup())
++
++#ifdef TEST_SOLVER_1STAGE
++   call e%set("solver", ELPA_SOLVER_1STAGE, error_elpa)
++#else
++   call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa)
++#endif
++   assert_elpa_ok(error_elpa)
++
++#if TEST_NVIDIA_GPU == 1
++   call e%set("nvidia-gpu", TEST_GPU, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++#if TEST_AMD_GPU == 1
++   call e%set("amd-gpu", TEST_GPU, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++#if TEST_INTEL_GPU == 1
++   call e%set("intel-gpu", TEST_GPU, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++#if (TEST_GPU_SET_ID == 1) && (TEST_INTEL_GPU == 0)
++   ! simple test
++   ! Can (and should) fail often
++   !gpuID = mod(myid,2)
++   gpuID = mod(myid,1)
++   call e%set("use_gpu_id", int(gpuID,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++#if TEST_GPU_DEVICE_POINTER_API == 1
++#if defined(TEST_EIGENVECTORS) && defined(TEST_MATRIX_RANDOM)
++   ! create device pointers for a,q, ev copy a to
++#if TEST_NVIDIA_GPU == 1
++   if (gpu_vendor(NVIDIA_GPU) == NVIDIA_GPU) then
++     call set_gpu_parameters()
++   endif
++#endif
++#if TEST_AMD_GPU == 1
++   if (gpu_vendor(AMD_GPU) == AMD_GPU) then
++     call set_gpu_parameters()
++   endif
++#endif
++
++   ! set device
++   success = .true.
++#if TEST_NVIDIA_GPU == 1
++   success = cuda_setdevice(gpuID)
++#endif
++#if TEST_AMD_GPU == 1
++   success = cuda_setdevice(gpuID)
++#endif
++   if (.not.(success)) then
++     print *,"Cannot set GPU device. Aborting..."
++     stop
++   endif
++
++   ! malloc
++   successGPU = gpu_malloc(a_dev, na_rows*na_cols*size_of_datatype)
++   if (.not.(successGPU)) then
++     print *,"Cannot allocate matrix a on GPU! Aborting..."
++     stop
++   endif
++   successGPU = gpu_malloc(q_dev, na_rows*na_cols*size_of_datatype)
++   if (.not.(successGPU)) then
++     print *,"Cannot allocate matrix q on GPU! Aborting..."
++     stop
++   endif
++   successGPU = gpu_malloc(ev_dev, na*size_of_datatype)
++   if (.not.(successGPU)) then
++     print *,"Cannot allocate vector of eigenvalues on GPU! Aborting..."
++     stop
++   endif
++
++   successGPU = gpu_memcpy(a_dev, c_loc(a), na_rows*na_cols*size_of_datatype, &
++                           gpuMemcpyHostToDevice)
++   if (.not.(successGPU)) then
++     print *,"Cannot copy matrix a to GPU! Aborting..."
++     stop
++   endif
++#endif
++#endif /* TEST_GPU_DEVICE_POINTER_API */
++
++#if TEST_QR_DECOMPOSITION == 1
++   call e%set("qr", 1_ik, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++#ifdef WITH_OPENMP_TRADITIONAL
++   max_threads=omp_get_max_threads()
++   call e%set("omp_threads", int(max_threads,kind=c_int), error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++   if (myid == 0) print *, ""
++
++#ifdef TEST_ALL_KERNELS
++   do i = 0, elpa_option_cardinality(KERNEL_KEY)  ! kernels
++#if (TEST_NVIDIA_GPU == 0) && (TEST_INTEL_GPU == 0) && (TEST_AMD_GPU == 0)
++     !if (TEST_GPU .eq. 0) then
++       kernel = elpa_option_enumerate(KERNEL_KEY, int(i,kind=c_int))
++       if (kernel .eq. ELPA_2STAGE_REAL_NVIDIA_GPU) continue
++       if (kernel .eq. ELPA_2STAGE_COMPLEX_NVIDIA_GPU) continue
++       if (kernel .eq. ELPA_2STAGE_REAL_AMD_GPU) continue
++       if (kernel .eq. ELPA_2STAGE_COMPLEX_AMD_GPU) continue
++       if (kernel .eq. ELPA_2STAGE_REAL_INTEL_GPU) continue
++       if (kernel .eq. ELPA_2STAGE_COMPLEX_INTEL_GPU) continue
++     !endif
++#endif
++#endif
++
++#ifdef TEST_KERNEL
++     kernel = TEST_KERNEL
++#endif
++
++#ifdef TEST_SOLVER_2STAGE
++#if TEST_NVIDIA_GPU == 1
++#if defined TEST_REAL
++#if (TEST_NVIDIA_GPU == 1)
++#if WITH_NVIDIA_GPU_SM80_COMPUTE_CAPABILITY == 1
++     kernel = ELPA_2STAGE_REAL_NVIDIA_SM80_GPU
++#else
++     kernel = ELPA_2STAGE_REAL_NVIDIA_GPU
++#endif
++#endif /* TEST_NVIDIA_GPU */
++#if (TEST_AMD_GPU == 1)
++     kernel = ELPA_2STAGE_REAL_AMD_GPU
++#endif
++#if (TEST_INTEL_GPU == 1)
++     kernel = ELPA_2STAGE_REAL_INTEL_GPU
++#endif
++#endif /* TEST_REAL */
++
++#if defined TEST_COMPLEX
++#if (TEST_NVIDIA_GPU == 1)
++     kernel = ELPA_2STAGE_COMPLEX_NVIDIA_GPU
++#endif
++#if (TEST_AMD_GPU == 1)
++     kernel = ELPA_2STAGE_COMPLEX_AMD_GPU
++#endif
++#if (TEST_INTEL_GPU == 1)
++     kernel = ELPA_2STAGE_COMPLEX_INTEL_GPU
++#endif
++#endif /* TEST_COMPLEX */
++#endif /* TEST_GPU == 1 */
++
++
++     call e%set(KERNEL_KEY, kernel, error_elpa)
++#ifdef TEST_KERNEL
++     assert_elpa_ok(error_elpa)
++#else
++     if (error_elpa /= ELPA_OK) then
++       cycle
++     endif
++     ! actually used kernel might be different if forced via environment variables
++     call e%get(KERNEL_KEY, kernel, error_elpa)
++     assert_elpa_ok(error_elpa)
++#endif
++     if (myid == 0) then
++       print *, elpa_int_value_to_string(KERNEL_KEY, kernel) // " kernel"
++     endif
++#endif
++
++#if !defined(TEST_ALL_LAYOUTS)
++! print all parameters
++     call e%print_settings(error_elpa)
++     assert_elpa_ok(error_elpa)
++#endif
++
++#ifdef TEST_ALL_KERNELS
++     call e%timer_start(elpa_int_value_to_string(KERNEL_KEY, kernel))
++#endif
++
++     ! The actual solve step
++#if defined(TEST_EIGENVECTORS)
++#if TEST_QR_DECOMPOSITION == 1
++     call e%timer_start("e%eigenvectors_qr()")
++#else
++     call e%timer_start("e%eigenvectors()")
++#endif
++#ifdef TEST_SCALAPACK_ALL
++     call solve_scalapack_all(na, a, sc_desc, ev, z)
++#elif TEST_SCALAPACK_PART
++     call solve_scalapack_part(na, a, sc_desc, nev, ev, z)
++     check_all_evals = .false. ! scalapack does not compute all eigenvectors
++#else /* TEST_SCALAPACK_PART */
++#ifdef TEST_EXPLICIT_NAME
++#if defined(TEST_REAL)
++#if defined(TEST_DOUBLE)
++#if (TEST_GPU_DEVICE_POINTER_API == 1) && defined(TEST_MATRIX_RANDOM) && defined(TEST_EIGENVECTORS)
++     call e%eigenvectors_double(a_dev, ev_dev, q_dev, error_elpa)
++#else
++     call e%eigenvectors_double(a, ev, z, error_elpa)
++#endif
++#endif /* TEST_DOUBLE */
++#if defined(TEST_SINGLE)
++#if (TEST_GPU_DEVICE_POINTER_API == 1) && defined(TEST_MATRIX_RANDOM) && defined(TEST_EIGENVECTORS)
++     call e%eigenvectors_float(a_dev, ev_dev, q_dev, error_elpa)
++#else
++     call e%eigenvectors_float(a, ev, z, error_elpa)
++#endif
++#endif /* TEST_SINGLE */
++#endif /* TEST_REAL */
++#if defined(TEST_COMPLEX)
++#if defined(TEST_DOUBLE)
++#if (TEST_GPU_DEVICE_POINTER_API == 1) && defined(TEST_MATRIX_RANDOM) && defined(TEST_EIGENVECTORS)
++     call e%eigenvectors_double_complex(a_dev, ev_dev, q_dev, error_elpa)
++#else
++     call e%eigenvectors_double_complex(a, ev, z, error_elpa)
++#endif
++#endif /* TEST_DOUBLE */
++#if defined(TEST_SINGLE)
++#if (TEST_GPU_DEVICE_POINTER_API == 1) && defined(TEST_MATRIX_RANDOM) && defined(TEST_EIGENVECTORS)
++     call e%eigenvectors_float_complex(a_dev, ev_dev, q_dev, error_elpa)
++#else
++     call e%eigenvectors_float_complex(a, ev, z, error_elpa)
++#endif
++#endif /* TEST_SINGLE */
++#endif /* TEST_COMPLEX */
++#else /* TEST_EXPLICIT_NAME */
++     call e%eigenvectors(a, ev, z, error_elpa)
++#endif /* TEST_EXPLICIT_NAME */
++#endif /* TEST_SCALAPACK_PART */
++#if TEST_QR_DECOMPOSITION == 1
++     call e%timer_stop("e%eigenvectors_qr()")
++#else
++     call e%timer_stop("e%eigenvectors()")
++#endif
++#endif /* TEST_EIGENVECTORS  */
++
++#ifdef TEST_EIGENVALUES
++     call e%timer_start("e%eigenvalues()")
++#ifdef TEST_EXPLICIT_NAME
++#if defined(TEST_REAL)
++#if defined(TEST_DOUBLE)
++     call e%eigenvalues_double(a, ev, error_elpa)
++#endif
++#if defined(TEST_SINGLE)
++     call e%eigenvalues_float(a, ev, error_elpa)
++#endif
++#endif /* TEST_REAL */
++#if defined(TEST_COMPLEX)
++#if defined(TEST_DOUBLE)
++     call e%eigenvalues_double_complex(a, ev, error_elpa)
++#endif
++#if defined(TEST_SINGLE)
++     call e%eigenvalues_float_complex(a, ev, error_elpa)
++#endif
++#endif
++#else /* TEST_EXPLICIT_NAME */
++     call e%eigenvalues(a, ev, error_elpa)
++#endif /* TEST_EXPLICIT_NAME */
++     call e%timer_stop("e%eigenvalues()")
++#endif
++
++#if defined(TEST_SOLVE_TRIDIAGONAL)
++     call e%timer_start("e%solve_tridiagonal()")
++     call e%solve_tridiagonal(d, sd, z, error_elpa)
++     call e%timer_stop("e%solve_tridiagonal()")
++     ev(:) = d(:)
++#endif
++
++#if defined(TEST_CHOLESKY)
++     call e%timer_start("e%cholesky()")
++     call e%cholesky(a, error_elpa)
++     assert_elpa_ok(error_elpa)
++     call e%timer_stop("e%cholesky()")
++#endif
++
++#if defined(TEST_HERMITIAN_MULTIPLY)
++     call e%timer_start("e%hermitian_multiply()")
++     call e%hermitian_multiply('F','F', int(na,kind=c_int), a, b, int(na_rows,kind=c_int), &
++                               int(na_cols,kind=c_int), c, int(na_rows,kind=c_int),        &
++                               int(na_cols,kind=c_int), error_elpa)
++     call e%timer_stop("e%hermitian_multiply()")
++#endif
++
++#if defined(TEST_GENERALIZED_EIGENPROBLEM)
++     call e%timer_start("e%generalized_eigenvectors()")
++#if defined(TEST_GENERALIZED_DECOMP_EIGENPROBLEM)
++     call e%timer_start("is_already_decomposed=.false.")
++#endif
++     call e%generalized_eigenvectors(a, b, ev, z, .false., error_elpa)
++#if defined(TEST_GENERALIZED_DECOMP_EIGENPROBLEM)
++     call e%timer_stop("is_already_decomposed=.false.")
++     a = as
++     call e%timer_start("is_already_decomposed=.true.")
++     call e%generalized_eigenvectors(a, b, ev, z, .true., error_elpa)
++     call e%timer_stop("is_already_decomposed=.true.")
++#endif
++     call e%timer_stop("e%generalized_eigenvectors()")
++#endif
++
++     assert_elpa_ok(error_elpa)
++
++#ifdef TEST_ALL_KERNELS
++     call e%timer_stop(elpa_int_value_to_string(KERNEL_KEY, kernel))
++#endif
++
++     if (myid .eq. 0) then
++#ifdef TEST_ALL_KERNELS
++       call e%print_times(elpa_int_value_to_string(KERNEL_KEY, kernel))
++#else /* TEST_ALL_KERNELS */
++
++#if defined(TEST_EIGENVECTORS)
++#if TEST_QR_DECOMPOSITION == 1
++       call e%print_times("e%eigenvectors_qr()")
++#else
++       call e%print_times("e%eigenvectors()")
++#endif
++#endif
++#ifdef TEST_EIGENVALUES
++       call e%print_times("e%eigenvalues()")
++#endif
++#ifdef TEST_SOLVE_TRIDIAGONAL
++       call e%print_times("e%solve_tridiagonal()")
++#endif
++#ifdef TEST_CHOLESKY
++       call e%print_times("e%cholesky()")
++#endif
++#ifdef TEST_HERMITIAN_MULTIPLY
++       call e%print_times("e%hermitian_multiply()")
++#endif
++#ifdef TEST_GENERALIZED_EIGENPROBLEM
++      call e%print_times("e%generalized_eigenvectors()")
++#endif
++#endif /* TEST_ALL_KERNELS */
++     endif
++
++
++
++
++#if TEST_GPU_DEVICE_POINTER_API == 1
++#if defined(TEST_EIGENVECTORS) && defined(TEST_MATRIX_RANDOM)
++   ! copy for testing
++   successGPU = gpu_memcpy(c_loc(z), q_dev, na_rows*na_cols*size_of_datatype, &
++                           gpuMemcpyDeviceToHost)
++   if (.not.(successGPU)) then
++     print *,"cannot copy matrix of eigenvectors from GPU to host! Aborting..."
++     stop
++   endif
++
++   successGPU = gpu_memcpy(c_loc(ev), ev_dev, na*&
++#ifdef TEST_DOUBLE
++           size_of_double_real, &
++#endif
++#ifdef TEST_SINGLE
++           size_of_single_real, &
++#endif
++                           gpuMemcpyDeviceToHost)
++   if (.not.(successGPU)) then
++     print *,"cannot copy vector of eigenvalues from GPU to host! Aborting..."
++     stop
++   endif
++
++   ! and deallocate device pointer
++   successGPU = gpu_free(a_dev)
++   if (.not.(successGPU)) then
++     print *,"cannot free memory of a_dev on GPU. Aborting..."
++     stop
++   endif
++   successGPU = gpu_free(q_dev)
++   if (.not.(successGPU)) then
++     print *,"cannot free memory of q_dev on GPU. Aborting..."
++     stop
++   endif
++   successGPU = gpu_free(ev_dev)
++   if (.not.(successGPU)) then
++     print *,"cannot free memory of ev_dev on GPU. Aborting..."
++     stop
++   endif
++#endif
++#endif
++
++
++     if (do_test_analytic_eigenvalues) then
++       status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, &
++                                           my_prow, my_pcol, check_all_evals, .false.)
++       call check_status(status, myid)
++     endif
++
++     if (do_test_analytic_eigenvalues_eigenvectors) then
++       status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, &
++                                           my_prow, my_pcol, check_all_evals, .true.)
++       call check_status(status, myid)
++     endif
++
++     if(do_test_numeric_residual) then
++       status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, &
++                                                        np_rows,np_cols, my_prow, my_pcol)
++       call check_status(status, myid)
++     endif
++
++     if (do_test_frank_eigenvalues) then
++       status = check_correctness_eigenvalues_frank(na, ev, z, myid)
++       call check_status(status, myid)
++     endif
++
++     if (do_test_toeplitz_eigenvalues) then
++#if defined(TEST_EIGENVALUES) || defined(TEST_SOLVE_TRIDIAGONAL)
++       status = check_correctness_eigenvalues_toeplitz(na, diagonalElement, &
++                                                       subdiagonalElement, ev, z, myid)
++       call check_status(status, myid)
++#endif
++     endif
++
++     if (do_test_cholesky) then
++       status = check_correctness_cholesky(na, a, as, na_rows, sc_desc, myid )
++       call check_status(status, myid)
++     endif
++
++#ifdef TEST_HERMITIAN_MULTIPLY
++     if (do_test_hermitian_multiply) then
++       status = check_correctness_hermitian_multiply(na, a, b, c, na_rows, sc_desc, myid )
++       call check_status(status, myid)
++     endif
++#endif
++
++#ifdef TEST_GENERALIZED_EIGENPROBLEM
++     if(do_test_numeric_residual_generalized) then
++       status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, &
++                                                        np_cols, my_prow, &
++       my_pcol, bs)
++       call check_status(status, myid)
++     endif
++#endif
++
++
++#ifdef WITH_OPENMP_TRADITIONAL
++     if (threads_caller .ne. omp_get_max_threads()) then
++       if (myid .eq. 0) then
++         print *, " ERROR! the number of OpenMP threads has not been restored correctly"
++       endif
++       status = 1
++     endif
++#endif
++     if (myid == 0) then
++       print *, ""
++     endif
++
++#ifdef TEST_ALL_KERNELS
++     a(:,:) = as(:,:)
++#if defined(TEST_MATRIX_TOEPLITZ) || defined(TEST_MATRIX_FRANK)
++     d = ds
++     sd = sds
++#endif
++   end do ! kernels
++#endif
++
++   call elpa_deallocate(e, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   deallocate(a)
++   deallocate(as)
++   deallocate(z)
++   deallocate(ev)
++
++#ifdef TEST_HERMITIAN_MULTIPLY
++   deallocate(b)
++   deallocate(c)
++#endif
++#if defined(TEST_MATRIX_TOEPLITZ) || defined(TEST_MATRIX_FRANK)
++   deallocate(d, ds)
++   deallocate(sd, sds)
++#endif
++#if defined(TEST_GENERALIZED_EIGENPROBLEM)
++  deallocate(b, bs)
++#endif
++
++#ifdef TEST_ALL_LAYOUTS
++   end do ! factors
++   end do ! layouts
++#endif
++   call elpa_uninit(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++#ifdef WITH_MPI
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++#endif
++
++   call exit(status)
++
++   contains
++
++     subroutine check_status(status, myid)
++       implicit none
++       TEST_INT_TYPE, intent(in) :: status, myid
++       TEST_INT_MPI_TYPE         :: mpierr
++       if (status /= 0) then
++         if (myid == 0) print *, "Result incorrect!"
++#ifdef WITH_MPI
++         call mpi_finalize(mpierr)
++#endif
++         call exit(status)
++       endif
++     end subroutine
++
++end program
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/test_multiple_objs.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/test_multiple_objs.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/test_multiple_objs.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/test_multiple_objs.F90	2022-01-28 09:48:29.071140954 +0100
+@@ -0,0 +1,411 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++! Define one of TEST_REAL or TEST_COMPLEX
++! Define one of TEST_SINGLE or TEST_DOUBLE
++! Define one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE
++! Define TEST_NVIDIA_GPU \in [0, 1]
++! Define TEST_INTEL_GPU \in [0, 1]
++! Define TEST_AMD_GPU \in [0, 1]
++! Define either TEST_ALL_KERNELS or a TEST_KERNEL \in [any valid kernel]
++
++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX))
++error: define exactly one of TEST_REAL or TEST_COMPLEX
++#endif
++
++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE))
++error: define exactly one of TEST_SINGLE or TEST_DOUBLE
++#endif
++
++#ifdef TEST_SINGLE
++#  define EV_TYPE real(kind=C_FLOAT)
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE real(kind=C_FLOAT)
++#  else
++#    define MATRIX_TYPE complex(kind=C_FLOAT_COMPLEX)
++#  endif
++#else
++#  define EV_TYPE real(kind=C_DOUBLE)
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE real(kind=C_DOUBLE)
++#  else
++#    define MATRIX_TYPE complex(kind=C_DOUBLE_COMPLEX)
++#  endif
++#endif
++
++
++#ifdef TEST_REAL
++#  define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_REAL
++#else
++#  define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_COMPLEX
++#endif
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++#define TEST_GPU 0
++#if (TEST_NVIDIA_GPU == 1) || (TEST_AMD_GPU == 1) || (TEST_INTEL_GPU == 1)
++#undef TEST_GPU
++#define TEST_GPU 1
++#endif
++
++#include "assert.h"
++
++program test
++   use elpa
++
++   !use test_util
++   use test_setup_mpi
++   use test_prepare_matrix
++   use test_read_input_parameters
++   use test_blacs_infrastructure
++   use test_check_correctness
++   use test_analytic
++   use iso_fortran_env
++
++#ifdef HAVE_REDIRECT
++   use test_redirect
++#endif
++   implicit none
++
++   ! matrix dimensions
++   TEST_INT_TYPE                     :: na, nev, nblk
++
++   ! mpi
++   TEST_INT_TYPE                     :: myid, nprocs
++   TEST_INT_TYPE                     :: na_cols, na_rows  ! local matrix size
++   TEST_INT_TYPE                     :: np_cols, np_rows  ! number of MPI processes per column/row
++   TEST_INT_TYPE                     :: my_prow, my_pcol  ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1)
++   TEST_INT_TYPE                     :: ierr
++   TEST_INT_MPI_TYPE                 :: mpierr
++   ! blacs
++   character(len=1)                  :: layout
++   TEST_INT_TYPE                     :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++
++   ! The Matrix
++   MATRIX_TYPE, allocatable    :: a(:,:), as(:,:)
++   ! eigenvectors
++   MATRIX_TYPE, allocatable    :: z(:,:)
++   ! eigenvalues
++   EV_TYPE, allocatable        :: ev(:)
++
++   TEST_INT_TYPE               :: status
++   integer(kind=c_int)         :: error_elpa
++
++   type(output_t)              :: write_to_file
++   class(elpa_t), pointer      :: e1, e2, e_ptr
++   class(elpa_autotune_t), pointer :: tune_state
++
++   TEST_INT_TYPE                     :: iter
++   character(len=5)            :: iter_string
++   integer(kind=c_int)         :: timings, debug, gpu
++
++   call read_input_parameters(na, nev, nblk, write_to_file)
++!   call setup_mpi(myid, nprocs)
++    call MPI_INIT_THREAD(MPI_THREAD_SERIALIZED,info, mpierr)
++    call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs, mpierr)
++    call MPI_COMM_RANK(MPI_COMM_WORLD,myid, mpierr)
++#ifdef HAVE_REDIRECT
++#ifdef WITH_MPI
++   call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++   call redirect_stdout(myid)
++#endif
++#endif
++
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++
++   layout = 'C'
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++      if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++   np_rows = nprocs/np_cols
++   assert(nprocs == np_rows * np_cols)
++
++   if (myid == 0) then
++     print '((a,i0))', 'Matrix size: ', na
++     print '((a,i0))', 'Num eigenvectors: ', nev
++     print '((a,i0))', 'Blocksize: ', nblk
++#ifdef WITH_MPI
++     print '((a,i0))', 'Num MPI proc: ', nprocs
++     print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs
++     print '(a)',      'Process layout: ' // layout
++#endif
++     print *,''
++   endif
++
++   call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, layout, &
++                         my_blacs_ctxt, my_prow, my_pcol)
++
++   call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   allocate(a (na_rows,na_cols))
++   allocate(as(na_rows,na_cols))
++   allocate(z (na_rows,na_cols))
++   allocate(ev(na))
++
++   a(:,:) = 0.0
++   z(:,:) = 0.0
++   ev(:) = 0.0
++
++   call prepare_matrix_analytic(na, a, nblk, myid, np_rows, np_cols, my_prow, my_pcol, print_times=.false.)
++   as(:,:) = a(:,:)
++
++   e1 => elpa_allocate(error_elpa)
++   !assert_elpa_ok(error_elpa)
++
++   call set_basic_params(e1, na, nev, na_rows, na_cols, my_prow, my_pcol)
++
++   call e1%set("timings",1, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e1%set("debug",1, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0)
++   call e1%set("nvidia-gpu", TEST_GPU, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++#if TEST_AMD_GPU == 1
++   call e1%set("amd-gpu", TEST_GPU, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++#if TEST_INTEL_GPU == 1
++   call e1%set("intel-gpu", TEST_GPU, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++   !call e1%set("max_stored_rows", 15, error_elpa)
++
++   assert_elpa_ok(e1%setup())
++
++   call e1%store_settings("initial_parameters.txt", error_elpa)
++   assert_elpa_ok(error_elpa)
++
++#ifdef WITH_MPI
++     ! barrier after store settings, file created from one MPI rank only, but loaded everywhere
++     call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++#endif
++
++   ! try to load parameters into another object
++   e2 => elpa_allocate(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call set_basic_params(e2, na, nev, na_rows, na_cols, my_prow, my_pcol)
++   call e2%load_settings("initial_parameters.txt", error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   assert_elpa_ok(e2%setup())
++
++   call e2%get("timings", timings, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e2%get("debug", debug, error_elpa)
++   assert_elpa_ok(error_elpa)
++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0)
++   call e2%get("nvidia-gpu", gpu, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++#if TEST_AMD_GPU == 1
++   call e2%get("amd-gpu", gpu, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++#if TEST_INTEL_GPU == 1
++   call e2%get("intel-gpu", gpu, error_elpa)
++   assert_elpa_ok(error_elpa)
++#endif
++
++   if ((timings .ne. 1) .or. (debug .ne. 1) .or. (gpu .ne. 0)) then
++     print *, "Parameters not stored or loaded correctly. Aborting...", timings, debug, gpu
++     stop 1
++   endif
++
++   if(myid == 0) print *, "parameters of e1"
++   call e1%print_settings(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   if(myid == 0) print *, ""
++   if(myid == 0) print *, "parameters of e2"
++   call e2%print_settings(error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   e_ptr => e2
++
++
++   tune_state => e_ptr%autotune_setup(ELPA_AUTOTUNE_FAST, AUTOTUNE_DOMAIN, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++
++   iter=0
++   do while (e_ptr%autotune_step(tune_state, error_elpa))
++     assert_elpa_ok(error_elpa)
++ 
++     iter=iter+1
++     write(iter_string,'(I5.5)') iter
++     call e_ptr%print_settings(error_elpa)
++     assert_elpa_ok(error_elpa)
++
++     call e_ptr%store_settings("saved_parameters_"//trim(iter_string)//".txt", error_elpa)
++     assert_elpa_ok(error_elpa)
++
++     call e_ptr%timer_start("eigenvectors: iteration "//trim(iter_string))
++     call e_ptr%eigenvectors(a, ev, z, error_elpa)
++     assert_elpa_ok(error_elpa)
++     call e_ptr%timer_stop("eigenvectors: iteration "//trim(iter_string))
++
++     assert_elpa_ok(error_elpa)
++     if (myid .eq. 0) then
++       print *, ""
++       call e_ptr%print_times("eigenvectors: iteration "//trim(iter_string))
++     endif
++     status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, my_prow, my_pcol, &
++                                         .true., .true., print_times=.false.)
++     a(:,:) = as(:,:)
++     call e_ptr%autotune_print_state(tune_state, error_elpa)
++     assert_elpa_ok(error_elpa)
++
++     call e_ptr%autotune_save_state(tune_state, "saved_state_"//trim(iter_string)//".txt", error_elpa)
++     assert_elpa_ok(error_elpa)
++#ifdef WITH_MPI
++     ! barrier after save state, file created from one MPI rank only, but loaded everywhere
++     call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++#endif
++     call e_ptr%autotune_load_state(tune_state, "saved_state_"//trim(iter_string)//".txt", error_elpa)
++     assert_elpa_ok(error_elpa)
++
++   end do
++
++   ! set and print the autotuned-settings
++   call e_ptr%autotune_set_best(tune_state, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   if (myid .eq. 0) then
++     print *, "The best combination found by the autotuning:"
++     flush(output_unit)
++     call e_ptr%autotune_print_best(tune_state, error_elpa)
++     assert_elpa_ok(error_elpa)
++   endif
++   ! de-allocate autotune object
++   call elpa_autotune_deallocate(tune_state, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   if (myid .eq. 0) then
++     print *, "Running once more time with the best found setting..."
++   endif
++   call e_ptr%timer_start("eigenvectors: best setting")
++   call e_ptr%eigenvectors(a, ev, z, error_elpa)
++   assert_elpa_ok(error_elpa)
++
++   call e_ptr%timer_stop("eigenvectors: best setting")
++   assert_elpa_ok(error_elpa)
++   if (myid .eq. 0) then
++     print *, ""
++     call e_ptr%print_times("eigenvectors: best setting")
++   endif
++   status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, my_prow, my_pcol, &
++                                       .true., .true., print_times=.false.)
++
++   call elpa_deallocate(e_ptr, error_elpa)
++   !assert_elpa_ok(error_elpa)
++
++   deallocate(a)
++   deallocate(as)
++   deallocate(z)
++   deallocate(ev)
++
++   call elpa_uninit(error_elpa)
++   !assert_elpa_ok(error_elpa)
++
++#ifdef WITH_MPI
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++#endif
++
++   call exit(status)
++
++contains
++   subroutine set_basic_params(elpa, na, nev, na_rows, na_cols, my_prow, my_pcol)
++     implicit none
++     class(elpa_t), pointer      :: elpa
++     TEST_INT_TYPE, intent(in)   :: na, nev, na_rows, na_cols, my_prow, my_pcol
++
++     call elpa%set("na", int(na,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("nev", int(nev,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("nblk", int(nblk,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++
++#ifdef WITH_MPI
++     call elpa%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("process_row", int(my_prow,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++#endif
++   end subroutine
++
++end program
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/test_skewsymmetric.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/test_skewsymmetric.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/test_skewsymmetric.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/test_skewsymmetric.F90	2022-01-28 09:50:11.240867016 +0100
+@@ -0,0 +1,431 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++! Define one of TEST_REAL or TEST_COMPLEX
++! Define one of TEST_SINGLE or TEST_DOUBLE
++! Define one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE
++! Define TEST_NVIDIA_GPU \in [0, 1]
++! Define TEST_INTEL_GPU \in [0, 1]
++! Define TEST_AMD_GPU \in [0, 1]
++! Define either TEST_ALL_KERNELS or a TEST_KERNEL \in [any valid kernel]
++
++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX))
++error: define exactly one of TEST_REAL or TEST_COMPLEX
++#endif
++
++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE))
++error: define exactly one of TEST_SINGLE or TEST_DOUBLE
++#endif
++
++#ifdef TEST_SINGLE
++#  define EV_TYPE real(kind=C_FLOAT)
++#  define EV_TYPE_COMPLEX complex(kind=C_FLOAT_COMPLEX)
++#  define MATRIX_TYPE_COMPLEX complex(kind=C_FLOAT_COMPLEX)
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE real(kind=C_FLOAT)
++#  else
++#    define MATRIX_TYPE complex(kind=C_FLOAT_COMPLEX)
++#  endif
++#else
++#  define MATRIX_TYPE_COMPLEX complex(kind=C_DOUBLE_COMPLEX)
++#  define EV_TYPE_COMPLEX complex(kind=C_DOUBLE_COMPLEX)
++#  define EV_TYPE real(kind=C_DOUBLE)
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE real(kind=C_DOUBLE)
++#  else
++#    define MATRIX_TYPE complex(kind=C_DOUBLE_COMPLEX)
++#  endif
++#endif
++
++#ifdef TEST_REAL
++#  define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_REAL
++#else
++#  define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_COMPLEX
++#endif
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++#define TEST_GPU 0
++#if (TEST_NVIDIA_GPU == 1) || (TEST_AMD_GPU == 1) || (TEST_INTEL_GPU == 1)
++#undef TEST_GPU
++#define TEST_GPU 1
++#endif
++
++#include "assert.h"
++
++program test
++   use elpa
++
++   !use test_util
++   use test_setup_mpi
++   use test_prepare_matrix
++   use test_read_input_parameters
++   use test_blacs_infrastructure
++   use test_check_correctness
++   use precision_for_tests
++   use iso_fortran_env
++
++#ifdef HAVE_REDIRECT
++   use test_redirect
++#endif
++   implicit none
++
++   ! matrix dimensions
++   TEST_INT_TYPE                          :: na, nev, nblk
++
++   ! mpi
++   TEST_INT_TYPE                          :: myid, nprocs
++   TEST_INT_TYPE                          :: na_cols, na_rows  ! local matrix size
++   TEST_INT_TYPE                          :: np_cols, np_rows  ! number of MPI processes per column/row
++   TEST_INT_TYPE                          :: my_prow, my_pcol  ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1)
++   TEST_INT_MPI_TYPE                      :: mpierr
++
++   ! blacs
++   character(len=1)                 :: layout
++   TEST_INT_TYPE                          :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++
++   ! The Matrix
++   MATRIX_TYPE, allocatable         :: a_skewsymmetric(:,:), as_skewsymmetric(:,:)
++   MATRIX_TYPE_COMPLEX, allocatable :: a_complex(:,:), as_complex(:,:)
++   ! eigenvectors
++   MATRIX_TYPE, allocatable         :: z_skewsymmetric(:,:)
++   MATRIX_TYPE_COMPLEX, allocatable :: z_complex(:,:)
++   ! eigenvalues
++   EV_TYPE, allocatable             :: ev_skewsymmetric(:), ev_complex(:)
++
++   TEST_INT_TYPE                    :: status, i, j
++   integer(kind=c_int)              :: error_elpa
++
++   type(output_t)                   :: write_to_file
++   class(elpa_t), pointer           :: e_complex, e_skewsymmetric
++           
++   call read_input_parameters(na, nev, nblk, write_to_file)
++!   call setup_mpi(myid, nprocs)
++    call MPI_INIT_THREAD(MPI_THREAD_SERIALIZED,info, mpierr)
++    call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs, mpierr)
++    call MPI_COMM_RANK(MPI_COMM_WORLD,myid, mpierr)
++#ifdef HAVE_REDIRECT
++#ifdef WITH_MPI
++   call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++   call redirect_stdout(myid)
++#endif
++#endif
++
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++! 
++   layout = 'C'
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++      if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++   np_rows = nprocs/np_cols
++   assert(nprocs == np_rows * np_cols)
++
++   if (myid == 0) then
++     print '((a,i0))', 'Matrix size: ', na
++     print '((a,i0))', 'Num eigenvectors: ', nev
++     print '((a,i0))', 'Blocksize: ', nblk
++#ifdef WITH_MPI
++     print '((a,i0))', 'Num MPI proc: ', nprocs
++     print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs
++     print '(a)',      'Process layout: ' // layout
++#endif
++     print *,''
++   endif
++
++   call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, &
++                             np_cols, layout, &
++                             my_blacs_ctxt, my_prow, my_pcol)
++
++   call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   allocate(a_skewsymmetric (na_rows,na_cols))
++   allocate(as_skewsymmetric(na_rows,na_cols))
++   allocate(z_skewsymmetric (na_rows,2*na_cols))
++   allocate(ev_skewsymmetric(na))
++
++   a_skewsymmetric(:,:) = 0.0
++   z_skewsymmetric(:,:) = 0.0
++   ev_skewsymmetric(:) = 0.0
++
++   call prepare_matrix_random(na, myid, sc_desc, a_skewsymmetric, &
++   z_skewsymmetric(:,1:na_cols), as_skewsymmetric, is_skewsymmetric=1)
++   
++   !call MPI_BARRIER(MPI_COMM_WORLD, mpierr)  
++   as_skewsymmetric(:,:) = a_skewsymmetric(:,:)
++   
++
++   ! prepare the complex matrix for the "brute force" case
++   allocate(a_complex (na_rows,na_cols))
++   allocate(as_complex(na_rows,na_cols))
++   allocate(z_complex (na_rows,na_cols))
++   allocate(ev_complex(na))
++
++   a_complex(1:na_rows,1:na_cols) = 0.0
++   z_complex(1:na_rows,1:na_cols) = 0.0
++   as_complex(1:na_rows,1:na_cols) = 0.0
++   
++
++      do j=1, na_cols
++        do i=1,na_rows
++#ifdef TEST_DOUBLE
++          a_complex(i,j) = dcmplx(0.0, a_skewsymmetric(i,j))
++#endif
++#ifdef TEST_SINGLE
++          a_complex(i,j) = cmplx(0.0, a_skewsymmetric(i,j))
++#endif
++        enddo
++      enddo
++   
++
++
++   z_complex(1:na_rows,1:na_cols)  = a_complex(1:na_rows,1:na_cols)
++   as_complex(1:na_rows,1:na_cols) = a_complex(1:na_rows,1:na_cols)
++
++   ! first set up and solve the brute force problem
++   e_complex => elpa_allocate(error_elpa)
++   call set_basic_params(e_complex, na, nev, na_rows, na_cols, my_prow, my_pcol)
++
++   call e_complex%set("timings",1, error_elpa)
++
++   call e_complex%set("debug",1,error_elpa)
++
++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0)  
++   call e_complex%set("nvidia-gpu", TEST_GPU,error_elpa)
++#endif
++#if TEST_AMD_GPU == 1
++   call e_complex%set("amd-gpu", TEST_GPU,error_elpa)
++#endif
++#if TEST_INTEL_GPU == 1
++   call e_complex%set("intel-gpu", TEST_GPU,error_elpa)
++#endif
++
++   call e_complex%set("omp_threads", 8, error_elpa)
++
++   assert_elpa_ok(e_complex%setup())
++   call e_complex%set("solver", elpa_solver_2stage, error_elpa)
++
++   call e_complex%timer_start("eigenvectors: brute force as complex matrix")
++   call e_complex%eigenvectors(a_complex, ev_complex, z_complex, error_elpa)
++   call e_complex%timer_stop("eigenvectors: brute force as complex matrix")
++
++   if (myid .eq. 0) then
++     print *, ""
++     call e_complex%print_times("eigenvectors: brute force as complex matrix")
++   endif 
++#ifdef WITH_MPI
++     call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++#endif     
++!      as_complex(:,:) = z_complex(:,:)
++#ifdef TEST_SINGLE
++     status = check_correctness_evp_numeric_residuals_complex_single(na, nev, as_complex, z_complex, ev_complex, sc_desc, &
++                                                    nblk, myid, np_rows,np_cols, my_prow, my_pcol)
++#else
++     status = check_correctness_evp_numeric_residuals_complex_double(na, nev, as_complex, z_complex, ev_complex, sc_desc, &
++                                                    nblk, myid, np_rows,np_cols, my_prow, my_pcol)
++#endif
++    status = 0
++    call check_status(status, myid)
++
++#ifdef WITH_MPI
++     call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++#endif
++   ! now run the skewsymmetric case
++   e_skewsymmetric => elpa_allocate(error_elpa)
++   call set_basic_params(e_skewsymmetric, na, nev, na_rows, na_cols, my_prow, my_pcol)
++
++   call e_skewsymmetric%set("timings",1, error_elpa)
++
++   call e_skewsymmetric%set("debug",1,error_elpa)
++
++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0)
++   call e_skewsymmetric%set("nvidia-gpu", TEST_GPU,error_elpa)
++#endif
++#if TEST_AMD_GPU == 1
++   call e_skewsymmetric%set("amd-gpu", TEST_GPU,error_elpa)
++#endif
++#if TEST_INTEL_GPU == 1
++   call e_skewsymmetric%set("intel-gpu", TEST_GPU,error_elpa)
++#endif
++   call e_skewsymmetric%set("omp_threads",8, error_elpa)
++
++   assert_elpa_ok(e_skewsymmetric%setup())
++   
++   call e_skewsymmetric%set("solver", elpa_solver_2stage, error_elpa)
++
++   call e_skewsymmetric%timer_start("eigenvectors: skewsymmetric ")
++   call e_skewsymmetric%skew_eigenvectors(a_skewsymmetric, ev_skewsymmetric, z_skewsymmetric, error_elpa)
++   call e_skewsymmetric%timer_stop("eigenvectors: skewsymmetric ")
++
++   if (myid .eq. 0) then
++     print *, ""
++     call e_skewsymmetric%print_times("eigenvectors: skewsymmetric")
++   endif
++   
++   ! check eigenvalues
++   do i=1, na
++     if (myid == 0) then
++#ifdef TEST_DOUBLE
++       if (abs(ev_complex(i)-ev_skewsymmetric(i))/abs(ev_complex(i)) .gt. 1e-10) then
++#endif
++#ifdef TEST_SINGLE
++       if (abs(ev_complex(i)-ev_skewsymmetric(i))/abs(ev_complex(i)) .gt. 1e-4) then
++#endif
++         print *,"ev: i=",i,ev_complex(i),ev_skewsymmetric(i)
++         status = 1
++     endif
++     endif
++   enddo
++
++
++!    call check_status(status, myid)
++   
++   z_complex(:,:) = 0
++   do j=1, na_cols
++     do i=1,na_rows
++#ifdef TEST_DOUBLE
++       z_complex(i,j) = dcmplx(z_skewsymmetric(i,j), z_skewsymmetric(i,na_cols+j))
++#endif
++#ifdef TEST_SINGLE
++       z_complex(i,j) = cmplx(z_skewsymmetric(i,j), z_skewsymmetric(i,na_cols+j))
++#endif
++     enddo
++   enddo
++#ifdef WITH_MPI
++   call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++#endif
++
++#ifdef TEST_SINGLE
++   status = check_correctness_evp_numeric_residuals_ss_real_single(na, nev, as_skewsymmetric, z_complex, ev_skewsymmetric, &
++                              sc_desc, nblk, myid, np_rows,np_cols, my_prow, my_pcol)
++#else
++   status = check_correctness_evp_numeric_residuals_ss_real_double(na, nev, as_skewsymmetric, z_complex, ev_skewsymmetric, &
++                              sc_desc, nblk, myid, np_rows,np_cols, my_prow, my_pcol)
++#endif
++   
++#ifdef WITH_MPI
++    call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++#endif
++   call elpa_deallocate(e_complex,error_elpa)
++   call elpa_deallocate(e_skewsymmetric,error_elpa)
++
++
++   !to do 
++   ! - check whether brute-force check_correctness_evp_numeric_residuals worsk (complex ev)
++   ! - invent a test for skewsymmetric residuals
++
++   deallocate(a_complex)
++   deallocate(as_complex)
++   deallocate(z_complex)
++   deallocate(ev_complex)
++
++   deallocate(a_skewsymmetric)
++   deallocate(as_skewsymmetric)
++   deallocate(z_skewsymmetric)
++   deallocate(ev_skewsymmetric)
++   call elpa_uninit(error_elpa)
++
++
++
++#ifdef WITH_MPI
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++#endif
++
++   call exit(status)
++
++contains
++   subroutine set_basic_params(elpa, na, nev, na_rows, na_cols, my_prow, my_pcol)
++     implicit none
++     class(elpa_t), pointer      :: elpa
++     TEST_INT_TYPE, intent(in)         :: na, nev, na_rows, na_cols, my_prow, my_pcol
++
++     call elpa%set("na", int(na,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("nev", int(nev,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("nblk", int(nblk,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++
++#ifdef WITH_MPI
++     call elpa%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("process_row", int(my_prow,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++#endif
++   end subroutine
++   subroutine check_status(status, myid)
++     implicit none
++     TEST_INT_TYPE, intent(in) :: status, myid
++     TEST_INT_MPI_TYPE         :: mpierr
++     if (status /= 0) then
++       if (myid == 0) print *, "Result incorrect!"
++#ifdef WITH_MPI
++       call mpi_finalize(mpierr)
++#endif
++       call exit(status)
++     endif
++   end subroutine
++end program
+diff -ruN elpa-new_release_2021.11.001/examples/Fortran/test_split_comm.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/test_split_comm.F90
+--- elpa-new_release_2021.11.001/examples/Fortran/test_split_comm.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Fortran/test_split_comm.F90	2022-02-01 17:13:58.420500580 +0100
+@@ -0,0 +1,346 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++! Define one of TEST_REAL or TEST_COMPLEX
++! Define one of TEST_SINGLE or TEST_DOUBLE
++! Define one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE
++! Define TEST_NVIDIA_GPU \in [0, 1]
++! Define TEST_INTEL_GPU \in [0, 1]
++! Define either TEST_ALL_KERNELS or a TEST_KERNEL \in [any valid kernel]
++
++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX))
++error: define exactly one of TEST_REAL or TEST_COMPLEX
++#endif
++
++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE))
++error: define exactly one of TEST_SINGLE or TEST_DOUBLE
++#endif
++
++#ifdef TEST_SINGLE
++#  define EV_TYPE real(kind=C_FLOAT)
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE real(kind=C_FLOAT)
++#  else
++#    define MATRIX_TYPE complex(kind=C_FLOAT_COMPLEX)
++#  endif
++#else
++#  define EV_TYPE real(kind=C_DOUBLE)
++#  ifdef TEST_REAL
++#    define MATRIX_TYPE real(kind=C_DOUBLE)
++#  else
++#    define MATRIX_TYPE complex(kind=C_DOUBLE_COMPLEX)
++#  endif
++#endif
++
++
++#ifdef TEST_REAL
++#  define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_REAL
++#else
++#  define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_COMPLEX
++#endif
++
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++#include "assert.h"
++
++program test
++   use elpa
++
++   !use test_util
++   use test_setup_mpi
++   use test_prepare_matrix
++   use test_read_input_parameters
++   use test_blacs_infrastructure
++   use test_check_correctness
++   use test_analytic
++   use iso_fortran_env
++
++#ifdef HAVE_REDIRECT
++   use test_redirect
++#endif
++   implicit none
++
++   ! matrix dimensions
++   TEST_INT_TYPE                     :: na, nev, nblk
++   TEST_INT_TYPE                     :: num_groups, group_size, color, key
++
++   ! mpi
++   TEST_INT_TYPE                     :: myid, nprocs
++   TEST_INT_TYPE                     :: na_cols, na_rows  ! local matrix size
++   TEST_INT_TYPE                     :: np_cols, np_rows  ! number of MPI processes per column/row
++   TEST_INT_TYPE                     :: my_prow, my_pcol  ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1)
++   TEST_INT_MPI_TYPE                 :: mpierr, ierr,mpi_sub_commMPI, myidMPI, nprocsMPI, colorMPI, keyMPI, &
++                                        myid_subMPI, nprocs_subMPI
++   TEST_INT_TYPE                     :: mpi_sub_comm
++   TEST_INT_TYPE                     :: myid_sub, nprocs_sub
++
++   ! blacs
++   character(len=1)            :: layout
++   TEST_INT_TYPE                     :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++
++   ! The Matrix
++   MATRIX_TYPE, allocatable    :: a(:,:), as(:,:)
++   ! eigenvectors
++   MATRIX_TYPE, allocatable    :: z(:,:)
++   ! eigenvalues
++   EV_TYPE, allocatable        :: ev(:)
++
++   TEST_INT_TYPE               :: status
++   integer(kind=c_int)         :: error_elpa
++
++   type(output_t)              :: write_to_file
++   class(elpa_t), pointer      :: e
++
++   TEST_INT_TYPE                     :: iter
++   character(len=5)            :: iter_string
++
++   status = 0
++#ifdef WITH_MPI
++
++   call read_input_parameters(na, nev, nblk, write_to_file)
++   !call setup_mpi(myid, nprocs)
++   call mpi_init_thread(MPI_THREAD_SERIALIZED, info, mpierr)
++   call mpi_comm_rank(mpi_comm_world, myidMPI,mpierr)
++   call mpi_comm_size(mpi_comm_world, nprocsMPI,mpierr)
++   myid = int(myidMPI,kind=BLAS_KIND)
++   nprocs = int(nprocsMPI,kind=BLAS_KIND)
++
++   if((mod(nprocs, 4) == 0) .and. (nprocs > 4)) then
++     num_groups = 4
++   else if(mod(nprocs, 3) == 0) then
++     num_groups = 3
++   else if(mod(nprocs, 2) == 0) then
++     num_groups = 2
++   else
++     num_groups = 1
++   endif
++
++   group_size = nprocs / num_groups
++
++   if(num_groups * group_size .ne. nprocs) then 
++     print *, "Something went wrong before splitting the communicator"
++     stop 1
++   else
++     if(myid == 0) then
++       print '((a,i0,a,i0))', "The test will split the global communicator into ", num_groups, " groups of size ", group_size
++     endif
++   endif
++
++   ! each group of processors will have the same color
++   color = mod(myid, num_groups)
++   ! this will determine the myid in each group
++   key = myid/num_groups
++   !split the communicator
++   colorMPI=int(color,kind=MPI_KIND)
++   keyMPI = int(key, kind=MPI_KIND)
++   call mpi_comm_split(mpi_comm_world, colorMPI, keyMPI, mpi_sub_commMPI, mpierr)
++   mpi_sub_comm = int(mpi_sub_commMPI,kind=BLAS_KIND)
++   color = int(colorMPI,kind=BLAS_KIND)
++   key = int(keyMPI,kind=BLAS_KIND)
++   if(mpierr .ne. MPI_SUCCESS) then 
++     print *, "communicator splitting not successfull", mpierr
++     stop 1
++   endif
++
++   call mpi_comm_rank(mpi_sub_commMPI, myid_subMPI, mpierr)
++   call mpi_comm_size(mpi_sub_commMPI, nprocs_subMPI, mpierr)
++   myid_sub = int(myid_subMPI,kind=BLAS_KIND)
++   nprocs_sub = int(nprocs_subMPI,kind=BLAS_KIND)
++
++   !print *, "glob ", myid, nprocs, ", loc ", myid_sub, nprocs_sub, ", color ", color, ", key ", key
++
++   if((mpierr .ne. MPI_SUCCESS) .or. (nprocs_sub .ne. group_size) .or. (myid_sub >= group_size)) then
++     print *, "something wrong with the sub communicators"
++     stop 1
++   endif
++
++
++#ifdef HAVE_REDIRECT
++   call MPI_BARRIER(MPI_COMM_WORLD, mpierr)
++   call redirect_stdout(myid)
++#endif
++
++   if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then
++     print *, "ELPA API version not supported"
++     stop 1
++   endif
++
++   layout = 'C'
++   do np_cols = NINT(SQRT(REAL(nprocs_sub))),2,-1
++      if(mod(nprocs_sub,np_cols) == 0 ) exit
++   enddo
++   np_rows = nprocs_sub/np_cols
++   assert(nprocs_sub == np_rows * np_cols)
++   assert(nprocs == np_rows * np_cols * num_groups)
++
++   if (myid == 0) then
++     print '((a,i0))', 'Matrix size: ', na
++     print '((a,i0))', 'Num eigenvectors: ', nev
++     print '((a,i0))', 'Blocksize: ', nblk
++     print '(a)',      'Process layout: ' // layout
++     print *,''
++   endif
++   if (myid_sub == 0) then
++     print '(4(a,i0))','GROUP ', color, ': Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs_sub
++   endif
++
++   ! USING the subcommunicator
++   call set_up_blacsgrid(int(mpi_sub_comm,kind=BLAS_KIND), np_rows, np_cols, layout, &
++                         my_blacs_ctxt, my_prow, my_pcol)
++
++   call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, &
++                                na_rows, na_cols, sc_desc, my_blacs_ctxt, info)
++
++   allocate(a (na_rows,na_cols))
++   allocate(as(na_rows,na_cols))
++   allocate(z (na_rows,na_cols))
++   allocate(ev(na))
++
++   a(:,:) = 0.0
++   z(:,:) = 0.0
++   ev(:) = 0.0
++
++   !call prepare_matrix_analytic(na, a, nblk, myid_sub, np_rows, np_cols, my_prow, my_pcol, print_times=.false.)
++   call prepare_matrix_random(na, myid_sub, sc_desc, a, z, as)
++   as(:,:) = a(:,:)
++
++   e => elpa_allocate(error_elpa)
++   call set_basic_params(e, na, nev, na_rows, na_cols, mpi_sub_comm, my_prow, my_pcol)
++
++   call e%set("timings",1, error_elpa)
++
++   call e%set("debug",1, error_elpa)
++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0)
++   call e%set("nvidia-gpu", 0, error_elpa)
++#endif
++#if TEST_INTEL_GPU == 1
++   call e%set("intel-gpu", 0, error_elpa)
++#endif
++   !call e%set("max_stored_rows", 15, error_elpa)
++
++   assert_elpa_ok(e%setup())
++
++
++
++!   if(myid == 0) print *, "parameters of e"
++!   call e%print_all_parameters()
++!   if(myid == 0) print *, ""
++
++
++   call e%timer_start("eigenvectors")
++   call e%eigenvectors(a, ev, z, error_elpa)
++   call e%timer_stop("eigenvectors")
++
++   assert_elpa_ok(error_elpa)
++
++   !status = check_correctness_analytic(na, nev, ev, z, nblk, myid_sub, np_rows, np_cols, my_prow, my_pcol, &
++    !                   .true., .true., print_times=.false.)
++   status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid_sub, &
++                    np_rows,np_cols, my_prow, my_pcol)
++   if (status /= 0) &
++     print *, "processor ", myid, ": Result incorrect for processor group ", color
++
++   if (myid .eq. 0) then
++     print *, "Showing times of one goup only"
++     call e%print_times("eigenvectors")
++   endif
++
++   call elpa_deallocate(e, error_elpa)
++
++   deallocate(a)
++   deallocate(as)
++   deallocate(z)
++   deallocate(ev)
++
++   call elpa_uninit(error_elpa)
++
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++
++#endif
++   call exit(status)
++
++contains
++   subroutine set_basic_params(elpa, na, nev, na_rows, na_cols, communicator, my_prow, my_pcol)
++     use iso_c_binding
++     implicit none
++     class(elpa_t), pointer      :: elpa
++     TEST_INT_TYPE, intent(in)         :: na, nev, na_rows, na_cols, my_prow, my_pcol, communicator
++
++#ifdef WITH_MPI
++     call elpa%set("na", int(na,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("nev", int(nev,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("local_nrows", int(na_rows,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("local_ncols", int(na_cols,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("nblk", int(nblk,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++
++     call elpa%set("mpi_comm_parent", int(communicator,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("process_row", int(my_prow,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++     call elpa%set("process_col", int(my_pcol,kind=c_int), error_elpa)
++     assert_elpa_ok(error_elpa)
++#endif
++   end subroutine
++
++end program
+diff -ruN elpa-new_release_2021.11.001/examples/Makefile_hybrid elpa-new_release_2021.11.001_ok/examples/Makefile_hybrid
+--- elpa-new_release_2021.11.001/examples/Makefile_hybrid	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Makefile_hybrid	2022-01-28 09:56:18.548921000 +0100
+@@ -0,0 +1,24 @@
++# MPICH, that is IntelMPI or ParaStationMPI
++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
++# OpenMPI
++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a
++LAPACK_LIB =
++# Intel compiler
++MKL = -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lstdc++
++# GCC
++# MKL = -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lstdc++ -lm
++F90 = mpif90 -O3 -qopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa
++# GCC
++# F90 = mpif90 -O3 -fopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa
++LIBS = -L$(ELPA_LIB_OPENMP) -lelpa_openmp -lelpatest_openmp -lelpa $(SCALAPACK_LIB) $(MKL)
++CC            = mpicc -O3 -qopenmp
++# GCC
++# CC            = mpicc -O3 -fopenmp
++
++all: test_real_e1_omp test_real_e2_omp
++
++test_real_e1_omp: test_real_e1.F90
++	$(F90) -DWITH_OPENMP_TRADITIONAL -o $@ test_real_e1.F90 $(LIBS)
++
++test_real_e2_omp: test_real_e2.F90
++	$(F90) -DWITH_OPENMP_TRADITIONAL -o $@ test_real_e2.F90 $(LIBS)
+diff -ruN elpa-new_release_2021.11.001/examples/Makefile_pure elpa-new_release_2021.11.001_ok/examples/Makefile_pure
+--- elpa-new_release_2021.11.001/examples/Makefile_pure	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Makefile_pure	2022-01-26 09:43:16.599164000 +0100
+@@ -0,0 +1,20 @@
++# MPICH, that is IntelMPI or ParaStationMPI
++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
++# OpenMPI
++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a
++LAPACK_LIB =
++# Intel compiler
++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++
++# GCC
++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm
++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa
++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL)
++CC            = mpicc -O3
++
++all: test_real_e1 test_real_e2
++
++test_real_e1: test_real_e1.F90
++	$(F90) -o $@ test_real_e1.F90 $(LIBS)
++
++test_real_e2: test_real_e2.F90
++	$(F90) -o $@ test_real_e2.F90 $(LIBS)
+diff -ruN elpa-new_release_2021.11.001/examples/Makefile_pure_cuda elpa-new_release_2021.11.001_ok/examples/Makefile_pure_cuda
+--- elpa-new_release_2021.11.001/examples/Makefile_pure_cuda	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/Makefile_pure_cuda	2022-01-26 09:43:16.600617000 +0100
+@@ -0,0 +1,20 @@
++# MPICH, that is IntelMPI or ParaStationMPI
++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64
++# OpenMPI
++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a
++LAPACK_LIB =
++# Intel compiler
++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++
++# GCC
++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm
++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa
++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL) -lcudart
++CC            = mpicc -O3
++
++all: test_real_e1 test_real_e2
++
++test_real_e1: test_real_e1.F90
++	$(F90) -DCUDA -o $@ test_real_e1.F90 $(LIBS)
++
++test_real_e2: test_real_e2.F90
++	$(F90) -DCUDA -DCUDAKERNEL -o $@ test_real_e2.F90 $(LIBS)
+diff -ruN elpa-new_release_2021.11.001/examples/shared/GPU/CUDA/test_cuda.F90 elpa-new_release_2021.11.001_ok/examples/shared/GPU/CUDA/test_cuda.F90
+--- elpa-new_release_2021.11.001/examples/shared/GPU/CUDA/test_cuda.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/GPU/CUDA/test_cuda.F90	2022-01-26 10:10:58.319812000 +0100
+@@ -0,0 +1,455 @@
++!    Copyright 2014, A. Marek
++!
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++! This file was written by A. Marek, MPCDF
++
++
++#include "config-f90.h"
++module test_cuda_functions
++  use, intrinsic :: iso_c_binding
++  use precision_for_tests
++  implicit none
++
++  public
++
++  integer(kind=ik) :: cudaMemcpyHostToDevice
++  integer(kind=ik) :: cudaMemcpyDeviceToHost
++  integer(kind=ik) :: cudaMemcpyDeviceToDevice
++  integer(kind=ik) :: cudaHostRegisterDefault
++  integer(kind=ik) :: cudaHostRegisterPortable
++  integer(kind=ik) :: cudaHostRegisterMapped
++
++  ! TODO global variable, has to be changed
++  integer(kind=C_intptr_T) :: cublasHandle = -1
++
++  ! functions to set and query the CUDA devices
++  interface
++    function cuda_setdevice_c(n) result(istat) &
++             bind(C, name="cudaSetDeviceFromC")
++
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=C_INT), value    :: n
++      integer(kind=C_INT)           :: istat
++    end function cuda_setdevice_c
++  end interface
++
++  ! functions to copy CUDA memory
++  interface
++    function cuda_memcpyDeviceToDevice_c() result(flag) &
++            bind(C, name="cudaMemcpyDeviceToDeviceFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function cuda_memcpyHostToDevice_c() result(flag) &
++             bind(C, name="cudaMemcpyHostToDeviceFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function cuda_memcpyDeviceToHost_c() result(flag) &
++             bind(C, name="cudaMemcpyDeviceToHostFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function cuda_hostRegisterDefault_c() result(flag) &
++             bind(C, name="cudaHostRegisterDefaultFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function cuda_hostRegisterPortable_c() result(flag) &
++             bind(C, name="cudaHostRegisterPortableFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function cuda_hostRegisterMapped_c() result(flag) &
++             bind(C, name="cudaHostRegisterMappedFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function cuda_memcpy_intptr_c(dst, src, size, dir) result(istat) &
++             bind(C, name="cudaMemcpyFromC")
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      integer(kind=C_intptr_t), value              :: dst
++      integer(kind=C_intptr_t), value              :: src
++      integer(kind=c_intptr_t), intent(in), value    :: size
++      integer(kind=C_INT), intent(in), value       :: dir
++      integer(kind=C_INT)                          :: istat
++
++    end function cuda_memcpy_intptr_c
++  end interface
++
++  interface
++    function cuda_memcpy_cptr_c(dst, src, size, dir) result(istat) &
++             bind(C, name="cudaMemcpyFromC")
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      type(c_ptr), value                           :: dst
++      type(c_ptr), value                           :: src
++      integer(kind=c_intptr_t), intent(in), value  :: size
++      integer(kind=C_INT), intent(in), value       :: dir
++      integer(kind=C_INT)                          :: istat
++
++    end function cuda_memcpy_cptr_c
++  end interface
++
++  interface
++    function cuda_memcpy_mixed_c(dst, src, size, dir) result(istat) &
++             bind(C, name="cudaMemcpyFromC")
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      type(c_ptr), value                           :: dst
++      integer(kind=C_intptr_t), value              :: src
++      integer(kind=c_intptr_t), intent(in), value  :: size
++      integer(kind=C_INT), intent(in), value       :: dir
++      integer(kind=C_INT)                          :: istat
++
++    end function cuda_memcpy_mixed_c
++  end interface
++
++  ! functions to allocate and free CUDA memory
++
++  interface
++    function cuda_free_intptr_c(a) result(istat) &
++             bind(C, name="cudaFreeFromC")
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      integer(kind=C_intptr_T), value  :: a
++      integer(kind=C_INT)              :: istat
++
++    end function cuda_free_intptr_c
++  end interface
++
++  interface
++    function cuda_free_cptr_c(a) result(istat) &
++             bind(C, name="cudaFreeFromC")
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      type(c_ptr), value  :: a
++      integer(kind=C_INT)              :: istat
++
++    end function cuda_free_cptr_c
++  end interface
++
++  interface cuda_memcpy
++    module procedure cuda_memcpy_intptr
++    module procedure cuda_memcpy_cptr
++    module procedure cuda_memcpy_mixed
++  end interface
++
++  interface cuda_free
++    module procedure cuda_free_intptr
++    module procedure cuda_free_cptr
++  end interface
++
++  interface
++    function cuda_malloc_intptr_c(a, width_height) result(istat) &
++             bind(C, name="cudaMallocFromC")
++
++      use, intrinsic :: iso_c_binding
++      implicit none
++
++      integer(kind=C_intptr_T)                    :: a
++      integer(kind=c_intptr_t), intent(in), value :: width_height
++      integer(kind=C_INT)                         :: istat
++
++    end function cuda_malloc_intptr_c
++  end interface
++
++  interface
++    function cuda_malloc_cptr_c(a, width_height) result(istat) &
++             bind(C, name="cudaMallocFromC")
++
++      use, intrinsic :: iso_c_binding
++      implicit none
++
++      type(c_ptr)                    :: a
++      integer(kind=c_intptr_t), intent(in), value :: width_height
++      integer(kind=C_INT)                         :: istat
++
++    end function cuda_malloc_cptr_c
++  end interface
++
++  !interface cuda_malloc
++  !  module procedure cuda_malloc_intptr
++  !  module procedure cuda_malloc_cptr
++  !end interface
++
++  contains
++
++    function cuda_setdevice(n) result(success)
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++
++      integer(kind=ik), intent(in)  :: n
++      logical                       :: success
++#ifdef WITH_NVIDIA_GPU_VERSION
++      success = cuda_setdevice_c(int(n,kind=c_int)) /= 0
++#else
++      success = .true.
++#endif
++    end function cuda_setdevice
++
++
++    function cuda_malloc_intptr(a, width_height) result(success)
++
++     use, intrinsic :: iso_c_binding
++     implicit none
++
++     integer(kind=c_intptr_t)                  :: a
++     integer(kind=c_intptr_t), intent(in)      :: width_height
++     logical                                   :: success
++#ifdef WITH_NVIDIA_GPU_VERSION
++     success = cuda_malloc_intptr_c(a, width_height) /= 0
++#else
++     success = .true.
++#endif
++   end function
++
++
++    function cuda_malloc_cptr(a, width_height) result(success)
++
++     use, intrinsic :: iso_c_binding
++     implicit none
++
++     type(c_ptr)                  :: a
++     integer(kind=c_intptr_t), intent(in)      :: width_height
++     logical                                   :: success
++#ifdef WITH_NVIDIA_GPU_VERSION
++     success = cuda_malloc_cptr_c(a, width_height) /= 0
++#else
++     success = .true.
++#endif
++   end function
++
++   function cuda_free_intptr(a) result(success)
++
++     use, intrinsic :: iso_c_binding
++
++     implicit none
++     integer(kind=C_intptr_T) :: a
++     logical                  :: success
++#ifdef WITH_NVIDIA_GPU_VERSION
++     success = cuda_free_intptr_c(a) /= 0
++#else
++     success = .true.
++#endif
++   end function cuda_free_intptr
++
++   function cuda_free_cptr(a) result(success)
++
++     use, intrinsic :: iso_c_binding
++
++     implicit none
++     type(c_ptr) :: a
++     logical                  :: success
++#ifdef WITH_NVIDIA_GPU_VERSION
++     success = cuda_free_cptr_c(a) /= 0
++#else
++     success = .true.
++#endif
++   end function cuda_free_cptr
++
++ ! functions to memcopy CUDA memory
++
++ function cuda_memcpyDeviceToDevice() result(flag)
++   use, intrinsic :: iso_c_binding
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_NVIDIA_GPU_VERSION
++   flag = int(cuda_memcpyDeviceToDevice_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function cuda_memcpyHostToDevice() result(flag)
++   use, intrinsic :: iso_c_binding
++   use precision_for_tests
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_NVIDIA_GPU_VERSION
++   flag = int(cuda_memcpyHostToDevice_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function cuda_memcpyDeviceToHost() result(flag)
++   use, intrinsic :: iso_c_binding
++   use precision_for_tests
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_NVIDIA_GPU_VERSION
++   flag = int( cuda_memcpyDeviceToHost_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function cuda_hostRegisterDefault() result(flag)
++   use, intrinsic :: iso_c_binding
++   use precision_for_tests
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_NVIDIA_GPU_VERSION
++   flag = int(cuda_hostRegisterDefault_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function cuda_hostRegisterPortable() result(flag)
++   use, intrinsic :: iso_c_binding
++   use precision_for_tests
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_NVIDIA_GPU_VERSION
++   flag = int(cuda_hostRegisterPortable_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function cuda_hostRegisterMapped() result(flag)
++   use, intrinsic :: iso_c_binding
++   use precision_for_tests
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_NVIDIA_GPU_VERSION
++   flag = int(cuda_hostRegisterMapped_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function cuda_memcpy_intptr(dst, src, size, dir) result(success)
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      integer(kind=C_intptr_t)              :: dst
++      integer(kind=C_intptr_t)              :: src
++      integer(kind=c_intptr_t), intent(in)  :: size
++      integer(kind=C_INT), intent(in)       :: dir
++      logical :: success
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++        success = cuda_memcpy_intptr_c(dst, src, size, dir) /= 0
++#else
++        success = .true.
++#endif
++    end function
++
++ function cuda_memcpy_cptr(dst, src, size, dir) result(success)
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      type(c_ptr)                           :: dst
++      type(c_ptr)                           :: src
++      integer(kind=c_intptr_t), intent(in)  :: size
++      integer(kind=C_INT), intent(in)       :: dir
++      logical :: success
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++        success = cuda_memcpy_cptr_c(dst, src, size, dir) /= 0
++#else
++        !success = .true.
++         success = .false.
++#endif
++    end function
++
++ function cuda_memcpy_mixed(dst, src, size, dir) result(success)
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      type(c_ptr)                           :: dst
++      integer(kind=C_intptr_t)              :: src
++      integer(kind=c_intptr_t), intent(in)  :: size
++      integer(kind=C_INT), intent(in)       :: dir
++      logical :: success
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++        success = cuda_memcpy_mixed_c(dst, src, size, dir) /= 0
++#else
++        success = .true.
++#endif
++    end function
++
++end module test_cuda_functions
+diff -ruN elpa-new_release_2021.11.001/examples/shared/GPU/CUDA/test_cudaFunctions.cu elpa-new_release_2021.11.001_ok/examples/shared/GPU/CUDA/test_cudaFunctions.cu
+--- elpa-new_release_2021.11.001/examples/shared/GPU/CUDA/test_cudaFunctions.cu	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/GPU/CUDA/test_cudaFunctions.cu	2022-01-26 10:10:58.320705000 +0100
+@@ -0,0 +1,152 @@
++//
++//    Copyright 2014, A. Marek
++//
++//    This file is part of ELPA.
++//
++//    The ELPA library was originally created by the ELPA consortium,
++//    consisting of the following organizations:
++//
++//    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++//      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++//    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++//      Informatik,
++//    - Technische Universität München, Lehrstuhl für Informatik mit
++//      Schwerpunkt Wissenschaftliches Rechnen ,
++//    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++//    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++//      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++//      and
++//    - IBM Deutschland GmbH
++//
++//    This particular source code file contains additions, changes and
++//    enhancements authored by Intel Corporation which is not part of
++//    the ELPA consortium.
++//
++//    More information can be found here:
++//    http://elpa.mpcdf.mpg.de/
++//
++//    ELPA is free software: you can redistribute it and/or modify
++//    it under the terms of the version 3 of the license of the
++//    GNU Lesser General Public License as published by the Free
++//    Software Foundation.
++//
++//    ELPA 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 Lesser General Public License for more details.
++//
++//    You should have received a copy of the GNU Lesser General Public License
++//    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++//
++//    ELPA reflects a substantial effort on the part of the original
++//    ELPA consortium, and we ask you to respect the spirit of the
++//    license that we chose: i.e., please contribute any changes you
++//    may have back to the original ELPA library distribution, and keep
++//    any derivatives of ELPA under the same license that we chose for
++//    the original distribution, the GNU Lesser General Public License.
++//
++//
++// --------------------------------------------------------------------------------------------------
++//
++// This file was written by A. Marek, MPCDF
++#include "config-f90.h"
++
++#include <stdio.h>
++#include <math.h>
++#include <stdio.h>
++
++#include <stdlib.h>
++#include <string.h>
++#include <time.h>
++#include <alloca.h>
++#include <stdint.h>
++#include <complex.h>
++#ifdef WITH_NVIDIA_GPU_VERSION
++#include <cublas_v2.h>
++#endif
++
++
++#define errormessage(x, ...) do { fprintf(stderr, "%s:%d " x, __FILE__, __LINE__, __VA_ARGS__ ); } while (0)
++
++#ifdef DEBUG_CUDA
++#define debugmessage(x, ...) do { fprintf(stderr, "%s:%d " x, __FILE__, __LINE__, __VA_ARGS__ ); } while (0)
++#else
++#define debugmessage(x, ...)
++#endif
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++extern "C" {
++
++  int cudaSetDeviceFromC(int n) {
++
++    cudaError_t cuerr = cudaSetDevice(n);
++    if (cuerr != cudaSuccess) {
++      errormessage("Error in cudaSetDevice: %s\n",cudaGetErrorString(cuerr));
++      return 0;
++    }
++    return 1;
++  }
++
++  int cudaMallocFromC(intptr_t *a, size_t width_height) {
++
++    cudaError_t cuerr = cudaMalloc((void **) a, width_height);
++#ifdef DEBUG_CUDA
++    printf("CUDA Malloc,  pointer address: %p, size: %d \n", *a, width_height);
++#endif
++    if (cuerr != cudaSuccess) {
++      errormessage("Error in cudaMalloc: %s\n",cudaGetErrorString(cuerr));
++      return 0;
++    }
++    return 1;
++  }
++
++  int cudaFreeFromC(intptr_t *a) {
++#ifdef DEBUG_CUDA
++    printf("CUDA Free, pointer address: %p \n", a);
++#endif
++    cudaError_t cuerr = cudaFree(a);
++
++    if (cuerr != cudaSuccess) {
++      errormessage("Error in cudaFree: %s\n",cudaGetErrorString(cuerr));
++      return 0;
++    }
++    return 1;
++  }
++
++  int cudaMemcpyFromC(intptr_t *dest, intptr_t *src, size_t count, int dir) {
++
++    cudaError_t cuerr = cudaMemcpy( dest, src, count, (cudaMemcpyKind)dir);
++    if (cuerr != cudaSuccess) {
++      errormessage("Error in cudaMemcpy: %s\n",cudaGetErrorString(cuerr));
++      return 0;
++    }
++    return 1;
++  }
++
++  int cudaMemcpyDeviceToDeviceFromC(void) {
++      int val = cudaMemcpyDeviceToDevice;
++      return val;
++  }
++  int cudaMemcpyHostToDeviceFromC(void) {
++      int val = cudaMemcpyHostToDevice;
++      return val;
++  }
++  int cudaMemcpyDeviceToHostFromC(void) {
++      int val = cudaMemcpyDeviceToHost;
++      return val;
++  }
++  int cudaHostRegisterDefaultFromC(void) {
++      int val = cudaHostRegisterDefault;
++      return val;
++  }
++  int cudaHostRegisterPortableFromC(void) {
++      int val = cudaHostRegisterPortable;
++      return val;
++  }
++  int cudaHostRegisterMappedFromC(void) {
++      int val = cudaHostRegisterMapped;
++      return val;
++  }
++
++}
++#endif /* TEST_NVIDIA_GPU == 1 */
+diff -ruN elpa-new_release_2021.11.001/examples/shared/GPU/ROCm/test_hip.F90 elpa-new_release_2021.11.001_ok/examples/shared/GPU/ROCm/test_hip.F90
+--- elpa-new_release_2021.11.001/examples/shared/GPU/ROCm/test_hip.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/GPU/ROCm/test_hip.F90	2022-01-26 10:10:58.327011000 +0100
+@@ -0,0 +1,449 @@
++!    Copyright 2021, A. Marek
++!
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++! This file was written by A. Marek, MPCDF
++
++
++#include "config-f90.h"
++module test_hip_functions
++  use, intrinsic :: iso_c_binding
++  use precision_for_tests
++  implicit none
++
++  public
++
++  integer(kind=ik) :: hipMemcpyHostToDevice
++  integer(kind=ik) :: hipMemcpyDeviceToHost
++  integer(kind=ik) :: hipMemcpyDeviceToDevice
++  integer(kind=ik) :: hipHostRegisterDefault
++  integer(kind=ik) :: hipHostRegisterPortable
++  integer(kind=ik) :: hipHostRegisterMapped
++
++  ! TODO global variable, has to be changed
++  integer(kind=C_intptr_T) :: rocblasHandle = -1
++
++  ! functions to set and query the CUDA devices
++  interface
++    function hip_setdevice_c(n) result(istat) &
++             bind(C, name="hipSetDeviceFromC")
++
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=C_INT), value    :: n
++      integer(kind=C_INT)           :: istat
++    end function hip_setdevice_c
++  end interface
++
++  ! functions to copy CUDA memory
++  interface
++    function hip_memcpyDeviceToDevice_c() result(flag) &
++             bind(C, name="hipMemcpyDeviceToDeviceFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function hip_memcpyHostToDevice_c() result(flag) &
++             bind(C, name="hipMemcpyHostToDeviceFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function hip_memcpyDeviceToHost_c() result(flag) &
++             bind(C, name="hipMemcpyDeviceToHostFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function hip_hostRegisterDefault_c() result(flag) &
++             bind(C, name="hipHostRegisterDefaultFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function hip_hostRegisterPortable_c() result(flag) &
++             bind(C, name="hipHostRegisterPortableFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function hip_hostRegisterMapped_c() result(flag) &
++             bind(C, name="hipHostRegisterMappedFromC")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=c_int) :: flag
++    end function
++  end interface
++
++  interface
++    function hip_memcpy_intptr_c(dst, src, size, dir) result(istat) &
++             bind(C, name="hipMemcpyFromC")
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      integer(kind=C_intptr_t), value              :: dst
++      integer(kind=C_intptr_t), value              :: src
++      integer(kind=c_intptr_t), intent(in), value  :: size
++      integer(kind=C_INT), intent(in), value       :: dir
++      integer(kind=C_INT)                          :: istat
++
++    end function hip_memcpy_intptr_c
++  end interface
++
++  interface
++    function hip_memcpy_cptr_c(dst, src, size, dir) result(istat) &
++             bind(C, name="hipMemcpyFromC")
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      type(c_ptr), value                           :: dst
++      type(c_ptr), value                           :: src
++      integer(kind=c_intptr_t), intent(in), value  :: size
++      integer(kind=C_INT), intent(in), value       :: dir
++      integer(kind=C_INT)                          :: istat
++
++    end function hip_memcpy_cptr_c
++  end interface
++
++  interface
++    function hip_memcpy_mixed_c(dst, src, size, dir) result(istat) &
++             bind(C, name="hipMemcpyFromC")
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      type(c_ptr), value                           :: dst
++      integer(kind=c_intptr_t), value              :: src
++      integer(kind=c_intptr_t), intent(in), value  :: size
++      integer(kind=C_INT), intent(in), value       :: dir
++      integer(kind=C_INT)                          :: istat
++
++    end function hip_memcpy_mixed_c
++  end interface
++
++  ! functions to allocate and free CUDA memory
++
++  interface
++    function hip_free_intptr_c(a) result(istat) &
++             bind(C, name="hipFreeFromC")
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      integer(kind=C_intptr_T), value  :: a
++      integer(kind=C_INT)              :: istat
++
++    end function hip_free_intptr_c
++  end interface
++
++  interface
++    function hip_free_cptr_c(a) result(istat) &
++             bind(C, name="hipFreeFromC")
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      type(c_ptr), value  :: a
++      integer(kind=C_INT)              :: istat
++
++    end function hip_free_cptr_c
++  end interface
++
++  interface hip_memcpy
++    module procedure hip_memcpy_intptr
++    module procedure hip_memcpy_cptr
++    module procedure hip_memcpy_mixed
++  end interface
++
++  interface hip_free
++    module procedure hip_free_intptr
++    module procedure hip_free_cptr
++  end interface
++
++  interface
++    function hip_malloc_intptr_c(a, width_height) result(istat) &
++             bind(C, name="hipMallocFromC")
++
++      use, intrinsic :: iso_c_binding
++      implicit none
++
++      integer(kind=C_intptr_T)                    :: a
++      integer(kind=c_intptr_t), intent(in), value   :: width_height
++      integer(kind=C_INT)                         :: istat
++
++    end function hip_malloc_intptr_c
++  end interface
++
++  interface
++    function hip_malloc_cptr_c(a, width_height) result(istat) &
++             bind(C, name="hipMallocFromC")
++
++      use, intrinsic :: iso_c_binding
++      implicit none
++
++      type(c_ptr)                    :: a
++      integer(kind=c_intptr_t), intent(in), value   :: width_height
++      integer(kind=C_INT)                         :: istat
++
++    end function hip_malloc_cptr_c
++  end interface
++
++  contains
++
++    function hip_setdevice(n) result(success)
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++
++      integer(kind=ik), intent(in)  :: n
++      logical                       :: success
++#ifdef WITH_AMD_GPU_VERSION
++      success = hip_setdevice_c(int(n,kind=c_int)) /= 0
++#else
++      success = .true.
++#endif
++    end function hip_setdevice
++
++    ! functions to allocate and free memory
++
++    function hip_malloc_intptr(a, width_height) result(success)
++
++     use, intrinsic :: iso_c_binding
++     implicit none
++
++     integer(kind=C_intptr_t)                  :: a
++     integer(kind=c_intptr_t), intent(in)        :: width_height
++     logical                                   :: success
++#ifdef WITH_AMD_GPU_VERSION
++     success = hip_malloc_intptr_c(a, width_height) /= 0
++#else
++     success = .true.
++#endif
++   end function
++
++    function hip_malloc_cptr(a, width_height) result(success)
++
++     use, intrinsic :: iso_c_binding
++     implicit none
++
++     type(c_ptr)                  :: a
++     integer(kind=c_intptr_t), intent(in)        :: width_height
++     logical                                   :: success
++#ifdef WITH_AMD_GPU_VERSION
++     success = hip_malloc_cptr_c(a, width_height) /= 0
++#else
++     success = .true.
++#endif
++   end function
++
++   function hip_free_intptr(a) result(success)
++
++     use, intrinsic :: iso_c_binding
++
++     implicit none
++     integer(kind=C_intptr_T) :: a
++     logical                  :: success
++#ifdef WITH_AMD_GPU_VERSION
++     success = hip_free_intptr_c(a) /= 0
++#else
++     success = .true.
++#endif
++   end function hip_free_intptr
++
++   function hip_free_cptr(a) result(success)
++
++     use, intrinsic :: iso_c_binding
++
++     implicit none
++     type(c_ptr) :: a
++     logical                  :: success
++#ifdef WITH_AMD_GPU_VERSION
++     success = hip_free_cptr_c(a) /= 0
++#else
++     success = .true.
++#endif
++   end function hip_free_cptr
++
++ ! functions to memcopy CUDA memory
++
++ function hip_memcpyDeviceToDevice() result(flag)
++   use, intrinsic :: iso_c_binding
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_AMD_GPU_VERSION
++   flag = int(hip_memcpyDeviceToDevice_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function hip_memcpyHostToDevice() result(flag)
++   use, intrinsic :: iso_c_binding
++   use precision_for_tests
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_AMD_GPU_VERSION
++   flag = int(hip_memcpyHostToDevice_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function hip_memcpyDeviceToHost() result(flag)
++   use, intrinsic :: iso_c_binding
++   use precision_for_tests
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_AMD_GPU_VERSION
++   flag = int( hip_memcpyDeviceToHost_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function hip_hostRegisterDefault() result(flag)
++   use, intrinsic :: iso_c_binding
++   use precision_for_tests
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_AMD_GPU_VERSION
++   flag = int(hip_hostRegisterDefault_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function hip_hostRegisterPortable() result(flag)
++   use, intrinsic :: iso_c_binding
++   use precision_for_tests
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_AMD_GPU_VERSION
++   flag = int(hip_hostRegisterPortable_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function hip_hostRegisterMapped() result(flag)
++   use, intrinsic :: iso_c_binding
++   use precision_for_tests
++   implicit none
++   integer(kind=ik) :: flag
++#ifdef WITH_AMD_GPU_VERSION
++   flag = int(hip_hostRegisterMapped_c())
++#else
++   flag = 0
++#endif
++ end function
++
++ function hip_memcpy_intptr(dst, src, size, dir) result(success)
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      integer(kind=C_intptr_t)              :: dst
++      integer(kind=C_intptr_t)              :: src
++      integer(kind=c_intptr_t), intent(in)    :: size
++      integer(kind=C_INT), intent(in)       :: dir
++      logical :: success
++
++#ifdef WITH_AMD_GPU_VERSION
++        success = hip_memcpy_intptr_c(dst, src, size, dir) /= 0
++#else
++        success = .true.
++#endif
++    end function
++
++ function hip_memcpy_cptr(dst, src, size, dir) result(success)
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      type(c_ptr)                           :: dst
++      type(c_ptr)                           :: src
++      integer(kind=c_intptr_t), intent(in)  :: size
++      integer(kind=C_INT), intent(in)       :: dir
++      logical :: success
++
++#ifdef WITH_AMD_GPU_VERSION
++        success = hip_memcpy_cptr_c(dst, src, size, dir) /= 0
++#else
++        success = .true.
++#endif
++    end function
++
++ function hip_memcpy_mixed(dst, src, size, dir) result(success)
++
++      use, intrinsic :: iso_c_binding
++
++      implicit none
++      type(c_ptr)                           :: dst
++      integer(kind=c_intptr_t)              :: src
++      integer(kind=c_intptr_t), intent(in)  :: size
++      integer(kind=C_INT), intent(in)       :: dir
++      logical :: success
++
++#ifdef WITH_AMD_GPU_VERSION
++        success = hip_memcpy_mixed_c(dst, src, size, dir) /= 0
++#else
++        success = .true.
++#endif
++    end function
++
++end module test_hip_functions
+diff -ruN elpa-new_release_2021.11.001/examples/shared/GPU/ROCm/test_rocmFunctions.cpp elpa-new_release_2021.11.001_ok/examples/shared/GPU/ROCm/test_rocmFunctions.cpp
+--- elpa-new_release_2021.11.001/examples/shared/GPU/ROCm/test_rocmFunctions.cpp	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/GPU/ROCm/test_rocmFunctions.cpp	2022-01-26 10:10:58.328343000 +0100
+@@ -0,0 +1,153 @@
++//
++//    Copyright 2021, A. Marek
++//
++//    This file is part of ELPA.
++//
++//    The ELPA library was originally created by the ELPA consortium,
++//    consisting of the following organizations:
++//
++//    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++//      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++//    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++//      Informatik,
++//    - Technische Universität München, Lehrstuhl für Informatik mit
++//      Schwerpunkt Wissenschaftliches Rechnen ,
++//    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++//    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++//      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++//      and
++//    - IBM Deutschland GmbH
++//
++//    This particular source code file contains additions, changes and
++//    enhancements authored by Intel Corporation which is not part of
++//    the ELPA consortium.
++//
++//    More information can be found here:
++//    http://elpa.mpcdf.mpg.de/
++//
++//    ELPA is free software: you can redistribute it and/or modify
++//    it under the terms of the version 3 of the license of the
++//    GNU Lesser General Public License as published by the Free
++//    Software Foundation.
++//
++//    ELPA 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 Lesser General Public License for more details.
++//
++//    You should have received a copy of the GNU Lesser General Public License
++//    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++//
++//    ELPA reflects a substantial effort on the part of the original
++//    ELPA consortium, and we ask you to respect the spirit of the
++//    license that we chose: i.e., please contribute any changes you
++//    may have back to the original ELPA library distribution, and keep
++//    any derivatives of ELPA under the same license that we chose for
++//    the original distribution, the GNU Lesser General Public License.
++//
++//
++// --------------------------------------------------------------------------------------------------
++//
++// This file was written by A. Marek, MPCDF
++#include "config-f90.h"
++
++#include <stdio.h>
++#include <math.h>
++#include <stdio.h>
++
++#include <stdlib.h>
++#include <string.h>
++#include <time.h>
++#include <alloca.h>
++#include <stdint.h>
++#include <complex.h>
++#ifdef WITH_AMD_GPU_VERSION
++//missing header for rocblas
++#include "rocblas.h"
++#include "hip/hip_runtime_api.h"
++#endif
++
++#define errormessage(x, ...) do { fprintf(stderr, "%s:%d " x, __FILE__, __LINE__, __VA_ARGS__ ); } while (0)
++
++#ifdef DEBUG_HIP
++#define debugmessage(x, ...) do { fprintf(stderr, "%s:%d " x, __FILE__, __LINE__, __VA_ARGS__ ); } while (0)
++#else
++#define debugmessage(x, ...)
++#endif
++
++#ifdef WITH_AMD_GPU_VERSION
++extern "C" {
++
++  int hipSetDeviceFromC(int n) {
++
++    hipError_t hiperr = hipSetDevice(n);
++    if (hiperr != hipSuccess) {
++      errormessage("Error in hipSetDevice: %s\n",hipGetErrorString(hiperr));
++      return 0;
++    }
++    return 1;
++  }
++
++  int hipMallocFromC(intptr_t *a, size_t width_height) {
++
++    hipError_t hiperr = hipMalloc((void **) a, width_height);
++#ifdef DEBUG_HIP
++    printf("HIP Malloc,  pointer address: %p, size: %d \n", *a, width_height);
++#endif
++    if (hiperr != hipSuccess) {
++      errormessage("Error in hipMalloc: %s\n",hipGetErrorString(hiperr));
++      return 0;
++    }
++    return 1;
++  }
++
++  int hipFreeFromC(intptr_t *a) {
++#ifdef DEBUG_HIP
++    printf("HIP Free, pointer address: %p \n", a);
++#endif
++    hipError_t hiperr = hipFree(a);
++
++    if (hiperr != hipSuccess) {
++      errormessage("Error in hipFree: %s\n",hipGetErrorString(hiperr));
++      return 0;
++    }
++    return 1;
++  }
++
++  int hipMemcpyFromC(intptr_t *dest, intptr_t *src, size_t count, int dir) {
++
++    hipError_t hiperr = hipMemcpy( dest, src, count, (hipMemcpyKind)dir);
++    if (hiperr != hipSuccess) {
++      errormessage("Error in hipMemcpy: %s\n",hipGetErrorString(hiperr));
++      return 0;
++    }
++    return 1;
++  }
++
++  int hipMemcpyDeviceToDeviceFromC(void) {
++      int val = (int)hipMemcpyDeviceToDevice;
++      return val;
++  }
++  int hipMemcpyHostToDeviceFromC(void) {
++      int val = (int)hipMemcpyHostToDevice;
++      return val;
++  }
++  int hipMemcpyDeviceToHostFromC(void) {
++      int val = (int)hipMemcpyDeviceToHost;
++      return val;
++  }
++  int hipHostRegisterDefaultFromC(void) {
++      int val = (int)hipHostRegisterDefault;
++      return val;
++  }
++  int hipHostRegisterPortableFromC(void) {
++      int val = (int)hipHostRegisterPortable;
++      return val;
++  }
++  int hipHostRegisterMappedFromC(void) {
++      int val = (int)hipHostRegisterMapped;
++      return val;
++  }
++
++}
++#endif /* TEST_AMD_GPU == 1 */
+diff -ruN elpa-new_release_2021.11.001/examples/shared/GPU/test_gpu_vendor_agnostic_layer.F90 elpa-new_release_2021.11.001_ok/examples/shared/GPU/test_gpu_vendor_agnostic_layer.F90
+--- elpa-new_release_2021.11.001/examples/shared/GPU/test_gpu_vendor_agnostic_layer.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/GPU/test_gpu_vendor_agnostic_layer.F90	2022-01-26 10:10:58.329439000 +0100
+@@ -0,0 +1,357 @@
++#if 0
++!    Copyright 2021, A. Marek, MPCDF
++!
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!    This particular source code file contains additions, changes and
++!    enhancements authored by Intel Corporation which is not part of
++!    the ELPA consortium.
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++#endif
++
++
++#include "config-f90.h"
++module test_gpu
++  !use precision_for_tests
++  use precision_for_tests
++  use iso_c_binding
++!#if TEST_INTEL_GPU == 1
++!  use mkl_offload
++!#endif
++  integer(kind=c_int), parameter :: nvidia_gpu = 1
++  integer(kind=c_int), parameter :: amd_gpu = 2
++  integer(kind=c_int), parameter :: intel_gpu = 3
++  integer(kind=c_int), parameter :: no_gpu = -1
++  integer(kind=c_int)            :: use_gpu_vendor
++  integer(kind=c_int)            :: gpuHostRegisterDefault    
++  integer(kind=c_int)            :: gpuMemcpyHostToDevice    
++  integer(kind=c_int)            :: gpuMemcpyDeviceToHost   
++  integer(kind=c_int)            :: gpuMemcpyDeviceToDevice
++  integer(kind=c_int)            :: gpuHostRegisterMapped
++  integer(kind=c_int)            :: gpuHostRegisterPortable
++
++  integer(kind=c_intptr_t), parameter :: size_of_double_real    = 8_rk8
++#ifdef WANT_SINGLE_PRECISION_REAL
++  integer(kind=c_intptr_t), parameter :: size_of_single_real    = 4_rk4
++#endif
++
++  integer(kind=c_intptr_t), parameter :: size_of_double_complex = 16_ck8
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++  integer(kind=c_intptr_t), parameter :: size_of_single_complex = 8_ck4
++#endif
++
++  interface gpu_memcpy
++    module procedure gpu_memcpy_intptr
++    module procedure gpu_memcpy_cptr
++    module procedure gpu_memcpy_mixed
++  end interface
++
++  interface gpu_malloc
++    module procedure gpu_malloc_intptr
++    module procedure gpu_malloc_cptr
++  end interface
++
++  interface gpu_free
++    module procedure gpu_free_intptr
++    module procedure gpu_free_cptr
++  end interface
++
++  contains
++    function gpu_vendor(set_vendor) result(vendor)
++      use precision_for_tests
++      implicit none
++      integer(kind=c_int)             :: vendor
++      integer(kind=c_int), intent(in) :: set_vendor
++      ! default
++      vendor = no_gpu
++      if (set_vendor == nvidia_gpu) then
++        vendor = nvidia_gpu
++      endif
++      if (set_vendor == amd_gpu) then
++        vendor = amd_gpu
++      endif
++!#if TEST_INTEL_GPU == 1
++!      vendor = intel_gpu
++!#endif
++      use_gpu_vendor = vendor
++      return
++    end function
++
++    subroutine set_gpu_parameters
++#ifdef WITH_NVIDIA_GPU_VERSION
++      use test_cuda_functions
++#endif
++#ifdef WITH_AMD_GPU_VERSION
++      use test_hip_functions
++#endif
++      implicit none
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++      if (use_gpu_vendor == nvidia_gpu) then
++        cudaMemcpyHostToDevice   = cuda_memcpyHostToDevice()
++        gpuMemcpyHostToDevice    = cudaMemcpyHostToDevice
++        cudaMemcpyDeviceToHost   = cuda_memcpyDeviceToHost()
++        gpuMemcpyDeviceToHost    = cudaMemcpyDeviceToHost
++        cudaMemcpyDeviceToDevice = cuda_memcpyDeviceToDevice()
++        gpuMemcpyDeviceToDevice  = cudaMemcpyDeviceToDevice
++        cudaHostRegisterPortable = cuda_hostRegisterPortable()
++        gpuHostRegisterPortable  = cudaHostRegisterPortable
++        cudaHostRegisterMapped   = cuda_hostRegisterMapped()
++        gpuHostRegisterMapped    = cudaHostRegisterMapped
++        cudaHostRegisterDefault  = cuda_hostRegisterDefault()
++        gpuHostRegisterDefault   = cudaHostRegisterDefault
++      endif
++#endif
++
++#ifdef WITH_AMD_GPU_VERSION
++      if (use_gpu_vendor == amd_gpu) then
++        hipMemcpyHostToDevice   = hip_memcpyHostToDevice()
++        gpuMemcpyHostToDevice   = hipMemcpyHostToDevice
++        hipMemcpyDeviceToHost   = hip_memcpyDeviceToHost()
++        gpuMemcpyDeviceToHost   = hipMemcpyDeviceToHost
++        hipMemcpyDeviceToDevice = hip_memcpyDeviceToDevice()
++        gpuMemcpyDeviceToDevice = hipMemcpyDeviceToDevice
++        hipHostRegisterPortable = hip_hostRegisterPortable()
++        gpuHostRegisterPortable = hipHostRegisterPortable
++        hipHostRegisterMapped   = hip_hostRegisterMapped()
++        gpuHostRegisterMapped   = hipHostRegisterMapped
++        hipHostRegisterDefault  = hip_hostRegisterDefault()
++        gpuHostRegisterDefault  = hipHostRegisterDefault
++      endif
++#endif
++
++    end subroutine
++
++    function gpu_malloc_intptr(array, elements) result(success)
++      use, intrinsic :: iso_c_binding
++#ifdef WITH_NVIDIA_GPU_VERSION
++      use test_cuda_functions
++#endif
++#ifdef WITH_AMD_GPU_VERSION
++      use test_hip_functions
++#endif
++      implicit none
++      integer(kind=C_intptr_T)             :: array
++      integer(kind=c_intptr_t), intent(in) :: elements
++      logical                              :: success
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++      if (use_gpu_vendor == nvidia_gpu) then
++        success = cuda_malloc_intptr(array, elements)
++      endif
++#endif
++#ifdef WITH_AMD_GPU_VERSION
++      if (use_gpu_vendor == amd_gpu) then
++        success = hip_malloc_intptr(array, elements)
++      endif
++#endif
++
++    end function
++
++    function gpu_malloc_cptr(array, elements) result(success)
++      use, intrinsic :: iso_c_binding
++#ifdef WITH_NVIDIA_GPU_VERSION
++      use test_cuda_functions
++#endif
++#ifdef WITH_AMD_GPU_VERSION
++      use test_hip_functions
++#endif
++      implicit none
++      type(c_ptr)                          :: array
++      integer(kind=c_intptr_t), intent(in) :: elements
++      logical                              :: success
++      success = .false.
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++      if (use_gpu_vendor == nvidia_gpu) then
++        success = cuda_malloc_cptr(array, elements)
++      endif
++#endif
++
++#ifdef WITH_AMD_GPU_VERSION
++      if (use_gpu_vendor == amd_gpu) then
++        success = hip_malloc_cptr(array, elements)
++      endif
++#endif
++
++    end function
++
++    function gpu_memcpy_intptr(dst, src, size, dir) result(success)
++      use, intrinsic :: iso_c_binding
++#ifdef WITH_NVIDIA_GPU_VERSION
++      use test_cuda_functions
++#endif
++#ifdef WITH_AMD_GPU_VERSION
++      use test_hip_functions
++#endif
++      implicit none
++      integer(kind=C_intptr_t)              :: dst
++      integer(kind=C_intptr_t)              :: src
++      integer(kind=c_intptr_t), intent(in)  :: size
++      integer(kind=C_INT), intent(in)       :: dir
++      logical :: success
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++      if (use_gpu_vendor == nvidia_gpu) then
++        success = cuda_memcpy_intptr(dst, src, size, dir)
++      endif
++#endif
++
++#ifdef WITH_AMD_GPU_VERSION
++      if (use_gpu_vendor == amd_gpu) then
++        success = hip_memcpy_intptr(dst, src, size, dir)
++      endif
++#endif
++
++    end function
++    
++    function gpu_memcpy_cptr(dst, src, size, dir) result(success)
++      use, intrinsic :: iso_c_binding
++#ifdef WITH_NVIDIA_GPU_VERSION
++      use test_cuda_functions
++#endif
++#ifdef WITH_AMD_GPU_VERSION
++      use test_hip_functions
++#endif
++      implicit none
++      type(c_ptr)                           :: dst
++      type(c_ptr)                           :: src
++      integer(kind=c_intptr_t), intent(in)  :: size
++      integer(kind=C_INT), intent(in)       :: dir
++      logical :: success
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++      if (use_gpu_vendor == nvidia_gpu) then
++        success = cuda_memcpy_cptr(dst, src, size, dir)
++      endif
++#endif
++
++#ifdef WITH_AMD_GPU_VERSION
++      if (use_gpu_vendor == amd_gpu) then
++        success = hip_memcpy_cptr(dst, src, size, dir)
++      endif
++#endif
++
++    end function
++    
++    function gpu_memcpy_mixed(dst, src, size, dir) result(success)
++      use, intrinsic :: iso_c_binding
++#ifdef WITH_NVIDIA_GPU_VERSION
++      use test_cuda_functions
++#endif
++#ifdef WITH_AMD_GPU_VERSION
++      use test_hip_functions
++#endif
++      implicit none
++      type(c_ptr)                           :: dst
++      integer(kind=C_intptr_t)              :: src
++      integer(kind=c_intptr_t), intent(in)  :: size
++      integer(kind=C_INT), intent(in)       :: dir
++      logical :: success
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++      if (use_gpu_vendor == nvidia_gpu) then
++        success = cuda_memcpy_mixed(dst, src, size, dir)
++      endif
++#endif
++
++#ifdef WITH_AMD_GPU_VERSION
++      if (use_gpu_vendor == amd_gpu) then
++        success = hip_memcpy_mixed(dst, src, size, dir)
++      endif
++#endif
++
++    end function
++
++    function gpu_free_intptr(a) result(success)
++      use, intrinsic :: iso_c_binding
++#ifdef WITH_NVIDIA_GPU_VERSION
++      use test_cuda_functions
++#endif
++#ifdef WITH_AMD_GPU_VERSION
++      use test_hip_functions
++#endif
++      implicit none
++      integer(kind=c_intptr_t)                :: a
++
++      logical :: success
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++      if (use_gpu_vendor == nvidia_gpu) then
++        success = cuda_free_intptr(a)
++      endif
++#endif
++
++#ifdef WITH_AMD_GPU_VERSION
++      if (use_gpu_vendor == amd_gpu) then
++        success = hip_free_intptr(a)
++      endif
++#endif
++
++    end function
++
++    function gpu_free_cptr(a) result(success)
++      use, intrinsic :: iso_c_binding
++#ifdef WITH_NVIDIA_GPU_VERSION
++      use test_cuda_functions
++#endif
++#ifdef WITH_AMD_GPU_VERSION
++      use test_hip_functions
++#endif
++      implicit none
++      type(c_ptr)                :: a
++
++      logical :: success
++
++#ifdef WITH_NVIDIA_GPU_VERSION
++      if (use_gpu_vendor == nvidia_gpu) then
++        success = cuda_free_cptr(a)
++      endif
++#endif
++
++#ifdef WITH_AMD_GPU_VERSION
++      if (use_gpu_vendor == amd_gpu) then
++        success = hip_free_cptr(a)
++      endif
++#endif
++
++    end function
++
++end module 
+diff -ruN elpa-new_release_2021.11.001/examples/shared/mod_tests_blas_interfaces.F90 elpa-new_release_2021.11.001_ok/examples/shared/mod_tests_blas_interfaces.F90
+--- elpa-new_release_2021.11.001/examples/shared/mod_tests_blas_interfaces.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/mod_tests_blas_interfaces.F90	2022-01-26 10:10:58.330923000 +0100
+@@ -0,0 +1,53 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    https://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++! This file was written by A. Marek, MPCDF
++
++#include "config-f90.h"
++#define PRECISION_MODULE precision_for_tests
++module tests_blas_interfaces
++  use iso_c_binding
++  use precision_for_tests
++
++  implicit none
++
++#include "../../src/helpers/fortran_blas_interfaces.F90"
++
++end module
+diff -ruN elpa-new_release_2021.11.001/examples/shared/mod_tests_scalapack_interfaces.F90 elpa-new_release_2021.11.001_ok/examples/shared/mod_tests_scalapack_interfaces.F90
+--- elpa-new_release_2021.11.001/examples/shared/mod_tests_scalapack_interfaces.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/mod_tests_scalapack_interfaces.F90	2022-01-26 10:10:58.331765000 +0100
+@@ -0,0 +1,56 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    https://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++! This file was written by A. Marek, MPCDF
++
++
++#include "config-f90.h"
++#define PRECISION_MODULE precision_for_tests
++module tests_scalapack_interfaces
++  use iso_c_binding
++  use precision_for_tests
++
++  implicit none
++
++#include "../../src/helpers/fortran_scalapack_interfaces.F90"
++
++end module
++
++
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_analytic.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_analytic.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_analytic.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_analytic.F90	2022-01-26 10:10:58.332553000 +0100
+@@ -0,0 +1,204 @@
++! (c) Copyright Pavel Kus, 2017, MPCDF
++!
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++
++#include "../Fortran/assert.h"
++#include "config-f90.h"
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++module test_analytic
++
++  use test_util
++#ifdef HAVE_DETAILED_TIMINGS
++  use ftimings
++#else
++  use timings_dummy
++#endif
++  use precision_for_tests
++
++  interface prepare_matrix_analytic
++    module procedure prepare_matrix_analytic_complex_double
++    module procedure prepare_matrix_analytic_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure prepare_matrix_analytic_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure prepare_matrix_analytic_complex_single
++#endif
++  end interface
++
++  interface check_correctness_analytic
++    module procedure check_correctness_analytic_complex_double
++    module procedure check_correctness_analytic_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure check_correctness_analytic_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure check_correctness_analytic_complex_single
++#endif
++  end interface
++
++
++  interface print_matrix
++    module procedure print_matrix_complex_double
++    module procedure print_matrix_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure print_matrix_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure print_matrix_complex_single
++#endif
++  end interface
++
++  TEST_INT_TYPE, parameter, private  :: num_primes = 3
++#ifdef BUILD_FUGAKU
++  TEST_INT_TYPE, private  :: primes(num_primes)
++#else
++  TEST_INT_TYPE, parameter, private  :: primes(num_primes) = (/2,3,5/)
++#endif
++
++  TEST_INT_TYPE, parameter, private  :: ANALYTIC_MATRIX = 0
++  TEST_INT_TYPE, parameter, private  :: ANALYTIC_EIGENVECTORS = 1
++  TEST_INT_TYPE, parameter, private  :: ANALYTIC_EIGENVALUES = 2
++
++  contains
++
++  function decompose(num, decomposition) result(possible)
++    implicit none
++    TEST_INT_TYPE, intent(in)   :: num
++    TEST_INT_TYPE, intent(out)  :: decomposition(num_primes)
++    logical                        :: possible
++    TEST_INT_TYPE               :: reminder, prime, prime_id
++
++#ifdef BUILD_FUGAKU
++    primes(1) = 2
++    primes(2) = 3
++    primes(3) = 5
++#endif
++    decomposition = 0
++    possible = .true.
++    reminder = num
++    do prime_id = 1, num_primes
++      prime = primes(prime_id)
++      do while (MOD(reminder, prime) == 0)
++        decomposition(prime_id) = decomposition(prime_id) + 1
++        reminder = reminder / prime
++      end do
++    end do
++    if(reminder > 1) then
++      possible = .false.
++    end if
++  end function
++
++  function compose(decomposition) result(num)
++    implicit none
++    TEST_INT_TYPE, intent(in)   :: decomposition(num_primes)
++    TEST_INT_TYPE               :: num, prime_id
++
++    num = 1;
++#ifdef BUILD_FUGAKU
++    primes(1) = 2
++    primes(2) = 3
++    primes(3) = 5
++#endif
++    do prime_id = 1, num_primes
++      num = num * primes(prime_id) ** decomposition(prime_id)
++    end do
++  end function
++
++
++#include "../../src/general/prow_pcol.F90"
++#include "../../src/general/map_global_to_local.F90"
++
++
++#define COMPLEXCASE 1
++#define DOUBLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_analytic_template.F90"
++#undef DOUBLE_PRECISION
++#undef COMPLEXCASE
++
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++
++#define COMPLEXCASE 1
++#define SINGLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_analytic_template.F90"
++#undef SINGLE_PRECISION
++#undef COMPLEXCASE
++
++#endif /* WANT_SINGLE_PRECISION_COMPLEX */
++
++#define REALCASE 1
++#define DOUBLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_analytic_template.F90"
++#undef DOUBLE_PRECISION
++#undef REALCASE
++
++#ifdef WANT_SINGLE_PRECISION_REAL
++
++#define REALCASE 1
++#define SINGLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_analytic_template.F90"
++#undef SINGLE_PRECISION
++#undef REALCASE
++
++#endif /* WANT_SINGLE_PRECISION_REAL */
++
++
++end module
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_analytic_template.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_analytic_template.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_analytic_template.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_analytic_template.F90	2022-01-26 10:10:58.333552000 +0100
+@@ -0,0 +1,701 @@
++!  (c) Copyright Pavel Kus, 2017, MPCDF
++!
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++
++#include "config-f90.h"
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++
++  subroutine prepare_matrix_analytic_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(na, a, nblk, myid, np_rows, np_cols, my_prow, my_pcol, print_times)
++    use precision_for_tests
++
++    implicit none
++    TEST_INT_TYPE, intent(in)                       :: na, nblk, myid, np_rows, np_cols, my_prow, my_pcol
++    MATH_DATATYPE(kind=REAL_DATATYPE), intent(inout):: a(:,:)
++    logical, optional                               :: print_times
++    logical                                         :: print_timer
++    TEST_INT_TYPE                                   :: globI, globJ, locI, locJ, pi, pj, levels(num_primes)
++    integer(kind=c_int)                             :: loc_I, loc_J, p_i, p_j
++#ifdef HAVE_DETAILED_TIMINGS
++    type(timer_t)                                   :: timer
++#else
++    type(timer_dummy_t)                             :: timer
++#endif
++
++    call timer%enable()
++    call timer%start("prepare_matrix_analytic")
++
++    print_timer = .true.
++
++    if (present(print_times)) then
++      print_timer = print_times
++    endif
++
++    ! for debug only, do it systematicaly somehow ... unit tests
++    call check_module_sanity_&
++            &MATH_DATATYPE&
++            &_&
++            &PRECISION&
++            &(myid)
++
++    if(.not. decompose(na, levels)) then
++      if(myid == 0) then
++        print *, "Analytic test can be run only with matrix sizes of the form 2^n * 3^m * 5^o"
++        stop 1
++      end if
++    end if
++
++    call timer%start("loop")
++    do globI = 1, na
++
++      p_i = prow(int(globI,kind=c_int), int(nblk,kind=c_int), int(np_rows,kind=c_int))
++      pi = int(p_i,kind=INT_TYPE)
++      if (my_prow .ne. pi) cycle
++
++      do globJ = 1, na
++
++        p_j = pcol(int(globJ,kind=c_int), int(nblk,kind=c_int), int(np_cols,kind=c_int))
++        pj = int(p_j,kind=INT_TYPE)
++        if (my_pcol .ne. pj) cycle
++
++        if(map_global_array_index_to_local_index(int(globI,kind=c_int), int(globJ,kind=c_int), loc_I, loc_J, &
++                 int(nblk,kind=c_int), int(np_rows,kind=c_int), int(np_cols,kind=c_int), &
++                 int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then
++           locI = int(loc_i,kind=INT_TYPE)      
++           locJ = int(loc_j,kind=INT_TYPE)      
++           call timer%start("evaluation")
++           a(locI, locJ) = analytic_matrix_&
++              &MATH_DATATYPE&
++              &_&
++              &PRECISION&
++              &(na, globI, globJ)
++          call timer%stop("evaluation")
++        else
++          print *, "Warning ... error in preparation loop of the analytic test"
++        end if
++      end do
++    end do
++    call timer%stop("loop")
++
++    call timer%stop("prepare_matrix_analytic")
++    if(myid == 0 .and. print_timer) then
++      call timer%print("prepare_matrix_analytic")
++    end if
++    call timer%free()
++  end subroutine
++
++  function check_correctness_analytic_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(na, nev, ev, z, nblk, myid, np_rows, np_cols, my_prow, my_pcol, check_all_evals, &
++      check_eigenvectors, print_times) result(status)
++    use precision_for_tests
++    
++    implicit none
++#include "./test_precision_kinds.F90"
++    TEST_INT_TYPE, intent(in)              :: na, nev, nblk, myid, np_rows, &
++                                              np_cols, my_prow, my_pcol
++    TEST_INT_TYPE                          :: status
++    TEST_INT_MPI_TYPE                      :: mpierr
++    MATH_DATATYPE(kind=rck), intent(inout) :: z(:,:)
++    real(kind=rk), intent(inout)           :: ev(:)
++    logical, intent(in)                    :: check_all_evals, check_eigenvectors
++
++    TEST_INT_TYPE                          :: globI, globJ, locI, locJ, &
++                                              levels(num_primes)
++    integer(kind=c_int)                    :: loc_I, loc_J
++    real(kind=rk)                          :: diff, max_z_diff, max_ev_diff, &
++                                              glob_max_z_diff, max_curr_z_diff
++#ifdef DOUBLE_PRECISION
++    real(kind=rk), parameter               :: tol_eigenvalues = 5e-14_rk8
++    real(kind=rk), parameter               :: tol_eigenvectors = 6e-11_rk8
++#endif
++#ifdef SINGLE_PRECISION
++    ! tolerance needs to be very high due to qr tests
++    ! it should be distinguished somehow!
++    real(kind=rk), parameter               :: tol_eigenvalues = 7e-6_rk4
++    real(kind=rk), parameter               :: tol_eigenvectors = 4e-3_rk4
++#endif
++    real(kind=rk)                          :: computed_ev, expected_ev
++    MATH_DATATYPE(kind=rck)                :: computed_z,  expected_z
++
++    MATH_DATATYPE(kind=rck)                :: max_value_for_normalization, &
++                                              computed_z_on_max_position,  &
++                                              normalization_quotient
++    MATH_DATATYPE(kind=rck)                :: max_values_array(np_rows * np_cols), &
++                                              corresponding_exact_value
++    integer(kind=c_int)                    :: max_value_idx, rank_with_max, &
++                                              rank_with_max_reduced,        &
++                                              num_checked_evals
++    integer(kind=c_int)                    :: max_idx_array(np_rows * np_cols), &
++                                              rank
++    logical, optional                      :: print_times
++    logical                                :: print_timer
++
++#ifdef HAVE_DETAILED_TIMINGS
++    type(timer_t)    :: timer
++#else
++    type(timer_dummy_t)    :: timer
++#endif
++
++    call timer%enable()
++    call timer%start("check_correctness_analytic")
++
++
++    print_timer = .true.
++    if (present(print_times)) then
++      print_timer = print_times
++    endif
++
++    if(.not. decompose(na, levels)) then
++      print *, "can not decomopse matrix size"
++      stop 1
++    end if
++
++    if(check_all_evals) then
++        num_checked_evals = na
++    else
++        num_checked_evals = nev
++    endif
++    !call print_matrix(myid, na, z, "z")
++    max_z_diff = 0.0_rk
++    max_ev_diff = 0.0_rk
++    call timer%start("loop_eigenvalues")
++    do globJ = 1, num_checked_evals
++      computed_ev = ev(globJ)
++      call timer%start("evaluation")
++      expected_ev = analytic_eigenvalues_real_&
++              &PRECISION&
++              &(na, globJ)
++      call timer%stop("evaluation")
++      diff = abs(computed_ev - expected_ev)
++      max_ev_diff = max(diff, max_ev_diff)
++    end do
++    call timer%stop("loop_eigenvalues")
++
++    call timer%start("loop_eigenvectors")
++    do globJ = 1, nev
++      max_curr_z_diff = 0.0_rk
++
++      ! eigenvectors are unique up to multiplication by scalar (complex in complex case)
++      ! to be able to compare them with analytic, we have to normalize them somehow
++      ! we will find a value in computed eigenvector with highest absolut value and enforce
++      ! such multiple of computed eigenvector, that the value on corresponding position is the same
++      ! as an corresponding value in the analytical eigenvector
++
++      ! find the maximal value in the local part of given eigenvector (with index globJ)
++      max_value_for_normalization = 0.0_rk
++      max_value_idx = -1
++      do globI = 1, na
++        if(map_global_array_index_to_local_index(int(globI,kind=c_int), int(globJ,kind=c_int), loc_I, loc_J, &
++                 int(nblk,kind=c_int), int(np_rows,kind=c_int), int(np_cols,kind=c_int), &
++                 int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then
++          locI = int(loc_I,kind=INT_TYPE)
++          locJ = int(loc_J,kind=INT_TYPE)
++          computed_z = z(locI, locJ)
++          if(abs(computed_z) > abs(max_value_for_normalization)) then
++            max_value_for_normalization = computed_z
++            max_value_idx = int(globI,kind=c_int)
++          end if
++        end if
++      end do
++
++      ! find the global maximum and its position. From technical reasons (looking for a 
++      ! maximum of complex number), it is not so easy to do it nicely. Therefore we 
++      ! communicate local maxima to mpi rank 0 and resolve there. If we wanted to do
++      ! it without this, it would be tricky.. question of uniquness - two complex numbers
++      ! with the same absolut values, but completely different... 
++#ifdef WITH_MPI
++      call MPI_Gather(max_value_for_normalization, 1_MPI_KIND, MPI_MATH_DATATYPE_PRECISION, &
++                      max_values_array, 1_MPI_KIND, MPI_MATH_DATATYPE_PRECISION, 0_MPI_KIND, &
++                      int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr)
++      call MPI_Gather(max_value_idx, 1_MPI_KIND, MPI_INT, max_idx_array, 1_MPI_KIND, MPI_INT, &
++                      0_MPI_KIND, int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr)
++      max_value_for_normalization = 0.0_rk
++      max_value_idx = -1
++      do rank = 1, np_cols * np_rows 
++        if(abs(max_values_array(rank)) > abs(max_value_for_normalization)) then
++          max_value_for_normalization = max_values_array(rank)
++          max_value_idx = max_idx_array(rank)
++        end if
++      end do
++      call MPI_Bcast(max_value_for_normalization, 1_MPI_KIND, MPI_MATH_DATATYPE_PRECISION, &
++                     0_MPI_KIND, int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr)
++      call MPI_Bcast(max_value_idx, 1_MPI_KIND, MPI_INT, 0_MPI_KIND, &
++                     int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr)
++#endif
++      ! we decided what the maximum computed value is. Calculate expected value on the same 
++      if(abs(max_value_for_normalization) < 0.0001_rk) then 
++        if(myid == 0) print *, 'Maximal value in eigenvector too small     :', max_value_for_normalization
++        status =1
++        return
++      end if
++      call timer%start("evaluation_helper")
++      corresponding_exact_value  = analytic_eigenvectors_&
++                                       &MATH_DATATYPE&
++                                       &_&
++                                       &PRECISION&
++                                       &(na, int(max_value_idx,kind=INT_TYPE), globJ)
++      call timer%stop("evaluation_helper")
++      normalization_quotient = corresponding_exact_value / max_value_for_normalization
++      ! write(*,*) "normalization q", normalization_quotient
++
++      ! compare computed and expected eigenvector values, but take into account normalization quotient
++      do globI = 1, na
++        if(map_global_array_index_to_local_index(int(globI,kind=c_int), int(globJ,kind=c_int), loc_I, loc_J, &
++                 int(nblk,kind=c_int), int(np_rows,kind=c_int), int(np_cols,kind=c_int), &
++                 int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then
++           locI = int(loc_I,kind=INT_TYPE)
++           locJ = int(loc_J,kind=INT_TYPE)
++           computed_z = z(locI, locJ)
++           call timer%start("evaluation")
++           expected_z = analytic_eigenvectors_&
++              &MATH_DATATYPE&
++              &_&
++              &PRECISION&
++              &(na, globI, globJ)
++           call timer%stop("evaluation")
++           max_curr_z_diff = max(abs(normalization_quotient * computed_z - expected_z), max_curr_z_diff)
++        end if
++      end do
++      ! we have max difference of one of the eigenvectors, update global
++      max_z_diff = max(max_z_diff, max_curr_z_diff)
++    end do !globJ
++    call timer%stop("loop_eigenvectors")
++
++#ifdef WITH_MPI
++    call mpi_allreduce(max_z_diff, glob_max_z_diff, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, &
++                       int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr)
++#else
++    glob_max_z_diff = max_z_diff
++#endif
++    if(myid == 0) print *, 'Maximum error in eigenvalues      :', max_ev_diff
++    if (check_eigenvectors) then
++      if(myid == 0) print *, 'Maximum error in eigenvectors     :', glob_max_z_diff
++    endif
++
++    status = 0
++    if (nev .gt. 2) then
++      if (max_ev_diff .gt. tol_eigenvalues .or. max_ev_diff .eq. 0.0_rk) status = 1
++      if (check_eigenvectors) then
++        if (glob_max_z_diff .gt. tol_eigenvectors .or. glob_max_z_diff .eq. 0.0_rk) status = 1
++      endif
++    else
++      if (max_ev_diff .gt. tol_eigenvalues) status = 1
++      if (check_eigenvectors) then
++        if (glob_max_z_diff .gt. tol_eigenvectors) status = 1
++      endif
++    endif
++
++    call timer%stop("check_correctness_analytic")
++    if(myid == 0 .and. print_timer) then
++      call timer%print("check_correctness_analytic")
++    end if
++    call timer%free()
++  end function
++
++
++  function analytic_matrix_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(na, i, j) result(element)
++    use precision_for_tests
++
++    implicit none
++    TEST_INT_TYPE, intent(in) :: na, i, j
++    MATH_DATATYPE(kind=REAL_DATATYPE)     :: element
++
++    element = analytic_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(na, i, j, ANALYTIC_MATRIX)
++
++  end function
++
++  function analytic_eigenvectors_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(na, i, j) result(element)
++    use precision_for_tests
++
++    implicit none
++    TEST_INT_TYPE, intent(in) :: na, i, j
++    MATH_DATATYPE(kind=REAL_DATATYPE)               :: element
++
++    element = analytic_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(na, i, j, ANALYTIC_EIGENVECTORS)
++
++  end function
++
++  function analytic_eigenvalues_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(na, i) result(element)
++    use precision_for_tests
++
++    implicit none
++    TEST_INT_TYPE, intent(in) :: na, i
++    real(kind=REAL_DATATYPE)              :: element
++
++    element = analytic_real_&
++    &PRECISION&
++    &(na, i, i, ANALYTIC_EIGENVALUES)
++
++  end function
++
++  function analytic_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(na, i, j, what) result(element)
++    use precision_for_tests
++
++    implicit none
++#include "./test_precision_kinds.F90"
++    TEST_INT_TYPE, intent(in)     :: na, i, j, what
++    MATH_DATATYPE(kind=rck)       :: element, mat2x2(2,2), mat(5,5)
++    real(kind=rk)                 :: a, am, amp
++    TEST_INT_TYPE                 :: levels(num_primes)
++    TEST_INT_TYPE                 :: ii, jj, m, prime_id, prime, total_level, level
++
++    real(kind=rk), parameter      :: s = 0.5_rk
++    real(kind=rk), parameter      :: c = 0.86602540378443864679_rk
++    real(kind=rk), parameter      :: sq2 = 1.4142135623730950488_rk
++
++    real(kind=rk), parameter      :: largest_ev = 2.0_rk
++
++    assert(i <= na)
++    assert(j <= na)
++    assert(i >= 0)
++    assert(j >= 0)
++    assert(decompose(na, levels))
++    ! go to zero-based indexing
++    ii = i - 1
++    jj = j - 1
++    if (na .gt. 2) then
++      a = exp(log(largest_ev)/(na-1))
++    else
++      a = exp(log(largest_ev)/(1))
++    endif
++
++    element = 1.0_rck
++#ifdef COMPLEXCASE
++    element = (1.0_rk, 0.0_rk)
++#endif
++    total_level = 0
++    am = a
++#ifdef BUILD_FUGAKU
++    primes(1) = 2
++    primes(2) = 3
++    primes(3) = 5
++#endif
++    do prime_id = 1,num_primes
++      prime = primes(prime_id)
++      do  level = 1, levels(prime_id)
++        amp = am**(prime-1)
++        total_level = total_level + 1
++        if(what == ANALYTIC_MATRIX) then
++#ifdef REALCASE
++#ifndef FUGAKU
++          mat2x2 = reshape((/ c*c + amp * s*s, (amp - 1.0_rk) * s*c,  &
++                           (amp - 1.0_rk) * s*c, s*s + amp * c*c  /), &
++                                      (/2, 2/), order=(/2,1/))
++#endif
++#endif
++#ifdef COMPLEXCASE
++#ifndef FUGAKU
++          mat2x2 = reshape((/ 0.5_rck * (amp + 1.0_rck) * (1.0_rk, 0.0_rk),   sq2/4.0_rk * (amp - 1.0_rk) * (1.0_rk, 1.0_rk),   &
++                              sq2/4.0_rk * (amp - 1.0_rk) * (1.0_rk, -1.0_rk),  0.5_rck * (amp + 1.0_rck) * (1.0_rk, 0.0_rk) /), &
++                                      (/2, 2/), order=(/2,1/))
++! intel 2018 does not reshape correctly (one would have to specify order=(/1,2/)
++! until this is resolved, I resorted to the following
++          mat2x2(1,2) = sq2/4.0_rk * (amp - 1.0_rk) * (1.0_rk, 1.0_rk)
++          mat2x2(2,1) = sq2/4.0_rk * (amp - 1.0_rk) * (1.0_rk, -1.0_rk)
++#endif
++#endif
++        else if(what == ANALYTIC_EIGENVECTORS) then
++#ifdef REALCASE
++#ifndef FUGAKU
++          mat2x2 = reshape((/ c, s,  &
++                           -s,  c  /), &
++                                (/2, 2/), order=(/2,1/))
++! intel 2018 does not reshape correctly (one would have to specify order=(/1,2/)
++! until this is resolved, I resorted to the following
++          mat2x2(1,2) = s
++          mat2x2(2,1) = -s
++#endif
++#endif
++#ifdef COMPLEXCASE
++#ifndef FUGAKU
++          mat2x2 = reshape((/ -sq2/2.0_rck * (1.0_rk, 0.0_rk),       -sq2/2.0_rck * (1.0_rk, 0.0_rk),  &
++                              0.5_rk * (1.0_rk, -1.0_rk),  0.5_rk * (-1.0_rk, 1.0_rk)  /), &
++                                (/2, 2/), order=(/2,1/))
++! intel 2018 does not reshape correctly (one would have to specify order=(/1,2/)
++! until this is resolved, I resorted to the following
++          mat2x2(1,2) = -sq2/2.0_rck * (1.0_rk, 0.0_rk)
++          mat2x2(2,1) = 0.5_rk * (1.0_rk, -1.0_rk)
++#endif
++#endif
++        else if(what == ANALYTIC_EIGENVALUES) then
++#ifndef FUGAKU
++          mat2x2 = reshape((/ 1.0_rck, 0.0_rck,  &
++                           0.0_rck, amp  /), &
++                                 (/2, 2/), order=(/2,1/))
++#endif
++        else
++          assert(.false.)
++        end if
++
++        mat = 0.0_rck
++        if(prime == 2) then
++#ifndef BUILD_FUGAKU
++          mat(1:2, 1:2) = mat2x2
++#endif
++        else if(prime == 3) then
++#ifndef BUILD_FUGAKU
++          mat((/1,3/),(/1,3/)) = mat2x2
++#endif
++          if(what == ANALYTIC_EIGENVECTORS) then
++            mat(2,2) = 1.0_rck
++          else
++            mat(2,2) = am
++          end if
++        else if(prime == 5) then
++#ifndef BUILD_FUGAKU
++          mat((/1,5/),(/1,5/)) = mat2x2
++#endif
++          if(what == ANALYTIC_EIGENVECTORS) then
++            mat(2,2) = 1.0_rck
++            mat(3,3) = 1.0_rck
++            mat(4,4) = 1.0_rck
++          else
++            mat(2,2) = am
++            mat(3,3) = am**2
++            mat(4,4) = am**3
++          end if
++        else
++          assert(.false.)
++        end if
++
++  !      write(*,*) "calc value, elem: ", element, ", mat: ", mod(ii,2), mod(jj,2),  mat(mod(ii,2), mod(jj,2)), "am ", am
++  !      write(*,*) " matrix mat", mat
++        element = element * mat(mod(ii,prime) + 1, mod(jj,prime) + 1)
++        ii = ii / prime
++        jj = jj / prime
++
++        am = am**prime
++      end do
++    end do
++    !write(*,*) "returning value ", element
++  end function
++
++
++  subroutine print_matrix_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(myid, na, mat, mat_name)
++    use precision_for_tests
++
++    implicit none
++#include "./test_precision_kinds.F90"
++    TEST_INT_TYPE, intent(in)    :: myid, na
++    character(len=*), intent(in) :: mat_name
++    MATH_DATATYPE(kind=rck)      :: mat(na, na)
++    TEST_INT_TYPE                :: i,j
++    character(len=20)            :: na_str
++
++    if(myid .ne. 0) &
++      return
++    write(*,*) "Matrix: "//trim(mat_name)
++    write(na_str, *) na
++    do i = 1, na
++#ifdef REALCASE
++      write(*, '('//trim(na_str)//'f8.3)') mat(i, :)
++#endif
++#ifdef COMPLEXCASE
++      write(*,'('//trim(na_str)//'(A,f8.3,A,f8.3,A))') ('(', real(mat(i,j)), ',', aimag(mat(i,j)), ')', j=1,na)
++#endif
++    end do
++    write(*,*)
++  end subroutine
++
++
++  subroutine check_matrices_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(myid, na)
++    use precision_for_tests
++
++    implicit none
++#include "./test_precision_kinds.F90"
++    TEST_INT_TYPE, intent(in) :: myid, na
++    MATH_DATATYPE(kind=rck)   :: A(na, na), S(na, na), L(na, na), res(na, na)
++    TEST_INT_TYPE             :: i, j, decomposition(num_primes)
++
++    real(kind=rk)             :: err
++#ifdef DOUBLE_PRECISION
++    real(kind=rk), parameter  :: TOL =  1e-8
++#endif
++#ifdef SINGLE_PRECISION
++    real(kind=rk), parameter  :: TOL =  1e-4
++#endif
++
++    assert(decompose(na, decomposition))
++
++    do i = 1, na
++      do j = 1, na
++        A(i,j) = analytic_matrix_&
++              &MATH_DATATYPE&
++              &_&
++              &PRECISION&
++              &(na, i, j)
++        S(i,j) = analytic_eigenvectors_&
++              &MATH_DATATYPE&
++              &_&
++              &PRECISION&
++              &(na, i, j)
++        L(i,j) = analytic_&
++              &MATH_DATATYPE&
++              &_&
++              &PRECISION&
++              &(na, i, j, ANALYTIC_EIGENVALUES)
++      end do
++    end do
++
++    res = matmul(A,S) - matmul(S,L)
++    err = maxval(abs(res))
++    
++    if(err > TOL) then
++      print *, "WARNING: sanity test in module analytic failed, error is ", err
++    end if
++
++    if(.false.) then
++    !if(na == 2 .or. na == 5) then
++      call print_matrix(myid, na, A, "A")
++      call print_matrix(myid, na, S, "S")
++      call print_matrix(myid, na, L, "L")
++
++      call print_matrix(myid, na, matmul(A,S), "AS")
++      call print_matrix(myid, na, matmul(S,L), "SL")
++
++      call print_matrix(myid, na, res , "res")
++    end if
++
++  end subroutine
++
++  subroutine check_module_sanity_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    &(myid)
++    use precision_for_tests
++
++    implicit none
++    TEST_INT_TYPE, intent(in)   :: myid
++    TEST_INT_TYPE               :: decomposition(num_primes), i
++#ifndef BUILD_FUGAKU
++    TEST_INT_TYPE, parameter    :: check_sizes(7) = (/2, 3, 5, 6, 10, 25, 150/)
++#else
++    TEST_INT_TYPE    :: check_sizes(7)
++#endif
++    if(myid == 0) print *, "Checking test_analytic module sanity.... "
++#ifndef BUILD_FUGAKU
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++    assert(decompose(1500_lik, decomposition))
++#else
++    assert(decompose(1500_ik, decomposition))
++#endif
++    assert(all(decomposition == (/2,1,3/)))
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++    assert(decompose(6_lik,decomposition))
++#else
++    assert(decompose(6_ik,decomposition))
++#endif
++    assert(all(decomposition == (/1,1,0/)))
++
++#ifdef BUILD_FUGAKU
++    check_sizes(1) = 2
++    check_sizes(2) = 3
++    check_sizes(3) = 5
++    check_sizes(4) = 10
++    check_sizes(5) = 25
++    check_sizes(6) = 150
++#endif
++    do i =1, size(check_sizes)
++      call check_matrices_&
++          &MATH_DATATYPE&
++          &_&
++          &PRECISION&
++          &(myid, check_sizes(i))
++    end do
++
++    if(myid == 0) print *, "Checking test_analytic module sanity.... DONE"
++#endif
++  end subroutine
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_blacs_infrastructure.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_blacs_infrastructure.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_blacs_infrastructure.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_blacs_infrastructure.F90	2022-01-26 10:10:58.368066000 +0100
+@@ -0,0 +1,208 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#define TEST_C_INT_TYPE_PTR long int*
++#define TEST_C_INT_TYPE long int
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#define TEST_C_INT_TYPE_PTR int*
++#define TEST_C_INT_TYPE int
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#define TEST_C_INT_MPI_TYPE_PTR long int*
++#define TEST_C_INT_MPI_TYPE long int
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#define TEST_C_INT_MPI_TYPE_PTR int*
++#define TEST_C_INT_MPI_TYPE int
++#endif
++
++module test_blacs_infrastructure
++
++  contains
++
++    !c> void set_up_blacsgrid_f(TEST_C_INT_TYPE mpi_comm_parent, TEST_C_INT_TYPE np_rows, 
++    !c>                         TEST_C_INT_TYPE np_cols, char layout,
++    !c>                         TEST_C_INT_TYPE_PTR my_blacs_ctxt, TEST_C_INT_TYPE_PTR my_prow, 
++    !c>                         TEST_C_INT_TYPE_PTR my_pcol);
++    subroutine set_up_blacsgrid(mpi_comm_parent, np_rows, np_cols, layout, &
++                                my_blacs_ctxt, my_prow, my_pcol) bind(C, name="set_up_blacsgrid_f")
++
++      use precision_for_tests
++      use test_util
++      use iso_c_binding
++
++      implicit none
++      TEST_INT_TYPE, intent(in), value          :: mpi_comm_parent, np_rows, np_cols
++#ifdef SXAURORA
++      character(len=1), intent(in)              :: layout
++#else
++      character(kind=c_char), intent(in), value :: layout
++#endif
++      TEST_INT_TYPE, intent(out)                :: my_blacs_ctxt, my_prow, my_pcol
++
++#ifdef WITH_MPI
++      TEST_INT_TYPE :: np_rows_, np_cols_
++#endif
++
++      if (layout /= 'R' .and. layout /= 'C') then
++        print *, "layout must be 'R' or 'C'"
++        stop 1
++      end if
++
++      my_blacs_ctxt = mpi_comm_parent
++#ifdef WITH_MPI
++      call BLACS_Gridinit(my_blacs_ctxt, layout, np_rows, np_cols)
++      call BLACS_Gridinfo(my_blacs_ctxt, np_rows_, np_cols_, my_prow, my_pcol)
++      if (np_rows /= np_rows_) then
++        print *, "BLACS_Gridinfo returned different values for np_rows as set by BLACS_Gridinit"
++        stop 1
++      endif
++      if (np_cols /= np_cols_) then
++        print *, "BLACS_Gridinfo returned different values for np_cols as set by BLACS_Gridinit"
++        stop 1
++      endif
++#else
++      my_prow = 0
++      my_pcol = 0
++#endif
++    end subroutine
++
++    subroutine set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, &
++                                       np_rows, np_cols, na_rows,  &
++                                       na_cols, sc_desc, my_blacs_ctxt, info)
++
++      use elpa_utilities, only : error_unit
++      use test_util
++      use precision_for_tests
++      use tests_scalapack_interfaces
++      implicit none
++
++      TEST_INT_TYPE, intent(in)    :: na, nblk, my_prow, my_pcol, np_rows,   &
++                                       np_cols, &
++                                       my_blacs_ctxt
++      TEST_INT_TYPE, intent(inout) :: info
++      TEST_INT_TYPE, intent(out)   :: na_rows, na_cols, sc_desc(1:9)
++
++#ifdef WITH_MPI
++      TEST_INT_MPI_TYPE            :: mpierr
++
++      sc_desc(:) = 0
++      ! determine the neccessary size of the distributed matrices,
++      ! we use the scalapack tools routine NUMROC
++
++      na_rows = numroc(na, nblk, my_prow, 0_BLAS_KIND, np_rows)
++      na_cols = numroc(na, nblk, my_pcol, 0_BLAS_KIND, np_cols)
++
++      ! set up the scalapack descriptor for the checks below
++      ! For ELPA the following restrictions hold:
++      ! - block sizes in both directions must be identical (args 4 a. 5)
++      ! - first row and column of the distributed matrix must be on
++      !   row/col 0/0 (arg 6 and 7)
++
++      call descinit(sc_desc, na, na, nblk, nblk, 0_BLAS_KIND, 0_BLAS_KIND, &
++                    my_blacs_ctxt, na_rows, info)
++
++      if (info .ne. 0) then
++        write(error_unit,*) 'Error in BLACS descinit! info=',info
++        write(error_unit,*) 'Most likely this happend since you want to use'
++        write(error_unit,*) 'more MPI tasks than are possible for your'
++        write(error_unit,*) 'problem size (matrix size and blocksize)!'
++        write(error_unit,*) 'The blacsgrid can not be set up properly'
++        write(error_unit,*) 'Try reducing the number of MPI tasks...'
++        call MPI_ABORT(int(mpi_comm_world,kind=MPI_KIND), 1_MPI_KIND, mpierr)
++      endif
++#else /* WITH_MPI */
++      na_rows = na
++      na_cols = na
++#endif /* WITH_MPI */
++
++    end subroutine
++
++    !c> void set_up_blacs_descriptor_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nblk, 
++    !c>                                TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol,
++    !c>                                TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols,
++    !c>                                TEST_C_INT_TYPE_PTR na_rows, TEST_C_INT_TYPE_PTR na_cols,
++    !c>                                TEST_C_INT_TYPE sc_desc[9],
++    !c>                                TEST_C_INT_TYPE my_blacs_ctxt,
++    !c>                                TEST_C_INT_TYPE_PTR info);
++    subroutine set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, &
++                                         np_rows, np_cols, na_rows,  &
++                                         na_cols, sc_desc,           &
++                                         my_blacs_ctxt, info)        &
++                                         bind(C, name="set_up_blacs_descriptor_f")
++
++      use iso_c_binding
++      implicit none
++
++
++      TEST_INT_TYPE, value :: na, nblk, my_prow, my_pcol, np_rows, &
++                                    np_cols, my_blacs_ctxt
++      TEST_INT_TYPE        :: na_rows, na_cols, info, sc_desc(1:9)
++
++      call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, &
++                                   np_rows, np_cols, na_rows,  &
++                                   na_cols, sc_desc, my_blacs_ctxt, info)
++
++
++    end subroutine
++
++    
++   function index_l2g(idx_loc, nblk, iproc, nprocs) result(indexl2g)
++     use precision_for_tests
++     implicit none
++     TEST_INT_TYPE :: indexl2g
++     TEST_INT_TYPE :: idx_loc, nblk, iproc, nprocs
++     indexl2g = nprocs * nblk * ((idx_loc-1) / nblk) + mod(idx_loc-1,nblk) + mod(nprocs+iproc, nprocs)*nblk + 1
++     return
++   end function
++
++end module
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_check_correctness.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_check_correctness.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_check_correctness.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_check_correctness.F90	2022-01-26 10:10:58.369246000 +0100
+@@ -0,0 +1,156 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++! Author: A. Marek, MPCDF
++#include "config-f90.h"
++
++module test_check_correctness
++  use test_util
++
++  interface check_correctness_evp_numeric_residuals
++    module procedure check_correctness_evp_numeric_residuals_complex_double
++    module procedure check_correctness_evp_numeric_residuals_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure check_correctness_evp_numeric_residuals_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure check_correctness_evp_numeric_residuals_complex_single
++#endif
++  end interface
++  
++  interface check_correctness_evp_numeric_residuals_ss
++!     module procedure check_correctness_evp_numeric_residuals_ss_complex_double
++    module procedure check_correctness_evp_numeric_residuals_ss_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure check_correctness_evp_numeric_residuals_ss_real_single
++#endif
++! #ifdef WANT_SINGLE_PRECISION_COMPLEX
++!     module procedure check_correctness_evp_numeric_residuals_ss_complex_single
++! #endif
++  end interface
++
++  interface check_correctness_eigenvalues_toeplitz
++    module procedure check_correctness_eigenvalues_toeplitz_complex_double
++    module procedure check_correctness_eigenvalues_toeplitz_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure check_correctness_eigenvalues_toeplitz_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure check_correctness_eigenvalues_toeplitz_complex_single
++#endif
++  end interface
++
++  interface check_correctness_eigenvalues_frank
++    module procedure check_correctness_eigenvalues_frank_complex_double
++    module procedure check_correctness_eigenvalues_frank_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure check_correctness_eigenvalues_frank_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure check_correctness_eigenvalues_frank_complex_single
++#endif
++  end interface
++
++  interface check_correctness_cholesky
++    module procedure check_correctness_cholesky_complex_double
++    module procedure check_correctness_cholesky_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure check_correctness_cholesky_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure check_correctness_cholesky_complex_single
++#endif
++  end interface
++
++  interface check_correctness_hermitian_multiply
++    module procedure check_correctness_hermitian_multiply_complex_double
++    module procedure check_correctness_hermitian_multiply_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure check_correctness_hermitian_multiply_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure check_correctness_hermitian_multiply_complex_single
++#endif
++  end interface
++
++
++  contains
++
++#define COMPLEXCASE 1
++#define DOUBLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_check_correctness_template.F90"
++#undef DOUBLE_PRECISION
++#undef COMPLEXCASE
++
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++
++#define COMPLEXCASE 1
++#define SINGLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_check_correctness_template.F90"
++#undef SINGLE_PRECISION
++#undef COMPLEXCASE
++#endif /* WANT_SINGLE_PRECISION_COMPLEX */
++
++#define REALCASE 1
++#define DOUBLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_check_correctness_template.F90"
++#undef DOUBLE_PRECISION
++#undef REALCASE
++
++#ifdef WANT_SINGLE_PRECISION_REAL
++
++#define REALCASE 1
++#define SINGLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_check_correctness_template.F90"
++#undef SINGLE_PRECISION
++#undef REALCASE
++
++
++#endif /* WANT_SINGLE_PRECISION_REAL */
++
++#include "../../src/general/prow_pcol.F90"
++#include "../../src/general/map_global_to_local.F90"
++
++end module
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_check_correctness_template.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_check_correctness_template.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_check_correctness_template.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_check_correctness_template.F90	2022-01-26 10:10:58.370443000 +0100
+@@ -0,0 +1,1134 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++! Author: A. Marek, MPCDF
++
++
++#include "config-f90.h"
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE lik
++#define TEST_C_INT_TYPE_PTR long int*
++#define TEST_C_INT_TYPE long int
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE ik
++#define TEST_C_INT_TYPE_PTR int*
++#define TEST_C_INT_TYPE int
++#endif
++
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE lik
++#define TEST_C_INT_MPI_TYPE_PTR long int*
++#define TEST_C_INT_MPI_TYPE long int
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE ik
++#define TEST_C_INT_MPI_TYPE_PTR int*
++#define TEST_C_INT_MPI_TYPE int
++#endif
++
++#if REALCASE == 1
++    function check_correctness_evp_numeric_residuals_ss_real_&
++    &PRECISION&
++    & (na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) result(status)
++      use tests_blas_interfaces
++      use tests_scalapack_interfaces
++      use precision_for_tests
++      use iso_c_binding
++      implicit none
++#include "../../src/general/precision_kinds.F90"
++      integer(kind=BLAS_KIND)             :: status, na_cols, na_rows
++      integer(kind=BLAS_KIND), intent(in) :: na, nev, nblk, myid, np_rows, np_cols, my_prow, my_pcol
++      real(kind=rk), intent(in)           :: as(:,:)
++      real(kind=rk)                       :: tmpr
++      complex(kind=rck), intent(in)       :: z(:,:)
++      real(kind=rk)                       :: ev(:)
++      complex(kind=rck), dimension(size(as,dim=1),size(as,dim=2)) :: tmp1, tmp2
++      complex(kind=rck)                   :: xc
++      
++      complex(kind=rck), allocatable      :: as_complex(:,:)
++
++      integer(kind=BLAS_KIND)             :: sc_desc(:)
++
++      integer(kind=BLAS_KIND)             :: i, j, rowLocal, colLocal
++      integer(kind=c_int)                 :: row_Local, col_Local
++      real(kind=rck)                      :: err, errmax
++
++      integer :: mpierr
++
++      ! tolerance for the residual test for different math type/precision setups
++      real(kind=rk), parameter       :: tol_res_real_double      = 5e-4_rk
++      real(kind=rk), parameter       :: tol_res_real_single      = 3e-2_rk
++      real(kind=rk), parameter       :: tol_res_complex_double   = 5e-12_rk
++      real(kind=rk), parameter       :: tol_res_complex_single   = 3e-2_rk
++      real(kind=rk)                  :: tol_res                  = tol_res_&
++                                                                          &MATH_DATATYPE&
++                                                                          &_&
++                                                                          &PRECISION
++      ! precision of generalized problem is lower
++      real(kind=rk), parameter       :: generalized_penalty = 10.0_rk
++
++      ! tolerance for the orthogonality test for different math type/precision setups
++!       real(kind=rk), parameter       :: tol_orth_real_double     = 5e-11_rk
++      real(kind=rk), parameter       :: tol_orth_real_double     = 5e-4_rk
++      real(kind=rk), parameter       :: tol_orth_real_single     = 9e-2_rk
++      real(kind=rk), parameter       :: tol_orth_complex_double  = 5e-11_rk
++      real(kind=rk), parameter       :: tol_orth_complex_single  = 9e-3_rk
++      real(kind=rk), parameter       :: tol_orth                 = tol_orth_&
++                                                                          &MATH_DATATYPE&
++                                                                          &_&
++                                                                          &PRECISION
++                                                  
++      complex(kind=rck), parameter   :: CZERO = (0.0_rck,0.0_rck), CONE = (1.0_rck,0.0_rck)
++
++
++      status = 0
++      ! Setup complex matrices and eigenvalues
++      na_rows = size(as,dim=1)
++      na_cols = size(as,dim=2)
++      
++      allocate(as_complex(na_rows,na_cols))
++      do j=1, na_cols
++        do i=1,na_rows
++#ifdef DOUBLE_PRECISION_REAL
++          as_complex(i,j) = dcmplx(as(i,j),0.0_rk)
++#else
++          as_complex(i,j) = cmplx(as(i,j),0.0_rk)
++#endif
++       enddo
++      enddo
++      
++      ! 1. Residual (maximum of || A*Zi - Zi*EVi ||)
++
++      ! tmp1 = Zi*EVi
++      tmp1(:,:) = z(:,:)
++      do i=1,nev
++#ifdef DOUBLE_PRECISION_REAL
++        xc = dcmplx(0.0_rk,ev(i))
++#else
++        xc = cmplx(0.0_rk,ev(i))
++#endif
++#ifdef WITH_MPI
++#ifdef DOUBLE_PRECISION_REAL
++        call pzscal(int(na,kind=BLAS_KIND), xc, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, 1_BLAS_KIND)
++#else
++        call pcscal(int(na,kind=BLAS_KIND), xc, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, 1_BLAS_KIND)
++#endif
++#else /* WITH_MPI */
++#ifdef DOUBLE_PRECISION_REAL
++        call zscal(int(na,kind=BLAS_KIND), xc, tmp1(:,i), 1_BLAS_KIND)
++#else
++        call cscal(int(na,kind=BLAS_KIND), xc, tmp1(:,i), 1_BLAS_KIND)
++#endif
++#endif /* WITH_MPI */
++      enddo
++
++      ! normal eigenvalue problem .. no need to multiply
++        tmp2(:,:) = tmp1(:,:)
++
++      ! tmp1 =  A * Z
++      ! as is original stored matrix, Z are the EVs
++#ifdef WITH_MPI
++#ifdef DOUBLE_PRECISION_REAL
++      call PZGEMM('N', 'N', int(na,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), &
++                  CONE, as_complex, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                  z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, CZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else
++      call PCGEMM('N', 'N', int(na,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), &
++                  CONE, as_complex, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                  z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, CZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#endif
++#else /* WITH_MPI */
++#ifdef DOUBLE_PRECISION_REAL
++      call ZGEMM('N','N',int(na,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), CONE, &
++                 as_complex, int(na,kind=BLAS_KIND), z,int(na,kind=BLAS_KIND), CZERO, tmp1, int(na,kind=BLAS_KIND) )
++#else
++      call CGEMM('N','N', int(na,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), CONE, &
++                  as_complex, int(na,kind=BLAS_KIND), z, int(na,kind=BLAS_KIND), CZERO, tmp1, int(na,kind=BLAS_KIND) )
++#endif
++#endif /* WITH_MPI */
++
++      !  tmp1 = A*Zi - Zi*EVi
++      tmp1(:,:) =  tmp1(:,:) - tmp2(:,:)
++      
++      ! Get maximum norm of columns of tmp1
++      errmax = 0.0_rk
++
++      do i=1,nev
++        xc = (0.0_rk,0.0_rk)
++#ifdef WITH_MPI
++#ifdef DOUBLE_PRECISION_REAL
++        call PZDOTC(int(na,kind=BLAS_KIND), xc, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, &
++                    1_BLAS_KIND, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, 1_BLAS_KIND)
++#else
++        call PCDOTC(int(na,kind=BLAS_KIND), xc, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, &
++                    1_BLAS_KIND, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, 1_BLAS_KIND)
++#endif
++#else /* WITH_MPI */
++#ifdef DOUBLE_PRECISION_REAL
++        xc = ZDOTC(int(na,kind=BLAS_KIND) ,tmp1, 1_BLAS_KIND, tmp1, 1_BLAS_KIND)
++#else
++        xc = CDOTC(int(na,kind=BLAS_KIND) ,tmp1, 1_BLAS_KIND, tmp1, 1_BLAS_KIND)
++#endif
++#endif /* WITH_MPI */
++        errmax = max(errmax, sqrt(real(xc,kind=REAL_DATATYPE)))
++      enddo
++
++      ! Get maximum error norm over all processors
++      err = errmax
++#ifdef WITH_MPI
++      call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr)
++#else /* WITH_MPI */
++      errmax = err
++#endif /* WITH_MPI */
++      if (myid==0) print *,'%Results of numerical residual checks, using complex arithmetic:'
++      if (myid==0) print *,'%Error Residual     :',errmax
++      if (nev .ge. 2) then
++        if (errmax .gt. tol_res .or. errmax .eq. 0.0_rk) then
++          status = 1
++        endif
++      else
++        if (errmax .gt. tol_res) then
++          status = 1
++        endif
++      endif
++
++      ! 2. Eigenvector orthogonality
++        tmp2(:,:) = z(:,:)
++      tmp1 = 0
++#ifdef WITH_MPI
++#ifdef DOUBLE_PRECISION_REAL
++      call PZGEMM('C', 'N', int(nev,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), &
++                  CONE, z, 1_BLAS_KIND, 1_BLAS_KIND, &
++                  sc_desc, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, CZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else
++      call PCGEMM('C', 'N', int(nev,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), &
++                  CONE, z, 1_BLAS_KIND, 1_BLAS_KIND, &
++                  sc_desc, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, CZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#endif
++
++#else /* WITH_MPI */
++#ifdef DOUBLE_PRECISION_REAL
++      call ZGEMM('C','N', int(nev,kind=BLAS_KIND) , int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND),CONE, z, &
++                 int(na,kind=BLAS_KIND), tmp2, int(na,kind=BLAS_KIND), CZERO, tmp1, int(na,kind=BLAS_KIND))
++#else
++      call CGEMM('C','N', int(nev,kind=BLAS_KIND) , int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND),CONE, z, &
++                 int(na,kind=BLAS_KIND), tmp2, int(na,kind=BLAS_KIND), CZERO, tmp1, int(na,kind=BLAS_KIND))
++#endif
++#endif /* WITH_MPI */
++      ! First check, whether the elements on diagonal are 1 .. "normality" of the vectors
++      err = 0.0_rk
++      do i=1, nev
++        if (map_global_array_index_to_local_index(int(i,kind=c_int), int(i,kind=c_int), row_Local, col_Local, &
++                                                  int(nblk,kind=c_int), int(np_rows,kind=c_int), int(np_cols,kind=c_int), &
++                                                  int(my_prow,kind=c_int), int(my_pcol,kind=c_int)) ) then
++           rowLocal = int(row_Local,kind=INT_TYPE)
++           colLocal = int(col_Local,kind=INT_TYPE)
++           err = max(err, abs(tmp1(rowLocal,colLocal) - CONE))
++         endif
++      end do
++#ifdef WITH_MPI
++      call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr)
++#else /* WITH_MPI */
++      errmax = err
++#endif /* WITH_MPI */
++      if (myid==0) print *,'%Maximal error in eigenvector lengths:',errmax
++
++      ! Second, find the maximal error in the whole Z**T * Z matrix (its diference from identity matrix)
++      ! Initialize tmp2 to unit matrix
++      tmp2 = 0
++#ifdef WITH_MPI
++#ifdef DOUBLE_PRECISION_REAL
++      call PZLASET('A', int(nev,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), CZERO, CONE, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else
++      call PCLASET('A', int(nev,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), CZERO, CONE, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#endif
++#else /* WITH_MPI */
++#ifdef DOUBLE_PRECISION_REAL
++      call ZLASET('A',int(nev,kind=BLAS_KIND) ,int(nev,kind=BLAS_KIND) ,CZERO, CONE, tmp2, int(na,kind=BLAS_KIND))
++#else
++      call CLASET('A',int(nev,kind=BLAS_KIND) ,int(nev,kind=BLAS_KIND) ,CZERO, CONE, tmp2, int(na,kind=BLAS_KIND))
++#endif
++#endif /* WITH_MPI */
++
++      !      ! tmp1 = Z**T * Z - Unit Matrix
++      tmp1(:,:) =  tmp1(:,:) - tmp2(:,:)
++
++      ! Get maximum error (max abs value in tmp1)
++      err = maxval(abs(tmp1))
++#ifdef WITH_MPI
++      call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr)
++#else /* WITH_MPI */
++      errmax = err
++#endif /* WITH_MPI */
++      if (myid==0) print *,'%Error Orthogonality:',errmax
++
++      if (nev .ge. 2) then
++        if (errmax .gt. tol_orth .or. errmax .eq. 0.0_rk) then
++          status = 1
++        endif
++      else
++        if (errmax .gt. tol_orth) then
++          status = 1
++        endif
++      endif
++      
++      deallocate(as_complex)
++    end function
++
++#endif /* REALCASE */
++
++#if REALCASE == 1
++#ifdef DOUBLE_PRECISION_REAL
++    !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_ss_real_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols,
++    !c>                                         double *as, complex double *z, double *ev,  TEST_C_INT_TYPE sc_desc[9],
++    !c>                                         TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol);
++#else
++    !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_ss_real_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols,
++    !c>                                         float *as, complex float *z, float *ev, TEST_C_INT_TYPE sc_desc[9],
++    !c>                                         TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol);
++#endif
++#endif /* REALCASE */
++
++#if REALCASE == 1
++function check_correctness_evp_numeric_residuals_ss_real_&
++&PRECISION&
++&_f (na, nev, na_rows, na_cols, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) result(status) &
++      bind(C,name="check_correctness_evp_numeric_residuals_ss_&
++      &MATH_DATATYPE&
++      &_&
++      &PRECISION&
++      &_f")
++
++      use precision_for_tests
++      use iso_c_binding
++
++      implicit none
++#include "./test_precision_kinds.F90"
++
++      TEST_INT_TYPE            :: status
++      TEST_INT_TYPE, value     :: na, nev, myid, na_rows, na_cols, nblk, np_rows, np_cols, my_prow, my_pcol
++      real(kind=rck)            :: as(1:na_rows,1:na_cols)
++      complex(kind=rck)         :: z(1:na_rows,1:na_cols)
++      real(kind=rck)            :: ev(1:na)
++      TEST_INT_TYPE            :: sc_desc(1:9)
++
++      status = check_correctness_evp_numeric_residuals_ss_real_&
++      &PRECISION&
++      & (na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol)
++    end function
++#endif /* REALCASE */
++
++function check_correctness_evp_numeric_residuals_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    & (na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol, bs) result(status)
++ 
++      use tests_blas_interfaces
++      use tests_scalapack_interfaces
++      use precision_for_tests
++      implicit none
++#include "./test_precision_kinds.F90"
++      TEST_INT_TYPE                                 :: status
++      TEST_INT_TYPE, intent(in)                     :: na, nev, nblk, myid, np_rows, np_cols, my_prow, my_pcol
++      MATH_DATATYPE(kind=rck), intent(in)           :: as(:,:), z(:,:)
++      MATH_DATATYPE(kind=rck), intent(in), optional :: bs(:,:)
++      real(kind=rk)                                 :: ev(:)
++      MATH_DATATYPE(kind=rck), dimension(size(as,dim=1),size(as,dim=2)) :: tmp1, tmp2
++      MATH_DATATYPE(kind=rck)                       :: xc
++
++      TEST_INT_TYPE                 :: sc_desc(:)
++
++      TEST_INT_TYPE                 :: i, rowLocal, colLocal
++      integer(kind=c_int)           :: row_Local, col_Local
++      real(kind=rck)                :: err, errmax
++
++      TEST_INT_MPI_TYPE             :: mpierr
++
++! tolerance for the residual test for different math type/precision setups
++      real(kind=rk), parameter       :: tol_res_real_double      = 5e-12_rk
++      real(kind=rk), parameter       :: tol_res_real_single      = 3e-2_rk
++      real(kind=rk), parameter       :: tol_res_complex_double   = 5e-12_rk
++      real(kind=rk), parameter       :: tol_res_complex_single   = 3e-2_rk
++      real(kind=rk)                  :: tol_res                  = tol_res_&
++                                                                          &MATH_DATATYPE&
++                                                                          &_&
++                                                                          &PRECISION
++      ! precision of generalized problem is lower
++      real(kind=rk), parameter       :: generalized_penalty = 10.0_rk
++
++      ! tolerance for the orthogonality test for different math type/precision setups
++      real(kind=rk), parameter       :: tol_orth_real_double     = 5e-11_rk
++      real(kind=rk), parameter       :: tol_orth_real_single     = 9e-2_rk
++      real(kind=rk), parameter       :: tol_orth_complex_double  = 5e-11_rk
++      real(kind=rk), parameter       :: tol_orth_complex_single  = 9e-3_rk
++      real(kind=rk), parameter       :: tol_orth                 = tol_orth_&
++                                                                          &MATH_DATATYPE&
++                                                                          &_&
++                                                                          &PRECISION
++
++      if (present(bs)) then
++        tol_res = generalized_penalty * tol_res
++      endif
++      status = 0
++
++      ! 1. Residual (maximum of || A*Zi - Zi*EVi ||)
++     
++!       tmp1 = Zi*EVi
++      tmp1(:,:) = z(:,:)
++      do i=1,nev
++        xc = ev(i)
++#ifdef WITH_MPI
++        call p&
++            &BLAS_CHAR&
++            &scal(na, xc, tmp1, 1_BLAS_KIND, i, sc_desc, 1_BLAS_KIND)
++#else /* WITH_MPI */
++        call BLAS_CHAR&
++            &scal(na, xc, tmp1(:,i), 1_BLAS_KIND)
++#endif /* WITH_MPI */
++      enddo
++
++      ! for generalized EV problem, multiply by bs as well
++      ! tmp2 = B * tmp1
++      if(present(bs)) then
++#ifdef WITH_MPI
++      call scal_PRECISION_GEMM('N', 'N', na, nev, na, ONE, bs, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                               tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else /* WITH_MPI */
++      call PRECISION_GEMM('N','N',na,nev,na,ONE,bs,na,tmp1,na,ZERO,tmp2,na)
++#endif /* WITH_MPI */
++      else
++        ! normal eigenvalue problem .. no need to multiply
++        tmp2(:,:) = tmp1(:,:)
++      end if
++
++      ! tmp1 =  A * Z
++      ! as is original stored matrix, Z are the EVs
++#ifdef WITH_MPI
++      call scal_PRECISION_GEMM('N', 'N', na, nev, na, ONE, as, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                  z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else /* WITH_MPI */
++      call PRECISION_GEMM('N','N',na,nev,na,ONE,as,na,z,na,ZERO,tmp1,na)
++#endif /* WITH_MPI */
++
++      !  tmp1 = A*Zi - Zi*EVi
++      tmp1(:,:) =  tmp1(:,:) - tmp2(:,:)
++
++      ! Get maximum norm of columns of tmp1
++      errmax = 0.0_rk
++
++      do i=1,nev
++#if REALCASE == 1
++        err = 0.0_rk
++#ifdef WITH_MPI
++        call scal_PRECISION_NRM2(na, err, tmp1, 1_BLAS_KIND, i, sc_desc, 1_BLAS_KIND)
++#else /* WITH_MPI */
++        err = PRECISION_NRM2(na,tmp1(1,i),1_BLAS_KIND)
++#endif /* WITH_MPI */
++        errmax = max(errmax, err)
++#endif /* REALCASE */
++
++#if COMPLEXCASE == 1
++        xc = 0
++#ifdef WITH_MPI
++        call scal_PRECISION_DOTC(na, xc, tmp1, 1_BLAS_KIND, i, sc_desc, &
++                                 1_BLAS_KIND, tmp1, 1_BLAS_KIND, i, sc_desc, 1_BLAS_KIND)
++#else /* WITH_MPI */
++        xc = PRECISION_DOTC(na,tmp1,1_BLAS_KIND,tmp1,1_BLAS_KIND)
++#endif /* WITH_MPI */
++        errmax = max(errmax, sqrt(real(xc,kind=REAL_DATATYPE)))
++#endif /* COMPLEXCASE */
++      enddo
++
++      ! Get maximum error norm over all processors
++      err = errmax
++#ifdef WITH_MPI
++      call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, MPI_COMM_WORLD, mpierr)
++#else /* WITH_MPI */
++      errmax = err
++#endif /* WITH_MPI */
++      if (myid==0) print *,'Results of numerical residual checks:'
++      if (myid==0) print *,'Error Residual     :',errmax
++      if (nev .ge. 2) then
++        if (errmax .gt. tol_res .or. errmax .eq. 0.0_rk) then
++          status = 1
++        endif
++      else
++        if (errmax .gt. tol_res) then
++          status = 1
++        endif
++      endif
++
++      ! 2. Eigenvector orthogonality
++      if(present(bs)) then
++        !for the generalized EVP, the eigenvectors should be B-orthogonal, not orthogonal
++        ! tmp2 = B * Z
++        tmp2(:,:) = 0.0_rck
++#ifdef WITH_MPI
++        call scal_PRECISION_GEMM('N', 'N', na, nev, na, ONE, bs, 1_BLAS_KIND, 1_BLAS_KIND, &
++                        sc_desc, z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else /* WITH_MPI */
++        call PRECISION_GEMM('N','N', na, nev, na, ONE, bs, na, z, na, ZERO, tmp2, na)
++#endif /* WITH_MPI */
++
++      else
++        tmp2(:,:) = z(:,:)
++      endif
++      ! tmp1 = Z**T * tmp2
++      ! actually tmp1 = Z**T * Z for standard case and tmp1 = Z**T * B * Z for generalized
++      tmp1 = 0
++#ifdef WITH_MPI
++      call scal_PRECISION_GEMM(BLAS_TRANS_OR_CONJ, 'N', nev, nev, na, ONE, z, 1_BLAS_KIND, 1_BLAS_KIND, &
++                        sc_desc, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, &
++                        tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else /* WITH_MPI */
++      call PRECISION_GEMM(BLAS_TRANS_OR_CONJ,'N',nev,nev,na,ONE,z,na,tmp2,na,ZERO,tmp1,na)
++#endif /* WITH_MPI */
++      ! First check, whether the elements on diagonal are 1 .. "normality" of the vectors
++      err = 0.0_rk
++      do i=1, nev
++        if (map_global_array_index_to_local_index(int(i,kind=c_int), int(i,kind=c_int) , row_Local, col_Local, &
++                                                  int(nblk,kind=c_int), int(np_rows,kind=c_int), &
++                                                  int(np_cols,kind=c_int), int(my_prow,kind=c_int), &
++                                                  int(my_pcol,kind=c_int) )) then
++           rowLocal = int(row_Local,kind=INT_TYPE)
++           colLocal = int(col_Local,kind=INT_TYPE)
++           err = max(err, abs(tmp1(rowLocal,colLocal) - 1.0_rk))
++         endif
++      end do
++#ifdef WITH_MPI
++      call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, MPI_COMM_WORLD, mpierr)
++#else /* WITH_MPI */
++      errmax = err
++#endif /* WITH_MPI */
++      if (myid==0) print *,'Maximal error in eigenvector lengths:',errmax
++
++      ! Second, find the maximal error in the whole Z**T * Z matrix (its diference from identity matrix)
++      ! Initialize tmp2 to unit matrix
++      tmp2 = 0
++#ifdef WITH_MPI
++      call scal_PRECISION_LASET('A', nev, nev, ZERO, ONE, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else /* WITH_MPI */
++      call PRECISION_LASET('A',nev,nev,ZERO,ONE,tmp2,na)
++#endif /* WITH_MPI */
++
++      !      ! tmp1 = Z**T * Z - Unit Matrix
++      tmp1(:,:) =  tmp1(:,:) - tmp2(:,:)
++
++      ! Get maximum error (max abs value in tmp1)
++      err = maxval(abs(tmp1))
++#ifdef WITH_MPI
++      call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, MPI_COMM_WORLD, mpierr)
++#else /* WITH_MPI */
++      errmax = err
++#endif /* WITH_MPI */
++      if (myid==0) print *,'Error Orthogonality:',errmax
++
++      if (nev .ge. 2) then
++        if (errmax .gt. tol_orth .or. errmax .eq. 0.0_rk) then
++          status = 1
++        endif
++      else
++        if (errmax .gt. tol_orth) then
++          status = 1
++        endif
++      endif
++    end function
++
++#if REALCASE == 1
++#ifdef DOUBLE_PRECISION_REAL
++    !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_real_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev,
++    !c>                                                                       TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols,
++    !c>                                                                       double *as, double *z, double *ev, 
++    !c>                                                                       TEST_C_INT_TYPE sc_desc[9],
++    !c>                                                                       TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, 
++    !c>                                                                       TEST_C_INT_TYPE np_rows, 
++    !c>                                                                       TEST_C_INT_TYPE np_cols, 
++    !c>                                                                       TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol);
++#else
++    !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_real_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, 
++    !c>                                                                       TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols,
++    !c>                                                                       float *as, float *z, float *ev, 
++    !c>                                                                       TEST_C_INT_TYPE sc_desc[9],
++    !c>                                                                       TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, 
++    !c>                                                                       TEST_C_INT_TYPE np_rows, 
++    !c>                                                                       TEST_C_INT_TYPE np_cols, 
++    !c>                                                                       TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol);
++#endif
++#endif /* REALCASE */
++
++#if COMPLEXCASE == 1
++#ifdef DOUBLE_PRECISION_COMPLEX
++    !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_complex_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, 
++    !c>                                                              TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols,
++    !c>                                                              complex double *as, complex double *z, double *ev, 
++    !c>                                                              TEST_C_INT_TYPE sc_desc[9],
++    !c>                                                              TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, 
++    !c>                                                              TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, 
++    !c>                                                              TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol);
++#else
++    !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_complex_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, 
++    !c>                                                                  TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols,
++    !c>                                                                  complex float *as, complex float *z, float *ev, 
++    !c>                                                                  TEST_C_INT_TYPE sc_desc[9],
++    !c>                                                                  TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, 
++    !c>                                                                  TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, 
++    !c>                                                                  TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol);
++#endif
++#endif /* COMPLEXCASE */
++
++function check_correctness_evp_numeric_residuals_&
++&MATH_DATATYPE&
++&_&
++&PRECISION&
++&_f (na, nev, na_rows, na_cols, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) result(status) &
++      bind(C,name="check_correctness_evp_numeric_residuals_&
++      &MATH_DATATYPE&
++      &_&
++      &PRECISION&
++      &_f")
++
++      use precision_for_tests
++      use iso_c_binding
++
++      implicit none
++#include "./test_precision_kinds.F90"
++
++      TEST_INT_TYPE            :: status
++      TEST_INT_TYPE, value     :: na, nev, myid, na_rows, na_cols, nblk, np_rows, np_cols, my_prow, my_pcol
++      MATH_DATATYPE(kind=rck)  :: as(1:na_rows,1:na_cols), z(1:na_rows,1:na_cols)
++      real(kind=rck)           :: ev(1:na)
++      TEST_INT_TYPE            :: sc_desc(1:9)
++
++      status = check_correctness_evp_numeric_residuals_&
++      &MATH_DATATYPE&
++      &_&
++      &PRECISION&
++      & (na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol)
++
++    end function
++
++!---- variant for the generalized eigenproblem
++!---- unlike in Fortran, we cannot use optional parameter
++!---- we thus define a different function
++#if REALCASE == 1
++#ifdef DOUBLE_PRECISION_REAL
++    !c> TEST_C_INT_TYPE check_correctness_evp_gen_numeric_residuals_real_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, 
++    !c>                                                               TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols,
++    !c>                                                               double *as, double *z, double *ev,
++    !c>                                                               TEST_C_INT_TYPE sc_desc[9],
++    !c>                                                               TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, 
++    !c>                                                               TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, 
++    !c>                                                               TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol,
++    !c>                                                               double *bs);
++#else
++    !c> TEST_C_INT_TYPE check_correctness_evp_gen_numeric_residuals_real_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, 
++    !c>                                                                           TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols,
++    !c>                                                                           float *as, float *z, float *ev, 
++    !c>                                                                           TEST_C_INT_TYPE sc_desc[9],
++    !c>                                                                           TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid,
++    !c>                                                                           TEST_C_INT_TYPE np_rows, 
++    !c>                                                                           TEST_C_INT_TYPE np_cols, 
++    !c>                                                                           TEST_C_INT_TYPE my_prow, 
++    !c>                                                                           TEST_C_INT_TYPE my_pcol, 
++    !c>                                                                           float *bs);
++#endif
++#endif /* REALCASE */
++
++#if COMPLEXCASE == 1
++#ifdef DOUBLE_PRECISION_COMPLEX
++    !c> TEST_C_INT_TYPE check_correctness_evp_gen_numeric_residuals_complex_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev,
++    !c>                                                                    TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols,
++    !c>                                                                    complex double *as, complex double *z, double *ev,
++    !c>                                                                    TEST_C_INT_TYPE sc_desc[9],
++    !c>                                                                    TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, 
++    !c>                                                                    TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols,
++    !c>                                                                    TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol,
++    !c>                                                                    complex double *bs);
++#else
++    !c> TEST_C_INT_TYPE check_correctness_evp_gen_numeric_residuals_complex_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev,
++    !c>                                                                    TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols,
++    !c>                                                                    complex float *as, complex float *z, float *ev, 
++    !c>                                                                    TEST_C_INT_TYPE sc_desc[9],
++    !c>                                                                    TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, 
++    !c>                                                                    TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, 
++    !c>                                                                    TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol,
++    !c>                                                                    complex float *bs);
++#endif
++#endif /* COMPLEXCASE */
++
++function check_correctness_evp_gen_numeric_residuals_&
++&MATH_DATATYPE&
++&_&
++&PRECISION&
++&_f (na, nev, na_rows, na_cols, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol, bs) result(status) &
++      bind(C,name="check_correctness_evp_gen_numeric_residuals_&
++      &MATH_DATATYPE&
++      &_&
++      &PRECISION&
++      &_f")
++
++      use iso_c_binding
++      use precision_for_tests
++      implicit none
++#include "./test_precision_kinds.F90"
++
++      TEST_INT_TYPE            :: status
++      TEST_INT_TYPE, value     :: na, nev, myid, na_rows, na_cols, nblk, np_rows, np_cols, my_prow, my_pcol
++      MATH_DATATYPE(kind=rck)  :: as(1:na_rows,1:na_cols), z(1:na_rows,1:na_cols), bs(1:na_rows,1:na_cols)
++      real(kind=rck)           :: ev(1:na)
++      TEST_INT_TYPE            :: sc_desc(1:9)
++
++      status = check_correctness_evp_numeric_residuals_&
++      &MATH_DATATYPE&
++      &_&
++      &PRECISION&
++      & (na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol, bs)
++
++    end function
++
++    !-----------------------------------------------------------------------------------------------------------
++
++    function check_correctness_eigenvalues_toeplitz_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    & (na, diagonalElement, subdiagonalElement, ev, z, myid) result(status)
++      use iso_c_binding
++      use precision_for_tests
++      implicit none
++#include "./test_precision_kinds.F90"
++
++      TEST_INT_TYPE               :: status, ii, j, myid
++      TEST_INT_TYPE, intent(in)   :: na
++      real(kind=rck) :: diagonalElement, subdiagonalElement
++      real(kind=rck) :: ev_analytic(na), ev(na)
++      MATH_DATATYPE(kind=rck) :: z(:,:)
++
++#if defined(DOUBLE_PRECISION_REAL) || defined(DOUBLE_PRECISION_COMPLEX)
++      real(kind=rck), parameter   :: pi = 3.141592653589793238462643383279_c_double
++#else
++      real(kind=rck), parameter   :: pi = 3.1415926535897932_c_float
++#endif
++      real(kind=rck)              :: tmp, maxerr
++      TEST_INT_TYPE               :: loctmp
++      status = 0
++
++     ! analytic solution
++     do ii=1, na
++       ev_analytic(ii) = diagonalElement + 2.0_rk * &
++                         subdiagonalElement *cos( pi*real(ii,kind=rk)/ &
++                         real(na+1,kind=rk) )
++     enddo
++
++     ! sort analytic solution:
++
++     ! this hack is neither elegant, nor optimized: for huge matrixes it might be expensive
++     ! a proper sorting algorithmus might be implemented here
++
++     tmp    = minval(ev_analytic)
++     loctmp = minloc(ev_analytic, 1)
++
++     ev_analytic(loctmp) = ev_analytic(1)
++     ev_analytic(1) = tmp
++     do ii=2, na
++       tmp = ev_analytic(ii)
++       do j= ii, na
++         if (ev_analytic(j) .lt. tmp) then
++           tmp    = ev_analytic(j)
++           loctmp = j
++         endif
++       enddo
++       ev_analytic(loctmp) = ev_analytic(ii)
++       ev_analytic(ii) = tmp
++     enddo
++
++     ! compute a simple error max of eigenvalues
++     maxerr = 0.0
++     maxerr = maxval( (ev(:) - ev_analytic(:))/ev_analytic(:) , 1)
++
++#if defined(DOUBLE_PRECISION_REAL) || defined(DOUBLE_PRECISION_COMPLEX)
++     if (abs(maxerr) .gt. 8.e-13_c_double) then
++#else
++     if (abs(maxerr) .gt. 8.e-4_c_float) then
++#endif
++       status = 1
++       if (myid .eq. 0) then
++         print *,"Result of Toeplitz matrix test: "
++         print *,"Eigenvalues differ from analytic solution: maxerr = ",abs(maxerr)
++       endif
++     endif
++
++    if (status .eq. 0) then
++       if (myid .eq. 0) then
++         print *,"Result of Toeplitz matrix test: test passed"
++         print *,"Eigenvalues differ from analytic solution: maxerr = ",abs(maxerr)
++       endif
++    endif
++    end function
++
++    function check_correctness_cholesky_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    & (na, a, as, na_rows, sc_desc, myid) result(status)
++      use precision_for_tests
++      use tests_blas_interfaces
++      use tests_scalapack_interfaces
++      implicit none
++#include "./test_precision_kinds.F90"
++      TEST_INT_TYPE                                                     :: status
++      TEST_INT_TYPE, intent(in)                                         :: na, myid, na_rows
++
++      MATH_DATATYPE(kind=rck), intent(in)                               :: a(:,:), as(:,:)
++      MATH_DATATYPE(kind=rck), dimension(size(as,dim=1),size(as,dim=2)) :: tmp1, tmp2
++#if COMPLEXCASE == 1
++      ! needed for [z,c]lange from scalapack
++      real(kind=rk), dimension(2*size(as,dim=1),size(as,dim=2))         :: tmp1_real
++#endif
++      real(kind=rk)                                                     :: norm, normmax
++
++      TEST_INT_TYPE                                                     :: sc_desc(:)
++      real(kind=rck)                                                    :: err, errmax
++      TEST_INT_MPI_TYPE                                                 :: mpierr
++
++      status = 0
++      tmp1(:,:) = 0.0_rck
++
++
++#if REALCASE == 1
++      ! tmp1 = a**T
++#ifdef WITH_MPI
++      call p&
++          &BLAS_CHAR&
++          &tran(na, na, 1.0_rck, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                0.0_rck, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else /* WITH_MPI */
++      tmp1 = transpose(a)
++#endif /* WITH_MPI */
++#endif /* REALCASE == 1 */
++
++#if COMPLEXCASE == 1
++      ! tmp1 = a**H
++#ifdef WITH_MPI
++      call p&
++            &BLAS_CHAR&
++            &tranc(na, na, ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                   ZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else /* WITH_MPI */
++      tmp1 = transpose(conjg(a))
++#endif /* WITH_MPI */
++#endif /* COMPLEXCASE == 1 */
++
++      ! tmp2 = a**T * a
++#ifdef WITH_MPI
++      call p&
++            &BLAS_CHAR&
++            &gemm("N","N", na, na, na, ONE, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                  a, 1_BLAS_KIND, 1_BLAS_KIND, &
++                  sc_desc, ZERO, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else /* WITH_MPI */
++      call BLAS_CHAR&
++                    &gemm("N","N", na, na, na, ONE, tmp1, na, a, na, ZERO, tmp2, na)
++#endif /* WITH_MPI */
++
++      ! compare tmp2 with original matrix
++      tmp2(:,:) = tmp2(:,:) - as(:,:)
++
++#ifdef WITH_MPI
++      norm = p&
++              &BLAS_CHAR&
++              &lange("M",na, na, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++#if COMPLEXCASE == 1
++              tmp1_real)
++#else
++              tmp1)
++#endif
++#else /* WITH_MPI */
++      norm = BLAS_CHAR&
++             &lange("M", na, na, tmp2, na_rows, &
++#if COMPLEXCASE == 1
++             tmp1_real)
++#else
++             tmp1)
++#endif
++#endif /* WITH_MPI */
++
++
++#ifdef WITH_MPI
++      call mpi_allreduce(norm, normmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, MPI_COMM_WORLD, mpierr)
++#else /* WITH_MPI */
++      normmax = norm
++#endif /* WITH_MPI */
++
++      if (myid .eq. 0) then
++        print *," Maximum error of result: ", normmax
++      endif
++
++#if REALCASE == 1
++#ifdef DOUBLE_PRECISION_REAL
++!      if (normmax .gt. 5e-12_rk8 .or. normmax .eq. 0.0_rk8) then
++      if (normmax .gt. 5e-12_rk8) then
++        status = 1
++      endif
++#else
++!      if (normmax .gt. 5e-4_rk4 .or. normmax .eq. 0.0_rk4) then
++      if (normmax .gt. 5e-4_rk4 ) then
++        status = 1
++      endif
++#endif
++#endif
++
++#if COMPLEXCASE == 1
++#ifdef DOUBLE_PRECISION_COMPLEX
++!      if (normmax .gt. 5e-11_rk8 .or. normmax .eq. 0.0_rk8) then
++      if (normmax .gt. 5e-11_rk8 ) then
++        status = 1
++      endif
++#else
++!      if (normmax .gt. 5e-3_rk4 .or. normmax .eq. 0.0_rk4) then
++      if (normmax .gt. 5e-3_rk4) then
++        status = 1
++      endif
++#endif
++#endif
++    end function
++
++    function check_correctness_hermitian_multiply_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    & (na, a, b, c, na_rows, sc_desc, myid) result(status)
++      use precision_for_tests
++      use tests_blas_interfaces
++      use tests_scalapack_interfaces
++      implicit none
++#include "./test_precision_kinds.F90"
++      TEST_INT_TYPE                                                   :: status
++      TEST_INT_TYPE, intent(in)                                       :: na, myid, na_rows
++      MATH_DATATYPE(kind=rck), intent(in)                             :: a(:,:), b(:,:), c(:,:)
++      MATH_DATATYPE(kind=rck), dimension(size(a,dim=1),size(a,dim=2)) :: tmp1, tmp2
++#if COMPLEXCASE == 1
++      real(kind=rk), dimension(2*size(a,dim=1),size(a,dim=2))         :: tmp1_real
++#endif
++      real(kind=rck)                                                  :: norm, normmax
++
++
++      TEST_INT_TYPE                                                   :: sc_desc(:)
++      real(kind=rck)                                                  :: err, errmax
++      TEST_INT_MPI_TYPE                                               :: mpierr
++
++      status = 0
++      tmp1(:,:) = ZERO
++
++#if REALCASE == 1
++      ! tmp1 = a**T
++#ifdef WITH_MPI
++      call p&
++            &BLAS_CHAR&
++            &tran(na, na, ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else /* WITH_MPI */
++      tmp1 = transpose(a)
++#endif /* WITH_MPI */
++
++#endif /* REALCASE == 1 */
++
++#if COMPLEXCASE == 1
++      ! tmp1 = a**H
++#ifdef WITH_MPI
++      call p&
++            &BLAS_CHAR&
++            &tranc(na, na, ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else /* WITH_MPI */
++      tmp1 = transpose(conjg(a))
++#endif /* WITH_MPI */
++#endif /* COMPLEXCASE == 1 */
++
++   ! tmp2 = tmp1 * b
++#ifdef WITH_MPI
++   call p&
++         &BLAS_CHAR&
++         &gemm("N","N", na, na, na, ONE, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, b, 1_BLAS_KIND, 1_BLAS_KIND, &
++               sc_desc, ZERO, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc)
++#else
++   call BLAS_CHAR&
++        &gemm("N","N", na, na, na, ONE, tmp1, na, b, na, ZERO, tmp2, na)
++#endif
++
++      ! compare tmp2 with c
++      tmp2(:,:) = tmp2(:,:) - c(:,:)
++
++#ifdef WITH_MPI
++      ! dirty hack: the last argument should be a real array, but is not referenced
++      ! if mode = "M", thus we get away with a complex argument
++      norm = p&
++              &BLAS_CHAR&
++              &lange("M", na, na, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++#if COMPLEXCASE == 1              
++              tmp1_real)
++#else
++              tmp1)
++#endif
++#else /* WITH_MPI */
++      ! dirty hack: the last argument should be a real array, but is not referenced
++      ! if mode = "M", thus we get away with a complex argument
++      norm = BLAS_CHAR&
++             &lange("M", na, na, tmp2, na_rows, &
++#if COMPLEXCASE == 1              
++              tmp1_real)
++#else
++              tmp1)
++#endif
++#endif /* WITH_MPI */
++
++#ifdef WITH_MPI
++      call mpi_allreduce(norm, normmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, MPI_COMM_WORLD, mpierr)
++#else /* WITH_MPI */
++      normmax = norm
++#endif /* WITH_MPI */
++
++      if (myid .eq. 0) then
++        print *," Maximum error of result: ", normmax
++      endif
++
++#ifdef DOUBLE_PRECISION_REAL
++      if (normmax .gt. 5e-11_rk8 ) then
++        status = 1
++      endif
++#else
++      if (normmax .gt. 5e-3_rk4 ) then
++        status = 1
++      endif
++#endif
++
++#ifdef DOUBLE_PRECISION_COMPLEX
++      if (normmax .gt. 5e-11_rk8 ) then
++        status = 1
++      endif
++#else
++      if (normmax .gt. 5e-3_rk4 ) then
++        status = 1
++      endif
++#endif
++    end function
++
++    function check_correctness_eigenvalues_frank_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    & (na, ev, z, myid) result(status)
++      use iso_c_binding
++      use precision_for_tests
++      implicit none
++#include "./test_precision_kinds.F90"
++
++      TEST_INT_TYPE                   :: status, i, j, myid
++      TEST_INT_TYPE, intent(in)       :: na
++      real(kind=rck)            :: ev_analytic(na), ev(na)
++      MATH_DATATYPE(kind=rck)   :: z(:,:)
++
++#if defined(DOUBLE_PRECISION_REAL) || defined(DOUBLE_PRECISION_COMPLEX)
++      real(kind=rck), parameter :: pi = 3.141592653589793238462643383279_c_double
++#else
++      real(kind=rck), parameter :: pi = 3.1415926535897932_c_float
++#endif
++      real(kind=rck)            :: tmp, maxerr
++      TEST_INT_TYPE                  :: loctmp
++      status = 0
++
++     ! analytic solution
++     do i = 1, na
++       j = na - i
++#if defined(DOUBLE_PRECISION_REAL) || defined(DOUBLE_PRECISION_COMPLEX)
++       ev_analytic(i) = pi * (2.0_c_double * real(j,kind=c_double) + 1.0_c_double) / &
++           (2.0_c_double * real(na,kind=c_double) + 1.0_c_double)
++       ev_analytic(i) = 0.5_c_double / (1.0_c_double - cos(ev_analytic(i)))
++#else
++       ev_analytic(i) = pi * (2.0_c_float * real(j,kind=c_float) + 1.0_c_float) / &
++           (2.0_c_float * real(na,kind=c_float) + 1.0_c_float)
++       ev_analytic(i) = 0.5_c_float / (1.0_c_float - cos(ev_analytic(i)))
++#endif
++     enddo
++
++     ! sort analytic solution:
++
++     ! this hack is neither elegant, nor optimized: for huge matrixes it might be expensive
++     ! a proper sorting algorithmus might be implemented here
++
++     tmp    = minval(ev_analytic)
++     loctmp = minloc(ev_analytic, 1)
++
++     ev_analytic(loctmp) = ev_analytic(1)
++     ev_analytic(1) = tmp
++     do i=2, na
++       tmp = ev_analytic(i)
++       do j= i, na
++         if (ev_analytic(j) .lt. tmp) then
++           tmp    = ev_analytic(j)
++           loctmp = j
++         endif
++       enddo
++       ev_analytic(loctmp) = ev_analytic(i)
++       ev_analytic(i) = tmp
++     enddo
++
++     ! compute a simple error max of eigenvalues
++     maxerr = 0.0
++     maxerr = maxval( (ev(:) - ev_analytic(:))/ev_analytic(:) , 1)
++
++#if defined(DOUBLE_PRECISION_REAL) || defined(DOUBLE_PRECISION_COMPLEX)
++     if (maxerr .gt. 8.e-13_c_double) then
++#else
++     if (maxerr .gt. 8.e-4_c_float) then
++#endif
++       status = 1
++       if (myid .eq. 0) then
++         print *,"Result of Frank matrix test: "
++         print *,"Eigenvalues differ from analytic solution: maxerr = ",maxerr
++       endif
++     endif
++    end function
++
++! vim: syntax=fortran
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_output_type.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_output_type.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_output_type.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_output_type.F90	2022-01-26 10:10:58.372166000 +0100
+@@ -0,0 +1,11 @@
++#include "config-f90.h"
++
++module test_output_type
++
++ type :: output_t
++   logical :: eigenvectors
++   logical :: eigenvalues
++ end type
++
++
++end module
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_precision_kinds.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_precision_kinds.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_precision_kinds.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_precision_kinds.F90	2022-01-26 10:10:58.373135000 +0100
+@@ -0,0 +1,25 @@
++#ifdef REALCASE
++#ifdef DOUBLE_PRECISION
++  integer, parameter :: rk = C_DOUBLE
++  integer, parameter :: rck = C_DOUBLE
++#endif
++#ifdef SINGLE_PRECISION
++  integer, parameter :: rk = C_FLOAT
++  integer, parameter :: rck = C_FLOAT
++#endif
++  real(kind=rck), parameter      :: ZERO=0.0_rk, ONE = 1.0_rk
++#endif
++
++#ifdef COMPLEXCASE
++#ifdef DOUBLE_PRECISION
++  integer, parameter :: rk = C_DOUBLE
++  integer, parameter :: ck = C_DOUBLE_COMPLEX
++  integer, parameter :: rck = C_DOUBLE_COMPLEX
++#endif
++#ifdef SINGLE_PRECISION
++  integer, parameter :: rk = C_FLOAT
++  integer, parameter :: ck = C_FLOAT_COMPLEX
++  integer, parameter :: rck = C_FLOAT_COMPLEX
++#endif
++  complex(kind=rck), parameter     :: ZERO = (0.0_rk,0.0_rk), ONE = (1.0_rk,0.0_rk)
++#endif
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_prepare_matrix.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_prepare_matrix.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_prepare_matrix.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_prepare_matrix.F90	2022-01-26 10:10:58.374062000 +0100
+@@ -0,0 +1,145 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++! Author: A. Marek, MPCDF
++#include "config-f90.h"
++
++module test_prepare_matrix
++
++  use precision_for_tests
++  interface prepare_matrix_random
++    module procedure prepare_matrix_random_complex_double
++    module procedure prepare_matrix_random_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure prepare_matrix_random_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure prepare_matrix_random_complex_single
++#endif
++   end interface
++
++
++  interface prepare_matrix_random_spd
++    module procedure prepare_matrix_random_spd_complex_double
++    module procedure prepare_matrix_random_spd_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure prepare_matrix_random_spd_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure prepare_matrix_random_spd_complex_single
++#endif
++   end interface
++
++
++  interface prepare_matrix_toeplitz
++    module procedure prepare_matrix_toeplitz_complex_double
++    module procedure prepare_matrix_toeplitz_real_double
++    module procedure prepare_matrix_toeplitz_mixed_complex_complex_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure prepare_matrix_toeplitz_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure prepare_matrix_toeplitz_complex_single
++    module procedure prepare_matrix_toeplitz_mixed_complex_complex_single
++#endif
++   end interface
++
++  interface prepare_matrix_frank
++    module procedure prepare_matrix_frank_complex_double
++    module procedure prepare_matrix_frank_real_double
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure prepare_matrix_frank_real_single
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure prepare_matrix_frank_complex_single
++#endif
++   end interface
++
++
++
++   private prows, pcols, map_global_array_index_to_local_index
++
++  contains
++
++#include "../../src/general/prow_pcol.F90"
++#include "../../src/general/map_global_to_local.F90"
++
++#define COMPLEXCASE 1
++#define DOUBLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_prepare_matrix_template.F90"
++#undef DOUBLE_PRECISION
++#undef COMPLEXCASE
++
++
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++
++
++#define COMPLEXCASE 1
++#define SINGLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_prepare_matrix_template.F90"
++#undef SINGLE_PRECISION
++#undef COMPLEXCASE
++#endif /* WANT_SINGLE_PRECISION_COMPLEX */
++
++
++#define REALCASE 1
++#define DOUBLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_prepare_matrix_template.F90"
++#undef DOUBLE_PRECISION
++#undef REALCASE
++
++#ifdef WANT_SINGLE_PRECISION_REAL
++
++
++#define REALCASE 1
++#define SINGLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_prepare_matrix_template.F90"
++#undef SINGLE_PRECISION
++#undef REALCASE
++
++#endif /* WANT_SINGLE_PRECISION_REAL */
++
++
++end module
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_prepare_matrix_template.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_prepare_matrix_template.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_prepare_matrix_template.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_prepare_matrix_template.F90	2022-01-26 10:10:58.375330000 +0100
+@@ -0,0 +1,510 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++! Author: A. Marek, MPCDF
++
++#include "config-f90.h"
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#define TEST_C_INT_TYPE_PTR long int*
++#define TEST_C_INT_TYPE long int
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#define TEST_C_INT_TYPE_PTR int*
++#define TEST_C_INT_TYPE int
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#define TEST_C_INT_MPI_TYPE_PTR long int*
++#define TEST_C_INT_MPI_TYPE long int
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#define TEST_C_INT_MPI_TYPE_PTR int*
++#define TEST_C_INT_MPI_TYPE int
++#endif
++
++
++    subroutine prepare_matrix_random_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    & (na, myid, sc_desc, a, z, as, is_skewsymmetric)
++
++
++      !use test_util
++      use tests_scalapack_interfaces
++
++      implicit none
++#include "./test_precision_kinds.F90"
++      TEST_INT_TYPE, intent(in)                 :: myid, na, sc_desc(:)
++      MATH_DATATYPE(kind=rck), intent(inout)    :: z(:,:), a(:,:), as(:,:)
++
++#if COMPLEXCASE == 1
++      real(kind=rk)                             :: xr(size(a,dim=1), size(a,dim=2))
++#endif /* COMPLEXCASE */
++
++      integer(kind=c_int), allocatable          :: iseed(:)
++      integer(kind=c_int)                       ::  n
++      integer(kind=c_int), intent(in), optional :: is_skewsymmetric
++      logical                                   :: skewsymmetric
++
++      if (present(is_skewsymmetric)) then
++        if (is_skewsymmetric .eq. 1) then
++          skewsymmetric = .true.
++        else
++          skewsymmetric = .false.
++        endif      
++      else
++        skewsymmetric = .false.
++      endif
++
++      ! for getting a hermitian test matrix A we get a random matrix Z
++      ! and calculate A = Z + Z**H
++      ! in case of a skewsymmetric matrix A = Z - Z**H
++
++      ! we want different random numbers on every process
++      ! (otherwise A might get rank deficient):
++
++      call random_seed(size=n)
++      allocate(iseed(n))
++      iseed(:) = myid
++      call random_seed(put=iseed)
++#if REALCASE == 1
++      call random_number(z)
++
++      a(:,:) = z(:,:)
++#endif /* REALCASE */
++
++#if COMPLEXCASE == 1
++      call random_number(xr)
++
++      z(:,:) = xr(:,:)
++      call RANDOM_NUMBER(xr)
++      z(:,:) = z(:,:) + (0.0_rk,1.0_rk)*xr(:,:)
++      a(:,:) = z(:,:)
++#endif /* COMPLEXCASE */
++
++      if (myid == 0) then
++        print '(a)','| Random matrix block has been set up. (only processor 0 confirms this step)'
++      endif
++
++#if REALCASE == 1
++#ifdef WITH_MPI
++      if (skewsymmetric) then
++        call p&
++             &BLAS_CHAR&
++             &tran(int(na,kind=BLAS_KIND), int(na,kind=BLAS_KIND), -ONE, z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                   ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ! A = A + Z**T
++      else
++        call p&
++             &BLAS_CHAR&
++             &tran(int(na,kind=BLAS_KIND), int(na,kind=BLAS_KIND), ONE, z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                   ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ! A = A + Z**T
++      endif
++#else /* WITH_MPI */
++      if (skewsymmetric) then
++        a = a - transpose(z)
++      else
++        a = a + transpose(z)
++      endif
++#endif /* WITH_MPI */
++#endif /* REALCASE */
++
++#if COMPLEXCASE == 1
++#ifdef WITH_MPI
++      if (skewsymmetric) then
++        call p&
++             &BLAS_CHAR&
++             &tranc(int(na,kind=BLAS_KIND), int(na,kind=BLAS_KIND), -ONE, z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                    ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ! A = A + Z**H
++      else
++        call p&
++             &BLAS_CHAR&
++             &tranc(int(na,kind=BLAS_KIND), int(na,kind=BLAS_KIND), ONE, z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, &
++                    ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ! A = A + Z**H
++      endif
++#else /* WITH_MPI */
++      if (skewsymmetric) then
++        a = a - transpose(conjg(z))
++      else
++        a = a + transpose(conjg(z))
++      endif
++#endif /* WITH_MPI */
++#endif /* COMPLEXCASE */
++
++
++      if (myid == 0) then
++        print '(a)','| Random matrix block has been symmetrized'
++      endif
++
++      ! save original matrix A for later accuracy checks
++
++      as = a
++
++      deallocate(iseed)
++
++    end subroutine
++
++#if REALCASE == 1
++#ifdef DOUBLE_PRECISION_REAL
++    !c> void prepare_matrix_random_real_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, 
++    !c>                                          TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9],
++    !c>                                          double *a, double *z, double *as);
++#else
++    !c> void prepare_matrix_random_real_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, 
++    !c>                                          TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9],
++    !c>                                          float *a, float *z, float *as);
++#endif
++#endif /* REALCASE */
++
++#if COMPLEXCASE == 1
++#ifdef DOUBLE_PRECISION_COMPLEX
++    !c> void prepare_matrix_random_complex_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, 
++    !c>                                             TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9],
++    !c>                                             complex double *a, complex double *z, complex double *as);
++#else
++    !c> void prepare_matrix_random_complex_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, 
++    !c>                                             TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9],
++    !c>                                             complex float *a, complex float *z, complex float *as);
++#endif
++#endif /* COMPLEXCASE */
++
++subroutine prepare_matrix_random_&
++&MATH_DATATYPE&
++&_wrapper_&
++&PRECISION&
++& (na, myid, na_rows, na_cols, sc_desc, a, z, as) &
++   bind(C, name="prepare_matrix_random_&
++   &MATH_DATATYPE&
++   &_&
++   &PRECISION&
++   &_f")
++      use iso_c_binding
++
++      implicit none
++#include "./test_precision_kinds.F90"
++
++      TEST_INT_TYPE , value   :: myid, na, na_rows, na_cols
++      TEST_INT_TYPE           :: sc_desc(1:9)
++      MATH_DATATYPE(kind=rck) :: z(1:na_rows,1:na_cols), a(1:na_rows,1:na_cols),  &
++                                 as(1:na_rows,1:na_cols)
++      call prepare_matrix_random_&
++      &MATH_DATATYPE&
++      &_&
++      &PRECISION&
++      & (na, myid, sc_desc, a, z, as)
++    end subroutine
++
++!----------------------------------------------------------------------------------------------------------------
++
++    subroutine prepare_matrix_random_spd_&
++    &MATH_DATATYPE&
++    &_&
++    &PRECISION&
++    & (na, myid, sc_desc, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol)
++
++      !use test_util
++      use precision_for_tests
++      implicit none
++#include "./test_precision_kinds.F90"
++      TEST_INT_TYPE, intent(in)              :: myid, na, sc_desc(:)
++      MATH_DATATYPE(kind=rck), intent(inout) :: z(:,:), a(:,:), as(:,:)
++      TEST_INT_TYPE, intent(in)              ::  nblk, np_rows, np_cols, my_prow, my_pcol
++
++      TEST_INT_TYPE                          :: ii
++      integer(kind=c_int)                    :: rowLocal, colLocal
++
++
++      call prepare_matrix_random_&
++        &MATH_DATATYPE&
++        &_&
++        &PRECISION&
++        & (na, myid, sc_desc, a, z, as)
++
++      ! hermitian diagonaly dominant matrix => positive definite
++      do ii=1, na
++        if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii,kind=c_int), &
++                                                  rowLocal, colLocal, &
++                                                  int(nblk,kind=c_int), int(np_rows,kind=c_int),      &
++                                                  int(np_cols,kind=c_int), int(my_prow,kind=c_int),  &
++                                                  int(my_pcol,kind=c_int) )) then
++          a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = &
++                  real(a(int(rowLocal,kind=INT_TYPE), int(colLocal,kind=INT_TYPE))) + na + 1
++        end if
++      end do
++
++      as = a
++
++   end subroutine
++
++#if REALCASE == 1
++#ifdef DOUBLE_PRECISION_REAL
++    !c> void prepare_matrix_random_spd_real_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, 
++    !c>                                              TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9],
++    !c>                                              double *a, double *z, double *as,
++    !c>                                              TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, 
++    !c>                                              TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol);
++#else
++    !c> void prepare_matrix_random_spd_real_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, 
++    !c>                                              TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9],
++    !c>                                              float *a, float *z, float *as,
++    !c>                                              TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols,
++    !c>                                              TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol);
++#endif
++#endif /* REALCASE */
++
++#if COMPLEXCASE == 1
++#ifdef DOUBLE_PRECISION_COMPLEX
++    !c> void prepare_matrix_random_spd_complex_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, 
++    !c>                                                 TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9],
++    !c>                                                 complex double *a, complex double *z, complex double *as,
++    !c>                                                 TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE np_rows, 
++    !c>                                                 TEST_C_INT_TYPE np_cols, TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol);
++#else
++    !c> void prepare_matrix_random_spd_complex_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows,
++    !c>                                                 TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9],
++    !c>                                                 complex float *a, complex float *z, complex float *as,
++    !c>                                                 TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE np_rows, 
++    !c>                                                 TEST_C_INT_TYPE np_cols, TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol);
++#endif
++#endif /* COMPLEXCASE */
++
++subroutine prepare_matrix_random_spd_&
++&MATH_DATATYPE&
++&_wrapper_&
++&PRECISION&
++& (na, myid, na_rows, na_cols, sc_desc, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol) &
++   bind(C, name="prepare_matrix_random_spd_&
++   &MATH_DATATYPE&
++   &_&
++   &PRECISION&
++   &_f")
++      use iso_c_binding
++
++      implicit none
++#include "./test_precision_kinds.F90"
++
++      TEST_INT_TYPE , value   :: myid, na, na_rows, na_cols
++      TEST_INT_TYPE           :: sc_desc(1:9)
++      MATH_DATATYPE(kind=rck) :: z(1:na_rows,1:na_cols), a(1:na_rows,1:na_cols),  &
++                                 as(1:na_rows,1:na_cols)
++      TEST_INT_TYPE , value   :: nblk, np_rows, np_cols, my_prow, my_pcol
++      call prepare_matrix_random_spd_&
++      &MATH_DATATYPE&
++      &_&
++      &PRECISION&
++      & (na, myid, sc_desc, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol)
++    end subroutine
++
++
++!----------------------------------------------------------------------------------------------------------------
++
++   subroutine prepare_matrix_toeplitz_&
++   &MATH_DATATYPE&
++   &_&
++   &PRECISION&
++   & (na, diagonalElement, subdiagonalElement, d, sd, ds, sds, a, as, &
++      nblk, np_rows, np_cols, my_prow, my_pcol)
++     !use test_util
++     use precision_for_tests
++     implicit none
++#include "./test_precision_kinds.F90"
++
++     TEST_INT_TYPE, intent(in) :: na, nblk, np_rows, np_cols, my_prow, my_pcol
++     MATH_DATATYPE(kind=rck)   :: diagonalElement, subdiagonalElement
++     MATH_DATATYPE(kind=rck)   :: d(:), sd(:), ds(:), sds(:)
++     MATH_DATATYPE(kind=rck)   :: a(:,:), as(:,:)
++
++     TEST_INT_TYPE             :: ii
++     integer(kind=c_int)       :: rowLocal, colLocal
++
++     d(:) = diagonalElement
++     sd(:) = subdiagonalElement
++     a(:,:) = ZERO
++
++     ! set up the diagonal and subdiagonals (for general solver test)
++     do ii=1, na ! for diagonal elements
++       if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii,kind=c_int), rowLocal, &
++                                                 colLocal, int(nblk,kind=c_int), int(np_rows,kind=c_int), &
++                                                 int(np_cols,kind=c_int), int(my_prow,kind=c_int), &
++                                                 int(my_pcol,kind=c_int) ) ) then
++         a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = diagonalElement
++       endif
++     enddo
++     do ii=1, na-1
++       if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii+1,kind=c_int), rowLocal, &
++                                                 colLocal, int(nblk,kind=c_int), int(np_rows,kind=c_int), &
++                                                 int(np_cols,kind=c_int), int(my_prow,kind=c_int), &
++                                                 int(my_pcol,kind=c_int) ) ) then
++         a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = subdiagonalElement
++       endif
++     enddo
++
++     do ii=2, na
++       if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii-1,kind=c_int), rowLocal, &
++                                                 colLocal, int(nblk,kind=c_int), int(np_rows,kind=c_int), &
++                                                 int(np_cols,kind=c_int), int(my_prow,kind=c_int), &
++                                                 int(my_pcol,kind=c_int) ) ) then
++         a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = subdiagonalElement
++       endif
++     enddo
++
++     ds = d
++     sds = sd
++     as = a
++   end subroutine
++
++   subroutine prepare_matrix_toeplitz_mixed_complex&
++   &_&
++   &MATH_DATATYPE&
++   &_&
++   &PRECISION&
++#if COMPLEXCASE == 1
++   & (na, diagonalElement, subdiagonalElement, d, sd, ds, sds, a, as, &
++      nblk, np_rows, np_cols, my_prow, my_pcol)
++#endif
++#if REALCASE == 1
++   & (na, diagonalElement, subdiagonalElement, d, sd, ds, sds, &
++      nblk, np_rows, np_cols, my_prow, my_pcol)
++#endif
++     !use test_util
++     implicit none
++
++     TEST_INT_TYPE, intent(in)     :: na, nblk, np_rows, np_cols, my_prow, my_pcol
++     real(kind=C_DATATYPE_KIND)    :: diagonalElement, subdiagonalElement
++
++     real(kind=C_DATATYPE_KIND)    :: d(:), sd(:), ds(:), sds(:)
++
++#if COMPLEXCASE == 1
++     complex(kind=C_DATATYPE_KIND) :: a(:,:), as(:,:)
++#endif
++#if REALCASE == 1
++#endif
++
++     TEST_INT_TYPE                 :: ii
++     integer(kind=c_int)           :: rowLocal, colLocal
++#if COMPLEXCASE == 1
++     d(:) = diagonalElement
++     sd(:) = subdiagonalElement
++
++     ! set up the diagonal and subdiagonals (for general solver test)
++     do ii=1, na ! for diagonal elements
++       if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii,kind=c_int), rowLocal, &
++                                                 colLocal, int(nblk,kind=c_int),                   &
++                                                 int(np_rows,kind=c_int), int(np_cols,kind=c_int),                 &
++                                                 int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then
++         a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = diagonalElement
++       endif
++     enddo
++     do ii=1, na-1
++       if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii+1,kind=c_int), rowLocal, &
++                                                 colLocal, int(nblk,kind=c_int),                   &
++                                                 int(np_rows,kind=c_int), int(np_cols,kind=c_int),                 &
++                                                 int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then
++         a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = subdiagonalElement
++       endif
++     enddo
++
++     do ii=2, na
++       if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii-1,kind=c_int), rowLocal, &
++                                                 colLocal, int(nblk,kind=c_int),                   &
++                                                 int(np_rows,kind=c_int), int(np_cols,kind=c_int),                 &
++                                                 int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then
++         a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = subdiagonalElement
++       endif
++     enddo
++
++     ds = d
++     sds = sd
++     as = a
++#endif
++   end subroutine
++
++   subroutine prepare_matrix_frank_&
++   &MATH_DATATYPE&
++   &_&
++   &PRECISION&
++   & (na, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol)
++     !use test_util
++     use precision_for_tests
++     implicit none
++
++     TEST_INT_TYPE, intent(in)     :: na, nblk, np_rows, np_cols, my_prow, my_pcol
++
++#if REALCASE == 1
++     real(kind=C_DATATYPE_KIND)    :: a(:,:), z(:,:), as(:,:)
++#endif
++#if COMPLEXCASE == 1
++     complex(kind=C_DATATYPE_KIND) :: a(:,:), z(:,:), as(:,:)
++#endif
++
++     TEST_INT_TYPE                 :: i, j
++     integer(kind=c_int)           :: rowLocal, colLocal
++
++     do i = 1, na
++       do j = 1, na
++         if (map_global_array_index_to_local_index(int(i,kind=c_int), int(j,kind=c_int), rowLocal, &
++                                                 colLocal, int(nblk,kind=c_int),                   &
++                                                 int(np_rows,kind=c_int), int(np_cols,kind=c_int),                 &
++                                                 int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then
++           if (j .le. i) then
++             a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = &
++                     real((na+1-i), kind=C_DATATYPE_KIND) / real(na, kind=C_DATATYPE_KIND)
++           else
++             a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = &
++                     real((na+1-j), kind=C_DATATYPE_KIND) / real(na, kind=C_DATATYPE_KIND)
++           endif
++         endif
++       enddo
++     enddo
++
++     z(:,:)  = a(:,:)
++     as(:,:) = a(:,:)
++
++   end subroutine
++
++
++! vim: syntax=fortran
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_read_input_parameters.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_read_input_parameters.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_read_input_parameters.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_read_input_parameters.F90	2022-01-26 10:10:58.376155000 +0100
+@@ -0,0 +1,455 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++
++module test_read_input_parameters
++  use elpa, only : ELPA_2STAGE_COMPLEX_DEFAULT, ELPA_2STAGE_REAL_DEFAULT, elpa_int_string_to_value, &
++                   elpa_int_value_to_string, ELPA_OK
++  use elpa_utilities, only : error_unit
++  use iso_c_binding
++  use test_util, only : x_ao, x_a
++  use test_output_type
++
++  implicit none
++
++  type input_options_t
++    TEST_INT_TYPE        :: datatype
++    TEST_INT_TYPE        :: na, nev, nblk
++    type(output_t) :: write_to_file
++    TEST_INT_TYPE        :: this_real_kernel, this_complex_kernel
++    logical        :: realKernelIsSet, complexKernelIsSet
++    TEST_INT_TYPE        :: useQrIsSet, useGPUIsSet
++    logical        :: doSolveTridi, do1stage, do2stage, justHelpMessage, &
++                      doCholesky, doInvertTrm, doTransposeMultiply
++  end type
++
++  interface read_input_parameters
++    module procedure read_input_parameters_general
++    module procedure read_input_parameters_traditional
++    module procedure read_input_parameters_traditional_noskip
++  end interface
++
++  contains
++
++    subroutine parse_arguments(command_line_argument, input_options)
++      implicit none
++
++      type(input_options_t)  :: input_options
++      character(len=128)     :: command_line_argument
++      integer(kind=c_int)    :: elpa_error
++
++      if (command_line_argument == "--help") then
++        print *,"usage: elpa_tests [--help] [datatype={real|complex}] [na=number] [nev=number] "
++        print *,"                  [nblk=size of block cyclic distribution] [--output_eigenvalues]"
++        print *,"                  [--output_eigenvectors] [--real-kernel=name_of_kernel]"
++        print *,"                  [--complex-kernel=name_of_kernel] [--use-gpu={0|1}]"
++        print *,"                  [--use-qr={0,1}] [--tests={all|solve-tridi|1stage|2stage|cholesky&
++            &|invert-triangular|transpose-mulitply}]"
++        input_options%justHelpMessage=.true.
++        return
++      endif
++
++
++      if (command_line_argument(1:11) == "--datatype=") then
++        if (command_line_argument(12:15) == "real") then
++          input_options%datatype=1
++        else
++          if (command_line_argument(12:18) == "complex") then
++            input_options%datatype=2
++          else
++            print *,"datatype unknown! use either --datatype=real or --datatpye=complex"
++            stop 1
++          endif
++        endif
++      endif
++
++      if (command_line_argument(1:3) == "na=") then
++        read(command_line_argument(4:), *) input_options%na
++      endif
++      if (command_line_argument(1:4) == "nev=") then
++        read(command_line_argument(5:), *) input_options%nev
++      endif
++      if (command_line_argument(1:5) == "nblk=") then
++        read(command_line_argument(6:), *) input_options%nblk
++      endif
++
++      if (command_line_argument(1:21)   == "--output_eigenvectors") then
++        input_options%write_to_file%eigenvectors = .true.
++      endif
++
++      if (command_line_argument(1:20)   == "--output_eigenvalues") then
++        input_options%write_to_file%eigenvalues = .true.
++      endif
++
++      if (command_line_argument(1:14) == "--real-kernel=") then
++        input_options%this_real_kernel = int(elpa_int_string_to_value("real_kernel",     &
++                                             command_line_argument(15:), elpa_error), &
++                                             kind=INT_TYPE)
++        if (elpa_error /= ELPA_OK) then
++          print *, "Invalid argument for --real-kernel"
++          stop 1
++        endif
++        print *,"Setting ELPA2 real kernel to ", elpa_int_value_to_string("real_kernel", &
++                                                                        int(input_options%this_real_kernel,kind=c_int))
++        input_options%realKernelIsSet = .true.
++      endif
++
++      if (command_line_argument(1:17) == "--complex-kernel=") then
++        input_options%this_complex_kernel = int(elpa_int_string_to_value("complex_kernel",    &
++                                                command_line_argument(18:), elpa_error), kind=INT_TYPE)
++        if (elpa_error /= ELPA_OK) then
++          print *, "Invalid argument for --complex-kernel"
++          stop 1
++        endif
++        print *,"Setting ELPA2 complex kernel to ", elpa_int_value_to_string("complex_kernel", &
++                                                                          int(input_options%this_complex_kernel,kind=c_int))
++        input_options%complexKernelIsSet = .true.
++      endif
++
++      if (command_line_argument(1:9) == "--use-qr=") then
++        read(command_line_argument(10:), *) input_options%useQrIsSet
++      endif
++
++      if (command_line_argument(1:10) == "--use-gpu=") then
++        read(command_line_argument(11:), *) input_options%useGPUIsSet
++      endif
++
++      if (command_line_argument(1:8) == "--tests=") then
++        if (command_line_argument(9:11) == "all") then
++          input_options%doSolveTridi=.true.
++          input_options%do1stage=.true.
++          input_options%do2stage=.true.
++          input_options%doCholesky=.true.
++          input_options%doInvertTrm=.true.
++          input_options%doTransposeMultiply=.true.
++        else if (command_line_argument(9:19) == "solve-tride") then
++          input_options%doSolveTridi=.true.
++          input_options%do1stage=.false.
++          input_options%do2stage=.false.
++          input_options%doCholesky=.false.
++          input_options%doInvertTrm=.false.
++          input_options%doTransposeMultiply=.false.
++        else if (command_line_argument(9:14) == "1stage") then
++          input_options%doSolveTridi=.false.
++          input_options%do1stage=.true.
++          input_options%do2stage=.false.
++          input_options%doCholesky=.false.
++          input_options%doInvertTrm=.false.
++          input_options%doTransposeMultiply=.false.
++        else if (command_line_argument(9:14) == "2stage") then
++          input_options%doSolveTridi=.false.
++          input_options%do1stage=.false.
++          input_options%do2stage=.true.
++          input_options%doCholesky=.false.
++          input_options%doInvertTrm=.false.
++          input_options%doTransposeMultiply=.false.
++        else if (command_line_argument(9:16) == "cholesky") then
++          input_options%doSolveTridi=.false.
++          input_options%do1stage=.false.
++          input_options%do2stage=.false.
++          input_options%doCholesky=.true.
++          input_options%doInvertTrm=.false.
++          input_options%doTransposeMultiply=.false.
++        else if (command_line_argument(9:25) == "invert-triangular") then
++          input_options%doSolveTridi=.false.
++          input_options%do1stage=.false.
++          input_options%do2stage=.false.
++          input_options%doCholesky=.false.
++          input_options%doInvertTrm=.true.
++          input_options%doTransposeMultiply=.false.
++        else if (command_line_argument(9:26) == "transpose-multiply") then
++          input_options%doSolveTridi=.false.
++          input_options%do1stage=.false.
++          input_options%do2stage=.false.
++          input_options%doCholesky=.false.
++          input_options%doInvertTrm=.false.
++          input_options%doTransposeMultiply=.true.
++        else
++           print *,"unknown test specified"
++           stop 1
++        endif
++      endif
++
++    end subroutine
++
++    subroutine read_input_parameters_general(input_options)
++      use precision_for_tests
++      implicit none
++
++      type(input_options_t)         :: input_options
++
++      ! Command line arguments
++      character(len=128)            :: arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10
++
++      ! default parameters
++      input_options%datatype = 1
++      input_options%na = 500
++      input_options%nev = 150
++      input_options%nblk = 16
++
++      input_options%write_to_file%eigenvectors = .false.
++      input_options%write_to_file%eigenvalues  = .false.
++
++      input_options%this_real_kernel = ELPA_2STAGE_REAL_DEFAULT
++      input_options%this_complex_kernel = ELPA_2STAGE_COMPLEX_DEFAULT
++      input_options%realKernelIsSet = .false.
++      input_options%complexKernelIsSet = .false.
++
++      input_options%useQrIsSet = 0
++
++      input_options%useGPUIsSet = 0
++
++      input_options%do1Stage = .true.
++      input_options%do2Stage = .true.
++      input_options%doSolveTridi = .true.
++      input_options%doCholesky=.true.
++      input_options%doInvertTrm=.true.
++      input_options%doTransposeMultiply=.true.
++      input_options%justHelpMessage=.false.
++
++      ! test na=1500 nev=50 nblk=16 --help --kernel --output_eigenvectors --output_eigenvalues
++      if (COMMAND_ARGUMENT_COUNT() .gt. 8) then
++        write(error_unit, '(a,i0,a)') "Invalid number (", COMMAND_ARGUMENT_COUNT(), ") of command line arguments!"
++        stop 1
++      endif
++
++      if (COMMAND_ARGUMENT_COUNT() .gt. 0) then
++
++        call get_COMMAND_ARGUMENT(1, arg1)
++
++        call parse_arguments(arg1, input_options)
++
++
++
++        if (COMMAND_ARGUMENT_COUNT() .ge. 2) then
++          ! argument 2
++          call get_COMMAND_ARGUMENT(2, arg2)
++
++          call parse_arguments(arg2, input_options)
++        endif
++
++        ! argument 3
++        if (COMMAND_ARGUMENT_COUNT() .ge. 3) then
++
++          call get_COMMAND_ARGUMENT(3, arg3)
++
++          call parse_arguments(arg3, input_options)
++        endif
++
++        ! argument 4
++        if (COMMAND_ARGUMENT_COUNT() .ge. 4) then
++
++          call get_COMMAND_ARGUMENT(4, arg4)
++
++          call parse_arguments(arg4, input_options)
++
++        endif
++
++        ! argument 5
++        if (COMMAND_ARGUMENT_COUNT() .ge. 5) then
++
++          call get_COMMAND_ARGUMENT(5, arg5)
++
++          call parse_arguments(arg5, input_options)
++        endif
++
++        ! argument 6
++        if (COMMAND_ARGUMENT_COUNT() .ge. 6) then
++
++          call get_COMMAND_ARGUMENT(6, arg6)
++
++          call parse_arguments(arg6, input_options)
++        endif
++
++        ! argument 7
++        if (COMMAND_ARGUMENT_COUNT() .ge. 7) then
++
++          call get_COMMAND_ARGUMENT(7, arg7)
++
++          call parse_arguments(arg7, input_options)
++
++        endif
++
++        ! argument 8
++        if (COMMAND_ARGUMENT_COUNT() .ge. 8) then
++
++          call get_COMMAND_ARGUMENT(8, arg8)
++
++          call parse_arguments(arg8, input_options)
++
++        endif
++
++        ! argument 9
++        if (COMMAND_ARGUMENT_COUNT() .ge. 9) then
++
++          call get_COMMAND_ARGUMENT(9, arg9)
++
++          call parse_arguments(arg8, input_options)
++
++        endif
++
++        ! argument 10
++        if (COMMAND_ARGUMENT_COUNT() .ge. 10) then
++
++          call get_COMMAND_ARGUMENT(10, arg10)
++
++          call parse_arguments(arg8, input_options)
++
++        endif
++
++      endif
++
++      if (input_options%useQrIsSet .eq. 1 .and. input_options%datatype .eq. 2) then
++        print *,"You cannot use QR-decomposition in complex case"
++        stop 1
++      endif
++
++    end subroutine
++
++    subroutine read_input_parameters_traditional_noskip(na, nev, nblk, write_to_file)
++      use precision_for_tests
++      implicit none
++
++      TEST_INT_TYPE, intent(out) :: na, nev, nblk
++
++      type(output_t), intent(out)   :: write_to_file
++      logical                       :: skip_check_correctness
++
++      call read_input_parameters_traditional(na, nev, nblk, write_to_file, skip_check_correctness)
++    end subroutine
++
++    subroutine read_input_parameters_traditional(na, nev, nblk, write_to_file, skip_check_correctness)
++      use precision_for_tests
++      implicit none
++
++      TEST_INT_TYPE, intent(out) :: na, nev, nblk
++
++      type(output_t), intent(out)   :: write_to_file
++      logical, intent(out)          :: skip_check_correctness
++
++      ! Command line arguments
++      character(len=128)            :: arg1, arg2, arg3, arg4, arg5
++
++      ! default parameters
++      na = 5000
++      nev = 150
++      nblk = 16
++      write_to_file%eigenvectors = .false.
++      write_to_file%eigenvalues  = .false.
++      skip_check_correctness = .false.
++
++      if (.not. any(COMMAND_ARGUMENT_COUNT() == [0, 3, 4, 5])) then
++        write(error_unit, '(a,i0,a)') "Invalid number (", COMMAND_ARGUMENT_COUNT(), ") of command line arguments!"
++        write(error_unit, *) "Expected: program [ [matrix_size num_eigenvalues block_size] &
++            ""output_eigenvalues"" ""output_eigenvectors""]"
++        stop 1
++      endif
++
++      if (COMMAND_ARGUMENT_COUNT() == 3) then
++        call GET_COMMAND_ARGUMENT(1, arg1)
++        call GET_COMMAND_ARGUMENT(2, arg2)
++        call GET_COMMAND_ARGUMENT(3, arg3)
++
++        read(arg1, *) na
++        read(arg2, *) nev
++        read(arg3, *) nblk
++      endif
++
++      if (COMMAND_ARGUMENT_COUNT() == 4) then
++        call GET_COMMAND_ARGUMENT(1, arg1)
++        call GET_COMMAND_ARGUMENT(2, arg2)
++        call GET_COMMAND_ARGUMENT(3, arg3)
++        call GET_COMMAND_ARGUMENT(4, arg4)
++        read(arg1, *) na
++        read(arg2, *) nev
++        read(arg3, *) nblk
++
++        if (arg4 .eq. "output_eigenvalues") then
++          write_to_file%eigenvalues = .true.
++        elseif (arg4 .eq. "skip_check_correctness") then
++          skip_check_correctness = .true.
++        else
++          write(error_unit, *) &
++          "Invalid value for parameter 4.  Must be ""output_eigenvalues"", ""skip_check_correctness"" or omitted"
++          stop 1
++        endif
++
++      endif
++
++      if (COMMAND_ARGUMENT_COUNT() == 5) then
++        call GET_COMMAND_ARGUMENT(1, arg1)
++        call GET_COMMAND_ARGUMENT(2, arg2)
++        call GET_COMMAND_ARGUMENT(3, arg3)
++        call GET_COMMAND_ARGUMENT(4, arg4)
++        call GET_COMMAND_ARGUMENT(5, arg5)
++        read(arg1, *) na
++        read(arg2, *) nev
++        read(arg3, *) nblk
++
++        if (arg4 .eq. "output_eigenvalues") then
++          write_to_file%eigenvalues = .true.
++        else
++          write(error_unit, *) "Invalid value for output flag! Must be ""output_eigenvalues"" or omitted"
++          stop 1
++        endif
++
++        if (arg5 .eq. "output_eigenvectors") then
++          write_to_file%eigenvectors = .true.
++        else
++          write(error_unit, *) "Invalid value for output flag! Must be ""output_eigenvectors"" or omitted"
++          stop 1
++        endif
++
++      endif
++    end subroutine
++
++end module
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_redir.c elpa-new_release_2021.11.001_ok/examples/shared/test_redir.c
+--- elpa-new_release_2021.11.001/examples/shared/test_redir.c	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_redir.c	2022-01-26 10:10:58.378020000 +0100
+@@ -0,0 +1,125 @@
++//    This file is part of ELPA.
++//
++//    The ELPA library was originally created by the ELPA consortium,
++//    consisting of the following organizations:
++//
++//    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++//      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++//    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++//      Informatik,
++//    - Technische Universität München, Lehrstuhl für Informatik mit
++//      Schwerpunkt Wissenschaftliches Rechnen ,
++//    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++//    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++//      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++//      and
++//    - IBM Deutschland GmbH
++//
++//
++//    More information can be found here:
++//    http://elpa.mpcdf.mpg.de/
++//
++//    ELPA is free software: you can redistribute it and/or modify
++//    it under the terms of the version 3 of the license of the
++//    GNU Lesser General Public License as published by the Free
++//    Software Foundation.
++//
++//    ELPA 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 Lesser General Public License for more details.
++//
++//    You should have received a copy of the GNU Lesser General Public License
++//    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++//
++//    ELPA reflects a substantial effort on the part of the original
++//    ELPA consortium, and we ask you to respect the spirit of the
++//    license that we chose: i.e., please contribute any changes you
++//    may have back to the original ELPA library distribution, and keep
++//    any derivatives of ELPA under the same license that we chose for
++//    the original distribution, the GNU Lesser General Public License.
++//
++//
++// --------------------------------------------------------------------------------------------------
++#include <stdio.h>
++#include <fcntl.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <sys/stat.h>
++#include <sys/types.h>
++#include <unistd.h>
++#include <errno.h>
++
++#define NAME_LENGTH 4096
++#define FILENAME "./mpi_stdout/std%3s_rank%04d.txt"
++
++FILE *tout, *terr;
++void dup_filename(char *filename, int dupfd);
++void dup_fd(int fd, int dupfd);
++
++int _mkdirifnotexists(const char *dir) {
++    struct stat s;
++    if (stat(dir, &s) != 0) {
++        if (errno == ENOENT) {
++            if (mkdir(dir, 0755) != 0) {
++                perror("mkdir");
++                return 0;
++            } else {
++                return 1;
++            }
++        } else {
++            perror("stat()");
++	    return 0;
++        }
++    } else if (!S_ISDIR(s.st_mode)) {
++        fprintf(stderr, "\"%s\" does exist and is not a directory\n", dir);
++        return 0;
++    } else {
++        return 1;
++    }
++}
++
++int create_directories(void) {
++    if (!_mkdirifnotexists("mpi_stdout")) return 0;
++    return 1;
++}
++
++void redirect_stdout(int *myproc) {
++  char buf[NAME_LENGTH];
++
++  if (*myproc == 0) {
++    snprintf(buf, NAME_LENGTH, "tee " FILENAME, "out", *myproc);
++    tout = popen(buf, "w");
++    dup_fd(fileno(tout), 1);
++
++    snprintf(buf, NAME_LENGTH, "tee " FILENAME, "err", *myproc);
++    terr = popen(buf, "w");
++    dup_fd(fileno(terr), 2);
++  } else {
++    snprintf(buf, NAME_LENGTH, FILENAME, "out", *myproc);
++    dup_filename(buf, 1);
++
++    snprintf(buf, NAME_LENGTH, FILENAME, "err", *myproc);
++    dup_filename(buf, 2);
++  }
++
++  return;
++}
++
++/* Redirect file descriptor dupfd to file filename */
++void dup_filename(char *filename, int dupfd) {
++  int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644);
++  if(fd < 0) {
++    perror("open()");
++    exit(1);
++  }
++  dup_fd(fd, dupfd);
++}
++
++/* Redirect file descriptor dupfd to file descriptor fd */
++void dup_fd(int fd, int dupfd) {
++  if(dup2(fd,dupfd) < 0) {
++    perror("dup2()");
++    exit(1);
++  }
++}
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_redirect.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_redirect.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_redirect.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_redirect.F90	2022-01-26 10:10:58.379123000 +0100
+@@ -0,0 +1,116 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++module test_redirect
++  use, intrinsic :: iso_c_binding
++
++  implicit none
++  public
++
++  logical :: use_redirect_stdout
++
++  interface
++    integer(kind=C_INT) function create_directories_c() bind(C, name="create_directories")
++      use, intrinsic :: iso_c_binding
++      implicit none
++    end function
++  end interface
++
++  interface
++    subroutine redirect_stdout_c(myproc) bind(C, name="redirect_stdout")
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=C_INT), intent(in) :: myproc
++    end subroutine
++  end interface
++
++  contains
++!>
++!> This function is the Fortran driver for the
++!> C program to create the redirect output
++!> directory
++!>
++!> \param none
++!> \result res integer indicates success or failure
++    function create_directories() result(res)
++      implicit none
++      integer(kind=C_INT) :: res
++      res = int(create_directories_c())
++    end function
++!>
++!> This subroutine is the Fortran driver for the
++!> redirection of stdout and stderr of each MPI
++!> task
++!>
++!> \param myproc MPI task id
++    subroutine redirect_stdout(myproc)
++      use, intrinsic :: iso_c_binding
++      implicit none
++      integer(kind=C_INT), intent(in) :: myproc
++      call redirect_stdout_c(int(myproc, kind=C_INT))
++    end subroutine
++!>
++!> This function checks, whether the environment variable
++!> "REDIRECT_ELPA_TEST_OUTPUT" is set to "true".
++!> Returns ".true." if variable is set, otherwise ".false."
++!> This function only works if the during the build process
++!> "HAVE_ENVIRONMENT_CHECKING" was tested successfully
++!>
++!> \param none
++!> \return logical
++    function check_redirect_environment_variable() result(redirect)
++      implicit none
++      logical            :: redirect
++      character(len=255) :: REDIRECT_VARIABLE
++
++      redirect = .false.
++
++#if defined(HAVE_ENVIRONMENT_CHECKING)
++      call get_environment_variable("REDIRECT_ELPA_TEST_OUTPUT",REDIRECT_VARIABLE)
++#endif
++      if (trim(REDIRECT_VARIABLE) .eq. "true") redirect = .true.
++
++    end function
++
++end module test_redirect
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_scalapack.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_scalapack.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_scalapack.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_scalapack.F90	2022-01-26 10:10:58.380143000 +0100
+@@ -0,0 +1,111 @@
++! (c) Copyright Pavel Kus, 2017, MPCDF
++!
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++
++#include "../Fortran/assert.h"
++#include "config-f90.h"
++
++module test_scalapack
++  use test_util
++
++  interface solve_scalapack_all
++    module procedure solve_pdsyevd
++    module procedure solve_pzheevd
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure solve_pssyevd
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure solve_pcheevd
++#endif
++  end interface
++
++  interface solve_scalapack_part
++    module procedure solve_pdsyevr
++    module procedure solve_pzheevr
++#ifdef WANT_SINGLE_PRECISION_REAL
++    module procedure solve_pssyevr
++#endif
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++    module procedure solve_pcheevr
++#endif
++  end interface
++
++contains
++
++#define COMPLEXCASE 1
++#define DOUBLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_scalapack_template.F90"
++#undef DOUBLE_PRECISION
++#undef COMPLEXCASE
++
++#ifdef WANT_SINGLE_PRECISION_COMPLEX
++
++#define COMPLEXCASE 1
++#define SINGLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_scalapack_template.F90"
++#undef SINGLE_PRECISION
++#undef COMPLEXCASE
++
++#endif /* WANT_SINGLE_PRECISION_COMPLEX */
++
++#define REALCASE 1
++#define DOUBLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_scalapack_template.F90"
++#undef DOUBLE_PRECISION
++#undef REALCASE
++
++#ifdef WANT_SINGLE_PRECISION_REAL
++
++#define REALCASE 1
++#define SINGLE_PRECISION 1
++#include "../../src/general/precision_macros.h"
++#include "test_scalapack_template.F90"
++#undef SINGLE_PRECISION
++#undef REALCASE
++
++#endif /* WANT_SINGLE_PRECISION_REAL */
++
++
++end module
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_scalapack_template.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_scalapack_template.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_scalapack_template.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_scalapack_template.F90	2022-01-26 10:10:58.381125000 +0100
+@@ -0,0 +1,161 @@
++! (c) Copyright Pavel Kus, 2017, MPCDF
++!
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++
++  ! compute all eigenvectors
++  subroutine solve_p&
++      &BLAS_CHAR_AND_SY_OR_HE&
++      &evd(na, a, sc_desc, ev, z)
++    implicit none
++#include "./test_precision_kinds.F90"
++    integer(kind=ik), intent(in)     :: na
++    MATH_DATATYPE(kind=rck), intent(in)       :: a(:,:)
++    MATH_DATATYPE(kind=rck), intent(inout)    :: z(:,:)
++    real(kind=rk), intent(inout)    :: ev(:)
++    integer(kind=ik), intent(in)     :: sc_desc(:)
++    integer(kind=ik)                 :: info, lwork, liwork, lrwork
++    MATH_DATATYPE(kind=rck), allocatable      :: work(:)
++    real(kind=rk), allocatable       :: rwork(:)
++    integer, allocatable             :: iwork(:)
++
++    allocate(work(1), iwork(1), rwork(1))
++
++    ! query for required workspace
++#ifdef REALCASE
++    call p&
++         &BLAS_CHAR&
++         &syevd('V', 'U', na, a, 1, 1, sc_desc, ev, z, 1, 1, sc_desc, work, -1, iwork, -1, info)
++#endif
++#ifdef COMPLEXCASE
++    call p&
++         &BLAS_CHAR&
++         &heevd('V', 'U', na, a, 1, 1, sc_desc, ev, z, 1, 1, sc_desc, work, -1, rwork, -1, iwork, -1, info)
++#endif
++    !  write(*,*) "computed sizes", lwork, liwork, "required sizes ", work(1), iwork(1)
++    lwork = work(1)
++    liwork = iwork(1)
++    deallocate(work, iwork)
++    allocate(work(lwork), stat = info)
++    allocate(iwork(liwork), stat = info)
++#ifdef COMPLEXCASE
++    lrwork = rwork(1)
++    deallocate(rwork)
++    allocate(rwork(lrwork), stat = info)
++#endif
++    ! the actuall call to the method
++#ifdef REALCASE
++    call p&
++         &BLAS_CHAR&
++         &syevd('V', 'U', na, a, 1, 1, sc_desc, ev, z, 1, 1, sc_desc, work, lwork, iwork, liwork, info)
++#endif
++#ifdef COMPLEXCASE
++    call p&
++         &BLAS_CHAR&
++         &heevd('V', 'U', na, a, 1, 1, sc_desc, ev, z, 1, 1, sc_desc, work, lwork, rwork, lrwork, iwork, liwork, info)
++#endif
++
++    deallocate(iwork, work, rwork)
++  end subroutine
++
++
++  ! compute part of eigenvectors
++  subroutine solve_p&
++      &BLAS_CHAR_AND_SY_OR_HE&
++      &evr(na, a, sc_desc, nev, ev, z)
++    implicit none
++#include "./test_precision_kinds.F90"
++    integer(kind=ik), intent(in)     :: na, nev
++    MATH_DATATYPE(kind=rck), intent(in)       :: a(:,:)
++    MATH_DATATYPE(kind=rck), intent(inout)    :: z(:,:)
++    real(kind=rk), intent(inout)    :: ev(:)
++    integer(kind=ik), intent(in)     :: sc_desc(:)
++    integer(kind=ik)                 :: info, lwork, liwork, lrwork
++    MATH_DATATYPE(kind=rck), allocatable      :: work(:)
++    real(kind=rk), allocatable       :: rwork(:)
++    integer, allocatable             :: iwork(:)
++    integer(kind=ik)                 :: comp_eigenval, comp_eigenvec, smallest_ev_idx, largest_ev_idx
++
++    allocate(work(1), iwork(1), rwork(1))
++    smallest_ev_idx = 1
++    largest_ev_idx = nev
++    ! query for required workspace
++#ifdef REALCASE
++    call p&
++         &BLAS_CHAR&
++         &syevr('V', 'I', 'U', na, a, 1, 1, sc_desc, 0.0_rk, 0.0_rk, smallest_ev_idx, largest_ev_idx, &
++                comp_eigenval, comp_eigenvec,  ev, z, 1, 1, sc_desc, work, -1, iwork, -1, info)
++#endif
++#ifdef COMPLEXCASE
++    call p&
++         &BLAS_CHAR&
++         &heevr('V', 'I', 'U', na, a, 1, 1, sc_desc, 0.0_rk, 0.0_rk, smallest_ev_idx, largest_ev_idx, &
++                comp_eigenval, comp_eigenvec,  ev, z, 1, 1, sc_desc, work, -1, rwork, -1, iwork, -1, info)
++#endif
++    !  write(*,*) "computed sizes", lwork, liwork, "required sizes ", work(1), iwork(1)
++    lwork = work(1)
++    liwork = iwork(1)
++    deallocate(work, iwork)
++    allocate(work(lwork), stat = info)
++    allocate(iwork(liwork), stat = info)
++#ifdef COMPLEXCASE
++    lrwork = rwork(1)
++    deallocate(rwork)
++    allocate(rwork(lrwork), stat = info)
++#endif
++    ! the actuall call to the method
++#ifdef REALCASE
++    call p&
++         &BLAS_CHAR&
++         &syevr('V', 'I', 'U', na, a, 1, 1, sc_desc, 0.0_rk, 0.0_rk, smallest_ev_idx, largest_ev_idx, &
++                comp_eigenval, comp_eigenvec,  ev, z, 1, 1, sc_desc, work, lwork, iwork, liwork, info)
++#endif
++#ifdef COMPLEXCASE
++    call p&
++         &BLAS_CHAR&
++         &heevr('V', 'I', 'U', na, a, 1, 1, sc_desc, 0.0_rk, 0.0_rk, smallest_ev_idx, largest_ev_idx, &
++                comp_eigenval, comp_eigenvec,  ev, z, 1, 1, sc_desc, work, lwork, rwork, lrwork, iwork, liwork, info)
++#endif
++    assert(comp_eigenval == nev)
++    assert(comp_eigenvec == nev)
++    deallocate(iwork, work, rwork)
++  end subroutine
++
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_setup_mpi.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_setup_mpi.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_setup_mpi.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_setup_mpi.F90	2022-01-26 10:10:58.382203000 +0100
+@@ -0,0 +1,115 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++module test_setup_mpi
++
++  contains
++
++    subroutine setup_mpi(myid, nprocs)
++      use test_util
++      use ELPA_utilities
++      use precision_for_tests
++      implicit none
++
++      TEST_INT_MPI_TYPE              :: mpierr
++
++      TEST_INT_TYPE, intent(out)     :: myid, nprocs
++      TEST_INT_MPI_TYPE              :: myidMPI, nprocsMPI
++#ifdef WITH_OPENMP_TRADITIONAL
++      TEST_INT_MPI_TYPE              :: required_mpi_thread_level, &
++                                        provided_mpi_thread_level
++#endif
++
++
++#ifdef WITH_MPI
++
++#ifndef WITH_OPENMP_TRADITIONAL
++      call mpi_init(mpierr)
++#else
++      required_mpi_thread_level = MPI_THREAD_MULTIPLE
++
++      call mpi_init_thread(required_mpi_thread_level,     &
++                           provided_mpi_thread_level, mpierr)
++
++      if (required_mpi_thread_level .ne. provided_mpi_thread_level) then
++        write(error_unit,*) "MPI ERROR: MPI_THREAD_MULTIPLE is not provided on this system"
++        write(error_unit,*) "           only ", mpi_thread_level_name(provided_mpi_thread_level), " is available"
++        call MPI_FINALIZE(mpierr)
++        call exit(77)
++      endif
++#endif
++      call mpi_comm_rank(mpi_comm_world, myidMPI,  mpierr)
++      call mpi_comm_size(mpi_comm_world, nprocsMPI,mpierr)
++
++      myid   = int(myidMPI,kind=BLAS_KIND)
++      nprocs = int(nprocsMPI,kind=BLAS_KIND)
++
++      if (nprocs <= 1) then
++        print *, "The test programs must be run with more than 1 task to ensure that usage with MPI is actually tested"
++        stop 1
++      endif
++#else
++      myid = 0
++      nprocs = 1
++#endif
++
++    end subroutine
++
++
++end module
+diff -ruN elpa-new_release_2021.11.001/examples/shared/tests_variable_definitions.F90 elpa-new_release_2021.11.001_ok/examples/shared/tests_variable_definitions.F90
+--- elpa-new_release_2021.11.001/examples/shared/tests_variable_definitions.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/tests_variable_definitions.F90	2022-01-26 10:10:58.385037000 +0100
+@@ -0,0 +1,65 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    https://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++! This file was written by A. Marek, MPC
++
++#include "config-f90.h"
++module precision_for_tests
++  use iso_c_binding, only : C_FLOAT, C_DOUBLE, C_FLOAT_COMPLEX, C_DOUBLE_COMPLEX, C_INT32_T, C_INT64_T, C_INT
++
++  implicit none
++  integer, parameter :: rk8  = C_DOUBLE
++  integer, parameter :: rk4  = C_FLOAT
++  integer, parameter :: ck8  = C_DOUBLE_COMPLEX
++  integer, parameter :: ck4  = C_FLOAT_COMPLEX
++  integer, parameter :: ik  = C_INT32_T
++  integer, parameter :: lik = C_INT64_T
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++  integer, parameter :: BLAS_KIND = C_INT64_T
++#else
++  integer, parameter :: BLAS_KIND = C_INT32_T
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++  integer, parameter :: MPI_KIND  = C_INT64_T
++#else
++  integer, parameter :: MPI_KIND  = C_INT32_T
++#endif
++end module precision_for_tests
+diff -ruN elpa-new_release_2021.11.001/examples/shared/test_util.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_util.F90
+--- elpa-new_release_2021.11.001/examples/shared/test_util.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/shared/test_util.F90	2022-01-26 10:10:58.383252000 +0100
+@@ -0,0 +1,156 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++#include "config-f90.h"
++#undef TEST_INT_TYPE
++#undef INT_TYPE
++#undef TEST_INT_MPI_TYPE
++#undef INT_MPI_TYPE
++
++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT
++#define TEST_INT_TYPE integer(kind=c_int64_t)
++#define INT_TYPE c_int64_t
++#else
++#define TEST_INT_TYPE integer(kind=c_int32_t)
++#define INT_TYPE c_int32_t
++#endif
++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT
++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t)
++#define INT_MPI_TYPE c_int64_t
++#else
++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t)
++#define INT_MPI_TYPE c_int32_t
++#endif
++
++module test_util
++  use iso_c_binding
++  use precision_for_tests
++#ifdef WITH_MPI
++#ifdef HAVE_MPI_MODULE
++  use mpi
++  implicit none
++#else
++  implicit none
++  include 'mpif.h'
++#endif
++#else
++  TEST_INT_MPI_TYPE, parameter :: mpi_comm_world = -1
++#endif
++
++  contains
++!>
++!> This function translates, if ELPA was build with OpenMP support,
++!> the found evel of "thread safetiness" from the internal number
++!> of the MPI library into a human understandable value
++!>
++!> \param level thread-saftiness of the MPI library
++!> \return str human understandable value of thread saftiness
++  pure function mpi_thread_level_name(level) result(str)
++    use, intrinsic :: iso_c_binding
++    implicit none
++    integer(kind=c_int), intent(in) :: level
++    character(len=21)            :: str
++#ifdef WITH_MPI
++    select case(level)
++      case (MPI_THREAD_SINGLE)
++        str = "MPI_THREAD_SINGLE"
++      case (MPI_THREAD_FUNNELED)
++        str = "MPI_THREAD_FUNNELED"
++      case (MPI_THREAD_SERIALIZED)
++        str = "MPI_THREAD_SERIALIZED"
++      case (MPI_THREAD_MULTIPLE)
++        str = "MPI_THREAD_MULTIPLE"
++      case default
++        write(str,'(i0,1x,a)') level, "(Unknown level)"
++    end select
++#endif
++  end function
++
++  function seconds() result(s)
++    integer :: ticks, tick_rate
++    real(kind=c_double) :: s
++
++    call system_clock(count=ticks, count_rate=tick_rate)
++    s = real(ticks, kind=c_double) / tick_rate
++  end function
++
++    subroutine x_a(condition, condition_string, file, line)
++#ifdef HAVE_ISO_FORTRAN_ENV
++      use iso_fortran_env, only : error_unit
++#endif
++      implicit none
++#ifndef HAVE_ISO_FORTRAN_ENV
++      integer, parameter :: error_unit = 0
++#endif
++      logical, intent(in) :: condition
++      character(len=*), intent(in) :: condition_string
++      character(len=*), intent(in) :: file
++      integer, intent(in) :: line
++
++      if (.not. condition) then
++        write(error_unit,'(a,i0)') "Assertion `" // condition_string // "` failed at " // file // ":", line
++        stop 1
++      end if
++    end subroutine
++
++    subroutine x_ao(error_code, error_code_string, file, line)
++      use elpa
++#ifdef HAVE_ISO_FORTRAN_ENV
++      use iso_fortran_env, only : error_unit
++#endif
++      implicit none
++#ifndef HAVE_ISO_FORTRAN_ENV
++      integer, parameter :: error_unit = 0
++#endif
++      integer, intent(in) :: error_code
++      character(len=*), intent(in) :: error_code_string
++      character(len=*), intent(in) :: file
++      integer, intent(in) :: line
++
++      if (error_code /= ELPA_OK) then
++        write(error_unit,'(a,i0)') "Assertion failed: `" // error_code_string // &
++           " is " // elpa_strerr(error_code) // "` at " // file // ":", line
++        stop 1
++      end if
++    end subroutine
++end module
++
+diff -ruN elpa-new_release_2021.11.001/examples/test_real_e1.F90 elpa-new_release_2021.11.001_ok/examples/test_real_e1.F90
+--- elpa-new_release_2021.11.001/examples/test_real_e1.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/test_real_e1.F90	2022-01-28 16:43:29.688434545 +0100
+@@ -0,0 +1,255 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++!>
++!> Fortran test programm to demonstrates the use of
++!> ELPA 1 real case library.
++!> If "HAVE_REDIRECT" was defined at build time
++!> the stdout and stderr output of each MPI task
++!> can be redirected to files if the environment
++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set
++!> to "true".
++!>
++!> By calling executable [arg1] [arg2] [arg3] [arg4]
++!> one can define the size (arg1), the number of
++!> Eigenvectors to compute (arg2), and the blocking (arg3).
++!> If these values are not set default values (4000, 1500, 16)
++!> are choosen.
++!> If these values are set the 4th argument can be
++!> "output", which specifies that the EV's are written to
++!> an ascii file.
++!>
++program test_real_example
++
++!-------------------------------------------------------------------------------
++! Standard eigenvalue problem - REAL version
++!
++! This program demonstrates the use of the ELPA module
++! together with standard scalapack routines
++!
++! Copyright of the original code rests with the authors inside the ELPA
++! consortium. The copyright of any additional modifications shall rest
++! with their original authors, but shall adhere to the licensing terms
++! distributed along with the original code in the file "COPYING".
++!
++!-------------------------------------------------------------------------------
++
++   use iso_c_binding
++
++   use elpa
++#ifdef WITH_OPENMP_TRADITIONAL
++   use omp_lib
++#endif
++
++
++#ifdef HAVE_MPI_MODULE
++   use mpi
++   implicit none
++#else
++   implicit none
++   include 'mpif.h'
++#endif
++
++   !-------------------------------------------------------------------------------
++   ! Please set system size parameters below!
++   ! na:   System size
++   ! nev:  Number of eigenvectors to be calculated
++   ! nblk: Blocking factor in block cyclic distribution
++   !-------------------------------------------------------------------------------
++
++   integer           :: nblk
++   integer                          :: na, nev
++
++   integer                          :: np_rows, np_cols, na_rows, na_cols
++
++   integer                          :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols
++   integer                          :: i, mpierr, my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++
++   integer, external                :: numroc
++
++   real(kind=c_double), allocatable :: a(:,:), z(:,:), ev(:)
++
++   integer                          :: iseed(4096) ! Random seed, size should be sufficient for every generator
++
++   integer                          :: STATUS
++   integer                          :: success
++   character(len=8)                 :: task_suffix
++   integer                          :: j
++
++   integer, parameter               :: error_units = 0
++
++#ifdef WITH_OPENMP_TRADITIONAL
++   integer n_threads
++#endif
++   class(elpa_t), pointer           :: e
++   !-------------------------------------------------------------------------------
++
++
++   ! default parameters
++   na = 1000
++   nev = 500
++   nblk = 16
++
++   call mpi_init_thread(MPI_THREAD_SERIALIZED,info,mpierr)
++   call mpi_comm_rank(mpi_comm_world,myid,mpierr)
++   call mpi_comm_size(mpi_comm_world,nprocs,mpierr)
++
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++     if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++   ! at the end of the above loop, nprocs is always divisible by np_cols
++
++   np_rows = nprocs/np_cols
++
++   ! initialise BLACS
++   my_blacs_ctxt = mpi_comm_world
++   call BLACS_Gridinit(my_blacs_ctxt, 'C', np_rows, np_cols)
++   call BLACS_Gridinfo(my_blacs_ctxt, nprow, npcol, my_prow, my_pcol)
++
++   if (myid==0) then
++     print '(a)','| Past BLACS_Gridinfo.'
++   end if
++   ! determine the neccessary size of the distributed matrices,
++   ! we use the scalapack tools routine NUMROC
++
++#ifdef WITH_OPENMP_TRADITIONAL
++   n_threads=omp_get_max_threads()
++#endif
++
++
++   na_rows = numroc(na, nblk, my_prow, 0, np_rows)
++   na_cols = numroc(na, nblk, my_pcol, 0, np_cols)
++
++
++   ! set up the scalapack descriptor for the checks below
++   ! For ELPA the following restrictions hold:
++   ! - block sizes in both directions must be identical (args 4 a. 5)
++   ! - first row and column of the distributed matrix must be on
++   !   row/col 0/0 (arg 6 and 7)
++
++   call descinit(sc_desc, na, na, nblk, nblk, 0, 0, my_blacs_ctxt, na_rows, info)
++
++   if (info .ne. 0) then
++     write(error_units,*) 'Error in BLACS descinit! info=',info
++     write(error_units,*) 'Most likely this happend since you want to use'
++     write(error_units,*) 'more MPI tasks than are possible for your'
++     write(error_units,*) 'problem size (matrix size and blocksize)!'
++     write(error_units,*) 'The blacsgrid can not be set up properly'
++     write(error_units,*) 'Try reducing the number of MPI tasks...'
++     call MPI_ABORT(mpi_comm_world, 1, mpierr)
++   endif
++
++   if (myid==0) then
++     print '(a)','| Past scalapack descriptor setup.'
++   end if
++
++   allocate(a (na_rows,na_cols))
++   allocate(z (na_rows,na_cols))
++
++   allocate(ev(na))
++
++   ! we want different random numbers on every process
++   ! (otherwise A might get rank deficient):
++
++   iseed(:) = myid
++   call RANDOM_SEED(put=iseed)
++   call RANDOM_NUMBER(z)
++
++   a(:,:) = z(:,:)
++
++   if (myid == 0) then
++     print '(a)','| Random matrix block has been set up. (only processor 0 confirms this step)'
++   endif
++   call pdtran(na, na, 1.d0, z, 1, 1, sc_desc, 1.d0, a, 1, 1, sc_desc) ! A = A + Z**T
++
++   !-------------------------------------------------------------------------------
++
++   if (elpa_init(20171201) /= elpa_ok) then
++     print *, "ELPA API version not supported"
++     stop
++   endif
++   e => elpa_allocate()
++
++   ! set parameters decribing the matrix and it's MPI distribution
++   call e%set("na", na, success)
++   call e%set("nev", nev, success)
++   call e%set("local_nrows", na_rows, success)
++   call e%set("local_ncols", na_cols, success)
++   call e%set("nblk", nblk, success)
++   call e%set("mpi_comm_parent", mpi_comm_world, success)
++   call e%set("process_row", my_prow, success)
++   call e%set("process_col", my_pcol, success)
++
++#ifdef CUDA
++         call e%set("nvidia-gpu", 1, success)
++#endif
++#ifdef WITH_OPENMP_TRADITIONAL
++   call e%set("omp_threads", n_threads, success)
++#endif
++   success = e%setup()
++
++   call e%set("solver", elpa_solver_1stage, success)
++
++
++   ! Calculate eigenvalues/eigenvectors
++
++   if (myid==0) then
++     print '(a)','| Entering one-step ELPA solver ... '
++     print *
++   end if
++
++   call mpi_barrier(mpi_comm_world, mpierr) ! for correct timings only
++   call e%eigenvectors(a, ev, z, success)
++
++   if (myid==0) then
++     print '(a)','| One-step ELPA solver complete.'
++     print *
++   end if
++
++   call elpa_deallocate(e)
++   call elpa_uninit()
++
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++
++end
++
+diff -ruN elpa-new_release_2021.11.001/examples/test_real_e2.F90 elpa-new_release_2021.11.001_ok/examples/test_real_e2.F90
+--- elpa-new_release_2021.11.001/examples/test_real_e2.F90	1970-01-01 01:00:00.000000000 +0100
++++ elpa-new_release_2021.11.001_ok/examples/test_real_e2.F90	2022-02-01 09:28:16.102146696 +0100
+@@ -0,0 +1,262 @@
++!    This file is part of ELPA.
++!
++!    The ELPA library was originally created by the ELPA consortium,
++!    consisting of the following organizations:
++!
++!    - Max Planck Computing and Data Facility (MPCDF), formerly known as
++!      Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG),
++!    - Bergische Universität Wuppertal, Lehrstuhl für angewandte
++!      Informatik,
++!    - Technische Universität München, Lehrstuhl für Informatik mit
++!      Schwerpunkt Wissenschaftliches Rechnen ,
++!    - Fritz-Haber-Institut, Berlin, Abt. Theorie,
++!    - Max-Plack-Institut für Mathematik in den Naturwissenschaften,
++!      Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition,
++!      and
++!    - IBM Deutschland GmbH
++!
++!
++!    More information can be found here:
++!    http://elpa.mpcdf.mpg.de/
++!
++!    ELPA is free software: you can redistribute it and/or modify
++!    it under the terms of the version 3 of the license of the
++!    GNU Lesser General Public License as published by the Free
++!    Software Foundation.
++!
++!    ELPA 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 Lesser General Public License for more details.
++!
++!    You should have received a copy of the GNU Lesser General Public License
++!    along with ELPA.  If not, see <http://www.gnu.org/licenses/>
++!
++!    ELPA reflects a substantial effort on the part of the original
++!    ELPA consortium, and we ask you to respect the spirit of the
++!    license that we chose: i.e., please contribute any changes you
++!    may have back to the original ELPA library distribution, and keep
++!    any derivatives of ELPA under the same license that we chose for
++!    the original distribution, the GNU Lesser General Public License.
++!
++!
++!>
++!> Fortran test programm to demonstrates the use of
++!> ELPA 2 real case library.
++!> If "HAVE_REDIRECT" was defined at build time
++!> the stdout and stderr output of each MPI task
++!> can be redirected to files if the environment
++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set
++!> to "true".
++!>
++!> By calling executable [arg1] [arg2] [arg3] [arg4]
++!> one can define the size (arg1), the number of
++!> Eigenvectors to compute (arg2), and the blocking (arg3).
++!> If these values are not set default values (4000, 1500, 16)
++!> are choosen.
++!> If these values are set the 4th argument can be
++!> "output", which specifies that the EV's are written to
++!> an ascii file.
++!>
++program test_real_example
++
++!-------------------------------------------------------------------------------
++! Standard eigenvalue problem - REAL version
++!
++! This program demonstrates the use of the ELPA module
++! together with standard scalapack routines
++!
++! Copyright of the original code rests with the authors inside the ELPA
++! consortium. The copyright of any additional modifications shall rest
++! with their original authors, but shall adhere to the licensing terms
++! distributed along with the original code in the file "COPYING".
++!
++!-------------------------------------------------------------------------------
++
++   use iso_c_binding
++
++   use elpa
++
++#ifdef HAVE_MPI_MODULE
++   use mpi
++   implicit none
++#else
++   implicit none
++   include 'mpif.h'
++#endif
++
++   !-------------------------------------------------------------------------------
++   ! Please set system size parameters below!
++   ! na:   System size
++   ! nev:  Number of eigenvectors to be calculated
++   ! nblk: Blocking factor in block cyclic distribution
++   !-------------------------------------------------------------------------------
++
++   integer           :: nblk
++   integer                          :: na, nev
++
++   integer                          :: np_rows, np_cols, na_rows, na_cols
++
++   integer                          :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols
++   integer                          :: i, mpierr, my_blacs_ctxt, sc_desc(9), info, nprow, npcol
++
++   integer, external                :: numroc
++
++   real(kind=c_double), allocatable :: a(:,:), z(:,:), ev(:)
++
++   integer                          :: iseed(4096) ! Random seed, size should be sufficient for every generator
++
++   integer                          :: STATUS
++   integer                          :: success
++   character(len=8)                 :: task_suffix
++   integer                          :: j
++
++   integer, parameter               :: error_units = 0
++
++   class(elpa_t), pointer           :: e
++   !-------------------------------------------------------------------------------
++
++
++   ! default parameters
++   na = 1000
++   nev = 500
++   nblk = 16
++
++   call mpi_init_thread(MPI_THREAD_SERIALIZED,info,mpierr)
++   call mpi_comm_rank(mpi_comm_world,myid,mpierr)
++   call mpi_comm_size(mpi_comm_world,nprocs,mpierr)
++
++   do np_cols = NINT(SQRT(REAL(nprocs))),2,-1
++     if(mod(nprocs,np_cols) == 0 ) exit
++   enddo
++   ! at the end of the above loop, nprocs is always divisible by np_cols
++
++   np_rows = nprocs/np_cols
++
++   ! initialise BLACS
++   my_blacs_ctxt = mpi_comm_world
++   call BLACS_Gridinit(my_blacs_ctxt, 'C', np_rows, np_cols)
++   call BLACS_Gridinfo(my_blacs_ctxt, nprow, npcol, my_prow, my_pcol)
++
++   if (myid==0) then
++     print '(a)','| Past BLACS_Gridinfo.'
++   end if
++   ! determine the neccessary size of the distributed matrices,
++   ! we use the scalapack tools routine NUMROC
++
++   na_rows = numroc(na, nblk, my_prow, 0, np_rows)
++   na_cols = numroc(na, nblk, my_pcol, 0, np_cols)
++
++
++   ! set up the scalapack descriptor for the checks below
++   ! For ELPA the following restrictions hold:
++   ! - block sizes in both directions must be identical (args 4 a. 5)
++   ! - first row and column of the distributed matrix must be on
++   !   row/col 0/0 (arg 6 and 7)
++
++   call descinit(sc_desc, na, na, nblk, nblk, 0, 0, my_blacs_ctxt, na_rows, info)
++
++   if (info .ne. 0) then
++     write(error_units,*) 'Error in BLACS descinit! info=',info
++     write(error_units,*) 'Most likely this happend since you want to use'
++     write(error_units,*) 'more MPI tasks than are possible for your'
++     write(error_units,*) 'problem size (matrix size and blocksize)!'
++     write(error_units,*) 'The blacsgrid can not be set up properly'
++     write(error_units,*) 'Try reducing the number of MPI tasks...'
++     call MPI_ABORT(mpi_comm_world, 1, mpierr)
++   endif
++
++   if (myid==0) then
++     print '(a)','| Past scalapack descriptor setup.'
++   end if
++
++   allocate(a (na_rows,na_cols))
++   allocate(z (na_rows,na_cols))
++
++   allocate(ev(na))
++
++   ! we want different random numbers on every process
++   ! (otherwise A might get rank deficient):
++
++   iseed(:) = myid
++   call RANDOM_SEED(put=iseed)
++   call RANDOM_NUMBER(z)
++
++   a(:,:) = z(:,:)
++
++   if (myid == 0) then
++     print '(a)','| Random matrix block has been set up. (only processor 0 confirms this step)'
++   endif
++   call pdtran(na, na, 1.d0, z, 1, 1, sc_desc, 1.d0, a, 1, 1, sc_desc) ! A = A + Z**T
++
++   !-------------------------------------------------------------------------------
++
++   if (elpa_init(20171201) /= elpa_ok) then
++     print *, "ELPA API version not supported"
++     stop
++   endif
++   e => elpa_allocate()
++
++   ! set parameters decribing the matrix and it's MPI distribution
++   call e%set("na", na, success)
++   call e%set("nev", nev, success)
++   call e%set("local_nrows", na_rows, success)
++   call e%set("local_ncols", na_cols, success)
++   call e%set("nblk", nblk, success)
++   call e%set("mpi_comm_parent", mpi_comm_world, success)
++   call e%set("process_row", my_prow, success)
++   call e%set("process_col", my_pcol, success)
++#ifdef CUDA
++   call e%set("nvidia-gpu", 1, success)
++#endif
++
++   success = e%setup()
++
++#ifdef CUDAKERNEL
++         call e%set("real_kernel", ELPA_2STAGE_REAL_NVIDIA_GPU, success)
++#endif
++#ifdef AVX512
++         call e%set("real_kernel", ELPA_2STAGE_REAL_AVX512_BLOCK2,success )
++#endif
++#ifdef AVX2_B6
++         call e%set("real_kernel", ELPA_2STAGE_REAL_AVX2_BLOCK6,success )
++#endif
++#ifdef AVX2_B4
++         call e%set("real_kernel", ELPA_2STAGE_REAL_AVX2_BLOCK4,success )
++#endif
++#ifdef AVX2_B2
++         call e%set("real_kernel", ELPA_2STAGE_REAL_AVX2_BLOCK2,success )
++#endif
++#ifdef GENERIC
++         call e%set("real_kernel", ELPA_2STAGE_REAL_GENERIC,success )
++#endif
++#ifdef GENERIC_SIMPLE
++         call e%set("real_kernel", ELPA_2STAGE_REAL_GENERIC_SIMPLE,success )
++#endif
++
++   call e%set("solver", elpa_solver_2stage, success)
++
++
++   ! Calculate eigenvalues/eigenvectors
++
++   if (myid==0) then
++     print '(a)','| Entering two-step ELPA solver ... '
++     print *
++   end if
++
++   call mpi_barrier(mpi_comm_world, mpierr) ! for correct timings only
++   call e%eigenvectors(a, ev, z, success)
++
++   if (myid==0) then
++     print '(a)','| Two-step ELPA solver complete.'
++     print *
++   end if
++
++   call elpa_deallocate(e)
++   call elpa_uninit()
++
++   call blacs_gridexit(my_blacs_ctxt)
++   call mpi_finalize(mpierr)
++
++end
++
diff --git a/Golden_Repo/e/elfutils/elfutils-0.185-GCCcore-11.2.0.eb b/Golden_Repo/e/elfutils/elfutils-0.185-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..e71a4d7646ed97331fe6f311556d51795fa96048
--- /dev/null
+++ b/Golden_Repo/e/elfutils/elfutils-0.185-GCCcore-11.2.0.eb
@@ -0,0 +1,41 @@
+easyblock = 'ConfigureMake'
+
+name = 'elfutils'
+version = '0.185'
+
+homepage = 'https://elfutils.org/'
+
+description = """
+ The elfutils project provides libraries and tools for ELF files
+ and DWARF data.
+"""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['https://sourceware.org/elfutils/ftp/%(version)s/']
+sources = [SOURCE_TAR_BZ2]
+checksums = ['dc8d3e74ab209465e7f568e1b3bb9a5a142f8656e2b57d10049a73da2ae6b5a6']
+
+builddependencies = [
+    ('M4', '1.4.19'),
+    ('pkg-config', '0.29.2'),
+]
+
+dependencies = [
+    ('binutils', '2.37'),
+    ('bzip2', '1.0.8'),
+    ('libarchive', '3.5.1'),
+    ('XZ', '5.2.5'),
+    ('zstd', '1.5.0'),
+]
+
+configopts = "--disable-debuginfod --disable-libdebuginfod"
+
+sanity_check_paths = {
+    'files': ['bin/eu-elfcmp', 'include/dwarf.h', 'lib/libelf.%s' % SHLIB_EXT],
+    'dirs': []
+}
+
+sanity_check_commands = ["eu-elfcmp --help"]
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/f/FreeImage/FreeImage-3.18.0-GCCcore-11.2.0.eb b/Golden_Repo/f/FreeImage/FreeImage-3.18.0-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..7eca59b715bd4a7220dfca1c288bed1fc25976e8
--- /dev/null
+++ b/Golden_Repo/f/FreeImage/FreeImage-3.18.0-GCCcore-11.2.0.eb
@@ -0,0 +1,40 @@
+easyblock = 'ConfigureMake'
+
+name = 'FreeImage'
+version = '3.18.0'
+
+homepage = 'http://freeimage.sourceforge.net'
+description = """FreeImage is an Open Source library project for developers who would like to support popular graphics
+image formats like PNG, BMP, JPEG, TIFF and others as needed by today's multimedia applications. FreeImage is easy to
+use, fast, multithreading safe."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+toolchainopts = {'pic': True, 'cstd': 'c++11'}
+
+source_urls = [SOURCEFORGE_SOURCE]
+sources = ['%%(name)s%s.zip' % ''.join(version.split('.'))]
+patches = ['%(name)s-%(version)s-fix-makefile.patch']
+checksums = [
+    'f41379682f9ada94ea7b34fe86bf9ee00935a3147be41b6569c9605a53e438fd',  # FreeImage3180.zip
+    '3eaa1eb9562ccfd0cb95a37879bb7e3e8c745166596d75af529478181ef006a0',  # FreeImage-3.18.0-fix-makefile.patch
+]
+
+builddependencies = [('binutils', '2.37')]
+
+skipsteps = ['configure']
+
+buildopts = ['', '-f Makefile.fip']
+installopts = [
+    'INCDIR=%(installdir)s/include INSTALLDIR=%(installdir)s/lib',
+    '-f Makefile.fip INCDIR=%(installdir)s/include INSTALLDIR=%(installdir)s/lib'
+]
+
+dependencies = [('zlib', '1.2.11')]
+
+sanity_check_paths = {
+    'files': ['include/FreeImage.h', 'include/FreeImagePlus.h', 'lib/libfreeimage.a', 'lib/libfreeimage.%s' % SHLIB_EXT,
+              'lib/libfreeimageplus.a', 'lib/libfreeimageplus.%s' % SHLIB_EXT],
+    'dirs': []
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/f/FreeImage/FreeImage-3.18.0-fix-makefile.patch b/Golden_Repo/f/FreeImage/FreeImage-3.18.0-fix-makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ac35040d4d637adaf48ca909d3988ead0e628f07
--- /dev/null
+++ b/Golden_Repo/f/FreeImage/FreeImage-3.18.0-fix-makefile.patch
@@ -0,0 +1,54 @@
+# Do not install files to root user
+# wpoely86@gmail.com
+diff -ur FreeImage.orig/Makefile.fip FreeImage/Makefile.fip
+--- FreeImage.orig/Makefile.fip	2015-03-10 09:03:56.000000000 +0100
++++ FreeImage/Makefile.fip	2019-04-09 10:32:42.052332853 +0200
+@@ -11,7 +11,7 @@
+ # Converts cr/lf to just lf
+ DOS2UNIX = dos2unix
+ 
+-LIBRARIES = -lstdc++
++LIBRARIES = -lstdc++ $(LIBS)
+ 
+ MODULES = $(SRCS:.c=.o)
+ MODULES := $(MODULES:.cpp=.o)
+@@ -72,10 +72,10 @@
+ 
+ install:
+ 	install -d $(INCDIR) $(INSTALLDIR)
+-	install -m 644 -o root -g root $(HEADER) $(INCDIR)
+-	install -m 644 -o root -g root $(HEADERFIP) $(INCDIR)
+-	install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR)
+-	install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR)
++	install -m 644 $(HEADER) $(INCDIR)
++	install -m 644 $(HEADERFIP) $(INCDIR)
++	install -m 644 $(STATICLIB) $(INSTALLDIR)
++	install -m 755 $(SHAREDLIB) $(INSTALLDIR)
+ 	ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME)
+ 	ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME)	
+ 
+diff -ur FreeImage.orig/Makefile.gnu FreeImage/Makefile.gnu
+--- FreeImage.orig/Makefile.gnu	2015-03-10 09:04:00.000000000 +0100
++++ FreeImage/Makefile.gnu	2019-04-09 10:31:59.066052732 +0200
+@@ -11,7 +11,7 @@
+ # Converts cr/lf to just lf
+ DOS2UNIX = dos2unix
+ 
+-LIBRARIES = -lstdc++
++LIBRARIES = -lstdc++ $(LIBS)
+ 
+ MODULES = $(SRCS:.c=.o)
+ MODULES := $(MODULES:.cpp=.o)
+@@ -71,9 +71,9 @@
+ 
+ install:
+ 	install -d $(INCDIR) $(INSTALLDIR)
+-	install -m 644 -o root -g root $(HEADER) $(INCDIR)
+-	install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR)
+-	install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR)
++	install -m 644 $(HEADER) $(INCDIR)
++	install -m 644 $(STATICLIB) $(INSTALLDIR)
++	install -m 755 $(SHAREDLIB) $(INSTALLDIR)
+ 	ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME)
+ 	ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME)	
+ #	ldconfig
diff --git a/Golden_Repo/f/FreeSurfer/FreeSurfer-7.1.1-GCCcore-11.2.0.eb b/Golden_Repo/f/FreeSurfer/FreeSurfer-7.1.1-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..c9be013c21af7af0575ec8e1c109fb944eaa6d3d
--- /dev/null
+++ b/Golden_Repo/f/FreeSurfer/FreeSurfer-7.1.1-GCCcore-11.2.0.eb
@@ -0,0 +1,38 @@
+# For using $FASTDATA_jsc to determine license path. The local prefix is to appease the checker
+import os as local_os
+
+name = 'FreeSurfer'
+version = '7.1.1'
+
+homepage = 'http://surfer.nmr.mgh.harvard.edu/fswiki/FreeSurferWiki'
+description = """
+FreeSurfer is a set of tools for analysis and visualization of structural and functional brain imaging data.
+FreeSurfer contains a fully automatic structural imaging stream for processing cross sectional and longitudinal data.
+"""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = [
+    'https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/%(version)s/'
+]
+sources = ['%(namelower)s-linux-centos8_x86_64-%(version)s.tar.gz']
+patches = ['freesurfer711-tcsh.patch']
+checksums = [
+    '6098b166fee8644f44f9ec88f3ffe88d05f2bc033cca60443e99e3e56f2e166b',  # freesurfer-linux-centos8_x86_64-7.1.1.tar.gz
+    '92f8b80daaa7a06884d892f3abf5b026cec1387943ff928865b042513c58609a',  # freesurfer711-tcsh.patch
+]
+
+dependencies = [
+    ('X11', '20210802'),
+    ('nvidia-driver', 'default', '', SYSTEM),
+    ('VirtualGL', '2.6.5'),
+    ('protobuf', '3.17.3'),
+    ('tcsh', '6.22.04')
+]
+
+# If FASTDATA_jsc is not defined then assume we are on CI and hence the path is relative to the repo
+local_licdir = local_os.environ.get('FASTDATA_jsc')
+local_licdir = local_os.path.join(local_licdir, 'swmanage', 'EasyBuild', '2022') if local_licdir else '.'
+license_text = open(f'{local_licdir}/Golden_Repo/f/FreeSurfer/license_text.txt', 'r').read()
+
+moduleclass = 'bio'
diff --git a/Golden_Repo/f/FreeSurfer/freesurfer711-tcsh.patch b/Golden_Repo/f/FreeSurfer/freesurfer711-tcsh.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5e056c35c4991e820b769884681fc8049f2f3089
--- /dev/null
+++ b/Golden_Repo/f/FreeSurfer/freesurfer711-tcsh.patch
@@ -0,0 +1,2070 @@
+diff -rupN freesurfer_orig/bin/IsLTA freesurfer/bin/IsLTA
+--- freesurfer_orig/bin/IsLTA	2021-07-19 16:15:27.176318000 +0200
++++ freesurfer/bin/IsLTA	2021-07-23 14:50:56.924476565 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # IsLTA
+ 
+ set VERSION = 'IsLTA 7.1.1';
+diff -rupN freesurfer_orig/bin/annot2std freesurfer/bin/annot2std
+--- freesurfer_orig/bin/annot2std	2021-07-19 16:15:27.401727000 +0200
++++ freesurfer/bin/annot2std	2021-07-23 14:50:45.819517410 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # annot2std
+ #
+diff -rupN freesurfer_orig/bin/aparc2feat freesurfer/bin/aparc2feat
+--- freesurfer_orig/bin/aparc2feat	2021-07-19 16:15:26.623610000 +0200
++++ freesurfer/bin/aparc2feat	2021-07-23 14:50:46.219721597 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # aparc2feat
+diff -rupN freesurfer_orig/bin/aparc_stats_aseg freesurfer/bin/aparc_stats_aseg
+--- freesurfer_orig/bin/aparc_stats_aseg	2021-07-19 16:15:27.664769000 +0200
++++ freesurfer/bin/aparc_stats_aseg	2021-07-23 14:50:46.302508129 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ # This script runs Cortical Parcellation, Surface Anatomical Stats and Aparc2aseg using a given .gcs file.
+ set RunIt = 1
+ set ProgName = `basename $0`;
+diff -rupN freesurfer_orig/bin/aparcstatsdiff freesurfer/bin/aparcstatsdiff
+--- freesurfer_orig/bin/aparcstatsdiff	2021-07-19 16:15:27.764540000 +0200
++++ freesurfer/bin/aparcstatsdiff	2021-07-23 14:50:46.367796527 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ if ( "x$1" == "x" || \
+      "x$2" == "x" || \
+diff -rupN freesurfer_orig/bin/apas2aseg freesurfer/bin/apas2aseg
+--- freesurfer_orig/bin/apas2aseg	2021-07-19 16:15:30.358143000 +0200
++++ freesurfer/bin/apas2aseg	2021-07-23 14:50:46.463586676 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # apas2aseg
+ 
+ set VERSION = 'apas2aseg 7.1.1';
+diff -rupN freesurfer_orig/bin/aseg2feat freesurfer/bin/aseg2feat
+--- freesurfer_orig/bin/aseg2feat	2021-07-19 16:15:36.201381000 +0200
++++ freesurfer/bin/aseg2feat	2021-07-23 14:50:46.740520024 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # aseg2feat
+diff -rupN freesurfer_orig/bin/asegstatsdiff freesurfer/bin/asegstatsdiff
+--- freesurfer_orig/bin/asegstatsdiff	2021-07-19 16:15:35.479244000 +0200
++++ freesurfer/bin/asegstatsdiff	2021-07-23 14:50:46.795250044 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ set subject1=$1
+ set subject2=$2
+diff -rupN freesurfer_orig/bin/bblabel freesurfer/bin/bblabel
+--- freesurfer_orig/bin/bblabel	2021-07-19 16:15:28.457602000 +0200
++++ freesurfer/bin/bblabel	2021-07-23 14:50:46.943673984 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # bblabel
+diff -rupN freesurfer_orig/bin/bbmask freesurfer/bin/bbmask
+--- freesurfer_orig/bin/bbmask	2021-07-19 16:15:31.653820000 +0200
++++ freesurfer/bin/bbmask	2021-07-23 14:50:46.987275953 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # bbmask
+ 
+ set VERSION = 'bbmask 7.1.1';
+diff -rupN freesurfer_orig/bin/bbregister freesurfer/bin/bbregister
+--- freesurfer_orig/bin/bbregister	2021-07-19 16:15:28.618864000 +0200
++++ freesurfer/bin/bbregister	2021-07-23 14:50:47.095692558 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # bbregister
+diff -rupN freesurfer_orig/bin/beta2sxa freesurfer/bin/beta2sxa
+--- freesurfer_orig/bin/beta2sxa	2021-07-19 16:15:27.705715000 +0200
++++ freesurfer/bin/beta2sxa	2021-07-23 14:50:47.175143757 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # thalseg
+ 
+ set VERSION = 'beta2sxa 7.1.1';
+diff -rupN freesurfer_orig/bin/biasfield freesurfer/bin/biasfield
+--- freesurfer_orig/bin/biasfield	2021-07-19 16:15:26.121294000 +0200
++++ freesurfer/bin/biasfield	2021-07-23 14:50:47.308101972 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # biasfield
+diff -rupN freesurfer_orig/bin/bmedits2surf freesurfer/bin/bmedits2surf
+--- freesurfer_orig/bin/bmedits2surf	2021-07-19 16:15:26.020516000 +0200
++++ freesurfer/bin/bmedits2surf	2021-07-23 14:50:47.355064523 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # bmedits2surf
+ 
+ set VERSION = 'bmedits2surf 7.1.1';
+diff -rupN freesurfer_orig/bin/bugr freesurfer/bin/bugr
+--- freesurfer_orig/bin/bugr	2021-07-19 16:15:27.679933000 +0200
++++ freesurfer/bin/bugr	2021-07-23 14:50:47.451209003 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # bugr
+diff -rupN freesurfer_orig/bin/build_desikan_killiany_gcs.csh freesurfer/bin/build_desikan_killiany_gcs.csh
+--- freesurfer_orig/bin/build_desikan_killiany_gcs.csh	2021-07-19 16:15:27.610278000 +0200
++++ freesurfer/bin/build_desikan_killiany_gcs.csh	2021-07-23 14:50:47.470307732 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ # For building a new morph-based cortical parcellation 
+ # atlas for each hemisphere
+diff -rupN freesurfer_orig/bin/cblumwmgyri freesurfer/bin/cblumwmgyri
+--- freesurfer_orig/bin/cblumwmgyri	2021-07-19 16:15:30.077810000 +0200
++++ freesurfer/bin/cblumwmgyri	2021-07-23 14:50:47.585600562 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # cblumwmgyri
+ 
+ set VERSION = 'cblumwmgyri 7.1.1';
+diff -rupN freesurfer_orig/bin/checkMCR.sh freesurfer/bin/checkMCR.sh
+--- freesurfer_orig/bin/checkMCR.sh	2021-07-19 16:15:33.107343000 +0200
++++ freesurfer/bin/checkMCR.sh	2021-07-23 14:50:47.658979870 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # Eugenio: note that when I used v80, I used to look for libdctprocess.so, 
+ # but not I look for libmwlaunchermain.so instead (which is not present in v80)
+diff -rupN freesurfer_orig/bin/clear_fs_env.csh freesurfer/bin/clear_fs_env.csh
+--- freesurfer_orig/bin/clear_fs_env.csh	2021-07-19 16:15:31.964443000 +0200
++++ freesurfer/bin/clear_fs_env.csh	2021-07-23 14:50:47.747409632 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # clear_fs_env.csh
+diff -rupN freesurfer_orig/bin/compute_interrater_variability.csh freesurfer/bin/compute_interrater_variability.csh
+--- freesurfer_orig/bin/compute_interrater_variability.csh	2021-07-19 16:15:27.589771000 +0200
++++ freesurfer/bin/compute_interrater_variability.csh	2021-07-23 14:50:47.782594580 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # compute_interrater_variability
+ #
+diff -rupN freesurfer_orig/bin/compute_label_vals.csh freesurfer/bin/compute_label_vals.csh
+--- freesurfer_orig/bin/compute_label_vals.csh	2021-07-19 16:15:27.286264000 +0200
++++ freesurfer/bin/compute_label_vals.csh	2021-07-23 14:50:47.820909109 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ if (! $?base) then
+   echo must set base to point to $SUBJECTS_DIR/$subject
+diff -rupN freesurfer_orig/bin/compute_label_volumes.csh freesurfer/bin/compute_label_volumes.csh
+--- freesurfer_orig/bin/compute_label_volumes.csh	2021-07-19 16:15:29.981511000 +0200
++++ freesurfer/bin/compute_label_volumes.csh	2021-07-23 14:50:47.882493164 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # compute_all_label_volumes
+ #
+diff -rupN freesurfer_orig/bin/conf2hires freesurfer/bin/conf2hires
+--- freesurfer_orig/bin/conf2hires	2021-07-19 16:15:27.976113000 +0200
++++ freesurfer/bin/conf2hires	2021-07-23 14:50:48.057220000 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # conf2hires - sources
+ if(-e $FREESURFER_HOME/sources.csh) then
+   source $FREESURFER_HOME/sources.csh
+diff -rupN freesurfer_orig/bin/cp-dicom freesurfer/bin/cp-dicom
+--- freesurfer_orig/bin/cp-dicom	2021-07-19 16:15:29.617719000 +0200
++++ freesurfer/bin/cp-dicom	2021-07-23 14:50:48.240344117 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # cp-dicom
+diff -rupN freesurfer_orig/bin/dcmdir-info-mgh freesurfer/bin/dcmdir-info-mgh
+--- freesurfer_orig/bin/dcmdir-info-mgh	2021-07-19 16:15:27.495402000 +0200
++++ freesurfer/bin/dcmdir-info-mgh	2021-07-23 14:50:48.461284892 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # dcmdir-info-mgh
+diff -rupN freesurfer_orig/bin/dcmsplit freesurfer/bin/dcmsplit
+--- freesurfer_orig/bin/dcmsplit	2021-07-19 16:15:34.093464000 +0200
++++ freesurfer/bin/dcmsplit	2021-07-23 14:50:48.689023441 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # dcmsplit
+ 
+ if(-e $FREESURFER_HOME/sources.csh) then
+diff -rupN freesurfer_orig/bin/dcmunpack freesurfer/bin/dcmunpack
+--- freesurfer_orig/bin/dcmunpack	2021-07-19 16:15:29.814252000 +0200
++++ freesurfer/bin/dcmunpack	2021-07-23 14:50:48.807431402 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # dcmunpack
+ # 
+ 
+diff -rupN freesurfer_orig/bin/deface_subject freesurfer/bin/deface_subject
+--- freesurfer_orig/bin/deface_subject	2021-07-19 16:15:27.780270000 +0200
++++ freesurfer/bin/deface_subject	2021-07-23 14:50:48.885605717 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # deface_subject
+diff -rupN freesurfer_orig/bin/defect2seg freesurfer/bin/defect2seg
+--- freesurfer_orig/bin/defect2seg	2021-07-19 16:15:34.253547000 +0200
++++ freesurfer/bin/defect2seg	2021-07-23 14:50:48.911318371 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # defect2seg - sources
+ if(-e $FREESURFER_HOME/sources.csh) then
+   source $FREESURFER_HOME/sources.csh
+diff -rupN freesurfer_orig/bin/dt_recon freesurfer/bin/dt_recon
+--- freesurfer_orig/bin/dt_recon	2021-07-19 16:15:29.979021000 +0200
++++ freesurfer/bin/dt_recon	2021-07-23 14:50:51.547412692 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ #
+ umask 002;
+ 
+diff -rupN freesurfer_orig/bin/epidewarp.fsl freesurfer/bin/epidewarp.fsl
+--- freesurfer_orig/bin/epidewarp.fsl	2021-07-19 16:15:35.256304000 +0200
++++ freesurfer/bin/epidewarp.fsl	2021-07-23 14:50:51.598635768 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # epidewarp.fsl
+diff -rupN freesurfer_orig/bin/feat2segstats freesurfer/bin/feat2segstats
+--- freesurfer_orig/bin/feat2segstats	2021-07-19 16:15:33.520695000 +0200
++++ freesurfer/bin/feat2segstats	2021-07-23 14:50:51.916349456 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # feat2segstats
+diff -rupN freesurfer_orig/bin/feat2surf freesurfer/bin/feat2surf
+--- freesurfer_orig/bin/feat2surf	2021-07-19 16:15:28.367723000 +0200
++++ freesurfer/bin/feat2surf	2021-07-23 14:50:51.959964274 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # reg-feat2anat
+diff -rupN freesurfer_orig/bin/fix_subject freesurfer/bin/fix_subject
+--- freesurfer_orig/bin/fix_subject	2021-07-19 16:15:28.354162000 +0200
++++ freesurfer/bin/fix_subject	2021-07-23 14:50:52.078305105 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # fix_subject
+diff -rupN freesurfer_orig/bin/fix_subject-lh freesurfer/bin/fix_subject-lh
+--- freesurfer_orig/bin/fix_subject-lh	2021-07-19 16:15:31.390420000 +0200
++++ freesurfer/bin/fix_subject-lh	2021-07-23 14:50:52.252285999 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # fix_subject-lh
+diff -rupN freesurfer_orig/bin/fix_subject-rh freesurfer/bin/fix_subject-rh
+--- freesurfer_orig/bin/fix_subject-rh	2021-07-19 16:15:28.368744000 +0200
++++ freesurfer/bin/fix_subject-rh	2021-07-23 14:50:52.344126103 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # fix_subject-rh
+diff -rupN freesurfer_orig/bin/fix_subject_corrected freesurfer/bin/fix_subject_corrected
+--- freesurfer_orig/bin/fix_subject_corrected	2021-07-19 16:15:28.848044000 +0200
++++ freesurfer/bin/fix_subject_corrected	2021-07-23 14:50:52.112804231 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # fix_subject_corrected
+diff -rupN freesurfer_orig/bin/fix_subject_corrected-lh freesurfer/bin/fix_subject_corrected-lh
+--- freesurfer_orig/bin/fix_subject_corrected-lh	2021-07-19 16:15:28.684875000 +0200
++++ freesurfer/bin/fix_subject_corrected-lh	2021-07-23 14:50:52.137486431 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # fix_subject_corrected-lh
+diff -rupN freesurfer_orig/bin/fix_subject_corrected-rh freesurfer/bin/fix_subject_corrected-rh
+--- freesurfer_orig/bin/fix_subject_corrected-rh	2021-07-19 16:15:26.971475000 +0200
++++ freesurfer/bin/fix_subject_corrected-rh	2021-07-23 14:50:52.176553563 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # fix_subject_corrected-rh
+diff -rupN freesurfer_orig/bin/fix_subject_on_seychelles freesurfer/bin/fix_subject_on_seychelles
+--- freesurfer_orig/bin/fix_subject_on_seychelles	2021-07-19 16:15:33.781877000 +0200
++++ freesurfer/bin/fix_subject_on_seychelles	2021-07-23 14:50:52.299766162 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # fix_subject_on_seychelles
+diff -rupN freesurfer_orig/bin/fixup_mni_paths freesurfer/bin/fixup_mni_paths
+--- freesurfer_orig/bin/fixup_mni_paths	2021-07-19 16:15:35.257744000 +0200
++++ freesurfer/bin/fixup_mni_paths	2021-07-23 14:50:52.384079059 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh
++#!/usr/bin/env/tcsh
+ 
+ # fixup_mni_paths
+ #
+diff -rupN freesurfer_orig/bin/fs_time freesurfer/bin/fs_time
+--- freesurfer_orig/bin/fs_time	2021-07-19 16:15:30.090598000 +0200
++++ freesurfer/bin/fs_time	2021-07-23 14:50:54.570450912 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # fs_time
+ 
+ # Check whether FS_TIME_ALLOW exists, if not assume it is ok
+diff -rupN freesurfer_orig/bin/fscalc freesurfer/bin/fscalc
+--- freesurfer_orig/bin/fscalc	2021-07-19 16:15:28.875617000 +0200
++++ freesurfer/bin/fscalc	2021-07-23 14:50:52.872411067 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # fscalc
+ 
+ set VERSION = 'fscalc 7.1.1';
+diff -rupN freesurfer_orig/bin/fscalc.fsl freesurfer/bin/fscalc.fsl
+--- freesurfer_orig/bin/fscalc.fsl	2021-07-19 16:15:30.549368000 +0200
++++ freesurfer/bin/fscalc.fsl	2021-07-23 14:50:52.923206083 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ #
+ # This is a utility that extends fslmaths so that an format that can
+ # be read/written by freesurfer can be used. It operates in the same
+diff -rupN freesurfer_orig/bin/fsdcmdecompress freesurfer/bin/fsdcmdecompress
+--- freesurfer_orig/bin/fsdcmdecompress	2021-07-19 16:15:28.334386000 +0200
++++ freesurfer/bin/fsdcmdecompress	2021-07-23 14:50:52.952701050 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # fsdcmdecompress - sources
+ if(-e $FREESURFER_HOME/sources.csh) then
+   source $FREESURFER_HOME/sources.csh
+diff -rupN freesurfer_orig/bin/fsfirst.fsl freesurfer/bin/fsfirst.fsl
+--- freesurfer_orig/bin/fsfirst.fsl	2021-07-19 16:15:25.745863000 +0200
++++ freesurfer/bin/fsfirst.fsl	2021-07-23 14:50:53.053145016 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # fsfirst.fsl
+ 
+ if(-e $FREESURFER_HOME/sources.csh) then
+diff -rupN freesurfer_orig/bin/fsl_rigid_register freesurfer/bin/fsl_rigid_register
+--- freesurfer_orig/bin/fsl_rigid_register	2021-07-19 16:15:32.098858000 +0200
++++ freesurfer/bin/fsl_rigid_register	2021-07-23 14:50:53.650866663 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # fsl_rigid_register
+diff -rupN freesurfer_orig/bin/fslregister freesurfer/bin/fslregister
+--- freesurfer_orig/bin/fslregister	2021-07-19 16:15:30.757795000 +0200
++++ freesurfer/bin/fslregister	2021-07-23 14:50:53.601680203 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # fslregister
+diff -rupN freesurfer_orig/bin/fsr-checkxopts freesurfer/bin/fsr-checkxopts
+--- freesurfer_orig/bin/fsr-checkxopts	2021-07-19 16:15:34.474820000 +0200
++++ freesurfer/bin/fsr-checkxopts	2021-07-23 14:50:53.939906286 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # fsr-checkxopts
+diff -rupN freesurfer_orig/bin/fsr-coreg freesurfer/bin/fsr-coreg
+--- freesurfer_orig/bin/fsr-coreg	2021-07-19 16:15:29.733098000 +0200
++++ freesurfer/bin/fsr-coreg	2021-07-23 14:50:54.069050346 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # fsr-coreg 
+ 
+ #  In theory, it would be better to resample all modes into an
+diff -rupN freesurfer_orig/bin/fsr-getxopts freesurfer/bin/fsr-getxopts
+--- freesurfer_orig/bin/fsr-getxopts	2021-07-19 16:15:34.327402000 +0200
++++ freesurfer/bin/fsr-getxopts	2021-07-23 14:50:54.124321037 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # fsr-getxopts
+diff -rupN freesurfer_orig/bin/fsr-import freesurfer/bin/fsr-import
+--- freesurfer_orig/bin/fsr-import	2021-07-19 16:15:29.837494000 +0200
++++ freesurfer/bin/fsr-import	2021-07-23 14:50:54.215418759 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # fsr-import
+ 
+ if(-e $FREESURFER_HOME/sources.csh) then
+diff -rupN freesurfer_orig/bin/fvcompare freesurfer/bin/fvcompare
+--- freesurfer_orig/bin/fvcompare	2021-07-19 16:15:28.820973000 +0200
++++ freesurfer/bin/fvcompare	2021-07-23 14:50:54.730760526 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # fvcompare
+ 
+ set VERSION = 'fvcompare 7.1.1';
+diff -rupN freesurfer_orig/bin/gca-apply freesurfer/bin/gca-apply
+--- freesurfer_orig/bin/gca-apply	2021-07-19 16:15:33.825117000 +0200
++++ freesurfer/bin/gca-apply	2021-07-23 14:50:54.846865779 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # gca-apply
+ 
+ set VERSION = 'gca-apply 7.1.1';
+diff -rupN freesurfer_orig/bin/gcainit freesurfer/bin/gcainit
+--- freesurfer_orig/bin/gcainit	2021-07-19 16:15:27.360665000 +0200
++++ freesurfer/bin/gcainit	2021-07-23 14:50:54.876976738 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # gcainit
+ 
+ set VERSION = 'gcainit 7.1.1';
+diff -rupN freesurfer_orig/bin/gcaprepone freesurfer/bin/gcaprepone
+--- freesurfer_orig/bin/gcaprepone	2021-07-19 16:15:25.321792000 +0200
++++ freesurfer/bin/gcaprepone	2021-07-23 14:50:54.958160704 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # gcaprepone
+ 
+ set VERSION = 'gcaprepone 7.1.1';
+diff -rupN freesurfer_orig/bin/gcatrain freesurfer/bin/gcatrain
+--- freesurfer_orig/bin/gcatrain	2021-07-19 16:15:26.003679000 +0200
++++ freesurfer/bin/gcatrain	2021-07-23 14:50:55.027433286 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # gcatrain
+ 
+ set VERSION = 'gcatrain 7.1.1';
+diff -rupN freesurfer_orig/bin/gcatrainskull freesurfer/bin/gcatrainskull
+--- freesurfer_orig/bin/gcatrainskull	2021-07-19 16:15:25.858987000 +0200
++++ freesurfer/bin/gcatrainskull	2021-07-23 14:50:55.182043319 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # gcatrainskull
+ if(-e $FREESURFER_HOME/sources.csh) then
+   source $FREESURFER_HOME/sources.csh
+diff -rupN freesurfer_orig/bin/get_label_thickness freesurfer/bin/get_label_thickness
+--- freesurfer_orig/bin/get_label_thickness	2021-07-19 16:15:31.211503000 +0200
++++ freesurfer/bin/get_label_thickness	2021-07-23 14:50:55.326332405 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ # script to get the thickness values for the vertices found in a label file.
+ # inputs:  label file and ascii thickness file
+diff -rupN freesurfer_orig/bin/getfullpath freesurfer/bin/getfullpath
+--- freesurfer_orig/bin/getfullpath	2021-07-19 16:15:35.712927000 +0200
++++ freesurfer/bin/getfullpath	2021-07-23 14:50:55.314506362 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # getfullpath
+diff -rupN freesurfer_orig/bin/grad_unwarp freesurfer/bin/grad_unwarp
+--- freesurfer_orig/bin/grad_unwarp	2021-07-19 16:15:34.546213000 +0200
++++ freesurfer/bin/grad_unwarp	2021-07-23 14:50:55.411958697 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # grad_unwarp - convert, unwarp, and resample dicom files
+diff -rupN freesurfer_orig/bin/groupstats freesurfer/bin/groupstats
+--- freesurfer_orig/bin/groupstats	2021-07-19 16:15:30.702697000 +0200
++++ freesurfer/bin/groupstats	2021-07-23 14:50:55.449923605 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # groupstats
+ 
+ set VERSION = 'groupstats 7.1.1';
+diff -rupN freesurfer_orig/bin/groupstatsdiff freesurfer/bin/groupstatsdiff
+--- freesurfer_orig/bin/groupstatsdiff	2021-07-19 16:15:28.262329000 +0200
++++ freesurfer/bin/groupstatsdiff	2021-07-23 14:50:55.514476310 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # groupstatsdiff
+ 
+ set VERSION = 'groupstatsdiff 7.1.1';
+diff -rupN freesurfer_orig/bin/gtmseg freesurfer/bin/gtmseg
+--- freesurfer_orig/bin/gtmseg	2021-07-19 16:15:33.513788000 +0200
++++ freesurfer/bin/gtmseg	2021-07-23 14:50:55.577776961 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # gtmseg
+ 
+ set VERSION = 'gtmseg 7.1.1';
+diff -rupN freesurfer_orig/bin/help_xml_validate freesurfer/bin/help_xml_validate
+--- freesurfer_orig/bin/help_xml_validate	2021-07-19 16:15:26.567279000 +0200
++++ freesurfer/bin/help_xml_validate	2021-07-23 14:50:55.631046255 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ # $srcdir is defined in make check runtime environment
+ set SRCDIR=$PWD
+diff -rupN freesurfer_orig/bin/inflate_subject freesurfer/bin/inflate_subject
+--- freesurfer_orig/bin/inflate_subject	2021-07-19 16:15:33.629827000 +0200
++++ freesurfer/bin/inflate_subject	2021-07-23 14:50:56.509731355 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # inflate_subject
+diff -rupN freesurfer_orig/bin/inflate_subject-lh freesurfer/bin/inflate_subject-lh
+--- freesurfer_orig/bin/inflate_subject-lh	2021-07-19 16:15:34.087333000 +0200
++++ freesurfer/bin/inflate_subject-lh	2021-07-23 14:50:56.623485959 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # inflate_subject-lh
+diff -rupN freesurfer_orig/bin/inflate_subject-rh freesurfer/bin/inflate_subject-rh
+--- freesurfer_orig/bin/inflate_subject-rh	2021-07-19 16:15:33.943148000 +0200
++++ freesurfer/bin/inflate_subject-rh	2021-07-23 14:50:56.749722709 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # inflate_subject-rh
+diff -rupN freesurfer_orig/bin/inflate_subject3 freesurfer/bin/inflate_subject3
+--- freesurfer_orig/bin/inflate_subject3	2021-07-19 16:15:28.332383000 +0200
++++ freesurfer/bin/inflate_subject3	2021-07-23 14:50:56.548158595 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # inflate_subject3
+diff -rupN freesurfer_orig/bin/inflate_subject_new freesurfer/bin/inflate_subject_new
+--- freesurfer_orig/bin/inflate_subject_new	2021-07-19 16:15:31.809629000 +0200
++++ freesurfer/bin/inflate_subject_new	2021-07-23 14:50:56.645331559 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh
++#!/usr/bin/env/tcsh
+ 
+ #
+ # inflate_subject_new
+diff -rupN freesurfer_orig/bin/inflate_subject_new-lh freesurfer/bin/inflate_subject_new-lh
+--- freesurfer_orig/bin/inflate_subject_new-lh	2021-07-19 16:15:35.108256000 +0200
++++ freesurfer/bin/inflate_subject_new-lh	2021-07-23 14:50:56.656695360 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh
++#!/usr/bin/env/tcsh
+ 
+ #
+ # inflate_subject_new-lh
+diff -rupN freesurfer_orig/bin/inflate_subject_new-rh freesurfer/bin/inflate_subject_new-rh
+--- freesurfer_orig/bin/inflate_subject_new-rh	2021-07-19 16:15:28.085971000 +0200
++++ freesurfer/bin/inflate_subject_new-rh	2021-07-23 14:50:56.684402991 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # inflate_subject_new-rh
+diff -rupN freesurfer_orig/bin/inflate_subject_sc freesurfer/bin/inflate_subject_sc
+--- freesurfer_orig/bin/inflate_subject_sc	2021-07-19 16:15:25.323969000 +0200
++++ freesurfer/bin/inflate_subject_sc	2021-07-23 14:50:56.773650206 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # inflate_subject_sc
+diff -rupN freesurfer_orig/bin/isanalyze freesurfer/bin/isanalyze
+--- freesurfer_orig/bin/isanalyze	2021-07-19 16:15:30.894352000 +0200
++++ freesurfer/bin/isanalyze	2021-07-23 14:50:56.911543529 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # isanalyze - checks whether the passed file is an analyze file
+diff -rupN freesurfer_orig/bin/isnifti freesurfer/bin/isnifti
+--- freesurfer_orig/bin/isnifti	2021-07-19 16:15:28.315723000 +0200
++++ freesurfer/bin/isnifti	2021-07-23 14:50:56.935006434 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # isnifti - checks whether the passed file is a nifti file
+diff -rupN freesurfer_orig/bin/isolate_labels.csh freesurfer/bin/isolate_labels.csh
+--- freesurfer_orig/bin/isolate_labels.csh	2021-07-19 16:15:26.911908000 +0200
++++ freesurfer/bin/isolate_labels.csh	2021-07-23 14:50:56.965275264 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # isolate_labels
+ #
+diff -rupN freesurfer_orig/bin/isolate_labels_keeporigval.csh freesurfer/bin/isolate_labels_keeporigval.csh
+--- freesurfer_orig/bin/isolate_labels_keeporigval.csh	2021-07-19 16:15:34.276615000 +0200
++++ freesurfer/bin/isolate_labels_keeporigval.csh	2021-07-23 14:50:56.986146210 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # isolate_labels
+ #
+diff -rupN freesurfer_orig/bin/jkgcatrain freesurfer/bin/jkgcatrain
+--- freesurfer_orig/bin/jkgcatrain	2021-07-19 16:15:26.683257000 +0200
++++ freesurfer/bin/jkgcatrain	2021-07-23 14:50:57.051301038 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # jkgcatrain
+ 
+ set VERSION = 'jkgcatrain 7.1.1';
+diff -rupN freesurfer_orig/bin/label_child freesurfer/bin/label_child
+--- freesurfer_orig/bin/label_child	2021-07-19 16:15:31.443192000 +0200
++++ freesurfer/bin/label_child	2021-07-23 14:50:57.297633555 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # label_child
+diff -rupN freesurfer_orig/bin/label_elderly_subject freesurfer/bin/label_elderly_subject
+--- freesurfer_orig/bin/label_elderly_subject	2021-07-19 16:15:27.186840000 +0200
++++ freesurfer/bin/label_elderly_subject	2021-07-23 14:50:57.326928461 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # label_elderly_subject
+diff -rupN freesurfer_orig/bin/label_subject freesurfer/bin/label_subject
+--- freesurfer_orig/bin/label_subject	2021-07-19 16:15:27.561797000 +0200
++++ freesurfer/bin/label_subject	2021-07-23 14:50:57.398373271 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # label_subject
+diff -rupN freesurfer_orig/bin/label_subject_flash freesurfer/bin/label_subject_flash
+--- freesurfer_orig/bin/label_subject_flash	2021-07-19 16:15:31.210280000 +0200
++++ freesurfer/bin/label_subject_flash	2021-07-23 14:50:57.409536822 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # label_subject_flash
+diff -rupN freesurfer_orig/bin/label_subject_mixed freesurfer/bin/label_subject_mixed
+--- freesurfer_orig/bin/label_subject_mixed	2021-07-19 16:15:27.124724000 +0200
++++ freesurfer/bin/label_subject_mixed	2021-07-23 14:50:57.421549076 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # label_subject_mixed
+diff -rupN freesurfer_orig/bin/labels_disjoint freesurfer/bin/labels_disjoint
+--- freesurfer_orig/bin/labels_disjoint	2021-07-19 16:15:28.264200000 +0200
++++ freesurfer/bin/labels_disjoint	2021-07-23 14:50:57.356059827 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # set echo=1
+ 
+diff -rupN freesurfer_orig/bin/labels_intersect freesurfer/bin/labels_intersect
+--- freesurfer_orig/bin/labels_intersect	2021-07-19 16:15:35.152425000 +0200
++++ freesurfer/bin/labels_intersect	2021-07-23 14:50:57.385996197 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # set echo=1
+ 
+diff -rupN freesurfer_orig/bin/labels_union freesurfer/bin/labels_union
+--- freesurfer_orig/bin/labels_union	2021-07-19 16:15:33.766705000 +0200
++++ freesurfer/bin/labels_union	2021-07-23 14:50:57.449780079 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # set echo=1
+ 
+diff -rupN freesurfer_orig/bin/long_create_base_sigma freesurfer/bin/long_create_base_sigma
+--- freesurfer_orig/bin/long_create_base_sigma	2021-07-19 16:15:28.720270000 +0200
++++ freesurfer/bin/long_create_base_sigma	2021-07-23 14:50:57.530196931 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ #
+ # long_create_base_sigma
+ #
+diff -rupN freesurfer_orig/bin/long_create_orig freesurfer/bin/long_create_orig
+--- freesurfer_orig/bin/long_create_orig	2021-07-19 16:15:30.146821000 +0200
++++ freesurfer/bin/long_create_orig	2021-07-23 14:50:57.569077963 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ #
+ # long_create_orig
+ #
+diff -rupN freesurfer_orig/bin/longmc freesurfer/bin/longmc
+--- freesurfer_orig/bin/longmc	2021-07-19 16:15:33.316562000 +0200
++++ freesurfer/bin/longmc	2021-07-23 14:50:57.611237297 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # longmc - sources
+ if(-e $FREESURFER_HOME/sources.csh) then
+   source $FREESURFER_HOME/sources.csh
+diff -rupN freesurfer_orig/bin/lpcregister freesurfer/bin/lpcregister
+--- freesurfer_orig/bin/lpcregister	2021-07-19 16:15:34.755805000 +0200
++++ freesurfer/bin/lpcregister	2021-07-23 14:50:57.773420988 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # lpcregister
+diff -rupN freesurfer_orig/bin/make-segvol-table freesurfer/bin/make-segvol-table
+--- freesurfer_orig/bin/make-segvol-table	2021-07-19 16:15:31.870922000 +0200
++++ freesurfer/bin/make-segvol-table	2021-07-23 14:50:58.504661921 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # make-segvol-table - creates a table of volumes of subcortical
+diff -rupN freesurfer_orig/bin/make_average_subcort freesurfer/bin/make_average_subcort
+--- freesurfer_orig/bin/make_average_subcort	2021-07-19 16:15:29.177411000 +0200
++++ freesurfer/bin/make_average_subcort	2021-07-23 14:50:57.997996795 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # thalseg
+ 
+ set VERSION = 'make_average_subcort 7.1.1';
+diff -rupN freesurfer_orig/bin/make_average_subject freesurfer/bin/make_average_subject
+--- freesurfer_orig/bin/make_average_subject	2021-07-19 16:15:27.472411000 +0200
++++ freesurfer/bin/make_average_subject	2021-07-23 14:50:58.046744743 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # make_average_subject
+diff -rupN freesurfer_orig/bin/make_average_surface freesurfer/bin/make_average_surface
+--- freesurfer_orig/bin/make_average_surface	2021-07-19 16:15:26.037036000 +0200
++++ freesurfer/bin/make_average_surface	2021-07-23 14:50:58.192458404 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # make_average_surface
+diff -rupN freesurfer_orig/bin/make_average_volume freesurfer/bin/make_average_volume
+--- freesurfer_orig/bin/make_average_volume	2021-07-19 16:15:29.566939000 +0200
++++ freesurfer/bin/make_average_volume	2021-07-23 14:50:58.312748792 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # make_average_volume
+diff -rupN freesurfer_orig/bin/make_cortex_label freesurfer/bin/make_cortex_label
+--- freesurfer_orig/bin/make_cortex_label	2021-07-19 16:15:34.328543000 +0200
++++ freesurfer/bin/make_cortex_label	2021-07-23 14:50:58.393793907 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # make_cortex_label
+diff -rupN freesurfer_orig/bin/make_exvivo_filled freesurfer/bin/make_exvivo_filled
+--- freesurfer_orig/bin/make_exvivo_filled	2021-07-19 16:15:35.553332000 +0200
++++ freesurfer/bin/make_exvivo_filled	2021-07-23 14:50:58.414364212 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ # usage: make_exvivo_filled <subject name> <input samseg> <input intensity vol>
+ 
+ set echo=1
+diff -rupN freesurfer_orig/bin/make_folding_atlas freesurfer/bin/make_folding_atlas
+--- freesurfer_orig/bin/make_folding_atlas	2021-07-19 16:15:32.839573000 +0200
++++ freesurfer/bin/make_folding_atlas	2021-07-23 14:50:58.450395163 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # make_folding_atlas
+ 
+ set VERSION = 'make_folding_atlas 7.1.1';
+diff -rupN freesurfer_orig/bin/map_all_labels freesurfer/bin/map_all_labels
+--- freesurfer_orig/bin/map_all_labels	2021-07-19 16:15:35.934960000 +0200
++++ freesurfer/bin/map_all_labels	2021-07-23 14:50:58.664778284 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # map_all_labels
+diff -rupN freesurfer_orig/bin/map_all_labels-lh freesurfer/bin/map_all_labels-lh
+--- freesurfer_orig/bin/map_all_labels-lh	2021-07-19 16:15:30.148733000 +0200
++++ freesurfer/bin/map_all_labels-lh	2021-07-23 14:50:58.675135141 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # map_all_labels-lh
+diff -rupN freesurfer_orig/bin/map_central_sulcus freesurfer/bin/map_central_sulcus
+--- freesurfer_orig/bin/map_central_sulcus	2021-07-19 16:15:28.236692000 +0200
++++ freesurfer/bin/map_central_sulcus	2021-07-23 14:50:58.691161530 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # map_central_sulcus
+diff -rupN freesurfer_orig/bin/meanval freesurfer/bin/meanval
+--- freesurfer_orig/bin/meanval	2021-07-19 16:15:36.135593000 +0200
++++ freesurfer/bin/meanval	2021-07-23 14:50:58.993518261 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # meanval
+ 
+ set VERSION = 'meanval 7.1.1';
+diff -rupN freesurfer_orig/bin/mergeseg freesurfer/bin/mergeseg
+--- freesurfer_orig/bin/mergeseg	2021-07-19 16:15:29.413569000 +0200
++++ freesurfer/bin/mergeseg	2021-07-23 14:50:59.005974017 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # mergeseg
+ 
+ set VERSION = 'mergeseg 7.1.1';
+diff -rupN freesurfer_orig/bin/minc2seqinfo freesurfer/bin/minc2seqinfo
+--- freesurfer_orig/bin/minc2seqinfo	2021-07-19 16:15:26.332096000 +0200
++++ freesurfer/bin/minc2seqinfo	2021-07-23 14:50:59.045002429 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ #
+ # Name: minc2seqinfo
+ #
+diff -rupN freesurfer_orig/bin/mkheadsurf freesurfer/bin/mkheadsurf
+--- freesurfer_orig/bin/mkheadsurf	2021-07-19 16:15:30.194202000 +0200
++++ freesurfer/bin/mkheadsurf	2021-07-23 14:50:59.128999225 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mkheadsurf
+diff -rupN freesurfer_orig/bin/mksubjdirs freesurfer/bin/mksubjdirs
+--- freesurfer_orig/bin/mksubjdirs	2021-07-19 16:15:32.960168000 +0200
++++ freesurfer/bin/mksubjdirs	2021-07-23 14:50:59.173948388 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mksubjdirs
+diff -rupN freesurfer_orig/bin/mni152reg freesurfer/bin/mni152reg
+--- freesurfer_orig/bin/mni152reg	2021-07-19 16:15:33.426323000 +0200
++++ freesurfer/bin/mni152reg	2021-07-23 14:50:59.325669011 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # mni152reg
+ 
+ set VERSION = 'mni152reg 7.1.1';
+diff -rupN freesurfer_orig/bin/morph_only_subject freesurfer/bin/morph_only_subject
+--- freesurfer_orig/bin/morph_only_subject	2021-07-19 16:15:35.943532000 +0200
++++ freesurfer/bin/morph_only_subject	2021-07-23 14:50:59.353593943 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # morph_only_subject
+diff -rupN freesurfer_orig/bin/morph_only_subject-lh freesurfer/bin/morph_only_subject-lh
+--- freesurfer_orig/bin/morph_only_subject-lh	2021-07-19 16:15:27.434827000 +0200
++++ freesurfer/bin/morph_only_subject-lh	2021-07-23 14:50:59.370482704 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # morph_only_subject-lh
+diff -rupN freesurfer_orig/bin/morph_only_subject-rh freesurfer/bin/morph_only_subject-rh
+--- freesurfer_orig/bin/morph_only_subject-rh	2021-07-19 16:15:27.612297000 +0200
++++ freesurfer/bin/morph_only_subject-rh	2021-07-23 14:50:59.382776929 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # morph_only_subject-rh
+diff -rupN freesurfer_orig/bin/morph_rgb-lh freesurfer/bin/morph_rgb-lh
+--- freesurfer_orig/bin/morph_rgb-lh	2021-07-19 16:15:33.629014000 +0200
++++ freesurfer/bin/morph_rgb-lh	2021-07-23 14:50:59.393844149 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # morph_rgb-lh
+diff -rupN freesurfer_orig/bin/morph_rgb-rh freesurfer/bin/morph_rgb-rh
+--- freesurfer_orig/bin/morph_rgb-rh	2021-07-19 16:15:34.839761000 +0200
++++ freesurfer/bin/morph_rgb-rh	2021-07-23 14:50:59.429670640 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # morph_rgb-rh
+diff -rupN freesurfer_orig/bin/morph_subject freesurfer/bin/morph_subject
+--- freesurfer_orig/bin/morph_subject	2021-07-19 16:15:26.424545000 +0200
++++ freesurfer/bin/morph_subject	2021-07-23 14:50:59.439771486 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # morph_subject
+diff -rupN freesurfer_orig/bin/morph_subject-lh freesurfer/bin/morph_subject-lh
+--- freesurfer_orig/bin/morph_subject-lh	2021-07-19 16:15:28.780176000 +0200
++++ freesurfer/bin/morph_subject-lh	2021-07-23 14:50:59.459022527 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # morph_subject-lh
+diff -rupN freesurfer_orig/bin/morph_subject-rh freesurfer/bin/morph_subject-rh
+--- freesurfer_orig/bin/morph_subject-rh	2021-07-19 16:15:27.496693000 +0200
++++ freesurfer/bin/morph_subject-rh	2021-07-23 14:50:59.486277266 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # morph_subject-rh
+diff -rupN freesurfer_orig/bin/morph_subject_on_seychelles freesurfer/bin/morph_subject_on_seychelles
+--- freesurfer_orig/bin/morph_subject_on_seychelles	2021-07-19 16:15:36.136283000 +0200
++++ freesurfer/bin/morph_subject_on_seychelles	2021-07-23 14:50:59.469465945 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # morph_subject_on_seychelles
+diff -rupN freesurfer_orig/bin/morph_tables-lh freesurfer/bin/morph_tables-lh
+--- freesurfer_orig/bin/morph_tables-lh	2021-07-19 16:15:28.408541000 +0200
++++ freesurfer/bin/morph_tables-lh	2021-07-23 14:50:59.497741928 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # morph_tables-lh
+diff -rupN freesurfer_orig/bin/morph_tables-rh freesurfer/bin/morph_tables-rh
+--- freesurfer_orig/bin/morph_tables-rh	2021-07-19 16:15:35.005660000 +0200
++++ freesurfer/bin/morph_tables-rh	2021-07-23 14:50:59.514816960 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # morph_tables-rh
+diff -rupN freesurfer_orig/bin/mpr2mni305 freesurfer/bin/mpr2mni305
+--- freesurfer_orig/bin/mpr2mni305	2021-07-19 16:15:34.275146000 +0200
++++ freesurfer/bin/mpr2mni305	2021-07-23 14:50:59.549781617 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # Register an image to an average subject  which 
+ # itself has been registered to the MNI average_305 subject.
+diff -rupN freesurfer_orig/bin/mri-func2sph freesurfer/bin/mri-func2sph
+--- freesurfer_orig/bin/mri-func2sph	2021-07-19 16:15:25.632373000 +0200
++++ freesurfer/bin/mri-func2sph	2021-07-23 14:51:05.894428405 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mri-func2sph
+diff -rupN freesurfer_orig/bin/mri-funcvits freesurfer/bin/mri-funcvits
+--- freesurfer_orig/bin/mri-funcvits	2021-07-19 16:15:33.377507000 +0200
++++ freesurfer/bin/mri-funcvits	2021-07-23 14:51:05.950374359 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mri-funcvits
+diff -rupN freesurfer_orig/bin/mri-sph2surf freesurfer/bin/mri-sph2surf
+--- freesurfer_orig/bin/mri-sph2surf	2021-07-19 16:15:33.159462000 +0200
++++ freesurfer/bin/mri-sph2surf	2021-07-23 14:51:22.497609126 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mri-sph2surf
+diff -rupN freesurfer_orig/bin/mri_add_new_tp freesurfer/bin/mri_add_new_tp
+--- freesurfer_orig/bin/mri_add_new_tp	2021-07-19 16:15:25.681634000 +0200
++++ freesurfer/bin/mri_add_new_tp	2021-07-23 14:50:59.586477741 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mri_add_new_tp
+diff -rupN freesurfer_orig/bin/mri_align_long.csh freesurfer/bin/mri_align_long.csh
+--- freesurfer_orig/bin/mri_align_long.csh	2021-07-19 16:15:33.780622000 +0200
++++ freesurfer/bin/mri_align_long.csh	2021-07-23 14:50:59.716840695 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mri_align_long.csh
+diff -rupN freesurfer_orig/bin/mri_create_t2combined freesurfer/bin/mri_create_t2combined
+--- freesurfer_orig/bin/mri_create_t2combined	2021-07-19 16:15:36.026533000 +0200
++++ freesurfer/bin/mri_create_t2combined	2021-07-23 14:51:03.510269682 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ set bin=mri_create_t2combined
+ 
+diff -rupN freesurfer_orig/bin/mri_cvs_check freesurfer/bin/mri_cvs_check
+--- freesurfer_orig/bin/mri_cvs_check	2021-07-19 16:15:35.245023000 +0200
++++ freesurfer/bin/mri_cvs_check	2021-07-23 14:51:03.671224878 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ 
+ # mri_cvs_check
+diff -rupN freesurfer_orig/bin/mri_cvs_data_copy freesurfer/bin/mri_cvs_data_copy
+--- freesurfer_orig/bin/mri_cvs_data_copy	2021-07-19 16:15:26.266426000 +0200
++++ freesurfer/bin/mri_cvs_data_copy	2021-07-23 14:51:03.688126399 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ 
+ # mri_cvs_data_copy
+diff -rupN freesurfer_orig/bin/mri_cvs_register freesurfer/bin/mri_cvs_register
+--- freesurfer_orig/bin/mri_cvs_register	2021-07-19 16:15:35.511311000 +0200
++++ freesurfer/bin/mri_cvs_register	2021-07-23 14:51:03.722517175 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ 
+ # mri_cvs_register
+diff -rupN freesurfer_orig/bin/mri_glmfit-sim freesurfer/bin/mri_glmfit-sim
+--- freesurfer_orig/bin/mri_glmfit-sim	2021-07-19 16:15:31.769458000 +0200
++++ freesurfer/bin/mri_glmfit-sim	2021-07-23 14:51:06.671768036 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ set VERSION = 'mri_glmfit-sim 7.1.1';
+ setenv LANG en_US.UTF-8
+ 
+diff -rupN freesurfer_orig/bin/mri_mergelabels freesurfer/bin/mri_mergelabels
+--- freesurfer_orig/bin/mri_mergelabels	2021-07-19 16:15:33.114345000 +0200
++++ freesurfer/bin/mri_mergelabels	2021-07-23 14:51:09.349889730 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mri_mergelabels
+diff -rupN freesurfer_orig/bin/mri_motion_correct.fsl freesurfer/bin/mri_motion_correct.fsl
+--- freesurfer_orig/bin/mri_motion_correct.fsl	2021-07-19 16:15:36.238002000 +0200
++++ freesurfer/bin/mri_motion_correct.fsl	2021-07-23 14:51:09.716917327 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mri_motion_correct.fsl
+diff -rupN freesurfer_orig/bin/mri_motion_correct2 freesurfer/bin/mri_motion_correct2
+--- freesurfer_orig/bin/mri_motion_correct2	2021-07-19 16:15:28.087524000 +0200
++++ freesurfer/bin/mri_motion_correct2	2021-07-23 14:51:09.677644764 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mri_motion_correct2
+diff -rupN freesurfer_orig/bin/mri_nu_correct.mni freesurfer/bin/mri_nu_correct.mni
+--- freesurfer_orig/bin/mri_nu_correct.mni	2021-07-19 16:15:28.409705000 +0200
++++ freesurfer/bin/mri_nu_correct.mni	2021-07-23 14:51:10.356590467 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mri_nu_correct.mni
+diff -rupN freesurfer_orig/bin/mri_reorient_LR.csh freesurfer/bin/mri_reorient_LR.csh
+--- freesurfer_orig/bin/mri_reorient_LR.csh	2021-07-19 16:15:35.050505000 +0200
++++ freesurfer/bin/mri_reorient_LR.csh	2021-07-23 14:51:12.215453857 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # mri_reorient_LR
+ #
+diff -rupN freesurfer_orig/bin/mris_compute_lgi freesurfer/bin/mris_compute_lgi
+--- freesurfer_orig/bin/mris_compute_lgi	2021-07-19 16:15:27.578748000 +0200
++++ freesurfer/bin/mris_compute_lgi	2021-07-23 14:51:14.704682203 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mris_compute_lgi
+diff -rupN freesurfer_orig/bin/mris_preproc freesurfer/bin/mris_preproc
+--- freesurfer_orig/bin/mris_preproc	2021-07-19 16:15:30.028505000 +0200
++++ freesurfer/bin/mris_preproc	2021-07-23 14:51:22.995374109 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mris_preproc
+diff -rupN freesurfer_orig/bin/mris_volsmooth freesurfer/bin/mris_volsmooth
+--- freesurfer_orig/bin/mris_volsmooth	2021-07-19 16:15:34.269201000 +0200
++++ freesurfer/bin/mris_volsmooth	2021-07-23 14:51:28.821262717 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # mris_volsmooth
+diff -rupN freesurfer_orig/bin/ms_refine_subject freesurfer/bin/ms_refine_subject
+--- freesurfer_orig/bin/ms_refine_subject	2021-07-19 16:15:28.346976000 +0200
++++ freesurfer/bin/ms_refine_subject	2021-07-23 14:51:31.267555077 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # ms_refine_subject
+diff -rupN freesurfer_orig/bin/orientLAS freesurfer/bin/orientLAS
+--- freesurfer_orig/bin/orientLAS	2021-07-19 16:15:32.158238000 +0200
++++ freesurfer/bin/orientLAS	2021-07-23 14:51:31.499503611 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ #
+ # orientLAS
+ #
+diff -rupN freesurfer_orig/bin/parc_atlas_jackknife_test freesurfer/bin/parc_atlas_jackknife_test
+--- freesurfer_orig/bin/parc_atlas_jackknife_test	2021-07-19 16:15:33.261580000 +0200
++++ freesurfer/bin/parc_atlas_jackknife_test	2021-07-23 14:51:31.556605479 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # parc_atlas_jackknife_test
+@@ -291,7 +291,7 @@ foreach test_subj ($ALL_SUBJECTS)
+             if (-e ${sphere_reg}) rm -f ${sphere_reg}
+             if ($PBS) then
+                 set cmdf=(${WD}/${hemi}.${test_subj}${reg_append}.cmd)
+-                echo "#! /bin/tcsh -ef" > ${cmdf}
++                echo "#!/usr/bin/env/tcsh -ef" > ${cmdf}
+                 echo "limit filesize 10megabytes" >> ${cmdf}
+                 echo "${cmd} |& tee -a ${LF}" >> ${cmdf}
+                 chmod a+x ${cmdf}
+diff -rupN freesurfer_orig/bin/pctsurfcon freesurfer/bin/pctsurfcon
+--- freesurfer_orig/bin/pctsurfcon	2021-07-19 16:15:30.730392000 +0200
++++ freesurfer/bin/pctsurfcon	2021-07-23 14:51:31.607526685 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # pctsurfcon
+diff -rupN freesurfer_orig/bin/polyorder freesurfer/bin/polyorder
+--- freesurfer_orig/bin/polyorder	2021-07-19 16:15:31.768138000 +0200
++++ freesurfer/bin/polyorder	2021-07-23 14:51:31.662307344 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # polyorder
+ 
+ set VERSION = 'polyorder 7.1.1';
+diff -rupN freesurfer_orig/bin/print_unique_labels.csh freesurfer/bin/print_unique_labels.csh
+--- freesurfer_orig/bin/print_unique_labels.csh	2021-07-19 16:15:27.276209000 +0200
++++ freesurfer/bin/print_unique_labels.csh	2021-07-23 14:51:31.699361030 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # print_unique_labels
+ #
+diff -rupN freesurfer_orig/bin/rbbr freesurfer/bin/rbbr
+--- freesurfer_orig/bin/rbbr	2021-07-19 16:15:30.391650000 +0200
++++ freesurfer/bin/rbbr	2021-07-23 14:51:32.307991381 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # rbbr
+ 
+ set VERSION = 'rbbr 7.1.1';
+diff -rupN freesurfer_orig/bin/rca-base-init freesurfer/bin/rca-base-init
+--- freesurfer_orig/bin/rca-base-init	2021-07-19 16:15:28.048787000 +0200
++++ freesurfer/bin/rca-base-init	2021-07-23 14:51:32.380255596 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # rca-base-init - initialize base subject for recon-all processing. Mostly, code was just
+ # cut out of recon-all, so there are some things that look funny (eg, DoCreateBaseSubj is
+ # explicitly set to 1 and checked eventhough that is what this script does). I wanted
+diff -rupN freesurfer_orig/bin/rca-long-tp-init freesurfer/bin/rca-long-tp-init
+--- freesurfer_orig/bin/rca-long-tp-init	2021-07-19 16:15:32.045465000 +0200
++++ freesurfer/bin/rca-long-tp-init	2021-07-23 14:51:32.419266823 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # rca-long-tp-init - initialize long timepoint subject for recon-all
+ # processing. Mostly, code was just cut out of recon-all, so there are
+diff -rupN freesurfer_orig/bin/rcbf-prep freesurfer/bin/rcbf-prep
+--- freesurfer_orig/bin/rcbf-prep	2021-07-19 16:15:27.427677000 +0200
++++ freesurfer/bin/rcbf-prep	2021-07-23 14:51:32.496490215 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # rcbf-prep
+ 
+ set VERSION = 'rcbf-prep 7.1.1';
+diff -rupN freesurfer_orig/bin/rebuild_gca_atlas.csh freesurfer/bin/rebuild_gca_atlas.csh
+--- freesurfer_orig/bin/rebuild_gca_atlas.csh	2021-07-19 16:15:29.970526000 +0200
++++ freesurfer/bin/rebuild_gca_atlas.csh	2021-07-23 14:51:32.542222513 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # rebuild_gca_atlas.csh
+diff -rupN freesurfer_orig/bin/recon-all freesurfer/bin/recon-all
+--- freesurfer_orig/bin/recon-all	2021-07-19 16:15:27.112107000 +0200
++++ freesurfer/bin/recon-all	2021-07-23 14:51:32.632753238 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # recon-all
+diff -rupN freesurfer_orig/bin/recon-all-exvivo freesurfer/bin/recon-all-exvivo
+--- freesurfer_orig/bin/recon-all-exvivo	2021-07-19 16:15:26.162046000 +0200
++++ freesurfer/bin/recon-all-exvivo	2021-07-23 14:51:32.739961427 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ 
+ set inputargs = ($argv);
+diff -rupN freesurfer_orig/bin/reg-feat2anat freesurfer/bin/reg-feat2anat
+--- freesurfer_orig/bin/reg-feat2anat	2021-07-19 16:15:29.240094000 +0200
++++ freesurfer/bin/reg-feat2anat	2021-07-23 14:51:32.878670649 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # reg-feat2anat
+diff -rupN freesurfer_orig/bin/reg2subject freesurfer/bin/reg2subject
+--- freesurfer_orig/bin/reg2subject	2021-07-19 16:15:27.230038000 +0200
++++ freesurfer/bin/reg2subject	2021-07-23 14:51:32.815649454 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # reg2subject
+ 
+ set VERSION = 'reg2subject 7.1.1';
+diff -rupN freesurfer_orig/bin/register.csh freesurfer/bin/register.csh
+--- freesurfer_orig/bin/register.csh	2021-07-19 16:15:33.767468000 +0200
++++ freesurfer/bin/register.csh	2021-07-23 14:51:32.934334640 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # register.csh
+diff -rupN freesurfer_orig/bin/register_child freesurfer/bin/register_child
+--- freesurfer_orig/bin/register_child	2021-07-19 16:15:26.780472000 +0200
++++ freesurfer/bin/register_child	2021-07-23 14:51:32.917911557 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # register_child
+diff -rupN freesurfer_orig/bin/register_elderly_subject freesurfer/bin/register_elderly_subject
+--- freesurfer_orig/bin/register_elderly_subject	2021-07-19 16:15:30.237329000 +0200
++++ freesurfer/bin/register_elderly_subject	2021-07-23 14:51:32.953411942 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # register_elderly_subject
+diff -rupN freesurfer_orig/bin/register_subject freesurfer/bin/register_subject
+--- freesurfer_orig/bin/register_subject	2021-07-19 16:15:33.783182000 +0200
++++ freesurfer/bin/register_subject	2021-07-23 14:51:32.969633915 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # register_subject
+diff -rupN freesurfer_orig/bin/register_subject_flash freesurfer/bin/register_subject_flash
+--- freesurfer_orig/bin/register_subject_flash	2021-07-19 16:15:30.222970000 +0200
++++ freesurfer/bin/register_subject_flash	2021-07-23 14:51:32.981301743 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # register_subject_flash
+diff -rupN freesurfer_orig/bin/register_subject_mixed freesurfer/bin/register_subject_mixed
+--- freesurfer_orig/bin/register_subject_mixed	2021-07-19 16:15:28.276797000 +0200
++++ freesurfer/bin/register_subject_mixed	2021-07-23 14:51:32.992526110 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # register_subject_mixed
+diff -rupN freesurfer_orig/bin/reinflate_subject freesurfer/bin/reinflate_subject
+--- freesurfer_orig/bin/reinflate_subject	2021-07-19 16:15:30.583129000 +0200
++++ freesurfer/bin/reinflate_subject	2021-07-23 14:51:33.011572072 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # reinflate_subject
+diff -rupN freesurfer_orig/bin/reinflate_subject-lh freesurfer/bin/reinflate_subject-lh
+--- freesurfer_orig/bin/reinflate_subject-lh	2021-07-19 16:15:33.155431000 +0200
++++ freesurfer/bin/reinflate_subject-lh	2021-07-23 14:51:33.016788279 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # reinflate_subject-lh
+diff -rupN freesurfer_orig/bin/reinflate_subject-rh freesurfer/bin/reinflate_subject-rh
+--- freesurfer_orig/bin/reinflate_subject-rh	2021-07-19 16:15:33.389761000 +0200
++++ freesurfer/bin/reinflate_subject-rh	2021-07-23 14:51:33.035587620 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # reinflate_subject-rh
+diff -rupN freesurfer_orig/bin/remove_talairach freesurfer/bin/remove_talairach
+--- freesurfer_orig/bin/remove_talairach	2021-07-19 16:15:25.860599000 +0200
++++ freesurfer/bin/remove_talairach	2021-07-23 14:51:33.109451700 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # remove_talairach
+diff -rupN freesurfer_orig/bin/renormalize_T1_subject freesurfer/bin/renormalize_T1_subject
+--- freesurfer_orig/bin/renormalize_T1_subject	2021-07-19 16:15:29.113826000 +0200
++++ freesurfer/bin/renormalize_T1_subject	2021-07-23 14:51:33.239153783 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # renormalize_T1_subject
+diff -rupN freesurfer_orig/bin/renormalize_subject freesurfer/bin/renormalize_subject
+--- freesurfer_orig/bin/renormalize_subject	2021-07-19 16:15:25.520921000 +0200
++++ freesurfer/bin/renormalize_subject	2021-07-23 14:51:33.181963567 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # renormalize_subject
+diff -rupN freesurfer_orig/bin/renormalize_subject_keep_editting freesurfer/bin/renormalize_subject_keep_editting
+--- freesurfer_orig/bin/renormalize_subject_keep_editting	2021-07-19 16:15:26.338287000 +0200
++++ freesurfer/bin/renormalize_subject_keep_editting	2021-07-23 14:51:33.199920395 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # renormalize_subject_keep_editting
+diff -rupN freesurfer_orig/bin/reregister_subject_mixed freesurfer/bin/reregister_subject_mixed
+--- freesurfer_orig/bin/reregister_subject_mixed	2021-07-19 16:15:32.678261000 +0200
++++ freesurfer/bin/reregister_subject_mixed	2021-07-23 14:51:33.314912660 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # reregister_subject_mixed
+diff -rupN freesurfer_orig/bin/rtview freesurfer/bin/rtview
+--- freesurfer_orig/bin/rtview	2021-07-19 16:15:32.225438000 +0200
++++ freesurfer/bin/rtview	2021-07-23 14:51:33.330561450 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # rtview
+ 
+ set VERSION = 'rtview 7.1.1';
+diff -rupN freesurfer_orig/bin/run-qdec-glm freesurfer/bin/run-qdec-glm
+--- freesurfer_orig/bin/run-qdec-glm	2021-07-19 16:15:25.497320000 +0200
++++ freesurfer/bin/run-qdec-glm	2021-07-23 14:51:33.389031441 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # run-qdec-glm
+diff -rupN freesurfer_orig/bin/run_mris_preproc freesurfer/bin/run_mris_preproc
+--- freesurfer_orig/bin/run_mris_preproc	2021-07-19 16:15:28.778771000 +0200
++++ freesurfer/bin/run_mris_preproc	2021-07-23 14:51:33.343212181 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # Script to create a cache of the preprocessed files needed by qdec.
+diff -rupN freesurfer_orig/bin/samseg freesurfer/bin/samseg
+--- freesurfer_orig/bin/samseg	2021-07-19 16:15:29.370516000 +0200
++++ freesurfer/bin/samseg	2021-07-23 14:51:33.615742849 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # samseg
+ 
+ set VERSION = 'samseg 7.1.1';
+diff -rupN freesurfer_orig/bin/samseg-long freesurfer/bin/samseg-long
+--- freesurfer_orig/bin/samseg-long	2021-07-19 16:15:34.096267000 +0200
++++ freesurfer/bin/samseg-long	2021-07-23 14:51:33.725551496 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # samseg-long - sources
+ if(-e $FREESURFER_HOME/sources.csh) then
+   source $FREESURFER_HOME/sources.csh
+diff -rupN freesurfer_orig/bin/samseg2recon freesurfer/bin/samseg2recon
+--- freesurfer_orig/bin/samseg2recon	2021-07-19 16:15:27.889841000 +0200
++++ freesurfer/bin/samseg2recon	2021-07-23 14:51:33.675127082 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ #
+ # samseg2recon - create and populate a subjects dir in a way that
+ # recon-all can be run on it.
+diff -rupN freesurfer_orig/bin/seg2filled freesurfer/bin/seg2filled
+--- freesurfer_orig/bin/seg2filled	2021-07-19 16:15:27.721140000 +0200
++++ freesurfer/bin/seg2filled	2021-07-23 14:51:33.855629720 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # seg2filled - creates a filled.mgz from an aseg-style
+ # segmentation. The original intent is to use a SAMSEG segmentation to
+diff -rupN freesurfer_orig/bin/segmentBS.sh freesurfer/bin/segmentBS.sh
+--- freesurfer_orig/bin/segmentBS.sh	2021-07-19 16:15:31.819964000 +0200
++++ freesurfer/bin/segmentBS.sh	2021-07-23 14:51:33.889030649 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ set tcsh61706 = (`tcsh --version | grep "6\.17\.06"`)
+ if ("$tcsh61706" != "") then
+diff -rupN freesurfer_orig/bin/segmentHA_T1.sh freesurfer/bin/segmentHA_T1.sh
+--- freesurfer_orig/bin/segmentHA_T1.sh	2021-07-19 16:15:26.853402000 +0200
++++ freesurfer/bin/segmentHA_T1.sh	2021-07-23 14:51:33.962202677 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ set tcsh61706 = (`tcsh --version | grep "6\.17\.06"`)
+ if ("$tcsh61706" != "") then
+diff -rupN freesurfer_orig/bin/segmentHA_T1_long.sh freesurfer/bin/segmentHA_T1_long.sh
+--- freesurfer_orig/bin/segmentHA_T1_long.sh	2021-07-19 16:15:29.807362000 +0200
++++ freesurfer/bin/segmentHA_T1_long.sh	2021-07-23 14:51:33.937732007 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ set tcsh61706 = (`tcsh --version | grep "6\.17\.06"`)
+ if ("$tcsh61706" != "") then
+diff -rupN freesurfer_orig/bin/segmentHA_T2.sh freesurfer/bin/segmentHA_T2.sh
+--- freesurfer_orig/bin/segmentHA_T2.sh	2021-07-19 16:15:27.613750000 +0200
++++ freesurfer/bin/segmentHA_T2.sh	2021-07-23 14:51:34.024551600 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ set tcsh61706 = (`tcsh --version | grep "6\.17\.06"`)
+ if ("$tcsh61706" != "") then
+diff -rupN freesurfer_orig/bin/segmentThalamicNuclei.sh freesurfer/bin/segmentThalamicNuclei.sh
+--- freesurfer_orig/bin/segmentThalamicNuclei.sh	2021-07-19 16:15:29.384484000 +0200
++++ freesurfer/bin/segmentThalamicNuclei.sh	2021-07-23 14:51:35.594184370 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ set tcsh61706 = (`tcsh --version | grep "6\.17\.06"`)
+ if ("$tcsh61706" != "") then
+diff -rupN freesurfer_orig/bin/segment_monkey freesurfer/bin/segment_monkey
+--- freesurfer_orig/bin/segment_monkey	2021-07-19 16:15:31.634965000 +0200
++++ freesurfer/bin/segment_monkey	2021-07-23 14:51:34.055493141 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # segment_monkey
+diff -rupN freesurfer_orig/bin/segment_subject freesurfer/bin/segment_subject
+--- freesurfer_orig/bin/segment_subject	2021-07-19 16:15:26.789513000 +0200
++++ freesurfer/bin/segment_subject	2021-07-23 14:51:34.284000324 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # segment_subject
+diff -rupN freesurfer_orig/bin/segment_subject_notal freesurfer/bin/segment_subject_notal
+--- freesurfer_orig/bin/segment_subject_notal	2021-07-19 16:15:30.736798000 +0200
++++ freesurfer/bin/segment_subject_notal	2021-07-23 14:51:34.534758641 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # segment_subject_notal
+diff -rupN freesurfer_orig/bin/segment_subject_notal2 freesurfer/bin/segment_subject_notal2
+--- freesurfer_orig/bin/segment_subject_notal2	2021-07-19 16:15:29.206953000 +0200
++++ freesurfer/bin/segment_subject_notal2	2021-07-23 14:51:34.564843049 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # segment_subject_notal2
+diff -rupN freesurfer_orig/bin/segment_subject_old_skull_strip freesurfer/bin/segment_subject_old_skull_strip
+--- freesurfer_orig/bin/segment_subject_old_skull_strip	2021-07-19 16:15:33.628104000 +0200
++++ freesurfer/bin/segment_subject_old_skull_strip	2021-07-23 14:51:34.574829391 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # segment_subject_old_skull_strip
+diff -rupN freesurfer_orig/bin/segment_subject_sc freesurfer/bin/segment_subject_sc
+--- freesurfer_orig/bin/segment_subject_sc	2021-07-19 16:15:33.875674000 +0200
++++ freesurfer/bin/segment_subject_sc	2021-07-23 14:51:34.586423789 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # segment_subject_sc
+diff -rupN freesurfer_orig/bin/segment_subject_talmgh freesurfer/bin/segment_subject_talmgh
+--- freesurfer_orig/bin/segment_subject_talmgh	2021-07-19 16:15:27.611041000 +0200
++++ freesurfer/bin/segment_subject_talmgh	2021-07-23 14:51:35.322086104 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # segment_subject_talmgh
+diff -rupN freesurfer_orig/bin/segpons freesurfer/bin/segpons
+--- freesurfer_orig/bin/segpons	2021-07-19 16:15:28.897587000 +0200
++++ freesurfer/bin/segpons	2021-07-23 14:51:35.629212544 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # segpons
+ 
+ set VERSION = 'segpons 7.1.1';
+diff -rupN freesurfer_orig/bin/setlabelstat freesurfer/bin/setlabelstat
+--- freesurfer_orig/bin/setlabelstat	2021-07-19 16:15:35.247531000 +0200
++++ freesurfer/bin/setlabelstat	2021-07-23 14:51:35.666509616 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # setlabelstat
+diff -rupN freesurfer_orig/bin/sfa2fieldsign freesurfer/bin/sfa2fieldsign
+--- freesurfer_orig/bin/sfa2fieldsign	2021-07-19 16:15:29.615560000 +0200
++++ freesurfer/bin/sfa2fieldsign	2021-07-23 14:51:35.721448355 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # sfa2fieldsign
+ setenv FSLOUTPUTTYPE NIFTI
+ 
+diff -rupN freesurfer_orig/bin/show_tal freesurfer/bin/show_tal
+--- freesurfer_orig/bin/show_tal	2021-07-19 16:15:35.885699000 +0200
++++ freesurfer/bin/show_tal	2021-07-23 14:51:35.748574683 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh
++#!/usr/bin/env/tcsh
+ 
+ #
+ # show_tal
+diff -rupN freesurfer_orig/bin/skip_long_make_checks freesurfer/bin/skip_long_make_checks
+--- freesurfer_orig/bin/skip_long_make_checks	2021-07-19 16:15:35.246581000 +0200
++++ freesurfer/bin/skip_long_make_checks	2021-07-23 14:51:35.787365530 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ # if these are defined, then make check skips these long tests:
+ setenv SKIP_MRI_APARC2ASEG_TEST 1
+ setenv SKIP_MRIS_EXPAND_TEST 1
+diff -rupN freesurfer_orig/bin/sphere_subject freesurfer/bin/sphere_subject
+--- freesurfer_orig/bin/sphere_subject	2021-07-19 16:15:28.277824000 +0200
++++ freesurfer/bin/sphere_subject	2021-07-23 14:51:35.916491950 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # sphere_subject
+diff -rupN freesurfer_orig/bin/sphere_subject-lh freesurfer/bin/sphere_subject-lh
+--- freesurfer_orig/bin/sphere_subject-lh	2021-07-19 16:15:26.419359000 +0200
++++ freesurfer/bin/sphere_subject-lh	2021-07-23 14:51:35.939838406 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # sphere_subject-lh
+diff -rupN freesurfer_orig/bin/sphere_subject-rh freesurfer/bin/sphere_subject-rh
+--- freesurfer_orig/bin/sphere_subject-rh	2021-07-19 16:15:34.260395000 +0200
++++ freesurfer/bin/sphere_subject-rh	2021-07-23 14:51:35.957177242 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # sphere_subject-rh
+diff -rupN freesurfer_orig/bin/spmmat2register freesurfer/bin/spmmat2register
+--- freesurfer_orig/bin/spmmat2register	2021-07-19 16:15:29.828714000 +0200
++++ freesurfer/bin/spmmat2register	2021-07-23 14:51:36.055551823 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # spmmat2register
+diff -rupN freesurfer_orig/bin/spmregister freesurfer/bin/spmregister
+--- freesurfer_orig/bin/spmregister	2021-07-19 16:15:28.846723000 +0200
++++ freesurfer/bin/spmregister	2021-07-23 14:51:36.111244334 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # spmregister
+diff -rupN freesurfer_orig/bin/sratio freesurfer/bin/sratio
+--- freesurfer_orig/bin/sratio	2021-07-19 16:15:31.142948000 +0200
++++ freesurfer/bin/sratio	2021-07-23 14:51:36.195103037 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # sratio - signed ratio
+ #   +A/B if A>B
+ #   -B/A if B>A
+diff -rupN freesurfer_orig/bin/surfreg freesurfer/bin/surfreg
+--- freesurfer_orig/bin/surfreg	2021-07-19 16:15:31.883339000 +0200
++++ freesurfer/bin/surfreg	2021-07-23 14:51:36.792543202 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # thalseg
+ 
+ set VERSION = 'surfreg 7.1.1';
+diff -rupN freesurfer_orig/bin/tal_compare freesurfer/bin/tal_compare
+--- freesurfer_orig/bin/tal_compare	2021-07-19 16:15:35.711992000 +0200
++++ freesurfer/bin/tal_compare	2021-07-23 14:51:37.507107759 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh
++#!/usr/bin/env/tcsh
+ 
+ #
+ # tal_compare
+diff -rupN freesurfer_orig/bin/talairach freesurfer/bin/talairach
+--- freesurfer_orig/bin/talairach	2021-07-19 16:15:31.814815000 +0200
++++ freesurfer/bin/talairach	2021-07-23 14:51:37.114201419 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # talairach
+diff -rupN freesurfer_orig/bin/talairach2 freesurfer/bin/talairach2
+--- freesurfer_orig/bin/talairach2	2021-07-19 16:15:34.838489000 +0200
++++ freesurfer/bin/talairach2	2021-07-23 14:51:37.164956485 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # talairach2
+diff -rupN freesurfer_orig/bin/talairach_avi freesurfer/bin/talairach_avi
+--- freesurfer_orig/bin/talairach_avi	2021-07-19 16:15:26.788493000 +0200
++++ freesurfer/bin/talairach_avi	2021-07-23 14:51:37.444161124 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # talairach_avi - align an image to the average_305 MNI (talairach) target
+diff -rupN freesurfer_orig/bin/talairach_mgh freesurfer/bin/talairach_mgh
+--- freesurfer_orig/bin/talairach_mgh	2021-07-19 16:15:27.399940000 +0200
++++ freesurfer/bin/talairach_mgh	2021-07-23 14:51:37.491562848 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ #
+ # talairach_mgh
+diff -rupN freesurfer_orig/bin/talsegprob freesurfer/bin/talsegprob
+--- freesurfer_orig/bin/talsegprob	2021-07-19 16:15:33.962945000 +0200
++++ freesurfer/bin/talsegprob	2021-07-23 14:51:37.623028466 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # talsegprob
+diff -rupN freesurfer_orig/bin/test_recon-all.csh freesurfer/bin/test_recon-all.csh
+--- freesurfer_orig/bin/test_recon-all.csh	2021-07-19 16:15:27.580337000 +0200
++++ freesurfer/bin/test_recon-all.csh	2021-07-23 14:51:37.824344732 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # Name:    test_recon-all.csh
+diff -rupN freesurfer_orig/bin/thickdiffmap freesurfer/bin/thickdiffmap
+--- freesurfer_orig/bin/thickdiffmap	2021-07-19 16:15:27.133033000 +0200
++++ freesurfer/bin/thickdiffmap	2021-07-23 14:51:37.931476980 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -ef
++#!/usr/bin/env/tcsh -ef
+ 
+ if ($#argv < 5) then
+   echo "usage: thickdiffmap <subjscan1> <subjscan2> <commonsubj> <hemi> <step>..."
+diff -rupN freesurfer_orig/bin/tkmeditfv freesurfer/bin/tkmeditfv
+--- freesurfer_orig/bin/tkmeditfv	2021-07-19 16:15:28.201818000 +0200
++++ freesurfer/bin/tkmeditfv	2021-07-23 14:51:38.461792437 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # tkmeditfv
+ 
+ set VERSION = 'tkmeditfv 7.1.1';
+diff -rupN freesurfer_orig/bin/tkregisterfv freesurfer/bin/tkregisterfv
+--- freesurfer_orig/bin/tkregisterfv	2021-07-19 16:15:32.274559000 +0200
++++ freesurfer/bin/tkregisterfv	2021-07-23 14:51:39.060872088 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # tkregisterfv
+ 
+ set VERSION = 'tkregisterfv 7.1.1';
+diff -rupN freesurfer_orig/bin/tksurferfv freesurfer/bin/tksurferfv
+--- freesurfer_orig/bin/tksurferfv	2021-07-19 16:15:25.139920000 +0200
++++ freesurfer/bin/tksurferfv	2021-07-23 14:51:39.440422333 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # tkmeditfv
+ 
+ set VERSION = 'tksurferfv 7.1.1';
+diff -rupN freesurfer_orig/bin/trac-all freesurfer/bin/trac-all
+--- freesurfer_orig/bin/trac-all	2021-07-19 16:15:29.591002000 +0200
++++ freesurfer/bin/trac-all	2021-07-23 14:51:39.483824375 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # trac-all
+diff -rupN freesurfer_orig/bin/trac-paths freesurfer/bin/trac-paths
+--- freesurfer_orig/bin/trac-paths	2021-07-19 16:15:27.471204000 +0200
++++ freesurfer/bin/trac-paths	2021-07-23 14:51:39.518667018 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # trac-paths
+diff -rupN freesurfer_orig/bin/trac-preproc freesurfer/bin/trac-preproc
+--- freesurfer_orig/bin/trac-preproc	2021-07-19 16:15:25.610917000 +0200
++++ freesurfer/bin/trac-preproc	2021-07-23 14:51:39.570452907 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # trac-preproc
+diff -rupN freesurfer_orig/bin/train-gcs-atlas freesurfer/bin/train-gcs-atlas
+--- freesurfer_orig/bin/train-gcs-atlas	2021-07-19 16:15:28.669402000 +0200
++++ freesurfer/bin/train-gcs-atlas	2021-07-23 14:51:39.700855332 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # train-gcs-atlas 
+ 
+ if(-e $FREESURFER_HOME/sources.csh) then
+diff -rupN freesurfer_orig/bin/unpackimadir freesurfer/bin/unpackimadir
+--- freesurfer_orig/bin/unpackimadir	2021-07-19 16:15:28.914437000 +0200
++++ freesurfer/bin/unpackimadir	2021-07-23 14:51:40.025067817 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # unpackimadir
+diff -rupN freesurfer_orig/bin/unpackmincdir freesurfer/bin/unpackmincdir
+--- freesurfer_orig/bin/unpackmincdir	2021-07-19 16:15:28.803083000 +0200
++++ freesurfer/bin/unpackmincdir	2021-07-23 14:51:40.165126363 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # Name: unpackmincdir
+ # Purpose: unpacks the functionals and anatomicals and copies others
+diff -rupN freesurfer_orig/bin/vertexvol freesurfer/bin/vertexvol
+--- freesurfer_orig/bin/vertexvol	2021-07-19 16:15:25.456681000 +0200
++++ freesurfer/bin/vertexvol	2021-07-23 14:51:40.319594236 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ # Copyright © 2011-2015 The General Hospital Corporation (Boston, MA) "MGH"
+ #
+diff -rupN freesurfer_orig/bin/vno_match_check freesurfer/bin/vno_match_check
+--- freesurfer_orig/bin/vno_match_check	2021-07-19 16:15:30.271118000 +0200
++++ freesurfer/bin/vno_match_check	2021-07-23 14:51:40.328061783 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #set echo=1
+ 
+diff -rupN freesurfer_orig/bin/vol2segavg freesurfer/bin/vol2segavg
+--- freesurfer_orig/bin/vol2segavg	2021-07-19 16:15:33.676469000 +0200
++++ freesurfer/bin/vol2segavg	2021-07-23 14:51:40.349574764 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # vol2segavg
+ 
+ set VERSION = 'vol2segavg 7.1.1';
+diff -rupN freesurfer_orig/bin/vol2subfield freesurfer/bin/vol2subfield
+--- freesurfer_orig/bin/vol2subfield	2021-07-19 16:15:35.886959000 +0200
++++ freesurfer/bin/vol2subfield	2021-07-23 14:51:40.373502102 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # vol2subfield - 
+ 
+ if(-e $FREESURFER_HOME/sources.csh) then
+diff -rupN freesurfer_orig/bin/vol2symsurf freesurfer/bin/vol2symsurf
+--- freesurfer_orig/bin/vol2symsurf	2021-07-19 16:15:28.752750000 +0200
++++ freesurfer/bin/vol2symsurf	2021-07-23 14:51:40.394398779 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # vol2symsurf
+ 
+ set VERSION = 'vol2symsurf 7.1.1';
+diff -rupN freesurfer_orig/bin/vsm-smooth freesurfer/bin/vsm-smooth
+--- freesurfer_orig/bin/vsm-smooth	2021-07-19 16:15:30.127002000 +0200
++++ freesurfer/bin/vsm-smooth	2021-07-23 14:51:40.405737516 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # vsm-smooth
+ 
+ set VERSION = 'vsm-smooth 7.1.1';
+diff -rupN freesurfer_orig/bin/wfilemask freesurfer/bin/wfilemask
+--- freesurfer_orig/bin/wfilemask	2021-07-19 16:15:29.648335000 +0200
++++ freesurfer/bin/wfilemask	2021-07-23 14:51:40.426690305 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # wfilemask
+diff -rupN freesurfer_orig/bin/wm-anat-snr freesurfer/bin/wm-anat-snr
+--- freesurfer_orig/bin/wm-anat-snr	2021-07-19 16:15:34.094799000 +0200
++++ freesurfer/bin/wm-anat-snr	2021-07-23 14:51:40.473043255 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ set VERSION = 'wm-anat-snr 7.1.1';
+ set inputargs = ($argv);
+diff -rupN freesurfer_orig/bin/wmedits2surf freesurfer/bin/wmedits2surf
+--- freesurfer_orig/bin/wmedits2surf	2021-07-19 16:15:31.808577000 +0200
++++ freesurfer/bin/wmedits2surf	2021-07-23 14:51:40.491966507 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # wmedits2surf
+ 
+ set VERSION = 'wmedits2surf 7.1.1';
+diff -rupN freesurfer_orig/bin/wmsaseg freesurfer/bin/wmsaseg
+--- freesurfer_orig/bin/wmsaseg	2021-07-19 16:15:26.860775000 +0200
++++ freesurfer/bin/wmsaseg	2021-07-23 14:51:40.526825001 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # wmsaseg
+ 
+ set VERSION = 'wmsaseg 7.1.1';
+diff -rupN freesurfer_orig/bin/xcerebralseg freesurfer/bin/xcerebralseg
+--- freesurfer_orig/bin/xcerebralseg	2021-07-19 16:15:34.267093000 +0200
++++ freesurfer/bin/xcerebralseg	2021-07-23 14:51:40.576279642 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # xcerebralseg
+ 
+ set VERSION = 'xcerebralseg 7.1.1';
+diff -rupN freesurfer_orig/bin/xcorr freesurfer/bin/xcorr
+--- freesurfer_orig/bin/xcorr	2021-07-19 16:15:28.460983000 +0200
++++ freesurfer/bin/xcorr	2021-07-23 14:51:40.624493239 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ # xcorr
+ 
+ set VERSION = 'xcorr 7.1.1';
+diff -rupN freesurfer_orig/bin/xfmrot freesurfer/bin/xfmrot
+--- freesurfer_orig/bin/xfmrot	2021-07-19 16:15:30.581830000 +0200
++++ freesurfer/bin/xfmrot	2021-07-23 14:51:40.654776367 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ if ($#argv < 2 || $#argv > 3) then
+   echo "xfmrot <transform file> <input vector file> [<output vector file>]"
+diff -rupN freesurfer_orig/bin/xhemi-tal freesurfer/bin/xhemi-tal
+--- freesurfer_orig/bin/xhemi-tal	2021-07-19 16:15:29.551823000 +0200
++++ freesurfer/bin/xhemi-tal	2021-07-23 14:51:40.761437425 +0200
+@@ -1,4 +1,4 @@
+-#!/bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # xhemi-tal
+diff -rupN freesurfer_orig/bin/xsanatreg freesurfer/bin/xsanatreg
+--- freesurfer_orig/bin/xsanatreg	2021-07-19 16:15:29.977642000 +0200
++++ freesurfer/bin/xsanatreg	2021-07-23 14:51:40.820524247 +0200
+@@ -1,4 +1,4 @@
+-#! /bin/tcsh -f
++#!/usr/bin/env tcsh
+ 
+ #
+ # xsanatreg 
diff --git a/Golden_Repo/f/FreeSurfer/license_text.txt b/Golden_Repo/f/FreeSurfer/license_text.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0ebf8864bd58d59ee6c86bc78b712c20d4876336
--- /dev/null
+++ b/Golden_Repo/f/FreeSurfer/license_text.txt
@@ -0,0 +1,5 @@
+"""r.deepu@fz-juelich.de
+51392
+ *CsaBFnUlfG0.
+ FSk7cKa1irCLs"""
+
diff --git a/Golden_Repo/g/GStreamer/GStreamer-1.18.6-GCCcore-11.2.0.eb b/Golden_Repo/g/GStreamer/GStreamer-1.18.6-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..f23a11eb14afcd7c73056ea3510b3b823954a180
--- /dev/null
+++ b/Golden_Repo/g/GStreamer/GStreamer-1.18.6-GCCcore-11.2.0.eb
@@ -0,0 +1,74 @@
+easyblock = 'Bundle'
+
+name = 'GStreamer'
+version = '1.18.6'
+
+homepage = 'https://gstreamer.freedesktop.org/'
+description = """GStreamer is a library for constructing graphs of media-handling
+ components. The applications it supports range from simple
+ Ogg/Vorbis playback, audio/video streaming to complex audio
+ (mixing) and video (non-linear editing) processing."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('Meson', '0.58.2'),
+    ('Ninja', '1.10.2'),
+    ('Bison', '3.7.6'),
+    ('flex', '2.6.4'),
+    ('pkg-config', '0.29.2'),
+    ('CMake', '3.21.1', '', SYSTEM),
+    ('GObject-Introspection', '1.68.0'),
+    ('git', '2.33.1', '-nodocs'),
+]
+
+dependencies = [
+    ('zlib', '1.2.11'),
+    ('GMP', '6.2.1'),
+    ('GSL', '2.7'),
+    ('GLib', '2.69.1'),
+    ('GTK+', '3.24.23'),
+    ('libunwind', '1.5.0'),
+    ('gettext', '0.21'),
+]
+
+default_easyblock = 'MesonNinja'
+
+default_component_specs = {
+    'sources': [SOURCELOWER_TAR_XZ],
+    'start_dir': '%(namelower)s-%(version)s',
+}
+
+components = [
+    (name, version, {
+        'source_urls': ['https://gstreamer.freedesktop.org/src/%(namelower)s'],
+        'checksums': ['4ec816010dd4d3a93cf470ad0a6f25315f52b204eb1d71dfa70ab8a1c3bd06e6'],
+        'configopts': "-Dlibdw=disabled ",
+    }),
+    ('GST-plugins-base', '1.18.6', {
+        'source_urls': ['https://gstreamer.freedesktop.org/src/%(namelower)s'],
+        'checksums': ['56a9ff2fe9e6603b9e658cf6897d412a173d2180829fe01e92568549c6bd0f5b'],
+        'preconfigopts': 'export PKG_CONFIG_PATH="%(installdir)s/lib/pkgconfig:${PKG_CONFIG_PATH}" && ',
+    }),
+    ('GST-plugins-good', '1.18.6', {
+        'source_urls': ['https://gstreamer.freedesktop.org/src/%(namelower)s'],
+        'checksums': ['26723ac01fcb360ade1f41d168c7c322d8af4ceb7e55c8c12ed2690d06a76eed'],
+        'preconfigopts': 'export PKG_CONFIG_PATH="%(installdir)s/lib/pkgconfig:${PKG_CONFIG_PATH}" && ',
+    }),
+    ('GST-plugins-bad', '1.18.6', {
+        'source_urls': ['https://gstreamer.freedesktop.org/src/%(namelower)s'],
+        'checksums': ['0b1b50ac6311f0c510248b6cd64d6d3c94369344828baa602db85ded5bc70ec9'],
+        'preconfigopts': 'export PKG_CONFIG_PATH="%(installdir)s/lib/pkgconfig:${PKG_CONFIG_PATH}" && ',
+    }),
+]
+
+modextrapaths = {'PKG_CONFIG_PATH': 'lib/pkgconfig'}
+
+sanity_check_paths = {
+    'files': ['bin/gst-%s-1.0' % x for x in ['discoverer', 'play', 'device-monitor']] +
+             ['lib/libgst%s-1.0.%s' % (x, SHLIB_EXT) for x in ['app', 'audio', 'video']],
+    'dirs': ['include', 'share']
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/g/glog/glog-0.5.0-GCCcore-11.2.0.eb b/Golden_Repo/g/glog/glog-0.5.0-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..842305bc178dab7639685c09899caa0eadea30c8
--- /dev/null
+++ b/Golden_Repo/g/glog/glog-0.5.0-GCCcore-11.2.0.eb
@@ -0,0 +1,33 @@
+easyblock = 'CMakeMake'
+
+name = 'glog'
+version = '0.5.0'
+
+homepage = 'https://github.com/google/glog'
+description = "A C++ implementation of the Google logging module."
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+toolchainopts = {'cstd': 'c++11'}
+
+source_urls = ['https://github.com/google/glog/archive/']
+sources = ['v%(version)s.tar.gz']
+checksums = ['eede71f28371bf39aa69b45de23b329d37214016e2055269b3b5e7cfd40b59f5']
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('CMake', '3.21.1', '', SYSTEM)
+]
+
+dependencies = [
+    ('gflags', '2.2.2'),
+    ('libunwind', '1.5.0'),
+]
+
+configopts = '-DBUILD_SHARED_LIBS=ON '
+
+sanity_check_paths = {
+    'files': ['include/glog/logging.h', 'include/glog/raw_logging.h', 'lib/libglog.%s' % SHLIB_EXT],
+    'dirs': [],
+}
+
+moduleclass = 'devel'
diff --git a/Golden_Repo/g/gnuplot/gnuplot-5.4.2-GCCcore-11.2.0.eb b/Golden_Repo/g/gnuplot/gnuplot-5.4.2-GCCcore-11.2.0.eb
index 7ce183ecb718fc057beac719f8282bdc4b89573f..40bdeea8e9429de241b045252c8c286ffd618c57 100644
--- a/Golden_Repo/g/gnuplot/gnuplot-5.4.2-GCCcore-11.2.0.eb
+++ b/Golden_Repo/g/gnuplot/gnuplot-5.4.2-GCCcore-11.2.0.eb
@@ -29,6 +29,7 @@ dependencies = [
     ('libcerf', '1.17'),
     ('X11', '20210802'),
     ('Qt5', '5.15.2'),
+    ('libreadline', '8.1'),
 ]
 
 preconfigopts = 'autoreconf && '
diff --git a/Golden_Repo/h/HDFView/HDFView-3.1.3-GCCcore-11.2.0.eb b/Golden_Repo/h/HDFView/HDFView-3.1.3-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..883edc6a10b60ebc1a9bfaf73a595c920e411822
--- /dev/null
+++ b/Golden_Repo/h/HDFView/HDFView-3.1.3-GCCcore-11.2.0.eb
@@ -0,0 +1,31 @@
+easyblock = 'Binary'
+
+name = 'HDFView'
+version = '3.1.3'
+
+homepage = 'https://www.hdfgroup.org/downloads/hdfview/'
+description = "HDFView is a visual tool for browsing and editing HDF4 and HDF5 files."
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/HDF-JAVA/hdfview-%(version)s/bin/']
+sources = ['HDFViewApp-%(version)s-centos8_64.tar.gz']
+checksums = ['e60976ba816afc426bc3bc7a151b6f2e208605711e9bc9bf188ef14771faa4c7']
+
+dependencies = [
+    ('Java', '15', '', SYSTEM)
+]
+
+install_cmd = "tar xfvz *.tar.gz && "
+install_cmd += "mkdir %(installdir)s/lib && mkdir %(installdir)s/bin && "
+install_cmd += "cp -a HDFView/lib/app %(installdir)s/lib && "
+install_cmd += "cp -a HDFView/lib/app/hdfview.sh %(installdir)s/bin/HDFView && "
+install_cmd += 'sed -i "s@export JAVABIN=.*@export JAVABIN=$EBROOTJAVA/bin@g" %(installdir)s/bin/HDFView && '
+install_cmd += 'sed -i "s@export INSTALLDIR=.*@export INSTALLDIR=%(installdir)s@g" %(installdir)s/bin/HDFView'
+
+sanity_check_paths = {
+    'files': ['bin/HDFView'],
+    'dirs': ['lib/app'],
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/h/Horovod/Horovod-0.24.3-gomkl-2021b.eb b/Golden_Repo/h/Horovod/Horovod-0.24.3-gomkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..aaf12717171295d1800aacbbccc9eb008a641d3a
--- /dev/null
+++ b/Golden_Repo/h/Horovod/Horovod-0.24.3-gomkl-2021b.eb
@@ -0,0 +1,102 @@
+# on juwels booster, one might to call "export UCX_LOG_LEVEL=FATAL; ebw ...
+easyblock = 'PythonBundle'
+
+name = 'Horovod'
+version = '0.24.3'
+local_tf_version = '2.6.0'
+
+homepage = 'https://github.com/uber/horovod'
+description = "Horovod is a distributed training framework for TensorFlow and PyTorch."
+
+toolchain = {'name': 'gomkl', 'version': '2021b'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('CMake', '3.21.1', '', SYSTEM),
+]
+
+dependencies = [
+    ('CUDA', '11.5', '', True),
+    ('Python', '3.9.6'),
+    ('TensorFlow', local_tf_version, '-CUDA-%(cudaver)s', ('gcccoremkl', '11.2.0-2021.4.0')),
+    ('PyTorch', '1.11', '-CUDA-%(cudaver)s', ('gcccoremkl', '11.2.0-2021.4.0')),
+    ('NCCL', '2.12.7-1', '-CUDA-%(cudaver)s'),
+
+]
+
+use_pip = True
+sanity_pip_check = True
+parallel = 1  # Bug in CMake causes a race condition on horovod_cuda_kernels_generated_cuda_kernels.cu.o.NVCC-depend
+
+# possible vars:
+# HOROVOD_BUILD_ARCH_FLAGS - additional C++ compilation flags to pass in for your build architecture.
+# HOROVOD_CUDA_HOME - path where CUDA include and lib directories can be found.
+# HOROVOD_BUILD_CUDA_CC_LIST - List of compute capabilities to build Horovod CUDA
+# kernels for (example: HOROVOD_BUILD_CUDA_CC_LIST=60,70,75)
+# HOROVOD_ROCM_HOME - path where ROCm include and lib directories can be found.
+# HOROVOD_NCCL_HOME - path where NCCL include and lib directories can be found.
+# HOROVOD_NCCL_INCLUDE - path to NCCL include directory.
+# HOROVOD_NCCL_LIB - path to NCCL lib directory.
+# HOROVOD_NCCL_LINK - {SHARED, STATIC}. Mode to link NCCL library. Defaults to STATIC for CUDA, SHARED for ROCm.
+# HOROVOD_WITH_GLOO - {1}. Require that Horovod is built with Gloo support enabled.
+# HOROVOD_WITHOUT_GLOO - {1}. Skip building with Gloo support.
+# HOROVOD_WITH_MPI - {1}. Require that Horovod is built with MPI support enabled.
+# HOROVOD_WITHOUT_MPI - {1}. Skip building with MPI support.
+# HOROVOD_GPU - {CUDA, ROCM}. Framework to use for GPU operations.
+# HOROVOD_GPU_OPERATIONS - {NCCL, MPI}. Framework to use for GPU tensor allreduce, allgather, and broadcast.
+# HOROVOD_GPU_ALLREDUCE - {NCCL, MPI}. Framework to use for GPU tensor allreduce.
+# HOROVOD_GPU_ALLGATHER - {NCCL, MPI}. Framework to use for GPU tensor allgather.
+# HOROVOD_GPU_BROADCAST - {NCCL, MPI}. Framework to use for GPU tensor broadcast.
+# HOROVOD_ALLOW_MIXED_GPU_IMPL - {1}. Allow Horovod to install with NCCL allreduce and MPI GPU allgather /
+# broadcast. Not recommended due to a possible deadlock.
+# HOROVOD_CPU_OPERATIONS - {MPI, GLOO, CCL}. Framework to use for CPU tensor allreduce, allgather, and broadcast.
+# HOROVOD_CMAKE - path to the CMake binary used to build Gloo (not required when using MPI).
+# HOROVOD_WITH_TENSORFLOW - {1}. Require Horovod to install with TensorFlow support enabled.
+# HOROVOD_WITHOUT_TENSORFLOW - {1}. Skip installing TensorFlow support.
+# HOROVOD_WITH_PYTORCH - {1}. Require Horovod to install with PyTorch support enabled.
+# HOROVOD_WITHOUT_PYTORCH - {1}. Skip installing PyTorch support.
+# HOROVOD_WITH_MXNET - {1}. Require Horovod to install with MXNet support enabled.
+# HOROVOD_WITHOUT_MXNET - {1}. Skip installing MXNet support.
+
+# prebuildopts = 'export LDSHARED="$CC -shared" && '
+# prebuildopts += ' HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITHOUT_PYTORCH=1 HOROVOD_WITHOUT_MXNET=1 '
+# prebuildopts += ' HOROVOD_NCCL_LINK=SHARED HOROVOD_NCCL_HOME=$EBROOTNCCL '
+# prebuildopts += ' HOROVOD_GPU_OPERATIONS=NCCL '
+# prebuildopts += ' HOROVOD_CPU_OPERATIONS=MPI '
+# prebuildopts += ' HOROVOD_GPU_ALLREDUCE=NCCL '
+# prebuildopts += ' HOROVOD_GPU_BROADCAST=NCCL '
+# prebuildopts += ' HOROVOD_WITH_MPI=1 '
+
+
+prebuildopts = 'export LDSHARED="$CC -shared" && '
+prebuildopts += ' HOROVOD_WITH_MPI=1 '
+prebuildopts += ' HOROVOD_CPU_OPERATIONS=MPI '
+prebuildopts += ' HOROVOD_NCCL_LINK=SHARED HOROVOD_GPU_ALLREDUCE=NCCL HOROVOD_NCCL_HOME=$EBROOTNCCL '
+prebuildopts += ' HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITH_PYTORCH=1'
+# prebuildopts += ' NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 \
+#                                -gencode=arch=compute_75,code=sm_75 \
+#                                -gencode=arch=compute_80,code=sm_80 \
+#                                -gencode=arch=compute_86,code=sm_86"'
+
+preinstallopts = prebuildopts
+
+
+exts_default_options = {'source_urls': [PYPI_SOURCE]}
+
+exts_list = [
+    ('horovod', version, {
+        'checksums': ['af24e4b1ed9adaa0db98f6375c023d438f65f116aa80ad5e7a321780362b3e7f'],
+    }),
+]
+
+sanity_check_paths = {
+    'files': ['bin/horovodrun'],
+    'dirs': ['lib/python%(pyshortver)s/site-packages'],
+}
+
+# This makes openmpi work. It's up to the sysadmins to correct me here.
+modextravars = {'HOROVOD_MPI_THREADS_DISABLE': '1'}
+
+modloadmsg = 'Setting HOROVOD_MPI_THREADS_DISABLE=1. '
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-gompi-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-gompi-2021b.eb
index 723941e35aeb47cde3908badb5f1ef068f3a1503..39a64a03e941fc21fddd58b04cdd26f394c5b01d 100644
--- a/Golden_Repo/h/h5py/h5py-3.5.0-gompi-2021b.eb
+++ b/Golden_Repo/h/h5py/h5py-3.5.0-gompi-2021b.eb
@@ -21,6 +21,7 @@ dependencies = [
     ('Python', '3.9.6'),
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('HDF5', '1.12.1'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
@@ -30,6 +31,6 @@ download_dep_fail = True
 # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0
 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install,
 # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency.
-preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
+preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
 
 moduleclass = 'data'
diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-gpsmpi-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-gpsmpi-2021b.eb
index 5c3e5432b0d9f7a68aa39c9eef9eba6f0f43e961..b14e5f3d23def9bda0aa47d1e9429d6ad1237b03 100644
--- a/Golden_Repo/h/h5py/h5py-3.5.0-gpsmpi-2021b.eb
+++ b/Golden_Repo/h/h5py/h5py-3.5.0-gpsmpi-2021b.eb
@@ -21,6 +21,7 @@ dependencies = [
     ('Python', '3.9.6'),
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('HDF5', '1.12.1'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
@@ -30,6 +31,6 @@ download_dep_fail = True
 # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0
 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install,
 # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency.
-preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
+preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
 
 moduleclass = 'data'
diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-iimpi-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-iimpi-2021b.eb
index 02c5d8a326c46c88a532b5aa11ca1f59a46a3473..613db3eba2be60f9cf49fcb9cc41686274282056 100644
--- a/Golden_Repo/h/h5py/h5py-3.5.0-iimpi-2021b.eb
+++ b/Golden_Repo/h/h5py/h5py-3.5.0-iimpi-2021b.eb
@@ -21,6 +21,7 @@ dependencies = [
     ('Python', '3.9.6'),
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('HDF5', '1.12.1'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
@@ -30,6 +31,6 @@ download_dep_fail = True
 # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0
 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install,
 # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency.
-preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
+preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
 
 moduleclass = 'data'
diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-iompi-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-iompi-2021b.eb
index 6b1598ccd6d035fb4af424ccc3c2923a72469a45..9a01255570befae1e2c407ca850009f4654ff03a 100644
--- a/Golden_Repo/h/h5py/h5py-3.5.0-iompi-2021b.eb
+++ b/Golden_Repo/h/h5py/h5py-3.5.0-iompi-2021b.eb
@@ -21,6 +21,7 @@ dependencies = [
     ('Python', '3.9.6'),
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('HDF5', '1.12.1'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
@@ -30,6 +31,6 @@ download_dep_fail = True
 # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0
 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install,
 # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency.
-preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
+preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
 
 moduleclass = 'data'
diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-ipsmpi-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-ipsmpi-2021b.eb
index bc0375e2a4fd33a226260e43b46b5e2435d5398a..8d5f0b5c81e78ea51e4454761942286aa1a23665 100644
--- a/Golden_Repo/h/h5py/h5py-3.5.0-ipsmpi-2021b.eb
+++ b/Golden_Repo/h/h5py/h5py-3.5.0-ipsmpi-2021b.eb
@@ -21,6 +21,7 @@ dependencies = [
     ('Python', '3.9.6'),
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('HDF5', '1.12.1'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
@@ -30,6 +31,6 @@ download_dep_fail = True
 # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0
 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install,
 # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency.
-preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
+preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
 
 moduleclass = 'data'
diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-npsmpic-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-npsmpic-2021b.eb
index fb52a66179a6f713c32a5c1a09f5bdbf37a2d72a..05f9ce4c00ef7629c5578a9de1ff93a1b4d39991 100644
--- a/Golden_Repo/h/h5py/h5py-3.5.0-npsmpic-2021b.eb
+++ b/Golden_Repo/h/h5py/h5py-3.5.0-npsmpic-2021b.eb
@@ -21,6 +21,7 @@ dependencies = [
     ('Python', '3.9.6'),
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('HDF5', '1.12.1'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
@@ -30,7 +31,7 @@ download_dep_fail = True
 # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0
 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install,
 # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency.
-preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
+preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
 preinstallopts += 'CFLAGS="-noswitcherror" '
 
 moduleclass = 'data'
diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-nvompic-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-nvompic-2021b.eb
index 24ff474eadbc8ac44f0c3b1f447f937002312561..5b422172dd59368693b75acca850d11683cfafee 100644
--- a/Golden_Repo/h/h5py/h5py-3.5.0-nvompic-2021b.eb
+++ b/Golden_Repo/h/h5py/h5py-3.5.0-nvompic-2021b.eb
@@ -15,14 +15,13 @@ toolchainopts = {'usempi': True}
 sources = [SOURCE_TAR_GZ]
 checksums = ['77c7be4001ac7d3ed80477de5b6942501d782de1bbe4886597bdfec2a7ab821f']
 
-prebuildopts = 'export CFLAGS="-noswitcherror -D_NPY_NO_DEPRECATIONS" &&'
-
 builddependencies = [('pkgconfig', '1.5.5', '-python')]
 
 dependencies = [
     ('Python', '3.9.6'),
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('HDF5', '1.12.1'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
@@ -32,7 +31,7 @@ download_dep_fail = True
 # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0
 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install,
 # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency.
-preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
+preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 '
 preinstallopts += 'CFLAGS="-noswitcherror" '
 
 moduleclass = 'data'
diff --git a/Golden_Repo/hidden_deps.txt b/Golden_Repo/hidden_deps.txt
index b9b100a41f1d0695be9a905d3ca96b16b0ef93d8..04bc95af051c8bcb5b0a1449f3b26930fee6d411 100644
--- a/Golden_Repo/hidden_deps.txt
+++ b/Golden_Repo/hidden_deps.txt
@@ -31,6 +31,7 @@ GLPK
 GLib
 GObject-Introspection
 GPC
+GStreamer
 GTI
 GTK+
 GTS
@@ -178,6 +179,7 @@ libffi
 libfontenc
 libgd
 libgeotiff
+libgit2
 libglade
 libiconv
 libidn
diff --git a/Golden_Repo/i/IRkernel/IRkernel-1.3-gcccoremkl-11.2.0-2021.4.0-R-4.2.1.eb b/Golden_Repo/i/IRkernel/IRkernel-1.3-gcccoremkl-11.2.0-2021.4.0-R-4.2.1.eb
new file mode 100644
index 0000000000000000000000000000000000000000..cba7f9ea5ae52c7733b84013f1636c86a3305b2d
--- /dev/null
+++ b/Golden_Repo/i/IRkernel/IRkernel-1.3-gcccoremkl-11.2.0-2021.4.0-R-4.2.1.eb
@@ -0,0 +1,51 @@
+easyblock = 'Bundle'
+
+name = 'IRkernel'
+version = '1.3'
+versionsuffix = '-R-%(rver)s'
+
+homepage = 'https://github.com/baktoft/yaps'
+description = "IRKernel"
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+
+dependencies = [
+    ('R', '4.1.2'),
+    ('ZeroMQ', '4.3.4'),  # for pbdZMQ needed by IRkernel
+]
+
+exts_default_options = {
+    'source_urls': [
+        'https://cran.r-project.org/src/contrib/Archive/%(name)s',  # package archive
+        'https://cran.r-project.org/src/contrib/',  # current version of packages
+        'https://cran.freestatistics.org/src/contrib',  # mirror alternative for current packages
+    ],
+    'source_tmpl': '%(name)s_%(version)s.tar.gz'
+}
+
+exts_defaultclass = 'RPackage'
+exts_filter = ("R -q --no-save", "library(%(ext_name)s)")
+
+exts_list = [
+    ('repr', '1.1.4', {
+        'checksums': ['6f799ca83e0940618dd8c22e62ffdce5ec11ba3366c5306ae58b55b53c097040'],
+    }),
+    ('IRdisplay', '1.1', {
+        'checksums': ['83eb030ff91f546cb647899f8aa3f5dc9fe163a89a981696447ea49cc98e8d2b'],
+    }),
+    ('pbdZMQ', '0.3-7', {
+        'checksums': ['df2d2be14b2f57a64d76cdda4c01fd1c3d9aa12221c63524c01c71849df11808'],
+    }),
+    (name, version, {
+        'checksums': ['5a7fcbfd978dfb3cca6702a68a21c147551995fc400084ae8382ffcbbdae1903'],
+    }),
+]
+
+modextrapaths = {'R_LIBS': ''}
+
+sanity_check_paths = {
+    'files': [],
+    'dirs': [name],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/i/ITK/ITK-5.2.1-GCCcore-11.2-nompi.eb b/Golden_Repo/i/ITK/ITK-5.2.1-GCCcore-11.2.0-nompi.eb
similarity index 100%
rename from Golden_Repo/i/ITK/ITK-5.2.1-GCCcore-11.2-nompi.eb
rename to Golden_Repo/i/ITK/ITK-5.2.1-GCCcore-11.2.0-nompi.eb
diff --git a/Golden_Repo/i/Inspector/Inspector-2022.0.0.eb b/Golden_Repo/i/Inspector/Inspector-2022.0.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..2c901cebfa5e701fb3348264fad514def4793e7d
--- /dev/null
+++ b/Golden_Repo/i/Inspector/Inspector-2022.0.0.eb
@@ -0,0 +1,24 @@
+name = 'Inspector'
+version = '2022.0.0'
+
+homepage = 'https://software.intel.com/en-us/inspector'
+description = """Intel Inspector is a dynamic memory and threading error
+ checking tool for users developing serial and parallel applications"""
+
+toolchain = SYSTEM
+
+source_urls = [
+    'https://registrationcenter-download.intel.com/akdlm/irc_nas/18239/']
+sources = ['l_inspector_oneapi_p_%(version)s.266_offline.sh']
+checksums = ['79a0eb2ae3f1de1e3456076685680c468702922469c3fda3e074718fb0bea741']
+
+dontcreateinstalldir = True
+
+requires_runtime_license = False
+
+sanity_check_paths = {
+    'files': ['inspector/%s/bin64/inspxe-cl' % version],
+    'dirs': ['inspector/%s/bin64' % version, 'inspector/%s/bin32' % version]
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/i/ipp/ipp-2021.5.1.eb b/Golden_Repo/i/ipp/ipp-2021.5.1.eb
new file mode 100644
index 0000000000000000000000000000000000000000..da8035d73516aa2c76b2df930a5b74b91a7e04da
--- /dev/null
+++ b/Golden_Repo/i/ipp/ipp-2021.5.1.eb
@@ -0,0 +1,22 @@
+name = 'ipp'
+version = '2021.5.1'
+
+homepage = 'https://software.intel.com/en-us/articles/intel-ipp/'
+description = """Intel Integrated Performance Primitives (Intel IPP) is an extensive library
+ of multicore-ready, highly optimized software functions for multimedia, data processing,
+ and communications applications. Intel IPP offers thousands of optimized functions
+ covering frequently used fundamental algorithms."""
+
+toolchain = SYSTEM
+
+source_urls = [
+    'https://registrationcenter-download.intel.com/akdlm/irc_nas/18440']
+sources = ['l_ipp_oneapi_p_%(version)s.522_offline.sh']
+checksums = ['be99f9b0b2cc815e017188681ab997f3ace94e3010738fa6f702f2416dac0de4']
+
+sanity_check_paths = {
+    'files': ['ipp/%s/lib/intel64/libippcc.so' % version],
+    'dirs': ['ipp/%s/lib' % version, 'ipp/%s/include' % version],
+}
+
+moduleclass = 'perf'
diff --git a/Golden_Repo/j/jsc-xdg-menu/jsc-xdg-menu-2022.3-GCCcore-11.2.0.eb b/Golden_Repo/j/jsc-xdg-menu/jsc-xdg-menu-2022.3-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..20dcfa0a4ed47bfa23f943cf53390402e738a232
--- /dev/null
+++ b/Golden_Repo/j/jsc-xdg-menu/jsc-xdg-menu-2022.3-GCCcore-11.2.0.eb
@@ -0,0 +1,40 @@
+easyblock = 'Binary'
+
+name = 'jsc-xdg-menu'
+version = '2022.3'
+
+homepage = ''
+description = """setup JSC`s desktop menu"""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['https://gitlab.version.fz-juelich.de/goebbert1/jsc-xdg-menu/-/archive/%(version)s/']
+sources = ['%(name)s-%(version)s.tar.gz']
+checksums = ['5ab2891051085799f1043a4e0232d2ea7875c0cafcb86cc1eab0889857b7b49f']
+
+builddependencies = [
+    # just ensure they exist
+    ('Blender', '2.93.5', '-binary', SYSTEM),
+    ('CubeGUI', '4.6'),
+    ('GPicView', '0.2.5'),
+    ('HDFView', '3.1.3'),
+    ('Nsight-Compute', '2022.1.0'),
+    ('Nsight-Systems', '2022.1.1'),
+    # ('ParaView', '5.10.0', '', ('gpsmkl', '2021')),
+    ('TotalView', '2021.4.10'),
+    ('Vampir', '10.0.0', '', SYSTEM),
+]
+
+extract_sources = True,
+install_cmd = 'cp -a %(builddir)s/%(name)s-%(version)s/* %(installdir)s/'
+
+modextravars = {'XDG_MENU_PREFIX': 'jsc-'}
+modextrapaths = {'XDG_CONFIG_DIRS': 'config',
+                 'XDG_DATA_DIRS': 'data'}
+
+sanity_check_paths = {
+    'files': ['README.md', 'config/menus/jsc-applications.menu'],
+    'dirs': ['bin', 'config/menus', 'data/applications', 'data/desktop-directories'],
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb b/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb
index 25a3666ef24735efc5eb508fa6b6e5aecaee558d..67ca2d0907804bdb5574ad50a82e883cad5d9bc6 100644
--- a/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb
+++ b/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb
@@ -33,6 +33,7 @@ builddependencies = [
     ('CMake', '3.21.1', '', SYSTEM),
     ('pkg-config', '0.29.2'),
     ('archspec', '0.1.3'),
+    ('git', '2.33.1', '-nodocs'),
 ]
 dependencies = [
     ('CUDA', '11.5', '', SYSTEM),
@@ -45,7 +46,7 @@ dependencies = [
     ('gzip', '1.10'),
     ('cURL', '7.78.0'),
     ('HDF5', '1.12.1'),
-    ('tbb', '2020.3'),
+    ('tbb', '2021.4.0'),
     ('PCRE', '8.45'),
     ('libxml2', '2.9.10'),
     ('FFmpeg', '4.4.1'),
diff --git a/Golden_Repo/l/libffi/libffi-3.4.2-GCCcore-11.2.0.eb b/Golden_Repo/l/libffi/libffi-3.4.2-GCCcore-11.2.0.eb
index 81d0e8fb36b1074087d53a78ea17b2e1ae04c718..479b36b9fb077cc9f76fdda6334b4a30399aa150 100644
--- a/Golden_Repo/l/libffi/libffi-3.4.2-GCCcore-11.2.0.eb
+++ b/Golden_Repo/l/libffi/libffi-3.4.2-GCCcore-11.2.0.eb
@@ -19,6 +19,9 @@ builddependencies = [
     ('binutils', '2.37'),
 ]
 
+# work-around for https://github.com/libffi/libffi/pull/647
+configopts = '--disable-exec-static-tramp '
+
 sanity_check_paths = {
     'files': ['lib/libffi.a', 'lib/libffi.%s' % SHLIB_EXT],
     'dirs': ['include', 'share'],
diff --git a/Golden_Repo/l/libgit2/libgit2-1.1.1-GCCcore-11.2.0.eb b/Golden_Repo/l/libgit2/libgit2-1.1.1-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..085a5fb9f66b48e2b25cc8d21567eeaf087a2559
--- /dev/null
+++ b/Golden_Repo/l/libgit2/libgit2-1.1.1-GCCcore-11.2.0.eb
@@ -0,0 +1,34 @@
+easyblock = 'CMakeMake'
+
+name = 'libgit2'
+version = '1.1.1'
+
+homepage = 'https://libgit2.org/'
+description = """libgit2 is a portable, pure C implementation of the Git core methods provided as a re-entrant
+linkable library with a solid API, allowing you to write native speed custom Git applications in any language
+which supports C bindings."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+github_account = 'libgit2'
+source_urls = [GITHUB_SOURCE]
+sources = [{'download_filename': 'v%(version)s.tar.gz', 'filename': SOURCE_TAR_GZ}]
+checksums = ['13a525373f64c711a00a058514d890d1512080265f98e0935ab279393f21a620']
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('CMake', '3.21.1'),
+    ('pkg-config', '0.29.2'),
+]
+
+dependencies = [
+    ('PCRE', '8.45'),
+    ('OpenSSL', '1.1', '', True),
+]
+
+sanity_check_paths = {
+    'files': ['include/git2.h', 'lib64/libgit2.%s' % SHLIB_EXT, 'lib64/pkgconfig/libgit2.pc'],
+    'dirs': []
+}
+
+moduleclass = 'devel'
diff --git a/Golden_Repo/l/libvpx/libvpx-1.11.0-GCCcore-11.2.0.eb b/Golden_Repo/l/libvpx/libvpx-1.11.0-GCCcore-11.2.0.eb
index 7690e9e8a2c355d80bfd39996bc03618e99621df..1295f111648eeca3dbcc19162f66febe709bf60c 100644
--- a/Golden_Repo/l/libvpx/libvpx-1.11.0-GCCcore-11.2.0.eb
+++ b/Golden_Repo/l/libvpx/libvpx-1.11.0-GCCcore-11.2.0.eb
@@ -21,7 +21,10 @@ builddependencies = [
     ('NASM', '2.15.05'),
 ]
 
-configopts = '--enable-pic --enable-shared'
+
+configopts = '--enable-pic --enable-shared '
+# https://github.com/Xpra-org/xpra/issues/3082
+configopts += '--enable-vp9-highbitdepth'
 
 sanity_check_paths = {
     # 'lib/libvpx.%s' % SHLIB_EXT],
diff --git a/Golden_Repo/l/libyuv/libyuv-20210428-GCCcore-11.2.0.eb b/Golden_Repo/l/libyuv/libyuv-20210428-GCCcore-11.2.0.eb
index 173da2ccd4471061a18f5664cc6c701b83baa247..69aed046c66b1053da0ecdb5e03b29290f5bc636 100644
--- a/Golden_Repo/l/libyuv/libyuv-20210428-GCCcore-11.2.0.eb
+++ b/Golden_Repo/l/libyuv/libyuv-20210428-GCCcore-11.2.0.eb
@@ -18,7 +18,8 @@ sources = [
         'download_filename': 'eb6e7bb63738e29efd82ea3cf2a115238a89fa51.tar.gz',
     }
 ]
-checksums = ['92f70cbd168aaaabad33f59221013e6cee8e41aa802db592b027e4e01e0bcbba']
+# checksum changes with every download
+checksums = ['df3300c3c9d56b5d6b0ef02f330ca508ef4428b1b9af67083201004deb93991a']
 
 builddependencies = [
     ('binutils', '2.37'),
@@ -28,14 +29,12 @@ builddependencies = [
 separate_build_dir = True
 start_dir = './'
 
-maxparallel = 12
-
 configopts = '-DCMAKE_VERBOSE_MAKEFILE=ON '
 
 postinstallcmds = [
     (
         '{ cat >> %(installdir)s/libyuv.pc; } << \'EOF\'\n'
-        'prefix=PREFIX_TEMPLATE\n'
+        'prefix=%(installdir)s\n'
         'exec_prefix=${prefix}\n'
         'libdir=${prefix}/lib\n'
         'includedir=${prefix}/include\n'
@@ -43,7 +42,8 @@ postinstallcmds = [
         'Name: libyuv\n'
         'Description: YUV conversion and scaling functionality library\n'
         'Version: 0\n'
-        'Libs: -lyuv\n'
+        'Cflags: -I${includedir}\n'
+        'Libs: -L${libdir} -lyuv\n'
         'EOF'
     ),
 ]
diff --git a/Golden_Repo/m/MCR/MCR-R2021b.2.eb b/Golden_Repo/m/MCR/MCR-R2021b.2.eb
new file mode 100644
index 0000000000000000000000000000000000000000..b7e3e831019e4c19f3e5c62cf55a70f34f081f9e
--- /dev/null
+++ b/Golden_Repo/m/MCR/MCR-R2021b.2.eb
@@ -0,0 +1,21 @@
+##
+# Author:    Robert Mijakovic <robert.mijakovic@lxp.lu>
+##
+name = 'MCR'
+version = 'R2021b'  # runtime version 9.11
+local_update = '2'
+versionsuffix = '.%s' % local_update
+
+homepage = 'https://www.mathworks.com/products/compiler/mcr/'
+description = """The MATLAB Runtime is a standalone set of shared libraries
+ that enables the execution of compiled MATLAB applications
+ or components on computers that do not have MATLAB installed."""
+
+toolchain = SYSTEM
+
+source_urls = ['https://ssd.mathworks.com/supportfiles/downloads/%%(version)s/Release/%s/deployment_files/'
+               'installer/complete/glnxa64/' % local_update]
+sources = ['MATLAB_Runtime_%%(version)s_Update_%s_glnxa64.zip' % local_update]
+checksums = ['731ea5ff34a64ec05024ccf36dc24cfb77d5de4dfabec678e3b964e1110aa6e2']
+
+moduleclass = 'math'
diff --git a/Golden_Repo/m/MCR/MCR-R2022a.eb b/Golden_Repo/m/MCR/MCR-R2022a.eb
new file mode 100644
index 0000000000000000000000000000000000000000..f4e33dcd257c9504f8d1a28e32957b1ada4573ec
--- /dev/null
+++ b/Golden_Repo/m/MCR/MCR-R2022a.eb
@@ -0,0 +1,20 @@
+##
+# Author:    Robert Mijakovic <robert.mijakovic@lxp.lu>
+##
+name = 'MCR'
+version = 'R2022a'  # runtime version 9.12
+local_update = '0'
+
+homepage = 'https://www.mathworks.com/products/compiler/mcr/'
+description = """The MATLAB Runtime is a standalone set of shared libraries
+ that enables the execution of compiled MATLAB applications
+ or components on computers that do not have MATLAB installed."""
+
+toolchain = SYSTEM
+
+source_urls = ['https://ssd.mathworks.com/supportfiles/downloads/%%(version)s/Release/%s/deployment_files/'
+               'installer/complete/glnxa64/' % local_update]
+sources = ['MATLAB_Runtime_%(version)s_glnxa64.zip']
+checksums = ['ce013fa6d46148741ad55abaddd26d8d85d6fa4cf94917c8f3a66f350230cfc7']
+
+moduleclass = 'math'
diff --git a/Golden_Repo/m/MED/MED-4.1.0-gpsmpi-2021b.eb b/Golden_Repo/m/MED/MED-4.1.0-gpsmpi-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..acce8bba890739378e8c98d37a776d61551b3a9e
--- /dev/null
+++ b/Golden_Repo/m/MED/MED-4.1.0-gpsmpi-2021b.eb
@@ -0,0 +1,44 @@
+# easyconfig file for MED Library
+easyblock = 'ConfigureMake'
+
+name = 'MED'
+version = '4.1.0'
+
+homepage = 'http://salome-platform.org/'
+description = """Initially defined by EDF R&D,
+this format has been defined and maintained
+through a MED working group comprising members of
+EDF R&D and CEA (the Code Saturne team being represented).
+"""
+
+toolchain = {'name': 'gpsmpi', 'version': '2021b'}
+toolchainopts = {'optarch': True, 'pic': True, 'usempi': True}
+
+source_urls = ['http://files.salome-platform.org/Salome/other/']
+sources = ['med-%(version)s.tar.gz']
+patches = [
+    'med-%(version)s_hdf5_v11201.patch',
+    'med-%(version)s_hdf5_H5Oget_info.patch',
+]
+checksums = [
+    '847db5d6fbc9ce6924cb4aea86362812c9a5ef6b9684377e4dd6879627651fce',  # med-4.1.0.tar.gz
+    # med-4.1.0_hdf5_v11201.patch
+    '6176281bcead9c1d5587daa1d0a82553f3bf8071282282e31c8275700aebf761',
+    # med-4.1.0_hdf5_H5Oget_info.patch
+    'ded71c03da362efffdb24dcc76e9fae3e36eb58130c70ebe2df8d05c0ec08437',
+]
+
+dependencies = [
+    ('Python', '3.9.6'),
+    ('SWIG', '4.0.2'),
+    ('HDF5', '1.12.1')
+]
+
+prebuildopts = 'autoreconf -f -i && '
+
+# better to configure these dependents explicitly
+configopts = '--with-f90 '
+configopts += '--with-swig=$EBROOTSWIG '
+configopts += '--with-hdf5=$EBROOTHDF5 '
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/m/MED/med-4.1.0_hdf5_H5Oget_info.patch b/Golden_Repo/m/MED/med-4.1.0_hdf5_H5Oget_info.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d7d76637db060ee4d5a42efe8cecb73df517e8c7
--- /dev/null
+++ b/Golden_Repo/m/MED/med-4.1.0_hdf5_H5Oget_info.patch
@@ -0,0 +1,96 @@
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDattributeNumWrByName.c med-4.1.0/src/hdfi/_MEDattributeNumWrByName.c
+--- med-4.1.0-orig/src/hdfi/_MEDattributeNumWrByName.c	2020-03-11 10:36:37.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDattributeNumWrByName.c	2022-01-20 18:42:35.685834000 +0100
+@@ -68,7 +68,7 @@
+ 
+   if  ( (_attid=H5Aopen_by_name( pid, path, attname, H5P_DEFAULT, H5P_DEFAULT )) >= 0 ) {
+ 
+-    if ( H5Oget_info( pid, &_oinfo ) <0) {
++    if ( H5Oget_info( pid, &_oinfo, H5O_INFO_BASIC ) <0) {
+ 	MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info");
+ 	goto ERROR;
+     }
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDattributeNumWr.c med-4.1.0/src/hdfi/_MEDattributeNumWr.c
+--- med-4.1.0-orig/src/hdfi/_MEDattributeNumWr.c	2020-03-11 10:36:37.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDattributeNumWr.c	2022-01-20 18:42:47.171221000 +0100
+@@ -77,7 +77,7 @@
+ 
+   if  ( (_attid=H5Aopen( pid, attname, H5P_DEFAULT )) >= 0 ) {
+ 
+-    if ( H5Oget_info( pid, &_oinfo ) <0) {
++    if ( H5Oget_info( pid, &_oinfo, H5O_INFO_BASIC ) <0) {
+ 	MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info");
+ 	goto ERROR;
+     }
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDcheckAttributeStringFunc.c med-4.1.0/src/hdfi/_MEDcheckAttributeStringFunc.c
+--- med-4.1.0-orig/src/hdfi/_MEDcheckAttributeStringFunc.c	2020-03-11 10:36:37.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDcheckAttributeStringFunc.c	2022-01-20 18:23:28.503780000 +0100
+@@ -40,7 +40,7 @@
+     oinfo.type=H5G_LINK;
+     break;
+   case H5L_TYPE_HARD:
+-    if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) {
++    if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) {
+       MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
+       SSCRUTE(lname);
+     }
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDchecknSublinkFunc.c med-4.1.0/src/hdfi/_MEDchecknSublinkFunc.c
+--- med-4.1.0-orig/src/hdfi/_MEDchecknSublinkFunc.c	2020-03-11 10:36:36.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDchecknSublinkFunc.c	2022-01-20 18:22:11.761793000 +0100
+@@ -41,7 +41,7 @@
+     oinfo.type=H5G_LINK;
+     break;
+   case H5L_TYPE_HARD:
+-    if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) {
++    if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) {
+       MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
+       SSCRUTE(lname);
+     }
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDdatagroupExist.c med-4.1.0/src/hdfi/_MEDdatagroupExist.c
+--- med-4.1.0-orig/src/hdfi/_MEDdatagroupExist.c	2020-03-11 10:36:37.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDdatagroupExist.c	2022-01-20 18:22:51.586949000 +0100
+@@ -45,7 +45,7 @@
+ 
+     case H5L_TYPE_HARD:
+       *isasoftlink  = MED_FALSE;
+-      if ( H5Oget_info_by_name( gid, datagroupname, &_oinfo, H5P_DEFAULT ) <0) {
++      if ( H5Oget_info_by_name( gid, datagroupname, &_oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) {
+ 	MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
+ 	SSCRUTE( datagroupname);
+       }
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDdatasetExist.c med-4.1.0/src/hdfi/_MEDdatasetExist.c
+--- med-4.1.0-orig/src/hdfi/_MEDdatasetExist.c	2020-03-11 10:36:37.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDdatasetExist.c	2022-01-20 18:22:38.394310000 +0100
+@@ -47,7 +47,7 @@
+ 
+     case H5L_TYPE_HARD:
+       *isasoftlink  = MED_FALSE;
+-      if ( H5Oget_info_by_name( gid, datasetname, &_oinfo, H5P_DEFAULT ) <0) {
++      if ( H5Oget_info_by_name( gid, datasetname, &_oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) {
+ 	MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
+ 	SSCRUTE( datasetname);
+       }
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDlinkObjs.c med-4.1.0/src/hdfi/_MEDlinkObjs.c
+--- med-4.1.0-orig/src/hdfi/_MEDlinkObjs.c	2020-03-11 10:36:37.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDlinkObjs.c	2022-01-20 18:22:25.480007000 +0100
+@@ -62,7 +62,7 @@
+        sur un lien hard
+        Sur un lien soft H5O_TYPE_UNKNOWN
+     */
+-    if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) {
++    if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) {
+       MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
+       SSCRUTE(lname);
+     }
+diff -ruN med-4.1.0-orig/tools/medimport/2.3.6/_MEDconvertStringDatasets.c med-4.1.0/tools/medimport/2.3.6/_MEDconvertStringDatasets.c
+--- med-4.1.0-orig/tools/medimport/2.3.6/_MEDconvertStringDatasets.c	2020-03-11 10:36:40.000000000 +0100
++++ med-4.1.0/tools/medimport/2.3.6/_MEDconvertStringDatasets.c	2022-01-20 18:23:07.202747000 +0100
+@@ -52,7 +52,7 @@
+     oinfo.type=(H5O_type_t) H5G_LINK;
+     break;
+   case H5L_TYPE_HARD:
+-    if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) {
++    if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) {
+       MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
+       SSCRUTE(lname);
+     }
diff --git a/Golden_Repo/m/MED/med-4.1.0_hdf5_v11201.patch b/Golden_Repo/m/MED/med-4.1.0_hdf5_v11201.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c0900e784a05c4d02adfe32ad62a83010e761009
--- /dev/null
+++ b/Golden_Repo/m/MED/med-4.1.0_hdf5_v11201.patch
@@ -0,0 +1,126 @@
+diff -ruN med-4.1.0-orig/config/cmake_files/medMacros.cmake med-4.1.0/config/cmake_files/medMacros.cmake
+--- med-4.1.0-orig/config/cmake_files/medMacros.cmake	2020-01-30 17:04:19.000000000 +0100
++++ med-4.1.0/config/cmake_files/medMacros.cmake	2021-12-19 17:43:22.912215417 +0100
+@@ -447,7 +447,7 @@
+     ##
+     ## Requires 1.10.x version
+     ##
+-    IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 10 OR NOT HDF_VERSION_RELEASE_REF GREATER 1)
++    IF (HDF5_VERSION VERSION_LESS 1.10.2)
+         MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.10.2 are supported.")
+     ENDIF()
+     ##
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDfileCreate.c med-4.1.0/src/hdfi/_MEDfileCreate.c
+--- med-4.1.0-orig/src/hdfi/_MEDfileCreate.c	2020-03-11 10:36:37.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDfileCreate.c	2021-12-19 17:45:54.776831000 +0100
+@@ -159,7 +159,7 @@
+    * En HDF5-1.10.0p1 cela n'a aucun effet ! 
+    * Un test autoconf permet de fixer un intervalle de version HDF à MED.
+    */
+-#if H5_VERS_MINOR > 10
++#if H5_VERS_MINOR > 12
+ #error "Don't forget to change the compatibility version of the library !"
+ #endif
+    
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDfileOpen.c med-4.1.0/src/hdfi/_MEDfileOpen.c
+--- med-4.1.0-orig/src/hdfi/_MEDfileOpen.c	2020-03-12 16:27:49.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDfileOpen.c	2021-12-19 17:47:06.339960000 +0100
+@@ -72,7 +72,7 @@
+ 
+    •   The creation order tracking property, H5P_CRT_ORDER_TRACKED, has been set in the group creation property list (see H5Pset_link_creation_order). 
+   */
+-#if H5_VERS_MINOR > 10
++#if H5_VERS_MINOR > 12
+ #error "Don't forget to change the compatibility version of the library !"
+ #endif
+ /* L'avantage de bloquer le modèle interne HDF5 
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDmemFileOpen.c med-4.1.0/src/hdfi/_MEDmemFileOpen.c
+--- med-4.1.0-orig/src/hdfi/_MEDmemFileOpen.c	2020-03-11 11:06:04.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDmemFileOpen.c	2021-12-19 17:47:36.424414488 +0100
+@@ -434,7 +434,7 @@
+     goto ERROR;
+   }
+ 
+-#if H5_VERS_MINOR > 10
++#if H5_VERS_MINOR > 12
+ #error "Don't forget to change the compatibility version of the library !"
+ #endif
+   if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18) ) {
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDparFileCreate.c med-4.1.0/src/hdfi/_MEDparFileCreate.c
+--- med-4.1.0-orig/src/hdfi/_MEDparFileCreate.c	2020-03-11 10:36:37.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDparFileCreate.c	2021-12-19 17:48:04.197197000 +0100
+@@ -64,7 +64,7 @@
+    * En HDF5-1.10.0p1 cela n'a aucun effet ! 
+    * Un test autoconf permet de fixer un intervalle de version HDF à MED.
+    */
+-#if H5_VERS_MINOR > 10
++#if H5_VERS_MINOR > 12
+ #error "Don't forget to change the compatibility version of the library !"
+ #endif
+    
+diff -ruN med-4.1.0-orig/src/hdfi/_MEDparFileOpen.c med-4.1.0/src/hdfi/_MEDparFileOpen.c
+--- med-4.1.0-orig/src/hdfi/_MEDparFileOpen.c	2020-03-11 10:36:36.000000000 +0100
++++ med-4.1.0/src/hdfi/_MEDparFileOpen.c	2021-12-19 17:48:23.560680000 +0100
+@@ -55,7 +55,7 @@
+     MED_ERR_(_fid,MED_ERR_INIT,MED_ERR_PROPERTY,MED_ERR_PARALLEL_MSG);
+     goto ERROR;
+   }
+-#if H5_VERS_MINOR > 10
++#if H5_VERS_MINOR > 12
+ #error "Don't forget to change the compatibility version of the library !"
+ #endif
+   if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18 ) ) {
+diff -ruN med-4.1.0-orig/config/med_check_hdf5.m4 med-4.1.0/config/med_check_hdf5.m4
+--- med-4.1.0-orig/config/med_check_hdf5.m4	2020-03-11 10:36:32.000000000 +0100
++++ med-4.1.0/config/med_check_hdf5.m4	2022-01-20 15:31:06.868449943 +0100
+@@ -133,8 +133,9 @@
+          H5_VER_MAJOR=`  grep '#define *H5_VERS_MAJOR' $HDF5_ABS_PATH | sed  's/^.*H5_VERS_MAJOR[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' `
+          H5_VER_MINOR=`  grep '#define *H5_VERS_MINOR' $HDF5_ABS_PATH | sed  's/^.*H5_VERS_MINOR[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' `
+          H5_VER_RELEASE=`grep '#define *H5_VERS_RELEASE' $HDF5_ABS_PATH | sed  's/^.*H5_VERS_RELEASE[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' `
+-         HDF5_VERSION=`  expr 10000 \* ${H5_VER_MAJOR} + 100 \* ${H5_VER_MINOR} + ${H5_VER_RELEASE} `
+-         test "0${HDF5_VERSION}" -gt "11100" || test "0${HDF5_VERSION}" -lt "11002" && AC_MSG_ERROR([
++         # HDF5_VERSION=`  expr 10000 \* ${H5_VER_MAJOR} + 100 \* ${H5_VER_MINOR} + ${H5_VER_RELEASE} `
++         HDF5_VERSION="11201"
++         test "0${HDF5_VERSION}" -gt "11210" || test "0${HDF5_VERSION}" -lt "11002" && AC_MSG_ERROR([
+ This HDF5 version ${H5_VER_MAJOR}.${H5_VER_MINOR}.${H5_VER_RELEASE} must not be used with med-fichier${MED_NUM_MAJEUR}.${MED_NUM_MINEUR}.${MED_NUM_RELEASE}.
+ The HDF5 library version used by med-fichier${MED_NUM_MAJEUR}.y.z MUST NOT be > 1.10 and have to be at least HDF${HDF_VERSION_REF}.
+ DO NOT TRY TO COMPILE med-fichier${MED_NUM_MAJEUR}.${MED_NUM_MINEUR}.${MED_NUM_RELEASE} version with an HDF5 library which would generate an hdf5 file not compliant with HDF5-${HDF_VERSION_MAJOR_REF}.${HDF_VERSION_MINOR_REF}.z library.
+diff -ruN med-4.1.0-orig/configure med-4.1.0/configure
+--- med-4.1.0-orig/configure	2020-03-11 12:53:46.000000000 +0100
++++ med-4.1.0/configure	2022-01-20 16:07:15.956942479 +0100
+@@ -7576,8 +7576,12 @@
+          H5_VER_MAJOR=`  grep '#define *H5_VERS_MAJOR' $HDF5_ABS_PATH | sed  's/^.*H5_VERS_MAJOR[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' `
+          H5_VER_MINOR=`  grep '#define *H5_VERS_MINOR' $HDF5_ABS_PATH | sed  's/^.*H5_VERS_MINOR[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' `
+          H5_VER_RELEASE=`grep '#define *H5_VERS_RELEASE' $HDF5_ABS_PATH | sed  's/^.*H5_VERS_RELEASE[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' `
+-         HDF5_VERSION=`  expr 10000 \* ${H5_VER_MAJOR} + 100 \* ${H5_VER_MINOR} + ${H5_VER_RELEASE} `
+-         test "0${HDF5_VERSION}" -gt "11100" || test "0${HDF5_VERSION}" -lt "11002" && as_fn_error $? "
++         H5_VER_MAJOR="1"
++         H5_VER_MINOR="12"
++         H5_VER_RELEASE="1"
++         # HDF5_VERSION=`  expr 10000 \* ${H5_VER_MAJOR} + 100 \* ${H5_VER_MINOR} + ${H5_VER_RELEASE} `
++         HDF5_VERSION="11201"
++         test "0${HDF5_VERSION}" -gt "11210" || test "0${HDF5_VERSION}" -lt "11002" && as_fn_error $? "
+ This HDF5 version ${H5_VER_MAJOR}.${H5_VER_MINOR}.${H5_VER_RELEASE} must not be used with med-fichier${MED_NUM_MAJEUR}.${MED_NUM_MINEUR}.${MED_NUM_RELEASE}.
+ The HDF5 library version used by med-fichier${MED_NUM_MAJEUR}.y.z MUST NOT be > 1.10 and have to be at least HDF${HDF_VERSION_REF}.
+ DO NOT TRY TO COMPILE med-fichier${MED_NUM_MAJEUR}.${MED_NUM_MINEUR}.${MED_NUM_RELEASE} version with an HDF5 library which would generate an hdf5 file not compliant with HDF5-${HDF_VERSION_MAJOR_REF}.${HDF_VERSION_MINOR_REF}.z library.
+diff -ruN med-4.1.0-orig/src/ci/MEDfileCompatibility.c med-4.1.0/src/ci/MEDfileCompatibility.c
+--- med-4.1.0-orig/src/ci/MEDfileCompatibility.c	2020-03-11 10:36:34.000000000 +0100
++++ med-4.1.0/src/ci/MEDfileCompatibility.c	2022-01-20 16:10:40.474811000 +0100
+@@ -71,7 +71,7 @@
+   _hversionMMR=10000*_hmajeur+100*_hmineur+_hrelease;
+   /* ISCRUTE(_hversionMMR); */
+   /* ISCRUTE(HDF_VERSION_NUM_REF); */
+-  if ( (_hversionMMR >= HDF_VERSION_NUM_REF) && (_hmineur == HDF_VERSION_MINOR_REF) ) *hdfok = MED_TRUE;
++  if (_hversionMMR >= HDF_VERSION_NUM_REF) *hdfok = MED_TRUE;
+ 
+   /* TODO : Vérifier si la version mineure HDF du fichier est supérieure
+      à la version mineure de la bibliothèque HDF utilisée :
+@@ -113,7 +113,7 @@
+ #if MED_NUM_MAJEUR != 4
+ #error "Don't forget to update the test version here when you change the major version of the library !"
+ #endif
+-#if H5_VERS_MINOR > 10
++#if H5_VERS_MINOR > 12
+ #error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !"
+ #error "Cf. _MEDfileCreate ..."
+ #endif
diff --git a/Golden_Repo/m/METIS/METIS-5.1.0-GCC-11.2.0-RTW64-IDX32.eb b/Golden_Repo/m/METIS/METIS-5.1.0-GCC-11.2.0-RTW64-IDX32.eb
new file mode 100644
index 0000000000000000000000000000000000000000..42832ef6002ef3f6cf4c5f7868c5bb5d48134f18
--- /dev/null
+++ b/Golden_Repo/m/METIS/METIS-5.1.0-GCC-11.2.0-RTW64-IDX32.eb
@@ -0,0 +1,32 @@
+name = 'METIS'
+version = '5.1.0'
+versionsuffix = '-RTW64-IDX32'
+
+homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/metis/overview'
+description = """METIS is a set of serial programs for partitioning graphs, partitioning finite element meshes,
+and producing fill reducing orderings for sparse matrices. The algorithms implemented in METIS are based on the
+multilevel recursive-bisection, multilevel k-way, and multi-constraint partitioning schemes.
+"""
+
+toolchain = {'name': 'GCC', 'version': '11.2.0'}
+toolchainopts = {'pic': True}
+
+source_urls = [
+    'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis',
+    'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD',
+]
+sources = [SOURCELOWER_TAR_GZ]
+patches = ['METIS-5.1.0-use-doubles.patch']
+checksums = [
+    '76faebe03f6c963127dbb73c13eab58c9a3faeae48779f049066a21c087c5db2',  # metis-5.1.0.tar.gz
+    '8e79f5970c0fb36394dd6338dd3160eb346dc00e38c37ac90303e1ee5eb4c53f',  # METIS-5.1.0-use-doubles.patch
+]
+
+# We use 32bit for indices and 64bit for content
+builddependencies = [
+    ('CMake', '3.21.1', '', SYSTEM)
+]
+
+configopts = ['', 'shared=1']
+
+moduleclass = 'math'
diff --git a/Golden_Repo/m/METIS/METIS-5.1.0-use-doubles.patch b/Golden_Repo/m/METIS/METIS-5.1.0-use-doubles.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c7b875167552a718f808a3ff2949ffe968f44928
--- /dev/null
+++ b/Golden_Repo/m/METIS/METIS-5.1.0-use-doubles.patch
@@ -0,0 +1,11 @@
+# Use double for floating point (64 bit) in METIS by default
+# OpenFOAM 4 uses doubles be default
+diff -ur metis-5.1.0.orig/include/metis.h metis-5.1.0/include/metis.h
+--- metis-5.1.0.orig/include/metis.h	2013-03-30 17:24:45.000000000 +0100
++++ metis-5.1.0/include/metis.h	2016-09-05 11:39:33.004384533 +0200
+@@ -40,7 +40,7 @@
+    32 : single precission floating point (float)
+    64 : double precission floating point (double)
+ --------------------------------------------------------------------------*/
+-#define REALTYPEWIDTH 32
++#define REALTYPEWIDTH 64
diff --git a/Golden_Repo/m/matplotlib/matplotlib-3.4.3-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/m/matplotlib/matplotlib-3.4.3-gcccoremkl-11.2.0-2021.4.0.eb
index c510d60b69f5bf6fe78430aa186a7a6e1cbfb7ae..acbb9fa3632437fb9848d8f0637011c494881209 100644
--- a/Golden_Repo/m/matplotlib/matplotlib-3.4.3-gcccoremkl-11.2.0-2021.4.0.eb
+++ b/Golden_Repo/m/matplotlib/matplotlib-3.4.3-gcccoremkl-11.2.0-2021.4.0.eb
@@ -21,7 +21,7 @@ dependencies = [
     ('libpng', '1.6.37'),
     ('freetype', '2.11.0'),
     ('Tkinter', '%(pyver)s'),
-    ('Pillow-SIMD', '8.3.1'),
+    ('Pillow-SIMD', '9.0.1'),
     ('Qhull', '2020.2')
 ]
 
diff --git a/Golden_Repo/m/mpi4py/mpi4py-3.1.3-npsmpic-2021b.eb b/Golden_Repo/m/mpi4py/mpi4py-3.1.3-npsmpic-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..c4703a6e00cb1727800a459df653803e31f2dcdb
--- /dev/null
+++ b/Golden_Repo/m/mpi4py/mpi4py-3.1.3-npsmpic-2021b.eb
@@ -0,0 +1,26 @@
+easyblock = 'PythonPackage'
+
+name = 'mpi4py'
+version = '3.1.3'
+
+homepage = 'https://bitbucket.org/mpi4py/mpi4py'
+description = """MPI for Python (mpi4py) provides bindings of the Message Passing Interface (MPI) standard for
+ the Python programming language, allowing any Python program to exploit multiple processors.
+"""
+
+toolchain = {'name': 'npsmpic', 'version': '2021b'}
+
+source_urls = ['https://github.com/%(name)s/%(name)s/archive/']
+sources = ['%(version)s.tar.gz']
+checksums = ['a25f7e521ac5706a4e7284d986df006c26a2d13cc7ccee646cfc07c05bd65f05']
+
+dependencies = [('Python', '3.9.6')]
+
+prebuildopts = 'CFLAGS=-noswitcherror'
+
+sanity_check_paths = {
+    'files': [],
+    'dirs': ['lib/python%(pyshortver)s/site-packages/mpi4py'],
+}
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/m/mpi4py/mpi4py-3.1.3-nvompic-2021b.eb b/Golden_Repo/m/mpi4py/mpi4py-3.1.3-nvompic-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..2dd6a85c1c733bd4f6a9fcd79e23ea1904c67cf6
--- /dev/null
+++ b/Golden_Repo/m/mpi4py/mpi4py-3.1.3-nvompic-2021b.eb
@@ -0,0 +1,26 @@
+easyblock = 'PythonPackage'
+
+name = 'mpi4py'
+version = '3.1.3'
+
+homepage = 'https://bitbucket.org/mpi4py/mpi4py'
+description = """MPI for Python (mpi4py) provides bindings of the Message Passing Interface (MPI) standard for
+ the Python programming language, allowing any Python program to exploit multiple processors.
+"""
+
+toolchain = {'name': 'nvompic', 'version': '2021b'}
+
+source_urls = ['https://github.com/%(name)s/%(name)s/archive/']
+sources = ['%(version)s.tar.gz']
+checksums = ['a25f7e521ac5706a4e7284d986df006c26a2d13cc7ccee646cfc07c05bd65f05']
+
+dependencies = [('Python', '3.9.6')]
+
+prebuildopts = 'CFLAGS=-noswitcherror'
+
+sanity_check_paths = {
+    'files': [],
+    'dirs': ['lib/python%(pyshortver)s/site-packages/mpi4py'],
+}
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/m/mpiP/mpiP-3.5-gpsmpi-2021b.eb b/Golden_Repo/m/mpiP/mpiP-3.5-gpsmpi-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..e4557e6d3e9385e2a53c98779878cbc3df06a694
--- /dev/null
+++ b/Golden_Repo/m/mpiP/mpiP-3.5-gpsmpi-2021b.eb
@@ -0,0 +1,44 @@
+easyblock = 'ConfigureMake'
+version = '3.5'
+
+homepage = 'https://github.com/LLNL/mpiP'
+name = "mpiP"
+
+description = """mpiP is a lightweight profiling library for MPI applications. Because it only collects statistical
+information about MPI functions, mpiP generates considerably less overhead and much less data than tracing tools. All
+the information captured by mpiP is task-local. It only uses communication during report generation, typically at the
+end of the experiment, to merge results from all of the tasks into one output file.
+"""
+
+usage = """
+ Example usage (take special note of the order, the mpiP library has to appear AFTER your code):
+
+    mpifort -g -o mpitest mpitest.f90 -lmpiP -lm -lbfd -liberty -lunwind -lz
+"""
+
+
+toolchain = {'name': 'gpsmpi', 'version': '2021b'}
+toolchainopts = {'usempi': True}
+
+source_urls = ['https://github.com/LLNL/mpiP/releases/download/%(version)s/']
+sources = [SOURCELOWER_TGZ]
+checksums = ['e366843d53fa016fb03903e51c8aac901aa5155edabe64698a8d6fa618a03bbd']
+
+builddependencies = [
+    ('Python', '3.9.6'),
+]
+
+dependencies = [
+    ('libunwind', '1.5.0'),
+]
+
+configopts = "--with-cc=$CC --with-cxx=$CXX --with-f77=$F77 CFLAGS='-DPACKAGE=mpiP -DPACKAGE_VERSION=3.5' "
+
+buildopts = "PACKAGE='mpiP' PACKAGE_VERSION='3.5'"
+
+sanity_check_paths = {
+    'files': ['lib/libmpiP.so'],
+    'dirs': ['lib', 'share']
+}
+
+moduleclass = 'perf'
diff --git a/Golden_Repo/n/NCCL/NCCL-2.12.7-1-GCCcore-11.2.0-CUDA-11.5.eb b/Golden_Repo/n/NCCL/NCCL-2.12.7-1-GCCcore-11.2.0-CUDA-11.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..07d51a9e9d67dd5fe9f5b929ebaa59771b7ba660
--- /dev/null
+++ b/Golden_Repo/n/NCCL/NCCL-2.12.7-1-GCCcore-11.2.0-CUDA-11.5.eb
@@ -0,0 +1,30 @@
+name = 'NCCL'
+version = '2.12.7-1'
+versionsuffix = '-CUDA-%(cudaver)s'
+
+homepage = 'https://developer.nvidia.com/nccl'
+description = """The NVIDIA Collective Communications Library (NCCL) implements multi-GPU and multi-node collective
+communication primitives that are performance optimized for NVIDIA GPUs."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+github_account = 'NVIDIA'
+sources = [{
+    'filename': '%(name)s-%(version)s.tar.gz',
+    'git_config': {
+        'url': 'https://github.com/NVIDIA/',
+        'repo_name': 'nccl',
+        'tag': 'v%(version)s',
+        'recursive': True,
+    },
+}]
+checksums = ['277bc85e1b4fa5550aa3371065fb14be62393e6c3df41f0382008b05bb93a7e4']
+
+builddependencies = [('binutils', '2.37')]
+
+dependencies = [
+    ('CUDA', '11.5', '', True),
+    ('UCX', '1.11.2', '', SYSTEM),
+]
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/n/NVHPC/NVHPC-22.3.eb b/Golden_Repo/n/NVHPC/NVHPC-22.3.eb
new file mode 100644
index 0000000000000000000000000000000000000000..8a75360c88519d1cb4ca013bd67339651267525f
--- /dev/null
+++ b/Golden_Repo/n/NVHPC/NVHPC-22.3.eb
@@ -0,0 +1,73 @@
+name = 'NVHPC'
+version = '22.3'
+local_gccver = '11.2.0'
+
+homepage = 'https://developer.nvidia.com/hpc-sdk/'
+description = """C, C++ and Fortran compilers included with the NVIDIA HPC SDK (previously: PGI)"""
+
+toolchain = SYSTEM
+
+# By downloading, you accept the HPC SDK Software License Agreement (https://docs.nvidia.com/hpc-sdk/eula/index.html)
+source_urls = ['https://developer.download.nvidia.com/hpc-sdk/%(version)s/']
+local_tarball_tmpl = 'nvhpc_2022_%%(version_major)s%%(version_minor)s_Linux_%s_cuda_multi.tar.gz'
+sources = [local_tarball_tmpl % '%(arch)s']
+checksums = [
+    {
+        local_tarball_tmpl % 'aarch64':
+            'e0ea1cbb726556f6879f4b5dfe17238f8e7680c772368577945a85c0e08328f0',
+        local_tarball_tmpl % 'ppc64le':
+            '5e80db6010adc85fe799dac961ae69e43fdf18d35243666c96a70ecdb80bd280',
+        local_tarball_tmpl % 'x86_64':
+            'bc60a6faf2237bf20550718f71079a714563fa85df62c341cb833f70eb2fe7bb',
+    }
+]
+
+dependencies = [
+    ('GCCcore', local_gccver),
+    ('binutils', '2.37', '', ('GCCcore', local_gccver)),
+    ('CUDA', '11.5', '', SYSTEM),
+    # This is necessary to avoid cases where just libnuma.so.1 is present in the system and -lnuma fails
+    ('numactl', '2.0.14', '', SYSTEM)
+]
+
+module_add_cuda = False
+
+# specify default CUDA version that should be used by NVHPC
+# should match one of the CUDA versions that are included with this NVHPC version
+# (see install_components/Linux_x86_64/22.3/cuda/)
+# for NVHPC 22.3, those are: 11.6, 11.0, 10.2;
+# this version can be tweaked from the EasyBuild command line with
+# --try-amend=default_cuda_version="11.0" (for example)
+default_cuda_version = '%(cudaver)s'
+
+# NVHPC EasyBlock supports some features, which can be set via CLI or this easyconfig.
+# The following list gives examples for the easyconfig
+#
+# NVHPC needs CUDA to work. Two options are available: 1) Use NVHPC-bundled CUDA, 2) use system CUDA
+# 1) Bundled CUDA
+#    If no easybuild dependency to CUDA is present, the bundled CUDA is taken. A version needs to be specified with
+#      default_cuda_version = "11.0"
+#    in this easyconfig file; alternatively, it can be specified through the command line during installation with
+#      --try-amend=default_cuda_version="10.2"
+# 2) CUDA provided via EasyBuild
+#    Use CUDA as a dependency, for example
+#      dependencies = [('CUDA', '11.5.0')]
+#    The parameter default_cuda_version still can be set as above.
+#    If not set, it will be deduced from the CUDA module (via $EBVERSIONCUDA)
+#
+# Define a NVHPC-default Compute Capability
+#   cuda_compute_capabilities = "8.0"
+# Can also be specified on the EasyBuild command line via --cuda-compute-capabilities=8.0
+# Only single values supported, not lists of values!
+#
+# Options to add/remove things to/from environment module (defaults shown)
+#   module_byo_compilers = False  # Remove compilers from PATH (Bring-your-own compilers)
+#   module_nvhpc_own_mpi = False  # Add NVHPC's own pre-compiled OpenMPI
+#   module_add_math_libs = False  # Add NVHPC's math libraries (which should be there from CUDA anyway)
+#   module_add_profilers = False  # Add NVHPC's NVIDIA Profilers
+#   module_add_nccl = False       # Add NVHPC's NCCL library
+#   module_add_nvshmem = False    # Add NVHPC's NVSHMEM library
+#   module_add_cuda = False       # Add NVHPC's bundled CUDA
+
+# this bundle serves as a compiler-only toolchain, so it should be marked as compiler (important for HMNS)
+moduleclass = 'compiler'
diff --git a/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-2021b.eb b/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..561ec95156c4c9eaaca478d9a3be099fc9de6eda
--- /dev/null
+++ b/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-2021b.eb
@@ -0,0 +1,49 @@
+name = 'NWChem'
+version = '7.0.2'
+local_verdate = '2020-10-12'
+local_revision = 'b9985dfa'
+
+
+homepage = 'https://nwchemgit.github.io'
+description = """NWChem aims to provide its users with computational chemistry tools that are scalable both in
+ their ability to treat large scientific computational chemistry problems efficiently, and in their use of available
+ parallel computing resources from high-performance parallel supercomputers to conventional workstation clusters.
+ NWChem software can handle: biomolecules, nanostructures, and solid-state; from quantum to classical, and all
+ combinations; Gaussian basis functions or plane-waves; scaling from one to thousands of processors; properties
+ and relativity."""
+
+toolchain = {'name': 'intel', 'version': '2021b'}
+toolchainopts = {'i8': True}
+source_urls = ['https://github.com/nwchemgit/nwchem/releases/download/v%(version)s-release/']
+sources = ['nwchem-%%(version)s-release.revision-%s-src.%s.tar.bz2' % (local_revision, local_verdate)]
+patches = [
+    'NWChem_fix-date.patch',
+]
+checksums = [
+    'd9d19d87e70abf43d61b2d34e60c293371af60d14df4a6333bf40ea63f6dc8ce',
+    '215ec54f6132f2c9306bd636456722a36f0f1d98a67a0c8cbd10c5d1eed68feb'
+]
+
+dependencies = [('Python', '3.9.6')]
+
+# This easyconfig is using the default for armci_network (OPENIB) and
+# thus needs infiniband libraries.
+osdependencies = [
+    ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'),
+]
+
+preconfigopts = 'export EXTRA_LIBS=-lutil && '
+
+# (tm)
+# tests in the form  defined in nwchem.py are of little use and take too long
+# preferentially, the tests should be done separately,  running 12-16 testcases 
+# including verification simultaneously using 8 cores/test; in some expensive test cases
+# 16 cores/test are more adequate. 
+# the acceptable test failure quota of 50% as indicated in nwchem.py would imply a useless code.
+# jurecadc/intel-para-2021 delivers 6 failures out of 244 tests (subset of the qm test suite).
+
+tests = False
+
+modules = 'all python'
+
+moduleclass = 'chem'
diff --git a/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-para-2021b.eb b/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-para-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..ebebd8b0a46a3e355967ffb477864d74c3364e13
--- /dev/null
+++ b/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-para-2021b.eb
@@ -0,0 +1,49 @@
+name = 'NWChem'
+version = '7.0.2'
+local_verdate = '2020-10-12'
+local_revision = 'b9985dfa'
+
+
+homepage = 'https://nwchemgit.github.io'
+description = """NWChem aims to provide its users with computational chemistry tools that are scalable both in
+ their ability to treat large scientific computational chemistry problems efficiently, and in their use of available
+ parallel computing resources from high-performance parallel supercomputers to conventional workstation clusters.
+ NWChem software can handle: biomolecules, nanostructures, and solid-state; from quantum to classical, and all
+ combinations; Gaussian basis functions or plane-waves; scaling from one to thousands of processors; properties
+ and relativity."""
+
+toolchain = {'name': 'intel-para', 'version': '2021b'}
+toolchainopts = {'i8': True}
+source_urls = ['https://github.com/nwchemgit/nwchem/releases/download/v%(version)s-release/']
+sources = ['nwchem-%%(version)s-release.revision-%s-src.%s.tar.bz2' % (local_revision, local_verdate)]
+patches = [
+    'NWChem_fix-date.patch',
+]
+checksums = [
+    'd9d19d87e70abf43d61b2d34e60c293371af60d14df4a6333bf40ea63f6dc8ce',
+    '215ec54f6132f2c9306bd636456722a36f0f1d98a67a0c8cbd10c5d1eed68feb'
+]
+
+dependencies = [('Python', '3.9.6')]
+
+# This easyconfig is using the default for armci_network (OPENIB) and
+# thus needs infiniband libraries.
+osdependencies = [
+    ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'),
+]
+
+preconfigopts = 'export EXTRA_LIBS=-lutil && '
+
+# (tm)
+# tests in the form  defined in nwchem.py are of little use and take too long
+# preferentially, the tests should be done separately,  running 12-16 testcases 
+# including verification simultaneously using 8 cores/test; in some expensive test cases
+# 16 cores/test are more adequate. 
+# the acceptable test failure quota of 50% as indicated in nwchem.py would imply a useless code.
+# jurecadc/intel-para-2021 delivers 6 failures out of 244 tests (subset of the qm test suite).
+
+tests = False
+
+modules = 'all python'
+
+moduleclass = 'chem'
diff --git a/Golden_Repo/n/NWChem/NWChem_fix-date.patch b/Golden_Repo/n/NWChem/NWChem_fix-date.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5d846acc3c8b52d54d5aabbd1a8a794163b11646
--- /dev/null
+++ b/Golden_Repo/n/NWChem/NWChem_fix-date.patch
@@ -0,0 +1,11 @@
+--- nwchem-6.1.1-src/src/GNUmakefile.orig	2012-12-10 17:23:43.236474825 +0100
++++ nwchem-6.1.1-src/src/GNUmakefile	2012-12-10 17:23:55.916623423 +0100
+@@ -7,7 +7,7 @@
+ 
+   SUBDIRS =  $(NWSUBDIRS)
+ 
+-  LIB_DEFINES =  -DCOMPILATION_DATE="'`date +%a_%b_%d_%H:%M:%S_%Y`'" \
++  LIB_DEFINES =  -DCOMPILATION_DATE="'`date`'" \
+                  -DCOMPILATION_DIR="'$(TOPDIR)'" \
+                  -DNWCHEM_BRANCH="'$(CODE_BRANCH)'"
+ ifeq ($(TARGET),FUJITSU_VPP)
diff --git a/Golden_Repo/n/Nsight-Compute/Nsight-Compute-2022.1.1-GCCcore-11.2.0.eb b/Golden_Repo/n/Nsight-Compute/Nsight-Compute-2022.1.1-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..c0c2d9edc4d9590c6054698cdded3f06fcf81a6c
--- /dev/null
+++ b/Golden_Repo/n/Nsight-Compute/Nsight-Compute-2022.1.1-GCCcore-11.2.0.eb
@@ -0,0 +1,47 @@
+# jg (CSCS)
+# AH (JSC)
+easyblock = 'Binary'
+
+name = 'Nsight-Compute'
+version = '2022.1.1'
+homepage = 'https://developer.nvidia.com/nsight-compute'
+description = 'NVIDIA Nsight Compute is an interactive kernel profiler for CUDA applications'
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+# Download source binary package manually, requires Nvidia Developer Account
+# source_urls = 'https://developer.nvidia.com/nsight-compute'
+sources = [{
+    'filename': 'nsight-compute-linux-%(version)s.2-30914944.run',
+    'extract_cmd': '/bin/sh %s'
+}]
+checksums = ['bae875391de5fb9ff7238b3c06fea5f77eff4afae9720e7021c90908d1f84081']
+
+# Not really necessary, but useful if we use this as a template for another package
+builddependencies = [
+    ('binutils', '2.37'),
+]
+
+dependencies = [
+    ('X11', '20210802')
+]
+
+extract_sources = True
+unpack_options = '--nochown --noexec --nox11 --target %(builddir)s'
+
+install_cmd = 'cp -r %(builddir)s/pkg/* %(installdir)s/'
+
+# Workaround due to wrong permissions once the files are extracted from the .run file
+postinstallcmds = [
+    'find %(installdir)s -type f -and -executable -and ! -name "lib*" -exec chmod go+x {} \;']
+
+sanity_check_paths = {
+    'files': ['ncu-ui', 'ncu'],
+    'dirs': ['docs', 'extras', 'host', 'sections', 'target']
+}
+
+modluafooter = """
+add_property("arch","gpu")
+"""
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/n/Nsight-Systems/Nsight-Systems-2022.2.1-GCCcore-11.2.0.eb b/Golden_Repo/n/Nsight-Systems/Nsight-Systems-2022.2.1-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..eea01c49a448cfcd4adb3c7f43e7df5e7e22d959
--- /dev/null
+++ b/Golden_Repo/n/Nsight-Systems/Nsight-Systems-2022.2.1-GCCcore-11.2.0.eb
@@ -0,0 +1,44 @@
+# jg (CSCS)
+# AH (JSC)
+easyblock = 'Binary'
+
+name = 'Nsight-Systems'
+version = '2022.2.1'
+homepage = 'https://developer.nvidia.com/nsight-systems'
+description = 'NVIDIA Nsight Systems is a system-wide performance analysis tool'
+
+# GCCcore toolchain is not strictly necessary, but used to bring it to same level as Nsight Compute
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+# Download source binary package manually, requires Nvidia Developer Account
+# source_urls = 'https://developer.nvidia.com/nsight-systems'
+sources = [{
+    'filename': 'NsightSystems-linux-public-%(version)s.31-5fe97ab.run',
+    'extract_cmd': '/bin/sh %s'
+}]
+checksums = ['01753300e6a418a4cb6104f11eb13961263ccaecc768f74801d261dab90e569a']
+
+dependencies = [
+    ('X11', '20210802')
+]
+
+
+extract_sources = True
+unpack_options = '--accept --nochown --noexec --nox11 --target %(builddir)s'
+
+install_cmd = 'cp -r %(builddir)s/pkg/* %(installdir)s/'
+
+sanity_check_paths = {
+    'files': ['bin/nsys'],
+    'dirs': ['target-linux-x64', 'host-linux-x64']
+}
+
+modextravars = {
+    'NSIGHT_DOC': '%(installdir)s/documentation/nsys-exporter'
+}
+
+modluafooter = """
+add_property("arch","gpu")
+"""
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gompi-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gompi-2021b.eb
index f93c3c24f440f7b8057a9a4a165d3ddb9095ffae..5191ee23a5b2cc3829abb7b4ca3cbd886db55e07 100644
--- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gompi-2021b.eb
+++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gompi-2021b.eb
@@ -14,6 +14,7 @@ dependencies = [
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('netCDF', '4.8.1'),
     ('cURL', '7.78.0'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gpsmpi-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gpsmpi-2021b.eb
index b30561e0d7337f997f34f20af4f8066b4dfce285..000cb4d87de9a6e44138230993489e4f7a7b2a63 100644
--- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gpsmpi-2021b.eb
+++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gpsmpi-2021b.eb
@@ -14,6 +14,7 @@ dependencies = [
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('netCDF', '4.8.1'),
     ('cURL', '7.78.0'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iimpi-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iimpi-2021b.eb
index 5cf9df03996a8cd34dcb5589ccee2057c27883e4..cd70ee753ae7091c91bacfe738563bf9d8054ffd 100644
--- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iimpi-2021b.eb
+++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iimpi-2021b.eb
@@ -14,6 +14,7 @@ dependencies = [
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('netCDF', '4.8.1'),
     ('cURL', '7.78.0'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iompi-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iompi-2021b.eb
index 4176aed528ef850233f9be38c92ce1211a8f00fa..e92256f45f36d7ccf43439146ae0312dfc77868b 100644
--- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iompi-2021b.eb
+++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iompi-2021b.eb
@@ -14,6 +14,7 @@ dependencies = [
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('netCDF', '4.8.1'),
     ('cURL', '7.78.0'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-ipsmpi-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-ipsmpi-2021b.eb
index bef589936575d572e18c20035a954e1c992076cf..c7daa5a2ee668480b504f75140c3ca4bb4ff3e91 100644
--- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-ipsmpi-2021b.eb
+++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-ipsmpi-2021b.eb
@@ -14,6 +14,7 @@ dependencies = [
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('netCDF', '4.8.1'),
     ('cURL', '7.78.0'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-npsmpic-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-npsmpic-2021b.eb
index 0cfbf26e2d6b7e7b319de7af4c4f71a29a9e6fed..50d951f86952f1e0dbc29d7a15ee2e3b6cfb6f0a 100644
--- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-npsmpic-2021b.eb
+++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-npsmpic-2021b.eb
@@ -14,6 +14,7 @@ dependencies = [
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('netCDF', '4.8.1'),
     ('cURL', '7.78.0'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-nvompic-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-nvompic-2021b.eb
index bdcced40e90d7392d942d989ad66ce5d1d241aec..72d07c9d5f6f78c083b8d570635945a7db27c2e0 100644
--- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-nvompic-2021b.eb
+++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-nvompic-2021b.eb
@@ -14,6 +14,7 @@ dependencies = [
     ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')),
     ('netCDF', '4.8.1'),
     ('cURL', '7.78.0'),
+    ('mpi4py', '3.1.3')
 ]
 
 use_pip = True
diff --git a/Golden_Repo/n/numba/llvmlite-0.38.0-llvm13.patch b/Golden_Repo/n/numba/llvmlite-0.38.0-llvm13.patch
new file mode 100644
index 0000000000000000000000000000000000000000..66b2b8ea337c000a0867837959fee6b221ad76ac
--- /dev/null
+++ b/Golden_Repo/n/numba/llvmlite-0.38.0-llvm13.patch
@@ -0,0 +1,92 @@
+From 1d928ebcd59b23b5050234a2bf71f9be7f5f6bd1 Mon Sep 17 00:00:00 2001
+From: Richard Barnes <rbarnes@umn.edu>
+Date: Wed, 1 Dec 2021 10:29:08 -0700
+Subject: [PATCH] Enable LLVM-12 and LLVM-13
+
+---
+ ffi/build.py                   |  5 ++---
+ ffi/targets.cpp                |  2 ++
+ llvmlite/tests/test_binding.py | 19 ++++++++++++++++---
+ 3 files changed, 20 insertions(+), 6 deletions(-)
+
+diff --git a/ffi/build.py b/ffi/build.py
+index 6408bf5f..95e33c64 100755
+--- a/ffi/build.py
++++ b/ffi/build.py
+@@ -162,9 +162,8 @@ def main_posix(kind, library_ext):
+         print(msg)
+         print(warning + '\n')
+     else:
+-
+-        if not out.startswith('11'):
+-            msg = ("Building llvmlite requires LLVM 11.x.x, got "
++        if not (out.startswith('11') or out.startswith('12') or out.startswith('13')):
++            msg = ("Building llvmlite requires LLVM 11-13.x.x, got "
+                    "{!r}. Be sure to set LLVM_CONFIG to the right executable "
+                    "path.\nRead the documentation at "
+                    "http://llvmlite.pydata.org/ for more information about "
+diff --git a/ffi/targets.cpp b/ffi/targets.cpp
+index 1ce472c2..4ba33e79 100644
+--- a/ffi/targets.cpp
++++ b/ffi/targets.cpp
+@@ -233,7 +233,9 @@ LLVMPY_CreateTargetMachine(LLVMTargetRef T,
+         rm = Reloc::DynamicNoPIC;
+ 
+     TargetOptions opt;
++#if LLVM_VERSION_MAJOR < 12
+     opt.PrintMachineCode = PrintMC;
++#endif
+     opt.MCOptions.ABIName = ABIName;
+ 
+     bool jit = JIT;
+diff --git a/llvmlite/tests/test_binding.py b/llvmlite/tests/test_binding.py
+index 80495787..fee2372a 100644
+--- a/llvmlite/tests/test_binding.py
++++ b/llvmlite/tests/test_binding.py
+@@ -18,6 +18,16 @@
+ from llvmlite.tests import TestCase
+ 
+ 
++def clean_string_whitespace(x: str) -> str:
++    # Remove trailing whitespace from the end of each line
++    x = re.sub(r"\s+$", "", x, flags=re.MULTILINE)
++    # Remove intermediate blank lines
++    x = re.sub(r"\n\s*\n", r"\n", x, flags=re.MULTILINE)
++    # Remove extraneous whitespace from the beginning and end of the string
++    x = x.strip()
++    return x
++
++
+ # arvm7l needs extra ABI symbols to link successfully
+ if platform.machine() == 'armv7l':
+     llvm.load_library_permanently('libgcc_s.so.1')
+@@ -158,7 +168,7 @@ def no_de_locale():
+ target triple = "unknown-unknown-unknown"
+ target datalayout = ""
+ 
+-define i32 @"foo"() 
++define i32 @"foo"()
+ {
+ "<>!*''#":
+   ret i32 12345
+@@ -424,7 +434,10 @@ def test_nonalphanum_block_name(self):
+         bd = ir.IRBuilder(fn.append_basic_block(name="<>!*''#"))
+         bd.ret(ir.Constant(ir.IntType(32), 12345))
+         asm = str(mod)
+-        self.assertEqual(asm, asm_nonalphanum_blocklabel)
++        self.assertEqual(
++            clean_string_whitespace(asm),
++            clean_string_whitespace(asm_nonalphanum_blocklabel)
++        )
+ 
+     def test_global_context(self):
+         gcontext1 = llvm.context.get_global_context()
+@@ -509,7 +522,7 @@ def test_set_option(self):
+     def test_version(self):
+         major, minor, patch = llvm.llvm_version_info
+         # one of these can be valid
+-        valid = [(11,)]
++        valid = [(11,), (12,), (13,)]
+         self.assertIn((major,), valid)
+         self.assertIn(patch, range(10))
+ 
\ No newline at end of file
diff --git a/Golden_Repo/n/numba/numba-0.55.1-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/n/numba/numba-0.55.1-gcccoremkl-11.2.0-2021.4.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..fefe43a773917a93cf0a5a1abaaec74c8a90da79
--- /dev/null
+++ b/Golden_Repo/n/numba/numba-0.55.1-gcccoremkl-11.2.0-2021.4.0.eb
@@ -0,0 +1,75 @@
+easyblock = 'PythonBundle'
+
+name = 'numba'
+version = '0.55.1'
+
+homepage = 'https://numba.pydata.org/'
+description = """Numba is an Open Source NumPy-aware optimizing compiler for
+Python sponsored by Continuum Analytics, Inc. It uses the remarkable LLVM
+compiler infrastructure to compile Python syntax to machine code."""
+
+usage = '''
+In case you intend to use CUDA functionality of Numba please ensure that CUDA_HOME is set.
+For more details please check: http://numba.pydata.org/numba-doc/latest/cuda/overview.html
+'''
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+toolchainopts = {'pic': True}
+
+dependencies = [
+    ('Python', '3.9.6'),
+    ('SciPy-bundle', '2021.10'),
+    ('LLVM', '13.0.0'),
+    ('CUDA', '11.5', '', SYSTEM),
+]
+
+use_pip = True
+sanity_pip_check = True
+
+local_llvmlite_preinstallopts = "export LLVM_CONFIG=${EBROOTLLVM}/bin/llvm-config && "
+local_llvmlite_preinstallopts += "export LLVMLITE_SKIP_LLVM_VERSION_CHECK=1 && export NUMBA_DISABLE_INTEL_SVML=1 && "
+
+exts_default_options = {'source_urls': [PYPI_SOURCE]}
+
+exts_list = [
+    ('icc-rt', '2020.0.133', {
+        'modulename': False,
+        'source_tmpl': 'icc_rt-%(version)s-py2.py3-none-manylinux1_x86_64.whl',
+        'unpack_sources': False,
+        'checksums': ['17a173e65cee0c516358172b9cc96fe297dd54f4d6b23d57f79c62d9e105e3cf'],
+    }),
+    ('intel-openmp', '2020.0.133', {
+        'modulename': False,
+        'source_tmpl': 'intel_openmp-%(version)s-py2.py3-none-manylinux1_x86_64.whl',
+        'unpack_sources': False,
+        'checksums': ['cb9a12b0a1cb3f9c44a75959f687e548dc642a9470be3c63f73bccf291b8dcc8'],
+    }),
+    ('llvmlite', '0.38.0', {
+        'patches': ['llvmlite-0.38.0-llvm13.patch'],
+        'preinstallopts': """export LLVM_CONFIG=${EBROOTLLVM}/bin/llvm-config && \\
+            export LLVMLITE_SKIP_LLVM_VERSION_CHECK=1 && export NUMBA_DISABLE_INTEL_SVML=1 && """,
+        'source_urls': ['https://github.com/numba/llvmlite/archive/refs/tags/'],
+        'sources': ['v%(version)s.tar.gz'],
+        'checksums': [
+            '90d2d3fa26a410bd976b83f7534dc0dcf484135370ef5bf8d9d7f0103dbc054b',  # v0.38.0.tar.gz
+            '9100416ee18ea480cfde81307e375eec45c9adf79a81a846489000786b77a838',  # llvmlite-0.38.0-llvm13.patch
+        ],
+    }),
+    (name, version, {
+        'source_urls': ['https://pypi.python.org/packages/source/n/numba/'],
+        'checksums': ['03e9069a2666d1c84f93b00dbd716fb8fedde8bb2c6efafa2f04842a46442ea3'],
+    }),
+]
+
+fix_python_shebang_for = ['bin/*']
+
+sanity_check_paths = {
+    'files': ['bin/numba', 'bin/pycc'],
+    'dirs': ['lib/python%(pyshortver)s/site-packages'],
+}
+
+sanity_check_commands = ["numba --help"]
+
+modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']}
+
+moduleclass = 'lang'
diff --git a/Golden_Repo/o/OpenCV/OpenCV-4.5.5-gcccoremkl-11.2.0-2021.4.0-contrib.eb b/Golden_Repo/o/OpenCV/OpenCV-4.5.5-gcccoremkl-11.2.0-2021.4.0-contrib.eb
new file mode 100644
index 0000000000000000000000000000000000000000..9d783c79c2073837961d26805a4c9d3ea1dbd68e
--- /dev/null
+++ b/Golden_Repo/o/OpenCV/OpenCV-4.5.5-gcccoremkl-11.2.0-2021.4.0-contrib.eb
@@ -0,0 +1,139 @@
+easyblock = 'CMakeMake'
+
+name = 'OpenCV'
+version = '4.5.5'
+versionsuffix = '-contrib'
+
+# the hash is version dependent! see 3rdparty/ippicv/ippicv.cmake
+local_ippicv_hash = 'a56b6ac6f030c312b2dce17430eef13aed9af274'
+
+homepage = 'https://opencv.org/'
+description = """OpenCV (Open Source Computer Vision Library) is an open source computer vision
+ and machine learning software library. OpenCV was built to provide
+ a common infrastructure for computer vision applications and to accelerate
+ the use of machine perception in the commercial products.
+ Includes extra modules for OpenCV from the contrib repository."""
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+toolchainopts = {'pic': True, 'optarch': True}
+
+sources = [
+    {'source_urls': ['https://github.com/opencv/opencv/archive/'],
+     'download_filename': '%(version)s.zip', 'filename': SOURCELOWER_ZIP},
+    {'source_urls': ['https://github.com/opencv/opencv_contrib/archive/'],
+     'download_filename': '%(version)s.zip', 'filename': '%(namelower)s_contrib-%(version)s.zip'},
+    {'source_urls': ['https://raw.githubusercontent.com/opencv/opencv_3rdparty/%s/ippicv' % local_ippicv_hash],
+     'filename': 'ippicv_2020_lnx_intel64_20191018_general.tgz', 'extract_cmd': "cp %s %(builddir)s"},
+]
+checksums = [
+    'fb16b734db3a28e5119d513bd7c61ef417edf3756165dc6259519bb9d23d04e2',  # opencv-4.5.5.zip
+    'f53a0e531b2e284d2d1af013f5d96a86dfc1165d71eb47ddc9e7b834cc803091',  # opencv_contrib-4.5.5.zip
+    '08627fa5660d52d59309a572dd7db5b9c8aea234cfa5aee0942a1dd903554246',  # ippicv_2020_lnx_intel64_20191018_general.tgz
+]
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('CMake', '3.21.1', '', SYSTEM),
+]
+
+dependencies = [
+    ('Python', '3.9.6'),
+    ('SciPy-bundle', '2021.10'),  # for numpy
+    ('zlib', '1.2.11'),
+    ('FFmpeg', '4.4.1'),
+    ('GStreamer', '1.18.6'),
+    ('freetype', '2.11.0'),
+    ('HarfBuzz', '2.8.2'),
+    ('libjpeg-turbo', '2.1.1'),
+    ('libpng', '1.6.37'),
+    ('LibTIFF', '4.3.0'),
+    ('libwebp', '1.2.0'),
+    ('OpenEXR', '3.1.1'),
+    ('JasPer', '2.0.33'),
+    ('Java', '15', '', True),
+    ('ant', '1.10.12', '-Java-%(javaver)s', True),
+    ('GLib', '2.69.1'),
+    ('GTK+', '3.24.23',),
+    ('HDF5', '1.12.1', '-serial'),  # needed by hdf from contrib
+    ('protobuf', '3.17.3'),
+    ('Eigen', '3.3.9'),
+    ('CUDA', '11.5', '', SYSTEM),
+    ('cuDNN', '8.3.1.22', '-CUDA-11.5', SYSTEM),
+    ('nvidia-Video_Codec_SDK', '11.1.5', '', SYSTEM),
+    ('OpenGL', '2021b'),
+]
+
+separate_build_dir = True
+
+configopts = "-D CMAKE_BUILD_TYPE=RELEASE "
+configopts += '-D CMAKE_CXX_FLAGS="-Wdeprecated-declarations" '
+
+configopts += "-D OPENCV_GENERATE_PKGCONFIG=ON "
+configopts += "-D ENABLE_PRECOMPILED_HEADERS=OFF "
+
+configopts += "-D BUILD_EXAMPLES=ON "
+configopts += "-D INSTALL_PYTHON_EXAMPLES=ON "
+
+# configopts += "-D ENABLE_FAST_MATH=ON "
+# configopts += "-D CUDA_FAST_MATH=ON "
+
+configopts += "-D WITH_CUDA=ON "
+configopts += "-D WITH_CUDNN=ON "
+configopts += "-D WITH_CUBLAS=ON "
+configopts += "-D WITH_CUFFT=ON "
+configopts += "-D CUDA_ARCH_BIN='%(cuda_cc_space_sep)s' "
+# configopts += "-D CUDA_ARCH_PTX='' "
+configopts += "-D BUILD_CUDA_STUBS=ON "
+configopts += "-D OPENCV_DNN_CUDA=ON "
+configopts += "-D BUILD_opencv_cudacodec=ON "
+
+configopts += "-D WITH_NVCUVID=ON "
+
+configopts += "-D WITH_GSTREAMER=ON "
+
+configopts += '-DOPENCV_EXTRA_MODULES_PATH=%(builddir)s/%(namelower)s_contrib-%(version)s/modules '
+
+configopts += "-DProtobuf_INCLUDE_DIR=$EBROOTPROTOBUF/include "
+configopts += "-DProtobuf_LIBRARY=$EBROOTPROTOBUF/lib64/libprotobuf.so "
+configopts += "-DProtobuf_LITE_LIBRARY_RELEASE=$EBROOTPROTOBUF/lib64/libprotobuf-lite.so "
+configopts += "-DProtobuf_PROTOC_LIBRARY_RELEASE=$EBROOTPROTOBUF/lib64/bprotoc.so "
+configopts += "-DBUILD_PROTOBUF=OFF -DPROTOBUF_UPDATE_FILES=ON "
+
+# XXXX in configurations is a bug fix in OpenCV because ocv_check_modules is not able to recognize freetype and harfbuzz
+# ref: https://github.com/opencv/opencv/blob/6e8daaec0f46aaba9ea22e2afce47307b1dbff9f/cmake/OpenCVUtils.cmake#L861
+
+configopts += '-DFREETYPE_FOUND=ON '
+configopts += '-DFREETYPE_INCLUDE_DIRS=$EBROOTFREETYPE/include/freetype2/ '
+configopts += '-DFREETYPE_LIBRARIES=$EBROOTFREETYPE/lib64/libfreetype.so '
+configopts += '-DFREETYPE_LINK_LIBRARIES=$EBROOTFREETYPE/lib64/libfreetype.so '
+configopts += '-DFREETYPE_LINK_LIBRARIES_XXXXX=ON '
+
+configopts += '-DHARFBUZZ_FOUND=ON '
+configopts += '-DHARFBUZZ_INCLUDE_DIRS=$EBROOTHARFBUZZ/include/harfbuzz '
+configopts += '-DHARFBUZZ_LIBRARIES=$EBROOTHARFBUZZ/lib64/libharfbuzz.so '
+configopts += '-DHARFBUZZ_LINK_LIBRARIES=$EBROOTHARFBUZZ/lib64/libharfbuzz.so '
+configopts += '-DHARFBUZZ_LINK_LIBRARIES_XXXXX=ON '
+
+configopts += "-D PYTHON_DEFAULT_EXECUTABLE=$EBROOTPYTHON/bin/python3 "
+configopts += "-D PYTHON2_EXECUTABLE='' "  # ensure python2 is NOT used
+configopts += '-DBUILD_opencv_python2=OFF '
+
+configopts += "-D WITH_OPENMP=ON "
+
+modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages/'}
+
+enhance_sanity_check = True
+
+local_contrib_libs = [
+    'aruco', 'bgsegm', 'bioinspired', 'ccalib', 'datasets', 'dnn_objdetect', 'dnn_superres', 'dpm', 'face', 'freetype',
+    'fuzzy', 'hdf', 'hfs', 'img_hash', 'line_descriptor', 'optflow', 'phase_unwrapping', 'plot', 'quality', 'reg',
+    'rgbd', 'saliency', 'shape', 'stereo', 'structured_light', 'superres', 'surface_matching', 'text', 'tracking',
+    'videostab', 'xfeatures2d', 'ximgproc', 'xobjdetect', 'xphoto'
+]
+
+sanity_check_paths = {
+    'files': ['lib64/libopencv_%s.%s' % (l, SHLIB_EXT) for l in local_contrib_libs],
+    'dirs': [],
+}
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/o/OpenFOAM/OpenFOAM-v1906-wmake-ompi.patch b/Golden_Repo/o/OpenFOAM/OpenFOAM-v1906-wmake-ompi.patch
new file mode 100644
index 0000000000000000000000000000000000000000..78291300d58feaf61c9847c86a72abffec805986
--- /dev/null
+++ b/Golden_Repo/o/OpenFOAM/OpenFOAM-v1906-wmake-ompi.patch
@@ -0,0 +1,29 @@
+# - Corrected output of "wmake -show-c" and "wmake -show-c++" with OpenMPI in order to allow compilation of paraFoam
+#
+# author: Jiri Furst <Jiri.Furst@gmail.com>
+--- OpenFOAM-v1906/wmake/makefiles/info.orig	2019-11-07 18:12:53.000000000 +0100
++++ OpenFOAM-v1906/wmake/makefiles/info	2019-11-23 12:52:50.700688579 +0100
+@@ -73,19 +73,19 @@
+ 
+ .PHONY: c
+ c:
+-	@echo "$(firstword $(cc))"
++	@echo "$(lastword $(cc))"
+ 
+ .PHONY: cxx
+ cxx:
+-	@echo "$(firstword $(CC))"
++	@echo "$(lastword $(CC))"
+ 
+ .PHONY: cflags
+ cflags:
+-	@echo "$(wordlist 2,$(words $(COMPILE_C)), $(COMPILE_C))"
++	@echo "$(wordlist 3,$(words $(COMPILE_C)), $(COMPILE_C))"
+ 
+ .PHONY: cxxflags
+ cxxflags:
+-	@echo "$(wordlist 2,$(words $(COMPILE_CXX)), $(COMPILE_CXX))"
++	@echo "$(wordlist 3,$(words $(COMPILE_CXX)), $(COMPILE_CXX))"
+ 
+ .PHONY: cflags-arch
+ cflags-arch:
diff --git a/Golden_Repo/o/OpenFOAM/OpenFOAM-v2012-cleanup.patch b/Golden_Repo/o/OpenFOAM/OpenFOAM-v2012-cleanup.patch
new file mode 100644
index 0000000000000000000000000000000000000000..daccb9439617bee6e1d5038794d6678de6cf00d3
--- /dev/null
+++ b/Golden_Repo/o/OpenFOAM/OpenFOAM-v2012-cleanup.patch
@@ -0,0 +1,150 @@
+# Replaces OpenFOAM third-party libraries with EASYBUILD variants.
+# Uses the OpenFOAM prefs mechanism and the FOAM_CONFIG_ETC variable
+# to define the preferred settings without patching the original files
+#
+# Authors: Mark Olesen <Mark.Olesen@esi-group.com>
+# -------------------------------------------------------------------------
+--- /dev/null	2020-12-14 09:05:45.272769166 +0100
++++ OpenFOAM-v2012/etc/prefs.sh	2020-12-14 10:02:26.488430802 +0100
+@@ -0,0 +1,7 @@
++##Easybuild## settings -*- sh -*-
++
++export FOAM_CONFIG_ETC="etc/easybuild"
++
++export WM_MPLIB=EASYBUILDMPI
++
++##Easybuild##
+--- /dev/null	2020-12-14 09:05:45.272769166 +0100
++++ OpenFOAM-v2012/etc/easybuild/config.sh/CGAL	2020-12-14 10:10:55.991841204 +0100
+@@ -0,0 +1,6 @@
++##Easybuild## settings -*- sh -*-
++
++export BOOST_ARCH_PATH="$EBROOTBOOST"
++export CGAL_ARCH_PATH="$EBROOTCGAL"
++
++##Easybuild##
+--- /dev/null	2020-12-14 09:05:45.272769166 +0100
++++ OpenFOAM-v2012/etc/easybuild/config.sh/FFTW	2020-12-14 10:10:53.735843322 +0100
+@@ -0,0 +1,5 @@
++##Easybuild## settings -*- sh -*-
++
++export FFTW_ARCH_PATH="$EBROOTFFTW"
++
++##EasyBuild##
+--- /dev/null	2020-12-14 09:05:45.272769166 +0100
++++ OpenFOAM-v2012/etc/easybuild/config.sh/metis	2020-12-11 21:23:28.774934024 +0100
+@@ -0,0 +1,6 @@
++##Easybuild## settings -*- sh -*-
++
++METIS_VERSION="metis-$EBVERSIONMETIS"
++[ -d "$METIS_ARCH_PATH" ] || METIS_ARCH_PATH="$METIS_ROOT"
++
++##Easybuild##
+--- /dev/null	2020-12-14 09:05:45.272769166 +0100
++++ OpenFOAM-v2012/etc/easybuild/config.sh/readline	2020-12-11 21:23:22.534951043 +0100
+@@ -0,0 +1,5 @@
++##Easybuild## settings -*- sh -*-
++
++export READLINE_ARCH_PATH="$EBROOTLIBREADLINE"
++
++##Easybuild##
+--- /dev/null	2020-12-14 09:05:45.272769166 +0100
++++ OpenFOAM-v2012/etc/easybuild/config.sh/scotch	2020-12-11 21:23:17.586964539 +0100
+@@ -0,0 +1,7 @@
++##Easybuild## settings -*- sh -*-
++
++export SCOTCH_VERSION="scotch_$EBVERSIONSCOTCH"
++export SCOTCH_ARCH_PATH="$EBROOTSCOTCH"
++[ -d "$SCOTCH_ARCH_PATH" ] || SCOTCH_ARCH_PATH="$SCOTCH_ROOT"
++
++##Easybuild##
+--- /dev/null	2020-12-14 09:05:45.272769166 +0100
++++ OpenFOAM-v2012/etc/easybuild/config.sh/vtk	2020-12-11 21:22:55.463024882 +0100
+@@ -0,0 +1,9 @@
++##Easybuild## settings -*- sh -*-
++
++export VTK_DIR="$EBROOTVTK"
++export MESA_ARCH_PATH="$EBROOTMESA"
++
++# Define paraview-mesa directory as required
++unset ParaView_MESA_DIR
++
++##Easybuild##
+--- /dev/null	2020-12-14 09:05:45.272769166 +0100
++++ OpenFOAM-v2012/etc/easybuild/config.sh/paraview	2020-12-14 10:13:53.583674383 +0100
+@@ -0,0 +1,75 @@
++##Easybuild## settings -*- sh -*-
++#
++# Largely a knockoff of the OpenFOAM etc/config.sh/paraview-system
++# readjusted for easybuild
++#
++# Copyright (C) 2020 OpenCFD Ltd.
++#
++#------------------------------------------------------------------------------
++# Compiler-specific location for ThirdParty installations
++archDir="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER"
++
++# Clean path and library path of previous settings
++eval \
++    "$($WM_PROJECT_DIR/bin/foamCleanPath -sh-env=PATH \
++    $ParaView_DIR $archDir/ParaView- $archDir/qt-)"
++
++eval \
++    "$($WM_PROJECT_DIR/bin/foamCleanPath -sh-env=LD_LIBRARY_PATH \
++    $ParaView_DIR $archDir/ParaView- $archDir/qt-)"
++
++
++#------------------------------------------------------------------------------
++
++##Easybuild## settings
++
++ParaView_VERSION="$EBVERSIONPARAVIEW"
++export ParaView_DIR="$EBROOTPARAVIEW"
++
++#------------------------------------------------------------------------------
++
++unset PV_PLUGIN_PATH
++
++# Set API to correspond to VERSION
++# pv_api is <digits>.<digits> from ParaView_VERSION
++#-
++# Extract API from VERSION
++pv_api=$(echo "$ParaView_VERSION" | \
++    sed -ne 's/^[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/p')
++
++pv_plugin_dir="$FOAM_LIBBIN/paraview-$pv_api"
++
++# Set paths if binaries are present
++if [ -r "$ParaView_DIR" ]
++then
++    export PATH="$ParaView_DIR/bin:$PATH"
++
++    # ParaView libraries
++    # - 5.5 and later:   lib/, but could also be lib64/
++    for libDir in lib64 lib
++    do
++        pvLibDir="$libDir/paraview-$pv_api"
++        if [ -d "$ParaView_DIR/$pvLibDir" ]
++        then
++            export LD_LIBRARY_PATH="$ParaView_DIR/$libDir:$LD_LIBRARY_PATH"
++            break
++        fi
++    done
++
++    # OpenFOAM plugin directory must be the first in PV_PLUGIN_PATH
++    # and have paraview-major.minor encoded in its name
++    if [ -d "$pv_plugin_dir" ]
++    then
++        export PV_PLUGIN_PATH="$pv_plugin_dir"
++    fi
++fi
++
++
++#------------------------------------------------------------------------------
++
++unset ParaView_VERSION
++
++unset archDir libDir
++unset pv_api pv_plugin_dir pvLibDir
++
++#------------------------------------------------------------------------------
diff --git a/Golden_Repo/o/OpenFOAM/OpenFOAM-v2112-gpsmpi-2021b.eb b/Golden_Repo/o/OpenFOAM/OpenFOAM-v2112-gpsmpi-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..23de983cdea28e97b40ce59fb29df52c31cacf60
--- /dev/null
+++ b/Golden_Repo/o/OpenFOAM/OpenFOAM-v2112-gpsmpi-2021b.eb
@@ -0,0 +1,41 @@
+name = 'OpenFOAM'
+version = 'v2112'
+
+homepage = 'https://www.openfoam.com/'
+description = """OpenFOAM is a free, open source CFD software package.
+ OpenFOAM has an extensive range of features to solve anything from complex fluid flows
+ involving chemical reactions, turbulence and heat transfer,
+ to solid dynamics and electromagnetics."""
+
+toolchain = {'name': 'gpsmpi', 'version': '2021b'}
+toolchainopts = {'opt': True, 'cstd': 'c++17'}
+
+source_urls = ['https://sourceforge.net/projects/openfoam/files/%(version)s/']
+sources = [SOURCE_TGZ]
+patches = [
+    ('OpenFOAM-v2012-cleanup.patch', 1),
+    'OpenFOAM-v1906-wmake-ompi.patch',
+]
+checksums = [
+    '3e838731e79db1c288acc27aad8cc8a43d9dac1f24e5773e3b9fa91419a8c3f7',  # OpenFOAM-v2112.tgz
+    'cdd2597a1ac1448e9bd33a364a8dfe17f51cc9ab5a8e0ab67cf92bba3ed9da43',  # OpenFOAM-v2012-cleanup.patch
+    '518e27683c5c41400cfbc17b31effa50b31b25916dccbf85b18b0b955f642505',  # OpenFOAM-v1906-wmake-ompi.patch
+]
+
+builddependencies = [
+    ('Bison', '3.7.6'),
+    ('CMake', '3.21.1'),
+    ('flex', '2.6.4'),
+]
+
+dependencies = [
+    ('libreadline', '8.1'),
+    ('ncurses', '6.2'),
+    # OpenFOAM requires 64 bit METIS using 32 bit indexes (array indexes)
+    ('METIS', '5.1.0', '-RTW64-IDX32'),
+    ('SCOTCH', '6.1.2'),
+    ('CGAL', '5.2'),
+    ('gnuplot', '5.4.2'),
+]
+
+moduleclass = 'cae'
diff --git a/Golden_Repo/p/PETSc/petsc4py-3.16.3-gomkl-2021b-Python-3.9.6.eb b/Golden_Repo/p/PETSc/petsc4py-3.16.3-gomkl-2021b-Python-3.9.6.eb
new file mode 100644
index 0000000000000000000000000000000000000000..ceda2e0d67596795257a499661d9196ee7af7f56
--- /dev/null
+++ b/Golden_Repo/p/PETSc/petsc4py-3.16.3-gomkl-2021b-Python-3.9.6.eb
@@ -0,0 +1,29 @@
+easyblock = 'PythonPackage'
+
+name = 'petsc4py'
+version = '3.16.3'
+versionsuffix = '-Python-%(pyver)s'
+
+homepage = 'https://bitbucket.org/petsc/petsc4py'
+description = "petsc4py are Python bindings for PETSc, the Portable, Extensible Toolchain for Scientific Computation."
+
+toolchain = {'name': 'gomkl', 'version': '2021b'}
+
+source_urls = [PYPI_SOURCE]
+sources = [SOURCE_TAR_GZ]
+checksums = ['10e730d50716e40de55b200ff53b461bc4f3fcc798ba89b74dfe6bdf63fa7b6e']
+
+dependencies = [
+    ('Python', '3.9.6'),
+    ('SciPy-Stack', '2021b', '', ('gcccoremkl', '11.2.0-2021.4.0')),
+    ('PETSc', '3.16.3'),
+]
+
+download_dep_fail = True
+
+sanity_check_paths = {
+    'files': [],
+    'dirs': ['lib/python%(pyshortver)s/site-packages'],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/p/PETSc/petsc4py-3.16.3-gspmkl-2021b-Python-3.9.6.eb b/Golden_Repo/p/PETSc/petsc4py-3.16.3-gspmkl-2021b-Python-3.9.6.eb
new file mode 100644
index 0000000000000000000000000000000000000000..f80cb5f53aa83d3cbfb53e0edc3d892348ceb262
--- /dev/null
+++ b/Golden_Repo/p/PETSc/petsc4py-3.16.3-gspmkl-2021b-Python-3.9.6.eb
@@ -0,0 +1,29 @@
+easyblock = 'PythonPackage'
+
+name = 'petsc4py'
+version = '3.16.3'
+versionsuffix = '-Python-%(pyver)s'
+
+homepage = 'https://bitbucket.org/petsc/petsc4py'
+description = "petsc4py are Python bindings for PETSc, the Portable, Extensible Toolchain for Scientific Computation."
+
+toolchain = {'name': 'gpsmkl', 'version': '2021b'}
+
+source_urls = [PYPI_SOURCE]
+sources = [SOURCE_TAR_GZ]
+checksums = ['10e730d50716e40de55b200ff53b461bc4f3fcc798ba89b74dfe6bdf63fa7b6e']
+
+dependencies = [
+    ('Python', '3.9.6'),
+    ('SciPy-Stack', '2021b', '', ('gcccoremkl', '11.2.0-2021.4.0')),
+    ('PETSc', '3.16.3'),
+]
+
+download_dep_fail = True
+
+sanity_check_paths = {
+    'files': [],
+    'dirs': ['lib/python%(pyshortver)s/site-packages'],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/p/Pillow/Pillow-8.3.1-GCCcore-11.2.0.eb b/Golden_Repo/p/Pillow-SIMD/Pillow-SIMD-9.0.1-GCCcore-11.2.0.eb
similarity index 60%
rename from Golden_Repo/p/Pillow/Pillow-8.3.1-GCCcore-11.2.0.eb
rename to Golden_Repo/p/Pillow-SIMD/Pillow-SIMD-9.0.1-GCCcore-11.2.0.eb
index fec7c8e641e356d5f83a478e5cec9f0b4bcac5ae..66f99fe2012ddcba5503de3366ffe8e44979595f 100644
--- a/Golden_Repo/p/Pillow/Pillow-8.3.1-GCCcore-11.2.0.eb
+++ b/Golden_Repo/p/Pillow-SIMD/Pillow-SIMD-9.0.1-GCCcore-11.2.0.eb
@@ -1,16 +1,17 @@
 easyblock = 'PythonPackage'
 
-name = 'Pillow'
-version = '8.3.1'
+name = 'Pillow-SIMD'
+version = '9.0.1'
 
-homepage = 'https://pillow.readthedocs.org/'
+homepage = 'https://github.com/uploadcare/pillow-simd'
 description = """Pillow is the 'friendly PIL fork' by Alex Clark and Contributors.
  PIL is the Python Imaging Library by Fredrik Lundh and Contributors."""
 
 toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
 
-sources = [SOURCE_TAR_GZ]
-checksums = ['2cac53839bfc5cece8fdbe7f084d5e3ee61e1303cccc86511d351adcb9e2c792']
+source_urls = ['https://github.com/uploadcare/pillow-simd/archive/']
+sources = ['%(version)s.tar.gz']
+checksums = ['4f91ab5ede15bfc71075941b62a7db3eee337fe810588a57e3c0dc103ac1bb45']
 
 builddependencies = [('binutils', '2.37')]
 
@@ -23,10 +24,16 @@ dependencies = [
     ('freetype', '2.11.0')
 ]
 
-download_dep_fail = True
 use_pip = True
-sanity_pip_check = True
+download_dep_fail = True
 
 options = {'modulename': 'PIL'}
 
+sanity_check_paths = {
+    'files': [],
+    'dirs': ['lib/python%(pyshortver)s/site-packages/PIL'],
+}
+
+sanity_pip_check = True
+
 moduleclass = 'vis'
diff --git a/Golden_Repo/p/PyGObject/PyGObject-3.42.0-GCCcore-11.2.0.eb b/Golden_Repo/p/PyGObject/PyGObject-3.42.0-GCCcore-11.2.0.eb
index a5fc244563d8694a82b4289ffe2ac99672858a78..7033ab568a3df8a1a791868230b575c5218f6296 100644
--- a/Golden_Repo/p/PyGObject/PyGObject-3.42.0-GCCcore-11.2.0.eb
+++ b/Golden_Repo/p/PyGObject/PyGObject-3.42.0-GCCcore-11.2.0.eb
@@ -27,15 +27,12 @@ dependencies = [
     ('libffi', '3.4.2'),
 ]
 
-use_pip = True
+use_pip = False
 sanity_pip_check = True
 download_dep_fail = True
 
-# remove pyproject.toml, which causes trouble (header files and .pc file are not installed)
-preinstallopts = "rm pyproject.toml && "
-
-# Don't build a wheel or the pkg-cfg file won't be installed
-installopts = '--no-binary=%(namelower)s'
+# install data (pkg-config and include files)
+installopts = '--root=/'
 
 sanity_check_paths = {
     'files': [
diff --git a/Golden_Repo/p/PyQt5/PyQt5-5.15.4-GCCcore-11.2.0.eb b/Golden_Repo/p/PyQt5/PyQt5-5.15.4-GCCcore-11.2.0.eb
index 186141973332207eb5c8e82175982d7dc7a3f466..50e54496b4a13feaf99128427e2d215f735dbee8 100644
--- a/Golden_Repo/p/PyQt5/PyQt5-5.15.4-GCCcore-11.2.0.eb
+++ b/Golden_Repo/p/PyQt5/PyQt5-5.15.4-GCCcore-11.2.0.eb
@@ -20,12 +20,22 @@ default_easyblock = 'PythonPackage'
 
 local_pylibdir = '%(installdir)s/lib/python%(pyshortver)s/site-packages'
 
-local_pyqt5_sip_install = "sip-install --verbose --target-dir " + local_pylibdir + " "
-local_pyqt5_sip_install += "--confirm-license --no-designer-plugin --no-qml-plugin --no-tools"
+local_pyqt5_sip_install = " ".join([
+    "sip-install",
+    "--verbose",
+    "--confirm-license",
+    "--target-dir " + local_pylibdir,
+])
 
-local_pyqtweb_configopts = "configure.py --verbose --destdir=%s/PyQt5 " % local_pylibdir
-local_pyqtweb_configopts += "--apidir=%(installdir)s/qsci --pyqt-sipdir=%(builddir)s/PyQt5-%(version)s/sip "
-local_pyqtweb_configopts += "--no-stubs --no-dist-info"
+local_pyqtweb_configopts = " ".join([
+    "configure.py",
+    "--verbose",
+    "--destdir=%s/PyQt5" % local_pylibdir,
+    "--apidir=%(installdir)s/qsci",
+    "--pyqt-sipdir=%(builddir)s/PyQt5-%(version)s/sip",
+    "--no-stubs",
+    "--no-dist-info",
+])
 
 local_setup_env = "export PATH=%(installdir)s/bin:$PATH && "
 local_setup_env += "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && "
@@ -81,6 +91,8 @@ sanity_check_paths = {
 
 sanity_check_commands = [
     "python -c 'import PyQt5.QtCore'",
+    "python -c 'import PyQt5.pyrcc'",
+    "python -c 'import PyQt5.uic'",
     "sip5 --help",
 ]
 
diff --git a/Golden_Repo/p/PyTorch-Geometric/PyTorch-Geometric-2.0.4-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/p/PyTorch-Geometric/PyTorch-Geometric-2.0.4-gcccoremkl-11.2.0-2021.4.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..6e521d7840040c23edb9bf43272c2aaa873ab2cb
--- /dev/null
+++ b/Golden_Repo/p/PyTorch-Geometric/PyTorch-Geometric-2.0.4-gcccoremkl-11.2.0-2021.4.0.eb
@@ -0,0 +1,124 @@
+easyblock = 'PythonBundle'
+
+name = 'PyTorch-Geometric'
+version = '2.0.4'
+local_pytorch_ver = '1.11'
+
+homepage = 'https://github.com/rusty1s/pytorch_geometric'
+description = "PyTorch Geometric (PyG) is a geometric deep learning extension library for PyTorch."
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+
+local_pysuff = '-Python-%(pyver)s'
+dependencies = [
+    ('Python', '3.9.6'),
+    ('CUDA', '11.5', '', SYSTEM),
+    ('PyTorch', '1.11', '-CUDA-%(cudaver)s', ('gcccoremkl', '11.2.0-2021.4.0')),
+    ('SciPy-bundle', '2021.10'),
+    ('numba', '0.55.1'),
+    ('h5py', '3.5.0', '-serial'),
+    ('matplotlib', '3.4.3'),
+    ('scikit-learn', '1.0.1'),
+    ('scikit-image', '0.18.3'),
+    ('trimesh', '3.9.36'),
+    ('METIS', '5.1.0', '-IDX64'),
+    ('RDFlib', '6.0.2'),
+    ('ASE', '3.22.0', '-nompi'),
+    ('YACS', '0.1.8'),
+    ('tqdm', '4.62.3'),
+    ('torchvision', '0.12.0', '-CUDA-%(cudaver)s', ('gcccoremkl', '11.2.0-2021.4.0')),
+    ('YACS', '0.1.8'),
+    ('Java', '15', '', True),  # for HDFML
+    # PyTorch-Lightning needs Tensorboard
+    ('TensorFlow', '2.6.0', '-CUDA-%(cudaver)s', ('gcccoremkl', '11.2.0-2021.4.0'))
+]
+
+use_pip = True
+
+exts_list = [
+    ('pyDeprecate', '0.3.2', {
+        'modulename': 'deprecate',
+        'checksums': ['d481116cc5d7f6c473e7c4be820efdd9b90a16b594b350276e9e66a6cb5bdd29'],
+    }),
+    ('calmsize', '0.1.3', {
+        'checksums': ['e1f1233228ae6b7fafc8c23e52129c7ca58fee6bcf7875ae152eee5123ba122d'],
+    }),
+    ('calmsize', '0.1.3', {
+        'checksums': ['e1f1233228ae6b7fafc8c23e52129c7ca58fee6bcf7875ae152eee5123ba122d'],
+    }),
+    ('antlr4-python3-runtime', '4.8', {
+        'modulename': 'antlr4',
+        'checksums': ['15793f5d0512a372b4e7d2284058ad32ce7dd27126b105fb0b2245130445db33'],
+    }),
+    ('omegaconf', '2.1.2', {
+        'checksums': ['35b347cda95e8ced224179a7059c216b1f38f363812847bd6c856be76936151d'],
+    }),
+    ('typing_extensions', '4.2.0', {
+        'modulename': 'typing_extensions',
+        'source_tmpl': '%(name)s-%(version)s-py3-none-any.whl',
+        'checksums': ['6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708'],
+    }),
+    ('captum', '0.5.0', {
+        'checksums': ['84af2c8793d34c440a351793b5ca705b8542745e2dc8bc24afb1d9b86f3bf6ec'],
+    }),
+    ('pytorch_memlab', '0.2.4', {
+        'modulename': 'pytorch_memlab',
+        'checksums': ['bd3395c7e122441732de492bb92e5f805086da05f8bcb45a7c5967234db8e812'],
+    }),
+    ('torchmetrics', '0.8.0', {
+        'checksums': ['8516aa79edb8475504f37c6239b1176a5b1d93cf2249d961caccd1a240808208'],
+    }),
+    ('Jinja2', '3.1.1', {
+        'checksums': ['640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9'],
+    }),
+    ('hydra-core', '1.1.2', {
+        'modulename': 'hydra',
+        'source_urls': ['https://github.com/facebookresearch/hydra/archive/refs/tags/'],
+        'sources': ['v%(version)s.tar.gz'],
+        'checksums': ['e8d07826e5da25c26b4a1a701817bf7afaa5375a90a4cb229c111d128de56961'],
+    }),
+    ('pytorch-lightning', '1.6.1', {
+        'checksums': ['280b9c7f84f9a6b6d2efb91c7b3caad50031e318d37cfe052f3047faf1f0a2de'],
+    }),
+    ('googledrivedownloader', '0.4', {
+        'modulename': 'google_drive_downloader',
+        'checksums': ['4b34c1337b2ff3bf2bd7581818efbdcaea7d50ffd484ccf80809688f5ca0e204'],
+    }),
+    ('plyfile', '0.7.4', {
+        'checksums': ['9e9a18d22a3158fcd74df38761d43a7facc6df75126f2ab9f4e9a5d4d2188652'],
+    }),
+    ('torch_scatter', '2.0.9', {
+        'checksums': ['08f5511d64473badf0a71d156b36dc2b09b9c2f00a7cd373b935b490c477a7f1'],
+    }),
+    ('torch_sparse', '0.6.13', {
+        'checksums': ['b4896822559f9b47d8b0186d74c94b7449f91db155a57d617fbeae9b722fa1f3'],
+    }),
+    ('torch_cluster', '1.6.0', {
+        'checksums': ['249c1bd8c33a887b22bf569a59d0868545804032123594dd8c76ba1885859c39'],
+    }),
+    ('torch_spline_conv', '1.2.1', {
+        'checksums': ['364f658e0ecb4c5263a728c2961553e022fc44c11a633d5a1bf986cf169ab438'],
+    }),
+    ('python-louvain', '0.16', {
+        'modulename': 'community.community_louvain',
+        'checksums': ['b7ba2df5002fd28d3ee789a49532baad11fe648e4f2117cf0798e7520a1da56b'],
+    }),
+    ('torch_geometric', version, {
+        'checksums': ['d64e4c7486fcf0c7fa82f0acbf5dd52035855469708bf89f8bc7fc607671c8b7'],
+    }),
+]
+
+preinstallopts = 'export TORCH_CUDA_ARCH_LIST="%(cuda_cc_semicolon_sep)s" ; '
+preinstallopts += 'export WITH_METIS=1; '
+preinstallopts += 'export FORCE_CUDA=1; '
+preinstallopts += 'export CUDA_HOME=$EBROOTCUDA; '
+preinstallopts += 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH; '
+preinstallopts += 'export PATH=$CUDA_HOME/bin:$PATH; '
+
+sanity_check_commands = [
+    "python -c 'import torch_sparse'",
+]
+
+sanity_pip_check = True
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.10.0_fix-test-dataloader-fixed-affinity.patch b/Golden_Repo/p/PyTorch/PyTorch-1.10.0_fix-test-dataloader-fixed-affinity.patch
new file mode 100644
index 0000000000000000000000000000000000000000..fb66d1b66968f1dc54a1b7d3e352f2034a4f14a2
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.10.0_fix-test-dataloader-fixed-affinity.patch
@@ -0,0 +1,40 @@
+# Author: Alexander Grund
+# Avoid test failures in CGROUP environments
+# See https://github.com/pytorch/pytorch/issues/44368 and https://github.com/pytorch/pytorch/pull/44369
+diff -Nru pytorch.orig/test/test_dataloader.py pytorch/test/test_dataloader.py
+--- pytorch.orig/test/test_dataloader.py	2021-10-28 19:19:23.284526686 +0200
++++ pytorch/test/test_dataloader.py	2021-10-28 19:21:31.860488973 +0200
+@@ -2374,22 +2374,27 @@
+         after = os.sched_getaffinity(0)
+         return iter(after)
+ 
+-
+-def worker_set_affinity(_):
+-    os.sched_setaffinity(0, [multiprocessing.cpu_count() - 1])
+-
+-
+ @unittest.skipIf(
+     not hasattr(os, 'sched_setaffinity'),
+     "os.sched_setaffinity is not available")
+ class TestSetAffinity(TestCase):
+     def test_set_affinity_in_worker_init(self):
++        # Query the current affinity mask to avoid setting a disallowed one
++        old_affinity = os.sched_getaffinity(0)
++        if not old_affinity:
++            self.skipTest("No affinity information")
++        # Choose any
++        expected_affinity = list(old_affinity)[-1]
++
++        def worker_set_affinity(_):
++            os.sched_setaffinity(0, [expected_affinity])
++
+         dataset = SetAffinityDataset()
+ 
+         dataloader = torch.utils.data.DataLoader(
+             dataset, num_workers=2, worker_init_fn=worker_set_affinity)
+         for sample in dataloader:
+-            self.assertEqual(sample, [multiprocessing.cpu_count() - 1])
++            self.assertEqual(sample, [expected_affinity])
+ 
+ class ConvDataset(Dataset):
+     def __init__(self):
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.10.0_skip_cmake_rpath.patch b/Golden_Repo/p/PyTorch/PyTorch-1.10.0_skip_cmake_rpath.patch
new file mode 100644
index 0000000000000000000000000000000000000000..09469cd45b4f59fc0a1a49e9477c97ed214cb866
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.10.0_skip_cmake_rpath.patch
@@ -0,0 +1,195 @@
+# Author: Caspar van Leeuwen
+# PyTorch's CMAKE configuration by default sets RUNPATH on libraries if they link other libraries
+# that are outside the build tree, which is done because of the CMAKE config on 
+# https://github.com/pytorch/pytorch/blob/v1.10.0/cmake/Dependencies.cmake#L10.
+# This provides problems, since the cuda stubs library path then also gets added to the RUNPATH.
+# As a result, at runtime, the stub version of things like libcuda.so.1 gets picked up, instead of the real drivers
+# See https://github.com/easybuilders/easybuild-easyconfigs/issues/14359
+# This line https://github.com/pytorch/pytorch/blob/v1.10.0/cmake/Dependencies.cmake#L16
+# Makes sure that any path that is linked, is also added to the RUNPATH.
+# This has been reported upstream in https://github.com/pytorch/pytorch/issues/35418
+# and a fix was attempted in https://github.com/pytorch/pytorch/pull/37737 but it was reverted
+#
+# This EasyBuild patch changes behavior for the libraries that were failing, i.e. the ones in this list:
+# https://github.com/easybuilders/easybuild-easyconfigs/issues/14359#issuecomment-970479904
+# This is done by setting INSTALL_RPATH_USE_LINK_PATH to false, and instead, specifying the RPATH
+# explicitely by defining INSTALL_RPATH, but only adding directories that do not match to the "stubs" regex
+# It has been upstreamed in this PR https://github.com/pytorch/pytorch/pull/68912 (not accepted yet at the time of writing)
+diff -Nru pytorch.orig/caffe2/CMakeLists.txt pytorch/caffe2/CMakeLists.txt
+--- pytorch.orig/caffe2/CMakeLists.txt	2021-11-17 11:46:01.797337624 +0100
++++ pytorch/caffe2/CMakeLists.txt	2021-11-18 19:05:35.637707235 +0100
+@@ -630,8 +630,33 @@
+     else()
+       set(DELAY_LOAD_FLAGS "")
+     endif()
+-    target_link_libraries(caffe2_nvrtc ${CUDA_NVRTC} ${CUDA_CUDA_LIB} ${CUDA_NVRTC_LIB} ${DELAY_LOAD_FLAGS})
++    # message("CUDA_NVRTC: ${CUDA_NVRTC}")
++    # message("CUDA_NVRTC_LIB: ${CUDA_NVRTC_LIB}")
++    # message("CUDA_CUDA_LIB: ${CUDA_CUDA_LIB}")
++    # message("DELAY_LOAD_FLAGS: ${DELAY_LOAD_FLAGS}")
++    # if(CUDA_CUDA_LIB MATCHES "stubs")
++    #   message("stubs libraries found in the CUDA_CUDA_LIB: ${CUDA_CUDA_LIB}")
++    # else()
++    #   message("Stubs libs not found in CUDA_CUDA_LIB: ${CUDA_CUDA_LIB}")
++    # endif()
++    # Make sure the CUDA stubs folder doesn't end up in the RPATH of CAFFE2_NVRTC:
++    set(CAFFE2_NVRTC_LIBS ${CUDA_NVRTC} ${CUDA_CUDA_LIB} ${CUDA_NVRTC_LIB})
++    foreach(LIB IN LISTS CAFFE2_NVRTC_LIBS)
++      message("LIB: ${LIB}")
++      if(LIB MATCHES "stubs")
++        message("Filtering ${LIB} from being set in caffe2_nvrtc's RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.")
++      else()
++        cmake_path(GET LIB PARENT_PATH LIB_PATH)
++        message("LIBPATH: ${LIB_PATH}")
++	list(APPEND CAFFE2_NVRTC_RPATH ${LIB_PATH})
++      endif()
++    endforeach()
++    message("CAFFE2_NVRTC_RPATH: ${CAFFE2_NVRTC_RPATH}")
++    set_target_properties(caffe2_nvrtc PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE)
++    set_target_properties(caffe2_nvrtc PROPERTIES INSTALL_RPATH "${CAFFE2_NVRTC_RPATH}")
++    target_link_libraries(caffe2_nvrtc ${CAFFE2_NVRTC_LIBS} ${DELAY_LOAD_FLAGS})
+     target_include_directories(caffe2_nvrtc PRIVATE ${CUDA_INCLUDE_DIRS})
++#    message(FATAL_ERROR "STOP HERE, we're debugging")
+     install(TARGETS caffe2_nvrtc DESTINATION "${TORCH_INSTALL_LIB_DIR}")
+     if(USE_NCCL AND BUILD_SPLIT_CUDA)
+       list(APPEND Caffe2_GPU_SRCS_CPP
+diff -Nru pytorch.orig/test/cpp/api/CMakeLists.txt pytorch/test/cpp/api/CMakeLists.txt
+--- pytorch.orig/test/cpp/api/CMakeLists.txt	2021-11-17 11:46:02.991350652 +0100
++++ pytorch/test/cpp/api/CMakeLists.txt	2021-11-18 19:06:41.207423777 +0100
+@@ -61,6 +61,22 @@
+     ${CUDA_CUDA_LIB}
+     ${TORCH_CUDA_LIBRARIES})
+ 
++  # Make sure the CUDA stubs folder doesn't end up in the RPATH of test_api:
++  set(TEST_API_LIBS ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB} ${CUDA_CUDA_LIB} ${TORCH_CUDA_LIBRARIES})
++  foreach(LIB IN LISTS TEST_API_LIBS)
++    message("LIB: ${LIB}")
++    if(LIB MATCHES "stubs")
++      message("Filtering ${LIB} from being set in caffe2_nvrtc's RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.")
++    else()
++      cmake_path(GET LIB PARENT_PATH LIB_PATH)
++      message("LIBPATH: ${LIB_PATH}")
++      list(APPEND TEST_API_RPATH ${LIB_PATH})
++    endif()
++  endforeach()
++  message("TEST_API_RPATH: ${TEST_API_RPATH}")
++  set_target_properties(test_api PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE)
++  set_target_properties(test_api PROPERTIES INSTALL_RPATH "${TEST_API_RPATH}")
++
+   target_compile_definitions(test_api PRIVATE "USE_CUDA")
+ endif()
+ 
+diff -Nru pytorch.orig/test/cpp/dist_autograd/CMakeLists.txt pytorch/test/cpp/dist_autograd/CMakeLists.txt
+--- pytorch.orig/test/cpp/dist_autograd/CMakeLists.txt	2021-11-17 11:46:02.993350674 +0100
++++ pytorch/test/cpp/dist_autograd/CMakeLists.txt	2021-11-18 19:06:18.389174421 +0100
+@@ -16,6 +16,22 @@
+       ${CUDA_CUDA_LIB}
+       ${TORCH_CUDA_LIBRARIES})
+ 
++    # Make sure the CUDA stubs folder doesn't end up in the RPATH of test_dist_autograd:
++    set(DIST_AUTOGRAD_LIBS ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB} ${CUDA_CUDA_LIB} ${TORCH_CUDA_LIBRARIES})
++    foreach(LIB IN LISTS DIST_AUTOGRAD_LIBS)
++      message("LIB: ${LIB}")
++      if(LIB MATCHES "stubs")
++        message("Filtering ${LIB} from being set in caffe2_nvrtc's RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.")
++      else()
++        cmake_path(GET LIB PARENT_PATH LIB_PATH)
++        message("LIBPATH: ${LIB_PATH}")
++        list(APPEND DIST_AUTOGRAD_RPATH ${LIB_PATH})
++      endif()
++    endforeach()
++    message("DIST_AUTOGRAD_RPATH: ${DIST_AUTOGRAD_RPATH}")
++    set_target_properties(test_dist_autograd PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE)
++    set_target_properties(test_dist_autograd PROPERTIES INSTALL_RPATH "${DIST_AUTOGRAD_RPATH}")
++
+     target_compile_definitions(test_dist_autograd PRIVATE "USE_CUDA")
+   endif()
+ 
+diff -Nru pytorch.orig/test/cpp/jit/CMakeLists.txt pytorch/test/cpp/jit/CMakeLists.txt
+--- pytorch.orig/test/cpp/jit/CMakeLists.txt	2021-11-17 11:46:02.989350630 +0100
++++ pytorch/test/cpp/jit/CMakeLists.txt	2021-11-18 19:05:41.396770168 +0100
+@@ -94,6 +94,7 @@
+   list(APPEND JIT_TEST_DEPENDENCIES onnx_library)
+ endif(MSVC)
+ 
++
+ target_link_libraries(test_jit PRIVATE ${JIT_TEST_DEPENDENCIES})
+ target_include_directories(test_jit PRIVATE ${ATen_CPU_INCLUDE})
+ 
+@@ -109,6 +110,22 @@
+     ${CUDA_CUDA_LIB}
+     ${TORCH_CUDA_LIBRARIES})
+ 
++  # Make sure the CUDA stubs folder doesn't end up in the RPATH of test_jit:
++  set(TEST_JIT_LIBS ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB} ${CUDA_CUDA_LIB} ${TORCH_CUDA_LIBRARIES})
++  foreach(LIB IN LISTS TEST_JIT_LIBS)
++    message("LIB: ${LIB}")
++    if(LIB MATCHES "stubs")
++      message("Filtering ${LIB} from being set in test_jit's RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.")
++    else()
++      cmake_path(GET LIB PARENT_PATH LIB_PATH)
++      message("LIBPATH: ${LIB_PATH}")
++      list(APPEND TEST_JIT_RPATH ${LIB_PATH})
++    endif()
++  endforeach()
++  message("TEST_JIT_RPATH: ${TEST_JIT_RPATH}")
++  set_target_properties(test_jit PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE)
++  set_target_properties(test_jit PROPERTIES INSTALL_RPATH "${TEST_JIT_RPATH}")
++
+   target_compile_definitions(test_jit PRIVATE USE_CUDA)
+ elseif(USE_ROCM)
+   target_link_libraries(test_jit PRIVATE
+diff -Nru pytorch.orig/test/cpp/rpc/CMakeLists.txt pytorch/test/cpp/rpc/CMakeLists.txt
+--- pytorch.orig/test/cpp/rpc/CMakeLists.txt	2021-11-17 11:46:02.991350652 +0100
++++ pytorch/test/cpp/rpc/CMakeLists.txt	2021-11-18 19:06:30.502306793 +0100
+@@ -39,6 +39,22 @@
+     ${CUDA_CUDA_LIB}
+     ${TORCH_CUDA_LIBRARIES})
+ 
++  # Make sure the CUDA stubs folder doesn't end up in the RPATH of test_cpp_rpc:
++  set(CPP_RPC_LIBS ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB} ${CUDA_CUDA_LIB} ${TORCH_CUDA_LIBRARIES})
++  foreach(LIB IN LISTS CPP_RPC_LIBS)
++    message("LIB: ${LIB}")
++    if(LIB MATCHES "stubs")
++      message("Filtering ${LIB} from being set in caffe2_nvrtc's RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.")
++    else()
++      cmake_path(GET LIB PARENT_PATH LIB_PATH)
++      message("LIBPATH: ${LIB_PATH}")
++      list(APPEND CPP_RPC_RPATH ${LIB_PATH})
++    endif()
++  endforeach()
++  message("CPP_RPC_RPATH: ${CPP_RPC_RPATH}")
++  set_target_properties(test_cpp_rpc PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE)
++  set_target_properties(test_cpp_rpc PROPERTIES INSTALL_RPATH "${CPP_RPC_RPATH}")
++
+   target_compile_definitions(test_cpp_rpc PRIVATE "USE_CUDA")
+ endif()
+ 
+diff -Nru pytorch.orig/test/cpp/tensorexpr/CMakeLists.txt pytorch/test/cpp/tensorexpr/CMakeLists.txt
+--- pytorch.orig/test/cpp/tensorexpr/CMakeLists.txt	2021-11-17 11:46:02.993350674 +0100
++++ pytorch/test/cpp/tensorexpr/CMakeLists.txt	2021-11-18 19:06:00.988984273 +0100
+@@ -62,6 +62,24 @@
+     ${CUDA_CUDA_LIB}
+     ${TORCH_CUDA_LIBRARIES})
+   target_compile_definitions(tutorial_tensorexpr PRIVATE USE_CUDA)
++
++  # Make sure the CUDA stubs folder doesn't end up in the RPATH of tutorial_tensorexpr:
++  set(CUDA_LINK_LIBS ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB} ${CUDA_CUDA_LIB} ${TORCH_CUDA_LIBRARIES})
++  foreach(LIB IN LISTS CUDA_LINK_LIBS)
++    message("LIB: ${LIB}")
++    if(LIB MATCHES "stubs")
++      message("Filtering ${LIB} from being set in test_tensorexpr and tutorial_tensorexpr RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.")
++    else()
++      cmake_path(GET LIB PARENT_PATH LIB_PATH)
++      message("LIBPATH: ${LIB_PATH}")
++      list(APPEND TENSOREXPR_RPATH ${LIB_PATH})
++    endif()
++  endforeach()
++  message("TENSOREXPR_RPATH: ${TENSOREXPR_RPATH}")
++  set_target_properties(test_tensorexpr PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE)
++  set_target_properties(test_tensorexpr PROPERTIES INSTALL_RPATH "${TENSOREXPR_RPATH}")
++  set_target_properties(tutorial_tensorexpr PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE)
++  set_target_properties(tutorial_tensorexpr PROPERTIES INSTALL_RPATH "${TENSOREXPR_RPATH}")
+ elseif(USE_ROCM)
+   target_link_libraries(test_tensorexpr PRIVATE
+     ${ROCM_HIPRTC_LIB}
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb b/Golden_Repo/p/PyTorch/PyTorch-1.11-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..23772864b78833b64905e73580218de8997a4bd5
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.11-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb
@@ -0,0 +1,198 @@
+name = 'PyTorch'
+version = '1.11'
+versionsuffix = '-CUDA-%(cudaver)s'
+
+homepage = 'https://pytorch.org/'
+description = """Tensors and Dynamic neural networks in Python with strong GPU acceleration.
+PyTorch is a deep learning framework that puts Python first."""
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+toolchainopts = {'openmp': True}
+# toolchainopts = {'cstd': 'c++11'}
+
+sources = [{
+    'filename': '%(name)s-%(version)s.tar.gz',
+    'git_config': {
+        'url': 'https://github.com/pytorch',
+        'repo_name': 'pytorch',
+        'tag': 'v1.11.0',
+        'recursive': True,
+    },
+}]
+patches = [
+    'PyTorch-1.7.0_avoid-nan-in-test-torch.patch',
+    'PyTorch-1.7.0_disable-dev-shm-test.patch',
+    # 'PyTorch-1.7.1_correctly-pass-jit_opt_level.patch',
+    'PyTorch-1.8.1_dont-use-gpu-ccc-in-test.patch',
+    # 'PyTorch-1.8.1_increase-distributed-test-timeout.patch',
+    'PyTorch-1.9.0_limit-world-size-for-zero-redundancy-opt-test.patch',
+    'PyTorch-1.10.0_fix-test-dataloader-fixed-affinity.patch',
+    # 'PyTorch-1.10.0_fix-alias-violation-in-bitwise-ops.patch',
+    # 'PyTorch-1.10.0_fix-faulty-asserts-and-skip-test.patch',
+    # 'PyTorch-1.10.0_fix-test-cond-cpu.patch',
+    # 'PyTorch-1.10.0_fix-vnni-detection.patch',
+    # 'PyTorch-1.10.0_increase_zero_optimizer_test_tolerance.patch',
+    # 'PyTorch-1.10.0_skip_failing_ops_tests.patch',
+    # 'PyTorch-1.10.0_skip_nan_tests_openblas.patch',
+    'PyTorch-1.10.0_skip_cmake_rpath.patch',
+    'PyTorch-1.11.0_fix_sharded_imports.patch',
+    # 'PyTorch-1.10.0_fix-gcc11-ideep.patch',
+    # 'PyTorch-1.10.0_fix_gcc11_nullpointer.patch',
+    # 'cub-lint.yaml.patch',
+    # 'cub-cub.cuh.patch',
+    # ('cub-cub-definitions.patch', 1),
+    # 'cub-context_gpu.patch',
+    # 'cub-accuracy_op.patch',
+    # 'cub-affine-channel_op.patch',
+    # 'cub-arg_ops.patch',
+    # 'cub-batch_moments_op.patch',
+    # 'cub-batch_sparse_to_dense_op.patch',
+    # 'cub-boolean_mask_ops.patch',
+    # 'cub-cross_entropy.patch',
+    # 'cub-distance_op.patch',
+    # 'cub-elementwise_div_op.patch',
+    # 'cub-elementwise_linear_op.patch',
+    # 'cub-elementwise_mul_op.patch',
+    # 'cub-elementwise_ops.patch',
+    # 'cub-find_op.patch',
+    # 'cub-generate_proposals_op.patch',
+    # 'cub-normalize_ops.patch',
+    # 'cub-one_hot_ops.patch',
+    # 'cub-pack_segments.patch',
+    # 'cub-prelu_op.patch',
+    # 'cub-reduce_front_back_max_ops.patch',
+    # 'cub-reduce_front_back_sum_mean_ops.patch',
+    # 'cub-reduction_ops.patch',
+    # 'cub-rmac_regions_op.patch',
+    # 'cub-segment_reduction_op_gpu.patch',
+    # 'cub-sequence_ops.patch',
+    # 'cub-softmax_ops.patch',
+    # 'cub-spatial_batch_norm_op_impl.patch',
+    # 'cub-adagrad_fused_op_gpu.patch',
+    # 'cub-adagrad_op_gpu.patch',
+    # 'cub-adam_op_gpu.patch',
+    # ('cub-cub_namespace.patch', 1),
+    # 'cub-reduce.patch',
+    # 'cub-math-gpu.patch',
+    # 'cub-CMake-Dependencies.patch',
+    'PyTorch-1.11.0_fix_skip_jit_cuda_fuser.patch',
+    'PyTorch-1.11.0_increase-distributed-test-timeout.patch',
+    'PyTorch-1.11.0_skip_failing_ops_tests.patch',
+]
+checksums = [
+    '10e096a81f2471d0e0e56d4e222291a09af7e3476ec1a5474ce362456c43b02c',  # PyTorch-1.11.tar.gz
+    'b899aa94d9e60f11ee75a706563312ccefa9cf432756c470caa8e623991c8f18',  # PyTorch-1.7.0_avoid-nan-in-test-torch.patch
+    '622cb1eaeadc06e13128a862d9946bcc1f1edd3d02b259c56a9aecc4d5406b8a',  # PyTorch-1.7.0_disable-dev-shm-test.patch
+    '89ac7a8e9e7df2e64cf8404fe3a279f5e9b759fee41c9de3aaff9c22f385c2c6',  # PyTorch-1.8.1_dont-use-gpu-ccc-in-test.patch
+    # PyTorch-1.9.0_limit-world-size-for-zero-redundancy-opt-test.patch
+    'ff573660913ce055e24cfd194ce747ba5685091c631cfd443eae2a99d56b57ea',
+    # PyTorch-1.10.0_fix-test-dataloader-fixed-affinity.patch
+    '313dca681f45ce3bc7c4557fdcdcbe0b77216d2c708fa30a2ec0e22c44876707',
+    'ac05943bb205623f91ef140aa00869efc5fe844184bd666bebf5405808610448',  # PyTorch-1.10.0_skip_cmake_rpath.patch
+    '2e3e2093fce314a9ee9fb73ef44477f4c2cedfcf27570f585c6917ae434311f2',  # PyTorch-1.11.0_fix_sharded_imports.patch
+    '91e67cd498918baafe3fd58e0ba04b610a3561d1d97cec2c934bfd48fffd8324',  # PyTorch-1.11.0_fix_skip_jit_cuda_fuser.patch
+    # PyTorch-1.11.0_increase-distributed-test-timeout.patch
+    'bb9709590ea8bd329360ca345c70afb8ff028be80e112af7ee00abba58482316',
+    '88a312d4752fe72171a2292d0aa5438ada42b124be113015bb4969c83c723766',  # PyTorch-1.11.0_skip_failing_ops_tests.patch
+]
+
+osdependencies = [OS_PKG_IBVERBS_DEV]
+
+builddependencies = [
+    ('CMake', '3.21.1'),
+    ('hypothesis', '6.14.6'),
+]
+
+dependencies = [
+    ('CUDA', '11.5', '', True),
+    ('Ninja', '1.10.2'),  # Required for JIT compilation of C++ extensions
+    ('Python', '3.9.6'),
+    ('protobuf', '3.17.3'),
+    ('protobuf-python', '3.17.3'),
+    ('pybind11', '2.7.1'),
+    ('SciPy-bundle', '2021.10'),
+    ('typing-extensions', '3.10.0.0'),
+    ('PyYAML', '5.4.1'),
+    ('MPFR', '4.1.0'),
+    ('GMP', '6.2.1'),
+    ('numactl', '2.0.14', '', SYSTEM),
+    ('FFmpeg', '4.4.1'),
+    ('Pillow-SIMD', '9.0.1'),
+    ('cuDNN', '8.3.1.22', '-CUDA-%(cudaver)s', True),
+    ('magma', '2.6.1', '-CUDA-%(cudaver)s'),
+    ('NCCL', '2.11.4', '-CUDA-%(cudaver)s'),
+    ('expecttest', '0.1.3'),
+]
+
+custom_opts = ["USE_CUPTI_SO=1"]
+configopts = 'MKL_THREADING_LAYER=sequential CFLAGS="$CFLAGS -fopenmp" CXXFLAGS="$CXXFLAGS -fopenmp" LDFLAGS=-fopenmp'
+
+excluded_tests = {
+    '': [
+        # Bad tests: https://github.com/pytorch/pytorch/issues/60260
+        'distributed/elastic/utils/distributed_test',
+        'distributed/elastic/multiprocessing/api_test',
+        # These tests fail on A10s at the very least, they time out forever no matter how long the timeout is.
+        # Possibly related to NCCL 2.8.3: https://docs.nvidia.com/deeplearning/nccl/release-notes/rel_2-8-3.html
+        # 'distributed/test_distributed_fork',
+        'distributed/test_distributed_spawn',
+        # Fails on A10s: https://github.com/pytorch/pytorch/issues/63079
+        'test_optim',
+        'test_jit',  # fails on all systems
+        'test_jit_cuda_fuser',  # fails on all systems
+        'test_jit_legacy',  # fails on all systems
+        'test_jit_profiling',  # fails on all systems
+        'test_jit_fuser_te',  # fails on booster and dc
+        # 'test_xnnpack_integration',
+        'distributed/_shard/sharded_optim/test_sharded_optim',  # fails on booster and dc
+        'distributed/_shard/sharded_tensor/ops/test_linear',  # fails on booster and dc
+        'distributed/_shard/sharded_tensor/test_megatron_prototype',  # fails on booster and dc
+        'distributions/test_distributions',  # fails on all systems
+        'test_cpp_extensions_jit',  # fails on al systems
+        'test_ops',  # fails on booster, dc, jusuf (works on hdfml?)
+        'distributed/fsdp/test_fsdp_memory',  # fails on jusuf and hdfml
+        'distributed/fsdp/test_fsdp_overlap',  # fails on jusuf and hdfml
+
+        # Those tests fail when not running from a container or without latest patches
+        # 'distributed/rpc/test_tensorpipe_agent',
+        # 'test_autograd',  # fails on jureca dc and deep
+        # 'test_cuda',  # fails on jureca dc
+        # 'test_multiprocessing',  # fails on jureca dc
+        # 'test_nn',  # fails on jureca dc
+        # 'test_profiler',  # fails on jureca dc
+        # 'test_quantization',  # fails on jureca dc
+        'distributed/_shard/sharded_tensor/test_sharded_tensor',  # fails on juwels cluster container and deep
+        # 'distributed/algorithms/test_join',  # fails on deep and jureca dc
+        # 'distributed/fsdp/test_fsdp_checkpoint',  # fails on deep and jureca dc
+        # 'distributed/fsdp/test_fsdp_core',  # fails on deep and jureca dc
+        # 'distributed/fsdp/test_fsdp_freezing_weights',  # fails on deep and jureca dc
+        # 'distributed/fsdp/test_fsdp_memory',  # fails on deep
+        # 'distributed/fsdp/test_fsdp_multiple_forward',  # fails on deep and jureca dc
+        # 'distributed/fsdp/test_fsdp_multiple_wrapping',  # fails on deep and jureca dc
+        # 'distributed/fsdp/test_fsdp_overlap',  # fails on deep
+        # 'distributed/fsdp/test_fsdp_pure_fp16',  # fails on deep and jureca dc
+        # 'distributed/fsdp/test_fsdp_uneven',  # fails on deep and jureca dc
+        # 'distributed/fsdp/test_wrap',  # fails on deep and jureca dc
+        # 'distributed/optim/test_zero_redundancy_optimizer',  # fails on deep and jureca dc
+        # 'distributed/rpc/cuda/test_tensorpipe_agent',  # fails on deep
+        # 'distributed/rpc/test_faulty_agent',  # fails on deep
+        # 'distributed/test_c10d_gloo',  # fails on deep
+        # 'test_model_dump',  # fails on deep
+        # 'distributed/test_c10d_nccl',  # fails on jureca dc
+        # 'distributed/test_c10d_spawn_nccl',  # fails on jureca dc
+        # 'distributed/test_data_parallel',  # fails on jureca dc
+    ]
+}
+
+runtest = 'cd test && PYTHONUNBUFFERED=1 %(python)s run_test.py --continue-through-error  --verbose %(excluded_tests)s'
+
+# The readelf sanity check can be taken out once the TestRPATH test from https://github.com/pytorch/pytorch/pull/68912
+# is accepted, since it is then checked as part of the PyTorch test suite
+local_libcaffe2 = "$EBROOTPYTORCH/lib/python%%(pyshortver)s/site-packages/torch/lib/libcaffe2_nvrtc.%s" % SHLIB_EXT
+sanity_check_commands = [
+    "python -c 'import torch'",
+    "readelf -d %s | egrep 'RPATH|RUNPATH' | grep -v stubs" % local_libcaffe2,
+]
+tests = ['PyTorch-check-cpp-extension.py']
+
+moduleclass = 'devel'
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_sharded_imports.patch b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_sharded_imports.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b1e854c38b89bc14006e2cebde0dd48330a2ad31
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_sharded_imports.patch
@@ -0,0 +1,44 @@
+# Fixes a "NameError: name 'sharded_tensor' is not defined" error 
+# for the test_named_params_with_sharded_tensor test
+# See https://github.com/pytorch/pytorch/pull/73309
+From 012d490ed76d8af8538d310a508b0e09a91b7632 Mon Sep 17 00:00:00 2001
+From: wanchaol <wanchaol@devvm3348.frc0.facebook.com>
+Date: Wed, 23 Feb 2022 12:10:39 -0800
+Subject: [PATCH] [shard] fix some imports in tests
+
+This fix some imports in sharded optimizer tests
+
+Differential Revision: [D34427252](https://our.internmc.facebook.com/intern/diff/D34427252/)
+
+[ghstack-poisoned]
+---
+ .../_shard/sharded_optim/test_sharded_optim.py           | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/test/distributed/_shard/sharded_optim/test_sharded_optim.py b/test/distributed/_shard/sharded_optim/test_sharded_optim.py
+index 085c928985eb..d3f1468aea3c 100644
+--- a/test/distributed/_shard/sharded_optim/test_sharded_optim.py
++++ b/test/distributed/_shard/sharded_optim/test_sharded_optim.py
+@@ -2,7 +2,10 @@
+ 
+ import torch
+ import torch.optim as optim
+-import torch.distributed._shard.sharded_tensor
++from torch.distributed._shard import (
++    sharded_tensor,
++    shard_parameter
++)
+ 
+ from copy import deepcopy
+ from torch.distributed._shard.sharding_spec import (
+@@ -77,8 +80,8 @@ def shard_parameter(self):
+             ],
+         )
+ 
+-        sharded_tensor.shard_parameter(self.linear1, "weight", rowwise_sharding_spec)
+-        sharded_tensor.shard_parameter(self.linear2, "weight", colwise_sharding_spec)
++        shard_parameter(self.linear1, "weight", rowwise_sharding_spec)
++        shard_parameter(self.linear2, "weight", colwise_sharding_spec)
+ 
+     def forward(self, inp):
+         return self.linear2(self.gelu(self.linear1(inp)))
\ No newline at end of file
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_skip_jit_cuda_fuser.patch b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_skip_jit_cuda_fuser.patch
new file mode 100644
index 0000000000000000000000000000000000000000..9c4897f81d88c745fbd97f964c1556e1806133b7
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_skip_jit_cuda_fuser.patch
@@ -0,0 +1,428 @@
+diff -Nru pytorch-1.11.0-rc3.orig/test/test_jit_cuda_fuser.py pytorch-1.11.0-rc3/test/test_jit_cuda_fuser.py
+--- pytorch-1.11.0-rc3.orig/test/test_jit_cuda_fuser.py	2022-02-24 18:06:55.180421593 +0100
++++ pytorch-1.11.0-rc3/test/test_jit_cuda_fuser.py	2022-02-25 13:30:47.112845480 +0100
+@@ -57,18 +57,25 @@
+         torch._C._jit_set_nvfuser_horizontal_mode(old_value)
+ 
+ def is_pre_volta():
+-    prop = torch.cuda.get_device_properties(torch.cuda.current_device())
+-    return prop.major < 7
+-
+-TEST_BF16 = torch.cuda.is_bf16_supported()
++    if RUN_CUDA:
++        prop = torch.cuda.get_device_properties(torch.cuda.current_device())
++        return prop.major < 7
++    else:
++        return True
++
++if RUN_CUDA:
++    TEST_BF16 = torch.cuda.is_bf16_supported()
++else:
++    TEST_BF16=False
+ 
+ class TestCudaFuser(JitTestCase):
+ 
+-    special_values = torch.tensor(
+-        [float("-inf"), -10, -math.pi,
+-            -1, -0.5, 0, 1, 0.5,
+-            math.pi, 10, float("inf"),
+-            float("nan")], dtype=torch.float, device='cuda')
++    if RUN_CUDA:
++        special_values = torch.tensor(
++            [float("-inf"), -10, -math.pi,
++                -1, -0.5, 0, 1, 0.5,
++                math.pi, 10, float("inf"),
++                float("nan")], dtype=torch.float, device='cuda')
+ 
+     int_types = [
+         torch.int8,
+@@ -253,8 +260,8 @@
+         self.assertEqual(o, jit_o)
+         self.assertGraphContains(t_jit.graph_for(x, y, z, q), FUSION_GUARD)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_reduction_dtypes_axis(self):
+@@ -1120,8 +1127,8 @@
+         self.assertTrue(self._compare("comparing output failed", o, jit_o, 1e-4))
+         self.assertGraphContains(t_jit.graph_for(x, y), FUSION_GUARD)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_reduction(self):
+@@ -1170,8 +1177,8 @@
+         FileCheck().check(FUSION_GUARD).run(g)
+         FileCheck().check(FUSION_GUARD).run(v2.graph)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_layer_norm_autodiff(self):
+@@ -1212,8 +1219,8 @@
+                 args.append(torch.randn(shapes, dtype=torch.float32, device="cuda").requires_grad_())
+             self._layer_norm_autodiff_helper(m, grad, shapes, args)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_layer_norm_parser(self):
+@@ -1273,8 +1280,8 @@
+         self.assertGraphContains(t_jit.graph_for(x), FUSION_GUARD)
+ 
+     @unittest.skipIf(True, "codegen failure awaiting fix")
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_native_layer_norm(self):
+@@ -1288,8 +1295,8 @@
+                     self._native_layer_norm_helper(input_shape, norm_shape, torch.float32, "cuda", 1e-4, affine)
+ 
+     @unittest.skipIf(True, "codegen failure awaiting fix")
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_native_layer_norm_half(self):
+@@ -1301,8 +1308,8 @@
+                 norm_shape = [input_shape[idx] for idx in range(dims - offset, dims)]
+                 self._native_layer_norm_helper(input_shape, norm_shape, torch.float16, "cuda", 5e-3)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     @unittest.skipIf(not TEST_BF16, "device does not support BFloat16")
+@@ -1362,8 +1369,8 @@
+         self.assertTrue(self._compare("comparing running_var failed", eager_running_var, jit_running_var, error))
+         self.assertGraphContains(t_jit.graph_for(x, running_mean, running_var), FUSION_GUARD)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_norm_channels_last(self):
+@@ -1374,8 +1381,8 @@
+                 for mf in [torch.channels_last, torch.contiguous_format]:
+                     self._norm_helper(size, torch.float32, "cuda", 1e-4, is_batch_norm_else_instance_norm, memory_format=mf)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_norm(self):
+@@ -1391,8 +1398,8 @@
+                         x[1] = C
+                         self._norm_helper(x, torch.float32, "cuda", 1e-4, is_batch_norm_else_instance_norm)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_norm_large(self):
+@@ -1407,8 +1414,8 @@
+                     x[1] = C
+                     self._norm_helper(x, torch.float32, "cuda", 1e-4, is_batch_norm_else_instance_norm)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_norm_half(self):
+@@ -1424,8 +1431,8 @@
+                         x[1] = C
+                         self._norm_helper(x, torch.float16, "cuda", 5e-3, is_batch_norm_else_instance_norm)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     @unittest.skipIf(not TEST_BF16, "device does not support BFloat16")
+@@ -1469,8 +1476,8 @@
+         self.assertTrue(self._compare("comparing output failed", o, jit_o, error))
+         self.assertGraphContains(t_jit.graph_for(x, y), FUSION_GUARD)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_softmax_dtype(self):
+@@ -1511,8 +1518,8 @@
+         )[0].graph
+         FileCheck().check(FUSION_GUARD).run(bwd_graph)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test__softmax_function(self):
+@@ -1535,8 +1542,8 @@
+         self.assertTrue(self._compare("comparing output failed", o, jit_o, 1e-3))
+         self.assertGraphContainsExactly(t_jit.graph_for(x, y), FUSION_GUARD, 1, consider_subgraphs=True)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test__softmax_function_half_to_float(self):
+@@ -1559,8 +1566,8 @@
+         self.assertTrue(self._compare("comparing output failed", o, jit_o, 1e-3))
+         self.assertGraphContainsExactly(t_jit.graph_for(x, y), FUSION_GUARD, 1, consider_subgraphs=True)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_softmax(self):
+@@ -1575,8 +1582,8 @@
+                 x[reduction_dim] = reduction_size
+                 self._softmax_helper(x, reduction_dim, torch.float32, "cuda", 1e-4)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_softmax_half(self):
+@@ -1591,8 +1598,8 @@
+                 x[reduction_dim] = reduction_size
+                 self._softmax_helper(x, reduction_dim, torch.float16, "cuda", 5e-3)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     @unittest.skipIf(not TEST_BF16, "device does not support BFloat16")
+@@ -1608,8 +1615,8 @@
+                 x[reduction_dim] = reduction_size
+                 self._softmax_helper(x, reduction_dim, torch.bfloat16, "cuda", 1e-1)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_reduction_permutation(self):
+@@ -1622,8 +1629,8 @@
+                     for perm1 in itertools.permutations(range(len(x))):
+                         self._reduction_helper(x, axes, torch.float32, "cuda", perm0, perm1)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_reduction_multiple_output(self):
+@@ -1767,8 +1774,8 @@
+         self.assertEqual(o, jit_o)
+         '''
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_pw_single_reduction_partition(self):
+@@ -1792,8 +1799,8 @@
+         self.assertEqual(o, jit_o)
+         self.assertGraphContains(t_jit.graph_for(x, y, z), FUSION_GUARD)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_permutation_preservation(self):
+@@ -1830,8 +1837,8 @@
+         self.assertGraphContains(t_jit.graph_for(x), FUSION_GUARD)
+         self.assertTrue(jit_o.is_contiguous(memory_format=torch.channels_last))
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_normalization_partition(self):
+@@ -1858,8 +1865,8 @@
+         self.assertEqual(o, jit_o)
+         self.assertGraphContains(t_jit.graph_for(x, y, z, r_m, r_v), FUSION_GUARD)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_sum_to_one(self):
+@@ -1879,8 +1886,8 @@
+         self.assertEqual(o, jit_o)
+         self.assertGraphContains(t_jit.graph_for(x), FUSION_GUARD)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_single_reduction_broadcast(self):
+@@ -1903,8 +1910,8 @@
+         self.assertEqual(o, jit_o)
+         self.assertGraphContains(t_jit.graph_for(x, y, z), FUSION_GUARD)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_trivial_reduction(self):
+@@ -1940,8 +1947,8 @@
+         repro_jit = torch.jit.script(repro)
+         self._run_helper(repro_jit, repro, x, 0.6)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_reduction_sizes_op(self):
+@@ -1964,8 +1971,8 @@
+         # have been optimized away
+         self.assertGraphContainsExactly(t_jit.graph_for(x, y), FUSION_GUARD, 0)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_profile_ivalue(self):
+@@ -1987,8 +1994,8 @@
+         self.assertEqual(o, jit_o)
+         self.assertGraphContains(t_jit.graph_for(x, y, (0, 1), False), FUSION_GUARD)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_sum_to_size(self):
+@@ -2021,8 +2028,8 @@
+         self.assertEqual(o.dtype, jit_o.dtype)
+         self.assertEqual(o, jit_o)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_grad_sum_to_size(self):
+@@ -2145,8 +2152,8 @@
+             self.assertTrue((percent_zeros >= (prob - 0.01)) and (percent_zeros <= (prob + 0.01)))
+             self.assertGraphContainsExactly(t_jit.graph_for(x, prob, True), FUSION_GUARD, 1, consider_subgraphs=True)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_dropout_training_fusion(self):
+@@ -2294,8 +2301,8 @@
+             self.assertEqual(x.grad.dtype, x.dtype)
+             self.assertEqual(y.grad.dtype, y.dtype)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_autocast_1(self):
+@@ -2331,8 +2338,8 @@
+         self.assertEqual(x.grad.dtype, x.dtype)
+         self.assertEqual(y.grad.dtype, y.dtype)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_autocast_2(self):
+@@ -2367,8 +2374,8 @@
+         self.assertEqual(jit_o.dtype, torch.float)
+         self.assertEqual(x.grad.dtype, x.dtype)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     @unittest.skipIf(not TEST_BF16, "device does not support BFloat16")
+@@ -2405,8 +2412,8 @@
+         self.assertEqual(x.grad.dtype, x.dtype)
+         self.assertEqual(y.grad.dtype, y.dtype)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     @unittest.skipIf(not TEST_BF16, "device does not support BFloat16")
+@@ -2817,8 +2824,8 @@
+                                           ref_module.bn.running_var,
+                                           e0))
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_batch_norm_half(self):
+@@ -2832,8 +2839,8 @@
+                 training, track_running_stats = training_and_track
+                 self._test_batch_norm_impl_index_helper(4, 8, 5, affine, track_running_stats, training, torch.half)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_batch_norm_impl_index_correctness(self):
+@@ -2947,8 +2954,8 @@
+         self.assertGraphContainsExactly(graph, FUSION_GROUP, 0)
+         self.assertGraphContains(graph, 'prim::add_optional', True)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_remove_output_used_only_in_dtype(self):
+@@ -2980,8 +2987,8 @@
+             graph = jitted.graph_for(x, y)
+             self.assertGraphContains(graph, FUSION_GROUP, True)
+ 
+-    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(not RUN_CUDA, "requires CUDA")
++    @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device")
+     @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING,
+                      "Requires fusion optimization pass to be effective")
+     def test_fix_shape_expression_bn(self):
\ No newline at end of file
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase-distributed-test-timeout.patch b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase-distributed-test-timeout.patch
new file mode 100644
index 0000000000000000000000000000000000000000..1c103091c1851688b53bb94bfde15c29532b1ae4
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase-distributed-test-timeout.patch
@@ -0,0 +1,17 @@
+It seems the timeout for the distributed tests is set to low and spurious failures can be seen
+Increase it by a factor of 6 similar to torch/testing/_internal/distributed/distributed_test.py
+
+Original patch by Alexander Grund (TU Dresden), updated by Caspar van Leeuwen (SURF)
+
+diff -Nru pytorch-1.11.0-rc3.orig/torch/testing/_internal/common_distributed.py pytorch-1.11.0-rc3/torch/testing/_internal/common_distributed.py
+--- pytorch-1.11.0-rc3.orig/torch/testing/_internal/common_distributed.py	2022-02-24 18:07:16.414274654 +0100
++++ pytorch-1.11.0-rc3/torch/testing/_internal/common_distributed.py	2022-02-24 18:08:31.772851148 +0100
+@@ -321,7 +321,7 @@
+     # TSAN runs much slower.
+     TIMEOUT_DEFAULT = 500
+ else:
+-    TIMEOUT_DEFAULT = 100
++    TIMEOUT_DEFAULT = 600
+ TIMEOUT_OVERRIDE = {"test_ddp_uneven_inputs": 400}
+ 
+ 
\ No newline at end of file
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase_test_tolerances_TF32.patch b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase_test_tolerances_TF32.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3bce7e06882d8679636ad6b7b0d720937710d5f3
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase_test_tolerances_TF32.patch
@@ -0,0 +1,143 @@
+# Author: Caspar van Leeuwen, SURF
+# Fixes failing tests due to use of TensorFloat32
+# Setting NVIDIA_TF32_OVERRIDE=0 makes these tests pass, proving that TensorFloat32 is the issue
+# We increase tolerances for the asserts to make these tests pass
+diff -Nru pytorch_orig/test/distributed/_shard/sharded_tensor/ops/test_linear.py pytorch/test/distributed/_shard/sharded_tensor/ops/test_linear.py
+--- pytorch_orig/test/distributed/_shard/sharded_tensor/ops/test_linear.py	2022-04-07 18:31:13.069599000 +0200
++++ pytorch/test/distributed/_shard/sharded_tensor/ops/test_linear.py	2022-04-07 18:32:32.877406000 +0200
+@@ -77,7 +77,7 @@
+         local_output = local_linear(inp)
+ 
+         # Verify
+-        self.assertEqual(local_output, sharded_output)
++        self.assertEqual(local_output, sharded_output, rtol=0.02, atol=1e-03)
+ 
+         # Validate for torch.nn.functional.linear version.
+         local_output = torch.nn.functional.linear(
+@@ -91,7 +91,7 @@
+         # for reshard. We need to squeeze the # of dimensions manually.
+         if inp.dim() == 1:
+             sharded_output = sharded_output.squeeze(reshard_spec.dim)
+-        self.assertEqual(local_output, sharded_output)
++        self.assertEqual(local_output, sharded_output, rtol=0.02, atol=1e-03)
+ 
+         # Compute loss and run backward pass.
+         local_output.sum().backward()
+@@ -114,7 +114,7 @@
+ 
+         # Test backward gradient calculation.
+         self.assertEqual(sharded_linear.bias.grad, local_bias_grad)
+-        self.assertEqual(sharded_weight.grad, local_grad_narrowed)
++        self.assertEqual(sharded_weight.grad, local_grad_narrowed, rtol=0.01, atol=1e-03)
+ 
+         # Test optimizer.
+         previous = local_linear.weight.clone().detach()
+@@ -135,7 +135,7 @@
+         )
+         self.assertEqual(sharded_weight.size(), local_weight_narrowed.size())
+         self.assertNotEqual(previous_sharded_weight, sharded_weight)
+-        self.assertEqual(sharded_weight, local_weight_narrowed)
++        self.assertEqual(sharded_weight, local_weight_narrowed, rtol=0.01, atol=1e-04)
+         self.assertNotEqual(previous_sharded_bias, sharded_linear.bias)
+         self.assertEqual(sharded_linear.bias, local_linear.bias)
+ 
+diff -Nru pytorch_orig/test/distributed/_shard/sharded_tensor/test_megatron_prototype.py pytorch/test/distributed/_shard/sharded_tensor/test_megatron_prototype.py
+--- pytorch_orig/test/distributed/_shard/sharded_tensor/test_megatron_prototype.py	2022-04-07 18:31:13.091710000 +0200
++++ pytorch/test/distributed/_shard/sharded_tensor/test_megatron_prototype.py	2022-04-07 18:41:03.744644000 +0200
+@@ -113,7 +113,7 @@
+         local_output = local_megatron_lm(inp)
+ 
+         # Verify
+-        self.assertEqual(local_output, sharded_output)
++        self.assertEqual(local_output, sharded_output, rtol=0.01, atol=1e-03)
+ 
+         # Compute loss and run backward pass.
+         local_output.sum().backward()
+@@ -161,9 +161,9 @@
+         )
+ 
+         # Test backward gradient calculation.
+-        self.assertEqual(sharded_weight_fc1.grad, local_grad_narrowed_fc1)
+-        self.assertEqual(sharded_weight_fc2.grad, local_grad_narrowed_fc2)
+-        self.assertEqual(bias_grad_fc1, local_bias_grad_fc1)
++        self.assertEqual(sharded_weight_fc1.grad, local_grad_narrowed_fc1, rtol=0.01, atol=2e-03)
++        self.assertEqual(sharded_weight_fc2.grad, local_grad_narrowed_fc2, rtol=0.01, atol=1e-03)
++        self.assertEqual(bias_grad_fc1, local_bias_grad_fc1, rtol=0.01, atol=2e-02)
+         self.assertEqual(bias_grad_fc2, local_bias_grad_fc2)
+ 
+         # Test optimizer.
+@@ -171,7 +171,7 @@
+         local_bias_fc1, local_bias_fc2 = _get_bias(local_megatron_lm)
+         self.assertEqual(bias_fc1, local_bias_fc1)
+         self.assertEqual(bias_fc2, local_bias_fc2)
+-        self.assertEqual(bias_fc1.grad, local_bias_fc1.grad)
++        self.assertEqual(bias_fc1.grad, local_bias_fc1.grad, rtol=0.01, atol=2e-02)
+         self.assertEqual(bias_fc2.grad, local_bias_fc2.grad)
+         previous_sharded_weight_fc1 = sharded_weight_fc1.clone()
+         previous_sharded_weight_fc2 = sharded_weight_fc2.clone()
+@@ -197,13 +197,13 @@
+         self.assertEqual(sharded_weight_fc2.size(), local_weight_fc2_narrowed.size())
+         self.assertNotEqual(previous_sharded_weight_fc1, sharded_weight_fc1)
+         self.assertNotEqual(previous_sharded_weight_fc2, sharded_weight_fc2)
+-        self.assertEqual(sharded_weight_fc1, local_weight_fc1_narrowed)
+-        self.assertEqual(sharded_weight_fc2, local_weight_fc2_narrowed)
++        self.assertEqual(sharded_weight_fc1, local_weight_fc1_narrowed, rtol=0.01, atol=1e-03)
++        self.assertEqual(sharded_weight_fc2, local_weight_fc2_narrowed, rtol=0.01, atol=1e-03)
+ 
+         # Test bias value after optimizer.
+         local_bias_fc1, local_bias_fc2 = _get_bias(local_megatron_lm)
+         self.assertNotEqual(previous_bias_fc1, bias_fc1)
+-        self.assertEqual(bias_fc1, local_bias_fc1)
++        self.assertEqual(bias_fc1, local_bias_fc1, rtol=0.01, atol=1e-03)
+         self.assertNotEqual(previous_bias_fc2, bias_fc2)
+         self.assertEqual(bias_fc2, local_bias_fc2)
+ 
+diff -Nru pytorch_orig/test/test_stateless.py pytorch/test/test_stateless.py
+--- pytorch_orig/test/test_stateless.py	2022-04-07 18:31:13.029968000 +0200
++++ pytorch/test/test_stateless.py	2022-04-07 18:43:46.723968000 +0200
+@@ -42,7 +42,7 @@
+         # existing params in module. So here we expect the result to be the
+         # same as the input if the weight swapping went well.
+         res = _stateless.functional_call(module, parameters, x)
+-        self.assertEqual(x, res)
++        self.assertEqual(x, res, rtol=1e-04, atol=1e-04)
+         # check that the weight remain unmodified
+         cur_weight = to_check.l1.weight
+         uur_buffer = to_check.buffer
+c PyTorch-1.11.0_increase_test_tolerances_TF32.patch
+rig/test/test_jit_fuser_te.py pytorch/test/test_jit_fuser_te.py
+--- pytorch_orig/test/test_jit_fuser_te.py  2022-04-07 18:31:13.046680000 +0200
++++ pytorch/test/test_jit_fuser_te.py   2022-04-12 18:21:00.355114000 +0200
+@@ -956,7 +956,7 @@
+     def test_lstm_traced(self):
+         for device in self.devices:
+             inputs = get_lstm_inputs(device)
+-            ge = self.checkTrace(LSTMCellF, inputs)
++            ge = self.checkTrace(LSTMCellF, inputs, atol=1e-4, rtol=1e-5)
+             graph = ge.graph_for(*inputs)
+             fusion_groups = self.findFusionGroups(graph)
+             # TODO: chunk
+diff -Nru pytorch_orig/torch/testing/_internal/jit_utils.py pytorch/torch/testing/_internal/jit_utils.py
+--- pytorch_orig/torch/testing/_internal/jit_utils.py   2022-04-07 18:28:54.339477000 +0200
++++ pytorch/torch/testing/_internal/jit_utils.py    2022-04-12 18:19:59.614272000 +0200
+@@ -525,7 +525,7 @@
+     def checkTrace(self, func, reference_tensors, input_tensors=None,
+                    drop=None, allow_unused=False, verbose=False,
+                    inputs_require_grads=True, check_tolerance=1e-5, export_import=True,
+-                   _force_outplace=False):
++                   _force_outplace=False, rtol=None, atol=None):
+
+         # TODO: check gradients for parameters, not just inputs
+         def allSum(vs):
+@@ -618,7 +618,10 @@
+
+         self.assertEqual(outputs, outputs_ge)
+         if inputs_require_grads:
+-            self.assertEqual(grads, grads_ge)
++            if atol is not None and rtol is not None:
++                self.assertEqual(grads, grads_ge, atol=atol, rtol=rtol)
++            else:
++                self.assertEqual(grads, grads_ge)
+             for g2, g2_ge in zip(grads2, grads2_ge):
+                 if g2 is None and g2_ge is None:
+                     continue
\ No newline at end of file
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11.0_skip_failing_ops_tests.patch b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_skip_failing_ops_tests.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e3d894a3fa02a0dec3013cf62c11ee851b75ab0e
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_skip_failing_ops_tests.patch
@@ -0,0 +1,26 @@
+diff -Nru pytorch-1.11.0-rc3.orig/torch/testing/_internal/common_methods_invocations.py pytorch-1.11.0-rc3/torch/testing/_internal/common_methods_invocations.py
+--- pytorch-1.11.0-rc3.orig/torch/testing/_internal/common_methods_invocations.py	2022-02-24 18:07:16.430276050 +0100
++++ pytorch-1.11.0-rc3/torch/testing/_internal/common_methods_invocations.py	2022-02-24 19:38:11.610293957 +0100
+@@ -8791,7 +8791,10 @@
+            supports_fwgrad_bwgrad=True,
+            autodiff_fusible_nodes=['aten::contiguous'],
+            assert_jit_shape_analysis=True,
+-           supports_out=False),
++           supports_out=False,
++           skips=(
++               DecorateInfo(unittest.skip("Skipped!"), 'TestJit', 'test_variant_consistency_jit', device_type='cpu'),
++           )),
+     OpInfo('sum_to_size',
+            op=lambda x, *args, **kwargs: x.sum_to_size(*args, **kwargs),
+            dtypes=floating_and_complex_types_and(torch.float16, torch.bfloat16),
+@@ -9746,6 +9749,10 @@
+                DecorateInfo(unittest.skip("Skipped!"), 'TestMathBits', 'test_neg_view', device_type='cuda'),
+                DecorateInfo(unittest.skip("Skipped!"), 'TestCommon', 'test_dtypes'),
+                DecorateInfo(unittest.skip("Skipped!"), 'TestGradients', 'test_fn_gradgrad'),
++               # It also breaks on CPU. We'll revisit this once `linalg.lu_solve` is a thing
++               # See https://github.com/pytorch/pytorch/pull/64387 and https://github.com/pytorch/pytorch/issues/67767
++               DecorateInfo(unittest.skip("Skipped!"), 'TestGradients', 'test_fn_grad',
++                            dtypes=(torch.complex128,)),
+            )),
+     OpInfo('linalg.cholesky',
+            aten_name='linalg_cholesky',
\ No newline at end of file
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.7.0_avoid-nan-in-test-torch.patch b/Golden_Repo/p/PyTorch/PyTorch-1.7.0_avoid-nan-in-test-torch.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a14c146be550ee16e52e7c02400e55b358c058ae
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.7.0_avoid-nan-in-test-torch.patch
@@ -0,0 +1,18 @@
+This test uses in-place operations which may generate NaNs making subsequent tests fail
+See https://github.com/pytorch/pytorch/issues/48591
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/test/test_torch.py b/test/test_torch.py
+index 1f3f568f7b..237fb030f6 100644
+--- a/test/test_torch.py
++++ b/test/test_torch.py
+@@ -15060,7 +15060,7 @@ class TestTorchDeviceType(TestCase):
+                 x_c = x.contiguous()
+                 y_c = y.contiguous()
+                 result_c = fn(x_c, y_c)
+-                result = fn(x, y)
++                result = fn(x.clone(), y)
+                 self.assertEqual(result, result_c)
+                 self.assertTrue(
+                     result.is_contiguous(memory_format=memory_format),
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.7.0_disable-dev-shm-test.patch b/Golden_Repo/p/PyTorch/PyTorch-1.7.0_disable-dev-shm-test.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0f85648a929d352009726aa01f2de9efcaef8378
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.7.0_disable-dev-shm-test.patch
@@ -0,0 +1,21 @@
+This test fails randomly. I assume some concurrent test runners or another race condition
+Should be safe even if this fails
+See https://github.com/pytorch/pytorch/issues/48579
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/test/test_multiprocessing.py b/test/test_multiprocessing.py
+index 49e0a3cb45..e4e5b64ca1 100644
+--- a/test/test_multiprocessing.py
++++ b/test/test_multiprocessing.py
+@@ -202,7 +202,9 @@ class leak_checker(object):
+             # available_fds = self._get_next_fds(10)
+             # self.test_case.assertLessEqual(
+             #     available_fds[-1] - self.next_fds[-1], 5)
+-            self.test_case.assertFalse(self.has_shm_files())
++            # self.test_case.assertFalse(self.has_shm_files())
++            if self.has_shm_files():
++                print("WARNING: has_shm_files test would have failed!")
+         return False
+ 
+     def check_pid(self, pid):
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.8.1_dont-use-gpu-ccc-in-test.patch b/Golden_Repo/p/PyTorch/PyTorch-1.8.1_dont-use-gpu-ccc-in-test.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a5c0731da64c062085178f344d2212ec4922339f
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.8.1_dont-use-gpu-ccc-in-test.patch
@@ -0,0 +1,22 @@
+Disable a part of a test which uses the current GPUs CUDA compute capability
+This will fail if the GPU is newer than what nvcc supports.
+See https://github.com/pytorch/pytorch/issues/51950
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/test/test_cpp_extensions_jit.py b/test/test_cpp_extensions_jit.py
+index efda7cb2cf..64607346c8 100644
+--- a/test/test_cpp_extensions_jit.py
++++ b/test/test_cpp_extensions_jit.py
+@@ -181,11 +181,9 @@ class TestCppExtensionJIT(common.TestCase):
+         #   - With/without '+PTX'
+ 
+         n = torch.cuda.device_count()
+-        capabilities = {torch.cuda.get_device_capability(i) for i in range(n)}
+         # expected values is length-2 tuple: (list of ELF, list of PTX)
+         # note: there should not be more than one PTX value
+         archflags = {
+-            '': (['{}{}'.format(capability[0], capability[1]) for capability in capabilities], None),
+             "Maxwell+Tegra;6.1": (['53', '61'], None),
+             "Pascal 3.5": (['35', '60', '61'], None),
+             "Volta": (['70'], ['70']),
diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.9.0_limit-world-size-for-zero-redundancy-opt-test.patch b/Golden_Repo/p/PyTorch/PyTorch-1.9.0_limit-world-size-for-zero-redundancy-opt-test.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c360a459f01d189049e71c7c7a2dfc19de2bab8a
--- /dev/null
+++ b/Golden_Repo/p/PyTorch/PyTorch-1.9.0_limit-world-size-for-zero-redundancy-opt-test.patch
@@ -0,0 +1,20 @@
+Some tests fail when run with anything but 2 GPUs and others when run with anything but 2 or 4 GPUs.
+So limit to 2 GPUs.
+
+See https://github.com/pytorch/pytorch/issues/59548
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/test/distributed/optim/test_zero_redundancy_optimizer.py b/test/distributed/optim/test_zero_redundancy_optimizer.py
+index 06f1b4f484..bc82f6c304 100644
+--- a/test/distributed/optim/test_zero_redundancy_optimizer.py
++++ b/test/distributed/optim/test_zero_redundancy_optimizer.py
+@@ -233,7 +233,7 @@ class TestZeroRedundancyOptimizerSingleRank(TestZeroRedundancyOptimizer):
+ class TestZeroRedundancyOptimizerDistributed(TestZeroRedundancyOptimizer):
+     @property
+     def world_size(self):
+-        return min(4, max(2, torch.cuda.device_count()))
++        return 2
+ 
+     @skip_if_rocm
+     def test_step(self):
diff --git a/Golden_Repo/p/Python/Python-3.9.6-GCCcore-11.2.0.eb b/Golden_Repo/p/Python/Python-3.9.6-GCCcore-11.2.0.eb
index 69726a65d73e316d0115eba02e56fb7e8b9ed4b6..1bc3b4a15d72d192e6e3d748f27f3950d8c58fe2 100644
--- a/Golden_Repo/p/Python/Python-3.9.6-GCCcore-11.2.0.eb
+++ b/Golden_Repo/p/Python/Python-3.9.6-GCCcore-11.2.0.eb
@@ -727,11 +727,6 @@ postinstallcmds = [
 
 buildopts = "PROFILE_TASK='-m test --pgo -x test_socket'"
 
-# Needed so stuff here is picked up in virtual environments (like in the Jupyter easyconfig)
-modextrapaths = {
-    'PYTHONPATH': 'lib/python%s/site-packages' % ".".join(version.split(".")[:-1])
-}
-
 modextravars = {
     'PIP_CONFIG_FILE': '%(installdir)s/etc/pip.conf'
 }
diff --git a/Golden_Repo/p/patchelf/patchelf-0.13-GCCcore-11.2.0.eb b/Golden_Repo/p/patchelf/patchelf-0.13-GCCcore-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..f553b4df4c1853f74d9bf470a6cf477a5c1543c8
--- /dev/null
+++ b/Golden_Repo/p/patchelf/patchelf-0.13-GCCcore-11.2.0.eb
@@ -0,0 +1,27 @@
+easyblock = 'ConfigureMake'
+
+name = 'patchelf'
+version = '0.13'
+
+homepage = 'https://github.com/NixOS/patchelf'
+description = """PatchELF is a small utility to modify the dynamic linker and RPATH of ELF executables."""
+
+toolchain = {'name': 'GCCcore', 'version': '11.2.0'}
+
+source_urls = ['https://github.com/NixOS/patchelf/archive/']
+sources = ['%(version)s.tar.gz']
+checksums = ['60c6aeadb673de9cc1838b630c81f61e31c501de324ef7f1e8094a2431197d09']
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('Autotools', '20210726'),
+]
+
+preconfigopts = "sh bootstrap.sh && "
+
+sanity_check_paths = {
+    'files': ['bin/patchelf'],
+    'dirs': ['share'],
+}
+
+moduleclass = 'tools'
diff --git a/Golden_Repo/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb b/Golden_Repo/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb
new file mode 100644
index 0000000000000000000000000000000000000000..b98b6d50458ef576995f07ac2c500590a47f39db
--- /dev/null
+++ b/Golden_Repo/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb
@@ -0,0 +1,55 @@
+name = 'psmpi'
+version = '5.5.0-1'
+versionsuffix = '-mt'
+
+homepage = 'https://github.com/ParaStation/psmpi2'
+description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
+based on MPICH v3. It provides extra low level communication libraries and integration with
+various batch systems for tighter process control.
+"""
+
+toolchain = {'name': 'NVHPC', 'version': '22.1'}
+
+sources = [SOURCE_TAR_BZ2]
+source_urls = ['https://github.com/ParaStation/psmpi/archive/']
+checksums = [
+    # psmpi-5.5.0-1.tar.bz2
+    'c178bf618f139857c1bc191938677145cf4fdbec5b8d3afa2ca1de666c791b48',
+    '978eb3223c978477c40987f745c07fda26ccbad2f468616faf92f0d71b81a156',  # psmpi_shebang.patch
+    # psmpi-5.5.0-1_ime.patch
+    'c2418b9511560dca197242508de9c7b6b117122912b6d3a4aa18398834f465ff',
+]
+
+builddependencies = [
+    # needed for autogen.sh on CentOS 7
+    ('Autotools', '20210726'),
+    # Autoconf >2.69 is generating a buggy configure script, so take it down to the one that works
+    ('Autoconf', '2.69'),
+]
+dependencies = [
+    ('pscom', '5.4-default', '', SYSTEM),
+    # needed due to the inclusion of hwloc
+    ('libxml2', '2.9.10'),
+    # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed
+    ('CUDA', '11.5', '', SYSTEM)
+]
+
+patches = [
+    'psmpi_shebang.patch',
+    'psmpi-5.5.0-1_ime.patch'
+]
+
+# mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio'
+# We disable gpfs support, since it seems to be problematic under some circumstances. One can disable it by setting
+# ROMIO_FSTYPE_FORCE="ufs:", but then we loose IME support
+mpich_opts = '--enable-static --with-file-system=ime+ufs --enable-romio'
+
+preconfigopts = "./autogen.sh && "
+preconfigopts += 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && '
+preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && '
+
+threaded = True
+
+cuda = True
+
+moduleclass = 'mpi'
diff --git a/Golden_Repo/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb b/Golden_Repo/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb
index 179cdd32dab87baaddbfaf10a3cec11662ba80a0..5d59893bc365a46eddca2fc3c4f76546cec3d202 100644
--- a/Golden_Repo/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb
+++ b/Golden_Repo/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb
@@ -4,7 +4,7 @@ versionsuffix = '-mt'
 
 homepage = 'https://github.com/ParaStation/psmpi2'
 description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
-based on MPICH v3. It provides extra low level communication libraries and integration with 
+based on MPICH v3. It provides extra low level communication libraries and integration with
 various batch systems for tighter process control.
 """
 
diff --git a/Golden_Repo/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..c2745abdcb88db795a735530bb52887a07d746cd
--- /dev/null
+++ b/Golden_Repo/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb
@@ -0,0 +1,3198 @@
+name = 'R'
+version = '4.1.2'
+
+homepage = 'https://www.r-project.org/'
+description = """R is a free software environment for statistical computing
+ and graphics."""
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+
+source_urls = ['https://cloud.r-project.org/src/base/R-%(version_major)s']
+sources = [SOURCE_TAR_GZ]
+patches = ['%(name)s-4.1.0_identify-flexiblas-in-configure.patch']
+checksums = [
+    '2036225e9f7207d4ce097e54972aecdaa8b40d7d9911cd26491fac5a0fab38af',  # R-4.1.2.tar.gz
+    '2c6720e2e144ae4fe00842daab0ebba72241080603e0ff1a6ca758738041b257',  # R-4.1.0_identify-flexiblas-in-configure.patch
+]
+
+builddependencies = [
+    ('pkg-config', '0.29.2'),
+    ('XServer', '1.20.13'),
+]
+
+dependencies = [
+    ('Java', '15', '', SYSTEM),
+    ('X11', '20210802'),
+    ('OpenGL', '2021b'),
+    ('cairo', '1.16.0'),
+    ('libreadline', '8.1'),
+    ('ncurses', '6.2'),
+    ('bzip2', '1.0.8'),
+    ('XZ', '5.2.5'),
+    ('zlib', '1.2.11'),
+    ('SQLite', '3.36'),
+    ('PCRE2', '10.37'),
+    ('libpng', '1.6.37'),  # for plotting in R
+    ('libjpeg-turbo', '2.1.1'),  # for plottting in R
+    ('LibTIFF', '4.3.0'),
+    ('Tk', '8.6.11'),  # for tcltk
+    ('cURL', '7.78.0'),  # for RCurl
+    ('libxml2', '2.9.10'),  # for XML
+    ('PROJ', '8.1.0'),  # for rgdal
+    ('GMP', '6.2.1'),  # for igraph
+    ('NLopt', '2.7.0'),  # for nloptr
+    ('FFTW', '3.3.10', '-nompi'),  # for fftw
+    ('libsndfile', '1.0.31'),  # for seewave
+    ('ICU', '70.1'),  # for rJava & gdsfmt
+    ('HDF5', '1.12.1', '-serial'),  # for hdf5r
+    ('UDUNITS', '2.2.28'),  # for units
+    ('GSL', '2.7'),  # for RcppGSL
+    ('ImageMagick', '7.1.0-13'),  # for animation
+    ('GLPK', '5.0'),  # for Rglpk
+    ('netCDF', '4.8.1', '-serial'),  # the ndf4 needs it
+    ('GEOS', '3.9.1'),  # for rgeos
+    ('nodejs', '16.13.0'),  # for V8 (required by rstan)
+    ('GDAL', '3.3.2'),  # for sf
+    ('MPFR', '4.1.0'),  # for Rmpfr
+    ('libgit2', '1.1.1'),
+    ('ZeroMQ', '4.3.4'),  # for pbdZMQ needed by IRkernel
+    ('OpenSSL', '1.1', '', True),
+    ('texlive', '20200406'),
+]
+
+
+# Some R extensions (mclust, quantreg, waveslim for example) require the math library (-lm) to avoid undefined symbols.
+# Adding it to FLIBS makes sure it is present when needed.
+preconfigopts = 'export FLIBS="$FLIBS -lm" && '
+
+configopts = "--with-pic --enable-threads --enable-R-shlib"
+# some recommended packages may fail in a parallel build (e.g. Matrix), and
+# we're installing them anyway below
+configopts += " --with-recommended-packages=no"
+
+# specify that at least EasyBuild v3.5.0 is required,
+# since we rely on the updated easyblock for R to configure correctly w.r.t. BLAS/LAPACK
+easybuild_version = '3.5.0'
+
+exts_default_options = {
+    'source_urls': [
+        'https://cran.r-project.org/src/contrib/Archive/%(name)s',  # package archive
+        'https://cran.r-project.org/src/contrib/',  # current version of packages
+        'https://cran.freestatistics.org/src/contrib',  # mirror alternative for current packages
+    ],
+    'source_tmpl': '%(name)s_%(version)s.tar.gz',
+}
+
+# !! order of packages is important !!
+# packages updated on 1st November 2021
+exts_list = [
+    'base',
+    'compiler',
+    'datasets',
+    'graphics',
+    'grDevices',
+    'grid',
+    'methods',
+    'parallel',
+    'splines',
+    'stats',
+    'stats4',
+    'tcltk',
+    'tools',
+    'utils',
+    # ('Rmpi', '0.6-9.2', {
+    #     'checksums': ['358ac1af97402e676f209261a231f36a35e60f0301edf8ca53dac11af3c3bd1a'],
+    # }),
+    ('abind', '1.4-5', {
+        'checksums': ['3a3ace5afbcb86e56889efcebf3bf5c3bb042a282ba7cc4412d450bb246a3f2c'],
+    }),
+    ('magic', '1.5-9', {
+        'checksums': ['fa1d5ef2d39e880f262d31b77006a2a7e76ea38e306aae4356e682b90d6cd56a'],
+    }),
+    ('Rcpp', '1.0.7', {
+        'checksums': ['15e5a4732216daed16263c79fb37017c2ada84a2d4e785e3b76445d0eba3dc1d'],
+    }),
+    ('RcppProgress', '0.4.2', {
+        'checksums': ['b1624b21b7aeb1dafb30f092b2a4bef4c3504efd2d6b00b2cdf55dc9df194b48'],
+    }),
+    ('lpSolve', '5.6.15', {
+        'checksums': ['4627be4178abad34fc85a7d264c2eb5e27506f007e46687b0b8a4f8fbdf4f3ba'],
+    }),
+    ('linprog', '0.9-2', {
+        'checksums': ['8937b2e30692e38de1713f1513b78f505f73da6f5b4a576d151ad60bac2221ce'],
+    }),
+    ('geometry', '0.4.5', {
+        'checksums': ['8fedd17c64468721d398e3c17a39706321ab71098b29f5e8d8039dd115a220d8'],
+    }),
+    ('bit', '4.0.4', {
+        'checksums': ['e404841fbe4ebefe4ecd4392effe673a8c9fa05f97952c4ce6e2f6159bd2f168'],
+    }),
+    ('filehash', '2.4-2', {
+        'checksums': ['b6d056f75d45e315943a4618f5f62802612cd8931ba3f9f474b595140a3cfb93'],
+    }),
+    ('ff', '4.0.5', {
+        'checksums': ['9aba9e271144ec224063ddba0d791e2fcdb9c912d48fdc49e204fce628355037'],
+    }),
+    ('bnlearn', '4.7', {
+        'checksums': ['2e1dd7ba9b7cf07e51eec3238684310edbeb0573d9b907049fb6b28db3022817'],
+    }),
+    ('bootstrap', '2019.6', {
+        'checksums': ['5252fdfeb944cf1fae35016d35f9333b1bd1fc8c6d4a14e33901160e21968694'],
+    }),
+    ('combinat', '0.0-8', {
+        'checksums': ['1513cf6b6ed74865bfdd9f8ca58feae12b62f38965d1a32c6130bef810ca30c1'],
+    }),
+    ('deal', '1.2-39', {
+        'checksums': ['a349db8f1c86cbd8315c068da49314ce9eb585dbb50d2e5ff09300506bd8806b'],
+    }),
+    ('fdrtool', '1.2.16', {
+        'checksums': ['e7dea648ee018e2c8c8834084051c76f7e8b2b42067772c62035a941c32457a9'],
+    }),
+    ('formatR', '1.11', {
+        'checksums': ['bd81662d09cf363652761e63ba5969c71be4dd5ae6fc9098f440d6729254a30c'],
+    }),
+    ('gtools', '3.9.2', {
+        'checksums': ['03b1898bf581f6d12fa90e23ff700cfa7c834ac10c6654bdac42d7ec943fa953'],
+    }),
+    ('gdata', '2.18.0', {
+        'checksums': ['4b287f59f5bbf5fcbf18db16477852faac4a605b10c5284c46b93fa6e9918d7f'],
+    }),
+    ('GSA', '1.03.1', {
+        'checksums': ['e192d4383f53680dbd556223ea5f8cad6bae62a80a337ba5fd8d05a8aee6a917'],
+    }),
+    ('xfun', '0.27', {
+        'checksums': ['c775bf33a6bc57f8022960cbf7dc20a4e82175a9c71807b2723f46ade6805485'],
+    }),
+    ('highr', '0.9', {
+        'checksums': ['beff11390d936c90fdcc00e7ed0eb72220f3de403a51b56659e3d3e0b6d8ed4d'],
+    }),
+    ('infotheo', '1.2.0', {
+        'checksums': ['9b47ebc3db5708c88dc014b4ffec6734053a9c255a9241fcede30fec3e63aaa3'],
+    }),
+    ('lars', '1.2', {
+        'checksums': ['64745b568f20b2cfdae3dad02fba92ebf78ffee466a71aaaafd4f48c3921922e'],
+    }),
+    ('lazy', '1.2-16', {
+        'checksums': ['c796c8b987ed1bd9dfddd593e17312ed681fc4fa3a1ecfe51da2def0ac1e50df'],
+    }),
+    ('kernlab', '0.9-29', {
+        'checksums': ['c3da693a0041dd34f869e7b63a8d8cf7d4bc588ac601bcdddcf7d44f68b3106f'],
+    }),
+    ('mime', '0.12', {
+        'checksums': ['a9001051d6c1e556e881910b1816b42872a1ee41ab76d0040ce66a27135e3849'],
+    }),
+    ('markdown', '1.1', {
+        'checksums': ['8d8cd47472a37362e615dbb8865c3780d7b7db694d59050e19312f126e5efc1b'],
+    }),
+    ('mlbench', '2.1-3', {
+        'checksums': ['b1f92be633243185ab86e880a1e1ac5a4dd3c535d01ebd187a4872d0a8c6f194'],
+    }),
+    ('NLP', '0.2-1', {
+        'checksums': ['05eaa453ad2757311c073fd30093c738b20a977c5089031eb454345a1d01f2b6'],
+    }),
+    ('mclust', '5.4.7', {
+        'checksums': ['45f5a666caee5bebd3160922b8655295a25e37f624741f6574365e4ac5a14c23'],
+    }),
+    ('RANN', '2.6.1', {
+        'checksums': ['b299c3dfb7be17aa41e66eff5674fddd2992fb6dd3b10bc59ffbf0c401697182'],
+    }),
+    ('rmeta', '3.0', {
+        'checksums': ['b9f9d405935cffcd7a5697ff13b033f9725de45f4dc7b059fd68a7536eb76b6e'],
+    }),
+    ('segmented', '1.3-4', {
+        'checksums': ['8276bfbb3e5c1d7a9a61098f72ac9b2b0f52c89ae9f9b715f76b22303cc3902d'],
+    }),
+    ('som', '0.3-5.1', {
+        'checksums': ['a6f4c0e5b36656b7a8ea144b057e3d7642a8b71972da387a7133f3dd65507fb9'],
+    }),
+    ('SuppDists', '1.1-9.5', {
+        'checksums': ['680b67145c07d44e200275e08e48602fe19cd99fb106c05422b3f4a244c071c4'],
+    }),
+    ('stabledist', '0.7-1', {
+        'checksums': ['06c5704d3a3c179fa389675c537c39a006867bc6e4f23dd7e406476ed2c88a69'],
+    }),
+    ('survivalROC', '1.0.3', {
+        'checksums': ['1449e7038e048e6ad4d3f7767983c0873c9c7a7637ffa03a4cc7f0e25c31cd72'],
+    }),
+    ('pspline', '1.0-18', {
+        'checksums': ['f71cf293bd5462e510ac5ad16c4a96eda18891a0bfa6447dd881c65845e19ac7'],
+    }),
+    ('timeDate', '3043.102', {
+        'checksums': ['377cba03cddab8c6992e31d0683c1db3a73afa9834eee3e95b3b0723f02d7473'],
+    }),
+    ('longmemo', '1.1-2', {
+        'checksums': ['7964e982287427dd58f98e1144e468ae0cbd572d25a4bea6ca9ae9c7522f3207'],
+    }),
+    ('ADGofTest', '0.3', {
+        'checksums': ['9cd9313954f6ecd82480d373f6c5371ca84ab33e3f5c39d972d35cfcf1096846'],
+    }),
+    ('MASS', '7.3-54', {
+        'checksums': ['eb644c0e94b447c46387aa22436ef5a43192960ee9cfd0df2940f4a4116179ae'],
+    }),
+    ('pixmap', '0.4-12', {
+        'checksums': ['893ba894d4348ba05e6edf9c1b4fd201191816b444a214f7a6b2c0a79b0a2aec'],
+    }),
+    ('lattice', '0.20-45', {
+        'checksums': ['22388d92bdb7d3959da84d7308d9026dd8226ef07580783729e8ad2f7d7507ad'],
+    }),
+    ('sp', '1.4-5', {
+        'checksums': ['6beeb216d540475cdead5f2c72d6c7ee400fe2423c1882d72cf57f6df58f09da'],
+    }),
+    ('pkgconfig', '2.0.3', {
+        'checksums': ['330fef440ffeb842a7dcfffc8303743f1feae83e8d6131078b5a44ff11bc3850'],
+    }),
+    ('rlang', '0.4.12', {
+        'checksums': ['2a26915738be120a56ec93e781bcb50ffa1031e11904544198b4a15c35029915'],
+    }),
+    ('ellipsis', '0.3.2', {
+        'checksums': ['a90266e5eb59c7f419774d5c6d6bd5e09701a26c9218c5933c9bce6765aa1558'],
+    }),
+    ('digest', '0.6.28', {
+        'checksums': ['4a328c75e95f8522fc07390d1dd00c19fb643f558e761a8aed04f99c1dc7db00'],
+    }),
+    ('glue', '1.4.2', {
+        'checksums': ['9f7354132a26e9a876428fa87629b9aaddcd558f9932328e6ac065b95b8ef7ad'],
+    }),
+    ('vctrs', '0.3.8', {
+        'checksums': ['7f4e8b75eda115e69dddf714f0643eb889ad61017cdc13af24389aab2a2d1bb1'],
+    }),
+    ('lifecycle', '1.0.1', {
+        'checksums': ['1da76e1c00f1be96ca34e122ae611259430bf99d6a1b999fdef70c00c30f7ba0'],
+    }),
+    ('hms', '1.1.1', {
+        'checksums': ['6b5f30db1845c70d27b5de33f31caa487cdd0787cd80a4073375e5f482269062'],
+    }),
+    ('prettyunits', '1.1.1', {
+        'checksums': ['9a199aa80c6d5e50fa977bc724d6e39dae1fc597a96413053609156ee7fb75c5'],
+    }),
+    ('R6', '2.5.1', {
+        'checksums': ['8d92bd29c2ed7bf15f2778618ffe4a95556193d21d8431a7f75e7e5fc102bf48'],
+    }),
+    ('crayon', '1.4.2', {
+        'checksums': ['ee34397f643e76e30588068d4c93bd3c9afd2193deacccacb3bffcadf141b857'],
+    }),
+    ('progress', '1.2.2', {
+        'checksums': ['b4a4d8ed55db99394b036a29a0fb20b5dd2a91c211a1d651c52a1023cc58ff35'],
+    }),
+    ('ade4', '1.7-18', {
+        'checksums': ['ecb6f4c42c60f39702aa96f454bb536a333049c9608ee2b6bdf8795e059cc525'],
+    }),
+    ('AlgDesign', '1.2.0', {
+        'checksums': ['ff86c9e19505770520e7614970ad19c698664d08001ce888b8603e44c2a3b52a'],
+    }),
+    ('base64enc', '0.1-3', {
+        'checksums': ['6d856d8a364bcdc499a0bf38bfd283b7c743d08f0b288174fba7dbf0a04b688d'],
+    }),
+    ('BH', '1.75.0-0', {
+        'checksums': ['ae4c10992607dd697663f60675a46a5770851da159330bb63c4a68890bdd6f5a'],
+    }),
+    ('brew', '1.0-6', {
+        'checksums': ['d70d1a9a01cf4a923b4f11e4374ffd887ad3ff964f35c6f9dc0f29c8d657f0ed'],
+    }),
+    ('Brobdingnag', '1.2-6', {
+        'checksums': ['19eccaed830ce9d93b70642f6f126ac66722a98bbd48586899cc613dd9966ad4'],
+    }),
+    ('corpcor', '1.6.10', {
+        'checksums': ['71a04c503c93ec95ddde09abe8c7ddeb36175b7da76365a14b27066383e10e09'],
+    }),
+    ('longitudinal', '1.1.12', {
+        'checksums': ['d4f894c38373ba105b1bdc89e3e7c1b215838e2fb6b4470b9f23768b84e603b5'],
+    }),
+    ('backports', '1.3.0', {
+        'checksums': ['4f231e91ca8298fb1a27810ef5dd4c84e05c2b2b6f6748eab68f70ff4827812d'],
+    }),
+    ('checkmate', '2.0.0', {
+        'checksums': ['0dc25b0e20c04836359df1885d099c6e4ad8ae0e585a9e4107f7ea945d9c6fa4'],
+    }),
+    ('cubature', '2.0.4.2', {
+        'checksums': ['605bdd9d90fb6645359cccd1b289c5afae235b46360ef5bdd2001aa307a7694e'],
+    }),
+    ('DEoptimR', '1.0-9', {
+        'checksums': ['6151aa74f52ff4be664343e3992749e63235ebba51c9fded3775c1a2407c6512'],
+    }),
+    ('fastmatch', '1.1-3', {
+        'checksums': ['1defa0b08bc3f48e4c3e4ba8df4f1b9e8299932fd8c747c67d32de44f90b9861'],
+    }),
+    ('ffbase', '0.13.3', {
+        'checksums': ['b3f61f80ba6851130247779786903d42a24ee5219aa24556c8470aece8a2e6b6'],
+    }),
+    ('iterators', '1.0.13', {
+        'checksums': ['778e30e4c292da9f94d62acc637cf55273dae258199d847e62658f44840f11a4'],
+    }),
+    ('maps', '3.4.0', {
+        'checksums': ['7918ccb2393ca19589d4c4e77d9ebe863dc6317ebfc1ff41869dbfaf439f5747'],
+    }),
+    ('nnls', '1.4', {
+        'checksums': ['0e5d77abae12bc50639d34354f96a8e079408c9d7138a360743b73bd7bce6c1f'],
+    }),
+    ('sendmailR', '1.2-1', {
+        'checksums': ['04feb08c6c763d9c58b2db24b1222febe01e28974eac4fe87670be6fb9bff17c'],
+    }),
+    ('dotCall64', '1.0-1', {
+        'checksums': ['f10b28fcffb9453b1d8888a72c8fd2112038b5ac33e02a481492c7bd249aa5c6'],
+    }),
+    ('spam', '2.7-0', {
+        'checksums': ['632b5c48f587a34c997a487b72099c9c89d76a43f2cd9a36cb95fdec1d07850d'],
+    }),
+    ('subplex', '1.6', {
+        'checksums': ['0d05da1622fffcd20a01cc929fc6c2b7df40a8246e7018f7f1f3c175b774cbf9'],
+    }),
+    ('stringi', '1.7.5', {
+        'checksums': ['2914cc34e1cbfb65147090263b0e1bf2727ad32bc9bb860732094fecff4b2565'],
+    }),
+    ('magrittr', '2.0.1', {
+        'checksums': ['75c265d51cc2b34beb27040edb09823c7b954d3990a7a931e40690b75d4aad5f'],
+    }),
+    ('stringr', '1.4.0', {
+        'checksums': ['87604d2d3a9ad8fd68444ce0865b59e2ffbdb548a38d6634796bbd83eeb931dd'],
+    }),
+    ('evaluate', '0.14', {
+        'checksums': ['a8c88bdbe4e60046d95ddf7e181ee15a6f41cdf92127c9678f6f3d328a3c5e28'],
+    }),
+    ('logspline', '2.1.16', {
+        'checksums': ['7418491b8c778483c24e4354ee47b1e1b1d68b0057c12d6e012cce7d4e6c138a'],
+    }),
+    ('ncbit', '2013.03.29', {
+        'checksums': ['4480271f14953615c8ddc2e0666866bb1d0964398ba0fab6cc29046436820738'],
+    }),
+    ('permute', '0.9-5', {
+        'checksums': ['d2885384a07497e8df273689d6713fc7c57a7c161f6935f3572015e16ab94865'],
+    }),
+    ('plotrix', '3.8-2', {
+        'checksums': ['bb72953102889cea41cd6521874e35d2458ebd10aab97ba6f262e102cac0bc1f'],
+    }),
+    ('randomForest', '4.6-14', {
+        'checksums': ['f4b88920419eb0a89d0bc5744af0416d92d112988702dc726882394128a8754d'],
+    }),
+    ('scatterplot3d', '0.3-41', {
+        'checksums': ['4c8326b70a3b2d37126ca806771d71e5e9fe1201cfbe5b0d5a0a83c3d2c75d94'],
+    }),
+    ('SparseM', '1.81', {
+        'checksums': ['bd838f381ace680fa38508ff70b3d83cb9ffa28ac1ab568509249bca53c34b33'],
+    }),
+    ('tripack', '1.3-9.1', {
+        'checksums': ['7f82f8d63741c468767acc6fb35281bd9903f6c3c52e8fada60a6ae317511fbe'],
+    }),
+    ('irace', '3.4.1', {
+        'checksums': ['7eea92ba42e6ba320fa8bdca3c53091ae42f26a0f097244f65e7e117f6d514b6'],
+    }),
+    ('rJava', '1.0-5', {
+        'checksums': ['2fdba5774f6333440e0ef6d96567b37f9f382820242a4d885f2891796fb36fde'],
+    }),
+    ('RColorBrewer', '1.1-2', {
+        'checksums': ['f3e9781e84e114b7a88eb099825936cc5ae7276bbba5af94d35adb1b3ea2ccdd'],
+    }),
+    ('png', '0.1-7', {
+        'checksums': ['e269ff968f04384fc9421d17cfc7c10cf7756b11c2d6d126e9776f5aca65553c'],
+    }),
+    ('jpeg', '0.1-9', {
+        'checksums': ['01a175442ec209b838a56a66a3908193aca6f040d537da7838d9368e46913072'],
+    }),
+    ('latticeExtra', '0.6-29', {
+        'checksums': ['6cadc31d56f73d926e2e8d72e43ae17ac03607a4d1a374719999a4a231e3df11'],
+    }),
+    ('Matrix', '1.3-4', {
+        'checksums': ['ab42179d44545e99bbdf44bb6d04cab051dd2aba552b1f6edd51ed71b55f6c39'],
+    }),
+    ('RcppArmadillo', '0.10.7.0.0', {
+        'checksums': ['01a8eac49d5b2bcefcba076f0ee7b234bee3d22d54d7f4d56d9a6ae7cbea65f4'],
+    }),
+    ('plyr', '1.8.6', {
+        'checksums': ['ea55d26f155443e9774769531daa5d4c20a0697bb53abd832e891b126c935287'],
+    }),
+    ('gtable', '0.3.0', {
+        'checksums': ['fd386cc4610b1cc7627dac34dba8367f7efe114b968503027fb2e1265c67d6d3'],
+    }),
+    ('reshape2', '1.4.4', {
+        'checksums': ['d88dcf9e2530fa9695fc57d0c78adfc5e361305fe8919fe09410b17da5ca12d8'],
+    }),
+    ('dichromat', '2.0-0', {
+        'checksums': ['31151eaf36f70bdc1172da5ff5088ee51cc0a3db4ead59c7c38c25316d580dd1'],
+    }),
+    ('colorspace', '2.0-2', {
+        'checksums': ['b891cd2ec129ed5f116429345947bcaadc33969758a108521eb0cf36bd12183a'],
+    }),
+    ('munsell', '0.5.0', {
+        'checksums': ['d0f3a9fb30e2b5d411fa61db56d4be5733a2621c0edf017d090bdfa5e377e199'],
+    }),
+    ('labeling', '0.4.2', {
+        'checksums': ['e022d79276173e0d62bf9e37d7574db65ab439eb2ae1833e460b1cff529bd165'],
+    }),
+    ('viridisLite', '0.4.0', {
+        'checksums': ['849955dc8ad9bc52bdc50ed4867fd92a510696fc8294e6971efa018437c83c6a'],
+    }),
+    ('farver', '2.1.0', {
+        'checksums': ['e5c8630607049f682fb3002b99ca4f5e7c6b94f8b2a4342df594e7853b77cef4'],
+    }),
+    ('scales', '1.1.1', {
+        'checksums': ['40b2b66522f1f314a20fd09426011b0cdc9d16b23ee2e765fe1930292dd03705'],
+    }),
+    ('utf8', '1.2.2', {
+        'checksums': ['a71aee87d43a9bcf29249c7a5a2e9ca1d2a836e8d5ee3a264d3062f25378d8f4'],
+    }),
+    ('zeallot', '0.1.0', {
+        'checksums': ['439f1213c97c8ddef9a1e1499bdf81c2940859f78b76bc86ba476cebd88ba1e9'],
+    }),
+    ('assertthat', '0.2.1', {
+        'checksums': ['85cf7fcc4753a8c86da9a6f454e46c2a58ffc70c4f47cac4d3e3bcefda2a9e9f'],
+    }),
+    ('fansi', '0.5.0', {
+        'checksums': ['9d1bf8c316969c163abd3dd41cc1425b2671df9471fe806bf8783794a19ca54f'],
+    }),
+    ('cli', '3.1.0', {
+        'checksums': ['c70a61830bf706a84c59eb74a809978846cee93742198ab4192742a5df1ace11'],
+    }),
+    ('pillar', '1.6.4', {
+        'checksums': ['033a92a271ddeec2a17323d070de8257b9ca4d57f5be6181e2ad35fe7e1ea19e'],
+    }),
+    ('tibble', '3.1.5', {
+        'checksums': ['da6387ba683a67cd7fc2a111f6b62468e480a8078bc1867d433a40c5460edbe7'],
+    }),
+    ('lazyeval', '0.2.2', {
+        'checksums': ['d6904112a21056222cfcd5eb8175a78aa063afe648a562d9c42c6b960a8820d4'],
+    }),
+    ('withr', '2.4.2', {
+        'checksums': ['48f96a4cb780cf6fd5fbbea1f1eb04ea3102d7a4a644cae1ed1e91139dcbbac8'],
+    }),
+    ('nlme', '3.1-153', {
+        'checksums': ['3d27a98edf1b16ee868949e823ac0babbf10c937a7220d648b7ef9480cd680e3'],
+    }),
+    ('mgcv', '1.8-38', {
+        'checksums': ['cd12ed5787d6fdcead34e782e48b62b3f9efd523616c906e2da77bd9c142ddbb'],
+    }),
+    ('rprojroot', '2.0.2', {
+        'checksums': ['5fa161f0d4ac3b7a99dc6aa2d832251001dc92e93c828593a51fe90afd019e1f'],
+    }),
+    ('desc', '1.4.0', {
+        'checksums': ['8220e4c706449b8121b822e70b1414f391ef419aed574836a234c63b83e5d649'],
+    }),
+    ('ps', '1.6.0', {
+        'checksums': ['89ad7ddc5e0818bccacfd0673ddf2da0892ac2a3b4d3a821e40884ab1e96bf31'],
+    }),
+    ('processx', '3.5.2', {
+        'checksums': ['ed6f2d1047461c6061e6ed58fb6de65a289b56009867892abad76c6bba46fc2b'],
+    }),
+    ('callr', '3.7.0', {
+        'checksums': ['d67255148595c6d0ba4c4d241bc9f6b5e00cafe25fdc13e38c10acc38653360a'],
+    }),
+    ('pkgbuild', '1.2.0', {
+        'checksums': ['2e19308d3271fefd5e118c6d132d6a2511253b903620b5417892c72d2010a963'],
+    }),
+    ('rstudioapi', '0.13', {
+        'checksums': ['aac35bbdcb4a8e8caba943bc8a2b98120e8940b80cd1020224bb1a26ff776d8b'],
+    }),
+    ('pkgload', '1.2.3', {
+        'checksums': ['105ae5b2caca495bd0702757c5c676353cca8525954d0822f07103ca8a54b349'],
+    }),
+    ('praise', '1.0.0', {
+        'checksums': ['5c035e74fd05dfa59b03afe0d5f4c53fbf34144e175e90c53d09c6baedf5debd'],
+    }),
+    ('brio', '1.1.2', {
+        'checksums': ['42dde6953151e31cc38bbec72335c01ac9e755cc07d11e26f4e1fcd0f9f471ef'],
+    }),
+    ('jsonlite', '1.7.2', {
+        'checksums': ['06354b50435942f67ba264f79831e577809ef89e5f9a5a2201985396fe651fd2'],
+    }),
+    ('diffobj', '0.3.5', {
+        'checksums': ['d860a79b1d4c9e369282d7391b539fe89228954854a65ba47181407c53e3cf60'],
+    }),
+    ('rematch2', '2.1.2', {
+        'checksums': ['fe9cbfe99dd7731a0a2a310900d999f80e7486775b67f3f8f388c30737faf7bb'],
+    }),
+    ('waldo', '0.3.1', {
+        'checksums': ['ec2c8c1afbc413f8db8b6b0c6970194a875f616ad18e1e72a004bc4497ec019b'],
+    }),
+    ('testthat', '3.1.0', {
+        'checksums': ['e714b105891a766d03d5bab09d705b1f6c23f04db56dfe310bff8cfa00464987'],
+    }),
+    ('isoband', '0.2.5', {
+        'checksums': ['46f53fa066f0966f02cb2bf050190c0d5e950dab2cdf565feb63fc092c886ba5'],
+    }),
+    ('ggplot2', '3.3.5', {
+        'checksums': ['b075294faf3af31b18e415f260c62d6000b218770e430484fe38819bdc3224ea'],
+    }),
+    ('pROC', '1.18.0', {
+        'checksums': ['d5ef54b384176ece6d6448014ba40570a98181b58fee742f315604addb5f7ba9'],
+    }),
+    ('quadprog', '1.5-8', {
+        'checksums': ['22128dd6b08d3516c44ff89276719ad4fe46b36b23fdd585274fa3a93e7a49cd'],
+    }),
+    ('BB', '2019.10-1', {
+        'checksums': ['04d0b6ce6e5f070b109478a6005653dbe78613bb4e3ea4903203d851b5d3c94d'],
+    }),
+    ('BBmisc', '1.11', {
+        'checksums': ['1ea48c281825349d8642a661bb447e23bfd651db3599bf72593bfebe17b101d2'],
+    }),
+    ('fail', '1.3', {
+        'checksums': ['ede8aa2a9f2371aff5874cd030ac625adb35c33954835b54ab4abf7aeb34d56d'],
+    }),
+    ('rlecuyer', '0.3-5', {
+        'checksums': ['4723434ff7624d4f404a6854ffa0673fc43daa46f58f064dbeeaa17da28ab626'],
+    }),
+    ('snow', '0.4-4', {
+        'checksums': ['84587f46f222a96f3e2fde10ad6ec6ddbd878f4e917cd926d632f61a87db13c9'],
+    }),
+    ('tree', '1.0-41', {
+        'checksums': ['21cf995b187d97de0bce8330973a52c46235db0fc09a133cad26283b7a6f5c8e'],
+    }),
+    ('pls', '2.8-0', {
+        'checksums': ['eff3a92756ca34cdc1661fa36d2bf7fc8e9f4132d2f1ef9ed0105c83594618bf'],
+    }),
+    ('class', '7.3-19', {
+        'checksums': ['9012f5c65384b441b5738ed7bd18ea735884bab32b31776e80cf3679f38a3769'],
+    }),
+    ('proxy', '0.4-26', {
+        'checksums': ['676bad821343974e0297a0566c4bf0cf0ea890104906a745b87d3b5989c81a4d'],
+    }),
+    ('e1071', '1.7-9', {
+        'checksums': ['9bf9a15e7ce0b9b1a57ce3048d29cbea7f2a5bb2e91271b1b6aaafe07c852226'],
+    }),
+    ('nnet', '7.3-16', {
+        'checksums': ['c5b73eb4fff0d225e14f898cec987a7a88796b6e70cde4cf277374428f2d5c13'],
+    }),
+    ('minqa', '1.2.4', {
+        'checksums': ['cfa193a4a9c55cb08f3faf4ab09c11b70412523767f19894e4eafc6e94cccd0c'],
+    }),
+    ('RcppEigen', '0.3.3.9.1', {
+        'checksums': ['8a0486249b778a4275a1168fc89fc7fc49c2bb031cb14b50a50089acae7fe962'],
+    }),
+    ('MatrixModels', '0.5-0', {
+        'checksums': ['a87faf1a185219f79ea2307e6787d293e1d30bf3af9398e8cfe1e079978946ed'],
+    }),
+    ('matrixStats', '0.61.0', {
+        'checksums': ['dbd3c0ec59b1ae62ff9b4c2c90c4687cbd680d1796f6fdd672319458d4d2fd9a'],
+    }),
+    ('codetools', '0.2-18', {
+        'checksums': ['1a9ea6b9792dbd1688078455929385acc3a5e4bef945c77bec1261fa4a084c28'],
+    }),
+    ('foreach', '1.5.1', {
+        'checksums': ['fb5ad69e295618c52b2ac7dff84a0771462870a97345374d43b3de2dc31a68e1'],
+    }),
+    ('data.table', '1.14.2', {
+        'checksums': ['f741b951e5937440139514aedbae78dbd6862d825066848bdb006aa02c2f3d2b'],
+    }),
+    ('ModelMetrics', '1.2.2.2', {
+        'checksums': ['5e06f1926aebca5654e1329c66ef19b04058376b2277ebb16e3bf8c208d73457'],
+    }),
+    ('generics', '0.1.1', {
+        'checksums': ['a2478ebf1a0faa8855a152f4e747ad969a800597434196ed1f71975a9eb11912'],
+    }),
+    ('purrr', '0.3.4', {
+        'checksums': ['23ebc93bc9aed9e7575e8eb9683ff4acc0270ef7d6436cc2ef4236a9734840b2'],
+    }),
+    ('tidyselect', '1.1.1', {
+        'checksums': ['18eb6a6746196a81ce19ee6cbf1db0c33f494177b97e2419312ef25a00ae486b'],
+    }),
+    ('dplyr', '1.0.7', {
+        'checksums': ['d2fe3aedbce02fdddce09a8a80f85f5918a9d1f15f792ad4a98f254959d7123d'],
+    }),
+    ('gower', '0.2.2', {
+        'checksums': ['3f022010199fafe34f6e7431730642a76893e6b4249b84e5a61012cb83483631'],
+    }),
+    ('rpart', '4.1-15', {
+        'checksums': ['2b8ebe0e9e11592debff893f93f5a44a6765abd0bd956b0eb1f70e9394cfae5c'],
+    }),
+    ('survival', '3.2-13', {
+        'checksums': ['3fab9c0ba2c4e2b6a475207e2629a7f06a104c70093dfb768f50a7caac9a317f'],
+    }),
+    ('KernSmooth', '2.23-20', {
+        'checksums': ['20eb75051e2473933d41eedc9945b03c632847fd581e2207d452cf317fa5ec39'],
+    }),
+    ('globals', '0.14.0', {
+        'checksums': ['203dbccb829ca9cc6aedb6f5e79cb126ea31f8dd379dff9111ec66e3628c32f3'],
+    }),
+    ('listenv', '0.8.0', {
+        'checksums': ['fd2aaf3ff2d8d546ce33d1cb38e68401613975117c1f9eb98a7b41facf5c485f'],
+    }),
+    ('parallelly', '1.28.1', {
+        'checksums': ['f4ae883b18409adb83c561ed69427e740e1b50bf85ef57f48c3f2edf837cc663'],
+    }),
+    ('future', '1.23.0', {
+        'checksums': ['d869c80e837c0937a414b8050deff081aefeac586b796f3d634d64f0f4fdb8f8'],
+    }),
+    ('future.apply', '1.8.1', {
+        'checksums': ['0d5bc3cb0289665bb27ae4ccad51fcc5ebf6dca46872b0a4e57790b9dc0aa6c7'],
+    }),
+    ('progressr', '0.9.0', {
+        'checksums': ['cfe70f8423041ea5b5a2a39122c166462e58b1bba84df935858a7b86362b530f'],
+    }),
+    ('numDeriv', '2016.8-1.1', {
+        'checksums': ['d8c4d19ff9aeb31b0c628bd4a16378e51c1c9a3813b525469a31fe89af00b345'],
+    }),
+    ('SQUAREM', '2021.1', {
+        'checksums': ['66e5e18ca29903e4950750bbd810f0f9df85811ee4195ce0a86d939ba8183a58'],
+    }),
+    ('lava', '1.6.10', {
+        'checksums': ['7a88f8a885872e2abb3011c446e9e1c4884cd4dbe6ab4cfe9207538e5560232e'],
+    }),
+    ('prodlim', '2019.11.13', {
+        'checksums': ['6809924f503a14681de84730489cdaf9240d7951c64f5b98ca37dc1ce7809b0f'],
+    }),
+    ('ipred', '0.9-12', {
+        'checksums': ['d6e1535704d39415a799d7643141ffa4f6f55597f03e763f4ccd5d8106005843'],
+    }),
+    ('cpp11', '0.4.0', {
+        'checksums': ['1768fd07dc30dfbbf8f3fb1a1183947cb7e1dfd909165c4d612a63c163a41e87'],
+    }),
+    ('lubridate', '1.8.0', {
+        'checksums': ['87d66efdb1f3d680db381d7e40a202d35645865a0542e2f270ef008a19002ba5'],
+    }),
+    ('tidyr', '1.1.4', {
+        'checksums': ['0b0c98be98a433e15a2550f60330b31a58529a9c58bc2abd7bff6462ab761241'],
+    }),
+    ('recipes', '0.1.17', {
+        'checksums': ['ed20ba0ea0165310e31864ed7d2e005a2a37b76c7913977fd124d8b567616d3d'],
+    }),
+    ('caret', '6.0-90', {
+        'checksums': ['e851a4ed7d939c665e57e3551a5464b09fe4285e7c951236efdd890b0da866bc'],
+    }),
+    ('conquer', '1.2.0', {
+        'checksums': ['10451223658e02b31b87f7f86a14e3d8c71bfbff62ea30f85b89cdef829f07f9'],
+    }),
+    ('quantreg', '5.86', {
+        'checksums': ['71d1c829af7574ca00575cc0375376ac3ecd54b3d6d36e8eecd71ed8acb9d605'],
+    }),
+    ('robustbase', '0.93-9', {
+        'checksums': ['d75fb5075463fec61d063bced7003936e9198492328b6fae15f67e8415713c45'],
+    }),
+    ('zoo', '1.8-9', {
+        'checksums': ['b7be259067a8b9d4a8f5d387e0946a5ba1eb43474baa67ccf4f8bf4b15f772a3'],
+    }),
+    ('lmtest', '0.9-38', {
+        'checksums': ['32a22cea45398ffc5732d9f5c0391431d0cdd3a9e29cc7b77bea32c1eb4a216b'],
+    }),
+    ('vcd', '1.4-9', {
+        'checksums': ['a5b420ad5ff1a27fa92f98099a8b43f2dded7e5f60297b3e4d947ad6f039568f'],
+    }),
+    ('snowfall', '1.84-6.1', {
+        'checksums': ['5c446df3a931e522a8b138cf1fb7ca5815cc82fcf486dbac964dcbc0690e248d'],
+    }),
+    ('bindr', '0.1.1', {
+        'checksums': ['7c785ca77ceb3ab9282148bcecf64d1857d35f5b800531d49483622fe67505d0'],
+    }),
+    ('plogr', '0.2.0', {
+        'checksums': ['0e63ba2e1f624005fe25c67cdd403636a912e063d682eca07f2f1d65e9870d29'],
+    }),
+    ('bindrcpp', '0.2.2', {
+        'checksums': ['48130709eba9d133679a0e959e49a7b14acbce4f47c1e15c4ab46bd9e48ae467'],
+    }),
+    ('tmvnsim', '1.0-2', {
+        'checksums': ['97f63d0bab3b240cc7bdbe6e6e74e90ad25a4382a345ee51a26fe3959edeba0f'],
+    }),
+    ('mnormt', '2.0.2', {
+        'checksums': ['5c6aa036d3f1035ffe8f9a8e95bb908b191b126b016591cf893c50472851f334'],
+    }),
+    ('foreign', '0.8-81', {
+        'checksums': ['1ae8f9f18f2a037697fa1a9060417ff255c71764f0145080b2bd23ba8262992c'],
+    }),
+    ('psych', '2.1.9', {
+        'checksums': ['1475e03a17f1ae6837834f01c2472aed68887c89d90a84a3e09a532ce218500c'],
+    }),
+    ('broom', '0.7.10', {
+        'checksums': ['129fd5a53abef7f42b7efac6c64ebd71269b136aa648846d640562357927464f'],
+    }),
+    ('nloptr', '1.2.2.2', {
+        'checksums': ['e80ea9619ac18f4bfe44812198b40b9ae5c0ddf3f9cc91778f9ccc82168d1372'],
+    }),
+    ('boot', '1.3-28', {
+        'checksums': ['9f7158fd2714659f590c3955651893dc24bd8f39196bc5a4cc35b0b031744a32'],
+    }),
+    ('statmod', '1.4.36', {
+        'checksums': ['14e897c83d426caca4d920d3d5bead7ae9a679276b3cb2e227f299ad189d7bc2'],
+    }),
+    ('lme4', '1.1-27.1', {
+        'checksums': ['25fa873e39b8192e48c15eec93db8c8bf6f03baf3bd8d5ca9188482ce8442ec5'],
+    }),
+    ('ucminf', '1.1-4', {
+        'checksums': ['a2eb382f9b24e949d982e311578518710f8242070b3aa3314a331c1e1e7f6f07'],
+    }),
+    ('ordinal', '2019.12-10', {
+        'checksums': ['7a41e7b7e852a8fa3e911f8859d36e5709ccec5ca42ee3de14a813b7aaac7725'],
+    }),
+    ('jomo', '2.7-2', {
+        'checksums': ['3962d5cbecc60e72670329dbef0dd74303080f5ea2a79c91e27f75db99ba6ce9'],
+    }),
+    ('clipr', '0.7.1', {
+        'checksums': ['ffad477b07847e3b68f7e4406bbd323025a8dae7e3c768943d4d307ee3248afb'],
+    }),
+    ('tzdb', '0.2.0', {
+        'checksums': ['c335905d452b400af7ed54b916b5246cb3f47ede0602911a2bcb25a1cf56d5a9'],
+    }),
+    ('bit64', '4.0.5', {
+        'checksums': ['25df6826ea5e93241c4874cad4fa8dadc87a40f4ff74c9107aa12a9e033e1578'],
+    }),
+    ('vroom', '1.5.5', {
+        'checksums': ['1d45688c08f162a3300eda532d9e87d144f4bc686769a521bf9a12e3d3b465fe'],
+    }),
+    ('readr', '2.0.2', {
+        'checksums': ['98b05ed751dda2bcf7a29d070ce3d3e8475e0138a3e3ec68941dc45218db7615'],
+    }),
+    ('forcats', '0.5.1', {
+        'checksums': ['c4fb96e874e2bedaa8a1aa32ea22abdee7906d93b5c5c7b42c0894c0c5b6a289'],
+    }),
+    ('haven', '2.4.3', {
+        'checksums': ['95b70f47e77792bed4312441787299d2e3e27d79a176f0638a37e5301b93295f'],
+    }),
+    ('pan', '1.6', {
+        'checksums': ['adc0df816ae38bc188bce0aef3aeb71d19c0fc26e063107eeee71a81a49463b6'],
+    }),
+    ('mitml', '0.4-3', {
+        'checksums': ['49bd3eb68a60fb2a269e7ddca8b862e1e81e0651e2b29759482fb7bcad452102'],
+    }),
+    ('mice', '3.13.0', {
+        'checksums': ['5108e4673512c96ced19c23fdbb0feea2b2a655a4c7dc9afb06a2a1a29f69785'],
+    }),
+    ('urca', '1.3-0', {
+        'checksums': ['621cc82398e25b58b4a16edf000ed0a1484d9a0bc458f734e97b6f371cc76aaa'],
+    }),
+    ('fracdiff', '1.5-1', {
+        'checksums': ['b8103b32a4ca3a59dda1624c07da08ecd144c7a91a747d1f4663e99421950eb6'],
+    }),
+    ('operator.tools', '1.6.3', {
+        'checksums': ['e5b74018fb75bfa02820dec4b822312f1640422f01d9fec1b58d880ffb798dec'],
+    }),
+    ('formula.tools', '1.7.1', {
+        'checksums': ['4fe0e72d9d96f2398e86cbd8536d0c84de38e5583d4ff7dcd73f415ddd8ca395'],
+    }),
+    ('logistf', '1.24', {
+        'checksums': ['6561d311fe21b789954cb33c008b86abdd6509b2a2900385dd6046163679d96b'],
+    }),
+    ('akima', '0.6-2.2', {
+        'checksums': ['deefc9ff82f78e68b7333c2fc88bd23863da9919493f2b73658044436f6b8742'],
+    }),
+    ('bitops', '1.0-7', {
+        'checksums': ['e9b5fc92c39f94a10cd0e13f3d6e2a9c17b75ea01467077a51d47a5f708517c4'],
+    }),
+    ('mixtools', '1.2.0', {
+        'checksums': ['ef033ef13625209065d26767bf70d129972e6808927f755629f1d70a118b9023'],
+    }),
+    ('cluster', '2.1.2', {
+        'checksums': ['5c8aa760fb6dda4fcfe6196e561ffcd2dc12b1a6c7659cb90be2cde747311499'],
+    }),
+    ('gclus', '1.3.2', {
+        'checksums': ['9cc61cdff206c11213e73afca3d570a7234250cf6044a9202c2589932278e0b3'],
+    }),
+    ('coda', '0.19-4', {
+        'checksums': ['422d3cfd34797a3631e9c4812431940599c0ca4bb9937797bed07b7b1d6fe58f'],
+    }),
+    ('doMC', '1.3.7', {
+        'checksums': ['defab27adc298a6746896d83251f8355d62c01012d51ef96d491875a2e74b54d'],
+    }),
+    ('DBI', '1.1.1', {
+        'checksums': ['572ab3b8a6421d0ac3e7665c4c842826f1723af98fca25d4f43edb419e771344'],
+    }),
+    ('gam', '1.20', {
+        'checksums': ['91eb416ba06aa1c3f611661530467f4513992f6c168e3f6e474cf57bae131efe'],
+    }),
+    ('gamlss.data', '6.0-1', {
+        'checksums': ['98fdec571aeacea4318c9e1c9d56b74716f3dc6acce385cbaad0d6128b154bb2'],
+    }),
+    ('gamlss.dist', '5.3-2', {
+        'checksums': ['0caa92cd20c3d2d11b1af4656fd0de09adf145992345cba07fdcd33b7716ced3'],
+    }),
+    ('gamlss', '5.3-4', {
+        'checksums': ['72707187471fd35c5379ae8c9b7b0ca87e302557f09cb3979d1cdb2e2500b01a'],
+    }),
+    ('gamlss.tr', '5.1-7', {
+        'checksums': ['8f9975bceaf8000b1d39317daf490e59c8385b5291326ed6a2630be11dae3137'],
+    }),
+    ('hwriter', '1.3.2', {
+        'checksums': ['6b3531d2e7a239be9d6e3a1aa3256b2745eb68aa0bdffd2076d36552d0d7322b'],
+    }),
+    ('xts', '0.12.1', {
+        'checksums': ['d680584af946fc30be0b2046e838cff7b3a65e00df1eadba325ca5e96f3dca2c'],
+    }),
+    ('curl', '4.3.2', {
+        'checksums': ['90b1facb4be8b6315bb3d272ba2dd90b88973f6ea1ab7f439550230f8500a568'],
+    }),
+    ('TTR', '0.24.2', {
+        'checksums': ['2587b988d9199474a19470b9b999b99133d0d8aa45410813e05c5f0ed763711b'],
+    }),
+    ('quantmod', '0.4.18', {
+        'checksums': ['aa40448e93a1facf399213ac691784007731e869ad243fe762381ab099cd6c35'],
+    }),
+    ('mvtnorm', '1.1-3', {
+        'checksums': ['ff4e302139ba631280fc9c4a2ab168596bfd09e17a805974199b043697c02448'],
+    }),
+    ('pcaPP', '1.9-74', {
+        'checksums': ['50837b434d67e4b5fcec34c689a9e30c7a9fb94c561b39f24e68a1456ff999b6'],
+    }),
+    ('pscl', '1.5.5', {
+        'checksums': ['054c9b88a991abdec3338688f58e81b6ba55f91edb988621864b24fd152fee6f'],
+    }),
+    ('fastmap', '1.1.0', {
+        'checksums': ['9113e526b4c096302cfeae660a06de2c4c82ae4e2d3d6ef53af6de812d4c822b'],
+    }),
+    ('cachem', '1.0.6', {
+        'checksums': ['9a9452f7bcf3f79436c418b3c3290449fb8fd338714d9b992153754d112f1864'],
+    }),
+    ('memoise', '2.0.0', {
+        'checksums': ['ff9ae3a1a95ad6271d98e6eca016768b790e44bd613356b8e86b685aefd9ecaf'],
+    }),
+    ('blob', '1.2.2', {
+        'checksums': ['4976053c65994c769a4c22b4553bea0bd9c623b3b991dbaf023d2a164770c7fa'],
+    }),
+    ('RSQLite', '2.2.8', {
+        'checksums': ['1b8adc1b7ed4bc5ec070b8765837cd4104fcdda482a1d335c030f51b427c4cc3'],
+    }),
+    ('BatchJobs', '1.8', {
+        'checksums': ['35cc2dae31994b1df982d11939509ce965e12578418c4fbb8cd7a422afd6e4ff'],
+    }),
+    ('sandwich', '3.0-1', {
+        'checksums': ['f6584b7084f3223bbc0c4722f53280496be73849747819b0cb4e8f3910284a89'],
+    }),
+    ('sfsmisc', '1.1-12', {
+        'checksums': ['9b12184a28fff87cacd0c3602d0cf63acb4d0f3049ad3a6ff16177f6df350782'],
+    }),
+    ('spatial', '7.3-14', {
+        'checksums': ['50e6daacbacff6c716485d20b15eb7fff7b8108dc5ea0ff508024beb4f0a8b9b'],
+    }),
+    ('VGAM', '1.1-5', {
+        'checksums': ['30190b150f3e5478137d288a45f575b2654ad7c29254b0a1fe5c954ee010a1bb'],
+    }),
+    ('waveslim', '1.8.2', {
+        'checksums': ['133c4f7a027282742fe99b583ca65f178fc7a3df2ce75cb4d60650f0a1dd7145'],
+    }),
+    ('xtable', '1.8-4', {
+        'checksums': ['5abec0e8c27865ef0880f1d19c9f9ca7cc0fd24eadaa72bcd270c3fb4075fd1c'],
+    }),
+    ('profileModel', '0.6.1', {
+        'checksums': ['91dc25e81f52506593f5c8d80a6131510b14525262f65b4ac10ae0cad0b2a506'],
+    }),
+    ('brglm', '0.7.2', {
+        'checksums': ['56098d2ce238478e7a27cacc4cdec0bc65f287fe746b38fbb1edda20c1675023'],
+    }),
+    ('deSolve', '1.30', {
+        'checksums': ['39f65d7af6b4d85eb023cce2a200c2de470644b22d45e210c5b7d558c3abf548'],
+    }),
+    ('tseriesChaos', '0.1-13.1', {
+        'checksums': ['23cb5fea56409a305e02a523ff8b7642ec383942d415c9cffdc92208dacfd961'],
+    }),
+    ('tseries', '0.10-48', {
+        'checksums': ['53bd22708c936205c5f839a10f2e302524d2cc54dc309e7d885ebd081ccb4471'],
+    }),
+    ('fastICA', '1.2-3', {
+        'checksums': ['e9ef82644cb64bb49ae3b7b6e0885f4fb2dc08ae030f8c76fe8dd8507b658950'],
+    }),
+    ('R.methodsS3', '1.8.1', {
+        'checksums': ['8a98fb81bcfa78193450f855f614f6f64e6c65daf115f301d97d1f474f5e619b'],
+    }),
+    ('R.oo', '1.24.0', {
+        'checksums': ['37a1dab8dd668ceba69a1ba36c0c60e9809e29b74bd56d1e8ed519e19c8e3bb6'],
+    }),
+    ('sys', '3.4', {
+        'checksums': ['17f88fbaf222f1f8fd07919461093dac0e7175ae3c3b3264b88470617afd0487'],
+    }),
+    ('askpass', '1.1', {
+        'checksums': ['db40827d1bdbb90c0aa2846a2961d3bf9d76ad1b392302f9dd84cc2fd18c001f'],
+    }),
+    ('openssl', '1.4.5', {
+        'checksums': ['4fc141aba8e94e9f5ecce6eda07e45a5e7048d8609ba909ede4f7f4933e0c1f7'],
+    }),
+    ('httr', '1.4.2', {
+        'checksums': ['462bed6ed0d92f811d5df4d294336025f1dbff357286999d9269bfd9c20b1ef9'],
+    }),
+    ('cgdsr', '1.3.0', {
+        'checksums': ['4aa2a3564cee2449c3ff39ab2ad631deb165d4c78b8107e0ff77a9095340cc1f'],
+    }),
+    ('R.utils', '2.11.0', {
+        'checksums': ['622860f995f78be3a6e439f29d945874c5cb0866f6a73a9b43ac1d4d7f23fed8'],
+    }),
+    ('R.matlab', '3.6.2', {
+        'checksums': ['1ba338f470a24b7f6ef68cadbd04eb468ead4a689f263d2642408ad591b786bb'],
+    }),
+    ('gridExtra', '2.3', {
+        'checksums': ['81b60ce6f237ec308555471ae0119158b115463df696d2eca9b177ded8988e3b'],
+    }),
+    ('gbm', '2.1.8', {
+        'checksums': ['7d5de3b980b8f23275e86ac9bed48a497c9aa53c58e407dfd676309f38272ec1'],
+    }),
+    ('Formula', '1.2-4', {
+        'checksums': ['cb70e373b5ed2fc8450937fb3321d37dfd22dcc6f07cb872a419d51205125caf'],
+    }),
+    ('acepack', '1.4.1', {
+        'checksums': ['82750507926f02a696f6cc03693e8d4a5ee7e92500c8c15a16a9c12addcd28b9'],
+    }),
+    ('proto', '1.0.0', {
+        'checksums': ['9294d9a3b2b680bb6fac17000bfc97453d77c87ef68cfd609b4c4eb6d11d04d1'],
+    }),
+    ('chron', '2.3-56', {
+        'checksums': ['863ecbb951a3da994761ea9062fa96d34e94e19fbc4122521ac179274dfa3f5d'],
+    }),
+    ('viridis', '0.6.2', {
+        'checksums': ['69b58cd1d992710a08b0b227fd0a9590430eea3ed4858099412f910617e41311'],
+    }),
+    ('yaml', '2.2.1', {
+        'checksums': ['1115b7bc2a397fa724956eec916df5160c600c99a3be186d21558dd38d782783'],
+    }),
+    ('htmltools', '0.5.2', {
+        'checksums': ['7dc7d50436e5a82a5801f85bcd2f572a06a98b4027d71aa17b4854ec9b2767fb'],
+    }),
+    ('htmlwidgets', '1.5.4', {
+        'checksums': ['1a3fc60f40717de7f1716b754fd1c31a132e489a2560a278636ee78eba46ffc1'],
+    }),
+    ('knitr', '1.36', {
+        'checksums': ['6ecef5b428d135e95a05f24f9f194d0d828b1180c61be44ad89b6210e32b8e41'],
+    }),
+    ('htmlTable', '2.3.0', {
+        'checksums': ['070d9a0ef6311304f6739d81f7690d8f19899451524b376b403d6a40d477a577'],
+    }),
+    ('Hmisc', '4.6-0', {
+        'checksums': ['2c1ce906b2333c6dc946dc7f10b74cfa552bce2b12dbebf295d143163562a1ad'],
+    }),
+    ('fastcluster', '1.2.3', {
+        'checksums': ['1f229129e1cddc78c7bb5ecc90c4d28ed810ee68cf210004c7cdfa12cfaf2a01'],
+    }),
+    ('registry', '0.5-1', {
+        'checksums': ['dfea36edb0a703ec57e111016789b47a1ba21d9c8ff30672555c81327a3372cc'],
+    }),
+    ('bibtex', '0.4.2.3', {
+        'checksums': ['7bad194920b412781ac9754ad41058d52d3cd7186e1851c2bce3640490e9bc6d'],
+    }),
+    ('pkgmaker', '0.32.2', {
+        'checksums': ['ce45b22def771a9c90a414093823e6befe7e23489c500eeccee5154b44d3ef91'],
+    }),
+    ('rngtools', '1.5.2', {
+        'checksums': ['7f8c76ca4c7851b69a86e27be09b02ddc86357f0388659ef8787634682e8a74d'],
+    }),
+    ('doParallel', '1.0.16', {
+        'checksums': ['f1bb26f964f30d47ae4d6cf2b0a2ca0c2122d376424875e82d9abe9e7b054eb2'],
+    }),
+    ('gridBase', '0.4-7', {
+        'checksums': ['be8718d24cd10f6e323dce91b15fc40ed88bccaa26acf3192d5e38fe33e15f26'],
+    }),
+    ('irlba', '2.3.3', {
+        'checksums': ['6ee233697bcd579813bd0af5e1f4e6dd1eea971e8919c748408130d970fef5c0'],
+    }),
+    ('igraph', '1.2.7', {
+        'checksums': ['25c1a03273359e012e2625d0d8826264c805037f247785e0b432e02c2aae1be5'],
+    }),
+    ('GeneNet', '1.2.15', {
+        'checksums': ['555ac4e1d6c53c099b94b9298b6a8893a07797886a21ce3655a98fa9a1326a85'],
+    }),
+    ('ape', '5.5', {
+        'checksums': ['a3aa01c74b99eafec7d98284e05957b6487b6971ced93f26881f2479bcd5299a'],
+    }),
+    ('RJSONIO', '1.3-1.6', {
+        'checksums': ['82d1c9ea7758b2a64ad683f9c46223dcba9aa8146b43c1115bf9aa76a657a09f'],
+    }),
+    ('caTools', '1.18.2', {
+        'checksums': ['75d61115afec754b053ed1732cc034f2aeb27b13e6e1932aa0f26bf590cf0293'],
+    }),
+    ('gplots', '3.1.1', {
+        'checksums': ['f9ae19c2574b6d41adbeccaf7bc66cf56d7b2769004daba7e0038d5fbd821339'],
+    }),
+    ('ROCR', '1.0-11', {
+        'checksums': ['57385a773220a3aaef5b221a68b2d9c2a94794d4f9e9fc3c1eb9521767debb2a'],
+    }),
+    ('later', '1.3.0', {
+        'checksums': ['08f50882ca3cfd2bb68c83f1fcfbc8f696f5cfb5a42c1448c051540693789829'],
+    }),
+    ('promises', '1.2.0.1', {
+        'checksums': ['8d3a8217909e91f4c2a2eebba5ac8fc902a9ac1a9e9d8a30815c9dc0f162c4b7'],
+    }),
+    ('httpuv', '1.6.3', {
+        'checksums': ['bfe338c86cc09968c5ec2fd1023040db323d3c3aa413d8d3e5ad4b320bf00876'],
+    }),
+    ('rjson', '0.2.20', {
+        'checksums': ['3a287c1e5ee7c333ed8385913c0a307daf99335fbdf803e9dcca6e3d5adb3f6c'],
+    }),
+    ('sourcetools', '0.1.7', {
+        'checksums': ['47984406efb3b3face133979ccbae9fefb7360b9a6ca1a1c11473681418ed2ca'],
+    }),
+    ('xml2', '1.3.2', {
+        'checksums': ['df22f9e7e3189d8c9b8804eaf0105324fdac983cffe743552f6d76613600a4cf'],
+    }),
+    ('commonmark', '1.7', {
+        'checksums': ['d14a767a3ea9778d6165f44f980dd257423ca6043926e3cd8f664f7171f89108'],
+    }),
+    ('jquerylib', '0.1.4', {
+        'checksums': ['f0bcc11dcde3a6ff180277e45c24642d3da3c8690900e38f44495efbc9064411'],
+    }),
+    ('rappdirs', '0.3.3', {
+        'checksums': ['49959f65b45b0b189a2792d6c1339bef59674ecae92f8c2ed9f26ff9e488c184'],
+    }),
+    ('fs', '1.5.0', {
+        'checksums': ['36df1653571de3c628a4f769c4627f6ac53d0f9e4106d9d476afb22ae9603897'],
+    }),
+    ('sass', '0.4.0', {
+        'checksums': ['7d06ca15239142a49e88bb3be494515abdd8c75f00f3f1b0ee7bccb55019bc2b'],
+    }),
+    ('bslib', '0.3.1', {
+        'checksums': ['5f5cb56e5cab9039a24cd9d70d73b69c2cab5b2f5f37afc15f71dae0339d9849'],
+    }),
+    ('fontawesome', '0.2.2', {
+        'checksums': ['572db64d1b3c9be301935e0ca7baec69f3a6e0aa802e23f1f224b3724259df64'],
+    }),
+    ('shiny', '1.7.1', {
+        'checksums': ['c03b2056fb41430352c7c0e812bcc8632e6ec4caef077d2f7633512d91721d00'],
+    }),
+    ('seqinr', '4.2-8', {
+        'checksums': ['584b34e9dec0320cef02096eb356a0f6115bbd24356cf62e67356963e9d5e9f7'],
+    }),
+    ('LearnBayes', '2.15.1', {
+        'checksums': ['9b110858456523ca0b2a63f22013c4e1fbda6674b9d84dc1f4de8bffc5260532'],
+    }),
+    ('deldir', '1.0-6', {
+        'checksums': ['6df6d8325c607e0b7d63cbc53c29e774eff95ad4acf9c7ec8f70693b0505f8c5'],
+    }),
+    ('gmodels', '2.18.1', {
+        'checksums': ['626140a34eb8c53dd0a06511a76c71bc61c48777fa76fcc5e6934c9c276a1369'],
+    }),
+    ('expm', '0.999-6', {
+        'checksums': ['2c79912fd2e03fcf89c29f09555880934402fcb2359af8b4579d79b4f955addc'],
+    }),
+    ('terra', '1.4-11', {
+        'checksums': ['0a8fc0deffd4f2d0065ac6b70ae5cda079a38fe86e40861df94d01d01412fd21'],
+    }),
+    ('raster', '3.5-2', {
+        'checksums': ['99565167f3ef41ade08b8466a172fc471c73184815c9fb199f9555db63e03d72'],
+    }),
+    ('spData', '2.0.1', {
+        'checksums': ['c635a3e2e5123b4cdb2e6877b9b09e3d50169e1512a53b2ba2db7fbe63b990fc'],
+    }),
+    ('units', '0.7-2', {
+        'checksums': ['b90be023431100632b3081747af9e743e615452b4ad38810991f7b024b7040eb'],
+    }),
+    ('classInt', '0.4-3', {
+        'checksums': ['9ede7a2a7a6b6c114919a3315a884fb592e33b037a50a4fe45cbd4fe2fc434ac'],
+    }),
+    ('vegan', '2.5-7', {
+        'checksums': ['e63b586951ea7d8b0118811f329c700212892ec1db3b93951603ce1d68aa462a'],
+    }),
+    ('rncl', '0.8.4', {
+        'checksums': ['6b19d0dd9bb08ecf99766be5ad684bcd1894d1cd9291230bdd709dbd3396496b'],
+    }),
+    ('XML', '3.99-0.8', {
+        'checksums': ['081f691c2ee8ad39c7c95281e7d9153ec04cee79ca2d41f5d82c2ec2f1d36b50'],
+    }),
+    ('tinytex', '0.34', {
+        'checksums': ['1d059397b70579c325b64bfd548ef7b985a7558bd1e3d95716e0ed7a0dd8e69b'],
+    }),
+    ('rmarkdown', '2.11', {
+        'checksums': ['9371255300e7ea4cd936978ad2ca3d205d8605e09f4913cb0d4725005a7a9775'],
+    }),
+    ('reshape', '0.8.8', {
+        'checksums': ['4d5597fde8511e8fe4e4d1fd7adfc7ab37ff41ac68c76a746f7487d7b106d168'],
+    }),
+    ('triebeard', '0.3.0', {
+        'checksums': ['bf1dd6209cea1aab24e21a85375ca473ad11c2eff400d65c6202c0fb4ef91ec3'],
+    }),
+    ('urltools', '1.7.3', {
+        'checksums': ['6020355c1b16a9e3956674e5dea9ac5c035c8eb3eb6bbdd841a2b5528cafa313'],
+    }),
+    ('httpcode', '0.3.0', {
+        'checksums': ['593a030a4f94c3df8c15576837c17344701bac023ae108783d0f06c476062f76'],
+    }),
+    ('crul', '1.1.0', {
+        'checksums': ['f0b6cfd19f7470a8aacc7621530315f83796aa64e24a47b96365963e5f615ace'],
+    }),
+    ('bold', '1.2.0', {
+        'checksums': ['8f1597f04acbe6b090232929325734c802049d82649ae102b438e1fa3af5a464'],
+    }),
+    ('rredlist', '0.7.0', {
+        'checksums': ['d2e66b655c43565a4cc0984dc3fcc9732652cb9677baaa9bb2b82e9f9d65e7f0'],
+    }),
+    ('rentrez', '1.2.3', {
+        'checksums': ['fb256597ebe7780e38bef9c4c2626b3feacd60c7a5a29fc6a218cf0d8d132f74'],
+    }),
+    ('rotl', '3.0.11', {
+        'checksums': ['339bf0b7527449eb495673e406b76a0831aa529fe05952c3448b455cd2c91c2c'],
+    }),
+    ('solrium', '1.2.0', {
+        'checksums': ['7ec64199497cc69f542fded955b709fc548cf8e2734c9db0f4a99a0ea67ca49b'],
+    }),
+    ('ritis', '1.0.0', {
+        'checksums': ['327b221872408b1f0fe0cce953685535b66d2fa5d6cac628e1142a26e4856136'],
+    }),
+    ('worrms', '0.4.2', {
+        'checksums': ['1ab228ea762a431a5e3a565b589b804fcb2865ceaa2b1459bd2ab3ebe8f5ebbe'],
+    }),
+    ('natserv', '1.0.0', {
+        'checksums': ['30f90f938e963191ef19b1433db1e265f67d8efe29c92a1d3603c3dc9a03d5c8'],
+    }),
+    ('WikipediR', '1.5.0', {
+        'checksums': ['f8d0e6f04fb65f7ad9c1c068852a6a8b699ffe8d39edf1f3fa07d32d087e8ff0'],
+    }),
+    ('ratelimitr', '0.4.1', {
+        'checksums': ['2b21e4574521c5336feeb3041eaf096bde7857b140049cdeb6ec97dc652aa71b'],
+    }),
+    ('rex', '1.2.0', {
+        'checksums': ['06b491f1469078862e40543fd74e1d38b2e0fb61fdf01c8083add4b11ac2eb54'],
+    }),
+    ('WikidataQueryServiceR', '1.0.0', {
+        'checksums': ['0e14eec8471a72227f800b41b331cfc49a94b4d4f49e68936448ebbae0b281ae'],
+    }),
+    ('pbapply', '1.5-0', {
+        'checksums': ['effdfee286e5ba9534dc2ac3cee96590a37f5cd2af28c836d00c25ca9f070a55'],
+    }),
+    ('WikidataR', '2.3.1', {
+        'checksums': ['dd349d160c1c0bae9e3efa336efc622ea9dd481cc0a449ceab49852d220eb2da'],
+    }),
+    ('wikitaxa', '0.4.0', {
+        'checksums': ['ba872853af59fdc8f1121d6e205f15e5bf4f2ec5ad68cd5755a423fa783bf7fc'],
+    }),
+    ('phangorn', '2.7.1', {
+        'checksums': ['d8a9d67851f16c3947575eb3344b9ce7ef856354e691211ef23c92b7889e1398'],
+    }),
+    ('uuid', '1.0-2', {
+        'checksums': ['0bed1a3fe298123e818b631c1a2d8bcf5c6ab334f625a482197324a877a6387a'],
+    }),
+    ('conditionz', '0.1.0', {
+        'checksums': ['ccd81e4f2534d29cddf44cf697f76ff01417cbeb22001a93477edc61cdd35646'],
+    }),
+    ('taxize', '0.9.99', {
+        'checksums': ['1a5d2783a82db4b6dd13df3639c7cd07112c1d83ddaabc83706ff235d977681c'],
+    }),
+    ('RNeXML', '2.4.5', {
+        'checksums': ['2b667ecb6400e4c0c125ca73a98cde81330cde3a85b764261f77159e702754f3'],
+    }),
+    ('phylobase', '0.8.10', {
+        'checksums': ['5a44380ff49bab333a56f6f96157324ade8afb4af0730e013194c4badb0bf94b'],
+    }),
+    ('magick', '2.7.3', {
+        'checksums': ['83877b2e23ea43fbc1164de9c2422eafbe7858393ac384df5adf3a7eec122441'],
+    }),
+    ('animation', '2.7', {
+        'checksums': ['88418f1b04ec785963bad492f30eb48b05914e9e5d88c7eef705d949cbd7e469'],
+    }),
+    ('bigmemory.sri', '0.1.3', {
+        'checksums': ['55403252d8bae9627476d1f553236ea5dc7aa6e54da6980526a6cdc66924e155'],
+    }),
+    ('bigmemory', '4.5.36', {
+        'checksums': ['18c67fbe6344b2f8223456c4f19ceebcf6c1166255eab81311001fd67a45ef0e'],
+    }),
+    ('calibrate', '1.7.7', {
+        'checksums': ['713b09b415c954e1ef5216088acd40621b0546c45afbb8c2c6f118ecb5cd6fa6'],
+    }),
+    ('clusterGeneration', '1.3.7', {
+        'checksums': ['534f29d8f7ed11e6e9a496f15845b588ec7133f3da5e6def8140b88500e52d5c'],
+    }),
+    ('dismo', '1.3-5', {
+        'checksums': ['812e1932d42c0f40acf2ab5c5b2d068f93128caf648626e1d11baf1a09340ee7'],
+    }),
+    ('extrafontdb', '1.0', {
+        'checksums': ['faa1bafee5d4fbc24d03ed237f29f1179964ebac6e3a46ac25b0eceda020b684'],
+    }),
+    ('Rttf2pt1', '1.3.9', {
+        'checksums': ['8667e48ed639c80180b1c1b65eff6ca2031bc9633a4fe79b50772f92375e3e71'],
+    }),
+    ('extrafont', '0.17', {
+        'checksums': ['2f6d7d79a890424b56ddbdced361f8b9ddede5edd33e090b816b88a99315332d'],
+    }),
+    ('fields', '13.3', {
+        'checksums': ['c652838b1ae7eb368831522824bfbc1d1db7b9d1db5e9bb52b194098549944c3'],
+    }),
+    ('shapefiles', '0.7', {
+        'checksums': ['eeb18ea4165119519a978d4a2ba1ecbb47649deb96a7f617f5b3100d63b3f021'],
+    }),
+    ('fossil', '0.4.0', {
+        'checksums': ['37c082fa15ebae89db99d6071b2bb2cad6a97a0405e9b4ef77f62a8f6ad274c1'],
+    }),
+    ('phytools', '0.7-90', {
+        'checksums': ['48615a709760af5f298f0af6615d238c96cad7d26e997fb65467520aad37e0d1'],
+    }),
+    ('geiger', '2.0.7', {
+        'checksums': ['d200736c4ad7ed4bc55a13e7d0126ddc7fed88e245cd5706d4692aaa437e9596'],
+    }),
+    ('shape', '1.4.6', {
+        'checksums': ['b9103e5ed05c223c8147dbe3b87a0d73184697343634a353a2ae722f7ace0b7b'],
+    }),
+    ('glmnet', '4.1-2', {
+        'checksums': ['06ab2b58c0b431736605aee2d42e517e0e2640d16b5a6c7867a25f05dd44cdcd'],
+    }),
+    ('crosstalk', '1.1.1', {
+        'checksums': ['ed3234f7f000fb607cc42e005d68be1dd598d95fa687a3f6e6b17ba38e36ccd8'],
+    }),
+    ('miniUI', '0.1.1.1', {
+        'checksums': ['452b41133289f630d8026507263744e385908ca025e9a7976925c1539816b0c0'],
+    }),
+    ('webshot', '0.5.2', {
+        'checksums': ['f183dc970157075b51ac543550a7a48fa3428b9c6838abb72fe987c21982043f'],
+    }),
+    ('shinyjs', '2.0.0', {
+        'checksums': ['c2cdd9fab41f6b46bb41b288cd9b3fb3a7fe9627b664e3a58a0cb5dd4c19f8ff'],
+    }),
+    ('manipulateWidget', '0.11.1', {
+        'checksums': ['5b73728d7d6dcc32f32d861375074cd65112c03a01e4ee4fa94e21b063fdefb6'],
+    }),
+    ('rgl', '0.107.14', {
+        'checksums': ['67213c3215bcadb56e15922fbf0dc7f6a6642cc3d924363dcb1705291727b0fc'],
+    }),
+    ('Rtsne', '0.15', {
+        'checksums': ['56376e4f0a382fad3d3d40e2cb0562224be5265b827622bcd235e8fc63df276c'],
+    }),
+    ('labdsv', '2.0-1', {
+        'checksums': ['5a4d55e9be18222dc47e725008b450996448ab117d83e7caaa191c0f13fd3925'],
+    }),
+    ('stabs', '0.6-4', {
+        'checksums': ['f8507337789f668e421a6ee7b11dd5ea331bf8bff0f9702dd1b93f46c2f3c1d9'],
+    }),
+    ('modeltools', '0.2-23', {
+        'checksums': ['6b3e8d5af1a039db5c178498dbf354ed1c5627a8cea9229726644053443210ef'],
+    }),
+    ('strucchange', '1.5-2', {
+        'checksums': ['7d247c5ae6f5a63c80e478799d009c57fb8803943aa4286d05f71235cc1002f8'],
+    }),
+    ('TH.data', '1.1-0', {
+        'checksums': ['21b37e251da5635ae91668f64b4c6f6a7ccedbe1f01af769d30fb532af83113e'],
+    }),
+    ('multcomp', '1.4-17', {
+        'checksums': ['41509d8457cfad9ce579115e6e0ed1f7c0244455a8639cbd38a6d755d338fb0b'],
+    }),
+    ('libcoin', '1.0-9', {
+        'checksums': ['2d7dd0b7c6dfc20472430570419ea36a714da7bbafd336da1fb53c5c6463d9eb'],
+    }),
+    ('coin', '1.4-2', {
+        'checksums': ['7546d1f27a82d98b4b3e43e4659eba0f74a67d5919ce85d2fb360282ba3cfbb2'],
+    }),
+    ('party', '1.3-9', {
+        'checksums': ['29a1fefdb86369285ebf5d48ab51268a83e2011fb9d9f609a2250b5f0b169089'],
+    }),
+    ('inum', '1.0-4', {
+        'checksums': ['5febef69c43a4b95b376c1418550a949d988a5f26b1383ca01c9728a94fc13ce'],
+    }),
+    ('partykit', '1.2-15', {
+        'checksums': ['b2e9454b2f4b9a39c9581c5871462f00acef4eeee5696ce3e32cfa1468d1e3ac'],
+    }),
+    ('mboost', '2.9-5', {
+        'checksums': ['cf9b13e00efe0b25702cb33151e8c11eff2de07db805db217472e9d09a3be079'],
+    }),
+    ('msm', '1.6.9', {
+        'checksums': ['aefcd9bb40b0167311d088d6fe23fdf7aa35deaac0f8b47ef02377cff5577023'],
+    }),
+    ('nor1mix', '1.3-0', {
+        'checksums': ['9ce4ee92f889a4a4041b5ea1ff09396780785a9f12ac46f40647f74a37e327a0'],
+    }),
+    ('np', '0.60-11', {
+        'checksums': ['a3b31b8ad70c42826076786b2b1b63b79cdbadfa55fe126773bc357686fd33a9'],
+    }),
+    ('polynom', '1.4-0', {
+        'checksums': ['c5b788b26f7118a18d5d8e7ba93a0abf3efa6603fa48603c70ed63c038d3d4dd'],
+    }),
+    ('polspline', '1.1.19', {
+        'checksums': ['953e3c4d007c3ef86ac2af3c71b272a99e8e35b194bdd58575785558c6711f66'],
+    }),
+    ('rms', '6.2-0', {
+        'checksums': ['10d58cbfe39fb434223834e29e5248c9384cded23e6267cfc99367d0f5ee24b6'],
+    }),
+    ('RWekajars', '3.9.3-2', {
+        'checksums': ['16e6b019aab1646f89c5203f0d6fc1cb800129e5169b15aaef30fd6236f5da1a'],
+    }),
+    ('RWeka', '0.4-43', {
+        'checksums': ['8c227a5935cff180d03c30eb73bdd00b16737579c8b8503ec7fccc17e746179a'],
+    }),
+    ('slam', '0.1-48', {
+        'checksums': ['0a0b32d35fd6b8d1ac021b1358e73d32ab942d274a84fbba732d6c02efdcfade'],
+    }),
+    ('tm', '0.7-8', {
+        'checksums': ['b1eb1683d956db1a207b61cc086ae08b3ca7f46b6b8bc46d09ba5a4fafa66256'],
+    }),
+    ('leaps', '3.1', {
+        'checksums': ['3d7c3a102ce68433ecf167ece96a7ebb4207729e4defd0ac8fc00e7003f5c3b6'],
+    }),
+    ('cNORM', '2.1.0', {
+        'checksums': ['52d0f831c2bfac93999b004c6f9ef84fe8230dc954da7b3d10030640fb7e3106'],
+    }),
+    ('TraMineR', '2.2-2', {
+        'checksums': ['0c0823e2f591bb669f8f36dac22199c0d2e2dfb20fc89d62e4a44575d57397a9'],
+    }),
+    ('chemometrics', '1.4.2', {
+        'checksums': ['b705832fa167dc24b52b642f571ed1efd24c5f53ba60d02c7797986481b6186a'],
+    }),
+    ('FNN', '1.1.3', {
+        'checksums': ['de763a25c9cfbd19d144586b9ed158135ec49cf7b812938954be54eb2dc59432'],
+    }),
+    ('miscTools', '0.6-26', {
+        'checksums': ['be3c5a63ca12ce7ce4d43767a1815cd3dcf32664728ade251cfb03ea6f77fc9a'],
+    }),
+    ('maxLik', '1.5-2', {
+        'checksums': ['7cee05be0624b6a76911fa7b0d66f3e1b78460e0c55ed8bc904ce1e8af7bb15d'],
+    }),
+    ('gbRd', '0.4-11', {
+        'checksums': ['0251f6dd6ca987a74acc4765838b858f1edb08b71dbad9e563669b58783ea91b'],
+    }),
+    ('rbibutils', '2.2.4', {
+        'checksums': ['bb9e7bd0ca472f7851704bd9a52ef7eca7540db32523f1b1f7e3bf06268cde97'],
+    }),
+    ('Rdpack', '2.1.2', {
+        'checksums': ['714897ec115344d9a9d423519f4c289e71038f80abccced02a47cdc05d61a168'],
+    }),
+    ('dfidx', '0.0-4', {
+        'checksums': ['04255de9b002b2f89db04144edcd72e21804e0c129a3e5082b4a21630c850702'],
+    }),
+    ('mlogit', '1.1-1', {
+        'checksums': ['6f3ea97db410be929a3078422f3d354d2f17855a21bbdc7c2c09d901e233d143'],
+    }),
+    ('getopt', '1.20.3', {
+        'checksums': ['531f5fdfdcd6b96a73df2b39928418de342160ac1b0043861e9ea844f9fbf57f'],
+    }),
+    ('gsalib', '2.1', {
+        'checksums': ['e1b23b986c18b89a94c58d9db45e552d1bce484300461803740dacdf7c937fcc'],
+    }),
+    ('optparse', '1.7.1', {
+        'checksums': ['324e304c13efd565d766766193d4ccd75e2cd949dfcfb416afc3939489071fe7'],
+    }),
+    ('labelled', '2.9.0', {
+        'checksums': ['36ac0e169ee065a8bced9417efeb85d62e1504a590d4321667d8a6213285d639'],
+    }),
+    ('R.cache', '0.15.0', {
+        'checksums': ['adb4d3b08f7917e10fe6188c7b90a3318701a974c58eaa09943b929382bdf126'],
+    }),
+    ('styler', '1.6.2', {
+        'checksums': ['a62fcc76aac851069f33874f9eaabdd580973b619cfc625d6ec910476015f75c'],
+    }),
+    ('questionr', '0.7.5', {
+        'checksums': ['a1a25d8ab228a8d3bdb6c37d50db3964fe33a3fe1c46a95331b029261977d4a3'],
+    }),
+    ('klaR', '0.6-15', {
+        'checksums': ['5bfe5bc643f8a64b222317732c26e9f93be297cdc318a869f15cc9ab0d9e0fae'],
+    }),
+    ('neuRosim', '0.2-12', {
+        'checksums': ['f4f718c7bea2f4b61a914023015f4c71312f8a180124dcbc2327b71b7be256c3'],
+    }),
+    ('locfit', '1.5-9.4', {
+        'checksums': ['d9d3665c5f3d49f698fb4675daf40a0550601e86db3dc00f296413ceb1099ced'],
+    }),
+    ('GGally', '2.1.2', {
+        'checksums': ['30352f36bf061bc98bdd5fa373ea0f23d007040bd908c7c018c8e627e0fb28e5'],
+    }),
+    ('beanplot', '1.2', {
+        'checksums': ['49da299139a47171c5b4ccdea79ffbbc152894e05d552e676f135147c0c9b372'],
+    }),
+    ('clValid', '0.7', {
+        'checksums': ['037da469891462021eb177f9c9e18caefa8532f08c68fb576fae1668a1f451a1'],
+    }),
+    ('DiscriMiner', '0.1-29', {
+        'checksums': ['5aab7671086ef9940e030324651976456f0e84dab35edb7048693ade885228c6'],
+    }),
+    ('ellipse', '0.4.2', {
+        'checksums': ['1719ce9a00b9ac4d56dbf961803085b892d3359726fda3567bb989ddfed9a5f2'],
+    }),
+    ('pbkrtest', '0.5.1', {
+        'checksums': ['b2a3452003d93890f122423b3f2487dcb6925440f5b8a05578509e98b6aec7c5'],
+    }),
+    ('carData', '3.0-4', {
+        'checksums': ['cda6f5e3efc1d955a4a0625e9c33f90d49f5455840e88b3bd757129b86044724'],
+    }),
+    ('maptools', '1.1-2', {
+        'checksums': ['3995c96e8472cd6717fe3cbd3506358ff460b6c2cf92dbe4b00f75f507514439'],
+    }),
+    ('zip', '2.2.0', {
+        'checksums': ['9f95987c964039834f770ecda2d5f7e3d3a9de553c89db2a5926c4219bf4b9d8'],
+    }),
+    ('openxlsx', '4.2.4', {
+        'checksums': ['af571b3c60cea2a5975f6a394469f1c50266d4a5c5c91896b991b1b3ba8bc86e'],
+    }),
+    ('rematch', '1.0.1', {
+        'checksums': ['a409dec978cd02914cdddfedc974d9b45bd2975a124d8870d52cfd7d37d47578'],
+    }),
+    ('cellranger', '1.1.0', {
+        'checksums': ['5d38f288c752bbb9cea6ff830b8388bdd65a8571fd82d8d96064586bd588cf99'],
+    }),
+    ('readxl', '1.3.1', {
+        'checksums': ['24b441713e2f46a3e7c6813230ad6ea4d4ddf7e0816ad76614f33094fbaaaa96'],
+    }),
+    ('rio', '0.5.27', {
+        'checksums': ['e0eb616cdbba9f2d5c4489ae05336201d717ce65b0ea6854023054d1c2e3dd0a'],
+    }),
+    ('car', '3.0-11', {
+        'checksums': ['b32c927206f515631ff276dbb337b0f22e9b2d851f4abb1d2c272e534c19542c'],
+    }),
+    ('flashClust', '1.01-2', {
+        'checksums': ['48a7849bb86530465ff3fbfac1c273f0df4b846e67d5eee87187d250c8bf9450'],
+    }),
+    ('ggrepel', '0.9.1', {
+        'checksums': ['29fb916d4799ba6503a5dd019717ffdf154d2aaae9ff1736f03e2be24af6bdfc'],
+    }),
+    ('DT', '0.19', {
+        'checksums': ['baa6bdae215ab84a5dee9c0a6c55dd92135c795d13dfce3c3485519c6f0e3b13'],
+    }),
+    ('FactoMineR', '2.4', {
+        'checksums': ['b9e3adce9a66b4daccc85fa67cb0769d6be230beeb126921b386ccde5db2e851'],
+    }),
+    ('flexclust', '1.4-0', {
+        'checksums': ['82fe445075a795c724644864c7ee803c5dd332a89ea9e6ccf7cd1ae2d1ecfc74'],
+    }),
+    ('flexmix', '2.3-17', {
+        'checksums': ['36019b7833032409ac61720dd625fa5a581a1d8bcba9045b04979c90907b5649'],
+    }),
+    ('prabclus', '2.3-2', {
+        'checksums': ['f421bcbcb557281e0de4a06b15f9a496adb5c640e883c0f7bb12051efc69e441'],
+    }),
+    ('diptest', '0.76-0', {
+        'checksums': ['508a5ebb161519cd0fcd156dc047b51becb216d545d62c6522496463f94ec280'],
+    }),
+    ('trimcluster', '0.1-5', {
+        'checksums': ['9239f20e4a06ac2fa89e5d5d89b23a45c8c534a7264d89bede8a35d43dda518b'],
+    }),
+    ('fpc', '2.2-9', {
+        'checksums': ['29b0006e96c8645645d215d3378551bd6525aaf45abde2d9f12933cf6e75fa38'],
+    }),
+    ('BiasedUrn', '1.07', {
+        'checksums': ['2377c2e59d68e758a566452d7e07e88663ae61a182b9ee455d8b4269dda3228e'],
+    }),
+    ('TeachingDemos', '2.12', {
+        'checksums': ['3e75405ce1affa406d6df85e06f96381412bc7a2810b25d8c81bfe64c4698644'],
+    }),
+    ('kohonen', '3.0.10', {
+        'checksums': ['996956ea46a827c9f214e4f940a19304a0ff35bda707d4d7312f80d3479067b2'],
+    }),
+    ('base64', '2.0', {
+        'checksums': ['8e259c2b12446197d1152b83a81bab84ccb5a5b77021a9b5645dd4c63c804bd1'],
+    }),
+    ('doRNG', '1.8.2', {
+        'checksums': ['33e9d45b91b0fde2e35e911b9758d0c376049121a98a1e4c73a1edfcff11cec9'],
+    }),
+    ('nleqslv', '3.3.2', {
+        'checksums': ['f54956cf67f9970bb3c6803684c84a27ac78165055745e444efc45cfecb63fed'],
+    }),
+    ('Deriv', '4.1.3', {
+        'checksums': ['dbdbf5ed8babf706373ae33a937d013c46110a490aa821bcd158a70f761d0f8c'],
+    }),
+    ('RGCCA', '2.1.2', {
+        'checksums': ['20f341fca8f616c556699790814debdf2ac7aa4dd9ace2071100c66af1549d7d'],
+    }),
+    ('pheatmap', '1.0.12', {
+        'checksums': ['579d96ee0417203b85417780eca921969cda3acc210c859bf9dfeff11539b0c1'],
+    }),
+    ('pvclust', '2.2-0', {
+        'checksums': ['7892853bacd413b5a921006429641ad308a344ca171b3081c15e4c522a8b0201'],
+    }),
+    ('RCircos', '1.2.1', {
+        'checksums': ['3b9489ab05ea83ead99ca6e4a1e6830467a2064779834aff1317b42bd41bb8fd'],
+    }),
+    ('lambda.r', '1.2.4', {
+        'checksums': ['d252fee39065326c6d9f45ad798076522cec05e73b8905c1b30f95a61f7801d6'],
+    }),
+    ('futile.options', '1.0.1', {
+        'checksums': ['7a9cc974e09598077b242a1069f7fbf4fa7f85ffe25067f6c4c32314ef532570'],
+    }),
+    ('futile.logger', '1.4.3', {
+        'checksums': ['5e8b32d65f77a86d17d90fd8690fc085aa0612df8018e4d6d6c1a60fa65776e4'],
+    }),
+    ('VennDiagram', '1.7.0', {
+        'checksums': ['7537566ae94ea4bde97ca819ce5ec477943f33847a8eb0042d0859ce11ab35d1'],
+    }),
+    ('xlsxjars', '0.6.1', {
+        'checksums': ['37c1517f95f8bca6e3514429394d2457b9e62383305eba288416fb53ab2e6ae6'],
+    }),
+    ('xlsx', '0.6.5', {
+        'checksums': ['378c5ed475a3d7631ea1ea13e0a69d619c1a52260922abda42818752dbb32107'],
+    }),
+    ('uroot', '2.1-2', {
+        'checksums': ['bd7fd9e35928d09d0e8fae9e4359a2b2bca6e6865b278436319e2f91db0e4b37'],
+    }),
+    ('forecast', '8.15', {
+        'checksums': ['c73aabed083095b457ed875c240716686fbd41d1cbafa116b7b890a54b919174'],
+    }),
+    ('fma', '2.4', {
+        'checksums': ['69a94c3bd464176a80232d49fcd04d478d4dd59f9bf128d6a9f46e49612d27f4'],
+    }),
+    ('expsmooth', '2.3', {
+        'checksums': ['ac7da36347f983d6ec71715daefd2797fe2fc505c019f4965cff9f77ce79982a'],
+    }),
+    ('fpp', '0.5', {
+        'checksums': ['9c87dd8591b8a87327cae7a03fd362a5492495a96609e5845ccbeefb96e916cb'],
+    }),
+    ('tensor', '1.5', {
+        'checksums': ['e1dec23e3913a82e2c79e76313911db9050fb82711a0da227f94fc6df2d3aea6'],
+    }),
+    ('polyclip', '1.10-0', {
+        'checksums': ['74dabc0dfe5a527114f0bb8f3d22f5d1ae694e6ea9345912909bae885525d34b'],
+    }),
+    ('goftest', '1.2-3', {
+        'checksums': ['3a5f74b6ae7ece5b294781ae57782abe12375d61789c55ff5e92e4aacf347f19'],
+    }),
+    ('spatstat.utils', '2.2-0', {
+        'checksums': ['5ad87e524285621dc4ef75c941eba933d980125293ee8f2bef5b7db02f63d7ab'],
+    }),
+    ('spatstat.data', '2.1-0', {
+        'checksums': ['1b9840ad0ec7eddfa98a01e8b8a5291e5cb447c3082aa7d7b4df762577f95533'],
+    }),
+    ('spatstat.geom', '2.3-0', {
+        'checksums': ['7b1746a44509a6d518799332477fffa3474217c6cb3c6b92a325525b48fce9c7'],
+    }),
+    ('spatstat.sparse', '2.0-0', {
+        'checksums': ['27fbce64e21f095a5e9ac54c86f91c9f4b45eac3c2358580e04423b4beba19c7'],
+    }),
+    ('spatstat.core', '2.3-0', {
+        'checksums': ['5795ec6db2961dce740c7cd39a9c1b855d92a4af351a794a9bfd634a3f1526c9'],
+    }),
+    ('spatstat.linnet', '2.3-0', {
+        'checksums': ['f0c089c41db8fe83d09ecb396ce8952a593c265411fb997847201d9784f9a2f9'],
+    }),
+    ('spatstat', '2.2-0', {
+        'checksums': ['8f0f90e8d5af1e2e97ef5f01e595511916290d554fc1ae3ad7b217605bd4e353'],
+    }),
+    ('pracma', '2.3.3', {
+        'checksums': ['cf1f8d7724a385d9a2e1a5496d9ba0e9908940b85669fb2c506b9059722cb93c'],
+    }),
+    ('RCurl', '1.98-1.5', {
+        'checksums': ['73187c9a039188ffdc255fb7fa53811a6abfb31e6375a51eae8c763b37dd698d'],
+    }),
+    ('bio3d', '2.4-2', {
+        'checksums': ['91415766cda0f96557e6bc568dbce8d44254a9460f2e2d0beed0ce14ffad6ccb'],
+    }),
+    ('AUC', '0.3.0', {
+        'checksums': ['e705f2c63d336249d19187f3401120d738d42d323fce905f3e157c2c56643766'],
+    }),
+    ('interpretR', '0.2.4', {
+        'checksums': ['4c08a6dffd6fd5764f27812f3a085c53e6a21d59ae82d903c9c0da93fd1dd059'],
+    }),
+    ('cvAUC', '1.1.0', {
+        'checksums': ['c4d8ed53b93869650aa2f666cf6d1076980cbfea7fa41f0b8227595be849738d'],
+    }),
+    ('SuperLearner', '2.0-28', {
+        'checksums': ['5f42233abd48f1740c33aae1ec4ad8e9952fddb5df1ee49ff2d43d5d89f05601'],
+    }),
+    ('mediation', '4.5.0', {
+        'checksums': ['210206618787c395a67689be268283df044deec7199d9860ed95218ef1e60845'],
+    }),
+    ('CVST', '0.2-2', {
+        'checksums': ['854b8c983427ecf9f2f7798c4fd1c1d06762b5b0bcb1045502baadece6f78316'],
+    }),
+    ('DRR', '0.0.4', {
+        'checksums': ['93e365a4907e301ae01f7d943e6bdcda71ef23c51a4759ba3c94bcf842d4e0f8'],
+    }),
+    ('dimRed', '0.2.3', {
+        'checksums': ['e6e56e3f6999ebdc326e64ead5269f3aaf61dd587beefafb7536ac3890370d84'],
+    }),
+    ('ddalpha', '1.3.11', {
+        'checksums': ['c30b4a3a9549cb4dc0a8e51e06f5b6e4c457c5326acc8f4680968c920f59b6e9'],
+    }),
+    ('RcppRoll', '0.3.0', {
+        'checksums': ['cbff2096443a8a38a6f1dabf8c90b9e14a43d2196b412b5bfe5390393f743f6b'],
+    }),
+    ('adabag', '4.2', {
+        'checksums': ['47019eb8cefc8372996fbb2642f64d4a91d7cedc192690a8d8be6e7e03cd3c81'],
+    }),
+    ('parallelMap', '1.5.1', {
+        'checksums': ['c108a634a335ed47b0018f532a52b032487e239c5061f939ba32355dfefde7e1'],
+    }),
+    ('ParamHelpers', '1.14', {
+        'checksums': ['b17652d0a69de3241a69f20be4ad1bfe02c413328a17f3c1ac7b73886a6ba2eb'],
+    }),
+    ('ggvis', '0.4.7', {
+        'checksums': ['9e6b067e11d497c796d42156570e2481afb554c5db265f42afbb74d2ae0865e3'],
+    }),
+    ('mlr', '2.19.0', {
+        'checksums': ['1149c9b453896481c85906045aa82d511d96979ddecbe5a3faf04f9f4a5e6113'],
+    }),
+    ('unbalanced', '2.0', {
+        'checksums': ['9be32b1ce9d972f1abfff2fbe18f5bb5ba9c3f4fb1282063dc410b82ad4d1ea2'],
+    }),
+    ('RSNNS', '0.4-14', {
+        'checksums': ['7f6262cb2b49b5d5979ccce9ded9cbb2c0b348fd7c9eabc1ea1d31c51a102c20'],
+    }),
+    ('abc.data', '1.0', {
+        'checksums': ['b242f43c3d05de2e8962d25181c6b1bb6ca1852d4838868ae6241ca890b161af'],
+    }),
+    ('abc', '2.1', {
+        'checksums': ['0bd2dcd4ee1915448d325fb5e66bee68e0497cbd91ef67a11b400b2fbe52ff59'],
+    }),
+    ('lhs', '1.1.3', {
+        'checksums': ['e43b8d48db1cf26013697e2a798ed1d31d1ee1790f2ebfecb280176c0e0c06d1'],
+    }),
+    ('tensorA', '0.36.2', {
+        'checksums': ['8e8947566bd3b65a54de4269df1abaa3d49cf5bfd2a963c3274a524c8a819ca7'],
+    }),
+    ('EasyABC', '1.5', {
+        'checksums': ['1dd7b1383a7c891cafb34d9cec65d92f1511a336cff1b219e63c0aa791371b9f'],
+    }),
+    ('whisker', '0.4', {
+        'checksums': ['7a86595be4f1029ec5d7152472d11b16175737e2777134e296ae97341bf8fba8'],
+    }),
+    ('roxygen2', '7.1.2', {
+        'checksums': ['b3693d1eb57bb1c27134447ea7f64c353c085dd2237af7cfacc75fca3d2fc5fd'],
+    }),
+    ('git2r', '0.28.0', {
+        'checksums': ['ce6d148d21d2c87757e98ef4474b2d09faded9b9b866f046bd26d4ca925e55f2'],
+    }),
+    ('rversions', '2.1.1', {
+        'checksums': ['79aaacf5a1258d91ac0ddedf3c8c16a2d10d39010993dcc7b0a2638afee27cb1'],
+    }),
+    ('xopen', '1.0.0', {
+        'checksums': ['e207603844d69c226142be95281ba2f4a056b9d8cbfae7791ba60535637b3bef'],
+    }),
+    ('sessioninfo', '1.2.0', {
+        'checksums': ['adebf738ad3d3af9e018302d949994240311ef06c0a77c645b2f761c1a8c07df'],
+    }),
+    ('rcmdcheck', '1.4.0', {
+        'checksums': ['bbd4ef7d514b8c2076196a7c4a6041d34623d55fbe73f2771758ce61fd32c9d0'],
+    }),
+    ('remotes', '2.4.1', {
+        'checksums': ['d5d777b2e10d70fd0670166d539eab88ec4f7fe030f54ec5cd2703f548473276'],
+    }),
+    ('clisymbols', '1.2.0', {
+        'checksums': ['0649f2ce39541820daee3ed408d765eddf83db5db639b493561f4e5fbf88efe0'],
+    }),
+    ('ini', '0.3.1', {
+        'checksums': ['7b191a54019c8c52d6c2211c14878c95564154ec4865f57007953742868cd813'],
+    }),
+    ('gitcreds', '0.1.1', {
+        'checksums': ['b14aaf4e910a9d2d6c65c93e645f0b0159c00898e669f917f83c03dfedb1dfea'],
+    }),
+    ('gh', '1.3.0', {
+        'checksums': ['a44039054e8ca56496f2d9c7a10cdadf4a7383bc91086e768ba7e7f1fbcaed1c'],
+    }),
+    ('credentials', '1.3.1', {
+        'checksums': ['8795a73a65d1ce2e9f0be66546e85231c846ba6445a11948b9816fbee20a7a60'],
+    }),
+    ('gert', '1.4.1', {
+        'checksums': ['623b58f12c5530b101e91a352269fe011814b074cf7a7ed0b3cd4506390a63f8'],
+    }),
+    ('usethis', '2.1.3', {
+        'checksums': ['2db075980247d854110de60e7afe6f6e0b654a3ba49d0699ff40dd516e8e9bbf'],
+    }),
+    ('covr', '3.5.1', {
+        'checksums': ['a54cfc3623ea56084158ac5d7fe33f216f45191f6dcddab9c9ed4ec1d9d8ac6c'],
+    }),
+    ('devtools', '2.4.2', {
+        'checksums': ['71f0a55054d293fb553702b21b91941bc5c83a933610fad6f9662bf0a6178f05'],
+    }),
+    ('Rook', '1.1-1', {
+        'checksums': ['00f4ecfa4c5c57018acbb749080c07154549a6ecaa8d4130dd9de79427504903'],
+    }),
+    ('Cairo', '1.5-12.2', {
+        'checksums': ['dd524105c83b82b5c3b3ee2583ef90d4cafa54b0c29817dac48b425b79f90f92'],
+    }),
+    ('RMTstat', '0.3', {
+        'checksums': ['81eb4c5434d04cb66c749a434c33ceb1c07d92ba79765d4e9233c13a092ec2da'],
+    }),
+    ('Lmoments', '1.3-1', {
+        'checksums': ['7c9d489a08f93fa5877e2f233ab9732e0d1b2761596b3f6ac91f2295e41a865d'],
+    }),
+    ('distillery', '1.2-1', {
+        'checksums': ['4b88f0b34e472b9134ad403fb32283424f1883a5943e52c55f1fe05995efb5fa'],
+    }),
+    ('extRemes', '2.1-1', {
+        'checksums': ['5a1927bb21f178ec5a3e3f862d792e690e45c16c88190e64e83aa1fb9e3ffa02'],
+    }),
+    ('tkrplot', '0.0-26', {
+        'checksums': ['dd66264c2553f6927aff297c6b1c3b61867d6c63aec080f40a1e9d53cfc9d120'],
+    }),
+    ('misc3d', '0.9-1', {
+        'checksums': ['a07bbb0de153e806cd79675ed478d2d9221cff825654f59a71a9cf61f4293d65'],
+    }),
+    ('multicool', '0.1-12', {
+        'checksums': ['487d28d9c3c606be0cf56e2d8f8b0d79fb71949c68886ea9251fbb1c01664a36'],
+    }),
+    ('plot3D', '1.4', {
+        'checksums': ['d04a45197646fb36bc38870c1c2351cb56b912bd772b1ebfa25eaeef35fda9c0'],
+    }),
+    ('plot3Drgl', '1.0.2', {
+        'checksums': ['aa874891446a395f01791d80a5a0f1f9a1c2c41f029de3a8d5af9aa47f46a496'],
+    }),
+    ('OceanView', '1.0.6', {
+        'checksums': ['2c5165975d6c49fdc83a892cb0406584928dd44000c9774fffc00fbd2fec86f3'],
+    }),
+    ('ks', '1.13.2', {
+        'checksums': ['7c9e4e178adcecb0817213c0210b82d91647f4acf5c4d4056d46d286a5bff609'],
+    }),
+    ('logcondens', '2.1.6', {
+        'checksums': ['785bbda00b9a25e56440e11356ac219cfbf0fdf8b08c7b0728e53a9febe7a365'],
+    }),
+    ('Iso', '0.0-18.1', {
+        'checksums': ['2fa5f78a7603cbae94a5e38e791938596a053d48c609a7c120a19cbb7d93c66f'],
+    }),
+    ('penalized', '0.9-51', {
+        'checksums': ['eaa80dca99981fb9eb576261f30046cfe492d014cc2bf286c447b03a92e299fd'],
+    }),
+    ('clusterRepro', '0.9', {
+        'checksums': ['940d84529ff429b315cf4ad25700f93e1156ccacee7b6c38e4bdfbe2d4c6f868'],
+    }),
+    ('data.tree', '1.0.0', {
+        'checksums': ['40674c90a5bd00f5185db9adbd221c6f1114043e69095249f5fa8b3044af3f5e'],
+    }),
+    ('influenceR', '0.1.0.1', {
+        'checksums': ['63c46f1175fced33fb1b78d4d56e37fbee09b408945b0106dac36e3344cd4766'],
+    }),
+    ('visNetwork', '2.1.0', {
+        'checksums': ['a2b91e7fbbd9d08a9929a5b2c891d9c0bca5977ad772fa37510d96656af1152f'],
+    }),
+    ('downloader', '0.4', {
+        'checksums': ['1890e75b028775154023f2135cafb3e3eed0fe908138ab4f7eff1fc1b47dafab'],
+    }),
+    ('DiagrammeR', '1.0.6.1', {
+        'checksums': ['be4e4c520a3692902ce405e8225aef9f3d5f0cd11fcde614f6541e981b63673d'],
+    }),
+    ('randomForestSRC', '2.13.0', {
+        'checksums': ['beb981cae3a8c7232a2ca67f0a7bf3293eb44d5f1ac14913632ca8f8d4728abd'],
+    }),
+    ('sm', '2.2-5.7', {
+        'checksums': ['2607a2cafc68d7e99005daf99e36f4a66eaf569ebb6b7500e962642cf58be80f'],
+    }),
+    ('pbivnorm', '0.6.0', {
+        'checksums': ['07c37d507cb8f8d2d9ae51a9a6d44dfbebd8a53e93c242c4378eaddfb1cc5f16'],
+    }),
+    ('lavaan', '0.6-9', {
+        'checksums': ['d404c4eb40686534f9c05f24f908cd954041f66d1072caea4a3adfa83a5f108a'],
+    }),
+    ('matrixcalc', '1.0-5', {
+        'checksums': ['5906e1ef06dbc18efc7a4b370adc180ef8941b5438119703bd981d1c76a06fca'],
+    }),
+    ('arm', '1.12-2', {
+        'checksums': ['816ba1c31eec00feef472c57e280488d3d233b592f6f0a1a30e4abb903cb4f5d'],
+    }),
+    ('mi', '1.0', {
+        'checksums': ['34f44353101e8c3cb6bf59c5f4ff5b2391d884dcbb9d23066a11ee756b9987c0'],
+    }),
+    ('servr', '0.23', {
+        'checksums': ['4492d1dabc8f62cf7f7a53c97413a664823a3916dcaf99a7b04bcb279f7b2eb8'],
+    }),
+    ('rgexf', '0.16.2', {
+        'checksums': ['6ee052b0de99d0c7492366b991d345a51b3d0cc890d10a68b8670e1bd4fc8201'],
+    }),
+    ('sem', '3.1-13', {
+        'checksums': ['07749f710ad800f43cacdff8f1aa4f20105a619c72be4465f29860c381242f65'],
+    }),
+    ('statnet.common', '4.5.0', {
+        'checksums': ['3cdb23db86f3080462f15e29bcf3e941590bc17ea719993b301199b22d6f882f'],
+    }),
+    ('network', '1.17.1', {
+        'checksums': ['fc3c3a0014f8895a11c33994c9b44c6ef6cc49c7d026cd41ae6bba5ef63005a7'],
+    }),
+    ('rle', '0.9.2', {
+        'checksums': ['803cbe310af6e882e27be61d37d660dbe5910ac1ee1eff61a480bcf724a04f69'],
+    }),
+    ('sna', '2.6', {
+        'checksums': ['3a016550d9f424a0613c3f5b0b680dbd3a1f20a343173d39a96034340ad9202a'],
+    }),
+    ('glasso', '1.11', {
+        'checksums': ['4c37844b26f55985184a734e16b8fe880b192e3d2763614b0ab3f99b4530e30a'],
+    }),
+    ('huge', '1.3.5', {
+        'checksums': ['9240866e2f773cd0ac8a02514871149d2babaa162a49e151eab9591ad42984ea'],
+    }),
+    ('d3Network', '0.5.2.1', {
+        'checksums': ['5c798dc0c87c6d574abb7c1f1903346e6b0fec8adfd1df7aef5e4f9e7e3a09be'],
+    }),
+    ('BDgraph', '2.64', {
+        'checksums': ['243f3af3724552049f8f4f55dd425e3313adab95e1128ae4d6551d96005fdf5e'],
+    }),
+    ('graphlayouts', '0.7.1', {
+        'checksums': ['380f8ccb0b08735694e83f661fd56a0d592a78448ae91b89c290ba8582d66717'],
+    }),
+    ('tweenr', '1.0.2', {
+        'checksums': ['1805f575da6705ca4e5ec1c4605222fc826ba806d9ff9af41770294fe08ff69f'],
+    }),
+    ('ggforce', '0.3.3', {
+        'checksums': ['2a283bb409da6b96929863a926b153bcc59b2c6f00551805db1d1d43e5929f2f'],
+    }),
+    ('tidygraph', '1.2.0', {
+        'checksums': ['057d6c42fc0144109f3ace7f5058cca7b2fe493c761daa991448b23f86b6129f'],
+    }),
+    ('ggraph', '2.0.5', {
+        'checksums': ['e36ad49dba92ee8652e18b1fb197be0ceb9f0a2f8faee2194453a62578449654'],
+    }),
+    ('qgraph', '1.9', {
+        'checksums': ['e1d7489c4db47878dccd34ded7e8173d58a190ad453d2e6e89f33549ccfd10aa'],
+    }),
+    ('HWxtest', '1.1.9', {
+        'patches': ['HWxtest-1.1.9_add-fcommon.patch'],
+        'checksums': [
+            'a37309bed4a99212ca104561239d834088217e6c5e5e136ff022544c706f25e6',  # HWxtest_1.1.9.tar.gz
+            '4ce08c35035dbcc4edf092cdb405ae32c21c05b3786c15c0aa4bfe13bd81f451',  # HWxtest-1.1.9_add-fcommon.patch
+        ],
+    }),
+    ('diveRsity', '1.9.90', {
+        'checksums': ['b8f49cdbfbd82805206ad293fcb2dad65b962fb5523059a3e3aecaedf5c0ee86'],
+    }),
+    ('doSNOW', '1.0.19', {
+        'checksums': ['4cd2d080628482f4c6ecab593313d7e42516f5ff13fbf9f90e461fcad0580738'],
+    }),
+    ('geepack', '1.3-2', {
+        'checksums': ['99b53e40f7e5fda7422b143e6fee16513e2f880cb04a97cd403e98c4760670a6'],
+    }),
+    ('biom', '0.3.12', {
+        'checksums': ['4ad17f7811c7346dc4923bd6596a007c177eebb1944a9f46e5674afcc5fdd5a1'],
+    }),
+    ('pim', '2.0.2', {
+        'checksums': ['1195dbdbd67348dfef4b6fc34fcec643da685ebe58d34bbe049ab121aca9944f'],
+    }),
+    ('minpack.lm', '1.2-1', {
+        'checksums': ['14cb7dba3ef2b46da0479b46d46c76198e129a31f6157cd8b37f178adb15d5a3'],
+    }),
+    ('rootSolve', '1.8.2.3', {
+        'checksums': ['b5b3d1641642a3fd1279dbd1245f968d2331ac9588d77f872b113f7dc4594ba0'],
+    }),
+    ('diagram', '1.6.5', {
+        'checksums': ['e9c03e7712e0282c5d9f2b760bafe2aac9e99a9723578d9e6369d60301f574e4'],
+    }),
+    ('FME', '1.3.6.2', {
+        'checksums': ['65a200f8171e27f0a3d7ffce3e49b01561f219a11f3cb515ff613a45927ff618'],
+    }),
+    ('bmp', '0.3', {
+        'checksums': ['bdf790249b932e80bc3a188a288fef079d218856cf64ffb88428d915423ea649'],
+    }),
+    ('tiff', '0.1-8', {
+        'checksums': ['4b7482f70d8ecef9596b766ef1c64102c8b09208cb769c39d9e4db81cb3ba1a2'],
+    }),
+    ('readbitmap', '0.1.5', {
+        'checksums': ['737d7d585eb33de2c200da64d16781e3c9522400fe2af352e1460c6a402a0291'],
+    }),
+    ('imager', '0.42.10', {
+        'checksums': ['01939eb03ad2e1369a4240a128c3b246a4c56f572f1ea4967f1acdc555adaeee'],
+    }),
+    ('signal', '0.7-7', {
+        'checksums': ['67a015c46d67de7548c3adb83a1b22524de75501a861d91668c3c2ea761a4e61'],
+    }),
+    ('tuneR', '1.3.3.1', {
+        'checksums': ['cdcbf04ab5b547002ee5b1d3bc46145882c5a551f164cac43df71596f1edd18a'],
+    }),
+    ('pastecs', '1.3.21', {
+        'checksums': ['8c1ef2affe88627f0b23295aa5edb758b8fd6089ef09f60f37c46445128b8d7c'],
+    }),
+    ('audio', '0.1-8', {
+        'checksums': ['1a1c78bca63ed1fb5e30e00c593b67e1230b408e6a77c67082b41373d79b5bb4'],
+    }),
+    ('fftw', '1.0-6', {
+        'checksums': ['397ef5ec354b919884f74fba4202bfc13ad11a70b16285c41677aad1d3b170ce'],
+    }),
+    ('seewave', '2.1.8', {
+        'checksums': ['10e6487325ccd1c3cd64617182733f1472f3170974b32bb61a6b12ba7ddeeceb'],
+    }),
+    ('gsw', '1.0-6', {
+        'checksums': ['147ce73da75777799af9cb712862ef25b52fcae146a64ce0a525460ddfea1deb'],
+    }),
+    ('wk', '0.5.0', {
+        'checksums': ['71d500e0beaeed40501702adf214054d30278acb3171af6db4ae8dcdf5e7423a'],
+    }),
+    ('s2', '1.0.7', {
+        'checksums': ['2010c1c6ae29938ec9cd153a8b2c06a333ea4d647932369b2fc7d0c68d6d9e3f'],
+    }),
+    ('sf', '1.0-3', {
+        'checksums': ['2ee3ece4e5056fe267d76a785912a2285ddfc235b1be67b4c21b74dc39a831f8'],
+    }),
+    ('oce', '1.4-0', {
+        'checksums': ['3b341448001164dc62b54a26c8f86adf50e68705ddc47615b290b950da734408'],
+    }),
+    ('ineq', '0.2-13', {
+        'checksums': ['e0876403f59a3dfc2ea7ffc0d965416e1ecfdecf154e5856e5f54800b3efda25'],
+    }),
+    ('soundecology', '1.3.3', {
+        'checksums': ['276164d5eb92c78726c647be16232d2443acbf7061371ddde2672b4fdb7a069a'],
+    }),
+    ('memuse', '4.2-1', {
+        'checksums': ['f5e9dbaad4efbbfe219a93f446e318a00cad5b294bfc60ca2146eca894b47cf3'],
+    }),
+    ('pinfsc50', '1.2.0', {
+        'checksums': ['ed1fe214b9261feef8abfbf724c2bd9070d68e99a6ea95208aff2c57bbef8794'],
+    }),
+    ('vcfR', '1.12.0', {
+        'checksums': ['dd87ff010365de363864a44ca49887c0fdad0dd18d0d9c66e44e39c2d4581d52'],
+    }),
+    ('glmmML', '1.1.1', {
+        'checksums': ['255fe2640933d83ef7ea5813ba8006038c18195147d1f34f47a759210a674dd4'],
+    }),
+    ('cowplot', '1.1.1', {
+        'checksums': ['c7dce625b456dffc59ba100c816e16226048d12fdd29a7335dc1f6f6e12eed48'],
+    }),
+    ('tsne', '0.1-3', {
+        'checksums': ['66fdf5d73e69594af529a9c4f261d972872b9b7bffd19f85c1adcd66afd80c69'],
+    }),
+    ('sn', '2.0.0', {
+        'checksums': ['abd6ccdb3719b482db43ff2d5b12f2efcb8244792ec08e1176c5eb98fcc7886a'],
+    }),
+    ('tclust', '1.4-2', {
+        'checksums': ['95dcd07dbd16383f07f5cea8561e7f3bf314e4a7483879841103b149fc8c65d9'],
+    }),
+    ('ranger', '0.13.1', {
+        'checksums': ['60934f0accc21edeefddbb4ddebfdd7cd10a3d3e90b31aa2e6e4b7f50d632d0a'],
+    }),
+    ('hexbin', '1.28.2', {
+        'checksums': ['6241f8d3a6c6be2c1c693c3ddb99554bc103e3c6cf602d0c2787c0ce6fd1702d'],
+    }),
+    ('lobstr', '1.1.1', {
+        'checksums': ['b8c9ce00095bd4f304b4883ef71da24572022f0632a18c3e1ba317814e70716e'],
+    }),
+    ('pryr', '0.1.5', {
+        'checksums': ['7b1653ec51850f4633cee8e2eb7d0b2724fb587b801539488b426cf88f0f770b'],
+    }),
+    ('moments', '0.14', {
+        'checksums': ['2a3b81e60dafdd092d2bdd3513d7038855ca7d113dc71df1229f7518382a3e39'],
+    }),
+    ('laeken', '0.5.2', {
+        'checksums': ['22790f7157f23eb0b7b0b89e2ea53478fb3c0d15b5be8ad11525d3e6d5626cdc'],
+    }),
+    ('VIM', '6.1.1', {
+        'checksums': ['7581adca64cf20b93d5a111da83f663215b4529868b065b3463c4238bca97739'],
+    }),
+    ('smoother', '1.1', {
+        'checksums': ['91b55b82f805cfa1deedacc0a4e844a2132aa59df593f3b05676954cf70a195b'],
+    }),
+    ('dynamicTreeCut', '1.63-1', {
+        'checksums': ['831307f64eddd68dcf01bbe2963be99e5cde65a636a13ce9de229777285e4db9'],
+    }),
+    ('beeswarm', '0.4.0', {
+        'checksums': ['51f4339bf4080a2be84bb49a844c636625657fbed994abeaa42aead916c3d504'],
+    }),
+    ('vipor', '0.4.5', {
+        'checksums': ['7d19251ac37639d6a0fed2d30f1af4e578785677df5e53dcdb2a22771a604f84'],
+    }),
+    ('ggbeeswarm', '0.6.0', {
+        'checksums': ['bbac8552f67ff1945180fbcda83f7f1c47908f27ba4e84921a39c45d6e123333'],
+    }),
+    ('shinydashboard', '0.7.2', {
+        'checksums': ['a56ee48572649830cd8d82f1caa2099411461e19e19223cbad36a375299f3843'],
+    }),
+    ('rrcov', '1.6-0', {
+        'checksums': ['795f3a49b3e17c9c6e0fdd865e81a0402cefda970032c8299bcf2056ca7ec944'],
+    }),
+    ('WriteXLS', '6.3.0', {
+        'checksums': ['0b1d987abe4b08f6a32003b77d1cfc2eefdc5a478382e77ca0da98bccf6e526b'],
+    }),
+    ('bst', '0.3-23', {
+        'checksums': ['70957f1db8800bf0d628a9e6f72b7273329786dd119427790b326844591aa0f3'],
+    }),
+    ('pamr', '1.56.1', {
+        'checksums': ['d0e527f2336ee4beee91eefb2a8f0dfa96413d9b5a5841d6fc7ff821e67c9779'],
+    }),
+    ('WeightSVM', '1.7-9', {
+        'checksums': ['983733b618631d9ad754fb12f5e576912aff1f529cafdee4fddfd38d81ccc710'],
+    }),
+    ('mpath', '0.4-2.19', {
+        'checksums': ['fa0d92984910b8f556677850e3d899bc675724f0e2a3a73629d2700040335afe'],
+    }),
+    ('timereg', '2.0.1', {
+        'checksums': ['38429ae21d9d090ed968d2e0c06cd0310cc304e974c353a97cde3d2e49f138d7'],
+    }),
+    ('peperr', '1.3', {
+        'checksums': ['64d30b0ec09bf9b8f7b6edce67dd0f9e0e3dbe665fec8f5411f74142e53e9f5d'],
+    }),
+    ('heatmap3', '1.1.9', {
+        'checksums': ['594c33947b2be2cc8a592075f41a0df2398c892add7d63a15c613a5eeb8fdb69'],
+    }),
+    ('GlobalOptions', '0.1.2', {
+        'checksums': ['47890699668cfa9900a829c51f8a32e02a7a7764ad07cfac972aad66f839753e'],
+    }),
+    ('circlize', '0.4.13', {
+        'checksums': ['6cbadbf8e8b1abbd71a79080677d2b95f2bdd18f2e4d707c32d5c2ff26c5369b'],
+    }),
+    ('GetoptLong', '1.0.5', {
+        'checksums': ['8c237986ed3dfb72d956ad865ef7768644eebf144675ad66140acfd1aca9d701'],
+    }),
+    ('dendextend', '1.15.2', {
+        'checksums': ['4ba3885b66694589d455ffef31c218fe653fa25aff3efb7e8db6c25008d2921b'],
+    }),
+    ('RInside', '0.2.16', {
+        'checksums': ['7ae4ade128ea05f37068d59e610822ff0b277f9d39d8900f7eb31759ad5a2a0e'],
+    }),
+    ('limSolve', '1.5.6', {
+        'checksums': ['b97ea9930383634c8112cdbc42f71c4e93fe0e7bfaa8f401921835cb44cb49a0'],
+    }),
+    ('dbplyr', '2.1.1', {
+        'checksums': ['aba4cf47b85ab240fd3ec4cd8d512f6e1958201e151577c1a2ebc3d6ebc5bc08'],
+    }),
+    ('modelr', '0.1.8', {
+        'checksums': ['825ba77d95d60cfb94920bec910872ca2ffe7790a44148b2992be2759cb361c4'],
+    }),
+    ('debugme', '1.1.0', {
+        'checksums': ['4dae0e2450d6689a6eab560e36f8a7c63853abbab64994028220b8fd4b793ab1'],
+    }),
+    ('reprex', '2.0.1', {
+        'checksums': ['0e6d8667cacb63135476a766fba3a4f91e5ad86274ea66d2b1e6d773b5ca6426'],
+    }),
+    ('selectr', '0.4-2', {
+        'checksums': ['5588aed05f3f5ee63c0d29953ef53da5dac7afccfdd04b7b22ef24e1e3b0c127'],
+    }),
+    ('rvest', '1.0.2', {
+        'checksums': ['89bb477e0944c80298a52ccf650db8f6377fd7ed3c1bc7034d000f695fdf05a4'],
+    }),
+    ('dtplyr', '1.1.0', {
+        'checksums': ['99681b7285d7d5086e5595ca6bbeebf7f4e2ee358a32b694cd9d35916cdfc732'],
+    }),
+    ('gargle', '1.2.0', {
+        'checksums': ['4d46ca2933f19429ca5a2cfe47b4130a75c7cd9931c7758ade55bac0c091d73b'],
+    }),
+    ('googledrive', '2.0.0', {
+        'checksums': ['605c469a6a086ef4b049909c2e20a35411c165ce7ce4f62d68fd39ffed8c5a26'],
+    }),
+    ('ids', '1.0.1', {
+        'checksums': ['b6212a186063c23116c5cbd3cca65dbb8977dd737261e4526ebee8f64852cfe8'],
+    }),
+    ('googlesheets4', '1.0.0', {
+        'checksums': ['0a107d76aac99d6db48d97ce55810c1412b2197f457b8476f676169a36c7cc7a'],
+    }),
+    ('tidyverse', '1.3.1', {
+        'checksums': ['83cf95109d4606236274f5a8ec2693855bf75d3a1b3bc1ab4426dcc275ed6632'],
+    }),
+    ('R.rsp', '0.44.0', {
+        'checksums': ['8969075bdcabd43bad40eef6b82223e119426279fded041163fd41e55cee3a59'],
+    }),
+    ('gdistance', '1.3-6', {
+        'checksums': ['2ccabeb2f8cf44630c0bd2da79815fe357b812737ebece1bed8f90b27c126a24'],
+    }),
+    ('vioplot', '0.3.7', {
+        'checksums': ['06475d9a47644245ec91598e9aaef7db1c393802d9fc314420ac5139ae56adb6'],
+    }),
+    ('emulator', '1.2-21', {
+        'checksums': ['9b50b2c1e673dbc5e846a4fa72e8bd03434add9f659bde6d7b0c4f1bbd713346'],
+    }),
+    ('gmm', '1.6-6', {
+        'checksums': ['b1b321ad1b4a4a14a2825a2c3eb939ce2f2bcef995247a1d638eca250e59739b'],
+    }),
+    ('tmvtnorm', '1.4-10', {
+        'checksums': ['1a9f35e9b4899672e9c0b263affdc322ecb52ec198b2bb015af9d022faad73f0'],
+    }),
+    ('IDPmisc', '1.1.20', {
+        'checksums': ['bcb9cd7b8097e5089d1936286ef310ac2030ea7791350df706382ba470afc67f'],
+    }),
+    ('gap', '1.2.3-1', {
+        'checksums': ['343ae58ca91e75147ae3961285c3413bdf6dedf7cb4743a822a6c5b16d1b89e7'],
+    }),
+    ('qrnn', '2.0.5', {
+        'checksums': ['3bd83ee8bd83941f9defdab1b5573d0ceca02bf06759a67665e5b9358ff92f52'],
+    }),
+    ('TMB', '1.7.22', {
+        'checksums': ['c24125e1a37ed2b3c2554133183465cb6f3c0021cd4d4609c61336f59c3bd384'],
+    }),
+    ('glmmTMB', '1.1.2.3', {
+        'checksums': ['55631e001ff3f1d8e419e3b0b5555317713c733c11a2f7d4db6434d8c4e7dcf9'],
+    }),
+    ('gmp', '0.6-2', {
+        'checksums': ['6bfcb45b3f1e7da27d8773f911027355cab371d150c3dabf7dbaf8fba85b7f0e'],
+    }),
+    ('ROI', '1.0-0', {
+        'checksums': ['b0d87fb4ed2137d982734f3c5cdc0305aabe6e80f95de29655d02a9e82a0a341'],
+    }),
+    ('Rglpk', '0.6-4', {
+        'checksums': ['a28dbc3130b9618d6ed2ef718d2c55df8ed8c44a47161097c53fe15fa3bfbfa6'],
+    }),
+    ('ROI.plugin.glpk', '1.0-0', {
+        'checksums': ['b361b0d4222d74b21432cdc6990762affecdbcec8fd6bbdb13b78b59cb04b444'],
+    }),
+    ('spaMM', '3.9.13', {
+        'checksums': ['f9ded29106c656ff15ddc2564c16d44b77f08dac1f2dea5720028923e83e2514'],
+    }),
+    ('qgam', '1.3.3', {
+        'checksums': ['9a68fe4e74f4188862f7c01d682d50ffadd96ce7b98383404472309c87e3a26f'],
+    }),
+    ('DHARMa', '0.4.4', {
+        'checksums': ['b5a073f84faf7144f2074a43f619f8f264773afb0e09ca0294735e792552edca'],
+    }),
+    ('mvnfast', '0.2.7', {
+        'checksums': ['b67d50936c9a466977669ef6bb7b23df8e7c90a820ac916328c20e41ef8e0b72'],
+    }),
+    ('bridgesampling', '1.1-2', {
+        'checksums': ['54ecd39aa2e36d4d521d3d36425f9fe56a3f8547df6048c814c5931d790f3e6b'],
+    }),
+    ('BayesianTools', '0.1.7', {
+        'checksums': ['af49389bdeb794da3c39e1d63f59e6219438ecb8613c5ef523b00c6fed5a600c'],
+    }),
+    ('gomms', '1.0', {
+        'checksums': ['52828c6fe9b78d66bde5474e45ff153efdb153f2bd9f0e52a20a668e842f2dc5'],
+    }),
+    ('feather', '0.3.5', {
+        'checksums': ['50ff06d5e24d38b5d5d62f84582861bd353b82363e37623f95529b520504adbf'],
+    }),
+    ('dummies', '1.5.6', {
+        'checksums': ['7551bc2df0830b98c53582cac32145d5ce21f5a61d97e2bb69fd848e3323c805'],
+    }),
+    ('SimSeq', '1.4.0', {
+        'checksums': ['5ab9d4fe2cb1b7634432ff125a9e04d2f574fed06246a93859f8004e10790f19'],
+    }),
+    ('uniqueAtomMat', '0.1-3-2', {
+        'checksums': ['f7024e73274e1e76a870ce5e26bd58f76e8f6df0aa9775c631b861d83f4f53d7'],
+    }),
+    ('PoissonSeq', '1.1.2', {
+        'checksums': ['6f3dc30ad22e33e4fcfa37b3427c093d591c02f1b89a014d85e63203f6031dc2'],
+    }),
+    ('aod', '1.3.1', {
+        'checksums': ['052d8802500fcfdb3b37a8e3e6f3fbd5c3a54e48c3f68122402d2ea3a15403bc'],
+    }),
+    ('cghFLasso', '0.2-1', {
+        'checksums': ['6e697959b35a3ceb2baa1542ef81f0335006a5a9c937f0173c6483979cb4302c'],
+    }),
+    ('svd', '0.5', {
+        'checksums': ['d042d448671355d0664d37fd64dc90932eb780e6494c479d4431d1faae2071a1'],
+    }),
+    ('Rssa', '1.0.4', {
+        'checksums': ['4115b516f6782d52f02695bbbd52921a474aafc7232d49aca85010f1c33b08a7'],
+    }),
+    ('JBTools', '0.7.2.9', {
+        'checksums': ['b33cfa17339df7113176ad1832cbb0533acf5d25c36b95e888f561d586c5d62f'],
+    }),
+    ('RUnit', '0.4.32', {
+        'checksums': ['23a393059989000734898685d0d5509ece219879713eb09083f7707f167f81f1'],
+    }),
+    ('DistributionUtils', '0.6-0', {
+        'checksums': ['7443d6cd154760d55b6954142908eae30385672c4f3f838dd49876ec2f297823'],
+    }),
+    ('gapfill', '0.9.6-1', {
+        'checksums': ['22f04755873e34a9077bb1b1de8d16f5bc56cb8c395c4f797f9ad0b209b1b996'],
+    }),
+    ('gee', '4.13-20', {
+        'checksums': ['53014cee059bd87dc22f9679dfbf18fe6813b9ab41dfe90361921159edfbf798'],
+    }),
+    ('Matching', '4.9-11', {
+        'checksums': ['1c71ca8462b3168839bf446ee8e5b4baa6288a72f8c8590c9d7565c91fba7688'],
+    }),
+    ('MatchIt', '4.3.0', {
+        'checksums': ['ca897ab81a7c19ebd4cbc67011c6223668ad5a8876b10f665a86f5f79ed85446'],
+    }),
+    ('RItools', '0.1-17', {
+        'checksums': ['75654780e9ca39cb3c43acfaca74080ad74de50f92c5e36e95694aafdfdc0cea'],
+    }),
+    ('mitools', '2.4', {
+        'checksums': ['f204f3774e29d79810f579f128de892539518f2cbe6ed237e08c8e7283155d30'],
+    }),
+    ('survey', '4.1-1', {
+        'checksums': ['05e89a1678a39e32bfb41af8a31d643b04fc4d2660a96e701825e6bffcd75a52'],
+    }),
+    ('optmatch', '0.9-15', {
+        'checksums': ['7500fdbed939b7f16603a097d734a332793a3ac68e6a80c7957bef2a567691d8'],
+    }),
+    ('SPAtest', '3.1.2', {
+        'checksums': ['b3d74ed2b0a6475a9966dd50eb5d363d0b2985636271dfbf82f0472b8d22b9f4'],
+    }),
+    ('SKAT', '2.0.1', {
+        'checksums': ['c8637cf5786b926f6bbef3f4ef1d3af5130cc0cfd9094d4835839724b2d0e8c7'],
+    }),
+    ('GillespieSSA', '0.6.1', {
+        'checksums': ['272e9b6b26001d166fd7ce8d04f32831ba23c676075fbd1e922e27ba2c962052'],
+    }),
+    ('startupmsg', '0.9.6', {
+        'checksums': ['1d60ff13bb260630f797bde66a377a5d4cd65d78ae81a3936dc4374572ec786e'],
+    }),
+    ('distr', '2.8.0', {
+        'checksums': ['bb7df05d6b946bcdbbec2e3397c7c7e349b537cabfcbb13a34bcf6312a71ceb7'],
+    }),
+    ('distrEx', '2.8.0', {
+        'checksums': ['b064cde7d63ce93ec9969c8c4463c1e327758b6f8ea7765217d77f9ba9d590bf'],
+    }),
+    ('minerva', '1.5.10', {
+        'checksums': ['2f26353d8fcc989ac698c4e45bb683801b1a7bb60b14903d05a4d73c629c590f'],
+    }),
+    ('KODAMA', '1.8', {
+        'checksums': ['1ed9c14826c3c549c7323672cee04a71048c505c130e739ef5a95ed9bfe43444'],
+    }),
+    ('locfdr', '1.1-8', {
+        'checksums': ['42d6e12593ae6d541e6813a140b92591dabeb1df94432a515507fc2eee9a54b9'],
+    }),
+    ('ica', '1.0-2', {
+        'checksums': ['e721596fc6175d3270a60d5e0b5b98be103a8fd0dd93ef16680af21fe0b54179'],
+    }),
+    ('dtw', '1.22-3', {
+        'checksums': ['df7cf9adf613422ddb22a160597eb5f5475ab6c67c0d790092edb7f72ba98f00'],
+    }),
+    ('SDMTools', '1.1-221.2', {
+        'checksums': ['f0dd8c5f98d2f2c012536fa56d8f7a58aaf0c11cbe3527e66d4ee3194f6a6cf7'],
+    }),
+    ('ggridges', '0.5.3', {
+        'checksums': ['f5eafab17f2d4a8a2a83821ad3e96ae7c26b62bbce9de414484c657383c7b42e'],
+    }),
+    ('TFisher', '0.2.0', {
+        'checksums': ['bd9b7484d6fba0165841596275b446f85ba446d40e92f3b9cb37381a3827e76f'],
+    }),
+    ('lsei', '1.3-0', {
+        'checksums': ['6289058f652989ca8a5ad6fa324ce1762cc9e36c42559c00929b70f762066ab6'],
+    }),
+    ('npsurv', '0.5-0', {
+        'checksums': ['bc87db76e7017e178c2832a684fcd49c42e20054644b21b586413d26c8821dc6'],
+    }),
+    ('fitdistrplus', '1.1-6', {
+        'checksums': ['17c2990041a3bb7479f3c3a6d13d96c989db8eaddab17eff7e1fbe172a5b96be'],
+    }),
+    ('here', '1.0.1', {
+        'checksums': ['08ed908033420d3d665c87248b3a14d1b6e2b37844bf736be620578c20ca346b'],
+    }),
+    ('reticulate', '1.22', {
+        'checksums': ['b06e7b39abf08ae9604ea26d02e3c6e4ef6dcc4b6c7c98118fd85192f615f56c'],
+    }),
+    ('hdf5r', '1.3.4', {
+        'installopts': '--configure-args="--with-hdf5=$EBROOTHDF5/bin/h5cc"',
+        'preinstallopts': "unset LIBS && ",
+        'checksums': ['64d057601841b604e04e8514d33a1e5e515dcbfd9cc8369d40d717d7036fab53'],
+    }),
+    ('DTRreg', '1.7', {
+        'checksums': ['f0fad2244d960cec8fc33d9a1078df359ceb0aadff980ce6149aa9f01c62223b'],
+    }),
+    ('pulsar', '0.3.7', {
+        'checksums': ['78c9f7e3b2bf8a8d16a81d6ee43bb05b0c360219be473d920c8c8ccb2aba4e3d'],
+    }),
+    ('bayesm', '3.1-4', {
+        'checksums': ['061b216c62bc72eab8d646ad4075f2f78823f9913344a781fa53ea7cf4a48f94'],
+    }),
+    ('gsl', '2.1-7', {
+        'checksums': ['1a86af59d9864ecf2a85d5371076786e7a0491d6d6b4d5c1a7590ea8919f3b17'],
+    }),
+    ('energy', '1.7-8', {
+        'checksums': ['de08e8de037bb30068bbf0c1880b153a586d342304681f4ba103ab808c7f4789'],
+    }),
+    ('compositions', '2.0-2', {
+        'checksums': ['b5e47a14a1bb010b47b4ad7fbfabfead1a08b009b92e1f7d4bd3bd7f8589f216'],
+    }),
+    ('clustree', '0.4.3', {
+        'checksums': ['5ff3afc3fb3e1d20d033328935084de574250d29545c0a5b69180fe4846fbe53'],
+    }),
+    ('plotly', '4.10.0', {
+        'checksums': ['bd995c654dbc8c09a84adaba8def99766919e3894caf18b551bb26b2f591389a'],
+    }),
+    ('tweedie', '2.3.3', {
+        'checksums': ['a032cad512dac37a8619e6f66cb513eb82a88a5a2ffbe91e92c2d44d1756d0d9'],
+    }),
+    ('RcppGSL', '0.3.10', {
+        'checksums': ['8612087da02fb791f427fed310c23d0482a8eb60fb089119f018878143f95451'],
+    }),
+    ('mvabund', '4.1.12', {
+        'checksums': ['c1af39dbfd048c9bb367765ee266be49622e1a5d964186920a2d47bec4e6f780'],
+    }),
+    ('fishMod', '0.29', {
+        'checksums': ['5989e49ca6d6b2c5d514655e61f75b019528a8c975f0d6056143f17dc4277a5d'],
+    }),
+    ('gllvm', '1.3.1', {
+        'checksums': ['cd3f72b84f0c722e9c0b21c2b2de7683ec742345d7f8e62f67c8c93342c1a5c6'],
+    }),
+    ('grpreg', '3.4.0', {
+        'checksums': ['fd57d20baf63d2cc5821998bca5c3fdcbe46c933c9553caa492911b12654d6ad'],
+    }),
+    ('trust', '0.1-8', {
+        'checksums': ['952e348b62aec35988b103fd152329662cb6a451538f184549252fbf49d7dcac'],
+    }),
+    ('lpSolveAPI', '5.5.2.0-17.7', {
+        'checksums': ['9ebc8e45ad73eb51e0b25049598a5bc758370cf89508e2328cf4bd93d68d55bb'],
+    }),
+    ('ergm', version, {
+        'checksums': ['1abc6ef53376a4132530c376ce477ae7a2590e95fe8feb011c0da9cfb4d49ba0'],
+    }),
+    ('networkDynamic', '0.11.0', {
+        'checksums': ['aa21caaddce75c22e08b94adfb6036f5ee151ffb79d174ad250fe4592d27dad2'],
+    }),
+    ('tergm', '4.0.2', {
+        'checksums': ['5ab1d61166c90f90c77edd12544b5946e01a933cc3e7ca609cae72075b742a64'],
+    }),
+    ('ergm.count', '4.0.2', {
+        'checksums': ['316ed3cbe4b472eec79e8a5fd4183ce953070f6d98056d87423bd6d9ac155bd1'],
+    }),
+    ('tsna', '0.3.4', {
+        'checksums': ['08fd9612388b86077cd877a48f81068d63f20291836eedbc727c9e00c1a2b4d2'],
+    }),
+    ('statnet', '2019.6', {
+        'checksums': ['0903e1a81ed1b6289359cefd12da1424c92456d19e062c3f74197b69e536b29d'],
+    }),
+    ('aggregation', '1.0.1', {
+        'checksums': ['86f88a02479ddc8506bafb154117ebc3b1a4a44fa308e0193c8c315109302f49'],
+    }),
+    ('ComICS', '1.0.4', {
+        'checksums': ['0af7901215876f95f309d7da6e633c38e4d7faf04112dd6fd343bc15fc593a2f'],
+    }),
+    ('dtangle', '2.0.9', {
+        'checksums': ['c375068c1877c2e8cdc5601cfd5a9c821645c3dff90ddef64817f788f372e179'],
+    }),
+    ('mcmc', '0.9-7', {
+        'checksums': ['b7c4d3d5f9364c67a4a3cd49296a61c315ad9bd49324a22deccbacb314aa8260'],
+    }),
+    ('MCMCpack', '1.6-0', {
+        'checksums': ['b5b9493457d11d4dca12f7732bd1b3eb1443852977c8ee78393126f13deaf29b'],
+    }),
+    ('shinythemes', '1.2.0', {
+        'checksums': ['37d68569ce838c7da9f0ea7e2b162ecf38fba2ae448a4888b6dd29c4bb5b2963'],
+    }),
+    ('csSAM', '1.2.4', {
+        'checksums': ['3d6442ad8c41fa84633cbbc275cd67e88490a160927a5c55d29da55a36e148d7'],
+    }),
+    ('bridgedist', '0.1.0', {
+        'checksums': ['dc7c1c8874d6cfa34d550d9af194389e13471dfbc55049a1ab66db112fbf1343'],
+    }),
+    ('asnipe', '1.1.16', {
+        'checksums': ['be50f9fdef0f4bf9676b9c3c2906d0431afc678af55cf48b1119f9fc0adac44f'],
+    }),
+    ('liquidSVM', '1.2.4', {
+        'patches': ['liquidSVM-1.2.4-fix_ppc_and_aarch64_build.patch'],
+        'preinstallopts': 'LIQUIDSVM_TARGET="empty"',
+        'checksums': [
+            '15a9c7f2930e2ed3f4c5bcd9b042884ea580d2b2e52e1c68041600c196046aba',  # liquidSVM_1.2.4.tar.gz
+            # liquidSVM-1.2.4-fix_ppc_and_aarch64_build.patch
+            '46b09e441c3b59af535f20d8db0dee7f1d6a7ddd511175d252115b53cb8b86f8',
+        ],
+    }),
+    ('oddsratio', '2.0.1', {
+        'checksums': ['2097e7a8bf623379d55652de5dce4946d05163e85d30df50dc19055962bf60b5'],
+    }),
+    ('mltools', '0.3.5', {
+        'checksums': ['7093ffceccdf5d4c3f045d8c8143deaa8ab79935cc6d5463973ffc7d3812bb10'],
+    }),
+    ('h2o', '3.34.0.3', {
+        'checksums': ['2a707b9f7271eae611c9e81b13d2024b8829f6b06b3c41c5b97de1aef591931e'],
+    }),
+    ('mlegp', '3.1.8', {
+        'checksums': ['eac1df085a608451828575028ca05b78dc6b5035da14cabc141bfee5ef986de9'],
+    }),
+    ('itertools', '0.1-3', {
+        'checksums': ['b69b0781318e175532ad2d4f2840553bade9637e04de215b581704b5635c45d3'],
+    }),
+    ('missForest', '1.4', {
+        'checksums': ['f785804b03bdf424e1c76095989a803afb3b47d6bebca9a6832074b6326c0278'],
+    }),
+    ('bartMachineJARs', '1.1', {
+        'checksums': ['f2c31cb94d7485174a2519771127a102e35b9fe7f665e27beda3e76a56feeef2'],
+    }),
+    ('bartMachine', '1.2.6', {
+        'checksums': ['5e1ac0033da5b41a96d95782886a167e51ff8e43822800e8d40874ff9c13847f'],
+    }),
+    ('lqa', '1.0-3', {
+        'checksums': ['3889675dc4c8cbafeefe118f4f20c3bd3789d4875bb725933571f9991a133990'],
+    }),
+    ('PresenceAbsence', '1.1.9', {
+        'checksums': ['1a30b0a4317ea227d674ac873ab94f87f8326490304e5b08ad58953cdf23169f'],
+    }),
+    ('GUTS', '1.1.1', {
+        'checksums': ['094b8f51719cc36ddc56e3412dbb146eafc93c5e8fbb2c5999c2e80ea7a7d216'],
+    }),
+    ('GenSA', '1.1.7', {
+        'checksums': ['9d99d3d0a4b7770c3c3a6de44206811272d78ab94481713a8c369f7d6ae7b80f'],
+    }),
+    ('parsedate', '1.2.1', {
+        'checksums': ['6b078da4a47904194bfe29e2c3b6fbbf6e3ad190e33979f840a3ea366c708616'],
+    }),
+    ('circular', '0.4-93', {
+        'checksums': ['76cee2393757390ad91d3db3e5aeb2c2d34c0a46822b7941498571a473417142'],
+    }),
+    ('cobs', '1.3-4', {
+        'checksums': ['a1c7b77e4ca097349884fd1c0d863d74f9092766131094d603f34d33ab2e3c42'],
+    }),
+    ('resample', '0.4', {
+        'checksums': ['f0d5f735e1b812612720845d79167a19f713a438fd10a6a3206e667045fd93e5'],
+    }),
+    ('MIIVsem', '0.5.8', {
+        'checksums': ['a908f51e1598290d25864c358d57201bd50c1c40775d4d0405cbc8077bee61e1'],
+    }),
+    ('medflex', '0.6-7', {
+        'checksums': ['d28107a4bbbb0ace1d571f0aa6884ee4c50d7731c04bceba207fd55a39b83b9c'],
+    }),
+    ('Rserve', '1.7-3.1', {
+        'checksums': ['3ba1e919706e16a8632def5f45d666b6e44eafa6c14b57064d6ddf3415038f99'],
+    }),
+    ('spls', '2.2-3', {
+        'checksums': ['bbd693da80487eef2939c37aba199f6d811ec289828c763d9416a05fa202ab2e'],
+    }),
+    ('Boruta', '7.0.0', {
+        'checksums': ['6ff520d27d68637058c33a34c547a656bb44d5e351b7cc7afed6cd4216275c78'],
+    }),
+    ('dr', '3.0.10', {
+        'checksums': ['ce523c1bdb62a9dda30afc12b1dd96975cc34695c61913012236f3b80e24bf36'],
+    }),
+    ('CovSel', '1.2.1', {
+        'checksums': ['b375d00cc567e125ff106b4357654f43bba3abcadeed2238b6dea4b7a68fda09'],
+    }),
+    ('tmle', '1.5.0.2', {
+        'checksums': ['4772c352e8d3d9b5a0b7480c0e0962de4f5060fb7bf3fcb8ee4fa1cb10f93fd4'],
+    }),
+    ('ctmle', '0.1.2', {
+        'checksums': ['e3fa0722cd87aa0e0b209c2dddf3fc44c6d09993f1e66a6c43285fe950948161'],
+    }),
+    ('BayesPen', '1.0', {
+        'checksums': ['772df9ae12cd8a3da1d5b7d1f1629602c7693f0eb03945784df2809e2bb061b0'],
+    }),
+    ('inline', '0.3.19', {
+        'checksums': ['0ee9309bb7dab0b97761ddd18381aa12bd7d54678ccd7bec00784e831f4c99d5'],
+    }),
+    ('BMA', '3.18.15', {
+        'checksums': ['4be0d52f433503631e9574944067f613bafba129ebe27396bcfccb3b95992b1a'],
+    }),
+    ('BCEE', '1.3.0', {
+        'checksums': ['82afc9b8c6d617f5f728341960ae32922194f637c550916b3bea12c231414fa7'],
+    }),
+    ('bacr', '1.0.1', {
+        'checksums': ['c847272e2c03fd08ed79b3b739f57fe881af77404b6fd087caa0c398c90ef993'],
+    }),
+    ('clue', '0.3-60', {
+        'checksums': ['6d21ddfd0d621ed3bac861890c600884b6ed5ff7d2a36c9778b892636dbbef2a'],
+    }),
+    ('bdsmatrix', '1.3-4', {
+        'checksums': ['251e21f433a016ec85e478811ea3ad34c572eb26137447f48d1bbf3cc8bb06ea'],
+    }),
+    ('fftwtools', '0.9-11', {
+        'checksums': ['f1f0c9a9086c7b2f72c5fb0334717cc917213a004eaef8448eab4940c9852c7f'],
+    }),
+    ('imagerExtra', '1.3.2', {
+        'checksums': ['0ebfa1eabb89459d774630ab73c7a97a93b9481ea5afc55482975475acebd5b8'],
+    }),
+    ('MALDIquant', '1.20', {
+        'checksums': ['fff39d5df295b937cdad57b73d4e06e925f69e68784ef58b5dfcd3cf500931c1'],
+    }),
+    ('threejs', '0.3.3', {
+        'checksums': ['76c759c8b20fb34f4f7a01cbd1b961296e1f19f4df6dded69aae7f1bca80219c'],
+    }),
+    ('LaplacesDemon', '16.1.6', {
+        'checksums': ['57b53882fd7a195b38bbdbbf0b17745405eb3159b1b42f7f11ce80c78ab94eb7'],
+    }),
+    ('rda', '1.0.2-2.1', {
+        'checksums': ['eea3a51a2e132a023146bfbc0c384f5373eb3ea2b61743d7658be86a5b04949e'],
+    }),
+    ('sampling', '2.9', {
+        'checksums': ['7f5ba5978f6cdbbbdb6f51958197b28b6fc63e7eeee59e6845ea09fb37d1b187'],
+    }),
+    ('lda', '1.4.2', {
+        'checksums': ['5606a1e1bc24706988853528023f7a004c725791ae1a7309f1aea2fc6681240f'],
+    }),
+    ('jiebaRD', '0.1', {
+        'checksums': ['045ee670f5378fe325a45b40fd55136b355cbb225e088cb229f512c51abb4df1'],
+    }),
+    ('jiebaR', '0.11', {
+        'checksums': ['adde8b0b21c01ec344735d49cd33929511086719c99f8e10dce4ca9479276623'],
+    }),
+    ('hdm', '0.3.1', {
+        'checksums': ['ba087565e9e0a8ea30a6095919141895fd76b7f3c05a03e60e9e24e602732bce'],
+    }),
+    ('abe', '3.0.1', {
+        'checksums': ['66d2e9ac78ba64b7d27b22b647fc00378ea832f868e51c18df50d6fffb8029b8'],
+    }),
+    ('SignifReg', '4.2', {
+        'checksums': ['53d2ff3ddbb398655b245ad3a19c028d6fb6bb1d59adeb30bb3497606733fc2d'],
+    }),
+    ('bbmle', '1.0.24', {
+        'checksums': ['01edc00479fabf7491e47ff59bc4adbe6f0d4c23d22e76d1d49c4c1b6b4693ad'],
+    }),
+    ('emdbook', '1.3.12', {
+        'checksums': ['0646caf9e15aaa61ff917a4b5fdf82c06ac17ef221a61dec3fbb554e7bff4353'],
+    }),
+    ('SOAR', '0.99-11', {
+        'checksums': ['d5a0fba3664087308ce5295a1d57d10bad149eb9771b4fe67478deae4b7f68d8'],
+    }),
+    ('rasterVis', '0.51.0', {
+        'checksums': ['5225334add4dd3502044cf80a00543b766568c2d93c47af180f66a76942d76be'],
+    }),
+    ('tictoc', '1.0.1', {
+        'checksums': ['a09a1535c417ddf6637bbbda5fca6edab6c7f7b252a64e57e99d4d0748712705'],
+    }),
+    ('ISOcodes', '2021.02.24', {
+        'checksums': ['152769bcb4ae99d06a767384541c2000c94990a2c6983780837f85e885b539a6'],
+    }),
+    ('stopwords', '2.3', {
+        'checksums': ['c5ec1c6ab1bad1786d87d7823d4b63abc94d2fd84ed7d8e985906e96fb6321b2'],
+    }),
+    ('janeaustenr', '0.1.5', {
+        'checksums': ['992f6673653daf7010fe176993a01cd4127d9a88be428da8da7a28241826d6f3'],
+    }),
+    ('SnowballC', '0.7.0', {
+        'checksums': ['b10fee9d322f567a22c580b49b5d4ba1c86eae40a71794ca92552c726b3895f3'],
+    }),
+    ('tokenizers', '0.2.1', {
+        'checksums': ['28617cdc5ddef5276abfe14a2642999833322b6c34697de1d4e9d6dc7670dd00'],
+    }),
+    ('hunspell', '3.0.1', {
+        'checksums': ['1fedbb913bc13c790d2fabfe4edda0a987db3a078bea8c0ca9b777d20af08662'],
+    }),
+    ('topicmodels', '0.2-12', {
+        'checksums': ['afd83a4381bf39e470446ebefd41ed03f314be400c1b2f702a4b1060eb8fd1b4'],
+    }),
+    ('tidytext', '0.3.2', {
+        'checksums': ['6fe0ada78ee2cdf77c16e519a29b9baff61d8e23ab56aa0a9adc1b2a99a6472b'],
+    }),
+    ('splitstackshape', '1.4.8', {
+        'checksums': ['656032c3f1e3dd5b8a3ee19ffcae617e07104c0e342fc3da4d863637a770fe56'],
+    }),
+    ('grImport2', '0.2-0', {
+        'checksums': ['a102a2d877e42cd4e4e346e5510a77b2f3e57b43ae3c6d5c272fdceb506b00a7'],
+    }),
+    ('preseqR', '4.0.0', {
+        'checksums': ['0143db473fb9a811f9cf582a348226a5763e62d9857ce3ef4ec41412abb559bc'],
+    }),
+    ('idr', '1.2', {
+        'checksums': ['8bbfdf82c8c2b5c73eb079127e198b6cb65c437bb36729f502c7bcd6037fdb16'],
+    }),
+    ('entropy', '1.3.1', {
+        'checksums': ['6f5a89f5ce0e90cbed1695b81259326c976e7a8f538157e223ee5f63b54412b8'],
+    }),
+    ('kedd', '1.0.3', {
+        'checksums': ['38760abd8c8e8f69ad85ca7992803060acc44ce68358de1763bd2415fdf83c9f'],
+    }),
+    ('HiddenMarkov', '1.8-13', {
+        'checksums': ['7186d23e561818f3e1f01376a4fb2af9ccee775ce5afc1e3175f3b07a81db515'],
+    }),
+    ('lmerTest', '3.1-3', {
+        'checksums': ['35aa75e9f5f2871398ff56a482b013e6828135ef04916ced7d1d7e35257ea8fd'],
+    }),
+    ('loo', '2.4.1', {
+        'checksums': ['bc21fb6b4a93a7e95ee1be57e4e787d731895fb8b4743c26b30b43adee475b50'],
+    }),
+    ('RcppParallel', '5.1.4', {
+        'checksums': ['76b545a6878c55edba780183fd89a76fe723b7f19709c5243495dcf3d54eea82'],
+    }),
+    ('StanHeaders', '2.21.0-7', {
+        'checksums': ['27546e064f0e907e031d9185ad55245d118d82fbe3074ecb1d76fae8b9f2336b'],
+    }),
+    ('V8', '3.4.2', {
+        'installopts': '--configure-vars="INCLUDE_DIR=$CPATH LIB_DIR=$LIBRARY_PATH"',
+        'preinstallopts': "export CPATH=$EBROOTNODEJS/include/node:$CPATH && ",
+        'checksums': ['210643473ca8bf423fae34ce72ceb37a3e44c3315ec4abae59a77f077542d2ed'],
+    }),
+    ('rstan', '2.21.2', {
+        'checksums': ['e30e04d38a612e2cb3ac69b53eaa19f7ede8b3548bf82f7892a2e9991d46054a'],
+    }),
+    ('Rborist', '0.2-3', {
+        'checksums': ['f3b3f953ca99e0d17425ac6ba9a7b1e9d6098343abace575cdb492bca2a9c461'],
+    }),
+    ('VSURF', '1.1.0', {
+        'checksums': ['eee99e0c441795c2ccb21cc6e0a37b24f580241e494c83e811b726b43469eeab'],
+    }),
+    ('mRMRe', '2.1.2', {
+        'checksums': ['a59a3cb3cca89f51d9ee6702cd479fd7db8bc2e25b72f45cb6712da983777ca0'],
+    }),
+    ('dHSIC', '2.1', {
+        'checksums': ['94c86473790cf69f11c68ed8ba9d6ae98218c7c69b7a9a093f235d175cf83db0'],
+    }),
+    ('ggsci', '2.9', {
+        'checksums': ['4af14e6f3657134c115d5ac5e65a2ed74596f9a8437c03255447cd959fe9e33c'],
+    }),
+    ('ggsignif', '0.6.3', {
+        'checksums': ['ca8545b25590e531512a90a18449a2cbab945f7434a1d60188c41f7d1839a7a9'],
+    }),
+    ('corrplot', '0.90', {
+        'checksums': ['d9871f219351f443f879ae93c45e3a364eb32cc6f41491a801e7b8a91e96d5dd'],
+    }),
+    ('rstatix', '0.7.0', {
+        'checksums': ['a5ae17dc32cc26fc5dcab9ff0a9747ce3786c9fe091699247ad8b9f823f2600c'],
+    }),
+    ('ggfan', '0.1.3', {
+        'checksums': ['5c888b203ecf5e3dc7a317a790ca059c733002fbca4b4bc1a4f62b7ded5f70dc'],
+    }),
+    ('ggpubr', '0.4.0', {
+        'checksums': ['abb21ec0b1ae3fa1c58eedca2d59b9b009621b30e3660f1247b3880c5fa50675'],
+    }),
+    ('yaImpute', '1.0-32', {
+        'checksums': ['08eee5d851b80aad9c7c80f9531aadd50d60e4b16b3a80657a50212269cd73ff'],
+    }),
+    ('intrinsicDimension', '1.2.0', {
+        'checksums': ['6cc9180a83aa0d123f1e420136bb959c0d5877867fa170b79536f5ee22106a32'],
+    }),
+    ('patchwork', '1.1.1', {
+        'checksums': ['cf0d7d9f92945729b499d6e343441c55007d5b371206d5389b9e5154dc7cf481'],
+    }),
+    ('leiden', '0.3.9', {
+        'checksums': ['81754276e026a9a8436476365bbadf0f15a403a525a349cb56418da5d8edea0d'],
+    }),
+    ('sctransform', '0.3.2', {
+        'checksums': ['5dbb0a045e514c19f51bbe11c2dba0b72dca1942d6eb044c36b0538b443475dc'],
+    }),
+    ('packrat', '0.7.0', {
+        'checksums': ['e8bce1fd78f28f3a7bf56e65a2ae2c6802e69bf55466c24e1d1a4b8a5f83dcc2'],
+    }),
+    ('colourpicker', '1.1.1', {
+        'checksums': ['a0d09982b048b143e2c3438ccec039dd20d6f892fa0dedc9fdcb0d40de883ce0'],
+    }),
+    ('ggExtra', '0.9', {
+        'checksums': ['f22db92d6e3e610901998348acbcaa6652fa6c62a285a622d3b962ba9e89aba2'],
+    }),
+    ('findpython', '1.0.7', {
+        'checksums': ['59f904b9c2ec84b589380de59d13afbf14d1ec3b670e3a07e820298aaf04c149'],
+    }),
+    ('argparse', '2.1.2', {
+        'checksums': ['9997359a735359580ab6b054672388a55701fca71c80b54bab1aedc13bc5e5b3'],
+    }),
+    ('intergraph', '2.0-2', {
+        'checksums': ['6cbe77f1e87fa1c110db2d46010f2f3ae72bfdb708ce2ca84c1cdc2cd6eb47a1'],
+    }),
+    ('ggnetwork', '0.5.10', {
+        'checksums': ['1b655dbab8eed8d0aa3ab2148aac8e0e5bfa190468f5e3c06b001ce88b7f0d3f'],
+    }),
+    ('qqman', '0.1.8', {
+        'checksums': ['58da8317df8d726d1fde4805919da5d64f880894a423ee20937cafb479b9d8a8'],
+    }),
+    ('rstantools', '2.1.1', {
+        'checksums': ['c95b15de8ec577eeb24bb5206e7b685d882f88b5e6902efda924b7217f463d2d'],
+    }),
+    ('bayesplot', '1.8.1', {
+        'checksums': ['d8d74201ea91fa5438714686ca22a947ec9375b6c12b0cfef010c57104b1aa2a'],
+    }),
+    ('dygraphs', '1.1.1.6', {
+        'checksums': ['c3d331f30012e721a048e04639f60ea738cd7e54e4f930ac9849b95f0f005208'],
+    }),
+    ('rsconnect', '0.8.24', {
+        'checksums': ['cf6bef1e073d6fa95c8be8a00e9e4982b88f4bab0e8ecd77db816a585be2e4a6'],
+    }),
+    ('shinystan', '2.5.0', {
+        'checksums': ['45f9c552a31035c5de8658bb9e5d72da7ec1f88fbddb520d15fe701c677154a1'],
+    }),
+    ('optimx', '2021-10.12', {
+        'checksums': ['39384c856b5efa3992cd230548b60eff936d428111ad6ad5b8fb98a3bcbb7943'],
+    }),
+    ('gamm4', '0.2-6', {
+        'checksums': ['57c5b66582b2adc32f6a3bb6a259f5b95198e283a96d966a6007e8e48b380c89'],
+    }),
+    ('projpred', '2.0.2', {
+        'checksums': ['af0a9fb53f706090fe81b6381b27b0b6bd3f7ae1e1e44b0ada6f40972b09a55b'],
+    }),
+    ('distributional', '0.2.2', {
+        'checksums': ['028e5a91aabe3a676eb7b7f3dc907f7f34735a123fe0d9adcabc03476504435f'],
+    }),
+    ('posterior', '1.1.0', {
+        'checksums': ['eff6262dbcc1bf18337f535b0c75ba2fe360322e8b170c466e24ed3ee76cf4d2'],
+    }),
+    ('brms', '2.16.1', {
+        'checksums': ['749efbd9fb061fe207cf2e729c1387d9a8538b922f12ceec4e82a9f8dd9c1bc4'],
+    }),
+    ('drgee', '1.1.10', {
+        'checksums': ['e684f07f7dfec922380d4202922c11094f859721f77b31ff38b0d35d0f42c743'],
+    }),
+    ('stdReg', '3.4.1', {
+        'checksums': ['285335dbe29b6898641e1151ab2f06acf76c6f4d6fbeadd66d151c25d7e38a74'],
+    }),
+    ('mcmcse', '1.5-0', {
+        'checksums': ['4a820dc22c48efd32b7f9d1e1b897b4b3f165cd64b2ff85ba7029621cf9e7463'],
+    }),
+    ('copCAR', '2.0-4', {
+        'checksums': ['8b4ed53c58a665f70e48bdca689a992a81d5ecb5a6051ca7361d3870e13c77f3'],
+    }),
+    ('batchmeans', '1.0-4', {
+        'checksums': ['8694573009d9070a76007281407d3314da78902e122a9d8aec1f819d3bbe562c'],
+    }),
+    ('ngspatial', '1.2-2', {
+        'checksums': ['3fa79e45d3a502a58c1454593ec83dfc73144e92b34c14f617a6126557dd0d26'],
+    }),
+    ('BIGL', '1.6.5', {
+        'checksums': ['5be825734d76760723e2d5b8fbe03524a2b59d9163b33841d4a2c9ab2d4257cf'],
+    }),
+    ('drugCombo', '1.2.1', {
+        'checksums': ['9a605c655c159604033558d757711e6d83d33dfc286c1280f722d4cb7d130f80'],
+    }),
+    ('betareg', '3.1-4', {
+        'checksums': ['5106986096a68b2b516215968158589b71969ce7912879253d6e930355a18101'],
+    }),
+    ('unmarked', '1.1.1', {
+        'checksums': ['48474f396c4a91e257490025ede6a998883683e8020a898fff5d4e23a3764bfd'],
+    }),
+    ('maxlike', '0.1-8', {
+        'checksums': ['90aaab9602f259cbfae61fe96e105cc4a0c2a385b42380f85c14f5d544107251'],
+    }),
+    ('coxme', '2.2-16', {
+        'checksums': ['a0ce4b5649c4c1abbfe2c2bf23089744d1f66eb8368dea16e74e090f366a5111'],
+    }),
+    ('AICcmodavg', '2.3-1', {
+        'checksums': ['d0517da15a38e9b1df20fa73f5342b586624e65792d266e7dff278ad7fc458b0'],
+    }),
+    ('pacman', '0.5.1', {
+        'checksums': ['9ec9a72a15eda5b8f727adc877a07c4b36f8372fe7ed80a1bc6c2068dab3ef7c'],
+    }),
+    ('spaa', '0.2.2', {
+        'checksums': ['a5a54454d4a7af473ce797875f849bd893005cb04325bf3e0dbddb19fe8d7198'],
+    }),
+    ('maxnet', '0.1.4', {
+        'checksums': ['fd21e5ecf3c1ac00ef1bbe79fab4cdd62789e0c4c45f126f1b64bda667238216'],
+    }),
+    ('oai', '0.3.2', {
+        'checksums': ['ebfa756e08f6ac0aa61556b1a5bbe611f407bfff8aef1f8d075a24c361678bfd'],
+    }),
+    ('wellknown', '0.7.4', {
+        'checksums': ['483e6fc43edf09ed583e74ce5ca7e2d7838ef8a32291e06d774c37546eed1a34'],
+    }),
+    ('rgbif', '3.6.0', {
+        'checksums': ['2941857c85d89ebaf614ed130ec2f68e326a8ca99e00263ac4e2a9c556917f20'],
+    }),
+    ('rgdal', '1.5-27', {
+        'checksums': ['62a555ed7b5424dd0252b3764e3542fb30c524d06e8245215bcfaedd84ee5756'],
+    }),
+    ('rgeos', '0.5-8', {
+        'checksums': ['0db35392146cefb5eea0392eecb6b0bfee53708222b98b06de54a3e1a04ea314'],
+    }),
+    ('mapproj', '1.2.7', {
+        'checksums': ['f0081281b08bf3cc7052c4f1360d6d3c20d9063be57754448ad9b48ab0d34c5b'],
+    }),
+    ('rbison', '1.0.0', {
+        'checksums': ['9957e5f85ce68f5dd0ddc3c4b2b3c9d2f52d6f37587e1022ab8a44863534a83c'],
+    }),
+    ('rebird', '1.3.0', {
+        'checksums': ['b238d3f246aa0249145894e1f3a90f46902f6615fc2f23b24c99bb5feecc55d3'],
+    }),
+    ('rvertnet', '0.8.2', {
+        'checksums': ['2de9a3ec33a213c7592b49cca1d510a25aef0625369376d9b1b4e5d0da519226'],
+    }),
+    ('ridigbio', '0.3.5', {
+        'checksums': ['e5cfb2e4dd8ddd1452a5afcf24fcc260889179d0f52eff4f41835adf99b64614'],
+    }),
+    ('spocc', '1.2.0', {
+        'checksums': ['4bac45db5e69bfa3bf6cebd1b0c9241214c95561f275cee6d31e00911aa79d84'],
+    }),
+    ('spThin', '0.2.0', {
+        'checksums': ['2e997afb79a2a990eded34c71afaac83986669cfa9ac51b15ae3f2b558902048'],
+    }),
+    ('rangeModelMetadata', '0.1.4', {
+        'checksums': ['529d529ca90437db3d1e45118443e27a920422806383c7edaa2102beb43f5f80'],
+    }),
+    ('ENMeval', '2.0.1', {
+        'checksums': ['2f7b7760ae70a45cd3c766aacf1e39f498de4f2e8c7b6dcde6b9adf6d8100250'],
+    }),
+    ('plotmo', '3.6.1', {
+        'checksums': ['245a0c87f0cca08746c6fdc60da2e3856cd69b1a2b7b5641293c620d4ae04343'],
+    }),
+    ('earth', '5.3.1', {
+        'checksums': ['0bbe06ba974ceb8ec5de1d59cb53f9487d1828d7130fe2503c48b6cb449c4b03'],
+    }),
+    ('mda', '0.5-2', {
+        'checksums': ['344f2053215ddf535d1554b4539e9b09067dac878887cc3eb995cef421fc00c3'],
+    }),
+    ('biomod2', '3.5.1', {
+        'checksums': ['30ed33ff980558a59782ec9e35f9c2c710a540718010654363f63878cdc0ac18'],
+    }),
+    ('poLCA', '1.4.1', {
+        'checksums': ['2e69975b5e7da8c36641bfa9453afdb4861523866b8799bec1d4eace9ab5762e'],
+    }),
+    ('PermAlgo', '1.1', {
+        'checksums': ['d7157b92241c34b71ad19901b52144973b49df453bf2a5edf4497d4bf26bd099'],
+    }),
+    ('coxed', '0.3.3', {
+        'checksums': ['d0d6cb8fea9516b3c63b34d0d81f3804c18a07f97a83e51555575c8ed4c75626'],
+    }),
+    ('testit', '0.13', {
+        'checksums': ['90d47168ab6bdbd1274b600b457626ac07697ce09792c92b2043be5f5b678d80'],
+    }),
+    ('NISTunits', '1.0.1', {
+        'checksums': ['eaccd68db5c73d6a089ce5b323cdd51bc6a6a58ce467987158ba8c9be6a0a94e'],
+    }),
+    ('celestial', '1.4.6', {
+        'checksums': ['9f647f41465ac65b254717698f1978871c378ad8e6ccaa693abf579437069abe'],
+    }),
+    ('fasterize', '1.0.3', {
+        'checksums': ['62b459625e9bdb00251ec5f6cb873e0c59713f3e86dc1e2c8332adc0cea17f81'],
+    }),
+    ('RPMM', '1.25', {
+        'checksums': ['f04a524b13918062616beda50c4e759ce2719ce14150a0e677d07132086c88c8'],
+    }),
+    ('RefFreeEWAS', '2.2', {
+        'checksums': ['de2812f166caabf6ea01c0533402e5cd9d8a525a2a7583e4757decf22319caab'],
+    }),
+    ('wordcloud', '2.6', {
+        'checksums': ['53716954430acd4f164bfd8eacd7068a908ee3358293ded6cd992d53b7f72649'],
+    }),
+    ('JADE', '2.0-3', {
+        'checksums': ['56d68a993fa16fc6dec758c843960eee840814c4ca2271e97681a9d2b9e242ba'],
+    }),
+    ('awsMethods', '1.1-1', {
+        'checksums': ['50934dc20cf4e015f1304a89de6703fed27e7bd54c6b9fc9fb253cdf2ecb7541'],
+    }),
+    ('aws', '2.5-1', {
+        'checksums': ['e8abadc5614f132edc3fb9cb1c82ce4dacc1315b727fbd49db7399aee24115ba'],
+    }),
+    ('ruv', '0.9.7.1', {
+        'checksums': ['a0c54e56ba3d8f6ae178ae4d0e417a79295abf5dcb68bbae26c4b874734d98d8'],
+    }),
+    ('mhsmm', '0.4.16', {
+        'checksums': ['fab573abdc0dd44e8c8bc7242a1428df20b3ec64c4c194e5f1f907393f902d01'],
+    }),
+    ('dbarts', '0.9-20', {
+        'checksums': ['1d75e795812819b7637d38fc909f4d7942bddf359acfb40a7b8e7cd167a5e92a'],
+    }),
+    ('proftools', '0.99-3', {
+        'checksums': ['e034eb1531af54013143da3e15229e1d4c2260f8eb79c93846014db3bdefb724'],
+    }),
+    ('NCmisc', '1.1.6', {
+        'checksums': ['2aa85997d5ec2222e610604022684c004a4925241761d9a0104919f1cf3a8c79'],
+    }),
+    ('reader', '1.0.6', {
+        'checksums': ['905c7c5a1b035ac8213fc533fa26e511abfeea40bd22e3edfde42a49074e88f4'],
+    }),
+    ('gnumeric', '0.7-8', {
+        'checksums': ['28b10c91d693b938ebca610933889095ca160b22e6ca750c46103dfd2b009447'],
+    }),
+    ('tcltk2', '1.2-11', {
+        'checksums': ['ad183ae3b7190501504a0589e0b3be480f04267303e3384fef00987446a37dc5'],
+    }),
+    ('readODS', '1.7.0', {
+        'checksums': ['f6a8ec724df68983c9b176a1b3b3b01239cc4e99aac4bfb42ce1c2b3d40922c2'],
+    }),
+    ('nortest', '1.0-4', {
+        'checksums': ['a3850a048181d5d059c1e74903437569873b430c915b709808237d71fee5209f'],
+    }),
+    ('EnvStats', '2.4.0', {
+        'checksums': ['49459e76412037b3d8021bd83ee93d140bc3e715a2a2282a347ef60061900514'],
+    }),
+    ('outliers', '0.14', {
+        'checksums': ['b6ce8f1db6442481546131def8253cabdf4472116d193daea7cb935d2b76986d'],
+    }),
+    ('elementR', '1.3.7', {
+        'checksums': ['4275f88f372a2efe96ccd0afc20f4f12be92f28c7db35c68b80bb0ffb2c2ab07'],
+    }),
+    ('gWidgets2', '1.0-8', {
+        'checksums': ['1615ce9ab07a251d06c68780be15ab5a4814df877a23aa93e0faf14ccd56d45c'],
+    }),
+    ('gWidgets2tcltk', '1.0-6', {
+        'modulename': False,
+        'preinstallopts': "xvfb-run ",
+        'checksums': ['aa3a2f4612116a652e5573a369e3d89c5939f7c06067c6826ba40ed3bb07302b'],
+    }),
+    ('mgsub', '1.7.3', {
+        'checksums': ['c9ae2560fe2690bedc5248af3fc89e7ef2bc6c147d46ced28f9824584c3791d5'],
+    }),
+    ('ie2misc', '0.8.6', {
+        'checksums': ['f3e2cc8a88f3789a5e339d2676455472a52a303c8273191f27aa2f2f02fdd8cd'],
+    }),
+    ('assertive.base', '0.0-9', {
+        'checksums': ['4bf0910b0eaa507e0e11c3c43c316b524500c548d307eb045d6f89047e6ba01e'],
+    }),
+    ('assertive.properties', '0.0-4', {
+        'checksums': ['5c0663fecb4b7c30f2e1d65da8644534fcfe97fb3d8b51f74c1327cd14291a6b'],
+    }),
+    ('assertive.types', '0.0-3', {
+        'checksums': ['ab6db2eb926e7bc885f2043fab679330aa336d07755375282d89bf9f9d0cb87f'],
+    }),
+    ('assertive.numbers', '0.0-2', {
+        'checksums': ['bae18c0b9e5b960a20636e127eb738ecd8a266e5fc29d8bc5ca712498cd68349'],
+    }),
+    ('assertive.strings', '0.0-3', {
+        'checksums': ['d541d608a01640347d661cc9a67af8202904142031a20caa270f1c83d0ccd258'],
+    }),
+    ('assertive.datetimes', '0.0-3', {
+        'checksums': ['014e2162f5a8d95138ed8330f7477e71c908a29341697c09a1b7198b7e012d94'],
+    }),
+    ('assertive.files', '0.0-2', {
+        'checksums': ['be6adda6f18a0427449249e44c2deff4444a123244b16fe82c92f15d24faee0a'],
+    }),
+    ('assertive.sets', '0.0-3', {
+        'checksums': ['876975a16ed911ea1ad12da284111c6eada6abfc0118585033abc0edb5801bb3'],
+    }),
+    ('assertive.matrices', '0.0-2', {
+        'checksums': ['3462a7a7e11d7cc24180330d48cc3067cf92eab1699b3e4813deec66d99f5e9b'],
+    }),
+    ('assertive.models', '0.0-2', {
+        'checksums': ['b9a6d8786f352d53371dbe8c5f2f2a62a7866e30313f268e69626d5c3691c42e'],
+    }),
+    ('assertive.data', '0.0-3', {
+        'checksums': ['5a00fb48ad870d9b3c872ce3d6aa20a7948687a980f49fe945b455339e789b01'],
+    }),
+    ('assertive.data.uk', '0.0-2', {
+        'checksums': ['ab48dab6977e8f43d6fffb33228d158865f68dde7026d123c693d77339dcf2bb'],
+    }),
+    ('assertive.data.us', '0.0-2', {
+        'checksums': ['180e64dfe6339d25dd27d7fe9e77619ef697ef6e5bb6a3cf4fb732a681bdfaad'],
+    }),
+    ('assertive.reflection', '0.0-5', {
+        'checksums': ['c2ca9b27cdddb9b9876351afd2ebfaf0fbe72c636cd12aa2af5d64e33fbf34bd'],
+    }),
+    ('assertive.code', '0.0-3', {
+        'checksums': ['ef80e8d1d683d776a7618e78ddccffca7f72ab4a0fcead90c670bb8f8cb90be2'],
+    }),
+    ('assertive', '0.3-6', {
+        'checksums': ['c403169e83c433b65e911f7fd640b378e2a4a4765a36063584b8458168a4ea0a'],
+    }),
+    ('rdrop2', '0.8.2.1', {
+        'checksums': ['b9add765fe8e7c966f0d36eef939a9e38f253958bd2a3c656b890cbb0366300b'],
+    }),
+    ('Exact', '3.0', {
+        'checksums': ['a76114e9780c86e4ea0a561300db024b95af9b0ebb6c3bf9a7598d276d009529'],
+    }),
+    ('lmom', '2.8', {
+        'checksums': ['cae2a925c39429d8e9f91bdb2682ea0d1343e9b2e5c9e8752c5929eb5f20d2d2'],
+    }),
+    ('gld', '2.6.2', {
+        'checksums': ['915860ac054ba4d29854c7d274e9c927995c5df2a7d4a6a0122b1fbc4a3c3cf3'],
+    }),
+    ('DescTools', '0.99.43', {
+        'checksums': ['8c3c4e5975428b9f2817907931449cd704d3df0e19e4337010f0dee333e7a4ff'],
+    }),
+    ('orthopolynom', '1.0-5', {
+        'checksums': ['6da4f437aae5c8fafdf791ce3c6a66f68198df4054af3aab8406402a4dc770bf'],
+    }),
+    ('gaussquad', '1.0-2', {
+        'checksums': ['ba3a1ab6ffe92f592c9f2bb1d4070f1fb1019325226dcb4863cf725eb59e9b2d'],
+    }),
+    ('nlsem', '0.8', {
+        'checksums': ['495a5d07aa5f59efdcd43acf429ae842453abd6c0720a80e2102d663fa997c60'],
+    }),
+    ('tableone', '0.13.0', {
+        'checksums': ['1c73a5a7595dc0ae2299d17c74738e077984af7d5429e4858b7be3c55e121346'],
+    }),
+    ('jstable', '1.0.7', {
+        'checksums': ['a8f66172973dc75d1d751d7015e0f028c441263f6649909bd25fa944be0042c3'],
+    }),
+    ('RCAL', '2.0', {
+        'checksums': ['10f5f938a8322d8737159e1e49ce9d12419a5130699b8a19c6ca53d6508da8cc'],
+    }),
+    ('stargazer', '5.2.2', {
+        'checksums': ['70eb4a13a6ac1bfb35af07cb8a63d501ad38dfd9817fc3fba6724260b23932de'],
+    }),
+    ('sensemakr', '0.1.4', {
+        'checksums': ['6a1354f05392fa9343b90f69a54022c995651fb3c3d05cb08fa088ef52258caf'],
+    }),
+    ('CompQuadForm', '1.4.3', {
+        'checksums': ['042fc56c800dd8f5f47a017e2efa832caf74f0602824abf7099898d9708660c4'],
+    }),
+    ('nonnest2', '0.5-5', {
+        'checksums': ['027f510e322122fc75c936251a95ddd392f96047ac86e0fae6cf8f883ac7aab5'],
+    }),
+    ('blavaan', '0.3-17', {
+        'checksums': ['ada14fcc665a22f11fc57392d70141c398d85dbb35f0a3373a501bc51d27f1e5'],
+    }),
+    ('mathjaxr', '1.4-0', {
+        'checksums': ['ba57378236d593a39c5839054adc5473526de0c8f05b7eeb87c99438496ddc67'],
+    }),
+    ('metafor', '3.0-2', {
+        'checksums': ['02df435197b225da736103edf73d19253a542bc31fc0b99610c02daec434138a'],
+    }),
+    ('fmri', '1.9.6', {
+        'checksums': ['7614290d880667512744d3450480a670cc38abdb270f3f776ac9a17a793f07f2'],
+    }),
+    ('AnalyzeFMRI', '1.1-24', {
+        'checksums': ['0d2acfe9ce8f25eb5cc9e6ef1db3ea8e232a31d46a95e50914489b1997e17062'],
+    }),
+    ('linkcomm', '1.0-14', {
+        'checksums': ['36f1557c65d862fc87635eedfad77f18a5deb66da00895e50e2d5eac0f23b597'],
+    }),
+    ('rnetcarto', '0.2.4', {
+        'checksums': ['266702330250e9fbeb8616d86edf1d50d63084a0731d17e84a04dc6faacf653a'],
+    }),
+    ('DEoptim', '2.2-6', {
+        'checksums': ['8c63397d83a067212d003ef3e639fd81f5f00bf61e3c271b4e4999031a69e2e1'],
+    }),
+    ('optextras', '2019-12.4', {
+        'checksums': ['59006383860826be502ea8757e39ed94338f04d246c4fc398a088e004d8b13eb'],
+    }),
+    ('setRNG', '2013.9-1', {
+        'checksums': ['1a1a399682a06a5fea3934985ebb1334005676c6a2a22d06f3c91c3923432908'],
+    }),
+    ('Rvmmin', '2018-4.17.1', {
+        'checksums': ['55000ac4ff57d42f172c46c7d6b0a603da3b65866d6440d6b32bac4d2b81814e'],
+    }),
+    ('Rcgmin', '2013-2.21', {
+        'checksums': ['a824a09c32d7565a3e30607c71333506d5b7197478fbe8b43f8a77dad6c12f0a'],
+    }),
+    ('optimr', '2019-12.16', {
+        'checksums': ['73b1ed560ffd74599517e8baa4c5b293aa062e9c8d50219a3a24b63e72fa7c00'],
+    }),
+    ('DMCfun', '2.0.2', {
+        'checksums': ['430cbc18f17db11a7941e6a8274a0eefbb8a6b0bdac8800970530d60d5881fde'],
+    }),
+    ('miceadds', '3.11-6', {
+        'checksums': ['121d03c812fbcf584a25585ac73f6c44f4b5d6cd21b05362ddd15395fb3909f6'],
+    }),
+    ('visdat', '0.5.3', {
+        'checksums': ['527c76b6643b8475a58516763ef40238cdc61ec62d2dcf690f7c316b93b878c6'],
+    }),
+    ('UpSetR', '1.4.0', {
+        'checksums': ['351e5fee64204cf77fd378cf2a2c0456cc19d4d98a2fd5f3dac74b69a505f100'],
+    }),
+    ('norm', '1.0-9.5', {
+        'checksums': ['305cbf007f3905cfd535ed9bf5ae3e2995e228cc8883d6482e5d3a2f02814106'],
+    }),
+    ('naniar', '0.6.1', {
+        'checksums': ['d546ca15bf6c224f3103eb1441abef91d34feebb7320c2398d598f5d50177450'],
+    }),
+    ('stringdist', '0.9.8', {
+        'checksums': ['efccd6ccc5c74c578be95b7dae1099c52b0d7805452ab14ee91ca34adb8261bb'],
+    }),
+    ('image.binarization', '0.1.2', {
+        'checksums': ['0621ca94a74264bb73f689b1a00484b5a3bbef93fc203d9c001d791a18fcc13f'],
+    }),
+    ('lassosum', '0.4.5', {
+        'source_urls': ['https://github.com/tshmak/%(name)s/releases/download/v%(version)s/'],
+        'sources': ['%(name)s_%(version)s.tar.gz'],
+        'checksums': ['18c0d0b5022bcf81a9bf1b3b6647da3e080f221828b473ea2a45a9bf98474fbc'],
+    }),
+    ('lslx', '0.6.10', {
+        'checksums': ['adc2b2a621625b52165245ab2f3a0bfba4f4db64fcc6ad48a3e5b219c3bd2fa1'],
+    }),
+    ('truncnorm', '1.0-8', {
+        'checksums': ['49564e8d87063cf9610201fbc833859ed01935cc0581b9e21c42a0d21a47c87e'],
+    }),
+    ('Rsolnp', '1.16', {
+        'checksums': ['3142776062beb8e2b45cdbc4fe6e5446b6d33505253d79f2890fe4178d9cf670'],
+    }),
+    ('regsem', '1.8.0', {
+        'checksums': ['28ff1c2dbddcafc6ed6c30154f46074aa0c8974757466680529b71a5f3e463ec'],
+    }),
+    ('semPLS', '1.0-10', {
+        'checksums': ['cb587ccfdaf970f426dc7146035c7e010b1c51c17bf4fc089fd796eda58db460'],
+    }),
+    ('GxEScanR', '2.0.2', {
+        'checksums': ['6d42fd15d83dd1491405b282d26fa472f9f9902a9dc68836d6a48b459ada6a4c'],
+    }),
+    ('alabama', '2015.3-1', {
+        'checksums': ['6600fcf4842488950e196d3f5a8fc4d69e8271b36292ce67ac3ab697449a8f56'],
+    }),
+    ('polycor', '0.7-10', {
+        'checksums': ['caea3beca2c889e12e5b976c20c19cf5a76d42e6329e9ab646112eeae8fcfc73'],
+    }),
+    ('multipol', '1.0-7', {
+        'checksums': ['0abe3c894c0d8e928a920e73708a397133386a0d73a1e7952c4075afe67879e6'],
+    }),
+    ('symmoments', '1.2.1', {
+        'checksums': ['9a6be1f8fe44f6ab5a1790e870fd8b18de1686a48a14a9fca2d035bfb5458672'],
+    }),
+    ('cSEM', '0.4.0', {
+        'checksums': ['7753ac7db9d2c0392e51dd31ec8638e1a7fcbb2546dd9103f5ecc03dd51836c1'],
+    }),
+    ('cubelyr', '1.0.1', {
+        'checksums': ['740a34100592b2c6b7bc89a31bddccf4c8fd95720caf68f530104f17aada77bc'],
+    }),
+    ('broom.mixed', '0.2.7', {
+        'checksums': ['ff29385557af239a41452ffb5ebe230630a2a30f4a91e95505c3178b62df01ba'],
+    }),
+    ('DiceKriging', '1.6.0', {
+        'checksums': ['ab5d1332809f2bb16d156ed234b102eb9fbd6de792e4291f9f6ea4652215cb49'],
+    }),
+    ('grf', '2.0.2', {
+        'checksums': ['043f21a057762a2d5e0febb37c1d9cb8d2f94d19f2eded20c672dec7ff54b505'],
+    }),
+    ('xgboost', '1.4.1.1', {
+        'checksums': ['9f986f3895ce5f6744335c82afe3a87d9ac2e473e60785295edf2be80d34e0c4'],
+    }),
+    ('twang', '2.5', {
+        'checksums': ['fc355527c57e4f6e0f60d26d7c690c4475fcd5fb165d125fea7cc6b9fafc4ce5'],
+    }),
+    ('neuralnet', '1.44.2', {
+        'checksums': ['5f66cd255db633322c0bd158b9320cac5ceff2d56f93e4864a0540f936028826'],
+    }),
+    ('PCAmatchR', '0.3.0', {
+        'checksums': ['73876c6d1cf42928a03a64aba197c67b4a4f4de2c431cfbc6fce615bbea32fa0'],
+    }),
+    ('origami', '1.0.5', {
+        'checksums': ['8d0d08aaecc428cbbf5db4615ad3623777c10c6d7947a1cc3ccc7f8db8cb5263'],
+    }),
+    ('hal9001', '0.4.1', {
+        'checksums': ['386fa93ae6c0f409a9137adc54da25a2770826fbed63787e33a36c95f3f89441'],
+    }),
+    ('cobalt', '4.3.1', {
+        'checksums': ['67e26a700ca083a39beb255df54c6ab495f34ea5847a0bf1c4bac895e980eef8'],
+    }),
+    ('CBPS', '0.22', {
+        'checksums': ['d19247e6765f02737d15a0a2ee86ae24e7206ae740dfaa61821622eb3a309aef'],
+    }),
+    ('SBdecomp', '1.1', {
+        'checksums': ['ad4e4f00bc58eafe551ad6288c0642a16e16ef8f73c2ae649f808b1e559df644'],
+    }),
+    ('naturalsort', '0.1.3', {
+        'checksums': ['cd38a9c5f323f61459e6096cdbf4493851d40497baf671af4f8dfe9a7c00e857'],
+    }),
+    ('lwgeom', '0.2-8', {
+        'checksums': ['f48a92de222da0590b37a30d5cbf2364555044a842795f6b488afecc650b8b34'],
+    }),
+    ('finalfit', '1.0.3', {
+        'checksums': ['bbfa841a2b1a7b1f8c153d773ff076a2e465e451815f8166ff0ce8c4018ff61e'],
+    }),
+    ('broom.helpers', '1.4.0', {
+        'checksums': ['7f6a5c0c79260b57cd31976bc216fffbc79a1641e01b74630dcd37d2c84e3f75'],
+    }),
+    ('gt', '0.3.1', {
+        'checksums': ['ddd1fee446f156d1b52bb2db83262aac2a896db93748e92e08407d317e126019'],
+    }),
+    ('gtsummary', '1.5.0', {
+        'checksums': ['54dd5e11c5b2a808ca93284760a5cd102f820332d2fa40474d5cedea030711a7'],
+    }),
+    ('ncdf4', '1.17', {
+        'checksums': ['db95c4729d3187d1a56dfd019958216f442be6221bd15e23cd597e6129219af6'],
+    }),
+    ('geex', '1.0.12', {
+        'checksums': ['037aece09bc0c4349897cd1d8f5dcf1e680598cdfdf72148b6d1506e02690e7f'],
+    }),
+    ('momentfit', '0.2', {
+        'checksums': ['a10d43ac23bb61b9c67efa4800e3e2b6a444c1afaca8bad351648accd7e003f6'],
+    }),
+    ('StatMatch', '1.4.0', {
+        'checksums': ['820091cd2213734ea16f5fcd616491bbf39d3e6c2bcfb34a7c9fe09f4fd1a459'],
+    }),
+    ('stars', '0.5-3', {
+        'checksums': ['44944a82af36bea09ac1874ff9647acbb7fef021ebdca5aae7c34794be929401'],
+    }),
+    ('rapidjsonr', '1.2.0', {
+        'checksums': ['62c94fcdcf5d0fbdfa2f6168affe526bf547c37c16d94e2e1b78d7bf608eed1f'],
+    }),
+    ('jsonify', '1.2.1', {
+        'checksums': ['929191ab32e34af6a02ad991e29314cc78ea40763fcf232388ef2d132137fbce'],
+    }),
+    ('geometries', '0.2.0', {
+        'checksums': ['8cf5094f3c2458fef5d755799c766afd27c66cd1c292574a6ab532d608360314'],
+    }),
+    ('sfheaders', '0.4.0', {
+        'checksums': ['86bcd61018a0491fc8a1e7fb0422c918296287b82be299a79ccee8fcb515e045'],
+    }),
+    ('geojsonsf', '2.0.1', {
+        'checksums': ['42df40433bfbece5a39cd97b5bd4690b4424855241fcc3e7322ee68a3988bfbf'],
+    }),
+    ('leaflet.providers', '1.9.0', {
+        'checksums': ['9e8fc75c83313ab24663c2e718135459599549ed6e7396086cacb44e36cfd67b'],
+    }),
+    ('leaflet', '2.0.4.1', {
+        'checksums': ['b0f038295f1de5d32d9ffa1d0dbc1562320190f2f1365f3a5e95863fff88901f'],
+    }),
+    ('leafsync', '0.1.0', {
+        'checksums': ['7d8fd8dbbbf66417cf32575f14c0fe68199762ecf1c036c7905c7c5ff859d75c'],
+    }),
+    ('leafem', '0.1.6', {
+        'checksums': ['ca50e0a699f564449248511857a2df0d48cd07de3157e099478a19b533088156'],
+    }),
+    ('widgetframe', '0.3.1', {
+        'checksums': ['44089a2cf8b0941a6f3da55da36353e2f44653ca58bfec7960ee5b71ea380d48'],
+    }),
+    ('tmaptools', '3.1-1', {
+        'checksums': ['fd89cb0d7fb44e0a5dd5311fa3e75a729746bf2e8e158d5ec423e5963f1b542d'],
+    }),
+    ('tmap', '3.3-2', {
+        'checksums': ['2bcb74c5c5546223d79abe5d633581fb2664b910f6246f4b8b7166b208b4629a'],
+    }),
+    ('collapse', '1.6.5', {
+        'checksums': ['1e232a3a62b5eb5ed5d81e7d92ce1bae34c3d877d593d47d7edbd3f515b95a46'],
+    }),
+    ('genoPlotR', '0.8.11', {
+        'checksums': ['f127f7fe8b19c899ecfdf98bf69d2e18926afb593a72fc40097acca66d401607'],
+    }),
+    ('VineCopula', '2.4.3', {
+        'checksums': ['42727aa7345ab544242182222eb97476f5dc04bc837f94f6fd3ea6ccac93ea17'],
+    }),
+    ('Rmpfr', '0.8-7', {
+        'checksums': ['93c2db785ff705dcfc6fa7f0373c2426cdc2ef72ceb5b294edeb2952775f57d2'],
+    }),
+    ('scam', '1.2-12', {
+        'checksums': ['0ce5f844221370884719424eb5b2b22c34a8a8ad64eac3de981e5539b6e88f4a'],
+    }),
+    ('copula', '1.0-1', {
+        'checksums': ['d09b2ccffc7379e48b00952aa6b282baf502feebaf55cc44e93f881d7b909742'],
+    }),
+    ('evd', '2.3-3', {
+        'checksums': ['2fc5ef2e0c3a2a9392425ddd45914445497433d90fb80b8c363877baee4559b4'],
+    }),
+    ('ismev', '1.42', {
+        'checksums': ['0d57fbeca83bd478e84fcff795967d51d8448c629abe7adc6c4c18c7fb8bf1a5'],
+    }),
+    ('GJRM', '0.2-5.1', {
+        'checksums': ['516dd73c70e5c8ab60b24027f94cab42603797c41cb7aa740882cb850f6d6ab4'],
+    }),
+    ('penfa', '0.1.1', {
+        'checksums': ['a22a8ac3d4a040c77e50ddc92328c1989eae536d79fe56013e9372ba27c114e5'],
+    }),
+    ('rngWELL', '0.10-7', {
+        'checksums': ['0c00c54e69d7d552cfa08d766e4854c01c6c1c8e2c558f387760b91a55ef2d38'],
+    }),
+    ('randtoolbox', '1.31.1', {
+        'checksums': ['30992e8156782542e9a2bffb75eb2e35f6d302a8c22cb7c3ed9004f0f0973bad'],
+    }),
+    ('kde1d', '1.0.3', {
+        'checksums': ['d645652d09f1981eb37be9f041034da9b9191885dd38be8a7e485e5e41eb050e'],
+    }),
+    ('RcppThread', '1.0.0', {
+        'checksums': ['544a48ee4ea381e2e1421d4edbec54365f17059084d94ded7c339de36deeccf5'],
+    }),
+    ('wdm', '0.2.2', {
+        'checksums': ['11c616f0896d62993f5eee1daf7b021d27f13751f6617067b57cf463aea32dde'],
+    }),
+    ('rvinecopulib', '0.6.1.1.1', {
+        'checksums': ['779fd288774ebb1a0adde6b960053e5c63750bfa66d5ddf349e0f1d8730f08cd'],
+    }),
+    ('PearsonDS', '1.2.1', {
+        'checksums': ['354be30b8df4e5432d1bc2b6162900522d4c08dc63b207331819d589fb069824'],
+    }),
+    ('covsim', '0.2.1', {
+        'checksums': ['57ca810c6950ab295078b745eb87fdd7f195e15082777eed9f1059b6302f13bf'],
+    }),
+    ('semTools', '0.5-5', {
+        'checksums': ['ddf883753c5964eae8313d7e8a4703be52e649f10d3bc1d12ede6d1707b1fab6'],
+    }),
+    ('GPArotation', '2014.11-1', {
+        'checksums': ['351bc15fc8dc6c8ea5045fbba22180d1e68314fc34d267545687748e312e5096'],
+    }),
+    ('dcurver', '0.9.2', {
+        'checksums': ['cc6c55090d3607910515981ea0c7221e40e7a29e0da0c5a5f42c3847012290ec'],
+    }),
+    ('mirt', '1.35.1', {
+        'checksums': ['788b7e499b7d48f5f590eb5cfdac260c4e993b94a3956d30bc2d8bce8cd2ba3e'],
+    }),
+    ('rpf', '1.0.11', {
+        'checksums': ['e1fd670ae7c3e947db08ce50d6b16ce1b3b8f63a9016b03baba760aee78921fb'],
+    }),
+    ('OpenMx', '2.19.8', {
+        'checksums': ['cb4be9850f61d320dcd47ef0ad7b20e5baafde558ebbc67301b13d883baf6760'],
+    }),
+]
+
+moduleclass = 'lang'
diff --git a/Golden_Repo/r/Ruby/Ruby-3.0.1-GCCcore-11.2.0.eb b/Golden_Repo/r/Ruby/Ruby-3.0.1-GCCcore-11.2.0.eb
index d06c0333e33796b25189e4a9e1a845006c464dc6..9ace71cebc79d2adcbed11d77ebd478c24405037 100644
--- a/Golden_Repo/r/Ruby/Ruby-3.0.1-GCCcore-11.2.0.eb
+++ b/Golden_Repo/r/Ruby/Ruby-3.0.1-GCCcore-11.2.0.eb
@@ -28,20 +28,20 @@ exts_default_options = {
 # each version is picked as high as possible to fullfill all requirements
 # packages updated on 2021-07-02
 exts_list = [
-    ('ffi', '1.15.3', {
-        'checksums': ['98d5c5c4281c9c0466acc60cf0e79124bf3c311417fd97e7473e41722953fbf1'],
+    ('ffi', '1.15.5', {
+        'checksums': ['6f2ed2fa68047962d6072b964420cba91d82ce6fa8ee251950c17fca6af3c2a0'],
     }),
     ('childprocess', '4.1.0', {
         'checksums': ['3616ce99ccb242361ce7f2b19bf9ff3e6bc1d98b927c7edc29af8ca617ba6cd3'],
     }),
-    ('json', '2.5.1', {
-        'checksums': ['918d8c41dacb7cfdbe0c7bbd6014a5372f0cf1c454ca150e9f4010fe80cc3153'],
+    ('json', '2.6.1', {
+        'checksums': ['7ff682a2db805d6b924e4e87341c3c0036824713a23c58ca53267ce7e5ce2ffd'],
     }),
     ('cabin', '0.9.0', {
         'checksums': ['91c5394289e993e7037a6c869e3f212f31a5984d2b1811ac934f591c87446b2c'],
     }),
-    ('backports', '3.21.0', {
-        'checksums': ['f9394457cb1dd5ca1b7bdc0dfbbd8f56f5cde40f45f96bc90f0f895a87e41b77'],
+    ('backports', '3.23.0', {
+        'checksums': ['88fc26a40083a51015faa2ba02cbdc3605cb59f183cf0868f4fb3ac02900148f'],
     }),
     ('arr-pm', '0.0.11', {
         'checksums': ['f1ab088421276f446da1971c5071defd1504855ec46e196815fa43cd62d61a9f'],
@@ -52,17 +52,17 @@ exts_list = [
     ('multipart-post', '2.1.1', {
         'checksums': ['d2dd7aa957650e0d99e0513cd388401b069f09528441b87d884609c8e94ffcfd'],
     }),
-    ('ruby2_keywords', '0.0.4', {
-        'checksums': ['3ae3189c2e1d2f60204dcceedf890ff49dd28979771e2576016a3ee73b668e97'],
+    ('ruby2_keywords', '0.0.5', {
+        'checksums': ['ffd13740c573b7301cf7a2e61fc857b2a8e3d3aff32545d6f8300d8bae10e3ef'],
     }),
-    ('faraday-net_http', '1.0.1', {
-        'checksums': ['3245ce406ebb77b40e17a77bfa66191dda04be2fd4e13a78d8a4305854d328ba'],
+    ('faraday-net_http', '2.0.1', {
+        'checksums': ['f867b028552c3cf018b9293b58b993dc238ba62683568b3e194c673afe62d700'],
     }),
-    ('faraday', '1.3.0', {
-        'checksums': ['7f06817ba823ddeabf4dd85ca5e0f63e234527f564a03f09f6c7127951d3bac2'],
+    ('faraday', '1.0.0', {
+        'checksums': ['e67631809ae5633a1d2b03adfa83939a91a095f6dc61a1f322826612613dd687'],
     }),
-    ('faraday_middleware', '1.0.0', {
-        'checksums': ['19e808539681bbf2e65df30dfbe27bb402bde916a1dceb4c7496dbe8de14334a'],
+    ('faraday_middleware', '1.2.0', {
+        'checksums': ['ded15d574d50e92bd04448d5566913af5cb1a01b2fa311ceecc2464fa0ab88af'],
     }),
     ('highline', '2.0.3', {
         'checksums': ['2ddd5c127d4692721486f91737307236fe005352d12a4202e26c48614f719479'],
@@ -82,17 +82,17 @@ exts_list = [
     ('public_suffix', '4.0.6', {
         'checksums': ['a99967c7b2d1d2eb00e1142e60de06a1a6471e82af574b330e9af375e87c0cf7'],
     }),
-    ('addressable', '2.7.0', {
-        'checksums': ['5e9b62fe1239091ea9b2893cd00ffe1bcbdd9371f4e1d35fac595c98c5856cbb'],
+    ('addressable', '2.8.0', {
+        'checksums': ['f76d29d2d1f54b6c6a49aec58f9583b08d97e088c227a3fcba92f6c6531d5908'],
     }),
     ('concurrent-ruby', '1.1.9', {
         'checksums': ['0ec0846d991c38f355b4228ad8ea77aa69c3fdaa320cd574dafedc10c4688a5b'],
     }),
-    ('i18n', '1.8.10', {
-        'checksums': ['ca24e52fdd6ad7af419241eef8c41e65ef4e3499c6b252df13f697919eb24e3c'],
+    ('i18n', '1.8.11', {
+        'checksums': ['ae133354590b49070b87c83f8fe8cc064ffdc40ca76364535e100312e30cad6d'],
     }),
-    ('minitest', '5.14.4', {
-        'checksums': ['f4716634d71b3ffb627cd63ba4f6f0f77c7a3f17353b1bdf52c8a7f2e0e4e7a7'],
+    ('minitest', '5.15.0', {
+        'checksums': ['6d2d5bfa301257ef2c2fe8818abeaa0932ed54735c8ed039459cb4f85029ae1b'],
     }),
     ('thread_safe', '0.3.6', {
         'checksums': ['9ed7072821b51c57e8d6b7011a8e282e25aeea3a4065eab326e43f66f063b05a'],
@@ -100,11 +100,11 @@ exts_list = [
     ('tzinfo', '1.1.0', {
         'checksums': ['715a47c25f8e4c2f106c92d5a97e612f84eb7e85f5822bf3d6cf615b44492abc'],
     }),
-    ('zeitwerk', '2.4.2', {
-        'checksums': ['f4d6279b0ef0cb35c9e1bddbcecd6b148df82f1cf7b8023ac03d6625f567869c'],
+    ('zeitwerk', '2.5.3', {
+        'checksums': ['ddfeb36d24444b10f402cae2ee5a05c580f54115ae25bcf2ac29bf814c4faf52'],
     }),
-    ('activesupport', '5.0.7.2', {
-        'checksums': ['f75cc67fb08421bdf4c2a383a47d9b3b02ce5eec4749704b1286fb0c12c98bad'],
+    ('activesupport', '5.2.6', {
+        'checksums': ['7249ee13859fc99ed2c833048674fd28c11605c679f1c65035190a2219e9cbef'],
     }),
     ('gh', '0.18.0', {
         'checksums': ['eb93f18a88db3ba92eb888610fc53fae731d9dacfe55922b58cc3f3aca776a47'],
@@ -112,8 +112,8 @@ exts_list = [
     ('launchy', '2.5.0', {
         'checksums': ['954243c4255920982ce682f89a42e76372dba94770bf09c23a523e204bdebef5'],
     }),
-    ('ethon', '0.14.0', {
-        'checksums': ['10e267a39d7e2a92d944e5681ba46dbd211b5b5b6cf9b51afb769b8417247ead'],
+    ('ethon', '0.15.0', {
+        'checksums': ['0809805a035bc10f54162ca99f15ded49e428e0488bcfe1c08c821e18261a74d'],
     }),
     ('typhoeus', '1.4.0', {
         'checksums': ['fff9880d5dc35950e7706cf132fd297f377c049101794be1cf01c95567f642d4'],
@@ -124,11 +124,11 @@ exts_list = [
     ('pusher-client', '0.6.2', {
         'checksums': ['c405c931090e126c056d99f6b69a01b1bcb6cbfdde02389c93e7d547c6efd5a3'],
     }),
-    ('diff-lcs', '1.4.4', {
-        'checksums': ['bf3a658875f70c1467fe7a3b302b795f074c84b28db6e4a2bd6b1ad6d12a2255'],
+    ('diff-lcs', '1.5.0', {
+        'checksums': ['49b934001c8c6aedb37ba19daec5c634da27b318a7a3c654ae979d6ba1929b67'],
     }),
-    ('rspec-support', '3.10.2', {
-        'checksums': ['74315f89069fbaf2a710e2117340373b77ee45eceb026de87e0cad9dd5154596'],
+    ('rspec-support', '3.10.3', {
+        'checksums': ['65c88f8cbe579461f411097682e6402960eae327eef08e86ef581b8c609e4c5e'],
     }),
     ('rspec-mocks', '3.10.2', {
         'checksums': ['93fc76e312c3d19cacc1cb2eb64bf82731de2e216295cf2b4d0ce31ba77923b4'],
@@ -160,27 +160,27 @@ exts_list = [
     ('rack-test', '1.1.0', {
         'checksums': ['154161f40f162b1c009a655b7b0c5de3a3102cc6d7d2e94b64e1f46ace800866'],
     }),
-    ('bundler', '2.2.21', {
-        'checksums': ['3c8dc5e0cf66d385a9b33751e54986290d42023c5e1bba2b5df094917b6e234a'],
+    ('bundler', '2.3.5', {
+        'checksums': ['2553cbd138b466bc56a3c724c5c28648dff8e2343b13a7c696cf9c2818c8d629'],
     }),
     # for Jupyter kernel
-    ('mime-types-data', '3.2021.0704', {
-        'checksums': ['9ecd5aa031d5483156cd7a4e7d1956881d75f7ed8c08d487900df8580ee39d36'],
+    ('mime-types-data', '3.2022.0105', {
+        'checksums': ['d8c401ba9ea8b648b7145b90081789ec714e91fd625d82c5040079c5ea696f00'],
     }),
-    ('mime-types', '3.3.1', {
-        'checksums': ['708f737e28ceef48b9a1bc041aa9eec46fa36eb36acb95e6b64a9889131541fe'],
+    ('mime-types', '3.4.1', {
+        'checksums': ['6bcf8b0e656b6ae9977bdc1351ef211d0383252d2f759a59ef4bcf254542fc46'],
     }),
     ('data_uri', '0.1.0', {
         'checksums': ['7eb2f63487ccb943fae0eca561729c48d4d5654d76f8330aa16ed1dcdbebf33b'],
     }),
-    ('io-console', '0.5.9', {
-        'checksums': ['4aaefa9e601433071a92a4761a9f0ceb6507975d31ac75a6bd2a7c043b77aa5e'],
+    ('io-console', '0.5.11', {
+        'checksums': ['7e2418376fd185ad66e7aee2c58c207e9be0f2197aa89bc4c89931995cee3365'],
     }),
-    ('reline', '0.2.6', {
-        'checksums': ['ea2f3c3209feb17594dbd33242719fa24ca0fd29a63a1b49d2a6035e265a5183'],
+    ('reline', '0.3.1', {
+        'checksums': ['b101d93607bf7564657f082f68abfa19ae939d14a709eff89be048eae2d7f4c7'],
     }),
-    ('irb', '1.3.6', {
-        'checksums': ['79c73e1cada8aee635a07a0dbb443fc6bfac357903d277476505d8700b949e68'],
+    ('irb', '1.4.1', {
+        'checksums': ['4a6698d9ab9de30ffd2def6fb17327f5d0fc089ace62337eff95396f379bf0a8'],
     }),
     ('multi_json', '1.15.0', {
         'checksums': ['1fd04138b6e4a90017e8d1b804c039031399866ff3fbabb7822aea367c78615d'],
@@ -191,8 +191,11 @@ exts_list = [
     ('ffi-rzmq', '2.0.7', {
         'checksums': ['2feb3bc5bf46df633e2211514ac408521df0c198f54134fdb38322675d9f4591'],
     }),
-    ('iruby', '0.7.3', {
-        'checksums': ['04d49dc6024168b67ab29a2458eae3e567756223a1e5eeb285b8ecfaad6e8fc3'],
+    ('native-package-installer', '1.1.3', {
+        'checksums': ['ba899df70489b748a3fe1b48afe6325d1cb8ca67fdff759266c275b911c797dd'],
+    }),
+    ('iruby', '0.7.4', {
+        'checksums': ['cc219e2ac797c3fbf8c2b937ee7d26547723c8ae0e5ad65f2975aa3325b3a620'],
     }),
 ]
 
diff --git a/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gomkl-2021b.eb b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gomkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..69a041832d1c575bc3421497fa1ec771ae191db1
--- /dev/null
+++ b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gomkl-2021b.eb
@@ -0,0 +1,71 @@
+name = 'SUNDIALS'
+version = '6.1.0'
+
+homepage = 'https://computation.llnl.gov/casc/sundials/'
+description = """SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers.  It consists of the
+following six solvers: CVODE, solves initial value problems for ordinary differential equation (ODE) systems; CVODES,
+solves ODE systems and includes sensitivity analysis capabilities (forward and adjoint); ARKODE, solves initial value
+ODE problems with additive Runge-Kutta methods, include support for IMEX methods; IDA, solves initial value problems for
+differential-algebraic equation (DAE) systems; IDAS, solves DAE systems and includes sensitivity analysis capabilities
+(forward and adjoint); KINSOL, solves nonlinear algebraic systems.
+"""
+
+examples = 'Examples can be found in $EBROOTSUNDIALS/examples'
+
+toolchain = {'name': 'gomkl', 'version': '2021b'}
+toolchainopts = {'openmp': True, 'usempi': True, 'pic': True}
+
+source_urls = ['https://github.com/LLNL/sundials/releases/download/v%(version)s/']
+sources = [SOURCELOWER_TAR_GZ]
+checksums = ['eea49f52140640e54931c779e73aece65f34efa996a26b2263db6a1e27d0901c']
+
+builddependencies = [
+    ('CMake', '3.21.1', '', SYSTEM),
+]
+
+separate_build_dir = 'True'
+
+preconfigopts = 'export CUDA_TOOLKIT_ROOT_DIR=$EBROOTCUDA && '
+
+configopts = '-DBUILD_SHARED_LIBS=ON '
+configopts += '-DENABLE_MPI=ON '
+configopts += '-DENABLE_FORTRAN=ON '
+configopts += '-DBUILD_FORTRAN_MODULE_INTERFACE=ON '
+configopts += '-DEXAMPLES_ENABLE_F2003=ON '
+configopts += '-DENABLE_OPENMP=ON '
+configopts += '-DEXAMPLES_ENABLE_CXX=ON '
+configopts += '-DSUNDIALS_BUILD_PACKAGE_FUSED_KERNELS=ON '
+configopts += '-DENABLE_LAPACK=ON -DLAPACK_LIBRARIES="$LIBLAPACK" '
+configopts += '-DENABLE_CUDA=ON '
+configopts += '-DCMAKE_C_STANDARD=17 '
+configopts += '-DCMAKE_C_COMPILER=mpicc '
+
+
+postinstallcmds = [
+    "cp -r examples %(installdir)s/examples",
+    "ln -s %(installdir)s/lib64 %(installdir)s/lib",
+]
+
+local_solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol']
+
+sanity_check_paths = {
+    'files': ['lib/libsundials_%s.a' % s for s in local_solvers +
+              ['nvecopenmp', 'nvecparallel', 'nvecserial']] +
+             ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in local_solvers +
+              ['nvecopenmp', 'nvecparallel', 'nvecserial']],
+    'dirs': ['examples/%s' % s for s in local_solvers] +
+            ['include/%s' % s for s in local_solvers] +
+            ['examples/nvector', 'include/nvector', 'include/sundials'],
+}
+
+postinstallcmds = [
+    'cp %(builddir)s/sundials-%(version)s/src/sundials/sundials_context_impl.h %(installdir)s/include',
+]
+
+modextravars = {
+    'SUNDIALS_ROOT': '%(installdir)s',
+    'SUNDIALS_LIB': '%(installdir)s/lib64',
+    'SUNDIALS_INCLUDE': '%(installdir)s/include'
+}
+
+moduleclass = 'math'
diff --git a/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gpsmkl-2021b.eb b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gpsmkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..d9aede91a27b5e5226b431bce3042008cf8527be
--- /dev/null
+++ b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gpsmkl-2021b.eb
@@ -0,0 +1,70 @@
+name = 'SUNDIALS'
+version = '6.1.0'
+
+homepage = 'https://computation.llnl.gov/casc/sundials/'
+description = """SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers.  It consists of the
+following six solvers: CVODE, solves initial value problems for ordinary differential equation (ODE) systems; CVODES,
+solves ODE systems and includes sensitivity analysis capabilities (forward and adjoint); ARKODE, solves initial value
+ODE problems with additive Runge-Kutta methods, include support for IMEX methods; IDA, solves initial value problems for
+differential-algebraic equation (DAE) systems; IDAS, solves DAE systems and includes sensitivity analysis capabilities
+(forward and adjoint); KINSOL, solves nonlinear algebraic systems.
+"""
+
+examples = 'Examples can be found in $EBROOTSUNDIALS/examples'
+
+toolchain = {'name': 'gpsmkl', 'version': '2021b'}
+toolchainopts = {'openmp': True, 'usempi': True, 'pic': True}
+
+source_urls = ['https://github.com/LLNL/sundials/releases/download/v%(version)s/']
+sources = [SOURCELOWER_TAR_GZ]
+checksums = ['eea49f52140640e54931c779e73aece65f34efa996a26b2263db6a1e27d0901c']
+
+builddependencies = [
+    ('CMake', '3.21.1', '', SYSTEM),
+]
+
+separate_build_dir = 'True'
+
+preconfigopts = 'export CUDA_TOOLKIT_ROOT_DIR=$EBROOTCUDA && '
+
+configopts = '-DBUILD_SHARED_LIBS=ON '
+configopts += '-DENABLE_MPI=ON '
+configopts += '-DENABLE_FORTRAN=ON '
+configopts += '-DBUILD_FORTRAN_MODULE_INTERFACE=ON '
+configopts += '-DEXAMPLES_ENABLE_F2003=ON '
+configopts += '-DENABLE_OPENMP=ON '
+configopts += '-DEXAMPLES_ENABLE_CXX=ON '
+configopts += '-DSUNDIALS_BUILD_PACKAGE_FUSED_KERNELS=ON '
+configopts += '-DENABLE_LAPACK=ON -DLAPACK_LIBRARIES="$LIBLAPACK" '
+configopts += '-DENABLE_CUDA=ON '
+configopts += '-DCMAKE_C_STANDARD=17 '
+configopts += '-DCMAKE_C_COMPILER=mpicc '
+
+postinstallcmds = [
+    "cp -r examples %(installdir)s/examples",
+    "ln -s %(installdir)s/lib64 %(installdir)s/lib",
+]
+
+local_solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol']
+
+sanity_check_paths = {
+    'files': ['lib/libsundials_%s.a' % s for s in local_solvers +
+              ['nvecopenmp', 'nvecparallel', 'nvecserial']] +
+             ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in local_solvers +
+              ['nvecopenmp', 'nvecparallel', 'nvecserial']],
+    'dirs': ['examples/%s' % s for s in local_solvers] +
+            ['include/%s' % s for s in local_solvers] +
+            ['examples/nvector', 'include/nvector', 'include/sundials'],
+}
+
+postinstallcmds = [
+    'cp %(builddir)s/sundials-%(version)s/src/sundials/sundials_context_impl.h %(installdir)s/include',
+]
+
+modextravars = {
+    'SUNDIALS_ROOT': '%(installdir)s',
+    'SUNDIALS_LIB': '%(installdir)s/lib64',
+    'SUNDIALS_INCLUDE': '%(installdir)s/include'
+}
+
+moduleclass = 'math'
diff --git a/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-2021b.eb b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..c362693104a3a439f476d0d8bd8d7ee8b1d43f21
--- /dev/null
+++ b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-2021b.eb
@@ -0,0 +1,70 @@
+name = 'SUNDIALS'
+version = '6.1.0'
+
+homepage = 'https://computation.llnl.gov/casc/sundials/'
+description = """SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers.  It consists of the
+following six solvers: CVODE, solves initial value problems for ordinary differential equation (ODE) systems; CVODES,
+solves ODE systems and includes sensitivity analysis capabilities (forward and adjoint); ARKODE, solves initial value
+ODE problems with additive Runge-Kutta methods, include support for IMEX methods; IDA, solves initial value problems for
+differential-algebraic equation (DAE) systems; IDAS, solves DAE systems and includes sensitivity analysis capabilities
+(forward and adjoint); KINSOL, solves nonlinear algebraic systems.
+"""
+
+examples = 'Examples can be found in $EBROOTSUNDIALS/examples'
+
+toolchain = {'name': 'intel', 'version': '2021b'}
+toolchainopts = {'openmp': True, 'usempi': True, 'pic': True}
+
+source_urls = ['https://github.com/LLNL/sundials/releases/download/v%(version)s/']
+sources = [SOURCELOWER_TAR_GZ]
+checksums = ['eea49f52140640e54931c779e73aece65f34efa996a26b2263db6a1e27d0901c']
+
+builddependencies = [
+    ('CMake', '3.21.1', '', SYSTEM),
+]
+
+separate_build_dir = 'True'
+
+preconfigopts = 'export CUDA_TOOLKIT_ROOT_DIR=$EBROOTCUDA && '
+
+configopts = '-DBUILD_SHARED_LIBS=ON '
+configopts += '-DENABLE_MPI=ON '
+configopts += '-DBUILD_FORTRAN_MODULE_INTERFACE=ON '
+configopts += '-DEXAMPLES_ENABLE_F2003=ON '
+configopts += '-DENABLE_FORTRAN=ON '
+configopts += '-DENABLE_OPENMP=ON '
+configopts += '-DEXAMPLES_ENABLE_CXX=ON '
+configopts += '-DSUNDIALS_BUILD_PACKAGE_FUSED_KERNELS=ON '
+configopts += '-DENABLE_LAPACK=ON -DLAPACK_LIBRARIES="$LIBLAPACK" '
+configopts += '-DENABLE_CUDA=ON '
+configopts += '-DCMAKE_C_STANDARD=17 '
+configopts += '-DCMAKE_C_COMPILER=mpicc '
+
+postinstallcmds = [
+    "cp -r examples %(installdir)s/examples",
+    "ln -s %(installdir)s/lib64 %(installdir)s/lib",
+]
+
+local_solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol']
+
+sanity_check_paths = {
+    'files': ['lib/libsundials_%s.a' % s for s in local_solvers +
+              ['nvecopenmp', 'nvecparallel', 'nvecserial']] +
+             ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in local_solvers +
+              ['nvecopenmp', 'nvecparallel', 'nvecserial']],
+    'dirs': ['examples/%s' % s for s in local_solvers] +
+            ['include/%s' % s for s in local_solvers] +
+            ['examples/nvector', 'include/nvector', 'include/sundials'],
+}
+
+postinstallcmds = [
+    'cp %(builddir)s/sundials-%(version)s/src/sundials/sundials_context_impl.h %(installdir)s/include',
+]
+
+modextravars = {
+    'SUNDIALS_ROOT': '%(installdir)s',
+    'SUNDIALS_LIB': '%(installdir)s/lib64',
+    'SUNDIALS_INCLUDE': '%(installdir)s/include'
+}
+
+moduleclass = 'math'
diff --git a/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-para-2021b.eb b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-para-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..ae007131908eca50261af1162d65991a2e3bc219
--- /dev/null
+++ b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-para-2021b.eb
@@ -0,0 +1,70 @@
+name = 'SUNDIALS'
+version = '6.1.0'
+
+homepage = 'https://computation.llnl.gov/casc/sundials/'
+description = """SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers.  It consists of the
+following six solvers: CVODE, solves initial value problems for ordinary differential equation (ODE) systems; CVODES,
+solves ODE systems and includes sensitivity analysis capabilities (forward and adjoint); ARKODE, solves initial value
+ODE problems with additive Runge-Kutta methods, include support for IMEX methods; IDA, solves initial value problems for
+differential-algebraic equation (DAE) systems; IDAS, solves DAE systems and includes sensitivity analysis capabilities
+(forward and adjoint); KINSOL, solves nonlinear algebraic systems.
+"""
+
+examples = 'Examples can be found in $EBROOTSUNDIALS/examples'
+
+toolchain = {'name': 'intel-para', 'version': '2021b'}
+toolchainopts = {'openmp': True, 'usempi': True, 'pic': True}
+
+source_urls = ['https://github.com/LLNL/sundials/releases/download/v%(version)s/']
+sources = [SOURCELOWER_TAR_GZ]
+checksums = ['eea49f52140640e54931c779e73aece65f34efa996a26b2263db6a1e27d0901c']
+
+builddependencies = [
+    ('CMake', '3.21.1', '', SYSTEM),
+]
+
+separate_build_dir = 'True'
+
+preconfigopts = 'export CUDA_TOOLKIT_ROOT_DIR=$EBROOTCUDA && '
+
+configopts = '-DBUILD_SHARED_LIBS=ON '
+configopts += '-DENABLE_MPI=ON '
+configopts += '-DENABLE_FORTRAN=ON '
+configopts += '-DBUILD_FORTRAN_MODULE_INTERFACE=ON '
+configopts += '-DEXAMPLES_ENABLE_F2003=ON '
+configopts += '-DENABLE_OPENMP=ON '
+configopts += '-DEXAMPLES_ENABLE_CXX=ON '
+configopts += '-DSUNDIALS_BUILD_PACKAGE_FUSED_KERNELS=ON '
+configopts += '-DENABLE_LAPACK=ON -DLAPACK_LIBRARIES="$LIBLAPACK" '
+configopts += '-DENABLE_CUDA=ON '
+configopts += '-DCMAKE_C_STANDARD=17 '
+configopts += '-DCMAKE_C_COMPILER=mpicc '
+
+postinstallcmds = [
+    "cp -r examples %(installdir)s/examples",
+    "ln -s %(installdir)s/lib64 %(installdir)s/lib",
+]
+
+local_solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol']
+
+sanity_check_paths = {
+    'files': ['lib/libsundials_%s.a' % s for s in local_solvers +
+              ['nvecopenmp', 'nvecparallel', 'nvecserial']] +
+             ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in local_solvers +
+              ['nvecopenmp', 'nvecparallel', 'nvecserial']],
+    'dirs': ['examples/%s' % s for s in local_solvers] +
+            ['include/%s' % s for s in local_solvers] +
+            ['examples/nvector', 'include/nvector', 'include/sundials'],
+}
+
+postinstallcmds = [
+    'cp %(builddir)s/sundials-%(version)s/src/sundials/sundials_context_impl.h %(installdir)s/include',
+]
+
+modextravars = {
+    'SUNDIALS_ROOT': '%(installdir)s',
+    'SUNDIALS_LIB': '%(installdir)s/lib64',
+    'SUNDIALS_INCLUDE': '%(installdir)s/include'
+}
+
+moduleclass = 'math'
diff --git a/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-iomkl-2021b.eb b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-iomkl-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..fe4b01d063ed6dec4415a0f311e5a021917b1adf
--- /dev/null
+++ b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-iomkl-2021b.eb
@@ -0,0 +1,70 @@
+name = 'SUNDIALS'
+version = '6.1.0'
+
+homepage = 'https://computation.llnl.gov/casc/sundials/'
+description = """SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers.  It consists of the
+following six solvers: CVODE, solves initial value problems for ordinary differential equation (ODE) systems; CVODES,
+solves ODE systems and includes sensitivity analysis capabilities (forward and adjoint); ARKODE, solves initial value
+ODE problems with additive Runge-Kutta methods, include support for IMEX methods; IDA, solves initial value problems for
+differential-algebraic equation (DAE) systems; IDAS, solves DAE systems and includes sensitivity analysis capabilities
+(forward and adjoint); KINSOL, solves nonlinear algebraic systems.
+"""
+
+examples = 'Examples can be found in $EBROOTSUNDIALS/examples'
+
+toolchain = {'name': 'iomkl', 'version': '2021b'}
+toolchainopts = {'openmp': True, 'usempi': True, 'pic': True}
+
+source_urls = ['https://github.com/LLNL/sundials/releases/download/v%(version)s/']
+sources = [SOURCELOWER_TAR_GZ]
+checksums = ['eea49f52140640e54931c779e73aece65f34efa996a26b2263db6a1e27d0901c']
+
+builddependencies = [
+    ('CMake', '3.21.1', '', SYSTEM),
+]
+
+separate_build_dir = 'True'
+
+preconfigopts = 'export CUDA_TOOLKIT_ROOT_DIR=$EBROOTCUDA && '
+
+configopts = '-DBUILD_SHARED_LIBS=ON '
+configopts += '-DENABLE_MPI=ON '
+configopts += '-DENABLE_FORTRAN=ON '
+configopts += '-DBUILD_FORTRAN_MODULE_INTERFACE=ON '
+configopts += '-DEXAMPLES_ENABLE_F2003=ON '
+configopts += '-DENABLE_OPENMP=ON '
+configopts += '-DEXAMPLES_ENABLE_CXX=ON '
+configopts += '-DSUNDIALS_BUILD_PACKAGE_FUSED_KERNELS=ON '
+configopts += '-DENABLE_LAPACK=ON -DLAPACK_LIBRARIES="$LIBLAPACK" '
+configopts += '-DENABLE_CUDA=ON '
+configopts += '-DCMAKE_C_STANDARD=17 '
+configopts += '-DCMAKE_C_COMPILER=mpicc '
+
+postinstallcmds = [
+    "cp -r examples %(installdir)s/examples",
+    "ln -s %(installdir)s/lib64 %(installdir)s/lib",
+]
+
+local_solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol']
+
+sanity_check_paths = {
+    'files': ['lib/libsundials_%s.a' % s for s in local_solvers +
+              ['nvecopenmp', 'nvecparallel', 'nvecserial']] +
+             ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in local_solvers +
+              ['nvecopenmp', 'nvecparallel', 'nvecserial']],
+    'dirs': ['examples/%s' % s for s in local_solvers] +
+            ['include/%s' % s for s in local_solvers] +
+            ['examples/nvector', 'include/nvector', 'include/sundials'],
+}
+
+postinstallcmds = [
+    'cp %(builddir)s/sundials-%(version)s/src/sundials/sundials_context_impl.h %(installdir)s/include',
+]
+
+modextravars = {
+    'SUNDIALS_ROOT': '%(installdir)s',
+    'SUNDIALS_LIB': '%(installdir)s/lib64',
+    'SUNDIALS_INCLUDE': '%(installdir)s/include'
+}
+
+moduleclass = 'math'
diff --git a/Golden_Repo/s/SciPy-bundle/SciPy-bundle-2021.10-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/s/SciPy-bundle/SciPy-bundle-2021.10-gcccoremkl-11.2.0-2021.4.0.eb
index 24a824b9ababf7a98ba6357d245cd1213a13292f..99c9e1eb052bf03b39df1b35d4024d8042ca2ce3 100644
--- a/Golden_Repo/s/SciPy-bundle/SciPy-bundle-2021.10-gcccoremkl-11.2.0-2021.4.0.eb
+++ b/Golden_Repo/s/SciPy-bundle/SciPy-bundle-2021.10-gcccoremkl-11.2.0-2021.4.0.eb
@@ -62,9 +62,9 @@ exts_list = [
     # ('mpi4py', '3.1.1', {
     #     'checksums': ['e11f8587a3b93bb24c8526addec664b586b965d83c0882b884c14dc3fd6b9f5c'],
     # }),
-    # ('numexpr', '2.7.3', {
-    #     'checksums': ['43616529f9b7d1afc83386f943dc66c4da5e052f00217ba7e3ad8dd1b5f3a825'],
-    # }),
+    ('numexpr', '2.7.3', {
+        'checksums': ['43616529f9b7d1afc83386f943dc66c4da5e052f00217ba7e3ad8dd1b5f3a825'],
+    }),
     ('Bottleneck', '1.3.2', {
         'checksums': ['20179f0b66359792ea283b69aa16366419132f3b6cf3adadc0c48e2e8118e573'],
     }),
diff --git a/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-2021b.eb b/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..ca96c69b36e415e0159fa34bf9f0c5e344ee0aa4
--- /dev/null
+++ b/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-2021b.eb
@@ -0,0 +1,27 @@
+name = 'Siesta'
+version = '4.1.5'
+
+homepage = 'http://departments.icmab.es/leem/siesta'
+description = """SIESTA is both a method and its computer program implementation, to perform efficient electronic
+ structure calculations and ab initio molecular dynamics simulations of molecules and solids."""
+
+toolchain = {'name': 'intel', 'version': '2021b'}
+toolchainopts = {'usempi': True, 'precise': True}
+
+source_urls = [
+    'https://gitlab.com/siesta-project/siesta/-/releases/v%(version)s/downloads']
+sources = [SOURCELOWER_TAR_GZ]
+checksums = ['518df31aa6213af5e24cc73abb537b2c89a925b487171f5339d743d0c7140b3f']
+
+dependencies = [
+    ('netCDF-Fortran', '4.5.3'),
+    ('METIS', '5.1.0'),
+    ('ELPA', '2021.11.001'),
+]
+
+# transiesta is now siesta --electrode
+with_transiesta = False
+
+runtest = 'check'
+
+moduleclass = 'phys'
diff --git a/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-para-2021b.eb b/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-para-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..bc151e73d54971f5a00ef9fd4f1664e7d7681d80
--- /dev/null
+++ b/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-para-2021b.eb
@@ -0,0 +1,27 @@
+name = 'Siesta'
+version = '4.1.5'
+
+homepage = 'http://departments.icmab.es/leem/siesta'
+description = """SIESTA is both a method and its computer program implementation, to perform efficient electronic
+ structure calculations and ab initio molecular dynamics simulations of molecules and solids."""
+
+toolchain = {'name': 'intel-para', 'version': '2021b'}
+toolchainopts = {'usempi': True, 'precise': True}
+
+source_urls = [
+    'https://gitlab.com/siesta-project/siesta/-/releases/v%(version)s/downloads']
+sources = [SOURCELOWER_TAR_GZ]
+checksums = ['518df31aa6213af5e24cc73abb537b2c89a925b487171f5339d743d0c7140b3f']
+
+dependencies = [
+    ('netCDF-Fortran', '4.5.3'),
+    ('METIS', '5.1.0'),
+    ('ELPA', '2021.11.001'),
+]
+
+# transiesta is now siesta --electrode
+with_transiesta = False
+
+runtest = 'check'
+
+moduleclass = 'phys'
diff --git a/Golden_Repo/s/Silo/Silo-4.11-ipsmpi-2021b.eb b/Golden_Repo/s/Silo/Silo-4.11-ipsmpi-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..5a66c4c5e239ef08e49f59225fba92367e53931b
--- /dev/null
+++ b/Golden_Repo/s/Silo/Silo-4.11-ipsmpi-2021b.eb
@@ -0,0 +1,36 @@
+easyblock = 'ConfigureMake'
+
+name = 'Silo'
+version = '4.11'
+
+homepage = 'https://wci.llnl.gov/simulation/computer-codes/silo/'
+description = 'Silo is a library for reading and writing a wide variety of scientific data to binary, disk files.'
+
+
+toolchain = {'name': 'ipsmpi', 'version': '2021b'}
+toolchainopts = {'opt': True, 'pic': True, 'usempi': True}
+
+source_urls = ['https://wci.llnl.gov/sites/wci/files/2021-09/']
+sources = ['%(namelower)s-%(version)s.tgz']
+patches = ['silo-4.11-fix-hdf5.patch']
+checksums = [
+    'ab936c1f4fc158d9fdc4415965f7d9def7f4abeca596fe5a25bd8485654898ac',  # silo-4.11.tgz
+    '62ac2c76d2a4fc6562a5cbf1e11957174858b3b238c7dc5057865db0cce8bef1',  # silo-4.11-fix-hdf5.patch
+]
+
+dependencies = [
+    ('HDF5', '1.12.1'),
+    ('Szip', '2.1.1')
+]
+
+configopts = [
+    '--with-hdf5=$EBROOTHDF5/include,$EBROOTHDF5/lib --with-szlib=$EBROOTSZIP/lib --enable-shared --disable-silex',
+    '--with-szlib=$EBROOTSZIP/lib --enable-shared --disable-silex',
+]
+
+sanity_check_paths = {
+    'files': ['bin/browser', 'bin/silock', 'bin/silodiff', 'bin/silofile', 'lib/libsilo.a', 'lib/libsiloh5.a'],
+    'dirs': [],
+}
+
+moduleclass = 'data'
diff --git a/Golden_Repo/s/scikit-image/scikit-image-0.18.3-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/s/scikit-image/scikit-image-0.18.3-gcccoremkl-11.2.0-2021.4.0.eb
index 9d6d7ebec2d0a64bbcfec2edde9698fb77134483..3d18e46604b93b672eedb0b4fbd61e324ed7e35d 100644
--- a/Golden_Repo/s/scikit-image/scikit-image-0.18.3-gcccoremkl-11.2.0-2021.4.0.eb
+++ b/Golden_Repo/s/scikit-image/scikit-image-0.18.3-gcccoremkl-11.2.0-2021.4.0.eb
@@ -11,7 +11,7 @@ toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
 dependencies = [
     ('Python', '3.9.6'),
     ('matplotlib', '3.4.3'),
-    ('Pillow-SIMD', '8.3.1'),
+    ('Pillow-SIMD', '9.0.1'),
     ('dask', '2021.9.1'),
 ]
 
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.1.0_fix-cuda-build.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.1.0_fix-cuda-build.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5873bdc5ed029b3ba97d010d50ae2117e4b15ab7
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.1.0_fix-cuda-build.patch
@@ -0,0 +1,47 @@
+fix for "undeclared inclusion(s) in rule" errors when building TensorFlow 1.14.0 with CUDA support,
+if the installation directory for GCC is hosted in a path that is a symlink to another path;
+the symlinked path is resolved in several places (both by 'gcc' itself and by the TF build process),
+which makes hard comparisons between paths fail
+author: Alexander Grund based on original patch by Kenneth Hoste (HPC-UGent)
+diff --git a/third_party/gpus/cuda_configure.bzl b/third_party/gpus/cuda_configure.bzl
+index ba4bd8ad75..dab492ecda 100644
+--- a/third_party/gpus/cuda_configure.bzl
++++ b/third_party/gpus/cuda_configure.bzl
+@@ -303,11 +303,36 @@ def _get_cxx_inc_directories_impl(repository_ctx, cc, lang_is_cpp):
+     else:
+         inc_dirs = result.stderr[index1 + 1:index2].strip()
+
+-    return [
++    compiler_includes = [
+         _normalize_include_path(repository_ctx, _cxx_inc_convert(p))
+         for p in inc_dirs.split("\n")
+     ]
+
++    # fix include path by also including paths where resolved symlink is replaced by original path
++    # Try to find real path to CC installation to "see through" compiler wrappers
++    # GCC has the path to g++
++    index1 = result.stderr.find("COLLECT_GCC=")
++    if index1 != -1:
++      index1 = result.stderr.find("=", index1)
++      index2 = result.stderr.find("\n", index1)
++      cc_topdir = repository_ctx.path(result.stderr[index1 + 1 : index2]).dirname.dirname
++    else:
++      # Clang has the directory
++      index1 = result.stderr.find("InstalledDir: ")
++      if index1 != -1:
++        index1 = result.stderr.find(" ", index1)
++        index2 = result.stderr.find("\n", index1)
++        cc_topdir = repository_ctx.path(result.stderr[index1 + 1 : index2]).dirname
++      else:
++        # Fallback to the CC path
++        cc_topdir = repository_ctx.path(cc).dirname.dirname
++    cc_topdir_resolved = str(cc_topdir.realpath).strip()
++    cc_topdir = str(cc_topdir).strip()
++    if cc_topdir_resolved != cc_topdir:
++        original_compiler_includes = [p.replace(cc_topdir_resolved, cc_topdir) for p in compiler_includes]
++        compiler_includes = compiler_includes + original_compiler_includes
++    return compiler_includes
++
+ def get_cxx_inc_directories(repository_ctx, cc, tf_sysroot):
+     """Compute the list of default C and C++ include directories."""
+
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_add-ldl.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_add-ldl.patch
new file mode 100644
index 0000000000000000000000000000000000000000..611b441446521f31d3bbe107f7212135172e05f1
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_add-ldl.patch
@@ -0,0 +1,19 @@
+The stacktrace library uses dladdr and friends but doesn't link libdl
+See https://github.com/tensorflow/tensorflow/issues/45013
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/tensorflow/core/platform/BUILD b/tensorflow/core/platform/BUILD
+index 0a324f31023..56a9c9e2455 100644
+--- a/tensorflow/core/platform/BUILD
++++ b/tensorflow/core/platform/BUILD
+@@ -961,7 +961,8 @@ cc_library(
+     copts = tf_copts(),
+     linkopts = select({
+         "//tensorflow:windows": [],
+-        "//conditions:default": ["-lm"],
++        "//tensorflow:freebsd": ["-lm"],
++        "//conditions:default": ["-lm", "-ldl"],
+     }),
+     deps = [
+         ":platform",
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_dont-use-var-lock.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_dont-use-var-lock.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e33d0028a40a53df6315e7094ec2dce79256e5ce
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_dont-use-var-lock.patch
@@ -0,0 +1,37 @@
+diff --git a/tensorflow/tools/ci_build/gpu_build/parallel_gpu_execute.sh b/tensorflow/tools/ci_build/gpu_build/parallel_gpu_execute.sh
+index ee70f2f608b..ab5cbe7d7b5 100755
+--- a/tensorflow/tools/ci_build/gpu_build/parallel_gpu_execute.sh
++++ b/tensorflow/tools/ci_build/gpu_build/parallel_gpu_execute.sh
+@@ -53,7 +53,7 @@ TEST_BINARY="$(rlocation $TEST_WORKSPACE/${1#./})"
+ shift
+ # *******************************************************************
+ 
+-mkdir -p /var/lock
++mkdir -p /tmp/tf-test-lock
+ # Try to acquire any of the TF_GPU_COUNT * TF_TESTS_PER_GPU
+ # slots to run a test at.
+ #
+@@ -61,7 +61,7 @@ mkdir -p /var/lock
+ # So, we iterate over TF_TESTS_PER_GPU first.
+ for j in `seq 0 $((TF_TESTS_PER_GPU-1))`; do
+   for i in `seq 0 $((TF_GPU_COUNT-1))`; do
+-    exec {lock_fd}>/var/lock/gpulock${i}_${j} || exit 1
++    exec {lock_fd}>/tmp/tf-test-lock/gpulock${i}_${j} || exit 1
+     if flock -n "$lock_fd";
+     then
+       (
+@@ -70,6 +70,7 @@ for j in `seq 0 $((TF_TESTS_PER_GPU-1))`; do
+         export CUDA_VISIBLE_DEVICES=$i
+         export HIP_VISIBLE_DEVICES=$i
+         echo "Running test $TEST_BINARY $* on GPU $CUDA_VISIBLE_DEVICES"
++        set +e
+         "$TEST_BINARY" $@
+       )
+       return_code=$?
+@@ -79,5 +80,5 @@ for j in `seq 0 $((TF_TESTS_PER_GPU-1))`; do
+   done
+ done
+ 
+-echo "Cannot find a free GPU to run the test $* on, exiting with failure..."
++echo "Cannot find a free GPU to run the test $TEST_BINARY $* on, exiting with failure..."
+ exit 1
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0-fix-alias-violation-in-absl.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0-fix-alias-violation-in-absl.patch
new file mode 100644
index 0000000000000000000000000000000000000000..427f7555ecbf9a8bb785cbf5678598e05f548a89
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0-fix-alias-violation-in-absl.patch
@@ -0,0 +1,26 @@
+The behavior relied on by Abseil is unsupported by GCC and leads to misoptimizations.
+See https://github.com/tensorflow/tensorflow/issues/47179
+
+Author: Alexander Grund
+
+diff --git a/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch b/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch
+index 6301119ab2c..0b8b4838726 100644
+--- a/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch
++++ b/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch
+@@ -1,3 +1,16 @@
++diff --git a/absl/container/internal/container_memory.h b/absl/container/internal/container_memory.h
++index d24b0f8..f8847b5 100644
++--- a/absl/container/internal/container_memory.h
+++++ b/absl/container/internal/container_memory.h
++@@ -338,7 +338,7 @@ struct map_slot_policy {
++   // If pair<const K, V> and pair<K, V> are layout-compatible, we can accept one
++   // or the other via slot_type. We are also free to access the key via
++   // slot_type::key in this case.
++-  using kMutableKeys = memory_internal::IsLayoutCompatible<K, V>;
+++  using kMutableKeys = std::false_type;
++
++  public:
++   static value_type& element(slot_type* slot) { return slot->value; }
+ diff --git a/absl/container/internal/compressed_tuple.h b/absl/container/internal/compressed_tuple.h
+ index 4bfe92f..01db713 100644
+ --- a/absl/container/internal/compressed_tuple.h
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_add-support-for-large-core-systems.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_add-support-for-large-core-systems.patch
new file mode 100644
index 0000000000000000000000000000000000000000..673d76d12cd7b2b6b8a6fcec979b3764c4bdc8c7
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_add-support-for-large-core-systems.patch
@@ -0,0 +1,32 @@
+Enhance NumSchedulableCPUs to allow for nodes with more than 1024 cores
+See https://github.com/tensorflow/tensorflow/issues/49833
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/tensorflow/core/platform/default/port.cc b/tensorflow/core/platform/default/port.cc
+index 8c8c8641b2c..e648f99c7f4 100644
+--- a/tensorflow/core/platform/default/port.cc
++++ b/tensorflow/core/platform/default/port.cc
+@@ -71,9 +71,19 @@ string JobName() {
+ 
+ int NumSchedulableCPUs() {
+ #if defined(__linux__) && !defined(__ANDROID__)
+-  cpu_set_t cpuset;
+-  if (sched_getaffinity(0, sizeof(cpu_set_t), &cpuset) == 0) {
+-    return CPU_COUNT(&cpuset);
++  for(int ncpus = 1024; ncpus < std::numeric_limits<int>::max() / 2; ncpus *= 2) {
++      size_t setsize = CPU_ALLOC_SIZE(ncpus);
++      cpu_set_t* mask = CPU_ALLOC(ncpus);
++      if (!mask)
++        break;
++      if (sched_getaffinity(0, setsize, mask) == 0) {
++        int result = CPU_COUNT_S(setsize, mask);
++        CPU_FREE(mask);
++        return result;
++      }
++      CPU_FREE(mask);
++      if (errno != EINVAL)
++        break;
+   }
+   perror("sched_getaffinity");
+ #endif
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_disable-avx512-extensions.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_disable-avx512-extensions.patch
new file mode 100644
index 0000000000000000000000000000000000000000..bbfad786fff9242c95b205a48715a3b55f4b3c84
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_disable-avx512-extensions.patch
@@ -0,0 +1,19 @@
+(Some of the) AVX512 extensions to Eigen introduced by TensorFlow are broken and return wrong values.
+So disable them for now to keep AVX512 in the other code parts working.
+See https://github.com/tensorflow/tensorflow/issues/49944
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint b/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint
+index 67cb111db80..0f3593b6c78 100644
+--- a/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint
++++ b/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint
+@@ -31,7 +31,7 @@
+ #include "src/FixedPoint/FixedPointTypes.h"
+ 
+ // Use optimized implementations whenever available
+-#if defined (EIGEN_VECTORIZE_AVX512DQ) || defined (EIGEN_VECTORIZE_AVX512BW)
++#if 0
+ #include "src/FixedPoint/PacketMathAVX512.h"
+ #include "src/FixedPoint/TypeCastingAVX512.h"
+ 
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-arm-vector-intrinsics.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-arm-vector-intrinsics.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5d80e47df8fb67e47fa0708fcc7ed62763e2bd89
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-arm-vector-intrinsics.patch
@@ -0,0 +1,37 @@
+The comment is not true, the function actually takes the arguments as it should
+Hence just redefine the function
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/tensorflow/lite/kernels/internal/optimized/depthwiseconv_3x3_filter_common.h b/tensorflow/lite/kernels/internal/optimized/depthwiseconv_3x3_filter_common.h
+index 916edd561ff..9c8025dac49 100644
+--- a/tensorflow/lite/kernels/internal/optimized/depthwiseconv_3x3_filter_common.h
++++ b/tensorflow/lite/kernels/internal/optimized/depthwiseconv_3x3_filter_common.h
+@@ -122,26 +122,7 @@ inline int32x4_t vpaddq_s32(int32x4_t a, int32x4_t b) {
+ #endif  // !__aarch64__
+ 
+ #ifdef __ARM_FEATURE_DOTPROD
+-// The vdotq_lane_s32 takes int8x8t for the rhs parameter, whereas the actual
+-// instruction selects from between 4 32-bit (4x8-bit packed) sub-registers, an
+-// unusual interpretation of "lane".
+-inline int32x4_t vdotq_four_lane_s32(int32x4_t acc, int8x16_t lhs,
+-                                     int8x16_t rhs, const int lane) {
+-  switch (lane) {
+-    case 0:
+-      return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_low_s8(rhs)), 0);
+-    case 1:
+-      return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_low_s8(rhs)), 1);
+-    case 2:
+-      return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_high_s8(rhs)),
+-                            0);
+-    case 3:
+-    default:
+-      return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_high_s8(rhs)),
+-                            1);
+-  }
+-}
+-
++#define vdotq_four_lane_s32 vdotq_lane_s32
+ #else
+ 
+ inline int32x4_t vdotq_s32(int32x4_t acc, int8x16_t lhs, int8x16_t rhs) {
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-crash-on-shutdown.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-crash-on-shutdown.patch
new file mode 100644
index 0000000000000000000000000000000000000000..18021a240ab4ea385d2f16adf1062e9bc87b878f
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-crash-on-shutdown.patch
@@ -0,0 +1,20 @@
+Releasing and reaquiring the GIL during Python shutdown is not possible and leads to force termination.
+Remove that.
+See https://github.com/tensorflow/tensorflow/issues/50853
+
+Author: Alexander Grund
+
+diff --git a/tensorflow/python/client/tf_session_wrapper.cc b/tensorflow/python/client/tf_session_wrapper.cc
+index 306381347c7..1208aa2ce61 100644
+--- a/tensorflow/python/client/tf_session_wrapper.cc
++++ b/tensorflow/python/client/tf_session_wrapper.cc
+@@ -557,8 +557,7 @@ PYBIND11_MODULE(_pywrap_tf_session, m) {
+ 
+   m.def("TF_NewGraph", TF_NewGraph, py::return_value_policy::reference,
+         py::call_guard<py::gil_scoped_release>());
+-  m.def("TF_DeleteGraph", TF_DeleteGraph,
+-        py::call_guard<py::gil_scoped_release>());
++  m.def("TF_DeleteGraph", TF_DeleteGraph);
+ 
+   m.def("TF_GraphGetOpDef",
+         [](TF_Graph* graph, const char* op_name, TF_Buffer* output_op_def) {
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_numpy_1.20_compatibility.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_numpy_1.20_compatibility.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d05986a8eb281a5868744b443905b021360991fb
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_numpy_1.20_compatibility.patch
@@ -0,0 +1,55 @@
+TF-2.5.0 and 2.6.0 are not compatible with numpy > 1.20
+During the testing phase, TensorFlow throws errors like this
+"Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array.
+This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported"
+See https://github.com/tensorflow/tensorflow/pull/48935
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/tensorflow/python/framework/ops.py b/tensorflow/python/framework/ops.py
+index 4e12a8a1d17..73afdd4ed8a 100644
+--- a/tensorflow/python/framework/ops.py
++++ b/tensorflow/python/framework/ops.py
+@@ -864,7 +864,7 @@ class Tensor(internal.NativeObject, core_tf_types.Tensor):
+   __array_priority__ = 100
+ 
+   def __array__(self):
+-    raise NotImplementedError(
++    raise TypeError(
+         "Cannot convert a symbolic Tensor ({}) to a numpy array."
+         " This error may indicate that you're trying to pass a Tensor to"
+         " a NumPy call, which is not supported".format(self.name))
+diff --git a/tensorflow/python/framework/ops_test.py b/tensorflow/python/framework/ops_test.py
+index c72b18e8df5..f69ec4a9ae2 100644
+--- a/tensorflow/python/framework/ops_test.py
++++ b/tensorflow/python/framework/ops_test.py
+@@ -188,7 +188,7 @@ class TensorAndShapeTest(test_util.TensorFlowTestCase):
+     with ops.Graph().as_default():
+       x = array_ops.ones((3, 4), name="test_ones")
+ 
+-    with self.assertRaisesRegex(NotImplementedError,
++    with self.assertRaisesRegex(TypeError,
+                                 r"Cannot convert a symbolic.+test_ones"):
+       np.array(x)
+ 
+diff --git a/tensorflow/python/ops/array_ops.py b/tensorflow/python/ops/array_ops.py
+index 77cebdad660..3c650d7808f 100644
+--- a/tensorflow/python/ops/array_ops.py
++++ b/tensorflow/python/ops/array_ops.py
+@@ -36,6 +36,7 @@ from tensorflow.python.framework import tensor_util
+ from tensorflow.python.framework.constant_op import constant
+ from tensorflow.python.ops import gen_array_ops
+ from tensorflow.python.ops import gen_math_ops
++from tensorflow.python.ops import math_ops
+ # go/tf-wildcard-import
+ # pylint: disable=wildcard-import
+ from tensorflow.python.ops.gen_array_ops import *
+@@ -2897,7 +2898,7 @@ def matrix_set_diag(
+ 
+ def _constant_if_small(value, shape, dtype, name):
+   try:
+-    if np.prod(shape) < 1000:
++    if math_ops.reduce_prod(shape) < 1000:
+       return constant(value, shape=shape, dtype=dtype, name=name)
+   except (NotImplementedError, TypeError):
+     # Happens when shape is a Tensor, list with Tensor elements, etc.
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_protobuf_error_message.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_protobuf_error_message.patch
new file mode 100644
index 0000000000000000000000000000000000000000..addc55bd710e16b23e18d4765390a6cae1f2733f
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_protobuf_error_message.patch
@@ -0,0 +1,30 @@
+Fix an issue where TensorFlow 2.5/2.6 won't build with a protobuf newer than 3.14
+Additionally, a TypeError ("expected tensorflow.TensorShapeProto got tensorflow.TensorShapeProto")
+is fixed by inverting the import statements.
+Solution/patch obtained from https://bugs.gentoo.org/800824
+
+diff -Nrup tensorflow-2.5.0_old/tensorflow/core/kernels/example_parsing_ops.cc tensorflow-2.5.0/tensorflow/core/kernels/example_parsing_ops.cc
+--- tensorflow-2.5.0_old/tensorflow/core/kernels/example_parsing_ops.cc	2021-05-12 15:26:41.000000000 +0200
++++ tensorflow-2.5.0/tensorflow/core/kernels/example_parsing_ops.cc	2021-07-14 08:09:39.927536430 +0200
+@@ -1218,7 +1218,7 @@ class DecodeJSONExampleOp : public OpKer
+           resolver_.get(), "type.googleapis.com/tensorflow.Example", &in, &out);
+       OP_REQUIRES(ctx, status.ok(),
+                   errors::InvalidArgument("Error while parsing JSON: ",
+-                                          string(status.error_message())));
++                                          string(status.message())));
+     }
+   }
+ 
+diff -Nrup tensorflow-2.5.0_old/tensorflow/python/__init__.py tensorflow-2.5.0/tensorflow/python/__init__.py
+--- tensorflow-2.5.0_old/tensorflow/python/__init__.py	2021-05-12 15:26:41.000000000 +0200
++++ tensorflow-2.5.0/tensorflow/python/__init__.py	2021-07-14 08:09:55.696294764 +0200
+@@ -37,8 +37,8 @@ import traceback
+ # go/tf-wildcard-import
+ # pylint: disable=wildcard-import,g-bad-import-order,g-import-not-at-top
+ 
+-from tensorflow.python.eager import context
+ from tensorflow.python import pywrap_tensorflow as _pywrap_tensorflow
++from tensorflow.python.eager import context
+ 
+ # pylint: enable=wildcard-import
+ 
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_remove-duplicate-gpu-tests.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_remove-duplicate-gpu-tests.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4e40a81b1472f2a7cdaf011fdeba736be5910a27
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_remove-duplicate-gpu-tests.patch
@@ -0,0 +1,45 @@
+TensorFlow adds some GPU tests twice increasing the runtime of the test suite.
+This filters out the test part meant for CPU.
+
+See https://github.com/tensorflow/tensorflow/issues/47081
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/tensorflow/tensorflow.bzl b/tensorflow/tensorflow.bzl
+index a4be1fea8bb..2343b8985f8 100644
+--- a/tensorflow/tensorflow.bzl
++++ b/tensorflow/tensorflow.bzl
+@@ -1116,19 +1116,20 @@ def tf_gpu_cc_test(
+         args = [],
+         kernels = [],
+         linkopts = []):
+-    tf_cc_test(
+-        name = name,
+-        size = size,
+-        srcs = srcs,
+-        args = args,
+-        data = data,
+-        extra_copts = extra_copts + if_cuda(["-DNV_CUDNN_DISABLE_EXCEPTION"]),
+-        kernels = kernels,
+-        linkopts = linkopts,
+-        linkstatic = linkstatic,
+-        tags = tags,
+-        deps = deps,
+-    )
++    if 'gpu' not in tags:
++        tf_cc_test(
++            name = name,
++            size = size,
++            srcs = srcs,
++            args = args,
++            data = data,
++            extra_copts = extra_copts + if_cuda(["-DNV_CUDNN_DISABLE_EXCEPTION"]),
++            kernels = kernels,
++            linkopts = linkopts,
++            linkstatic = linkstatic,
++            tags = tags,
++            deps = deps,
++        )
+     tf_cc_test(
+         name = name,
+         size = size,
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..a47edc66b901b794e421fa54bef3c0c4269d3aff
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb
@@ -0,0 +1,259 @@
+easyblock = 'PythonBundle'
+
+name = 'TensorFlow'
+version = '2.6.0'
+versionsuffix = '-CUDA-%(cudaver)s'
+
+homepage = 'https://www.tensorflow.org/'
+description = "An open-source software library for Machine Intelligence"
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+toolchainopts = {'pic': True}
+
+builddependencies = [
+    ('Bazel', '3.7.2'),
+    ('protobuf', '3.17.3'),
+    # git 2.x required, see also https://github.com/tensorflow/tensorflow/issues/29053
+    ('git', '2.33.1', '-nodocs'),
+    ('pybind11', '2.7.1'),
+    ('UnZip', '6.0'),
+]
+dependencies = [
+    ('CUDA', '11.5', '', True),
+    ('cuDNN', '8.3.1.22', versionsuffix, True),
+    ('NCCL', '2.11.4', '-GCCcore-11.2.0%s' % versionsuffix, True),
+    ('Python', '3.9.6'),
+    ('SciPy-bundle', '2021.10'),
+    ('h5py', '3.5.0', '-serial'),
+    ('cURL', '7.78.0'),
+    ('double-conversion', '3.1.6'),
+    ('flatbuffers', '2.0.0'),
+    ('giflib', '5.2.1'),
+    ('hwloc', '2.5.0'),
+    ('ICU', '70.1'),
+    ('JsonCpp', '1.9.4'),
+    ('libjpeg-turbo', '2.1.1'),
+    ('LMDB', '0.9.29'),
+    ('NASM', '2.15.05'),
+    ('nsync', '1.24.0'),
+    ('SQLite', '3.36'),
+    ('protobuf-python', '3.17.3'),
+    ('flatbuffers-python', '2.0'),
+    ('typing-extensions', '3.10.0.0'),
+    ('libpng', '1.6.37'),
+    ('snappy', '1.1.9'),
+    ('zlib', '1.2.11'),
+]
+
+use_pip = True
+sanity_pip_check = True
+
+# Dependencies created and updated using findPythonDeps.sh:
+# https://gist.github.com/Flamefire/49426e502cd8983757bd01a08a10ae0d
+exts_list = [
+    ('Markdown', '3.3.4', {
+        'checksums': ['31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49'],
+    }),
+    ('pyasn1-modules', '0.2.8', {
+        'checksums': ['905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e'],
+    }),
+    ('rsa', '4.7.2', {
+        'checksums': ['9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9'],
+    }),
+    ('cachetools', '4.2.2', {
+        'checksums': ['61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff'],
+    }),
+    ('google-auth', '1.35.0', {
+        'modulename': 'google.auth',
+        'checksums': ['b7033be9028c188ee30200b204ea00ed82ea1162e8ac1df4aa6ded19a191d88e'],
+    }),
+    ('oauthlib', '3.1.1', {
+        'checksums': ['8f0215fcc533dd8dd1bee6f4c412d4f0cd7297307d43ac61666389e3bc3198a3'],
+    }),
+    ('requests-oauthlib', '1.3.0', {
+        'checksums': ['b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a'],
+    }),
+    ('google-auth-oauthlib', '0.4.5', {
+        'checksums': ['4ab58e6c3dc6ccf112f921fcced40e5426fba266768986ea502228488276eaba'],
+    }),
+    ('absl-py', '0.13.0', {
+        'modulename': 'absl',
+        'checksums': ['6953272383486044699fd0e9f00aad167a27e08ce19aae66c6c4b10e7e767793'],
+    }),
+    ('astunparse', '1.6.3', {
+        'checksums': ['5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872'],
+    }),
+    ('grpcio', '1.39.0', {
+        'modulename': 'grpc',
+        'checksums': ['57974361a459d6fe04c9ae0af1845974606612249f467bbd2062d963cb90f407'],
+    }),
+    ('gviz-api', '1.9.0', {
+        'source_tmpl': 'gviz_api-%(version)s.tar.gz',
+        'checksums': ['43d13ccc21834d0501b33a291ef3265e933dbb4bbdca3d34b1ed0a048c0ef640'],
+    }),
+    ('tensorboard_data_server', '0.6.1', {
+        'source_tmpl': '%(name)s-%(version)s-py3-none-any.whl',
+        'checksums': ['809fe9887682d35c1f7d1f54f0f40f98bb1f771b14265b453ca051e2ce58fca7'],
+    }),
+    ('tensorboard', version, {
+        #  'source_tmpl': '%(name)s-%(version)s-py3-none-any-JSC.whl',  # This is for Jens
+        'source_tmpl': '%(name)s-%(version)s-py3-none-any.whl',
+        'checksums': ['f7dac4cdfb52d14c9e3f74585ce2aaf8e6203620a864e51faf84988b09f7bbdb'],
+    }),
+    ('tensorboard_plugin_wit', '1.8.0', {
+        'source_tmpl': '%(name)s-%(version)s-py3-none-any.whl',
+        'checksums': ['2a80d1c551d741e99b2f197bb915d8a133e24adb8da1732b840041860f91183a'],
+    }),
+    ('tensorboard_plugin_profile', '2.5.0', {
+        'checksums': ['f832698d87a773b9a017fc4dd5cf598a1ff942ccfbf3392c83fe12c949ab9f52'],
+    }),
+    ('google-pasta', '0.2.0', {
+        'modulename': 'pasta',
+        'checksums': ['c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e'],
+    }),
+    ('termcolor', '1.1.0', {
+        'checksums': ['1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b'],
+    }),
+    ('tensorflow_estimator', version, {
+        'source_tmpl': '%(name)s-%(version)s-py2.py3-none-any.whl',
+        'checksums': ['cf78528998efdb637ac0abaf525c929bf192767544eb24ae20d9266effcf5afd'],
+    }),
+    ('astor', '0.8.1', {
+        'checksums': ['6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e'],
+    }),
+    ('gast', '0.4.0', {
+        'checksums': ['40feb7b8b8434785585ab224d1568b857edb18297e5a3047f1ba012bc83b42c1'],
+    }),
+    ('pythran', '0.9.11', {
+        'checksums': ['a317f91e2aade9f6550dc3bf40b5caeb45b7e012daf27e2b3e4ad928edb01667'],
+    }),
+    ('beniget', '0.3.0', {
+        'checksums': ['062c893be9cdf87c3144fb15041cce4d81c67107c1591952cd45fdce789a0ff1'],
+    }),
+    ('clang', '5.0', {
+        'checksums': ['ceccae97eda0225a5b44d42ffd61102e248325c2865ca53e4407746464a5333a'],
+    }),
+    ('opt_einsum', '3.3.0', {
+        'checksums': ['59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549'],
+    }),
+    ('wrapt', '1.12.1', {
+        'checksums': ['b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7'],
+    }),
+    ('Keras_Preprocessing', '1.1.2', {
+        'checksums': ['add82567c50c8bc648c14195bf544a5ce7c1f76761536956c3d2978970179ef3'],
+    }),
+    ('dill', '0.3.3', {
+        'source_tmpl': '%(name)s-%(version)s.zip',
+        'checksums': ['efb7f6cb65dba7087c1e111bb5390291ba3616741f96840bfc75792a1a9b5ded'],
+    }),
+    ('tblib', '1.7.0', {
+        'checksums': ['059bd77306ea7b419d4f76016aef6d7027cc8a0785579b5aad198803435f882c'],
+    }),
+    ('portpicker', '1.4.0', {
+        'checksums': ['c2831ff4328a21e928ffc9e52124bcafacaf5816d38a1a72dc329680dc1bb7ba'],
+    }),
+    ('keras', version, {
+        'source_tmpl': '%(name)s-%(version)s-py2.py3-none-any.whl',
+        'checksums': ['504af5656a9829fe803ce48a8580ef16916e89906aceddad9e098614269437e7'],
+    }),
+    (name, version, {
+        'patches': [
+            'TensorFlow-2.1.0_fix-cuda-build.patch',
+            'TensorFlow-2.4.0_add-ldl.patch',
+            'TensorFlow-2.4.0_dont-use-var-lock.patch',
+            'TensorFlow-2.5.0_add-support-for-large-core-systems.patch',
+            'TensorFlow-2.5.0_disable-avx512-extensions.patch',
+            'TensorFlow-2.5.0-fix-alias-violation-in-absl.patch',
+            'TensorFlow-2.5.0_fix-arm-vector-intrinsics.patch',
+            'TensorFlow-2.5.0_fix-crash-on-shutdown.patch',
+            'TensorFlow-2.5.0_fix_numpy_1.20_compatibility.patch',
+            'TensorFlow-2.5.0_fix_protobuf_error_message.patch',
+            'TensorFlow-2.5.0_remove-duplicate-gpu-tests.patch',
+            'TensorFlow-2.6.0_add-default-shell-env.patch',
+            'TensorFlow-2.6.0_downgrade-required-versions.patch',
+        ],
+        'source_tmpl': 'v%(version)s.tar.gz',
+        'source_urls': ['https://github.com/tensorflow/tensorflow/archive/'],
+        'test_script': 'TensorFlow-2.x_mnist-test.py',
+        'test_tag_filters_cpu': '-gpu,-tpu,-no_cuda_on_cpu_tap,-no_pip,-no_oss,-oss_serial,-benchmark-test,-v1only',
+        'test_tag_filters_gpu': "gpu,-no_gpu,-nogpu,-gpu_cupti,-no_cuda11,-no_pip,-no_oss,-oss_serial, \
+                                   -benchmark-test,-v1only",
+        'test_targets': [
+            '//tensorflow/core/...',
+            '-//tensorflow/core:example_java_proto',
+            '-//tensorflow/core/example:example_protos_closure',
+            '//tensorflow/cc/...',
+            '//tensorflow/c/...',
+            '//tensorflow/python/...',
+            '-//tensorflow/c/eager:c_api_test_gpu',
+            '-//tensorflow/c/eager:c_api_distributed_test',
+            '-//tensorflow/c/eager:c_api_distributed_test_gpu',
+            '-//tensorflow/c/eager:c_api_cluster_test_gpu',
+            '-//tensorflow/c/eager:c_api_remote_function_test_gpu',
+            '-//tensorflow/c/eager:c_api_remote_test_gpu',
+            '-//tensorflow/core/common_runtime:collective_param_resolver_local_test',
+            '-//tensorflow/core/common_runtime:mkl_layout_pass_test',
+            '-//tensorflow/core/kernels/mkl:mkl_fused_ops_test',
+            '-//tensorflow/core/kernels/mkl:mkl_fused_batch_norm_op_test',
+            '-//tensorflow/python/kernel_tests/distributions:beta_test',
+            '-//tensorflow/python/kernel_tests:unique_op_test',
+            '-//tensorflow/python/kernel_tests/distributions:beta_test_gpu',
+            '-//tensorflow/python/kernel_tests:unique_op_test_gpu',
+            '-//tensorflow/python/keras/preprocessing:image_dataset_test',
+            '-//tensorflow/python/data/kernel_tests:placement_test',
+            '-//tensorflow/python/distribute:distribute_lib_test',
+            '-//tensorflow/python/kernel_tests:list_ops_test',
+            '-//tensorflow/python/kernel_tests:map_fn_test',
+            '-//tensorflow/python/data/kernel_tests:batch_test',
+            '-//tensorflow/python/data/experimental/kernel_tests:parallel_interleave_test',
+            '-//tensorflow/python/data/kernel_tests:map_test',
+            '-//tensorflow/python/data/kernel_tests:interleave_test',
+            '-//tensorflow/python/data/kernel_tests:dataset_test',
+            '-//tensorflow/python/data/kernel_tests:shuffle_test',
+            '-//tensorflow/python/data/kernel_tests:reduce_test',
+            '-//tensorflow/python/data/kernel_tests:iterator_test',
+            '-//tensorflow/c/eager:c_api_experimental_test_gpu',
+            '-//tensorflow/core/common_runtime/gpu:pool_allocator_test_gpu',
+            '-//tensorflow/core/kernels:diag_op_test_gpu',
+            '-//tensorflow/python/data/kernel_tests:iterator_test_gpu',
+            '-//tensorflow/python/data/kernel_tests:placement_test_gpu',
+            '-//tensorflow/python/kernel_tests:list_ops_test_gpu',
+            '-//tensorflow/python/kernel_tests:map_fn_test_gpu',
+            '-//tensorflow/python/data/kernel_tests:memory_cleanup_test_gpu',
+            '-//tensorflow/python/data/kernel_tests:reduce_test_gpu',
+        ],
+        'testopts': "--test_timeout=3600 --test_size_filters=small",
+        'testopts_gpu': "--test_timeout=3600 --test_size_filters=small \
+                           --run_under=//tensorflow/tools/ci_build/gpu_build:parallel_gpu_execute",
+        'with_xla': True,
+        'checksums': [
+            '41b32eeaddcbc02b0583660bcf508469550e4cd0f86b22d2abe72dfebeacde0f',  # v2.6.0.tar.gz
+            '78c20aeaa7784b8ceb46238a81e8c2461137d28e0b576deeba8357d23fbe1f5a',  # TensorFlow-2.1.0_fix-cuda-build.patch
+            '917ee7282e782e48673596d8917c3207e60e0851bb9acf230a2a439b067af2e3',  # TensorFlow-2.4.0_add-ldl.patch
+            # TensorFlow-2.4.0_dont-use-var-lock.patch
+            'b14f2493fd2edf79abd1c4f2dde6c98a3e7d5cb9c25ab9386df874d5f072d6b5',
+            # TensorFlow-2.5.0_add-support-for-large-core-systems.patch
+            '915f3477d6407fafd48269fe1e684a05ce361d9b9b85e58686682df87760f636',
+            # TensorFlow-2.5.0_disable-avx512-extensions.patch
+            '3655ce24c97569ac9738c07cac85347ba6f5c815ada95b19b606ffa46d4dda03',
+            # TensorFlow-2.5.0-fix-alias-violation-in-absl.patch
+            '12454fda3330fb45cd380377e283f04488b40e0b8ae7378e786ddf731a581f75',
+            # TensorFlow-2.5.0_fix-arm-vector-intrinsics.patch
+            '6abfadc0f67ff3b510d70430843201cb46d7bd65db045ec9b482af70e0c8c0c8',
+            # TensorFlow-2.5.0_fix-crash-on-shutdown.patch
+            '578c7493221ebd3dc25ca43d63a72cbb28fdf4112b1e2baa7390f25781bd78fd',
+            # TensorFlow-2.5.0_fix_numpy_1.20_compatibility.patch
+            '4c32aba417e6ecb2642d5828b4ac618f1e4395f6c217cd621fa08a74433faa55',
+            # TensorFlow-2.5.0_fix_protobuf_error_message.patch
+            '4ca80aac8f7394f4c83af5e8b237f6264dde3d55d10bf0dcb93e49ee5e1c5697',
+            # TensorFlow-2.5.0_remove-duplicate-gpu-tests.patch
+            'b940d438e036faac24453bff2cf1834c5e1359e87e84d1f1999fa7a30b278fec',
+            # TensorFlow-2.6.0_add-default-shell-env.patch
+            '8cc54ff4bc8e5fc8edd3a5e41ad338532e16db5c64a941cc45e1011d4b40dba7',
+            # TensorFlow-2.6.0_downgrade-required-versions.patch
+            'e941df7025d39a6b57f508779775cf896691c34abe61d5f2eba9b891ef20d51a',
+        ],
+    }),
+]
+
+moduleclass = 'lib'
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_add-default-shell-env.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_add-default-shell-env.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b80d92f0210a390dc1ad2ca832cd2233f1959ada
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_add-default-shell-env.patch
@@ -0,0 +1,98 @@
+Make TensorFlow use the environment as set by EasyBuild
+
+From https://github.com/tensorflow/tensorflow/pull/44549
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/tensorflow/core/kernels/mlir_generated/build_defs.bzl b/tensorflow/core/kernels/mlir_generated/build_defs.bzl
+index a6a136b8e38..e614b20bb02 100644
+--- a/tensorflow/core/kernels/mlir_generated/build_defs.bzl
++++ b/tensorflow/core/kernels/mlir_generated/build_defs.bzl
+@@ -68,6 +68,7 @@ def _gen_mlir_op_impl(ctx):
+                 ctx.outputs.out.path,
+             )
+         ),
++        use_default_shell_env = True,
+     )
+ 
+ _gen_mlir_op_rule = rule(
+@@ -157,6 +158,7 @@ def _gen_kernel_bin_impl(ctx):
+             "--enable_ftz=%s" % (ctx.attr.data_type == "f32"),
+             "--cpu_codegen=%s" % ctx.attr.cpu_codegen,
+         ],
++        use_default_shell_env = True,
+         mnemonic = "compile",
+     )
+     compilation_outputs = cc_common.create_compilation_outputs(
+diff --git a/third_party/flatbuffers/build_defs.bzl b/third_party/flatbuffers/build_defs.bzl
+index d409f836cb0..754db3f5d86 100644
+--- a/third_party/flatbuffers/build_defs.bzl
++++ b/third_party/flatbuffers/build_defs.bzl
+@@ -394,6 +394,7 @@ def _concat_flatbuffer_py_srcs_impl(ctx):
+             ctx.attr.deps[0].files.to_list()[0].path,
+             ctx.outputs.out.path,
+         ),
++        use_default_shell_env = True,
+     )
+ 
+ _concat_flatbuffer_py_srcs = rule(
+diff --git a/third_party/mlir/tblgen.bzl b/third_party/mlir/tblgen.bzl
+index 37577ed31ef..448284daefe 100644
+--- a/third_party/mlir/tblgen.bzl
++++ b/third_party/mlir/tblgen.bzl
+@@ -154,6 +154,7 @@ def _gentbl_rule_impl(ctx):
+         executable = ctx.executable.tblgen,
+         arguments = [args],
+         mnemonic = "TdGenerate",  # Kythe extractor hook.
++        use_default_shell_env = True,
+     )
+ 
+     return [DefaultInfo()]
+diff --git a/third_party/nccl/build_defs.bzl.tpl b/third_party/nccl/build_defs.bzl.tpl
+index c8757174038..fe163741f87 100644
+--- a/third_party/nccl/build_defs.bzl.tpl
++++ b/third_party/nccl/build_defs.bzl.tpl
+@@ -100,6 +100,7 @@ def _device_link_impl(ctx):
+                 "--output-file=%s" % cubin.path,
+             ] + [file.path for file in inputs],
+             mnemonic = "nvlink",
++            use_default_shell_env = True,
+         )
+         cubins.append(cubin)
+         images.append("--image=profile=%s,file=%s" % (arch, cubin.path))
+@@ -125,6 +126,7 @@ def _device_link_impl(ctx):
+         arguments = arguments_list + images,
+         tools = [bin2c],
+         mnemonic = "fatbinary",
++        use_default_shell_env = True,
+     )
+ 
+     # Generate the source file #including the headers generated above.
+@@ -203,6 +205,7 @@ def _prune_relocatable_code_impl(ctx):
+             executable = ctx.file._nvprune,
+             arguments = arguments,
+             mnemonic = "nvprune",
++            use_default_shell_env = True,
+         )
+         outputs.append(output)
+ 
+@@ -236,6 +239,7 @@ def _merge_archive_impl(ctx):
+         inputs = ctx.files.srcs,  # + ctx.files._crosstool,
+         outputs = [ctx.outputs.out],
+         command = "echo -e \"%s\" | %s -M" % (mri_script, cc_toolchain.ar_executable),
++        use_default_shell_env = True,
+     )
+ 
+ _merge_archive = rule(
+diff --git a/third_party/systemlibs/grpc.bazel.generate_cc.bzl b/third_party/systemlibs/grpc.bazel.generate_cc.bzl
+index 1534e526fd1..cd7304a9515 100644
+--- a/third_party/systemlibs/grpc.bazel.generate_cc.bzl
++++ b/third_party/systemlibs/grpc.bazel.generate_cc.bzl
+@@ -140,6 +140,7 @@ def generate_cc_impl(ctx):
+         outputs = out_files,
+         executable = ctx.executable._protoc,
+         arguments = arguments,
++        use_default_shell_env = True,
+     )
+ 
+     return struct(files = depset(out_files))
diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_downgrade-required-versions.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_downgrade-required-versions.patch
new file mode 100644
index 0000000000000000000000000000000000000000..15ec385988259a37f59eef3a375227518c29412e
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_downgrade-required-versions.patch
@@ -0,0 +1,36 @@
+TF introduced a change pinning versions to fixed major.minor or even patch versions
+Loosen those a bit so we can build it with our versions.
+See https://github.com/tensorflow/tensorflow/issues/44654
+
+Author: Alexander Grund (TU Dresden)
+
+diff --git a/tensorflow/tools/pip_package/setup.py b/tensorflow/tools/pip_package/setup.py
+index 3d4a64de2b4..b89d077a150 100644
+--- a/tensorflow/tools/pip_package/setup.py
++++ b/tensorflow/tools/pip_package/setup.py
+@@ -78,20 +78,20 @@ REQUIRED_PACKAGES = [
+     # NOTE: As numpy has releases that break semver guarantees and several other
+     # deps depend on numpy without an upper bound, we must install numpy before
+     # everything else.
+-    'numpy ~= 1.19.2',
++    'numpy >= 1.19.2',
+     # Install other dependencies
+     'absl-py ~= 0.10',
+     'astunparse ~= 1.6.3',
+     'clang ~= 5.0',
+-    'flatbuffers ~= 1.12.0',
++    'flatbuffers >= 1.12.0',
+     'google_pasta ~= 0.2',
+-    'h5py ~= 3.1.0',
++    'h5py ~= 3.1',
+     'keras_preprocessing ~= 1.1.2',
+     'opt_einsum ~= 3.3.0',
+     'protobuf >= 3.9.2',
+-    'six ~= 1.15.0',
++    'six >= 1.15.0',
+     'termcolor ~= 1.1.0',
+-    'typing_extensions ~= 3.7.4',
++    'typing_extensions >= 3.7.4',
+     'wheel ~= 0.35',
+     'wrapt ~= 1.12.1',
+     # These packages need to be pinned exactly as newer versions are
diff --git a/Golden_Repo/t/TensorFlow/h5py-2.10.0_avoid-mpi-init.patch b/Golden_Repo/t/TensorFlow/h5py-2.10.0_avoid-mpi-init.patch
new file mode 100644
index 0000000000000000000000000000000000000000..98034776400e528d4baebce3c01bd9dca5bfc4a9
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/h5py-2.10.0_avoid-mpi-init.patch
@@ -0,0 +1,85 @@
+avoid that 'import h5py' triggers MPI_Init via mpi4py
+
+backported to h5py 2.10.0 from https://github.com/h5py/h5py/pull/1552 by Kenneth Hoste (HPC-UGent)
+
+diff -ru h5py-2.10.0.orig/h5py/api_types_ext.pxd h5py-2.10.0/h5py/api_types_ext.pxd
+--- h5py-2.10.0.orig/h5py/api_types_ext.pxd	2019-09-06 23:29:33.000000000 +0200
++++ h5py-2.10.0/h5py/api_types_ext.pxd	2020-05-25 19:30:30.000000000 +0200
+@@ -12,7 +12,7 @@
+ include 'config.pxi'
+ 
+ IF MPI:
+-    from mpi4py.MPI cimport MPI_Comm, MPI_Info, Comm, Info
++    from mpi4py.libmpi cimport MPI_Comm, MPI_Info
+ 
+ cdef extern from "stdlib.h":
+   ctypedef long size_t
+@@ -52,6 +52,7 @@
+ cdef extern from "Python.h":
+   ctypedef void PyObject
+   ctypedef ssize_t Py_ssize_t
++  ctypedef size_t Py_uintptr_t
+ 
+   PyObject* PyErr_Occurred()
+   void PyErr_SetString(object type, char *message)
+diff -ru h5py-2.10.0.orig/h5py/h5p.pyx h5py-2.10.0/h5py/h5p.pyx
+--- h5py-2.10.0.orig/h5py/h5p.pyx	2019-09-06 23:29:33.000000000 +0200
++++ h5py-2.10.0/h5py/h5p.pyx	2020-05-25 19:33:24.000000000 +0200
+@@ -17,6 +17,7 @@
+ from cpython.buffer cimport PyObject_CheckBuffer, \
+                             PyObject_GetBuffer, PyBuffer_Release, \
+                             PyBUF_SIMPLE
++from cpython.long cimport PyLong_AsVoidPtr
+ 
+ from utils cimport  require_tuple, convert_dims, convert_tuple, \
+                     emalloc, efree, \
+@@ -1161,7 +1162,7 @@
+ 
+     IF MPI:
+         @with_phil
+-        def set_fapl_mpio(self, Comm comm not None, Info info not None):
++        def set_fapl_mpio(self, comm, info):
+             """ (Comm comm, Info info)
+ 
+             Set MPI-I/O Parallel HDF5 driver.
+@@ -1169,7 +1170,12 @@
+             Comm: An mpi4py.MPI.Comm instance
+             Info: An mpi4py.MPI.Info instance
+             """
+-            H5Pset_fapl_mpio(self.id, comm.ob_mpi, info.ob_mpi)
++            from mpi4py.MPI import Comm, Info, _handleof
++            assert isinstance(comm, Comm)
++            assert isinstance(info, Info)
++            cdef Py_uintptr_t _comm = _handleof(comm)
++            cdef Py_uintptr_t _info = _handleof(info)
++            H5Pset_fapl_mpio(self.id, <MPI_Comm>_comm, <MPI_Info>_info)
+ 
+ 
+         @with_phil
+@@ -1183,20 +1189,22 @@
+             """
+             cdef MPI_Comm comm
+             cdef MPI_Info info
++            from mpi4py.MPI import Comm, Info, _addressof
+ 
+             H5Pget_fapl_mpio(self.id, &comm, &info)
+             pycomm = Comm()
+-            pyinfo = Info()
+-            MPI_Comm_dup(comm, &pycomm.ob_mpi)
+-            MPI_Info_dup(info, &pyinfo.ob_mpi)
++            MPI_Comm_dup(comm, <MPI_Comm *>PyLong_AsVoidPtr(_addressof(pycomm)))
+             MPI_Comm_free(&comm)
++
++            pyinfo = Info()
++            MPI_Info_dup(info, <MPI_Info *>PyLong_AsVoidPtr(_addressof(pyinfo)))
+             MPI_Info_free(&info)
+ 
+             return (pycomm, pyinfo)
+ 
+ 
+         @with_phil
+-        def set_fapl_mpiposix(self, Comm comm not None, bint use_gpfs_hints=0):
++        def set_fapl_mpiposix(self, comm, bint use_gpfs_hints=0):
+             """ Obsolete.
+             """
+             raise RuntimeError("MPI-POSIX driver is broken; removed in h5py 2.3.1")
diff --git a/Golden_Repo/t/TensorFlow/scipy-1.4.1-fix-pthread.patch b/Golden_Repo/t/TensorFlow/scipy-1.4.1-fix-pthread.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d399b2ba41265152cd2cf49902a187c45b0612d0
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/scipy-1.4.1-fix-pthread.patch
@@ -0,0 +1,39 @@
+From https://github.com/scipy/scipy/pull/11324
+Author: Peter Bell <peterbell10@live.co.uk>
+diff --git a/scipy/fft/_pocketfft/setup.py b/scipy/fft/_pocketfft/setup.py
+index a4411bdedb1..493387d9719 100644
+--- a/scipy/fft/_pocketfft/setup.py
++++ b/scipy/fft/_pocketfft/setup.py
+@@ -5,20 +5,28 @@ def pre_build_hook(build_ext, ext):
+     cc = build_ext._cxx_compiler
+     args = ext.extra_compile_args
+ 
+-    std_flag = get_cxx_std_flag(build_ext._cxx_compiler)
++    std_flag = get_cxx_std_flag(cc)
+     if std_flag is not None:
+         args.append(std_flag)
+ 
+     if cc.compiler_type == 'msvc':
+         args.append('/EHsc')
+     else:
+-        try_add_flag(args, cc, '-fvisibility=hidden')
+-
++        # Use pthreads if available
+         has_pthreads = try_compile(cc, code='#include <pthread.h>\n'
+                                    'int main(int argc, char **argv) {}')
+         if has_pthreads:
+             ext.define_macros.append(('POCKETFFT_PTHREADS', None))
+-
++            if has_flag(cc, '-pthread'):
++                args.append('-pthread')
++                ext.extra_link_args.append('-pthread')
++            else:
++                raise RuntimeError("Build failed: System has pthreads header "
++                                   "but could not compile with -pthread option")
++
++        # Don't export library symbols
++        try_add_flag(args, cc, '-fvisibility=hidden')
++        # Set min macOS version
+         min_macos_flag = '-mmacosx-version-min=10.9'
+         import sys
+         if sys.platform == 'darwin' and has_flag(cc, min_macos_flag):
diff --git a/Golden_Repo/t/TensorFlow/tensorboard-2.6.0-jupyter.patch b/Golden_Repo/t/TensorFlow/tensorboard-2.6.0-jupyter.patch
new file mode 100644
index 0000000000000000000000000000000000000000..29be79e99025e6cbfd461724442530a263b06889
--- /dev/null
+++ b/Golden_Repo/t/TensorFlow/tensorboard-2.6.0-jupyter.patch
@@ -0,0 +1,93 @@
+--- tensorboard/tensorboard-2.6.0/tensorboard/notebook.py.orig	2022-04-04 15:13:24.242666542 +0200
++++ tensorboard/tensorboard-2.6.0/tensorboard/notebook.py	2022-04-04 15:22:16.791830780 +0200
+@@ -34,6 +34,7 @@
+ # details).
+ _CONTEXT_COLAB = "_CONTEXT_COLAB"
+ _CONTEXT_IPYTHON = "_CONTEXT_IPYTHON"
++_CONTEXT_JUPYTERHUB = "_CONTEXT_JUPYTERHUB"
+ _CONTEXT_NONE = "_CONTEXT_NONE"
+ 
+ 
+@@ -70,11 +71,27 @@
+     else:
+         ipython = IPython.get_ipython()
+         if ipython is not None and ipython.has_trait("kernel"):
++            if os.environ.get("JUPYTERHUB_SERVICE_PREFIX") is not None:
++                return _CONTEXT_JUPYTERHUB
+             return _CONTEXT_IPYTHON
+ 
+     # Otherwise, we're not in a known notebook context.
+     return _CONTEXT_NONE
+ 
++def _prefix_jupyterhub(port):
++    prefix = os.path.join(os.environ["JUPYTERHUB_SERVICE_PREFIX"], 'proxy/absolute')
++    return "%s/%d/" % (prefix, port)
++
++
++def _patch_args_jupyterhub(parsed_args):
++    if "--port" in parsed_args:
++        arg_idx = parsed_args.index("--port")
++        port = int(parsed_args[arg_idx+1])
++    else:
++        port = 6006
++        parsed_args += ["--port", str(port)]
++    return parsed_args + ["--path_prefix", _prefix_jupyterhub(port)]
++
+ 
+ def load_ipython_extension(ipython):
+     """Deprecated: use `%load_ext tensorboard` instead.
+@@ -149,6 +166,9 @@
+             handle.update(IPython.display.Pretty(message))
+ 
+     parsed_args = shlex.split(args_string, comments=True, posix=True)
++    if context == _CONTEXT_JUPYTERHUB:
++        parsed_args = _patch_args_jupyterhub(parsed_args)
++
+     start_result = manager.start(parsed_args)
+ 
+     if isinstance(start_result, manager.StartLaunched):
+@@ -305,6 +325,7 @@
+     fn = {
+         _CONTEXT_COLAB: _display_colab,
+         _CONTEXT_IPYTHON: _display_ipython,
++        _CONTEXT_JUPYTERHUB: _display_jupyterhub,
+         _CONTEXT_NONE: _display_cli,
+     }[_get_context()]
+     return fn(port=port, height=height, display_handle=display_handle)
+@@ -401,6 +422,36 @@
+     for (k, v) in replacements:
+         shell = shell.replace(k, v)
+     iframe = IPython.display.HTML(shell)
++    if display_handle:
++        display_handle.update(iframe)
++    else:
++        IPython.display.display(iframe)
++
++
++def _display_jupyterhub(port, height, display_handle):
++    import IPython.display
++
++    frame_id = "tensorboard-frame-{:08x}".format(random.getrandbits(64))
++    shell = """
++      <iframe id="%HTML_ID%" width="100%" height="%HEIGHT%" frameborder="0">
++      </iframe>
++      <script>
++        (function() {
++          const frame = document.getElementById(%JSON_ID%);
++          const url = new URL("%PREFIX%", window.location);
++          frame.src = url;
++        })();
++      </script>
++  """
++    replacements = [
++        ("%HTML_ID%", html.escape(frame_id, quote=True)),
++        ("%JSON_ID%", json.dumps(frame_id)),
++        ("%PREFIX%", _prefix_jupyterhub(port)),
++        ("%HEIGHT%", "%d" % height),
++    ]
++    for (k, v) in replacements:
++        shell = shell.replace(k, v)
++    iframe = IPython.display.HTML(shell)
+     if display_handle:
+         display_handle.update(iframe)
+     else:
diff --git a/Golden_Repo/t/TotalView/TotalView-2021-4.10-GCCcore-11.2.0.eb b/Golden_Repo/t/TotalView/TotalView-2021.4.10-GCCcore-11.2.0.eb
similarity index 96%
rename from Golden_Repo/t/TotalView/TotalView-2021-4.10-GCCcore-11.2.0.eb
rename to Golden_Repo/t/TotalView/TotalView-2021.4.10-GCCcore-11.2.0.eb
index be5d4ff83e070bb4664bbb414c49f854583b5239..d29655489ecde1d55b976e64a1def49e188558a2 100644
--- a/Golden_Repo/t/TotalView/TotalView-2021-4.10-GCCcore-11.2.0.eb
+++ b/Golden_Repo/t/TotalView/TotalView-2021.4.10-GCCcore-11.2.0.eb
@@ -52,8 +52,10 @@ sources = [
     '%(namelower)s.%(version)s-doc.tar',
 ]
 checksums = [
-    '7e5509b2cfb219100b0032304bdad7d422657c0736c386ba64bdb1bf11d10a1d',  # totalview_2021.4.10_linux_x86-64.tar
-    'c476288ebe1964e0803c7316975c71a957e52f45187b135bc1dc3b65491bb61d',  # totalview.2021.4.10-doc.tar
+    # totalview_2021.4.10_linux_x86-64.tar
+    '7e5509b2cfb219100b0032304bdad7d422657c0736c386ba64bdb1bf11d10a1d',
+    # totalview.2021.4.10-doc.tar
+    'c476288ebe1964e0803c7316975c71a957e52f45187b135bc1dc3b65491bb61d',
 ]
 
 sanity_check_paths = {
diff --git a/Golden_Repo/t/torchvision/torchvision-0.12.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb b/Golden_Repo/t/torchvision/torchvision-0.12.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb
new file mode 100644
index 0000000000000000000000000000000000000000..4d15d9bec076613067e8e6694d30a0609376ded9
--- /dev/null
+++ b/Golden_Repo/t/torchvision/torchvision-0.12.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb
@@ -0,0 +1,23 @@
+name = 'torchvision'
+version = '0.12.0'
+versionsuffix = '-CUDA-%(cudaver)s'
+
+homepage = 'https://github.com/pytorch/vision'
+description = " Datasets, Transforms and Models specific to Computer Vision"
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+
+source_urls = ['https://github.com/pytorch/vision/archive']
+sources = ['v%(version)s.tar.gz']
+checksums = ['99e6d3d304184895ff4f6152e2d2ec1cbec89b3e057d9c940ae0125546b04e91']
+
+builddependencies = [('CMake', '3.21.1')]
+
+dependencies = [
+    ('CUDA', '11.5', '', True),
+    ('Python', '3.9.6'),
+    ('Pillow-SIMD', '9.0.1'),
+    ('PyTorch', '1.11', '-CUDA-%(cudaver)s'),
+]
+
+moduleclass = 'vis'
diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-DC-CUDA.eb b/Golden_Repo/u/UCX-settings/UCX-settings-DC-CUDA.eb
index 79cc3e6d1f10fe152b7f03df83019b8fdf25940f..10736b3933bac123080c49c1740d8de90fbf2362 100644
--- a/Golden_Repo/u/UCX-settings/UCX-settings-DC-CUDA.eb
+++ b/Golden_Repo/u/UCX-settings/UCX-settings-DC-CUDA.eb
@@ -4,7 +4,10 @@ name = 'UCX-settings'
 version = 'DC-CUDA'
 
 homepage = ''
-description = 'This module sets UCX to use DC as the transport layer, together with the CUWA-aware transports.'
+description = '''
+This module sets UCX to use DC as the transport layer, together with the CUWA-aware transports.
+The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails.
+'''
 
 site_contacts = 'd.alvarez@fz-juelich.de'
 
@@ -15,6 +18,10 @@ source_urls = []
 sources = []
 modextravars = {
     'UCX_TLS': 'dc_x,self,sm,cuda_ipc,gdr_copy,cuda_copy',
+    # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases.
+    # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet
+    # fabric and result in a slow down
+    'UCX_MAX_RNDV_RAILS': '1',
 }
 
 moduleclass = 'system'
diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-DC.eb b/Golden_Repo/u/UCX-settings/UCX-settings-DC.eb
index 3c8fb051486c0b1d3c6b62e3d980f6b9bdfcefeb..b90e9b8d26c21fed3b94949589acd2567cc0fc65 100644
--- a/Golden_Repo/u/UCX-settings/UCX-settings-DC.eb
+++ b/Golden_Repo/u/UCX-settings/UCX-settings-DC.eb
@@ -4,7 +4,10 @@ name = 'UCX-settings'
 version = 'DC'
 
 homepage = ''
-description = 'This module sets UCX to use DC as the transport layer.'
+description = '''
+This module sets UCX to use DC as the transport layer.
+The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails.
+'''
 
 site_contacts = 'd.alvarez@fz-juelich.de'
 
@@ -15,6 +18,10 @@ source_urls = []
 sources = []
 modextravars = {
     'UCX_TLS': 'dc_x,self,sm',
+    # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases.
+    # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet
+    # fabric and result in a slow down
+    'UCX_MAX_RNDV_RAILS': '1',
 }
 
 moduleclass = 'system'
diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-RC-CUDA.eb b/Golden_Repo/u/UCX-settings/UCX-settings-RC-CUDA.eb
index 09b72c4dcccab0b121c9168df2edadedac1bedaf..ffeddf594c2951c303e2f1b4fc3b4d25c7e1c7c3 100644
--- a/Golden_Repo/u/UCX-settings/UCX-settings-RC-CUDA.eb
+++ b/Golden_Repo/u/UCX-settings/UCX-settings-RC-CUDA.eb
@@ -4,7 +4,10 @@ name = 'UCX-settings'
 version = 'RC-CUDA'
 
 homepage = ''
-description = 'This module sets UCX to use RC as the transport layer, together with the CUWA-aware transports.'
+description = '''
+This module sets UCX to use RC as the transport layer, together with the CUWA-aware transports.
+The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails.
+'''
 
 site_contacts = 'd.alvarez@fz-juelich.de'
 
@@ -15,6 +18,10 @@ source_urls = []
 sources = []
 modextravars = {
     'UCX_TLS': 'rc_x,self,sm,cuda_ipc,gdr_copy,cuda_copy',
+    # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases.
+    # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet
+    # fabric and result in a slow down
+    'UCX_MAX_RNDV_RAILS': '1',
 }
 
 moduleclass = 'system'
diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-RC.eb b/Golden_Repo/u/UCX-settings/UCX-settings-RC.eb
index 8ff031dcc477c29b9a875972707f454d039f265f..b9ca3f7907ea480f5c9c9a1a7514f745df2b4367 100644
--- a/Golden_Repo/u/UCX-settings/UCX-settings-RC.eb
+++ b/Golden_Repo/u/UCX-settings/UCX-settings-RC.eb
@@ -4,7 +4,10 @@ name = 'UCX-settings'
 version = 'RC'
 
 homepage = ''
-description = 'This module sets UCX to use RC as the transport layer.'
+description = '''
+This module sets UCX to use RC as the transport layer.
+The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails.
+'''
 
 site_contacts = 'd.alvarez@fz-juelich.de'
 
@@ -15,6 +18,10 @@ source_urls = []
 sources = []
 modextravars = {
     'UCX_TLS': 'rc_x,self,sm',
+    # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases.
+    # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet
+    # fabric and result in a slow down
+    'UCX_MAX_RNDV_RAILS': '1',
 }
 
 moduleclass = 'system'
diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-UD-CUDA.eb b/Golden_Repo/u/UCX-settings/UCX-settings-UD-CUDA.eb
index 565dcf982e25928540f7a0d7e71b502d99960083..b5d411e1011daaa0f0b1024c5fe8a8e46dcd4851 100644
--- a/Golden_Repo/u/UCX-settings/UCX-settings-UD-CUDA.eb
+++ b/Golden_Repo/u/UCX-settings/UCX-settings-UD-CUDA.eb
@@ -4,7 +4,10 @@ name = 'UCX-settings'
 version = 'UD-CUDA'
 
 homepage = ''
-description = 'This module sets UCX to use UD as the transport layer, together with the CUWA-aware transports.'
+description = '''
+This module sets UCX to use UD as the transport layer, together with the CUWA-aware transports.
+The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails.
+'''
 
 site_contacts = 'd.alvarez@fz-juelich.de'
 
@@ -15,6 +18,10 @@ source_urls = []
 sources = []
 modextravars = {
     'UCX_TLS': 'ud_x,self,sm,cuda_ipc,gdr_copy,cuda_copy',
+    # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases.
+    # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet
+    # fabric and result in a slow down
+    'UCX_MAX_RNDV_RAILS': '1',
 }
 
 moduleclass = 'system'
diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-UD.eb b/Golden_Repo/u/UCX-settings/UCX-settings-UD.eb
index 7c4c85549c3ed853e78d0c3b0209a9ecf5eb6577..0d0e25b211d138cadc2f02b5ddf311070ff9952d 100644
--- a/Golden_Repo/u/UCX-settings/UCX-settings-UD.eb
+++ b/Golden_Repo/u/UCX-settings/UCX-settings-UD.eb
@@ -4,7 +4,10 @@ name = 'UCX-settings'
 version = 'UD'
 
 homepage = ''
-description = 'This module sets UCX to use UD as the transport layer.'
+description = '''
+This module sets UCX to use UD as the transport layer.
+The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails.
+'''
 
 site_contacts = 'd.alvarez@fz-juelich.de'
 
@@ -15,6 +18,10 @@ source_urls = []
 sources = []
 modextravars = {
     'UCX_TLS': 'ud_x,self,sm',
+    # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases.
+    # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet
+    # fabric and result in a slow down
+    'UCX_MAX_RNDV_RAILS': '1',
 }
 
 moduleclass = 'system'
diff --git a/Golden_Repo/u/UCX/UCX-1.12.1.eb b/Golden_Repo/u/UCX/UCX-1.12.1.eb
new file mode 100644
index 0000000000000000000000000000000000000000..70f33c6b2711e42b65c10aec4ddfa725696fbcad
--- /dev/null
+++ b/Golden_Repo/u/UCX/UCX-1.12.1.eb
@@ -0,0 +1,76 @@
+easyblock = 'ConfigureMake'
+
+name = 'UCX'
+version = '1.12.1'
+
+homepage = 'https://www.openucx.org/'
+description = """Unified Communication X
+An open-source production grade communication framework for data centric
+and high-performance applications
+"""
+
+toolchain = SYSTEM
+toolchainopts = {'pic': True}
+
+source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s']
+sources = ['%(namelower)s-%(version)s.tar.gz']
+checksums = ['40b447c8e7da94a253f2828001b2d76021eb4ad39647107d433d62d61e18ae8e']
+
+builddependencies = [
+    ('binutils', '2.37'),
+    ('Autotools', '20210726'),
+    ('pkg-config', '0.29.2'),
+]
+
+osdependencies = [OS_PKG_IBVERBS_DEV]
+
+dependencies = [
+    ('zlib', '1.2.11'),
+    ('numactl', '2.0.14'),
+    ('CUDA', '11.5'),
+]
+
+configopts = '--with-verbs '  # Build OpenFabrics support
+configopts += '--without-java '
+configopts += '--disable-doxygen-doc '
+
+# Enable machine-specific optimizations, default: NO
+configopts += '--enable-optimizations '
+# configopts += '--enable-tuning '       # Enable parameter tuning in run-time, default: NO
+# Enable thread support in UCP and UCT, default: NO
+configopts += '--enable-mt '
+configopts += '--disable-debug '
+configopts += '--disable-logging '
+configopts += '--disable-assertions '
+configopts += '--disable-params-check '
+configopts += '--disable-dependency-tracking '
+configopts += '--with-cuda=$EBROOTCUDA '
+
+configopts += '--enable-cma '           # Enable Cross Memory Attach
+
+# Compile with IB Reliable Connection support
+configopts += '--with-rc '
+# Compile with IB Unreliable Datagram support
+configopts += '--with-ud '
+# Compile with IB Dynamic Connection support
+configopts += '--with-dc '
+configopts += '--with-mlx5-dv '         # Compile with mlx5 Direct Verbs support
+configopts += '--with-ib-hw-tm '        # Compile with IB Tag Matching support
+configopts += '--with-dm '              # Compile with Device Memory support
+
+configopts += '--with-avx '             # Compile with AVX
+configopts += '--with-gdrcopy '         # Compile with GDRCopy
+
+# Compile without IB Connection Manager support
+configopts += '--without-cm '
+
+buildopts = 'V=1'
+
+sanity_check_paths = {
+    'files': ['bin/ucx_info', 'bin/ucx_perftest', 'bin/ucx_read_profile'],
+    'dirs': ['include', 'lib', 'share']
+}
+
+sanity_check_commands = ["ucx_info -d"]
+
+moduleclass = 'system'
diff --git a/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gompi-2021b.eb b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gompi-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..18aac1c35e2cd0fb37b817a2382e9b76e3fc0b59
--- /dev/null
+++ b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gompi-2021b.eb
@@ -0,0 +1,31 @@
+easyblock = 'ConfigureMake'
+
+name = 'Valgrind'
+version = '3.18.1'
+
+homepage = 'https://valgrind.org'
+description = "Valgrind: Debugging and profiling tools"
+
+toolchain = {'name': 'gompi', 'version': '2021b'}
+
+source_urls = [
+    'https://sourceware.org/pub/valgrind/',
+    'https://www.mirrorservice.org/sites/sourceware.org/pub/valgrind/',
+]
+sources = [SOURCELOWER_TAR_BZ2]
+checksums = ['00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5']
+
+configopts = ' --with-mpicc="$MPICC"'
+
+local_binaries = [
+    'callgrind_annotate', 'callgrind_control', 'cg_annotate', 'cg_diff',
+    'cg_merge', 'ms_print', 'valgrind', 'valgrind-listener', 'vgdb'
+]
+
+sanity_check_paths = {
+    'files': ['bin/%s' % x for x in local_binaries] +
+             ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT],
+    'dirs': []
+}
+
+moduleclass = 'debugger'
diff --git a/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gpsmpi-2021b.eb b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gpsmpi-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..787b6fefd1a7404e2349385f842e6bd6269deaf6
--- /dev/null
+++ b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gpsmpi-2021b.eb
@@ -0,0 +1,31 @@
+easyblock = 'ConfigureMake'
+
+name = 'Valgrind'
+version = '3.18.1'
+
+homepage = 'https://valgrind.org'
+description = "Valgrind: Debugging and profiling tools"
+
+toolchain = {'name': 'gpsmpi', 'version': '2021b'}
+
+source_urls = [
+    'https://sourceware.org/pub/valgrind/',
+    'https://www.mirrorservice.org/sites/sourceware.org/pub/valgrind/',
+]
+sources = [SOURCELOWER_TAR_BZ2]
+checksums = ['00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5']
+
+configopts = ' --with-mpicc="$MPICC"'
+
+local_binaries = [
+    'callgrind_annotate', 'callgrind_control', 'cg_annotate', 'cg_diff',
+    'cg_merge', 'ms_print', 'valgrind', 'valgrind-listener', 'vgdb'
+]
+
+sanity_check_paths = {
+    'files': ['bin/%s' % x for x in local_binaries] +
+             ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT],
+    'dirs': []
+}
+
+moduleclass = 'debugger'
diff --git a/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iimpi-2021b.eb b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iimpi-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..6d3cac194b54b296bf1ec8c4060c5b7041b24249
--- /dev/null
+++ b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iimpi-2021b.eb
@@ -0,0 +1,32 @@
+easyblock = 'ConfigureMake'
+
+name = 'Valgrind'
+version = '3.18.1'
+
+homepage = 'https://valgrind.org'
+description = "Valgrind: Debugging and profiling tools"
+
+toolchain = {'name': 'iimpi', 'version': '2021b'}
+
+source_urls = [
+    'https://sourceware.org/pub/valgrind/',
+    'https://www.mirrorservice.org/sites/sourceware.org/pub/valgrind/',
+]
+sources = [SOURCELOWER_TAR_BZ2]
+checksums = ['00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5']
+
+preconfigopts = 'unset CC CFLAGS &&'
+configopts = ' --with-mpicc="$MPICC"'
+
+local_binaries = [
+    'callgrind_annotate', 'callgrind_control', 'cg_annotate', 'cg_diff',
+    'cg_merge', 'ms_print', 'valgrind', 'valgrind-listener', 'vgdb'
+]
+
+sanity_check_paths = {
+    'files': ['bin/%s' % x for x in local_binaries] +
+             ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT],
+    'dirs': []
+}
+
+moduleclass = 'debugger'
diff --git a/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iompi-2021b.eb b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iompi-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..950a0366028510f5679c8c0a0606a8c12f3b7550
--- /dev/null
+++ b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iompi-2021b.eb
@@ -0,0 +1,32 @@
+easyblock = 'ConfigureMake'
+
+name = 'Valgrind'
+version = '3.18.1'
+
+homepage = 'https://valgrind.org'
+description = "Valgrind: Debugging and profiling tools"
+
+toolchain = {'name': 'iompi', 'version': '2021b'}
+
+source_urls = [
+    'https://sourceware.org/pub/valgrind/',
+    'https://www.mirrorservice.org/sites/sourceware.org/pub/valgrind/',
+]
+sources = [SOURCELOWER_TAR_BZ2]
+checksums = ['00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5']
+
+preconfigopts = 'unset CC CFLAGS &&'
+configopts = ' --with-mpicc="$MPICC"'
+
+local_binaries = [
+    'callgrind_annotate', 'callgrind_control', 'cg_annotate', 'cg_diff',
+    'cg_merge', 'ms_print', 'valgrind', 'valgrind-listener', 'vgdb'
+]
+
+sanity_check_paths = {
+    'files': ['bin/%s' % x for x in local_binaries] +
+             ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT],
+    'dirs': []
+}
+
+moduleclass = 'debugger'
diff --git a/Golden_Repo/v/Valgrind/Valgrind-3.18.1-ipsmpi-2021b.eb b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-ipsmpi-2021b.eb
new file mode 100644
index 0000000000000000000000000000000000000000..7eec2e97e087135c619ba53e4c67e8a42fa20668
--- /dev/null
+++ b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-ipsmpi-2021b.eb
@@ -0,0 +1,32 @@
+easyblock = 'ConfigureMake'
+
+name = 'Valgrind'
+version = '3.18.1'
+
+homepage = 'https://valgrind.org'
+description = "Valgrind: Debugging and profiling tools"
+
+toolchain = {'name': 'ipsmpi', 'version': '2021b'}
+
+source_urls = [
+    'https://sourceware.org/pub/valgrind/',
+    'https://www.mirrorservice.org/sites/sourceware.org/pub/valgrind/',
+]
+sources = [SOURCELOWER_TAR_BZ2]
+checksums = ['00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5']
+
+preconfigopts = 'unset CC CFLAGS &&'
+configopts = ' --with-mpicc="$MPICC"'
+
+local_binaries = [
+    'callgrind_annotate', 'callgrind_control', 'cg_annotate', 'cg_diff',
+    'cg_merge', 'ms_print', 'valgrind', 'valgrind-listener', 'vgdb'
+]
+
+sanity_check_paths = {
+    'files': ['bin/%s' % x for x in local_binaries] +
+             ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT],
+    'dirs': []
+}
+
+moduleclass = 'debugger'
diff --git a/Golden_Repo/x/xpra/xpra-4.3.1-GCCcore-11.2.0.eb b/Golden_Repo/x/xpra/xpra-4.3.2-GCCcore-11.2.0.eb
similarity index 75%
rename from Golden_Repo/x/xpra/xpra-4.3.1-GCCcore-11.2.0.eb
rename to Golden_Repo/x/xpra/xpra-4.3.2-GCCcore-11.2.0.eb
index 3fea4dff61129f13e6273a4204571949bf08a5ec..0cf74cbfd0963da9018069ce60ceea41fc4c5c40 100644
--- a/Golden_Repo/x/xpra/xpra-4.3.1-GCCcore-11.2.0.eb
+++ b/Golden_Repo/x/xpra/xpra-4.3.2-GCCcore-11.2.0.eb
@@ -1,7 +1,7 @@
 easyblock = 'Bundle'
 
 name = 'xpra'
-version = '4.3.1'
+version = '4.3.2'
 
 homepage = "http://www.xpra.org"
 description = """Xpra is an open-source multi-platform persistent remote display server and client
@@ -27,12 +27,14 @@ dependencies = [
     ('PyGObject', '3.42.0'),
     ('Pandoc', '2.16.1', '', SYSTEM),
     ('GTK+', '3.24.23'),
+    ('rencode', '1.0.5'),
     ('lz4', '1.9.3'),
     ('yuicompressor', '2.4.8'),
     ('x264', '20210613'),
     ('x265', '3.4'),
     ('libvpx', '1.11.0'),
     ('FFmpeg', '4.4.1'),
+    ('GStreamer', '1.18.6'),
     ('libwebp', '1.2.0'),
     ('libpng', '1.6.37'),
     ('libspng', '0.7.1'),
@@ -80,13 +82,23 @@ exts_list = [
         ('checksums', [('sha256', '99392b676c77b5795b86b7d75274db33fe754fd1e06fb3d58b167c797dc47f0c')]),
         ('modulename', 'uinput'),
     ])),
-    ('xpra', '4.3.1', dict(list(local_common_opts.items()) + [
+    ('ifaddr', '0.1.7', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '1f9e8a6ca6f16db5a37d3356f07b6e52344f6f9f7e806d618537731669eb1a94')]),
+    ])),
+    ('zeroconf', '0.38.4', dict(list(local_common_opts.items()) + [
+        ('checksums', [('sha256', '080c540ea4b8b9defa9f3ac05823c1725ea2c8aacda917bfc0193f6758b95aeb')]),
+    ])),
+    ('xpra', '4.3.2', dict(list(local_common_opts.items()) + [
         ('source_urls', ['https://github.com/Xpra-org/%(name)s/archive/']),
         ('source_tmpl', 'v%(version)s.tar.gz'),
-        ('patches', ['xpra-4.0.4-use_Xorg_on_PATH_first.patch']),
+        ('patches', [
+            'xpra-4.0.4-use_Xorg_on_PATH_first.patch',
+            'xpra-iconsearch-XDG_DATA_DIRS.patch',
+        ]),
         ('checksums', [
-            ('sha256', '1b90f68cc32a0b51d8bf09c92191b5c8b70ed98f0e9455c49e8a25d141de3660'),
+            ('sha256', '1e548b8d20c243fba40692abb0aa2759e3bd3f2d3b6b51a160f82746cdf1d782'),
             ('sha256', '83053938421de4dfd4ff8cd5430414180e9f33d5c59b4f1c1428095db6b1fa71'),
+            ('sha256', '7bb677302308dacdc55f9a862b6eee43f0a8d2b4524a8dec6d80bcdf3982d6af'),
         ]),
         ('use_pip', False),
         ('buildopts', '--without-strict --with-nvenc --with-nvjpeg --with-Xdummy'),
@@ -95,7 +107,11 @@ exts_list = [
     ('xpra-html5', '4.5.2', dict(list(local_common_opts.items()) + [
         ('source_urls', ['https://github.com/Xpra-org/%(name)s/archive/']),
         ('source_tmpl', 'v%(version)s.tar.gz'),
-        ('checksums', [('sha256', '7f4ccea864fdfb8d6c71a77100fcb2ad07af0773eaafc528ec19ff8187d9bfdb')]),
+        ('patches', ['xprahtml-4.5.2-encryptionfix.patch']),
+        ('checksums', [
+            ('sha256', '7f4ccea864fdfb8d6c71a77100fcb2ad07af0773eaafc528ec19ff8187d9bfdb'),
+            ('sha256', 'be0b430f7e6970eb35912c5c2cc7fb9f2073f94485c12776d06752cf8c0f6023'),
+        ]),
         ('use_pip', False),
         ('skipsteps', ['configure', 'build', 'install']),  # install in postinstallcmds
         ('modulename', 'xpra'),
@@ -109,6 +125,13 @@ postinstallcmds = [
         './setup.py install %(installdir)s/share/xpra/www && '
         'popd'
     ),
+    # set specific configurations
+    (
+        # server config
+        'touch %(installdir)s/etc/xpra/server.env && '
+        "sed -i 's!^source =.*!source = %(installdir)s/etc/xpra/server.env!' "
+        "       %(installdir)s/etc/xpra/conf.d/60_server.conf"
+    ),
     # make Xpra randomly choose a GPU for acceleration if present
     'mv %(installdir)s/bin/xpra %(installdir)s/bin/xpra.orig',
     'head -1 %(installdir)s/bin/xpra.orig > %(installdir)s/bin/xpra',
@@ -130,8 +153,12 @@ postinstallcmds = [
         'EOF'
     ),
     'tail -n +2 %(installdir)s/bin/xpra.orig >> %(installdir)s/bin/xpra',
+    'chmod +x %(installdir)s/bin/xpra',
 ]
 
+modextravars = {
+    'XPRA_SYSTEM_CONF_DIRS': '%(installdir)s/etc/xpra',
+}
 modextrapaths = {
     'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'],
 }
diff --git a/Golden_Repo/x/xpra/xpra-iconsearch-XDG_DATA_DIRS.patch b/Golden_Repo/x/xpra/xpra-iconsearch-XDG_DATA_DIRS.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f5afb0bbd1c9d32b75e92354286d7a87dd04343d
--- /dev/null
+++ b/Golden_Repo/x/xpra/xpra-iconsearch-XDG_DATA_DIRS.patch
@@ -0,0 +1,23 @@
+diff -Naur xpra.orig/xpra/platform/xposix/menu_helper.py xpra/xpra/platform/xposix/menu_helper.py
+--- a/xpra.orig/xpra/platform/xposix/menu_helper.py	2022-03-30 23:59:37.274275428 +0200
++++ a/xpra/xpra/platform/xposix/menu_helper.py	2022-03-31 00:06:49.279245408 +0200
+@@ -177,8 +177,9 @@
+ def find_pixmap_icon(*names):
+     if not LOAD_FROM_PIXMAPS:
+         return None
++    pixmaps_dirs = [d + '/icons' for d in os.environ.get("XDG_DATA_DIRS").split(":")]
+     pixmaps_dir = "%s/share/pixmaps" % sys.prefix
+-    pixmaps_dirs = (pixmaps_dir, os.path.join(pixmaps_dir, "comps"))
++    pixmaps_dirs += (pixmaps_dir, os.path.join(pixmaps_dir, "comps"))
+     for d in pixmaps_dirs:
+         if not os.path.exists(d) or not os.path.isdir(d):
+             return None
+@@ -411,6 +412,8 @@
+         from xdg.Menu import MenuEntry
+         entries = {}
+         for d in LOAD_APPLICATIONS:
++            if not os.path.exists(d):
++                continue
+             for f in os.listdir(d):
+                 if not f.endswith(".desktop"):
+                     continue
diff --git a/Golden_Repo/x/xpra/xprahtml-4.5.2-encryptionfix.patch b/Golden_Repo/x/xpra/xprahtml-4.5.2-encryptionfix.patch
new file mode 100644
index 0000000000000000000000000000000000000000..40ec1ed1dad2ef5d34d422336ff42e888fce423b
--- /dev/null
+++ b/Golden_Repo/x/xpra/xprahtml-4.5.2-encryptionfix.patch
@@ -0,0 +1,13 @@
+--- a/html5/js/Protocol.js.orig    2022-03-28 12:59:40.198667996 +0200
++++ b/html5/js/Protocol.js 2022-03-28 13:02:38.099943598 +0200
+@@ -631,6 +631,10 @@
+ 		throw "unsupported encryption specified: '"+cipher+"'";
+ 	}
+ 	const key_salt = caps["cipher.key_salt"];
++	let key_salt = caps["cipher.key_salt"];
++	if (typeof key_salt !== 'string') {
++		key_salt = String.fromCharCode.apply(null, key_salt);
++	}
+ 	const iterations = caps["cipher.key_stretch_iterations"];
+ 	if (iterations<0) {
+ 		throw "invalid number of iterations: "+iterations;
diff --git a/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-GCC-11.2.0.eb b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-GCC-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..5c624b73d0e0d3a81b3610b3e9c9a5ea36e0f73d
--- /dev/null
+++ b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-GCC-11.2.0.eb
@@ -0,0 +1,62 @@
+easyblock = 'ConfigureMake'
+
+name = 'OpenMPI'
+version = '4.1.1'
+
+homepage = 'https://www.open-mpi.org/'
+description = """The Open MPI Project is an open source MPI-3 implementation."""
+
+toolchain = {'name': 'GCC', 'version': '11.2.0'}
+toolchainopts = {'pic': True}
+
+source_urls = [
+    'https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads']
+sources = [SOURCELOWER_TAR_BZ2]
+checksums = ['e24f7a778bd11a71ad0c14587a7f5b00e68a71aa5623e2157bafee3d44c07cda']
+
+osdependencies = [
+    # needed for --with-verbs
+    ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'),
+    # needed for --with-pmix
+    ('pmix-devel'),
+]
+
+builddependencies = [
+    ('Autotools', '20210726'),
+    ('pkg-config', '0.29.2'),
+]
+
+dependencies = [
+    ('zlib', '1.2.11'),
+    ('hwloc', '2.5.0'),
+    ('UCX', '1.11.2', '', SYSTEM),
+    ('CUDA', '11.5', '', SYSTEM),
+    ('libevent', '2.1.12'),
+]
+
+configopts = '--enable-shared '
+configopts += '--with-hwloc=$EBROOTHWLOC '  # hwloc support
+configopts += '--with-ucx=$EBROOTUCX '
+configopts += '--with-verbs '
+configopts += '--with-libevent=$EBROOTLIBEVENT '
+configopts += '--without-orte '
+configopts += '--without-psm2 '
+configopts += '--disable-oshmem '
+configopts += '--with-cuda=$EBROOTCUDA '
+# No IME in DEEP
+# configopts += '--with-ime=/opt/ddn/ime '
+# configopts += '--with-gpfs '
+
+# to enable SLURM integration (site-specific)
+configopts += '--with-slurm --with-pmix=external --with-libevent=external --with-ompi-pmix-rte'
+
+local_libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"]
+sanity_check_paths = {
+    'files': ["bin/%s" % local_binfile for local_binfile in ["ompi_info", "opal_wrapper"]] +
+             ["lib/lib%s.%s" % (local_libfile, SHLIB_EXT) for local_libfile in local_libs] +
+             ["include/%s.h" % x for x in ["mpi-ext", "mpif-config",
+                                           "mpif", "mpi", "mpi_portable_platform"]],
+    'dirs': [],
+}
+
+moduleclass = 'mpi'
diff --git a/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-intel-compilers-2021.4.0.eb b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-intel-compilers-2021.4.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..ce0fe23c8128a77b152ae77d8fc43eac86266eb2
--- /dev/null
+++ b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-intel-compilers-2021.4.0.eb
@@ -0,0 +1,62 @@
+easyblock = 'ConfigureMake'
+
+name = 'OpenMPI'
+version = '4.1.1'
+
+homepage = 'https://www.open-mpi.org/'
+description = """The Open MPI Project is an open source MPI-3 implementation."""
+
+toolchain = {'name': 'intel-compilers', 'version': '2021.4.0'}
+toolchainopts = {'pic': True}
+
+source_urls = [
+    'https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads']
+sources = [SOURCELOWER_TAR_BZ2]
+checksums = ['e24f7a778bd11a71ad0c14587a7f5b00e68a71aa5623e2157bafee3d44c07cda']
+
+osdependencies = [
+    # needed for --with-verbs
+    ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'),
+    # needed for --with-pmix
+    ('pmix-devel'),
+]
+
+builddependencies = [
+    ('Autotools', '20210726'),
+    ('pkg-config', '0.29.2'),
+]
+
+dependencies = [
+    ('zlib', '1.2.11'),
+    ('hwloc', '2.5.0'),
+    ('UCX', '1.11.2', '', SYSTEM),
+    ('CUDA', '11.5', '', SYSTEM),
+    ('libevent', '2.1.12'),
+]
+
+configopts = '--enable-shared '
+configopts += '--with-hwloc=$EBROOTHWLOC '  # hwloc support
+configopts += '--with-ucx=$EBROOTUCX '
+configopts += '--with-verbs '
+configopts += '--with-libevent=$EBROOTLIBEVENT '
+configopts += '--without-orte '
+configopts += '--without-psm2 '
+configopts += '--disable-oshmem '
+configopts += '--with-cuda=$EBROOTCUDA '
+# No IME in DEEP
+# configopts += '--with-ime=/opt/ddn/ime '
+# configopts += '--with-gpfs '
+
+# to enable SLURM integration (site-specific)
+configopts += '--with-slurm --with-pmix=external --with-libevent=external --with-ompi-pmix-rte'
+
+local_libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"]
+sanity_check_paths = {
+    'files': ["bin/%s" % local_binfile for local_binfile in ["ompi_info", "opal_wrapper"]] +
+             ["lib/lib%s.%s" % (local_libfile, SHLIB_EXT) for local_libfile in local_libs] +
+             ["include/%s.h" % x for x in ["mpi-ext", "mpif-config",
+                                           "mpif", "mpi", "mpi_portable_platform"]],
+    'dirs': [],
+}
+
+moduleclass = 'mpi'
diff --git a/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-GCC-11.2.0.eb b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-GCC-11.2.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..3b582b240f39375ab400c03b9ac8c6509ce9f608
--- /dev/null
+++ b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-GCC-11.2.0.eb
@@ -0,0 +1,62 @@
+easyblock = 'ConfigureMake'
+
+name = 'OpenMPI'
+version = '4.1.2'
+
+homepage = 'https://www.open-mpi.org/'
+description = """The Open MPI Project is an open source MPI-3 implementation."""
+
+toolchain = {'name': 'GCC', 'version': '11.2.0'}
+toolchainopts = {'pic': True}
+
+source_urls = [
+    'https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads']
+sources = [SOURCELOWER_TAR_BZ2]
+checksums = ['9b78c7cf7fc32131c5cf43dd2ab9740149d9d87cadb2e2189f02685749a6b527']
+
+osdependencies = [
+    # needed for --with-verbs
+    ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'),
+    # needed for --with-pmix
+    ('pmix-devel'),
+]
+
+builddependencies = [
+    ('Autotools', '20210726'),
+    ('pkg-config', '0.29.2'),
+]
+
+dependencies = [
+    ('zlib', '1.2.11'),
+    ('hwloc', '2.5.0'),
+    ('UCX', '1.11.2', '', SYSTEM),
+    ('CUDA', '11.5', '', SYSTEM),
+    ('libevent', '2.1.12'),
+]
+
+configopts = '--enable-shared '
+configopts += '--with-hwloc=$EBROOTHWLOC '  # hwloc support
+configopts += '--with-ucx=$EBROOTUCX '
+configopts += '--with-verbs '
+configopts += '--with-libevent=$EBROOTLIBEVENT '
+configopts += '--without-orte '
+configopts += '--without-psm2 '
+configopts += '--disable-oshmem '
+configopts += '--with-cuda=$EBROOTCUDA '
+# No IME in DEEP
+# configopts += '--with-ime=/opt/ddn/ime '
+# configopts += '--with-gpfs '
+
+# to enable SLURM integration (site-specific)
+configopts += '--with-slurm --with-pmix=external --with-libevent=external --with-ompi-pmix-rte'
+
+local_libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"]
+sanity_check_paths = {
+    'files': ["bin/%s" % local_binfile for local_binfile in ["ompi_info", "opal_wrapper"]] +
+             ["lib/lib%s.%s" % (local_libfile, SHLIB_EXT) for local_libfile in local_libs] +
+             ["include/%s.h" % x for x in ["mpi-ext", "mpif-config",
+                                           "mpif", "mpi", "mpi_portable_platform"]],
+    'dirs': [],
+}
+
+moduleclass = 'mpi'
diff --git a/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-NVHPC-22.1.eb b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-NVHPC-22.1.eb
new file mode 100644
index 0000000000000000000000000000000000000000..6a29134b5f34dd3cd064080e6006f6960b1d7bc6
--- /dev/null
+++ b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-NVHPC-22.1.eb
@@ -0,0 +1,62 @@
+easyblock = 'ConfigureMake'
+
+name = 'OpenMPI'
+version = '4.1.2'
+
+homepage = 'https://www.open-mpi.org/'
+description = """The Open MPI Project is an open source MPI-3 implementation."""
+
+toolchain = {'name': 'NVHPC', 'version': '22.1'}
+toolchainopts = {'pic': True}
+
+source_urls = [
+    'https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads']
+sources = [SOURCELOWER_TAR_BZ2]
+checksums = ['9b78c7cf7fc32131c5cf43dd2ab9740149d9d87cadb2e2189f02685749a6b527']
+
+osdependencies = [
+    # needed for --with-verbs
+    ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'),
+    # needed for --with-pmix
+    ('pmix-devel'),
+]
+
+builddependencies = [
+    ('Autotools', '20210726', '', SYSTEM),
+    ('pkg-config', '0.29.2'),
+]
+
+dependencies = [
+    ('zlib', '1.2.11'),
+    ('hwloc', '2.5.0'),
+    ('UCX', '1.11.2', '', SYSTEM),
+    ('CUDA', '11.5', '', SYSTEM),
+    ('libevent', '2.1.12'),
+]
+
+configopts = '--enable-shared '
+configopts += '--with-hwloc=$EBROOTHWLOC '  # hwloc support
+configopts += '--with-ucx=$EBROOTUCX '
+configopts += '--with-verbs '
+configopts += '--with-libevent=$EBROOTLIBEVENT '
+configopts += '--without-orte '
+configopts += '--without-psm2 '
+configopts += '--disable-oshmem '
+configopts += '--with-cuda=$EBROOTCUDA '
+# No IME in DEEP
+# configopts += '--with-ime=/opt/ddn/ime '
+# configopts += '--with-gpfs '
+
+# to enable SLURM integration (site-specific)
+configopts += '--with-slurm --with-pmix=external --with-libevent=external --with-ompi-pmix-rte'
+
+local_libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"]
+sanity_check_paths = {
+    'files': ["bin/%s" % local_binfile for local_binfile in ["ompi_info", "opal_wrapper"]] +
+             ["lib/lib%s.%s" % (local_libfile, SHLIB_EXT) for local_libfile in local_libs] +
+             ["include/%s.h" % x for x in ["mpi-ext", "mpif-config",
+                                           "mpif", "mpi", "mpi_portable_platform"]],
+    'dirs': [],
+}
+
+moduleclass = 'mpi'
diff --git a/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-intel-compilers-2021.4.0.eb b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-intel-compilers-2021.4.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..5f0dc64461efcb302a7ad8645559223112d51396
--- /dev/null
+++ b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-intel-compilers-2021.4.0.eb
@@ -0,0 +1,62 @@
+easyblock = 'ConfigureMake'
+
+name = 'OpenMPI'
+version = '4.1.2'
+
+homepage = 'https://www.open-mpi.org/'
+description = """The Open MPI Project is an open source MPI-3 implementation."""
+
+toolchain = {'name': 'intel-compilers', 'version': '2021.4.0'}
+toolchainopts = {'pic': True}
+
+source_urls = [
+    'https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads']
+sources = [SOURCELOWER_TAR_BZ2]
+checksums = ['9b78c7cf7fc32131c5cf43dd2ab9740149d9d87cadb2e2189f02685749a6b527']
+
+osdependencies = [
+    # needed for --with-verbs
+    ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'),
+    # needed for --with-pmix
+    ('pmix-devel'),
+]
+
+builddependencies = [
+    ('Autotools', '20210726'),
+    ('pkg-config', '0.29.2'),
+]
+
+dependencies = [
+    ('zlib', '1.2.11'),
+    ('hwloc', '2.5.0'),
+    ('UCX', '1.11.2', '', SYSTEM),
+    ('CUDA', '11.5', '', SYSTEM),
+    ('libevent', '2.1.12'),
+]
+
+configopts = '--enable-shared '
+configopts += '--with-hwloc=$EBROOTHWLOC '  # hwloc support
+configopts += '--with-ucx=$EBROOTUCX '
+configopts += '--with-verbs '
+configopts += '--with-libevent=$EBROOTLIBEVENT '
+configopts += '--without-orte '
+configopts += '--without-psm2 '
+configopts += '--disable-oshmem '
+configopts += '--with-cuda=$EBROOTCUDA '
+# No IME in DEEP
+# configopts += '--with-ime=/opt/ddn/ime '
+# configopts += '--with-gpfs '
+
+# to enable SLURM integration (site-specific)
+configopts += '--with-slurm --with-pmix=external --with-libevent=external --with-ompi-pmix-rte'
+
+local_libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"]
+sanity_check_paths = {
+    'files': ["bin/%s" % local_binfile for local_binfile in ["ompi_info", "opal_wrapper"]] +
+             ["lib/lib%s.%s" % (local_libfile, SHLIB_EXT) for local_libfile in local_libs] +
+             ["include/%s.h" % x for x in ["mpi-ext", "mpif-config",
+                                           "mpif", "mpi", "mpi_portable_platform"]],
+    'dirs': [],
+}
+
+moduleclass = 'mpi'
diff --git a/Overlays/deep_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb b/Overlays/deep_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb
new file mode 100644
index 0000000000000000000000000000000000000000..8a708fe116bc9b3c4af7d1f575164cd73e5d79cc
--- /dev/null
+++ b/Overlays/deep_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb
@@ -0,0 +1,57 @@
+name = 'psmpi'
+version = '5.5.0-1'
+versionsuffix = '-mt'
+
+homepage = 'https://github.com/ParaStation/psmpi2'
+description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
+based on MPICH v3. It provides extra low level communication libraries and integration with
+various batch systems for tighter process control.
+"""
+
+toolchain = {'name': 'NVHPC', 'version': '22.1'}
+
+sources = [SOURCE_TAR_BZ2]
+source_urls = ['https://github.com/ParaStation/psmpi/archive/']
+checksums = [
+    # psmpi-5.5.0-1.tar.bz2
+    'c178bf618f139857c1bc191938677145cf4fdbec5b8d3afa2ca1de666c791b48',
+    '978eb3223c978477c40987f745c07fda26ccbad2f468616faf92f0d71b81a156',  # psmpi_shebang.patch
+]
+
+builddependencies = [
+    # needed for autogen.sh on CentOS 7
+    ('Autotools', '20210726'),
+    # Autoconf >2.69 is generating a buggy configure script, so take it down to the one that works
+    ('Autoconf', '2.69'),
+]
+dependencies = [
+    ('pscom', '5.4-default', '', SYSTEM),
+    # needed due to the inclusion of hwloc
+    ('libxml2', '2.9.10'),
+    # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed
+    ('CUDA', '11.5', '', SYSTEM)
+]
+
+patches = [
+    'psmpi_shebang.patch',
+    # We don't have IME in HDFML so we skip this
+    # 'psmpi-5.5.0-1_ime.patch'
+]
+
+# We don't have IME in HDFML so we skip this
+# mpich_opts = '--enable-static --with-file-system=ime+ufs --enable-romio'
+#
+# preconfigopts += 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && '
+# preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && '
+# mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio'
+# We disable gpfs support, since it seems to be problematic under some circumstances. One can disable it by setting
+# ROMIO_FSTYPE_FORCE="ufs:", but then we loose IME support
+mpich_opts = '--enable-static --with-file-system=ufs --enable-romio'
+
+preconfigopts = "./autogen.sh && "
+
+threaded = True
+
+cuda = True
+
+moduleclass = 'mpi'
diff --git a/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb
new file mode 100644
index 0000000000000000000000000000000000000000..8a708fe116bc9b3c4af7d1f575164cd73e5d79cc
--- /dev/null
+++ b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb
@@ -0,0 +1,57 @@
+name = 'psmpi'
+version = '5.5.0-1'
+versionsuffix = '-mt'
+
+homepage = 'https://github.com/ParaStation/psmpi2'
+description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
+based on MPICH v3. It provides extra low level communication libraries and integration with
+various batch systems for tighter process control.
+"""
+
+toolchain = {'name': 'NVHPC', 'version': '22.1'}
+
+sources = [SOURCE_TAR_BZ2]
+source_urls = ['https://github.com/ParaStation/psmpi/archive/']
+checksums = [
+    # psmpi-5.5.0-1.tar.bz2
+    'c178bf618f139857c1bc191938677145cf4fdbec5b8d3afa2ca1de666c791b48',
+    '978eb3223c978477c40987f745c07fda26ccbad2f468616faf92f0d71b81a156',  # psmpi_shebang.patch
+]
+
+builddependencies = [
+    # needed for autogen.sh on CentOS 7
+    ('Autotools', '20210726'),
+    # Autoconf >2.69 is generating a buggy configure script, so take it down to the one that works
+    ('Autoconf', '2.69'),
+]
+dependencies = [
+    ('pscom', '5.4-default', '', SYSTEM),
+    # needed due to the inclusion of hwloc
+    ('libxml2', '2.9.10'),
+    # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed
+    ('CUDA', '11.5', '', SYSTEM)
+]
+
+patches = [
+    'psmpi_shebang.patch',
+    # We don't have IME in HDFML so we skip this
+    # 'psmpi-5.5.0-1_ime.patch'
+]
+
+# We don't have IME in HDFML so we skip this
+# mpich_opts = '--enable-static --with-file-system=ime+ufs --enable-romio'
+#
+# preconfigopts += 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && '
+# preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && '
+# mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio'
+# We disable gpfs support, since it seems to be problematic under some circumstances. One can disable it by setting
+# ROMIO_FSTYPE_FORCE="ufs:", but then we loose IME support
+mpich_opts = '--enable-static --with-file-system=ufs --enable-romio'
+
+preconfigopts = "./autogen.sh && "
+
+threaded = True
+
+cuda = True
+
+moduleclass = 'mpi'
diff --git a/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb
index 42b37f8225fcc5f8d12dbd51a6439fba12c7d9a1..1235961b352d6923a78e94b9e771b6c9541fc474 100644
--- a/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb
+++ b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb
@@ -4,7 +4,7 @@ versionsuffix = '-mt'
 
 homepage = 'https://github.com/ParaStation/psmpi2'
 description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation,
-based on MPICH v3. It provides extra low level communication libraries and integration with 
+based on MPICH v3. It provides extra low level communication libraries and integration with
 various batch systems for tighter process control.
 """
 
diff --git a/Overlays/juwels_overlay/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb b/Overlays/juwels_overlay/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb
new file mode 100644
index 0000000000000000000000000000000000000000..5f4b2522a9660bc5f44d35621c4529baf06a2fab
--- /dev/null
+++ b/Overlays/juwels_overlay/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb
@@ -0,0 +1,3198 @@
+name = 'R'
+version = '4.1.2'
+
+homepage = 'https://www.r-project.org/'
+description = """R is a free software environment for statistical computing
+ and graphics."""
+
+toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'}
+
+source_urls = ['https://cloud.r-project.org/src/base/R-%(version_major)s']
+sources = [SOURCE_TAR_GZ]
+patches = ['%(name)s-4.1.0_identify-flexiblas-in-configure.patch']
+checksums = [
+    '2036225e9f7207d4ce097e54972aecdaa8b40d7d9911cd26491fac5a0fab38af',  # R-4.1.2.tar.gz
+    '2c6720e2e144ae4fe00842daab0ebba72241080603e0ff1a6ca758738041b257',  # R-4.1.0_identify-flexiblas-in-configure.patch
+]
+
+builddependencies = [
+    ('pkg-config', '0.29.2'),
+    ('XServer', '1.20.13'),
+]
+
+dependencies = [
+    ('Java', '15', '', SYSTEM),
+    ('X11', '20210802'),
+    ('OpenGL', '2021b'),
+    ('cairo', '1.16.0'),
+    ('libreadline', '8.1'),
+    ('ncurses', '6.2'),
+    ('bzip2', '1.0.8'),
+    ('XZ', '5.2.5'),
+    ('zlib', '1.2.11'),
+    ('SQLite', '3.36'),
+    ('PCRE2', '10.37'),
+    ('libpng', '1.6.37'),  # for plotting in R
+    ('libjpeg-turbo', '2.1.1'),  # for plottting in R
+    ('LibTIFF', '4.3.0'),
+    ('Tk', '8.6.11'),  # for tcltk
+    ('cURL', '7.78.0'),  # for RCurl
+    ('libxml2', '2.9.10'),  # for XML
+    ('PROJ', '8.1.0'),  # for rgdal
+    ('GMP', '6.2.1'),  # for igraph
+    ('NLopt', '2.7.0'),  # for nloptr
+    ('FFTW', '3.3.10', '-nompi'),  # for fftw
+    ('libsndfile', '1.0.31'),  # for seewave
+    ('ICU', '70.1'),  # for rJava & gdsfmt
+    ('HDF5', '1.12.1', '-serial'),  # for hdf5r
+    ('UDUNITS', '2.2.28'),  # for units
+    ('GSL', '2.7'),  # for RcppGSL
+    ('ImageMagick', '7.1.0-13'),  # for animation
+    ('GLPK', '5.0'),  # for Rglpk
+    ('netCDF', '4.8.1', '-serial'),  # the ndf4 needs it
+    ('GEOS', '3.9.1'),  # for rgeos
+    ('nodejs', '16.13.0'),  # for V8 (required by rstan)
+    ('GDAL', '3.3.2'),  # for sf
+    ('MPFR', '4.1.0'),  # for Rmpfr
+    ('libgit2', '1.1.1'),
+    ('ZeroMQ', '4.3.4'),  # for pbdZMQ needed by IRkernel
+    ('OpenSSL', '1.1', '', True),
+    ('texlive', '20200406'),
+]
+
+
+# Some R extensions (mclust, quantreg, waveslim for example) require the math library (-lm) to avoid undefined symbols.
+# Adding it to FLIBS makes sure it is present when needed.
+preconfigopts = 'export FLIBS="$FLIBS -lm" && '
+
+configopts = "--with-pic --enable-threads --enable-R-shlib"
+# some recommended packages may fail in a parallel build (e.g. Matrix), and
+# we're installing them anyway below
+configopts += " --with-recommended-packages=no"
+
+# specify that at least EasyBuild v3.5.0 is required,
+# since we rely on the updated easyblock for R to configure correctly w.r.t. BLAS/LAPACK
+easybuild_version = '3.5.0'
+
+exts_default_options = {
+    'source_urls': [
+        'https://cran.r-project.org/src/contrib/Archive/%(name)s',  # package archive
+        'https://cran.r-project.org/src/contrib/',  # current version of packages
+        'https://cran.freestatistics.org/src/contrib',  # mirror alternative for current packages
+    ],
+    'source_tmpl': '%(name)s_%(version)s.tar.gz',
+}
+
+# !! order of packages is important !!
+# packages updated on 1st November 2021
+exts_list = [
+    'base',
+    'compiler',
+    'datasets',
+    'graphics',
+    'grDevices',
+    'grid',
+    'methods',
+    'parallel',
+    'splines',
+    'stats',
+    'stats4',
+    'tcltk',
+    'tools',
+    'utils',
+    # ('Rmpi', '0.6-9.2', {
+    #     'checksums': ['358ac1af97402e676f209261a231f36a35e60f0301edf8ca53dac11af3c3bd1a'],
+    # }),
+    ('abind', '1.4-5', {
+        'checksums': ['3a3ace5afbcb86e56889efcebf3bf5c3bb042a282ba7cc4412d450bb246a3f2c'],
+    }),
+    ('magic', '1.5-9', {
+        'checksums': ['fa1d5ef2d39e880f262d31b77006a2a7e76ea38e306aae4356e682b90d6cd56a'],
+    }),
+    ('Rcpp', '1.0.7', {
+        'checksums': ['15e5a4732216daed16263c79fb37017c2ada84a2d4e785e3b76445d0eba3dc1d'],
+    }),
+    ('RcppProgress', '0.4.2', {
+        'checksums': ['b1624b21b7aeb1dafb30f092b2a4bef4c3504efd2d6b00b2cdf55dc9df194b48'],
+    }),
+    ('lpSolve', '5.6.15', {
+        'checksums': ['4627be4178abad34fc85a7d264c2eb5e27506f007e46687b0b8a4f8fbdf4f3ba'],
+    }),
+    ('linprog', '0.9-2', {
+        'checksums': ['8937b2e30692e38de1713f1513b78f505f73da6f5b4a576d151ad60bac2221ce'],
+    }),
+    ('geometry', '0.4.5', {
+        'checksums': ['8fedd17c64468721d398e3c17a39706321ab71098b29f5e8d8039dd115a220d8'],
+    }),
+    ('bit', '4.0.4', {
+        'checksums': ['e404841fbe4ebefe4ecd4392effe673a8c9fa05f97952c4ce6e2f6159bd2f168'],
+    }),
+    ('filehash', '2.4-2', {
+        'checksums': ['b6d056f75d45e315943a4618f5f62802612cd8931ba3f9f474b595140a3cfb93'],
+    }),
+    ('ff', '4.0.5', {
+        'checksums': ['9aba9e271144ec224063ddba0d791e2fcdb9c912d48fdc49e204fce628355037'],
+    }),
+    ('bnlearn', '4.7', {
+        'checksums': ['2e1dd7ba9b7cf07e51eec3238684310edbeb0573d9b907049fb6b28db3022817'],
+    }),
+    ('bootstrap', '2019.6', {
+        'checksums': ['5252fdfeb944cf1fae35016d35f9333b1bd1fc8c6d4a14e33901160e21968694'],
+    }),
+    ('combinat', '0.0-8', {
+        'checksums': ['1513cf6b6ed74865bfdd9f8ca58feae12b62f38965d1a32c6130bef810ca30c1'],
+    }),
+    ('deal', '1.2-39', {
+        'checksums': ['a349db8f1c86cbd8315c068da49314ce9eb585dbb50d2e5ff09300506bd8806b'],
+    }),
+    ('fdrtool', '1.2.16', {
+        'checksums': ['e7dea648ee018e2c8c8834084051c76f7e8b2b42067772c62035a941c32457a9'],
+    }),
+    ('formatR', '1.11', {
+        'checksums': ['bd81662d09cf363652761e63ba5969c71be4dd5ae6fc9098f440d6729254a30c'],
+    }),
+    ('gtools', '3.9.2', {
+        'checksums': ['03b1898bf581f6d12fa90e23ff700cfa7c834ac10c6654bdac42d7ec943fa953'],
+    }),
+    ('gdata', '2.18.0', {
+        'checksums': ['4b287f59f5bbf5fcbf18db16477852faac4a605b10c5284c46b93fa6e9918d7f'],
+    }),
+    ('GSA', '1.03.1', {
+        'checksums': ['e192d4383f53680dbd556223ea5f8cad6bae62a80a337ba5fd8d05a8aee6a917'],
+    }),
+    ('xfun', '0.27', {
+        'checksums': ['c775bf33a6bc57f8022960cbf7dc20a4e82175a9c71807b2723f46ade6805485'],
+    }),
+    ('highr', '0.9', {
+        'checksums': ['beff11390d936c90fdcc00e7ed0eb72220f3de403a51b56659e3d3e0b6d8ed4d'],
+    }),
+    ('infotheo', '1.2.0', {
+        'checksums': ['9b47ebc3db5708c88dc014b4ffec6734053a9c255a9241fcede30fec3e63aaa3'],
+    }),
+    ('lars', '1.2', {
+        'checksums': ['64745b568f20b2cfdae3dad02fba92ebf78ffee466a71aaaafd4f48c3921922e'],
+    }),
+    ('lazy', '1.2-16', {
+        'checksums': ['c796c8b987ed1bd9dfddd593e17312ed681fc4fa3a1ecfe51da2def0ac1e50df'],
+    }),
+    ('kernlab', '0.9-29', {
+        'checksums': ['c3da693a0041dd34f869e7b63a8d8cf7d4bc588ac601bcdddcf7d44f68b3106f'],
+    }),
+    ('mime', '0.12', {
+        'checksums': ['a9001051d6c1e556e881910b1816b42872a1ee41ab76d0040ce66a27135e3849'],
+    }),
+    ('markdown', '1.1', {
+        'checksums': ['8d8cd47472a37362e615dbb8865c3780d7b7db694d59050e19312f126e5efc1b'],
+    }),
+    ('mlbench', '2.1-3', {
+        'checksums': ['b1f92be633243185ab86e880a1e1ac5a4dd3c535d01ebd187a4872d0a8c6f194'],
+    }),
+    ('NLP', '0.2-1', {
+        'checksums': ['05eaa453ad2757311c073fd30093c738b20a977c5089031eb454345a1d01f2b6'],
+    }),
+    ('mclust', '5.4.7', {
+        'checksums': ['45f5a666caee5bebd3160922b8655295a25e37f624741f6574365e4ac5a14c23'],
+    }),
+    ('RANN', '2.6.1', {
+        'checksums': ['b299c3dfb7be17aa41e66eff5674fddd2992fb6dd3b10bc59ffbf0c401697182'],
+    }),
+    ('rmeta', '3.0', {
+        'checksums': ['b9f9d405935cffcd7a5697ff13b033f9725de45f4dc7b059fd68a7536eb76b6e'],
+    }),
+    ('segmented', '1.3-4', {
+        'checksums': ['8276bfbb3e5c1d7a9a61098f72ac9b2b0f52c89ae9f9b715f76b22303cc3902d'],
+    }),
+    ('som', '0.3-5.1', {
+        'checksums': ['a6f4c0e5b36656b7a8ea144b057e3d7642a8b71972da387a7133f3dd65507fb9'],
+    }),
+    ('SuppDists', '1.1-9.5', {
+        'checksums': ['680b67145c07d44e200275e08e48602fe19cd99fb106c05422b3f4a244c071c4'],
+    }),
+    ('stabledist', '0.7-1', {
+        'checksums': ['06c5704d3a3c179fa389675c537c39a006867bc6e4f23dd7e406476ed2c88a69'],
+    }),
+    ('survivalROC', '1.0.3', {
+        'checksums': ['1449e7038e048e6ad4d3f7767983c0873c9c7a7637ffa03a4cc7f0e25c31cd72'],
+    }),
+    ('pspline', '1.0-18', {
+        'checksums': ['f71cf293bd5462e510ac5ad16c4a96eda18891a0bfa6447dd881c65845e19ac7'],
+    }),
+    ('timeDate', '3043.102', {
+        'checksums': ['377cba03cddab8c6992e31d0683c1db3a73afa9834eee3e95b3b0723f02d7473'],
+    }),
+    ('longmemo', '1.1-2', {
+        'checksums': ['7964e982287427dd58f98e1144e468ae0cbd572d25a4bea6ca9ae9c7522f3207'],
+    }),
+    ('ADGofTest', '0.3', {
+        'checksums': ['9cd9313954f6ecd82480d373f6c5371ca84ab33e3f5c39d972d35cfcf1096846'],
+    }),
+    ('MASS', '7.3-54', {
+        'checksums': ['eb644c0e94b447c46387aa22436ef5a43192960ee9cfd0df2940f4a4116179ae'],
+    }),
+    ('pixmap', '0.4-12', {
+        'checksums': ['893ba894d4348ba05e6edf9c1b4fd201191816b444a214f7a6b2c0a79b0a2aec'],
+    }),
+    ('lattice', '0.20-45', {
+        'checksums': ['22388d92bdb7d3959da84d7308d9026dd8226ef07580783729e8ad2f7d7507ad'],
+    }),
+    ('sp', '1.4-5', {
+        'checksums': ['6beeb216d540475cdead5f2c72d6c7ee400fe2423c1882d72cf57f6df58f09da'],
+    }),
+    ('pkgconfig', '2.0.3', {
+        'checksums': ['330fef440ffeb842a7dcfffc8303743f1feae83e8d6131078b5a44ff11bc3850'],
+    }),
+    ('rlang', '0.4.12', {
+        'checksums': ['2a26915738be120a56ec93e781bcb50ffa1031e11904544198b4a15c35029915'],
+    }),
+    ('ellipsis', '0.3.2', {
+        'checksums': ['a90266e5eb59c7f419774d5c6d6bd5e09701a26c9218c5933c9bce6765aa1558'],
+    }),
+    ('digest', '0.6.28', {
+        'checksums': ['4a328c75e95f8522fc07390d1dd00c19fb643f558e761a8aed04f99c1dc7db00'],
+    }),
+    ('glue', '1.4.2', {
+        'checksums': ['9f7354132a26e9a876428fa87629b9aaddcd558f9932328e6ac065b95b8ef7ad'],
+    }),
+    ('vctrs', '0.3.8', {
+        'checksums': ['7f4e8b75eda115e69dddf714f0643eb889ad61017cdc13af24389aab2a2d1bb1'],
+    }),
+    ('lifecycle', '1.0.1', {
+        'checksums': ['1da76e1c00f1be96ca34e122ae611259430bf99d6a1b999fdef70c00c30f7ba0'],
+    }),
+    ('hms', '1.1.1', {
+        'checksums': ['6b5f30db1845c70d27b5de33f31caa487cdd0787cd80a4073375e5f482269062'],
+    }),
+    ('prettyunits', '1.1.1', {
+        'checksums': ['9a199aa80c6d5e50fa977bc724d6e39dae1fc597a96413053609156ee7fb75c5'],
+    }),
+    ('R6', '2.5.1', {
+        'checksums': ['8d92bd29c2ed7bf15f2778618ffe4a95556193d21d8431a7f75e7e5fc102bf48'],
+    }),
+    ('crayon', '1.4.2', {
+        'checksums': ['ee34397f643e76e30588068d4c93bd3c9afd2193deacccacb3bffcadf141b857'],
+    }),
+    ('progress', '1.2.2', {
+        'checksums': ['b4a4d8ed55db99394b036a29a0fb20b5dd2a91c211a1d651c52a1023cc58ff35'],
+    }),
+    ('ade4', '1.7-18', {
+        'checksums': ['ecb6f4c42c60f39702aa96f454bb536a333049c9608ee2b6bdf8795e059cc525'],
+    }),
+    ('AlgDesign', '1.2.0', {
+        'checksums': ['ff86c9e19505770520e7614970ad19c698664d08001ce888b8603e44c2a3b52a'],
+    }),
+    ('base64enc', '0.1-3', {
+        'checksums': ['6d856d8a364bcdc499a0bf38bfd283b7c743d08f0b288174fba7dbf0a04b688d'],
+    }),
+    ('BH', '1.75.0-0', {
+        'checksums': ['ae4c10992607dd697663f60675a46a5770851da159330bb63c4a68890bdd6f5a'],
+    }),
+    ('brew', '1.0-6', {
+        'checksums': ['d70d1a9a01cf4a923b4f11e4374ffd887ad3ff964f35c6f9dc0f29c8d657f0ed'],
+    }),
+    ('Brobdingnag', '1.2-6', {
+        'checksums': ['19eccaed830ce9d93b70642f6f126ac66722a98bbd48586899cc613dd9966ad4'],
+    }),
+    ('corpcor', '1.6.10', {
+        'checksums': ['71a04c503c93ec95ddde09abe8c7ddeb36175b7da76365a14b27066383e10e09'],
+    }),
+    ('longitudinal', '1.1.12', {
+        'checksums': ['d4f894c38373ba105b1bdc89e3e7c1b215838e2fb6b4470b9f23768b84e603b5'],
+    }),
+    ('backports', '1.3.0', {
+        'checksums': ['4f231e91ca8298fb1a27810ef5dd4c84e05c2b2b6f6748eab68f70ff4827812d'],
+    }),
+    ('checkmate', '2.0.0', {
+        'checksums': ['0dc25b0e20c04836359df1885d099c6e4ad8ae0e585a9e4107f7ea945d9c6fa4'],
+    }),
+    ('cubature', '2.0.4.2', {
+        'checksums': ['605bdd9d90fb6645359cccd1b289c5afae235b46360ef5bdd2001aa307a7694e'],
+    }),
+    ('DEoptimR', '1.0-9', {
+        'checksums': ['6151aa74f52ff4be664343e3992749e63235ebba51c9fded3775c1a2407c6512'],
+    }),
+    ('fastmatch', '1.1-3', {
+        'checksums': ['1defa0b08bc3f48e4c3e4ba8df4f1b9e8299932fd8c747c67d32de44f90b9861'],
+    }),
+    ('ffbase', '0.13.3', {
+        'checksums': ['b3f61f80ba6851130247779786903d42a24ee5219aa24556c8470aece8a2e6b6'],
+    }),
+    ('iterators', '1.0.13', {
+        'checksums': ['778e30e4c292da9f94d62acc637cf55273dae258199d847e62658f44840f11a4'],
+    }),
+    ('maps', '3.4.0', {
+        'checksums': ['7918ccb2393ca19589d4c4e77d9ebe863dc6317ebfc1ff41869dbfaf439f5747'],
+    }),
+    ('nnls', '1.4', {
+        'checksums': ['0e5d77abae12bc50639d34354f96a8e079408c9d7138a360743b73bd7bce6c1f'],
+    }),
+    ('sendmailR', '1.2-1', {
+        'checksums': ['04feb08c6c763d9c58b2db24b1222febe01e28974eac4fe87670be6fb9bff17c'],
+    }),
+    ('dotCall64', '1.0-1', {
+        'checksums': ['f10b28fcffb9453b1d8888a72c8fd2112038b5ac33e02a481492c7bd249aa5c6'],
+    }),
+    ('spam', '2.7-0', {
+        'checksums': ['632b5c48f587a34c997a487b72099c9c89d76a43f2cd9a36cb95fdec1d07850d'],
+    }),
+    ('subplex', '1.6', {
+        'checksums': ['0d05da1622fffcd20a01cc929fc6c2b7df40a8246e7018f7f1f3c175b774cbf9'],
+    }),
+    ('stringi', '1.7.5', {
+        'checksums': ['2914cc34e1cbfb65147090263b0e1bf2727ad32bc9bb860732094fecff4b2565'],
+    }),
+    ('magrittr', '2.0.1', {
+        'checksums': ['75c265d51cc2b34beb27040edb09823c7b954d3990a7a931e40690b75d4aad5f'],
+    }),
+    ('stringr', '1.4.0', {
+        'checksums': ['87604d2d3a9ad8fd68444ce0865b59e2ffbdb548a38d6634796bbd83eeb931dd'],
+    }),
+    ('evaluate', '0.14', {
+        'checksums': ['a8c88bdbe4e60046d95ddf7e181ee15a6f41cdf92127c9678f6f3d328a3c5e28'],
+    }),
+    ('logspline', '2.1.16', {
+        'checksums': ['7418491b8c778483c24e4354ee47b1e1b1d68b0057c12d6e012cce7d4e6c138a'],
+    }),
+    ('ncbit', '2013.03.29', {
+        'checksums': ['4480271f14953615c8ddc2e0666866bb1d0964398ba0fab6cc29046436820738'],
+    }),
+    ('permute', '0.9-5', {
+        'checksums': ['d2885384a07497e8df273689d6713fc7c57a7c161f6935f3572015e16ab94865'],
+    }),
+    ('plotrix', '3.8-2', {
+        'checksums': ['bb72953102889cea41cd6521874e35d2458ebd10aab97ba6f262e102cac0bc1f'],
+    }),
+    ('randomForest', '4.6-14', {
+        'checksums': ['f4b88920419eb0a89d0bc5744af0416d92d112988702dc726882394128a8754d'],
+    }),
+    ('scatterplot3d', '0.3-41', {
+        'checksums': ['4c8326b70a3b2d37126ca806771d71e5e9fe1201cfbe5b0d5a0a83c3d2c75d94'],
+    }),
+    ('SparseM', '1.81', {
+        'checksums': ['bd838f381ace680fa38508ff70b3d83cb9ffa28ac1ab568509249bca53c34b33'],
+    }),
+    ('tripack', '1.3-9.1', {
+        'checksums': ['7f82f8d63741c468767acc6fb35281bd9903f6c3c52e8fada60a6ae317511fbe'],
+    }),
+    ('irace', '3.4.1', {
+        'checksums': ['7eea92ba42e6ba320fa8bdca3c53091ae42f26a0f097244f65e7e117f6d514b6'],
+    }),
+    ('rJava', '1.0-5', {
+        'checksums': ['2fdba5774f6333440e0ef6d96567b37f9f382820242a4d885f2891796fb36fde'],
+    }),
+    ('RColorBrewer', '1.1-2', {
+        'checksums': ['f3e9781e84e114b7a88eb099825936cc5ae7276bbba5af94d35adb1b3ea2ccdd'],
+    }),
+    ('png', '0.1-7', {
+        'checksums': ['e269ff968f04384fc9421d17cfc7c10cf7756b11c2d6d126e9776f5aca65553c'],
+    }),
+    ('jpeg', '0.1-9', {
+        'checksums': ['01a175442ec209b838a56a66a3908193aca6f040d537da7838d9368e46913072'],
+    }),
+    ('latticeExtra', '0.6-29', {
+        'checksums': ['6cadc31d56f73d926e2e8d72e43ae17ac03607a4d1a374719999a4a231e3df11'],
+    }),
+    ('Matrix', '1.3-4', {
+        'checksums': ['ab42179d44545e99bbdf44bb6d04cab051dd2aba552b1f6edd51ed71b55f6c39'],
+    }),
+    ('RcppArmadillo', '0.10.7.0.0', {
+        'checksums': ['01a8eac49d5b2bcefcba076f0ee7b234bee3d22d54d7f4d56d9a6ae7cbea65f4'],
+    }),
+    ('plyr', '1.8.6', {
+        'checksums': ['ea55d26f155443e9774769531daa5d4c20a0697bb53abd832e891b126c935287'],
+    }),
+    ('gtable', '0.3.0', {
+        'checksums': ['fd386cc4610b1cc7627dac34dba8367f7efe114b968503027fb2e1265c67d6d3'],
+    }),
+    ('reshape2', '1.4.4', {
+        'checksums': ['d88dcf9e2530fa9695fc57d0c78adfc5e361305fe8919fe09410b17da5ca12d8'],
+    }),
+    ('dichromat', '2.0-0', {
+        'checksums': ['31151eaf36f70bdc1172da5ff5088ee51cc0a3db4ead59c7c38c25316d580dd1'],
+    }),
+    ('colorspace', '2.0-2', {
+        'checksums': ['b891cd2ec129ed5f116429345947bcaadc33969758a108521eb0cf36bd12183a'],
+    }),
+    ('munsell', '0.5.0', {
+        'checksums': ['d0f3a9fb30e2b5d411fa61db56d4be5733a2621c0edf017d090bdfa5e377e199'],
+    }),
+    ('labeling', '0.4.2', {
+        'checksums': ['e022d79276173e0d62bf9e37d7574db65ab439eb2ae1833e460b1cff529bd165'],
+    }),
+    ('viridisLite', '0.4.0', {
+        'checksums': ['849955dc8ad9bc52bdc50ed4867fd92a510696fc8294e6971efa018437c83c6a'],
+    }),
+    ('farver', '2.1.0', {
+        'checksums': ['e5c8630607049f682fb3002b99ca4f5e7c6b94f8b2a4342df594e7853b77cef4'],
+    }),
+    ('scales', '1.1.1', {
+        'checksums': ['40b2b66522f1f314a20fd09426011b0cdc9d16b23ee2e765fe1930292dd03705'],
+    }),
+    ('utf8', '1.2.2', {
+        'checksums': ['a71aee87d43a9bcf29249c7a5a2e9ca1d2a836e8d5ee3a264d3062f25378d8f4'],
+    }),
+    ('zeallot', '0.1.0', {
+        'checksums': ['439f1213c97c8ddef9a1e1499bdf81c2940859f78b76bc86ba476cebd88ba1e9'],
+    }),
+    ('assertthat', '0.2.1', {
+        'checksums': ['85cf7fcc4753a8c86da9a6f454e46c2a58ffc70c4f47cac4d3e3bcefda2a9e9f'],
+    }),
+    ('fansi', '0.5.0', {
+        'checksums': ['9d1bf8c316969c163abd3dd41cc1425b2671df9471fe806bf8783794a19ca54f'],
+    }),
+    ('cli', '3.1.0', {
+        'checksums': ['c70a61830bf706a84c59eb74a809978846cee93742198ab4192742a5df1ace11'],
+    }),
+    ('pillar', '1.6.4', {
+        'checksums': ['033a92a271ddeec2a17323d070de8257b9ca4d57f5be6181e2ad35fe7e1ea19e'],
+    }),
+    ('tibble', '3.1.5', {
+        'checksums': ['da6387ba683a67cd7fc2a111f6b62468e480a8078bc1867d433a40c5460edbe7'],
+    }),
+    ('lazyeval', '0.2.2', {
+        'checksums': ['d6904112a21056222cfcd5eb8175a78aa063afe648a562d9c42c6b960a8820d4'],
+    }),
+    ('withr', '2.4.2', {
+        'checksums': ['48f96a4cb780cf6fd5fbbea1f1eb04ea3102d7a4a644cae1ed1e91139dcbbac8'],
+    }),
+    ('nlme', '3.1-153', {
+        'checksums': ['3d27a98edf1b16ee868949e823ac0babbf10c937a7220d648b7ef9480cd680e3'],
+    }),
+    ('mgcv', '1.8-38', {
+        'checksums': ['cd12ed5787d6fdcead34e782e48b62b3f9efd523616c906e2da77bd9c142ddbb'],
+    }),
+    ('rprojroot', '2.0.2', {
+        'checksums': ['5fa161f0d4ac3b7a99dc6aa2d832251001dc92e93c828593a51fe90afd019e1f'],
+    }),
+    ('desc', '1.4.0', {
+        'checksums': ['8220e4c706449b8121b822e70b1414f391ef419aed574836a234c63b83e5d649'],
+    }),
+    ('ps', '1.6.0', {
+        'checksums': ['89ad7ddc5e0818bccacfd0673ddf2da0892ac2a3b4d3a821e40884ab1e96bf31'],
+    }),
+    ('processx', '3.5.2', {
+        'checksums': ['ed6f2d1047461c6061e6ed58fb6de65a289b56009867892abad76c6bba46fc2b'],
+    }),
+    ('callr', '3.7.0', {
+        'checksums': ['d67255148595c6d0ba4c4d241bc9f6b5e00cafe25fdc13e38c10acc38653360a'],
+    }),
+    ('pkgbuild', '1.2.0', {
+        'checksums': ['2e19308d3271fefd5e118c6d132d6a2511253b903620b5417892c72d2010a963'],
+    }),
+    ('rstudioapi', '0.13', {
+        'checksums': ['aac35bbdcb4a8e8caba943bc8a2b98120e8940b80cd1020224bb1a26ff776d8b'],
+    }),
+    ('pkgload', '1.2.3', {
+        'checksums': ['105ae5b2caca495bd0702757c5c676353cca8525954d0822f07103ca8a54b349'],
+    }),
+    ('praise', '1.0.0', {
+        'checksums': ['5c035e74fd05dfa59b03afe0d5f4c53fbf34144e175e90c53d09c6baedf5debd'],
+    }),
+    ('brio', '1.1.2', {
+        'checksums': ['42dde6953151e31cc38bbec72335c01ac9e755cc07d11e26f4e1fcd0f9f471ef'],
+    }),
+    ('jsonlite', '1.7.2', {
+        'checksums': ['06354b50435942f67ba264f79831e577809ef89e5f9a5a2201985396fe651fd2'],
+    }),
+    ('diffobj', '0.3.5', {
+        'checksums': ['d860a79b1d4c9e369282d7391b539fe89228954854a65ba47181407c53e3cf60'],
+    }),
+    ('rematch2', '2.1.2', {
+        'checksums': ['fe9cbfe99dd7731a0a2a310900d999f80e7486775b67f3f8f388c30737faf7bb'],
+    }),
+    ('waldo', '0.3.1', {
+        'checksums': ['ec2c8c1afbc413f8db8b6b0c6970194a875f616ad18e1e72a004bc4497ec019b'],
+    }),
+    ('testthat', '3.1.0', {
+        'checksums': ['e714b105891a766d03d5bab09d705b1f6c23f04db56dfe310bff8cfa00464987'],
+    }),
+    ('isoband', '0.2.5', {
+        'checksums': ['46f53fa066f0966f02cb2bf050190c0d5e950dab2cdf565feb63fc092c886ba5'],
+    }),
+    ('ggplot2', '3.3.5', {
+        'checksums': ['b075294faf3af31b18e415f260c62d6000b218770e430484fe38819bdc3224ea'],
+    }),
+    ('pROC', '1.18.0', {
+        'checksums': ['d5ef54b384176ece6d6448014ba40570a98181b58fee742f315604addb5f7ba9'],
+    }),
+    ('quadprog', '1.5-8', {
+        'checksums': ['22128dd6b08d3516c44ff89276719ad4fe46b36b23fdd585274fa3a93e7a49cd'],
+    }),
+    ('BB', '2019.10-1', {
+        'checksums': ['04d0b6ce6e5f070b109478a6005653dbe78613bb4e3ea4903203d851b5d3c94d'],
+    }),
+    ('BBmisc', '1.11', {
+        'checksums': ['1ea48c281825349d8642a661bb447e23bfd651db3599bf72593bfebe17b101d2'],
+    }),
+    ('fail', '1.3', {
+        'checksums': ['ede8aa2a9f2371aff5874cd030ac625adb35c33954835b54ab4abf7aeb34d56d'],
+    }),
+    ('rlecuyer', '0.3-5', {
+        'checksums': ['4723434ff7624d4f404a6854ffa0673fc43daa46f58f064dbeeaa17da28ab626'],
+    }),
+    ('snow', '0.4-4', {
+        'checksums': ['84587f46f222a96f3e2fde10ad6ec6ddbd878f4e917cd926d632f61a87db13c9'],
+    }),
+    ('tree', '1.0-41', {
+        'checksums': ['21cf995b187d97de0bce8330973a52c46235db0fc09a133cad26283b7a6f5c8e'],
+    }),
+    ('pls', '2.8-0', {
+        'checksums': ['eff3a92756ca34cdc1661fa36d2bf7fc8e9f4132d2f1ef9ed0105c83594618bf'],
+    }),
+    ('class', '7.3-19', {
+        'checksums': ['9012f5c65384b441b5738ed7bd18ea735884bab32b31776e80cf3679f38a3769'],
+    }),
+    ('proxy', '0.4-26', {
+        'checksums': ['676bad821343974e0297a0566c4bf0cf0ea890104906a745b87d3b5989c81a4d'],
+    }),
+    ('e1071', '1.7-9', {
+        'checksums': ['9bf9a15e7ce0b9b1a57ce3048d29cbea7f2a5bb2e91271b1b6aaafe07c852226'],
+    }),
+    ('nnet', '7.3-16', {
+        'checksums': ['c5b73eb4fff0d225e14f898cec987a7a88796b6e70cde4cf277374428f2d5c13'],
+    }),
+    ('minqa', '1.2.4', {
+        'checksums': ['cfa193a4a9c55cb08f3faf4ab09c11b70412523767f19894e4eafc6e94cccd0c'],
+    }),
+    ('RcppEigen', '0.3.3.9.1', {
+        'checksums': ['8a0486249b778a4275a1168fc89fc7fc49c2bb031cb14b50a50089acae7fe962'],
+    }),
+    ('MatrixModels', '0.5-0', {
+        'checksums': ['a87faf1a185219f79ea2307e6787d293e1d30bf3af9398e8cfe1e079978946ed'],
+    }),
+    ('matrixStats', '0.61.0', {
+        'checksums': ['dbd3c0ec59b1ae62ff9b4c2c90c4687cbd680d1796f6fdd672319458d4d2fd9a'],
+    }),
+    ('codetools', '0.2-18', {
+        'checksums': ['1a9ea6b9792dbd1688078455929385acc3a5e4bef945c77bec1261fa4a084c28'],
+    }),
+    ('foreach', '1.5.1', {
+        'checksums': ['fb5ad69e295618c52b2ac7dff84a0771462870a97345374d43b3de2dc31a68e1'],
+    }),
+    ('data.table', '1.14.2', {
+        'checksums': ['f741b951e5937440139514aedbae78dbd6862d825066848bdb006aa02c2f3d2b'],
+    }),
+    ('ModelMetrics', '1.2.2.2', {
+        'checksums': ['5e06f1926aebca5654e1329c66ef19b04058376b2277ebb16e3bf8c208d73457'],
+    }),
+    ('generics', '0.1.1', {
+        'checksums': ['a2478ebf1a0faa8855a152f4e747ad969a800597434196ed1f71975a9eb11912'],
+    }),
+    ('purrr', '0.3.4', {
+        'checksums': ['23ebc93bc9aed9e7575e8eb9683ff4acc0270ef7d6436cc2ef4236a9734840b2'],
+    }),
+    ('tidyselect', '1.1.1', {
+        'checksums': ['18eb6a6746196a81ce19ee6cbf1db0c33f494177b97e2419312ef25a00ae486b'],
+    }),
+    ('dplyr', '1.0.7', {
+        'checksums': ['d2fe3aedbce02fdddce09a8a80f85f5918a9d1f15f792ad4a98f254959d7123d'],
+    }),
+    ('gower', '0.2.2', {
+        'checksums': ['3f022010199fafe34f6e7431730642a76893e6b4249b84e5a61012cb83483631'],
+    }),
+    ('rpart', '4.1-15', {
+        'checksums': ['2b8ebe0e9e11592debff893f93f5a44a6765abd0bd956b0eb1f70e9394cfae5c'],
+    }),
+    ('survival', '3.2-13', {
+        'checksums': ['3fab9c0ba2c4e2b6a475207e2629a7f06a104c70093dfb768f50a7caac9a317f'],
+    }),
+    ('KernSmooth', '2.23-20', {
+        'checksums': ['20eb75051e2473933d41eedc9945b03c632847fd581e2207d452cf317fa5ec39'],
+    }),
+    ('globals', '0.14.0', {
+        'checksums': ['203dbccb829ca9cc6aedb6f5e79cb126ea31f8dd379dff9111ec66e3628c32f3'],
+    }),
+    ('listenv', '0.8.0', {
+        'checksums': ['fd2aaf3ff2d8d546ce33d1cb38e68401613975117c1f9eb98a7b41facf5c485f'],
+    }),
+    ('parallelly', '1.28.1', {
+        'checksums': ['f4ae883b18409adb83c561ed69427e740e1b50bf85ef57f48c3f2edf837cc663'],
+    }),
+    ('future', '1.23.0', {
+        'checksums': ['d869c80e837c0937a414b8050deff081aefeac586b796f3d634d64f0f4fdb8f8'],
+    }),
+    ('future.apply', '1.8.1', {
+        'checksums': ['0d5bc3cb0289665bb27ae4ccad51fcc5ebf6dca46872b0a4e57790b9dc0aa6c7'],
+    }),
+    ('progressr', '0.9.0', {
+        'checksums': ['cfe70f8423041ea5b5a2a39122c166462e58b1bba84df935858a7b86362b530f'],
+    }),
+    ('numDeriv', '2016.8-1.1', {
+        'checksums': ['d8c4d19ff9aeb31b0c628bd4a16378e51c1c9a3813b525469a31fe89af00b345'],
+    }),
+    ('SQUAREM', '2021.1', {
+        'checksums': ['66e5e18ca29903e4950750bbd810f0f9df85811ee4195ce0a86d939ba8183a58'],
+    }),
+    ('lava', '1.6.10', {
+        'checksums': ['7a88f8a885872e2abb3011c446e9e1c4884cd4dbe6ab4cfe9207538e5560232e'],
+    }),
+    ('prodlim', '2019.11.13', {
+        'checksums': ['6809924f503a14681de84730489cdaf9240d7951c64f5b98ca37dc1ce7809b0f'],
+    }),
+    ('ipred', '0.9-12', {
+        'checksums': ['d6e1535704d39415a799d7643141ffa4f6f55597f03e763f4ccd5d8106005843'],
+    }),
+    ('cpp11', '0.4.0', {
+        'checksums': ['1768fd07dc30dfbbf8f3fb1a1183947cb7e1dfd909165c4d612a63c163a41e87'],
+    }),
+    ('lubridate', '1.8.0', {
+        'checksums': ['87d66efdb1f3d680db381d7e40a202d35645865a0542e2f270ef008a19002ba5'],
+    }),
+    ('tidyr', '1.1.4', {
+        'checksums': ['0b0c98be98a433e15a2550f60330b31a58529a9c58bc2abd7bff6462ab761241'],
+    }),
+    ('recipes', '0.1.17', {
+        'checksums': ['ed20ba0ea0165310e31864ed7d2e005a2a37b76c7913977fd124d8b567616d3d'],
+    }),
+    ('caret', '6.0-90', {
+        'checksums': ['e851a4ed7d939c665e57e3551a5464b09fe4285e7c951236efdd890b0da866bc'],
+    }),
+    ('conquer', '1.2.0', {
+        'checksums': ['10451223658e02b31b87f7f86a14e3d8c71bfbff62ea30f85b89cdef829f07f9'],
+    }),
+    ('quantreg', '5.86', {
+        'checksums': ['71d1c829af7574ca00575cc0375376ac3ecd54b3d6d36e8eecd71ed8acb9d605'],
+    }),
+    ('robustbase', '0.93-9', {
+        'checksums': ['d75fb5075463fec61d063bced7003936e9198492328b6fae15f67e8415713c45'],
+    }),
+    ('zoo', '1.8-9', {
+        'checksums': ['b7be259067a8b9d4a8f5d387e0946a5ba1eb43474baa67ccf4f8bf4b15f772a3'],
+    }),
+    ('lmtest', '0.9-38', {
+        'checksums': ['32a22cea45398ffc5732d9f5c0391431d0cdd3a9e29cc7b77bea32c1eb4a216b'],
+    }),
+    ('vcd', '1.4-9', {
+        'checksums': ['a5b420ad5ff1a27fa92f98099a8b43f2dded7e5f60297b3e4d947ad6f039568f'],
+    }),
+    ('snowfall', '1.84-6.1', {
+        'checksums': ['5c446df3a931e522a8b138cf1fb7ca5815cc82fcf486dbac964dcbc0690e248d'],
+    }),
+    ('bindr', '0.1.1', {
+        'checksums': ['7c785ca77ceb3ab9282148bcecf64d1857d35f5b800531d49483622fe67505d0'],
+    }),
+    ('plogr', '0.2.0', {
+        'checksums': ['0e63ba2e1f624005fe25c67cdd403636a912e063d682eca07f2f1d65e9870d29'],
+    }),
+    ('bindrcpp', '0.2.2', {
+        'checksums': ['48130709eba9d133679a0e959e49a7b14acbce4f47c1e15c4ab46bd9e48ae467'],
+    }),
+    ('tmvnsim', '1.0-2', {
+        'checksums': ['97f63d0bab3b240cc7bdbe6e6e74e90ad25a4382a345ee51a26fe3959edeba0f'],
+    }),
+    ('mnormt', '2.0.2', {
+        'checksums': ['5c6aa036d3f1035ffe8f9a8e95bb908b191b126b016591cf893c50472851f334'],
+    }),
+    ('foreign', '0.8-81', {
+        'checksums': ['1ae8f9f18f2a037697fa1a9060417ff255c71764f0145080b2bd23ba8262992c'],
+    }),
+    ('psych', '2.1.9', {
+        'checksums': ['1475e03a17f1ae6837834f01c2472aed68887c89d90a84a3e09a532ce218500c'],
+    }),
+    ('broom', '0.7.10', {
+        'checksums': ['129fd5a53abef7f42b7efac6c64ebd71269b136aa648846d640562357927464f'],
+    }),
+    ('nloptr', '1.2.2.2', {
+        'checksums': ['e80ea9619ac18f4bfe44812198b40b9ae5c0ddf3f9cc91778f9ccc82168d1372'],
+    }),
+    ('boot', '1.3-28', {
+        'checksums': ['9f7158fd2714659f590c3955651893dc24bd8f39196bc5a4cc35b0b031744a32'],
+    }),
+    ('statmod', '1.4.36', {
+        'checksums': ['14e897c83d426caca4d920d3d5bead7ae9a679276b3cb2e227f299ad189d7bc2'],
+    }),
+    ('lme4', '1.1-27.1', {
+        'checksums': ['25fa873e39b8192e48c15eec93db8c8bf6f03baf3bd8d5ca9188482ce8442ec5'],
+    }),
+    ('ucminf', '1.1-4', {
+        'checksums': ['a2eb382f9b24e949d982e311578518710f8242070b3aa3314a331c1e1e7f6f07'],
+    }),
+    ('ordinal', '2019.12-10', {
+        'checksums': ['7a41e7b7e852a8fa3e911f8859d36e5709ccec5ca42ee3de14a813b7aaac7725'],
+    }),
+    ('jomo', '2.7-2', {
+        'checksums': ['3962d5cbecc60e72670329dbef0dd74303080f5ea2a79c91e27f75db99ba6ce9'],
+    }),
+    ('clipr', '0.7.1', {
+        'checksums': ['ffad477b07847e3b68f7e4406bbd323025a8dae7e3c768943d4d307ee3248afb'],
+    }),
+    ('tzdb', '0.2.0', {
+        'checksums': ['c335905d452b400af7ed54b916b5246cb3f47ede0602911a2bcb25a1cf56d5a9'],
+    }),
+    ('bit64', '4.0.5', {
+        'checksums': ['25df6826ea5e93241c4874cad4fa8dadc87a40f4ff74c9107aa12a9e033e1578'],
+    }),
+    ('vroom', '1.5.5', {
+        'checksums': ['1d45688c08f162a3300eda532d9e87d144f4bc686769a521bf9a12e3d3b465fe'],
+    }),
+    ('readr', '2.0.2', {
+        'checksums': ['98b05ed751dda2bcf7a29d070ce3d3e8475e0138a3e3ec68941dc45218db7615'],
+    }),
+    ('forcats', '0.5.1', {
+        'checksums': ['c4fb96e874e2bedaa8a1aa32ea22abdee7906d93b5c5c7b42c0894c0c5b6a289'],
+    }),
+    ('haven', '2.4.3', {
+        'checksums': ['95b70f47e77792bed4312441787299d2e3e27d79a176f0638a37e5301b93295f'],
+    }),
+    ('pan', '1.6', {
+        'checksums': ['adc0df816ae38bc188bce0aef3aeb71d19c0fc26e063107eeee71a81a49463b6'],
+    }),
+    ('mitml', '0.4-3', {
+        'checksums': ['49bd3eb68a60fb2a269e7ddca8b862e1e81e0651e2b29759482fb7bcad452102'],
+    }),
+    ('mice', '3.13.0', {
+        'checksums': ['5108e4673512c96ced19c23fdbb0feea2b2a655a4c7dc9afb06a2a1a29f69785'],
+    }),
+    ('urca', '1.3-0', {
+        'checksums': ['621cc82398e25b58b4a16edf000ed0a1484d9a0bc458f734e97b6f371cc76aaa'],
+    }),
+    ('fracdiff', '1.5-1', {
+        'checksums': ['b8103b32a4ca3a59dda1624c07da08ecd144c7a91a747d1f4663e99421950eb6'],
+    }),
+    ('operator.tools', '1.6.3', {
+        'checksums': ['e5b74018fb75bfa02820dec4b822312f1640422f01d9fec1b58d880ffb798dec'],
+    }),
+    ('formula.tools', '1.7.1', {
+        'checksums': ['4fe0e72d9d96f2398e86cbd8536d0c84de38e5583d4ff7dcd73f415ddd8ca395'],
+    }),
+    ('logistf', '1.24', {
+        'checksums': ['6561d311fe21b789954cb33c008b86abdd6509b2a2900385dd6046163679d96b'],
+    }),
+    ('akima', '0.6-2.2', {
+        'checksums': ['deefc9ff82f78e68b7333c2fc88bd23863da9919493f2b73658044436f6b8742'],
+    }),
+    ('bitops', '1.0-7', {
+        'checksums': ['e9b5fc92c39f94a10cd0e13f3d6e2a9c17b75ea01467077a51d47a5f708517c4'],
+    }),
+    ('mixtools', '1.2.0', {
+        'checksums': ['ef033ef13625209065d26767bf70d129972e6808927f755629f1d70a118b9023'],
+    }),
+    ('cluster', '2.1.2', {
+        'checksums': ['5c8aa760fb6dda4fcfe6196e561ffcd2dc12b1a6c7659cb90be2cde747311499'],
+    }),
+    ('gclus', '1.3.2', {
+        'checksums': ['9cc61cdff206c11213e73afca3d570a7234250cf6044a9202c2589932278e0b3'],
+    }),
+    ('coda', '0.19-4', {
+        'checksums': ['422d3cfd34797a3631e9c4812431940599c0ca4bb9937797bed07b7b1d6fe58f'],
+    }),
+    ('doMC', '1.3.7', {
+        'checksums': ['defab27adc298a6746896d83251f8355d62c01012d51ef96d491875a2e74b54d'],
+    }),
+    ('DBI', '1.1.1', {
+        'checksums': ['572ab3b8a6421d0ac3e7665c4c842826f1723af98fca25d4f43edb419e771344'],
+    }),
+    ('gam', '1.20', {
+        'checksums': ['91eb416ba06aa1c3f611661530467f4513992f6c168e3f6e474cf57bae131efe'],
+    }),
+    ('gamlss.data', '6.0-1', {
+        'checksums': ['98fdec571aeacea4318c9e1c9d56b74716f3dc6acce385cbaad0d6128b154bb2'],
+    }),
+    ('gamlss.dist', '5.3-2', {
+        'checksums': ['0caa92cd20c3d2d11b1af4656fd0de09adf145992345cba07fdcd33b7716ced3'],
+    }),
+    ('gamlss', '5.3-4', {
+        'checksums': ['72707187471fd35c5379ae8c9b7b0ca87e302557f09cb3979d1cdb2e2500b01a'],
+    }),
+    ('gamlss.tr', '5.1-7', {
+        'checksums': ['8f9975bceaf8000b1d39317daf490e59c8385b5291326ed6a2630be11dae3137'],
+    }),
+    ('hwriter', '1.3.2', {
+        'checksums': ['6b3531d2e7a239be9d6e3a1aa3256b2745eb68aa0bdffd2076d36552d0d7322b'],
+    }),
+    ('xts', '0.12.1', {
+        'checksums': ['d680584af946fc30be0b2046e838cff7b3a65e00df1eadba325ca5e96f3dca2c'],
+    }),
+    ('curl', '4.3.2', {
+        'checksums': ['90b1facb4be8b6315bb3d272ba2dd90b88973f6ea1ab7f439550230f8500a568'],
+    }),
+    ('TTR', '0.24.2', {
+        'checksums': ['2587b988d9199474a19470b9b999b99133d0d8aa45410813e05c5f0ed763711b'],
+    }),
+    ('quantmod', '0.4.18', {
+        'checksums': ['aa40448e93a1facf399213ac691784007731e869ad243fe762381ab099cd6c35'],
+    }),
+    ('mvtnorm', '1.1-3', {
+        'checksums': ['ff4e302139ba631280fc9c4a2ab168596bfd09e17a805974199b043697c02448'],
+    }),
+    ('pcaPP', '1.9-74', {
+        'checksums': ['50837b434d67e4b5fcec34c689a9e30c7a9fb94c561b39f24e68a1456ff999b6'],
+    }),
+    ('pscl', '1.5.5', {
+        'checksums': ['054c9b88a991abdec3338688f58e81b6ba55f91edb988621864b24fd152fee6f'],
+    }),
+    ('fastmap', '1.1.0', {
+        'checksums': ['9113e526b4c096302cfeae660a06de2c4c82ae4e2d3d6ef53af6de812d4c822b'],
+    }),
+    ('cachem', '1.0.6', {
+        'checksums': ['9a9452f7bcf3f79436c418b3c3290449fb8fd338714d9b992153754d112f1864'],
+    }),
+    ('memoise', '2.0.0', {
+        'checksums': ['ff9ae3a1a95ad6271d98e6eca016768b790e44bd613356b8e86b685aefd9ecaf'],
+    }),
+    ('blob', '1.2.2', {
+        'checksums': ['4976053c65994c769a4c22b4553bea0bd9c623b3b991dbaf023d2a164770c7fa'],
+    }),
+    ('RSQLite', '2.2.8', {
+        'checksums': ['1b8adc1b7ed4bc5ec070b8765837cd4104fcdda482a1d335c030f51b427c4cc3'],
+    }),
+    ('BatchJobs', '1.8', {
+        'checksums': ['35cc2dae31994b1df982d11939509ce965e12578418c4fbb8cd7a422afd6e4ff'],
+    }),
+    ('sandwich', '3.0-1', {
+        'checksums': ['f6584b7084f3223bbc0c4722f53280496be73849747819b0cb4e8f3910284a89'],
+    }),
+    ('sfsmisc', '1.1-12', {
+        'checksums': ['9b12184a28fff87cacd0c3602d0cf63acb4d0f3049ad3a6ff16177f6df350782'],
+    }),
+    ('spatial', '7.3-14', {
+        'checksums': ['50e6daacbacff6c716485d20b15eb7fff7b8108dc5ea0ff508024beb4f0a8b9b'],
+    }),
+    ('VGAM', '1.1-5', {
+        'checksums': ['30190b150f3e5478137d288a45f575b2654ad7c29254b0a1fe5c954ee010a1bb'],
+    }),
+    ('waveslim', '1.8.2', {
+        'checksums': ['133c4f7a027282742fe99b583ca65f178fc7a3df2ce75cb4d60650f0a1dd7145'],
+    }),
+    ('xtable', '1.8-4', {
+        'checksums': ['5abec0e8c27865ef0880f1d19c9f9ca7cc0fd24eadaa72bcd270c3fb4075fd1c'],
+    }),
+    ('profileModel', '0.6.1', {
+        'checksums': ['91dc25e81f52506593f5c8d80a6131510b14525262f65b4ac10ae0cad0b2a506'],
+    }),
+    ('brglm', '0.7.2', {
+        'checksums': ['56098d2ce238478e7a27cacc4cdec0bc65f287fe746b38fbb1edda20c1675023'],
+    }),
+    ('deSolve', '1.30', {
+        'checksums': ['39f65d7af6b4d85eb023cce2a200c2de470644b22d45e210c5b7d558c3abf548'],
+    }),
+    ('tseriesChaos', '0.1-13.1', {
+        'checksums': ['23cb5fea56409a305e02a523ff8b7642ec383942d415c9cffdc92208dacfd961'],
+    }),
+    ('tseries', '0.10-48', {
+        'checksums': ['53bd22708c936205c5f839a10f2e302524d2cc54dc309e7d885ebd081ccb4471'],
+    }),
+    ('fastICA', '1.2-3', {
+        'checksums': ['e9ef82644cb64bb49ae3b7b6e0885f4fb2dc08ae030f8c76fe8dd8507b658950'],
+    }),
+    ('R.methodsS3', '1.8.1', {
+        'checksums': ['8a98fb81bcfa78193450f855f614f6f64e6c65daf115f301d97d1f474f5e619b'],
+    }),
+    ('R.oo', '1.24.0', {
+        'checksums': ['37a1dab8dd668ceba69a1ba36c0c60e9809e29b74bd56d1e8ed519e19c8e3bb6'],
+    }),
+    ('sys', '3.4', {
+        'checksums': ['17f88fbaf222f1f8fd07919461093dac0e7175ae3c3b3264b88470617afd0487'],
+    }),
+    ('askpass', '1.1', {
+        'checksums': ['db40827d1bdbb90c0aa2846a2961d3bf9d76ad1b392302f9dd84cc2fd18c001f'],
+    }),
+    ('openssl', '1.4.5', {
+        'checksums': ['4fc141aba8e94e9f5ecce6eda07e45a5e7048d8609ba909ede4f7f4933e0c1f7'],
+    }),
+    ('httr', '1.4.2', {
+        'checksums': ['462bed6ed0d92f811d5df4d294336025f1dbff357286999d9269bfd9c20b1ef9'],
+    }),
+    ('cgdsr', '1.3.0', {
+        'checksums': ['4aa2a3564cee2449c3ff39ab2ad631deb165d4c78b8107e0ff77a9095340cc1f'],
+    }),
+    ('R.utils', '2.11.0', {
+        'checksums': ['622860f995f78be3a6e439f29d945874c5cb0866f6a73a9b43ac1d4d7f23fed8'],
+    }),
+    ('R.matlab', '3.6.2', {
+        'checksums': ['1ba338f470a24b7f6ef68cadbd04eb468ead4a689f263d2642408ad591b786bb'],
+    }),
+    ('gridExtra', '2.3', {
+        'checksums': ['81b60ce6f237ec308555471ae0119158b115463df696d2eca9b177ded8988e3b'],
+    }),
+    ('gbm', '2.1.8', {
+        'checksums': ['7d5de3b980b8f23275e86ac9bed48a497c9aa53c58e407dfd676309f38272ec1'],
+    }),
+    ('Formula', '1.2-4', {
+        'checksums': ['cb70e373b5ed2fc8450937fb3321d37dfd22dcc6f07cb872a419d51205125caf'],
+    }),
+    ('acepack', '1.4.1', {
+        'checksums': ['82750507926f02a696f6cc03693e8d4a5ee7e92500c8c15a16a9c12addcd28b9'],
+    }),
+    ('proto', '1.0.0', {
+        'checksums': ['9294d9a3b2b680bb6fac17000bfc97453d77c87ef68cfd609b4c4eb6d11d04d1'],
+    }),
+    ('chron', '2.3-56', {
+        'checksums': ['863ecbb951a3da994761ea9062fa96d34e94e19fbc4122521ac179274dfa3f5d'],
+    }),
+    ('viridis', '0.6.2', {
+        'checksums': ['69b58cd1d992710a08b0b227fd0a9590430eea3ed4858099412f910617e41311'],
+    }),
+    ('yaml', '2.2.1', {
+        'checksums': ['1115b7bc2a397fa724956eec916df5160c600c99a3be186d21558dd38d782783'],
+    }),
+    ('htmltools', '0.5.2', {
+        'checksums': ['7dc7d50436e5a82a5801f85bcd2f572a06a98b4027d71aa17b4854ec9b2767fb'],
+    }),
+    ('htmlwidgets', '1.5.4', {
+        'checksums': ['1a3fc60f40717de7f1716b754fd1c31a132e489a2560a278636ee78eba46ffc1'],
+    }),
+    ('knitr', '1.36', {
+        'checksums': ['6ecef5b428d135e95a05f24f9f194d0d828b1180c61be44ad89b6210e32b8e41'],
+    }),
+    ('htmlTable', '2.3.0', {
+        'checksums': ['070d9a0ef6311304f6739d81f7690d8f19899451524b376b403d6a40d477a577'],
+    }),
+    ('Hmisc', '4.6-0', {
+        'checksums': ['2c1ce906b2333c6dc946dc7f10b74cfa552bce2b12dbebf295d143163562a1ad'],
+    }),
+    ('fastcluster', '1.2.3', {
+        'checksums': ['1f229129e1cddc78c7bb5ecc90c4d28ed810ee68cf210004c7cdfa12cfaf2a01'],
+    }),
+    ('registry', '0.5-1', {
+        'checksums': ['dfea36edb0a703ec57e111016789b47a1ba21d9c8ff30672555c81327a3372cc'],
+    }),
+    ('bibtex', '0.4.2.3', {
+        'checksums': ['7bad194920b412781ac9754ad41058d52d3cd7186e1851c2bce3640490e9bc6d'],
+    }),
+    ('pkgmaker', '0.32.2', {
+        'checksums': ['ce45b22def771a9c90a414093823e6befe7e23489c500eeccee5154b44d3ef91'],
+    }),
+    ('rngtools', '1.5.2', {
+        'checksums': ['7f8c76ca4c7851b69a86e27be09b02ddc86357f0388659ef8787634682e8a74d'],
+    }),
+    ('doParallel', '1.0.16', {
+        'checksums': ['f1bb26f964f30d47ae4d6cf2b0a2ca0c2122d376424875e82d9abe9e7b054eb2'],
+    }),
+    ('gridBase', '0.4-7', {
+        'checksums': ['be8718d24cd10f6e323dce91b15fc40ed88bccaa26acf3192d5e38fe33e15f26'],
+    }),
+    ('irlba', '2.3.3', {
+        'checksums': ['6ee233697bcd579813bd0af5e1f4e6dd1eea971e8919c748408130d970fef5c0'],
+    }),
+    ('igraph', '1.2.7', {
+        'checksums': ['25c1a03273359e012e2625d0d8826264c805037f247785e0b432e02c2aae1be5'],
+    }),
+    ('GeneNet', '1.2.15', {
+        'checksums': ['555ac4e1d6c53c099b94b9298b6a8893a07797886a21ce3655a98fa9a1326a85'],
+    }),
+    ('ape', '5.5', {
+        'checksums': ['a3aa01c74b99eafec7d98284e05957b6487b6971ced93f26881f2479bcd5299a'],
+    }),
+    ('RJSONIO', '1.3-1.6', {
+        'checksums': ['82d1c9ea7758b2a64ad683f9c46223dcba9aa8146b43c1115bf9aa76a657a09f'],
+    }),
+    ('caTools', '1.18.2', {
+        'checksums': ['75d61115afec754b053ed1732cc034f2aeb27b13e6e1932aa0f26bf590cf0293'],
+    }),
+    ('gplots', '3.1.1', {
+        'checksums': ['f9ae19c2574b6d41adbeccaf7bc66cf56d7b2769004daba7e0038d5fbd821339'],
+    }),
+    ('ROCR', '1.0-11', {
+        'checksums': ['57385a773220a3aaef5b221a68b2d9c2a94794d4f9e9fc3c1eb9521767debb2a'],
+    }),
+    ('later', '1.3.0', {
+        'checksums': ['08f50882ca3cfd2bb68c83f1fcfbc8f696f5cfb5a42c1448c051540693789829'],
+    }),
+    ('promises', '1.2.0.1', {
+        'checksums': ['8d3a8217909e91f4c2a2eebba5ac8fc902a9ac1a9e9d8a30815c9dc0f162c4b7'],
+    }),
+    ('httpuv', '1.6.3', {
+        'checksums': ['bfe338c86cc09968c5ec2fd1023040db323d3c3aa413d8d3e5ad4b320bf00876'],
+    }),
+    ('rjson', '0.2.20', {
+        'checksums': ['3a287c1e5ee7c333ed8385913c0a307daf99335fbdf803e9dcca6e3d5adb3f6c'],
+    }),
+    ('sourcetools', '0.1.7', {
+        'checksums': ['47984406efb3b3face133979ccbae9fefb7360b9a6ca1a1c11473681418ed2ca'],
+    }),
+    ('xml2', '1.3.2', {
+        'checksums': ['df22f9e7e3189d8c9b8804eaf0105324fdac983cffe743552f6d76613600a4cf'],
+    }),
+    ('commonmark', '1.7', {
+        'checksums': ['d14a767a3ea9778d6165f44f980dd257423ca6043926e3cd8f664f7171f89108'],
+    }),
+    ('jquerylib', '0.1.4', {
+        'checksums': ['f0bcc11dcde3a6ff180277e45c24642d3da3c8690900e38f44495efbc9064411'],
+    }),
+    ('rappdirs', '0.3.3', {
+        'checksums': ['49959f65b45b0b189a2792d6c1339bef59674ecae92f8c2ed9f26ff9e488c184'],
+    }),
+    ('fs', '1.5.0', {
+        'checksums': ['36df1653571de3c628a4f769c4627f6ac53d0f9e4106d9d476afb22ae9603897'],
+    }),
+    ('sass', '0.4.0', {
+        'checksums': ['7d06ca15239142a49e88bb3be494515abdd8c75f00f3f1b0ee7bccb55019bc2b'],
+    }),
+    ('bslib', '0.3.1', {
+        'checksums': ['5f5cb56e5cab9039a24cd9d70d73b69c2cab5b2f5f37afc15f71dae0339d9849'],
+    }),
+    ('fontawesome', '0.2.2', {
+        'checksums': ['572db64d1b3c9be301935e0ca7baec69f3a6e0aa802e23f1f224b3724259df64'],
+    }),
+    ('shiny', '1.7.1', {
+        'checksums': ['c03b2056fb41430352c7c0e812bcc8632e6ec4caef077d2f7633512d91721d00'],
+    }),
+    ('seqinr', '4.2-8', {
+        'checksums': ['584b34e9dec0320cef02096eb356a0f6115bbd24356cf62e67356963e9d5e9f7'],
+    }),
+    ('LearnBayes', '2.15.1', {
+        'checksums': ['9b110858456523ca0b2a63f22013c4e1fbda6674b9d84dc1f4de8bffc5260532'],
+    }),
+    ('deldir', '1.0-6', {
+        'checksums': ['6df6d8325c607e0b7d63cbc53c29e774eff95ad4acf9c7ec8f70693b0505f8c5'],
+    }),
+    ('gmodels', '2.18.1', {
+        'checksums': ['626140a34eb8c53dd0a06511a76c71bc61c48777fa76fcc5e6934c9c276a1369'],
+    }),
+    ('expm', '0.999-6', {
+        'checksums': ['2c79912fd2e03fcf89c29f09555880934402fcb2359af8b4579d79b4f955addc'],
+    }),
+    ('terra', '1.4-11', {
+        'checksums': ['0a8fc0deffd4f2d0065ac6b70ae5cda079a38fe86e40861df94d01d01412fd21'],
+    }),
+    ('raster', '3.5-2', {
+        'checksums': ['99565167f3ef41ade08b8466a172fc471c73184815c9fb199f9555db63e03d72'],
+    }),
+    ('spData', '2.0.1', {
+        'checksums': ['c635a3e2e5123b4cdb2e6877b9b09e3d50169e1512a53b2ba2db7fbe63b990fc'],
+    }),
+    ('units', '0.7-2', {
+        'checksums': ['b90be023431100632b3081747af9e743e615452b4ad38810991f7b024b7040eb'],
+    }),
+    ('classInt', '0.4-3', {
+        'checksums': ['9ede7a2a7a6b6c114919a3315a884fb592e33b037a50a4fe45cbd4fe2fc434ac'],
+    }),
+    ('vegan', '2.5-7', {
+        'checksums': ['e63b586951ea7d8b0118811f329c700212892ec1db3b93951603ce1d68aa462a'],
+    }),
+    ('rncl', '0.8.4', {
+        'checksums': ['6b19d0dd9bb08ecf99766be5ad684bcd1894d1cd9291230bdd709dbd3396496b'],
+    }),
+    ('XML', '3.99-0.8', {
+        'checksums': ['081f691c2ee8ad39c7c95281e7d9153ec04cee79ca2d41f5d82c2ec2f1d36b50'],
+    }),
+    ('tinytex', '0.34', {
+        'checksums': ['1d059397b70579c325b64bfd548ef7b985a7558bd1e3d95716e0ed7a0dd8e69b'],
+    }),
+    ('rmarkdown', '2.11', {
+        'checksums': ['9371255300e7ea4cd936978ad2ca3d205d8605e09f4913cb0d4725005a7a9775'],
+    }),
+    ('reshape', '0.8.8', {
+        'checksums': ['4d5597fde8511e8fe4e4d1fd7adfc7ab37ff41ac68c76a746f7487d7b106d168'],
+    }),
+    ('triebeard', '0.3.0', {
+        'checksums': ['bf1dd6209cea1aab24e21a85375ca473ad11c2eff400d65c6202c0fb4ef91ec3'],
+    }),
+    ('urltools', '1.7.3', {
+        'checksums': ['6020355c1b16a9e3956674e5dea9ac5c035c8eb3eb6bbdd841a2b5528cafa313'],
+    }),
+    ('httpcode', '0.3.0', {
+        'checksums': ['593a030a4f94c3df8c15576837c17344701bac023ae108783d0f06c476062f76'],
+    }),
+    ('crul', '1.1.0', {
+        'checksums': ['f0b6cfd19f7470a8aacc7621530315f83796aa64e24a47b96365963e5f615ace'],
+    }),
+    ('bold', '1.2.0', {
+        'checksums': ['8f1597f04acbe6b090232929325734c802049d82649ae102b438e1fa3af5a464'],
+    }),
+    ('rredlist', '0.7.0', {
+        'checksums': ['d2e66b655c43565a4cc0984dc3fcc9732652cb9677baaa9bb2b82e9f9d65e7f0'],
+    }),
+    ('rentrez', '1.2.3', {
+        'checksums': ['fb256597ebe7780e38bef9c4c2626b3feacd60c7a5a29fc6a218cf0d8d132f74'],
+    }),
+    ('rotl', '3.0.11', {
+        'checksums': ['339bf0b7527449eb495673e406b76a0831aa529fe05952c3448b455cd2c91c2c'],
+    }),
+    ('solrium', '1.2.0', {
+        'checksums': ['7ec64199497cc69f542fded955b709fc548cf8e2734c9db0f4a99a0ea67ca49b'],
+    }),
+    ('ritis', '1.0.0', {
+        'checksums': ['327b221872408b1f0fe0cce953685535b66d2fa5d6cac628e1142a26e4856136'],
+    }),
+    ('worrms', '0.4.2', {
+        'checksums': ['1ab228ea762a431a5e3a565b589b804fcb2865ceaa2b1459bd2ab3ebe8f5ebbe'],
+    }),
+    ('natserv', '1.0.0', {
+        'checksums': ['30f90f938e963191ef19b1433db1e265f67d8efe29c92a1d3603c3dc9a03d5c8'],
+    }),
+    ('WikipediR', '1.5.0', {
+        'checksums': ['f8d0e6f04fb65f7ad9c1c068852a6a8b699ffe8d39edf1f3fa07d32d087e8ff0'],
+    }),
+    ('ratelimitr', '0.4.1', {
+        'checksums': ['2b21e4574521c5336feeb3041eaf096bde7857b140049cdeb6ec97dc652aa71b'],
+    }),
+    ('rex', '1.2.0', {
+        'checksums': ['06b491f1469078862e40543fd74e1d38b2e0fb61fdf01c8083add4b11ac2eb54'],
+    }),
+    ('WikidataQueryServiceR', '1.0.0', {
+        'checksums': ['0e14eec8471a72227f800b41b331cfc49a94b4d4f49e68936448ebbae0b281ae'],
+    }),
+    ('pbapply', '1.5-0', {
+        'checksums': ['effdfee286e5ba9534dc2ac3cee96590a37f5cd2af28c836d00c25ca9f070a55'],
+    }),
+    ('WikidataR', '2.3.1', {
+        'checksums': ['dd349d160c1c0bae9e3efa336efc622ea9dd481cc0a449ceab49852d220eb2da'],
+    }),
+    ('wikitaxa', '0.4.0', {
+        'checksums': ['ba872853af59fdc8f1121d6e205f15e5bf4f2ec5ad68cd5755a423fa783bf7fc'],
+    }),
+    ('phangorn', '2.7.1', {
+        'checksums': ['d8a9d67851f16c3947575eb3344b9ce7ef856354e691211ef23c92b7889e1398'],
+    }),
+    ('uuid', '1.0-2', {
+        'checksums': ['0bed1a3fe298123e818b631c1a2d8bcf5c6ab334f625a482197324a877a6387a'],
+    }),
+    ('conditionz', '0.1.0', {
+        'checksums': ['ccd81e4f2534d29cddf44cf697f76ff01417cbeb22001a93477edc61cdd35646'],
+    }),
+    ('taxize', '0.9.99', {
+        'checksums': ['1a5d2783a82db4b6dd13df3639c7cd07112c1d83ddaabc83706ff235d977681c'],
+    }),
+    ('RNeXML', '2.4.5', {
+        'checksums': ['2b667ecb6400e4c0c125ca73a98cde81330cde3a85b764261f77159e702754f3'],
+    }),
+    ('phylobase', '0.8.10', {
+        'checksums': ['5a44380ff49bab333a56f6f96157324ade8afb4af0730e013194c4badb0bf94b'],
+    }),
+    ('magick', '2.7.3', {
+        'checksums': ['83877b2e23ea43fbc1164de9c2422eafbe7858393ac384df5adf3a7eec122441'],
+    }),
+    ('animation', '2.7', {
+        'checksums': ['88418f1b04ec785963bad492f30eb48b05914e9e5d88c7eef705d949cbd7e469'],
+    }),
+    ('bigmemory.sri', '0.1.3', {
+        'checksums': ['55403252d8bae9627476d1f553236ea5dc7aa6e54da6980526a6cdc66924e155'],
+    }),
+    ('bigmemory', '4.5.36', {
+        'checksums': ['18c67fbe6344b2f8223456c4f19ceebcf6c1166255eab81311001fd67a45ef0e'],
+    }),
+    ('calibrate', '1.7.7', {
+        'checksums': ['713b09b415c954e1ef5216088acd40621b0546c45afbb8c2c6f118ecb5cd6fa6'],
+    }),
+    ('clusterGeneration', '1.3.7', {
+        'checksums': ['534f29d8f7ed11e6e9a496f15845b588ec7133f3da5e6def8140b88500e52d5c'],
+    }),
+    ('dismo', '1.3-5', {
+        'checksums': ['812e1932d42c0f40acf2ab5c5b2d068f93128caf648626e1d11baf1a09340ee7'],
+    }),
+    ('extrafontdb', '1.0', {
+        'checksums': ['faa1bafee5d4fbc24d03ed237f29f1179964ebac6e3a46ac25b0eceda020b684'],
+    }),
+    ('Rttf2pt1', '1.3.9', {
+        'checksums': ['8667e48ed639c80180b1c1b65eff6ca2031bc9633a4fe79b50772f92375e3e71'],
+    }),
+    ('extrafont', '0.17', {
+        'checksums': ['2f6d7d79a890424b56ddbdced361f8b9ddede5edd33e090b816b88a99315332d'],
+    }),
+    ('fields', '13.3', {
+        'checksums': ['c652838b1ae7eb368831522824bfbc1d1db7b9d1db5e9bb52b194098549944c3'],
+    }),
+    ('shapefiles', '0.7', {
+        'checksums': ['eeb18ea4165119519a978d4a2ba1ecbb47649deb96a7f617f5b3100d63b3f021'],
+    }),
+    ('fossil', '0.4.0', {
+        'checksums': ['37c082fa15ebae89db99d6071b2bb2cad6a97a0405e9b4ef77f62a8f6ad274c1'],
+    }),
+    ('phytools', '0.7-90', {
+        'checksums': ['48615a709760af5f298f0af6615d238c96cad7d26e997fb65467520aad37e0d1'],
+    }),
+    ('geiger', '2.0.7', {
+        'checksums': ['d200736c4ad7ed4bc55a13e7d0126ddc7fed88e245cd5706d4692aaa437e9596'],
+    }),
+    ('shape', '1.4.6', {
+        'checksums': ['b9103e5ed05c223c8147dbe3b87a0d73184697343634a353a2ae722f7ace0b7b'],
+    }),
+    ('glmnet', '4.1-2', {
+        'checksums': ['06ab2b58c0b431736605aee2d42e517e0e2640d16b5a6c7867a25f05dd44cdcd'],
+    }),
+    ('crosstalk', '1.1.1', {
+        'checksums': ['ed3234f7f000fb607cc42e005d68be1dd598d95fa687a3f6e6b17ba38e36ccd8'],
+    }),
+    ('miniUI', '0.1.1.1', {
+        'checksums': ['452b41133289f630d8026507263744e385908ca025e9a7976925c1539816b0c0'],
+    }),
+    ('webshot', '0.5.2', {
+        'checksums': ['f183dc970157075b51ac543550a7a48fa3428b9c6838abb72fe987c21982043f'],
+    }),
+    ('shinyjs', '2.0.0', {
+        'checksums': ['c2cdd9fab41f6b46bb41b288cd9b3fb3a7fe9627b664e3a58a0cb5dd4c19f8ff'],
+    }),
+    ('manipulateWidget', '0.11.1', {
+        'checksums': ['5b73728d7d6dcc32f32d861375074cd65112c03a01e4ee4fa94e21b063fdefb6'],
+    }),
+    # ('rgl', '0.107.14', {
+    #    'checksums': ['67213c3215bcadb56e15922fbf0dc7f6a6642cc3d924363dcb1705291727b0fc'],
+    # }),
+    ('Rtsne', '0.15', {
+        'checksums': ['56376e4f0a382fad3d3d40e2cb0562224be5265b827622bcd235e8fc63df276c'],
+    }),
+    ('labdsv', '2.0-1', {
+        'checksums': ['5a4d55e9be18222dc47e725008b450996448ab117d83e7caaa191c0f13fd3925'],
+    }),
+    ('stabs', '0.6-4', {
+        'checksums': ['f8507337789f668e421a6ee7b11dd5ea331bf8bff0f9702dd1b93f46c2f3c1d9'],
+    }),
+    ('modeltools', '0.2-23', {
+        'checksums': ['6b3e8d5af1a039db5c178498dbf354ed1c5627a8cea9229726644053443210ef'],
+    }),
+    ('strucchange', '1.5-2', {
+        'checksums': ['7d247c5ae6f5a63c80e478799d009c57fb8803943aa4286d05f71235cc1002f8'],
+    }),
+    ('TH.data', '1.1-0', {
+        'checksums': ['21b37e251da5635ae91668f64b4c6f6a7ccedbe1f01af769d30fb532af83113e'],
+    }),
+    ('multcomp', '1.4-17', {
+        'checksums': ['41509d8457cfad9ce579115e6e0ed1f7c0244455a8639cbd38a6d755d338fb0b'],
+    }),
+    ('libcoin', '1.0-9', {
+        'checksums': ['2d7dd0b7c6dfc20472430570419ea36a714da7bbafd336da1fb53c5c6463d9eb'],
+    }),
+    ('coin', '1.4-2', {
+        'checksums': ['7546d1f27a82d98b4b3e43e4659eba0f74a67d5919ce85d2fb360282ba3cfbb2'],
+    }),
+    ('party', '1.3-9', {
+        'checksums': ['29a1fefdb86369285ebf5d48ab51268a83e2011fb9d9f609a2250b5f0b169089'],
+    }),
+    ('inum', '1.0-4', {
+        'checksums': ['5febef69c43a4b95b376c1418550a949d988a5f26b1383ca01c9728a94fc13ce'],
+    }),
+    ('partykit', '1.2-15', {
+        'checksums': ['b2e9454b2f4b9a39c9581c5871462f00acef4eeee5696ce3e32cfa1468d1e3ac'],
+    }),
+    ('mboost', '2.9-5', {
+        'checksums': ['cf9b13e00efe0b25702cb33151e8c11eff2de07db805db217472e9d09a3be079'],
+    }),
+    ('msm', '1.6.9', {
+        'checksums': ['aefcd9bb40b0167311d088d6fe23fdf7aa35deaac0f8b47ef02377cff5577023'],
+    }),
+    ('nor1mix', '1.3-0', {
+        'checksums': ['9ce4ee92f889a4a4041b5ea1ff09396780785a9f12ac46f40647f74a37e327a0'],
+    }),
+    ('np', '0.60-11', {
+        'checksums': ['a3b31b8ad70c42826076786b2b1b63b79cdbadfa55fe126773bc357686fd33a9'],
+    }),
+    ('polynom', '1.4-0', {
+        'checksums': ['c5b788b26f7118a18d5d8e7ba93a0abf3efa6603fa48603c70ed63c038d3d4dd'],
+    }),
+    ('polspline', '1.1.19', {
+        'checksums': ['953e3c4d007c3ef86ac2af3c71b272a99e8e35b194bdd58575785558c6711f66'],
+    }),
+    ('rms', '6.2-0', {
+        'checksums': ['10d58cbfe39fb434223834e29e5248c9384cded23e6267cfc99367d0f5ee24b6'],
+    }),
+    ('RWekajars', '3.9.3-2', {
+        'checksums': ['16e6b019aab1646f89c5203f0d6fc1cb800129e5169b15aaef30fd6236f5da1a'],
+    }),
+    ('RWeka', '0.4-43', {
+        'checksums': ['8c227a5935cff180d03c30eb73bdd00b16737579c8b8503ec7fccc17e746179a'],
+    }),
+    ('slam', '0.1-48', {
+        'checksums': ['0a0b32d35fd6b8d1ac021b1358e73d32ab942d274a84fbba732d6c02efdcfade'],
+    }),
+    ('tm', '0.7-8', {
+        'checksums': ['b1eb1683d956db1a207b61cc086ae08b3ca7f46b6b8bc46d09ba5a4fafa66256'],
+    }),
+    ('leaps', '3.1', {
+        'checksums': ['3d7c3a102ce68433ecf167ece96a7ebb4207729e4defd0ac8fc00e7003f5c3b6'],
+    }),
+    ('cNORM', '2.1.0', {
+        'checksums': ['52d0f831c2bfac93999b004c6f9ef84fe8230dc954da7b3d10030640fb7e3106'],
+    }),
+    ('TraMineR', '2.2-2', {
+        'checksums': ['0c0823e2f591bb669f8f36dac22199c0d2e2dfb20fc89d62e4a44575d57397a9'],
+    }),
+    ('chemometrics', '1.4.2', {
+        'checksums': ['b705832fa167dc24b52b642f571ed1efd24c5f53ba60d02c7797986481b6186a'],
+    }),
+    ('FNN', '1.1.3', {
+        'checksums': ['de763a25c9cfbd19d144586b9ed158135ec49cf7b812938954be54eb2dc59432'],
+    }),
+    ('miscTools', '0.6-26', {
+        'checksums': ['be3c5a63ca12ce7ce4d43767a1815cd3dcf32664728ade251cfb03ea6f77fc9a'],
+    }),
+    ('maxLik', '1.5-2', {
+        'checksums': ['7cee05be0624b6a76911fa7b0d66f3e1b78460e0c55ed8bc904ce1e8af7bb15d'],
+    }),
+    ('gbRd', '0.4-11', {
+        'checksums': ['0251f6dd6ca987a74acc4765838b858f1edb08b71dbad9e563669b58783ea91b'],
+    }),
+    ('rbibutils', '2.2.4', {
+        'checksums': ['bb9e7bd0ca472f7851704bd9a52ef7eca7540db32523f1b1f7e3bf06268cde97'],
+    }),
+    ('Rdpack', '2.1.2', {
+        'checksums': ['714897ec115344d9a9d423519f4c289e71038f80abccced02a47cdc05d61a168'],
+    }),
+    ('dfidx', '0.0-4', {
+        'checksums': ['04255de9b002b2f89db04144edcd72e21804e0c129a3e5082b4a21630c850702'],
+    }),
+    ('mlogit', '1.1-1', {
+        'checksums': ['6f3ea97db410be929a3078422f3d354d2f17855a21bbdc7c2c09d901e233d143'],
+    }),
+    ('getopt', '1.20.3', {
+        'checksums': ['531f5fdfdcd6b96a73df2b39928418de342160ac1b0043861e9ea844f9fbf57f'],
+    }),
+    ('gsalib', '2.1', {
+        'checksums': ['e1b23b986c18b89a94c58d9db45e552d1bce484300461803740dacdf7c937fcc'],
+    }),
+    ('optparse', '1.7.1', {
+        'checksums': ['324e304c13efd565d766766193d4ccd75e2cd949dfcfb416afc3939489071fe7'],
+    }),
+    ('labelled', '2.9.0', {
+        'checksums': ['36ac0e169ee065a8bced9417efeb85d62e1504a590d4321667d8a6213285d639'],
+    }),
+    ('R.cache', '0.15.0', {
+        'checksums': ['adb4d3b08f7917e10fe6188c7b90a3318701a974c58eaa09943b929382bdf126'],
+    }),
+    ('styler', '1.6.2', {
+        'checksums': ['a62fcc76aac851069f33874f9eaabdd580973b619cfc625d6ec910476015f75c'],
+    }),
+    ('questionr', '0.7.5', {
+        'checksums': ['a1a25d8ab228a8d3bdb6c37d50db3964fe33a3fe1c46a95331b029261977d4a3'],
+    }),
+    ('klaR', '0.6-15', {
+        'checksums': ['5bfe5bc643f8a64b222317732c26e9f93be297cdc318a869f15cc9ab0d9e0fae'],
+    }),
+    ('neuRosim', '0.2-12', {
+        'checksums': ['f4f718c7bea2f4b61a914023015f4c71312f8a180124dcbc2327b71b7be256c3'],
+    }),
+    ('locfit', '1.5-9.4', {
+        'checksums': ['d9d3665c5f3d49f698fb4675daf40a0550601e86db3dc00f296413ceb1099ced'],
+    }),
+    ('GGally', '2.1.2', {
+        'checksums': ['30352f36bf061bc98bdd5fa373ea0f23d007040bd908c7c018c8e627e0fb28e5'],
+    }),
+    ('beanplot', '1.2', {
+        'checksums': ['49da299139a47171c5b4ccdea79ffbbc152894e05d552e676f135147c0c9b372'],
+    }),
+    ('clValid', '0.7', {
+        'checksums': ['037da469891462021eb177f9c9e18caefa8532f08c68fb576fae1668a1f451a1'],
+    }),
+    ('DiscriMiner', '0.1-29', {
+        'checksums': ['5aab7671086ef9940e030324651976456f0e84dab35edb7048693ade885228c6'],
+    }),
+    ('ellipse', '0.4.2', {
+        'checksums': ['1719ce9a00b9ac4d56dbf961803085b892d3359726fda3567bb989ddfed9a5f2'],
+    }),
+    ('pbkrtest', '0.5.1', {
+        'checksums': ['b2a3452003d93890f122423b3f2487dcb6925440f5b8a05578509e98b6aec7c5'],
+    }),
+    ('carData', '3.0-4', {
+        'checksums': ['cda6f5e3efc1d955a4a0625e9c33f90d49f5455840e88b3bd757129b86044724'],
+    }),
+    ('maptools', '1.1-2', {
+        'checksums': ['3995c96e8472cd6717fe3cbd3506358ff460b6c2cf92dbe4b00f75f507514439'],
+    }),
+    ('zip', '2.2.0', {
+        'checksums': ['9f95987c964039834f770ecda2d5f7e3d3a9de553c89db2a5926c4219bf4b9d8'],
+    }),
+    ('openxlsx', '4.2.4', {
+        'checksums': ['af571b3c60cea2a5975f6a394469f1c50266d4a5c5c91896b991b1b3ba8bc86e'],
+    }),
+    ('rematch', '1.0.1', {
+        'checksums': ['a409dec978cd02914cdddfedc974d9b45bd2975a124d8870d52cfd7d37d47578'],
+    }),
+    ('cellranger', '1.1.0', {
+        'checksums': ['5d38f288c752bbb9cea6ff830b8388bdd65a8571fd82d8d96064586bd588cf99'],
+    }),
+    ('readxl', '1.3.1', {
+        'checksums': ['24b441713e2f46a3e7c6813230ad6ea4d4ddf7e0816ad76614f33094fbaaaa96'],
+    }),
+    ('rio', '0.5.27', {
+        'checksums': ['e0eb616cdbba9f2d5c4489ae05336201d717ce65b0ea6854023054d1c2e3dd0a'],
+    }),
+    ('car', '3.0-11', {
+        'checksums': ['b32c927206f515631ff276dbb337b0f22e9b2d851f4abb1d2c272e534c19542c'],
+    }),
+    ('flashClust', '1.01-2', {
+        'checksums': ['48a7849bb86530465ff3fbfac1c273f0df4b846e67d5eee87187d250c8bf9450'],
+    }),
+    ('ggrepel', '0.9.1', {
+        'checksums': ['29fb916d4799ba6503a5dd019717ffdf154d2aaae9ff1736f03e2be24af6bdfc'],
+    }),
+    ('DT', '0.19', {
+        'checksums': ['baa6bdae215ab84a5dee9c0a6c55dd92135c795d13dfce3c3485519c6f0e3b13'],
+    }),
+    ('FactoMineR', '2.4', {
+        'checksums': ['b9e3adce9a66b4daccc85fa67cb0769d6be230beeb126921b386ccde5db2e851'],
+    }),
+    ('flexclust', '1.4-0', {
+        'checksums': ['82fe445075a795c724644864c7ee803c5dd332a89ea9e6ccf7cd1ae2d1ecfc74'],
+    }),
+    ('flexmix', '2.3-17', {
+        'checksums': ['36019b7833032409ac61720dd625fa5a581a1d8bcba9045b04979c90907b5649'],
+    }),
+    ('prabclus', '2.3-2', {
+        'checksums': ['f421bcbcb557281e0de4a06b15f9a496adb5c640e883c0f7bb12051efc69e441'],
+    }),
+    ('diptest', '0.76-0', {
+        'checksums': ['508a5ebb161519cd0fcd156dc047b51becb216d545d62c6522496463f94ec280'],
+    }),
+    ('trimcluster', '0.1-5', {
+        'checksums': ['9239f20e4a06ac2fa89e5d5d89b23a45c8c534a7264d89bede8a35d43dda518b'],
+    }),
+    ('fpc', '2.2-9', {
+        'checksums': ['29b0006e96c8645645d215d3378551bd6525aaf45abde2d9f12933cf6e75fa38'],
+    }),
+    ('BiasedUrn', '1.07', {
+        'checksums': ['2377c2e59d68e758a566452d7e07e88663ae61a182b9ee455d8b4269dda3228e'],
+    }),
+    ('TeachingDemos', '2.12', {
+        'checksums': ['3e75405ce1affa406d6df85e06f96381412bc7a2810b25d8c81bfe64c4698644'],
+    }),
+    ('kohonen', '3.0.10', {
+        'checksums': ['996956ea46a827c9f214e4f940a19304a0ff35bda707d4d7312f80d3479067b2'],
+    }),
+    ('base64', '2.0', {
+        'checksums': ['8e259c2b12446197d1152b83a81bab84ccb5a5b77021a9b5645dd4c63c804bd1'],
+    }),
+    ('doRNG', '1.8.2', {
+        'checksums': ['33e9d45b91b0fde2e35e911b9758d0c376049121a98a1e4c73a1edfcff11cec9'],
+    }),
+    ('nleqslv', '3.3.2', {
+        'checksums': ['f54956cf67f9970bb3c6803684c84a27ac78165055745e444efc45cfecb63fed'],
+    }),
+    ('Deriv', '4.1.3', {
+        'checksums': ['dbdbf5ed8babf706373ae33a937d013c46110a490aa821bcd158a70f761d0f8c'],
+    }),
+    ('RGCCA', '2.1.2', {
+        'checksums': ['20f341fca8f616c556699790814debdf2ac7aa4dd9ace2071100c66af1549d7d'],
+    }),
+    ('pheatmap', '1.0.12', {
+        'checksums': ['579d96ee0417203b85417780eca921969cda3acc210c859bf9dfeff11539b0c1'],
+    }),
+    ('pvclust', '2.2-0', {
+        'checksums': ['7892853bacd413b5a921006429641ad308a344ca171b3081c15e4c522a8b0201'],
+    }),
+    ('RCircos', '1.2.1', {
+        'checksums': ['3b9489ab05ea83ead99ca6e4a1e6830467a2064779834aff1317b42bd41bb8fd'],
+    }),
+    ('lambda.r', '1.2.4', {
+        'checksums': ['d252fee39065326c6d9f45ad798076522cec05e73b8905c1b30f95a61f7801d6'],
+    }),
+    ('futile.options', '1.0.1', {
+        'checksums': ['7a9cc974e09598077b242a1069f7fbf4fa7f85ffe25067f6c4c32314ef532570'],
+    }),
+    ('futile.logger', '1.4.3', {
+        'checksums': ['5e8b32d65f77a86d17d90fd8690fc085aa0612df8018e4d6d6c1a60fa65776e4'],
+    }),
+    ('VennDiagram', '1.7.0', {
+        'checksums': ['7537566ae94ea4bde97ca819ce5ec477943f33847a8eb0042d0859ce11ab35d1'],
+    }),
+    ('xlsxjars', '0.6.1', {
+        'checksums': ['37c1517f95f8bca6e3514429394d2457b9e62383305eba288416fb53ab2e6ae6'],
+    }),
+    ('xlsx', '0.6.5', {
+        'checksums': ['378c5ed475a3d7631ea1ea13e0a69d619c1a52260922abda42818752dbb32107'],
+    }),
+    ('uroot', '2.1-2', {
+        'checksums': ['bd7fd9e35928d09d0e8fae9e4359a2b2bca6e6865b278436319e2f91db0e4b37'],
+    }),
+    ('forecast', '8.15', {
+        'checksums': ['c73aabed083095b457ed875c240716686fbd41d1cbafa116b7b890a54b919174'],
+    }),
+    ('fma', '2.4', {
+        'checksums': ['69a94c3bd464176a80232d49fcd04d478d4dd59f9bf128d6a9f46e49612d27f4'],
+    }),
+    ('expsmooth', '2.3', {
+        'checksums': ['ac7da36347f983d6ec71715daefd2797fe2fc505c019f4965cff9f77ce79982a'],
+    }),
+    ('fpp', '0.5', {
+        'checksums': ['9c87dd8591b8a87327cae7a03fd362a5492495a96609e5845ccbeefb96e916cb'],
+    }),
+    ('tensor', '1.5', {
+        'checksums': ['e1dec23e3913a82e2c79e76313911db9050fb82711a0da227f94fc6df2d3aea6'],
+    }),
+    ('polyclip', '1.10-0', {
+        'checksums': ['74dabc0dfe5a527114f0bb8f3d22f5d1ae694e6ea9345912909bae885525d34b'],
+    }),
+    ('goftest', '1.2-3', {
+        'checksums': ['3a5f74b6ae7ece5b294781ae57782abe12375d61789c55ff5e92e4aacf347f19'],
+    }),
+    ('spatstat.utils', '2.2-0', {
+        'checksums': ['5ad87e524285621dc4ef75c941eba933d980125293ee8f2bef5b7db02f63d7ab'],
+    }),
+    ('spatstat.data', '2.1-0', {
+        'checksums': ['1b9840ad0ec7eddfa98a01e8b8a5291e5cb447c3082aa7d7b4df762577f95533'],
+    }),
+    ('spatstat.geom', '2.3-0', {
+        'checksums': ['7b1746a44509a6d518799332477fffa3474217c6cb3c6b92a325525b48fce9c7'],
+    }),
+    ('spatstat.sparse', '2.0-0', {
+        'checksums': ['27fbce64e21f095a5e9ac54c86f91c9f4b45eac3c2358580e04423b4beba19c7'],
+    }),
+    ('spatstat.core', '2.3-0', {
+        'checksums': ['5795ec6db2961dce740c7cd39a9c1b855d92a4af351a794a9bfd634a3f1526c9'],
+    }),
+    ('spatstat.linnet', '2.3-0', {
+        'checksums': ['f0c089c41db8fe83d09ecb396ce8952a593c265411fb997847201d9784f9a2f9'],
+    }),
+    ('spatstat', '2.2-0', {
+        'checksums': ['8f0f90e8d5af1e2e97ef5f01e595511916290d554fc1ae3ad7b217605bd4e353'],
+    }),
+    ('pracma', '2.3.3', {
+        'checksums': ['cf1f8d7724a385d9a2e1a5496d9ba0e9908940b85669fb2c506b9059722cb93c'],
+    }),
+    ('RCurl', '1.98-1.5', {
+        'checksums': ['73187c9a039188ffdc255fb7fa53811a6abfb31e6375a51eae8c763b37dd698d'],
+    }),
+    ('bio3d', '2.4-2', {
+        'checksums': ['91415766cda0f96557e6bc568dbce8d44254a9460f2e2d0beed0ce14ffad6ccb'],
+    }),
+    ('AUC', '0.3.0', {
+        'checksums': ['e705f2c63d336249d19187f3401120d738d42d323fce905f3e157c2c56643766'],
+    }),
+    ('interpretR', '0.2.4', {
+        'checksums': ['4c08a6dffd6fd5764f27812f3a085c53e6a21d59ae82d903c9c0da93fd1dd059'],
+    }),
+    ('cvAUC', '1.1.0', {
+        'checksums': ['c4d8ed53b93869650aa2f666cf6d1076980cbfea7fa41f0b8227595be849738d'],
+    }),
+    ('SuperLearner', '2.0-28', {
+        'checksums': ['5f42233abd48f1740c33aae1ec4ad8e9952fddb5df1ee49ff2d43d5d89f05601'],
+    }),
+    ('mediation', '4.5.0', {
+        'checksums': ['210206618787c395a67689be268283df044deec7199d9860ed95218ef1e60845'],
+    }),
+    ('CVST', '0.2-2', {
+        'checksums': ['854b8c983427ecf9f2f7798c4fd1c1d06762b5b0bcb1045502baadece6f78316'],
+    }),
+    ('DRR', '0.0.4', {
+        'checksums': ['93e365a4907e301ae01f7d943e6bdcda71ef23c51a4759ba3c94bcf842d4e0f8'],
+    }),
+    ('dimRed', '0.2.3', {
+        'checksums': ['e6e56e3f6999ebdc326e64ead5269f3aaf61dd587beefafb7536ac3890370d84'],
+    }),
+    ('ddalpha', '1.3.11', {
+        'checksums': ['c30b4a3a9549cb4dc0a8e51e06f5b6e4c457c5326acc8f4680968c920f59b6e9'],
+    }),
+    ('RcppRoll', '0.3.0', {
+        'checksums': ['cbff2096443a8a38a6f1dabf8c90b9e14a43d2196b412b5bfe5390393f743f6b'],
+    }),
+    ('adabag', '4.2', {
+        'checksums': ['47019eb8cefc8372996fbb2642f64d4a91d7cedc192690a8d8be6e7e03cd3c81'],
+    }),
+    ('parallelMap', '1.5.1', {
+        'checksums': ['c108a634a335ed47b0018f532a52b032487e239c5061f939ba32355dfefde7e1'],
+    }),
+    ('ParamHelpers', '1.14', {
+        'checksums': ['b17652d0a69de3241a69f20be4ad1bfe02c413328a17f3c1ac7b73886a6ba2eb'],
+    }),
+    ('ggvis', '0.4.7', {
+        'checksums': ['9e6b067e11d497c796d42156570e2481afb554c5db265f42afbb74d2ae0865e3'],
+    }),
+    ('mlr', '2.19.0', {
+        'checksums': ['1149c9b453896481c85906045aa82d511d96979ddecbe5a3faf04f9f4a5e6113'],
+    }),
+    ('unbalanced', '2.0', {
+        'checksums': ['9be32b1ce9d972f1abfff2fbe18f5bb5ba9c3f4fb1282063dc410b82ad4d1ea2'],
+    }),
+    ('RSNNS', '0.4-14', {
+        'checksums': ['7f6262cb2b49b5d5979ccce9ded9cbb2c0b348fd7c9eabc1ea1d31c51a102c20'],
+    }),
+    ('abc.data', '1.0', {
+        'checksums': ['b242f43c3d05de2e8962d25181c6b1bb6ca1852d4838868ae6241ca890b161af'],
+    }),
+    ('abc', '2.1', {
+        'checksums': ['0bd2dcd4ee1915448d325fb5e66bee68e0497cbd91ef67a11b400b2fbe52ff59'],
+    }),
+    ('lhs', '1.1.3', {
+        'checksums': ['e43b8d48db1cf26013697e2a798ed1d31d1ee1790f2ebfecb280176c0e0c06d1'],
+    }),
+    ('tensorA', '0.36.2', {
+        'checksums': ['8e8947566bd3b65a54de4269df1abaa3d49cf5bfd2a963c3274a524c8a819ca7'],
+    }),
+    ('EasyABC', '1.5', {
+        'checksums': ['1dd7b1383a7c891cafb34d9cec65d92f1511a336cff1b219e63c0aa791371b9f'],
+    }),
+    ('whisker', '0.4', {
+        'checksums': ['7a86595be4f1029ec5d7152472d11b16175737e2777134e296ae97341bf8fba8'],
+    }),
+    ('roxygen2', '7.1.2', {
+        'checksums': ['b3693d1eb57bb1c27134447ea7f64c353c085dd2237af7cfacc75fca3d2fc5fd'],
+    }),
+    ('git2r', '0.28.0', {
+        'checksums': ['ce6d148d21d2c87757e98ef4474b2d09faded9b9b866f046bd26d4ca925e55f2'],
+    }),
+    ('rversions', '2.1.1', {
+        'checksums': ['79aaacf5a1258d91ac0ddedf3c8c16a2d10d39010993dcc7b0a2638afee27cb1'],
+    }),
+    ('xopen', '1.0.0', {
+        'checksums': ['e207603844d69c226142be95281ba2f4a056b9d8cbfae7791ba60535637b3bef'],
+    }),
+    ('sessioninfo', '1.2.0', {
+        'checksums': ['adebf738ad3d3af9e018302d949994240311ef06c0a77c645b2f761c1a8c07df'],
+    }),
+    ('rcmdcheck', '1.4.0', {
+        'checksums': ['bbd4ef7d514b8c2076196a7c4a6041d34623d55fbe73f2771758ce61fd32c9d0'],
+    }),
+    ('remotes', '2.4.1', {
+        'checksums': ['d5d777b2e10d70fd0670166d539eab88ec4f7fe030f54ec5cd2703f548473276'],
+    }),
+    ('clisymbols', '1.2.0', {
+        'checksums': ['0649f2ce39541820daee3ed408d765eddf83db5db639b493561f4e5fbf88efe0'],
+    }),
+    ('ini', '0.3.1', {
+        'checksums': ['7b191a54019c8c52d6c2211c14878c95564154ec4865f57007953742868cd813'],
+    }),
+    ('gitcreds', '0.1.1', {
+        'checksums': ['b14aaf4e910a9d2d6c65c93e645f0b0159c00898e669f917f83c03dfedb1dfea'],
+    }),
+    ('gh', '1.3.0', {
+        'checksums': ['a44039054e8ca56496f2d9c7a10cdadf4a7383bc91086e768ba7e7f1fbcaed1c'],
+    }),
+    ('credentials', '1.3.1', {
+        'checksums': ['8795a73a65d1ce2e9f0be66546e85231c846ba6445a11948b9816fbee20a7a60'],
+    }),
+    ('gert', '1.4.1', {
+        'checksums': ['623b58f12c5530b101e91a352269fe011814b074cf7a7ed0b3cd4506390a63f8'],
+    }),
+    ('usethis', '2.1.3', {
+        'checksums': ['2db075980247d854110de60e7afe6f6e0b654a3ba49d0699ff40dd516e8e9bbf'],
+    }),
+    ('covr', '3.5.1', {
+        'checksums': ['a54cfc3623ea56084158ac5d7fe33f216f45191f6dcddab9c9ed4ec1d9d8ac6c'],
+    }),
+    ('devtools', '2.4.2', {
+        'checksums': ['71f0a55054d293fb553702b21b91941bc5c83a933610fad6f9662bf0a6178f05'],
+    }),
+    ('Rook', '1.1-1', {
+        'checksums': ['00f4ecfa4c5c57018acbb749080c07154549a6ecaa8d4130dd9de79427504903'],
+    }),
+    ('Cairo', '1.5-12.2', {
+        'checksums': ['dd524105c83b82b5c3b3ee2583ef90d4cafa54b0c29817dac48b425b79f90f92'],
+    }),
+    ('RMTstat', '0.3', {
+        'checksums': ['81eb4c5434d04cb66c749a434c33ceb1c07d92ba79765d4e9233c13a092ec2da'],
+    }),
+    ('Lmoments', '1.3-1', {
+        'checksums': ['7c9d489a08f93fa5877e2f233ab9732e0d1b2761596b3f6ac91f2295e41a865d'],
+    }),
+    ('distillery', '1.2-1', {
+        'checksums': ['4b88f0b34e472b9134ad403fb32283424f1883a5943e52c55f1fe05995efb5fa'],
+    }),
+    ('extRemes', '2.1-1', {
+        'checksums': ['5a1927bb21f178ec5a3e3f862d792e690e45c16c88190e64e83aa1fb9e3ffa02'],
+    }),
+    ('tkrplot', '0.0-26', {
+        'checksums': ['dd66264c2553f6927aff297c6b1c3b61867d6c63aec080f40a1e9d53cfc9d120'],
+    }),
+    ('misc3d', '0.9-1', {
+        'checksums': ['a07bbb0de153e806cd79675ed478d2d9221cff825654f59a71a9cf61f4293d65'],
+    }),
+    ('multicool', '0.1-12', {
+        'checksums': ['487d28d9c3c606be0cf56e2d8f8b0d79fb71949c68886ea9251fbb1c01664a36'],
+    }),
+    ('plot3D', '1.4', {
+        'checksums': ['d04a45197646fb36bc38870c1c2351cb56b912bd772b1ebfa25eaeef35fda9c0'],
+    }),
+    # ('plot3Drgl', '1.0.2', {
+    #    'checksums': ['aa874891446a395f01791d80a5a0f1f9a1c2c41f029de3a8d5af9aa47f46a496'],
+    # }),
+    # ('OceanView', '1.0.6', {
+    #    'checksums': ['2c5165975d6c49fdc83a892cb0406584928dd44000c9774fffc00fbd2fec86f3'],
+    # }),
+    ('ks', '1.13.2', {
+        'checksums': ['7c9e4e178adcecb0817213c0210b82d91647f4acf5c4d4056d46d286a5bff609'],
+    }),
+    ('logcondens', '2.1.6', {
+        'checksums': ['785bbda00b9a25e56440e11356ac219cfbf0fdf8b08c7b0728e53a9febe7a365'],
+    }),
+    ('Iso', '0.0-18.1', {
+        'checksums': ['2fa5f78a7603cbae94a5e38e791938596a053d48c609a7c120a19cbb7d93c66f'],
+    }),
+    ('penalized', '0.9-51', {
+        'checksums': ['eaa80dca99981fb9eb576261f30046cfe492d014cc2bf286c447b03a92e299fd'],
+    }),
+    ('clusterRepro', '0.9', {
+        'checksums': ['940d84529ff429b315cf4ad25700f93e1156ccacee7b6c38e4bdfbe2d4c6f868'],
+    }),
+    ('data.tree', '1.0.0', {
+        'checksums': ['40674c90a5bd00f5185db9adbd221c6f1114043e69095249f5fa8b3044af3f5e'],
+    }),
+    ('influenceR', '0.1.0.1', {
+        'checksums': ['63c46f1175fced33fb1b78d4d56e37fbee09b408945b0106dac36e3344cd4766'],
+    }),
+    ('visNetwork', '2.1.0', {
+        'checksums': ['a2b91e7fbbd9d08a9929a5b2c891d9c0bca5977ad772fa37510d96656af1152f'],
+    }),
+    ('downloader', '0.4', {
+        'checksums': ['1890e75b028775154023f2135cafb3e3eed0fe908138ab4f7eff1fc1b47dafab'],
+    }),
+    ('DiagrammeR', '1.0.6.1', {
+        'checksums': ['be4e4c520a3692902ce405e8225aef9f3d5f0cd11fcde614f6541e981b63673d'],
+    }),
+    ('randomForestSRC', '2.13.0', {
+        'checksums': ['beb981cae3a8c7232a2ca67f0a7bf3293eb44d5f1ac14913632ca8f8d4728abd'],
+    }),
+    ('sm', '2.2-5.7', {
+        'checksums': ['2607a2cafc68d7e99005daf99e36f4a66eaf569ebb6b7500e962642cf58be80f'],
+    }),
+    ('pbivnorm', '0.6.0', {
+        'checksums': ['07c37d507cb8f8d2d9ae51a9a6d44dfbebd8a53e93c242c4378eaddfb1cc5f16'],
+    }),
+    ('lavaan', '0.6-9', {
+        'checksums': ['d404c4eb40686534f9c05f24f908cd954041f66d1072caea4a3adfa83a5f108a'],
+    }),
+    ('matrixcalc', '1.0-5', {
+        'checksums': ['5906e1ef06dbc18efc7a4b370adc180ef8941b5438119703bd981d1c76a06fca'],
+    }),
+    ('arm', '1.12-2', {
+        'checksums': ['816ba1c31eec00feef472c57e280488d3d233b592f6f0a1a30e4abb903cb4f5d'],
+    }),
+    ('mi', '1.0', {
+        'checksums': ['34f44353101e8c3cb6bf59c5f4ff5b2391d884dcbb9d23066a11ee756b9987c0'],
+    }),
+    ('servr', '0.23', {
+        'checksums': ['4492d1dabc8f62cf7f7a53c97413a664823a3916dcaf99a7b04bcb279f7b2eb8'],
+    }),
+    ('rgexf', '0.16.2', {
+        'checksums': ['6ee052b0de99d0c7492366b991d345a51b3d0cc890d10a68b8670e1bd4fc8201'],
+    }),
+    ('sem', '3.1-13', {
+        'checksums': ['07749f710ad800f43cacdff8f1aa4f20105a619c72be4465f29860c381242f65'],
+    }),
+    ('statnet.common', '4.5.0', {
+        'checksums': ['3cdb23db86f3080462f15e29bcf3e941590bc17ea719993b301199b22d6f882f'],
+    }),
+    ('network', '1.17.1', {
+        'checksums': ['fc3c3a0014f8895a11c33994c9b44c6ef6cc49c7d026cd41ae6bba5ef63005a7'],
+    }),
+    ('rle', '0.9.2', {
+        'checksums': ['803cbe310af6e882e27be61d37d660dbe5910ac1ee1eff61a480bcf724a04f69'],
+    }),
+    ('sna', '2.6', {
+        'checksums': ['3a016550d9f424a0613c3f5b0b680dbd3a1f20a343173d39a96034340ad9202a'],
+    }),
+    ('glasso', '1.11', {
+        'checksums': ['4c37844b26f55985184a734e16b8fe880b192e3d2763614b0ab3f99b4530e30a'],
+    }),
+    ('huge', '1.3.5', {
+        'checksums': ['9240866e2f773cd0ac8a02514871149d2babaa162a49e151eab9591ad42984ea'],
+    }),
+    ('d3Network', '0.5.2.1', {
+        'checksums': ['5c798dc0c87c6d574abb7c1f1903346e6b0fec8adfd1df7aef5e4f9e7e3a09be'],
+    }),
+    ('BDgraph', '2.64', {
+        'checksums': ['243f3af3724552049f8f4f55dd425e3313adab95e1128ae4d6551d96005fdf5e'],
+    }),
+    ('graphlayouts', '0.7.1', {
+        'checksums': ['380f8ccb0b08735694e83f661fd56a0d592a78448ae91b89c290ba8582d66717'],
+    }),
+    ('tweenr', '1.0.2', {
+        'checksums': ['1805f575da6705ca4e5ec1c4605222fc826ba806d9ff9af41770294fe08ff69f'],
+    }),
+    ('ggforce', '0.3.3', {
+        'checksums': ['2a283bb409da6b96929863a926b153bcc59b2c6f00551805db1d1d43e5929f2f'],
+    }),
+    ('tidygraph', '1.2.0', {
+        'checksums': ['057d6c42fc0144109f3ace7f5058cca7b2fe493c761daa991448b23f86b6129f'],
+    }),
+    ('ggraph', '2.0.5', {
+        'checksums': ['e36ad49dba92ee8652e18b1fb197be0ceb9f0a2f8faee2194453a62578449654'],
+    }),
+    ('qgraph', '1.9', {
+        'checksums': ['e1d7489c4db47878dccd34ded7e8173d58a190ad453d2e6e89f33549ccfd10aa'],
+    }),
+    ('HWxtest', '1.1.9', {
+        'patches': ['HWxtest-1.1.9_add-fcommon.patch'],
+        'checksums': [
+            'a37309bed4a99212ca104561239d834088217e6c5e5e136ff022544c706f25e6',  # HWxtest_1.1.9.tar.gz
+            '4ce08c35035dbcc4edf092cdb405ae32c21c05b3786c15c0aa4bfe13bd81f451',  # HWxtest-1.1.9_add-fcommon.patch
+        ],
+    }),
+    ('diveRsity', '1.9.90', {
+        'checksums': ['b8f49cdbfbd82805206ad293fcb2dad65b962fb5523059a3e3aecaedf5c0ee86'],
+    }),
+    ('doSNOW', '1.0.19', {
+        'checksums': ['4cd2d080628482f4c6ecab593313d7e42516f5ff13fbf9f90e461fcad0580738'],
+    }),
+    ('geepack', '1.3-2', {
+        'checksums': ['99b53e40f7e5fda7422b143e6fee16513e2f880cb04a97cd403e98c4760670a6'],
+    }),
+    ('biom', '0.3.12', {
+        'checksums': ['4ad17f7811c7346dc4923bd6596a007c177eebb1944a9f46e5674afcc5fdd5a1'],
+    }),
+    ('pim', '2.0.2', {
+        'checksums': ['1195dbdbd67348dfef4b6fc34fcec643da685ebe58d34bbe049ab121aca9944f'],
+    }),
+    ('minpack.lm', '1.2-1', {
+        'checksums': ['14cb7dba3ef2b46da0479b46d46c76198e129a31f6157cd8b37f178adb15d5a3'],
+    }),
+    ('rootSolve', '1.8.2.3', {
+        'checksums': ['b5b3d1641642a3fd1279dbd1245f968d2331ac9588d77f872b113f7dc4594ba0'],
+    }),
+    ('diagram', '1.6.5', {
+        'checksums': ['e9c03e7712e0282c5d9f2b760bafe2aac9e99a9723578d9e6369d60301f574e4'],
+    }),
+    ('FME', '1.3.6.2', {
+        'checksums': ['65a200f8171e27f0a3d7ffce3e49b01561f219a11f3cb515ff613a45927ff618'],
+    }),
+    ('bmp', '0.3', {
+        'checksums': ['bdf790249b932e80bc3a188a288fef079d218856cf64ffb88428d915423ea649'],
+    }),
+    ('tiff', '0.1-8', {
+        'checksums': ['4b7482f70d8ecef9596b766ef1c64102c8b09208cb769c39d9e4db81cb3ba1a2'],
+    }),
+    ('readbitmap', '0.1.5', {
+        'checksums': ['737d7d585eb33de2c200da64d16781e3c9522400fe2af352e1460c6a402a0291'],
+    }),
+    ('imager', '0.42.10', {
+        'checksums': ['01939eb03ad2e1369a4240a128c3b246a4c56f572f1ea4967f1acdc555adaeee'],
+    }),
+    ('signal', '0.7-7', {
+        'checksums': ['67a015c46d67de7548c3adb83a1b22524de75501a861d91668c3c2ea761a4e61'],
+    }),
+    ('tuneR', '1.3.3.1', {
+        'checksums': ['cdcbf04ab5b547002ee5b1d3bc46145882c5a551f164cac43df71596f1edd18a'],
+    }),
+    ('pastecs', '1.3.21', {
+        'checksums': ['8c1ef2affe88627f0b23295aa5edb758b8fd6089ef09f60f37c46445128b8d7c'],
+    }),
+    ('audio', '0.1-8', {
+        'checksums': ['1a1c78bca63ed1fb5e30e00c593b67e1230b408e6a77c67082b41373d79b5bb4'],
+    }),
+    ('fftw', '1.0-6', {
+        'checksums': ['397ef5ec354b919884f74fba4202bfc13ad11a70b16285c41677aad1d3b170ce'],
+    }),
+    ('seewave', '2.1.8', {
+        'checksums': ['10e6487325ccd1c3cd64617182733f1472f3170974b32bb61a6b12ba7ddeeceb'],
+    }),
+    ('gsw', '1.0-6', {
+        'checksums': ['147ce73da75777799af9cb712862ef25b52fcae146a64ce0a525460ddfea1deb'],
+    }),
+    ('wk', '0.5.0', {
+        'checksums': ['71d500e0beaeed40501702adf214054d30278acb3171af6db4ae8dcdf5e7423a'],
+    }),
+    ('s2', '1.0.7', {
+        'checksums': ['2010c1c6ae29938ec9cd153a8b2c06a333ea4d647932369b2fc7d0c68d6d9e3f'],
+    }),
+    ('sf', '1.0-3', {
+        'checksums': ['2ee3ece4e5056fe267d76a785912a2285ddfc235b1be67b4c21b74dc39a831f8'],
+    }),
+    ('oce', '1.4-0', {
+        'checksums': ['3b341448001164dc62b54a26c8f86adf50e68705ddc47615b290b950da734408'],
+    }),
+    ('ineq', '0.2-13', {
+        'checksums': ['e0876403f59a3dfc2ea7ffc0d965416e1ecfdecf154e5856e5f54800b3efda25'],
+    }),
+    ('soundecology', '1.3.3', {
+        'checksums': ['276164d5eb92c78726c647be16232d2443acbf7061371ddde2672b4fdb7a069a'],
+    }),
+    ('memuse', '4.2-1', {
+        'checksums': ['f5e9dbaad4efbbfe219a93f446e318a00cad5b294bfc60ca2146eca894b47cf3'],
+    }),
+    ('pinfsc50', '1.2.0', {
+        'checksums': ['ed1fe214b9261feef8abfbf724c2bd9070d68e99a6ea95208aff2c57bbef8794'],
+    }),
+    ('vcfR', '1.12.0', {
+        'checksums': ['dd87ff010365de363864a44ca49887c0fdad0dd18d0d9c66e44e39c2d4581d52'],
+    }),
+    ('glmmML', '1.1.1', {
+        'checksums': ['255fe2640933d83ef7ea5813ba8006038c18195147d1f34f47a759210a674dd4'],
+    }),
+    ('cowplot', '1.1.1', {
+        'checksums': ['c7dce625b456dffc59ba100c816e16226048d12fdd29a7335dc1f6f6e12eed48'],
+    }),
+    ('tsne', '0.1-3', {
+        'checksums': ['66fdf5d73e69594af529a9c4f261d972872b9b7bffd19f85c1adcd66afd80c69'],
+    }),
+    ('sn', '2.0.0', {
+        'checksums': ['abd6ccdb3719b482db43ff2d5b12f2efcb8244792ec08e1176c5eb98fcc7886a'],
+    }),
+    ('tclust', '1.4-2', {
+        'checksums': ['95dcd07dbd16383f07f5cea8561e7f3bf314e4a7483879841103b149fc8c65d9'],
+    }),
+    ('ranger', '0.13.1', {
+        'checksums': ['60934f0accc21edeefddbb4ddebfdd7cd10a3d3e90b31aa2e6e4b7f50d632d0a'],
+    }),
+    ('hexbin', '1.28.2', {
+        'checksums': ['6241f8d3a6c6be2c1c693c3ddb99554bc103e3c6cf602d0c2787c0ce6fd1702d'],
+    }),
+    ('lobstr', '1.1.1', {
+        'checksums': ['b8c9ce00095bd4f304b4883ef71da24572022f0632a18c3e1ba317814e70716e'],
+    }),
+    ('pryr', '0.1.5', {
+        'checksums': ['7b1653ec51850f4633cee8e2eb7d0b2724fb587b801539488b426cf88f0f770b'],
+    }),
+    ('moments', '0.14', {
+        'checksums': ['2a3b81e60dafdd092d2bdd3513d7038855ca7d113dc71df1229f7518382a3e39'],
+    }),
+    ('laeken', '0.5.2', {
+        'checksums': ['22790f7157f23eb0b7b0b89e2ea53478fb3c0d15b5be8ad11525d3e6d5626cdc'],
+    }),
+    ('VIM', '6.1.1', {
+        'checksums': ['7581adca64cf20b93d5a111da83f663215b4529868b065b3463c4238bca97739'],
+    }),
+    ('smoother', '1.1', {
+        'checksums': ['91b55b82f805cfa1deedacc0a4e844a2132aa59df593f3b05676954cf70a195b'],
+    }),
+    ('dynamicTreeCut', '1.63-1', {
+        'checksums': ['831307f64eddd68dcf01bbe2963be99e5cde65a636a13ce9de229777285e4db9'],
+    }),
+    ('beeswarm', '0.4.0', {
+        'checksums': ['51f4339bf4080a2be84bb49a844c636625657fbed994abeaa42aead916c3d504'],
+    }),
+    ('vipor', '0.4.5', {
+        'checksums': ['7d19251ac37639d6a0fed2d30f1af4e578785677df5e53dcdb2a22771a604f84'],
+    }),
+    ('ggbeeswarm', '0.6.0', {
+        'checksums': ['bbac8552f67ff1945180fbcda83f7f1c47908f27ba4e84921a39c45d6e123333'],
+    }),
+    ('shinydashboard', '0.7.2', {
+        'checksums': ['a56ee48572649830cd8d82f1caa2099411461e19e19223cbad36a375299f3843'],
+    }),
+    ('rrcov', '1.6-0', {
+        'checksums': ['795f3a49b3e17c9c6e0fdd865e81a0402cefda970032c8299bcf2056ca7ec944'],
+    }),
+    ('WriteXLS', '6.3.0', {
+        'checksums': ['0b1d987abe4b08f6a32003b77d1cfc2eefdc5a478382e77ca0da98bccf6e526b'],
+    }),
+    ('bst', '0.3-23', {
+        'checksums': ['70957f1db8800bf0d628a9e6f72b7273329786dd119427790b326844591aa0f3'],
+    }),
+    ('pamr', '1.56.1', {
+        'checksums': ['d0e527f2336ee4beee91eefb2a8f0dfa96413d9b5a5841d6fc7ff821e67c9779'],
+    }),
+    ('WeightSVM', '1.7-9', {
+        'checksums': ['983733b618631d9ad754fb12f5e576912aff1f529cafdee4fddfd38d81ccc710'],
+    }),
+    ('mpath', '0.4-2.19', {
+        'checksums': ['fa0d92984910b8f556677850e3d899bc675724f0e2a3a73629d2700040335afe'],
+    }),
+    ('timereg', '2.0.1', {
+        'checksums': ['38429ae21d9d090ed968d2e0c06cd0310cc304e974c353a97cde3d2e49f138d7'],
+    }),
+    ('peperr', '1.3', {
+        'checksums': ['64d30b0ec09bf9b8f7b6edce67dd0f9e0e3dbe665fec8f5411f74142e53e9f5d'],
+    }),
+    ('heatmap3', '1.1.9', {
+        'checksums': ['594c33947b2be2cc8a592075f41a0df2398c892add7d63a15c613a5eeb8fdb69'],
+    }),
+    ('GlobalOptions', '0.1.2', {
+        'checksums': ['47890699668cfa9900a829c51f8a32e02a7a7764ad07cfac972aad66f839753e'],
+    }),
+    ('circlize', '0.4.13', {
+        'checksums': ['6cbadbf8e8b1abbd71a79080677d2b95f2bdd18f2e4d707c32d5c2ff26c5369b'],
+    }),
+    ('GetoptLong', '1.0.5', {
+        'checksums': ['8c237986ed3dfb72d956ad865ef7768644eebf144675ad66140acfd1aca9d701'],
+    }),
+    ('dendextend', '1.15.2', {
+        'checksums': ['4ba3885b66694589d455ffef31c218fe653fa25aff3efb7e8db6c25008d2921b'],
+    }),
+    ('RInside', '0.2.16', {
+        'checksums': ['7ae4ade128ea05f37068d59e610822ff0b277f9d39d8900f7eb31759ad5a2a0e'],
+    }),
+    ('limSolve', '1.5.6', {
+        'checksums': ['b97ea9930383634c8112cdbc42f71c4e93fe0e7bfaa8f401921835cb44cb49a0'],
+    }),
+    ('dbplyr', '2.1.1', {
+        'checksums': ['aba4cf47b85ab240fd3ec4cd8d512f6e1958201e151577c1a2ebc3d6ebc5bc08'],
+    }),
+    ('modelr', '0.1.8', {
+        'checksums': ['825ba77d95d60cfb94920bec910872ca2ffe7790a44148b2992be2759cb361c4'],
+    }),
+    ('debugme', '1.1.0', {
+        'checksums': ['4dae0e2450d6689a6eab560e36f8a7c63853abbab64994028220b8fd4b793ab1'],
+    }),
+    ('reprex', '2.0.1', {
+        'checksums': ['0e6d8667cacb63135476a766fba3a4f91e5ad86274ea66d2b1e6d773b5ca6426'],
+    }),
+    ('selectr', '0.4-2', {
+        'checksums': ['5588aed05f3f5ee63c0d29953ef53da5dac7afccfdd04b7b22ef24e1e3b0c127'],
+    }),
+    ('rvest', '1.0.2', {
+        'checksums': ['89bb477e0944c80298a52ccf650db8f6377fd7ed3c1bc7034d000f695fdf05a4'],
+    }),
+    ('dtplyr', '1.1.0', {
+        'checksums': ['99681b7285d7d5086e5595ca6bbeebf7f4e2ee358a32b694cd9d35916cdfc732'],
+    }),
+    ('gargle', '1.2.0', {
+        'checksums': ['4d46ca2933f19429ca5a2cfe47b4130a75c7cd9931c7758ade55bac0c091d73b'],
+    }),
+    ('googledrive', '2.0.0', {
+        'checksums': ['605c469a6a086ef4b049909c2e20a35411c165ce7ce4f62d68fd39ffed8c5a26'],
+    }),
+    ('ids', '1.0.1', {
+        'checksums': ['b6212a186063c23116c5cbd3cca65dbb8977dd737261e4526ebee8f64852cfe8'],
+    }),
+    ('googlesheets4', '1.0.0', {
+        'checksums': ['0a107d76aac99d6db48d97ce55810c1412b2197f457b8476f676169a36c7cc7a'],
+    }),
+    ('tidyverse', '1.3.1', {
+        'checksums': ['83cf95109d4606236274f5a8ec2693855bf75d3a1b3bc1ab4426dcc275ed6632'],
+    }),
+    ('R.rsp', '0.44.0', {
+        'checksums': ['8969075bdcabd43bad40eef6b82223e119426279fded041163fd41e55cee3a59'],
+    }),
+    ('gdistance', '1.3-6', {
+        'checksums': ['2ccabeb2f8cf44630c0bd2da79815fe357b812737ebece1bed8f90b27c126a24'],
+    }),
+    ('vioplot', '0.3.7', {
+        'checksums': ['06475d9a47644245ec91598e9aaef7db1c393802d9fc314420ac5139ae56adb6'],
+    }),
+    ('emulator', '1.2-21', {
+        'checksums': ['9b50b2c1e673dbc5e846a4fa72e8bd03434add9f659bde6d7b0c4f1bbd713346'],
+    }),
+    ('gmm', '1.6-6', {
+        'checksums': ['b1b321ad1b4a4a14a2825a2c3eb939ce2f2bcef995247a1d638eca250e59739b'],
+    }),
+    ('tmvtnorm', '1.4-10', {
+        'checksums': ['1a9f35e9b4899672e9c0b263affdc322ecb52ec198b2bb015af9d022faad73f0'],
+    }),
+    ('IDPmisc', '1.1.20', {
+        'checksums': ['bcb9cd7b8097e5089d1936286ef310ac2030ea7791350df706382ba470afc67f'],
+    }),
+    ('gap', '1.2.3-1', {
+        'checksums': ['343ae58ca91e75147ae3961285c3413bdf6dedf7cb4743a822a6c5b16d1b89e7'],
+    }),
+    ('qrnn', '2.0.5', {
+        'checksums': ['3bd83ee8bd83941f9defdab1b5573d0ceca02bf06759a67665e5b9358ff92f52'],
+    }),
+    ('TMB', '1.7.22', {
+        'checksums': ['c24125e1a37ed2b3c2554133183465cb6f3c0021cd4d4609c61336f59c3bd384'],
+    }),
+    ('glmmTMB', '1.1.2.3', {
+        'checksums': ['55631e001ff3f1d8e419e3b0b5555317713c733c11a2f7d4db6434d8c4e7dcf9'],
+    }),
+    ('gmp', '0.6-2', {
+        'checksums': ['6bfcb45b3f1e7da27d8773f911027355cab371d150c3dabf7dbaf8fba85b7f0e'],
+    }),
+    ('ROI', '1.0-0', {
+        'checksums': ['b0d87fb4ed2137d982734f3c5cdc0305aabe6e80f95de29655d02a9e82a0a341'],
+    }),
+    ('Rglpk', '0.6-4', {
+        'checksums': ['a28dbc3130b9618d6ed2ef718d2c55df8ed8c44a47161097c53fe15fa3bfbfa6'],
+    }),
+    ('ROI.plugin.glpk', '1.0-0', {
+        'checksums': ['b361b0d4222d74b21432cdc6990762affecdbcec8fd6bbdb13b78b59cb04b444'],
+    }),
+    ('spaMM', '3.9.13', {
+        'checksums': ['f9ded29106c656ff15ddc2564c16d44b77f08dac1f2dea5720028923e83e2514'],
+    }),
+    ('qgam', '1.3.3', {
+        'checksums': ['9a68fe4e74f4188862f7c01d682d50ffadd96ce7b98383404472309c87e3a26f'],
+    }),
+    ('DHARMa', '0.4.4', {
+        'checksums': ['b5a073f84faf7144f2074a43f619f8f264773afb0e09ca0294735e792552edca'],
+    }),
+    ('mvnfast', '0.2.7', {
+        'checksums': ['b67d50936c9a466977669ef6bb7b23df8e7c90a820ac916328c20e41ef8e0b72'],
+    }),
+    ('bridgesampling', '1.1-2', {
+        'checksums': ['54ecd39aa2e36d4d521d3d36425f9fe56a3f8547df6048c814c5931d790f3e6b'],
+    }),
+    ('BayesianTools', '0.1.7', {
+        'checksums': ['af49389bdeb794da3c39e1d63f59e6219438ecb8613c5ef523b00c6fed5a600c'],
+    }),
+    ('gomms', '1.0', {
+        'checksums': ['52828c6fe9b78d66bde5474e45ff153efdb153f2bd9f0e52a20a668e842f2dc5'],
+    }),
+    ('feather', '0.3.5', {
+        'checksums': ['50ff06d5e24d38b5d5d62f84582861bd353b82363e37623f95529b520504adbf'],
+    }),
+    ('dummies', '1.5.6', {
+        'checksums': ['7551bc2df0830b98c53582cac32145d5ce21f5a61d97e2bb69fd848e3323c805'],
+    }),
+    ('SimSeq', '1.4.0', {
+        'checksums': ['5ab9d4fe2cb1b7634432ff125a9e04d2f574fed06246a93859f8004e10790f19'],
+    }),
+    ('uniqueAtomMat', '0.1-3-2', {
+        'checksums': ['f7024e73274e1e76a870ce5e26bd58f76e8f6df0aa9775c631b861d83f4f53d7'],
+    }),
+    ('PoissonSeq', '1.1.2', {
+        'checksums': ['6f3dc30ad22e33e4fcfa37b3427c093d591c02f1b89a014d85e63203f6031dc2'],
+    }),
+    ('aod', '1.3.1', {
+        'checksums': ['052d8802500fcfdb3b37a8e3e6f3fbd5c3a54e48c3f68122402d2ea3a15403bc'],
+    }),
+    ('cghFLasso', '0.2-1', {
+        'checksums': ['6e697959b35a3ceb2baa1542ef81f0335006a5a9c937f0173c6483979cb4302c'],
+    }),
+    ('svd', '0.5', {
+        'checksums': ['d042d448671355d0664d37fd64dc90932eb780e6494c479d4431d1faae2071a1'],
+    }),
+    ('Rssa', '1.0.4', {
+        'checksums': ['4115b516f6782d52f02695bbbd52921a474aafc7232d49aca85010f1c33b08a7'],
+    }),
+    ('JBTools', '0.7.2.9', {
+        'checksums': ['b33cfa17339df7113176ad1832cbb0533acf5d25c36b95e888f561d586c5d62f'],
+    }),
+    ('RUnit', '0.4.32', {
+        'checksums': ['23a393059989000734898685d0d5509ece219879713eb09083f7707f167f81f1'],
+    }),
+    ('DistributionUtils', '0.6-0', {
+        'checksums': ['7443d6cd154760d55b6954142908eae30385672c4f3f838dd49876ec2f297823'],
+    }),
+    ('gapfill', '0.9.6-1', {
+        'checksums': ['22f04755873e34a9077bb1b1de8d16f5bc56cb8c395c4f797f9ad0b209b1b996'],
+    }),
+    ('gee', '4.13-20', {
+        'checksums': ['53014cee059bd87dc22f9679dfbf18fe6813b9ab41dfe90361921159edfbf798'],
+    }),
+    ('Matching', '4.9-11', {
+        'checksums': ['1c71ca8462b3168839bf446ee8e5b4baa6288a72f8c8590c9d7565c91fba7688'],
+    }),
+    ('MatchIt', '4.3.0', {
+        'checksums': ['ca897ab81a7c19ebd4cbc67011c6223668ad5a8876b10f665a86f5f79ed85446'],
+    }),
+    ('RItools', '0.1-17', {
+        'checksums': ['75654780e9ca39cb3c43acfaca74080ad74de50f92c5e36e95694aafdfdc0cea'],
+    }),
+    ('mitools', '2.4', {
+        'checksums': ['f204f3774e29d79810f579f128de892539518f2cbe6ed237e08c8e7283155d30'],
+    }),
+    ('survey', '4.1-1', {
+        'checksums': ['05e89a1678a39e32bfb41af8a31d643b04fc4d2660a96e701825e6bffcd75a52'],
+    }),
+    ('optmatch', '0.9-15', {
+        'checksums': ['7500fdbed939b7f16603a097d734a332793a3ac68e6a80c7957bef2a567691d8'],
+    }),
+    ('SPAtest', '3.1.2', {
+        'checksums': ['b3d74ed2b0a6475a9966dd50eb5d363d0b2985636271dfbf82f0472b8d22b9f4'],
+    }),
+    ('SKAT', '2.0.1', {
+        'checksums': ['c8637cf5786b926f6bbef3f4ef1d3af5130cc0cfd9094d4835839724b2d0e8c7'],
+    }),
+    ('GillespieSSA', '0.6.1', {
+        'checksums': ['272e9b6b26001d166fd7ce8d04f32831ba23c676075fbd1e922e27ba2c962052'],
+    }),
+    ('startupmsg', '0.9.6', {
+        'checksums': ['1d60ff13bb260630f797bde66a377a5d4cd65d78ae81a3936dc4374572ec786e'],
+    }),
+    ('distr', '2.8.0', {
+        'checksums': ['bb7df05d6b946bcdbbec2e3397c7c7e349b537cabfcbb13a34bcf6312a71ceb7'],
+    }),
+    ('distrEx', '2.8.0', {
+        'checksums': ['b064cde7d63ce93ec9969c8c4463c1e327758b6f8ea7765217d77f9ba9d590bf'],
+    }),
+    ('minerva', '1.5.10', {
+        'checksums': ['2f26353d8fcc989ac698c4e45bb683801b1a7bb60b14903d05a4d73c629c590f'],
+    }),
+    ('KODAMA', '1.8', {
+        'checksums': ['1ed9c14826c3c549c7323672cee04a71048c505c130e739ef5a95ed9bfe43444'],
+    }),
+    ('locfdr', '1.1-8', {
+        'checksums': ['42d6e12593ae6d541e6813a140b92591dabeb1df94432a515507fc2eee9a54b9'],
+    }),
+    ('ica', '1.0-2', {
+        'checksums': ['e721596fc6175d3270a60d5e0b5b98be103a8fd0dd93ef16680af21fe0b54179'],
+    }),
+    ('dtw', '1.22-3', {
+        'checksums': ['df7cf9adf613422ddb22a160597eb5f5475ab6c67c0d790092edb7f72ba98f00'],
+    }),
+    ('SDMTools', '1.1-221.2', {
+        'checksums': ['f0dd8c5f98d2f2c012536fa56d8f7a58aaf0c11cbe3527e66d4ee3194f6a6cf7'],
+    }),
+    ('ggridges', '0.5.3', {
+        'checksums': ['f5eafab17f2d4a8a2a83821ad3e96ae7c26b62bbce9de414484c657383c7b42e'],
+    }),
+    ('TFisher', '0.2.0', {
+        'checksums': ['bd9b7484d6fba0165841596275b446f85ba446d40e92f3b9cb37381a3827e76f'],
+    }),
+    ('lsei', '1.3-0', {
+        'checksums': ['6289058f652989ca8a5ad6fa324ce1762cc9e36c42559c00929b70f762066ab6'],
+    }),
+    ('npsurv', '0.5-0', {
+        'checksums': ['bc87db76e7017e178c2832a684fcd49c42e20054644b21b586413d26c8821dc6'],
+    }),
+    ('fitdistrplus', '1.1-6', {
+        'checksums': ['17c2990041a3bb7479f3c3a6d13d96c989db8eaddab17eff7e1fbe172a5b96be'],
+    }),
+    ('here', '1.0.1', {
+        'checksums': ['08ed908033420d3d665c87248b3a14d1b6e2b37844bf736be620578c20ca346b'],
+    }),
+    ('reticulate', '1.22', {
+        'checksums': ['b06e7b39abf08ae9604ea26d02e3c6e4ef6dcc4b6c7c98118fd85192f615f56c'],
+    }),
+    ('hdf5r', '1.3.4', {
+        'installopts': '--configure-args="--with-hdf5=$EBROOTHDF5/bin/h5cc"',
+        'preinstallopts': "unset LIBS && ",
+        'checksums': ['64d057601841b604e04e8514d33a1e5e515dcbfd9cc8369d40d717d7036fab53'],
+    }),
+    ('DTRreg', '1.7', {
+        'checksums': ['f0fad2244d960cec8fc33d9a1078df359ceb0aadff980ce6149aa9f01c62223b'],
+    }),
+    ('pulsar', '0.3.7', {
+        'checksums': ['78c9f7e3b2bf8a8d16a81d6ee43bb05b0c360219be473d920c8c8ccb2aba4e3d'],
+    }),
+    ('bayesm', '3.1-4', {
+        'checksums': ['061b216c62bc72eab8d646ad4075f2f78823f9913344a781fa53ea7cf4a48f94'],
+    }),
+    ('gsl', '2.1-7', {
+        'checksums': ['1a86af59d9864ecf2a85d5371076786e7a0491d6d6b4d5c1a7590ea8919f3b17'],
+    }),
+    ('energy', '1.7-8', {
+        'checksums': ['de08e8de037bb30068bbf0c1880b153a586d342304681f4ba103ab808c7f4789'],
+    }),
+    ('compositions', '2.0-2', {
+        'checksums': ['b5e47a14a1bb010b47b4ad7fbfabfead1a08b009b92e1f7d4bd3bd7f8589f216'],
+    }),
+    ('clustree', '0.4.3', {
+        'checksums': ['5ff3afc3fb3e1d20d033328935084de574250d29545c0a5b69180fe4846fbe53'],
+    }),
+    ('plotly', '4.10.0', {
+        'checksums': ['bd995c654dbc8c09a84adaba8def99766919e3894caf18b551bb26b2f591389a'],
+    }),
+    ('tweedie', '2.3.3', {
+        'checksums': ['a032cad512dac37a8619e6f66cb513eb82a88a5a2ffbe91e92c2d44d1756d0d9'],
+    }),
+    ('RcppGSL', '0.3.10', {
+        'checksums': ['8612087da02fb791f427fed310c23d0482a8eb60fb089119f018878143f95451'],
+    }),
+    ('mvabund', '4.1.12', {
+        'checksums': ['c1af39dbfd048c9bb367765ee266be49622e1a5d964186920a2d47bec4e6f780'],
+    }),
+    ('fishMod', '0.29', {
+        'checksums': ['5989e49ca6d6b2c5d514655e61f75b019528a8c975f0d6056143f17dc4277a5d'],
+    }),
+    ('gllvm', '1.3.1', {
+        'checksums': ['cd3f72b84f0c722e9c0b21c2b2de7683ec742345d7f8e62f67c8c93342c1a5c6'],
+    }),
+    ('grpreg', '3.4.0', {
+        'checksums': ['fd57d20baf63d2cc5821998bca5c3fdcbe46c933c9553caa492911b12654d6ad'],
+    }),
+    ('trust', '0.1-8', {
+        'checksums': ['952e348b62aec35988b103fd152329662cb6a451538f184549252fbf49d7dcac'],
+    }),
+    ('lpSolveAPI', '5.5.2.0-17.7', {
+        'checksums': ['9ebc8e45ad73eb51e0b25049598a5bc758370cf89508e2328cf4bd93d68d55bb'],
+    }),
+    ('ergm', version, {
+        'checksums': ['1abc6ef53376a4132530c376ce477ae7a2590e95fe8feb011c0da9cfb4d49ba0'],
+    }),
+    ('networkDynamic', '0.11.0', {
+        'checksums': ['aa21caaddce75c22e08b94adfb6036f5ee151ffb79d174ad250fe4592d27dad2'],
+    }),
+    ('tergm', '4.0.2', {
+        'checksums': ['5ab1d61166c90f90c77edd12544b5946e01a933cc3e7ca609cae72075b742a64'],
+    }),
+    ('ergm.count', '4.0.2', {
+        'checksums': ['316ed3cbe4b472eec79e8a5fd4183ce953070f6d98056d87423bd6d9ac155bd1'],
+    }),
+    ('tsna', '0.3.4', {
+        'checksums': ['08fd9612388b86077cd877a48f81068d63f20291836eedbc727c9e00c1a2b4d2'],
+    }),
+    ('statnet', '2019.6', {
+        'checksums': ['0903e1a81ed1b6289359cefd12da1424c92456d19e062c3f74197b69e536b29d'],
+    }),
+    ('aggregation', '1.0.1', {
+        'checksums': ['86f88a02479ddc8506bafb154117ebc3b1a4a44fa308e0193c8c315109302f49'],
+    }),
+    ('ComICS', '1.0.4', {
+        'checksums': ['0af7901215876f95f309d7da6e633c38e4d7faf04112dd6fd343bc15fc593a2f'],
+    }),
+    ('dtangle', '2.0.9', {
+        'checksums': ['c375068c1877c2e8cdc5601cfd5a9c821645c3dff90ddef64817f788f372e179'],
+    }),
+    ('mcmc', '0.9-7', {
+        'checksums': ['b7c4d3d5f9364c67a4a3cd49296a61c315ad9bd49324a22deccbacb314aa8260'],
+    }),
+    ('MCMCpack', '1.6-0', {
+        'checksums': ['b5b9493457d11d4dca12f7732bd1b3eb1443852977c8ee78393126f13deaf29b'],
+    }),
+    ('shinythemes', '1.2.0', {
+        'checksums': ['37d68569ce838c7da9f0ea7e2b162ecf38fba2ae448a4888b6dd29c4bb5b2963'],
+    }),
+    ('csSAM', '1.2.4', {
+        'checksums': ['3d6442ad8c41fa84633cbbc275cd67e88490a160927a5c55d29da55a36e148d7'],
+    }),
+    ('bridgedist', '0.1.0', {
+        'checksums': ['dc7c1c8874d6cfa34d550d9af194389e13471dfbc55049a1ab66db112fbf1343'],
+    }),
+    ('asnipe', '1.1.16', {
+        'checksums': ['be50f9fdef0f4bf9676b9c3c2906d0431afc678af55cf48b1119f9fc0adac44f'],
+    }),
+    ('liquidSVM', '1.2.4', {
+        'patches': ['liquidSVM-1.2.4-fix_ppc_and_aarch64_build.patch'],
+        'preinstallopts': 'LIQUIDSVM_TARGET="empty"',
+        'checksums': [
+            '15a9c7f2930e2ed3f4c5bcd9b042884ea580d2b2e52e1c68041600c196046aba',  # liquidSVM_1.2.4.tar.gz
+            # liquidSVM-1.2.4-fix_ppc_and_aarch64_build.patch
+            '46b09e441c3b59af535f20d8db0dee7f1d6a7ddd511175d252115b53cb8b86f8',
+        ],
+    }),
+    ('oddsratio', '2.0.1', {
+        'checksums': ['2097e7a8bf623379d55652de5dce4946d05163e85d30df50dc19055962bf60b5'],
+    }),
+    ('mltools', '0.3.5', {
+        'checksums': ['7093ffceccdf5d4c3f045d8c8143deaa8ab79935cc6d5463973ffc7d3812bb10'],
+    }),
+    ('h2o', '3.34.0.3', {
+        'checksums': ['2a707b9f7271eae611c9e81b13d2024b8829f6b06b3c41c5b97de1aef591931e'],
+    }),
+    ('mlegp', '3.1.8', {
+        'checksums': ['eac1df085a608451828575028ca05b78dc6b5035da14cabc141bfee5ef986de9'],
+    }),
+    ('itertools', '0.1-3', {
+        'checksums': ['b69b0781318e175532ad2d4f2840553bade9637e04de215b581704b5635c45d3'],
+    }),
+    ('missForest', '1.4', {
+        'checksums': ['f785804b03bdf424e1c76095989a803afb3b47d6bebca9a6832074b6326c0278'],
+    }),
+    ('bartMachineJARs', '1.1', {
+        'checksums': ['f2c31cb94d7485174a2519771127a102e35b9fe7f665e27beda3e76a56feeef2'],
+    }),
+    ('bartMachine', '1.2.6', {
+        'checksums': ['5e1ac0033da5b41a96d95782886a167e51ff8e43822800e8d40874ff9c13847f'],
+    }),
+    ('lqa', '1.0-3', {
+        'checksums': ['3889675dc4c8cbafeefe118f4f20c3bd3789d4875bb725933571f9991a133990'],
+    }),
+    ('PresenceAbsence', '1.1.9', {
+        'checksums': ['1a30b0a4317ea227d674ac873ab94f87f8326490304e5b08ad58953cdf23169f'],
+    }),
+    ('GUTS', '1.1.1', {
+        'checksums': ['094b8f51719cc36ddc56e3412dbb146eafc93c5e8fbb2c5999c2e80ea7a7d216'],
+    }),
+    ('GenSA', '1.1.7', {
+        'checksums': ['9d99d3d0a4b7770c3c3a6de44206811272d78ab94481713a8c369f7d6ae7b80f'],
+    }),
+    ('parsedate', '1.2.1', {
+        'checksums': ['6b078da4a47904194bfe29e2c3b6fbbf6e3ad190e33979f840a3ea366c708616'],
+    }),
+    ('circular', '0.4-93', {
+        'checksums': ['76cee2393757390ad91d3db3e5aeb2c2d34c0a46822b7941498571a473417142'],
+    }),
+    ('cobs', '1.3-4', {
+        'checksums': ['a1c7b77e4ca097349884fd1c0d863d74f9092766131094d603f34d33ab2e3c42'],
+    }),
+    ('resample', '0.4', {
+        'checksums': ['f0d5f735e1b812612720845d79167a19f713a438fd10a6a3206e667045fd93e5'],
+    }),
+    ('MIIVsem', '0.5.8', {
+        'checksums': ['a908f51e1598290d25864c358d57201bd50c1c40775d4d0405cbc8077bee61e1'],
+    }),
+    ('medflex', '0.6-7', {
+        'checksums': ['d28107a4bbbb0ace1d571f0aa6884ee4c50d7731c04bceba207fd55a39b83b9c'],
+    }),
+    ('Rserve', '1.7-3.1', {
+        'checksums': ['3ba1e919706e16a8632def5f45d666b6e44eafa6c14b57064d6ddf3415038f99'],
+    }),
+    ('spls', '2.2-3', {
+        'checksums': ['bbd693da80487eef2939c37aba199f6d811ec289828c763d9416a05fa202ab2e'],
+    }),
+    ('Boruta', '7.0.0', {
+        'checksums': ['6ff520d27d68637058c33a34c547a656bb44d5e351b7cc7afed6cd4216275c78'],
+    }),
+    ('dr', '3.0.10', {
+        'checksums': ['ce523c1bdb62a9dda30afc12b1dd96975cc34695c61913012236f3b80e24bf36'],
+    }),
+    ('CovSel', '1.2.1', {
+        'checksums': ['b375d00cc567e125ff106b4357654f43bba3abcadeed2238b6dea4b7a68fda09'],
+    }),
+    ('tmle', '1.5.0.2', {
+        'checksums': ['4772c352e8d3d9b5a0b7480c0e0962de4f5060fb7bf3fcb8ee4fa1cb10f93fd4'],
+    }),
+    ('ctmle', '0.1.2', {
+        'checksums': ['e3fa0722cd87aa0e0b209c2dddf3fc44c6d09993f1e66a6c43285fe950948161'],
+    }),
+    ('BayesPen', '1.0', {
+        'checksums': ['772df9ae12cd8a3da1d5b7d1f1629602c7693f0eb03945784df2809e2bb061b0'],
+    }),
+    ('inline', '0.3.19', {
+        'checksums': ['0ee9309bb7dab0b97761ddd18381aa12bd7d54678ccd7bec00784e831f4c99d5'],
+    }),
+    ('BMA', '3.18.15', {
+        'checksums': ['4be0d52f433503631e9574944067f613bafba129ebe27396bcfccb3b95992b1a'],
+    }),
+    ('BCEE', '1.3.0', {
+        'checksums': ['82afc9b8c6d617f5f728341960ae32922194f637c550916b3bea12c231414fa7'],
+    }),
+    ('bacr', '1.0.1', {
+        'checksums': ['c847272e2c03fd08ed79b3b739f57fe881af77404b6fd087caa0c398c90ef993'],
+    }),
+    ('clue', '0.3-60', {
+        'checksums': ['6d21ddfd0d621ed3bac861890c600884b6ed5ff7d2a36c9778b892636dbbef2a'],
+    }),
+    ('bdsmatrix', '1.3-4', {
+        'checksums': ['251e21f433a016ec85e478811ea3ad34c572eb26137447f48d1bbf3cc8bb06ea'],
+    }),
+    ('fftwtools', '0.9-11', {
+        'checksums': ['f1f0c9a9086c7b2f72c5fb0334717cc917213a004eaef8448eab4940c9852c7f'],
+    }),
+    ('imagerExtra', '1.3.2', {
+        'checksums': ['0ebfa1eabb89459d774630ab73c7a97a93b9481ea5afc55482975475acebd5b8'],
+    }),
+    ('MALDIquant', '1.20', {
+        'checksums': ['fff39d5df295b937cdad57b73d4e06e925f69e68784ef58b5dfcd3cf500931c1'],
+    }),
+    ('threejs', '0.3.3', {
+        'checksums': ['76c759c8b20fb34f4f7a01cbd1b961296e1f19f4df6dded69aae7f1bca80219c'],
+    }),
+    ('LaplacesDemon', '16.1.6', {
+        'checksums': ['57b53882fd7a195b38bbdbbf0b17745405eb3159b1b42f7f11ce80c78ab94eb7'],
+    }),
+    ('rda', '1.0.2-2.1', {
+        'checksums': ['eea3a51a2e132a023146bfbc0c384f5373eb3ea2b61743d7658be86a5b04949e'],
+    }),
+    ('sampling', '2.9', {
+        'checksums': ['7f5ba5978f6cdbbbdb6f51958197b28b6fc63e7eeee59e6845ea09fb37d1b187'],
+    }),
+    ('lda', '1.4.2', {
+        'checksums': ['5606a1e1bc24706988853528023f7a004c725791ae1a7309f1aea2fc6681240f'],
+    }),
+    ('jiebaRD', '0.1', {
+        'checksums': ['045ee670f5378fe325a45b40fd55136b355cbb225e088cb229f512c51abb4df1'],
+    }),
+    ('jiebaR', '0.11', {
+        'checksums': ['adde8b0b21c01ec344735d49cd33929511086719c99f8e10dce4ca9479276623'],
+    }),
+    ('hdm', '0.3.1', {
+        'checksums': ['ba087565e9e0a8ea30a6095919141895fd76b7f3c05a03e60e9e24e602732bce'],
+    }),
+    ('abe', '3.0.1', {
+        'checksums': ['66d2e9ac78ba64b7d27b22b647fc00378ea832f868e51c18df50d6fffb8029b8'],
+    }),
+    ('SignifReg', '4.2', {
+        'checksums': ['53d2ff3ddbb398655b245ad3a19c028d6fb6bb1d59adeb30bb3497606733fc2d'],
+    }),
+    ('bbmle', '1.0.24', {
+        'checksums': ['01edc00479fabf7491e47ff59bc4adbe6f0d4c23d22e76d1d49c4c1b6b4693ad'],
+    }),
+    ('emdbook', '1.3.12', {
+        'checksums': ['0646caf9e15aaa61ff917a4b5fdf82c06ac17ef221a61dec3fbb554e7bff4353'],
+    }),
+    ('SOAR', '0.99-11', {
+        'checksums': ['d5a0fba3664087308ce5295a1d57d10bad149eb9771b4fe67478deae4b7f68d8'],
+    }),
+    ('rasterVis', '0.51.0', {
+        'checksums': ['5225334add4dd3502044cf80a00543b766568c2d93c47af180f66a76942d76be'],
+    }),
+    ('tictoc', '1.0.1', {
+        'checksums': ['a09a1535c417ddf6637bbbda5fca6edab6c7f7b252a64e57e99d4d0748712705'],
+    }),
+    ('ISOcodes', '2021.02.24', {
+        'checksums': ['152769bcb4ae99d06a767384541c2000c94990a2c6983780837f85e885b539a6'],
+    }),
+    ('stopwords', '2.3', {
+        'checksums': ['c5ec1c6ab1bad1786d87d7823d4b63abc94d2fd84ed7d8e985906e96fb6321b2'],
+    }),
+    ('janeaustenr', '0.1.5', {
+        'checksums': ['992f6673653daf7010fe176993a01cd4127d9a88be428da8da7a28241826d6f3'],
+    }),
+    ('SnowballC', '0.7.0', {
+        'checksums': ['b10fee9d322f567a22c580b49b5d4ba1c86eae40a71794ca92552c726b3895f3'],
+    }),
+    ('tokenizers', '0.2.1', {
+        'checksums': ['28617cdc5ddef5276abfe14a2642999833322b6c34697de1d4e9d6dc7670dd00'],
+    }),
+    ('hunspell', '3.0.1', {
+        'checksums': ['1fedbb913bc13c790d2fabfe4edda0a987db3a078bea8c0ca9b777d20af08662'],
+    }),
+    ('topicmodels', '0.2-12', {
+        'checksums': ['afd83a4381bf39e470446ebefd41ed03f314be400c1b2f702a4b1060eb8fd1b4'],
+    }),
+    ('tidytext', '0.3.2', {
+        'checksums': ['6fe0ada78ee2cdf77c16e519a29b9baff61d8e23ab56aa0a9adc1b2a99a6472b'],
+    }),
+    ('splitstackshape', '1.4.8', {
+        'checksums': ['656032c3f1e3dd5b8a3ee19ffcae617e07104c0e342fc3da4d863637a770fe56'],
+    }),
+    ('grImport2', '0.2-0', {
+        'checksums': ['a102a2d877e42cd4e4e346e5510a77b2f3e57b43ae3c6d5c272fdceb506b00a7'],
+    }),
+    ('preseqR', '4.0.0', {
+        'checksums': ['0143db473fb9a811f9cf582a348226a5763e62d9857ce3ef4ec41412abb559bc'],
+    }),
+    ('idr', '1.2', {
+        'checksums': ['8bbfdf82c8c2b5c73eb079127e198b6cb65c437bb36729f502c7bcd6037fdb16'],
+    }),
+    ('entropy', '1.3.1', {
+        'checksums': ['6f5a89f5ce0e90cbed1695b81259326c976e7a8f538157e223ee5f63b54412b8'],
+    }),
+    ('kedd', '1.0.3', {
+        'checksums': ['38760abd8c8e8f69ad85ca7992803060acc44ce68358de1763bd2415fdf83c9f'],
+    }),
+    ('HiddenMarkov', '1.8-13', {
+        'checksums': ['7186d23e561818f3e1f01376a4fb2af9ccee775ce5afc1e3175f3b07a81db515'],
+    }),
+    ('lmerTest', '3.1-3', {
+        'checksums': ['35aa75e9f5f2871398ff56a482b013e6828135ef04916ced7d1d7e35257ea8fd'],
+    }),
+    ('loo', '2.4.1', {
+        'checksums': ['bc21fb6b4a93a7e95ee1be57e4e787d731895fb8b4743c26b30b43adee475b50'],
+    }),
+    ('RcppParallel', '5.1.4', {
+        'checksums': ['76b545a6878c55edba780183fd89a76fe723b7f19709c5243495dcf3d54eea82'],
+    }),
+    ('StanHeaders', '2.21.0-7', {
+        'checksums': ['27546e064f0e907e031d9185ad55245d118d82fbe3074ecb1d76fae8b9f2336b'],
+    }),
+    ('V8', '3.4.2', {
+        'installopts': '--configure-vars="INCLUDE_DIR=$CPATH LIB_DIR=$LIBRARY_PATH"',
+        'preinstallopts': "export CPATH=$EBROOTNODEJS/include/node:$CPATH && ",
+        'checksums': ['210643473ca8bf423fae34ce72ceb37a3e44c3315ec4abae59a77f077542d2ed'],
+    }),
+    ('rstan', '2.21.2', {
+        'checksums': ['e30e04d38a612e2cb3ac69b53eaa19f7ede8b3548bf82f7892a2e9991d46054a'],
+    }),
+    ('Rborist', '0.2-3', {
+        'checksums': ['f3b3f953ca99e0d17425ac6ba9a7b1e9d6098343abace575cdb492bca2a9c461'],
+    }),
+    ('VSURF', '1.1.0', {
+        'checksums': ['eee99e0c441795c2ccb21cc6e0a37b24f580241e494c83e811b726b43469eeab'],
+    }),
+    ('mRMRe', '2.1.2', {
+        'checksums': ['a59a3cb3cca89f51d9ee6702cd479fd7db8bc2e25b72f45cb6712da983777ca0'],
+    }),
+    ('dHSIC', '2.1', {
+        'checksums': ['94c86473790cf69f11c68ed8ba9d6ae98218c7c69b7a9a093f235d175cf83db0'],
+    }),
+    ('ggsci', '2.9', {
+        'checksums': ['4af14e6f3657134c115d5ac5e65a2ed74596f9a8437c03255447cd959fe9e33c'],
+    }),
+    ('ggsignif', '0.6.3', {
+        'checksums': ['ca8545b25590e531512a90a18449a2cbab945f7434a1d60188c41f7d1839a7a9'],
+    }),
+    ('corrplot', '0.90', {
+        'checksums': ['d9871f219351f443f879ae93c45e3a364eb32cc6f41491a801e7b8a91e96d5dd'],
+    }),
+    ('rstatix', '0.7.0', {
+        'checksums': ['a5ae17dc32cc26fc5dcab9ff0a9747ce3786c9fe091699247ad8b9f823f2600c'],
+    }),
+    ('ggfan', '0.1.3', {
+        'checksums': ['5c888b203ecf5e3dc7a317a790ca059c733002fbca4b4bc1a4f62b7ded5f70dc'],
+    }),
+    ('ggpubr', '0.4.0', {
+        'checksums': ['abb21ec0b1ae3fa1c58eedca2d59b9b009621b30e3660f1247b3880c5fa50675'],
+    }),
+    ('yaImpute', '1.0-32', {
+        'checksums': ['08eee5d851b80aad9c7c80f9531aadd50d60e4b16b3a80657a50212269cd73ff'],
+    }),
+    ('intrinsicDimension', '1.2.0', {
+        'checksums': ['6cc9180a83aa0d123f1e420136bb959c0d5877867fa170b79536f5ee22106a32'],
+    }),
+    ('patchwork', '1.1.1', {
+        'checksums': ['cf0d7d9f92945729b499d6e343441c55007d5b371206d5389b9e5154dc7cf481'],
+    }),
+    ('leiden', '0.3.9', {
+        'checksums': ['81754276e026a9a8436476365bbadf0f15a403a525a349cb56418da5d8edea0d'],
+    }),
+    ('sctransform', '0.3.2', {
+        'checksums': ['5dbb0a045e514c19f51bbe11c2dba0b72dca1942d6eb044c36b0538b443475dc'],
+    }),
+    ('packrat', '0.7.0', {
+        'checksums': ['e8bce1fd78f28f3a7bf56e65a2ae2c6802e69bf55466c24e1d1a4b8a5f83dcc2'],
+    }),
+    ('colourpicker', '1.1.1', {
+        'checksums': ['a0d09982b048b143e2c3438ccec039dd20d6f892fa0dedc9fdcb0d40de883ce0'],
+    }),
+    ('ggExtra', '0.9', {
+        'checksums': ['f22db92d6e3e610901998348acbcaa6652fa6c62a285a622d3b962ba9e89aba2'],
+    }),
+    ('findpython', '1.0.7', {
+        'checksums': ['59f904b9c2ec84b589380de59d13afbf14d1ec3b670e3a07e820298aaf04c149'],
+    }),
+    ('argparse', '2.1.2', {
+        'checksums': ['9997359a735359580ab6b054672388a55701fca71c80b54bab1aedc13bc5e5b3'],
+    }),
+    ('intergraph', '2.0-2', {
+        'checksums': ['6cbe77f1e87fa1c110db2d46010f2f3ae72bfdb708ce2ca84c1cdc2cd6eb47a1'],
+    }),
+    ('ggnetwork', '0.5.10', {
+        'checksums': ['1b655dbab8eed8d0aa3ab2148aac8e0e5bfa190468f5e3c06b001ce88b7f0d3f'],
+    }),
+    ('qqman', '0.1.8', {
+        'checksums': ['58da8317df8d726d1fde4805919da5d64f880894a423ee20937cafb479b9d8a8'],
+    }),
+    ('rstantools', '2.1.1', {
+        'checksums': ['c95b15de8ec577eeb24bb5206e7b685d882f88b5e6902efda924b7217f463d2d'],
+    }),
+    ('bayesplot', '1.8.1', {
+        'checksums': ['d8d74201ea91fa5438714686ca22a947ec9375b6c12b0cfef010c57104b1aa2a'],
+    }),
+    ('dygraphs', '1.1.1.6', {
+        'checksums': ['c3d331f30012e721a048e04639f60ea738cd7e54e4f930ac9849b95f0f005208'],
+    }),
+    ('rsconnect', '0.8.24', {
+        'checksums': ['cf6bef1e073d6fa95c8be8a00e9e4982b88f4bab0e8ecd77db816a585be2e4a6'],
+    }),
+    ('shinystan', '2.5.0', {
+        'checksums': ['45f9c552a31035c5de8658bb9e5d72da7ec1f88fbddb520d15fe701c677154a1'],
+    }),
+    ('optimx', '2021-10.12', {
+        'checksums': ['39384c856b5efa3992cd230548b60eff936d428111ad6ad5b8fb98a3bcbb7943'],
+    }),
+    ('gamm4', '0.2-6', {
+        'checksums': ['57c5b66582b2adc32f6a3bb6a259f5b95198e283a96d966a6007e8e48b380c89'],
+    }),
+    ('projpred', '2.0.2', {
+        'checksums': ['af0a9fb53f706090fe81b6381b27b0b6bd3f7ae1e1e44b0ada6f40972b09a55b'],
+    }),
+    ('distributional', '0.2.2', {
+        'checksums': ['028e5a91aabe3a676eb7b7f3dc907f7f34735a123fe0d9adcabc03476504435f'],
+    }),
+    ('posterior', '1.1.0', {
+        'checksums': ['eff6262dbcc1bf18337f535b0c75ba2fe360322e8b170c466e24ed3ee76cf4d2'],
+    }),
+    ('brms', '2.16.1', {
+        'checksums': ['749efbd9fb061fe207cf2e729c1387d9a8538b922f12ceec4e82a9f8dd9c1bc4'],
+    }),
+    ('drgee', '1.1.10', {
+        'checksums': ['e684f07f7dfec922380d4202922c11094f859721f77b31ff38b0d35d0f42c743'],
+    }),
+    ('stdReg', '3.4.1', {
+        'checksums': ['285335dbe29b6898641e1151ab2f06acf76c6f4d6fbeadd66d151c25d7e38a74'],
+    }),
+    ('mcmcse', '1.5-0', {
+        'checksums': ['4a820dc22c48efd32b7f9d1e1b897b4b3f165cd64b2ff85ba7029621cf9e7463'],
+    }),
+    ('copCAR', '2.0-4', {
+        'checksums': ['8b4ed53c58a665f70e48bdca689a992a81d5ecb5a6051ca7361d3870e13c77f3'],
+    }),
+    ('batchmeans', '1.0-4', {
+        'checksums': ['8694573009d9070a76007281407d3314da78902e122a9d8aec1f819d3bbe562c'],
+    }),
+    ('ngspatial', '1.2-2', {
+        'checksums': ['3fa79e45d3a502a58c1454593ec83dfc73144e92b34c14f617a6126557dd0d26'],
+    }),
+    # ('BIGL', '1.6.5', {
+    #    'checksums': ['5be825734d76760723e2d5b8fbe03524a2b59d9163b33841d4a2c9ab2d4257cf'],
+    # }),
+    # ('drugCombo', '1.2.1', {
+    #    'checksums': ['9a605c655c159604033558d757711e6d83d33dfc286c1280f722d4cb7d130f80'],
+    # }),
+    ('betareg', '3.1-4', {
+        'checksums': ['5106986096a68b2b516215968158589b71969ce7912879253d6e930355a18101'],
+    }),
+    ('unmarked', '1.1.1', {
+        'checksums': ['48474f396c4a91e257490025ede6a998883683e8020a898fff5d4e23a3764bfd'],
+    }),
+    ('maxlike', '0.1-8', {
+        'checksums': ['90aaab9602f259cbfae61fe96e105cc4a0c2a385b42380f85c14f5d544107251'],
+    }),
+    ('coxme', '2.2-16', {
+        'checksums': ['a0ce4b5649c4c1abbfe2c2bf23089744d1f66eb8368dea16e74e090f366a5111'],
+    }),
+    ('AICcmodavg', '2.3-1', {
+        'checksums': ['d0517da15a38e9b1df20fa73f5342b586624e65792d266e7dff278ad7fc458b0'],
+    }),
+    ('pacman', '0.5.1', {
+        'checksums': ['9ec9a72a15eda5b8f727adc877a07c4b36f8372fe7ed80a1bc6c2068dab3ef7c'],
+    }),
+    ('spaa', '0.2.2', {
+        'checksums': ['a5a54454d4a7af473ce797875f849bd893005cb04325bf3e0dbddb19fe8d7198'],
+    }),
+    ('maxnet', '0.1.4', {
+        'checksums': ['fd21e5ecf3c1ac00ef1bbe79fab4cdd62789e0c4c45f126f1b64bda667238216'],
+    }),
+    ('oai', '0.3.2', {
+        'checksums': ['ebfa756e08f6ac0aa61556b1a5bbe611f407bfff8aef1f8d075a24c361678bfd'],
+    }),
+    ('wellknown', '0.7.4', {
+        'checksums': ['483e6fc43edf09ed583e74ce5ca7e2d7838ef8a32291e06d774c37546eed1a34'],
+    }),
+    ('rgbif', '3.6.0', {
+        'checksums': ['2941857c85d89ebaf614ed130ec2f68e326a8ca99e00263ac4e2a9c556917f20'],
+    }),
+    ('rgdal', '1.5-27', {
+        'checksums': ['62a555ed7b5424dd0252b3764e3542fb30c524d06e8245215bcfaedd84ee5756'],
+    }),
+    ('rgeos', '0.5-8', {
+        'checksums': ['0db35392146cefb5eea0392eecb6b0bfee53708222b98b06de54a3e1a04ea314'],
+    }),
+    ('mapproj', '1.2.7', {
+        'checksums': ['f0081281b08bf3cc7052c4f1360d6d3c20d9063be57754448ad9b48ab0d34c5b'],
+    }),
+    ('rbison', '1.0.0', {
+        'checksums': ['9957e5f85ce68f5dd0ddc3c4b2b3c9d2f52d6f37587e1022ab8a44863534a83c'],
+    }),
+    ('rebird', '1.3.0', {
+        'checksums': ['b238d3f246aa0249145894e1f3a90f46902f6615fc2f23b24c99bb5feecc55d3'],
+    }),
+    ('rvertnet', '0.8.2', {
+        'checksums': ['2de9a3ec33a213c7592b49cca1d510a25aef0625369376d9b1b4e5d0da519226'],
+    }),
+    ('ridigbio', '0.3.5', {
+        'checksums': ['e5cfb2e4dd8ddd1452a5afcf24fcc260889179d0f52eff4f41835adf99b64614'],
+    }),
+    ('spocc', '1.2.0', {
+        'checksums': ['4bac45db5e69bfa3bf6cebd1b0c9241214c95561f275cee6d31e00911aa79d84'],
+    }),
+    ('spThin', '0.2.0', {
+        'checksums': ['2e997afb79a2a990eded34c71afaac83986669cfa9ac51b15ae3f2b558902048'],
+    }),
+    ('rangeModelMetadata', '0.1.4', {
+        'checksums': ['529d529ca90437db3d1e45118443e27a920422806383c7edaa2102beb43f5f80'],
+    }),
+    ('ENMeval', '2.0.1', {
+        'checksums': ['2f7b7760ae70a45cd3c766aacf1e39f498de4f2e8c7b6dcde6b9adf6d8100250'],
+    }),
+    ('plotmo', '3.6.1', {
+        'checksums': ['245a0c87f0cca08746c6fdc60da2e3856cd69b1a2b7b5641293c620d4ae04343'],
+    }),
+    ('earth', '5.3.1', {
+        'checksums': ['0bbe06ba974ceb8ec5de1d59cb53f9487d1828d7130fe2503c48b6cb449c4b03'],
+    }),
+    ('mda', '0.5-2', {
+        'checksums': ['344f2053215ddf535d1554b4539e9b09067dac878887cc3eb995cef421fc00c3'],
+    }),
+    ('biomod2', '3.5.1', {
+        'checksums': ['30ed33ff980558a59782ec9e35f9c2c710a540718010654363f63878cdc0ac18'],
+    }),
+    ('poLCA', '1.4.1', {
+        'checksums': ['2e69975b5e7da8c36641bfa9453afdb4861523866b8799bec1d4eace9ab5762e'],
+    }),
+    ('PermAlgo', '1.1', {
+        'checksums': ['d7157b92241c34b71ad19901b52144973b49df453bf2a5edf4497d4bf26bd099'],
+    }),
+    ('coxed', '0.3.3', {
+        'checksums': ['d0d6cb8fea9516b3c63b34d0d81f3804c18a07f97a83e51555575c8ed4c75626'],
+    }),
+    ('testit', '0.13', {
+        'checksums': ['90d47168ab6bdbd1274b600b457626ac07697ce09792c92b2043be5f5b678d80'],
+    }),
+    ('NISTunits', '1.0.1', {
+        'checksums': ['eaccd68db5c73d6a089ce5b323cdd51bc6a6a58ce467987158ba8c9be6a0a94e'],
+    }),
+    ('celestial', '1.4.6', {
+        'checksums': ['9f647f41465ac65b254717698f1978871c378ad8e6ccaa693abf579437069abe'],
+    }),
+    ('fasterize', '1.0.3', {
+        'checksums': ['62b459625e9bdb00251ec5f6cb873e0c59713f3e86dc1e2c8332adc0cea17f81'],
+    }),
+    ('RPMM', '1.25', {
+        'checksums': ['f04a524b13918062616beda50c4e759ce2719ce14150a0e677d07132086c88c8'],
+    }),
+    ('RefFreeEWAS', '2.2', {
+        'checksums': ['de2812f166caabf6ea01c0533402e5cd9d8a525a2a7583e4757decf22319caab'],
+    }),
+    ('wordcloud', '2.6', {
+        'checksums': ['53716954430acd4f164bfd8eacd7068a908ee3358293ded6cd992d53b7f72649'],
+    }),
+    ('JADE', '2.0-3', {
+        'checksums': ['56d68a993fa16fc6dec758c843960eee840814c4ca2271e97681a9d2b9e242ba'],
+    }),
+    ('awsMethods', '1.1-1', {
+        'checksums': ['50934dc20cf4e015f1304a89de6703fed27e7bd54c6b9fc9fb253cdf2ecb7541'],
+    }),
+    ('aws', '2.5-1', {
+        'checksums': ['e8abadc5614f132edc3fb9cb1c82ce4dacc1315b727fbd49db7399aee24115ba'],
+    }),
+    ('ruv', '0.9.7.1', {
+        'checksums': ['a0c54e56ba3d8f6ae178ae4d0e417a79295abf5dcb68bbae26c4b874734d98d8'],
+    }),
+    ('mhsmm', '0.4.16', {
+        'checksums': ['fab573abdc0dd44e8c8bc7242a1428df20b3ec64c4c194e5f1f907393f902d01'],
+    }),
+    ('dbarts', '0.9-20', {
+        'checksums': ['1d75e795812819b7637d38fc909f4d7942bddf359acfb40a7b8e7cd167a5e92a'],
+    }),
+    ('proftools', '0.99-3', {
+        'checksums': ['e034eb1531af54013143da3e15229e1d4c2260f8eb79c93846014db3bdefb724'],
+    }),
+    ('NCmisc', '1.1.6', {
+        'checksums': ['2aa85997d5ec2222e610604022684c004a4925241761d9a0104919f1cf3a8c79'],
+    }),
+    ('reader', '1.0.6', {
+        'checksums': ['905c7c5a1b035ac8213fc533fa26e511abfeea40bd22e3edfde42a49074e88f4'],
+    }),
+    ('gnumeric', '0.7-8', {
+        'checksums': ['28b10c91d693b938ebca610933889095ca160b22e6ca750c46103dfd2b009447'],
+    }),
+    ('tcltk2', '1.2-11', {
+        'checksums': ['ad183ae3b7190501504a0589e0b3be480f04267303e3384fef00987446a37dc5'],
+    }),
+    ('readODS', '1.7.0', {
+        'checksums': ['f6a8ec724df68983c9b176a1b3b3b01239cc4e99aac4bfb42ce1c2b3d40922c2'],
+    }),
+    ('nortest', '1.0-4', {
+        'checksums': ['a3850a048181d5d059c1e74903437569873b430c915b709808237d71fee5209f'],
+    }),
+    ('EnvStats', '2.4.0', {
+        'checksums': ['49459e76412037b3d8021bd83ee93d140bc3e715a2a2282a347ef60061900514'],
+    }),
+    ('outliers', '0.14', {
+        'checksums': ['b6ce8f1db6442481546131def8253cabdf4472116d193daea7cb935d2b76986d'],
+    }),
+    ('elementR', '1.3.7', {
+        'checksums': ['4275f88f372a2efe96ccd0afc20f4f12be92f28c7db35c68b80bb0ffb2c2ab07'],
+    }),
+    ('gWidgets2', '1.0-8', {
+        'checksums': ['1615ce9ab07a251d06c68780be15ab5a4814df877a23aa93e0faf14ccd56d45c'],
+    }),
+    ('gWidgets2tcltk', '1.0-6', {
+        'modulename': False,
+        'preinstallopts': "xvfb-run ",
+        'checksums': ['aa3a2f4612116a652e5573a369e3d89c5939f7c06067c6826ba40ed3bb07302b'],
+    }),
+    ('mgsub', '1.7.3', {
+        'checksums': ['c9ae2560fe2690bedc5248af3fc89e7ef2bc6c147d46ced28f9824584c3791d5'],
+    }),
+    ('ie2misc', '0.8.6', {
+        'checksums': ['f3e2cc8a88f3789a5e339d2676455472a52a303c8273191f27aa2f2f02fdd8cd'],
+    }),
+    ('assertive.base', '0.0-9', {
+        'checksums': ['4bf0910b0eaa507e0e11c3c43c316b524500c548d307eb045d6f89047e6ba01e'],
+    }),
+    ('assertive.properties', '0.0-4', {
+        'checksums': ['5c0663fecb4b7c30f2e1d65da8644534fcfe97fb3d8b51f74c1327cd14291a6b'],
+    }),
+    ('assertive.types', '0.0-3', {
+        'checksums': ['ab6db2eb926e7bc885f2043fab679330aa336d07755375282d89bf9f9d0cb87f'],
+    }),
+    ('assertive.numbers', '0.0-2', {
+        'checksums': ['bae18c0b9e5b960a20636e127eb738ecd8a266e5fc29d8bc5ca712498cd68349'],
+    }),
+    ('assertive.strings', '0.0-3', {
+        'checksums': ['d541d608a01640347d661cc9a67af8202904142031a20caa270f1c83d0ccd258'],
+    }),
+    ('assertive.datetimes', '0.0-3', {
+        'checksums': ['014e2162f5a8d95138ed8330f7477e71c908a29341697c09a1b7198b7e012d94'],
+    }),
+    ('assertive.files', '0.0-2', {
+        'checksums': ['be6adda6f18a0427449249e44c2deff4444a123244b16fe82c92f15d24faee0a'],
+    }),
+    ('assertive.sets', '0.0-3', {
+        'checksums': ['876975a16ed911ea1ad12da284111c6eada6abfc0118585033abc0edb5801bb3'],
+    }),
+    ('assertive.matrices', '0.0-2', {
+        'checksums': ['3462a7a7e11d7cc24180330d48cc3067cf92eab1699b3e4813deec66d99f5e9b'],
+    }),
+    ('assertive.models', '0.0-2', {
+        'checksums': ['b9a6d8786f352d53371dbe8c5f2f2a62a7866e30313f268e69626d5c3691c42e'],
+    }),
+    ('assertive.data', '0.0-3', {
+        'checksums': ['5a00fb48ad870d9b3c872ce3d6aa20a7948687a980f49fe945b455339e789b01'],
+    }),
+    ('assertive.data.uk', '0.0-2', {
+        'checksums': ['ab48dab6977e8f43d6fffb33228d158865f68dde7026d123c693d77339dcf2bb'],
+    }),
+    ('assertive.data.us', '0.0-2', {
+        'checksums': ['180e64dfe6339d25dd27d7fe9e77619ef697ef6e5bb6a3cf4fb732a681bdfaad'],
+    }),
+    ('assertive.reflection', '0.0-5', {
+        'checksums': ['c2ca9b27cdddb9b9876351afd2ebfaf0fbe72c636cd12aa2af5d64e33fbf34bd'],
+    }),
+    ('assertive.code', '0.0-3', {
+        'checksums': ['ef80e8d1d683d776a7618e78ddccffca7f72ab4a0fcead90c670bb8f8cb90be2'],
+    }),
+    ('assertive', '0.3-6', {
+        'checksums': ['c403169e83c433b65e911f7fd640b378e2a4a4765a36063584b8458168a4ea0a'],
+    }),
+    ('rdrop2', '0.8.2.1', {
+        'checksums': ['b9add765fe8e7c966f0d36eef939a9e38f253958bd2a3c656b890cbb0366300b'],
+    }),
+    ('Exact', '3.0', {
+        'checksums': ['a76114e9780c86e4ea0a561300db024b95af9b0ebb6c3bf9a7598d276d009529'],
+    }),
+    ('lmom', '2.8', {
+        'checksums': ['cae2a925c39429d8e9f91bdb2682ea0d1343e9b2e5c9e8752c5929eb5f20d2d2'],
+    }),
+    ('gld', '2.6.2', {
+        'checksums': ['915860ac054ba4d29854c7d274e9c927995c5df2a7d4a6a0122b1fbc4a3c3cf3'],
+    }),
+    ('DescTools', '0.99.43', {
+        'checksums': ['8c3c4e5975428b9f2817907931449cd704d3df0e19e4337010f0dee333e7a4ff'],
+    }),
+    ('orthopolynom', '1.0-5', {
+        'checksums': ['6da4f437aae5c8fafdf791ce3c6a66f68198df4054af3aab8406402a4dc770bf'],
+    }),
+    ('gaussquad', '1.0-2', {
+        'checksums': ['ba3a1ab6ffe92f592c9f2bb1d4070f1fb1019325226dcb4863cf725eb59e9b2d'],
+    }),
+    ('nlsem', '0.8', {
+        'checksums': ['495a5d07aa5f59efdcd43acf429ae842453abd6c0720a80e2102d663fa997c60'],
+    }),
+    ('tableone', '0.13.0', {
+        'checksums': ['1c73a5a7595dc0ae2299d17c74738e077984af7d5429e4858b7be3c55e121346'],
+    }),
+    ('jstable', '1.0.7', {
+        'checksums': ['a8f66172973dc75d1d751d7015e0f028c441263f6649909bd25fa944be0042c3'],
+    }),
+    ('RCAL', '2.0', {
+        'checksums': ['10f5f938a8322d8737159e1e49ce9d12419a5130699b8a19c6ca53d6508da8cc'],
+    }),
+    ('stargazer', '5.2.2', {
+        'checksums': ['70eb4a13a6ac1bfb35af07cb8a63d501ad38dfd9817fc3fba6724260b23932de'],
+    }),
+    ('sensemakr', '0.1.4', {
+        'checksums': ['6a1354f05392fa9343b90f69a54022c995651fb3c3d05cb08fa088ef52258caf'],
+    }),
+    ('CompQuadForm', '1.4.3', {
+        'checksums': ['042fc56c800dd8f5f47a017e2efa832caf74f0602824abf7099898d9708660c4'],
+    }),
+    ('nonnest2', '0.5-5', {
+        'checksums': ['027f510e322122fc75c936251a95ddd392f96047ac86e0fae6cf8f883ac7aab5'],
+    }),
+    ('blavaan', '0.3-17', {
+        'checksums': ['ada14fcc665a22f11fc57392d70141c398d85dbb35f0a3373a501bc51d27f1e5'],
+    }),
+    ('mathjaxr', '1.4-0', {
+        'checksums': ['ba57378236d593a39c5839054adc5473526de0c8f05b7eeb87c99438496ddc67'],
+    }),
+    ('metafor', '3.0-2', {
+        'checksums': ['02df435197b225da736103edf73d19253a542bc31fc0b99610c02daec434138a'],
+    }),
+    ('fmri', '1.9.6', {
+        'checksums': ['7614290d880667512744d3450480a670cc38abdb270f3f776ac9a17a793f07f2'],
+    }),
+    ('AnalyzeFMRI', '1.1-24', {
+        'checksums': ['0d2acfe9ce8f25eb5cc9e6ef1db3ea8e232a31d46a95e50914489b1997e17062'],
+    }),
+    ('linkcomm', '1.0-14', {
+        'checksums': ['36f1557c65d862fc87635eedfad77f18a5deb66da00895e50e2d5eac0f23b597'],
+    }),
+    ('rnetcarto', '0.2.4', {
+        'checksums': ['266702330250e9fbeb8616d86edf1d50d63084a0731d17e84a04dc6faacf653a'],
+    }),
+    ('DEoptim', '2.2-6', {
+        'checksums': ['8c63397d83a067212d003ef3e639fd81f5f00bf61e3c271b4e4999031a69e2e1'],
+    }),
+    ('optextras', '2019-12.4', {
+        'checksums': ['59006383860826be502ea8757e39ed94338f04d246c4fc398a088e004d8b13eb'],
+    }),
+    ('setRNG', '2013.9-1', {
+        'checksums': ['1a1a399682a06a5fea3934985ebb1334005676c6a2a22d06f3c91c3923432908'],
+    }),
+    ('Rvmmin', '2018-4.17.1', {
+        'checksums': ['55000ac4ff57d42f172c46c7d6b0a603da3b65866d6440d6b32bac4d2b81814e'],
+    }),
+    ('Rcgmin', '2013-2.21', {
+        'checksums': ['a824a09c32d7565a3e30607c71333506d5b7197478fbe8b43f8a77dad6c12f0a'],
+    }),
+    ('optimr', '2019-12.16', {
+        'checksums': ['73b1ed560ffd74599517e8baa4c5b293aa062e9c8d50219a3a24b63e72fa7c00'],
+    }),
+    ('DMCfun', '2.0.2', {
+        'checksums': ['430cbc18f17db11a7941e6a8274a0eefbb8a6b0bdac8800970530d60d5881fde'],
+    }),
+    ('miceadds', '3.11-6', {
+        'checksums': ['121d03c812fbcf584a25585ac73f6c44f4b5d6cd21b05362ddd15395fb3909f6'],
+    }),
+    ('visdat', '0.5.3', {
+        'checksums': ['527c76b6643b8475a58516763ef40238cdc61ec62d2dcf690f7c316b93b878c6'],
+    }),
+    ('UpSetR', '1.4.0', {
+        'checksums': ['351e5fee64204cf77fd378cf2a2c0456cc19d4d98a2fd5f3dac74b69a505f100'],
+    }),
+    ('norm', '1.0-9.5', {
+        'checksums': ['305cbf007f3905cfd535ed9bf5ae3e2995e228cc8883d6482e5d3a2f02814106'],
+    }),
+    ('naniar', '0.6.1', {
+        'checksums': ['d546ca15bf6c224f3103eb1441abef91d34feebb7320c2398d598f5d50177450'],
+    }),
+    ('stringdist', '0.9.8', {
+        'checksums': ['efccd6ccc5c74c578be95b7dae1099c52b0d7805452ab14ee91ca34adb8261bb'],
+    }),
+    ('image.binarization', '0.1.2', {
+        'checksums': ['0621ca94a74264bb73f689b1a00484b5a3bbef93fc203d9c001d791a18fcc13f'],
+    }),
+    ('lassosum', '0.4.5', {
+        'source_urls': ['https://github.com/tshmak/%(name)s/releases/download/v%(version)s/'],
+        'sources': ['%(name)s_%(version)s.tar.gz'],
+        'checksums': ['18c0d0b5022bcf81a9bf1b3b6647da3e080f221828b473ea2a45a9bf98474fbc'],
+    }),
+    ('lslx', '0.6.10', {
+        'checksums': ['adc2b2a621625b52165245ab2f3a0bfba4f4db64fcc6ad48a3e5b219c3bd2fa1'],
+    }),
+    ('truncnorm', '1.0-8', {
+        'checksums': ['49564e8d87063cf9610201fbc833859ed01935cc0581b9e21c42a0d21a47c87e'],
+    }),
+    ('Rsolnp', '1.16', {
+        'checksums': ['3142776062beb8e2b45cdbc4fe6e5446b6d33505253d79f2890fe4178d9cf670'],
+    }),
+    ('regsem', '1.8.0', {
+        'checksums': ['28ff1c2dbddcafc6ed6c30154f46074aa0c8974757466680529b71a5f3e463ec'],
+    }),
+    ('semPLS', '1.0-10', {
+        'checksums': ['cb587ccfdaf970f426dc7146035c7e010b1c51c17bf4fc089fd796eda58db460'],
+    }),
+    ('GxEScanR', '2.0.2', {
+        'checksums': ['6d42fd15d83dd1491405b282d26fa472f9f9902a9dc68836d6a48b459ada6a4c'],
+    }),
+    ('alabama', '2015.3-1', {
+        'checksums': ['6600fcf4842488950e196d3f5a8fc4d69e8271b36292ce67ac3ab697449a8f56'],
+    }),
+    ('polycor', '0.7-10', {
+        'checksums': ['caea3beca2c889e12e5b976c20c19cf5a76d42e6329e9ab646112eeae8fcfc73'],
+    }),
+    ('multipol', '1.0-7', {
+        'checksums': ['0abe3c894c0d8e928a920e73708a397133386a0d73a1e7952c4075afe67879e6'],
+    }),
+    ('symmoments', '1.2.1', {
+        'checksums': ['9a6be1f8fe44f6ab5a1790e870fd8b18de1686a48a14a9fca2d035bfb5458672'],
+    }),
+    ('cSEM', '0.4.0', {
+        'checksums': ['7753ac7db9d2c0392e51dd31ec8638e1a7fcbb2546dd9103f5ecc03dd51836c1'],
+    }),
+    ('cubelyr', '1.0.1', {
+        'checksums': ['740a34100592b2c6b7bc89a31bddccf4c8fd95720caf68f530104f17aada77bc'],
+    }),
+    ('broom.mixed', '0.2.7', {
+        'checksums': ['ff29385557af239a41452ffb5ebe230630a2a30f4a91e95505c3178b62df01ba'],
+    }),
+    ('DiceKriging', '1.6.0', {
+        'checksums': ['ab5d1332809f2bb16d156ed234b102eb9fbd6de792e4291f9f6ea4652215cb49'],
+    }),
+    ('grf', '2.0.2', {
+        'checksums': ['043f21a057762a2d5e0febb37c1d9cb8d2f94d19f2eded20c672dec7ff54b505'],
+    }),
+    ('xgboost', '1.4.1.1', {
+        'checksums': ['9f986f3895ce5f6744335c82afe3a87d9ac2e473e60785295edf2be80d34e0c4'],
+    }),
+    ('twang', '2.5', {
+        'checksums': ['fc355527c57e4f6e0f60d26d7c690c4475fcd5fb165d125fea7cc6b9fafc4ce5'],
+    }),
+    ('neuralnet', '1.44.2', {
+        'checksums': ['5f66cd255db633322c0bd158b9320cac5ceff2d56f93e4864a0540f936028826'],
+    }),
+    ('PCAmatchR', '0.3.0', {
+        'checksums': ['73876c6d1cf42928a03a64aba197c67b4a4f4de2c431cfbc6fce615bbea32fa0'],
+    }),
+    ('origami', '1.0.5', {
+        'checksums': ['8d0d08aaecc428cbbf5db4615ad3623777c10c6d7947a1cc3ccc7f8db8cb5263'],
+    }),
+    ('hal9001', '0.4.1', {
+        'checksums': ['386fa93ae6c0f409a9137adc54da25a2770826fbed63787e33a36c95f3f89441'],
+    }),
+    ('cobalt', '4.3.1', {
+        'checksums': ['67e26a700ca083a39beb255df54c6ab495f34ea5847a0bf1c4bac895e980eef8'],
+    }),
+    ('CBPS', '0.22', {
+        'checksums': ['d19247e6765f02737d15a0a2ee86ae24e7206ae740dfaa61821622eb3a309aef'],
+    }),
+    ('SBdecomp', '1.1', {
+        'checksums': ['ad4e4f00bc58eafe551ad6288c0642a16e16ef8f73c2ae649f808b1e559df644'],
+    }),
+    ('naturalsort', '0.1.3', {
+        'checksums': ['cd38a9c5f323f61459e6096cdbf4493851d40497baf671af4f8dfe9a7c00e857'],
+    }),
+    ('lwgeom', '0.2-8', {
+        'checksums': ['f48a92de222da0590b37a30d5cbf2364555044a842795f6b488afecc650b8b34'],
+    }),
+    ('finalfit', '1.0.3', {
+        'checksums': ['bbfa841a2b1a7b1f8c153d773ff076a2e465e451815f8166ff0ce8c4018ff61e'],
+    }),
+    ('broom.helpers', '1.4.0', {
+        'checksums': ['7f6a5c0c79260b57cd31976bc216fffbc79a1641e01b74630dcd37d2c84e3f75'],
+    }),
+    ('gt', '0.3.1', {
+        'checksums': ['ddd1fee446f156d1b52bb2db83262aac2a896db93748e92e08407d317e126019'],
+    }),
+    ('gtsummary', '1.5.0', {
+        'checksums': ['54dd5e11c5b2a808ca93284760a5cd102f820332d2fa40474d5cedea030711a7'],
+    }),
+    ('ncdf4', '1.17', {
+        'checksums': ['db95c4729d3187d1a56dfd019958216f442be6221bd15e23cd597e6129219af6'],
+    }),
+    ('geex', '1.0.12', {
+        'checksums': ['037aece09bc0c4349897cd1d8f5dcf1e680598cdfdf72148b6d1506e02690e7f'],
+    }),
+    ('momentfit', '0.2', {
+        'checksums': ['a10d43ac23bb61b9c67efa4800e3e2b6a444c1afaca8bad351648accd7e003f6'],
+    }),
+    ('StatMatch', '1.4.0', {
+        'checksums': ['820091cd2213734ea16f5fcd616491bbf39d3e6c2bcfb34a7c9fe09f4fd1a459'],
+    }),
+    ('stars', '0.5-3', {
+        'checksums': ['44944a82af36bea09ac1874ff9647acbb7fef021ebdca5aae7c34794be929401'],
+    }),
+    ('rapidjsonr', '1.2.0', {
+        'checksums': ['62c94fcdcf5d0fbdfa2f6168affe526bf547c37c16d94e2e1b78d7bf608eed1f'],
+    }),
+    ('jsonify', '1.2.1', {
+        'checksums': ['929191ab32e34af6a02ad991e29314cc78ea40763fcf232388ef2d132137fbce'],
+    }),
+    ('geometries', '0.2.0', {
+        'checksums': ['8cf5094f3c2458fef5d755799c766afd27c66cd1c292574a6ab532d608360314'],
+    }),
+    ('sfheaders', '0.4.0', {
+        'checksums': ['86bcd61018a0491fc8a1e7fb0422c918296287b82be299a79ccee8fcb515e045'],
+    }),
+    ('geojsonsf', '2.0.1', {
+        'checksums': ['42df40433bfbece5a39cd97b5bd4690b4424855241fcc3e7322ee68a3988bfbf'],
+    }),
+    ('leaflet.providers', '1.9.0', {
+        'checksums': ['9e8fc75c83313ab24663c2e718135459599549ed6e7396086cacb44e36cfd67b'],
+    }),
+    ('leaflet', '2.0.4.1', {
+        'checksums': ['b0f038295f1de5d32d9ffa1d0dbc1562320190f2f1365f3a5e95863fff88901f'],
+    }),
+    ('leafsync', '0.1.0', {
+        'checksums': ['7d8fd8dbbbf66417cf32575f14c0fe68199762ecf1c036c7905c7c5ff859d75c'],
+    }),
+    ('leafem', '0.1.6', {
+        'checksums': ['ca50e0a699f564449248511857a2df0d48cd07de3157e099478a19b533088156'],
+    }),
+    ('widgetframe', '0.3.1', {
+        'checksums': ['44089a2cf8b0941a6f3da55da36353e2f44653ca58bfec7960ee5b71ea380d48'],
+    }),
+    ('tmaptools', '3.1-1', {
+        'checksums': ['fd89cb0d7fb44e0a5dd5311fa3e75a729746bf2e8e158d5ec423e5963f1b542d'],
+    }),
+    ('tmap', '3.3-2', {
+        'checksums': ['2bcb74c5c5546223d79abe5d633581fb2664b910f6246f4b8b7166b208b4629a'],
+    }),
+    ('collapse', '1.6.5', {
+        'checksums': ['1e232a3a62b5eb5ed5d81e7d92ce1bae34c3d877d593d47d7edbd3f515b95a46'],
+    }),
+    ('genoPlotR', '0.8.11', {
+        'checksums': ['f127f7fe8b19c899ecfdf98bf69d2e18926afb593a72fc40097acca66d401607'],
+    }),
+    ('VineCopula', '2.4.3', {
+        'checksums': ['42727aa7345ab544242182222eb97476f5dc04bc837f94f6fd3ea6ccac93ea17'],
+    }),
+    ('Rmpfr', '0.8-7', {
+        'checksums': ['93c2db785ff705dcfc6fa7f0373c2426cdc2ef72ceb5b294edeb2952775f57d2'],
+    }),
+    ('scam', '1.2-12', {
+        'checksums': ['0ce5f844221370884719424eb5b2b22c34a8a8ad64eac3de981e5539b6e88f4a'],
+    }),
+    ('copula', '1.0-1', {
+        'checksums': ['d09b2ccffc7379e48b00952aa6b282baf502feebaf55cc44e93f881d7b909742'],
+    }),
+    ('evd', '2.3-3', {
+        'checksums': ['2fc5ef2e0c3a2a9392425ddd45914445497433d90fb80b8c363877baee4559b4'],
+    }),
+    ('ismev', '1.42', {
+        'checksums': ['0d57fbeca83bd478e84fcff795967d51d8448c629abe7adc6c4c18c7fb8bf1a5'],
+    }),
+    ('GJRM', '0.2-5.1', {
+        'checksums': ['516dd73c70e5c8ab60b24027f94cab42603797c41cb7aa740882cb850f6d6ab4'],
+    }),
+    ('penfa', '0.1.1', {
+        'checksums': ['a22a8ac3d4a040c77e50ddc92328c1989eae536d79fe56013e9372ba27c114e5'],
+    }),
+    ('rngWELL', '0.10-7', {
+        'checksums': ['0c00c54e69d7d552cfa08d766e4854c01c6c1c8e2c558f387760b91a55ef2d38'],
+    }),
+    ('randtoolbox', '1.31.1', {
+        'checksums': ['30992e8156782542e9a2bffb75eb2e35f6d302a8c22cb7c3ed9004f0f0973bad'],
+    }),
+    ('kde1d', '1.0.3', {
+        'checksums': ['d645652d09f1981eb37be9f041034da9b9191885dd38be8a7e485e5e41eb050e'],
+    }),
+    ('RcppThread', '1.0.0', {
+        'checksums': ['544a48ee4ea381e2e1421d4edbec54365f17059084d94ded7c339de36deeccf5'],
+    }),
+    ('wdm', '0.2.2', {
+        'checksums': ['11c616f0896d62993f5eee1daf7b021d27f13751f6617067b57cf463aea32dde'],
+    }),
+    ('rvinecopulib', '0.6.1.1.1', {
+        'checksums': ['779fd288774ebb1a0adde6b960053e5c63750bfa66d5ddf349e0f1d8730f08cd'],
+    }),
+    ('PearsonDS', '1.2.1', {
+        'checksums': ['354be30b8df4e5432d1bc2b6162900522d4c08dc63b207331819d589fb069824'],
+    }),
+    ('covsim', '0.2.1', {
+        'checksums': ['57ca810c6950ab295078b745eb87fdd7f195e15082777eed9f1059b6302f13bf'],
+    }),
+    ('semTools', '0.5-5', {
+        'checksums': ['ddf883753c5964eae8313d7e8a4703be52e649f10d3bc1d12ede6d1707b1fab6'],
+    }),
+    ('GPArotation', '2014.11-1', {
+        'checksums': ['351bc15fc8dc6c8ea5045fbba22180d1e68314fc34d267545687748e312e5096'],
+    }),
+    ('dcurver', '0.9.2', {
+        'checksums': ['cc6c55090d3607910515981ea0c7221e40e7a29e0da0c5a5f42c3847012290ec'],
+    }),
+    ('mirt', '1.35.1', {
+        'checksums': ['788b7e499b7d48f5f590eb5cfdac260c4e993b94a3956d30bc2d8bce8cd2ba3e'],
+    }),
+    ('rpf', '1.0.11', {
+        'checksums': ['e1fd670ae7c3e947db08ce50d6b16ce1b3b8f63a9016b03baba760aee78921fb'],
+    }),
+    ('OpenMx', '2.19.8', {
+        'checksums': ['cb4be9850f61d320dcd47ef0ad7b20e5baafde558ebbc67301b13d883baf6760'],
+    }),
+]
+
+moduleclass = 'lang'
diff --git a/acls.yml b/acls.yml
index 0993cc359c64ef13e9e48d7a0149d5fd2f5056ce..a579f99e1b9a18ce2a533b227182a5568fcc2417 100644
--- a/acls.yml
+++ b/acls.yml
@@ -72,12 +72,18 @@ software:
   - name: 'Blosc'
     owner: 'goebbert1'
     base: True
+  - name: 'ceres-solver'
+    owner: 'goebbert1'
+    base: True
   - name: 'Cirq'
     owner: 'goebbert1'
     base: True
   - name: 'Cling'
     owner: 'goebbert1'
     base: True
+  - name: 'Colmap'
+    owner: 'goebbert1'
+    base: True
   - name: 'CVXOPT'
     owner: 'goebbert1'
     mpi: True
@@ -96,15 +102,27 @@ software:
   - name: 'FFmpeg'
     owner: 'goebbert1'
     base: True
-  - name: 'Freesurfer'
+  - name: 'FreeImage'
+    owner: 'goebbert1'
+    base: True
+  - name: 'FreeSurfer'
     owner: 'deepu1'
     base: True
   - name: 'eudev'
     owner: 'goebbert1'
     base: True
+  - name: 'glog'
+    owner: 'goebbert1'
+    base: True
   - name: 'GPicView'
     owner: 'goebbert1'
     base: True
+  - name: 'GStreamer'
+    owner: 'goebbert1'
+    base: True
+  - name: 'IRkernel'
+    owner: 'goebbert1'
+    base: True
   - name: 'ImageMagick'
     owner: 'goebbert1'
     base: True    
@@ -200,6 +218,9 @@ software:
   - name: 'lz4'
     owner: 'goebbert1'
     base: True
+  - name: 'MCR'
+    owner: 'goebbert1'
+    system: True
   - name: 'mpi4py'
     owner: 'goebbert1'
     mpi: True 
@@ -359,6 +380,9 @@ software:
   - name: 'ANTLR'
     owner: 'strube1'
     base: True
+  - name: 'Arcade-Learning-Environment'
+    owner: 'strube1'
+    base: True
   - name: 'ASE'
     owner: 'strube1'
     base: True
@@ -388,9 +412,6 @@ software:
   - name: 'CFITSIO'
     owner: 'strube1'
     base: True
-  - name: 'CGAL'
-    owner: 'strube1'
-    mpi: True
   - name: 'CMake'
     owner: 'strube1'
     system: True
@@ -473,6 +494,12 @@ software:
   - name: 'git-lfs'
     owner: 'strube1'
     system: True
+  - name: 'glew'
+    owner: 'strube1'
+    base: True
+  - name: 'GLFW'
+    owner: 'strube1'
+    base: True
   - name: 'GMP'
     owner: 'strube1'
     base: True
@@ -544,6 +571,9 @@ software:
   - name: 'libgeotiff'
     owner: 'strube1'
     base: True
+  - name: 'libgit2'
+    owner: 'strube1'
+    base: True
   - name: 'libiconv'
     owner: 'strube1'
     base: True
@@ -593,14 +623,21 @@ software:
     owner: 'strube1'
     mpi: True
   - name: 'METIS'
-    owner: 'strube1'
+    owner: 'ridley2'
     base: True
+    compiler: True
   - name: 'MPFR'
     owner: 'strube1'
     base: True
   - name: 'mpiP'
     owner: 'strube1'
     mpi: True
+  - name: 'MuJoCo'
+    owner: 'strube1'
+    base: True
+  - name: 'mujoco-py'
+    owner: 'strube1'
+    base: True
   - name: 'nano'
     owner: 'strube1'
     base: True
@@ -640,6 +677,9 @@ software:
   - name: 'parallel'
     owner: 'strube1'
     base: True
+  - name: 'patchelf'
+    owner: 'strube1'
+    base: True
   - name: 'Perl'
     owner: 'strube1'
     base: True
@@ -914,7 +954,7 @@ software:
   - name: 'PETSc'
     owner: 'mathprod'
     mpi: True
-  - name: 'sundials'
+  - name: 'SUNDIALS'
     owner: 'mathprod'
     mpi: True
   - name: 'MUMPS'
@@ -993,7 +1033,7 @@ software:
     owner: 'koh1'
     mpi: True
   - name: 'OpenFOAM'
-    owner: 'koerfgen1'
+    owner: 'ridley2'
     mpi: True
   - name: 'CP2K'
     owner: 'mueller1'
@@ -1053,3 +1093,9 @@ software:
   - name: 'Extrae'
     owner: 'knobloch1'
     mpi: True
+  - name: 'AMD-uProf'
+    owner: 'zhukov1'
+    base: True
+  - name: 'HDFView'
+    owner: 'luehrs2'
+    base: True
diff --git a/bin/eb_bash_completion_local.bash b/bin/eb_bash_completion_local.bash
new file mode 100644
index 0000000000000000000000000000000000000000..c85ca740b86e6d75b7e39593f2ba55a34714a75b
--- /dev/null
+++ b/bin/eb_bash_completion_local.bash
@@ -0,0 +1,12 @@
+_eb()
+{
+    local cur prev quoted
+    _get_comp_words_by_ref cur prev
+    _quote_readline_by_ref "$cur" quoted
+
+	case $cur in 
+		--*) _optcomplete "$@"; return 0 ;;
+		*)  COMPREPLY=( $(compgen -f -X '!*.eb' -- $cur ) ) ;;
+	esac
+}
+complete -F _eb eb
diff --git a/bin/gcc11ize.py b/bin/gcc11ize.py
index f0e063a492d36816fa78497fa732837647d5c3a9..19f3462b73a7defacf5231c39810ffa5790001c2 100755
--- a/bin/gcc11ize.py
+++ b/bin/gcc11ize.py
@@ -10,6 +10,7 @@ import argparse
 
 
 releases = {
+    'ASE':                      ['3.19.2',          '3.22.0'],
     'ATK':                      ['2.36.0',          '2.36.0'],
     'AT-SPI2-ATK':              ['2.34.2',          '2.38.0'],
     'AT-SPI2-core':             ['2.36.0',          '2.40.3'],
@@ -63,7 +64,7 @@ releases = {
     'HarfBuzz':                 ['2.6.7',           '2.8.2'],
     'HDF5':                     ['1.10.6',          '1.12.1'],
     'HTSLib':                   ['1.1.4',           '1.1.4'],
-    'h5py':                     ['2.10.0',          '3.5.0'],
+    'h5py':                     ['3.1.0',          '3.5.0'],
     'ICU':                      ['67.1',            '70.1'],
     'ImageMagick':              ['7.0.10-25',       '7.1.0.13'],
     'imkl':                     ['2021.2.0',        '2021.4.0'],
@@ -84,6 +85,7 @@ releases = {
     'libreadline':              ['8.0',             '8.1'],
     'librsvg':                  ['2.48.8',          '2.51.2'],
     'LibTIFF':                  ['4.1.0',           '4.3.0'],
+    'libunwind':                ['1.4,0',           '1.5.0'],
     'libxc':                    ['5.1.5',           '5.1.6'],
     'libxml2':                  ['2.9.10',          '2.9.10'],
     'LLVM':                     ['10.0.1',          '13.0.0'],
@@ -113,6 +115,7 @@ releases = {
     'pybind11':                 ['2.5.0',           '2.7.1'],
     'pyproj':                   ['2.6.1.post1',     '3.3.0'],
     'Python':                   ['3.8.5',           '3.9.6'],
+    'PyTorch':                  ['1.8.1',           '1.11'],
     'Qhull':                    ['2020.1',          '2020.2'],
     'Qt5':                      ['5.14.2',          '5.15.2'],
     'RDFlib':                   ['5.0.0',           '6.0.2'],
@@ -127,7 +130,9 @@ releases = {
     'Tcl':                      ['8.6.10',          '8.6.11'],
     'texinfo':                  ['6.7',             '6.8'],
     'texlive':                  ['20200406',        '20200406'],
+    'torchvision':              ['0.9.1',           '0.12.0'],
     'tqdm':                     ['4.62.3',          '4.62.3'],
+    'trimesh':                  ['3.8.11',          '3.9.36'],
     'UDUNITS':                  ['2.2.26',          '2.2.28'],
     'uftp':                     ['1.4.1',           '1.4.2'],
     'X11':                      ['20200222',        '20210802'],
diff --git a/bin/setacls b/bin/setacls
index adf32ed1643f4a58869df864a89dfe6b57d9a970..0eae3ea7b39b7c3c12762c5daab184bc4699e0ac 100755
--- a/bin/setacls
+++ b/bin/setacls
@@ -29,7 +29,7 @@ logging.basicConfig(
 LOGGER = logging.getLogger('setacls')
 
 config_file = 'acls.yml'
-config_path = f'{os.getenv("FASTDATA_jsc")}/swmanage/EasyBuild/{os.getenv("STAGE")}/{config_file})'
+config_path = f'{os.getenv("FASTDATA_jsc")}/swmanage/EasyBuild/{os.getenv("STAGE")}/{config_file}'
 
 executed_cmds = 0
 
@@ -299,7 +299,11 @@ def run():
 
     # The syntax commented below is more convenient, but just works with PyYAML >5.1
     # l_config = yaml.load(args.config[0], Loader=yaml.FullLoader)
-    with open(args.config[0].name) as config:
+    if isinstance(args.config, list):
+        config_file_path = args.config[0].name
+    else:
+        config_file_path = args.config.name
+    with open(config_file_path) as config:
         l_config = yaml.safe_load(config)
 
     log_file = '<stderr>'
@@ -316,7 +320,7 @@ def run():
     if args.debug:
         LOGGER.setLevel(logging.DEBUG)
         LOGGER.debug(f'{bcolors.HEADER}{bcolors.UNDERLINE}Configuration:{bcolors.ENDC}')
-        LOGGER.debug(f'* {bcolors.CYAN}Config file:{bcolors.ENDC} {args.config[0].name}')
+        LOGGER.debug(f'* {bcolors.CYAN}Config file:{bcolors.ENDC} {config_file_path}')
         LOGGER.debug(f'* {bcolors.CYAN}Debug:{bcolors.ENDC} {args.debug}')
         LOGGER.debug(f'* {bcolors.CYAN}Log file:{bcolors.ENDC} {log_file}')
         LOGGER.debug(f'* {bcolors.CYAN}Check:{bcolors.ENDC} {args.check}')