diff --git a/scripts/acme/acme_util.py b/scripts/acme/acme_util.py
new file mode 100644
index 000000000000..17ec7a6ecc65
--- /dev/null
+++ b/scripts/acme/acme_util.py
@@ -0,0 +1,72 @@
+"""
+Common functions used by acme python scripts
+"""
+
+import sys
+
+_VERBOSE = False
+
+###############################################################################
+def expect(condition, error_msg):
+###############################################################################
+ """
+ Similar to assert except doesn't generate an ugly stacktrace. Useful for
+ checking user error, not programming error.
+ """
+ if (not condition):
+ raise SystemExit(error_msg)
+
+###############################################################################
+def warning(msg):
+###############################################################################
+ print >> sys.stderr, "WARNING:", msg
+
+###############################################################################
+def verbose_print(msg, override=None):
+###############################################################################
+ if ( (_VERBOSE and not override is False) or override):
+ print msg
+
+###############################################################################
+def set_verbosity(verbose):
+###############################################################################
+ global _VERBOSE
+ _VERBOSE = verbose
+
+###############################################################################
+def run_cmd(cmd, ok_to_fail=False, input_str=None, from_dir=None, verbose=None):
+###############################################################################
+ import subprocess # Not safe to do globally, module not available in older pythons
+
+ verbose_print("RUN: %s" % cmd, verbose)
+
+ if (input_str is not None):
+ stdin = subprocess.PIPE
+ else:
+ stdin = None
+
+ proc = subprocess.Popen(cmd,
+ shell=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ stdin=stdin,
+ cwd=from_dir)
+ output, errput = proc.communicate()
+ stat = proc.wait()
+
+ verbose_print(" stat: %d\n" % stat, verbose)
+ verbose_print(" output: %s\n" % output, verbose)
+ verbose_print(" errput: %s\n" % errput, verbose)
+
+ if (ok_to_fail):
+ return stat, output, errput
+ else:
+ expect(stat == 0, "Command: '%s' failed with error '%s'" % (cmd, errput))
+ return output
+
+###############################################################################
+def check_minimum_python_version(major, minor):
+###############################################################################
+ expect(sys.version_info.major == major and sys.version_info.minor >= minor,
+ "Python %d.%d+ is required, you have %d.%d" %
+ (major, minor, sys.version_info.major, sys.version_info.minor))
diff --git a/scripts/acme/update_acme_developer b/scripts/acme/update_acme_developer
deleted file mode 100755
index 31cbb02adfeb..000000000000
--- a/scripts/acme/update_acme_developer
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env python
-
-"""This script recreates the acme_developer suite within the CESM testlist.xml
-file, which should be given as the only argument. It deletes any existing
-"acme_developer" category from the XML file, draws from information within
-this file to create new test entries, and then inserts these entries into
-the XML file."""
-
-# First off, we need a non-ancient Python.
-import sys
-if (sys.version_info.major != 2) or (sys.version_info.minor < 7):
- print('update_acme_developer: Python 2.7+ is required.')
- print('(Note: Python 3.x is not yet supported.)')
- exit(-1)
-
-# Here are the tests belonging to the acme_developer suite. Format is
-# ..
-acme_developer_tests = [
- 'ERS.f19_g16_rx1.A',
- 'ERS.f45_g37.B1850C5',
- 'ERS.f45_g37_rx1.DTEST',
- 'ERS.ne30_g16_rx1.A',
- 'ERS_D.f45_g37.B1850C5',
- 'ERS_IOP.f19_g16_rx1.A',
- 'ERS_IOP.f45_g37_rx1.DTEST',
- 'ERS_IOP.ne30_g16_rx1.A',
- 'ERS_IOP4c.f19_g16_rx1.A',
- 'ERS_IOP4c.ne30_g16_rx1.A',
- 'ERS_IOP4p.f19_g16_rx1.A',
- 'ERS_IOP4p.ne30_g16_rx1.A',
- 'ERS_Ly21.f09_g16.TG',
- 'NCK.f19_g16_rx1.A',
- 'PEA_P1_M.f45_g37_rx1.A',
- 'SMS.ne30_f19_g16_rx1.A']
-
-###############################################################################
-def find_all_machines(xml_file):
-###############################################################################
- f = open(xml_file, 'r')
- lines = f.readlines()
- f.close()
- machine_set = set()
- for line in lines:
- if '') + 1
- j2 = line.index('<', j1)
- machine = line[j1:j2]
- machine_set.add((machine, compiler))
- return [m for m in machine_set]
-
-###############################################################################
-def replace_testlist_xml(output, xml_file):
-###############################################################################
- # manage_xml_entries creates a temporary file intended for people to manually check the
- # changes. This made sense before revision control, but not anymore.
- import shutil
- if 'now writing the new test list to' in output:
- i1 = output.index('now writing') + len('now writing the new test list to ')
- i2 = output.index('xml') + 3
- new_xml_file = output[i1:i2]
- shutil.move(new_xml_file, xml_file)
-
-###############################################################################
-def generate_acme_developer_entries(tests, machines):
-###############################################################################
- import tempfile
- test_file = tempfile.NamedTemporaryFile(mode='w', delete = False)
- for test in tests:
- for machine, compiler in machines:
- test_file.write('%s.%s_%s\n'%(test, machine, compiler))
- name = test_file.name
- test_file.close()
- return name
-
-###############################################################################
-def _main_func():
-###############################################################################
- import os.path
- if len(sys.argv) == 1:
- print('update_acme_developer: usage: update_acme_developer testlist.xml')
- exit(-1)
-
- # Get the absolute path to the XML file.
- xml_file = sys.argv[1]
- xml_file_dir = os.path.abspath(os.path.dirname(xml_file))
- xml_file = os.path.join(xml_file_dir, os.path.basename(xml_file))
- if not os.path.exists(xml_file):
- print('Invalid XML file: %s'%xml_file)
- exit(-1)
-
- # Fish all of the existing machine/compiler combos out of the XML file.
- machines = find_all_machines(xml_file)
-
- # Try to find the manage_xml_entries script. Too fancy?
- manage_xml_entries = None
- for root, _, files in os.walk('.'):
- for name in files:
- if name == 'manage_xml_entries':
- manage_xml_entries = os.path.abspath(os.path.join(root, name))
- if manage_xml_entries is None:
- print('Couldn\'t find manage_xml_entries. You might be too deep in the source tree.')
- exit(-1)
-
- # Remove any existing acme_developer category from the file.
- import subprocess
- output = subprocess.check_output([manage_xml_entries, '-removetests', '-category', 'acme_developer'])
- replace_testlist_xml(output, xml_file)
-
- # Generate a list of test entries corresponding to our suite at the top
- # of the file.
- import os
- new_test_file = generate_acme_developer_entries(acme_developer_tests, machines)
- output = subprocess.check_output([manage_xml_entries, '-addlist',
- '-file', new_test_file,
- '-category', 'acme_developer'])
- os.unlink(new_test_file)
- replace_testlist_xml(output, xml_file)
-
-if __name__ == "__main__":
- _main_func()
diff --git a/scripts/acme/update_acme_tests b/scripts/acme/update_acme_tests
new file mode 100755
index 000000000000..28ec0211f179
--- /dev/null
+++ b/scripts/acme/update_acme_tests
@@ -0,0 +1,156 @@
+#!/usr/bin/env python
+
+"""This script recreates and acme suite within the CESM testlist.xml
+file, which should be given as the only argument. It deletes any
+existing category from the XML file, draws from information within
+this file to create new test entries, and then inserts these entries
+into the XML file."""
+
+import acme_util
+acme_util.check_minimum_python_version(2, 7)
+
+import sys, argparse, os, shutil, tempfile, subprocess
+
+from acme_util import expect, warning, verbose_print
+
+# Here are the tests belonging to acme suites. Format is
+# ..
+TEST_SUITES = {
+ "acme_developer" :
+ ['ERS.f19_g16_rx1.A',
+ 'ERS.f45_g37.B1850C5',
+ 'ERS.f45_g37_rx1.DTEST',
+ 'ERS.ne30_g16_rx1.A',
+ 'ERS_D.f45_g37.B1850C5',
+ 'ERS_IOP.f19_g16_rx1.A',
+ 'ERS_IOP.f45_g37_rx1.DTEST',
+ 'ERS_IOP.ne30_g16_rx1.A',
+ 'ERS_IOP4c.f19_g16_rx1.A',
+ 'ERS_IOP4c.ne30_g16_rx1.A',
+ 'ERS_IOP4p.f19_g16_rx1.A',
+ 'ERS_IOP4p.ne30_g16_rx1.A',
+ 'ERS_Ly21.f09_g16.TG',
+ 'NCK.f19_g16_rx1.A',
+ 'PEA_P1_M.f45_g37_rx1.A',
+ 'SMS.ne30_f19_g16_rx1.A'],
+ "acme_integration" :
+ ["ERB.f19_g16.B1850C5",
+ "ERB.f45_g37.B1850C5",
+ "ERH.f45_g37.B1850C5",
+ "ERS.f09_g16.B1850C5",
+ "ERS.f19_f19.FAMIPC5",
+ "ERS.f19_g16.B1850C5",
+ "ERS.f45_g37.B1850C5",
+ "ERS_D.f45_g37.B1850C5",
+ "ERS_IOP.f19_g16_rx1.A",
+ "ERS_IOP.f45_g37_rx1.DTEST",
+ "ERS_IOP.ne30_g16_rx1.A",
+ "ERS_IOP4c.f19_g16_rx1.A",
+ "ERS_IOP4c.ne30_g16_rx1.A",
+ "ERS_IOP4p.f19_g16_rx1.A",
+ "ERS_IOP4p.ne30_g16_rx1.A",
+ "ERS_IOP_Ld3.f19_f19.FAMIPC5",
+ "ERS_Ld3.f19_g16.FC5",
+ "ERS_Ld3.ne30_ne30.FC5",
+ "ERS_Ly21.f09_g16.TG",
+ "ERT.f19_g16.B1850C5",
+ "NCK.f19_g16_rx1.A",
+ "PEA_P1_M.f45_g37_rx1.A",
+ "PET_PT.f19_g16.X",
+ "PET_PT.f45_g37_rx1.A",
+ "PFS.ne30_ne30.FC5",
+ "SEQ_IOP_PFC.f19_g16.X",
+ "SEQ_PFC.f45_g37.B1850C5",
+ "SMS.ne16_ne16.FC5AQUAP",
+ "SMS.ne30_f19_g16_rx1.A",
+ "SMS_D.f19_g16.B20TRC5",
+ "SMS_D_Ld3.f19_f19.FC5"]
+}
+
+###############################################################################
+def find_all_machines(xml_file):
+###############################################################################
+ f = open(xml_file, 'r')
+ lines = f.readlines()
+ f.close()
+ machine_set = set()
+ for line in lines:
+ if '') + 1
+ j2 = line.index('<', j1)
+ machine = line[j1:j2]
+ machine_set.add((machine, compiler))
+ return [m for m in machine_set]
+
+###############################################################################
+def replace_testlist_xml(output, xml_file):
+###############################################################################
+ # manage_xml_entries creates a temporary file intended for people to manually check the
+ # changes. This made sense before revision control, but not anymore.
+ if 'now writing the new test list to' in output:
+ i1 = output.index('now writing') + len('now writing the new test list to ')
+ i2 = output.index('xml') + 3
+ new_xml_file = output[i1:i2]
+ shutil.move(new_xml_file, xml_file)
+
+###############################################################################
+def generate_acme_test_entries(category, machines):
+###############################################################################
+ tests = TEST_SUITES[category]
+ test_file = tempfile.NamedTemporaryFile(mode='w', delete = False)
+ for test in tests:
+ for machine, compiler in machines:
+ test_file.write('%s.%s_%s\n'%(test, machine, compiler))
+ name = test_file.name
+ test_file.close()
+ return name
+
+###############################################################################
+def update_acme_test(xml_file, category):
+###############################################################################
+ # Fish all of the existing machine/compiler combos out of the XML file.
+ machines = find_all_machines(xml_file)
+
+ # Try to find the manage_xml_entries script. Assume sibling of xml_file
+ manage_xml_entries = os.path.join(os.path.dirname(xml_file), "manage_xml_entries")
+ expect(os.path.isfile(manage_xml_entries),
+ "Couldn't find manage_xml_entries, expect sibling of '%s'" % xml_file)
+
+ # Remove any existing acme test category from the file.
+ output = acme_util.run_cmd('%s -removetests -category %s' % (manage_xml_entries, category))
+ replace_testlist_xml(output, xml_file)
+
+ # Generate a list of test entries corresponding to our suite at the top
+ # of the file.
+ new_test_file = generate_acme_test_entries(category, machines)
+ output = acme_util.run_cmd("%s -addlist -file %s -category %s" %
+ (manage_xml_entries, new_test_file, category))
+ os.unlink(new_test_file)
+ replace_testlist_xml(output, xml_file)
+
+###############################################################################
+def _main_func(description):
+###############################################################################
+ parser = argparse.ArgumentParser(
+ usage="\n%s testlist.xml" % os.path.basename(sys.argv[0]),
+ description=description,
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter
+ )
+
+ parser.add_argument("category", choices=TEST_SUITES.keys(),
+ help="The test category to update")
+
+ parser.add_argument("test_list_path", help="The path to test lists XML file")
+
+ args = parser.parse_args()
+
+ expect(os.path.isfile(args.test_list_path),
+ "'%s' is not a valid file" % args.test_list_path)
+
+ update_acme_test(args.test_list_path, args.category)
+
+if __name__ == "__main__":
+ _main_func(__doc__)
diff --git a/scripts/acme/wait_for_tests b/scripts/acme/wait_for_tests
index 568357dfd08f..9b050a731886 100755
--- a/scripts/acme/wait_for_tests
+++ b/scripts/acme/wait_for_tests
@@ -6,12 +6,17 @@ If the test passes, 0 is returned, otherwise a non-zero error code
is returned.
"""
+import acme_util
+acme_util.check_minimum_python_version(2, 7)
+
import argparse, sys, os, doctest, time, threading, Queue, signal, socket
import distutils.spawn, subprocess, getpass
+
import xml.etree.ElementTree as xmlet
from distutils.spawn import find_executable
-VERBOSE = False
+from acme_util import expect, warning, verbose_print
+
TEST_STATUS_FILENAME = "TestStatus"
TEST_NOT_FINISHED_STATUS = ["GEN", "BUILD", "RUN", "PEND"]
TEST_PASSED_STATUS = "PASS"
@@ -27,33 +32,6 @@ CLEANUP = False
THROUGHPUT_TEST_STR = ".tputcomp."
-###############################################################################
-def expect(condition, error_msg):
-###############################################################################
- if (not condition):
- raise SystemExit(error_msg)
-
-###############################################################################
-def verbose_print(msg):
-###############################################################################
- if (VERBOSE):
- print msg
-
-###############################################################################
-def warning(msg):
-###############################################################################
- print >> sys.stderr, "WARNING:", msg
-
-###############################################################################
-def run_cmd(cmd, stdout_arg=None):
-###############################################################################
- proc = subprocess.Popen(cmd, shell=True, stdout=stdout_arg, stderr=subprocess.PIPE)
- output, errput = proc.communicate()
- stat = proc.wait()
- expect(stat == 0, "Command: '%s' failed with error '%s'" % (cmd, errput))
-
- return output
-
###############################################################################
def probe_batch_system():
###############################################################################
@@ -76,7 +54,7 @@ def signal_handler(signum, frame):
if (CLEANUP):
batch_system = probe_batch_system()
if (batch_system is not None):
- run_cmd(CLEANUP_ROUTINES[batch_system])
+ acme_util.run_cmd(CLEANUP_ROUTINES[batch_system])
###############################################################################
def parse_command_line(args, description):
@@ -122,8 +100,7 @@ formatter_class=argparse.ArgumentDefaultsHelpFormatter
args = parser.parse_args(args[1:])
- global VERBOSE
- VERBOSE = args.verbose
+ acme_util.set_verbosity(args.verbose)
global CLEANUP
CLEANUP = args.cleanup
@@ -134,7 +111,7 @@ formatter_class=argparse.ArgumentDefaultsHelpFormatter
def get_test_time(test_path):
###############################################################################
cmd = "grep 'TOT Run Time' /dev/null $(find %s -name 'ccsm_timing*') || true" % test_path
- output = run_cmd(cmd, subprocess.PIPE)
+ output = acme_util.run_cmd(cmd)
tot_time = 0.0
for line in output.splitlines():
@@ -309,7 +286,7 @@ NightlyStartTime: 00:00:00 EST
etree.write(os.path.join(data_rel_path, "Test.xml"))
- run_cmd("ctest -D NightlySubmit")
+ acme_util.run_cmd("ctest -D NightlySubmit")
###############################################################################
def parse_test_status_file(file_contents, status_file_path, check_throughput):
diff --git a/scripts/ccsm_utils/Testlistxml/testlist.xml b/scripts/ccsm_utils/Testlistxml/testlist.xml
index 2c20e84827e1..f90b5b462209 100644
--- a/scripts/ccsm_utils/Testlistxml/testlist.xml
+++ b/scripts/ccsm_utils/Testlistxml/testlist.xml
@@ -97,118 +97,196 @@
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
intrepid
+ intrepid
janus
+ janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
intrepid
+ intrepid
janus
+ janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
intrepid
+ intrepid
janus
+ janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
@@ -226,45 +304,71 @@
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
goldbach
goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
hopper
intrepid
+ intrepid
intrepid
janus
+ janus
janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -326,53 +430,105 @@
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
intrepid
+ intrepid
janus
+ janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
hopper
hopper
+ intrepid
intrepid
+ janus
janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -392,44 +548,70 @@
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
hopper
intrepid
+ intrepid
intrepid
janus
+ janus
janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -482,118 +664,196 @@
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
intrepid
+ intrepid
janus
+ janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
intrepid
+ intrepid
janus
+ janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
intrepid
+ intrepid
janus
+ janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
@@ -690,20 +950,73 @@
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
+ titan
titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
+ hopper
+ intrepid
+ janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
+ titan
titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
@@ -711,20 +1024,72 @@
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
+ titan
titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
+ titan
titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
@@ -748,90 +1113,196 @@
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
+ hopper
+ intrepid
+ janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
+ hopper
+ intrepid
+ janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
intrepid
+ intrepid
janus
+ janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
intrepid
+ intrepid
janus
+ janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
@@ -839,10 +1310,36 @@
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
@@ -1299,16 +1796,42 @@
titan
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
goldbach
goldbach
+ hopper
+ hopper
hopper
hopper
+ intrepid
intrepid
+ janus
janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -1979,41 +2502,67 @@
bluewaters
+ bluewaters
cascade
cascade
cascade
cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
hopper
intrepid
+ intrepid
janus
+ janus
janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
redsky
redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -2322,21 +2871,73 @@
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -2498,14 +3099,40 @@
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
hopper
hopper
+ intrepid
intrepid
+ janus
janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -2513,15 +3140,41 @@
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
goldbach
goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
janus
janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -2537,15 +3190,41 @@
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
goldbach
goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
janus
janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -2553,17 +3232,43 @@
yellowstone
+ bluewaters
bluewaters
cascade
cascade
+ cetus
cetus
+ eastwind
+ edison
+ edison
edison
+ eos
eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
mira
+ null
+ olympus
redsky
redsky
+ titan
titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -2599,11 +3304,37 @@
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -4795,37 +5526,66 @@
bluewaters
+ bluewaters
cascade
cascade
+ cascade
+ cascade
cetus
+ cetus
eastwind
+ eastwind
edison
edison
+ edison
+ edison
eos
+ eos
evergreen
+ evergreen
goldbach
goldbach
goldbach
goldbach
+ goldbach
+ goldbach
+ goldbach
+ goldbach
hopper
hopper
hopper
+ hopper
+ hopper
+ hopper
intrepid
+ intrepid
janus
+ janus
lawrencium-lr2
+ lawrencium-lr2
mac
+ mac
melvin
+ melvin
mira
+ mira
null
+ null
olympus
+ olympus
redsky
- redsky
redsky
+ redsky
titan
+ titan
yellowstone
yellowstone
yellowstone
yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -4980,16 +5740,42 @@
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
goldbach
goldbach
+ hopper
+ hopper
hopper
hopper
+ intrepid
intrepid
+ janus
janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone
@@ -4998,14 +5784,40 @@
yellowstone
+ bluewaters
cascade
cascade
+ cetus
+ eastwind
+ edison
+ edison
+ eos
+ evergreen
+ goldbach
+ goldbach
+ goldbach
+ goldbach
goldbach
goldbach
+ hopper
+ hopper
hopper
+ intrepid
+ janus
janus
+ lawrencium-lr2
+ mac
+ melvin
+ mira
+ null
+ olympus
redsky
redsky
+ titan
+ yellowstone
+ yellowstone
+ yellowstone
+ yellowstone
yellowstone
yellowstone
yellowstone