diff --git a/bin/polyply b/bin/polyply index 3776c9e9..26596dd1 100755 --- a/bin/polyply +++ b/bin/polyply @@ -74,6 +74,9 @@ def main(): # pylint: disable=too-many-locals,too-many-statements help='A linear sequence of residue names.') seq_group.add_argument('-seqf', dest='seq_file', type=Path, help='A graph input file (JSON|TXT|FASTA|IG)') + dna_group = parser_gen_itp.add_argument_group('DNA specifc options') + dna_group.add_argument('-dsdna', dest='dsdna', action='store_true', + help='complement single sequence to dsDNA sequence') parser_gen_itp.set_defaults(func=gen_itp) diff --git a/polyply/data/martini2/DNA_M2.ff b/polyply/data/martini2/DNA_M2.ff index 723b5e0d..a74976bf 100644 --- a/polyply/data/martini2/DNA_M2.ff +++ b/polyply/data/martini2/DNA_M2.ff @@ -566,3 +566,28 @@ BB3 +BB2 BB2 BB3 +BB1 +BB2 1 180.00000 2 3 {"group": "link"} BB3 +BB1 +BB2 +BB3 9 85.00000 2 2 {"group": "link", "version": "1"} BB3 +BB1 +BB2 +BB3 9 160.00000 2 3 {"group": "link", "version": "2"} + +; +; CIRCULAR MARTINI DNA +; + +[ link ] +resname "DT|DG|DA|DC" +[ atoms ] +BB3 { } +>BB1 { } +[ bonds ] +BB3 >BB1 1 0.35300 10000 {"group": "link-circle", "edge": false} +[ angles ] +BB2 BB3 >BB1 2 102.00000 150 {"group": "backbone-circle", "edge": false} +BB3 >BB1 >BB2 2 106.00000 75 {"group": "backbone-circle", "edge": false} +[ exclusions ] +#meta {"edge": false} +BB2 >BB1 +BB3 >BB2 +[ dihedrals ] +BB2 BB3 >BB1 >BB2 1 180.00000 2 3 {"group": "link-circle", "edge": false} +BB3 >BB1 >BB2 >BB3 9 85.00000 2 2 {"group": "link-circle", "version": "1", "edge": false} +BB3 >BB1 >BB2 >BB3 9 160.00000 2 3 {"group": "link-circle", "version": "2", "edge": false} +[ edges ] +BB3 >BB1 {"linktype": "circle"} diff --git a/polyply/src/apply_links.py b/polyply/src/apply_links.py index e27aea56..2653d0cf 100644 --- a/polyply/src/apply_links.py +++ b/polyply/src/apply_links.py @@ -489,7 +489,12 @@ def run_molecule(self, meta_molecule): # take care to remove nodes if there are any scheduled for removal # we do this here becuase that's more efficent - molecule.remove_nodes_from(self.nodes_to_remove) + if self.nodes_to_remove: + molecule.remove_nodes_from(self.nodes_to_remove) + # make sure the residue graph is updated; this takes care that + # nodes are also removed from the fragment graphs in the + # meta_molecule.nodes['graph'] attribute + meta_molecule.relabel_and_redo_res_graph(mapping={}) # now we add all interactions but not the ones that contain the removed # nodes for inter_type in self.applied_links: diff --git a/polyply/src/gen_dna.py b/polyply/src/gen_dna.py new file mode 100644 index 00000000..2648b847 --- /dev/null +++ b/polyply/src/gen_dna.py @@ -0,0 +1,106 @@ +# Copyright 2022 University of Groningen +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import networkx as nx +from tqdm import tqdm + +BASE_LIBRARY = {"DA": "DT", "DT": "DA", "DG": "DC", "DC": "DG", + "DA5": "DT3", "DT5": "DA3", "DG5": "DC3", "DC5": "DG3", + "DA3": "DT5", "DT3": "DA5", "DG3": "DC5", "DC3": "DG5" + } + +def _dna_edge_iterator(meta_molecule, source): + """ + Traversal method for DNA specifc meta-molecule. + Should become obsolete once vermouth commits to + directed graphs. + """ + first_node = source + count = 0 + while True: + neighbors = meta_molecule.neighbors(source) + src_resid = meta_molecule.nodes[source]["resid"] + for next_node in neighbors: + next_resid = meta_molecule.nodes[next_node]["resid"] + diff = src_resid - next_resid + if diff == 1 : + yield (source, next_node) + source = next_node + break + + if next_resid > src_resid and next_node == first_node: + yield (source, next_node) + return + else: + return + +def complement_dsDNA(meta_molecule): + """ + Given a meta-molecule, which represents the residue graph + of a single strand of dsDNA add the complementray strand + to get a meta-molecule with two disconnected strands. The + update of the meta_molecule is done in place. + + By convention the other strand is generate 5'-> 3' end, + meaning that the last residue of the first strand aligns + with the first residue of the second strand. + + Parameters + ---------- + meta_molecule: :class:`polyply.src.meta_molecule.MetaMolecule` + + Raises + ------ + IOError + when the resname does not match any of the know base-pair + names an error is raised. + """ + last_node = list(meta_molecule.nodes)[-1] + resname = BASE_LIBRARY[meta_molecule.nodes[last_node]["resname"]] + meta_molecule.add_monomer(last_node+1, resname, []) + + correspondance = {last_node: last_node+1} + total = last_node+1 + + pbar = tqdm(total=len(meta_molecule.nodes)) + for prev_node, next_node in _dna_edge_iterator(meta_molecule, source=last_node): + try: + resname = BASE_LIBRARY[meta_molecule.nodes[next_node]["resname"]] + except KeyError: + msg = ("Trying to complete a dsDNA strand. However, resname {resname} with resid {resid} " + "does not match any of the known base-pair resnames. Note that polyply " + "at the moment only allows base-pair completion for molecules that only " + "consist of dsDNA. Please conact the developers if you whish to create a " + "more complicated molecule.") + + resname = meta_molecule.nodes[next_node]["resname"] + resid = meta_molecule.nodes[next_node]["resid"] + raise IOError(msg.format(resname=resname, resid=resid)) + + if next_node not in correspondance: + new_node = total + 1 + meta_molecule.add_monomer(new_node, resname, [(correspondance[prev_node], new_node)]) + correspondance[next_node] = new_node + else: + new_node = correspondance[next_node] + meta_molecule.add_edge(correspondance[prev_node], new_node) + + # make sure that edge attributes are carried over + for attr, value in meta_molecule.edges[(prev_node, next_node)].items(): + meta_molecule.edges[(correspondance[prev_node], new_node)][attr] = value + + total += 1 + pbar.update(1) + pbar.close() + return meta_molecule + diff --git a/polyply/src/gen_itp.py b/polyply/src/gen_itp.py index 2bfc3173..395afeda 100644 --- a/polyply/src/gen_itp.py +++ b/polyply/src/gen_itp.py @@ -33,6 +33,7 @@ from polyply import (MetaMolecule, ApplyLinks, Monomer, MapToMolecule) from polyply.src.graph_utils import find_missing_edges from .load_library import load_ff_library +from .gen_dna import complement_dsDNA LOGGER = StyleAdapter(get_logger(__name__)) @@ -59,7 +60,7 @@ def split_seq_string(sequence): monomers.append(Monomer(resname=resname, n_blocks=n_blocks)) return monomers -def gen_params(name="polymer", outpath=Path("polymer.itp"), inpath=[], lib=None, seq=None, seq_file=None): +def gen_params(name="polymer", outpath=Path("polymer.itp"), inpath=[], lib=None, seq=None, seq_file=None, dsdna=False): """ Top level function for running the polyply parameter generation. Parameters seq and seq_file are mutually exclusive. Set the other @@ -96,6 +97,10 @@ def gen_params(name="polymer", outpath=Path("polymer.itp"), inpath=[], lib=None, LOGGER.info("reading sequence from file", type="step") meta_molecule = MetaMolecule.from_sequence_file(force_field, seq_file, name) + # Generate complementary DNA strand + if dsdna: + complement_dsDNA(meta_molecule) + # Do transformationa and apply link LOGGER.info("mapping sequence to molecule", type="step") meta_molecule = MapToMolecule(force_field).run_molecule(meta_molecule) @@ -103,12 +108,9 @@ def gen_params(name="polymer", outpath=Path("polymer.itp"), inpath=[], lib=None, meta_molecule = ApplyLinks().run_molecule(meta_molecule) # Raise warning if molecule is disconnected - if not nx.is_connected(meta_molecule.molecule): - LOGGER.warning("Your molecule consists of disjoint parts." - "Perhaps links were not applied correctly.") - msg = "Missing link between residue {idxA} {resA} and residue {idxB} {resB}" - for missing in find_missing_edges(meta_molecule, meta_molecule.molecule): - LOGGER.warning(msg, **missing) + msg = "Missing a link between residue {idxA} {resA} and residue {idxB} {resB}." + for missing in find_missing_edges(meta_molecule, meta_molecule.molecule): + LOGGER.warning(msg, **missing) with deferred_open(outpath, 'w') as outfile: header = [ ' '.join(sys.argv) + "\n" ] diff --git a/polyply/src/meta_molecule.py b/polyply/src/meta_molecule.py index 31bbc2e4..5ce58edf 100644 --- a/polyply/src/meta_molecule.py +++ b/polyply/src/meta_molecule.py @@ -104,6 +104,7 @@ def __init__(self, *args, **kwargs): self.__search_tree = None self.root = None self.dfs = False + self.max_resid = 0 # add resids to polyply meta-molecule nodes if they are not # present. All algorithms rely on proper resids @@ -117,6 +118,13 @@ def __init__(self, *args, **kwargs): msg = "Couldn't add 1 to node. Either provide resids or use integers as node keys." raise IOError(msg) + if self.max_resid < self.nodes[node]["resid"]: + self.max_resid = self.nodes[node]["resid"] + + def add_node(self, *args, **kwargs): + self.max_resid += 1 + kwargs["resid"] = self.max_resid + super().add_node(*args, **kwargs) def add_monomer(self, current, resname, connections): """ @@ -125,14 +133,7 @@ def add_monomer(self, current, resname, connections): that matches may only refer to already existing nodes. But connections can be an empty list. """ - resids = nx.get_node_attributes(self, "resid") - - if resids: - resid = max(resids.values()) + 1 - else: - resid = 1 - - self.add_node(current, resname=resname, resid=resid, build=True, backmap=True) + self.add_node(current, resname=resname, build=True, backmap=True) for edge in connections: if self.has_node(edge[0]) and self.has_node(edge[1]): self.add_edge(edge[0], edge[1]) @@ -155,7 +156,7 @@ def relabel_and_redo_res_graph(self, mapping): mapping of node-key to new residue name """ # find the maximum resiude id - max_resid = max(nx.get_node_attributes(self.molecule, "resid").values()) + max_resid = self.max_resid # resname the residues and increase with pseudo-resid for node, resname in mapping.items(): self.molecule.nodes[node]["resname"] = resname diff --git a/polyply/src/simple_seq_parsers.py b/polyply/src/simple_seq_parsers.py index 3ebd29e8..fb4b0968 100644 --- a/polyply/src/simple_seq_parsers.py +++ b/polyply/src/simple_seq_parsers.py @@ -191,7 +191,7 @@ def _identify_residues(comments): if "RNA" in comment: RNA = True - + if "PROTEIN" in comment: AA = True @@ -253,6 +253,9 @@ def parse_ig(filepath): raise FileFormatError(msg) DNA, RNA, AA = _identify_residues(comments) + if set(clean_lines[0]).issubset(set(['A', 'C', 'G', 'T'])): + LOGGER.warning("Found only the letters A, C, G, T on first line. Are you missing the title line in your .ig file?") + seq_graph = _parse_plain(clean_lines[1:], DNA=DNA, RNA=RNA, AA=AA) if ter_char == '2': diff --git a/polyply/tests/test_data/library_tests/parmbsc1/dsDNA/polyply/DNA.itp b/polyply/tests/test_data/library_tests/parmbsc1/dsDNA/polyply/DNA.itp new file mode 100644 index 00000000..03b97c79 --- /dev/null +++ b/polyply/tests/test_data/library_tests/parmbsc1/dsDNA/polyply/DNA.itp @@ -0,0 +1,5672 @@ +; +; File 'topol.top' was generated +; By user: fabian (23086) +; On host: md26 +; At date: Wed Mar 9 15:33:49 2022 +; +; This is a standalone topology file +; +; Created by: +; :-) GROMACS - gmx pdb2gmx, 2021.3 (-: +; +; Executable: /usr/local/gromacs-2021.3/bin/gmx +; Data prefix: /usr/local/gromacs-2021.3 +; Working dir: /coarse/fabian/current-projects/polymer_itp_builder/examples_for_paper/DNA +; Command line: +; gmx pdb2gmx -f ref_dsDNA/19706361ABD.pdb -merge all +; Force field was read from current directory or a relative path - path added. +; + +; Include forcefield parameters + +[ moleculetype ] +; Name nrexcl +DNA 3 + +[ atoms ] +; nr type resnr residue atom cgnr charge mass typeB chargeB massB +; residue 1 DA rtp DA5 q -0.3 + 1 HO 1 DA H5T 1 0.4422 + 2 OH 1 DA O5' 2 -0.6318 + 3 CI 1 DA C5' 3 -0.0069 + 4 H1 1 DA H5'1 4 0.0754 + 5 H1 1 DA H5'2 5 0.0754 + 6 CT 1 DA C4' 6 0.1629 + 7 H1 1 DA H4' 7 0.1176 + 8 OS 1 DA O4' 8 -0.3691 + 9 CT 1 DA C1' 9 0.0431 + 10 H2 1 DA H1' 10 0.1838 + 11 N* 1 DA N9 11 -0.0268 + 12 C1 1 DA C8 12 0.1607 + 13 H5 1 DA H8 13 0.1877 + 14 NB 1 DA N7 14 -0.6175 + 15 CB 1 DA C5 15 0.0725 + 16 CA 1 DA C6 16 0.6897 + 17 N2 1 DA N6 17 -0.9123 + 18 H 1 DA H61 18 0.4167 + 19 H 1 DA H62 19 0.4167 + 20 NC 1 DA N1 20 -0.7624 + 21 CQ 1 DA C2 21 0.5716 + 22 H5 1 DA H2 22 0.0598 + 23 NC 1 DA N3 23 -0.7417 + 24 CB 1 DA C4 24 0.38 + 25 CE 1 DA C3' 25 0.0713 + 26 H1 1 DA H3' 26 0.0985 + 27 CT 1 DA C2' 27 -0.0854 + 28 HC 1 DA H2'1 28 0.0718 + 29 HC 1 DA H2'2 29 0.0718 + 30 OS 1 DA O3' 30 -0.5232 ; qtot -0.3079 +; residue 2 DA rtp DA q -1.0 + 31 P 2 DA P 31 1.1659 + 32 O2 2 DA O1P 32 -0.7761 + 33 O2 2 DA O2P 33 -0.7761 + 34 OS 2 DA O5' 34 -0.4954 + 35 CI 2 DA C5' 35 -0.0069 + 36 H1 2 DA H5'1 36 0.0754 + 37 H1 2 DA H5'2 37 0.0754 + 38 CT 2 DA C4' 38 0.1629 + 39 H1 2 DA H4' 39 0.1176 + 40 OS 2 DA O4' 40 -0.3691 + 41 CT 2 DA C1' 41 0.0431 + 42 H2 2 DA H1' 42 0.1838 + 43 N* 2 DA N9 43 -0.0268 + 44 C1 2 DA C8 44 0.1607 + 45 H5 2 DA H8 45 0.1877 + 46 NB 2 DA N7 46 -0.6175 + 47 CB 2 DA C5 47 0.0725 + 48 CA 2 DA C6 48 0.6897 + 49 N2 2 DA N6 49 -0.9123 + 50 H 2 DA H61 50 0.4167 + 51 H 2 DA H62 51 0.4167 + 52 NC 2 DA N1 52 -0.7624 + 53 CQ 2 DA C2 53 0.5716 + 54 H5 2 DA H2 54 0.0598 + 55 NC 2 DA N3 55 -0.7417 + 56 CB 2 DA C4 56 0.38 + 57 CE 2 DA C3' 57 0.0713 + 58 H1 2 DA H3' 58 0.0985 + 59 CT 2 DA C2' 59 -0.0854 + 60 HC 2 DA H2'1 60 0.0718 + 61 HC 2 DA H2'2 61 0.0718 + 62 OS 2 DA O3' 62 -0.5232 ; qtot -1.308 +; residue 3 DA rtp DA q -1.0 + 63 P 3 DA P 63 1.1659 + 64 O2 3 DA O1P 64 -0.7761 + 65 O2 3 DA O2P 65 -0.7761 + 66 OS 3 DA O5' 66 -0.4954 + 67 CI 3 DA C5' 67 -0.0069 + 68 H1 3 DA H5'1 68 0.0754 + 69 H1 3 DA H5'2 69 0.0754 + 70 CT 3 DA C4' 70 0.1629 + 71 H1 3 DA H4' 71 0.1176 + 72 OS 3 DA O4' 72 -0.3691 + 73 CT 3 DA C1' 73 0.0431 + 74 H2 3 DA H1' 74 0.1838 + 75 N* 3 DA N9 75 -0.0268 + 76 C1 3 DA C8 76 0.1607 + 77 H5 3 DA H8 77 0.1877 + 78 NB 3 DA N7 78 -0.6175 + 79 CB 3 DA C5 79 0.0725 + 80 CA 3 DA C6 80 0.6897 + 81 N2 3 DA N6 81 -0.9123 + 82 H 3 DA H61 82 0.4167 + 83 H 3 DA H62 83 0.4167 + 84 NC 3 DA N1 84 -0.7624 + 85 CQ 3 DA C2 85 0.5716 + 86 H5 3 DA H2 86 0.0598 + 87 NC 3 DA N3 87 -0.7417 + 88 CB 3 DA C4 88 0.38 + 89 CE 3 DA C3' 89 0.0713 + 90 H1 3 DA H3' 90 0.0985 + 91 CT 3 DA C2' 91 -0.0854 + 92 HC 3 DA H2'1 92 0.0718 + 93 HC 3 DA H2'2 93 0.0718 + 94 OS 3 DA O3' 94 -0.5232 ; qtot -2.308 +; residue 4 DG rtp DG q -1.0 + 95 P 4 DG P 95 1.1659 + 96 O2 4 DG O1P 96 -0.7761 + 97 O2 4 DG O2P 97 -0.7761 + 98 OS 4 DG O5' 98 -0.4954 + 99 CI 4 DG C5' 99 -0.0069 + 100 H1 4 DG H5'1 100 0.0754 + 101 H1 4 DG H5'2 101 0.0754 + 102 CT 4 DG C4' 102 0.1629 + 103 H1 4 DG H4' 103 0.1176 + 104 OS 4 DG O4' 104 -0.3691 + 105 CT 4 DG C1' 105 0.0358 + 106 H2 4 DG H1' 106 0.1746 + 107 N* 4 DG N9 107 0.0577 + 108 CK 4 DG C8 108 0.0736 + 109 H5 4 DG H8 109 0.1997 + 110 NB 4 DG N7 110 -0.5725 + 111 CB 4 DG C5 111 0.1991 + 112 C 4 DG C6 112 0.4918 + 113 O 4 DG O6 113 -0.5699 + 114 NA 4 DG N1 114 -0.5053 + 115 H 4 DG H1 115 0.352 + 116 CA 4 DG C2 116 0.7432 + 117 N2 4 DG N2 117 -0.923 + 118 H 4 DG H21 118 0.4235 + 119 H 4 DG H22 119 0.4235 + 120 NC 4 DG N3 120 -0.6636 + 121 CB 4 DG C4 121 0.1814 + 122 CE 4 DG C3' 122 0.0713 + 123 H1 4 DG H3' 123 0.0985 + 124 CT 4 DG C2' 124 -0.0854 + 125 HC 4 DG H2'1 125 0.0718 + 126 HC 4 DG H2'2 126 0.0718 + 127 OS 4 DG O3' 127 -0.5232 ; qtot -3.308 +; residue 5 DG rtp DG q -1.0 + 128 P 5 DG P 128 1.1659 + 129 O2 5 DG O1P 129 -0.7761 + 130 O2 5 DG O2P 130 -0.7761 + 131 OS 5 DG O5' 131 -0.4954 + 132 CI 5 DG C5' 132 -0.0069 + 133 H1 5 DG H5'1 133 0.0754 + 134 H1 5 DG H5'2 134 0.0754 + 135 CT 5 DG C4' 135 0.1629 + 136 H1 5 DG H4' 136 0.1176 + 137 OS 5 DG O4' 137 -0.3691 + 138 CT 5 DG C1' 138 0.0358 + 139 H2 5 DG H1' 139 0.1746 + 140 N* 5 DG N9 140 0.0577 + 141 CK 5 DG C8 141 0.0736 + 142 H5 5 DG H8 142 0.1997 + 143 NB 5 DG N7 143 -0.5725 + 144 CB 5 DG C5 144 0.1991 + 145 C 5 DG C6 145 0.4918 + 146 O 5 DG O6 146 -0.5699 + 147 NA 5 DG N1 147 -0.5053 + 148 H 5 DG H1 148 0.352 + 149 CA 5 DG C2 149 0.7432 + 150 N2 5 DG N2 150 -0.923 + 151 H 5 DG H21 151 0.4235 + 152 H 5 DG H22 152 0.4235 + 153 NC 5 DG N3 153 -0.6636 + 154 CB 5 DG C4 154 0.1814 + 155 CE 5 DG C3' 155 0.0713 + 156 H1 5 DG H3' 156 0.0985 + 157 CT 5 DG C2' 157 -0.0854 + 158 HC 5 DG H2'1 158 0.0718 + 159 HC 5 DG H2'2 159 0.0718 + 160 OS 5 DG O3' 160 -0.5232 ; qtot -4.308 +; residue 6 DC rtp DC q -1.0 + 161 P 6 DC P 161 1.1659 + 162 O2 6 DC O1P 162 -0.7761 + 163 O2 6 DC O2P 163 -0.7761 + 164 OS 6 DC O5' 164 -0.4954 + 165 CI 6 DC C5' 165 -0.0069 + 166 H1 6 DC H5'1 166 0.0754 + 167 H1 6 DC H5'2 167 0.0754 + 168 CT 6 DC C4' 168 0.1629 + 169 H1 6 DC H4' 169 0.1176 + 170 OS 6 DC O4' 170 -0.3691 + 171 CT 6 DC C1' 171 -0.0116 + 172 H2 6 DC H1' 172 0.1963 + 173 N* 6 DC N1 173 -0.0339 + 174 CM 6 DC C6 174 -0.0183 + 175 H4 6 DC H6 175 0.2293 + 176 CM 6 DC C5 176 -0.5222 + 177 HA 6 DC H5 177 0.1863 + 178 CA 6 DC C4 178 0.8439 + 179 N2 6 DC N4 179 -0.9773 + 180 H 6 DC H41 180 0.4314 + 181 H 6 DC H42 181 0.4314 + 182 NC 6 DC N3 182 -0.7748 + 183 C 6 DC C2 183 0.7959 + 184 O 6 DC O2 184 -0.6548 + 185 CE 6 DC C3' 185 0.0713 + 186 H1 6 DC H3' 186 0.0985 + 187 CT 6 DC C2' 187 -0.0854 + 188 HC 6 DC H2'1 188 0.0718 + 189 HC 6 DC H2'2 189 0.0718 + 190 OS 6 DC O3' 190 -0.5232 ; qtot -5.308 +; residue 7 DC rtp DC q -1.0 + 191 P 7 DC P 191 1.1659 + 192 O2 7 DC O1P 192 -0.7761 + 193 O2 7 DC O2P 193 -0.7761 + 194 OS 7 DC O5' 194 -0.4954 + 195 CI 7 DC C5' 195 -0.0069 + 196 H1 7 DC H5'1 196 0.0754 + 197 H1 7 DC H5'2 197 0.0754 + 198 CT 7 DC C4' 198 0.1629 + 199 H1 7 DC H4' 199 0.1176 + 200 OS 7 DC O4' 200 -0.3691 + 201 CT 7 DC C1' 201 -0.0116 + 202 H2 7 DC H1' 202 0.1963 + 203 N* 7 DC N1 203 -0.0339 + 204 CM 7 DC C6 204 -0.0183 + 205 H4 7 DC H6 205 0.2293 + 206 CM 7 DC C5 206 -0.5222 + 207 HA 7 DC H5 207 0.1863 + 208 CA 7 DC C4 208 0.8439 + 209 N2 7 DC N4 209 -0.9773 + 210 H 7 DC H41 210 0.4314 + 211 H 7 DC H42 211 0.4314 + 212 NC 7 DC N3 212 -0.7748 + 213 C 7 DC C2 213 0.7959 + 214 O 7 DC O2 214 -0.6548 + 215 CE 7 DC C3' 215 0.0713 + 216 H1 7 DC H3' 216 0.0985 + 217 CT 7 DC C2' 217 -0.0854 + 218 HC 7 DC H2'1 218 0.0718 + 219 HC 7 DC H2'2 219 0.0718 + 220 OS 7 DC O3' 220 -0.5232 ; qtot -6.308 +; residue 8 DT rtp DT q -1.0 + 221 P 8 DT P 221 1.1659 + 222 O2 8 DT O1P 222 -0.7761 + 223 O2 8 DT O2P 223 -0.7761 + 224 OS 8 DT O5' 224 -0.4954 + 225 CI 8 DT C5' 225 -0.0069 + 226 H1 8 DT H5'1 226 0.0754 + 227 H1 8 DT H5'2 227 0.0754 + 228 CT 8 DT C4' 228 0.1629 + 229 H1 8 DT H4' 229 0.1176 + 230 OS 8 DT O4' 230 -0.3691 + 231 CT 8 DT C1' 231 0.068 + 232 H2 8 DT H1' 232 0.1804 + 233 N* 8 DT N1 233 -0.0239 + 234 C2 8 DT C6 234 -0.2209 + 235 H4 8 DT H6 235 0.2607 + 236 C2 8 DT C5 236 0.0025 + 237 CT 8 DT C7 237 -0.2269 + 238 HC 8 DT H71 238 0.077 + 239 HC 8 DT H72 239 0.077 + 240 HC 8 DT H73 240 0.077 + 241 C 8 DT C4 241 0.5194 + 242 O 8 DT O4 242 -0.5563 + 243 NA 8 DT N3 243 -0.434 + 244 H 8 DT H3 244 0.342 + 245 C 8 DT C2 245 0.5677 + 246 O 8 DT O2 246 -0.5881 + 247 CE 8 DT C3' 247 0.0713 + 248 H1 8 DT H3' 248 0.0985 + 249 CT 8 DT C2' 249 -0.0854 + 250 HC 8 DT H2'1 250 0.0718 + 251 HC 8 DT H2'2 251 0.0718 + 252 OS 8 DT O3' 252 -0.5232 ; qtot -7.308 +; residue 9 DT rtp DT3 q -0.7 + 253 P 9 DT P 253 1.1659 + 254 O2 9 DT O1P 254 -0.7761 + 255 O2 9 DT O2P 255 -0.7761 + 256 OS 9 DT O5' 256 -0.4954 + 257 CI 9 DT C5' 257 -0.0069 + 258 H1 9 DT H5'1 258 0.0754 + 259 H1 9 DT H5'2 259 0.0754 + 260 CT 9 DT C4' 260 0.1629 + 261 H1 9 DT H4' 261 0.1176 + 262 OS 9 DT O4' 262 -0.3691 + 263 CT 9 DT C1' 263 0.068 + 264 H2 9 DT H1' 264 0.1804 + 265 N* 9 DT N1 265 -0.0239 + 266 C2 9 DT C6 266 -0.2209 + 267 H4 9 DT H6 267 0.2607 + 268 C2 9 DT C5 268 0.0025 + 269 CT 9 DT C7 269 -0.2269 + 270 HC 9 DT H71 270 0.077 + 271 HC 9 DT H72 271 0.077 + 272 HC 9 DT H73 272 0.077 + 273 C 9 DT C4 273 0.5194 + 274 O 9 DT O4 274 -0.5563 + 275 NA 9 DT N3 275 -0.434 + 276 H 9 DT H3 276 0.342 + 277 C 9 DT C2 277 0.5677 + 278 O 9 DT O2 278 -0.5881 + 279 CE 9 DT C3' 279 0.0713 + 280 H1 9 DT H3' 280 0.0985 + 281 CT 9 DT C2' 281 -0.0854 + 282 HC 9 DT H2'1 282 0.0718 + 283 HC 9 DT H2'2 283 0.0718 + 284 OH 9 DT O3' 284 -0.6549 + 285 HO 9 DT H3T 285 0.4396 ; qtot -8 +; residue 10 DA rtp DA5 q -0.3 + 286 HO 10 DA H5T 286 0.4422 + 287 OH 10 DA O5' 287 -0.6318 + 288 CI 10 DA C5' 288 -0.0069 + 289 H1 10 DA H5'1 289 0.0754 + 290 H1 10 DA H5'2 290 0.0754 + 291 CT 10 DA C4' 291 0.1629 + 292 H1 10 DA H4' 292 0.1176 + 293 OS 10 DA O4' 293 -0.3691 + 294 CT 10 DA C1' 294 0.0431 + 295 H2 10 DA H1' 295 0.1838 + 296 N* 10 DA N9 296 -0.0268 + 297 C1 10 DA C8 297 0.1607 + 298 H5 10 DA H8 298 0.1877 + 299 NB 10 DA N7 299 -0.6175 + 300 CB 10 DA C5 300 0.0725 + 301 CA 10 DA C6 301 0.6897 + 302 N2 10 DA N6 302 -0.9123 + 303 H 10 DA H61 303 0.4167 + 304 H 10 DA H62 304 0.4167 + 305 NC 10 DA N1 305 -0.7624 + 306 CQ 10 DA C2 306 0.5716 + 307 H5 10 DA H2 307 0.0598 + 308 NC 10 DA N3 308 -0.7417 + 309 CB 10 DA C4 309 0.38 + 310 CE 10 DA C3' 310 0.0713 + 311 H1 10 DA H3' 311 0.0985 + 312 CT 10 DA C2' 312 -0.0854 + 313 HC 10 DA H2'1 313 0.0718 + 314 HC 10 DA H2'2 314 0.0718 + 315 OS 10 DA O3' 315 -0.5232 ; qtot -8.308 +; residue 11 DA rtp DA q -1.0 + 316 P 11 DA P 316 1.1659 + 317 O2 11 DA O1P 317 -0.7761 + 318 O2 11 DA O2P 318 -0.7761 + 319 OS 11 DA O5' 319 -0.4954 + 320 CI 11 DA C5' 320 -0.0069 + 321 H1 11 DA H5'1 321 0.0754 + 322 H1 11 DA H5'2 322 0.0754 + 323 CT 11 DA C4' 323 0.1629 + 324 H1 11 DA H4' 324 0.1176 + 325 OS 11 DA O4' 325 -0.3691 + 326 CT 11 DA C1' 326 0.0431 + 327 H2 11 DA H1' 327 0.1838 + 328 N* 11 DA N9 328 -0.0268 + 329 C1 11 DA C8 329 0.1607 + 330 H5 11 DA H8 330 0.1877 + 331 NB 11 DA N7 331 -0.6175 + 332 CB 11 DA C5 332 0.0725 + 333 CA 11 DA C6 333 0.6897 + 334 N2 11 DA N6 334 -0.9123 + 335 H 11 DA H61 335 0.4167 + 336 H 11 DA H62 336 0.4167 + 337 NC 11 DA N1 337 -0.7624 + 338 CQ 11 DA C2 338 0.5716 + 339 H5 11 DA H2 339 0.0598 + 340 NC 11 DA N3 340 -0.7417 + 341 CB 11 DA C4 341 0.38 + 342 CE 11 DA C3' 342 0.0713 + 343 H1 11 DA H3' 343 0.0985 + 344 CT 11 DA C2' 344 -0.0854 + 345 HC 11 DA H2'1 345 0.0718 + 346 HC 11 DA H2'2 346 0.0718 + 347 OS 11 DA O3' 347 -0.5232 ; qtot -9.308 +; residue 12 DG rtp DG q -1.0 + 348 P 12 DG P 348 1.1659 + 349 O2 12 DG O1P 349 -0.7761 + 350 O2 12 DG O2P 350 -0.7761 + 351 OS 12 DG O5' 351 -0.4954 + 352 CI 12 DG C5' 352 -0.0069 + 353 H1 12 DG H5'1 353 0.0754 + 354 H1 12 DG H5'2 354 0.0754 + 355 CT 12 DG C4' 355 0.1629 + 356 H1 12 DG H4' 356 0.1176 + 357 OS 12 DG O4' 357 -0.3691 + 358 CT 12 DG C1' 358 0.0358 + 359 H2 12 DG H1' 359 0.1746 + 360 N* 12 DG N9 360 0.0577 + 361 CK 12 DG C8 361 0.0736 + 362 H5 12 DG H8 362 0.1997 + 363 NB 12 DG N7 363 -0.5725 + 364 CB 12 DG C5 364 0.1991 + 365 C 12 DG C6 365 0.4918 + 366 O 12 DG O6 366 -0.5699 + 367 NA 12 DG N1 367 -0.5053 + 368 H 12 DG H1 368 0.352 + 369 CA 12 DG C2 369 0.7432 + 370 N2 12 DG N2 370 -0.923 + 371 H 12 DG H21 371 0.4235 + 372 H 12 DG H22 372 0.4235 + 373 NC 12 DG N3 373 -0.6636 + 374 CB 12 DG C4 374 0.1814 + 375 CE 12 DG C3' 375 0.0713 + 376 H1 12 DG H3' 376 0.0985 + 377 CT 12 DG C2' 377 -0.0854 + 378 HC 12 DG H2'1 378 0.0718 + 379 HC 12 DG H2'2 379 0.0718 + 380 OS 12 DG O3' 380 -0.5232 ; qtot -10.31 +; residue 13 DG rtp DG q -1.0 + 381 P 13 DG P 381 1.1659 + 382 O2 13 DG O1P 382 -0.7761 + 383 O2 13 DG O2P 383 -0.7761 + 384 OS 13 DG O5' 384 -0.4954 + 385 CI 13 DG C5' 385 -0.0069 + 386 H1 13 DG H5'1 386 0.0754 + 387 H1 13 DG H5'2 387 0.0754 + 388 CT 13 DG C4' 388 0.1629 + 389 H1 13 DG H4' 389 0.1176 + 390 OS 13 DG O4' 390 -0.3691 + 391 CT 13 DG C1' 391 0.0358 + 392 H2 13 DG H1' 392 0.1746 + 393 N* 13 DG N9 393 0.0577 + 394 CK 13 DG C8 394 0.0736 + 395 H5 13 DG H8 395 0.1997 + 396 NB 13 DG N7 396 -0.5725 + 397 CB 13 DG C5 397 0.1991 + 398 C 13 DG C6 398 0.4918 + 399 O 13 DG O6 399 -0.5699 + 400 NA 13 DG N1 400 -0.5053 + 401 H 13 DG H1 401 0.352 + 402 CA 13 DG C2 402 0.7432 + 403 N2 13 DG N2 403 -0.923 + 404 H 13 DG H21 404 0.4235 + 405 H 13 DG H22 405 0.4235 + 406 NC 13 DG N3 406 -0.6636 + 407 CB 13 DG C4 407 0.1814 + 408 CE 13 DG C3' 408 0.0713 + 409 H1 13 DG H3' 409 0.0985 + 410 CT 13 DG C2' 410 -0.0854 + 411 HC 13 DG H2'1 411 0.0718 + 412 HC 13 DG H2'2 412 0.0718 + 413 OS 13 DG O3' 413 -0.5232 ; qtot -11.31 +; residue 14 DC rtp DC q -1.0 + 414 P 14 DC P 414 1.1659 + 415 O2 14 DC O1P 415 -0.7761 + 416 O2 14 DC O2P 416 -0.7761 + 417 OS 14 DC O5' 417 -0.4954 + 418 CI 14 DC C5' 418 -0.0069 + 419 H1 14 DC H5'1 419 0.0754 + 420 H1 14 DC H5'2 420 0.0754 + 421 CT 14 DC C4' 421 0.1629 + 422 H1 14 DC H4' 422 0.1176 + 423 OS 14 DC O4' 423 -0.3691 + 424 CT 14 DC C1' 424 -0.0116 + 425 H2 14 DC H1' 425 0.1963 + 426 N* 14 DC N1 426 -0.0339 + 427 CM 14 DC C6 427 -0.0183 + 428 H4 14 DC H6 428 0.2293 + 429 CM 14 DC C5 429 -0.5222 + 430 HA 14 DC H5 430 0.1863 + 431 CA 14 DC C4 431 0.8439 + 432 N2 14 DC N4 432 -0.9773 + 433 H 14 DC H41 433 0.4314 + 434 H 14 DC H42 434 0.4314 + 435 NC 14 DC N3 435 -0.7748 + 436 C 14 DC C2 436 0.7959 + 437 O 14 DC O2 437 -0.6548 + 438 CE 14 DC C3' 438 0.0713 + 439 H1 14 DC H3' 439 0.0985 + 440 CT 14 DC C2' 440 -0.0854 + 441 HC 14 DC H2'1 441 0.0718 + 442 HC 14 DC H2'2 442 0.0718 + 443 OS 14 DC O3' 443 -0.5232 ; qtot -12.31 +; residue 15 DC rtp DC q -1.0 + 444 P 15 DC P 444 1.1659 + 445 O2 15 DC O1P 445 -0.7761 + 446 O2 15 DC O2P 446 -0.7761 + 447 OS 15 DC O5' 447 -0.4954 + 448 CI 15 DC C5' 448 -0.0069 + 449 H1 15 DC H5'1 449 0.0754 + 450 H1 15 DC H5'2 450 0.0754 + 451 CT 15 DC C4' 451 0.1629 + 452 H1 15 DC H4' 452 0.1176 + 453 OS 15 DC O4' 453 -0.3691 + 454 CT 15 DC C1' 454 -0.0116 + 455 H2 15 DC H1' 455 0.1963 + 456 N* 15 DC N1 456 -0.0339 + 457 CM 15 DC C6 457 -0.0183 + 458 H4 15 DC H6 458 0.2293 + 459 CM 15 DC C5 459 -0.5222 + 460 HA 15 DC H5 460 0.1863 + 461 CA 15 DC C4 461 0.8439 + 462 N2 15 DC N4 462 -0.9773 + 463 H 15 DC H41 463 0.4314 + 464 H 15 DC H42 464 0.4314 + 465 NC 15 DC N3 465 -0.7748 + 466 C 15 DC C2 466 0.7959 + 467 O 15 DC O2 467 -0.6548 + 468 CE 15 DC C3' 468 0.0713 + 469 H1 15 DC H3' 469 0.0985 + 470 CT 15 DC C2' 470 -0.0854 + 471 HC 15 DC H2'1 471 0.0718 + 472 HC 15 DC H2'2 472 0.0718 + 473 OS 15 DC O3' 473 -0.5232 ; qtot -13.31 +; residue 16 DT rtp DT q -1.0 + 474 P 16 DT P 474 1.1659 + 475 O2 16 DT O1P 475 -0.7761 + 476 O2 16 DT O2P 476 -0.7761 + 477 OS 16 DT O5' 477 -0.4954 + 478 CI 16 DT C5' 478 -0.0069 + 479 H1 16 DT H5'1 479 0.0754 + 480 H1 16 DT H5'2 480 0.0754 + 481 CT 16 DT C4' 481 0.1629 + 482 H1 16 DT H4' 482 0.1176 + 483 OS 16 DT O4' 483 -0.3691 + 484 CT 16 DT C1' 484 0.068 + 485 H2 16 DT H1' 485 0.1804 + 486 N* 16 DT N1 486 -0.0239 + 487 C2 16 DT C6 487 -0.2209 + 488 H4 16 DT H6 488 0.2607 + 489 C2 16 DT C5 489 0.0025 + 490 CT 16 DT C7 490 -0.2269 + 491 HC 16 DT H71 491 0.077 + 492 HC 16 DT H72 492 0.077 + 493 HC 16 DT H73 493 0.077 + 494 C 16 DT C4 494 0.5194 + 495 O 16 DT O4 495 -0.5563 + 496 NA 16 DT N3 496 -0.434 + 497 H 16 DT H3 497 0.342 + 498 C 16 DT C2 498 0.5677 + 499 O 16 DT O2 499 -0.5881 + 500 CE 16 DT C3' 500 0.0713 + 501 H1 16 DT H3' 501 0.0985 + 502 CT 16 DT C2' 502 -0.0854 + 503 HC 16 DT H2'1 503 0.0718 + 504 HC 16 DT H2'2 504 0.0718 + 505 OS 16 DT O3' 505 -0.5232 ; qtot -14.31 +; residue 17 DT rtp DT q -1.0 + 506 P 17 DT P 506 1.1659 + 507 O2 17 DT O1P 507 -0.7761 + 508 O2 17 DT O2P 508 -0.7761 + 509 OS 17 DT O5' 509 -0.4954 + 510 CI 17 DT C5' 510 -0.0069 + 511 H1 17 DT H5'1 511 0.0754 + 512 H1 17 DT H5'2 512 0.0754 + 513 CT 17 DT C4' 513 0.1629 + 514 H1 17 DT H4' 514 0.1176 + 515 OS 17 DT O4' 515 -0.3691 + 516 CT 17 DT C1' 516 0.068 + 517 H2 17 DT H1' 517 0.1804 + 518 N* 17 DT N1 518 -0.0239 + 519 C2 17 DT C6 519 -0.2209 + 520 H4 17 DT H6 520 0.2607 + 521 C2 17 DT C5 521 0.0025 + 522 CT 17 DT C7 522 -0.2269 + 523 HC 17 DT H71 523 0.077 + 524 HC 17 DT H72 524 0.077 + 525 HC 17 DT H73 525 0.077 + 526 C 17 DT C4 526 0.5194 + 527 O 17 DT O4 527 -0.5563 + 528 NA 17 DT N3 528 -0.434 + 529 H 17 DT H3 529 0.342 + 530 C 17 DT C2 530 0.5677 + 531 O 17 DT O2 531 -0.5881 + 532 CE 17 DT C3' 532 0.0713 + 533 H1 17 DT H3' 533 0.0985 + 534 CT 17 DT C2' 534 -0.0854 + 535 HC 17 DT H2'1 535 0.0718 + 536 HC 17 DT H2'2 536 0.0718 + 537 OS 17 DT O3' 537 -0.5232 ; qtot -15.31 +; residue 18 DT rtp DT3 q -0.7 + 538 P 18 DT P 538 1.1659 + 539 O2 18 DT O1P 539 -0.7761 + 540 O2 18 DT O2P 540 -0.7761 + 541 OS 18 DT O5' 541 -0.4954 + 542 CI 18 DT C5' 542 -0.0069 + 543 H1 18 DT H5'1 543 0.0754 + 544 H1 18 DT H5'2 544 0.0754 + 545 CT 18 DT C4' 545 0.1629 + 546 H1 18 DT H4' 546 0.1176 + 547 OS 18 DT O4' 547 -0.3691 + 548 CT 18 DT C1' 548 0.068 + 549 H2 18 DT H1' 549 0.1804 + 550 N* 18 DT N1 550 -0.0239 + 551 C2 18 DT C6 551 -0.2209 + 552 H4 18 DT H6 552 0.2607 + 553 C2 18 DT C5 553 0.0025 + 554 CT 18 DT C7 554 -0.2269 + 555 HC 18 DT H71 555 0.077 + 556 HC 18 DT H72 556 0.077 + 557 HC 18 DT H73 557 0.077 + 558 C 18 DT C4 558 0.5194 + 559 O 18 DT O4 559 -0.5563 + 560 NA 18 DT N3 560 -0.434 + 561 H 18 DT H3 561 0.342 + 562 C 18 DT C2 562 0.5677 + 563 O 18 DT O2 563 -0.5881 + 564 CE 18 DT C3' 564 0.0713 + 565 H1 18 DT H3' 565 0.0985 + 566 CT 18 DT C2' 566 -0.0854 + 567 HC 18 DT H2'1 567 0.0718 + 568 HC 18 DT H2'2 568 0.0718 + 569 OH 18 DT O3' 569 -0.6549 + 570 HO 18 DT H3T 570 0.4396 ; qtot -16 + +[ bonds ] +; ai aj funct c0 c1 c2 c3 + 1 2 1 + 2 3 1 + 3 4 1 + 3 5 1 + 3 6 1 + 6 7 1 + 6 8 1 + 6 25 1 + 8 9 1 + 9 10 1 + 9 11 1 + 9 27 1 + 11 12 1 + 11 24 1 + 12 13 1 + 12 14 1 + 14 15 1 + 15 16 1 + 15 24 1 + 16 17 1 + 16 20 1 + 17 18 1 + 17 19 1 + 20 21 1 + 21 22 1 + 21 23 1 + 23 24 1 + 25 26 1 + 25 27 1 + 25 30 1 + 27 28 1 + 27 29 1 + 30 31 1 + 31 32 1 + 31 33 1 + 31 34 1 + 34 35 1 + 35 36 1 + 35 37 1 + 35 38 1 + 38 39 1 + 38 40 1 + 38 57 1 + 40 41 1 + 41 42 1 + 41 43 1 + 41 59 1 + 43 44 1 + 43 56 1 + 44 45 1 + 44 46 1 + 46 47 1 + 47 48 1 + 47 56 1 + 48 49 1 + 48 52 1 + 49 50 1 + 49 51 1 + 52 53 1 + 53 54 1 + 53 55 1 + 55 56 1 + 57 58 1 + 57 59 1 + 57 62 1 + 59 60 1 + 59 61 1 + 62 63 1 + 63 64 1 + 63 65 1 + 63 66 1 + 66 67 1 + 67 68 1 + 67 69 1 + 67 70 1 + 70 71 1 + 70 72 1 + 70 89 1 + 72 73 1 + 73 74 1 + 73 75 1 + 73 91 1 + 75 76 1 + 75 88 1 + 76 77 1 + 76 78 1 + 78 79 1 + 79 80 1 + 79 88 1 + 80 81 1 + 80 84 1 + 81 82 1 + 81 83 1 + 84 85 1 + 85 86 1 + 85 87 1 + 87 88 1 + 89 90 1 + 89 91 1 + 89 94 1 + 91 92 1 + 91 93 1 + 94 95 1 + 95 96 1 + 95 97 1 + 95 98 1 + 98 99 1 + 99 100 1 + 99 101 1 + 99 102 1 + 102 103 1 + 102 104 1 + 102 122 1 + 104 105 1 + 105 106 1 + 105 107 1 + 105 124 1 + 107 108 1 + 107 121 1 + 108 109 1 + 108 110 1 + 110 111 1 + 111 112 1 + 111 121 1 + 112 113 1 + 112 114 1 + 114 115 1 + 114 116 1 + 116 117 1 + 116 120 1 + 117 118 1 + 117 119 1 + 120 121 1 + 122 123 1 + 122 124 1 + 122 127 1 + 124 125 1 + 124 126 1 + 127 128 1 + 128 129 1 + 128 130 1 + 128 131 1 + 131 132 1 + 132 133 1 + 132 134 1 + 132 135 1 + 135 136 1 + 135 137 1 + 135 155 1 + 137 138 1 + 138 139 1 + 138 140 1 + 138 157 1 + 140 141 1 + 140 154 1 + 141 142 1 + 141 143 1 + 143 144 1 + 144 145 1 + 144 154 1 + 145 146 1 + 145 147 1 + 147 148 1 + 147 149 1 + 149 150 1 + 149 153 1 + 150 151 1 + 150 152 1 + 153 154 1 + 155 156 1 + 155 157 1 + 155 160 1 + 157 158 1 + 157 159 1 + 160 161 1 + 161 162 1 + 161 163 1 + 161 164 1 + 164 165 1 + 165 166 1 + 165 167 1 + 165 168 1 + 168 169 1 + 168 170 1 + 168 185 1 + 170 171 1 + 171 172 1 + 171 173 1 + 171 187 1 + 173 174 1 + 173 183 1 + 174 175 1 + 174 176 1 + 176 177 1 + 176 178 1 + 178 179 1 + 178 182 1 + 179 180 1 + 179 181 1 + 182 183 1 + 183 184 1 + 185 186 1 + 185 187 1 + 185 190 1 + 187 188 1 + 187 189 1 + 190 191 1 + 191 192 1 + 191 193 1 + 191 194 1 + 194 195 1 + 195 196 1 + 195 197 1 + 195 198 1 + 198 199 1 + 198 200 1 + 198 215 1 + 200 201 1 + 201 202 1 + 201 203 1 + 201 217 1 + 203 204 1 + 203 213 1 + 204 205 1 + 204 206 1 + 206 207 1 + 206 208 1 + 208 209 1 + 208 212 1 + 209 210 1 + 209 211 1 + 212 213 1 + 213 214 1 + 215 216 1 + 215 217 1 + 215 220 1 + 217 218 1 + 217 219 1 + 220 221 1 + 221 222 1 + 221 223 1 + 221 224 1 + 224 225 1 + 225 226 1 + 225 227 1 + 225 228 1 + 228 229 1 + 228 230 1 + 228 247 1 + 230 231 1 + 231 232 1 + 231 233 1 + 231 249 1 + 233 234 1 + 233 245 1 + 234 235 1 + 234 236 1 + 236 237 1 + 236 241 1 + 237 238 1 + 237 239 1 + 237 240 1 + 241 242 1 + 241 243 1 + 243 244 1 + 243 245 1 + 245 246 1 + 247 248 1 + 247 249 1 + 247 252 1 + 249 250 1 + 249 251 1 + 252 253 1 + 253 254 1 + 253 255 1 + 253 256 1 + 256 257 1 + 257 258 1 + 257 259 1 + 257 260 1 + 260 261 1 + 260 262 1 + 260 279 1 + 262 263 1 + 263 264 1 + 263 265 1 + 263 281 1 + 265 266 1 + 265 277 1 + 266 267 1 + 266 268 1 + 268 269 1 + 268 273 1 + 269 270 1 + 269 271 1 + 269 272 1 + 273 274 1 + 273 275 1 + 275 276 1 + 275 277 1 + 277 278 1 + 279 280 1 + 279 281 1 + 279 284 1 + 281 282 1 + 281 283 1 + 284 285 1 + 286 287 1 + 287 288 1 + 288 289 1 + 288 290 1 + 288 291 1 + 291 292 1 + 291 293 1 + 291 310 1 + 293 294 1 + 294 295 1 + 294 296 1 + 294 312 1 + 296 297 1 + 296 309 1 + 297 298 1 + 297 299 1 + 299 300 1 + 300 301 1 + 300 309 1 + 301 302 1 + 301 305 1 + 302 303 1 + 302 304 1 + 305 306 1 + 306 307 1 + 306 308 1 + 308 309 1 + 310 311 1 + 310 312 1 + 310 315 1 + 312 313 1 + 312 314 1 + 315 316 1 + 316 317 1 + 316 318 1 + 316 319 1 + 319 320 1 + 320 321 1 + 320 322 1 + 320 323 1 + 323 324 1 + 323 325 1 + 323 342 1 + 325 326 1 + 326 327 1 + 326 328 1 + 326 344 1 + 328 329 1 + 328 341 1 + 329 330 1 + 329 331 1 + 331 332 1 + 332 333 1 + 332 341 1 + 333 334 1 + 333 337 1 + 334 335 1 + 334 336 1 + 337 338 1 + 338 339 1 + 338 340 1 + 340 341 1 + 342 343 1 + 342 344 1 + 342 347 1 + 344 345 1 + 344 346 1 + 347 348 1 + 348 349 1 + 348 350 1 + 348 351 1 + 351 352 1 + 352 353 1 + 352 354 1 + 352 355 1 + 355 356 1 + 355 357 1 + 355 375 1 + 357 358 1 + 358 359 1 + 358 360 1 + 358 377 1 + 360 361 1 + 360 374 1 + 361 362 1 + 361 363 1 + 363 364 1 + 364 365 1 + 364 374 1 + 365 366 1 + 365 367 1 + 367 368 1 + 367 369 1 + 369 370 1 + 369 373 1 + 370 371 1 + 370 372 1 + 373 374 1 + 375 376 1 + 375 377 1 + 375 380 1 + 377 378 1 + 377 379 1 + 380 381 1 + 381 382 1 + 381 383 1 + 381 384 1 + 384 385 1 + 385 386 1 + 385 387 1 + 385 388 1 + 388 389 1 + 388 390 1 + 388 408 1 + 390 391 1 + 391 392 1 + 391 393 1 + 391 410 1 + 393 394 1 + 393 407 1 + 394 395 1 + 394 396 1 + 396 397 1 + 397 398 1 + 397 407 1 + 398 399 1 + 398 400 1 + 400 401 1 + 400 402 1 + 402 403 1 + 402 406 1 + 403 404 1 + 403 405 1 + 406 407 1 + 408 409 1 + 408 410 1 + 408 413 1 + 410 411 1 + 410 412 1 + 413 414 1 + 414 415 1 + 414 416 1 + 414 417 1 + 417 418 1 + 418 419 1 + 418 420 1 + 418 421 1 + 421 422 1 + 421 423 1 + 421 438 1 + 423 424 1 + 424 425 1 + 424 426 1 + 424 440 1 + 426 427 1 + 426 436 1 + 427 428 1 + 427 429 1 + 429 430 1 + 429 431 1 + 431 432 1 + 431 435 1 + 432 433 1 + 432 434 1 + 435 436 1 + 436 437 1 + 438 439 1 + 438 440 1 + 438 443 1 + 440 441 1 + 440 442 1 + 443 444 1 + 444 445 1 + 444 446 1 + 444 447 1 + 447 448 1 + 448 449 1 + 448 450 1 + 448 451 1 + 451 452 1 + 451 453 1 + 451 468 1 + 453 454 1 + 454 455 1 + 454 456 1 + 454 470 1 + 456 457 1 + 456 466 1 + 457 458 1 + 457 459 1 + 459 460 1 + 459 461 1 + 461 462 1 + 461 465 1 + 462 463 1 + 462 464 1 + 465 466 1 + 466 467 1 + 468 469 1 + 468 470 1 + 468 473 1 + 470 471 1 + 470 472 1 + 473 474 1 + 474 475 1 + 474 476 1 + 474 477 1 + 477 478 1 + 478 479 1 + 478 480 1 + 478 481 1 + 481 482 1 + 481 483 1 + 481 500 1 + 483 484 1 + 484 485 1 + 484 486 1 + 484 502 1 + 486 487 1 + 486 498 1 + 487 488 1 + 487 489 1 + 489 490 1 + 489 494 1 + 490 491 1 + 490 492 1 + 490 493 1 + 494 495 1 + 494 496 1 + 496 497 1 + 496 498 1 + 498 499 1 + 500 501 1 + 500 502 1 + 500 505 1 + 502 503 1 + 502 504 1 + 505 506 1 + 506 507 1 + 506 508 1 + 506 509 1 + 509 510 1 + 510 511 1 + 510 512 1 + 510 513 1 + 513 514 1 + 513 515 1 + 513 532 1 + 515 516 1 + 516 517 1 + 516 518 1 + 516 534 1 + 518 519 1 + 518 530 1 + 519 520 1 + 519 521 1 + 521 522 1 + 521 526 1 + 522 523 1 + 522 524 1 + 522 525 1 + 526 527 1 + 526 528 1 + 528 529 1 + 528 530 1 + 530 531 1 + 532 533 1 + 532 534 1 + 532 537 1 + 534 535 1 + 534 536 1 + 537 538 1 + 538 539 1 + 538 540 1 + 538 541 1 + 541 542 1 + 542 543 1 + 542 544 1 + 542 545 1 + 545 546 1 + 545 547 1 + 545 564 1 + 547 548 1 + 548 549 1 + 548 550 1 + 548 566 1 + 550 551 1 + 550 562 1 + 551 552 1 + 551 553 1 + 553 554 1 + 553 558 1 + 554 555 1 + 554 556 1 + 554 557 1 + 558 559 1 + 558 560 1 + 560 561 1 + 560 562 1 + 562 563 1 + 564 565 1 + 564 566 1 + 564 569 1 + 566 567 1 + 566 568 1 + 569 570 1 + +[ pairs ] +; ai aj funct c0 c1 c2 c3 + 1 4 1 + 1 5 1 + 1 6 1 + 2 7 1 + 2 8 1 + 2 25 1 + 3 9 1 + 3 26 1 + 3 27 1 + 3 30 1 + 4 7 1 + 4 8 1 + 4 25 1 + 5 7 1 + 5 8 1 + 5 25 1 + 6 10 1 + 6 11 1 + 6 28 1 + 6 29 1 + 6 31 1 + 7 9 1 + 7 26 1 + 7 27 1 + 7 30 1 + 8 12 1 + 8 24 1 + 8 26 1 + 8 28 1 + 8 29 1 + 8 30 1 + 9 13 1 + 9 14 1 + 9 15 1 + 9 23 1 + 9 26 1 + 9 30 1 + 10 12 1 + 10 24 1 + 10 25 1 + 10 28 1 + 10 29 1 + 11 16 1 + 11 21 1 + 11 25 1 + 11 28 1 + 11 29 1 + 12 16 1 + 12 23 1 + 12 27 1 + 13 15 1 + 13 24 1 + 14 17 1 + 14 20 1 + 14 23 1 + 15 18 1 + 15 19 1 + 15 21 1 + 16 22 1 + 16 23 1 + 17 21 1 + 17 24 1 + 18 20 1 + 19 20 1 + 20 24 1 + 22 24 1 + 24 27 1 + 25 32 1 + 25 33 1 + 25 34 1 + 26 28 1 + 26 29 1 + 26 31 1 + 27 31 1 + 28 30 1 + 29 30 1 + 30 35 1 + 31 36 1 + 31 37 1 + 31 38 1 + 32 35 1 + 33 35 1 + 34 39 1 + 34 40 1 + 34 57 1 + 35 41 1 + 35 58 1 + 35 59 1 + 35 62 1 + 36 39 1 + 36 40 1 + 36 57 1 + 37 39 1 + 37 40 1 + 37 57 1 + 38 42 1 + 38 43 1 + 38 60 1 + 38 61 1 + 38 63 1 + 39 41 1 + 39 58 1 + 39 59 1 + 39 62 1 + 40 44 1 + 40 56 1 + 40 58 1 + 40 60 1 + 40 61 1 + 40 62 1 + 41 45 1 + 41 46 1 + 41 47 1 + 41 55 1 + 41 58 1 + 41 62 1 + 42 44 1 + 42 56 1 + 42 57 1 + 42 60 1 + 42 61 1 + 43 48 1 + 43 53 1 + 43 57 1 + 43 60 1 + 43 61 1 + 44 48 1 + 44 55 1 + 44 59 1 + 45 47 1 + 45 56 1 + 46 49 1 + 46 52 1 + 46 55 1 + 47 50 1 + 47 51 1 + 47 53 1 + 48 54 1 + 48 55 1 + 49 53 1 + 49 56 1 + 50 52 1 + 51 52 1 + 52 56 1 + 54 56 1 + 56 59 1 + 57 64 1 + 57 65 1 + 57 66 1 + 58 60 1 + 58 61 1 + 58 63 1 + 59 63 1 + 60 62 1 + 61 62 1 + 62 67 1 + 63 68 1 + 63 69 1 + 63 70 1 + 64 67 1 + 65 67 1 + 66 71 1 + 66 72 1 + 66 89 1 + 67 73 1 + 67 90 1 + 67 91 1 + 67 94 1 + 68 71 1 + 68 72 1 + 68 89 1 + 69 71 1 + 69 72 1 + 69 89 1 + 70 74 1 + 70 75 1 + 70 92 1 + 70 93 1 + 70 95 1 + 71 73 1 + 71 90 1 + 71 91 1 + 71 94 1 + 72 76 1 + 72 88 1 + 72 90 1 + 72 92 1 + 72 93 1 + 72 94 1 + 73 77 1 + 73 78 1 + 73 79 1 + 73 87 1 + 73 90 1 + 73 94 1 + 74 76 1 + 74 88 1 + 74 89 1 + 74 92 1 + 74 93 1 + 75 80 1 + 75 85 1 + 75 89 1 + 75 92 1 + 75 93 1 + 76 80 1 + 76 87 1 + 76 91 1 + 77 79 1 + 77 88 1 + 78 81 1 + 78 84 1 + 78 87 1 + 79 82 1 + 79 83 1 + 79 85 1 + 80 86 1 + 80 87 1 + 81 85 1 + 81 88 1 + 82 84 1 + 83 84 1 + 84 88 1 + 86 88 1 + 88 91 1 + 89 96 1 + 89 97 1 + 89 98 1 + 90 92 1 + 90 93 1 + 90 95 1 + 91 95 1 + 92 94 1 + 93 94 1 + 94 99 1 + 95 100 1 + 95 101 1 + 95 102 1 + 96 99 1 + 97 99 1 + 98 103 1 + 98 104 1 + 98 122 1 + 99 105 1 + 99 123 1 + 99 124 1 + 99 127 1 + 100 103 1 + 100 104 1 + 100 122 1 + 101 103 1 + 101 104 1 + 101 122 1 + 102 106 1 + 102 107 1 + 102 125 1 + 102 126 1 + 102 128 1 + 103 105 1 + 103 123 1 + 103 124 1 + 103 127 1 + 104 108 1 + 104 121 1 + 104 123 1 + 104 125 1 + 104 126 1 + 104 127 1 + 105 109 1 + 105 110 1 + 105 111 1 + 105 120 1 + 105 123 1 + 105 127 1 + 106 108 1 + 106 121 1 + 106 122 1 + 106 125 1 + 106 126 1 + 107 112 1 + 107 116 1 + 107 122 1 + 107 125 1 + 107 126 1 + 108 112 1 + 108 120 1 + 108 124 1 + 109 111 1 + 109 121 1 + 110 113 1 + 110 114 1 + 110 120 1 + 111 115 1 + 111 116 1 + 112 117 1 + 112 120 1 + 113 115 1 + 113 116 1 + 113 121 1 + 114 118 1 + 114 119 1 + 114 121 1 + 115 117 1 + 115 120 1 + 117 121 1 + 118 120 1 + 119 120 1 + 121 124 1 + 122 129 1 + 122 130 1 + 122 131 1 + 123 125 1 + 123 126 1 + 123 128 1 + 124 128 1 + 125 127 1 + 126 127 1 + 127 132 1 + 128 133 1 + 128 134 1 + 128 135 1 + 129 132 1 + 130 132 1 + 131 136 1 + 131 137 1 + 131 155 1 + 132 138 1 + 132 156 1 + 132 157 1 + 132 160 1 + 133 136 1 + 133 137 1 + 133 155 1 + 134 136 1 + 134 137 1 + 134 155 1 + 135 139 1 + 135 140 1 + 135 158 1 + 135 159 1 + 135 161 1 + 136 138 1 + 136 156 1 + 136 157 1 + 136 160 1 + 137 141 1 + 137 154 1 + 137 156 1 + 137 158 1 + 137 159 1 + 137 160 1 + 138 142 1 + 138 143 1 + 138 144 1 + 138 153 1 + 138 156 1 + 138 160 1 + 139 141 1 + 139 154 1 + 139 155 1 + 139 158 1 + 139 159 1 + 140 145 1 + 140 149 1 + 140 155 1 + 140 158 1 + 140 159 1 + 141 145 1 + 141 153 1 + 141 157 1 + 142 144 1 + 142 154 1 + 143 146 1 + 143 147 1 + 143 153 1 + 144 148 1 + 144 149 1 + 145 150 1 + 145 153 1 + 146 148 1 + 146 149 1 + 146 154 1 + 147 151 1 + 147 152 1 + 147 154 1 + 148 150 1 + 148 153 1 + 150 154 1 + 151 153 1 + 152 153 1 + 154 157 1 + 155 162 1 + 155 163 1 + 155 164 1 + 156 158 1 + 156 159 1 + 156 161 1 + 157 161 1 + 158 160 1 + 159 160 1 + 160 165 1 + 161 166 1 + 161 167 1 + 161 168 1 + 162 165 1 + 163 165 1 + 164 169 1 + 164 170 1 + 164 185 1 + 165 171 1 + 165 186 1 + 165 187 1 + 165 190 1 + 166 169 1 + 166 170 1 + 166 185 1 + 167 169 1 + 167 170 1 + 167 185 1 + 168 172 1 + 168 173 1 + 168 188 1 + 168 189 1 + 168 191 1 + 169 171 1 + 169 186 1 + 169 187 1 + 169 190 1 + 170 174 1 + 170 183 1 + 170 186 1 + 170 188 1 + 170 189 1 + 170 190 1 + 171 175 1 + 171 176 1 + 171 182 1 + 171 184 1 + 171 186 1 + 171 190 1 + 172 174 1 + 172 183 1 + 172 185 1 + 172 188 1 + 172 189 1 + 173 177 1 + 173 178 1 + 173 185 1 + 173 188 1 + 173 189 1 + 174 179 1 + 174 182 1 + 174 184 1 + 174 187 1 + 175 177 1 + 175 178 1 + 175 183 1 + 176 180 1 + 176 181 1 + 176 183 1 + 177 179 1 + 177 182 1 + 178 184 1 + 179 183 1 + 180 182 1 + 181 182 1 + 183 187 1 + 185 192 1 + 185 193 1 + 185 194 1 + 186 188 1 + 186 189 1 + 186 191 1 + 187 191 1 + 188 190 1 + 189 190 1 + 190 195 1 + 191 196 1 + 191 197 1 + 191 198 1 + 192 195 1 + 193 195 1 + 194 199 1 + 194 200 1 + 194 215 1 + 195 201 1 + 195 216 1 + 195 217 1 + 195 220 1 + 196 199 1 + 196 200 1 + 196 215 1 + 197 199 1 + 197 200 1 + 197 215 1 + 198 202 1 + 198 203 1 + 198 218 1 + 198 219 1 + 198 221 1 + 199 201 1 + 199 216 1 + 199 217 1 + 199 220 1 + 200 204 1 + 200 213 1 + 200 216 1 + 200 218 1 + 200 219 1 + 200 220 1 + 201 205 1 + 201 206 1 + 201 212 1 + 201 214 1 + 201 216 1 + 201 220 1 + 202 204 1 + 202 213 1 + 202 215 1 + 202 218 1 + 202 219 1 + 203 207 1 + 203 208 1 + 203 215 1 + 203 218 1 + 203 219 1 + 204 209 1 + 204 212 1 + 204 214 1 + 204 217 1 + 205 207 1 + 205 208 1 + 205 213 1 + 206 210 1 + 206 211 1 + 206 213 1 + 207 209 1 + 207 212 1 + 208 214 1 + 209 213 1 + 210 212 1 + 211 212 1 + 213 217 1 + 215 222 1 + 215 223 1 + 215 224 1 + 216 218 1 + 216 219 1 + 216 221 1 + 217 221 1 + 218 220 1 + 219 220 1 + 220 225 1 + 221 226 1 + 221 227 1 + 221 228 1 + 222 225 1 + 223 225 1 + 224 229 1 + 224 230 1 + 224 247 1 + 225 231 1 + 225 248 1 + 225 249 1 + 225 252 1 + 226 229 1 + 226 230 1 + 226 247 1 + 227 229 1 + 227 230 1 + 227 247 1 + 228 232 1 + 228 233 1 + 228 250 1 + 228 251 1 + 228 253 1 + 229 231 1 + 229 248 1 + 229 249 1 + 229 252 1 + 230 234 1 + 230 245 1 + 230 248 1 + 230 250 1 + 230 251 1 + 230 252 1 + 231 235 1 + 231 236 1 + 231 243 1 + 231 246 1 + 231 248 1 + 231 252 1 + 232 234 1 + 232 245 1 + 232 247 1 + 232 250 1 + 232 251 1 + 233 237 1 + 233 241 1 + 233 244 1 + 233 247 1 + 233 250 1 + 233 251 1 + 234 238 1 + 234 239 1 + 234 240 1 + 234 242 1 + 234 243 1 + 234 246 1 + 234 249 1 + 235 237 1 + 235 241 1 + 235 245 1 + 236 244 1 + 236 245 1 + 237 242 1 + 237 243 1 + 238 241 1 + 239 241 1 + 240 241 1 + 241 246 1 + 242 244 1 + 242 245 1 + 244 246 1 + 245 249 1 + 247 254 1 + 247 255 1 + 247 256 1 + 248 250 1 + 248 251 1 + 248 253 1 + 249 253 1 + 250 252 1 + 251 252 1 + 252 257 1 + 253 258 1 + 253 259 1 + 253 260 1 + 254 257 1 + 255 257 1 + 256 261 1 + 256 262 1 + 256 279 1 + 257 263 1 + 257 280 1 + 257 281 1 + 257 284 1 + 258 261 1 + 258 262 1 + 258 279 1 + 259 261 1 + 259 262 1 + 259 279 1 + 260 264 1 + 260 265 1 + 260 282 1 + 260 283 1 + 260 285 1 + 261 263 1 + 261 280 1 + 261 281 1 + 261 284 1 + 262 266 1 + 262 277 1 + 262 280 1 + 262 282 1 + 262 283 1 + 262 284 1 + 263 267 1 + 263 268 1 + 263 275 1 + 263 278 1 + 263 280 1 + 263 284 1 + 264 266 1 + 264 277 1 + 264 279 1 + 264 282 1 + 264 283 1 + 265 269 1 + 265 273 1 + 265 276 1 + 265 279 1 + 265 282 1 + 265 283 1 + 266 270 1 + 266 271 1 + 266 272 1 + 266 274 1 + 266 275 1 + 266 278 1 + 266 281 1 + 267 269 1 + 267 273 1 + 267 277 1 + 268 276 1 + 268 277 1 + 269 274 1 + 269 275 1 + 270 273 1 + 271 273 1 + 272 273 1 + 273 278 1 + 274 276 1 + 274 277 1 + 276 278 1 + 277 281 1 + 280 282 1 + 280 283 1 + 280 285 1 + 281 285 1 + 282 284 1 + 283 284 1 + 286 289 1 + 286 290 1 + 286 291 1 + 287 292 1 + 287 293 1 + 287 310 1 + 288 294 1 + 288 311 1 + 288 312 1 + 288 315 1 + 289 292 1 + 289 293 1 + 289 310 1 + 290 292 1 + 290 293 1 + 290 310 1 + 291 295 1 + 291 296 1 + 291 313 1 + 291 314 1 + 291 316 1 + 292 294 1 + 292 311 1 + 292 312 1 + 292 315 1 + 293 297 1 + 293 309 1 + 293 311 1 + 293 313 1 + 293 314 1 + 293 315 1 + 294 298 1 + 294 299 1 + 294 300 1 + 294 308 1 + 294 311 1 + 294 315 1 + 295 297 1 + 295 309 1 + 295 310 1 + 295 313 1 + 295 314 1 + 296 301 1 + 296 306 1 + 296 310 1 + 296 313 1 + 296 314 1 + 297 301 1 + 297 308 1 + 297 312 1 + 298 300 1 + 298 309 1 + 299 302 1 + 299 305 1 + 299 308 1 + 300 303 1 + 300 304 1 + 300 306 1 + 301 307 1 + 301 308 1 + 302 306 1 + 302 309 1 + 303 305 1 + 304 305 1 + 305 309 1 + 307 309 1 + 309 312 1 + 310 317 1 + 310 318 1 + 310 319 1 + 311 313 1 + 311 314 1 + 311 316 1 + 312 316 1 + 313 315 1 + 314 315 1 + 315 320 1 + 316 321 1 + 316 322 1 + 316 323 1 + 317 320 1 + 318 320 1 + 319 324 1 + 319 325 1 + 319 342 1 + 320 326 1 + 320 343 1 + 320 344 1 + 320 347 1 + 321 324 1 + 321 325 1 + 321 342 1 + 322 324 1 + 322 325 1 + 322 342 1 + 323 327 1 + 323 328 1 + 323 345 1 + 323 346 1 + 323 348 1 + 324 326 1 + 324 343 1 + 324 344 1 + 324 347 1 + 325 329 1 + 325 341 1 + 325 343 1 + 325 345 1 + 325 346 1 + 325 347 1 + 326 330 1 + 326 331 1 + 326 332 1 + 326 340 1 + 326 343 1 + 326 347 1 + 327 329 1 + 327 341 1 + 327 342 1 + 327 345 1 + 327 346 1 + 328 333 1 + 328 338 1 + 328 342 1 + 328 345 1 + 328 346 1 + 329 333 1 + 329 340 1 + 329 344 1 + 330 332 1 + 330 341 1 + 331 334 1 + 331 337 1 + 331 340 1 + 332 335 1 + 332 336 1 + 332 338 1 + 333 339 1 + 333 340 1 + 334 338 1 + 334 341 1 + 335 337 1 + 336 337 1 + 337 341 1 + 339 341 1 + 341 344 1 + 342 349 1 + 342 350 1 + 342 351 1 + 343 345 1 + 343 346 1 + 343 348 1 + 344 348 1 + 345 347 1 + 346 347 1 + 347 352 1 + 348 353 1 + 348 354 1 + 348 355 1 + 349 352 1 + 350 352 1 + 351 356 1 + 351 357 1 + 351 375 1 + 352 358 1 + 352 376 1 + 352 377 1 + 352 380 1 + 353 356 1 + 353 357 1 + 353 375 1 + 354 356 1 + 354 357 1 + 354 375 1 + 355 359 1 + 355 360 1 + 355 378 1 + 355 379 1 + 355 381 1 + 356 358 1 + 356 376 1 + 356 377 1 + 356 380 1 + 357 361 1 + 357 374 1 + 357 376 1 + 357 378 1 + 357 379 1 + 357 380 1 + 358 362 1 + 358 363 1 + 358 364 1 + 358 373 1 + 358 376 1 + 358 380 1 + 359 361 1 + 359 374 1 + 359 375 1 + 359 378 1 + 359 379 1 + 360 365 1 + 360 369 1 + 360 375 1 + 360 378 1 + 360 379 1 + 361 365 1 + 361 373 1 + 361 377 1 + 362 364 1 + 362 374 1 + 363 366 1 + 363 367 1 + 363 373 1 + 364 368 1 + 364 369 1 + 365 370 1 + 365 373 1 + 366 368 1 + 366 369 1 + 366 374 1 + 367 371 1 + 367 372 1 + 367 374 1 + 368 370 1 + 368 373 1 + 370 374 1 + 371 373 1 + 372 373 1 + 374 377 1 + 375 382 1 + 375 383 1 + 375 384 1 + 376 378 1 + 376 379 1 + 376 381 1 + 377 381 1 + 378 380 1 + 379 380 1 + 380 385 1 + 381 386 1 + 381 387 1 + 381 388 1 + 382 385 1 + 383 385 1 + 384 389 1 + 384 390 1 + 384 408 1 + 385 391 1 + 385 409 1 + 385 410 1 + 385 413 1 + 386 389 1 + 386 390 1 + 386 408 1 + 387 389 1 + 387 390 1 + 387 408 1 + 388 392 1 + 388 393 1 + 388 411 1 + 388 412 1 + 388 414 1 + 389 391 1 + 389 409 1 + 389 410 1 + 389 413 1 + 390 394 1 + 390 407 1 + 390 409 1 + 390 411 1 + 390 412 1 + 390 413 1 + 391 395 1 + 391 396 1 + 391 397 1 + 391 406 1 + 391 409 1 + 391 413 1 + 392 394 1 + 392 407 1 + 392 408 1 + 392 411 1 + 392 412 1 + 393 398 1 + 393 402 1 + 393 408 1 + 393 411 1 + 393 412 1 + 394 398 1 + 394 406 1 + 394 410 1 + 395 397 1 + 395 407 1 + 396 399 1 + 396 400 1 + 396 406 1 + 397 401 1 + 397 402 1 + 398 403 1 + 398 406 1 + 399 401 1 + 399 402 1 + 399 407 1 + 400 404 1 + 400 405 1 + 400 407 1 + 401 403 1 + 401 406 1 + 403 407 1 + 404 406 1 + 405 406 1 + 407 410 1 + 408 415 1 + 408 416 1 + 408 417 1 + 409 411 1 + 409 412 1 + 409 414 1 + 410 414 1 + 411 413 1 + 412 413 1 + 413 418 1 + 414 419 1 + 414 420 1 + 414 421 1 + 415 418 1 + 416 418 1 + 417 422 1 + 417 423 1 + 417 438 1 + 418 424 1 + 418 439 1 + 418 440 1 + 418 443 1 + 419 422 1 + 419 423 1 + 419 438 1 + 420 422 1 + 420 423 1 + 420 438 1 + 421 425 1 + 421 426 1 + 421 441 1 + 421 442 1 + 421 444 1 + 422 424 1 + 422 439 1 + 422 440 1 + 422 443 1 + 423 427 1 + 423 436 1 + 423 439 1 + 423 441 1 + 423 442 1 + 423 443 1 + 424 428 1 + 424 429 1 + 424 435 1 + 424 437 1 + 424 439 1 + 424 443 1 + 425 427 1 + 425 436 1 + 425 438 1 + 425 441 1 + 425 442 1 + 426 430 1 + 426 431 1 + 426 438 1 + 426 441 1 + 426 442 1 + 427 432 1 + 427 435 1 + 427 437 1 + 427 440 1 + 428 430 1 + 428 431 1 + 428 436 1 + 429 433 1 + 429 434 1 + 429 436 1 + 430 432 1 + 430 435 1 + 431 437 1 + 432 436 1 + 433 435 1 + 434 435 1 + 436 440 1 + 438 445 1 + 438 446 1 + 438 447 1 + 439 441 1 + 439 442 1 + 439 444 1 + 440 444 1 + 441 443 1 + 442 443 1 + 443 448 1 + 444 449 1 + 444 450 1 + 444 451 1 + 445 448 1 + 446 448 1 + 447 452 1 + 447 453 1 + 447 468 1 + 448 454 1 + 448 469 1 + 448 470 1 + 448 473 1 + 449 452 1 + 449 453 1 + 449 468 1 + 450 452 1 + 450 453 1 + 450 468 1 + 451 455 1 + 451 456 1 + 451 471 1 + 451 472 1 + 451 474 1 + 452 454 1 + 452 469 1 + 452 470 1 + 452 473 1 + 453 457 1 + 453 466 1 + 453 469 1 + 453 471 1 + 453 472 1 + 453 473 1 + 454 458 1 + 454 459 1 + 454 465 1 + 454 467 1 + 454 469 1 + 454 473 1 + 455 457 1 + 455 466 1 + 455 468 1 + 455 471 1 + 455 472 1 + 456 460 1 + 456 461 1 + 456 468 1 + 456 471 1 + 456 472 1 + 457 462 1 + 457 465 1 + 457 467 1 + 457 470 1 + 458 460 1 + 458 461 1 + 458 466 1 + 459 463 1 + 459 464 1 + 459 466 1 + 460 462 1 + 460 465 1 + 461 467 1 + 462 466 1 + 463 465 1 + 464 465 1 + 466 470 1 + 468 475 1 + 468 476 1 + 468 477 1 + 469 471 1 + 469 472 1 + 469 474 1 + 470 474 1 + 471 473 1 + 472 473 1 + 473 478 1 + 474 479 1 + 474 480 1 + 474 481 1 + 475 478 1 + 476 478 1 + 477 482 1 + 477 483 1 + 477 500 1 + 478 484 1 + 478 501 1 + 478 502 1 + 478 505 1 + 479 482 1 + 479 483 1 + 479 500 1 + 480 482 1 + 480 483 1 + 480 500 1 + 481 485 1 + 481 486 1 + 481 503 1 + 481 504 1 + 481 506 1 + 482 484 1 + 482 501 1 + 482 502 1 + 482 505 1 + 483 487 1 + 483 498 1 + 483 501 1 + 483 503 1 + 483 504 1 + 483 505 1 + 484 488 1 + 484 489 1 + 484 496 1 + 484 499 1 + 484 501 1 + 484 505 1 + 485 487 1 + 485 498 1 + 485 500 1 + 485 503 1 + 485 504 1 + 486 490 1 + 486 494 1 + 486 497 1 + 486 500 1 + 486 503 1 + 486 504 1 + 487 491 1 + 487 492 1 + 487 493 1 + 487 495 1 + 487 496 1 + 487 499 1 + 487 502 1 + 488 490 1 + 488 494 1 + 488 498 1 + 489 497 1 + 489 498 1 + 490 495 1 + 490 496 1 + 491 494 1 + 492 494 1 + 493 494 1 + 494 499 1 + 495 497 1 + 495 498 1 + 497 499 1 + 498 502 1 + 500 507 1 + 500 508 1 + 500 509 1 + 501 503 1 + 501 504 1 + 501 506 1 + 502 506 1 + 503 505 1 + 504 505 1 + 505 510 1 + 506 511 1 + 506 512 1 + 506 513 1 + 507 510 1 + 508 510 1 + 509 514 1 + 509 515 1 + 509 532 1 + 510 516 1 + 510 533 1 + 510 534 1 + 510 537 1 + 511 514 1 + 511 515 1 + 511 532 1 + 512 514 1 + 512 515 1 + 512 532 1 + 513 517 1 + 513 518 1 + 513 535 1 + 513 536 1 + 513 538 1 + 514 516 1 + 514 533 1 + 514 534 1 + 514 537 1 + 515 519 1 + 515 530 1 + 515 533 1 + 515 535 1 + 515 536 1 + 515 537 1 + 516 520 1 + 516 521 1 + 516 528 1 + 516 531 1 + 516 533 1 + 516 537 1 + 517 519 1 + 517 530 1 + 517 532 1 + 517 535 1 + 517 536 1 + 518 522 1 + 518 526 1 + 518 529 1 + 518 532 1 + 518 535 1 + 518 536 1 + 519 523 1 + 519 524 1 + 519 525 1 + 519 527 1 + 519 528 1 + 519 531 1 + 519 534 1 + 520 522 1 + 520 526 1 + 520 530 1 + 521 529 1 + 521 530 1 + 522 527 1 + 522 528 1 + 523 526 1 + 524 526 1 + 525 526 1 + 526 531 1 + 527 529 1 + 527 530 1 + 529 531 1 + 530 534 1 + 532 539 1 + 532 540 1 + 532 541 1 + 533 535 1 + 533 536 1 + 533 538 1 + 534 538 1 + 535 537 1 + 536 537 1 + 537 542 1 + 538 543 1 + 538 544 1 + 538 545 1 + 539 542 1 + 540 542 1 + 541 546 1 + 541 547 1 + 541 564 1 + 542 548 1 + 542 565 1 + 542 566 1 + 542 569 1 + 543 546 1 + 543 547 1 + 543 564 1 + 544 546 1 + 544 547 1 + 544 564 1 + 545 549 1 + 545 550 1 + 545 567 1 + 545 568 1 + 545 570 1 + 546 548 1 + 546 565 1 + 546 566 1 + 546 569 1 + 547 551 1 + 547 562 1 + 547 565 1 + 547 567 1 + 547 568 1 + 547 569 1 + 548 552 1 + 548 553 1 + 548 560 1 + 548 563 1 + 548 565 1 + 548 569 1 + 549 551 1 + 549 562 1 + 549 564 1 + 549 567 1 + 549 568 1 + 550 554 1 + 550 558 1 + 550 561 1 + 550 564 1 + 550 567 1 + 550 568 1 + 551 555 1 + 551 556 1 + 551 557 1 + 551 559 1 + 551 560 1 + 551 563 1 + 551 566 1 + 552 554 1 + 552 558 1 + 552 562 1 + 553 561 1 + 553 562 1 + 554 559 1 + 554 560 1 + 555 558 1 + 556 558 1 + 557 558 1 + 558 563 1 + 559 561 1 + 559 562 1 + 561 563 1 + 562 566 1 + 565 567 1 + 565 568 1 + 565 570 1 + 566 570 1 + 567 569 1 + 568 569 1 + +[ angles ] +; ai aj ak funct c0 c1 c2 c3 + 1 2 3 1 + 2 3 4 1 + 2 3 5 1 + 2 3 6 1 + 4 3 5 1 + 4 3 6 1 + 5 3 6 1 + 3 6 7 1 + 3 6 8 1 + 3 6 25 1 + 7 6 8 1 + 7 6 25 1 + 8 6 25 1 + 6 8 9 1 + 8 9 10 1 + 8 9 11 1 + 8 9 27 1 + 10 9 11 1 + 10 9 27 1 + 11 9 27 1 + 9 11 12 1 + 9 11 24 1 + 12 11 24 1 + 11 12 13 1 + 11 12 14 1 + 13 12 14 1 + 12 14 15 1 + 14 15 16 1 + 14 15 24 1 + 16 15 24 1 + 15 16 17 1 + 15 16 20 1 + 17 16 20 1 + 16 17 18 1 + 16 17 19 1 + 18 17 19 1 + 16 20 21 1 + 20 21 22 1 + 20 21 23 1 + 22 21 23 1 + 21 23 24 1 + 11 24 15 1 + 11 24 23 1 + 15 24 23 1 + 6 25 26 1 + 6 25 27 1 + 6 25 30 1 + 26 25 27 1 + 26 25 30 1 + 27 25 30 1 + 9 27 25 1 + 9 27 28 1 + 9 27 29 1 + 25 27 28 1 + 25 27 29 1 + 28 27 29 1 + 25 30 31 1 + 30 31 32 1 + 30 31 33 1 + 30 31 34 1 + 32 31 33 1 + 32 31 34 1 + 33 31 34 1 + 31 34 35 1 + 34 35 36 1 + 34 35 37 1 + 34 35 38 1 + 36 35 37 1 + 36 35 38 1 + 37 35 38 1 + 35 38 39 1 + 35 38 40 1 + 35 38 57 1 + 39 38 40 1 + 39 38 57 1 + 40 38 57 1 + 38 40 41 1 + 40 41 42 1 + 40 41 43 1 + 40 41 59 1 + 42 41 43 1 + 42 41 59 1 + 43 41 59 1 + 41 43 44 1 + 41 43 56 1 + 44 43 56 1 + 43 44 45 1 + 43 44 46 1 + 45 44 46 1 + 44 46 47 1 + 46 47 48 1 + 46 47 56 1 + 48 47 56 1 + 47 48 49 1 + 47 48 52 1 + 49 48 52 1 + 48 49 50 1 + 48 49 51 1 + 50 49 51 1 + 48 52 53 1 + 52 53 54 1 + 52 53 55 1 + 54 53 55 1 + 53 55 56 1 + 43 56 47 1 + 43 56 55 1 + 47 56 55 1 + 38 57 58 1 + 38 57 59 1 + 38 57 62 1 + 58 57 59 1 + 58 57 62 1 + 59 57 62 1 + 41 59 57 1 + 41 59 60 1 + 41 59 61 1 + 57 59 60 1 + 57 59 61 1 + 60 59 61 1 + 57 62 63 1 + 62 63 64 1 + 62 63 65 1 + 62 63 66 1 + 64 63 65 1 + 64 63 66 1 + 65 63 66 1 + 63 66 67 1 + 66 67 68 1 + 66 67 69 1 + 66 67 70 1 + 68 67 69 1 + 68 67 70 1 + 69 67 70 1 + 67 70 71 1 + 67 70 72 1 + 67 70 89 1 + 71 70 72 1 + 71 70 89 1 + 72 70 89 1 + 70 72 73 1 + 72 73 74 1 + 72 73 75 1 + 72 73 91 1 + 74 73 75 1 + 74 73 91 1 + 75 73 91 1 + 73 75 76 1 + 73 75 88 1 + 76 75 88 1 + 75 76 77 1 + 75 76 78 1 + 77 76 78 1 + 76 78 79 1 + 78 79 80 1 + 78 79 88 1 + 80 79 88 1 + 79 80 81 1 + 79 80 84 1 + 81 80 84 1 + 80 81 82 1 + 80 81 83 1 + 82 81 83 1 + 80 84 85 1 + 84 85 86 1 + 84 85 87 1 + 86 85 87 1 + 85 87 88 1 + 75 88 79 1 + 75 88 87 1 + 79 88 87 1 + 70 89 90 1 + 70 89 91 1 + 70 89 94 1 + 90 89 91 1 + 90 89 94 1 + 91 89 94 1 + 73 91 89 1 + 73 91 92 1 + 73 91 93 1 + 89 91 92 1 + 89 91 93 1 + 92 91 93 1 + 89 94 95 1 + 94 95 96 1 + 94 95 97 1 + 94 95 98 1 + 96 95 97 1 + 96 95 98 1 + 97 95 98 1 + 95 98 99 1 + 98 99 100 1 + 98 99 101 1 + 98 99 102 1 + 100 99 101 1 + 100 99 102 1 + 101 99 102 1 + 99 102 103 1 + 99 102 104 1 + 99 102 122 1 + 103 102 104 1 + 103 102 122 1 + 104 102 122 1 + 102 104 105 1 + 104 105 106 1 + 104 105 107 1 + 104 105 124 1 + 106 105 107 1 + 106 105 124 1 + 107 105 124 1 + 105 107 108 1 + 105 107 121 1 + 108 107 121 1 + 107 108 109 1 + 107 108 110 1 + 109 108 110 1 + 108 110 111 1 + 110 111 112 1 + 110 111 121 1 + 112 111 121 1 + 111 112 113 1 + 111 112 114 1 + 113 112 114 1 + 112 114 115 1 + 112 114 116 1 + 115 114 116 1 + 114 116 117 1 + 114 116 120 1 + 117 116 120 1 + 116 117 118 1 + 116 117 119 1 + 118 117 119 1 + 116 120 121 1 + 107 121 111 1 + 107 121 120 1 + 111 121 120 1 + 102 122 123 1 + 102 122 124 1 + 102 122 127 1 + 123 122 124 1 + 123 122 127 1 + 124 122 127 1 + 105 124 122 1 + 105 124 125 1 + 105 124 126 1 + 122 124 125 1 + 122 124 126 1 + 125 124 126 1 + 122 127 128 1 + 127 128 129 1 + 127 128 130 1 + 127 128 131 1 + 129 128 130 1 + 129 128 131 1 + 130 128 131 1 + 128 131 132 1 + 131 132 133 1 + 131 132 134 1 + 131 132 135 1 + 133 132 134 1 + 133 132 135 1 + 134 132 135 1 + 132 135 136 1 + 132 135 137 1 + 132 135 155 1 + 136 135 137 1 + 136 135 155 1 + 137 135 155 1 + 135 137 138 1 + 137 138 139 1 + 137 138 140 1 + 137 138 157 1 + 139 138 140 1 + 139 138 157 1 + 140 138 157 1 + 138 140 141 1 + 138 140 154 1 + 141 140 154 1 + 140 141 142 1 + 140 141 143 1 + 142 141 143 1 + 141 143 144 1 + 143 144 145 1 + 143 144 154 1 + 145 144 154 1 + 144 145 146 1 + 144 145 147 1 + 146 145 147 1 + 145 147 148 1 + 145 147 149 1 + 148 147 149 1 + 147 149 150 1 + 147 149 153 1 + 150 149 153 1 + 149 150 151 1 + 149 150 152 1 + 151 150 152 1 + 149 153 154 1 + 140 154 144 1 + 140 154 153 1 + 144 154 153 1 + 135 155 156 1 + 135 155 157 1 + 135 155 160 1 + 156 155 157 1 + 156 155 160 1 + 157 155 160 1 + 138 157 155 1 + 138 157 158 1 + 138 157 159 1 + 155 157 158 1 + 155 157 159 1 + 158 157 159 1 + 155 160 161 1 + 160 161 162 1 + 160 161 163 1 + 160 161 164 1 + 162 161 163 1 + 162 161 164 1 + 163 161 164 1 + 161 164 165 1 + 164 165 166 1 + 164 165 167 1 + 164 165 168 1 + 166 165 167 1 + 166 165 168 1 + 167 165 168 1 + 165 168 169 1 + 165 168 170 1 + 165 168 185 1 + 169 168 170 1 + 169 168 185 1 + 170 168 185 1 + 168 170 171 1 + 170 171 172 1 + 170 171 173 1 + 170 171 187 1 + 172 171 173 1 + 172 171 187 1 + 173 171 187 1 + 171 173 174 1 + 171 173 183 1 + 174 173 183 1 + 173 174 175 1 + 173 174 176 1 + 175 174 176 1 + 174 176 177 1 + 174 176 178 1 + 177 176 178 1 + 176 178 179 1 + 176 178 182 1 + 179 178 182 1 + 178 179 180 1 + 178 179 181 1 + 180 179 181 1 + 178 182 183 1 + 173 183 182 1 + 173 183 184 1 + 182 183 184 1 + 168 185 186 1 + 168 185 187 1 + 168 185 190 1 + 186 185 187 1 + 186 185 190 1 + 187 185 190 1 + 171 187 185 1 + 171 187 188 1 + 171 187 189 1 + 185 187 188 1 + 185 187 189 1 + 188 187 189 1 + 185 190 191 1 + 190 191 192 1 + 190 191 193 1 + 190 191 194 1 + 192 191 193 1 + 192 191 194 1 + 193 191 194 1 + 191 194 195 1 + 194 195 196 1 + 194 195 197 1 + 194 195 198 1 + 196 195 197 1 + 196 195 198 1 + 197 195 198 1 + 195 198 199 1 + 195 198 200 1 + 195 198 215 1 + 199 198 200 1 + 199 198 215 1 + 200 198 215 1 + 198 200 201 1 + 200 201 202 1 + 200 201 203 1 + 200 201 217 1 + 202 201 203 1 + 202 201 217 1 + 203 201 217 1 + 201 203 204 1 + 201 203 213 1 + 204 203 213 1 + 203 204 205 1 + 203 204 206 1 + 205 204 206 1 + 204 206 207 1 + 204 206 208 1 + 207 206 208 1 + 206 208 209 1 + 206 208 212 1 + 209 208 212 1 + 208 209 210 1 + 208 209 211 1 + 210 209 211 1 + 208 212 213 1 + 203 213 212 1 + 203 213 214 1 + 212 213 214 1 + 198 215 216 1 + 198 215 217 1 + 198 215 220 1 + 216 215 217 1 + 216 215 220 1 + 217 215 220 1 + 201 217 215 1 + 201 217 218 1 + 201 217 219 1 + 215 217 218 1 + 215 217 219 1 + 218 217 219 1 + 215 220 221 1 + 220 221 222 1 + 220 221 223 1 + 220 221 224 1 + 222 221 223 1 + 222 221 224 1 + 223 221 224 1 + 221 224 225 1 + 224 225 226 1 + 224 225 227 1 + 224 225 228 1 + 226 225 227 1 + 226 225 228 1 + 227 225 228 1 + 225 228 229 1 + 225 228 230 1 + 225 228 247 1 + 229 228 230 1 + 229 228 247 1 + 230 228 247 1 + 228 230 231 1 + 230 231 232 1 + 230 231 233 1 + 230 231 249 1 + 232 231 233 1 + 232 231 249 1 + 233 231 249 1 + 231 233 234 1 + 231 233 245 1 + 234 233 245 1 + 233 234 235 1 + 233 234 236 1 + 235 234 236 1 + 234 236 237 1 + 234 236 241 1 + 237 236 241 1 + 236 237 238 1 + 236 237 239 1 + 236 237 240 1 + 238 237 239 1 + 238 237 240 1 + 239 237 240 1 + 236 241 242 1 + 236 241 243 1 + 242 241 243 1 + 241 243 244 1 + 241 243 245 1 + 244 243 245 1 + 233 245 243 1 + 233 245 246 1 + 243 245 246 1 + 228 247 248 1 + 228 247 249 1 + 228 247 252 1 + 248 247 249 1 + 248 247 252 1 + 249 247 252 1 + 231 249 247 1 + 231 249 250 1 + 231 249 251 1 + 247 249 250 1 + 247 249 251 1 + 250 249 251 1 + 247 252 253 1 + 252 253 254 1 + 252 253 255 1 + 252 253 256 1 + 254 253 255 1 + 254 253 256 1 + 255 253 256 1 + 253 256 257 1 + 256 257 258 1 + 256 257 259 1 + 256 257 260 1 + 258 257 259 1 + 258 257 260 1 + 259 257 260 1 + 257 260 261 1 + 257 260 262 1 + 257 260 279 1 + 261 260 262 1 + 261 260 279 1 + 262 260 279 1 + 260 262 263 1 + 262 263 264 1 + 262 263 265 1 + 262 263 281 1 + 264 263 265 1 + 264 263 281 1 + 265 263 281 1 + 263 265 266 1 + 263 265 277 1 + 266 265 277 1 + 265 266 267 1 + 265 266 268 1 + 267 266 268 1 + 266 268 269 1 + 266 268 273 1 + 269 268 273 1 + 268 269 270 1 + 268 269 271 1 + 268 269 272 1 + 270 269 271 1 + 270 269 272 1 + 271 269 272 1 + 268 273 274 1 + 268 273 275 1 + 274 273 275 1 + 273 275 276 1 + 273 275 277 1 + 276 275 277 1 + 265 277 275 1 + 265 277 278 1 + 275 277 278 1 + 260 279 280 1 + 260 279 281 1 + 260 279 284 1 + 280 279 281 1 + 280 279 284 1 + 281 279 284 1 + 263 281 279 1 + 263 281 282 1 + 263 281 283 1 + 279 281 282 1 + 279 281 283 1 + 282 281 283 1 + 279 284 285 1 + 286 287 288 1 + 287 288 289 1 + 287 288 290 1 + 287 288 291 1 + 289 288 290 1 + 289 288 291 1 + 290 288 291 1 + 288 291 292 1 + 288 291 293 1 + 288 291 310 1 + 292 291 293 1 + 292 291 310 1 + 293 291 310 1 + 291 293 294 1 + 293 294 295 1 + 293 294 296 1 + 293 294 312 1 + 295 294 296 1 + 295 294 312 1 + 296 294 312 1 + 294 296 297 1 + 294 296 309 1 + 297 296 309 1 + 296 297 298 1 + 296 297 299 1 + 298 297 299 1 + 297 299 300 1 + 299 300 301 1 + 299 300 309 1 + 301 300 309 1 + 300 301 302 1 + 300 301 305 1 + 302 301 305 1 + 301 302 303 1 + 301 302 304 1 + 303 302 304 1 + 301 305 306 1 + 305 306 307 1 + 305 306 308 1 + 307 306 308 1 + 306 308 309 1 + 296 309 300 1 + 296 309 308 1 + 300 309 308 1 + 291 310 311 1 + 291 310 312 1 + 291 310 315 1 + 311 310 312 1 + 311 310 315 1 + 312 310 315 1 + 294 312 310 1 + 294 312 313 1 + 294 312 314 1 + 310 312 313 1 + 310 312 314 1 + 313 312 314 1 + 310 315 316 1 + 315 316 317 1 + 315 316 318 1 + 315 316 319 1 + 317 316 318 1 + 317 316 319 1 + 318 316 319 1 + 316 319 320 1 + 319 320 321 1 + 319 320 322 1 + 319 320 323 1 + 321 320 322 1 + 321 320 323 1 + 322 320 323 1 + 320 323 324 1 + 320 323 325 1 + 320 323 342 1 + 324 323 325 1 + 324 323 342 1 + 325 323 342 1 + 323 325 326 1 + 325 326 327 1 + 325 326 328 1 + 325 326 344 1 + 327 326 328 1 + 327 326 344 1 + 328 326 344 1 + 326 328 329 1 + 326 328 341 1 + 329 328 341 1 + 328 329 330 1 + 328 329 331 1 + 330 329 331 1 + 329 331 332 1 + 331 332 333 1 + 331 332 341 1 + 333 332 341 1 + 332 333 334 1 + 332 333 337 1 + 334 333 337 1 + 333 334 335 1 + 333 334 336 1 + 335 334 336 1 + 333 337 338 1 + 337 338 339 1 + 337 338 340 1 + 339 338 340 1 + 338 340 341 1 + 328 341 332 1 + 328 341 340 1 + 332 341 340 1 + 323 342 343 1 + 323 342 344 1 + 323 342 347 1 + 343 342 344 1 + 343 342 347 1 + 344 342 347 1 + 326 344 342 1 + 326 344 345 1 + 326 344 346 1 + 342 344 345 1 + 342 344 346 1 + 345 344 346 1 + 342 347 348 1 + 347 348 349 1 + 347 348 350 1 + 347 348 351 1 + 349 348 350 1 + 349 348 351 1 + 350 348 351 1 + 348 351 352 1 + 351 352 353 1 + 351 352 354 1 + 351 352 355 1 + 353 352 354 1 + 353 352 355 1 + 354 352 355 1 + 352 355 356 1 + 352 355 357 1 + 352 355 375 1 + 356 355 357 1 + 356 355 375 1 + 357 355 375 1 + 355 357 358 1 + 357 358 359 1 + 357 358 360 1 + 357 358 377 1 + 359 358 360 1 + 359 358 377 1 + 360 358 377 1 + 358 360 361 1 + 358 360 374 1 + 361 360 374 1 + 360 361 362 1 + 360 361 363 1 + 362 361 363 1 + 361 363 364 1 + 363 364 365 1 + 363 364 374 1 + 365 364 374 1 + 364 365 366 1 + 364 365 367 1 + 366 365 367 1 + 365 367 368 1 + 365 367 369 1 + 368 367 369 1 + 367 369 370 1 + 367 369 373 1 + 370 369 373 1 + 369 370 371 1 + 369 370 372 1 + 371 370 372 1 + 369 373 374 1 + 360 374 364 1 + 360 374 373 1 + 364 374 373 1 + 355 375 376 1 + 355 375 377 1 + 355 375 380 1 + 376 375 377 1 + 376 375 380 1 + 377 375 380 1 + 358 377 375 1 + 358 377 378 1 + 358 377 379 1 + 375 377 378 1 + 375 377 379 1 + 378 377 379 1 + 375 380 381 1 + 380 381 382 1 + 380 381 383 1 + 380 381 384 1 + 382 381 383 1 + 382 381 384 1 + 383 381 384 1 + 381 384 385 1 + 384 385 386 1 + 384 385 387 1 + 384 385 388 1 + 386 385 387 1 + 386 385 388 1 + 387 385 388 1 + 385 388 389 1 + 385 388 390 1 + 385 388 408 1 + 389 388 390 1 + 389 388 408 1 + 390 388 408 1 + 388 390 391 1 + 390 391 392 1 + 390 391 393 1 + 390 391 410 1 + 392 391 393 1 + 392 391 410 1 + 393 391 410 1 + 391 393 394 1 + 391 393 407 1 + 394 393 407 1 + 393 394 395 1 + 393 394 396 1 + 395 394 396 1 + 394 396 397 1 + 396 397 398 1 + 396 397 407 1 + 398 397 407 1 + 397 398 399 1 + 397 398 400 1 + 399 398 400 1 + 398 400 401 1 + 398 400 402 1 + 401 400 402 1 + 400 402 403 1 + 400 402 406 1 + 403 402 406 1 + 402 403 404 1 + 402 403 405 1 + 404 403 405 1 + 402 406 407 1 + 393 407 397 1 + 393 407 406 1 + 397 407 406 1 + 388 408 409 1 + 388 408 410 1 + 388 408 413 1 + 409 408 410 1 + 409 408 413 1 + 410 408 413 1 + 391 410 408 1 + 391 410 411 1 + 391 410 412 1 + 408 410 411 1 + 408 410 412 1 + 411 410 412 1 + 408 413 414 1 + 413 414 415 1 + 413 414 416 1 + 413 414 417 1 + 415 414 416 1 + 415 414 417 1 + 416 414 417 1 + 414 417 418 1 + 417 418 419 1 + 417 418 420 1 + 417 418 421 1 + 419 418 420 1 + 419 418 421 1 + 420 418 421 1 + 418 421 422 1 + 418 421 423 1 + 418 421 438 1 + 422 421 423 1 + 422 421 438 1 + 423 421 438 1 + 421 423 424 1 + 423 424 425 1 + 423 424 426 1 + 423 424 440 1 + 425 424 426 1 + 425 424 440 1 + 426 424 440 1 + 424 426 427 1 + 424 426 436 1 + 427 426 436 1 + 426 427 428 1 + 426 427 429 1 + 428 427 429 1 + 427 429 430 1 + 427 429 431 1 + 430 429 431 1 + 429 431 432 1 + 429 431 435 1 + 432 431 435 1 + 431 432 433 1 + 431 432 434 1 + 433 432 434 1 + 431 435 436 1 + 426 436 435 1 + 426 436 437 1 + 435 436 437 1 + 421 438 439 1 + 421 438 440 1 + 421 438 443 1 + 439 438 440 1 + 439 438 443 1 + 440 438 443 1 + 424 440 438 1 + 424 440 441 1 + 424 440 442 1 + 438 440 441 1 + 438 440 442 1 + 441 440 442 1 + 438 443 444 1 + 443 444 445 1 + 443 444 446 1 + 443 444 447 1 + 445 444 446 1 + 445 444 447 1 + 446 444 447 1 + 444 447 448 1 + 447 448 449 1 + 447 448 450 1 + 447 448 451 1 + 449 448 450 1 + 449 448 451 1 + 450 448 451 1 + 448 451 452 1 + 448 451 453 1 + 448 451 468 1 + 452 451 453 1 + 452 451 468 1 + 453 451 468 1 + 451 453 454 1 + 453 454 455 1 + 453 454 456 1 + 453 454 470 1 + 455 454 456 1 + 455 454 470 1 + 456 454 470 1 + 454 456 457 1 + 454 456 466 1 + 457 456 466 1 + 456 457 458 1 + 456 457 459 1 + 458 457 459 1 + 457 459 460 1 + 457 459 461 1 + 460 459 461 1 + 459 461 462 1 + 459 461 465 1 + 462 461 465 1 + 461 462 463 1 + 461 462 464 1 + 463 462 464 1 + 461 465 466 1 + 456 466 465 1 + 456 466 467 1 + 465 466 467 1 + 451 468 469 1 + 451 468 470 1 + 451 468 473 1 + 469 468 470 1 + 469 468 473 1 + 470 468 473 1 + 454 470 468 1 + 454 470 471 1 + 454 470 472 1 + 468 470 471 1 + 468 470 472 1 + 471 470 472 1 + 468 473 474 1 + 473 474 475 1 + 473 474 476 1 + 473 474 477 1 + 475 474 476 1 + 475 474 477 1 + 476 474 477 1 + 474 477 478 1 + 477 478 479 1 + 477 478 480 1 + 477 478 481 1 + 479 478 480 1 + 479 478 481 1 + 480 478 481 1 + 478 481 482 1 + 478 481 483 1 + 478 481 500 1 + 482 481 483 1 + 482 481 500 1 + 483 481 500 1 + 481 483 484 1 + 483 484 485 1 + 483 484 486 1 + 483 484 502 1 + 485 484 486 1 + 485 484 502 1 + 486 484 502 1 + 484 486 487 1 + 484 486 498 1 + 487 486 498 1 + 486 487 488 1 + 486 487 489 1 + 488 487 489 1 + 487 489 490 1 + 487 489 494 1 + 490 489 494 1 + 489 490 491 1 + 489 490 492 1 + 489 490 493 1 + 491 490 492 1 + 491 490 493 1 + 492 490 493 1 + 489 494 495 1 + 489 494 496 1 + 495 494 496 1 + 494 496 497 1 + 494 496 498 1 + 497 496 498 1 + 486 498 496 1 + 486 498 499 1 + 496 498 499 1 + 481 500 501 1 + 481 500 502 1 + 481 500 505 1 + 501 500 502 1 + 501 500 505 1 + 502 500 505 1 + 484 502 500 1 + 484 502 503 1 + 484 502 504 1 + 500 502 503 1 + 500 502 504 1 + 503 502 504 1 + 500 505 506 1 + 505 506 507 1 + 505 506 508 1 + 505 506 509 1 + 507 506 508 1 + 507 506 509 1 + 508 506 509 1 + 506 509 510 1 + 509 510 511 1 + 509 510 512 1 + 509 510 513 1 + 511 510 512 1 + 511 510 513 1 + 512 510 513 1 + 510 513 514 1 + 510 513 515 1 + 510 513 532 1 + 514 513 515 1 + 514 513 532 1 + 515 513 532 1 + 513 515 516 1 + 515 516 517 1 + 515 516 518 1 + 515 516 534 1 + 517 516 518 1 + 517 516 534 1 + 518 516 534 1 + 516 518 519 1 + 516 518 530 1 + 519 518 530 1 + 518 519 520 1 + 518 519 521 1 + 520 519 521 1 + 519 521 522 1 + 519 521 526 1 + 522 521 526 1 + 521 522 523 1 + 521 522 524 1 + 521 522 525 1 + 523 522 524 1 + 523 522 525 1 + 524 522 525 1 + 521 526 527 1 + 521 526 528 1 + 527 526 528 1 + 526 528 529 1 + 526 528 530 1 + 529 528 530 1 + 518 530 528 1 + 518 530 531 1 + 528 530 531 1 + 513 532 533 1 + 513 532 534 1 + 513 532 537 1 + 533 532 534 1 + 533 532 537 1 + 534 532 537 1 + 516 534 532 1 + 516 534 535 1 + 516 534 536 1 + 532 534 535 1 + 532 534 536 1 + 535 534 536 1 + 532 537 538 1 + 537 538 539 1 + 537 538 540 1 + 537 538 541 1 + 539 538 540 1 + 539 538 541 1 + 540 538 541 1 + 538 541 542 1 + 541 542 543 1 + 541 542 544 1 + 541 542 545 1 + 543 542 544 1 + 543 542 545 1 + 544 542 545 1 + 542 545 546 1 + 542 545 547 1 + 542 545 564 1 + 546 545 547 1 + 546 545 564 1 + 547 545 564 1 + 545 547 548 1 + 547 548 549 1 + 547 548 550 1 + 547 548 566 1 + 549 548 550 1 + 549 548 566 1 + 550 548 566 1 + 548 550 551 1 + 548 550 562 1 + 551 550 562 1 + 550 551 552 1 + 550 551 553 1 + 552 551 553 1 + 551 553 554 1 + 551 553 558 1 + 554 553 558 1 + 553 554 555 1 + 553 554 556 1 + 553 554 557 1 + 555 554 556 1 + 555 554 557 1 + 556 554 557 1 + 553 558 559 1 + 553 558 560 1 + 559 558 560 1 + 558 560 561 1 + 558 560 562 1 + 561 560 562 1 + 550 562 560 1 + 550 562 563 1 + 560 562 563 1 + 545 564 565 1 + 545 564 566 1 + 545 564 569 1 + 565 564 566 1 + 565 564 569 1 + 566 564 569 1 + 548 566 564 1 + 548 566 567 1 + 548 566 568 1 + 564 566 567 1 + 564 566 568 1 + 567 566 568 1 + 564 569 570 1 + +[ dihedrals ] +; ai aj ak al funct c0 c1 c2 c3 c4 c5 + 1 2 3 4 9 + 1 2 3 5 9 + 1 2 3 6 9 + 2 3 6 7 9 + 2 3 6 8 9 + 2 3 6 25 9 + 4 3 6 7 9 + 4 3 6 8 9 + 4 3 6 25 9 + 5 3 6 7 9 + 5 3 6 8 9 + 5 3 6 25 9 + 3 6 8 9 9 + 7 6 8 9 9 + 25 6 8 9 9 + 3 6 25 26 9 + 3 6 25 27 9 + 3 6 25 30 9 + 7 6 25 26 9 + 7 6 25 27 9 + 7 6 25 30 9 + 8 6 25 26 9 + 8 6 25 27 9 + 8 6 25 30 9 + 6 8 9 10 9 + 6 8 9 11 9 + 6 8 9 27 9 + 8 9 11 12 9 + 8 9 11 24 9 + 10 9 11 12 9 + 10 9 11 24 9 + 27 9 11 12 9 + 27 9 11 24 9 + 8 9 27 25 9 + 8 9 27 28 9 + 8 9 27 29 9 + 10 9 27 25 9 + 10 9 27 28 9 + 10 9 27 29 9 + 11 9 27 25 9 + 11 9 27 28 9 + 11 9 27 29 9 + 9 11 12 13 9 + 9 11 12 14 9 + 24 11 12 13 9 + 24 11 12 14 9 + 9 11 24 15 9 + 9 11 24 23 9 + 12 11 24 15 9 + 12 11 24 23 9 + 11 12 14 15 9 + 13 12 14 15 9 + 12 14 15 16 9 + 12 14 15 24 9 + 14 15 16 17 9 + 14 15 16 20 9 + 24 15 16 17 9 + 24 15 16 20 9 + 14 15 24 11 9 + 14 15 24 23 9 + 16 15 24 11 9 + 16 15 24 23 9 + 15 16 17 18 9 + 15 16 17 19 9 + 20 16 17 18 9 + 20 16 17 19 9 + 15 16 20 21 9 + 17 16 20 21 9 + 16 20 21 22 9 + 16 20 21 23 9 + 20 21 23 24 9 + 22 21 23 24 9 + 21 23 24 11 9 + 21 23 24 15 9 + 6 25 27 9 9 + 6 25 27 28 9 + 6 25 27 29 9 + 26 25 27 9 9 + 26 25 27 28 9 + 26 25 27 29 9 + 30 25 27 9 9 + 30 25 27 28 9 + 30 25 27 29 9 + 6 25 30 31 9 + 26 25 30 31 9 + 27 25 30 31 9 + 25 30 31 32 9 + 25 30 31 33 9 + 25 30 31 34 9 + 30 31 34 35 9 + 32 31 34 35 9 + 33 31 34 35 9 + 31 34 35 36 9 + 31 34 35 37 9 + 31 34 35 38 9 + 34 35 38 39 9 + 34 35 38 40 9 + 34 35 38 57 9 + 36 35 38 39 9 + 36 35 38 40 9 + 36 35 38 57 9 + 37 35 38 39 9 + 37 35 38 40 9 + 37 35 38 57 9 + 35 38 40 41 9 + 39 38 40 41 9 + 57 38 40 41 9 + 35 38 57 58 9 + 35 38 57 59 9 + 35 38 57 62 9 + 39 38 57 58 9 + 39 38 57 59 9 + 39 38 57 62 9 + 40 38 57 58 9 + 40 38 57 59 9 + 40 38 57 62 9 + 38 40 41 42 9 + 38 40 41 43 9 + 38 40 41 59 9 + 40 41 43 44 9 + 40 41 43 56 9 + 42 41 43 44 9 + 42 41 43 56 9 + 59 41 43 44 9 + 59 41 43 56 9 + 40 41 59 57 9 + 40 41 59 60 9 + 40 41 59 61 9 + 42 41 59 57 9 + 42 41 59 60 9 + 42 41 59 61 9 + 43 41 59 57 9 + 43 41 59 60 9 + 43 41 59 61 9 + 41 43 44 45 9 + 41 43 44 46 9 + 56 43 44 45 9 + 56 43 44 46 9 + 41 43 56 47 9 + 41 43 56 55 9 + 44 43 56 47 9 + 44 43 56 55 9 + 43 44 46 47 9 + 45 44 46 47 9 + 44 46 47 48 9 + 44 46 47 56 9 + 46 47 48 49 9 + 46 47 48 52 9 + 56 47 48 49 9 + 56 47 48 52 9 + 46 47 56 43 9 + 46 47 56 55 9 + 48 47 56 43 9 + 48 47 56 55 9 + 47 48 49 50 9 + 47 48 49 51 9 + 52 48 49 50 9 + 52 48 49 51 9 + 47 48 52 53 9 + 49 48 52 53 9 + 48 52 53 54 9 + 48 52 53 55 9 + 52 53 55 56 9 + 54 53 55 56 9 + 53 55 56 43 9 + 53 55 56 47 9 + 38 57 59 41 9 + 38 57 59 60 9 + 38 57 59 61 9 + 58 57 59 41 9 + 58 57 59 60 9 + 58 57 59 61 9 + 62 57 59 41 9 + 62 57 59 60 9 + 62 57 59 61 9 + 38 57 62 63 9 + 58 57 62 63 9 + 59 57 62 63 9 + 57 62 63 64 9 + 57 62 63 65 9 + 57 62 63 66 9 + 62 63 66 67 9 + 64 63 66 67 9 + 65 63 66 67 9 + 63 66 67 68 9 + 63 66 67 69 9 + 63 66 67 70 9 + 66 67 70 71 9 + 66 67 70 72 9 + 66 67 70 89 9 + 68 67 70 71 9 + 68 67 70 72 9 + 68 67 70 89 9 + 69 67 70 71 9 + 69 67 70 72 9 + 69 67 70 89 9 + 67 70 72 73 9 + 71 70 72 73 9 + 89 70 72 73 9 + 67 70 89 90 9 + 67 70 89 91 9 + 67 70 89 94 9 + 71 70 89 90 9 + 71 70 89 91 9 + 71 70 89 94 9 + 72 70 89 90 9 + 72 70 89 91 9 + 72 70 89 94 9 + 70 72 73 74 9 + 70 72 73 75 9 + 70 72 73 91 9 + 72 73 75 76 9 + 72 73 75 88 9 + 74 73 75 76 9 + 74 73 75 88 9 + 91 73 75 76 9 + 91 73 75 88 9 + 72 73 91 89 9 + 72 73 91 92 9 + 72 73 91 93 9 + 74 73 91 89 9 + 74 73 91 92 9 + 74 73 91 93 9 + 75 73 91 89 9 + 75 73 91 92 9 + 75 73 91 93 9 + 73 75 76 77 9 + 73 75 76 78 9 + 88 75 76 77 9 + 88 75 76 78 9 + 73 75 88 79 9 + 73 75 88 87 9 + 76 75 88 79 9 + 76 75 88 87 9 + 75 76 78 79 9 + 77 76 78 79 9 + 76 78 79 80 9 + 76 78 79 88 9 + 78 79 80 81 9 + 78 79 80 84 9 + 88 79 80 81 9 + 88 79 80 84 9 + 78 79 88 75 9 + 78 79 88 87 9 + 80 79 88 75 9 + 80 79 88 87 9 + 79 80 81 82 9 + 79 80 81 83 9 + 84 80 81 82 9 + 84 80 81 83 9 + 79 80 84 85 9 + 81 80 84 85 9 + 80 84 85 86 9 + 80 84 85 87 9 + 84 85 87 88 9 + 86 85 87 88 9 + 85 87 88 75 9 + 85 87 88 79 9 + 70 89 91 73 9 + 70 89 91 92 9 + 70 89 91 93 9 + 90 89 91 73 9 + 90 89 91 92 9 + 90 89 91 93 9 + 94 89 91 73 9 + 94 89 91 92 9 + 94 89 91 93 9 + 70 89 94 95 9 + 90 89 94 95 9 + 91 89 94 95 9 + 89 94 95 96 9 + 89 94 95 97 9 + 89 94 95 98 9 + 94 95 98 99 9 + 96 95 98 99 9 + 97 95 98 99 9 + 95 98 99 100 9 + 95 98 99 101 9 + 95 98 99 102 9 + 98 99 102 103 9 + 98 99 102 104 9 + 98 99 102 122 9 + 100 99 102 103 9 + 100 99 102 104 9 + 100 99 102 122 9 + 101 99 102 103 9 + 101 99 102 104 9 + 101 99 102 122 9 + 99 102 104 105 9 + 103 102 104 105 9 + 122 102 104 105 9 + 99 102 122 123 9 + 99 102 122 124 9 + 99 102 122 127 9 + 103 102 122 123 9 + 103 102 122 124 9 + 103 102 122 127 9 + 104 102 122 123 9 + 104 102 122 124 9 + 104 102 122 127 9 + 102 104 105 106 9 + 102 104 105 107 9 + 102 104 105 124 9 + 104 105 107 108 9 + 104 105 107 121 9 + 106 105 107 108 9 + 106 105 107 121 9 + 124 105 107 108 9 + 124 105 107 121 9 + 104 105 124 122 9 + 104 105 124 125 9 + 104 105 124 126 9 + 106 105 124 122 9 + 106 105 124 125 9 + 106 105 124 126 9 + 107 105 124 122 9 + 107 105 124 125 9 + 107 105 124 126 9 + 105 107 108 109 9 + 105 107 108 110 9 + 121 107 108 109 9 + 121 107 108 110 9 + 105 107 121 111 9 + 105 107 121 120 9 + 108 107 121 111 9 + 108 107 121 120 9 + 107 108 110 111 9 + 109 108 110 111 9 + 108 110 111 112 9 + 108 110 111 121 9 + 110 111 112 113 9 + 110 111 112 114 9 + 121 111 112 113 9 + 121 111 112 114 9 + 110 111 121 107 9 + 110 111 121 120 9 + 112 111 121 107 9 + 112 111 121 120 9 + 111 112 114 115 9 + 111 112 114 116 9 + 113 112 114 115 9 + 113 112 114 116 9 + 112 114 116 117 9 + 112 114 116 120 9 + 115 114 116 117 9 + 115 114 116 120 9 + 114 116 117 118 9 + 114 116 117 119 9 + 120 116 117 118 9 + 120 116 117 119 9 + 114 116 120 121 9 + 117 116 120 121 9 + 116 120 121 107 9 + 116 120 121 111 9 + 102 122 124 105 9 + 102 122 124 125 9 + 102 122 124 126 9 + 123 122 124 105 9 + 123 122 124 125 9 + 123 122 124 126 9 + 127 122 124 105 9 + 127 122 124 125 9 + 127 122 124 126 9 + 102 122 127 128 9 + 123 122 127 128 9 + 124 122 127 128 9 + 122 127 128 129 9 + 122 127 128 130 9 + 122 127 128 131 9 + 127 128 131 132 9 + 129 128 131 132 9 + 130 128 131 132 9 + 128 131 132 133 9 + 128 131 132 134 9 + 128 131 132 135 9 + 131 132 135 136 9 + 131 132 135 137 9 + 131 132 135 155 9 + 133 132 135 136 9 + 133 132 135 137 9 + 133 132 135 155 9 + 134 132 135 136 9 + 134 132 135 137 9 + 134 132 135 155 9 + 132 135 137 138 9 + 136 135 137 138 9 + 155 135 137 138 9 + 132 135 155 156 9 + 132 135 155 157 9 + 132 135 155 160 9 + 136 135 155 156 9 + 136 135 155 157 9 + 136 135 155 160 9 + 137 135 155 156 9 + 137 135 155 157 9 + 137 135 155 160 9 + 135 137 138 139 9 + 135 137 138 140 9 + 135 137 138 157 9 + 137 138 140 141 9 + 137 138 140 154 9 + 139 138 140 141 9 + 139 138 140 154 9 + 157 138 140 141 9 + 157 138 140 154 9 + 137 138 157 155 9 + 137 138 157 158 9 + 137 138 157 159 9 + 139 138 157 155 9 + 139 138 157 158 9 + 139 138 157 159 9 + 140 138 157 155 9 + 140 138 157 158 9 + 140 138 157 159 9 + 138 140 141 142 9 + 138 140 141 143 9 + 154 140 141 142 9 + 154 140 141 143 9 + 138 140 154 144 9 + 138 140 154 153 9 + 141 140 154 144 9 + 141 140 154 153 9 + 140 141 143 144 9 + 142 141 143 144 9 + 141 143 144 145 9 + 141 143 144 154 9 + 143 144 145 146 9 + 143 144 145 147 9 + 154 144 145 146 9 + 154 144 145 147 9 + 143 144 154 140 9 + 143 144 154 153 9 + 145 144 154 140 9 + 145 144 154 153 9 + 144 145 147 148 9 + 144 145 147 149 9 + 146 145 147 148 9 + 146 145 147 149 9 + 145 147 149 150 9 + 145 147 149 153 9 + 148 147 149 150 9 + 148 147 149 153 9 + 147 149 150 151 9 + 147 149 150 152 9 + 153 149 150 151 9 + 153 149 150 152 9 + 147 149 153 154 9 + 150 149 153 154 9 + 149 153 154 140 9 + 149 153 154 144 9 + 135 155 157 138 9 + 135 155 157 158 9 + 135 155 157 159 9 + 156 155 157 138 9 + 156 155 157 158 9 + 156 155 157 159 9 + 160 155 157 138 9 + 160 155 157 158 9 + 160 155 157 159 9 + 135 155 160 161 9 + 156 155 160 161 9 + 157 155 160 161 9 + 155 160 161 162 9 + 155 160 161 163 9 + 155 160 161 164 9 + 160 161 164 165 9 + 162 161 164 165 9 + 163 161 164 165 9 + 161 164 165 166 9 + 161 164 165 167 9 + 161 164 165 168 9 + 164 165 168 169 9 + 164 165 168 170 9 + 164 165 168 185 9 + 166 165 168 169 9 + 166 165 168 170 9 + 166 165 168 185 9 + 167 165 168 169 9 + 167 165 168 170 9 + 167 165 168 185 9 + 165 168 170 171 9 + 169 168 170 171 9 + 185 168 170 171 9 + 165 168 185 186 9 + 165 168 185 187 9 + 165 168 185 190 9 + 169 168 185 186 9 + 169 168 185 187 9 + 169 168 185 190 9 + 170 168 185 186 9 + 170 168 185 187 9 + 170 168 185 190 9 + 168 170 171 172 9 + 168 170 171 173 9 + 168 170 171 187 9 + 170 171 173 174 9 + 170 171 173 183 9 + 172 171 173 174 9 + 172 171 173 183 9 + 187 171 173 174 9 + 187 171 173 183 9 + 170 171 187 185 9 + 170 171 187 188 9 + 170 171 187 189 9 + 172 171 187 185 9 + 172 171 187 188 9 + 172 171 187 189 9 + 173 171 187 185 9 + 173 171 187 188 9 + 173 171 187 189 9 + 171 173 174 175 9 + 171 173 174 176 9 + 183 173 174 175 9 + 183 173 174 176 9 + 171 173 183 182 9 + 171 173 183 184 9 + 174 173 183 182 9 + 174 173 183 184 9 + 173 174 176 177 9 + 173 174 176 178 9 + 175 174 176 177 9 + 175 174 176 178 9 + 174 176 178 179 9 + 174 176 178 182 9 + 177 176 178 179 9 + 177 176 178 182 9 + 176 178 179 180 9 + 176 178 179 181 9 + 182 178 179 180 9 + 182 178 179 181 9 + 176 178 182 183 9 + 179 178 182 183 9 + 178 182 183 173 9 + 178 182 183 184 9 + 168 185 187 171 9 + 168 185 187 188 9 + 168 185 187 189 9 + 186 185 187 171 9 + 186 185 187 188 9 + 186 185 187 189 9 + 190 185 187 171 9 + 190 185 187 188 9 + 190 185 187 189 9 + 168 185 190 191 9 + 186 185 190 191 9 + 187 185 190 191 9 + 185 190 191 192 9 + 185 190 191 193 9 + 185 190 191 194 9 + 190 191 194 195 9 + 192 191 194 195 9 + 193 191 194 195 9 + 191 194 195 196 9 + 191 194 195 197 9 + 191 194 195 198 9 + 194 195 198 199 9 + 194 195 198 200 9 + 194 195 198 215 9 + 196 195 198 199 9 + 196 195 198 200 9 + 196 195 198 215 9 + 197 195 198 199 9 + 197 195 198 200 9 + 197 195 198 215 9 + 195 198 200 201 9 + 199 198 200 201 9 + 215 198 200 201 9 + 195 198 215 216 9 + 195 198 215 217 9 + 195 198 215 220 9 + 199 198 215 216 9 + 199 198 215 217 9 + 199 198 215 220 9 + 200 198 215 216 9 + 200 198 215 217 9 + 200 198 215 220 9 + 198 200 201 202 9 + 198 200 201 203 9 + 198 200 201 217 9 + 200 201 203 204 9 + 200 201 203 213 9 + 202 201 203 204 9 + 202 201 203 213 9 + 217 201 203 204 9 + 217 201 203 213 9 + 200 201 217 215 9 + 200 201 217 218 9 + 200 201 217 219 9 + 202 201 217 215 9 + 202 201 217 218 9 + 202 201 217 219 9 + 203 201 217 215 9 + 203 201 217 218 9 + 203 201 217 219 9 + 201 203 204 205 9 + 201 203 204 206 9 + 213 203 204 205 9 + 213 203 204 206 9 + 201 203 213 212 9 + 201 203 213 214 9 + 204 203 213 212 9 + 204 203 213 214 9 + 203 204 206 207 9 + 203 204 206 208 9 + 205 204 206 207 9 + 205 204 206 208 9 + 204 206 208 209 9 + 204 206 208 212 9 + 207 206 208 209 9 + 207 206 208 212 9 + 206 208 209 210 9 + 206 208 209 211 9 + 212 208 209 210 9 + 212 208 209 211 9 + 206 208 212 213 9 + 209 208 212 213 9 + 208 212 213 203 9 + 208 212 213 214 9 + 198 215 217 201 9 + 198 215 217 218 9 + 198 215 217 219 9 + 216 215 217 201 9 + 216 215 217 218 9 + 216 215 217 219 9 + 220 215 217 201 9 + 220 215 217 218 9 + 220 215 217 219 9 + 198 215 220 221 9 + 216 215 220 221 9 + 217 215 220 221 9 + 215 220 221 222 9 + 215 220 221 223 9 + 215 220 221 224 9 + 220 221 224 225 9 + 222 221 224 225 9 + 223 221 224 225 9 + 221 224 225 226 9 + 221 224 225 227 9 + 221 224 225 228 9 + 224 225 228 229 9 + 224 225 228 230 9 + 224 225 228 247 9 + 226 225 228 229 9 + 226 225 228 230 9 + 226 225 228 247 9 + 227 225 228 229 9 + 227 225 228 230 9 + 227 225 228 247 9 + 225 228 230 231 9 + 229 228 230 231 9 + 247 228 230 231 9 + 225 228 247 248 9 + 225 228 247 249 9 + 225 228 247 252 9 + 229 228 247 248 9 + 229 228 247 249 9 + 229 228 247 252 9 + 230 228 247 248 9 + 230 228 247 249 9 + 230 228 247 252 9 + 228 230 231 232 9 + 228 230 231 233 9 + 228 230 231 249 9 + 230 231 233 234 9 + 230 231 233 245 9 + 232 231 233 234 9 + 232 231 233 245 9 + 249 231 233 234 9 + 249 231 233 245 9 + 230 231 249 247 9 + 230 231 249 250 9 + 230 231 249 251 9 + 232 231 249 247 9 + 232 231 249 250 9 + 232 231 249 251 9 + 233 231 249 247 9 + 233 231 249 250 9 + 233 231 249 251 9 + 231 233 234 235 9 + 231 233 234 236 9 + 245 233 234 235 9 + 245 233 234 236 9 + 231 233 245 243 9 + 231 233 245 246 9 + 234 233 245 243 9 + 234 233 245 246 9 + 233 234 236 237 9 + 233 234 236 241 9 + 235 234 236 237 9 + 235 234 236 241 9 + 234 236 237 238 9 + 234 236 237 239 9 + 234 236 237 240 9 + 241 236 237 238 9 + 241 236 237 239 9 + 241 236 237 240 9 + 234 236 241 242 9 + 234 236 241 243 9 + 237 236 241 242 9 + 237 236 241 243 9 + 236 241 243 244 9 + 236 241 243 245 9 + 242 241 243 244 9 + 242 241 243 245 9 + 241 243 245 233 9 + 241 243 245 246 9 + 244 243 245 233 9 + 244 243 245 246 9 + 228 247 249 231 9 + 228 247 249 250 9 + 228 247 249 251 9 + 248 247 249 231 9 + 248 247 249 250 9 + 248 247 249 251 9 + 252 247 249 231 9 + 252 247 249 250 9 + 252 247 249 251 9 + 228 247 252 253 9 + 248 247 252 253 9 + 249 247 252 253 9 + 247 252 253 254 9 + 247 252 253 255 9 + 247 252 253 256 9 + 252 253 256 257 9 + 254 253 256 257 9 + 255 253 256 257 9 + 253 256 257 258 9 + 253 256 257 259 9 + 253 256 257 260 9 + 256 257 260 261 9 + 256 257 260 262 9 + 256 257 260 279 9 + 258 257 260 261 9 + 258 257 260 262 9 + 258 257 260 279 9 + 259 257 260 261 9 + 259 257 260 262 9 + 259 257 260 279 9 + 257 260 262 263 9 + 261 260 262 263 9 + 279 260 262 263 9 + 257 260 279 280 9 + 257 260 279 281 9 + 257 260 279 284 9 + 261 260 279 280 9 + 261 260 279 281 9 + 261 260 279 284 9 + 262 260 279 280 9 + 262 260 279 281 9 + 262 260 279 284 9 + 260 262 263 264 9 + 260 262 263 265 9 + 260 262 263 281 9 + 262 263 265 266 9 + 262 263 265 277 9 + 264 263 265 266 9 + 264 263 265 277 9 + 281 263 265 266 9 + 281 263 265 277 9 + 262 263 281 279 9 + 262 263 281 282 9 + 262 263 281 283 9 + 264 263 281 279 9 + 264 263 281 282 9 + 264 263 281 283 9 + 265 263 281 279 9 + 265 263 281 282 9 + 265 263 281 283 9 + 263 265 266 267 9 + 263 265 266 268 9 + 277 265 266 267 9 + 277 265 266 268 9 + 263 265 277 275 9 + 263 265 277 278 9 + 266 265 277 275 9 + 266 265 277 278 9 + 265 266 268 269 9 + 265 266 268 273 9 + 267 266 268 269 9 + 267 266 268 273 9 + 266 268 269 270 9 + 266 268 269 271 9 + 266 268 269 272 9 + 273 268 269 270 9 + 273 268 269 271 9 + 273 268 269 272 9 + 266 268 273 274 9 + 266 268 273 275 9 + 269 268 273 274 9 + 269 268 273 275 9 + 268 273 275 276 9 + 268 273 275 277 9 + 274 273 275 276 9 + 274 273 275 277 9 + 273 275 277 265 9 + 273 275 277 278 9 + 276 275 277 265 9 + 276 275 277 278 9 + 260 279 281 263 9 + 260 279 281 282 9 + 260 279 281 283 9 + 280 279 281 263 9 + 280 279 281 282 9 + 280 279 281 283 9 + 284 279 281 263 9 + 284 279 281 282 9 + 284 279 281 283 9 + 260 279 284 285 9 + 280 279 284 285 9 + 281 279 284 285 9 + 286 287 288 289 9 + 286 287 288 290 9 + 286 287 288 291 9 + 287 288 291 292 9 + 287 288 291 293 9 + 287 288 291 310 9 + 289 288 291 292 9 + 289 288 291 293 9 + 289 288 291 310 9 + 290 288 291 292 9 + 290 288 291 293 9 + 290 288 291 310 9 + 288 291 293 294 9 + 292 291 293 294 9 + 310 291 293 294 9 + 288 291 310 311 9 + 288 291 310 312 9 + 288 291 310 315 9 + 292 291 310 311 9 + 292 291 310 312 9 + 292 291 310 315 9 + 293 291 310 311 9 + 293 291 310 312 9 + 293 291 310 315 9 + 291 293 294 295 9 + 291 293 294 296 9 + 291 293 294 312 9 + 293 294 296 297 9 + 293 294 296 309 9 + 295 294 296 297 9 + 295 294 296 309 9 + 312 294 296 297 9 + 312 294 296 309 9 + 293 294 312 310 9 + 293 294 312 313 9 + 293 294 312 314 9 + 295 294 312 310 9 + 295 294 312 313 9 + 295 294 312 314 9 + 296 294 312 310 9 + 296 294 312 313 9 + 296 294 312 314 9 + 294 296 297 298 9 + 294 296 297 299 9 + 309 296 297 298 9 + 309 296 297 299 9 + 294 296 309 300 9 + 294 296 309 308 9 + 297 296 309 300 9 + 297 296 309 308 9 + 296 297 299 300 9 + 298 297 299 300 9 + 297 299 300 301 9 + 297 299 300 309 9 + 299 300 301 302 9 + 299 300 301 305 9 + 309 300 301 302 9 + 309 300 301 305 9 + 299 300 309 296 9 + 299 300 309 308 9 + 301 300 309 296 9 + 301 300 309 308 9 + 300 301 302 303 9 + 300 301 302 304 9 + 305 301 302 303 9 + 305 301 302 304 9 + 300 301 305 306 9 + 302 301 305 306 9 + 301 305 306 307 9 + 301 305 306 308 9 + 305 306 308 309 9 + 307 306 308 309 9 + 306 308 309 296 9 + 306 308 309 300 9 + 291 310 312 294 9 + 291 310 312 313 9 + 291 310 312 314 9 + 311 310 312 294 9 + 311 310 312 313 9 + 311 310 312 314 9 + 315 310 312 294 9 + 315 310 312 313 9 + 315 310 312 314 9 + 291 310 315 316 9 + 311 310 315 316 9 + 312 310 315 316 9 + 310 315 316 317 9 + 310 315 316 318 9 + 310 315 316 319 9 + 315 316 319 320 9 + 317 316 319 320 9 + 318 316 319 320 9 + 316 319 320 321 9 + 316 319 320 322 9 + 316 319 320 323 9 + 319 320 323 324 9 + 319 320 323 325 9 + 319 320 323 342 9 + 321 320 323 324 9 + 321 320 323 325 9 + 321 320 323 342 9 + 322 320 323 324 9 + 322 320 323 325 9 + 322 320 323 342 9 + 320 323 325 326 9 + 324 323 325 326 9 + 342 323 325 326 9 + 320 323 342 343 9 + 320 323 342 344 9 + 320 323 342 347 9 + 324 323 342 343 9 + 324 323 342 344 9 + 324 323 342 347 9 + 325 323 342 343 9 + 325 323 342 344 9 + 325 323 342 347 9 + 323 325 326 327 9 + 323 325 326 328 9 + 323 325 326 344 9 + 325 326 328 329 9 + 325 326 328 341 9 + 327 326 328 329 9 + 327 326 328 341 9 + 344 326 328 329 9 + 344 326 328 341 9 + 325 326 344 342 9 + 325 326 344 345 9 + 325 326 344 346 9 + 327 326 344 342 9 + 327 326 344 345 9 + 327 326 344 346 9 + 328 326 344 342 9 + 328 326 344 345 9 + 328 326 344 346 9 + 326 328 329 330 9 + 326 328 329 331 9 + 341 328 329 330 9 + 341 328 329 331 9 + 326 328 341 332 9 + 326 328 341 340 9 + 329 328 341 332 9 + 329 328 341 340 9 + 328 329 331 332 9 + 330 329 331 332 9 + 329 331 332 333 9 + 329 331 332 341 9 + 331 332 333 334 9 + 331 332 333 337 9 + 341 332 333 334 9 + 341 332 333 337 9 + 331 332 341 328 9 + 331 332 341 340 9 + 333 332 341 328 9 + 333 332 341 340 9 + 332 333 334 335 9 + 332 333 334 336 9 + 337 333 334 335 9 + 337 333 334 336 9 + 332 333 337 338 9 + 334 333 337 338 9 + 333 337 338 339 9 + 333 337 338 340 9 + 337 338 340 341 9 + 339 338 340 341 9 + 338 340 341 328 9 + 338 340 341 332 9 + 323 342 344 326 9 + 323 342 344 345 9 + 323 342 344 346 9 + 343 342 344 326 9 + 343 342 344 345 9 + 343 342 344 346 9 + 347 342 344 326 9 + 347 342 344 345 9 + 347 342 344 346 9 + 323 342 347 348 9 + 343 342 347 348 9 + 344 342 347 348 9 + 342 347 348 349 9 + 342 347 348 350 9 + 342 347 348 351 9 + 347 348 351 352 9 + 349 348 351 352 9 + 350 348 351 352 9 + 348 351 352 353 9 + 348 351 352 354 9 + 348 351 352 355 9 + 351 352 355 356 9 + 351 352 355 357 9 + 351 352 355 375 9 + 353 352 355 356 9 + 353 352 355 357 9 + 353 352 355 375 9 + 354 352 355 356 9 + 354 352 355 357 9 + 354 352 355 375 9 + 352 355 357 358 9 + 356 355 357 358 9 + 375 355 357 358 9 + 352 355 375 376 9 + 352 355 375 377 9 + 352 355 375 380 9 + 356 355 375 376 9 + 356 355 375 377 9 + 356 355 375 380 9 + 357 355 375 376 9 + 357 355 375 377 9 + 357 355 375 380 9 + 355 357 358 359 9 + 355 357 358 360 9 + 355 357 358 377 9 + 357 358 360 361 9 + 357 358 360 374 9 + 359 358 360 361 9 + 359 358 360 374 9 + 377 358 360 361 9 + 377 358 360 374 9 + 357 358 377 375 9 + 357 358 377 378 9 + 357 358 377 379 9 + 359 358 377 375 9 + 359 358 377 378 9 + 359 358 377 379 9 + 360 358 377 375 9 + 360 358 377 378 9 + 360 358 377 379 9 + 358 360 361 362 9 + 358 360 361 363 9 + 374 360 361 362 9 + 374 360 361 363 9 + 358 360 374 364 9 + 358 360 374 373 9 + 361 360 374 364 9 + 361 360 374 373 9 + 360 361 363 364 9 + 362 361 363 364 9 + 361 363 364 365 9 + 361 363 364 374 9 + 363 364 365 366 9 + 363 364 365 367 9 + 374 364 365 366 9 + 374 364 365 367 9 + 363 364 374 360 9 + 363 364 374 373 9 + 365 364 374 360 9 + 365 364 374 373 9 + 364 365 367 368 9 + 364 365 367 369 9 + 366 365 367 368 9 + 366 365 367 369 9 + 365 367 369 370 9 + 365 367 369 373 9 + 368 367 369 370 9 + 368 367 369 373 9 + 367 369 370 371 9 + 367 369 370 372 9 + 373 369 370 371 9 + 373 369 370 372 9 + 367 369 373 374 9 + 370 369 373 374 9 + 369 373 374 360 9 + 369 373 374 364 9 + 355 375 377 358 9 + 355 375 377 378 9 + 355 375 377 379 9 + 376 375 377 358 9 + 376 375 377 378 9 + 376 375 377 379 9 + 380 375 377 358 9 + 380 375 377 378 9 + 380 375 377 379 9 + 355 375 380 381 9 + 376 375 380 381 9 + 377 375 380 381 9 + 375 380 381 382 9 + 375 380 381 383 9 + 375 380 381 384 9 + 380 381 384 385 9 + 382 381 384 385 9 + 383 381 384 385 9 + 381 384 385 386 9 + 381 384 385 387 9 + 381 384 385 388 9 + 384 385 388 389 9 + 384 385 388 390 9 + 384 385 388 408 9 + 386 385 388 389 9 + 386 385 388 390 9 + 386 385 388 408 9 + 387 385 388 389 9 + 387 385 388 390 9 + 387 385 388 408 9 + 385 388 390 391 9 + 389 388 390 391 9 + 408 388 390 391 9 + 385 388 408 409 9 + 385 388 408 410 9 + 385 388 408 413 9 + 389 388 408 409 9 + 389 388 408 410 9 + 389 388 408 413 9 + 390 388 408 409 9 + 390 388 408 410 9 + 390 388 408 413 9 + 388 390 391 392 9 + 388 390 391 393 9 + 388 390 391 410 9 + 390 391 393 394 9 + 390 391 393 407 9 + 392 391 393 394 9 + 392 391 393 407 9 + 410 391 393 394 9 + 410 391 393 407 9 + 390 391 410 408 9 + 390 391 410 411 9 + 390 391 410 412 9 + 392 391 410 408 9 + 392 391 410 411 9 + 392 391 410 412 9 + 393 391 410 408 9 + 393 391 410 411 9 + 393 391 410 412 9 + 391 393 394 395 9 + 391 393 394 396 9 + 407 393 394 395 9 + 407 393 394 396 9 + 391 393 407 397 9 + 391 393 407 406 9 + 394 393 407 397 9 + 394 393 407 406 9 + 393 394 396 397 9 + 395 394 396 397 9 + 394 396 397 398 9 + 394 396 397 407 9 + 396 397 398 399 9 + 396 397 398 400 9 + 407 397 398 399 9 + 407 397 398 400 9 + 396 397 407 393 9 + 396 397 407 406 9 + 398 397 407 393 9 + 398 397 407 406 9 + 397 398 400 401 9 + 397 398 400 402 9 + 399 398 400 401 9 + 399 398 400 402 9 + 398 400 402 403 9 + 398 400 402 406 9 + 401 400 402 403 9 + 401 400 402 406 9 + 400 402 403 404 9 + 400 402 403 405 9 + 406 402 403 404 9 + 406 402 403 405 9 + 400 402 406 407 9 + 403 402 406 407 9 + 402 406 407 393 9 + 402 406 407 397 9 + 388 408 410 391 9 + 388 408 410 411 9 + 388 408 410 412 9 + 409 408 410 391 9 + 409 408 410 411 9 + 409 408 410 412 9 + 413 408 410 391 9 + 413 408 410 411 9 + 413 408 410 412 9 + 388 408 413 414 9 + 409 408 413 414 9 + 410 408 413 414 9 + 408 413 414 415 9 + 408 413 414 416 9 + 408 413 414 417 9 + 413 414 417 418 9 + 415 414 417 418 9 + 416 414 417 418 9 + 414 417 418 419 9 + 414 417 418 420 9 + 414 417 418 421 9 + 417 418 421 422 9 + 417 418 421 423 9 + 417 418 421 438 9 + 419 418 421 422 9 + 419 418 421 423 9 + 419 418 421 438 9 + 420 418 421 422 9 + 420 418 421 423 9 + 420 418 421 438 9 + 418 421 423 424 9 + 422 421 423 424 9 + 438 421 423 424 9 + 418 421 438 439 9 + 418 421 438 440 9 + 418 421 438 443 9 + 422 421 438 439 9 + 422 421 438 440 9 + 422 421 438 443 9 + 423 421 438 439 9 + 423 421 438 440 9 + 423 421 438 443 9 + 421 423 424 425 9 + 421 423 424 426 9 + 421 423 424 440 9 + 423 424 426 427 9 + 423 424 426 436 9 + 425 424 426 427 9 + 425 424 426 436 9 + 440 424 426 427 9 + 440 424 426 436 9 + 423 424 440 438 9 + 423 424 440 441 9 + 423 424 440 442 9 + 425 424 440 438 9 + 425 424 440 441 9 + 425 424 440 442 9 + 426 424 440 438 9 + 426 424 440 441 9 + 426 424 440 442 9 + 424 426 427 428 9 + 424 426 427 429 9 + 436 426 427 428 9 + 436 426 427 429 9 + 424 426 436 435 9 + 424 426 436 437 9 + 427 426 436 435 9 + 427 426 436 437 9 + 426 427 429 430 9 + 426 427 429 431 9 + 428 427 429 430 9 + 428 427 429 431 9 + 427 429 431 432 9 + 427 429 431 435 9 + 430 429 431 432 9 + 430 429 431 435 9 + 429 431 432 433 9 + 429 431 432 434 9 + 435 431 432 433 9 + 435 431 432 434 9 + 429 431 435 436 9 + 432 431 435 436 9 + 431 435 436 426 9 + 431 435 436 437 9 + 421 438 440 424 9 + 421 438 440 441 9 + 421 438 440 442 9 + 439 438 440 424 9 + 439 438 440 441 9 + 439 438 440 442 9 + 443 438 440 424 9 + 443 438 440 441 9 + 443 438 440 442 9 + 421 438 443 444 9 + 439 438 443 444 9 + 440 438 443 444 9 + 438 443 444 445 9 + 438 443 444 446 9 + 438 443 444 447 9 + 443 444 447 448 9 + 445 444 447 448 9 + 446 444 447 448 9 + 444 447 448 449 9 + 444 447 448 450 9 + 444 447 448 451 9 + 447 448 451 452 9 + 447 448 451 453 9 + 447 448 451 468 9 + 449 448 451 452 9 + 449 448 451 453 9 + 449 448 451 468 9 + 450 448 451 452 9 + 450 448 451 453 9 + 450 448 451 468 9 + 448 451 453 454 9 + 452 451 453 454 9 + 468 451 453 454 9 + 448 451 468 469 9 + 448 451 468 470 9 + 448 451 468 473 9 + 452 451 468 469 9 + 452 451 468 470 9 + 452 451 468 473 9 + 453 451 468 469 9 + 453 451 468 470 9 + 453 451 468 473 9 + 451 453 454 455 9 + 451 453 454 456 9 + 451 453 454 470 9 + 453 454 456 457 9 + 453 454 456 466 9 + 455 454 456 457 9 + 455 454 456 466 9 + 470 454 456 457 9 + 470 454 456 466 9 + 453 454 470 468 9 + 453 454 470 471 9 + 453 454 470 472 9 + 455 454 470 468 9 + 455 454 470 471 9 + 455 454 470 472 9 + 456 454 470 468 9 + 456 454 470 471 9 + 456 454 470 472 9 + 454 456 457 458 9 + 454 456 457 459 9 + 466 456 457 458 9 + 466 456 457 459 9 + 454 456 466 465 9 + 454 456 466 467 9 + 457 456 466 465 9 + 457 456 466 467 9 + 456 457 459 460 9 + 456 457 459 461 9 + 458 457 459 460 9 + 458 457 459 461 9 + 457 459 461 462 9 + 457 459 461 465 9 + 460 459 461 462 9 + 460 459 461 465 9 + 459 461 462 463 9 + 459 461 462 464 9 + 465 461 462 463 9 + 465 461 462 464 9 + 459 461 465 466 9 + 462 461 465 466 9 + 461 465 466 456 9 + 461 465 466 467 9 + 451 468 470 454 9 + 451 468 470 471 9 + 451 468 470 472 9 + 469 468 470 454 9 + 469 468 470 471 9 + 469 468 470 472 9 + 473 468 470 454 9 + 473 468 470 471 9 + 473 468 470 472 9 + 451 468 473 474 9 + 469 468 473 474 9 + 470 468 473 474 9 + 468 473 474 475 9 + 468 473 474 476 9 + 468 473 474 477 9 + 473 474 477 478 9 + 475 474 477 478 9 + 476 474 477 478 9 + 474 477 478 479 9 + 474 477 478 480 9 + 474 477 478 481 9 + 477 478 481 482 9 + 477 478 481 483 9 + 477 478 481 500 9 + 479 478 481 482 9 + 479 478 481 483 9 + 479 478 481 500 9 + 480 478 481 482 9 + 480 478 481 483 9 + 480 478 481 500 9 + 478 481 483 484 9 + 482 481 483 484 9 + 500 481 483 484 9 + 478 481 500 501 9 + 478 481 500 502 9 + 478 481 500 505 9 + 482 481 500 501 9 + 482 481 500 502 9 + 482 481 500 505 9 + 483 481 500 501 9 + 483 481 500 502 9 + 483 481 500 505 9 + 481 483 484 485 9 + 481 483 484 486 9 + 481 483 484 502 9 + 483 484 486 487 9 + 483 484 486 498 9 + 485 484 486 487 9 + 485 484 486 498 9 + 502 484 486 487 9 + 502 484 486 498 9 + 483 484 502 500 9 + 483 484 502 503 9 + 483 484 502 504 9 + 485 484 502 500 9 + 485 484 502 503 9 + 485 484 502 504 9 + 486 484 502 500 9 + 486 484 502 503 9 + 486 484 502 504 9 + 484 486 487 488 9 + 484 486 487 489 9 + 498 486 487 488 9 + 498 486 487 489 9 + 484 486 498 496 9 + 484 486 498 499 9 + 487 486 498 496 9 + 487 486 498 499 9 + 486 487 489 490 9 + 486 487 489 494 9 + 488 487 489 490 9 + 488 487 489 494 9 + 487 489 490 491 9 + 487 489 490 492 9 + 487 489 490 493 9 + 494 489 490 491 9 + 494 489 490 492 9 + 494 489 490 493 9 + 487 489 494 495 9 + 487 489 494 496 9 + 490 489 494 495 9 + 490 489 494 496 9 + 489 494 496 497 9 + 489 494 496 498 9 + 495 494 496 497 9 + 495 494 496 498 9 + 494 496 498 486 9 + 494 496 498 499 9 + 497 496 498 486 9 + 497 496 498 499 9 + 481 500 502 484 9 + 481 500 502 503 9 + 481 500 502 504 9 + 501 500 502 484 9 + 501 500 502 503 9 + 501 500 502 504 9 + 505 500 502 484 9 + 505 500 502 503 9 + 505 500 502 504 9 + 481 500 505 506 9 + 501 500 505 506 9 + 502 500 505 506 9 + 500 505 506 507 9 + 500 505 506 508 9 + 500 505 506 509 9 + 505 506 509 510 9 + 507 506 509 510 9 + 508 506 509 510 9 + 506 509 510 511 9 + 506 509 510 512 9 + 506 509 510 513 9 + 509 510 513 514 9 + 509 510 513 515 9 + 509 510 513 532 9 + 511 510 513 514 9 + 511 510 513 515 9 + 511 510 513 532 9 + 512 510 513 514 9 + 512 510 513 515 9 + 512 510 513 532 9 + 510 513 515 516 9 + 514 513 515 516 9 + 532 513 515 516 9 + 510 513 532 533 9 + 510 513 532 534 9 + 510 513 532 537 9 + 514 513 532 533 9 + 514 513 532 534 9 + 514 513 532 537 9 + 515 513 532 533 9 + 515 513 532 534 9 + 515 513 532 537 9 + 513 515 516 517 9 + 513 515 516 518 9 + 513 515 516 534 9 + 515 516 518 519 9 + 515 516 518 530 9 + 517 516 518 519 9 + 517 516 518 530 9 + 534 516 518 519 9 + 534 516 518 530 9 + 515 516 534 532 9 + 515 516 534 535 9 + 515 516 534 536 9 + 517 516 534 532 9 + 517 516 534 535 9 + 517 516 534 536 9 + 518 516 534 532 9 + 518 516 534 535 9 + 518 516 534 536 9 + 516 518 519 520 9 + 516 518 519 521 9 + 530 518 519 520 9 + 530 518 519 521 9 + 516 518 530 528 9 + 516 518 530 531 9 + 519 518 530 528 9 + 519 518 530 531 9 + 518 519 521 522 9 + 518 519 521 526 9 + 520 519 521 522 9 + 520 519 521 526 9 + 519 521 522 523 9 + 519 521 522 524 9 + 519 521 522 525 9 + 526 521 522 523 9 + 526 521 522 524 9 + 526 521 522 525 9 + 519 521 526 527 9 + 519 521 526 528 9 + 522 521 526 527 9 + 522 521 526 528 9 + 521 526 528 529 9 + 521 526 528 530 9 + 527 526 528 529 9 + 527 526 528 530 9 + 526 528 530 518 9 + 526 528 530 531 9 + 529 528 530 518 9 + 529 528 530 531 9 + 513 532 534 516 9 + 513 532 534 535 9 + 513 532 534 536 9 + 533 532 534 516 9 + 533 532 534 535 9 + 533 532 534 536 9 + 537 532 534 516 9 + 537 532 534 535 9 + 537 532 534 536 9 + 513 532 537 538 9 + 533 532 537 538 9 + 534 532 537 538 9 + 532 537 538 539 9 + 532 537 538 540 9 + 532 537 538 541 9 + 537 538 541 542 9 + 539 538 541 542 9 + 540 538 541 542 9 + 538 541 542 543 9 + 538 541 542 544 9 + 538 541 542 545 9 + 541 542 545 546 9 + 541 542 545 547 9 + 541 542 545 564 9 + 543 542 545 546 9 + 543 542 545 547 9 + 543 542 545 564 9 + 544 542 545 546 9 + 544 542 545 547 9 + 544 542 545 564 9 + 542 545 547 548 9 + 546 545 547 548 9 + 564 545 547 548 9 + 542 545 564 565 9 + 542 545 564 566 9 + 542 545 564 569 9 + 546 545 564 565 9 + 546 545 564 566 9 + 546 545 564 569 9 + 547 545 564 565 9 + 547 545 564 566 9 + 547 545 564 569 9 + 545 547 548 549 9 + 545 547 548 550 9 + 545 547 548 566 9 + 547 548 550 551 9 + 547 548 550 562 9 + 549 548 550 551 9 + 549 548 550 562 9 + 566 548 550 551 9 + 566 548 550 562 9 + 547 548 566 564 9 + 547 548 566 567 9 + 547 548 566 568 9 + 549 548 566 564 9 + 549 548 566 567 9 + 549 548 566 568 9 + 550 548 566 564 9 + 550 548 566 567 9 + 550 548 566 568 9 + 548 550 551 552 9 + 548 550 551 553 9 + 562 550 551 552 9 + 562 550 551 553 9 + 548 550 562 560 9 + 548 550 562 563 9 + 551 550 562 560 9 + 551 550 562 563 9 + 550 551 553 554 9 + 550 551 553 558 9 + 552 551 553 554 9 + 552 551 553 558 9 + 551 553 554 555 9 + 551 553 554 556 9 + 551 553 554 557 9 + 558 553 554 555 9 + 558 553 554 556 9 + 558 553 554 557 9 + 551 553 558 559 9 + 551 553 558 560 9 + 554 553 558 559 9 + 554 553 558 560 9 + 553 558 560 561 9 + 553 558 560 562 9 + 559 558 560 561 9 + 559 558 560 562 9 + 558 560 562 550 9 + 558 560 562 563 9 + 561 560 562 550 9 + 561 560 562 563 9 + 545 564 566 548 9 + 545 564 566 567 9 + 545 564 566 568 9 + 565 564 566 548 9 + 565 564 566 567 9 + 565 564 566 568 9 + 569 564 566 548 9 + 569 564 566 567 9 + 569 564 566 568 9 + 545 564 569 570 9 + 565 564 569 570 9 + 566 564 569 570 9 + +[ dihedrals ] +; ai aj ak al funct c0 c1 c2 c3 + 9 11 12 24 4 + 11 14 12 13 4 + 15 17 16 20 4 + 16 18 17 19 4 + 20 23 21 22 4 + 41 43 44 56 4 + 43 46 44 45 4 + 47 49 48 52 4 + 48 50 49 51 4 + 52 55 53 54 4 + 73 75 76 88 4 + 75 78 76 77 4 + 79 81 80 84 4 + 80 82 81 83 4 + 84 87 85 86 4 + 105 107 108 121 4 + 107 110 108 109 4 + 111 114 112 113 4 + 112 116 114 115 4 + 116 118 117 119 4 + 117 114 116 120 4 + 138 140 141 154 4 + 140 143 141 142 4 + 144 147 145 146 4 + 145 149 147 148 4 + 149 151 150 152 4 + 150 147 149 153 4 + 171 173 174 183 4 + 173 176 174 175 4 + 173 182 183 184 4 + 174 178 176 177 4 + 176 179 178 182 4 + 178 180 179 181 4 + 201 203 204 213 4 + 203 206 204 205 4 + 203 212 213 214 4 + 204 208 206 207 4 + 206 209 208 212 4 + 208 210 209 211 4 + 231 233 234 245 4 + 233 236 234 235 4 + 233 243 245 246 4 + 236 243 241 242 4 + 237 236 234 241 4 + 241 245 243 244 4 + 263 265 266 277 4 + 265 268 266 267 4 + 265 275 277 278 4 + 268 275 273 274 4 + 269 268 266 273 4 + 273 277 275 276 4 + 294 296 297 309 4 + 296 299 297 298 4 + 300 302 301 305 4 + 301 303 302 304 4 + 305 308 306 307 4 + 326 328 329 341 4 + 328 331 329 330 4 + 332 334 333 337 4 + 333 335 334 336 4 + 337 340 338 339 4 + 358 360 361 374 4 + 360 363 361 362 4 + 364 367 365 366 4 + 365 369 367 368 4 + 369 371 370 372 4 + 370 367 369 373 4 + 391 393 394 407 4 + 393 396 394 395 4 + 397 400 398 399 4 + 398 402 400 401 4 + 402 404 403 405 4 + 403 400 402 406 4 + 424 426 427 436 4 + 426 429 427 428 4 + 426 435 436 437 4 + 427 431 429 430 4 + 429 432 431 435 4 + 431 433 432 434 4 + 454 456 457 466 4 + 456 459 457 458 4 + 456 465 466 467 4 + 457 461 459 460 4 + 459 462 461 465 4 + 461 463 462 464 4 + 484 486 487 498 4 + 486 489 487 488 4 + 486 496 498 499 4 + 489 496 494 495 4 + 490 489 487 494 4 + 494 498 496 497 4 + 516 518 519 530 4 + 518 521 519 520 4 + 518 528 530 531 4 + 521 528 526 527 4 + 522 521 519 526 4 + 526 530 528 529 4 + 548 550 551 562 4 + 550 553 551 552 4 + 550 560 562 563 4 + 553 560 558 559 4 + 554 553 551 558 4 + 558 562 560 561 4 + +#ifdef eq_polyply +; chiral-center C1' + 9 27 11 8 2 3.5264390e+01 3.3484625e+03 + 41 59 43 40 2 3.5264390e+01 3.3484625e+03 + 73 91 75 72 2 3.5264390e+01 3.3484625e+03 +294 312 296 293 2 3.5264390e+01 3.3484625e+03 +326 344 328 325 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center C3' + 25 30 6 27 2 3.5264390e+01 3.3484625e+03 + 57 62 38 59 2 3.5264390e+01 3.3484625e+03 + 89 94 70 91 2 3.5264390e+01 3.3484625e+03 +310 315 291 312 2 3.5264390e+01 3.3484625e+03 +342 347 323 344 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center DCC1' +171 187 173 170 2 3.5264390e+01 3.3484625e+03 +201 217 203 200 2 3.5264390e+01 3.3484625e+03 +424 440 426 423 2 3.5264390e+01 3.3484625e+03 +454 470 456 453 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center DCC3' +185 190 168 187 2 3.5264390e+01 3.3484625e+03 +215 220 198 217 2 3.5264390e+01 3.3484625e+03 +438 443 421 440 2 3.5264390e+01 3.3484625e+03 +468 473 451 470 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center DCO4' +168 165 185 170 2 3.5264390e+01 3.3484625e+03 +198 195 215 200 2 3.5264390e+01 3.3484625e+03 +421 418 438 423 2 3.5264390e+01 3.3484625e+03 +451 448 468 453 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center DGC1' +105 124 107 104 2 3.5264390e+01 3.3484625e+03 +138 157 140 137 2 3.5264390e+01 3.3484625e+03 +358 377 360 357 2 3.5264390e+01 3.3484625e+03 +391 410 393 390 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center DGC3' +122 127 102 124 2 3.5264390e+01 3.3484625e+03 +155 160 135 157 2 3.5264390e+01 3.3484625e+03 +375 380 355 377 2 3.5264390e+01 3.3484625e+03 +408 413 388 410 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center DGO4' +102 99 122 104 2 3.5264390e+01 3.3484625e+03 +135 132 155 137 2 3.5264390e+01 3.3484625e+03 +355 352 375 357 2 3.5264390e+01 3.3484625e+03 +388 385 408 390 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center DTC1' +231 249 233 230 2 3.5264390e+01 3.3484625e+03 +263 281 265 262 2 3.5264390e+01 3.3484625e+03 +484 502 486 483 2 3.5264390e+01 3.3484625e+03 +516 534 518 515 2 3.5264390e+01 3.3484625e+03 +548 566 550 547 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center DTC3' +247 252 228 249 2 3.5264390e+01 3.3484625e+03 +279 284 260 281 2 3.5264390e+01 3.3484625e+03 +500 505 481 502 2 3.5264390e+01 3.3484625e+03 +532 537 513 534 2 3.5264390e+01 3.3484625e+03 +564 569 545 566 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center DTO4' +228 225 247 230 2 3.5264390e+01 3.3484625e+03 +260 257 279 262 2 3.5264390e+01 3.3484625e+03 +481 478 500 483 2 3.5264390e+01 3.3484625e+03 +513 510 532 515 2 3.5264390e+01 3.3484625e+03 +545 542 564 547 2 3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center HC1' + 9 27 11 10 2 -3.5264390e+01 3.3484625e+03 + 41 59 43 42 2 -3.5264390e+01 3.3484625e+03 + 73 91 75 74 2 -3.5264390e+01 3.3484625e+03 +105 124 107 106 2 -3.5264390e+01 3.3484625e+03 +138 157 140 139 2 -3.5264390e+01 3.3484625e+03 +171 187 173 172 2 -3.5264390e+01 3.3484625e+03 +201 217 203 202 2 -3.5264390e+01 3.3484625e+03 +231 249 233 232 2 -3.5264390e+01 3.3484625e+03 +263 281 265 264 2 -3.5264390e+01 3.3484625e+03 +294 312 296 295 2 -3.5264390e+01 3.3484625e+03 +326 344 328 327 2 -3.5264390e+01 3.3484625e+03 +358 377 360 359 2 -3.5264390e+01 3.3484625e+03 +391 410 393 392 2 -3.5264390e+01 3.3484625e+03 +424 440 426 425 2 -3.5264390e+01 3.3484625e+03 +454 470 456 455 2 -3.5264390e+01 3.3484625e+03 +484 502 486 485 2 -3.5264390e+01 3.3484625e+03 +516 534 518 517 2 -3.5264390e+01 3.3484625e+03 +548 566 550 549 2 -3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center HC3' + 25 30 6 26 2 -3.5264390e+01 3.3484625e+03 + 57 62 38 58 2 -3.5264390e+01 3.3484625e+03 + 89 94 70 90 2 -3.5264390e+01 3.3484625e+03 +122 127 102 123 2 -3.5264390e+01 3.3484625e+03 +155 160 135 156 2 -3.5264390e+01 3.3484625e+03 +185 190 168 186 2 -3.5264390e+01 3.3484625e+03 +215 220 198 216 2 -3.5264390e+01 3.3484625e+03 +247 252 228 248 2 -3.5264390e+01 3.3484625e+03 +279 284 260 280 2 -3.5264390e+01 3.3484625e+03 +310 315 291 311 2 -3.5264390e+01 3.3484625e+03 +342 347 323 343 2 -3.5264390e+01 3.3484625e+03 +375 380 355 376 2 -3.5264390e+01 3.3484625e+03 +408 413 388 409 2 -3.5264390e+01 3.3484625e+03 +438 443 421 439 2 -3.5264390e+01 3.3484625e+03 +468 473 451 469 2 -3.5264390e+01 3.3484625e+03 +500 505 481 501 2 -3.5264390e+01 3.3484625e+03 +532 537 513 533 2 -3.5264390e+01 3.3484625e+03 +564 569 545 565 2 -3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center HO4' + 6 3 25 7 2 -3.5264390e+01 3.3484625e+03 + 38 35 57 39 2 -3.5264390e+01 3.3484625e+03 + 70 67 89 71 2 -3.5264390e+01 3.3484625e+03 +102 99 122 103 2 -3.5264390e+01 3.3484625e+03 +135 132 155 136 2 -3.5264390e+01 3.3484625e+03 +168 165 185 169 2 -3.5264390e+01 3.3484625e+03 +198 195 215 199 2 -3.5264390e+01 3.3484625e+03 +228 225 247 229 2 -3.5264390e+01 3.3484625e+03 +260 257 279 261 2 -3.5264390e+01 3.3484625e+03 +291 288 310 292 2 -3.5264390e+01 3.3484625e+03 +323 320 342 324 2 -3.5264390e+01 3.3484625e+03 +355 352 375 356 2 -3.5264390e+01 3.3484625e+03 +388 385 408 389 2 -3.5264390e+01 3.3484625e+03 +421 418 438 422 2 -3.5264390e+01 3.3484625e+03 +451 448 468 452 2 -3.5264390e+01 3.3484625e+03 +481 478 500 482 2 -3.5264390e+01 3.3484625e+03 +513 510 532 514 2 -3.5264390e+01 3.3484625e+03 +545 542 564 546 2 -3.5264390e+01 3.3484625e+03 +#endif + +#ifdef eq_polyply +; chiral-center O4' + 6 3 25 8 2 3.5264390e+01 3.3484625e+03 + 38 35 57 40 2 3.5264390e+01 3.3484625e+03 + 70 67 89 72 2 3.5264390e+01 3.3484625e+03 +291 288 310 293 2 3.5264390e+01 3.3484625e+03 +323 320 342 325 2 3.5264390e+01 3.3484625e+03 +#endif + diff --git a/polyply/tests/test_data/library_tests/parmbsc1/dsDNA/polyply/command b/polyply/tests/test_data/library_tests/parmbsc1/dsDNA/polyply/command new file mode 100644 index 00000000..085e825c --- /dev/null +++ b/polyply/tests/test_data/library_tests/parmbsc1/dsDNA/polyply/command @@ -0,0 +1 @@ +polyply gen_params -lib parmbsc1 -seqf ../ref.json -name DNA -o DNA.itp -dsdna diff --git a/polyply/tests/test_data/library_tests/parmbsc1/dsDNA/ref.json b/polyply/tests/test_data/library_tests/parmbsc1/dsDNA/ref.json new file mode 100644 index 00000000..7b169a4c --- /dev/null +++ b/polyply/tests/test_data/library_tests/parmbsc1/dsDNA/ref.json @@ -0,0 +1,86 @@ +{ + "directed": false, + "multigraph": false, + "graph": {}, + "nodes": [ + { + "resname": "DA5", + "resid": 1, + "id": 0 + }, + { + "resname": "DA", + "resid": 2, + "id": 1 + }, + { + "resname": "DA", + "resid": 3, + "id": 2 + }, + { + "resname": "DG", + "resid": 4, + "id": 3 + }, + { + "resname": "DG", + "resid": 5, + "id": 4 + }, + { + "resname": "DC", + "resid": 6, + "id": 5 + }, + { + "resname": "DC", + "resid": 7, + "id": 6 + }, + { + "resname": "DT", + "resid": 8, + "id": 7 + }, + { + "resname": "DT3", + "resid": 9, + "id": 8 + } + ], + "links": [ + { + "source": 0, + "target": 1 + }, + { + "source": 1, + "target": 2 + }, + { + "source": 2, + "target": 3 + }, + { + "source": 3, + "target": 4 + }, + { + "source": 4, + "target": 5 + }, + { + "source": 5, + "target": 6 + }, + { + "source": 6, + "target": 7 + }, + { + "source": 7, + "target": 8 + } + ] +} diff --git a/polyply/tests/test_data/simple_seq_files/test_ig_warning.ig b/polyply/tests/test_data/simple_seq_files/test_ig_warning.ig new file mode 100644 index 00000000..c91cbcd7 --- /dev/null +++ b/polyply/tests/test_data/simple_seq_files/test_ig_warning.ig @@ -0,0 +1,4 @@ +; here we have no title line +; here we say DNA +ATTAACACT +ATCGTACAT1 diff --git a/polyply/tests/test_gen_dna.py b/polyply/tests/test_gen_dna.py new file mode 100644 index 00000000..6b75fc6c --- /dev/null +++ b/polyply/tests/test_gen_dna.py @@ -0,0 +1,89 @@ +# Copyright 2022 University of Groningen +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" +Test DNA related functions. +""" +import pytest +import networkx as nx +from polyply.src.meta_molecule import MetaMolecule +from polyply.src.gen_dna import complement_dsDNA + +@pytest.mark.parametrize('extra_edges, termini, expect_ter', ( + # regular DNA strand + ( + [], + {0: "DC5", 5: "DG3"}, + {6: "DC5", 11: "DG3"} + ), + # circular DNA strand + ( + [(5, 0)], + {0: "DC", 5: "DG"}, + {6: "DC", 11: "DG"} + ) + )) +def test_complement_dsDNA(extra_edges, termini, expect_ter): + test_DNA_mol = MetaMolecule() + nodes = range(0, 6) + test_DNA_mol.add_edges_from(zip(nodes[:-1], nodes[1:])) + test_DNA_mol.add_edges_from(extra_edges) + resnames = {1: "DG", 2: "DT", 3: "DC", 4: "DA"} + resnames.update(termini) + nx.set_node_attributes(test_DNA_mol, resnames, "resname") + nx.set_node_attributes(test_DNA_mol, dict(zip(nodes, range(1, 7))), "resid") + edge_attr = dict(zip(zip(nodes[:-1], nodes[1:]), ["A", "B", "C", "D"])) + nx.set_edge_attributes(test_DNA_mol, edge_attr, "test") + + complement_dsDNA(test_DNA_mol) + + resnames.update({7: "DT", 8: "DG", 9: "DA", 10: "DC"}) + resnames.update(expect_ter) + new_edge_attrs = {(7, 8): "D", (8, 9): "C", (9, 10): "B", (10, 11): "A"} + edge_attr.update(new_edge_attrs) + + new_resnames = nx.get_node_attributes(test_DNA_mol, "resname") + assert new_resnames == resnames + + new_edge_attrs = nx.get_edge_attributes(test_DNA_mol, "test") + for idx, jdx in new_edge_attrs: + if (idx, jdx) in edge_attr: + assert new_edge_attrs[(idx, jdx)] == edge_attr[(idx, jdx)] + else: + assert new_edge_attrs[(idx, jdx)] == edge_attr[(jdx, idx)] + assert len(list(nx.connected_components(test_DNA_mol))) == 2 + + +def test_complement_dsDNA_error(): + """ + Test that an unkown residue generates an error when + passed to gen_dna processor. + """ + test_DNA_mol = MetaMolecule() + nodes = range(0, 6) + test_DNA_mol.add_edges_from(zip(nodes[:-1], nodes[1:])) + resnames = {0: "DA", 1: "DG", 2: "DT", 3: "DC", 4: "XX", 5: "DT"} + nx.set_node_attributes(test_DNA_mol, resnames, "resname") + nx.set_node_attributes(test_DNA_mol, dict(zip(nodes, range(1, 7))), "resid") + edge_attr = dict(zip(zip(nodes[:-1], nodes[1:]), ["A", "B", "C", "D"])) + nx.set_edge_attributes(test_DNA_mol, edge_attr, "test") + + with pytest.raises(IOError) as context: + complement_dsDNA(test_DNA_mol) + + msg = ("Trying to complete a dsDNA strand. However, resname XX with resid 5 " + "does not match any of the known base-pair resnames. Note that polyply " + "at the moment only allows base-pair completion for molecules that only " + "consist of dsDNA. Please conact the developers if you whish to create a " + "more complicated molecule.") + assert str(context.value) == msg diff --git a/polyply/tests/test_gen_params.py b/polyply/tests/test_gen_params.py index 3740702e..5a76f719 100644 --- a/polyply/tests/test_gen_params.py +++ b/polyply/tests/test_gen_params.py @@ -84,6 +84,9 @@ def test_gen_params(args_in, ref_file): ff_group = parser.add_argument_group('Force field selection') ff_group.add_argument('-lib', dest='lib', required=False, type=str, help='force-fields to include from library', nargs='*') + dna_group = parser.add_argument_group('DNA specifc options') + dna_group.add_argument('-dsdna', dest='dsdna', action='store_true', + help='complement single sequence to dsDNA sequence') args = parser.parse_args(args_in) gen_params(**vars(args)) diff --git a/polyply/tests/test_lib_files.py b/polyply/tests/test_lib_files.py index 98d748eb..aa7bcb35 100644 --- a/polyply/tests/test_lib_files.py +++ b/polyply/tests/test_lib_files.py @@ -194,6 +194,7 @@ def _interaction_equal(interaction1, interaction2, inter_type): ['martini2', 'PEO_PE'], ['martini2', 'ssDNA'], ['parmbsc1', 'DNA'], + ['parmbsc1', 'dsDNA'], # -> proteins? ]) def test_integration_protein(tmp_path, monkeypatch, library, polymer): diff --git a/polyply/tests/test_simple_seq_parsers.py b/polyply/tests/test_simple_seq_parsers.py index 3cf9e174..1ae743c1 100644 --- a/polyply/tests/test_simple_seq_parsers.py +++ b/polyply/tests/test_simple_seq_parsers.py @@ -15,6 +15,7 @@ Test that sequence files are properly read. """ from pathlib import Path +import logging import pytest import networkx as nx from polyply import TEST_DATA @@ -134,8 +135,21 @@ def test_sequence_parses_PROTEIN(): monomers = ["GLY", "ALA", "LYS", "TRP", "ASN", "VAL", "PHE", "PRO", "SER"] ref_graph = _monomers_to_linear_nx_graph(monomers) assert nx.is_isomorphic(seq_graph, ref_graph, node_match=_node_match) - + def test_unkown_nucleotype_error(): with pytest.raises(IOError): lines = ["AABBBCCTG"] _parse_plain(lines, DNA=True, RNA=False) + +def test_ig_warning(caplog): + ref_msg = ("Found only the letters A, C, G, T on first line." + " Are you missing the title line in your .ig file?") + filepath = Path(TEST_DATA + "/simple_seq_files/test_ig_warning.ig") + with caplog.at_level(logging.WARNING): + seq_graph = MetaMolecule.parsers["ig"](filepath) + for record in caplog.records: + assert str(record.msg) == ref_msg + assert record.levelname == "WARNING" + break + else: + assert False