changeset 40:e46726cd0c9e draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/main/tools/hyphy commit cee1ce4bd7d82088b9bf62403bc175c13223e020
author iuc
date Wed, 11 Mar 2026 11:14:01 +0000
parents 307b6a9a520b
children
files macros.xml scripts/hyphy_summary.py scripts/infer_stasis_clusters.py test-data/bstill-in1.json
diffstat 4 files changed, 2053 insertions(+), 681 deletions(-) [+]
line wrap: on
line diff
--- a/macros.xml	Wed Feb 25 20:56:08 2026 +0000
+++ b/macros.xml	Wed Mar 11 11:14:01 2026 +0000
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <macros>
-    <token name="@TOOL_VERSION@">2.5.93</token>
-    <token name="@VERSION_SUFFIX@">3</token>
+    <token name="@TOOL_VERSION@">2.5.96</token>
+    <token name="@VERSION_SUFFIX@">0</token>
     <token name="@PROFILE@">24.0</token>
     <token name="@SHELL_OPTIONS@">export TERM="vt100"; </token>
 
--- a/scripts/hyphy_summary.py	Wed Feb 25 20:56:08 2026 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,679 +0,0 @@
-import argparse
-import json
-import re
-from collections import defaultdict
-
-import BioExt
-from Bio import SeqIO
-from Bio.Seq import Seq
-from Bio.SeqRecord import SeqRecord
-from BioExt.uds import _align_par
-
-
-class HyPhySummary(object):
-
-    def __init__(self, arguments, summary_json=None, annotation_json=None):
-        self.arguments = arguments
-        self.ref_map = ''
-        self.summary_json = {}
-        self.annotation_json = {}
-        self.include_in_annotation = {}
-        self.test_map = {}
-        self.site_reports = {}
-        self.labels = {}
-        self.ref_seq_map = []
-        self.cfel = {}
-        self.relax = {}
-        self.busted = {}
-        self.slac = {}
-        self.fel = {}
-        self.meme = {}
-        self.meme_full = {}
-        self.prime = {}
-        self.fade = {}
-        self.bgm = {}
-        self.ref_genes = [
-            ['genome', 'ATTAAAGGTTTATACCTTCCCAGGTAACAAACCAACCAACTTTCGATCTCTTGTAGATCTGTTCTCTAAACGAACTTTAAAATCTGTGTGGCTGTCACTCGGCTGCATGCTTAGTGCACTCACGCAGTATAATTAATAACTAATTACTGTCGTTGACAGGACACGAGTAACTCGTCTATCTTCTGCAGGCTGCTTACGGTTTCGTCCGTGTTGCAGCCGATCATCAGCACATCTAGGTTTCGTCCGGGTGTGACCGAAAGGTAAGATGGAGAGCCTTGTCCCTGGTTTCAACGAGAAAACACACGTCCAACTCAGTTTGCCTGTTTTACAGGTTCGCGACGTGCTCGTACGTGGCTTTGGAGACTCCGTGGAGGAGGTCTTATCAGAGGCACGTCAACATCTTAAAGATGGCACTTGTGGCTTAGTAGAAGTTGAAAAAGGCGTTTTGCCTCAACTTGAACAGCCCTATGTGTTCATCAAACGTTCGGATGCTCGAACTGCACCTCATGGTCATGTTATGGTTGAGCTGGTAGCAGAACTCGAAGGCATTCAGTACGGTCGTAGTGGTGAGACACTTGGTGTCCTTGTCCCTCATGTGGGCGAAATACCAGTGGCTTACCGCAAGGTTCTTCTTCGTAAGAACGGTAATAAAGGAGCTGGTGGCCATAGTTACGGCGCCGATCTAAAGTCATTTGACTTAGGCGACGAGCTTGGCACTGATCCTTATGAAGATTTTCAAGAAAACTGGAACACTAAACATAGCAGTGGTGTTACCCGTGAACTCATGCGTGAGCTTAACGGAGGGGCATACACTCGCTATGTCGATAACAACTTCTGTGGCCCTGATGGCTACCCTCTTGAGTGCATTAAAGACCTTCTAGCACGTGCTGGTAAAGCTTCATGCACTTTGTCCGAACAACTGGACTTTATTGACACTAAGAGGGGTGTATACTGCTGCCGTGAACATGAGCATGAAATTGCTTGGTACACGGAACGTTCTGAAAAGAGCTATGAATTGCAGACACCTTTTGAAATTAAATTGGCAAAGAAATTTGACACCTTCAATGGGGAATGTCCAAATTTTGTATTTCCCTTAAATTCCATAATCAAGACTATTCAACCAAGGGTTGAAAAGAAAAAGCTTGATGGCTTTATGGGTAGAATTCGATCTGTCTATCCAGTTGCGTCACCAAATGAATGCAACCAAATGTGCCTTTCAACTCTCATGAAGTGTGATCATTGTGGTGAAACTTCATGGCAGACGGGCGATTTTGTTAAAGCCACTTGCGAATTTTGTGGCACTGAGAATTTGACTAAAGAAGGTGCCACTACTTGTGGTTACTTACCCCAAAATGCTGTTGTTAAAATTTATTGTCCAGCATGTCACAATTCAGAAGTAGGACCTGAGCATAGTCTTGCCGAATACCATAATGAATCTGGCTTGAAAACCATTCTTCGTAAGGGTGGTCGCACTATTGCCTTTGGAGGCTGTGTGTTCTCTTATGTTGGTTGCCATAACAAGTGTGCCTATTGGGTTCCACGTGCTAGCGCTAACATAGGTTGTAACCATACAGGTGTTGTTGGAGAAGGTTCCGAAGGTCTTAATGACAACCTTCTTGAAATACTCCAAAAAGAGAAAGTCAACATCAATATTGTTGGTGACTTTAAACTTAATGAAGAGATCGCCATTATTTTGGCATCTTTTTCTGCTTCCACAAGTGCTTTTGTGGAAACTGTGAAAGGTTTGGATTATAAAGCATTCAAACAAATTGTTGAATCCTGTGGTAATTTTAAAGTTACAAAAGGAAAAGCTAAAAAAGGTGCCTGGAATATTGGTGAACAGAAATCAATACTGAGTCCTCTTTATGCATTTGCATCAGAGGCTGCTCGTGTTGTACGATCAATTTTCTCCCGCACTCTTGAAACTGCTCAAAATTCTGTGCGTGTTTTACAGAAGGCCGCTATAACAATACTAGATGGAATTTCACAGTATTCACTGAGACTCATTGATGCTATGATGTTCACATCTGATTTGGCTACTAACAATCTAGTTGTAATGGCCTACATTACAGGTGGTGTTGTTCAGTTGACTTCGCAGTGGCTAACTAACATCTTTGGCACTGTTTATGAAAAACTCAAACCCGTCCTTGATTGGCTTGAAGAGAAGTTTAAGGAAGGTGTAGAGTTTCTTAGAGACGGTTGGGAAATTGTTAAATTTATCTCAACCTGTGCTTGTGAAATTGTCGGTGGACAAATTGTCACCTGTGCAAAGGAAATTAAGGAGAGTGTTCAGACATTCTTTAAGCTTGTAAATAAATTTTTGGCTTTGTGTGCTGACTCTATCATTATTGGTGGAGCTAAACTTAAAGCCTTGAATTTAGGTGAAACATTTGTCACGCACTCAAAGGGATTGTACAGAAAGTGTGTTAAATCCAGAGAAGAAACTGGCCTACTCATGCCTCTAAAAGCCCCAAAAGAAATTATCTTCTTAGAGGGAGAAACACTTCCCACAGAAGTGTTAACAGAGGAAGTTGTCTTGAAAACTGGTGATTTACAACCATTAGAACAACCTACTAGTGAAGCTGTTGAAGCTCCATTGGTTGGTACACCAGTTTGTATTAACGGGCTTATGTTGCTCGAAATCAAAGACACAGAAAAGTACTGTGCCCTTGCACCTAATATGATGGTAACAAACAATACCTTCACACTCAAAGGCGGTGCACCAACAAAGGTTACTTTTGGTGATGACACTGTGATAGAAGTGCAAGGTTACAAGAGTGTGAATATCACTTTTGAACTTGATGAAAGGATTGATAAAGTACTTAATGAGAAGTGCTCTGCCTATACAGTTGAACTCGGTACAGAAGTAAATGAGTTCGCCTGTGTTGTGGCAGATGCTGTCATAAAAACTTTGCAACCAGTATCTGAATTACTTACACCACTGGGCATTGATTTAGATGAGTGGAGTATGGCTACATACTACTTATTTGATGAGTCTGGTGAGTTTAAATTGGCTTCACATATGTATTGTTCTTTCTACCCTCCAGATGAGGATGAAGAAGAAGGTGATTGTGAAGAAGAAGAGTTTGAGCCATCAACTCAATATGAGTATGGTACTGAAGATGATTACCAAGGTAAACCTTTGGAATTTGGTGCCACTTCTGCTGCTCTTCAACCTGAAGAAGAGCAAGAAGAAGATTGGTTAGATGATGATAGTCAACAAACTGTTGGTCAACAAGACGGCAGTGAGGACAATCAGACAACTACTATTCAAACAATTGTTGAGGTTCAACCTCAATTAGAGATGGAACTTACACCAGTTGTTCAGACTATTGAAGTGAATAGTTTTAGTGGTTATTTAAAACTTACTGACAATGTATACATTAAAAATGCAGACATTGTGGAAGAAGCTAAAAAGGTAAAACCAACAGTGGTTGTTAATGCAGCCAATGTTTACCTTAAACATGGAGGAGGTGTTGCAGGAGCCTTAAATAAGGCTACTAACAATGCCATGCAAGTTGAATCTGATGATTACATAGCTACTAATGGACCACTTAAAGTGGGTGGTAGTTGTGTTTTAAGCGGACACAATCTTGCTAAACACTGTCTTCATGTTGTCGGCCCAAATGTTAACAAAGGTGAAGACATTCAACTTCTTAAGAGTGCTTATGAAAATTTTAATCAGCACGAAGTTCTACTTGCACCATTATTATCAGCTGGTATTTTTGGTGCTGACCCTATACATTCTTTAAGAGTTTGTGTAGATACTGTTCGCACAAATGTCTACTTAGCTGTCTTTGATAAAAATCTCTATGACAAACTTGTTTCAAGCTTTTTGGAAATGAAGAGTGAAAAGCAAGTTGAACAAAAGATCGCTGAGATTCCTAAAGAGGAAGTTAAGCCATTTATAACTGAAAGTAAACCTTCAGTTGAACAGAGAAAACAAGATGATAAGAAAATCAAAGCTTGTGTTGAAGAAGTTACAACAACTCTGGAAGAAACTAAGTTCCTCACAGAAAACTTGTTACTTTATATTGACATTAATGGCAATCTTCATCCAGATTCTGCCACTCTTGTTAGTGACATTGACATCACTTTCTTAAAGAAAGATGCTCCATATATAGTGGGTGATGTTGTTCAAGAGGGTGTTTTAACTGCTGTGGTTATACCTACTAAAAAGGCTGGTGGCACTACTGAAATGCTAGCGAAAGCTTTGAGAAAAGTGCCAACAGACAATTATATAACCACTTACCCGGGTCAGGGTTTAAATGGTTACACTGTAGAGGAGGCAAAGACAGTGCTTAAAAAGTGTAAAAGTGCCTTTTACATTCTACCATCTATTATCTCTAATGAGAAGCAAGAAATTCTTGGAACTGTTTCTTGGAATTTGCGAGAAATGCTTGCACATGCAGAAGAAACACGCAAATTAATGCCTGTCTGTGTGGAAACTAAAGCCATAGTTTCAACTATACAGCGTAAATATAAGGGTATTAAAATACAAGAGGGTGTGGTTGATTATGGTGCTAGATTTTACTTTTACACCAGTAAAACAACTGTAGCGTCACTTATCAACACACTTAACGATCTAAATGAAACTCTTGTTACAATGCCACTTGGCTATGTAACACATGGCTTAAATTTGGAAGAAGCTGCTCGGTATATGAGATCTCTCAAAGTGCCAGCTACAGTTTCTGTTTCTTCACCTGATGCTGTTACAGCGTATAATGGTTATCTTACTTCTTCTTCTAAAACACCTGAAGAACATTTTATTGAAACCATCTCACTTGCTGGTTCCTATAAAGATTGGTCCTATTCTGGACAATCTACACAACTAGGTATAGAATTTCTTAAGAGAGGTGATAAAAGTGTATATTACACTAGTAATCCTACCACATTCCACCTAGATGGTGAAGTTATCACCTTTGACAATCTTAAGACACTTCTTTCTTTGAGAGAAGTGAGGACTATTAAGGTGTTTACAACAGTAGACAACATTAACCTCCACACGCAAGTTGTGGACATGTCAATGACATATGGACAACAGTTTGGTCCAACTTATTTGGATGGAGCTGATGTTACTAAAATAAAACCTCATAATTCACATGAAGGTAAAACATTTTATGTTTTACCTAATGATGACACTCTACGTGTTGAGGCTTTTGAGTACTACCACACAACTGATCCTAGTTTTCTGGGTAGGTACATGTCAGCATTAAATCACACTAAAAAGTGGAAATACCCACAAGTTAATGGTTTAACTTCTATTAAATGGGCAGATAACAACTGTTATCTTGCCACTGCATTGTTAACACTCCAACAAATAGAGTTGAAGTTTAATCCACCTGCTCTACAAGATGCTTATTACAGAGCAAGGGCTGGTGAAGCTGCTAACTTTTGTGCACTTATCTTAGCCTACTGTAATAAGACAGTAGGTGAGTTAGGTGATGTTAGAGAAACAATGAGTTACTTGTTTCAACATGCCAATTTAGATTCTTGCAAAAGAGTCTTGAACGTGGTGTGTAAAACTTGTGGACAACAGCAGACAACCCTTAAGGGTGTAGAAGCTGTTATGTACATGGGCACACTTTCTTATGAACAATTTAAGAAAGGTGTTCAGATACCTTGTACGTGTGGTAAACAAGCTACAAAATATCTAGTACAACAGGAGTCACCTTTTGTTATGATGTCAGCACCACCTGCTCAGTATGAACTTAAGCATGGTACATTTACTTGTGCTAGTGAGTACACTGGTAATTACCAGTGTGGTCACTATAAACATATAACTTCTAAAGAAACTTTGTATTGCATAGACGGTGCTTTACTTACAAAGTCCTCAGAATACAAAGGTCCTATTACGGATGTTTTCTACAAAGAAAACAGTTACACAACAACCATAAAACCAGTTACTTATAAATTGGATGGTGTTGTTTGTACAGAAATTGACCCTAAGTTGGACAATTATTATAAGAAAGACAATTCTTATTTCACAGAGCAACCAATTGATCTTGTACCAAACCAACCATATCCAAACGCAAGCTTCGATAATTTTAAGTTTGTATGTGATAATATCAAATTTGCTGATGATTTAAACCAGTTAACTGGTTATAAGAAACCTGCTTCAAGAGAGCTTAAAGTTACATTTTTCCCTGACTTAAATGGTGATGTGGTGGCTATTGATTATAAACACTACACACCCTCTTTTAAGAAAGGAGCTAAATTGTTACATAAACCTATTGTTTGGCATGTTAACAATGCAACTAATAAAGCCACGTATAAACCAAATACCTGGTGTATACGTTGTCTTTGGAGCACAAAACCAGTTGAAACATCAAATTCGTTTGATGTACTGAAGTCAGAGGACGCGCAGGGAATGGATAATCTTGCCTGCGAAGATCTAAAACCAGTCTCTGAAGAAGTAGTGGAAAATCCTACCATACAGAAAGACGTTCTTGAGTGTAATGTGAAAACTACCGAAGTTGTAGGAGACATTATACTTAAACCAGCAAATAATAGTTTAAAAATTACAGAAGAGGTTGGCCACACAGATCTAATGGCTGCTTATGTAGACAATTCTAGTCTTACTATTAAGAAACCTAATGAATTATCTAGAGTATTAGGTTTGAAAACCCTTGCTACTCATGGTTTAGCTGCTGTTAATAGTGTCCCTTGGGATACTATAGCTAATTATGCTAAGCCTTTTCTTAACAAAGTTGTTAGTACAACTACTAACATAGTTACACGGTGTTTAAACCGTGTTTGTACTAATTATATGCCTTATTTCTTTACTTTATTGCTACAATTGTGTACTTTTACTAGAAGTACAAATTCTAGAATTAAAGCATCTATGCCGACTACTATAGCAAAGAATACTGTTAAGAGTGTCGGTAAATTTTGTCTAGAGGCTTCATTTAATTATTTGAAGTCACCTAATTTTTCTAAACTGATAAATATTATAATTTGGTTTTTACTATTAAGTGTTTGCCTAGGTTCTTTAATCTACTCAACCGCTGCTTTAGGTGTTTTAATGTCTAATTTAGGCATGCCTTCTTACTGTACTGGTTACAGAGAAGGCTATTTGAACTCTACTAATGTCACTATTGCAACCTACTGTACTGGTTCTATACCTTGTAGTGTTTGTCTTAGTGGTTTAGATTCTTTAGACACCTATCCTTCTTTAGAAACTATACAAATTACCATTTCATCTTTTAAATGGGATTTAACTGCTTTTGGCTTAGTTGCAGAGTGGTTTTTGGCATATATTCTTTTCACTAGGTTTTTCTATGTACTTGGATTGGCTGCAATCATGCAATTGTTTTTCAGCTATTTTGCAGTACATTTTATTAGTAATTCTTGGCTTATGTGGTTAATAATTAATCTTGTACAAATGGCCCCGATTTCAGCTATGGTTAGAATGTACATCTTCTTTGCATCATTTTATTATGTATGGAAAAGTTATGTGCATGTTGTAGACGGTTGTAATTCATCAACTTGTATGATGTGTTACAAACGTAATAGAGCAACAAGAGTCGAATGTACAACTATTGTTAATGGTGTTAGAAGGTCCTTTTATGTCTATGCTAATGGAGGTAAAGGCTTTTGCAAACTACACAATTGGAATTGTGTTAATTGTGATACATTCTGTGCTGGTAGTACATTTATTAGTGATGAAGTTGCGAGAGACTTGTCACTACAGTTTAAAAGACCAATAAATCCTACTGACCAGTCTTCTTACATCGTTGATAGTGTTACAGTGAAGAATGGTTCCATCCATCTTTACTTTGATAAAGCTGGTCAAAAGACTTATGAAAGACATTCTCTCTCTCATTTTGTTAACTTAGACAACCTGAGAGCTAATAACACTAAAGGTTCATTGCCTATTAATGTTATAGTTTTTGATGGTAAATCAAAATGTGAAGAATCATCTGCAAAATCAGCGTCTGTTTACTACAGTCAGCTTATGTGTCAACCTATACTGTTACTAGATCAGGCATTAGTGTCTGATGTTGGTGATAGTGCGGAAGTTGCAGTTAAAATGTTTGATGCTTACGTTAATACGTTTTCATCAACTTTTAACGTACCAATGGAAAAACTCAAAACACTAGTTGCAACTGCAGAAGCTGAACTTGCAAAGAATGTGTCCTTAGACAATGTCTTATCTACTTTTATTTCAGCAGCTCGGCAAGGGTTTGTTGATTCAGATGTAGAAACTAAAGATGTTGTTGAATGTCTTAAATTGTCACATCAATCTGACATAGAAGTTACTGGCGATAGTTGTAATAACTATATGCTCACCTATAACAAAGTTGAAAACATGACACCCCGTGACCTTGGTGCTTGTATTGACTGTAGTGCGCGTCATATTAATGCGCAGGTAGCAAAAAGTCACAACATTGCTTTGATATGGAACGTTAAAGATTTCATGTCATTGTCTGAACAACTACGAAAACAAATACGTAGTGCTGCTAAAAAGAATAACTTACCTTTTAAGTTGACATGTGCAACTACTAGACAAGTTGTTAATGTTGTAACAACAAAGATAGCACTTAAGGGTGGTAAAATTGTTAATAATTGGTTGAAGCAGTTAATTAAAGTTACACTTGTGTTCCTTTTTGTTGCTGCTATTTTCTATTTAATAACACCTGTTCATGTCATGTCTAAACATACTGACTTTTCAAGTGAAATCATAGGATACAAGGCTATTGATGGTGGTGTCACTCGTGACATAGCATCTACAGATACTTGTTTTGCTAACAAACATGCTGATTTTGACACATGGTTTAGCCAGCGTGGTGGTAGTTATACTAATGACAAAGCTTGCCCATTGATTGCTGCAGTCATAACAAGAGAAGTGGGTTTTGTCGTGCCTGGTTTGCCTGGCACGATATTACGCACAACTAATGGTGACTTTTTGCATTTCTTACCTAGAGTTTTTAGTGCAGTTGGTAACATCTGTTACACACCATCAAAACTTATAGAGTACACTGACTTTGCAACATCAGCTTGTGTTTTGGCTGCTGAATGTACAATTTTTAAAGATGCTTCTGGTAAGCCAGTACCATATTGTTATGATACCAATGTACTAGAAGGTTCTGTTGCTTATGAAAGTTTACGCCCTGACACACGTTATGTGCTCATGGATGGCTCTATTATTCAATTTCCTAACACCTACCTTGAAGGTTCTGTTAGAGTGGTAACAACTTTTGATTCTGAGTACTGTAGGCACGGCACTTGTGAAAGATCAGAAGCTGGTGTTTGTGTATCTACTAGTGGTAGATGGGTACTTAACAATGATTATTACAGATCTTTACCAGGAGTTTTCTGTGGTGTAGATGCTGTAAATTTACTTACTAATATGTTTACACCACTAATTCAACCTATTGGTGCTTTGGACATATCAGCATCTATAGTAGCTGGTGGTATTGTAGCTATCGTAGTAACATGCCTTGCCTACTATTTTATGAGGTTTAGAAGAGCTTTTGGTGAATACAGTCATGTAGTTGCCTTTAATACTTTACTATTCCTTATGTCATTCACTGTACTCTGTTTAACACCAGTTTACTCATTCTTACCTGGTGTTTATTCTGTTATTTACTTGTACTTGACATTTTATCTTACTAATGATGTTTCTTTTTTAGCACATATTCAGTGGATGGTTATGTTCACACCTTTAGTACCTTTCTGGATAACAATTGCTTATATCATTTGTATTTCCACAAAGCATTTCTATTGGTTCTTTAGTAATTACCTAAAGAGACGTGTAGTCTTTAATGGTGTTTCCTTTAGTACTTTTGAAGAAGCTGCGCTGTGCACCTTTTTGTTAAATAAAGAAATGTATCTAAAGTTGCGTAGTGATGTGCTATTACCTCTTACGCAATATAATAGATACTTAGCTCTTTATAATAAGTACAAGTATTTTAGTGGAGCAATGGATACAACTAGCTACAGAGAAGCTGCTTGTTGTCATCTCGCAAAGGCTCTCAATGACTTCAGTAACTCAGGTTCTGATGTTCTTTACCAACCACCACAAACCTCTATCACCTCAGCTGTTTTGCAGAGTGGTTTTAGAAAAATGGCATTCCCATCTGGTAAAGTTGAGGGTTGTATGGTACAAGTAACTTGTGGTACAACTACACTTAACGGTCTTTGGCTTGATGACGTAGTTTACTGTCCAAGACATGTGATCTGCACCTCTGAAGACATGCTTAACCCTAATTATGAAGATTTACTCATTCGTAAGTCTAATCATAATTTCTTGGTACAGGCTGGTAATGTTCAACTCAGGGTTATTGGACATTCTATGCAAAATTGTGTACTTAAGCTTAAGGTTGATACAGCCAATCCTAAGACACCTAAGTATAAGTTTGTTCGCATTCAACCAGGACAGACTTTTTCAGTGTTAGCTTGTTACAATGGTTCACCATCTGGTGTTTACCAATGTGCTATGAGGCCCAATTTCACTATTAAGGGTTCATTCCTTAATGGTTCATGTGGTAGTGTTGGTTTTAACATAGATTATGACTGTGTCTCTTTTTGTTACATGCACCATATGGAATTACCAACTGGAGTTCATGCTGGCACAGACTTAGAAGGTAACTTTTATGGACCTTTTGTTGACAGGCAAACAGCACAAGCAGCTGGTACGGACACAACTATTACAGTTAATGTTTTAGCTTGGTTGTACGCTGCTGTTATAAATGGAGACAGGTGGTTTCTCAATCGATTTACCACAACTCTTAATGACTTTAACCTTGTGGCTATGAAGTACAATTATGAACCTCTAACACAAGACCATGTTGACATACTAGGACCTCTTTCTGCTCAAACTGGAATTGCCGTTTTAGATATGTGTGCTTCATTAAAAGAATTACTGCAAAATGGTATGAATGGACGTACCATATTGGGTAGTGCTTTATTAGAAGATGAATTTACACCTTTTGATGTTGTTAGACAATGCTCAGGTGTTACTTTCCAAAGTGCAGTGAAAAGAACAATCAAGGGTACACACCACTGGTTGTTACTCACAATTTTGACTTCACTTTTAGTTTTAGTCCAGAGTACTCAATGGTCTTTGTTCTTTTTTTTGTATGAAAATGCCTTTTTACCTTTTGCTATGGGTATTATTGCTATGTCTGCTTTTGCAATGATGTTTGTCAAACATAAGCATGCATTTCTCTGTTTGTTTTTGTTACCTTCTCTTGCCACTGTAGCTTATTTTAATATGGTCTATATGCCTGCTAGTTGGGTGATGCGTATTATGACATGGTTGGATATGGTTGATACTAGTTTGTCTGGTTTTAAGCTAAAAGACTGTGTTATGTATGCATCAGCTGTAGTGTTACTAATCCTTATGACAGCAAGAACTGTGTATGATGATGGTGCTAGGAGAGTGTGGACACTTATGAATGTCTTGACACTCGTTTATAAAGTTTATTATGGTAATGCTTTAGATCAAGCCATTTCCATGTGGGCTCTTATAATCTCTGTTACTTCTAACTACTCAGGTGTAGTTACAACTGTCATGTTTTTGGCCAGAGGTATTGTTTTTATGTGTGTTGAGTATTGCCCTATTTTCTTCATAACTGGTAATACACTTCAGTGTATAATGCTAGTTTATTGTTTCTTAGGCTATTTTTGTACTTGTTACTTTGGCCTCTTTTGTTTACTCAACCGCTACTTTAGACTGACTCTTGGTGTTTATGATTACTTAGTTTCTACACAGGAGTTTAGATATATGAATTCACAGGGACTACTCCCACCCAAGAATAGCATAGATGCCTTCAAACTCAACATTAAATTGTTGGGTGTTGGTGGCAAACCTTGTATCAAAGTAGCCACTGTACAGTCTAAAATGTCAGATGTAAAGTGCACATCAGTAGTCTTACTCTCAGTTTTGCAACAACTCAGAGTAGAATCATCATCTAAATTGTGGGCTCAATGTGTCCAGTTACACAATGACATTCTCTTAGCTAAAGATACTACTGAAGCCTTTGAAAAAATGGTTTCACTACTTTCTGTTTTGCTTTCCATGCAGGGTGCTGTAGACATAAACAAGCTTTGTGAAGAAATGCTGGACAACAGGGCAACCTTACAAGCTATAGCCTCAGAGTTTAGTTCCCTTCCATCATATGCAGCTTTTGCTACTGCTCAAGAAGCTTATGAGCAGGCTGTTGCTAATGGTGATTCTGAAGTTGTTCTTAAAAAGTTGAAGAAGTCTTTGAATGTGGCTAAATCTGAATTTGACCGTGATGCAGCCATGCAACGTAAGTTGGAAAAGATGGCTGATCAAGCTATGACCCAAATGTATAAACAGGCTAGATCTGAGGACAAGAGGGCAAAAGTTACTAGTGCTATGCAGACAATGCTTTTCACTATGCTTAGAAAGTTGGATAATGATGCACTCAACAACATTATCAACAATGCAAGAGATGGTTGTGTTCCCTTGAACATAATACCTCTTACAACAGCAGCCAAACTAATGGTTGTCATACCAGACTATAACACATATAAAAATACGTGTGATGGTACAACATTTACTTATGCATCAGCATTGTGGGAAATCCAACAGGTTGTAGATGCAGATAGTAAAATTGTTCAACTTAGTGAAATTAGTATGGACAATTCACCTAATTTAGCATGGCCTCTTATTGTAACAGCTTTAAGGGCCAATTCTGCTGTCAAATTACAGAATAATGAGCTTAGTCCTGTTGCACTACGACAGATGTCTTGTGCTGCCGGTACTACACAAACTGCTTGCACTGATGACAATGCGTTAGCTTACTACAACACAACAAAGGGAGGTAGGTTTGTACTTGCACTGTTATCCGATTTACAGGATTTGAAATGGGCTAGATTCCCTAAGAGTGATGGAACTGGTACTATCTATACAGAACTGGAACCACCTTGTAGGTTTGTTACAGACACACCTAAAGGTCCTAAAGTGAAGTATTTATACTTTATTAAAGGATTAAACAACCTAAATAGAGGTATGGTACTTGGTAGTTTAGCTGCCACAGTACGTCTACAAGCTGGTAATGCAACAGAAGTGCCTGCCAATTCAACTGTATTATCTTTCTGTGCTTTTGCTGTAGATGCTGCTAAAGCTTACAAAGATTATCTAGCTAGTGGGGGACAACCAATCACTAATTGTGTTAAGATGTTGTGTACACACACTGGTACTGGTCAGGCAATAACAGTTACACCGGAAGCCAATATGGATCAAGAATCCTTTGGTGGTGCATCGTGTTGTCTGTACTGCCGTTGCCACATAGATCATCCAAATCCTAAAGGATTTTGTGACTTAAAAGGTAAGTATGTACAAATACCTACAACTTGTGCTAATGACCCTGTGGGTTTTACACTTAAAAACACAGTCTGTACCGTCTGCGGTATGTGGAAAGGTTATGGCTGTAGTTGTGATCAACTCCGCGAACCCATGCTTCAGTCAGCTGATGCACAATCGTTTTTAAACGGGTTTGCGGTGTAAGTGCAGCCCGTCTTACACCGTGCGGCACAGGCACTAGTACTGATGTCGTATACAGGGCTTTTGACATCTACAATGATAAAGTAGCTGGTTTTGCTAAATTCCTAAAAACTAATTGTTGTCGCTTCCAAGAAAAGGACGAAGATGACAATTTAATTGATTCTTACTTTGTAGTTAAGAGACACACTTTCTCTAACTACCAACATGAAGAAACAATTTATAATTTACTTAAGGATTGTCCAGCTGTTGCTAAACATGACTTCTTTAAGTTTAGAATAGACGGTGACATGGTACCACATATATCACGTCAACGTCTTACTAAATACACAATGGCAGACCTCGTCTATGCTTTAAGGCATTTTGATGAAGGTAATTGTGACACATTAAAAGAAATACTTGTCACATACAATTGTTGTGATGATGATTATTTCAATAAAAAGGACTGGTATGATTTTGTAGAAAACCCAGATATATTACGCGTATACGCCAACTTAGGTGAACGTGTACGCCAAGCTTTGTTAAAAACAGTACAATTCTGTGATGCCATGCGAAATGCTGGTATTGTTGGTGTACTGACATTAGATAATCAAGATCTCAATGGTAACTGGTATGATTTCGGTGATTTCATACAAACCACGCCAGGTAGTGGAGTTCCTGTTGTAGATTCTTATTATTCATTGTTAATGCCTATATTAACCTTGACCAGGGCTTTAACTGCAGAGTCACATGTTGACACTGACTTAACAAAGCCTTACATTAAGTGGGATTTGTTAAAATATGACTTCACGGAAGAGAGGTTAAAACTCTTTGACCGTTATTTTAAATATTGGGATCAGACATACCACCCAAATTGTGTTAACTGTTTGGATGACAGATGCATTCTGCATTGTGCAAACTTTAATGTTTTATTCTCTACAGTGTTCCCACCTACAAGTTTTGGACCACTAGTGAGAAAAATATTTGTTGATGGTGTTCCATTTGTAGTTTCAACTGGATACCACTTCAGAGAGCTAGGTGTTGTACATAATCAGGATGTAAACTTACATAGCTCTAGACTTAGTTTTAAGGAATTACTTGTGTATGCTGCTGACCCTGCTATGCACGCTGCTTCTGGTAATCTATTACTAGATAAACGCACTACGTGCTTTTCAGTAGCTGCACTTACTAACAATGTTGCTTTTCAAACTGTCAAACCCGGTAATTTTAACAAAGACTTCTATGACTTTGCTGTGTCTAAGGGTTTCTTTAAGGAAGGAAGTTCTGTTGAATTAAAACACTTCTTCTTTGCTCAGGATGGTAATGCTGCTATCAGCGATTATGACTACTATCGTTATAATCTACCAACAATGTGTGATATCAGACAACTACTATTTGTAGTTGAAGTTGTTGATAAGTACTTTGATTGTTACGATGGTGGCTGTATTAATGCTAACCAAGTCATCGTCAACAACCTAGACAAATCAGCTGGTTTTCCATTTAATAAATGGGGTAAGGCTAGACTTTATTATGATTCAATGAGTTATGAGGATCAAGATGCACTTTTCGCATATACAAAACGTAATGTCATCCCTACTATAACTCAAATGAATCTTAAGTATGCCATTAGTGCAAAGAATAGAGCTCGCACCGTAGCTGGTGTCTCTATCTGTAGTACTATGACCAATAGACAGTTTCATCAAAAATTATTGAAATCAATAGCCGCCACTAGAGGAGCTACTGTAGTAATTGGAACAAGCAAATTCTATGGTGGTTGGCACAACATGTTAAAAACTGTTTATAGTGATGTAGAAAACCCTCACCTTATGGGTTGGGATTATCCTAAATGTGATAGAGCCATGCCTAACATGCTTAGAATTATGGCCTCACTTGTTCTTGCTCGCAAACATACAACGTGTTGTAGCTTGTCACACCGTTTCTATAGATTAGCTAATGAGTGTGCTCAAGTATTGAGTGAAATGGTCATGTGTGGCGGTTCACTATATGTTAAACCAGGTGGAACCTCATCAGGAGATGCCACAACTGCTTATGCTAATAGTGTTTTTAACATTTGTCAAGCTGTCACGGCCAATGTTAATGCACTTTTATCTACTGATGGTAACAAAATTGCCGATAAGTATGTCCGCAATTTACAACACAGACTTTATGAGTGTCTCTATAGAAATAGAGATGTTGACACAGACTTTGTGAATGAGTTTTACGCATATTTGCGTAAACATTTCTCAATGATGATACTCTCTGACGATGCTGTTGTGTGTTTCAATAGCACTTATGCATCTCAAGGTCTAGTGGCTAGCATAAAGAACTTTAAGTCAGTTCTTTATTATCAAAACAATGTTTTTATGTCTGAAGCAAAATGTTGGACTGAGACTGACCTTACTAAAGGACCTCATGAATTTTGCTCTCAACATACAATGCTAGTTAAACAGGGTGATGATTATGTGTACCTTCCTTACCCAGATCCATCAAGAATCCTAGGGGCCGGCTGTTTTGTAGATGATATCGTAAAAACAGATGGTACACTTATGATTGAACGGTTCGTGTCTTTAGCTATAGATGCTTACCCACTTACTAAACATCCTAATCAGGAGTATGCTGATGTCTTTCATTTGTACTTACAATACATAAGAAAGCTACATGATGAGTTAACAGGACACATGTTAGACATGTATTCTGTTATGCTTACTAATGATAACACTTCAAGGTATTGGGAACCTGAGTTTTATGAGGCTATGTACACACCGCATACAGTCTTACAGGCTGTTGGGGCTTGTGTTCTTTGCAATTCACAGACTTCATTAAGATGTGGTGCTTGCATACGTAGACCATTCTTATGTTGTAAATGCTGTTACGACCATGTCATATCAACATCACATAAATTAGTCTTGTCTGTTAATCCGTATGTTTGCAATGCTCCAGGTTGTGATGTCACAGATGTGACTCAACTTTACTTAGGAGGTATGAGCTATTATTGTAAATCACATAAACCACCCATTAGTTTTCCATTGTGTGCTAATGGACAAGTTTTTGGTTTATATAAAAATACATGTGTTGGTAGCGATAATGTTACTGACTTTAATGCAATTGCAACATGTGACTGGACAAATGCTGGTGATTACATTTTAGCTAACACCTGTACTGAAAGACTCAAGCTTTTTGCAGCAGAAACGCTCAAAGCTACTGAGGAGACATTTAAACTGTCTTATGGTATTGCTACTGTACGTGAAGTGCTGTCTGACAGAGAATTACATCTTTCATGGGAAGTTGGTAAACCTAGACCACCACTTAACCGAAATTATGTCTTTACTGGTTATCGTGTAACTAAAAACAGTAAAGTACAAATAGGAGAGTACACCTTTGAAAAAGGTGACTATGGTGATGCTGTTGTTTACCGAGGTACAACAACTTACAAATTAAATGTTGGTGATTATTTTGTGCTGACATCACATACAGTAATGCCATTAAGTGCACCTACACTAGTGCCACAAGAGCACTATGTTAGAATTACTGGCTTATACCCAACACTCAATATCTCAGATGAGTTTTCTAGCAATGTTGCAAATTATCAAAAGGTTGGTATGCAAAAGTATTCTACACTCCAGGGACCACCTGGTACTGGTAAGAGTCATTTTGCTATTGGCCTAGCTCTCTACTACCCTTCTGCTCGCATAGTGTATACAGCTTGCTCTCATGCCGCTGTTGATGCACTATGTGAGAAGGCATTAAAATATTTGCCTATAGATAAATGTAGTAGAATTATACCTGCACGTGCTCGTGTAGAGTGTTTTGATAAATTCAAAGTGAATTCAACATTAGAACAGTATGTCTTTTGTACTGTAAATGCATTGCCTGAGACGACAGCAGATATAGTTGTCTTTGATGAAATTTCAATGGCCACAAATTATGATTTGAGTGTTGTCAATGCCAGATTACGTGCTAAGCACTATGTGTACATTGGCGACCCTGCTCAATTACCTGCACCACGCACATTGCTAACTAAGGGCACACTAGAACCAGAATATTTCAATTCAGTGTGTAGACTTATGAAAACTATAGGTCCAGACATGTTCCTCGGAACTTGTCGGCGTTGTCCTGCTGAAATTGTTGACACTGTGAGTGCTTTGGTTTATGATAATAAGCTTAAAGCACATAAAGACAAATCAGCTCAATGCTTTAAAATGTTTTATAAGGGTGTTATCACGCATGATGTTTCATCTGCAATTAACAGGCCACAAATAGGCGTGGTAAGAGAATTCCTTACACGTAACCCTGCTTGGAGAAAAGCTGTCTTTATTTCACCTTATAATTCACAGAATGCTGTAGCCTCAAAGATTTTGGGACTACCAACTCAAACTGTTGATTCATCACAGGGCTCAGAATATGACTATGTCATATTCACTCAAACCACTGAAACAGCTCACTCTTGTAATGTAAACAGATTTAATGTTGCTATTACCAGAGCAAAAGTAGGCATACTTTGCATAATGTCTGATAGAGACCTTTATGACAAGTTGCAATTTACAAGTCTTGAAATTCCACGTAGGAATGTGGCAACTTTACAAGCTGAAAATGTAACAGGACTCTTTAAAGATTGTAGTAAGGTAATCACTGGGTTACATCCTACACAGGCACCTACACACCTCAGTGTTGACACTAAATTCAAAACTGAAGGTTTATGTGTTGACATACCTGGCATACCTAAGGACATGACCTATAGAAGACTCATCTCTATGATGGGTTTTAAAATGAATTATCAAGTTAATGGTTACCCTAACATGTTTATCACCCGCGAAGAAGCTATAAGACATGTACGTGCATGGATTGGCTTCGATGTCGAGGGGTGTCATGCTACTAGAGAAGCTGTTGGTACCAATTTACCTTTACAGCTAGGTTTTTCTACAGGTGTTAACCTAGTTGCTGTACCTACAGGTTATGTTGATACACCTAATAATACAGATTTTTCCAGAGTTAGTGCTAAACCACCGCCTGGAGATCAATTTAAACACCTCATACCACTTATGTACAAAGGACTTCCTTGGAATGTAGTGCGTATAAAGATTGTACAAATGTTAAGTGACACACTTAAAAATCTCTCTGACAGAGTCGTATTTGTCTTATGGGCACATGGCTTTGAGTTGACATCTATGAAGTATTTTGTGAAAATAGGACCTGAGCGCACCTGTTGTCTATGTGATAGACGTGCCACATGCTTTTCCACTGCTTCAGACACTTATGCCTGTTGGCATCATTCTATTGGATTTGATTACGTCTATAATCCGTTTATGATTGATGTTCAACAATGGGGTTTTACAGGTAACCTACAAAGCAACCATGATCTGTATTGTCAAGTCCATGGTAATGCACATGTAGCTAGTTGTGATGCAATCATGACTAGGTGTCTAGCTGTCCACGAGTGCTTTGTTAAGCGTGTTGACTGGACTATTGAATATCCTATAATTGGTGATGAACTGAAGATTAATGCGGCTTGTAGAAAGGTTCAACACATGGTTGTTAAAGCTGCATTATTAGCAGACAAATTCCCAGTTCTTCACGACATTGGTAACCCTAAAGCTATTAAGTGTGTACCTCAAGCTGATGTAGAATGGAAGTTCTATGATGCACAGCCTTGTAGTGACAAAGCTTATAAAATAGAAGAATTATTCTATTCTTATGCCACACATTCTGACAAATTCACAGATGGTGTATGCCTATTTTGGAATTGCAATGTCGATAGATATCCTGCTAATTCCATTGTTTGTAGATTTGACACTAGAGTGCTATCTAACCTTAACTTGCCTGGTTGTGATGGTGGCAGTTTGTATGTAAATAAACATGCATTCCACACACCAGCTTTTGATAAAAGTGCTTTTGTTAATTTAAAACAATTACCATTTTTCTATTACTCTGACAGTCCATGTGAGTCTCATGGAAAACAAGTAGTGTCAGATATAGATTATGTACCACTAAAGTCTGCTACGTGTATAACACGTTGCAATTTAGGTGGTGCTGTCTGTAGACATCATGCTAATGAGTACAGATTGTATCTCGATGCTTATAACATGATGATCTCAGCTGGCTTTAGCTTGTGGGTTTACAAACAATTTGATACTTATAACCTCTGGAACACTTTTACAAGACTTCAGAGTTTAGAAAATGTGGCTTTTAATGTTGTAAATAAGGGACACTTTGATGGACAACAGGGTGAAGTACCAGTTTCTATCATTAATAACACTGTTTACACAAAAGTTGATGGTGTTGATGTAGAATTGTTTGAAAATAAAACAACATTACCTGTTAATGTAGCATTTGAGCTTTGGGCTAAGCGCAACATTAAACCAGTACCAGAGGTGAAAATACTCAATAATTTGGGTGTGGACATTGCTGCTAATACTGTGATCTGGGACTACAAAAGAGATGCTCCAGCACATATATCTACTATTGGTGTTTGTTCTATGACTGACATAGCCAAGAAACCAACTGAAACGATTTGTGCACCACTCACTGTCTTTTTTGATGGTAGAGTTGATGGTCAAGTAGACTTATTTAGAAATGCCCGTAATGGTGTTCTTATTACAGAAGGTAGTGTTAAAGGTTTACAACCATCTGTAGGTCCCAAACAAGCTAGTCTTAATGGAGTCACATTAATTGGAGAAGCCGTAAAAACACAGTTCAATTATTATAAGAAAGTTGATGGTGTTGTCCAACAATTACCTGAAACTTACTTTACTCAGAGTAGAAATTTACAAGAATTTAAACCCAGGAGTCAAATGGAAATTGATTTCTTAGAATTAGCTATGGATGAATTCATTGAACGGTATAAATTAGAAGGCTATGCCTTCGAACATATCGTTTATGGAGATTTTAGTCATAGTCAGTTAGGTGGTTTACATCTACTGATTGGACTAGCTAAACGTTTTAAGGAATCACCTTTTGAATTAGAAGATTTTATTCCTATGGACAGTACAGTTAAAAACTATTTCATAACAGATGCGCAAACAGGTTCATCTAAGTGTGTGTGTTCTGTTATTGATTTATTACTTGATGATTTTGTTGAAATAATAAAATCCCAAGATTTATCTGTAGTTTCTAAGGTTGTCAAAGTGACTATTGACTATACAGAAATTTCATTTATGCTTTGGTGTAAAGATGGCCATGTAGAAACATTTTACCCAAAATTACAATCTAGTCAAGCGTGGCAACCGGGTGTTGCTATGCCTAATCTTTACAAAATGCAAAGAATGCTATTAGAAAAGTGTGACCTTCAAAATTATGGTGATAGTGCAACATTACCTAAAGGCATAATGATGAATGTCGCAAAATATACTCAACTGTGTCAATATTTAAACACATTAACATTAGCTGTACCCTATAATATGAGAGTTATACATTTTGGTGCTGGTTCTGATAAAGGAGTTGCACCAGGTACAGCTGTTTTAAGACAGTGGTTGCCTACGGGTACGCTGCTTGTCGATTCAGATCTTAATGACTTTGTCTCTGATGCAGATTCAACTTTGATTGGTGATTGTGCAACTGTACATACAGCTAATAAATGGGATCTCATTATTAGTGATATGTACGACCCTAAGACTAAAAATGTTACAAAAGAAAATGACTCTAAAGAGGGTTTTTTCACTTACATTTGTGGGTTTATACAACAAAAGCTAGCTCTTGGAGGTTCCGTGGCTATAAAGATAACAGAACATTCTTGGAATGCTGATCTTTATAAGCTCATGGGACACTTCGCATGGTGGACAGCCTTTGTTACTAATGTGAATGCGTCATCATCTGAAGCATTTTTAATTGGATGTAATTATCTTGGCAAACCACGCGAACAAATAGATGGTTATGTCATGCATGCAAATTACATATTTTGGAGGAATACAAATCCAATTCAGTTGTCTTCCTATTCTTTATTTGACATGAGTAAATTTCCCCTTAAATTAAGGGGTACTGCTGTTATGTCTTTAAAAGAAGGTCAAATCAATGATATGATTTTATCTCTTCTTAGTAAAGGTAGACTTATAATTAGAGAAAACAACAGAGTTGTTATTTCTAGTGATGTTCTTGTTAACAACTAAACGAACAATGTTTGTTTTTCTTGTTTTATTGCCACTAGTCTCTAGTCAGTGTGTTAATCTTACAACCAGAACTCAATTACCCCCTGCATACACTAATTCTTTCACACGTGGTGTTTATTACCCTGACAAAGTTTTCAGATCCTCAGTTTTACATTCAACTCAGGACTTGTTCTTACCTTTCTTTTCCAATGTTACTTGGTTCCATGCTATACATGTCTCTGGGACCAATGGTACTAAGAGGTTTGATAACCCTGTCCTACCATTTAATGATGGTGTTTATTTTGCTTCCACTGAGAAGTCTAACATAATAAGAGGCTGGATTTTTGGTACTACTTTAGATTCGAAGACCCAGTCCCTACTTATTGTTAATAACGCTACTAATGTTGTTATTAAAGTCTGTGAATTTCAATTTTGTAATGATCCATTTTTGGGTGTTTATTACCACAAAAACAACAAAAGTTGGATGGAAAGTGAGTTCAGAGTTTATTCTAGTGCGAATAATTGCACTTTTGAATATGTCTCTCAGCCTTTTCTTATGGACCTTGAAGGAAAACAGGGTAATTTCAAAAATCTTAGGGAATTTGTGTTTAAGAATATTGATGGTTATTTTAAAATATATTCTAAGCACACGCCTATTAATTTAGTGCGTGATCTCCCTCAGGGTTTTTCGGCTTTAGAACCATTGGTAGATTTGCCAATAGGTATTAACATCACTAGGTTTCAAACTTTACTTGCTTTACATAGAAGTTATTTGACTCCTGGTGATTCTTCTTCAGGTTGGACAGCTGGTGCTGCAGCTTATTATGTGGGTTATCTTCAACCTAGGACTTTTCTATTAAAATATAATGAAAATGGAACCATTACAGATGCTGTAGACTGTGCACTTGACCCTCTCTCAGAAACAAAGTGTACGTTGAAATCCTTCACTGTAGAAAAAGGAATCTATCAAACTTCTAACTTTAGAGTCCAACCAACAGAATCTATTGTTAGATTTCCTAATATTACAAACTTGTGCCCTTTTGGTGAAGTTTTTAACGCCACCAGATTTGCATCTGTTTATGCTTGGAACAGGAAGAGAATCAGCAACTGTGTTGCTGATTATTCTGTCCTATATAATTCCGCATCATTTTCCACTTTTAAGTGTTATGGAGTGTCTCCTACTAAATTAAATGATCTCTGCTTTACTAATGTCTATGCAGATTCATTTGTAATTAGAGGTGATGAAGTCAGACAAATCGCTCCAGGGCAAACTGGAAAGATTGCTGATTATAATTATAAATTACCAGATGATTTTACAGGCTGCGTTATAGCTTGGAATTCTAACAATCTTGATTCTAAGGTTGGTGGTAATTATAATTACCTGTATAGATTGTTTAGGAAGTCTAATCTCAAACCTTTTGAGAGAGATATTTCAACTGAAATCTATCAGGCCGGTAGCACACCTTGTAATGGTGTTGAAGGTTTTAATTGTTACTTTCCTTTACAATCATATGGTTTCCAACCCACTAATGGTGTTGGTTACCAACCATACAGAGTAGTAGTACTTTCTTTTGAACTTCTACATGCACCAGCAACTGTTTGTGGACCTAAAAAGTCTACTAATTTGGTTAAAAACAAATGTGTCAATTTCAACTTCAATGGTTTAACAGGCACAGGTGTTCTTACTGAGTCTAACAAAAAGTTTCTGCCTTTCCAACAATTTGGCAGAGACATTGCTGACACTACTGATGCTGTCCGTGATCCACAGACACTTGAGATTCTTGACATTACACCATGTTCTTTTGGTGGTGTCAGTGTTATAACACCAGGAACAAATACTTCTAACCAGGTTGCTGTTCTTTATCAGGATGTTAACTGCACAGAAGTCCCTGTTGCTATTCATGCAGATCAACTTACTCCTACTTGGCGTGTTTATTCTACAGGTTCTAATGTTTTTCAAACACGTGCAGGCTGTTTAATAGGGGCTGAACATGTCAACAACTCATATGAGTGTGACATACCCATTGGTGCAGGTATATGCGCTAGTTATCAGACTCAGACTAATTCTCCTCGGCGGGCACGTAGTGTAGCTAGTCAATCCATCATTGCCTACACTATGTCACTTGGTGCAGAAAATTCAGTTGCTTACTCTAATAACTCTATTGCCATACCCACAAATTTTACTATTAGTGTTACCACAGAAATTCTACCAGTGTCTATGACCAAGACATCAGTAGATTGTACAATGTACATTTGTGGTGATTCAACTGAATGCAGCAATCTTTTGTTGCAATATGGCAGTTTTTGTACACAATTAAACCGTGCTTTAACTGGAATAGCTGTTGAACAAGACAAAAACACCCAAGAAGTTTTTGCACAAGTCAAACAAATTTACAAAACACCACCAATTAAAGATTTTGGTGGTTTTAATTTTTCACAAATATTACCAGATCCATCAAAACCAAGCAAGAGGTCATTTATTGAAGATCTACTTTTCAACAAAGTGACACTTGCAGATGCTGGCTTCATCAAACAATATGGTGATTGCCTTGGTGATATTGCTGCTAGAGACCTCATTTGTGCACAAAAGTTTAACGGCCTTACTGTTTTGCCACCTTTGCTCACAGATGAAATGATTGCTCAATACACTTCTGCACTGTTAGCGGGTACAATCACTTCTGGTTGGACCTTTGGTGCAGGTGCTGCATTACAAATACCATTTGCTATGCAAATGGCTTATAGGTTTAATGGTATTGGAGTTACACAGAATGTTCTCTATGAGAACCAAAAATTGATTGCCAACCAATTTAATAGTGCTATTGGCAAAATTCAAGACTCACTTTCTTCCACAGCAAGTGCACTTGGAAAACTTCAAGATGTGGTCAACCAAAATGCACAAGCTTTAAACACGCTTGTTAAACAACTTAGCTCCAATTTTGGTGCAATTTCAAGTGTTTTAAATGATATCCTTTCACGTCTTGACAAAGTTGAGGCTGAAGTGCAAATTGATAGGTTGATCACAGGCAGACTTCAAAGTTTGCAGACATATGTGACTCAACAATTAATTAGAGCTGCAGAAATCAGAGCTTCTGCTAATCTTGCTGCTACTAAAATGTCAGAGTGTGTACTTGGACAATCAAAAAGAGTTGATTTTTGTGGAAAGGGCTATCATCTTATGTCCTTCCCTCAGTCAGCACCTCATGGTGTAGTCTTCTTGCATGTGACTTATGTCCCTGCACAAGAAAAGAACTTCACAACTGCTCCTGCCATTTGTCATGATGGAAAAGCACACTTTCCTCGTGAAGGTGTCTTTGTTTCAAATGGCACACACTGGTTTGTAACACAAAGGAATTTTTATGAACCACAAATCATTACTACAGACAACACATTTGTGTCTGGTAACTGTGATGTTGTAATAGGAATTGTCAACAACACAGTTTATGATCCTTTGCAACCTGAATTAGACTCATTCAAGGAGGAGTTAGATAAATATTTTAAGAATCATACATCACCAGATGTTGATTTAGGTGACATCTCTGGCATTAATGCTTCAGTTGTAAACATTCAAAAAGAAATTGACCGCCTCAATGAGGTTGCCAAGAATTTAAATGAATCTCTCATCGATCTCCAAGAACTTGGAAAGTATGAGCAGTATATAAAATGGCCATGGTACATTTGGCTAGGTTTTATAGCTGGCTTGATTGCCATAGTAATGGTGACAATTATGCTTTGCTGTATGACCAGTTGCTGTAGTTGTCTCAAGGGCTGTTGTTCTTGTGGATCCTGCTGCAAATTTGATGAAGACGACTCTGAGCCAGTGCTCAAAGGAGTCAAATTACATTACACATAAACGAACTTATGGATTTGTTTATGAGAATCTTCACAATTGGAACTGTAACTTTGAAGCAAGGTGAAATCAAGGATGCTACTCCTTCAGATTTTGTTCGCGCTACTGCAACGATACCGATACAAGCCTCACTCCCTTTCGGATGGCTTATTGTTGGCGTTGCACTTCTTGCTGTTTTTCAGAGCGCTTCCAAAATCATAACCCTCAAAAAGAGATGGCAACTAGCACTCTCCAAGGGTGTTCACTTTGTTTGCAACTTGCTGTTGTTGTTTGTAACAGTTTACTCACACCTTTTGCTCGTTGCTGCTGGCCTTGAAGCCCCTTTTCTCTATCTTTATGCTTTAGTCTACTTCTTGCAGAGTATAAACTTTGTAAGAATAATAATGAGGCTTTGGCTTTGCTGGAAATGCCGTTCCAAAAACCCATTACTTTATGATGCCAACTATTTTCTTTGCTGGCATACTAATTGTTACGACTATTGTATACCTTACAATAGTGTAACTTCTTCAATTGTCATTACTTCAGGTGATGGCACAACAAGTCCTATTTCTGAACATGACTACCAGATTGGTGGTTATACTGAAAAATGGGAATCTGGAGTAAAAGACTGTGTTGTATTACACAGTTACTTCACTTCAGACTATTACCAGCTGTACTCAACTCAATTGAGTACAGACACTGGTGTTGAACATGTTACCTTCTTCATCTACAATAAAATTGTTGATGAGCCTGAAGAACATGTCCAAATTCACACAATCGACGGTTCATCCGGAGTTGTTAATCCAGTAATGGAACCAATTTATGATGAACCGACGACGACTACTAGCGTGCCTTTGTAAGCACAAGCTGATGAGTACGAACTTATGTACTCATTCGTTTCGGAAGAGACAGGTACGTTAATAGTTAATAGCGTACTTCTTTTTCTTGCTTTCGTGGTATTCTTGCTAGTTACACTAGCCATCCTTACTGCGCTTCGATTGTGTGCGTACTGCTGCAATATTGTTAACGTGAGTCTTGTAAAACCTTCTTTTTACGTTTACTCTCGTGTTAAAAATCTGAATTCTTCTAGAGTTCCTGATCTTCTGGTCTAAACGAACTAAATATTATATTAGTTTTTCTGTTTGGAACTTTAATTTTAGCCATGGCAGATTCCAACGGTACTATTACCGTTGAAGAGCTTAAAAAGCTCCTTGAACAATGGAACCTAGTAATAGGTTTCCTATTCCTTACATGGATTTGTCTTCTACAATTTGCCTATGCCAACAGGAATAGGTTTTTGTATATAATTAAGTTAATTTTCCTCTGGCTGTTATGGCCAGTAACTTTAGCTTGTTTTGTGCTTGCTGCTGTTTACAGAATAAATTGGATCACCGGTGGAATTGCTATCGCAATGGCTTGTCTTGTAGGCTTGATGTGGCTCAGCTACTTCATTGCTTCTTTCAGACTGTTTGCGCGTACGCGTTCCATGTGGTCATTCAATCCAGAAACTAACATTCTTCTCAACGTGCCACTCCATGGCACTATTCTGACCAGACCGCTTCTAGAAAGTGAACTCGTAATCGGAGCTGTGATCCTTCGTGGACATCTTCGTATTGCTGGACACCATCTAGGACGCTGTGACATCAAGGACCTGCCTAAAGAAATCACTGTTGCTACATCACGAACGCTTTCTTATTACAAATTGGGAGCTTCGCAGCGTGTAGCAGGTGACTCAGGTTTTGCTGCATACAGTCGCTACAGGATTGGCAACTATAAATTAAACACAGACCATTCCAGTAGCAGTGACAATATTGCTTTGCTTGTACAGTAAGTGACAACAGATGTTTCATCTCGTTGACTTTCAGGTTACTATAGCAGAGATATTACTAATTATTATGAGGACTTTTAAAGTTTCCATTTGGAATCTTGATTACATCATAAACCTCATAATTAAAAATTTATCTAAGTCACTAACTGAGAATAAATATTCTCAATTAGATGAAGAGCAACCAATGGAGATTGATTAAACGAACATGAAAATTATTCTTTTCTTGGCACTGATAACACTCGCTACTTGTGAGCTTTATCACTACCAAGAGTGTGTTAGAGGTACAACAGTACTTTTAAAAGAACCTTGCTCTTCTGGAACATACGAGGGCAATTCACCATTTCATCCTCTAGCTGATAACAAATTTGCACTGACTTGCTTTAGCACTCAATTTGCTTTTGCTTGTCCTGACGGCGTAAAACACGTCTATCAGTTACGTGCCAGATCAGTTTCACCTAAACTGTTCATCAGACAAGAGGAAGTTCAAGAACTTTACTCTCCAATTTTTCTTATTGTTGCGGCAATAGTGTTTATAACACTTTGCTTCACACTCAAAAGAAAGACAGAATGATTGAACTTTCATTAATTGACTTCTATTTGTGCTTTTTAGCCTTTCTGCTATTCCTTGTTTTAATTATGCTTATTATCTTTTGGTTCTCACTTGAACTGCAAGATCATAATGAAACTTGTCACGCCTAAACGAACATGAAATTTCTTGTTTTCTTAGGAATCATCACAACTGTAGCTGCATTTCACCAAGAATGTAGTTTACAGTCATGTACTCAACATCAACCATATGTAGTTGATGACCCGTGTCCTATTCACTTCTATTCTAAATGGTATATTAGAGTAGGAGCTAGAAAATCAGCACCTTTAATTGAATTGTGCGTGGATGAGGCTGGTTCTAAATCACCCATTCAGTACATCGATATCGGTAATTATACAGTTTCCTGTTTACCTTTTACAATTAATTGCCAGGAACCTAAATTGGGTAGTCTTGTAGTGCGTTGTTCGTTCTATGAAGACTTTTTAGAGTATCATGACGTTCGTGTTGTTTTAGATTTCATCTAAACGAACAAACTAAAATGTCTGATAATGGACCCCAAAATCAGCGAAATGCACCCCGCATTACGTTTGGTGGACCCTCAGATTCAACTGGCAGTAACCAGAATGGAGAACGCAGTGGGGCGCGATCAAAACAACGTCGGCCCCAAGGTTTACCCAATAATACTGCGTCTTGGTTCACCGCTCTCACTCAACATGGCAAGGAAGACCTTAAATTCCCTCGAGGACAAGGCGTTCCAATTAACACCAATAGCAGTCCAGATGACCAAATTGGCTACTACCGAAGAGCTACCAGACGAATTCGTGGTGGTGACGGTAAAATGAAAGATCTCAGTCCAAGATGGTATTTCTACTACCTAGGAACTGGGCCAGAAGCTGGACTTCCCTATGGTGCTAACAAAGACGGCATCATATGGGTTGCAACTGAGGGAGCCTTGAATACACCAAAAGATCACATTGGCACCCGCAATCCTGCTAACAATGCTGCAATCGTGCTACAACTTCCTCAAGGAACAACATTGCCAAAAGGCTTCTACGCAGAAGGGAGCAGAGGCGGCAGTCAAGCCTCTTCTCGTTCCTCATCACGTAGTCGCAACAGTTCAAGAAATTCAACTCCAGGCAGCAGTAGGGGAACTTCTCCTGCTAGAATGGCTGGCAATGGCGGTGATGCTGCTCTTGCTTTGCTGCTGCTTGACAGATTGAACCAGCTTGAGAGCAAAATGTCTGGTAAAGGCCAACAACAACAAGGCCAAACTGTCACTAAGAAATCTGCTGCTGAGGCTTCTAAGAAGCCTCGGCAAAAACGTACTGCCACTAAAGCATACAATGTAACACAAGCTTTCGGCAGACGTGGTCCAGAACAAACCCAAGGAAATTTTGGGGACCAGGAACTAATCAGACAAGGAACTGATTACAAACATTGGCCGCAAATTGCACAATTTGCCCCCAGCGCTTCAGCGTTCTTCGGAATGTCGCGCATTGGCATGGAAGTCACACCTTCGGGAACGTGGTTGACCTACACAGGTGCCATCAAATTGGATGACAAAGATCCAAATTTCAAAGATCAAGTCATTTTGCTGAATAAGCATATTGACGCATACAAAACATTCCCACCAACAGAGCCTAAAAAGGACAAAAAGAAGAAGGCTGATGAAACTCAAGCCTTACCGCAGAGACAGAAGAAACAGCAAACTGTGACTCTTCTTCCTGCTGCAGATTTGGATGATTTCTCCAAACAATTGCAACAATCCATGAGCAGTGCTGACTCAACTCAGGCCTAAACTCATGCAGACCACACAAGGCAGATGGGCTATATAAACGTTTTCGCTTTTCCGTTTACGATATATAGTCTACTCTTGTGCAGAATGAATTCTCGTAACTACATAGCACAAGTAGATGTAGTTAACTTTAATCTCACATAGCAATCTTTAATCAGTGTGTAACATTAGGGAGGACTTGAAAGAGCCACCACATTTTCACCGAGGCCACGCGGAGTACGATCGAGTGTACAGTGAACAATGCTAGGGAGAGCTGCCTATATGGAAGAGCCCTAATGTGTAAAATTAATTTTAGTAGTGCTATCCCCATGTGATTTTAATAGCTTCTTAGGAGAATGACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA']
-        ]
-        # 0-based gene coordinates
-        # from, to, name, within gene codon offset (to deal with ORF1a/b overlap)
-        self.gene_coordinates = [[265, 13482, 'ORF1a', 0],
-                                 [13467, 21554, 'ORF1b', -1],
-                                 [21562, 25383, 'S', 0],
-                                 [25392, 26219, 'ORF3a', 0],
-                                 [26244, 26471, 'E', 0],
-                                 [26522, 27190, 'M', 0],
-                                 [27201, 27386, 'ORF6', 0],
-                                 [27393, 27758, 'ORF7a', 0],
-                                 [27893, 28258, 'ORF8', 0],
-                                 [28273, 29532, 'N', 0],
-                                 [29557, 29673, 'ORF10', 0]]
-        self.score_matrix_ = BioExt.scorematrices.DNA95.load()
-        if summary_json is not None:
-            self.summary_json = summary_json
-        if annotation_json is not None:
-            self.annotation_json = annotation_json
-        try:
-            if arguments.summary_input:
-                with open(arguments.summary_input) as fh:
-                    self.summary_json = json.load(fh)
-        except Exception:
-            pass
-        try:
-            if arguments.annotation_input:
-                with open(arguments.annotation_input) as fh:
-                    self.annotation_json = json.load(fh)
-        except Exception:
-            pass
-        self.gene = self.arguments.gene
-        self._get_incoming_labels()
-        self._get_map()
-
-    def summary(self):
-        try:
-            if self.summary_json is not None:
-                if self.gene not in self.summary_json:
-                    self.summary_json[self.gene] = {}
-            if self.cfel is not None:
-                self.cfel_summary()
-            if self.relax is not None:
-                self.relax_summary()
-            if self.busted is not None:
-                self.busted_summary()
-            if self.slac is not None:
-                self.slac_summary()
-            if self.fel is not None:
-                self.fel_summary()
-            if self.meme is not None:
-                self.meme_summary()
-            if self.meme_full is not None:
-                self.meme_full_summary()
-            if self.prime is not None:
-                self.prime_summary()
-            if self.fade is not None:
-                self.fade_summary()
-            if self.bgm is not None:
-                self.bgm_summary()
-        except Exception:
-            if self.gene:
-                del self.summary_json[self.gene]
-                if self.gene in self.annotation_json:
-                    del self.annotation_json[self.gene]
-            raise
-        return self.annotation_json, self.summary_json
-
-    def cfel_summary(self):
-        self.cfel = self._load_json(self.arguments.cfel)
-        if self.cfel is None:
-            return
-        node_tags = {}
-        _ = newick_parser(self.cfel['input']['trees']['0'], False, node_tags, self.cfel, self.arguments, self.labels)['json']
-        if self.summary_json is not None:
-            omegas = {}
-            T = {}
-            for k in [[k.split('*')[1], v[0][0]] for k, v in self.cfel['fits']['Global MG94xREV']['Rate Distributions'].items()]:
-                if k[0] != 'background':
-                    self.test_map[k[0]] = 'Test'
-                else:
-                    self.test_map[k[0]] = 'Reference'
-                omegas[k[0]] = k[1]
-                T[k[0]] = 0.
-            for branch, nt in (self.cfel['tested']['0']).items():
-                if branch not in node_tags:
-                    node_tags[branch] = []
-                info = self.cfel['branch attributes']['0'][branch]
-                if nt != '':
-                    T[nt] += info['Global MG94xREV']
-                node_tags[branch].append(info['Global MG94xREV'])
-            self.summary_json[self.gene]['rates'] = {'mean-omega': omegas, 'T': T}
-        beta_indices = []
-        p_indices = []
-        subs = []
-        for i, tag in enumerate(self.cfel['MLE']['headers']):
-            if tag[0].find('beta') == 0:
-                beta_indices.append([i, re.split(r'\(|\)', tag[0])[1]])
-            elif tag[0].find('P-value') == 0:
-                p_indices.append([i, re.split(r'\(|\)|for ', tag[0])[1]])
-            elif tag[0].find('subs') == 0:
-                subs.append([i, re.split(r'\(|\)', tag[0])[1]])
-        for i, row in enumerate(self.cfel['MLE']['content']['0']):
-            if self.annotation_json is not None and len(self.ref_map):  # if this is specified, write everything out
-                gs = self._get_genomic_annotation(i)
-                if gs[0] >= 0:
-                    self.include_in_annotation[i] = gs[0]
-                    self.annotation_json[gs[0]] = {
-                        'G': gs[1],
-                        'S': gs[2],
-                        'index': i,
-                        'bCFEL': {
-                            'p': row[4],
-                            'a': row[0],
-                            'b': self._make_report_dict(row, beta_indices),
-                            'pi': self._make_report_dict(row, p_indices),
-                            'pp': row[-2],
-                            's': self._make_report_dict(row, subs),
-                            'q': row[-3]
-                        }
-                    }
-            if row[-4] <= self.arguments.pvalue:
-                self.site_reports[i] = {'cfel': row}
-
-    def relax_summary(self):
-        self.relax = self._load_json(self.arguments.relax)
-        if self.relax is None:
-            return
-        if self.summary_json is not None:
-            relax_d = {}
-        for r, rr in self.summary_json[self.gene]['rates']['mean-omega'].items():
-            relax_d[r] = []
-            for ignored, rd in self.relax['fits']['RELAX alternative']['Rate Distributions'][self.test_map[r]].items():
-                relax_d[r].append(rd)
-        self.summary_json[self.gene]['rates']['relax'] = relax_d
-        self.summary_json[self.gene]['relax'] = {
-            'p': self.relax['test results']['p-value'],
-            'K': self.relax['test results']['relaxation or intensification parameter']
-        }
-
-    def busted_summary(self):
-        self.busted = self._load_json(self.arguments.busted)
-        if self.busted is None:
-            return
-        if self.summary_json is not None:
-            self.summary_json[self.gene]['rates']['busted'] = self.busted['fits']['Unconstrained model']['Rate Distributions']
-            self.summary_json[self.gene]['busted'] = {'p': self.busted['test results']['p-value'], }
-
-    def slac_summary(self):
-        self.slac = self._load_json(self.arguments.slac)
-        if self.slac is None:
-            return
-
-        def def_value():
-            return defaultdict(int)
-        compressed_subs = {}
-        node_tags = {}
-        the_tree = newick_parser(self.slac['input']['trees']['0'], False, node_tags, self.slac, self.arguments, self.labels)
-        root_node = None
-        if self.summary_json is not None:
-            for branch, info in self.slac['branch attributes']['0'].items():
-                if branch in node_tags:
-                    node_tags[branch].append(info['Global MG94xREV'])
-                else:
-                    root_node = branch
-            self.summary_json[self.gene]['tree'] = self.slac['input']['trees']['0']
-            self.summary_json[self.gene]['tree_tags'] = node_tags
-        if len(self.include_in_annotation):
-            for i in self.include_in_annotation:
-                report = self.annotation_json[self.include_in_annotation[i]]
-                counts_codon_site = {}
-                counts_aa_site = {}
-                gs = self._get_genomic_annotation(i)
-                if gs[0] >= 0:
-                    self.labels[root_node] = self.slac['branch attributes']['0'][root_node]['codon'][0][i]
-                    try:
-                        traverse_tree_in_order(the_tree, self.labels, self.slac['branch attributes']['0'], i, None, root_node)
-                    except Exception:
-                        pass
-                    compressed_subs[gs[0]] = self.labels
-                for k in set([k[0] for k in node_tags.values()]):
-                    if len(k):
-                        counts_codon_site[k] = defaultdict(int)
-                        counts_aa_site[k] = defaultdict(int)
-                for branch, tag in node_tags.items():
-                    if len(tag[0]) > 0 and tag[1] is False:
-                        codon = self.slac['branch attributes']['0'][branch]['codon'][0][i]
-                        aa = self.slac['branch attributes']['0'][branch]['amino-acid'][0][i]
-                        counts_codon_site[tag[0]][codon] += 1
-                        counts_aa_site[tag[0]][aa] += 1
-                report['cdn'] = counts_codon_site
-                report['aa'] = counts_aa_site
-            self.summary_json[self.gene]['subs'] = compressed_subs
-
-    def fel_summary(self):
-        self.fel = self._load_json(self.arguments.fel)
-        if None in [self.fel, self.cfel]:
-            return
-        for i, row in enumerate(self.fel['MLE']['content']['0']):
-            if i in self.include_in_annotation:
-                self.annotation_json[self.include_in_annotation[i]]['bFEL'] = {'a': row[0], 'b': row[1], 'p': row[4]}
-            if i in self.site_reports or row[4] <= self.arguments.pvalue and row[1] > row[0]:
-                if i in self.site_reports:
-                    self.site_reports[i]['fel'] = row
-                else:
-                    self.site_reports[i] = {'fel': row,
-                                            'cfel': self.cfel['MLE']['content']['0'][i]}
-
-    def meme_summary(self):
-        self.meme = self._load_json(self.arguments.meme)
-        if None in [self.fel, self.cfel, self.meme]:
-            return
-        for i, row in enumerate(self.meme['MLE']['content']['0']):
-            if i in self.include_in_annotation:
-                self.annotation_json[self.include_in_annotation[i]]['bMEME'] = {
-                    'p': row[6],
-                    'a': row[0],
-                    'b+': row[3],
-                    'w+': row[4],
-                    'b-': row[1],
-                    'w-': row[2],
-                    'br': row[7]
-                }
-            if i in self.site_reports or row[6] <= self.arguments.pvalue:
-                if i in self.site_reports:
-                    self.site_reports[i]['meme'] = row
-                else:
-                    self.site_reports[i] = {'meme': row,
-                                            'fel': self.fel['MLE']['content']['0'][i],
-                                            'cfel': self.cfel['MLE']['content']['0'][i]}
-        # annotate branches with EBF support
-        for n, info in self.meme['branch attributes']['0'].items():
-
-            if n in self.summary_json[self.gene]['tree_tags']:
-                sig_sites = []
-                for tag, ebf in info.items():
-                    bits = tag.split(' ')
-                    if len(bits) >= 4 and ebf >= 100:
-                        sig_sites.append(self.include_in_annotation[int(bits[2]) - 1])
-                self.summary_json[self.gene]['tree_tags'][n].append(sig_sites)
-
-    def meme_full_summary(self):
-        self.meme_full = self._load_json(self.arguments.meme_full)
-        if None in [self.fel, self.cfel, self.meme, self.meme_full]:
-            return
-        for i, row in enumerate(self.meme_full['MLE']['content']['0']):
-            if i in self.include_in_annotation:
-                self.annotation_json[self.include_in_annotation[i]]['lMEME'] = {
-                    'p': row[6],
-                    'a': row[0],
-                    'b+': row[3],
-                    'w+': row[4],
-                    'b-': row[1],
-                    'w-': row[2],
-                    'br': row[7]
-                }
-            if i in self.site_reports or row[6] <= self.arguments.pvalue:
-                if i in self.site_reports:
-                    self.site_reports[i]['full-meme'] = row
-                else:
-                    self.site_reports[i] = {'full-meme': row,
-                                            'meme': self.meme['MLE']['content']['0'][i],
-                                            'fel': self.fel['MLE']['content']['0'][i],
-                                            'cfel': self.cfel['MLE']['content']['0'][i]}
-        # annotate branches with EBF support
-        for n, info in self.meme_full['branch attributes']['0'].items():
-            if n in self.summary_json[self.gene]['tree_tags']:
-                sig_sites = []
-                for tag, ebf in info.items():
-                    bits = tag.split(' ')
-                    if len(bits) >= 4 and ebf >= 100:
-                        sig_sites.append(self.include_in_annotation[int(bits[2]) - 1])
-                self.summary_json[self.gene]['tree_tags'][n].append(sig_sites)
-
-    def prime_summary(self):
-        self.prime = self._load_json(self.arguments.prime)
-        if self.prime is None:
-            return
-        if self.summary_json is not None:
-            h = self.prime['MLE']['headers']
-            self.summary_json[self.gene]['prime-properties'] = [h[k][1].replace('Importance for ', '') for k in range(6, len(h), 3)]
-        if len(self.include_in_annotation):
-            for i in self.include_in_annotation:
-                report = self.annotation_json[self.include_in_annotation[i]]
-                prime_info = self.prime['MLE']['content']['0'][i]
-                if prime_info:
-                    report['prime'] = {
-                        'p': [prime_info[k] for k in ([5, ] + list(range(7, len(prime_info), 3)))],
-                        'lambda': [prime_info[k] for k in range(6, len(prime_info), 3)]
-                    }
-                else:
-                    report['prime'] = None  # invariable
-
-    def fade_summary(self):
-        self.fade = self._load_json(self.arguments.fade)
-        if self.fade is None:
-            return
-        if len(self.include_in_annotation):
-            for i in self.include_in_annotation:
-                report = self.annotation_json[self.include_in_annotation[i]]
-                report['fade'] = {}
-                for residue, info in self.fade['MLE']['content'].items():
-                    # Skip anything past the end of this section.
-                    if i >= len(info['0']):
-                        continue
-                    if len(residue) == 1:
-                        report['fade'][residue] = {'rate': info['0'][i][1], 'BF': info['0'][i][-1]}
-
-    def bgm_summary(self):
-        self.bgm = self._load_json(self.arguments.bgm)
-        if self.bgm is None:
-            return
-        if self.summary_json is not None:
-            try:
-                self.summary_json[self.gene]['bgm'] = self.bgm['MLE']['content']
-            except KeyError:
-                self.summary_json[self.gene]['bgm'] = []
-
-    def _load_json(self, filename):
-        if filename is None:
-            return None
-        try:
-            with open(filename, 'r') as fh:
-                return json.load(fh)
-        except Exception:
-            raise
-
-    def _get_map(self):
-        for seq_record in SeqIO.parse(self.arguments.combined, 'fasta'):
-            seq_id = seq_record.description
-            ref_seq_re = re.compile(self.arguments.name)
-            if ref_seq_re.search(seq_id):
-                ref_seq = str(seq_record.seq).upper()
-                self.aligned_str = None
-
-                def output_record(x):
-                    listified_input = list(x)
-                    if len(listified_input) == 1:
-                        self.aligned_str = listified_input[0]
-
-                def ignore_record(x):
-                    pass
-
-                for s in self.ref_genes:
-                    _align_par(SeqRecord(Seq(s[1]), id=s[0]), [SeqRecord(Seq(ref_seq), id='ref')],
-                               self.score_matrix_, False, False, 0.8, ignore_record, output_record)
-                    if (self.aligned_str is not None):
-                        break
-
-                self.ref_map = self.aligned_str.seq.strip('-')
-                c = 0
-                i = 0
-                map_to_genome = []
-                while i < len(self.ref_map):
-                    if self.ref_map[i:i + 3] != '---':
-                        map_to_genome.append(i)
-                    i += 3
-                i = 0
-                c = 0
-                while i < len(ref_seq):
-                    if ref_seq[i:i + 3] != '---':
-                        self.ref_seq_map.append(map_to_genome[c // 3] + self.aligned_str.annotations['position'])
-                        c += 3
-                    else:
-                        self.ref_seq_map.append(-1)
-                    i += 3
-        if self.summary_json is not None:
-            if self.gene not in self.summary_json:
-                self.summary_json[self.gene] = dict()
-            self.summary_json[self.gene]['map'] = self.ref_seq_map
-
-    def _make_report_dict(self, row, indices):
-        result = {}
-        for i, t in indices:
-            result[t] = row[i]
-        return result
-
-    def _get_genomic_annotation(self, site):
-        genomic_site_coord = -1
-        gene_name = ''
-        gene_site = -1
-        if len(self.ref_seq_map):
-            genomic_site_coord = self.ref_seq_map[site]
-            if genomic_site_coord < 0:
-                gene_site = 'Not in SC2 (deletion)'
-            else:
-                gene_name = None
-                for k in self.gene_coordinates:
-                    if k[0] <= genomic_site_coord and k[1] > genomic_site_coord:
-                        genomic_site = ((genomic_site_coord + k[3]) - k[0]) // 3
-                        gene_name = k[2]
-                        gene_site = genomic_site + 1
-                        break
-                if gene_name is None:
-                    gene_name = 'Not mapped'
-        else:
-            gene_name = 'N/A'
-        return (genomic_site_coord, gene_name, gene_site)
-
-    def _get_incoming_labels(self):
-        json_data = self._load_json(self.arguments.labels)
-        self.incoming_labels = json_data
-
-
-def traverse_tree_in_order(node, labels, slac_data, i, parent_tag, root):
-    node_tag = None
-    if 'name' not in node:
-        nn = root
-    else:
-        nn = root if node["name"] == 'root' else node["name"]
-    if nn in slac_data:
-        node_tag = slac_data[nn]["codon"][0][i]
-        if (parent_tag != node_tag):
-            labels[nn] = node_tag
-            labels[node["name"]] = node_tag
-    if "children" in node:
-        for c in node["children"]:
-            traverse_tree_in_order(c, labels, slac_data, i, node_tag, root)
-
-
-def newick_parser(nwk_str, bootstrap_values, track_tags, json_map, import_settings, tags):
-    clade_stack = []
-    automaton_state = 0
-    current_node_name = ""
-    current_node_attribute = ""
-    current_node_annotation = ""
-    quote_delimiter = None
-    name_quotes = {
-        "'": 1,
-        '"': 1
-    }
-
-    def add_new_tree_level():
-        new_level = {
-            "name": None
-        }
-        the_parent = clade_stack[len(clade_stack) - 1]
-        if "children" not in the_parent:
-            the_parent["children"] = []
-
-        clade_stack.append(new_level)
-        the_parent["children"].append(clade_stack[len(clade_stack) - 1])
-        clade_stack[len(clade_stack) - 1]["original_child_order"] = len(the_parent["children"])
-
-    def finish_node_definition():
-        nonlocal current_node_name
-        nonlocal current_node_annotation
-        nonlocal current_node_attribute
-
-        this_node = clade_stack.pop()
-        if (bootstrap_values and "children" in this_node):
-            this_node["bootstrap_values"] = current_node_name
-        else:
-            this_node["name"] = current_node_name
-
-        this_node["attribute"] = current_node_attribute
-        this_node["annotation"] = current_node_annotation
-
-        try:
-
-            if 'children' not in this_node:
-                node_tag = import_settings.default_tag
-                if json_map:
-                    tn = json_map["branch attributes"]["0"][this_node["name"]]
-                else:
-                    tn = this_node
-                nn = tn["original name"] if "original name" in tn else tn["name"]
-                for k, v in tags.items():
-                    if nn.find(k) >= 0:
-                        node_tag = v
-                        break
-            else:
-                counts = {}
-                node_tag = ""
-                for n in this_node['children']:
-                    counts[n["tag"]] = 1 + (counts[n["tag"]] if n["tag"] in counts else 0)
-                if len(counts) == 1:
-                    node_tag = list(counts.keys())[0]
-
-            this_node["tag"] = node_tag
-        except Exception as e:
-            pass
-            print(e)
-
-        if track_tags is not None:
-            track_tags[this_node["name"]] = [this_node["tag"], 'children' in this_node]
-
-        current_node_name = ""
-        current_node_attribute = ""
-        current_node_annotation = ""
-
-    def generate_error(location):
-        return {
-            'json': None,
-            'error':
-                "Unexpected '%s' in '%s[ERROR HERE]%s'" % (nwk_str[location], nwk_str[location - 20:location + 1], nwk_str[location + 1:location + 20])
-        }
-
-    tree_json = {
-        "name": "root"
-    }
-
-    clade_stack.append(tree_json)
-
-    space = re.compile(r"\s")
-
-    for char_index in range(len(nwk_str)):
-        try:
-            current_char = nwk_str[char_index]
-            if automaton_state == 0:
-                # look for the first opening parenthesis
-                if (current_char == "("):
-                    add_new_tree_level()
-                    automaton_state = 1
-            elif automaton_state == 1 or automaton_state == 3:
-                # case 1: // name
-                # case 3: { // branch length
-                # reading name
-                if (current_char == ":"):
-                    automaton_state = 3
-                elif current_char == "," or current_char == ")":
-                    try:
-                        finish_node_definition()
-                        automaton_state = 1
-                        if (current_char == ","):
-                            add_new_tree_level()
-                    except Exception as e:
-                        return generate_error(char_index)
-                        print(e)
-
-                elif (current_char == "("):
-                    if len(current_node_name) > 0:
-                        return generate_error(char_index)
-                    else:
-                        add_new_tree_level()
-
-                elif (current_char in name_quotes):
-                    if automaton_state == 1 and len(current_node_name) == 0 and len(current_node_attribute) == 0 and len(current_node_annotation) == 0:
-                        automaton_state = 2
-                        quote_delimiter = current_char
-                        continue
-                    return generate_error(char_index)
-                else:
-                    if (current_char == "["):
-                        if len(current_node_annotation):
-                            return generate_error(char_index)
-                        else:
-                            automaton_state = 4
-                    else:
-                        if (automaton_state == 3):
-                            current_node_attribute += current_char
-                        else:
-                            if (space.search(current_char)):
-                                continue
-                            if (current_char == ""):
-                                char_index = len(nwk_str)
-                                break
-                            current_node_name += current_char
-            elif automaton_state == 2:
-                # inside a quoted expression
-                if (current_char == quote_delimiter):
-                    if (char_index < len(nwk_str - 1)):
-                        if (nwk_str[char_index + 1] == quote_delimiter):
-                            char_index += 1
-                            current_node_name += quote_delimiter
-                            continue
-
-                    quote_delimiter = 0
-                    automaton_state = 1
-                    continue
-                else:
-                    current_node_name += current_char
-            elif automaton_state == 4:
-                # inside a comment / attribute
-                if (current_char == "]"):
-                    automaton_state = 3
-                else:
-                    if (current_char == "["):
-                        return generate_error(char_index)
-                    current_node_annotation += current_char
-        except Exception as e:
-            return generate_error(char_index)
-            print(e)
-
-    if (len(clade_stack) != 1):
-        return generate_error(len(nwk_str) - 1)
-
-    if (len(current_node_name)):
-        tree_json['name'] = current_node_name
-
-    return {
-        'json': tree_json,
-        'error': None
-    }
-
-
-if __name__ == '__main__':
-    parser = argparse.ArgumentParser(description='Summarize selection analysis results.')
-    parser.add_argument('--combined', help='Combined reference and query alignment from TN-93', required=False, type=str)
-    parser.add_argument('--pvalue', help='p-value to use', required=False, type=float, default=0.05)
-    parser.add_argument('--gene', help='Name of the gene or sequence being analyzed', required=False, type=str)
-    parser.add_argument('--labels', help='JSON file with labels', required=False, type=str)
-    parser.add_argument('--annotation-output', help='Write a JSON file with site annotations', required=True, type=str)
-    parser.add_argument('--summary-output', help='Write a JSON file here segment annotations', required=True, type=str)
-    parser.add_argument('--annotation-inputs', help='Comma-separated list of site annotation files to merge', required=False, type=str)
-    parser.add_argument('--summary-inputs', help='Comma-separated list of segment annotation files to merge', required=False, type=str)
-    parser.add_argument('--default-tag', help='Default name for sequences that have no explicit label', required=False, type=str, default='Reference')
-    parser.add_argument('--name', help='The sequence ID to highlight', required=False, default='MN908947')
-    parser.add_argument('--mode', help='Operation mode, generate a summary or merge multiple summaries', type=str, choices=['summary', 'merge'], default='summary')
-    parser.add_argument('--relax', help='Path to RELAX.json file', required=False, type=str)
-    parser.add_argument('--busted', help='Path to BUSTED.json file', required=False, type=str)
-    parser.add_argument('--slac', help='Path to SLAC.json file', required=False, type=str)
-    parser.add_argument('--fel', help='Path to FEL.json file', required=False, type=str)
-    parser.add_argument('--cfel', help='Path to CFEL.json file', required=False, type=str)
-    parser.add_argument('--meme', help='Path to MEME.json file', required=False, type=str)
-    parser.add_argument('--meme-full', help='Path to MEME-full.json file', dest='meme_full', required=False, type=str)
-    parser.add_argument('--prime', help='Path to PRIME.json file', required=False, type=str)
-    parser.add_argument('--fade', help='Path to FADE.json file', required=False, type=str)
-    parser.add_argument('--bgm', help='Path to BGM.json file', required=False, type=str)
-    arguments = parser.parse_args()
-    if arguments.mode == 'summary':
-        analyzer = HyPhySummary(arguments)
-        annotation_json, summary_json = analyzer.summary()
-        if annotation_json is not None:
-            with open(arguments.annotation_output, 'w') as fh:
-                json.dump(annotation_json, fh, indent=1)
-        if summary_json is not None:
-            with open(arguments.summary_output, 'w') as fh:
-                json.dump(summary_json, fh, indent=1)
-    else:
-        summary = {}
-        annotation = {}
-        for filename in arguments.annotation_inputs.split(','):
-            with open(filename, 'r') as fh:
-                annotation.update(json.load(fh))
-        for filename in arguments.summary_inputs.split(','):
-            with open(filename, 'r') as fh:
-                summary.update(json.load(fh))
-        with open(arguments.annotation_output, 'w') as fh:
-            json.dump(annotation, fh, indent=1)
-        with open(arguments.summary_output, 'w') as fh:
-            json.dump(summary, fh, indent=1)
-    exit(0)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/infer_stasis_clusters.py	Wed Mar 11 11:14:01 2026 +0000
@@ -0,0 +1,171 @@
+#!/usr/bin/env python3
+"""
+B-STILL Stasis Cluster Inference Tool
+====================================
+Identifies regional footprints of extreme purifying selection (stasis) in B-STILL
+JSON results using a FWER-controlled Hypergeometric Scan Statistic.
+
+Usage:
+    python3 infer_stasis_clusters.py input.json --ebf 10 --permutations 10000 --output results.json
+"""
+
+import argparse
+import json
+import sys
+import time
+
+import numpy as np
+from scipy.stats import hypergeom
+
+
+def get_sf_optimized(n, d, L, K, cache):
+    """Retrieves or computes Hypergeometric Survival Function value."""
+    key = (n, d)
+    if key not in cache:
+        cache[key] = hypergeom.sf(n - 1, L, K, d)
+    return cache[key]
+
+
+def scan_intervals(indices, L, K, max_size, sf_cache, threshold=None):
+    """
+    Scans all possible intervals [i, j] anchored by stasis events.
+    Returns the minimum p-value if threshold is None, else returns all significant segments.
+    """
+    best_p = 1.0
+    segments = []
+    num_events = len(indices)
+
+    for n in range(3, min(max_size + 1, num_events + 1)):
+        for i in range(num_events - n + 1):
+            d = indices[i + n - 1] - indices[i] + 1
+            p = get_sf_optimized(n, d, L, K, sf_cache)
+
+            if threshold is None:
+                if p < best_p:
+                    best_p = p
+            else:
+                if p <= threshold:
+                    segments.append({
+                        "start": int(indices[i] + 1),
+                        "end": int(indices[i + n - 1] + 1),
+                        "p_value": p,
+                        "k": n,
+                        "d": int(d)
+                    })
+
+    return best_p if threshold is None else segments
+
+
+def merge_segments(segments, merge_dist=15):
+    """Merges overlapping or nearby significant segments."""
+    if not segments:
+        return []
+    segments.sort(key=lambda x: x['start'])
+
+    merged = []
+    curr = segments[0]
+    for next_s in segments[1:]:
+        if next_s['start'] <= curr['end'] + merge_dist:
+            curr['end'] = max(curr['end'], next_s['end'])
+            curr['p_value'] = min(curr['p_value'], next_s['p_value'])
+            curr['d'] = curr['end'] - curr['start'] + 1
+        else:
+            merged.append(curr)
+            curr = next_s
+    merged.append(curr)
+    return merged
+
+
+def main():
+    parser = argparse.ArgumentParser(description="Infer stasis clusters from B-STILL JSON.")
+    parser.add_argument("input", help="Path to B-STILL JSON result file")
+    parser.add_argument("--ebf", type=float, default=10.0, help="EBF threshold for defining stasis sites (default: 10.0)")
+    parser.add_argument("--permutations", type=int, default=10000, help="Number of permutations for FWER control (default: 10000)")
+    parser.add_argument("--alpha", type=float, default=0.05, help="Family-wise error rate threshold (default: 0.05)")
+    parser.add_argument("--max-cluster", type=int, default=30, help="Maximum number of stasis sites per interval scan (default: 30)")
+    parser.add_argument("--merge", type=int, default=15, help="Distance in codons to merge adjacent clusters (default: 15)")
+    parser.add_argument("--output", help="Path to save results in JSON format")
+
+    args = parser.parse_args()
+
+    try:
+        with open(args.input, "r") as f:
+            data = json.load(f)
+    except Exception as e:
+        print("Error loading JSON: {0}".format(e))
+        sys.exit(1)
+
+    sites = data.get("MLE", {}).get("content", {}).get("0", [])
+    ebfs = [s[12] if (len(s) > 12 and isinstance(s[12], (int, float))) else 0 for s in sites]
+    L = len(ebfs)
+
+    if L < 10:
+        print("Alignment too short for cluster analysis.")
+        sys.exit(0)
+
+    stasis_indices = np.array([i for i, val in enumerate(ebfs) if val >= args.ebf])
+    K = len(stasis_indices)
+
+    print("--- B-STILL Cluster Inference ---")
+    print("Input: {0}".format(args.input))
+    print("Gene Length (L): {0} codons".format(L))
+    print("Stasis Sites (K): {0} (EBF >= {1})".format(K, args.ebf))
+
+    if K < 3:
+        print("Insufficient stasis sites to form clusters (minimum 3 required).")
+        sys.exit(0)
+
+    print("Running {0} permutations for FWER control...".format(args.permutations))
+    null_min_ps = []
+    all_positions = np.arange(L)
+    sf_cache = {}
+
+    start_time = time.time()
+    for i in range(args.permutations):
+        if i > 0 and i % 1000 == 0:
+            elapsed = time.time() - start_time
+            print("  Processed {0} permutations... ({1:.1f} per sec)".format(i, i / elapsed))
+        shuffled = sorted(np.random.choice(all_positions, K, replace=False))
+        min_p = scan_intervals(shuffled, L, K, args.max_cluster, sf_cache)
+        null_min_ps.append(min_p)
+
+    crit_p = np.percentile(null_min_ps, args.alpha * 100)
+    print("Gene-specific Critical P-value (FWER {0}): {1:.2e}".format(args.alpha, crit_p))
+
+    print("Scanning observed sequence for significant clusters...")
+    raw_segments = scan_intervals(stasis_indices, L, K, args.max_cluster, sf_cache, threshold=crit_p)
+
+    final_clusters = merge_segments(raw_segments, merge_dist=args.merge)
+
+    for c in final_clusters:
+        c['k'] = sum(1 for idx in stasis_indices if c['start'] <= idx + 1 <= c['end'])
+
+    print("\nFound {0} significant stasis clusters:".format(len(final_clusters)))
+    if final_clusters:
+        print("\nLegend:")
+        print("  k : Number of high-confidence stasis sites within the cluster")
+        print("  d : Total span of the cluster in codons")
+        print("\n{:<8} | {:<8} | {:<5} | {:<5} | {:<10}".format("Start", "End", "k", "d", "P-value"))
+        print("-" * 45)
+        for c in final_clusters:
+            print("{:<8} | {:<8} | {:<5} | {:<5} | {:.2e}".format(c['start'], c['end'], c['k'], c['d'], c['p_value']))
+
+    if args.output:
+        output_data = {
+            "input_file": args.input,
+            "parameters": vars(args),
+            "summary": {
+                "gene_length": L,
+                "total_stasis_sites": K,
+                "critical_p_value": float(crit_p),
+                "num_clusters": len(final_clusters)
+            },
+            "clusters": final_clusters
+        }
+        with open(args.output, "w") as f:
+            json.dump(output_data, f, indent=4)
+        print("\nDetailed results saved to {0}".format(args.output))
+
+
+if __name__ == "__main__":
+    main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/bstill-in1.json	Wed Mar 11 11:14:01 2026 +0000
@@ -0,0 +1,1880 @@
+{
+  "MLE": {
+    "content": {
+      "0": [
+        [
+          2.37190144157317,
+          0.1886402906758332,
+          0.003967400746549269,
+          0.03170401941783556,
+          0.1405070629863407,
+          0.2478544806315437,
+          0.155938987532467,
+          0,
+          0,
+          1.668673069222721,
+          0.9606238475229101,
+          1.774898950889347,
+          1.224638397608354
+        ],
+        [
+          1.562666730096422,
+          0.7176422560937019,
+          0,
+          9.089104346594827e-07,
+          0,
+          0.01450154962095004,
+          0.2139088787662019,
+          0,
+          0,
+          0,
+          2.666666171615278e-05,
+          0,
+          0.05468540563699053
+        ],
+        [
+          0.6841064654452979,
+          0.6942845364725866,
+          0,
+          0.05269358336084695,
+          0,
+          0.07725223791333098,
+          0.5503080822201034,
+          0,
+          0,
+          0,
+          1.631978457912503,
+          0,
+          0.311129391337898
+        ],
+        [
+          1.603530309019734,
+          0.7640979882187913,
+          0,
+          9.480689290490966e-08,
+          0,
+          0.0129282189776549,
+          0.2196957351152485,
+          0,
+          0,
+          0,
+          2.781551610416608e-06,
+          0,
+          0.0486746608276061
+        ],
+        [
+          0.7745431936738028,
+          0.2481102774238383,
+          0.005522827981575777,
+          0.05017493786864266,
+          0.1167934725144055,
+          0.3301340073712549,
+          0.2680133904625786,
+          0,
+          0,
+          2.326512750426494,
+          1.549852564474649,
+          1.435734346731007,
+          1.831535344411821
+        ],
+        [
+          0.7291297549930137,
+          0.2232251727035806,
+          0.006100143264891383,
+          0.05237454314416388,
+          0.1226528460847873,
+          0.3565428751858024,
+          0.2618162231862851,
+          0,
+          0,
+          2.57120169474055,
+          1.62155131319508,
+          1.51783284915089,
+          2.059231243604498
+        ],
+        [
+          0.5299477744525759,
+          0.3199604238306135,
+          0.006259406053599633,
+          0.06427776426846346,
+          0.09952410556612061,
+          0.3591418826984177,
+          0.3634880853401729,
+          0,
+          0,
+          2.638753567868953,
+          2.015398729009674,
+          1.199979925906953,
+          2.08265405394555
+        ],
+        [
+          0.7850622182406316,
+          0.208593049315937,
+          0.006006859903783282,
+          0.04987146289298329,
+          0.1278017467009314,
+          0.3521879280501232,
+          0.2426664534291802,
+          0,
+          0,
+          2.531645281107513,
+          1.53998649735195,
+          1.590887120603373,
+          2.020404836198384
+        ],
+        [
+          0.7353234573836737,
+          0.7975030154821481,
+          0,
+          0.05027743242304463,
+          0,
+          0.06341157982977386,
+          0.5594116332078475,
+          0,
+          0,
+          0,
+          1.55318611910382,
+          0,
+          0.2516128169853178
+        ],
+        [
+          0.7745431936738028,
+          0.2481102774238383,
+          0.005522827981575777,
+          0.05017493786864266,
+          0.1167934725144055,
+          0.3301340073712549,
+          0.2680133904625786,
+          0,
+          0,
+          2.326512750426494,
+          1.549852564474649,
+          1.435734346731007,
+          1.831535344411821
+        ],
+        [
+          1.368503706104576,
+          1.018443324506961,
+          0,
+          0.0001254498320607177,
+          0,
+          0.01193786625873712,
+          0.3202018713208712,
+          0,
+          0,
+          0,
+          0.003681050177071567,
+          0,
+          0.04490093906100618
+        ],
+        [
+          1.891512511757744,
+          0.6991376328075749,
+          0,
+          1.751923240630118e-08,
+          0,
+          0.01165814151829132,
+          0.1681638544538555,
+          0,
+          0,
+          0,
+          5.139989704715699e-07,
+          0,
+          0.04383642254167481
+        ],
+        [
+          2.431834329421355,
+          1.009562872010422,
+          0,
+          1.221441266698392e-16,
+          0,
+          0.0006364569300359917,
+          0.07920772759973152,
+          0,
+          0,
+          0,
+          3.583601884005705e-15,
+          0,
+          0.002366783255211392
+        ],
+        [
+          1.806723917313566,
+          0.2252028533994014,
+          0,
+          6.866469248832134e-08,
+          0.1375988453962431,
+          0.08154555935253366,
+          0.05278784386842107,
+          0,
+          0,
+          0,
+          2.01456218134058e-06,
+          1.732300574702625,
+          0.3299557252356888
+        ],
+        [
+          1.939176483317792,
+          0.2458213387285422,
+          0,
+          1.738579826234006e-07,
+          0.1335892393732069,
+          0.07057009408407149,
+          0.05344616718308724,
+          0,
+          0,
+          0,
+          5.100842090286179e-06,
+          1.674038449258792,
+          0.2821740194676092
+        ],
+        [
+          1.701885160917155,
+          0.6692312861959405,
+          0,
+          2.830595641477326e-15,
+          0,
+          0.01418461389805017,
+          0.1813756977292657,
+          0,
+          0,
+          0,
+          8.304720128766762e-14,
+          0,
+          0.05347304277139552
+        ],
+        [
+          0.8544431959352744,
+          0.2818378160278725,
+          0.004820440754868181,
+          0.04684686890194468,
+          0.1105717971506182,
+          0.2963971057789578,
+          0.2714045638740059,
+          0,
+          0,
+          2.029196204717131,
+          1.441999328126967,
+          1.349743550722787,
+          1.565522493629649
+        ],
+        [
+          0.802168833121828,
+          0.6918901075329866,
+          0,
+          0.04741696195675961,
+          0,
+          0.07124222775246358,
+          0.5114463548262042,
+          0,
+          0,
+          0,
+          1.460420930116867,
+          0,
+          0.2850676929040508
+        ],
+        [
+          1.802078345646651,
+          0.2428033537468315,
+          0,
+          3.676167105058432e-12,
+          0.1328849202578949,
+          0.07926143754434137,
+          0.05783115701254503,
+          0,
+          0,
+          0,
+          1.07855528733406e-10,
+          1.663859881128573,
+          0.3199179312039991
+        ],
+        [
+          2.666449102656562,
+          0.2117849019831195,
+          0,
+          3.476039444085693e-24,
+          0.1526588335491243,
+          0.01700226120839039,
+          0.013658552843616,
+          0,
+          0,
+          0,
+          1.019839581347594e-22,
+          1.956056623117781,
+          0.06427870755262995
+        ],
+        [
+          0.6973625851918384,
+          0.6325643923885375,
+          0,
+          0.05200742974645888,
+          0,
+          0.0861883321503862,
+          0.52575217072186,
+          0,
+          0,
+          0,
+          1.609561684072903,
+          0,
+          0.3505134991058557
+        ],
+        [
+          0.7741835394458966,
+          1.146286320796753,
+          0,
+          0.04869915748102294,
+          0,
+          0.01302668396730367,
+          0.6537307097065768,
+          0,
+          0,
+          0,
+          1.501933603136475,
+          0,
+          0.04905027386912096
+        ],
+        [
+          0.7838600108072267,
+          0.2177045440618246,
+          0.005876900197546548,
+          0.04988407979012211,
+          0.1250367284178624,
+          0.3463996143460703,
+          0.2485342821293646,
+          0,
+          0,
+          2.476548794279335,
+          1.540396551087343,
+          1.551549257849819,
+          1.969600159244391
+        ],
+        [
+          1.842678711965785,
+          0.6976549084016578,
+          0,
+          1.418250592402009e-06,
+          0,
+          0.01209147296000177,
+          0.172682714205385,
+          0,
+          0,
+          0,
+          4.161029139660306e-05,
+          0,
+          0.04548575896277397
+        ],
+        [
+          0.7850622182406316,
+          0.208593049315937,
+          0.006006859903783282,
+          0.04987146289298329,
+          0.1278017467009314,
+          0.3521879280501232,
+          0.2426664534291802,
+          0,
+          0,
+          2.531645281107513,
+          1.53998649735195,
+          1.590887120603373,
+          2.020404836198384
+        ],
+        [
+          1.518810528461327,
+          1.15704119275133,
+          0,
+          9.355347301586942e-06,
+          0,
+          0.00214817313201717,
+          0.3490421587997192,
+          0,
+          0,
+          0,
+          0.0002744802781629473,
+          0,
+          0.008000482770602968
+        ],
+        [
+          0.7466492801192616,
+          0.2229949058866568,
+          0.006004295077486124,
+          0.05155161115996283,
+          0.1229707778066775,
+          0.3522231767152224,
+          0.2584389561779671,
+          0,
+          0,
+          2.530557782269002,
+          1.594687931218979,
+          1.522318919869294,
+          2.020716999038191
+        ],
+        [
+          0.6139914007138123,
+          0.238876466960058,
+          0.006615045328761058,
+          0.05865196231920607,
+          0.1167470913229019,
+          0.3784886866734589,
+          0.2961310976829272,
+          0,
+          0,
+          2.789677407780307,
+          1.828013896297988,
+          1.435088822804982,
+          2.263168213588175
+        ],
+        [
+          0.4476616830922424,
+          0.3241072423960543,
+          0.006939558644388884,
+          0.07159657532848238,
+          0.09789353864112586,
+          0.3848358560421425,
+          0.3932581631825385,
+          0,
+          0,
+          2.927486540793041,
+          2.262573431258717,
+          1.178186448483427,
+          2.324863645020361
+        ],
+        [
+          0.7814660152985883,
+          0.238200977680139,
+          0.00560985553702561,
+          0.04990694536506451,
+          0.1193550953169743,
+          0.3342128304541691,
+          0.2611540800502705,
+          0,
+          0,
+          2.363380267818688,
+          1.54113971832388,
+          1.471492071131464,
+          1.865523256569223
+        ],
+        [
+          1.476650116625344,
+          0.2703123511600233,
+          0,
+          1.397860067816162e-07,
+          0.1217064452705068,
+          0.1021912673393319,
+          0.08332736710388504,
+          0,
+          0,
+          0,
+          4.101199795208635e-06,
+          1.504498195898301,
+          0.4230024964545591
+        ],
+        [
+          3.395451872605245,
+          0.1802416335163652,
+          0,
+          4.902100470609803e-33,
+          0.1662849129692403,
+          0.003316070030981503,
+          0.002796760603587598,
+          0,
+          0,
+          0,
+          1.438233418259019e-31,
+          2.165474010913182,
+          0.01236457543139053
+        ],
+        [
+          4.455583867197113,
+          0.2071515544983714,
+          0,
+          7.386224401705199e-16,
+          0.1528830504769916,
+          0.001805610450918449,
+          0.00204578335023782,
+          0,
+          0,
+          0,
+          2.167053660565055e-14,
+          1.959448066014859,
+          0.006722362159609571
+        ],
+        [
+          0.8082270971081225,
+          0.2360802264116395,
+          0.005504755234448164,
+          0.04878078963718297,
+          0.1202806197865643,
+          0.3293041998082092,
+          0.2552815367696719,
+          0,
+          0,
+          2.318857394603415,
+          1.504580334973355,
+          1.484462690300711,
+          1.824671351249462
+        ],
+        [
+          0.7466492801192616,
+          0.2229949058866568,
+          0.006004295077486124,
+          0.05155161115996283,
+          0.1229707778066775,
+          0.3522231767152224,
+          0.2584389561779671,
+          0,
+          0,
+          2.530557782269002,
+          1.594687931218979,
+          1.522318919869294,
+          2.020716999038191
+        ],
+        [
+          1.710062789454872,
+          0.2265806091128257,
+          0,
+          1.57301401366183e-06,
+          0.1359933776590127,
+          0.08856089401136846,
+          0.05705170237250348,
+          0,
+          0,
+          0,
+          4.615092844656495e-05,
+          1.708907194939115,
+          0.3610998469075707
+        ],
+        [
+          0.7450414035467594,
+          0.2381698908886491,
+          0.005802189368597009,
+          0.05156486816033858,
+          0.1188315581479944,
+          0.3430366929203538,
+          0.2678792383433989,
+          0,
+          0,
+          2.444881618972961,
+          1.595120316697923,
+          1.464167106236557,
+          1.940494577965652
+        ],
+        [
+          0.7822339440816853,
+          0.2312859667239698,
+          0.005696644085214549,
+          0.04989989253103572,
+          0.1212016055119595,
+          0.3382117577139476,
+          0.2569760831420775,
+          0,
+          0,
+          2.400152961653949,
+          1.540910486283025,
+          1.497396821847766,
+          1.899252143268999
+        ],
+        [
+          2.875222525745583,
+          0.1882569692789736,
+          0,
+          3.812421317255523e-22,
+          0.1604084057614074,
+          0.01509030890649568,
+          0.00978623643996823,
+          0,
+          0,
+          0,
+          1.118531081897201e-20,
+          2.074325134459836,
+          0.05693963646010022
+        ],
+        [
+          1.554472823119486,
+          0.2270550947208839,
+          0,
+          2.972748123383282e-09,
+          0.1335162996303752,
+          0.1024215571908797,
+          0.06442788901329252,
+          0,
+          0,
+          0,
+          8.72178310799649e-08,
+          1.672983582075318,
+          0.4240645136084172
+        ],
+        [
+          1.85017624830715,
+          1.273789996797173,
+          0,
+          4.676358041323327e-06,
+          0,
+          0.001396369558983883,
+          0.3013108639954526,
+          0,
+          0,
+          0,
+          0.0001372008979212347,
+          0,
+          0.005196610932115154
+        ],
+        [
+          1.553307718629485,
+          0.2290946099571537,
+          0,
+          7.420538129782893e-09,
+          0.1329393385497678,
+          0.1021242264821265,
+          0.06516112627494447,
+          0,
+          0,
+          0,
+          2.177121024528259e-07,
+          1.664645725366268,
+          0.4226934295870697
+        ],
+        [
+          2.116174676015694,
+          0.2186793534126047,
+          0,
+          3.258965804066688e-07,
+          0.1421909885424709,
+          0.06539850500581773,
+          0.0418103290277103,
+          0,
+          0,
+          0,
+          9.561523848810108e-06,
+          1.799696442994069,
+          0.2600484801098747
+        ],
+        [
+          0.7451488685641325,
+          0.2371710183518504,
+          0.005815626574713075,
+          0.05156396728831149,
+          0.11910675842818,
+          0.3436465303328639,
+          0.2672538277116495,
+          0,
+          0,
+          2.450576805897242,
+          1.595090933802356,
+          1.468016430062528,
+          1.945750490573926
+        ],
+        [
+          0.6780714428114981,
+          0.2561413103860607,
+          0.005954493713358088,
+          0.0548575818395097,
+          0.1135036290373067,
+          0.3495533170064655,
+          0.2918423147775195,
+          0,
+          0,
+          2.509442873777838,
+          1.702889911000609,
+          1.390114503073194,
+          1.997168441843091
+        ],
+        [
+          1.455346893303986,
+          0.706097412281154,
+          0,
+          4.768918100048611e-07,
+          0,
+          0.01629959420260205,
+          0.2284255224375048,
+          0,
+          0,
+          0,
+          1.399159542418028e-05,
+          0,
+          0.06157818901580232
+        ],
+        [
+          0.756045620202639,
+          0.6938569709056955,
+          0,
+          0.04928890162466355,
+          0,
+          0.07327554655699671,
+          0.525968012825515,
+          0,
+          0,
+          0,
+          1.521064897732399,
+          0,
+          0.2938471035629126
+        ],
+        [
+          1.94164392082409,
+          0.2031906900962181,
+          0,
+          1.178252414408678e-06,
+          0.1455746306019786,
+          0.07621532078940443,
+          0.04246625927273106,
+          0,
+          0,
+          0,
+          3.4568936405487e-05,
+          1.849819490059258,
+          0.3066087165932058
+        ],
+        [
+          1.993108977516711,
+          1.554267095427792,
+          0,
+          2.72064549968883e-06,
+          0,
+          0.0009581318487046532,
+          0.3184320920810634,
+          0,
+          0,
+          0,
+          7.982157742490731e-05,
+          0,
+          0.003564138384649247
+        ],
+        [
+          1.852925055443927,
+          1.244874321298211,
+          0,
+          1.287820008578644e-07,
+          0,
+          0.001444119583006403,
+          0.2961694091055677,
+          0,
+          0,
+          0,
+          3.778351795670636e-06,
+          0,
+          0.00537457038049712
+        ],
+        [
+          2.121982069300102,
+          0.2091388920279718,
+          0,
+          3.31570030062405e-08,
+          0.1450602807189847,
+          0.06632247325351143,
+          0.03944528626880474,
+          0,
+          0,
+          0,
+          9.727975107807743e-07,
+          1.842174678137804,
+          0.263983497359674
+        ],
+        [
+          2.610370258395103,
+          0.2130332292794007,
+          0,
+          8.962419276124675e-16,
+          0.1521422247092281,
+          0.01784461753340373,
+          0.01440871876147212,
+          0,
+          0,
+          0,
+          2.629495455805672e-14,
+          1.948249369118729,
+          0.06752117848888889
+        ],
+        [
+          1.806622685375836,
+          0.2231835174273506,
+          0,
+          5.105586874988206e-16,
+          0.138162814847147,
+          0.08186544497788772,
+          0.05222820684356491,
+          0,
+          0,
+          0,
+          1.497934550190732e-14,
+          1.740538897622541,
+          0.3313654805623549
+        ],
+        [
+          1.896356773285718,
+          0.7086811267589171,
+          0,
+          1.055705453511506e-06,
+          0,
+          0.01142111569600631,
+          0.1698729826887296,
+          0,
+          0,
+          0,
+          3.097350768542371e-05,
+          0,
+          0.04293487192745708
+        ],
+        [
+          0.7291297549930137,
+          0.2232251727035806,
+          0.006100143264891383,
+          0.05237454314416388,
+          0.1226528460847873,
+          0.3565428751858024,
+          0.2618162231862851,
+          0,
+          0,
+          2.57120169474055,
+          1.62155131319508,
+          1.51783284915089,
+          2.059231243604498
+        ],
+        [
+          2.784723898369105,
+          0.2104838044963939,
+          0,
+          3.194776303614133e-25,
+          0.1532630753238199,
+          0.01547131152035484,
+          0.01241326607036699,
+          0,
+          0,
+          0,
+          9.373194350601072e-24,
+          1.965200318114478,
+          0.05839984922067492
+        ],
+        [
+          1.668848865058064,
+          0.2183473704994984,
+          0,
+          1.588230817709033e-07,
+          0.1377431974729735,
+          0.0934883467174995,
+          0.05632189346552098,
+          0,
+          0,
+          0,
+          4.659731097769554e-06,
+          1.734408207105024,
+          0.383263144888717
+        ],
+        [
+          2.420048530935313,
+          1.01545224213953,
+          0,
+          1.681331521007675e-16,
+          0,
+          0.0006443576802555261,
+          0.08097696222923502,
+          0,
+          0,
+          0,
+          4.932879681237327e-15,
+          0,
+          0.002396182605406917
+        ],
+        [
+          1.821355299375191,
+          0.2250120680865083,
+          0,
+          9.820459614298705e-10,
+          0.1378235115037661,
+          0.08055950147301365,
+          0.05218772879546793,
+          0,
+          0,
+          0,
+          2.881236991876874e-08,
+          1.735581148752612,
+          0.325616280807679
+        ],
+        [
+          0.6600131019549501,
+          0.2912180645229273,
+          0.005667975167947816,
+          0.05574515672930364,
+          0.1060655224709823,
+          0.3357106340818104,
+          0.3147117841837742,
+          0,
+          0,
+          2.38800510389903,
+          1.732068594877769,
+          1.288209023860798,
+          1.878108891409073
+        ],
+        [
+          0.702796393792438,
+          4.219555257118009,
+          0,
+          0.05639687885909338,
+          0,
+          1.262015000700071e-06,
+          0.9036603950501021,
+          0,
+          0,
+          0,
+          1.753528660510518,
+          0,
+          4.690056081379463e-06
+        ],
+        [
+          1.691179114177123,
+          0.2456572441735711,
+          0,
+          6.888713677253765e-15,
+          0.1307380233433877,
+          0.08696007901160974,
+          0.06353738779926375,
+          0,
+          0,
+          0,
+          2.021088363823751e-13,
+          1.632935461427574,
+          0.3539509885786877
+        ],
+        [
+          0.7030050010216371,
+          0.8248938146618999,
+          0,
+          0.05184824859638799,
+          0,
+          0.0627359475557803,
+          0.5764272764716464,
+          0,
+          0,
+          0,
+          1.604365841064396,
+          0,
+          0.2487525102208104
+        ],
+        [
+          0.7112683452842608,
+          3.819893684629089,
+          0,
+          0.05540671242091885,
+          0,
+          1.221520523561991e-05,
+          0.8877921163271038,
+          0,
+          0,
+          0,
+          1.720935899995331,
+          0,
+          4.539615225234597e-05
+        ],
+        [
+          0.6811593783075932,
+          0.6161466130849987,
+          0,
+          0.05281812700395628,
+          0,
+          0.09041517842364513,
+          0.5254637356275006,
+          0,
+          0,
+          0,
+          1.636050805843772,
+          0,
+          0.3694120942004063
+        ],
+        [
+          0.7887227185805217,
+          1.603086922381313,
+          0,
+          0.04866954399596279,
+          0,
+          0.002209708494808728,
+          0.729890685983207,
+          0,
+          0,
+          0,
+          1.500973567385813,
+          0,
+          0.008230167649811318
+        ],
+        [
+          3.318889529458268,
+          0.2024249325672899,
+          0,
+          5.290408460225072e-07,
+          0.1487375910523945,
+          0.04347385356967635,
+          0.02518246190728167,
+          0,
+          0,
+          0,
+          1.552160408531956e-05,
+          1.897033834066669,
+          0.1689056833570038
+        ],
+        [
+          1.93309646445491,
+          0.2231899913210519,
+          0,
+          1.493020028609609e-08,
+          0.1394926948643973,
+          0.07382731899620482,
+          0.04789742342532349,
+          0,
+          0,
+          0,
+          4.380390292304733e-07,
+          1.760008203105529,
+          0.2962361818705989
+        ],
+        [
+          0.6743439144023577,
+          4.30129291871795,
+          0,
+          0.05779207843878828,
+          0,
+          1.207847581727579e-06,
+          0.9117898092006219,
+          0,
+          0,
+          0,
+          1.79956994002137,
+          0,
+          4.48875218287148e-06
+        ],
+        [
+          0.7515110589320404,
+          0.6270310051311504,
+          0,
+          0.04946828398575113,
+          0,
+          0.08376427789096541,
+          0.5059106841242824,
+          0,
+          0,
+          0,
+          1.526888768474439,
+          0,
+          0.3397540164847605
+        ],
+        [
+          0.7275882912854384,
+          0.2383990707200944,
+          0.00589461075699275,
+          0.05238621059626656,
+          0.1185202960835768,
+          0.3472351157941612,
+          0.2713311646386871,
+          0,
+          0,
+          2.484056347600863,
+          1.621932515136185,
+          1.459816270064436,
+          1.976877808055405
+        ],
+        [
+          3.080019644858323,
+          0.2083991841202883,
+          0,
+          6.695527143368801e-11,
+          0.1538346902320613,
+          0.01270068471860965,
+          0.01016070376213695,
+          0,
+          0,
+          0,
+          1.964409123972975e-09,
+          1.973862306967853,
+          0.04780697561776954
+        ],
+        [
+          2.588112052107538,
+          1.599925027205681,
+          0,
+          2.989389622320505e-11,
+          0,
+          0.0001600243549282456,
+          0.1688481574501781,
+          0,
+          0,
+          0,
+          8.770607785220995e-10,
+          0,
+          0.0005947967119833063
+        ],
+        [
+          0.6780714428114981,
+          0.2561413103860607,
+          0.005954493713358088,
+          0.0548575818395097,
+          0.1135036290373067,
+          0.3495533170064655,
+          0.2918423147775195,
+          0,
+          0,
+          2.509442873777838,
+          1.702889911000609,
+          1.390114503073194,
+          1.997168441843091
+        ],
+        [
+          1.745264853050264,
+          1.304128937655899,
+          0,
+          3.659138281475959e-10,
+          0,
+          0.001460163924369411,
+          0.3256907041636892,
+          0,
+          0,
+          0,
+          1.073559179769449e-08,
+          0,
+          0.005434369817498072
+        ],
+        [
+          0.8100606931103369,
+          0.2210483969428178,
+          0.005694796448494577,
+          0.04876214671049593,
+          0.1244330796211904,
+          0.3380346714064464,
+          0.2461611392608926,
+          0,
+          0,
+          2.399370042881849,
+          1.50397584163019,
+          1.542994199813493,
+          1.89774988825283
+        ],
+        [
+          2.854965276275905,
+          0.1882757822109498,
+          0,
+          8.209366298324275e-22,
+          0.1603980396162084,
+          0.01531132180416759,
+          0.00991951294883153,
+          0,
+          0,
+          0,
+          2.408556296176966e-20,
+          2.074165475406119,
+          0.05778654250750642
+        ],
+        [
+          3.460944755463362,
+          1.141529483133979,
+          0,
+          5.260308396021496e-10,
+          0,
+          0.0001638940551603185,
+          0.07695701922899657,
+          0,
+          0,
+          0,
+          1.543328492519697e-08,
+          0,
+          0.0006091824113960658
+        ],
+        [
+          4.443526386836507,
+          0.2060932541208613,
+          0,
+          1.256096152825613e-16,
+          0.1532695706607249,
+          0.00181860104727017,
+          0.002037550955365864,
+          0,
+          0,
+          0,
+          3.68527628997301e-15,
+          1.965298679764369,
+          0.006770814801494314
+        ],
+        [
+          1.935575660741212,
+          0.2231597401859894,
+          0,
+          3.712409081848069e-09,
+          0.1395242610074968,
+          0.07368993714076988,
+          0.04781183424402703,
+          0,
+          0,
+          0,
+          1.089188370494513e-07,
+          1.760471059340695,
+          0.295641076321942
+        ],
+        [
+          0.7451488685641325,
+          0.2371710183518504,
+          0.005815626574713075,
+          0.05156396728831149,
+          0.11910675842818,
+          0.3436465303328639,
+          0.2672538277116495,
+          0,
+          0,
+          2.450576805897242,
+          1.595090933802356,
+          1.468016430062528,
+          1.945750490573926
+        ],
+        [
+          2.009519774740871,
+          0.2994940718836886,
+          0,
+          2.086585335270213e-15,
+          0.1263755472759568,
+          0.03076666851899694,
+          0.04090726151267173,
+          0,
+          0,
+          0,
+          6.121858940319745e-14,
+          1.570565513428026,
+          0.1179682405650535
+        ],
+        [
+          1.179579779681573,
+          0.2156520443033609,
+          0.004477264777113072,
+          0.03818584231965162,
+          0.129977458660623,
+          0.2778396627565591,
+          0.1990003588468661,
+          0,
+          0,
+          1.8840843179711,
+          1.164818814781925,
+          1.622016715610987,
+          1.429794366341853
+        ],
+        [
+          0.8100606931103369,
+          0.2210483969428178,
+          0.005694796448494577,
+          0.04876214671049593,
+          0.1244330796211904,
+          0.3380346714064464,
+          0.2461611392608926,
+          0,
+          0,
+          2.399370042881849,
+          1.50397584163019,
+          1.542994199813493,
+          1.89774988825283
+        ],
+        [
+          2.79489290615793,
+          0.1963935237886962,
+          0,
+          6.512859566772791e-22,
+          0.157665201189306,
+          0.01574023897703996,
+          0.0110443984204106,
+          0,
+          0,
+          0,
+          1.910816053958878e-20,
+          2.032211457612951,
+          0.05943120856838233
+        ],
+        [
+          0.5166616367041028,
+          0.3233533722764604,
+          0.006332203848538324,
+          0.0653304024559289,
+          0.09886006729552094,
+          0.3618100305216869,
+          0.3691834073238334,
+          0,
+          0,
+          2.669638220256299,
+          2.050710640121726,
+          1.191095148079879,
+          2.106898429016608
+        ],
+        [
+          1.355405883058725,
+          0.3099691422004031,
+          0,
+          6.509052173526622e-07,
+          0.1121049439823004,
+          0.10852061732293,
+          0.1055080683557319,
+          0,
+          0,
+          0,
+          1.909700241102927e-05,
+          1.370821531532695,
+          0.4523909648113782
+        ],
+        [
+          0.7476001203737511,
+          0.2148678819973834,
+          0.006120767311452857,
+          0.05154297881663523,
+          0.1253561837567407,
+          0.3574163820444085,
+          0.2531923941162151,
+          0,
+          0,
+          2.57994823652838,
+          1.594406388361896,
+          1.556081435102351,
+          2.067082334880825
+        ],
+        [
+          3.020577582679845,
+          0.1915523974315714,
+          0,
+          2.81533475495939e-12,
+          0.1592506570999948,
+          0.01358417755973306,
+          0.009184901223337856,
+          0,
+          0,
+          0,
+          8.259946022029134e-11,
+          2.056517859767093,
+          0.05117835122106983
+        ],
+        [
+          0.7275882912854384,
+          0.2383990707200944,
+          0.00589461075699275,
+          0.05238621059626656,
+          0.1185202960835768,
+          0.3472351157941612,
+          0.2713311646386871,
+          0,
+          0,
+          2.484056347600863,
+          1.621932515136185,
+          1.459816270064436,
+          1.976877808055405
+        ],
+        [
+          2.780345523574176,
+          1.390886491467611,
+          0,
+          4.286258480759726e-10,
+          0,
+          0.0001690691585432724,
+          0.1293574644772065,
+          0,
+          0,
+          0,
+          1.257550763377201e-08,
+          0,
+          0.0006284211510164636
+        ],
+        [
+          0.8087052652928001,
+          0.2319510232768812,
+          0.005554967290647722,
+          0.04877609169960519,
+          0.1213777688846107,
+          0.3316338009908808,
+          0.2528249901526476,
+          0,
+          0,
+          2.340127187024993,
+          1.504428003009994,
+          1.499873912855815,
+          1.843984562171594
+        ],
+        [
+          0.8100606931103369,
+          0.2210483969428178,
+          0.005694796448494577,
+          0.04876214671049593,
+          0.1244330796211904,
+          0.3380346714064464,
+          0.2461611392608926,
+          0,
+          0,
+          2.399370042881849,
+          1.50397584163019,
+          1.542994199813493,
+          1.89774988825283
+        ],
+        [
+          0.6627676494784243,
+          1.457574856597744,
+          0,
+          0.05446053162455292,
+          0,
+          0.002948194984354313,
+          0.7586858797062647,
+          0,
+          0,
+          0,
+          1.689854771403408,
+          0,
+          0.01098882986854586
+        ],
+        [
+          1.844246022707493,
+          0.7883513823128496,
+          0,
+          9.954149216112677e-07,
+          0,
+          0.01032502330375877,
+          0.1930089887923725,
+          0,
+          0,
+          0,
+          2.920463256423553e-05,
+          0,
+          0.03877139449793326
+        ],
+        [
+          2.044824742140833,
+          0.8625018959425371,
+          0,
+          1.019778224610633e-06,
+          0,
+          0.008216114651538785,
+          0.186963201661752,
+          0,
+          0,
+          0,
+          2.991943201348482e-05,
+          0,
+          0.03078664855927679
+        ],
+        [
+          0.808349447170343,
+          0.2350906748312896,
+          0.005517393377413162,
+          0.0487795399514531,
+          0.1205567671544379,
+          0.329883894585105,
+          0.2546773151191671,
+          0,
+          0,
+          2.324210700990352,
+          1.504539813410912,
+          1.488338002773054,
+          1.829464674473086
+        ],
+        [
+          0.6274242099994349,
+          0.7026426678504653,
+          0,
+          0.05585842966521806,
+          0,
+          0.07979347056118838,
+          0.5738766232797755,
+          0,
+          0,
+          0,
+          1.735796346635547,
+          0,
+          0.3222515499882964
+        ],
+        [
+          3.56746472359402,
+          1.161714037528714,
+          0,
+          1.073042838281155e-10,
+          0,
+          0.0001527280292547523,
+          0.07569258820979197,
+          0,
+          0,
+          0,
+          3.148213870070041e-09,
+          0,
+          0.0005676727567759391
+        ],
+        [
+          2.407902931385677,
+          0.3189505593771069,
+          0.003081480022752993,
+          0.03193302199798217,
+          0.1091318309663298,
+          0.2031516150954192,
+          0.2096783057782256,
+          0,
+          0,
+          1.294906561177292,
+          0.9677914516023093,
+          1.330012703023553,
+          0.9474527339639
+        ],
+        [
+          1.934844750707982,
+          0.202759314237974,
+          0,
+          1.810678154211758e-07,
+          0.1456430652963479,
+          0.07670420905824162,
+          0.04254512434024967,
+          0,
+          0,
+          0,
+          5.312372355982809e-06,
+          1.850837332691564,
+          0.3087388704650218
+        ],
+        [
+          0.7259638255888147,
+          0.2569778156171333,
+          0.005669517422140116,
+          0.05239678503252603,
+          0.1139944094613952,
+          0.3367750292313865,
+          0.282303404017389,
+          0,
+          0,
+          2.388658584226088,
+          1.62227801389694,
+          1.396898593003307,
+          1.887087265320347
+        ],
+        [
+          1.9875855649525,
+          0.2506012293177031,
+          0,
+          3.475843354098992e-07,
+          0.1328577548169451,
+          0.06752470021588143,
+          0.05299069874129397,
+          0,
+          0,
+          0,
+          1.01978240472033e-05,
+          1.66346762705324,
+          0.2691152438269667
+        ],
+        [
+          0.7274996316772561,
+          0.2394222393703301,
+          0.005882272824539831,
+          0.05238677130700074,
+          0.118272222806534,
+          0.3466605757282492,
+          0.2719345732123978,
+          0,
+          0,
+          2.478826236906296,
+          1.62195083505527,
+          1.456350889518685,
+          1.97187126861563
+        ],
+        [
+          0.8605782724699829,
+          0.2247184729058926,
+          0.005409092684945906,
+          0.04678279432265425,
+          0.1240743594918608,
+          0.3246221411064367,
+          0.2403548330681676,
+          0,
+          0,
+          2.278340747888811,
+          1.43993024290323,
+          1.53791591619888,
+          1.786258422628224
+        ],
+        [
+          3.468083271338649,
+          0.2066173082208947,
+          0,
+          2.165841829519958e-17,
+          0.157366794464489,
+          0.003006975929322114,
+          0.003431812796324661,
+          0,
+          0,
+          0,
+          6.354390564931369e-16,
+          2.027646853859842,
+          0.01120858533678603
+        ],
+        [
+          3.014018554305045,
+          0.1826085667310856,
+          0,
+          4.532829465427104e-12,
+          0.162335011374932,
+          0.01386121341230104,
+          0.008517903163234072,
+          0,
+          0,
+          0,
+          1.3298925339376e-10,
+          2.104067271107116,
+          0.05223675376964913
+        ],
+        [
+          0.8192997514001863,
+          1.145547153718677,
+          0,
+          0.04690689964374897,
+          0,
+          0.01262315308806198,
+          0.6390695775051611,
+          0,
+          0,
+          0,
+          1.44393808286918,
+          0,
+          0.04751140577999204
+        ],
+        [
+          2.598882601641038,
+          0.680634815486584,
+          0,
+          2.391632865972642e-17,
+          0,
+          0.002419142791274311,
+          0.06111277873835638,
+          0,
+          0,
+          0,
+          7.016841724626171e-16,
+          0,
+          0.009012107581700636
+        ],
+        [
+          0.7353245907385118,
+          0.7975561963121701,
+          0,
+          0.05027742640756919,
+          0,
+          0.06340720159424293,
+          0.559422975813991,
+          0,
+          0,
+          0,
+          1.553185923434107,
+          0,
+          0.2515942683273207
+        ],
+        [
+          0.7850622182406316,
+          0.208593049315937,
+          0.006006859903783282,
+          0.04987146289298329,
+          0.1278017467009314,
+          0.3521879280501232,
+          0.2426664534291802,
+          0,
+          0,
+          2.531645281107513,
+          1.53998649735195,
+          1.590887120603373,
+          2.020404836198384
+        ],
+        [
+          0.7316262003502513,
+          0.6794756409336005,
+          0,
+          0.05037035497163603,
+          0,
+          0.07655595391329398,
+          0.5295230120345745,
+          0,
+          0,
+          0,
+          1.55620897370794,
+          0,
+          0.3080926639932846
+        ],
+        [
+          1.993233321205702,
+          0.2167322809208545,
+          0,
+          1.004344541808659e-08,
+          0.1418737956125924,
+          0.07140192233581792,
+          0.04447392907879896,
+          0,
+          0,
+          0,
+          2.946659103874186e-07,
+          1.795018019637471,
+          0.2857558267431315
+        ],
+        [
+          0.7786226672064415,
+          0.2686023741332054,
+          0.005274302709848259,
+          0.04993065195314273,
+          0.1122158847959012,
+          0.3183146890342138,
+          0.2782736801146184,
+          0,
+          0,
+          2.221265407529709,
+          1.541910257583103,
+          1.372349590548795,
+          1.735344544927899
+        ],
+        [
+          1.806925041423277,
+          0.2241784346178917,
+          0,
+          2.539106164230744e-09,
+          0.1378707515320769,
+          0.08168231408748063,
+          0.05249656677877327,
+          0,
+          0,
+          0,
+          7.449515506813414e-08,
+          1.736271165105949,
+          0.3305582914482377
+        ],
+        [
+          0.8050319384914945,
+          0.2682599928043122,
+          0.005155925391265884,
+          0.04880999591927179,
+          0.1126585788508567,
+          0.3127159047426134,
+          0.2732570142747157,
+          0,
+          0,
+          2.171152582944473,
+          1.505527390740141,
+          1.378450904234144,
+          1.690933961726218
+        ],
+        [
+          0.8100606931103369,
+          0.2210483969428178,
+          0.005694796448494577,
+          0.04876214671049593,
+          0.1244330796211904,
+          0.3380346714064464,
+          0.2461611392608926,
+          0,
+          0,
+          2.399370042881849,
+          1.50397584163019,
+          1.542994199813493,
+          1.89774988825283
+        ],
+        [
+          1.554084381004414,
+          0.2290821140077437,
+          0,
+          6.561632230126507e-08,
+          0.132955754640726,
+          0.1020493001503378,
+          0.06511716942147001,
+          0,
+          0,
+          0,
+          1.925125653279631e-06,
+          1.664882806391129,
+          0.4223480642914518
+        ],
+        [
+          0.6139190888340093,
+          0.2398748397626799,
+          0.006599648244035076,
+          0.05865199674143606,
+          0.1164753524659064,
+          0.377812669283267,
+          0.2967954502893046,
+          0,
+          0,
+          2.78314105700088,
+          1.828015035985376,
+          1.431308178777515,
+          2.256671396546136
+        ],
+        [
+          0.8100606931103369,
+          0.2210483969428178,
+          0.005694796448494577,
+          0.04876214671049593,
+          0.1244330796211904,
+          0.3380346714064464,
+          0.2461611392608926,
+          0,
+          0,
+          2.399370042881849,
+          1.50397584163019,
+          1.542994199813493,
+          1.89774988825283
+        ]
+      ]
+    },
+    "headers": [
+      [
+        "alpha",
+        "Mean posterior synonymous substitution rate at a site"
+      ],
+      [
+        "beta",
+        "Mean posterior non-synonymous substitution rate at a site"
+      ],
+      [
+        "Prob[alpha=beta=0]",
+        "Posterior probability of alpha=beta=0"
+      ],
+      [
+        "Prob[alpha=0]",
+        "Posterior probability of alpha=0"
+      ],
+      [
+        "Prob[beta=0]",
+        "Posterior probability of beta=0"
+      ],
+      [
+        "Prob[alpha,beta~0]",
+        "Posterior probability of alpha and beta within a radius of 0.5 of 0"
+      ],
+      [
+        "Prob[alpha<beta]",
+        "Posterior probability of positive selection at a site"
+      ],
+      [
+        "PSRF",
+        "Potential scale reduction factor - an MCMC mixing measure"
+      ],
+      [
+        "Neff",
+        "Estimated effective sample site for Prob [alpha<beta]"
+      ],
+      [
+        "EBF[alpha=beta=0]",
+        "Empirical Bayes Factor for alpha=beta=0"
+      ],
+      [
+        "EBF[alpha=0]",
+        "Empirical Bayes Factor for alpha=0"
+      ],
+      [
+        "EBF[beta=0]",
+        "Empirical Bayes Factor for beta=0"
+      ],
+      [
+        "EBF[alpha,beta~0]",
+        "Empirical Bayes Factor for alpha and beta within a radius of 0.5 of 0"
+      ]
+    ]
+  },
+  "analysis": {
+    "authors": "Sergei L Kosakovsky Pond",
+    "citation": "FUBAR: a fast, unconstrained bayesian approximation for inferring selection (2013), Mol Biol Evol. 30(5):1196-205",
+    "contact": "spond@temple.edu",
+    "info": "Perform a B-STILL (Bayesian Significance Test of Invariant Low Likelihoods) \n    analysis to detect invariant sites (alpha=beta=0) and quantify their \n    posterior probabilities and Empirical Bayes Factors. This is a modified \n    version of the standard FUBAR analysis that uses a denser grid around \n    zero and reports the probability of a site being effectively invariant.",
+    "requirements": "in-frame codon alignment (possibly partitioned) and a phylogenetic tree (one per partition)",
+    "version": "1.0 (B-STILL)"
+  },
+  "input": {
+    "file name": "/home/danielle/Documents/veg/tools-iuc/tools/hyphy/test-data/fubar-in1.fa.gz",
+    "number of sequences": 163,
+    "number of sites": 566,
+    "partition count": 1,
+    "trees": {
+      "0": "(KF790010:0.001247,CY147300:0.000623,((CY168239:0.001872,(CY171039:0.001874,KF790389:0.000623)Node7:0.000624)Node5:1e-10,((CY141224:0.001247,(CY147305:1e-10,KF790037:0.000623)Node13:0.000623)Node11:1e-10,(((KF790403:0.000623,KF761507:0.001876)Node18:1e-10,KC526205:0.000623)Node17:1e-10,((CY169303:1e-10,(KF789585:0.000623,CY141202:0.000623)Node25:0.000623)Node23:0.000623,(((KJ667974:0.002501,KJ938675:0.001873)Node30:0.000623,CY134876:1e-10)Node29:0.000623,((KF790414:0.001248,(KF790384:0.001245,KF790408:0.00125)Node37:1e-10)Node35:1e-10,((KF886352:0.001882,(KF790438:0.000623,CY134996:0.001873)Node43:0.000623)Node41:0.001875,(KF789591:0.001879,((KF790049:0.001255,(CY134956:0.000624,CY183153:0.000624)Node51:0.000626)Node49:0.001249,((CY168407:0.004394,CY183065:0.003128)Node55:1e-10,(KF598733:0.002501,((KC892174:1e-10,(KF685747:0.000624,CY168471:0.000625)Node63:0.00375)Node61:0.000624,(((KC892685:0.000624,KC892641:1e-10)Node68:0.001874,KC893110:0.001249)Node67:1e-10,(KC892480:1e-10,(JX913043:0.001249,(KF551075:0.00125,((CY114509:1e-10,(KC892889:1e-10,KC893018:0.002498)Node81:0.005006)Node79:0.001877,(((KC892519:1e-10,KC892498:0.000624)Node86:0.002497,KC892266:0.000623)Node85:0.001026,((KC892156:0.003756,(JX978746:0.001256,KC892407:0.001883)Node93:0.001875)Node91:0.00355,((KC535402:0.000623,(KC882488:0.002498,KC535387:0.001247)Node99:0.001872)Node97:1e-10,(KC535363:0.000623,((KC535396:0.000623,(KC882883:1e-10,KC882867:0.000623)Node107:0.003124)Node105:1e-10,((KC535378:0.001872,KC535375:0.002498)Node111:1e-10,(GQ385891:0.001248,((EU779522:0.001251,(CY037727:1e-10,FJ179354:0.003124)Node119:1e-10)Node117:0.000623,((GQ385889:0.005007,(FJ686933:0.001243,FJ179356:0.003117)Node125:1e-10)Node123:0.000622,(CY173095:0.001245,(((CY173191:1e-10,CY037703:0.001247)Node132:0.000622,CY035062:0.00249)Node131:1e-10,((CY173255:0.001871,(CY044748:1e-10,GQ385846:0.001247)Node139:0.000623)Node137:1e-10,((CY027075:0.000623,(EU199367:1e-10,CY172823:0.000623)Node145:1e-10)Node143:0.000623,(((CY172847:0.000623,CY025643:1e-10)Node150:0.000623,CY172839:0.000623)Node149:0.001247,(((CY026251:0.002497,CY092241:0.00125)Node156:0.000624,CY026019:0.000623)Node155:1e-10,((CY025341:0.002502,(CY172775:0.001247,CY172903:0.000623)Node163:0.001248)Node161:0.000622,(EU199255:0.003134,(CY172431:0.000621,((CY172223:0.003127,(CY172191:0.001254,CY020069:0.000628)Node173:0.000621)Node171:1e-10,((CY092217:0.003119,(CY025485:0.001283,EU516019:0.00059)Node179:0.008843)Node177:0.001868,(CY002080:0.000622,((CY002064:0.001873,(CY002456:0.000626,CY002048:0.002491)Node187:0.001243)Node185:0.003763,(AB434109:0.006307,(((CY088198:0.001245,CY088475:0.000621)Node194:1e-10,CY000257:0.000621)Node193:0.002494,((CY112957:0.003135,CY006859:0.001253)Node199:0.000616,((CY000721:0.001243,(CY114493:1e-10,CY090885:0.002483)Node205:0.002488)Node203:1e-10,((CY001792:0.000621,(CY001600:0.00062,CY002368:0.001865)Node211:1e-10)Node209:1e-10,((CY002304:0.002489,(CY006163:0.001242,CY003632:0.00062)Node217:1e-10)Node215:0.00062,(CY001920:0.003739,(CY001912:0.002498,((CY001504:1e-10,CY006060:0.001241)Node225:0.00062,((CY001744:1e-10,CY002136:0.00124)Node229:0.00062,((CY114309:0.003746,(CY006899:0.001874,CY112901:0.001863)Node235:0.002496)Node233:0.000618,(((CY006579:0.001245,CY006283:0.000621)Node240:0.001244,CY007979:0.001864)Node239:1e-10,((CY006499:0.001241,(CY006491:0.001863,CY006635:0.00124)Node247:1e-10)Node245:0.00062,(((CY036847:0.002495,CY010004:0.001867)Node252:0.000621,CY012200:0.000621)Node251:1e-10,(((CY010028:0.001242,CY009732:0.001242)Node258:1e-10,CY010012:0.002484)Node257:0.001875,(((CY010020:0.002497,CY011416:0.001237)Node264:0.001252,CY009484:0.00062)Node263:0.005658,((CY010036:1e-10,(CY039879:0.002489,CY039880:0.000621)Node271:0.002487)Node269:0.003109,((CY010628:0.000619,(CY010716:0.002485,CY010516:0.001239)Node277:1e-10)Node275:0.000619,((CY012728:1e-10,CY013701:0.000621)Node281:0.001243,(((CY012760:0.001239,CY013200:0.001239)Node286:1e-10,CY011888:0.005614)Node285:1e-10,((CY013693:0.000619,(CY012184:0.002484,CY013669:0.00124)Node293:0.00124)Node291:1e-10,((CY112669:0.004353,(CY112556:0.001861,CY011896:0.000619)Node299:0.00186)Node297:1e-10,(CY112605:0.001243,(CY012224:0.006953,((CY012512:0.000619,(CY012896:0.00062,CY012232:0.00062)Node309:0.000621)Node307:1e-10,(CY011848:1e-10,(((CY011328:1e-10,CY114221:0.000619)Node316:0.001241,CY011560:0.00124)Node315:1e-10,((CY012456:0.000619,CY011824:0.00124)Node321:1e-10,CY017283:0.000619)Node320:1e-10)Node314:1e-10)Node312:1e-10)Node306:0.002439)Node304:0.008263)Node302:0.000618)Node296:1e-10)Node290:1e-10)Node284:0.000617)Node280:0.012609)Node274:0.000619)Node268:0.001215)Node262:0.003782)Node256:0.000613)Node250:0.006878)Node244:1e-10)Node238:0.001862)Node232:1e-10)Node228:1e-10)Node224:0.001863)Node222:0.001862)Node220:0.001245)Node214:1e-10)Node208:0.001241)Node202:0.021084)Node198:0.000623)Node192:0.00065)Node190:0.003713)Node184:0.002495)Node182:1e-10)Node176:0.005637)Node170:0.00313)Node168:0.002515)Node166:0.001876)Node160:1e-10)Node154:0.000623)Node148:1e-10)Node142:0.003749)Node136:1e-10)Node130:1e-10)Node128:0.000623)Node122:0.000623)Node116:0.001872)Node114:0.002503)Node110:1e-10)Node104:1e-10)Node102:0.000623)Node96:0.001468)Node90:0.00189)Node84:0.002721)Node78:0.002524)Node76:1e-10)Node74:0.000624)Node72:1e-10)Node66:1e-10)Node60:1e-10)Node58:0.000623)Node54:0.001248)Node48:0.001255)Node46:0.000619)Node40:1e-10)Node34:1e-10)Node28:1e-10)Node22:0.000623)Node16:1e-10)Node10:1e-10)Node4:1e-10)"
+    }
+  },
+  "_comment": "Trimmed HyPhy B-STILL output (first 120 codon sites, first 13 metrics, removed posterior/grid/etc) to keep infer_stasis_clusters test input under planemo's 1MB lint limit."
+}