From b4445ef26be65ea65b440d41819c5e43735e1db8 Mon Sep 17 00:00:00 2001
From: Gabriel Studer <gabriel.studer@unibas.ch>
Date: Sun, 17 Feb 2019 18:52:09 +0100
Subject: [PATCH] C++ wrapper around C++ implementation of TMalign

---
 modules/bindings/doc/tmtools.rst            |   90 +-
 modules/bindings/pymod/CMakeLists.txt       |   10 +-
 modules/bindings/pymod/__init__.py          |    1 +
 modules/bindings/pymod/export_tmalign.cc    |   58 +
 modules/bindings/pymod/tmtools.py           |   45 +-
 modules/bindings/pymod/wrap_bindings.cc     |   31 +
 modules/bindings/src/CMakeLists.txt         |   15 +-
 modules/bindings/src/tmalign/.gitignore     |   17 +
 modules/bindings/src/tmalign/BLOSUM.h       |  145 ++
 modules/bindings/src/tmalign/HwRMSD.cpp     |  530 ++++
 modules/bindings/src/tmalign/HwRMSD.h       |  204 ++
 modules/bindings/src/tmalign/Kabsch.h       |  334 +++
 modules/bindings/src/tmalign/NW.h           |  261 ++
 modules/bindings/src/tmalign/NWalign.cpp    |  358 +++
 modules/bindings/src/tmalign/NWalign.h      |  462 ++++
 modules/bindings/src/tmalign/OST_INFO       |    7 +
 modules/bindings/src/tmalign/PDB1.pdb       | 2561 +++++++++++++++++++
 modules/bindings/src/tmalign/PDB2.pdb       | 1396 ++++++++++
 modules/bindings/src/tmalign/TMalign.cpp    |  569 ++++
 modules/bindings/src/tmalign/TMalign.h      | 2439 ++++++++++++++++++
 modules/bindings/src/tmalign/align.txt      |   23 +
 modules/bindings/src/tmalign/basic_fun.h    |  763 ++++++
 modules/bindings/src/tmalign/param_set.h    |   77 +
 modules/bindings/src/tmalign/pdb2fasta.cpp  |  175 ++
 modules/bindings/src/tmalign/pdb2ss.cpp     |  218 ++
 modules/bindings/src/tmalign/pdb2xyz.cpp    |  176 ++
 modules/bindings/src/tmalign/pstream.h      | 2255 ++++++++++++++++
 modules/bindings/src/tmalign/readme.txt     |   87 +
 modules/bindings/src/tmalign/se.cpp         |  442 ++++
 modules/bindings/src/tmalign/se.h           |  178 ++
 modules/bindings/src/tmalign/xyz_sfetch.cpp |  133 +
 modules/bindings/src/wrap_tmalign.cc        |  191 ++
 modules/bindings/src/wrap_tmalign.hh        |   66 +
 33 files changed, 14274 insertions(+), 43 deletions(-)
 create mode 100644 modules/bindings/pymod/export_tmalign.cc
 create mode 100644 modules/bindings/pymod/wrap_bindings.cc
 create mode 100644 modules/bindings/src/tmalign/.gitignore
 create mode 100644 modules/bindings/src/tmalign/BLOSUM.h
 create mode 100644 modules/bindings/src/tmalign/HwRMSD.cpp
 create mode 100644 modules/bindings/src/tmalign/HwRMSD.h
 create mode 100644 modules/bindings/src/tmalign/Kabsch.h
 create mode 100644 modules/bindings/src/tmalign/NW.h
 create mode 100644 modules/bindings/src/tmalign/NWalign.cpp
 create mode 100644 modules/bindings/src/tmalign/NWalign.h
 create mode 100644 modules/bindings/src/tmalign/OST_INFO
 create mode 100644 modules/bindings/src/tmalign/PDB1.pdb
 create mode 100644 modules/bindings/src/tmalign/PDB2.pdb
 create mode 100644 modules/bindings/src/tmalign/TMalign.cpp
 create mode 100644 modules/bindings/src/tmalign/TMalign.h
 create mode 100644 modules/bindings/src/tmalign/align.txt
 create mode 100644 modules/bindings/src/tmalign/basic_fun.h
 create mode 100644 modules/bindings/src/tmalign/param_set.h
 create mode 100644 modules/bindings/src/tmalign/pdb2fasta.cpp
 create mode 100644 modules/bindings/src/tmalign/pdb2ss.cpp
 create mode 100644 modules/bindings/src/tmalign/pdb2xyz.cpp
 create mode 100644 modules/bindings/src/tmalign/pstream.h
 create mode 100644 modules/bindings/src/tmalign/readme.txt
 create mode 100644 modules/bindings/src/tmalign/se.cpp
 create mode 100644 modules/bindings/src/tmalign/se.h
 create mode 100644 modules/bindings/src/tmalign/xyz_sfetch.cpp
 create mode 100644 modules/bindings/src/wrap_tmalign.cc
 create mode 100644 modules/bindings/src/wrap_tmalign.hh

diff --git a/modules/bindings/doc/tmtools.rst b/modules/bindings/doc/tmtools.rst
index 7192e730d..7a39ba987 100644
--- a/modules/bindings/doc/tmtools.rst
+++ b/modules/bindings/doc/tmtools.rst
@@ -17,6 +17,17 @@ Citation:
   Yang Zhang and Jeffrey Skolnick, Proteins 2004 57: 702-710
   Y. Zhang and J. Skolnick, Nucl. Acids Res. 2005 33, 2302-9
 
+Besides using the standalone TM-align program, ost also provides a wrapper 
+around TM-align as published in:
+
+  Sha Gong, Chengxin Zhang, Yang Zhang, Bioinformatics 2019 
+
+The advantage is that no intermediate files must be generated, a wrapper on the
+c++ layer is used instead. However, only the basic TM-align superposition
+functionality is available.
+
+
+
 Distance measures used by TMscore
 --------------------------------------------------------------------------------
 
@@ -59,7 +70,6 @@ Usage of TMalign
 
 .. autofunction:: ost.bindings.tmtools.TMAlign
 
-.. autoclass:: ost.bindings.tmtools.TMAlignResult
 
 Usage of TMscore
 --------------------------------------------------------------------------------
@@ -67,3 +77,81 @@ Usage of TMscore
 .. autofunction:: ost.bindings.tmtools.TMScore
 
 .. autoclass:: ost.bindings.tmtools.TMScoreResult
+
+
+TMalign C++ wrapper
+--------------------------------------------------------------------------------
+
+.. module:: ost.bindings
+
+Instead of calling the TMalign executable, ost also provides a wrapper around
+its C++ implementation. The advantage is that no intermediate files need to be 
+generated in order to call the executable.
+
+.. code-block:: python
+
+  from ost import bindings
+  
+  pdb1=io.LoadPDB('1ake.pdb').Select("peptide=true")
+  pdb2=io.LoadPDB('4ake.pdb').Select("peptide=true")
+  result = bindings.WrappedTMAlign(pdb1.chains[0], pdb2.chains[0], 
+                                   fast=True)
+  print result.tm_score
+  print result.alignment.ToString(80)
+
+
+.. class:: TMAlignResult(rmsd, tm_score, aligned_length, transform, alignment)
+
+  All parameters of the constructor are available as attributes of the class
+
+  :param rmsd:          RMSD of the superposed residues
+  :param tm_score:      TMScore of the superposed residues
+  :param aligned_length: Number of superposed residues
+  :param transform:     Transformation matrix to superpose first chain onto 
+                        reference
+  :param alignment:     The sequence alignment given the structural superposition
+  :type rmsd:           :class:`float`
+  :type tm_score:       :class:`float`
+  :type aligned_length: :class:`int`
+  :type transform:      :class:`geom.Mat4`
+  :type alignment:      :class:`ost.seq.AlignmentHandle`
+
+.. method:: WrappedTMAlign(chain1, chain2, [fast=False])
+
+  Takes two chain views and runs TMalign with *chain2* as reference.
+  The positions and sequences are directly extracted from the chain
+  residues for every residue that fulfills:
+  
+    * peptide linking
+    * valid one letter code(no '?')
+    * valid CA atom
+
+  :param chain1:        Chain from which position and sequence are extracted
+                        to run TMalign.
+  :param chain2:        Chain from which position and sequence are extracted
+                        to run TMalign, this is the reference.
+  :param fast:          Whether to apply the *fast* flag to TMAlign
+  :type chain1:         :class:`ost.mol.ChainView`
+  :type chain2:         :class:`ost.mol.ChainView`
+  :type fast:           :class:`bool`
+  :rtype:               :class:`ost.bindings.TMAlignResult`
+
+
+.. method:: WrappedTMAlign(pos1, pos2, seq1, seq2 [fast=False])
+
+  Similar as described above, but directly feeding in raw data.
+
+  :param pos1:          CA positions of the first chain
+  :param pos2:          CA positions of the second chain, this is the reference.
+  :param seq1:          Sequence of first chain
+  :param seq2:          Sequence of second chain
+  :param fast:          Whether to apply the *fast* flag to TMAlign
+  :type pos1:           :class:`ost.geom.Vec3List`
+  :type pos2:           :class:`ost.geom.Vec3List`
+  :type seq1:           :class:`ost.seq.SequenceHandle`
+  :type seq2:           :class:`ost.seq.SequenceHandle`
+  :type fast:           :class:`bool`
+  :rtype:               :class:`ost.bindings.TMAlignResult`
+  :raises:              :class:`ost.Error` if pos1 and seq1, pos2 and seq2 
+                        respectively are not consistent in size.
+
diff --git a/modules/bindings/pymod/CMakeLists.txt b/modules/bindings/pymod/CMakeLists.txt
index ba312b609..5d91e8906 100644
--- a/modules/bindings/pymod/CMakeLists.txt
+++ b/modules/bindings/pymod/CMakeLists.txt
@@ -15,4 +15,12 @@ kclust.py
 ialign.py
 align_3dcomb.py
 )
-pymod(NAME bindings PY ${OST_BINDINGS})
+
+set(OST_BINDINGS_PYMOD_SOURCES
+  export_tmalign.cc
+  wrap_bindings.cc
+)
+
+
+pymod(NAME bindings OUTPUT_DIR ost/bindings CPP ${OST_BINDINGS_PYMOD_SOURCES} 
+      PY ${OST_BINDINGS})
diff --git a/modules/bindings/pymod/__init__.py b/modules/bindings/pymod/__init__.py
index ab3668069..4510f10ef 100644
--- a/modules/bindings/pymod/__init__.py
+++ b/modules/bindings/pymod/__init__.py
@@ -8,3 +8,4 @@ from ost.bindings import hbplus
 from ost.bindings import clustalw
 from ost.bindings import cadscore
 from ost.bindings import align_3dcomb
+from _ost_bindings import *
diff --git a/modules/bindings/pymod/export_tmalign.cc b/modules/bindings/pymod/export_tmalign.cc
new file mode 100644
index 000000000..09b08b185
--- /dev/null
+++ b/modules/bindings/pymod/export_tmalign.cc
@@ -0,0 +1,58 @@
+//------------------------------------------------------------------------------
+// This file is part of the OpenStructure project <www.openstructure.org>
+//
+// Copyright (C) 2008-2019 by the OpenStructure authors
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the Free
+// Software Foundation; either version 3.0 of the License, or (at your option)
+// any later version.
+// This library is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+// details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this library; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//------------------------------------------------------------------------------
+
+#include <boost/python.hpp>
+#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
+#include <ost/bindings/wrap_tmalign.hh>
+using namespace boost::python;
+
+ost::bindings::TMAlignResult WrapTMAlignPos(const geom::Vec3List& pos_one, 
+                                            const geom::Vec3List& pos_two, 
+                                            const ost::seq::SequenceHandle& seq1,
+                                            const ost::seq::SequenceHandle& seq2,
+                                            bool fast) {
+
+  return ost::bindings::WrappedTMAlign(pos_one, pos_two, seq1, seq2, fast);
+}
+
+ost::bindings::TMAlignResult WrapTMAlignView(const ost::mol::ChainView& chain1,
+                                             const ost::mol::ChainView& chain2, 
+                                             bool fast) {
+
+  return ost::bindings::WrappedTMAlign(chain1, chain2, fast);
+}
+
+void export_TMAlign() {
+  class_<ost::bindings::TMAlignResult>("TMAlignResult", init<Real, Real, int, const geom::Mat4&, 
+                                                             const ost::seq::AlignmentHandle&>())
+    .add_property("rmsd", make_function(&ost::bindings::TMAlignResult::GetRMSD))
+    .add_property("tm_score", make_function(&ost::bindings::TMAlignResult::GetTMScore))
+    .add_property("aligned_length", make_function(&ost::bindings::TMAlignResult::GetAlignedLength))
+    .add_property("transform", make_function(&ost::bindings::TMAlignResult::GetTransform,
+                               return_value_policy<reference_existing_object>()))
+    .add_property("alignment", make_function(&ost::bindings::TMAlignResult::GetAlignment,
+                               return_value_policy<reference_existing_object>()))
+  ;
+
+  def("WrappedTMAlign", &WrapTMAlignPos, (arg("pos1"), arg("pos2"), arg("seq1"), arg("seq2"),
+                                          arg("fast")=false));
+
+  def("WrapedTMAlign", &WrapTMAlignView, (arg("chain1"), arg("chain2"),
+                                          arg("fast")=false));
+}
diff --git a/modules/bindings/pymod/tmtools.py b/modules/bindings/pymod/tmtools.py
index e2b067383..d7b465721 100644
--- a/modules/bindings/pymod/tmtools.py
+++ b/modules/bindings/pymod/tmtools.py
@@ -29,6 +29,7 @@ Authors: Pascal Benkert, Marco Biasini
 """
 
 import subprocess, os, tempfile, platform
+import ost
 from ost import settings, io, geom, seq
 
 def _SetupFiles(models):
@@ -51,46 +52,9 @@ def _CleanupFiles(dir_name):
   import shutil
   shutil.rmtree(dir_name)
 
-class TMAlignResult:
-  """
-  Holds the result of running TMalign
-  
-  .. attribute:: rmsd
-    
-    The RMSD of the common Calpha atoms of both structures
-  
-  .. attribute:: transform
-  
-    The transform that superposes the model onto the reference structure.
-    
-    :type: :class:`~ost.geom.Mat4`
-  
-  .. attribute:: alignment
-  
-    The alignment of the structures, that is the pairing of Calphas of both 
-    structures. Since the programs only read ATOM records, residues consisting 
-    of HETATMs (MSE) are not included in the alignment.
-    
-    :type: :class:`~ost.seq.AlignmentHandle`
-
-  .. attribute:: tm_score
-
-    The TM-score of the structural superposition
-
-  """
-  def __init__(self, rmsd, tm_score, aligned_length, transform, 
-               ref_sequence, alignment):
-    
-    self.rmsd=rmsd
-    self.tm_score=tm_score    
-    self.aligned_length=aligned_length
-    self.transform=transform
-    self.ref_sequence =ref_sequence
-    self.alignment=alignment
-
 def _ParseTmAlign(lines,lines_matrix):
   info_line=lines[12].split(',')
-  aln_length=float(info_line[0].split('=')[1].strip())
+  aln_length=int(info_line[0].split('=')[1].strip())
   rmsd=float(info_line[1].split('=')[1].strip())  
   tm_score=float(lines[14].split('=')[1].split('(')[0].strip())
   tf1=[float(i.strip()) for i in lines_matrix[2].split()]
@@ -105,7 +69,8 @@ def _ParseTmAlign(lines,lines_matrix):
   alignment = seq.CreateAlignment()
   alignment.AddSequence(seq2)
   alignment.AddSequence(seq1)
-  return TMAlignResult(rmsd, tm_score, aln_length, tf, seq2, alignment)
+  print aln_length
+  return ost.bindings.TMAlignResult(rmsd, tm_score, aln_length, tf, alignment)
 
 def _RunTmAlign(tmalign, tmp_dir):
   model1_filename=os.path.join(tmp_dir, 'model01.pdb')
@@ -263,7 +228,7 @@ def TMAlign(model1, model2, tmalign=None):
   :type model2: :class:`~ost.mol.EntityView` or :class:`~ost.mol.EntityHandle`
   :param tmalign: If not None, the path to the tmalign executable.
   :returns: The result of the tmscore superposition
-  :rtype: :class:`TMAlignResult`
+  :rtype: :class:`ost.bindings.TMAlignResult`
   
   :raises: :class:`~ost.settings.FileNotFound` if tmalign could not be located.
   :raises: :class:`RuntimeError` if the superposition failed
diff --git a/modules/bindings/pymod/wrap_bindings.cc b/modules/bindings/pymod/wrap_bindings.cc
new file mode 100644
index 000000000..364a543a3
--- /dev/null
+++ b/modules/bindings/pymod/wrap_bindings.cc
@@ -0,0 +1,31 @@
+//------------------------------------------------------------------------------
+// This file is part of the OpenStructure project <www.openstructure.org>
+//
+// Copyright (C) 2008-2019 by the OpenStructure authors
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the Free
+// Software Foundation; either version 3.0 of the License, or (at your option)
+// any later version.
+// This library is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+// details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this library; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//------------------------------------------------------------------------------
+
+#include <boost/python.hpp>
+
+
+using namespace boost::python;
+
+
+void export_TMAlign();
+
+BOOST_PYTHON_MODULE(_ost_bindings)
+{
+  export_TMAlign();
+}
diff --git a/modules/bindings/src/CMakeLists.txt b/modules/bindings/src/CMakeLists.txt
index 7dd88cfe5..e5988958a 100644
--- a/modules/bindings/src/CMakeLists.txt
+++ b/modules/bindings/src/CMakeLists.txt
@@ -2,4 +2,17 @@ if (COMPILE_TMTOOLS)
   enable_language(Fortran)
   executable(NAME tmalign SOURCES tmalign.f)
   executable(NAME tmscore SOURCES tmscore.f)
-endif()
\ No newline at end of file
+endif()
+
+add_subdirectory(tmalign)
+
+set(OST_BINDINGS_SOURCES 
+wrap_tmalign.cc)
+
+set(OST_BINDINGS_HEADERS
+wrap_tmalign.hh)
+
+module(NAME bindings SOURCES ${OST_BINDINGS_SOURCES}
+       HEADERS ${OST_BINDINGS_TMALIGN_HEADERS} IN_DIR tmalign
+       ${OST_BINDINGS_HEADERS} HEADER_OUTPUT_DIR ost/bindings
+       DEPENDS_ON ost_geom ost_mol ost_seq)
diff --git a/modules/bindings/src/tmalign/.gitignore b/modules/bindings/src/tmalign/.gitignore
new file mode 100644
index 000000000..4dbbc7f99
--- /dev/null
+++ b/modules/bindings/src/tmalign/.gitignore
@@ -0,0 +1,17 @@
+# compiled python code
+*.pyc
+
+# vim temporary backup
+.*.sw*
+
+# binary executables
+TMalign
+TMalignc
+pdb2xyz
+pdb2fasta
+pdb2ss
+xyz_sfetch
+se
+qTMclust
+NWalign
+HwRMSD
diff --git a/modules/bindings/src/tmalign/BLOSUM.h b/modules/bindings/src/tmalign/BLOSUM.h
new file mode 100644
index 000000000..a11659b8e
--- /dev/null
+++ b/modules/bindings/src/tmalign/BLOSUM.h
@@ -0,0 +1,145 @@
+#ifndef TMalign_BLOSUM_H
+#define TMalign_BLOSUM_H 1
+
+/* This matrix contains two scoring matrices: 
+ * [1] BLOSUM62 for protein is defined for upper case letters:
+ *     ABCDEFGHIKLMNOPQRSTVWXYZ* excluding J
+ *     The original BLOSUM does not have O (PYL) and U (SEC).
+ *     In this matrix, OU values are copied from K and C, respectively.
+ * [2] BLASTN for RNA/DNA is defined for lower case letters:
+ *     acgtu where matching (including t vs u) is 2 and mismatching is -3 */
+
+const int BLOSUM[128][128]={
+//0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
+//0                   \a \b \t \n \v \f \t                                                       ' ' |  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~ DEL
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//0   '\0'
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//1   SOH
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//2   STX
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//3   ETX
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//4   EOT
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//5   ENQ
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//6   ACK
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//7   '\a'
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//8   '\b'
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//9   '\t'
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//10  '\n'
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//11  '\v'
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//12  '\f'
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//13  '\r'
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//14  SO
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//15  SI
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//16  DLE
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//17  DC1
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//18  DC2
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//19  DC3
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//20  DC4
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//21  NAK
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//22  SYN
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//23  ETB
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//24  CAN
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//25  EM
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//26  SUB
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//27  ESC
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//28  FS
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//29  GS
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//30  RS
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//31  US
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//32  ' '
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//33  !    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//34  "    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//35  #    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//36  $    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//37  %    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//38  &    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//39  '    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//40  (    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//41  )    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4,-4,-4,-4,-4,-4,-4,-4,-4, 0,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//42  *
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//43  +    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//44  ,    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//45  -    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//46  .    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//47  /    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//48  0    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//49  1    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//50  2    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//51  3    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//52  4    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//53  5    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//54  6    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//55  7    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//56  8    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//57  9    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//58  :    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//59  ;    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//60  <    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//61  =    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//62  >    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//63  ?    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//64  @    
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,-2, 0,-2,-1,-2, 0,-2,-1, 0,-1,-1,-1,-2,-1,-1,-1,-1, 1, 0, 0, 0,-3, 0,-2,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//65  A
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 4,-3, 4, 1,-3,-1, 0,-3, 0, 0,-4,-3, 3, 0,-2, 0,-1, 0,-1,-3,-3,-4,-1,-3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//66  B
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 9,-3,-4,-2,-3,-3,-1, 0,-3,-1,-1,-3,-3,-3,-3,-3,-1,-1, 9,-1,-2,-2,-2,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//67  C
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 4,-3, 6, 2,-3,-1,-1,-3, 0,-1,-4,-3, 1,-1,-1, 0,-2, 0,-1,-3,-3,-4,-1,-3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//68  D
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1,-4, 2, 5,-3,-2, 0,-3, 0, 1,-3,-2, 0, 1,-1, 2, 0, 0,-1,-4,-2,-3,-1,-2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//69  E
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2,-3,-2,-3,-3, 6,-3,-1, 0, 0,-3, 0, 0,-3,-3,-4,-3,-3,-2,-2,-2,-1, 1,-1, 3,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//70  F
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-3,-1,-2,-3, 6,-2,-4, 0,-2,-4,-3, 0,-2,-2,-2,-2, 0,-2,-3,-3,-2,-1,-3,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//71  G
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0,-3,-1, 0,-1,-2, 8,-3, 0,-1,-3,-2, 1,-1,-2, 0, 0,-1,-2,-3,-3,-2,-1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//72  H
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-3,-1,-3,-3, 0,-4,-3, 4, 0,-3, 2, 1,-3,-3,-3,-3,-3,-2,-1,-1, 3,-3,-1,-1,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//73  I
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//74  J
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0,-3,-1, 1,-3,-2,-1,-3, 0, 5,-2,-1, 0, 5,-1, 1, 2, 0,-1,-3,-2,-3,-1,-2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//75  K
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-4,-1,-4,-3, 0,-4,-3, 2, 0,-2, 4, 2,-3,-2,-3,-2,-2,-2,-1,-1, 1,-2,-1,-1,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//76  L
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-3,-1,-3,-2, 0,-3,-2, 1, 0,-1, 2, 5,-2,-1,-2, 0,-1,-1,-1,-1, 1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//77  M
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 3,-3, 1, 0,-3, 0, 1,-3, 0, 0,-3,-2, 6, 0,-2, 0, 0, 1, 0,-3,-3,-4,-1,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//78  N
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0,-3,-1, 1,-3,-2,-1,-3, 0, 5,-2,-1, 0, 5,-1, 1, 2, 0,-1,-3,-2,-3,-1,-2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//79  O
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-2,-3,-1,-1,-4,-2,-2,-3, 0,-1,-3,-2,-2,-1, 7,-1,-2,-1,-1,-3,-2,-4,-2,-3,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//80  P
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0,-3, 0, 2,-3,-2, 0,-3, 0, 1,-2, 0, 0, 1,-1, 5, 1, 0,-1,-3,-2,-2,-1,-1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//81  Q
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1,-3,-2, 0,-3,-2, 0,-3, 0, 2,-2,-1, 0, 2,-2, 1, 5,-1,-1,-3,-3,-3,-1,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//82  R
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,-1, 0, 0,-2, 0,-1,-2, 0, 0,-2,-1, 1, 0,-1, 0,-1, 4, 1,-1,-2,-3, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//83  S
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-2,-2,-2,-1, 0,-1,-1,-1, 0,-1,-1,-1,-1, 1, 5,-1, 0,-2, 0,-2,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//84  T
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 9,-3,-4,-2,-3,-3,-1, 0,-3,-1,-1,-3,-3,-3,-3,-3,-1,-1, 9,-1,-2,-2,-2,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//85  U
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3,-1,-3,-2,-1,-3,-3, 3, 0,-2, 1, 1,-3,-2,-2,-2,-3,-2, 0,-1, 4,-3,-1,-1,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//86  V
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3,-4,-2,-4,-3, 1,-2,-2,-3, 0,-3,-2,-1,-4,-3,-4,-2,-3,-3,-2,-2,-3,11,-2, 2,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//87  W
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1,-2,-1,-1,-1,-1,-1,-1, 0,-1,-1,-1,-1,-1,-2,-1,-1, 0, 0,-2,-1,-2,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//88  X
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2,-3,-2,-3,-2, 3,-3, 2,-1, 0,-2,-1,-1,-2,-2,-3,-1,-2,-2,-2,-2,-1, 2,-1, 7,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//89  Y
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1,-3, 1, 4,-3,-2, 0,-3, 0, 1,-3,-1, 0, 1,-1, 3, 0, 0,-1,-3,-2,-3,-1,-2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//90  Z
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//91  [
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//92  '\'
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//93  ]
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//94  ^
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//95  _
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//96  `
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,-3, 0, 0, 0,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//97  a
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//98  b
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0, 2, 0, 0, 0,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//99  c
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//100 d
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//101 e
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//102 f
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0,-3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//103 g
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//104 h
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//105 i
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//106 j
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//107 k
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//108 l
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//109 m
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//110 n
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//111 o
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//112 p
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//113 q
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//114 r
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//115 s
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0,-3, 0, 0, 0,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//116 t
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0,-3, 0, 0, 0,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//117 u
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//118 v
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//119 w
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//120 x
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//121 y
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//122 z
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//123 {
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//124 |
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//125 }
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//126 ~
+{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},//127 DEL
+};
+
+#endif
diff --git a/modules/bindings/src/tmalign/HwRMSD.cpp b/modules/bindings/src/tmalign/HwRMSD.cpp
new file mode 100644
index 000000000..d50607f5b
--- /dev/null
+++ b/modules/bindings/src/tmalign/HwRMSD.cpp
@@ -0,0 +1,530 @@
+#include "HwRMSD.h"
+
+using namespace std;
+
+void print_extra_help()
+{
+    cout <<
+"Additional options:\n"
+"    -dir     Perform all-against-all alignment among the list of PDB\n"
+"             chains listed by 'chain_list' under 'chain_folder'. Note\n"
+"             that the slash is necessary.\n"
+"             $ HwRMSD -dir chain_folder/ chain_list\n"
+"\n"
+"    -dir1    Use chain2 to search a list of PDB chains listed by 'chain1_list'\n"
+"             under 'chain1_folder'. Note that the slash is necessary.\n"
+"             $ HwRMSD -dir1 chain1_folder/ chain1_list chain2\n"
+"\n"
+"    -dir2    Use chain1 to search a list of PDB chains listed by 'chain2_list'\n"
+"             under 'chain2_folder'\n"
+"             $ HwRMSD chain1 -dir2 chain2_folder/ chain2_list\n"
+"\n"
+"    -suffix  (Only when -dir1 and/or -dir2 are set, default is empty)\n"
+"             add file name suffix to files listed by chain1_list or chain2_list\n"
+"\n"
+"    -atom    4-character atom name used to represent a residue.\n"
+"             Default is \" C3'\" for RNA/DNA and \" CA \" for proteins\n"
+"             (note the spaces before and after CA).\n"
+"\n"
+"    -mol     Molecule type: RNA or protein\n"
+"             Default is detect molecule type automatically\n"
+"\n"
+"    -ter     Strings to mark the end of a chain\n"
+"             3: (default) TER, ENDMDL, END or different chain ID\n"
+"             2: ENDMDL, END, or different chain ID\n"
+"             1: ENDMDL or END\n"
+"             0: (default in the first C++ TMalign) end of file\n"
+"\n"
+"    -split   Whether to split PDB file into multiple chains\n"
+"             0: (default) treat the whole structure as one single chain\n"
+"             1: treat each MODEL as a separate chain (-ter should be 0)\n"
+"             2: treat each chain as a seperate chain (-ter should be <=1)\n"
+"\n"
+"    -outfmt  Output format\n"
+"             0: (default) full output\n"
+"             1: fasta format compact output\n"
+"             2: tabular format very compact output\n"
+"            -1: full output, but without version or citation information\n"
+"\n"
+"    -byresi  Whether to assume residue index correspondence between the\n"
+"             two structures.\n"
+"             0: (default) sequence independent alignment\n"
+"             1: (same as TMscore program) sequence-dependent superposition,\n"
+"                i.e. align by residue index\n"
+"             2: (same as TMscore -c, should be used with -ter <=1)\n"
+"                align by residue index and chain ID\n"
+"             3: (similar to TMscore -c, should be used with -ter <=1)\n"
+"                align by residue index and order of chain\n"
+"\n"
+"    -glocal  Global or local alignment\n"
+"             0: (default) Needleman-Wunsch algorithm for global alignment\n"
+"             1: glocal-query alignment\n"
+"             2: glocal-both alignment\n"
+"             3: Smith-Waterman algorithm for local alignment\n"
+"\n"
+"    -iter    ALignment-superposition iterations. Default is 1\n"
+"\n"
+"    -infmt1  Input format for chain1\n"
+"    -infmt2  Input format for chain2\n"
+"            -1: (default) automatically detect PDB or PDBx/mmCIF format\n"
+"             0: PDB format\n"
+"             1: SPICKER format\n"
+"             2: xyz format\n"
+"             3: PDBx/mmCIF format\n"
+    <<endl;
+}
+
+void print_help(bool h_opt=false)
+{
+    cout <<
+"Partial implement of HwRMSD method for sequence-guided structure alignment.\n"
+"\n"
+"Usage: HwRMSD PDB1.pdb PDB2.pdb [Options]\n"
+"\n"
+"Options:\n"
+"    -u    TM-score normalized by user assigned length (the same as -L)\n"
+"          warning: it should be >= minimum length of the two structures\n"
+"          otherwise, TM-score may be >1\n"
+"\n"
+"    -a    TM-score normalized by the average length of two structures\n"
+"          T or F, (default F)\n"
+"\n"
+"    -i    Start with an alignment specified in fasta file 'align.txt'\n"
+"\n"
+"    -I    Stick to the alignment 'align.txt'\n"
+"\n"
+"    -m    Output HwRMSD rotation matrix\n"
+"\n"
+"    -d    TM-score scaled by an assigned d0, e.g. 5 Angstroms\n"
+"\n"
+"    -o    Output the superposition of PDB1.pdb to TM_sup.pdb\n"
+"          $ HwRMSD PDB1.pdb PDB2.pdb -o TM_sup.pdb\n"
+"          To view superposed full-atom structures:\n"
+"          $ pymol TM_sup.pdb PDB2.pdb\n"
+"\n"
+"    -h    Print the full help message\n"
+"\n"
+"    (Options -u, -a, -d, -o won't change the final structure alignment)\n\n"
+"Example usages:\n"
+"    HwRMSD PDB1.pdb PDB2.pdb\n"
+"    HwRMSD PDB1.pdb PDB2.pdb -u 100 -d 5.0\n"
+"    HwRMSD PDB1.pdb PDB2.pdb -a T -o PDB1.sup\n"
+"    HwRMSD PDB1.pdb PDB2.pdb -i align.txt\n"
+"    HwRMSD PDB1.pdb PDB2.pdb -m matrix.txt\n"
+    <<endl;
+
+    if (h_opt) print_extra_help();
+
+    exit(EXIT_SUCCESS);
+}
+
+int main(int argc, char *argv[])
+{
+    if (argc < 2) print_help();
+
+    /**********************/
+    /*    get argument    */
+    /**********************/
+    string xname       = "";
+    string yname       = "";
+    string fname_super = ""; // file name for superposed structure
+    string fname_lign  = ""; // file name for user alignment
+    string fname_matrix= ""; // file name for output matrix
+    vector<string> sequence; // get value from alignment file
+    double Lnorm_ass, d0_scale;
+
+    bool h_opt = false; // print full help message
+    bool m_opt = false; // flag for -m, output rotation matrix
+    bool i_opt = false; // flag for -i, with user given initial alignment
+    bool I_opt = false; // flag for -I, stick to user given alignment
+    bool o_opt = false; // flag for -o, output superposed structure
+    bool a_opt = false; // flag for -a, normalized by average length
+    bool u_opt = false; // flag for -u, normalized by user specified length
+    bool d_opt = false; // flag for -d, user specified d0
+
+    int    infmt1_opt=-1;    // PDB or PDBx/mmCIF format for chain_1
+    int    infmt2_opt=-1;    // PDB or PDBx/mmCIF format for chain_2
+    int    ter_opt   =3;     // TER, END, or different chainID
+    int    split_opt =0;     // do not split chain
+    int    outfmt_opt=0;     // set -outfmt to full output
+    string atom_opt  ="auto";// use C alpha atom for protein and C3' for RNA
+    string mol_opt   ="auto";// auto-detect the molecule type as protein/RNA
+    string suffix_opt="";    // set -suffix to empty
+    string dir_opt   ="";    // set -dir to empty
+    string dir1_opt  ="";    // set -dir1 to empty
+    string dir2_opt  ="";    // set -dir2 to empty
+    int    byresi_opt=0;     // set -byresi to 0
+    vector<string> chain1_list; // only when -dir1 is set
+    vector<string> chain2_list; // only when -dir2 is set
+    int    glocal    =0;
+    int    iter_opt  =1;
+
+    for(int i = 1; i < argc; i++)
+    {
+        if ( !strcmp(argv[i],"-o") && i < (argc-1) )
+        {
+            fname_super = argv[i + 1];     o_opt = true; i++;
+        }
+        else if ( (!strcmp(argv[i],"-u") || 
+                   !strcmp(argv[i],"-L")) && i < (argc-1) )
+        {
+            Lnorm_ass = atof(argv[i + 1]); u_opt = true; i++;
+        }
+        else if ( !strcmp(argv[i],"-a") && i < (argc-1) )
+        {
+            if (!strcmp(argv[i + 1], "T"))      a_opt=true;
+            else if (!strcmp(argv[i + 1], "F")) a_opt=false;
+            else PrintErrorAndQuit("Wrong value for option -a! It should be T or F");
+            i++;
+        }
+        else if ( !strcmp(argv[i],"-d") && i < (argc-1) )
+        {
+            d0_scale = atof(argv[i + 1]); d_opt = true; i++;
+        }
+        else if ( !strcmp(argv[i],"-h") )
+        {
+            h_opt = true;
+        }
+        else if ( !strcmp(argv[i],"-i") && i < (argc-1) )
+        {
+            fname_lign = argv[i + 1];      i_opt = true; i++;
+        }
+        else if (!strcmp(argv[i], "-m") && i < (argc-1) )
+        {
+            fname_matrix = argv[i + 1];    m_opt = true; i++;
+        }// get filename for rotation matrix
+        else if (!strcmp(argv[i], "-I") && i < (argc-1) )
+        {
+            fname_lign = argv[i + 1];      I_opt = true; i++;
+        }
+        else if ( !strcmp(argv[i],"-infmt1") && i < (argc-1) )
+        {
+            infmt1_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-infmt2") && i < (argc-1) )
+        {
+            infmt2_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-ter") && i < (argc-1) )
+        {
+            ter_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-split") && i < (argc-1) )
+        {
+            split_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-atom") && i < (argc-1) )
+        {
+            atom_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-mol") && i < (argc-1) )
+        {
+            mol_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir") && i < (argc-1) )
+        {
+            dir_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir1") && i < (argc-1) )
+        {
+            dir1_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir2") && i < (argc-1) )
+        {
+            dir2_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-suffix") && i < (argc-1) )
+        {
+            suffix_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-outfmt") && i < (argc-1) )
+        {
+            outfmt_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-byresi") && i < (argc-1) )
+        {
+            byresi_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-glocal") && i < (argc-1) )
+        {
+            glocal=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-iter") && i < (argc-1) )
+        {
+            iter_opt=atoi(argv[i + 1]); i++;
+        }
+        else if (xname.size() == 0) xname=argv[i];
+        else if (yname.size() == 0) yname=argv[i];
+        else PrintErrorAndQuit(string("ERROR! Undefined option ")+argv[i]);
+    }
+
+    if(xname.size()==0 || (yname.size()==0 && dir_opt.size()==0) || 
+                          (yname.size()    && dir_opt.size()))
+    {
+        if (h_opt) print_help(h_opt);
+        if (xname.size()==0)
+            PrintErrorAndQuit("Please provide input structures");
+        else if (yname.size()==0 && dir_opt.size()==0)
+            PrintErrorAndQuit("Please provide structure B");
+        else if (yname.size() && dir_opt.size())
+            PrintErrorAndQuit("Please provide only one file name if -dir is set");
+    }
+
+    if (suffix_opt.size() && dir_opt.size()+dir1_opt.size()+dir2_opt.size()==0)
+        PrintErrorAndQuit("-suffix is only valid if -dir, -dir1 or -dir2 is set");
+    if ((dir_opt.size() || dir1_opt.size() || dir2_opt.size()))
+    {
+        if (m_opt || o_opt)
+            PrintErrorAndQuit("-m or -o cannot be set with -dir, -dir1 or -dir2");
+        else if (dir_opt.size() && (dir1_opt.size() || dir2_opt.size()))
+            PrintErrorAndQuit("-dir cannot be set with -dir1 or -dir2");
+    }
+    if (atom_opt.size()!=4)
+        PrintErrorAndQuit("ERROR! atom name must have 4 characters, including space.");
+    if (mol_opt!="auto" && mol_opt!="protein" && mol_opt!="RNA")
+        PrintErrorAndQuit("ERROR! molecule type must be either RNA or protein.");
+    else if (mol_opt=="protein" && atom_opt=="auto")
+        atom_opt=" CA ";
+    else if (mol_opt=="RNA" && atom_opt=="auto")
+        atom_opt=" C3'";
+
+    if (i_opt && I_opt)
+        PrintErrorAndQuit("ERROR! -I and -i cannot be used together");
+    if (u_opt && Lnorm_ass<=0)
+        PrintErrorAndQuit("Wrong value for option -u!  It should be >0");
+    if (d_opt && d0_scale<=0)
+        PrintErrorAndQuit("Wrong value for option -d!  It should be >0");
+    if (outfmt_opt>=2 && (a_opt || u_opt || d_opt))
+        PrintErrorAndQuit("-outfmt 2 cannot be used with -a, -u, -L, -d");
+    if (byresi_opt!=0)
+    {
+        if (i_opt || I_opt)
+            PrintErrorAndQuit("-byresi >=1 cannot be used with -i or -I");
+        if (byresi_opt<0 || byresi_opt>3)
+            PrintErrorAndQuit("-byresi can only be 0, 1, 2 or 3");
+        if (byresi_opt>=2 && ter_opt>=2)
+            PrintErrorAndQuit("-byresi >=2 should be used with -ter <=1");
+    }
+    if (split_opt==1 && ter_opt!=0)
+        PrintErrorAndQuit("-split 1 should be used with -ter 0");
+    else if (split_opt==2 && ter_opt!=0 && ter_opt!=1)
+        PrintErrorAndQuit("-split 2 should be used with -ter 0 or 1");
+    if (split_opt<0 || split_opt>2)
+        PrintErrorAndQuit("-split can only be 0, 1 or 2");
+    if (iter_opt<=0) PrintErrorAndQuit("-iter must be >0");
+
+    /* read initial alignment file from 'align.txt' */
+    if (i_opt || I_opt) read_user_alignment(sequence, fname_lign, I_opt);
+
+    if (byresi_opt) I_opt=true;
+
+    if (m_opt && fname_matrix == "") // Output rotation matrix: matrix.txt
+        PrintErrorAndQuit("ERROR! Please provide a file name for option -m!");
+
+    /* parse file list */
+    if (dir1_opt.size()+dir_opt.size()==0) chain1_list.push_back(xname);
+    else file2chainlist(chain1_list, xname, dir_opt+dir1_opt, suffix_opt);
+
+    if (dir_opt.size())
+        for (int i=0;i<chain1_list.size();i++)
+            chain2_list.push_back(chain1_list[i]);
+    else if (dir2_opt.size()==0) chain2_list.push_back(yname);
+    else file2chainlist(chain2_list, yname, dir2_opt, suffix_opt);
+
+    if (outfmt_opt==2)
+        cout<<"#PDBchain1\tPDBchain2\tTM1\tTM2\t"
+            <<"RMSD\tID1\tID2\tIDali\tL1\tL2\tLali"<<endl;
+
+    /* declare previously global variables */
+    vector<vector<string> >PDB_lines1; // text of chain1
+    vector<vector<string> >PDB_lines2; // text of chain2
+    vector<int> mol_vec1;              // molecule type of chain1, RNA if >0
+    vector<int> mol_vec2;              // molecule type of chain2, RNA if >0
+    vector<string> chainID_list1;      // list of chainID1
+    vector<string> chainID_list2;      // list of chainID2
+    int    i,j;                // file index
+    int    chain_i,chain_j;    // chain index
+    int    xlen, ylen;         // chain length
+    int    xchainnum,ychainnum;// number of chains in a PDB file
+    char   *seqx, *seqy;       // for the protein sequence 
+    int    *secx, *secy;       // for the secondary structure 
+    double **xa, **ya;         // for input vectors xa[0...xlen-1][0..2] and
+                               // ya[0...ylen-1][0..2], in general,
+                               // ya is regarded as native structure 
+                               // --> superpose xa onto ya
+    vector<string> resi_vec1;  // residue index for chain1
+    vector<string> resi_vec2;  // residue index for chain2
+
+    /* loop over file names */
+    for (int i=0;i<chain1_list.size();i++)
+    {
+        /* parse chain 1 */
+        xname=chain1_list[i];
+        xchainnum=get_PDB_lines(xname, PDB_lines1, chainID_list1,
+            mol_vec1, ter_opt, infmt1_opt, atom_opt, split_opt);
+        if (!xchainnum)
+        {
+            cerr<<"Warning! Cannot parse file: "<<xname
+                <<". Chain number 0."<<endl;
+            continue;
+        }
+        for (int chain_i=0;chain_i<xchainnum;chain_i++)
+        {
+            xlen=PDB_lines1[chain_i].size();
+            if (mol_opt=="RNA") mol_vec1[chain_i]=1;
+            else if (mol_opt=="protein") mol_vec1[chain_i]=-1;
+            if (!xlen)
+            {
+                cerr<<"Warning! Cannot parse file: "<<xname
+                    <<". Chain length 0."<<endl;
+                continue;
+            }
+            else if (xlen<=5)
+            {
+                cerr<<"Sequence is too short <=5!: "<<xname<<endl;
+                continue;
+            }
+            NewArray(&xa, xlen, 3);
+            seqx = new char[xlen + 1];
+            xlen = read_PDB(PDB_lines1[chain_i], xa, seqx, 
+                resi_vec1, byresi_opt);
+            if (iter_opt>=2)  // secondary structure assignment
+            {
+                secx = new int[xlen];
+                if (mol_vec1[chain_i]>0) 
+                     make_sec(seqx, xa, xlen, secx,atom_opt);
+                else make_sec(xa, xlen, secx);
+            }
+
+            for (int j=(dir_opt.size()>0)*(i+1);j<chain2_list.size();j++)
+            {
+                /* parse chain 2 */
+                if (PDB_lines2.size()==0)
+                {
+                    yname=chain2_list[j];
+                    ychainnum=get_PDB_lines(yname, PDB_lines2, chainID_list2,
+                        mol_vec2, ter_opt, infmt2_opt, atom_opt, split_opt);
+                    if (!ychainnum)
+                    {
+                        cerr<<"Warning! Cannot parse file: "<<yname
+                            <<". Chain number 0."<<endl;
+                        continue;
+                    }
+                }
+                for (int chain_j=0;chain_j<ychainnum;chain_j++)
+                {
+                    ylen=PDB_lines2[chain_j].size();
+                    if (mol_opt=="RNA") mol_vec2[chain_j]=1;
+                    else if (mol_opt=="protein") mol_vec2[chain_j]=-1;
+                    if (!ylen)
+                    {
+                        cerr<<"Warning! Cannot parse file: "<<yname
+                            <<". Chain length 0."<<endl;
+                        continue;
+                    }
+                    else if (ylen<=5)
+                    {
+                        cerr<<"Sequence is too short <=5!: "<<yname<<endl;
+                        continue;
+                    }
+                    NewArray(&ya, ylen, 3);
+                    seqy = new char[ylen + 1];
+                    ylen = read_PDB(PDB_lines2[chain_j], ya, seqy,
+                        resi_vec2, byresi_opt);
+                    if (iter_opt>=2)
+                    {
+                        secy = new int[ylen];
+                        if (mol_vec2[chain_j]>0)
+                             make_sec(seqy, ya, ylen, secy, atom_opt);
+                        else make_sec(ya, ylen, secy);
+                    }
+
+                    if (byresi_opt) extract_aln_from_resi(sequence,
+                        seqx,seqy,resi_vec1,resi_vec2,byresi_opt);
+
+                    /* declare variable specific to this pair of HwRMSD */
+                    double t0[3], u0[3][3];
+                    double TM1, TM2;
+                    double TM3, TM4, TM5;     // for a_opt, u_opt, d_opt
+                    double d0_0, TM_0;
+                    double d0A, d0B, d0u, d0a;
+                    double d0_out=5.0;
+                    string seqM, seqxA, seqyA;// for output alignment
+                    double rmsd0 = 0.0;
+                    int L_ali;                // Aligned length in standard_TMscore
+                    double Liden=0;
+                    double TM_ali, rmsd_ali;  // TMscore and rmsd in standard_TMscore
+                    int n_ali=0;
+                    int n_ali8=0;
+
+                    /* entry function for structure alignment */
+                    HwRMSD_main(xa, ya, seqx, seqy, secx, secy, t0, u0,
+                        TM1, TM2, TM3, TM4, TM5, d0_0, TM_0,
+                        d0A, d0B, d0u, d0a, d0_out, seqM, seqxA, seqyA,
+                        rmsd0, L_ali, Liden, TM_ali,
+                        rmsd_ali, n_ali, n_ali8, xlen, ylen, sequence,
+                        Lnorm_ass, d0_scale, i_opt, I_opt, a_opt, u_opt, d_opt,
+                        mol_vec1[chain_i]+mol_vec2[chain_j], glocal, iter_opt);
+
+                    /* print result */
+                    output_results(
+                        xname.substr(dir1_opt.size()),
+                        yname.substr(dir2_opt.size()),
+                        chainID_list1[chain_i].c_str(),
+                        chainID_list2[chain_j].c_str(),
+                        xlen, ylen, t0, u0, TM1, TM2, 
+                        TM3, TM4, TM5, rmsd0, d0_out,
+                        seqM.c_str(), seqxA.c_str(), seqyA.c_str(), Liden,
+                        n_ali8, n_ali, L_ali, TM_ali, rmsd_ali,
+                        TM_0, d0_0, d0A, d0B,
+                        Lnorm_ass, d0_scale, d0a, d0u, 
+                        (m_opt?fname_matrix+chainID_list1[chain_i]:"").c_str(),
+                        outfmt_opt, ter_opt, 
+                        (o_opt?fname_super+chainID_list1[chain_i]:"").c_str(),
+                        false, false, a_opt, u_opt, d_opt);
+
+                    /* Done! Free memory */
+                    seqM.clear();
+                    seqxA.clear();
+                    seqyA.clear();
+                    DeleteArray(&ya, ylen);
+                    delete [] seqy;
+                    if (iter_opt>=2) delete [] secy;
+                    resi_vec2.clear();
+                } // chain_j
+                if (chain2_list.size()>1)
+                {
+                    yname.clear();
+                    for (int chain_j=0;chain_j<ychainnum;chain_j++)
+                        PDB_lines2[chain_j].clear();
+                    PDB_lines2.clear();
+                    chainID_list2.clear();
+                    mol_vec2.clear();
+                }
+            } // j
+            PDB_lines1[chain_i].clear();
+            DeleteArray(&xa, xlen);
+            delete [] seqx;
+            if (iter_opt>=2) delete [] secx;
+            resi_vec1.clear();
+        } // chain_i
+        xname.clear();
+        PDB_lines1.clear();
+        chainID_list1.clear();
+        mol_vec1.clear();
+    } // i
+    if (chain2_list.size()==1)
+    {
+        yname.clear();
+        for (int chain_j=0;chain_j<ychainnum;chain_j++)
+            PDB_lines2[chain_j].clear();
+        PDB_lines2.clear();
+        resi_vec2.clear();
+        chainID_list2.clear();
+        mol_vec2.clear();
+    }
+    chain1_list.clear();
+    chain2_list.clear();
+    sequence.clear();
+    return 0;
+}
diff --git a/modules/bindings/src/tmalign/HwRMSD.h b/modules/bindings/src/tmalign/HwRMSD.h
new file mode 100644
index 000000000..312477af1
--- /dev/null
+++ b/modules/bindings/src/tmalign/HwRMSD.h
@@ -0,0 +1,204 @@
+#ifndef TMalign_HwRMSD_h
+#define TMalign_HwRMSD_h 1
+#include "NWalign.h"
+#include "se.h"
+
+const char* HwRMSD_SSmapProtein=" CHTE";
+const char* HwRMSD_SSmapRNA    =" .<> ";
+
+double Kabsch_Superpose(double **r1, double **r2, double **xt,
+    double **xa, double **ya, int xlen, int ylen, int invmap[],
+    int& L_ali, double t[3], double u[3][3], const int mol_type)
+{
+    L_ali = 0;
+    int i, j;
+    for (j = 0; j<ylen; j++)
+    {
+        i = invmap[j];
+        if (i >= 0)
+        {
+            r1[L_ali][0]  = xa[i][0];
+            r1[L_ali][1]  = xa[i][1];
+            r1[L_ali][2]  = xa[i][2];
+
+            r2[L_ali][0]  = ya[j][0];
+            r2[L_ali][1]  = ya[j][1];
+            r2[L_ali][2]  = ya[j][2];
+
+            L_ali++;
+        }
+        else if (i != -1) PrintErrorAndQuit("Wrong map!\n");
+    }
+
+    double RMSD = 0;
+    Kabsch(r1, r2, L_ali, 1, &RMSD, t, u);
+    RMSD = sqrt( RMSD/(1.0*L_ali) );
+
+    for (i=0; i<xlen; i++)
+    {
+        xt[i][0] = xa[i][0];
+        xt[i][1] = xa[i][1];
+        xt[i][2] = xa[i][2];
+    }
+    do_rotation(xa, xt, xlen, t,u);
+    return RMSD;
+}
+
+int HwRMSD_main(double **xa, double **ya, const char *seqx, const char *seqy,
+    const int *secx, const int *secy, double t0[3], double u0[3][3],
+    double &TM1, double &TM2, double &TM3, double &TM4, double &TM5,
+    double &d0_0, double &TM_0, double &d0A, double &d0B, double &d0u,
+    double &d0a, double &d0_out, string &seqM, string &seqxA, string &seqyA,
+    double &rmsd0, int &L_ali, double &Liden, double &TM_ali,
+    double &rmsd_ali, int &n_ali, int &n_ali8, const int xlen, const int ylen,
+    const vector<string>&sequence, const double Lnorm_ass,
+    const double d0_scale, const bool i_opt, const bool I_opt,
+    const int a_opt, const bool u_opt, const bool d_opt,
+    const int mol_type, const int glocal=0, const int iter_opt=1)
+{
+    /***********************/
+    /* allocate memory     */
+    /***********************/
+    double t[3], u[3][3]; //Kabsch translation vector and rotation matrix
+    double **xt;          //for saving the superposed version of r_1 or xtm
+    double **r1, **r2;    // for Kabsch rotation
+    int minlen = min(xlen, ylen);
+    NewArray(&xt, xlen, 3);
+    NewArray(&r1, minlen, 3);
+    NewArray(&r2, minlen, 3);
+    int *invmap = new int[ylen+1];
+    char *ssx;
+    char *ssy;
+
+    int i, j, i1, i2, L;
+    double TM1_tmp,TM2_tmp,TM3_tmp,TM4_tmp,TM5_tmp,TM_ali_tmp;
+    string seqxA_tmp,seqyA_tmp,seqM_tmp;
+    double rmsd0_tmp;
+    int L_ali_tmp,n_ali_tmp,n_ali8_tmp;
+    double Liden_tmp;
+    double rmsd_ali_tmp;
+
+    /* initialize alignment */
+    TM1=TM2=TM1_tmp=TM2_tmp=L_ali=-1;
+    if (I_opt || i_opt)
+    {
+        seqxA_tmp=sequence[0];
+        seqyA_tmp=sequence[1];
+    }
+    else
+        NWalign(seqx, seqy, xlen, ylen, seqxA_tmp, seqyA_tmp, mol_type, glocal);
+    int total_iter=(I_opt || iter_opt<1)?1:iter_opt;
+
+    /*******************************/
+    /* perform iterative alignment */
+    /*******************************/
+    for (int iter=0;iter<total_iter;iter++)
+    {
+        /* get ss alignment for the second iteration */
+        if (iter==1 && !i_opt)
+        {
+            ssx=new char[xlen+1];
+            ssy=new char[ylen+1];
+            for (i=0;i<xlen;i++)
+            {
+                if (mol_type>0) ssx[i]=HwRMSD_SSmapRNA[secx[i]];
+                else ssx[i]=HwRMSD_SSmapProtein[secx[i]];
+            }
+            for (i=0;i<ylen;i++)
+            {
+                if (mol_type>0) ssy[i]=HwRMSD_SSmapRNA[secy[i]];
+                else ssy[i]=HwRMSD_SSmapProtein[secy[i]];
+            }
+            ssx[xlen]=0;
+            ssy[ylen]=0;
+            NWalign(ssx, ssy, xlen, ylen, seqxA_tmp, seqyA_tmp,
+                mol_type, glocal);
+            delete [] ssx;
+            delete [] ssy;
+        }
+
+        /* parse initial alignment */
+        for (j = 0; j < ylen; j++) invmap[j] = -1;
+        i1 = -1;
+        i2 = -1;
+        L = min(seqxA_tmp.size(), seqyA_tmp.size());
+        for (j = 0; j<L; j++)
+        {
+            if (seqxA_tmp[j] != '-') i1++;
+            if (seqyA_tmp[j] != '-')
+            {
+                i2++;
+                if (i2 >= ylen || i1 >= xlen) j = L;
+                else if (seqxA_tmp[j] != '-') invmap[i2] = i1;
+            }
+        }
+
+        /* superpose */
+        Kabsch_Superpose(r1, r2, xt, xa, ya, xlen, ylen, invmap,
+            L_ali, t, u, mol_type);
+
+        /* derive new alignment */
+        se_main(xt, ya, seqx, seqy, TM1_tmp, TM2_tmp, TM3_tmp, TM4_tmp, TM5_tmp,
+            d0_0, TM_0, d0A, d0B, d0u, d0a, d0_out,
+            seqM_tmp, seqxA_tmp, seqyA_tmp, rmsd0_tmp, L_ali_tmp, Liden_tmp,
+            TM_ali_tmp, rmsd_ali_tmp, n_ali_tmp, n_ali8_tmp, xlen, ylen, sequence,
+            Lnorm_ass, d0_scale, I_opt, a_opt, u_opt, d_opt, mol_type);
+
+        /* accept new alignment */
+        if (TM1_tmp>TM1 && TM2_tmp>TM2)
+        {
+            /* return values */
+            for (i=0; i<3; i++)
+            {
+                t0[i]=t[i];
+                for (j=0;j<3;j++) u0[i][j]=u[i][j];
+            }
+            TM1=TM1_tmp;
+            TM2=TM2_tmp;
+            TM3=TM3_tmp;
+            TM4=TM4_tmp;
+            TM5=TM5_tmp;
+
+            TM_0=TM1;
+            if (a_opt>0) TM_0=TM3;
+            else if (u_opt) TM_0=TM4;
+            else if (d_opt) TM_0=TM5;
+
+            seqxA =seqxA_tmp;
+            seqM  =seqM_tmp;
+            seqyA =seqyA_tmp;
+
+            rmsd0 =rmsd0_tmp;
+            Liden =Liden_tmp;
+            n_ali =n_ali_tmp;
+            n_ali8=n_ali8_tmp;
+
+            /* user specified initial alignment parameters */
+            if ((i_opt || I_opt) && L_ali==-1)
+            {
+                L_ali=L_ali_tmp;
+                TM_ali=TM_ali_tmp;
+                rmsd_ali=rmsd_ali_tmp;
+            }
+        }
+        else
+        {
+            if (iter>=2) break;
+            seqxA_tmp = seqxA;
+            seqyA_tmp = seqyA;
+        }
+    }
+
+    /************/
+    /* clean up */
+    /************/
+    seqxA_tmp.clear();
+    seqM_tmp.clear();
+    seqyA_tmp.clear();
+    delete [] invmap;
+    DeleteArray(&xt, xlen);
+    DeleteArray(&r1, minlen);
+    DeleteArray(&r2, minlen);
+    return 0;
+}
+#endif
diff --git a/modules/bindings/src/tmalign/Kabsch.h b/modules/bindings/src/tmalign/Kabsch.h
new file mode 100644
index 000000000..a4c5d6f7e
--- /dev/null
+++ b/modules/bindings/src/tmalign/Kabsch.h
@@ -0,0 +1,334 @@
+/**************************************************************************
+Implemetation of Kabsch algoritm for finding the best rotation matrix
+---------------------------------------------------------------------------
+x    - x(i,m) are coordinates of atom m in set x            (input)
+y    - y(i,m) are coordinates of atom m in set y            (input)
+n    - n is number of atom pairs                            (input)
+mode  - 0:calculate rms only                                (input)
+1:calculate u,t only                                (takes medium)
+2:calculate rms,u,t                                 (takes longer)
+rms   - sum of w*(ux+t-y)**2 over all atom pairs            (output)
+u    - u(i,j) is   rotation  matrix for best superposition  (output)
+t    - t(i)   is translation vector for best superposition  (output)
+**************************************************************************/
+bool Kabsch(double **x, double **y, int n, int mode, double *rms,
+    double t[3], double u[3][3])
+{
+    int i, j, m, m1, l, k;
+    double e0, rms1, d, h, g;
+    double cth, sth, sqrth, p, det, sigma;
+    double xc[3], yc[3];
+    double a[3][3], b[3][3], r[3][3], e[3], rr[6], ss[6];
+    double sqrt3 = 1.73205080756888, tol = 0.01;
+    int ip[] = { 0, 1, 3, 1, 2, 4, 3, 4, 5 };
+    int ip2312[] = { 1, 2, 0, 1 };
+
+    int a_failed = 0, b_failed = 0;
+    double epsilon = 0.00000001;
+
+    //initializtation
+    *rms = 0;
+    rms1 = 0;
+    e0 = 0;
+    double c1[3], c2[3];
+    double s1[3], s2[3];
+    double sx[3], sy[3], sz[3];
+    for (i = 0; i < 3; i++)
+    {
+        s1[i] = 0.0;
+        s2[i] = 0.0;
+
+        sx[i] = 0.0;
+        sy[i] = 0.0;
+        sz[i] = 0.0;
+    }
+
+    for (i = 0; i<3; i++)
+    {
+        xc[i] = 0.0;
+        yc[i] = 0.0;
+        t[i] = 0.0;
+        for (j = 0; j<3; j++)
+        {
+            u[i][j] = 0.0;
+            r[i][j] = 0.0;
+            a[i][j] = 0.0;
+            if (i == j)
+            {
+                u[i][j] = 1.0;
+                a[i][j] = 1.0;
+            }
+        }
+    }
+
+    if (n<1) return false;
+
+    //compute centers for vector sets x, y
+    for (i = 0; i<n; i++)
+    {
+        for (j = 0; j < 3; j++)
+        {
+            c1[j] = x[i][j];
+            c2[j] = y[i][j];
+
+            s1[j] += c1[j];
+            s2[j] += c2[j];
+        }
+
+        for (j = 0; j < 3; j++)
+        {
+            sx[j] += c1[0] * c2[j];
+            sy[j] += c1[1] * c2[j];
+            sz[j] += c1[2] * c2[j];
+        }
+    }
+    for (i = 0; i < 3; i++)
+    {
+        xc[i] = s1[i] / n;
+        yc[i] = s2[i] / n;
+    }
+    if (mode == 2 || mode == 0)
+        for (int mm = 0; mm < n; mm++)
+            for (int nn = 0; nn < 3; nn++)
+                e0 += (x[mm][nn] - xc[nn]) * (x[mm][nn] - xc[nn]) + 
+                      (y[mm][nn] - yc[nn]) * (y[mm][nn] - yc[nn]);
+    for (j = 0; j < 3; j++)
+    {
+        r[j][0] = sx[j] - s1[0] * s2[j] / n;
+        r[j][1] = sy[j] - s1[1] * s2[j] / n;
+        r[j][2] = sz[j] - s1[2] * s2[j] / n;
+    }
+
+    //compute determinat of matrix r
+    det = r[0][0] * (r[1][1] * r[2][2] - r[1][2] * r[2][1])\
+        - r[0][1] * (r[1][0] * r[2][2] - r[1][2] * r[2][0])\
+        + r[0][2] * (r[1][0] * r[2][1] - r[1][1] * r[2][0]);
+    sigma = det;
+
+    //compute tras(r)*r
+    m = 0;
+    for (j = 0; j<3; j++)
+    {
+        for (i = 0; i <= j; i++)
+        {
+            rr[m] = r[0][i] * r[0][j] + r[1][i] * r[1][j] + r[2][i] * r[2][j];
+            m++;
+        }
+    }
+
+    double spur = (rr[0] + rr[2] + rr[5]) / 3.0;
+    double cof = (((((rr[2] * rr[5] - rr[4] * rr[4]) + rr[0] * rr[5])\
+        - rr[3] * rr[3]) + rr[0] * rr[2]) - rr[1] * rr[1]) / 3.0;
+    det = det*det;
+
+    for (i = 0; i<3; i++) e[i] = spur;
+
+    if (spur>0)
+    {
+        d = spur*spur;
+        h = d - cof;
+        g = (spur*cof - det) / 2.0 - spur*h;
+
+        if (h>0)
+        {
+            sqrth = sqrt(h);
+            d = h*h*h - g*g;
+            if (d<0.0) d = 0.0;
+            d = atan2(sqrt(d), -g) / 3.0;
+            cth = sqrth * cos(d);
+            sth = sqrth*sqrt3*sin(d);
+            e[0] = (spur + cth) + cth;
+            e[1] = (spur - cth) + sth;
+            e[2] = (spur - cth) - sth;
+
+            if (mode != 0)
+            {//compute a                
+                for (l = 0; l<3; l = l + 2)
+                {
+                    d = e[l];
+                    ss[0] = (d - rr[2]) * (d - rr[5]) - rr[4] * rr[4];
+                    ss[1] = (d - rr[5]) * rr[1] + rr[3] * rr[4];
+                    ss[2] = (d - rr[0]) * (d - rr[5]) - rr[3] * rr[3];
+                    ss[3] = (d - rr[2]) * rr[3] + rr[1] * rr[4];
+                    ss[4] = (d - rr[0]) * rr[4] + rr[1] * rr[3];
+                    ss[5] = (d - rr[0]) * (d - rr[2]) - rr[1] * rr[1];
+
+                    if (fabs(ss[0]) <= epsilon) ss[0] = 0.0;
+                    if (fabs(ss[1]) <= epsilon) ss[1] = 0.0;
+                    if (fabs(ss[2]) <= epsilon) ss[2] = 0.0;
+                    if (fabs(ss[3]) <= epsilon) ss[3] = 0.0;
+                    if (fabs(ss[4]) <= epsilon) ss[4] = 0.0;
+                    if (fabs(ss[5]) <= epsilon) ss[5] = 0.0;
+
+                    if (fabs(ss[0]) >= fabs(ss[2]))
+                    {
+                        j = 0;
+                        if (fabs(ss[0]) < fabs(ss[5])) j = 2;
+                    }
+                    else if (fabs(ss[2]) >= fabs(ss[5])) j = 1;
+                    else j = 2;
+
+                    d = 0.0;
+                    j = 3 * j;
+                    for (i = 0; i<3; i++)
+                    {
+                        k = ip[i + j];
+                        a[i][l] = ss[k];
+                        d = d + ss[k] * ss[k];
+                    }
+
+
+                    //if( d > 0.0 ) d = 1.0 / sqrt(d);
+                    if (d > epsilon) d = 1.0 / sqrt(d);
+                    else d = 0.0;
+                    for (i = 0; i<3; i++) a[i][l] = a[i][l] * d;
+                }//for l
+
+                d = a[0][0] * a[0][2] + a[1][0] * a[1][2] + a[2][0] * a[2][2];
+                if ((e[0] - e[1]) >(e[1] - e[2]))
+                {
+                    m1 = 2;
+                    m = 0;
+                }
+                else
+                {
+                    m1 = 0;
+                    m = 2;
+                }
+                p = 0;
+                for (i = 0; i<3; i++)
+                {
+                    a[i][m1] = a[i][m1] - d*a[i][m];
+                    p = p + a[i][m1] * a[i][m1];
+                }
+                if (p <= tol)
+                {
+                    p = 1.0;
+                    for (i = 0; i<3; i++)
+                    {
+                        if (p < fabs(a[i][m])) continue;
+                        p = fabs(a[i][m]);
+                        j = i;
+                    }
+                    k = ip2312[j];
+                    l = ip2312[j + 1];
+                    p = sqrt(a[k][m] * a[k][m] + a[l][m] * a[l][m]);
+                    if (p > tol)
+                    {
+                        a[j][m1] = 0.0;
+                        a[k][m1] = -a[l][m] / p;
+                        a[l][m1] = a[k][m] / p;
+                    }
+                    else a_failed = 1;
+                }//if p<=tol
+                else
+                {
+                    p = 1.0 / sqrt(p);
+                    for (i = 0; i<3; i++) a[i][m1] = a[i][m1] * p;
+                }//else p<=tol  
+                if (a_failed != 1)
+                {
+                    a[0][1] = a[1][2] * a[2][0] - a[1][0] * a[2][2];
+                    a[1][1] = a[2][2] * a[0][0] - a[2][0] * a[0][2];
+                    a[2][1] = a[0][2] * a[1][0] - a[0][0] * a[1][2];
+                }
+            }//if(mode!=0)       
+        }//h>0
+
+        //compute b anyway
+        if (mode != 0 && a_failed != 1)//a is computed correctly
+        {
+            //compute b
+            for (l = 0; l<2; l++)
+            {
+                d = 0.0;
+                for (i = 0; i<3; i++)
+                {
+                    b[i][l] = r[i][0] * a[0][l] + 
+                              r[i][1] * a[1][l] + r[i][2] * a[2][l];
+                    d = d + b[i][l] * b[i][l];
+                }
+                //if( d > 0 ) d = 1.0 / sqrt(d);
+                if (d > epsilon) d = 1.0 / sqrt(d);
+                else d = 0.0;
+                for (i = 0; i<3; i++) b[i][l] = b[i][l] * d;
+            }
+            d = b[0][0] * b[0][1] + b[1][0] * b[1][1] + b[2][0] * b[2][1];
+            p = 0.0;
+
+            for (i = 0; i<3; i++)
+            {
+                b[i][1] = b[i][1] - d*b[i][0];
+                p += b[i][1] * b[i][1];
+            }
+
+            if (p <= tol)
+            {
+                p = 1.0;
+                for (i = 0; i<3; i++)
+                {
+                    if (p<fabs(b[i][0])) continue;
+                    p = fabs(b[i][0]);
+                    j = i;
+                }
+                k = ip2312[j];
+                l = ip2312[j + 1];
+                p = sqrt(b[k][0] * b[k][0] + b[l][0] * b[l][0]);
+                if (p > tol)
+                {
+                    b[j][1] = 0.0;
+                    b[k][1] = -b[l][0] / p;
+                    b[l][1] = b[k][0] / p;
+                }
+                else b_failed = 1;
+            }//if( p <= tol )
+            else
+            {
+                p = 1.0 / sqrt(p);
+                for (i = 0; i<3; i++) b[i][1] = b[i][1] * p;
+            }
+            if (b_failed != 1)
+            {
+                b[0][2] = b[1][0] * b[2][1] - b[1][1] * b[2][0];
+                b[1][2] = b[2][0] * b[0][1] - b[2][1] * b[0][0];
+                b[2][2] = b[0][0] * b[1][1] - b[0][1] * b[1][0];
+                //compute u
+                for (i = 0; i<3; i++)
+                    for (j = 0; j<3; j++)
+                        u[i][j] = b[i][0] * a[j][0] + 
+                                  b[i][1] * a[j][1] + b[i][2] * a[j][2];
+            }
+
+            //compute t
+            for (i = 0; i<3; i++)
+                t[i] = ((yc[i] - u[i][0] * xc[0]) - u[i][1] * xc[1]) - 
+                                                    u[i][2] * xc[2];
+        }//if(mode!=0 && a_failed!=1)
+    }//spur>0
+    else //just compute t and errors
+    {
+        //compute t
+        for (i = 0; i<3; i++)
+            t[i] = ((yc[i] - u[i][0] * xc[0]) - u[i][1] * xc[1]) - 
+                                                u[i][2] * xc[2];
+    }//else spur>0 
+
+    //compute rms
+    for (i = 0; i<3; i++)
+    {
+        if (e[i] < 0) e[i] = 0;
+        e[i] = sqrt(e[i]);
+    }
+    d = e[2];
+    if (sigma < 0.0) d = -d;
+    d = (d + e[1]) + e[0];
+
+    if (mode == 2 || mode == 0)
+    {
+        rms1 = (e0 - d) - d;
+        if (rms1 < 0.0) rms1 = 0.0;
+    }
+
+    *rms = rms1;
+    return true;
+}
diff --git a/modules/bindings/src/tmalign/NW.h b/modules/bindings/src/tmalign/NW.h
new file mode 100644
index 000000000..a9dd6a519
--- /dev/null
+++ b/modules/bindings/src/tmalign/NW.h
@@ -0,0 +1,261 @@
+/* Partial implementation of Needleman-Wunsch (NW) dymanamic programming for
+ * global alignment. The three NWDP_TM functions below are not complete
+ * implementation of NW algorithm because gap jumping in the standard Gotoh
+ * algorithm is not considered. Since the gap opening and gap extension is
+ * the same, this is not a problem. This code was exploited in TM-align
+ * because it is about 1.5 times faster than a complete NW implementation.
+ * Nevertheless, if gap openning != gap extension shall be implemented in
+ * the future, the Gotoh algorithm must be implemented. In rare scenarios,
+ * it is also possible to have asymmetric alignment (i.e. 
+ * TMalign A.pdb B.pdb and TMalign B.pdb A.pdb have different TM_A and TM_B
+ * values) caused by the NWPD_TM implement.
+ */
+
+/* Input: score[1:len1, 1:len2], and gap_open
+ * Output: j2i[1:len2] \in {1:len1} U {-1}
+ * path[0:len1, 0:len2]=1,2,3, from diagonal, horizontal, vertical */
+void NWDP_TM(double **score, bool **path, double **val,
+    int len1, int len2, double gap_open, int j2i[])
+{
+
+    int i, j;
+    double h, v, d;
+
+    //initialization
+    for(i=0; i<=len1; i++)
+    {
+        //val[i][0]=0;
+        val[i][0]=i*gap_open;
+        path[i][0]=false; //not from diagonal
+    }
+
+    for(j=0; j<=len2; j++)
+    {
+        //val[0][j]=0;
+        val[0][j]=j*gap_open;
+        path[0][j]=false; //not from diagonal
+        j2i[j]=-1;    //all are not aligned, only use j2i[1:len2]
+    }      
+
+
+    //decide matrix and path
+    for(i=1; i<=len1; i++)
+    {
+        for(j=1; j<=len2; j++)
+        {
+            d=val[i-1][j-1]+score[i][j]; //diagonal
+
+            //symbol insertion in horizontal (= a gap in vertical)
+            h=val[i-1][j];
+            if(path[i-1][j]) h += gap_open; //aligned in last position
+
+            //symbol insertion in vertical
+            v=val[i][j-1];
+            if(path[i][j-1]) v += gap_open; //aligned in last position
+
+
+            if(d>=h && d>=v)
+            {
+                path[i][j]=true; //from diagonal
+                val[i][j]=d;
+            }
+            else 
+            {
+                path[i][j]=false; //from horizontal
+                if(v>=h) val[i][j]=v;
+                else val[i][j]=h;
+            }
+        } //for i
+    } //for j
+
+    //trace back to extract the alignment
+    i=len1;
+    j=len2;
+    while(i>0 && j>0)
+    {
+        if(path[i][j]) //from diagonal
+        {
+            j2i[j-1]=i-1;
+            i--;
+            j--;
+        }
+        else 
+        {
+            h=val[i-1][j];
+            if(path[i-1][j]) h +=gap_open;
+
+            v=val[i][j-1];
+            if(path[i][j-1]) v +=gap_open;
+
+            if(v>=h) j--;
+            else i--;
+        }
+    }
+}
+
+/* Input: vectors x, y, rotation matrix t, u, scale factor d02, and gap_open
+ * Output: j2i[1:len2] \in {1:len1} U {-1}
+ * path[0:len1, 0:len2]=1,2,3, from diagonal, horizontal, vertical */
+void NWDP_TM(bool **path, double **val, double **x, double **y,
+    int len1, int len2, double t[3], double u[3][3],
+    double d02, double gap_open, int j2i[])
+{
+    int i, j;
+    double h, v, d;
+
+    //initialization. use old val[i][0] and val[0][j] initialization
+    //to minimize difference from TMalign fortran version
+    for(i=0; i<=len1; i++)
+    {
+        val[i][0]=0;
+        //val[i][0]=i*gap_open;
+        path[i][0]=false; //not from diagonal
+    }
+
+    for(j=0; j<=len2; j++)
+    {
+        val[0][j]=0;
+        //val[0][j]=j*gap_open;
+        path[0][j]=false; //not from diagonal
+        j2i[j]=-1;    //all are not aligned, only use j2i[1:len2]
+    }      
+    double xx[3], dij;
+
+
+    //decide matrix and path
+    for(i=1; i<=len1; i++)
+    {
+        transform(t, u, &x[i-1][0], xx);
+        for(j=1; j<=len2; j++)
+        {
+            dij=dist(xx, &y[j-1][0]);    
+            d=val[i-1][j-1] +  1.0/(1+dij/d02);
+
+            //symbol insertion in horizontal (= a gap in vertical)
+            h=val[i-1][j];
+            if(path[i-1][j]) h += gap_open; //aligned in last position
+
+            //symbol insertion in vertical
+            v=val[i][j-1];
+            if(path[i][j-1]) v += gap_open; //aligned in last position
+
+
+            if(d>=h && d>=v)
+            {
+                path[i][j]=true; //from diagonal
+                val[i][j]=d;
+            }
+            else 
+            {
+                path[i][j]=false; //from horizontal
+                if(v>=h) val[i][j]=v;
+                else val[i][j]=h;
+            }
+        } //for i
+    } //for j
+
+    //trace back to extract the alignment
+    i=len1;
+    j=len2;
+    while(i>0 && j>0)
+    {
+        if(path[i][j]) //from diagonal
+        {
+            j2i[j-1]=i-1;
+            i--;
+            j--;
+        }
+        else 
+        {
+            h=val[i-1][j];
+            if(path[i-1][j]) h +=gap_open;
+
+            v=val[i][j-1];
+            if(path[i][j-1]) v +=gap_open;
+
+            if(v>=h) j--;
+            else i--;
+        }
+    }
+}
+
+/* +ss
+ * Input: secondary structure secx, secy, and gap_open
+ * Output: j2i[1:len2] \in {1:len1} U {-1}
+ * path[0:len1, 0:len2]=1,2,3, from diagonal, horizontal, vertical */
+void NWDP_TM(bool **path, double **val, const int *secx, const int *secy,
+    const int len1, const int len2, const double gap_open, int j2i[])
+{
+
+    int i, j;
+    double h, v, d;
+
+    //initialization
+    for(i=0; i<=len1; i++)
+    {
+        //val[i][0]=0;
+        val[i][0]=i*gap_open;
+        path[i][0]=false; //not from diagonal
+    }
+
+    for(j=0; j<=len2; j++)
+    {
+        //val[0][j]=0;
+        val[0][j]=j*gap_open;
+        path[0][j]=false; //not from diagonal
+        j2i[j]=-1;    //all are not aligned, only use j2i[1:len2]
+    }      
+
+    //decide matrix and path
+    for(i=1; i<=len1; i++)
+    {
+        for(j=1; j<=len2; j++)
+        {
+            d=val[i-1][j-1] + 1.0*(secx[i-1]==secy[j-1]);
+
+            //symbol insertion in horizontal (= a gap in vertical)
+            h=val[i-1][j];
+            if(path[i-1][j]) h += gap_open; //aligned in last position
+
+            //symbol insertion in vertical
+            v=val[i][j-1];
+            if(path[i][j-1]) v += gap_open; //aligned in last position
+
+            if(d>=h && d>=v)
+            {
+                path[i][j]=true; //from diagonal
+                val[i][j]=d;
+            }
+            else 
+            {
+                path[i][j]=false; //from horizontal
+                if(v>=h) val[i][j]=v;
+                else val[i][j]=h;
+            }
+        } //for i
+    } //for j
+
+    //trace back to extract the alignment
+    i=len1;
+    j=len2;
+    while(i>0 && j>0)
+    {
+        if(path[i][j]) //from diagonal
+        {
+            j2i[j-1]=i-1;
+            i--;
+            j--;
+        }
+        else 
+        {
+            h=val[i-1][j];
+            if(path[i-1][j]) h +=gap_open;
+
+            v=val[i][j-1];
+            if(path[i][j-1]) v +=gap_open;
+
+            if(v>=h) j--;
+            else i--;
+        }
+    }
+}
diff --git a/modules/bindings/src/tmalign/NWalign.cpp b/modules/bindings/src/tmalign/NWalign.cpp
new file mode 100644
index 000000000..269e26315
--- /dev/null
+++ b/modules/bindings/src/tmalign/NWalign.cpp
@@ -0,0 +1,358 @@
+#include "NWalign.h"
+
+using namespace std;
+
+void print_extra_help()
+{
+    cout <<
+"Additional options:\n"
+"    -dir     Perform all-against-all alignment among the list of PDB\n"
+"             chains listed by 'chain_list' under 'chain_folder'. Note\n"
+"             that the slash is necessary.\n"
+"             $ NWalign -dir chain_folder/ chain_list\n"
+"\n"
+"    -dir1    Use chain2 to search a list of PDB chains listed by 'chain1_list'\n"
+"             under 'chain1_folder'. Note that the slash is necessary.\n"
+"             $ NWalign -dir1 chain1_folder/ chain1_list chain2\n"
+"\n"
+"    -dir2    Use chain1 to search a list of PDB chains listed by 'chain2_list'\n"
+"             under 'chain2_folder'\n"
+"             $ NWalign chain1 -dir2 chain2_folder/ chain2_list\n"
+"\n"
+"    -suffix  (Only when -dir1 and/or -dir2 are set, default is empty)\n"
+"             add file name suffix to files listed by chain1_list or chain2_list\n"
+"\n"
+"    -atom    4-character atom name used to represent a residue.\n"
+"             Default is \" C3'\" for RNA/DNA and \" CA \" for proteins\n"
+"             (note the spaces before and after CA).\n"
+"\n"
+"    -mol     Molecule type: RNA or protein\n"
+"             Default is detect molecule type automatically\n"
+"\n"
+"    -ter     Strings to mark the end of a chain\n"
+"             3: (default) TER, ENDMDL, END or different chain ID\n"
+"             2: ENDMDL, END, or different chain ID\n"
+"             1: ENDMDL or END\n"
+"             0: (default in the first C++ TMalign) end of file\n"
+"\n"
+"             For FASTA intput (-infmt1/-infmt2 4), -ter 0 means read all\n"
+"             sequences; -ter >=1 means read the first sequence only."
+"\n"
+"    -split   Whether to split PDB file into multiple chains\n"
+"             0: (default) treat the whole structure as one single chain\n"
+"             1: treat each MODEL as a separate chain (-ter should be 0)\n"
+"             2: treat each chain as a seperate chain (-ter should be <=1)\n"
+"\n"
+"             For FASTA intput, -split 0 means concatenate all sequences into\n"
+"             one read all sequence; -split >=1 means each sequence is an\n"
+"             individual entry."
+"\n"
+"    -outfmt  Output format\n"
+"             0: (default) full output\n"
+"             1: fasta format compact output\n"
+"             2: tabular format very compact output\n"
+    <<endl;
+}
+
+void print_help(bool h_opt=false)
+{
+    cout <<
+"Pairwise sequence alignment between two sequences.\n"
+"\n"
+"Usage: NWalign PDB1.pdb PDB2.pdb [Options]\n"
+"\n"
+"Options:\n"
+"    -h       Print the full help message\n"
+"\n"
+"    -glocal  Global or local alignment\n"
+"             0: (default) Needleman-Wunsch algorithm for global alignment\n"
+"             1: glocal-query alignment\n"
+"             2: glocal-both alignment\n"
+"             3: Smith-Waterman algorithm for local alignment\n"
+"\n"
+"    -infmt1  Input format for chain1\n"
+"    -infmt2  Input format for chain2\n"
+"            -1: (default) automatically detect PDB or PDBx/mmCIF format\n"
+"             0: PDB format\n"
+"             2: xyz format\n"
+"             3: PDBx/mmCIF format\n"
+"             4: FASTA format sequence\n"
+    <<endl;
+
+    if (h_opt) print_extra_help();
+
+    exit(EXIT_SUCCESS);
+}
+
+int main(int argc, char *argv[])
+{
+    if (argc < 2) print_help();
+
+
+    clock_t t1, t2;
+    t1 = clock();
+
+    /**********************/
+    /*    get argument    */
+    /**********************/
+    string xname     ="";
+    string yname     ="";
+    bool   h_opt     =false; // print full help message
+    int    infmt1_opt=-1;    // FASTA sequence
+    int    infmt2_opt=-1;    // FASTA sequence
+    int    ter_opt   =3;     // TER, END, or different chainID
+    int    split_opt =0;     // do not split chain
+    int    outfmt_opt=0;     // set -outfmt to full output
+    string atom_opt  ="auto";// use C alpha atom for protein and C3' for RNA
+    string mol_opt   ="auto";// auto-detect the molecule type as protein/RNA
+    string suffix_opt="";    // set -suffix to empty
+    string dir_opt   ="";    // set -dir to empty
+    string dir1_opt  ="";    // set -dir1 to empty
+    string dir2_opt  ="";    // set -dir2 to empty
+    vector<string> chain1_list; // only when -dir1 is set
+    vector<string> chain2_list; // only when -dir2 is set
+    int    glocal    =0;
+
+    for(int i = 1; i < argc; i++)
+    {
+        if ( !strcmp(argv[i],"-h") )
+        {
+            h_opt = true;
+        }
+        else if ( !strcmp(argv[i],"-infmt1") && i < (argc-1) )
+        {
+            infmt1_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-infmt2") && i < (argc-1) )
+        {
+            infmt2_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-ter") && i < (argc-1) )
+        {
+            ter_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-split") && i < (argc-1) )
+        {
+            split_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-atom") && i < (argc-1) )
+        {
+            atom_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-mol") && i < (argc-1) )
+        {
+            mol_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir") && i < (argc-1) )
+        {
+            dir_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir1") && i < (argc-1) )
+        {
+            dir1_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir2") && i < (argc-1) )
+        {
+            dir2_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-suffix") && i < (argc-1) )
+        {
+            suffix_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-outfmt") && i < (argc-1) )
+        {
+            outfmt_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-glocal") && i < (argc-1) )
+        {
+            glocal=atoi(argv[i + 1]); i++;
+        }
+        else if (xname.size() == 0) xname=argv[i];
+        else if (yname.size() == 0) yname=argv[i];
+        else PrintErrorAndQuit(string("ERROR! Undefined option ")+argv[i]);
+    }
+
+    if(xname.size()==0 || (yname.size()==0 && dir_opt.size()==0) || 
+                          (yname.size()    && dir_opt.size()))
+    {
+        if (h_opt) print_help(h_opt);
+        if (xname.size()==0)
+            PrintErrorAndQuit("Please provide input sequences");
+        else if (yname.size()==0 && dir_opt.size()==0)
+            PrintErrorAndQuit("Please provide sequence 2");
+        else if (yname.size() && dir_opt.size())
+            PrintErrorAndQuit("Please provide only one file name if -dir is set");
+    }
+
+    if (suffix_opt.size() && dir_opt.size()+dir1_opt.size()+dir2_opt.size()==0)
+        PrintErrorAndQuit("-suffix is only valid if -dir, -dir1 or -dir2 is set");
+    if (dir_opt.size() && (dir1_opt.size() || dir2_opt.size()))
+        PrintErrorAndQuit("-dir cannot be set with -dir1 or -dir2");
+    if (atom_opt.size()!=4)
+        PrintErrorAndQuit("ERROR! atom name must have 4 characters, including space.");
+    if (mol_opt!="auto" && mol_opt!="protein" && mol_opt!="RNA")
+        PrintErrorAndQuit("ERROR! molecule type must be either RNA or protein.");
+    else if (mol_opt=="protein" && atom_opt=="auto")
+        atom_opt=" CA ";
+    else if (mol_opt=="RNA" && atom_opt=="auto")
+        atom_opt=" C3'";
+
+    if (split_opt==1 && ter_opt!=0)
+        PrintErrorAndQuit("-split 1 should be used with -ter 0");
+    else if (split_opt==2 && ter_opt!=0 && ter_opt!=1)
+        PrintErrorAndQuit("-split 2 should be used with -ter 0 or 1");
+    if (split_opt<0 || split_opt>2)
+        PrintErrorAndQuit("-split can only be 0, 1 or 2");
+
+    /* parse file list */
+    if (dir1_opt.size()+dir_opt.size()==0) chain1_list.push_back(xname);
+    else file2chainlist(chain1_list, xname, dir_opt+dir1_opt, suffix_opt);
+
+    if (dir_opt.size())
+        for (int i=0;i<chain1_list.size();i++)
+            chain2_list.push_back(chain1_list[i]);
+    else if (dir2_opt.size()==0) chain2_list.push_back(yname);
+    else file2chainlist(chain2_list, yname, dir2_opt, suffix_opt);
+
+    if (outfmt_opt==2)
+        cout<<"#sequence1\tsequence2\tID1\tID2\tIDali\tL1\tL2\tLali"<<endl;
+
+    /* declare previously global variables */
+    vector<vector<string> >PDB_lines1; // text of chain1
+    vector<vector<string> >PDB_lines2; // text of chain2
+    vector<int> mol_vec1;              // molecule type of chain1, RNA if >0
+    vector<int> mol_vec2;              // molecule type of chain2, RNA if >0
+    vector<string> chainID_list1;      // list of chainID1
+    vector<string> chainID_list2;      // list of chainID2
+    int    i,j;                // file index
+    int    chain_i,chain_j;    // chain index
+    int    xlen, ylen;         // chain length
+    int    xchainnum,ychainnum;// number of chains in a PDB file
+    char   *seqx, *seqy;       // for the protein sequence 
+    int    l; // residue index
+
+    /* loop over file names */
+    for (i=0;i<chain1_list.size();i++)
+    {
+        /* parse chain 1 */
+        xname=chain1_list[i];
+        if (infmt1_opt>=4) xchainnum=get_FASTA_lines(xname, PDB_lines1, 
+                chainID_list1, mol_vec1, ter_opt, split_opt);
+        else xchainnum=get_PDB_lines(xname, PDB_lines1, chainID_list1,
+                mol_vec1, ter_opt, infmt1_opt, atom_opt, split_opt);
+        if (!xchainnum)
+        {
+            cerr<<"Warning! Cannot parse file: "<<xname
+                <<". Chain number 0."<<endl;
+            continue;
+        }
+        for (chain_i=0;chain_i<xchainnum;chain_i++)
+        {
+            if (infmt1_opt>=4) xlen=PDB_lines1[chain_i][0].size();
+            else xlen=PDB_lines1[chain_i].size();
+            if (mol_opt=="RNA") mol_vec1[chain_i]=1;
+            else if (mol_opt=="protein") mol_vec1[chain_i]=-1;
+            if (!xlen)
+            {
+                cerr<<"Warning! Cannot parse file: "<<xname
+                    <<". Chain length 0."<<endl;
+                continue;
+            }
+            seqx = new char[xlen + 1];
+            if (infmt1_opt>=4) strcpy(seqx,PDB_lines1[chain_i][0].c_str());
+            else for (l=0;l<xlen;l++)
+                seqx[l]=AAmap(PDB_lines1[chain_i][l].substr(17,3));
+            seqx[xlen]=0;
+            
+            for (j=(dir_opt.size()>0)*(i+1);j<chain2_list.size();j++)
+            {
+                /* parse chain 2 */
+                if (PDB_lines2.size()==0)
+                {
+                    yname=chain2_list[j];
+                    if (infmt2_opt>=4)
+                         ychainnum=get_FASTA_lines(yname, PDB_lines2,
+                            chainID_list2, mol_vec2, ter_opt, split_opt);
+                    else ychainnum=get_PDB_lines(yname, PDB_lines2,
+                            chainID_list2, mol_vec2, ter_opt,
+                            infmt2_opt, atom_opt, split_opt);
+                    if (!ychainnum)
+                    {
+                        cerr<<"Warning! Cannot parse file: "<<yname
+                            <<". Chain number 0."<<endl;
+                        continue;
+                    }
+                }
+                for (chain_j=0;chain_j<ychainnum;chain_j++)
+                {
+                    if (infmt2_opt>=4) ylen=PDB_lines2[chain_j][0].size();
+                    else ylen=PDB_lines2[chain_j].size();
+                    if (mol_opt=="RNA") mol_vec2[chain_j]=1;
+                    else if (mol_opt=="protein") mol_vec2[chain_j]=-1;
+                    if (!ylen)
+                    {
+                        cerr<<"Warning! Cannot parse file: "<<yname
+                            <<". Chain length 0."<<endl;
+                        continue;
+                    }
+                    seqy = new char[ylen + 1];
+                    if (infmt2_opt>=4) 
+                        strcpy(seqy,PDB_lines2[chain_j][0].c_str());
+                    else for (l=0;l<ylen;l++)
+                        seqy[l]=AAmap(PDB_lines2[chain_j][l].substr(17,3));
+                    seqy[ylen]=0;
+
+                    int L_ali;                // Aligned length
+                    double Liden=0;
+                    string seqM, seqxA, seqyA;// for output alignment
+                    
+                    int aln_score=NWalign(seqx, seqy, xlen, ylen, seqxA, seqyA, 
+                        mol_vec1[chain_i]+mol_vec2[chain_j], glocal);
+                    
+                    get_seqID(seqxA, seqyA, seqM, Liden, L_ali);
+
+                    output_NWalign_results(
+                        xname.substr(dir1_opt.size()),
+                        yname.substr(dir2_opt.size()),
+                        chainID_list1[chain_i].c_str(),
+                        chainID_list2[chain_j].c_str(),
+                        xlen, ylen, seqM.c_str(), seqxA.c_str(),
+                        seqyA.c_str(), Liden, L_ali, aln_score, outfmt_opt);
+
+                    /* Done! Free memory */
+                    seqM.clear();
+                    seqxA.clear();
+                    seqyA.clear();
+                    delete [] seqy;
+                } // chain_j
+                if (chain2_list.size()>1)
+                {
+                    yname.clear();
+                    for (chain_j=0;chain_j<ychainnum;chain_j++)
+                        PDB_lines2[chain_j].clear();
+                    PDB_lines2.clear();
+                    chainID_list2.clear();
+                    mol_vec2.clear();
+                }
+            } // j
+            PDB_lines1[chain_i].clear();
+            delete [] seqx;
+        } // chain_i
+        xname.clear();
+        PDB_lines1.clear();
+        chainID_list1.clear();
+        mol_vec1.clear();
+    } // i
+    if (chain2_list.size()==1)
+    {
+        yname.clear();
+        for (chain_j=0;chain_j<ychainnum;chain_j++)
+            PDB_lines2[chain_j].clear();
+        PDB_lines2.clear();
+        chainID_list2.clear();
+        mol_vec2.clear();
+    }
+    chain1_list.clear();
+    chain2_list.clear();
+    return 0;
+}
diff --git a/modules/bindings/src/tmalign/NWalign.h b/modules/bindings/src/tmalign/NWalign.h
new file mode 100644
index 000000000..e0125bb61
--- /dev/null
+++ b/modules/bindings/src/tmalign/NWalign.h
@@ -0,0 +1,462 @@
+/* header for Needleman-Wunsch global sequence alignment */
+#ifndef NWalign_H
+#define NWalign_H 1
+
+#include "basic_fun.h"
+#include "BLOSUM.h"
+
+#define MAX(A,B) ((A)>(B)?(A):(B))
+
+using namespace std;
+
+const int gapopen_blosum62=-11;
+const int gapext_blosum62=-1;
+
+const int gapopen_blastn=-5;
+const int gapext_blastn=-2;
+
+/* initialize matrix in gotoh algorithm */
+void init_gotoh_mat(int **S, int **JumpH, int **JumpV, int **P,
+    int **H, int **V, const int xlen, const int ylen, const int gapopen,
+    const int gapext, const int glocal=0, const int alt_init=1)
+{
+    // fill first row/colum of JumpH,jumpV and path matrix P
+    int i,j;
+    for (i=0;i<xlen+1;i++)
+        for (j=0;j<ylen+1;j++)
+            H[i][j]=V[i][j]=P[i][j]=JumpH[i][j]=JumpV[i][j]=0;
+    for (i=0;i<xlen+1;i++)
+    {
+        if (glocal<2) P[i][0]=4; // -
+        JumpV[i][0]=i;
+    }
+    for (j=0;j<ylen+1;j++)
+    {
+        if (glocal<1) P[0][j]=2; // |
+        JumpH[0][j]=j;
+    }
+    if (glocal<2) for (i=1;i<xlen+1;i++) S[i][0]=gapopen+gapext*(i-1);
+    if (glocal<1) for (j=1;j<ylen+1;j++) S[0][j]=gapopen+gapext*(j-1);
+    if (alt_init==0)
+    {
+        for (i=1;i<xlen+1;i++) H[i][0]=gapopen+gapext*(i-1);
+        for (j=1;j<ylen+1;j++) V[0][j]=gapopen+gapext*(j-1);
+    }
+    else
+    {
+        if (glocal<2) for (i=1;i<xlen+1;i++) V[i][0]=gapopen+gapext*(i-1);
+        if (glocal<1) for (j=1;j<ylen+1;j++) H[0][j]=gapopen+gapext*(j-1);
+        for (i=0;i<xlen+1;i++) H[i][0]=-99999; // INT_MIN cause bug on ubuntu
+        for (j=0;j<ylen+1;j++) V[0][j]=-99999; // INT_MIN;
+    }
+}
+
+/* locate the cell with highest alignment score. reset path after
+ * the cell to zero */
+void find_highest_align_score( int **S, int **P,
+    int &aln_score, const int xlen,const int ylen)
+{
+    // locate the cell with highest alignment score
+    int max_aln_i=xlen;
+    int max_aln_j=ylen;
+    int i,j;
+    for (i=0;i<xlen+1;i++)
+    {
+        for (j=0;j<ylen+1;j++)
+        {
+            if (S[i][j]>=aln_score)
+            {
+                max_aln_i=i;
+                max_aln_j=j;
+                aln_score=S[i][j];
+            }
+        }
+    }
+
+    // reset all path after [max_aln_i][max_aln_j]
+    for (i=max_aln_i+1;i<xlen+1;i++) for (j=0;j<ylen+1;j++) P[i][j]=0;
+    for (i=0;i<xlen+1;i++) for (j=max_aln_j+1;j<ylen+1;j++) P[i][j]=0;
+}
+
+/* calculate dynamic programming matrix using gotoh algorithm
+ * S     - cumulative scorefor each cell
+ * P     - string representation for path
+ *         0 :   uninitialized, for gaps at N- & C- termini when glocal>0
+ *         1 : \ match-mismatch
+ *         2 : | vertical gap (insertion)
+ *         4 : - horizontal gap (deletion)
+ * JumpH - horizontal long gap number.
+ * JumpV - vertical long gap number.
+ * all matrices are in the size of [len(seqx)+1]*[len(seqy)+1]
+ *
+ * glocal - global or local alignment
+ *         0 : global alignment (Needleman-Wunsch dynamic programming)
+ *         1 : glocal-query alignment
+ *         2 : glocal-both alignment
+ *         3 : local alignment (Smith-Waterman dynamic programming)
+ *
+ * alt_init - whether to adopt alternative matrix initialization
+ *         1 : use wei zheng's matrix initialization
+ *         0 : use yang zhang's matrix initialization, does NOT work
+ *             for glocal alignment
+ */
+int calculate_score_gotoh(const int xlen,const int ylen, int **S,
+    int** JumpH, int** JumpV, int **P, const int gapopen,const int gapext,
+    const int glocal=0, const int alt_init=1)
+{
+    int **H;
+    int **V;
+    NewArray(&H,xlen+1,ylen+1); // penalty score for horizontal long gap
+    NewArray(&V,xlen+1,ylen+1); // penalty score for vertical long gap
+    
+    // fill first row/colum of JumpH,jumpV and path matrix P
+    int i,j;
+    init_gotoh_mat(S, JumpH, JumpV, P, H, V, xlen, ylen,
+        gapopen, gapext, glocal, alt_init);
+
+    // fill S and P
+    int diag_score,left_score,up_score;
+    for (i=1;i<xlen+1;i++)
+    {
+        for (j=1;j<ylen+1;j++)
+        {
+            // penalty of consective deletion
+            if (glocal<1 || i<xlen || glocal>=3)
+            {
+                H[i][j]=MAX(S[i][j-1]+gapopen,H[i][j-1]+gapext);
+                JumpH[i][j]=(H[i][j]==H[i][j-1]+gapext)?(JumpH[i][j-1]+1):1;
+            }
+            else
+            {
+                H[i][j]=MAX(S[i][j-1],H[i][j-1]);
+                JumpH[i][j]=(H[i][j]==H[i][j-1])?(JumpH[i][j-1]+1):1;
+            }
+            // penalty of consective insertion
+            if (glocal<2 || j<ylen || glocal>=3)
+            {
+                V[i][j]=MAX(S[i-1][j]+gapopen,V[i-1][j]+gapext);
+                JumpV[i][j]=(V[i][j]==V[i-1][j]+gapext)?(JumpV[i-1][j]+1):1;
+            }
+            else
+            {
+                V[i][j]=MAX(S[i-1][j],V[i-1][j]);
+                JumpV[i][j]=(V[i][j]==V[i-1][j])?(JumpV[i-1][j]+1):1;
+            }
+
+            diag_score=S[i-1][j-1]+S[i][j]; // match-mismatch '\'
+            left_score=H[i][j];     // deletion       '-'
+            up_score  =V[i][j];     // insertion      '|'
+
+            if (diag_score>=left_score && diag_score>=up_score)
+            {
+                S[i][j]=diag_score;
+                P[i][j]+=1;
+            }
+            if (up_score>=diag_score && up_score>=left_score)
+            {
+                S[i][j]=up_score;
+                P[i][j]+=2;
+            }
+            if (left_score>=diag_score && left_score>=up_score)
+            {
+                S[i][j]=left_score;
+                P[i][j]+=4;
+            }
+            if (glocal>=3 && S[i][j]<0)
+            {
+                S[i][j]=0;
+                P[i][j]=0;
+                H[i][j]=0;
+                V[i][j]=0;
+                JumpH[i][j]=0;
+                JumpV[i][j]=0;
+            }
+        }
+    }
+    int aln_score=S[xlen][ylen];
+
+    // re-fill first row/column of path matrix P for back-tracing
+    for (i=1;i<xlen+1;i++) if (glocal<3 || P[i][0]>0) P[i][0]=2; // |
+    for (j=1;j<ylen+1;j++) if (glocal<3 || P[0][j]>0) P[0][j]=4; // -
+
+    // calculate alignment score and alignment path for swalign
+    if (glocal>=3)
+        find_highest_align_score(S,P,aln_score,xlen,ylen);
+
+    // release memory
+    DeleteArray(&H,xlen+1);
+    DeleteArray(&V,xlen+1);
+    return aln_score; // final alignment score
+}
+
+/* trace back dynamic programming path to diciper pairwise alignment */
+void trace_back_gotoh(const char *seqx, const char *seqy,
+    int ** JumpH, int ** JumpV, int ** P,
+    string& seqxA, string& seqyA, const int xlen, const int ylen)
+{
+    int i=xlen;
+    int j=ylen;
+    int gaplen,p;
+    char *buf=new char [MAX(xlen,ylen)+1];
+
+    while(i+j)
+    {
+        gaplen=0;
+        if (P[i][j]>=4)
+        {
+            gaplen=JumpH[i][j];
+            j-=gaplen;
+            strncpy(buf,seqy+j,gaplen);
+            buf[gaplen]=0;
+            seqyA=buf+seqyA;
+
+            for (p=0;p<gaplen;p++) buf[p]='-';
+            seqxA=buf+seqxA;
+        }
+        else if (P[i][j] % 4 >= 2)
+        {
+            gaplen=JumpV[i][j];
+            i-=gaplen;
+            strncpy(buf,seqx+i,gaplen);
+            buf[gaplen]=0;
+            seqxA=buf+seqxA;
+
+            for (p=0;p<gaplen;p++) buf[p]='-';
+            seqyA=buf+seqyA;
+        }
+        else
+        {
+            if (i==0 && j!=0) // only in glocal alignment
+            {
+                strncpy(buf,seqy,j);
+                buf[j]=0;
+                seqyA=buf+seqyA;
+                for (p=0;p<j;p++) buf[p]='-';
+                seqxA=buf+seqxA;
+                break;
+            }
+            if (i!=0 && j==0) // only in glocal alignment
+            {
+                strncpy(buf,seqx,i);
+                buf[i]=0;
+                seqxA=buf+seqxA;
+                for (p=0;p<i;p++) buf[p]='-';
+                seqyA=buf+seqyA;
+                break;
+            }
+            i--;
+            j--;
+            seqxA=seqx[i]+seqxA;
+            seqyA=seqy[j]+seqyA;
+        }
+    }   
+    delete [] buf;
+}
+
+
+/* trace back Smith-Waterman dynamic programming path to diciper 
+ * pairwise local alignment */
+void trace_back_sw(const char *seqx, const char *seqy,
+    int **JumpH, int **JumpV, int **P,
+    string& seqxA, string& seqyA, const int xlen, const int ylen)
+{
+    int i=xlen;
+    int j=ylen;
+    int gaplen,p;
+    char *buf=new char [xlen+ylen+1];
+
+    // find the first non-zero cell in P
+    bool found_start_cell=false;
+    for (i=xlen;i>=0;i--)
+    {
+        for (j=ylen;j>=0;j--)
+        {
+            if (P[i][j]!=0)
+            {
+                found_start_cell=true;
+                break;
+            }
+        }
+        if (found_start_cell) break;
+    }
+
+    /* copy C terminal sequence */
+    for (p=0;p<ylen-j;p++) buf[p]='-';
+    buf[ylen-j]=0;
+    seqxA=buf;
+    strncpy(buf,seqx+i,xlen-i);
+    buf[xlen-i]=0;
+    seqxA+=buf;
+
+    strncpy(buf,seqy+j,ylen-j);
+    buf[ylen-j]=0;
+    seqyA+=buf;
+    for (p=0;p<xlen-i;p++) buf[p]='-';
+    buf[xlen-i]=0;
+    seqyA+=buf;
+
+    if (i<0||j<0)
+    {
+        delete [] buf;
+        return;
+    }
+
+    /* traceback aligned sequences */
+    while(P[i][j]!=0)
+    {
+        gaplen=0;
+        if (P[i][j]>=4)
+        {
+            gaplen=JumpH[i][j];
+            j-=gaplen;
+            strncpy(buf,seqy+j,gaplen);
+            buf[gaplen]=0;
+            seqyA=buf+seqyA;
+
+            for (p=0;p<gaplen;p++) buf[p]='-';
+            seqxA=buf+seqxA;
+        }
+        else if (P[i][j] % 4 >= 2)
+        {
+            gaplen=JumpV[i][j];
+            i-=gaplen;
+            strncpy(buf,seqx+i,gaplen);
+            buf[gaplen]=0;
+            seqxA=buf+seqxA;
+
+            for (p=0;p<gaplen;p++) buf[p]='-';
+            seqyA=buf+seqyA;
+        }
+        else
+        {
+            i--;
+            j--;
+            seqxA=seqx[i]+seqxA;
+            seqyA=seqy[j]+seqyA;
+        }
+    }
+    /* copy N terminal sequence */
+    for (p=0;p<j;p++) buf[p]='-';
+    strncpy(buf+j,seqx,i);
+    buf[i+j]=0;
+    seqxA=buf+seqxA;
+
+    strncpy(buf,seqy,j);
+    for (p=j;p<j+i;p++) buf[p]='-';
+    buf[i+j]=0;
+    seqyA=buf+seqyA;
+    delete [] buf;
+}
+
+/* entry function for NWalign */
+int NWalign(const char *seqx, const char *seqy, const int xlen, const int ylen,
+    string & seqxA,string & seqyA, const int mol_type, const int glocal=0)
+{
+    int **JumpH;
+    int **JumpV;
+    int **P;
+    int **S;
+    NewArray(&JumpH,xlen+1,ylen+1);
+    NewArray(&JumpV,xlen+1,ylen+1);
+    NewArray(&P,xlen+1,ylen+1);
+    NewArray(&S,xlen+1,ylen+1);
+    
+    int aln_score;
+    int gapopen=gapopen_blosum62;
+    int gapext =gapext_blosum62;
+    int i,j;
+    if (mol_type>0) // RNA or DNA
+    {
+        gapopen=gapopen_blastn;
+        gapext =gapext_blastn;
+    }
+
+    for (i=0;i<xlen+1;i++)
+    {
+        for (j=0;j<ylen+1;j++)
+        {
+            if (i*j==0) S[i][j]=0;
+            else S[i][j]=BLOSUM[seqx[i-1]][seqy[j-1]];
+        }
+    }
+
+    aln_score=calculate_score_gotoh(xlen, ylen, S, JumpH, JumpV, P,
+        gapopen, gapext, glocal);
+
+    if (glocal<3) trace_back_gotoh(seqx,seqy,JumpH,JumpV,P,seqxA,seqyA,xlen,ylen);
+    else trace_back_sw(seqx,seqy,JumpH,JumpV,P,seqxA,seqyA,xlen,ylen);
+    
+    DeleteArray(&JumpH, xlen+1);
+    DeleteArray(&JumpV, xlen+1);
+    DeleteArray(&P, xlen+1);
+    DeleteArray(&S, xlen+1);
+    return aln_score; // aligment score
+}
+
+double get_seqID(const string& seqxA, const string& seqyA,
+    string &seqM,double &Liden,int &L_ali)
+{
+    Liden=0;
+    L_ali=0;
+    for (int i=0;i<seqxA.size();i++)
+    {
+        if (seqxA[i]==seqyA[i] && seqxA[i]!='-')
+        {
+            Liden++;
+            seqM+=':';
+        }
+        else seqM+=' ';
+        L_ali+=(seqxA[i]!='-' && seqyA[i]!='-');
+    }
+    return 1.*Liden/L_ali;
+}
+
+
+void output_NWalign_results(
+    const string xname, const string yname,
+    const char *chainID1, const char *chainID2,
+    const int xlen, const int ylen, const char *seqM, 
+    const char *seqxA, const char *seqyA, const double Liden,
+    const int L_ali, const int aln_score, const int outfmt_opt)
+{
+    if (outfmt_opt<=0)
+    {
+        printf("\nName of Chain_1: %s%s\n", xname.c_str(), chainID1);
+        printf("Name of Chain_2: %s%s\n", yname.c_str(), chainID2);
+        printf("Length of Chain_1: %d residues\n", xlen);
+        printf("Length of Chain_2: %d residues\n\n", ylen);
+
+        printf("Aligned length= %d, Alignment score= %d, Seq_ID=n_identical/n_aligned= %4.3f\n",
+            L_ali, aln_score, Liden/L_ali);
+        printf("Seq_ID= %6.5f (if normalized by length of Chain_1\n", Liden/xlen);
+        printf("Seq_ID= %6.5f (if normalized by length of Chain_2\n", Liden/ylen);
+        printf("(You should use Seq_ID normalized by length of the reference structure)\n");
+    
+        //output alignment
+        printf("\n(\":\" denotes pairs with identical residue type)\n");
+        printf("%s\n", seqxA);
+        printf("%s\n", seqM);
+        printf("%s\n", seqyA);
+    }
+    else if (outfmt_opt==1)
+    {
+        printf(">%s%s\tL=%d\tseqID=%.3f\n",
+            xname.c_str(), chainID1, xlen, Liden/xlen);
+        printf("%s\n", seqxA);
+        printf(">%s%s\tL=%d\tseqID=%.3f\n",
+            yname.c_str(), chainID2, ylen, Liden/ylen);
+        printf("%s\n", seqyA);
+        printf("# Lali=%d\tseqID_ali=%.3f\n", L_ali, Liden/L_ali);
+        printf("$$$$\n");
+    }
+    else if (outfmt_opt==2)
+    {
+        printf("%s%s\t%s%s\t%4.3f\t%4.3f\t%4.3f\t%d\t%d\t%d",
+            xname.c_str(), chainID1, yname.c_str(), chainID2, 
+            Liden/xlen, Liden/ylen, Liden/L_ali,
+            xlen, ylen, L_ali);
+    }
+    cout << endl;
+}
+
+#endif
diff --git a/modules/bindings/src/tmalign/OST_INFO b/modules/bindings/src/tmalign/OST_INFO
new file mode 100644
index 000000000..f0a862227
--- /dev/null
+++ b/modules/bindings/src/tmalign/OST_INFO
@@ -0,0 +1,7 @@
+Source code has been cloned February 17 2019 from:
+
+https://github.com/kad-ecoli/TMalign
+
+last commit:
+2ea5b61c6b0c8ded05ff0aea09546d45902b3741
+
diff --git a/modules/bindings/src/tmalign/PDB1.pdb b/modules/bindings/src/tmalign/PDB1.pdb
new file mode 100644
index 000000000..2f1294039
--- /dev/null
+++ b/modules/bindings/src/tmalign/PDB1.pdb
@@ -0,0 +1,2561 @@
+ATOM      1  N   CYS     1     -22.970   3.802 -61.984  1.00                 N  
+ATOM      2  CA  CYS     1     -21.660   3.468 -62.582  1.00                 C  
+ATOM      3  C   CYS     1     -21.538   2.021 -62.876  1.00                 C  
+ATOM      4  O   CYS     1     -22.461   1.246 -62.650  1.00                 O  
+ATOM      5 1H   CYS     1     -23.160   4.653 -61.762  1.00                 H  
+ATOM      6 2H   CYS     1     -23.219   3.425 -61.205  1.00                 H  
+ATOM      7 3H   CYS     1     -23.728   3.633 -62.438  1.00                 H  
+ATOM      8  CB  CYS     1     -20.522   3.902 -61.656  1.00                 C  
+ATOM      9  SG  CYS     1     -20.414   5.687 -61.391  1.00                 S  
+ATOM     10  N   GLN     2     -20.417   1.652 -63.507  1.00                 N  
+ATOM     11  CA  GLN     2     -20.064   0.288 -63.738  1.00                 C  
+ATOM     12  C   GLN     2     -19.628  -0.215 -62.397  1.00                 C  
+ATOM     13  O   GLN     2     -19.747  -1.400 -62.108  1.00                 O  
+ATOM     14  H   GLN     2     -19.874   2.312 -63.791  1.00                 H  
+ATOM     15  CB  GLN     2     -18.979   0.190 -64.812  1.00                 C  
+ATOM     16  CD  GLN     2     -18.338   0.504 -67.235  1.00                 C  
+ATOM     17  CG  GLN     2     -19.449   0.571 -66.206  1.00                 C  
+ATOM     18  OE1 GLN     2     -17.161   0.643 -66.901  1.00                 O  
+ATOM     19 1HE2 GLN     2     -18.088   0.240 -69.142  1.00                 H  
+ATOM     20 2HE2 GLN     2     -19.580   0.192 -68.694  1.00                 H  
+ATOM     21  NE2 GLN     2     -18.708   0.289 -68.492  1.00                 N  
+ATOM     22  N   ASP     3     -19.085   0.688 -61.546  1.00                 N  
+ATOM     23  CA  ASP     3     -18.539   0.319 -60.263  1.00                 C  
+ATOM     24  C   ASP     3     -19.594  -0.348 -59.449  1.00                 C  
+ATOM     25  O   ASP     3     -19.368  -1.438 -58.927  1.00                 O  
+ATOM     26  H   ASP     3     -19.073   1.549 -61.809  1.00                 H  
+ATOM     27  CB  ASP     3     -17.987   1.550 -59.542  1.00                 C  
+ATOM     28  CG  ASP     3     -16.711   2.071 -60.173  1.00                 C  
+ATOM     29  OD1 ASP     3     -16.109   1.340 -60.987  1.00                 O  
+ATOM     30  OD2 ASP     3     -16.312   3.211 -59.853  1.00                 O  
+ATOM     31  N   VAL     4     -20.786   0.263 -59.331  1.00                 N  
+ATOM     32  CA  VAL     4     -21.799  -0.369 -58.541  1.00                 C  
+ATOM     33  C   VAL     4     -22.183  -1.670 -59.168  1.00                 C  
+ATOM     34  O   VAL     4     -22.406  -2.653 -58.467  1.00                 O  
+ATOM     35  H   VAL     4     -20.955   1.050 -59.734  1.00                 H  
+ATOM     36  CB  VAL     4     -23.032   0.538 -58.374  1.00                 C  
+ATOM     37  CG1 VAL     4     -24.171  -0.227 -57.718  1.00                 C  
+ATOM     38  CG2 VAL     4     -22.679   1.774 -57.562  1.00                 C  
+ATOM     39  N   VAL     5     -22.294  -1.719 -60.506  1.00                 N  
+ATOM     40  CA  VAL     5     -22.743  -2.927 -61.137  1.00                 C  
+ATOM     41  C   VAL     5     -21.743  -4.040 -61.003  1.00                 C  
+ATOM     42  O   VAL     5     -22.120  -5.174 -60.709  1.00                 O  
+ATOM     43  H   VAL     5     -22.089  -1.000 -61.006  1.00                 H  
+ATOM     44  CB  VAL     5     -23.055  -2.703 -62.628  1.00                 C  
+ATOM     45  CG1 VAL     5     -23.356  -4.026 -63.314  1.00                 C  
+ATOM     46  CG2 VAL     5     -24.219  -1.737 -62.790  1.00                 C  
+ATOM     47  N   GLN     6     -20.441  -3.745 -61.215  1.00                 N  
+ATOM     48  CA  GLN     6     -19.415  -4.746 -61.160  1.00                 C  
+ATOM     49  C   GLN     6     -19.464  -5.244 -59.783  1.00                 C  
+ATOM     50  O   GLN     6     -19.266  -6.429 -59.517  1.00                 O  
+ATOM     51  H   GLN     6     -20.226  -2.890 -61.395  1.00                 H  
+ATOM     52  CB  GLN     6     -18.061  -4.147 -61.547  1.00                 C  
+ATOM     53  CD  GLN     6     -16.633  -3.087 -63.340  1.00                 C  
+ATOM     54  CG  GLN     6     -17.941  -3.783 -63.017  1.00                 C  
+ATOM     55  OE1 GLN     6     -16.054  -2.408 -62.492  1.00                 O  
+ATOM     56 1HE2 GLN     6     -15.390  -2.865 -64.814  1.00                 H  
+ATOM     57 2HE2 GLN     6     -16.617  -3.761 -65.161  1.00                 H  
+ATOM     58  NE2 GLN     6     -16.163  -3.256 -64.571  1.00                 N  
+ATOM     59  N   ASP     7     -19.750  -4.292 -58.890  1.00                 N  
+ATOM     60  CA  ASP     7     -20.010  -4.542 -57.531  1.00                 C  
+ATOM     61  C   ASP     7     -18.829  -4.193 -56.646  1.00                 C  
+ATOM     62  O   ASP     7     -17.736  -3.883 -57.113  1.00                 O  
+ATOM     63  H   ASP     7     -19.771  -3.449 -59.204  1.00                 H  
+ATOM     64  CB  ASP     7     -20.389  -6.009 -57.319  1.00                 C  
+ATOM     65  CG  ASP     7     -21.733  -6.357 -57.928  1.00                 C  
+ATOM     66  OD1 ASP     7     -22.669  -5.539 -57.810  1.00                 O  
+ATOM     67  OD2 ASP     7     -21.850  -7.448 -58.525  1.00                 O  
+ATOM     68  N   VAL     8     -19.080  -4.262 -55.319  1.00                 N  
+ATOM     69  CA  VAL     8     -18.387  -3.842 -54.118  1.00                 C  
+ATOM     70  C   VAL     8     -17.154  -4.623 -53.696  1.00                 C  
+ATOM     71  O   VAL     8     -17.088  -4.949 -52.518  1.00                 O  
+ATOM     72  H   VAL     8     -19.876  -4.677 -55.257  1.00                 H  
+ATOM     73  CB  VAL     8     -19.324  -3.843 -52.896  1.00                 C  
+ATOM     74  CG1 VAL     8     -18.554  -3.488 -51.634  1.00                 C  
+ATOM     75  CG2 VAL     8     -20.479  -2.877 -53.109  1.00                 C  
+ATOM     76  N   PRO     9     -16.160  -4.936 -54.493  1.00                 N  
+ATOM     77  CA  PRO     9     -15.166  -5.962 -54.200  1.00                 C  
+ATOM     78  C   PRO     9     -14.862  -6.454 -52.828  1.00                 C  
+ATOM     79  O   PRO     9     -15.063  -7.649 -52.618  1.00                 O  
+ATOM     80  CB  PRO     9     -13.857  -5.370 -54.725  1.00                 C  
+ATOM     81  CD  PRO     9     -15.528  -3.678 -55.003  1.00                 C  
+ATOM     82  CG  PRO     9     -14.074  -3.894 -54.689  1.00                 C  
+ATOM     83  N   ASN    10     -14.394  -5.648 -51.873  1.00                 N  
+ATOM     84  CA  ASN    10     -14.250  -6.335 -50.627  1.00                 C  
+ATOM     85  C   ASN    10     -15.583  -6.198 -49.953  1.00                 C  
+ATOM     86  O   ASN    10     -16.108  -5.092 -49.843  1.00                 O  
+ATOM     87  H   ASN    10     -14.176  -4.777 -51.934  1.00                 H  
+ATOM     88  CB  ASN    10     -13.086  -5.750 -49.824  1.00                 C  
+ATOM     89  CG  ASN    10     -11.743  -5.995 -50.482  1.00                 C  
+ATOM     90  OD1 ASN    10     -11.440  -7.112 -50.900  1.00                 O  
+ATOM     91 1HD2 ASN    10     -10.123  -5.038 -50.959  1.00                 H  
+ATOM     92 2HD2 ASN    10     -11.192  -4.147 -50.259  1.00                 H  
+ATOM     93  ND2 ASN    10     -10.932  -4.947 -50.577  1.00                 N  
+ATOM     94  N   VAL    11     -16.185  -7.318 -49.492  1.00                 N  
+ATOM     95  CA  VAL    11     -17.507  -7.196 -48.941  1.00                 C  
+ATOM     96  C   VAL    11     -17.525  -7.669 -47.531  1.00                 C  
+ATOM     97  O   VAL    11     -16.831  -8.613 -47.157  1.00                 O  
+ATOM     98  H   VAL    11     -15.783  -8.122 -49.523  1.00                 H  
+ATOM     99  CB  VAL    11     -18.541  -7.974 -49.776  1.00                 C  
+ATOM    100  CG1 VAL    11     -18.633  -7.398 -51.181  1.00                 C  
+ATOM    101  CG2 VAL    11     -18.182  -9.452 -49.825  1.00                 C  
+ATOM    102  N   ASP    12     -18.321  -6.959 -46.711  1.00                 N  
+ATOM    103  CA  ASP    12     -18.588  -7.290 -45.350  1.00                 C  
+ATOM    104  C   ASP    12     -20.012  -6.836 -45.140  1.00                 C  
+ATOM    105  O   ASP    12     -20.246  -5.712 -44.695  1.00                 O  
+ATOM    106  H   ASP    12     -18.697  -6.228 -47.078  1.00                 H  
+ATOM    107  CB  ASP    12     -17.578  -6.608 -44.425  1.00                 C  
+ATOM    108  CG  ASP    12     -17.739  -7.027 -42.977  1.00                 C  
+ATOM    109  OD1 ASP    12     -18.685  -7.787 -42.680  1.00                 O  
+ATOM    110  OD2 ASP    12     -16.920  -6.595 -42.139  1.00                 O  
+ATOM    111  N   VAL    13     -20.999  -7.710 -45.452  1.00                 N  
+ATOM    112  CA  VAL    13     -22.409  -7.392 -45.407  1.00                 C  
+ATOM    113  C   VAL    13     -22.956  -8.071 -44.205  1.00                 C  
+ATOM    114  O   VAL    13     -22.367  -9.015 -43.684  1.00                 O  
+ATOM    115  H   VAL    13     -20.731  -8.533 -45.699  1.00                 H  
+ATOM    116  CB  VAL    13     -23.127  -7.824 -46.699  1.00                 C  
+ATOM    117  CG1 VAL    13     -22.542  -7.098 -47.901  1.00                 C  
+ATOM    118  CG2 VAL    13     -23.030  -9.331 -46.884  1.00                 C  
+ATOM    119  N   GLN    14     -24.110  -7.590 -43.725  1.00                 N  
+ATOM    120  CA  GLN    14     -24.684  -8.155 -42.554  1.00                 C  
+ATOM    121  C   GLN    14     -24.972  -9.567 -42.857  1.00                 C  
+ATOM    122  O   GLN    14     -24.978 -10.454 -42.005  1.00                 O  
+ATOM    123  H   GLN    14     -24.522  -6.909 -44.144  1.00                 H  
+ATOM    124  CB  GLN    14     -25.939  -7.381 -42.145  1.00                 C  
+ATOM    125  CD  GLN    14     -25.630  -7.597 -39.648  1.00                 C  
+ATOM    126  CG  GLN    14     -26.548  -7.837 -40.830  1.00                 C  
+ATOM    127  OE1 GLN    14     -25.108  -6.496 -39.468  1.00                 O  
+ATOM    128 1HE2 GLN    14     -24.892  -8.540 -38.120  1.00                 H  
+ATOM    129 2HE2 GLN    14     -25.830  -9.417 -39.004  1.00                 H  
+ATOM    130  NE2 GLN    14     -25.429  -8.629 -38.837  1.00                 N  
+ATOM    131  N   MET    15     -25.267  -9.805 -44.123  1.00                 N  
+ATOM    132  CA  MET    15     -25.525 -11.137 -44.474  1.00                 C  
+ATOM    133  C   MET    15     -24.315 -12.022 -44.385  1.00                 C  
+ATOM    134  O   MET    15     -24.459 -13.211 -44.110  1.00                 O  
+ATOM    135  H   MET    15     -25.306  -9.159 -44.748  1.00                 H  
+ATOM    136  CB  MET    15     -26.092 -11.217 -45.893  1.00                 C  
+ATOM    137  SD  MET    15     -28.224 -10.998 -47.649  1.00                 S  
+ATOM    138  CE  MET    15     -27.332  -9.816 -48.657  1.00                 C  
+ATOM    139  CG  MET    15     -27.505 -10.673 -46.028  1.00                 C  
+ATOM    140  N   LEU    16     -23.105 -11.490 -44.652  1.00                 N  
+ATOM    141  CA  LEU    16     -21.905 -12.290 -44.660  1.00                 C  
+ATOM    142  C   LEU    16     -21.776 -12.867 -43.307  1.00                 C  
+ATOM    143  O   LEU    16     -21.472 -14.047 -43.141  1.00                 O  
+ATOM    144  H   LEU    16     -23.059 -10.609 -44.829  1.00                 H  
+ATOM    145  CB  LEU    16     -20.696 -11.438 -45.051  1.00                 C  
+ATOM    146  CG  LEU    16     -19.350 -12.162 -45.118  1.00                 C  
+ATOM    147  CD1 LEU    16     -19.390 -13.279 -46.150  1.00                 C  
+ATOM    148  CD2 LEU    16     -18.229 -11.185 -45.440  1.00                 C  
+ATOM    149  N   GLU    17     -22.035 -12.033 -42.297  1.00                 N  
+ATOM    150  CA  GLU    17     -21.908 -12.491 -40.961  1.00                 C  
+ATOM    151  C   GLU    17     -22.934 -13.560 -40.719  1.00                 C  
+ATOM    152  O   GLU    17     -22.645 -14.561 -40.069  1.00                 O  
+ATOM    153  H   GLU    17     -22.289 -11.185 -42.460  1.00                 H  
+ATOM    154  CB  GLU    17     -22.071 -11.329 -39.979  1.00                 C  
+ATOM    155  CD  GLU    17     -21.146  -9.166 -39.059  1.00                 C  
+ATOM    156  CG  GLU    17     -20.914 -10.343 -39.987  1.00                 C  
+ATOM    157  OE1 GLU    17     -22.279  -9.021 -38.556  1.00                 O  
+ATOM    158  OE2 GLU    17     -20.193  -8.390 -38.835  1.00                 O  
+ATOM    159  N   LEU    18     -24.162 -13.385 -41.251  1.00                 N  
+ATOM    160  CA  LEU    18     -25.225 -14.313 -40.992  1.00                 C  
+ATOM    161  C   LEU    18     -24.842 -15.639 -41.590  1.00                 C  
+ATOM    162  O   LEU    18     -25.096 -16.691 -41.008  1.00                 O  
+ATOM    163  H   LEU    18     -24.308 -12.669 -41.777  1.00                 H  
+ATOM    164  CB  LEU    18     -26.543 -13.792 -41.568  1.00                 C  
+ATOM    165  CG  LEU    18     -27.147 -12.567 -40.878  1.00                 C  
+ATOM    166  CD1 LEU    18     -28.347 -12.049 -41.656  1.00                 C  
+ATOM    167  CD2 LEU    18     -27.546 -12.897 -39.448  1.00                 C  
+ATOM    168  N   TYR    19     -24.199 -15.608 -42.773  1.00                 N  
+ATOM    169  CA  TYR    19     -23.783 -16.764 -43.515  1.00                 C  
+ATOM    170  C   TYR    19     -22.810 -17.518 -42.668  1.00                 C  
+ATOM    171  O   TYR    19     -22.804 -18.742 -42.687  1.00                 O  
+ATOM    172  H   TYR    19     -24.033 -14.784 -43.094  1.00                 H  
+ATOM    173  CB  TYR    19     -23.173 -16.349 -44.856  1.00                 C  
+ATOM    174  CG  TYR    19     -22.712 -17.512 -45.705  1.00                 C  
+ATOM    175  HH  TYR    19     -20.709 -20.964 -47.791  1.00                 H  
+ATOM    176  OH  TYR    19     -21.456 -20.710 -48.048  1.00                 O  
+ATOM    177  CZ  TYR    19     -21.870 -19.652 -47.272  1.00                 C  
+ATOM    178  CD1 TYR    19     -23.505 -17.999 -46.735  1.00                 C  
+ATOM    179  CE1 TYR    19     -23.091 -19.062 -47.516  1.00                 C  
+ATOM    180  CD2 TYR    19     -21.484 -18.119 -45.472  1.00                 C  
+ATOM    181  CE2 TYR    19     -21.054 -19.183 -46.243  1.00                 C  
+ATOM    182  N   ASP    20     -21.910 -16.824 -41.948  1.00                 N  
+ATOM    183  CA  ASP    20     -21.012 -17.521 -41.067  1.00                 C  
+ATOM    184  C   ASP    20     -21.796 -18.091 -39.924  1.00                 C  
+ATOM    185  O   ASP    20     -21.536 -19.205 -39.476  1.00                 O  
+ATOM    186  H   ASP    20     -21.868 -15.928 -42.016  1.00                 H  
+ATOM    187  CB  ASP    20     -19.912 -16.581 -40.570  1.00                 C  
+ATOM    188  CG  ASP    20     -18.917 -16.223 -41.657  1.00                 C  
+ATOM    189  OD1 ASP    20     -18.913 -16.901 -42.705  1.00                 O  
+ATOM    190  OD2 ASP    20     -18.142 -15.263 -41.460  1.00                 O  
+ATOM    191  N   ARG    21     -22.788 -17.330 -39.423  1.00                 N  
+ATOM    192  CA  ARG    21     -23.560 -17.737 -38.284  1.00                 C  
+ATOM    193  C   ARG    21     -24.335 -18.997 -38.589  1.00                 C  
+ATOM    194  O   ARG    21     -24.325 -19.916 -37.773  1.00                 O  
+ATOM    195  H   ARG    21     -22.961 -16.544 -39.826  1.00                 H  
+ATOM    196  CB  ARG    21     -24.511 -16.618 -37.854  1.00                 C  
+ATOM    197  CD  ARG    21     -26.346 -15.846 -36.326  1.00                 C  
+ATOM    198  HE  ARG    21     -27.209 -15.018 -37.936  1.00                 H  
+ATOM    199  NE  ARG    21     -27.324 -15.680 -37.398  1.00                 N  
+ATOM    200  CG  ARG    21     -25.349 -16.952 -36.631  1.00                 C  
+ATOM    201  CZ  ARG    21     -28.367 -16.482 -37.589  1.00                 C  
+ATOM    202 1HH1 ARG    21     -29.073 -15.586 -39.118  1.00                 H  
+ATOM    203 2HH1 ARG    21     -29.880 -16.771 -38.714  1.00                 H  
+ATOM    204  NH1 ARG    21     -29.205 -16.253 -38.591  1.00                 N  
+ATOM    205 1HH2 ARG    21     -28.027 -17.658 -36.126  1.00                 H  
+ATOM    206 2HH2 ARG    21     -29.245 -18.028 -36.900  1.00                 H  
+ATOM    207  NH2 ARG    21     -28.571 -17.510 -36.777  1.00                 N  
+ATOM    208  N   MET    22     -25.026 -19.073 -39.757  1.00                 N  
+ATOM    209  CA  MET    22     -25.780 -20.245 -40.167  1.00                 C  
+ATOM    210  C   MET    22     -24.782 -21.090 -40.862  1.00                 C  
+ATOM    211  O   MET    22     -23.755 -20.601 -41.317  1.00                 O  
+ATOM    212  H   MET    22     -25.000 -18.346 -40.287  1.00                 H  
+ATOM    213  CB  MET    22     -26.964 -19.839 -41.047  1.00                 C  
+ATOM    214  SD  MET    22     -28.721 -19.622 -38.915  1.00                 S  
+ATOM    215  CE  MET    22     -29.748 -20.880 -39.672  1.00                 C  
+ATOM    216  CG  MET    22     -27.945 -18.895 -40.371  1.00                 C  
+ATOM    217  N   SER    23     -25.010 -22.403 -40.892  1.00                 N  
+ATOM    218  CA  SER    23     -24.096 -23.255 -41.578  1.00                 C  
+ATOM    219  C   SER    23     -24.769 -23.583 -42.906  1.00                 C  
+ATOM    220  O   SER    23     -25.411 -22.724 -43.494  1.00                 O  
+ATOM    221  H   SER    23     -25.732 -22.753 -40.485  1.00                 H  
+ATOM    222  CB  SER    23     -23.787 -24.496 -40.738  1.00                 C  
+ATOM    223  HG  SER    23     -22.059 -24.796 -41.373  1.00                 H  
+ATOM    224  OG  SER    23     -22.746 -25.260 -41.321  1.00                 O  
+ATOM    225  N   PHE    24     -24.654 -24.821 -43.443  1.00                 N  
+ATOM    226  CA  PHE    24     -25.094 -25.118 -44.796  1.00                 C  
+ATOM    227  C   PHE    24     -26.538 -24.927 -45.163  1.00                 C  
+ATOM    228  O   PHE    24     -26.877 -23.986 -45.881  1.00                 O  
+ATOM    229  H   PHE    24     -24.292 -25.470 -42.935  1.00                 H  
+ATOM    230  CB  PHE    24     -24.771 -26.569 -45.158  1.00                 C  
+ATOM    231  CG  PHE    24     -25.219 -26.964 -46.536  1.00                 C  
+ATOM    232  CZ  PHE    24     -26.054 -27.698 -49.084  1.00                 C  
+ATOM    233  CD1 PHE    24     -24.482 -26.602 -47.650  1.00                 C  
+ATOM    234  CE1 PHE    24     -24.894 -26.965 -48.918  1.00                 C  
+ATOM    235  CD2 PHE    24     -26.378 -27.698 -46.719  1.00                 C  
+ATOM    236  CE2 PHE    24     -26.790 -28.061 -47.987  1.00                 C  
+ATOM    237  N   LYS    25     -27.437 -25.760 -44.615  1.00                 N  
+ATOM    238  CA  LYS    25     -28.737 -25.882 -45.221  1.00                 C  
+ATOM    239  C   LYS    25     -29.572 -24.662 -45.238  1.00                 C  
+ATOM    240  O   LYS    25     -30.048 -24.237 -46.290  1.00                 O  
+ATOM    241  H   LYS    25     -27.237 -26.238 -43.879  1.00                 H  
+ATOM    242  CB  LYS    25     -29.551 -26.976 -44.527  1.00                 C  
+ATOM    243  CD  LYS    25     -31.669 -28.317 -44.413  1.00                 C  
+ATOM    244  CE  LYS    25     -33.068 -28.505 -44.978  1.00                 C  
+ATOM    245  CG  LYS    25     -30.937 -27.186 -45.116  1.00                 C  
+ATOM    246 1HZ  LYS    25     -34.610 -29.692 -44.653  1.00                 H  
+ATOM    247 2HZ  LYS    25     -33.871 -29.429 -43.430  1.00                 H  
+ATOM    248 3HZ  LYS    25     -33.350 -30.372 -44.405  1.00                 H  
+ATOM    249  NZ  LYS    25     -33.798 -29.610 -44.298  1.00                 N  
+ATOM    250  N   ASP    26     -29.793 -24.057 -44.078  1.00                 N  
+ATOM    251  CA  ASP    26     -30.688 -22.954 -44.124  1.00                 C  
+ATOM    252  C   ASP    26     -30.019 -21.782 -44.747  1.00                 C  
+ATOM    253  O   ASP    26     -30.694 -20.888 -45.248  1.00                 O  
+ATOM    254  H   ASP    26     -29.419 -24.301 -43.296  1.00                 H  
+ATOM    255  CB  ASP    26     -31.185 -22.608 -42.719  1.00                 C  
+ATOM    256  CG  ASP    26     -32.131 -23.654 -42.162  1.00                 C  
+ATOM    257  OD1 ASP    26     -32.626 -24.487 -42.950  1.00                 O  
+ATOM    258  OD2 ASP    26     -32.378 -23.640 -40.938  1.00                 O  
+ATOM    259  N   ILE    27     -28.666 -21.743 -44.751  1.00                 N  
+ATOM    260  CA  ILE    27     -27.963 -20.653 -45.377  1.00                 C  
+ATOM    261  C   ILE    27     -28.396 -20.571 -46.747  1.00                 C  
+ATOM    262  O   ILE    27     -28.320 -19.530 -47.394  1.00                 O  
+ATOM    263  H   ILE    27     -28.205 -22.408 -44.357  1.00                 H  
+ATOM    264  CB  ILE    27     -26.437 -20.834 -45.277  1.00                 C  
+ATOM    265  CD1 ILE    27     -26.006 -18.384 -44.717  1.00                 C  
+ATOM    266  CG1 ILE    27     -25.720 -19.536 -45.655  1.00                 C  
+ATOM    267  CG2 ILE    27     -25.982 -22.004 -46.135  1.00                 C  
+ATOM    268  N   ASP    28     -28.792 -21.730 -47.224  1.00                 N  
+ATOM    269  CA  ASP    28     -29.379 -21.806 -48.471  1.00                 C  
+ATOM    270  C   ASP    28     -30.639 -20.962 -48.556  1.00                 C  
+ATOM    271  O   ASP    28     -30.554 -19.737 -48.553  1.00                 O  
+ATOM    272  H   ASP    28     -28.679 -22.476 -46.734  1.00                 H  
+ATOM    273  CB  ASP    28     -29.708 -23.259 -48.821  1.00                 C  
+ATOM    274  CG  ASP    28     -28.468 -24.089 -49.086  1.00                 C  
+ATOM    275  OD1 ASP    28     -27.384 -23.496 -49.272  1.00                 O  
+ATOM    276  OD2 ASP    28     -28.579 -25.333 -49.107  1.00                 O  
+ATOM    277  N   GLY    29     -31.844 -21.587 -48.674  1.00                 N  
+ATOM    278  CA  GLY    29     -33.084 -20.848 -48.833  1.00                 C  
+ATOM    279  C   GLY    29     -33.154 -19.837 -47.710  1.00                 C  
+ATOM    280  O   GLY    29     -33.103 -20.174 -46.533  1.00                 O  
+ATOM    281  H   GLY    29     -31.856 -22.487 -48.651  1.00                 H  
+ATOM    282  N   GLY    30     -33.311 -18.538 -48.020  1.00                 N  
+ATOM    283  CA  GLY    30     -33.300 -17.602 -46.925  1.00                 C  
+ATOM    284  C   GLY    30     -31.918 -17.062 -46.795  1.00                 C  
+ATOM    285  O   GLY    30     -31.094 -17.182 -47.698  1.00                 O  
+ATOM    286  H   GLY    30     -33.419 -18.243 -48.863  1.00                 H  
+ATOM    287  N   VAL    31     -31.672 -16.421 -45.640  1.00                 N  
+ATOM    288  CA  VAL    31     -30.475 -15.733 -45.259  1.00                 C  
+ATOM    289  C   VAL    31     -30.274 -14.570 -46.176  1.00                 C  
+ATOM    290  O   VAL    31     -29.253 -13.885 -46.136  1.00                 O  
+ATOM    291  H   VAL    31     -32.370 -16.456 -45.073  1.00                 H  
+ATOM    292  CB  VAL    31     -29.254 -16.671 -45.281  1.00                 C  
+ATOM    293  CG1 VAL    31     -27.976 -15.888 -45.018  1.00                 C  
+ATOM    294  CG2 VAL    31     -29.420 -17.785 -44.259  1.00                 C  
+ATOM    295  N   TRP    32     -31.300 -14.322 -47.006  1.00                 N  
+ATOM    296  CA  TRP    32     -31.473 -13.185 -47.859  1.00                 C  
+ATOM    297  C   TRP    32     -32.817 -12.706 -47.437  1.00                 C  
+ATOM    298  O   TRP    32     -33.736 -13.493 -47.231  1.00                 O  
+ATOM    299  H   TRP    32     -31.923 -14.971 -46.989  1.00                 H  
+ATOM    300  CB  TRP    32     -31.361 -13.596 -49.329  1.00                 C  
+ATOM    301 1HB  TRP    32     -31.243 -12.772 -49.945  1.00                 H  
+ATOM    302 2HB  TRP    32     -31.843 -14.434 -49.584  1.00                 H  
+ATOM    303  CG  TRP    32     -30.004 -14.106 -49.707  1.00                 C  
+ATOM    304  CD1 TRP    32     -29.558 -15.393 -49.617  1.00                 C  
+ATOM    305  HE1 TRP    32     -27.749 -16.262 -50.085  1.00                 H  
+ATOM    306  NE1 TRP    32     -28.259 -15.476 -50.057  1.00                 N  
+ATOM    307  CD2 TRP    32     -28.916 -13.339 -50.236  1.00                 C  
+ATOM    308  CE2 TRP    32     -27.844 -14.226 -50.443  1.00                 C  
+ATOM    309  CH2 TRP    32     -26.476 -12.482 -51.257  1.00                 C  
+ATOM    310  CZ2 TRP    32     -26.616 -13.807 -50.954  1.00                 C  
+ATOM    311  CE3 TRP    32     -28.744 -11.989 -50.556  1.00                 C  
+ATOM    312  CZ3 TRP    32     -27.525 -11.578 -51.062  1.00                 C  
+ATOM    313  N   LYS    33     -32.979 -11.399 -47.271  1.00                 N  
+ATOM    314  CA  LYS    33     -34.233 -10.893 -46.808  1.00                 C  
+ATOM    315  C   LYS    33     -35.327 -10.967 -47.807  1.00                 C  
+ATOM    316  O   LYS    33     -36.494 -11.138 -47.461  1.00                 O  
+ATOM    317  H   LYS    33     -32.303 -10.832 -47.449  1.00                 H  
+ATOM    318  CB  LYS    33     -34.090  -9.438 -46.357  1.00                 C  
+ATOM    319  CD  LYS    33     -33.184  -7.794 -44.691  1.00                 C  
+ATOM    320  CE  LYS    33     -32.394  -7.618 -43.405  1.00                 C  
+ATOM    321  CG  LYS    33     -33.281  -9.260 -45.083  1.00                 C  
+ATOM    322 1HZ  LYS    33     -31.781  -6.116 -42.280  1.00                 H  
+ATOM    323 2HZ  LYS    33     -33.053  -5.822 -42.919  1.00                 H  
+ATOM    324 3HZ  LYS    33     -31.820  -5.751 -43.686  1.00                 H  
+ATOM    325  NZ  LYS    33     -32.247  -6.183 -43.035  1.00                 N  
+ATOM    326  N   GLN    34     -34.975 -10.829 -49.085  1.00                 N  
+ATOM    327  CA  GLN    34     -35.971 -10.686 -50.095  1.00                 C  
+ATOM    328  C   GLN    34     -36.693  -9.395 -49.989  1.00                 C  
+ATOM    329  O   GLN    34     -37.828  -9.264 -50.446  1.00                 O  
+ATOM    330  H   GLN    34     -34.103 -10.826 -49.309  1.00                 H  
+ATOM    331  CB  GLN    34     -36.974 -11.840 -50.026  1.00                 C  
+ATOM    332  CD  GLN    34     -35.838 -13.390 -51.666  1.00                 C  
+ATOM    333  CG  GLN    34     -36.358 -13.211 -50.253  1.00                 C  
+ATOM    334  OE1 GLN    34     -36.600 -13.326 -52.630  1.00                 O  
+ATOM    335 1HE2 GLN    34     -34.175 -13.728 -52.608  1.00                 H  
+ATOM    336 2HE2 GLN    34     -34.013 -13.654 -51.059  1.00                 H  
+ATOM    337  NE2 GLN    34     -34.536 -13.615 -51.791  1.00                 N  
+ATOM    338  N   GLY    35     -36.038  -8.374 -49.433  1.00                 N  
+ATOM    339  CA  GLY    35     -36.774  -7.166 -49.357  1.00                 C  
+ATOM    340  C   GLY    35     -36.502  -6.357 -50.562  1.00                 C  
+ATOM    341  O   GLY    35     -35.698  -6.696 -51.432  1.00                 O  
+ATOM    342  H   GLY    35     -35.195  -8.408 -49.119  1.00                 H  
+ATOM    343  N   TRP    36     -37.180  -5.210 -50.581  1.00                 N  
+ATOM    344  CA  TRP    36     -37.078  -4.260 -51.624  1.00                 C  
+ATOM    345  C   TRP    36     -35.704  -3.726 -51.627  1.00                 C  
+ATOM    346  O   TRP    36     -35.203  -3.210 -52.617  1.00                 O  
+ATOM    347  H   TRP    36     -37.725  -5.054 -49.882  1.00                 H  
+ATOM    348  CB  TRP    36     -38.115  -3.150 -51.441  1.00                 C  
+ATOM    349 1HB  TRP    36     -38.139  -2.515 -52.258  1.00                 H  
+ATOM    350 2HB  TRP    36     -38.291  -2.870 -50.497  1.00                 H  
+ATOM    351  CG  TRP    36     -39.521  -3.592 -51.709  1.00                 C  
+ATOM    352  CD1 TRP    36     -40.503  -3.804 -50.786  1.00                 C  
+ATOM    353  HE1 TRP    36     -42.466  -4.405 -50.973  1.00                 H  
+ATOM    354  NE1 TRP    36     -41.661  -4.203 -51.409  1.00                 N  
+ATOM    355  CD2 TRP    36     -40.102  -3.876 -52.988  1.00                 C  
+ATOM    356  CE2 TRP    36     -41.438  -4.254 -52.763  1.00                 C  
+ATOM    357  CH2 TRP    36     -41.805  -4.564 -55.075  1.00                 C  
+ATOM    358  CZ2 TRP    36     -42.301  -4.601 -53.801  1.00                 C  
+ATOM    359  CE3 TRP    36     -39.622  -3.847 -54.301  1.00                 C  
+ATOM    360  CZ3 TRP    36     -40.481  -4.191 -55.327  1.00                 C  
+ATOM    361  N   ASN    37     -35.065  -3.779 -50.472  1.00                 N  
+ATOM    362  CA  ASN    37     -33.720  -3.355 -50.366  1.00                 C  
+ATOM    363  C   ASN    37     -32.818  -4.404 -50.916  1.00                 C  
+ATOM    364  O   ASN    37     -31.608  -4.280 -50.821  1.00                 O  
+ATOM    365  H   ASN    37     -35.497  -4.090 -49.747  1.00                 H  
+ATOM    366  CB  ASN    37     -33.374  -3.028 -48.912  1.00                 C  
+ATOM    367  CG  ASN    37     -33.412  -4.250 -48.015  1.00                 C  
+ATOM    368  OD1 ASN    37     -33.599  -5.372 -48.486  1.00                 O  
+ATOM    369 1HD2 ASN    37     -33.249  -4.726 -46.140  1.00                 H  
+ATOM    370 2HD2 ASN    37     -33.102  -3.198 -46.413  1.00                 H  
+ATOM    371  ND2 ASN    37     -33.235  -4.035 -46.717  1.00                 N  
+ATOM    372  N   ILE    38     -33.331  -5.564 -51.358  1.00                 N  
+ATOM    373  CA  ILE    38     -32.390  -6.356 -52.094  1.00                 C  
+ATOM    374  C   ILE    38     -32.531  -5.817 -53.477  1.00                 C  
+ATOM    375  O   ILE    38     -31.905  -6.265 -54.429  1.00                 O  
+ATOM    376  H   ILE    38     -34.171  -5.863 -51.234  1.00                 H  
+ATOM    377  CB  ILE    38     -32.692  -7.860 -51.960  1.00                 C  
+ATOM    378  CD1 ILE    38     -34.309  -9.677 -52.722  1.00                 C  
+ATOM    379  CG1 ILE    38     -34.038  -8.193 -52.606  1.00                 C  
+ATOM    380  CG2 ILE    38     -32.642  -8.286 -50.501  1.00                 C  
+ATOM    381  N   LYS    39     -33.355  -4.763 -53.612  1.00                 N  
+ATOM    382  CA  LYS    39     -33.192  -3.946 -54.761  1.00                 C  
+ATOM    383  C   LYS    39     -31.886  -3.273 -54.476  1.00                 C  
+ATOM    384  O   LYS    39     -31.285  -2.719 -55.388  1.00                 O  
+ATOM    385  H   LYS    39     -33.992  -4.567 -53.007  1.00                 H  
+ATOM    386  CB  LYS    39     -34.383  -2.999 -54.919  1.00                 C  
+ATOM    387  CD  LYS    39     -36.823  -2.697 -55.426  1.00                 C  
+ATOM    388  CE  LYS    39     -38.119  -3.389 -55.814  1.00                 C  
+ATOM    389  CG  LYS    39     -35.685  -3.694 -55.283  1.00                 C  
+ATOM    390 1HZ  LYS    39     -39.989  -2.865 -56.162  1.00                 H  
+ATOM    391 2HZ  LYS    39     -39.058  -1.822 -56.559  1.00                 H  
+ATOM    392 3HZ  LYS    39     -39.375  -2.018 -55.154  1.00                 H  
+ATOM    393  NZ  LYS    39     -39.249  -2.427 -55.934  1.00                 N  
+ATOM    394  N   TYR    40     -31.440  -3.257 -53.187  1.00                 N  
+ATOM    395  CA  TYR    40     -30.062  -2.900 -52.908  1.00                 C  
+ATOM    396  C   TYR    40     -29.207  -3.935 -53.555  1.00                 C  
+ATOM    397  O   TYR    40     -28.119  -3.639 -54.034  1.00                 O  
+ATOM    398  H   TYR    40     -31.996  -3.467 -52.511  1.00                 H  
+ATOM    399  CB  TYR    40     -29.826  -2.812 -51.399  1.00                 C  
+ATOM    400  CG  TYR    40     -28.411  -2.439 -51.021  1.00                 C  
+ATOM    401  HH  TYR    40     -24.421  -0.578 -50.082  1.00                 H  
+ATOM    402  OH  TYR    40     -24.521  -1.396 -49.984  1.00                 O  
+ATOM    403  CZ  TYR    40     -25.808  -1.743 -50.327  1.00                 C  
+ATOM    404  CD1 TYR    40     -27.979  -1.121 -51.095  1.00                 C  
+ATOM    405  CE1 TYR    40     -26.687  -0.770 -50.752  1.00                 C  
+ATOM    406  CD2 TYR    40     -27.511  -3.405 -50.590  1.00                 C  
+ATOM    407  CE2 TYR    40     -26.215  -3.073 -50.243  1.00                 C  
+ATOM    408  N   ASP    41     -29.645  -5.219 -53.578  1.00                 N  
+ATOM    409  CA  ASP    41     -28.919  -6.203 -54.365  1.00                 C  
+ATOM    410  C   ASP    41     -29.543  -5.960 -55.728  1.00                 C  
+ATOM    411  O   ASP    41     -30.192  -4.949 -55.774  1.00                 O  
+ATOM    412  H   ASP    41     -30.376  -5.465 -53.114  1.00                 H  
+ATOM    413  CB  ASP    41     -29.115  -7.604 -53.783  1.00                 C  
+ATOM    414  CG  ASP    41     -28.035  -8.574 -54.223  1.00                 C  
+ATOM    415  OD1 ASP    41     -27.191  -8.184 -55.057  1.00                 O  
+ATOM    416  OD2 ASP    41     -28.033  -9.723 -53.733  1.00                 O  
+ATOM    417  N   PRO    42     -29.701  -6.546 -56.852  1.00                 N  
+ATOM    418  CA  PRO    42     -29.350  -5.818 -58.070  1.00                 C  
+ATOM    419  C   PRO    42     -28.901  -4.358 -58.085  1.00                 C  
+ATOM    420  O   PRO    42     -27.865  -4.201 -58.704  1.00                 O  
+ATOM    421  CB  PRO    42     -30.627  -5.867 -58.912  1.00                 C  
+ATOM    422  CD  PRO    42     -31.086  -7.192 -56.971  1.00                 C  
+ATOM    423  CG  PRO    42     -31.330  -7.100 -58.452  1.00                 C  
+ATOM    424  N   LEU    43     -29.555  -3.280 -57.568  1.00                 N  
+ATOM    425  CA  LEU    43     -28.912  -1.975 -57.513  1.00                 C  
+ATOM    426  C   LEU    43     -28.329  -1.702 -56.162  1.00                 C  
+ATOM    427  O   LEU    43     -29.038  -1.588 -55.164  1.00                 O  
+ATOM    428  H   LEU    43     -30.394  -3.382 -57.258  1.00                 H  
+ATOM    429  CB  LEU    43     -29.907  -0.872 -57.880  1.00                 C  
+ATOM    430  CG  LEU    43     -29.380   0.563 -57.818  1.00                 C  
+ATOM    431  CD1 LEU    43     -28.279   0.777 -58.846  1.00                 C  
+ATOM    432  CD2 LEU    43     -30.508   1.560 -58.036  1.00                 C  
+ATOM    433  N   LYS    44     -26.992  -1.521 -56.127  1.00                 N  
+ATOM    434  CA  LYS    44     -26.257  -1.310 -54.918  1.00                 C  
+ATOM    435  C   LYS    44     -25.951   0.140 -54.728  1.00                 C  
+ATOM    436  O   LYS    44     -26.027   0.952 -55.648  1.00                 O  
+ATOM    437  H   LYS    44     -26.562  -1.538 -56.918  1.00                 H  
+ATOM    438  CB  LYS    44     -24.963  -2.127 -54.928  1.00                 C  
+ATOM    439  CD  LYS    44     -23.856  -4.379 -54.916  1.00                 C  
+ATOM    440  CE  LYS    44     -24.072  -5.884 -54.908  1.00                 C  
+ATOM    441  CG  LYS    44     -25.179  -3.631 -54.939  1.00                 C  
+ATOM    442 1HZ  LYS    44     -22.947  -7.505 -54.930  1.00                 H  
+ATOM    443 2HZ  LYS    44     -22.300  -6.414 -54.221  1.00                 H  
+ATOM    444 3HZ  LYS    44     -22.334  -6.418 -55.674  1.00                 H  
+ATOM    445  NZ  LYS    44     -22.784  -6.630 -54.936  1.00                 N  
+ATOM    446  N   TYR    45     -25.600   0.473 -53.472  1.00                 N  
+ATOM    447  CA  TYR    45     -25.255   1.781 -52.993  1.00                 C  
+ATOM    448  C   TYR    45     -23.838   1.714 -52.493  1.00                 C  
+ATOM    449  O   TYR    45     -23.070   0.823 -52.850  1.00                 O  
+ATOM    450  H   TYR    45     -25.595  -0.229 -52.908  1.00                 H  
+ATOM    451  CB  TYR    45     -26.231   2.227 -51.902  1.00                 C  
+ATOM    452  CG  TYR    45     -27.656   2.384 -52.382  1.00                 C  
+ATOM    453  HH  TYR    45     -31.970   2.073 -53.628  1.00                 H  
+ATOM    454  OH  TYR    45     -31.578   2.801 -53.698  1.00                 O  
+ATOM    455  CZ  TYR    45     -30.280   2.665 -53.262  1.00                 C  
+ATOM    456  CD1 TYR    45     -28.533   1.307 -52.370  1.00                 C  
+ATOM    457  CE1 TYR    45     -29.837   1.442 -52.807  1.00                 C  
+ATOM    458  CD2 TYR    45     -28.119   3.609 -52.844  1.00                 C  
+ATOM    459  CE2 TYR    45     -29.420   3.762 -53.285  1.00                 C  
+ATOM    460  N   ASN    46     -23.439   2.725 -51.686  1.00                 N  
+ATOM    461  CA  ASN    46     -22.135   2.706 -51.076  1.00                 C  
+ATOM    462  C   ASN    46     -22.236   1.971 -49.782  1.00                 C  
+ATOM    463  O   ASN    46     -23.287   1.962 -49.141  1.00                 O  
+ATOM    464  H   ASN    46     -23.998   3.414 -51.532  1.00                 H  
+ATOM    465  CB  ASN    46     -21.609   4.131 -50.892  1.00                 C  
+ATOM    466  CG  ASN    46     -21.318   4.819 -52.210  1.00                 C  
+ATOM    467  OD1 ASN    46     -20.660   4.255 -53.084  1.00                 O  
+ATOM    468 1HD2 ASN    46     -21.664   6.498 -53.122  1.00                 H  
+ATOM    469 2HD2 ASN    46     -22.284   6.422 -51.694  1.00                 H  
+ATOM    470  ND2 ASN    46     -21.808   6.045 -52.358  1.00                 N  
+ATOM    471  N   ALA    47     -21.138   1.279 -49.412  1.00                 N  
+ATOM    472  CA  ALA    47     -21.083   0.505 -48.205  1.00                 C  
+ATOM    473  C   ALA    47     -20.962   1.478 -47.075  1.00                 C  
+ATOM    474  O   ALA    47     -20.208   2.444 -47.171  1.00                 O  
+ATOM    475  H   ALA    47     -20.422   1.316 -49.956  1.00                 H  
+ATOM    476  CB  ALA    47     -19.920  -0.474 -48.256  1.00                 C  
+ATOM    477  N   HIS    48     -21.669   1.226 -45.952  1.00                 N  
+ATOM    478  CA  HIS    48     -21.707   2.227 -44.927  1.00                 C  
+ATOM    479  C   HIS    48     -21.150   1.638 -43.658  1.00                 C  
+ATOM    480  O   HIS    48     -21.328   0.452 -43.387  1.00                 O  
+ATOM    481  H   HIS    48     -22.110   0.450 -45.839  1.00                 H  
+ATOM    482  CB  HIS    48     -23.136   2.735 -44.727  1.00                 C  
+ATOM    483  CG  HIS    48     -23.700   3.440 -45.921  1.00                 C  
+ATOM    484  ND1 HIS    48     -23.257   4.678 -46.332  1.00                 N  
+ATOM    485  CE1 HIS    48     -23.948   5.049 -47.425  1.00                 C  
+ATOM    486  CD2 HIS    48     -24.728   3.147 -46.910  1.00                 C  
+ATOM    487  HE2 HIS    48     -25.417   4.181 -48.498  1.00                 H  
+ATOM    488  NE2 HIS    48     -24.832   4.136 -47.777  1.00                 N  
+ATOM    489  N   HIS    49     -20.447   2.474 -42.856  1.00                 N  
+ATOM    490  CA  HIS    49     -19.797   2.085 -41.627  1.00                 C  
+ATOM    491  C   HIS    49     -20.770   2.044 -40.479  1.00                 C  
+ATOM    492  O   HIS    49     -21.793   2.728 -40.482  1.00                 O  
+ATOM    493  H   HIS    49     -20.401   3.327 -43.139  1.00                 H  
+ATOM    494  CB  HIS    49     -18.648   3.042 -41.302  1.00                 C  
+ATOM    495  CG  HIS    49     -17.512   2.974 -42.275  1.00                 C  
+ATOM    496  ND1 HIS    49     -16.599   1.942 -42.282  1.00                 N  
+ATOM    497  CE1 HIS    49     -15.703   2.157 -43.262  1.00                 C  
+ATOM    498  CD2 HIS    49     -17.030   3.805 -43.368  1.00                 C  
+ATOM    499  HE2 HIS    49     -15.469   3.618 -44.631  1.00                 H  
+ATOM    500  NE2 HIS    49     -15.956   3.273 -43.917  1.00                 N  
+ATOM    501  N   LYS    50     -20.471   1.205 -39.456  1.00                 N  
+ATOM    502  CA  LYS    50     -21.311   1.139 -38.288  1.00                 C  
+ATOM    503  C   LYS    50     -20.472   1.098 -37.059  1.00                 C  
+ATOM    504  O   LYS    50     -19.362   0.576 -37.083  1.00                 O  
+ATOM    505  H   LYS    50     -19.738   0.686 -39.513  1.00                 H  
+ATOM    506  CB  LYS    50     -22.229  -0.083 -38.357  1.00                 C  
+ATOM    507  CD  LYS    50     -22.461  -2.581 -38.448  1.00                 C  
+ATOM    508  CE  LYS    50     -21.733  -3.912 -38.353  1.00                 C  
+ATOM    509  CG  LYS    50     -21.494  -1.414 -38.328  1.00                 C  
+ATOM    510 1HZ  LYS    50     -22.210  -5.826 -38.412  1.00                 H  
+ATOM    511 2HZ  LYS    50     -23.084  -5.031 -39.258  1.00                 H  
+ATOM    512 3HZ  LYS    50     -23.269  -5.029 -37.816  1.00                 H  
+ATOM    513  NZ  LYS    50     -22.668  -5.065 -38.472  1.00                 N  
+ATOM    514  N   LEU    51     -20.990   1.656 -35.941  1.00                 N  
+ATOM    515  CA  LEU    51     -20.224   1.637 -34.725  1.00                 C  
+ATOM    516  C   LEU    51     -20.596   0.437 -33.930  1.00                 C  
+ATOM    517  O   LEU    51     -21.715  -0.063 -34.023  1.00                 O  
+ATOM    518  H   LEU    51     -21.806   2.037 -35.953  1.00                 H  
+ATOM    519  CB  LEU    51     -20.456   2.921 -33.925  1.00                 C  
+ATOM    520  CG  LEU    51     -20.066   4.229 -34.615  1.00                 C  
+ATOM    521  CD1 LEU    51     -20.433   5.424 -33.749  1.00                 C  
+ATOM    522  CD2 LEU    51     -18.580   4.245 -34.937  1.00                 C  
+ATOM    523  N   LYS    52     -19.637  -0.060 -33.123  1.00                 N  
+ATOM    524  CA  LYS    52     -19.900  -1.199 -32.297  1.00                 C  
+ATOM    525  C   LYS    52     -20.003  -0.700 -30.904  1.00                 C  
+ATOM    526  O   LYS    52     -19.051  -0.108 -30.400  1.00                 O  
+ATOM    527  H   LYS    52     -18.826   0.330 -33.106  1.00                 H  
+ATOM    528  CB  LYS    52     -18.797  -2.247 -32.462  1.00                 C  
+ATOM    529  CD  LYS    52     -17.604  -3.880 -33.947  1.00                 C  
+ATOM    530  CE  LYS    52     -17.489  -4.445 -35.354  1.00                 C  
+ATOM    531  CG  LYS    52     -18.713  -2.845 -33.857  1.00                 C  
+ATOM    532 1HZ  LYS    52     -16.340  -5.739 -36.302  1.00                 H  
+ATOM    533 2HZ  LYS    52     -16.522  -6.106 -34.907  1.00                 H  
+ATOM    534 3HZ  LYS    52     -15.608  -5.034 -35.263  1.00                 H  
+ATOM    535  NZ  LYS    52     -16.378  -5.430 -35.468  1.00                 N  
+ATOM    536  N   VAL    53     -21.173  -0.913 -30.261  1.00                 N  
+ATOM    537  CA  VAL    53     -21.350  -0.543 -28.886  1.00                 C  
+ATOM    538  C   VAL    53     -21.215  -1.772 -28.078  1.00                 C  
+ATOM    539  O   VAL    53     -21.883  -2.779 -28.307  1.00                 O  
+ATOM    540  H   VAL    53     -21.849  -1.296 -30.715  1.00                 H  
+ATOM    541  CB  VAL    53     -22.708   0.146 -28.657  1.00                 C  
+ATOM    542  CG1 VAL    53     -22.900   0.468 -27.183  1.00                 C  
+ATOM    543  CG2 VAL    53     -22.814   1.408 -29.500  1.00                 C  
+ATOM    544  N   PHE    54     -20.306  -1.659 -27.098  1.00                 N  
+ATOM    545  CA  PHE    54     -19.852  -2.688 -26.211  1.00                 C  
+ATOM    546  C   PHE    54     -20.547  -2.388 -24.935  1.00                 C  
+ATOM    547  O   PHE    54     -20.301  -1.336 -24.354  1.00                 O  
+ATOM    548  H   PHE    54     -19.973  -0.826 -27.029  1.00                 H  
+ATOM    549  CB  PHE    54     -18.326  -2.669 -26.105  1.00                 C  
+ATOM    550  CG  PHE    54     -17.625  -3.052 -27.377  1.00                 C  
+ATOM    551  CZ  PHE    54     -16.325  -3.765 -29.728  1.00                 C  
+ATOM    552  CD1 PHE    54     -17.817  -2.321 -28.537  1.00                 C  
+ATOM    553  CE1 PHE    54     -17.172  -2.673 -29.707  1.00                 C  
+ATOM    554  CD2 PHE    54     -16.774  -4.142 -27.414  1.00                 C  
+ATOM    555  CE2 PHE    54     -16.129  -4.494 -28.585  1.00                 C  
+ATOM    556  N   VAL    55     -21.425  -3.286 -24.458  1.00                 N  
+ATOM    557  CA  VAL    55     -22.070  -3.035 -23.197  1.00                 C  
+ATOM    558  C   VAL    55     -21.463  -3.961 -22.202  1.00                 C  
+ATOM    559  O   VAL    55     -21.585  -5.172 -22.367  1.00                 O  
+ATOM    560  H   VAL    55     -21.611  -4.037 -24.917  1.00                 H  
+ATOM    561  CB  VAL    55     -23.596  -3.218 -23.297  1.00                 C  
+ATOM    562  CG1 VAL    55     -24.250  -2.983 -21.944  1.00                 C  
+ATOM    563  CG2 VAL    55     -24.177  -2.280 -24.344  1.00                 C  
+ATOM    564  N   VAL    56     -20.795  -3.423 -21.148  1.00                 N  
+ATOM    565  CA  VAL    56     -20.235  -4.317 -20.157  1.00                 C  
+ATOM    566  C   VAL    56     -20.951  -4.101 -18.866  1.00                 C  
+ATOM    567  O   VAL    56     -21.020  -2.979 -18.365  1.00                 O  
+ATOM    568  H   VAL    56     -20.697  -2.533 -21.058  1.00                 H  
+ATOM    569  CB  VAL    56     -18.719  -4.102 -19.996  1.00                 C  
+ATOM    570  CG1 VAL    56     -18.161  -5.026 -18.924  1.00                 C  
+ATOM    571  CG2 VAL    56     -18.005  -4.325 -21.320  1.00                 C  
+ATOM    572  N   PRO    57     -21.550  -5.174 -18.387  1.00                 N  
+ATOM    573  CA  PRO    57     -22.260  -5.128 -17.133  1.00                 C  
+ATOM    574  C   PRO    57     -21.316  -5.338 -15.976  1.00                 C  
+ATOM    575  O   PRO    57     -20.484  -6.244 -16.053  1.00                 O  
+ATOM    576  CB  PRO    57     -23.280  -6.263 -17.243  1.00                 C  
+ATOM    577  CD  PRO    57     -22.050  -6.246 -19.296  1.00                 C  
+ATOM    578  CG  PRO    57     -23.408  -6.509 -18.709  1.00                 C  
+ATOM    579  N   HIS    58     -21.415  -4.548 -14.881  1.00                 N  
+ATOM    580  CA  HIS    58     -20.623  -4.900 -13.741  1.00                 C  
+ATOM    581  C   HIS    58     -21.000  -4.089 -12.547  1.00                 C  
+ATOM    582  O   HIS    58     -21.818  -3.179 -12.650  1.00                 O  
+ATOM    583  H   HIS    58     -21.951  -3.826 -14.851  1.00                 H  
+ATOM    584  CB  HIS    58     -19.135  -4.720 -14.046  1.00                 C  
+ATOM    585  CG  HIS    58     -18.745  -3.304 -14.338  1.00                 C  
+ATOM    586  HD1 HIS    58     -19.414  -3.098 -16.278  1.00                 H  
+ATOM    587  ND1 HIS    58     -18.994  -2.698 -15.550  1.00                 N  
+ATOM    588  CE1 HIS    58     -18.533  -1.435 -15.512  1.00                 C  
+ATOM    589  CD2 HIS    58     -18.085  -2.236 -13.602  1.00                 C  
+ATOM    590  NE2 HIS    58     -17.986  -1.151 -14.346  1.00                 N  
+ATOM    591  N   SER    59     -20.503  -4.473 -11.351  1.00                 N  
+ATOM    592  CA  SER    59     -20.842  -3.732 -10.173  1.00                 C  
+ATOM    593  C   SER    59     -19.558  -3.239  -9.555  1.00                 C  
+ATOM    594  O   SER    59     -18.546  -3.932  -9.415  1.00                 O  
+ATOM    595  H   SER    59     -19.962  -5.190 -11.292  1.00                 H  
+ATOM    596  CB  SER    59     -21.643  -4.604  -9.204  1.00                 C  
+ATOM    597  HG  SER    59     -23.329  -4.308  -9.946  1.00                 H  
+ATOM    598  OG  SER    59     -22.885  -4.987  -9.770  1.00                 O  
+ATOM    599  N   HIS    60     -19.598  -1.975  -9.141  1.00                 N  
+ATOM    600  CA  HIS    60     -18.496  -1.307  -8.551  1.00                 C  
+ATOM    601  C   HIS    60     -18.715  -1.588  -7.092  1.00                 C  
+ATOM    602  O   HIS    60     -19.500  -0.908  -6.440  1.00                 O  
+ATOM    603  H   HIS    60     -20.379  -1.542  -9.253  1.00                 H  
+ATOM    604  CB  HIS    60     -18.502   0.175  -8.931  1.00                 C  
+ATOM    605  CG  HIS    60     -18.318   0.424 -10.395  1.00                 C  
+ATOM    606  HD1 HIS    60     -19.299   2.224 -10.621  1.00                 H  
+ATOM    607  ND1 HIS    60     -18.817   1.542 -11.029  1.00                 N  
+ATOM    608  CE1 HIS    60     -18.493   1.486 -12.333  1.00                 C  
+ATOM    609  CD2 HIS    60     -17.670  -0.277 -11.494  1.00                 C  
+ATOM    610  NE2 HIS    60     -17.805   0.398 -12.620  1.00                 N  
+ATOM    611  N   ASN    61     -18.053  -2.618  -6.532  1.00                 N  
+ATOM    612  CA  ASN    61     -18.325  -2.969  -5.164  1.00                 C  
+ATOM    613  C   ASN    61     -17.318  -2.341  -4.238  1.00                 C  
+ATOM    614  O   ASN    61     -16.127  -2.648  -4.242  1.00                 O  
+ATOM    615  H   ASN    61     -17.446  -3.085  -7.004  1.00                 H  
+ATOM    616  CB  ASN    61     -18.343  -4.489  -4.994  1.00                 C  
+ATOM    617  CG  ASN    61     -18.709  -4.914  -3.586  1.00                 C  
+ATOM    618  OD1 ASN    61     -18.189  -4.375  -2.609  1.00                 O  
+ATOM    619 1HD2 ASN    61     -19.862  -6.175  -2.664  1.00                 H  
+ATOM    620 2HD2 ASN    61     -19.966  -6.253  -4.217  1.00                 H  
+ATOM    621  ND2 ASN    61     -19.609  -5.885  -3.477  1.00                 N  
+ATOM    622  N   ASP    62     -17.763  -1.413  -3.386  1.00                 N  
+ATOM    623  CA  ASP    62     -16.813  -1.005  -2.413  1.00                 C  
+ATOM    624  C   ASP    62     -17.139  -1.936  -1.303  1.00                 C  
+ATOM    625  O   ASP    62     -18.286  -1.999  -0.860  1.00                 O  
+ATOM    626  H   ASP    62     -18.586  -1.049  -3.391  1.00                 H  
+ATOM    627  CB  ASP    62     -16.978   0.482  -2.094  1.00                 C  
+ATOM    628  CG  ASP    62     -16.572   1.375  -3.250  1.00                 C  
+ATOM    629  OD1 ASP    62     -15.900   0.876  -4.178  1.00                 O  
+ATOM    630  OD2 ASP    62     -16.924   2.573  -3.227  1.00                 O  
+ATOM    631  N   PRO    63     -16.178  -2.709  -0.904  1.00                 N  
+ATOM    632  CA  PRO    63     -16.304  -3.667   0.147  1.00                 C  
+ATOM    633  C   PRO    63     -16.998  -3.024   1.305  1.00                 C  
+ATOM    634  O   PRO    63     -18.106  -3.454   1.617  1.00                 O  
+ATOM    635  CB  PRO    63     -14.859  -4.053   0.471  1.00                 C  
+ATOM    636  CD  PRO    63     -14.694  -2.636  -1.451  1.00                 C  
+ATOM    637  CG  PRO    63     -14.127  -3.875  -0.817  1.00                 C  
+ATOM    638  N   GLY    64     -16.466  -1.927   1.873  1.00                 N  
+ATOM    639  CA  GLY    64     -17.158  -1.317   2.969  1.00                 C  
+ATOM    640  C   GLY    64     -16.975   0.165   2.863  1.00                 C  
+ATOM    641  O   GLY    64     -15.857   0.655   2.744  1.00                 O  
+ATOM    642  H   GLY    64     -15.692  -1.576   1.578  1.00                 H  
+ATOM    643  N   TRP    65     -18.087   0.921   2.919  1.00                 N  
+ATOM    644  CA  TRP    65     -18.071   2.353   2.888  1.00                 C  
+ATOM    645  C   TRP    65     -19.027   2.869   3.898  1.00                 C  
+ATOM    646  O   TRP    65     -18.800   2.781   5.109  1.00                 O  
+ATOM    647  H   TRP    65     -18.870   0.481   2.979  1.00                 H  
+ATOM    648  CB  TRP    65     -18.417   2.863   1.487  1.00                 C  
+ATOM    649 1HB  TRP    65     -19.441   2.895   1.338  1.00                 H  
+ATOM    650 2HB  TRP    65     -17.743   2.668   0.775  1.00                 H  
+ATOM    651  CG  TRP    65     -18.323   4.351   1.351  1.00                 C  
+ATOM    652  CD1 TRP    65     -17.182   5.100   1.302  1.00                 C  
+ATOM    653  HE1 TRP    65     -16.870   7.128   1.119  1.00                 H  
+ATOM    654  NE1 TRP    65     -17.494   6.431   1.173  1.00                 N  
+ATOM    655  CD2 TRP    65     -19.414   5.274   1.245  1.00                 C  
+ATOM    656  CE2 TRP    65     -18.860   6.562   1.135  1.00                 C  
+ATOM    657  CH2 TRP    65     -21.004   7.542   1.004  1.00                 C  
+ATOM    658  CZ2 TRP    65     -19.648   7.706   1.014  1.00                 C  
+ATOM    659  CE3 TRP    65     -20.805   5.136   1.232  1.00                 C  
+ATOM    660  CZ3 TRP    65     -21.582   6.273   1.112  1.00                 C  
+ATOM    661  N   ILE    66     -20.159   3.387   3.342  1.00                 N  
+ATOM    662  CA  ILE    66     -21.155   4.130   4.061  1.00                 C  
+ATOM    663  C   ILE    66     -21.542   3.274   5.200  1.00                 C  
+ATOM    664  O   ILE    66     -21.950   3.774   6.247  1.00                 O  
+ATOM    665  H   ILE    66     -20.260   3.235   2.461  1.00                 H  
+ATOM    666  CB  ILE    66     -22.346   4.498   3.157  1.00                 C  
+ATOM    667  CD1 ILE    66     -22.556   6.859   4.096  1.00                 C  
+ATOM    668  CG1 ILE    66     -23.239   5.532   3.846  1.00                 C  
+ATOM    669  CG2 ILE    66     -23.123   3.251   2.765  1.00                 C  
+ATOM    670  N   GLN    67     -21.477   1.949   5.004  1.00                 N  
+ATOM    671  CA  GLN    67     -21.756   1.107   6.115  1.00                 C  
+ATOM    672  C   GLN    67     -20.577   0.229   6.442  1.00                 C  
+ATOM    673  O   GLN    67     -19.438   0.531   6.090  1.00                 O  
+ATOM    674  H   GLN    67     -21.267   1.588   4.207  1.00                 H  
+ATOM    675  CB  GLN    67     -22.990   0.246   5.838  1.00                 C  
+ATOM    676  CD  GLN    67     -24.731   1.806   6.795  1.00                 C  
+ATOM    677  CG  GLN    67     -24.257   1.044   5.574  1.00                 C  
+ATOM    678  OE1 GLN    67     -24.483   1.396   7.929  1.00                 O  
+ATOM    679 1HE2 GLN    67     -25.721   3.411   7.257  1.00                 H  
+ATOM    680 2HE2 GLN    67     -25.576   3.185   5.722  1.00                 H  
+ATOM    681  NE2 GLN    67     -25.416   2.920   6.567  1.00                 N  
+ATOM    682  N   THR    68     -20.873  -0.890   7.145  1.00                 N  
+ATOM    683  CA  THR    68     -20.007  -1.858   7.788  1.00                 C  
+ATOM    684  C   THR    68     -19.107  -2.553   6.844  1.00                 C  
+ATOM    685  O   THR    68     -19.232  -2.450   5.620  1.00                 O  
+ATOM    686  H   THR    68     -21.767  -0.991   7.182  1.00                 H  
+ATOM    687  CB  THR    68     -20.818  -2.922   8.551  1.00                 C  
+ATOM    688  HG1 THR    68     -21.168  -4.017   7.064  1.00                 H  
+ATOM    689  OG1 THR    68     -21.646  -3.645   7.632  1.00                 O  
+ATOM    690  CG2 THR    68     -21.708  -2.266   9.595  1.00                 C  
+ATOM    691  N   PHE    69     -18.105  -3.252   7.418  1.00                 N  
+ATOM    692  CA  PHE    69     -17.395  -3.989   6.467  1.00                 C  
+ATOM    693  C   PHE    69     -17.982  -5.353   6.351  1.00                 C  
+ATOM    694  O   PHE    69     -18.883  -5.538   5.535  1.00                 O  
+ATOM    695  H   PHE    69     -17.867  -3.288   8.285  1.00                 H  
+ATOM    696  CB  PHE    69     -15.914  -4.063   6.843  1.00                 C  
+ATOM    697  CG  PHE    69     -15.079  -4.843   5.868  1.00                 C  
+ATOM    698  CZ  PHE    69     -13.532  -6.292   4.069  1.00                 C  
+ATOM    699  CD1 PHE    69     -15.082  -4.524   4.522  1.00                 C  
+ATOM    700  CE1 PHE    69     -14.314  -5.242   3.625  1.00                 C  
+ATOM    701  CD2 PHE    69     -14.292  -5.897   6.297  1.00                 C  
+ATOM    702  CE2 PHE    69     -13.524  -6.615   5.401  1.00                 C  
+ATOM    703  N   GLU    70     -17.608  -6.354   7.150  1.00                 N  
+ATOM    704  CA  GLU    70     -18.215  -7.568   6.727  1.00                 C  
+ATOM    705  C   GLU    70     -19.541  -7.775   7.298  1.00                 C  
+ATOM    706  O   GLU    70     -19.711  -8.366   8.365  1.00                 O  
+ATOM    707  H   GLU    70     -17.062  -6.349   7.865  1.00                 H  
+ATOM    708  CB  GLU    70     -17.328  -8.763   7.083  1.00                 C  
+ATOM    709  CD  GLU    70     -15.150  -9.989   6.720  1.00                 C  
+ATOM    710  CG  GLU    70     -15.996  -8.787   6.350  1.00                 C  
+ATOM    711  OE1 GLU    70     -15.375 -11.074   6.144  1.00                 O  
+ATOM    712  OE2 GLU    70     -14.261  -9.846   7.586  1.00                 O  
+ATOM    713  N   GLU    71     -20.536  -7.369   6.509  1.00                 N  
+ATOM    714  CA  GLU    71     -21.811  -7.474   7.074  1.00                 C  
+ATOM    715  C   GLU    71     -22.902  -7.467   6.109  1.00                 C  
+ATOM    716  O   GLU    71     -22.968  -8.323   5.230  1.00                 O  
+ATOM    717  H   GLU    71     -20.439  -7.047   5.674  1.00                 H  
+ATOM    718  CB  GLU    71     -22.049  -6.340   8.073  1.00                 C  
+ATOM    719  CD  GLU    71     -21.434  -7.598  10.175  1.00                 C  
+ATOM    720  CG  GLU    71     -21.151  -6.394   9.299  1.00                 C  
+ATOM    721  OE1 GLU    71     -22.550  -8.151  10.084  1.00                 O  
+ATOM    722  OE2 GLU    71     -20.539  -7.990  10.954  1.00                 O  
+ATOM    723  N   TYR    72     -23.779  -6.459   6.286  1.00                 N  
+ATOM    724  CA  TYR    72     -24.977  -6.346   5.538  1.00                 C  
+ATOM    725  C   TYR    72     -24.585  -6.447   4.092  1.00                 C  
+ATOM    726  O   TYR    72     -25.246  -7.095   3.280  1.00                 O  
+ATOM    727  H   TYR    72     -23.578  -5.842   6.910  1.00                 H  
+ATOM    728  CB  TYR    72     -25.690  -5.032   5.863  1.00                 C  
+ATOM    729  CG  TYR    72     -26.969  -4.820   5.085  1.00                 C  
+ATOM    730  HH  TYR    72     -30.355  -3.725   2.325  1.00                 H  
+ATOM    731  OH  TYR    72     -30.494  -4.247   2.955  1.00                 O  
+ATOM    732  CZ  TYR    72     -29.326  -4.435   3.659  1.00                 C  
+ATOM    733  CD1 TYR    72     -28.144  -5.457   5.461  1.00                 C  
+ATOM    734  CE1 TYR    72     -29.318  -5.269   4.756  1.00                 C  
+ATOM    735  CD2 TYR    72     -26.996  -3.983   3.977  1.00                 C  
+ATOM    736  CE2 TYR    72     -28.161  -3.783   3.259  1.00                 C  
+ATOM    737  N   TYR    73     -23.474  -5.802   3.715  1.00                 N  
+ATOM    738  CA  TYR    73     -23.153  -5.833   2.327  1.00                 C  
+ATOM    739  C   TYR    73     -22.899  -7.235   1.867  1.00                 C  
+ATOM    740  O   TYR    73     -23.189  -7.570   0.722  1.00                 O  
+ATOM    741  H   TYR    73     -22.939  -5.363   4.291  1.00                 H  
+ATOM    742  CB  TYR    73     -21.934  -4.955   2.039  1.00                 C  
+ATOM    743  CG  TYR    73     -22.217  -3.471   2.109  1.00                 C  
+ATOM    744  HH  TYR    73     -22.516   0.949   2.907  1.00                 H  
+ATOM    745  OH  TYR    73     -22.986   0.610   2.313  1.00                 O  
+ATOM    746  CZ  TYR    73     -22.733  -0.740   2.244  1.00                 C  
+ATOM    747  CD1 TYR    73     -21.558  -2.663   3.026  1.00                 C  
+ATOM    748  CE1 TYR    73     -21.811  -1.306   3.097  1.00                 C  
+ATOM    749  CD2 TYR    73     -23.144  -2.883   1.257  1.00                 C  
+ATOM    750  CE2 TYR    73     -23.410  -1.528   1.314  1.00                 C  
+ATOM    751  N   GLN    74     -22.289  -8.085   2.709  1.00                 N  
+ATOM    752  CA  GLN    74     -21.937  -9.379   2.222  1.00                 C  
+ATOM    753  C   GLN    74     -23.193 -10.126   1.877  1.00                 C  
+ATOM    754  O   GLN    74     -23.219 -10.878   0.904  1.00                 O  
+ATOM    755  H   GLN    74     -22.101  -7.858   3.559  1.00                 H  
+ATOM    756  CB  GLN    74     -21.109 -10.136   3.262  1.00                 C  
+ATOM    757  CD  GLN    74     -18.958 -10.281   4.579  1.00                 C  
+ATOM    758  CG  GLN    74     -19.707  -9.582   3.462  1.00                 C  
+ATOM    759  OE1 GLN    74     -19.563 -10.774   5.532  1.00                 O  
+ATOM    760 1HE2 GLN    74     -17.143 -10.731   5.101  1.00                 H  
+ATOM    761 2HE2 GLN    74     -17.233  -9.954   3.752  1.00                 H  
+ATOM    762  NE2 GLN    74     -17.636 -10.327   4.465  1.00                 N  
+ATOM    763  N   HIS    75     -24.269  -9.922   2.665  1.00                 N  
+ATOM    764  CA  HIS    75     -25.535 -10.573   2.464  1.00                 C  
+ATOM    765  C   HIS    75     -26.005 -10.215   1.075  1.00                 C  
+ATOM    766  O   HIS    75     -26.362 -11.090   0.288  1.00                 O  
+ATOM    767  H   HIS    75     -24.164  -9.343   3.346  1.00                 H  
+ATOM    768  CB  HIS    75     -26.535 -10.145   3.540  1.00                 C  
+ATOM    769  CG  HIS    75     -27.882 -10.783   3.402  1.00                 C  
+ATOM    770  ND1 HIS    75     -28.113 -12.106   3.707  1.00                 N  
+ATOM    771  CE1 HIS    75     -29.410 -12.387   3.484  1.00                 C  
+ATOM    772  CD2 HIS    75     -29.202 -10.340   2.976  1.00                 C  
+ATOM    773  HE2 HIS    75     -30.972 -11.295   2.826  1.00                 H  
+ATOM    774  NE2 HIS    75     -30.068 -11.332   3.045  1.00                 N  
+ATOM    775  N   ASP    76     -25.987  -8.911   0.723  1.00                 N  
+ATOM    776  CA  ASP    76     -26.484  -8.485  -0.559  1.00                 C  
+ATOM    777  C   ASP    76     -25.593  -9.038  -1.632  1.00                 C  
+ATOM    778  O   ASP    76     -26.069  -9.372  -2.715  1.00                 O  
+ATOM    779  H   ASP    76     -25.659  -8.305   1.302  1.00                 H  
+ATOM    780  CB  ASP    76     -26.553  -6.958  -0.626  1.00                 C  
+ATOM    781  CG  ASP    76     -27.660  -6.386   0.238  1.00                 C  
+ATOM    782  OD1 ASP    76     -28.538  -7.163   0.669  1.00                 O  
+ATOM    783  OD2 ASP    76     -27.649  -5.162   0.484  1.00                 O  
+ATOM    784  N   THR    77     -24.269  -9.137  -1.384  1.00                 N  
+ATOM    785  CA  THR    77     -23.423  -9.645  -2.423  1.00                 C  
+ATOM    786  C   THR    77     -23.752 -11.073  -2.707  1.00                 C  
+ATOM    787  O   THR    77     -23.580 -11.492  -3.845  1.00                 O  
+ATOM    788  H   THR    77     -23.914  -8.894  -0.593  1.00                 H  
+ATOM    789  CB  THR    77     -21.934  -9.516  -2.052  1.00                 C  
+ATOM    790  HG1 THR    77     -22.138  -9.945  -0.234  1.00                 H  
+ATOM    791  OG1 THR    77     -21.673 -10.250  -0.849  1.00                 O  
+ATOM    792  CG2 THR    77     -21.567  -8.058  -1.821  1.00                 C  
+ATOM    793  N   LYS    78     -24.196 -11.865  -1.704  1.00                 N  
+ATOM    794  CA  LYS    78     -24.603 -13.228  -1.941  1.00                 C  
+ATOM    795  C   LYS    78     -25.851 -13.248  -2.775  1.00                 C  
+ATOM    796  O   LYS    78     -26.030 -14.171  -3.566  1.00                 O  
+ATOM    797  H   LYS    78     -24.234 -11.522  -0.873  1.00                 H  
+ATOM    798  CB  LYS    78     -24.824 -13.959  -0.615  1.00                 C  
+ATOM    799  CD  LYS    78     -25.271 -16.121   0.580  1.00                 C  
+ATOM    800  CE  LYS    78     -25.763 -17.551   0.437  1.00                 C  
+ATOM    801  CG  LYS    78     -25.194 -15.426  -0.770  1.00                 C  
+ATOM    802 1HZ  LYS    78     -25.129 -19.221  -0.403  1.00                 H  
+ATOM    803 2HZ  LYS    78     -24.023 -18.409   0.077  1.00                 H  
+ATOM    804 3HZ  LYS    78     -24.708 -18.050  -1.154  1.00                 H  
+ATOM    805  NZ  LYS    78     -24.810 -18.392  -0.339  1.00                 N  
+ATOM    806  N   HIS    79     -26.759 -12.259  -2.588  1.00                 N  
+ATOM    807  CA  HIS    79     -27.989 -12.139  -3.341  1.00                 C  
+ATOM    808  C   HIS    79     -27.648 -11.858  -4.767  1.00                 C  
+ATOM    809  O   HIS    79     -28.162 -12.509  -5.673  1.00                 O  
+ATOM    810  H   HIS    79     -26.560 -11.655  -1.952  1.00                 H  
+ATOM    811  CB  HIS    79     -28.874 -11.039  -2.750  1.00                 C  
+ATOM    812  CG  HIS    79     -30.186 -10.878  -3.452  1.00                 C  
+ATOM    813  ND1 HIS    79     -31.204 -11.801  -3.351  1.00                 N  
+ATOM    814  CE1 HIS    79     -32.249 -11.384  -4.087  1.00                 C  
+ATOM    815  CD2 HIS    79     -30.775  -9.882  -4.336  1.00                 C  
+ATOM    816  HE2 HIS    79     -32.575  -9.761  -5.237  1.00                 H  
+ATOM    817  NE2 HIS    79     -31.999 -10.233  -4.681  1.00                 N  
+ATOM    818  N   ILE    80     -26.711 -10.904  -4.991  1.00                 N  
+ATOM    819  CA  ILE    80     -26.078 -10.653  -6.265  1.00                 C  
+ATOM    820  C   ILE    80     -25.236 -11.902  -6.325  1.00                 C  
+ATOM    821  O   ILE    80     -25.177 -12.649  -5.383  1.00                 O  
+ATOM    822  H   ILE    80     -26.490 -10.408  -4.273  1.00                 H  
+ATOM    823  CB  ILE    80     -25.327  -9.309  -6.267  1.00                 C  
+ATOM    824  CD1 ILE    80     -25.624  -6.823  -5.784  1.00                 C  
+ATOM    825  CG1 ILE    80     -26.302  -8.153  -6.033  1.00                 C  
+ATOM    826  CG2 ILE    80     -24.545  -9.137  -7.560  1.00                 C  
+ATOM    827  N   LEU    81     -24.628 -12.328  -7.403  1.00                 N  
+ATOM    828  CA  LEU    81     -23.956 -13.605  -7.362  1.00                 C  
+ATOM    829  C   LEU    81     -24.964 -14.730  -7.468  1.00                 C  
+ATOM    830  O   LEU    81     -24.874 -15.514  -8.408  1.00                 O  
+ATOM    831  H   LEU    81     -24.624 -11.841  -8.160  1.00                 H  
+ATOM    832  CB  LEU    81     -23.135 -13.738  -6.077  1.00                 C  
+ATOM    833  CG  LEU    81     -21.697 -13.218  -6.135  1.00                 C  
+ATOM    834  CD1 LEU    81     -21.669 -11.761  -6.571  1.00                 C  
+ATOM    835  CD2 LEU    81     -21.013 -13.381  -4.787  1.00                 C  
+ATOM    836  N   SER    82     -26.007 -14.810  -6.606  1.00                 N  
+ATOM    837  CA  SER    82     -26.975 -15.871  -6.761  1.00                 C  
+ATOM    838  C   SER    82     -27.819 -15.530  -7.949  1.00                 C  
+ATOM    839  O   SER    82     -28.152 -16.404  -8.747  1.00                 O  
+ATOM    840  H   SER    82     -26.100 -14.210  -5.942  1.00                 H  
+ATOM    841  CB  SER    82     -27.808 -16.027  -5.487  1.00                 C  
+ATOM    842  HG  SER    82     -26.404 -15.920  -4.263  1.00                 H  
+ATOM    843  OG  SER    82     -27.008 -16.472  -4.406  1.00                 O  
+ATOM    844  N   ASN    83     -28.171 -14.233  -8.108  1.00                 N  
+ATOM    845  CA  ASN    83     -29.017 -13.853  -9.202  1.00                 C  
+ATOM    846  C   ASN    83     -28.249 -13.981 -10.475  1.00                 C  
+ATOM    847  O   ASN    83     -28.822 -14.341 -11.501  1.00                 O  
+ATOM    848  H   ASN    83     -27.876 -13.610  -7.530  1.00                 H  
+ATOM    849  CB  ASN    83     -29.549 -12.433  -9.000  1.00                 C  
+ATOM    850  CG  ASN    83     -30.611 -12.357  -7.920  1.00                 C  
+ATOM    851  OD1 ASN    83     -31.232 -13.362  -7.575  1.00                 O  
+ATOM    852 1HD2 ASN    83     -31.442 -11.061  -6.738  1.00                 H  
+ATOM    853 2HD2 ASN    83     -30.347 -10.451  -7.665  1.00                 H  
+ATOM    854  ND2 ASN    83     -30.823 -11.161  -7.383  1.00                 N  
+ATOM    855  N   ALA    84     -26.933 -13.673 -10.439  1.00                 N  
+ATOM    856  CA  ALA    84     -26.122 -13.735 -11.619  1.00                 C  
+ATOM    857  C   ALA    84     -26.098 -15.153 -12.099  1.00                 C  
+ATOM    858  O   ALA    84     -26.337 -15.404 -13.278  1.00                 O  
+ATOM    859  H   ALA    84     -26.568 -13.425  -9.655  1.00                 H  
+ATOM    860  CB  ALA    84     -24.722 -13.218 -11.328  1.00                 C  
+ATOM    861  N   LEU    85     -25.881 -16.120 -11.180  1.00                 N  
+ATOM    862  CA  LEU    85     -25.769 -17.509 -11.547  1.00                 C  
+ATOM    863  C   LEU    85     -27.066 -17.932 -12.173  1.00                 C  
+ATOM    864  O   LEU    85     -27.076 -18.639 -13.179  1.00                 O  
+ATOM    865  H   LEU    85     -25.806 -15.875 -10.317  1.00                 H  
+ATOM    866  CB  LEU    85     -25.428 -18.361 -10.323  1.00                 C  
+ATOM    867  CG  LEU    85     -24.027 -18.174  -9.736  1.00                 C  
+ATOM    868  CD1 LEU    85     -23.886 -18.937  -8.428  1.00                 C  
+ATOM    869  CD2 LEU    85     -22.964 -18.622 -10.727  1.00                 C  
+ATOM    870  N   ARG    86     -28.204 -17.486 -11.608  1.00                 N  
+ATOM    871  CA  ARG    86     -29.481 -17.887 -12.124  1.00                 C  
+ATOM    872  C   ARG    86     -29.672 -17.350 -13.508  1.00                 C  
+ATOM    873  O   ARG    86     -30.171 -18.054 -14.385  1.00                 O  
+ATOM    874  H   ARG    86     -28.158 -16.932 -10.901  1.00                 H  
+ATOM    875  CB  ARG    86     -30.605 -17.409 -11.203  1.00                 C  
+ATOM    876  CD  ARG    86     -31.762 -17.570  -8.981  1.00                 C  
+ATOM    877  HE  ARG    86     -31.345 -18.962  -7.599  1.00                 H  
+ATOM    878  NE  ARG    86     -31.843 -18.267  -7.700  1.00                 N  
+ATOM    879  CG  ARG    86     -30.661 -18.131  -9.866  1.00                 C  
+ATOM    880  CZ  ARG    86     -32.630 -17.895  -6.695  1.00                 C  
+ATOM    881 1HH1 ARG    86     -32.133 -19.282  -5.484  1.00                 H  
+ATOM    882 2HH1 ARG    86     -33.147 -18.350  -4.917  1.00                 H  
+ATOM    883  NH1 ARG    86     -32.638 -18.590  -5.566  1.00                 N  
+ATOM    884 1HH2 ARG    86     -33.403 -16.377  -7.554  1.00                 H  
+ATOM    885 2HH2 ARG    86     -33.917 -16.587  -6.172  1.00                 H  
+ATOM    886  NH2 ARG    86     -33.407 -16.828  -6.822  1.00                 N  
+ATOM    887  N   HIS    87     -29.262 -16.089 -13.748  1.00                 N  
+ATOM    888  CA  HIS    87     -29.521 -15.462 -15.008  1.00                 C  
+ATOM    889  C   HIS    87     -28.750 -16.176 -16.070  1.00                 C  
+ATOM    890  O   HIS    87     -29.242 -16.362 -17.182  1.00                 O  
+ATOM    891  H   HIS    87     -28.820 -15.641 -13.105  1.00                 H  
+ATOM    892  CB  HIS    87     -29.150 -13.979 -14.955  1.00                 C  
+ATOM    893  CG  HIS    87     -30.062 -13.158 -14.096  1.00                 C  
+ATOM    894  HD1 HIS    87     -28.800 -11.635 -13.514  1.00                 H  
+ATOM    895  ND1 HIS    87     -29.653 -12.003 -13.467  1.00                 N  
+ATOM    896  CE1 HIS    87     -30.686 -11.493 -12.773  1.00                 C  
+ATOM    897  CD2 HIS    87     -31.454 -13.248 -13.679  1.00                 C  
+ATOM    898  NE2 HIS    87     -31.770 -12.234 -12.896  1.00                 N  
+ATOM    899  N   LEU    88     -27.526 -16.621 -15.727  1.00                 N  
+ATOM    900  CA  LEU    88     -26.636 -17.319 -16.616  1.00                 C  
+ATOM    901  C   LEU    88     -27.365 -18.516 -17.145  1.00                 C  
+ATOM    902  O   LEU    88     -27.371 -18.759 -18.349  1.00                 O  
+ATOM    903  H   LEU    88     -27.276 -16.456 -14.878  1.00                 H  
+ATOM    904  CB  LEU    88     -25.349 -17.711 -15.887  1.00                 C  
+ATOM    905  CG  LEU    88     -24.410 -16.566 -15.505  1.00                 C  
+ATOM    906  CD1 LEU    88     -23.283 -17.068 -14.616  1.00                 C  
+ATOM    907  CD2 LEU    88     -23.845 -15.897 -16.749  1.00                 C  
+ATOM    908  N   HIS    89     -28.006 -19.299 -16.254  1.00                 N  
+ATOM    909  CA  HIS    89     -28.665 -20.509 -16.675  1.00                 C  
+ATOM    910  C   HIS    89     -29.779 -20.173 -17.621  1.00                 C  
+ATOM    911  O   HIS    89     -29.864 -20.726 -18.715  1.00                 O  
+ATOM    912  H   HIS    89     -28.019 -19.058 -15.387  1.00                 H  
+ATOM    913  CB  HIS    89     -29.192 -21.281 -15.464  1.00                 C  
+ATOM    914  CG  HIS    89     -29.891 -22.557 -15.818  1.00                 C  
+ATOM    915  ND1 HIS    89     -29.217 -23.680 -16.247  1.00                 N  
+ATOM    916  CE1 HIS    89     -30.108 -24.659 -16.487  1.00                 C  
+ATOM    917  CD2 HIS    89     -31.274 -23.012 -15.842  1.00                 C  
+ATOM    918  HE2 HIS    89     -32.115 -24.775 -16.343  1.00                 H  
+ATOM    919  NE2 HIS    89     -31.343 -24.265 -16.246  1.00                 N  
+ATOM    920  N   ASP    90     -30.663 -19.248 -17.203  1.00                 N  
+ATOM    921  CA  ASP    90     -31.871 -18.913 -17.911  1.00                 C  
+ATOM    922  C   ASP    90     -31.692 -18.131 -19.171  1.00                 C  
+ATOM    923  O   ASP    90     -32.394 -18.381 -20.149  1.00                 O  
+ATOM    924  H   ASP    90     -30.462 -18.829 -16.432  1.00                 H  
+ATOM    925  CB  ASP    90     -32.818 -18.120 -17.009  1.00                 C  
+ATOM    926  CG  ASP    90     -33.434 -18.973 -15.917  1.00                 C  
+ATOM    927  OD1 ASP    90     -33.351 -20.215 -16.016  1.00                 O  
+ATOM    928  OD2 ASP    90     -34.001 -18.399 -14.963  1.00                 O  
+ATOM    929  N   ASN    91     -30.773 -17.155 -19.194  1.00                 N  
+ATOM    930  CA  ASN    91     -30.703 -16.272 -20.331  1.00                 C  
+ATOM    931  C   ASN    91     -29.469 -16.652 -21.094  1.00                 C  
+ATOM    932  O   ASN    91     -28.366 -16.666 -20.543  1.00                 O  
+ATOM    933  H   ASN    91     -30.202 -17.049 -18.506  1.00                 H  
+ATOM    934  CB  ASN    91     -30.699 -14.811 -19.876  1.00                 C  
+ATOM    935  CG  ASN    91     -31.997 -14.407 -19.203  1.00                 C  
+ATOM    936  OD1 ASN    91     -32.933 -13.953 -19.861  1.00                 O  
+ATOM    937 1HD2 ASN    91     -32.803 -14.348 -17.438  1.00                 H  
+ATOM    938 2HD2 ASN    91     -31.348 -14.907 -17.443  1.00                 H  
+ATOM    939  ND2 ASN    91     -32.056 -14.572 -17.887  1.00                 N  
+ATOM    940  N   PRO    92     -29.651 -17.070 -22.321  1.00                 N  
+ATOM    941  CA  PRO    92     -28.518 -17.393 -23.152  1.00                 C  
+ATOM    942  C   PRO    92     -27.834 -16.165 -23.658  1.00                 C  
+ATOM    943  O   PRO    92     -26.627 -16.222 -23.883  1.00                 O  
+ATOM    944  CB  PRO    92     -29.121 -18.205 -24.300  1.00                 C  
+ATOM    945  CD  PRO    92     -30.955 -17.475 -22.947  1.00                 C  
+ATOM    946  CG  PRO    92     -30.544 -17.762 -24.364  1.00                 C  
+ATOM    947  N   GLU    93     -28.574 -15.046 -23.833  1.00                 N  
+ATOM    948  CA  GLU    93     -27.975 -13.905 -24.463  1.00                 C  
+ATOM    949  C   GLU    93     -27.447 -12.935 -23.455  1.00                 C  
+ATOM    950  O   GLU    93     -27.240 -11.771 -23.792  1.00                 O  
+ATOM    951  H   GLU    93     -29.431 -15.011 -23.560  1.00                 H  
+ATOM    952  CB  GLU    93     -28.984 -13.207 -25.377  1.00                 C  
+ATOM    953  CD  GLU    93     -28.372 -14.443 -27.493  1.00                 C  
+ATOM    954  CG  GLU    93     -29.479 -14.068 -26.527  1.00                 C  
+ATOM    955  OE1 GLU    93     -27.587 -13.549 -27.873  1.00                 O  
+ATOM    956  OE2 GLU    93     -28.290 -15.631 -27.870  1.00                 O  
+ATOM    957  N   MET    94     -27.185 -13.358 -22.201  1.00                 N  
+ATOM    958  CA  MET    94     -26.493 -12.421 -21.361  1.00                 C  
+ATOM    959  C   MET    94     -25.088 -12.875 -21.423  1.00                 C  
+ATOM    960  O   MET    94     -24.778 -13.992 -21.014  1.00                 O  
+ATOM    961  H   MET    94     -27.414 -14.167 -21.879  1.00                 H  
+ATOM    962  CB  MET    94     -27.088 -12.424 -19.951  1.00                 C  
+ATOM    963  SD  MET    94     -27.169 -11.465 -17.353  1.00                 S  
+ATOM    964  CE  MET    94     -26.536 -13.026 -16.745  1.00                 C  
+ATOM    965  CG  MET    94     -26.446 -11.424 -19.004  1.00                 C  
+ATOM    966  N   LYS    95     -24.208 -12.064 -22.043  1.00                 N  
+ATOM    967  CA  LYS    95     -22.895 -12.621 -22.172  1.00                 C  
+ATOM    968  C   LYS    95     -21.957 -12.602 -21.024  1.00                 C  
+ATOM    969  O   LYS    95     -21.211 -13.566 -20.856  1.00                 O  
+ATOM    970  H   LYS    95     -24.381 -11.241 -22.364  1.00                 H  
+ATOM    971  CB  LYS    95     -22.135 -11.942 -23.313  1.00                 C  
+ATOM    972  CD  LYS    95     -22.712 -13.652 -25.057  1.00                 C  
+ATOM    973  CE  LYS    95     -23.225 -13.876 -26.470  1.00                 C  
+ATOM    974  CG  LYS    95     -22.738 -12.178 -24.688  1.00                 C  
+ATOM    975 1HZ  LYS    95     -23.526 -15.413 -27.671  1.00                 H  
+ATOM    976 2HZ  LYS    95     -23.743 -15.771 -26.279  1.00                 H  
+ATOM    977 3HZ  LYS    95     -22.390 -15.635 -26.792  1.00                 H  
+ATOM    978  NZ  LYS    95     -23.220 -15.319 -26.840  1.00                 N  
+ATOM    979  N   PHE    96     -21.972 -11.572 -20.174  1.00                 N  
+ATOM    980  CA  PHE    96     -20.859 -11.515 -19.279  1.00                 C  
+ATOM    981  C   PHE    96     -21.193 -10.876 -17.996  1.00                 C  
+ATOM    982  O   PHE    96     -22.107 -10.062 -17.911  1.00                 O  
+ATOM    983  H   PHE    96     -22.613 -10.942 -20.135  1.00                 H  
+ATOM    984  CB  PHE    96     -19.690 -10.767 -19.924  1.00                 C  
+ATOM    985  CG  PHE    96     -19.186 -11.405 -21.187  1.00                 C  
+ATOM    986  CZ  PHE    96     -18.248 -12.589 -23.521  1.00                 C  
+ATOM    987  CD1 PHE    96     -19.733 -11.072 -22.414  1.00                 C  
+ATOM    988  CE1 PHE    96     -19.269 -11.659 -23.576  1.00                 C  
+ATOM    989  CD2 PHE    96     -18.165 -12.338 -21.148  1.00                 C  
+ATOM    990  CE2 PHE    96     -17.701 -12.925 -22.310  1.00                 C  
+ATOM    991  N   ILE    97     -20.474 -11.318 -16.949  1.00                 N  
+ATOM    992  CA  ILE    97     -20.585 -10.763 -15.637  1.00                 C  
+ATOM    993  C   ILE    97     -19.174 -10.509 -15.290  1.00                 C  
+ATOM    994  O   ILE    97     -18.314 -11.258 -15.741  1.00                 O  
+ATOM    995  H   ILE    97     -19.902 -11.996 -17.104  1.00                 H  
+ATOM    996  CB  ILE    97     -21.321 -11.719 -14.680  1.00                 C  
+ATOM    997  CD1 ILE    97     -23.632 -10.842 -15.302  1.00                 C  
+ATOM    998  CG1 ILE    97     -22.716 -12.043 -15.218  1.00                 C  
+ATOM    999  CG2 ILE    97     -21.376 -11.132 -13.278  1.00                 C  
+ATOM   1000  N   TRP    98     -18.891  -9.459 -14.503  1.00                 N  
+ATOM   1001  CA  TRP    98     -17.525  -9.062 -14.416  1.00                 C  
+ATOM   1002  C   TRP    98     -17.168  -8.469 -13.125  1.00                 C  
+ATOM   1003  O   TRP    98     -17.756  -7.474 -12.719  1.00                 O  
+ATOM   1004  H   TRP    98     -19.520  -9.011 -14.041  1.00                 H  
+ATOM   1005  CB  TRP    98     -17.185  -8.065 -15.525  1.00                 C  
+ATOM   1006 1HB  TRP    98     -17.455  -7.100 -15.264  1.00                 H  
+ATOM   1007 2HB  TRP    98     -17.201  -8.428 -16.457  1.00                 H  
+ATOM   1008  CG  TRP    98     -15.738  -7.678 -15.562  1.00                 C  
+ATOM   1009  CD1 TRP    98     -14.682  -8.413 -15.106  1.00                 C  
+ATOM   1010  HE1 TRP    98     -12.655  -8.043 -15.075  1.00                 H  
+ATOM   1011  NE1 TRP    98     -13.507  -7.731 -15.310  1.00                 N  
+ATOM   1012  CD2 TRP    98     -15.188  -6.462 -16.083  1.00                 C  
+ATOM   1013  CE2 TRP    98     -13.793  -6.529 -15.909  1.00                 C  
+ATOM   1014  CH2 TRP    98     -13.505  -4.401 -16.890  1.00                 C  
+ATOM   1015  CZ2 TRP    98     -12.940  -5.502 -16.310  1.00                 C  
+ATOM   1016  CE3 TRP    98     -15.738  -5.324 -16.679  1.00                 C  
+ATOM   1017  CZ3 TRP    98     -14.889  -4.308 -17.075  1.00                 C  
+ATOM   1018  N   ALA    99     -16.198  -9.048 -12.411  1.00                 N  
+ATOM   1019  CA  ALA    99     -15.742  -8.165 -11.410  1.00                 C  
+ATOM   1020  C   ALA    99     -14.372  -8.580 -10.867  1.00                 C  
+ATOM   1021  O   ALA    99     -14.316  -9.085  -9.758  1.00                 O  
+ATOM   1022  H   ALA    99     -15.833  -9.867 -12.489  1.00                 H  
+ATOM   1023  CB  ALA    99     -16.746  -8.092 -10.270  1.00                 C  
+ATOM   1024  N   GLU   100     -13.258  -8.118 -11.501  1.00                 N  
+ATOM   1025  CA  GLU   100     -11.795  -8.328 -11.428  1.00                 C  
+ATOM   1026  C   GLU   100     -11.156  -8.579 -10.050  1.00                 C  
+ATOM   1027  O   GLU   100      -9.948  -8.423  -9.876  1.00                 O  
+ATOM   1028  H   GLU   100     -13.601  -7.542 -12.102  1.00                 H  
+ATOM   1029  CB  GLU   100     -11.051  -7.131 -12.025  1.00                 C  
+ATOM   1030  CD  GLU   100     -10.515  -5.755 -14.074  1.00                 C  
+ATOM   1031  CG  GLU   100     -11.246  -6.964 -13.523  1.00                 C  
+ATOM   1032  OE1 GLU   100      -9.310  -5.607 -13.783  1.00                 O  
+ATOM   1033  OE2 GLU   100     -11.148  -4.957 -14.797  1.00                 O  
+ATOM   1034  N   ILE   101     -11.846  -9.009  -8.991  1.00                 N  
+ATOM   1035  CA  ILE   101     -11.012  -9.299  -7.854  1.00                 C  
+ATOM   1036  C   ILE   101     -11.588 -10.547  -7.200  1.00                 C  
+ATOM   1037  O   ILE   101     -12.786 -10.666  -6.929  1.00                 O  
+ATOM   1038  H   ILE   101     -12.737  -9.124  -8.937  1.00                 H  
+ATOM   1039  CB  ILE   101     -10.948  -8.106  -6.882  1.00                 C  
+ATOM   1040  CD1 ILE   101     -10.484  -5.602  -6.771  1.00                 C  
+ATOM   1041  CG1 ILE   101     -10.392  -6.870  -7.592  1.00                 C  
+ATOM   1042  CG2 ILE   101     -10.132  -8.466  -5.650  1.00                 C  
+ATOM   1043  N   SER   102     -10.692 -11.505  -6.907  1.00                 N  
+ATOM   1044  CA  SER   102     -10.935 -12.839  -6.458  1.00                 C  
+ATOM   1045  C   SER   102     -11.600 -12.964  -5.117  1.00                 C  
+ATOM   1046  O   SER   102     -12.337 -13.912  -4.818  1.00                 O  
+ATOM   1047  H   SER   102      -9.848 -11.217  -7.026  1.00                 H  
+ATOM   1048  CB  SER   102      -9.628 -13.631  -6.400  1.00                 C  
+ATOM   1049  HG  SER   102      -8.060 -13.559  -5.392  1.00                 H  
+ATOM   1050  OG  SER   102      -8.761 -13.115  -5.405  1.00                 O  
+ATOM   1051  N   TYR   103     -11.397 -11.962  -4.281  1.00                 N  
+ATOM   1052  CA  TYR   103     -11.822 -12.032  -2.938  1.00                 C  
+ATOM   1053  C   TYR   103     -13.326 -12.216  -2.943  1.00                 C  
+ATOM   1054  O   TYR   103     -13.922 -12.771  -2.014  1.00                 O  
+ATOM   1055  H   TYR   103     -10.979 -11.224  -4.583  1.00                 H  
+ATOM   1056  CB  TYR   103     -11.402 -10.773  -2.177  1.00                 C  
+ATOM   1057  CG  TYR   103     -12.219  -9.548  -2.521  1.00                 C  
+ATOM   1058  HH  TYR   103     -14.125  -5.783  -4.092  1.00                 H  
+ATOM   1059  OH  TYR   103     -14.476  -6.183  -3.455  1.00                 O  
+ATOM   1060  CZ  TYR   103     -13.728  -7.296  -3.147  1.00                 C  
+ATOM   1061  CD1 TYR   103     -13.369  -9.237  -1.807  1.00                 C  
+ATOM   1062  CE1 TYR   103     -14.122  -8.119  -2.115  1.00                 C  
+ATOM   1063  CD2 TYR   103     -11.837  -8.707  -3.558  1.00                 C  
+ATOM   1064  CE2 TYR   103     -12.577  -7.585  -3.880  1.00                 C  
+ATOM   1065  N   PHE   104     -13.990 -11.720  -4.006  1.00                 N  
+ATOM   1066  CA  PHE   104     -15.393 -11.952  -4.141  1.00                 C  
+ATOM   1067  C   PHE   104     -15.723 -13.419  -4.216  1.00                 C  
+ATOM   1068  O   PHE   104     -16.682 -13.851  -3.579  1.00                 O  
+ATOM   1069  H   PHE   104     -13.551 -11.243  -4.630  1.00                 H  
+ATOM   1070  CB  PHE   104     -15.936 -11.243  -5.383  1.00                 C  
+ATOM   1071  CG  PHE   104     -16.064  -9.755  -5.224  1.00                 C  
+ATOM   1072  CZ  PHE   104     -16.301  -7.001  -4.924  1.00                 C  
+ATOM   1073  CD1 PHE   104     -15.801  -8.906  -6.285  1.00                 C  
+ATOM   1074  CE1 PHE   104     -15.918  -7.537  -6.139  1.00                 C  
+ATOM   1075  CD2 PHE   104     -16.446  -9.203  -4.014  1.00                 C  
+ATOM   1076  CE2 PHE   104     -16.563  -7.834  -3.868  1.00                 C  
+ATOM   1077  N   ALA   105     -14.961 -14.231  -4.980  1.00                 N  
+ATOM   1078  CA  ALA   105     -15.282 -15.632  -5.093  1.00                 C  
+ATOM   1079  C   ALA   105     -15.157 -16.278  -3.746  1.00                 C  
+ATOM   1080  O   ALA   105     -16.012 -17.075  -3.373  1.00                 O  
+ATOM   1081  H   ALA   105     -14.251 -13.895  -5.419  1.00                 H  
+ATOM   1082  CB  ALA   105     -14.372 -16.304  -6.110  1.00                 C  
+ATOM   1083  N   ARG   106     -14.103 -15.962  -2.964  1.00                 N  
+ATOM   1084  CA  ARG   106     -13.980 -16.616  -1.690  1.00                 C  
+ATOM   1085  C   ARG   106     -15.096 -16.188  -0.808  1.00                 C  
+ATOM   1086  O   ARG   106     -15.643 -17.002  -0.070  1.00                 O  
+ATOM   1087  H   ARG   106     -13.486 -15.359  -3.222  1.00                 H  
+ATOM   1088  CB  ARG   106     -12.625 -16.300  -1.054  1.00                 C  
+ATOM   1089  CD  ARG   106     -12.386 -18.457   0.206  1.00                 C  
+ATOM   1090  HE  ARG   106     -12.926 -19.307   1.940  1.00                 H  
+ATOM   1091  NE  ARG   106     -12.211 -19.091   1.511  1.00                 N  
+ATOM   1092  CG  ARG   106     -12.414 -16.941   0.308  1.00                 C  
+ATOM   1093  CZ  ARG   106     -11.031 -19.347   2.065  1.00                 C  
+ATOM   1094 1HH1 ARG   106     -11.694 -20.136   3.670  1.00                 H  
+ATOM   1095 2HH1 ARG   106     -10.206 -20.093   3.615  1.00                 H  
+ATOM   1096  NH1 ARG   106     -10.970 -19.927   3.256  1.00                 N  
+ATOM   1097 1HH2 ARG   106      -9.954 -18.649   0.654  1.00                 H  
+ATOM   1098 2HH2 ARG   106      -9.151 -19.191   1.785  1.00                 H  
+ATOM   1099  NH2 ARG   106      -9.915 -19.025   1.426  1.00                 N  
+ATOM   1100  N   PHE   107     -15.452 -14.888  -0.848  1.00                 N  
+ATOM   1101  CA  PHE   107     -16.489 -14.433   0.024  1.00                 C  
+ATOM   1102  C   PHE   107     -17.722 -15.227  -0.275  1.00                 C  
+ATOM   1103  O   PHE   107     -18.424 -15.678   0.626  1.00                 O  
+ATOM   1104  H   PHE   107     -15.050 -14.310  -1.409  1.00                 H  
+ATOM   1105  CB  PHE   107     -16.722 -12.932  -0.158  1.00                 C  
+ATOM   1106  CG  PHE   107     -15.650 -12.074   0.453  1.00                 C  
+ATOM   1107  CZ  PHE   107     -13.671 -10.481   1.579  1.00                 C  
+ATOM   1108  CD1 PHE   107     -14.675 -12.631   1.262  1.00                 C  
+ATOM   1109  CE1 PHE   107     -13.689 -11.841   1.823  1.00                 C  
+ATOM   1110  CD2 PHE   107     -15.618 -10.711   0.218  1.00                 C  
+ATOM   1111  CE2 PHE   107     -14.632  -9.922   0.780  1.00                 C  
+ATOM   1112  N   TYR   108     -18.020 -15.442  -1.561  1.00                 N  
+ATOM   1113  CA  TYR   108     -19.247 -16.094  -1.888  1.00                 C  
+ATOM   1114  C   TYR   108     -19.211 -17.539  -1.445  1.00                 C  
+ATOM   1115  O   TYR   108     -20.204 -18.061  -0.941  1.00                 O  
+ATOM   1116  H   TYR   108     -17.460 -15.182  -2.216  1.00                 H  
+ATOM   1117  CB  TYR   108     -19.519 -16.002  -3.391  1.00                 C  
+ATOM   1118  CG  TYR   108     -20.825 -16.633  -3.817  1.00                 C  
+ATOM   1119  HH  TYR   108     -25.042 -18.042  -4.520  1.00                 H  
+ATOM   1120  OH  TYR   108     -24.426 -18.358  -4.977  1.00                 O  
+ATOM   1121  CZ  TYR   108     -23.234 -17.788  -4.595  1.00                 C  
+ATOM   1122  CD1 TYR   108     -22.020 -16.276  -3.206  1.00                 C  
+ATOM   1123  CE1 TYR   108     -23.219 -16.847  -3.589  1.00                 C  
+ATOM   1124  CD2 TYR   108     -20.859 -17.584  -4.829  1.00                 C  
+ATOM   1125  CE2 TYR   108     -22.048 -18.166  -5.225  1.00                 C  
+ATOM   1126  N   HIS   109     -18.077 -18.252  -1.621  1.00                 N  
+ATOM   1127  CA  HIS   109     -18.063 -19.626  -1.200  1.00                 C  
+ATOM   1128  C   HIS   109     -18.125 -19.734   0.289  1.00                 C  
+ATOM   1129  O   HIS   109     -18.675 -20.711   0.794  1.00                 O  
+ATOM   1130  H   HIS   109     -17.342 -17.887  -1.991  1.00                 H  
+ATOM   1131  CB  HIS   109     -16.813 -20.335  -1.726  1.00                 C  
+ATOM   1132  CG  HIS   109     -16.820 -20.551  -3.207  1.00                 C  
+ATOM   1133  ND1 HIS   109     -15.698 -20.936  -3.909  1.00                 N  
+ATOM   1134  CE1 HIS   109     -16.013 -21.049  -5.211  1.00                 C  
+ATOM   1135  CD2 HIS   109     -17.815 -20.457  -4.266  1.00                 C  
+ATOM   1136  HE2 HIS   109     -17.716 -20.775  -6.255  1.00                 H  
+ATOM   1137  NE2 HIS   109     -17.282 -20.763  -5.433  1.00                 N  
+ATOM   1138  N   ASP   110     -17.555 -18.767   1.042  1.00                 N  
+ATOM   1139  CA  ASP   110     -17.583 -18.915   2.472  1.00                 C  
+ATOM   1140  C   ASP   110     -19.021 -19.001   2.900  1.00                 C  
+ATOM   1141  O   ASP   110     -19.362 -19.846   3.723  1.00                 O  
+ATOM   1142  H   ASP   110     -17.165 -18.045   0.672  1.00                 H  
+ATOM   1143  CB  ASP   110     -16.859 -17.748   3.146  1.00                 C  
+ATOM   1144  CG  ASP   110     -15.356 -17.809   2.960  1.00                 C  
+ATOM   1145  OD1 ASP   110     -14.850 -18.878   2.557  1.00                 O  
+ATOM   1146  OD2 ASP   110     -14.683 -16.789   3.218  1.00                 O  
+ATOM   1147  N   LEU   111     -19.935 -18.165   2.366  1.00                 N  
+ATOM   1148  CA  LEU   111     -21.297 -18.435   2.744  1.00                 C  
+ATOM   1149  C   LEU   111     -21.985 -18.848   1.488  1.00                 C  
+ATOM   1150  O   LEU   111     -22.559 -18.037   0.762  1.00                 O  
+ATOM   1151  H   LEU   111     -19.749 -17.480   1.813  1.00                 H  
+ATOM   1152  CB  LEU   111     -21.927 -17.202   3.394  1.00                 C  
+ATOM   1153  CG  LEU   111     -21.240 -16.674   4.655  1.00                 C  
+ATOM   1154  CD1 LEU   111     -21.899 -15.387   5.128  1.00                 C  
+ATOM   1155  CD2 LEU   111     -21.266 -17.719   5.759  1.00                 C  
+ATOM   1156  N   GLY   112     -21.953 -20.170   1.258  1.00                 N  
+ATOM   1157  CA  GLY   112     -22.455 -20.881   0.118  1.00                 C  
+ATOM   1158  C   GLY   112     -21.254 -21.546  -0.482  1.00                 C  
+ATOM   1159  O   GLY   112     -20.695 -21.057  -1.463  1.00                 O  
+ATOM   1160  H   GLY   112     -21.559 -20.619   1.931  1.00                 H  
+ATOM   1161  N   GLU   113     -20.785 -22.637   0.177  1.00                 N  
+ATOM   1162  CA  GLU   113     -19.719 -23.484  -0.299  1.00                 C  
+ATOM   1163  C   GLU   113     -20.234 -24.449  -1.314  1.00                 C  
+ATOM   1164  O   GLU   113     -19.499 -24.846  -2.214  1.00                 O  
+ATOM   1165  H   GLU   113     -21.187 -22.818   0.962  1.00                 H  
+ATOM   1166  CB  GLU   113     -19.067 -24.231   0.866  1.00                 C  
+ATOM   1167  CD  GLU   113     -16.723 -24.295  -0.073  1.00                 C  
+ATOM   1168  CG  GLU   113     -17.889 -25.103   0.463  1.00                 C  
+ATOM   1169  OE1 GLU   113     -16.650 -23.086   0.230  1.00                 O  
+ATOM   1170  OE2 GLU   113     -15.884 -24.872  -0.795  1.00                 O  
+ATOM   1171  N   ASN   114     -21.521 -24.835  -1.193  1.00                 N  
+ATOM   1172  CA  ASN   114     -22.148 -25.825  -2.027  1.00                 C  
+ATOM   1173  C   ASN   114     -22.092 -25.373  -3.457  1.00                 C  
+ATOM   1174  O   ASN   114     -21.949 -26.203  -4.352  1.00                 O  
+ATOM   1175  H   ASN   114     -21.993 -24.431  -0.542  1.00                 H  
+ATOM   1176  CB  ASN   114     -23.586 -26.077  -1.570  1.00                 C  
+ATOM   1177  CG  ASN   114     -23.657 -26.873  -0.282  1.00                 C  
+ATOM   1178  OD1 ASN   114     -22.699 -27.547   0.096  1.00                 O  
+ATOM   1179 1HD2 ASN   114     -24.891 -27.251   1.169  1.00                 H  
+ATOM   1180 2HD2 ASN   114     -25.473 -26.293   0.085  1.00                 H  
+ATOM   1181  ND2 ASN   114     -24.796 -26.797   0.397  1.00                 N  
+ATOM   1182  N   LYS   115     -22.201 -24.050  -3.711  1.00                 N  
+ATOM   1183  CA  LYS   115     -22.259 -23.515  -5.049  1.00                 C  
+ATOM   1184  C   LYS   115     -20.904 -23.441  -5.695  1.00                 C  
+ATOM   1185  O   LYS   115     -20.683 -22.594  -6.559  1.00                 O  
+ATOM   1186  H   LYS   115     -22.237 -23.496  -3.003  1.00                 H  
+ATOM   1187  CB  LYS   115     -22.895 -22.124  -5.043  1.00                 C  
+ATOM   1188  CD  LYS   115     -24.938 -20.707  -4.693  1.00                 C  
+ATOM   1189  CE  LYS   115     -26.413 -20.701  -4.325  1.00                 C  
+ATOM   1190  CG  LYS   115     -24.368 -22.117  -4.667  1.00                 C  
+ATOM   1191 1HZ  LYS   115     -27.840 -19.357  -4.101  1.00                 H  
+ATOM   1192 2HZ  LYS   115     -26.892 -18.964  -5.130  1.00                 H  
+ATOM   1193 3HZ  LYS   115     -26.541 -18.825  -3.726  1.00                 H  
+ATOM   1194  NZ  LYS   115     -26.978 -19.324  -4.320  1.00                 N  
+ATOM   1195  N   LYS   116     -19.960 -24.320  -5.328  1.00                 N  
+ATOM   1196  CA  LYS   116     -18.650 -24.276  -5.912  1.00                 C  
+ATOM   1197  C   LYS   116     -18.698 -24.747  -7.339  1.00                 C  
+ATOM   1198  O   LYS   116     -18.050 -24.162  -8.205  1.00                 O  
+ATOM   1199  H   LYS   116     -20.156 -24.942  -4.708  1.00                 H  
+ATOM   1200  CB  LYS   116     -17.672 -25.127  -5.099  1.00                 C  
+ATOM   1201  CD  LYS   116     -15.306 -25.860  -4.695  1.00                 C  
+ATOM   1202  CE  LYS   116     -13.875 -25.820  -5.206  1.00                 C  
+ATOM   1203  CG  LYS   116     -16.241 -25.087  -5.610  1.00                 C  
+ATOM   1204 1HZ  LYS   116     -12.121 -26.530  -4.647  1.00                 H  
+ATOM   1205 2HZ  LYS   116     -13.203 -27.425  -4.276  1.00                 H  
+ATOM   1206 3HZ  LYS   116     -12.962 -26.219  -3.503  1.00                 H  
+ATOM   1207  NZ  LYS   116     -12.947 -26.574  -4.319  1.00                 N  
+ATOM   1208  N   LEU   117     -19.481 -25.814  -7.619  1.00                 N  
+ATOM   1209  CA  LEU   117     -19.559 -26.407  -8.930  1.00                 C  
+ATOM   1210  C   LEU   117     -20.152 -25.402  -9.866  1.00                 C  
+ATOM   1211  O   LEU   117     -19.679 -25.238 -10.989  1.00                 O  
+ATOM   1212  H   LEU   117     -19.967 -26.154  -6.942  1.00                 H  
+ATOM   1213  CB  LEU   117     -20.386 -27.693  -8.888  1.00                 C  
+ATOM   1214  CG  LEU   117     -19.762 -28.877  -8.147  1.00                 C  
+ATOM   1215  CD1 LEU   117     -20.757 -30.021  -8.025  1.00                 C  
+ATOM   1216  CD2 LEU   117     -18.499 -29.347  -8.852  1.00                 C  
+ATOM   1217  N   GLN   118     -21.204 -24.692  -9.418  1.00                 N  
+ATOM   1218  CA  GLN   118     -21.867 -23.733 -10.251  1.00                 C  
+ATOM   1219  C   GLN   118     -20.900 -22.637 -10.583  1.00                 C  
+ATOM   1220  O   GLN   118     -20.837 -22.190 -11.726  1.00                 O  
+ATOM   1221  H   GLN   118     -21.489 -24.830  -8.576  1.00                 H  
+ATOM   1222  CB  GLN   118     -23.113 -23.186  -9.551  1.00                 C  
+ATOM   1223  CD  GLN   118     -24.547 -22.926 -11.614  1.00                 C  
+ATOM   1224  CG  GLN   118     -23.940 -22.240 -10.406  1.00                 C  
+ATOM   1225  OE1 GLN   118     -25.235 -23.939 -11.484  1.00                 O  
+ATOM   1226 1HE2 GLN   118     -24.629 -22.744 -13.545  1.00                 H  
+ATOM   1227 2HE2 GLN   118     -23.785 -21.635 -12.847  1.00                 H  
+ATOM   1228  NE2 GLN   118     -24.293 -22.376 -12.796  1.00                 N  
+ATOM   1229  N   MET   119     -20.111 -22.181  -9.588  1.00                 N  
+ATOM   1230  CA  MET   119     -19.236 -21.065  -9.793  1.00                 C  
+ATOM   1231  C   MET   119     -18.205 -21.448 -10.812  1.00                 C  
+ATOM   1232  O   MET   119     -17.884 -20.662 -11.702  1.00                 O  
+ATOM   1233  H   MET   119     -20.140 -22.589  -8.786  1.00                 H  
+ATOM   1234  CB  MET   119     -18.588 -20.643  -8.473  1.00                 C  
+ATOM   1235  SD  MET   119     -20.281 -18.480  -8.109  1.00                 S  
+ATOM   1236  CE  MET   119     -18.846 -17.408  -8.143  1.00                 C  
+ATOM   1237  CG  MET   119     -19.551 -20.006  -7.485  1.00                 C  
+ATOM   1238  N   LYS   120     -17.670 -22.682 -10.721  1.00                 N  
+ATOM   1239  CA  LYS   120     -16.634 -23.085 -11.622  1.00                 C  
+ATOM   1240  C   LYS   120     -17.175 -23.186 -13.013  1.00                 C  
+ATOM   1241  O   LYS   120     -16.492 -22.849 -13.979  1.00                 O  
+ATOM   1242  H   LYS   120     -17.966 -23.253 -10.091  1.00                 H  
+ATOM   1243  CB  LYS   120     -16.029 -24.419 -11.180  1.00                 C  
+ATOM   1244  CD  LYS   120     -14.643 -25.693  -9.521  1.00                 C  
+ATOM   1245  CE  LYS   120     -13.814 -25.608  -8.249  1.00                 C  
+ATOM   1246  CG  LYS   120     -15.202 -24.334  -9.907  1.00                 C  
+ATOM   1247 1HZ  LYS   120     -12.816 -26.854  -7.089  1.00                 H  
+ATOM   1248 2HZ  LYS   120     -12.780 -27.273  -8.480  1.00                 H  
+ATOM   1249 3HZ  LYS   120     -13.977 -27.492  -7.685  1.00                 H  
+ATOM   1250  NZ  LYS   120     -13.295 -26.940  -7.834  1.00                 N  
+ATOM   1251  N   SER   121     -18.425 -23.654 -13.163  1.00                 N  
+ATOM   1252  CA  SER   121     -18.982 -23.795 -14.476  1.00                 C  
+ATOM   1253  C   SER   121     -19.162 -22.451 -15.106  1.00                 C  
+ATOM   1254  O   SER   121     -18.933 -22.292 -16.304  1.00                 O  
+ATOM   1255  H   SER   121     -18.913 -23.879 -12.441  1.00                 H  
+ATOM   1256  CB  SER   121     -20.315 -24.544 -14.415  1.00                 C  
+ATOM   1257  HG  SER   121     -21.022 -23.663 -12.931  1.00                 H  
+ATOM   1258  OG  SER   121     -21.288 -23.797 -13.706  1.00                 O  
+ATOM   1259  N   ILE   122     -19.582 -21.448 -14.312  1.00                 N  
+ATOM   1260  CA  ILE   122     -19.845 -20.138 -14.827  1.00                 C  
+ATOM   1261  C   ILE   122     -18.572 -19.568 -15.349  1.00                 C  
+ATOM   1262  O   ILE   122     -18.537 -18.991 -16.435  1.00                 O  
+ATOM   1263  H   ILE   122     -19.697 -21.618 -13.436  1.00                 H  
+ATOM   1264  CB  ILE   122     -20.466 -19.224 -13.754  1.00                 C  
+ATOM   1265  CD1 ILE   122     -22.846 -19.798 -14.467  1.00                 C  
+ATOM   1266  CG1 ILE   122     -21.841 -19.750 -13.337  1.00                 C  
+ATOM   1267  CG2 ILE   122     -20.536 -17.789 -14.253  1.00                 C  
+ATOM   1268  N   VAL   123     -17.481 -19.736 -14.588  1.00                 N  
+ATOM   1269  CA  VAL   123     -16.225 -19.185 -14.967  1.00                 C  
+ATOM   1270  C   VAL   123     -15.707 -19.858 -16.215  1.00                 C  
+ATOM   1271  O   VAL   123     -15.169 -19.189 -17.095  1.00                 O  
+ATOM   1272  H   VAL   123     -17.554 -20.208 -13.825  1.00                 H  
+ATOM   1273  CB  VAL   123     -15.190 -19.305 -13.833  1.00                 C  
+ATOM   1274  CG1 VAL   123     -13.815 -18.874 -14.318  1.00                 C  
+ATOM   1275  CG2 VAL   123     -15.619 -18.477 -12.631  1.00                 C  
+ATOM   1276  N   LYS   124     -15.876 -21.192 -16.354  1.00                 N  
+ATOM   1277  CA  LYS   124     -15.387 -21.871 -17.528  1.00                 C  
+ATOM   1278  C   LYS   124     -16.128 -21.390 -18.742  1.00                 C  
+ATOM   1279  O   LYS   124     -15.535 -21.179 -19.799  1.00                 O  
+ATOM   1280  H   LYS   124     -16.297 -21.656 -15.708  1.00                 H  
+ATOM   1281  CB  LYS   124     -15.531 -23.386 -17.370  1.00                 C  
+ATOM   1282  CD  LYS   124     -15.096 -25.681 -18.287  1.00                 C  
+ATOM   1283  CE  LYS   124     -14.578 -26.482 -19.471  1.00                 C  
+ATOM   1284  CG  LYS   124     -14.993 -24.187 -18.544  1.00                 C  
+ATOM   1285 1HZ  LYS   124     -14.364 -28.386 -19.944  1.00                 H  
+ATOM   1286 2HZ  LYS   124     -15.526 -28.172 -19.099  1.00                 H  
+ATOM   1287 3HZ  LYS   124     -14.194 -28.167 -18.518  1.00                 H  
+ATOM   1288  NZ  LYS   124     -14.676 -27.949 -19.234  1.00                 N  
+ATOM   1289  N   ASN   125     -17.452 -21.194 -18.614  1.00                 N  
+ATOM   1290  CA  ASN   125     -18.292 -20.778 -19.700  1.00                 C  
+ATOM   1291  C   ASN   125     -17.933 -19.352 -20.076  1.00                 C  
+ATOM   1292  O   ASN   125     -18.130 -18.940 -21.217  1.00                 O  
+ATOM   1293  H   ASN   125     -17.807 -21.336 -17.799  1.00                 H  
+ATOM   1294  CB  ASN   125     -19.767 -20.914 -19.318  1.00                 C  
+ATOM   1295  CG  ASN   125     -20.230 -22.357 -19.283  1.00                 C  
+ATOM   1296  OD1 ASN   125     -19.623 -23.229 -19.905  1.00                 O  
+ATOM   1297 1HD2 ASN   125     -21.625 -23.454 -18.496  1.00                 H  
+ATOM   1298 2HD2 ASN   125     -21.723 -21.947 -18.111  1.00                 H  
+ATOM   1299  ND2 ASN   125     -21.308 -22.613 -18.552  1.00                 N  
+ATOM   1300  N   GLY   126     -17.427 -18.525 -19.133  1.00                 N  
+ATOM   1301  CA  GLY   126     -17.052 -17.183 -19.515  1.00                 C  
+ATOM   1302  C   GLY   126     -18.087 -16.201 -19.048  1.00                 C  
+ATOM   1303  O   GLY   126     -17.961 -14.989 -19.228  1.00                 O  
+ATOM   1304  H   GLY   126     -17.322 -18.796 -18.281  1.00                 H  
+ATOM   1305  N   GLN   127     -19.155 -16.722 -18.436  1.00                 N  
+ATOM   1306  CA  GLN   127     -20.253 -15.948 -17.963  1.00                 C  
+ATOM   1307  C   GLN   127     -19.873 -15.138 -16.768  1.00                 C  
+ATOM   1308  O   GLN   127     -20.539 -14.141 -16.502  1.00                 O  
+ATOM   1309  H   GLN   127     -19.155 -17.616 -18.329  1.00                 H  
+ATOM   1310  CB  GLN   127     -21.440 -16.852 -17.624  1.00                 C  
+ATOM   1311  CD  GLN   127     -23.232 -18.425 -18.457  1.00                 C  
+ATOM   1312  CG  GLN   127     -22.089 -17.503 -18.835  1.00                 C  
+ATOM   1313  OE1 GLN   127     -23.074 -19.316 -17.623  1.00                 O  
+ATOM   1314 1HE2 GLN   127     -25.101 -18.732 -18.885  1.00                 H  
+ATOM   1315 2HE2 GLN   127     -24.463 -17.550 -19.677  1.00                 H  
+ATOM   1316  NE2 GLN   127     -24.390 -18.213 -19.073  1.00                 N  
+ATOM   1317  N   LEU   128     -18.876 -15.574 -15.958  1.00                 N  
+ATOM   1318  CA  LEU   128     -18.474 -14.704 -14.886  1.00                 C  
+ATOM   1319  C   LEU   128     -17.023 -14.438 -14.960  1.00                 C  
+ATOM   1320  O   LEU   128     -16.188 -15.321 -14.837  1.00                 O  
+ATOM   1321  H   LEU   128     -18.470 -16.369 -16.068  1.00                 H  
+ATOM   1322  CB  LEU   128     -18.839 -15.317 -13.533  1.00                 C  
+ATOM   1323  CG  LEU   128     -20.321 -15.287 -13.152  1.00                 C  
+ATOM   1324  CD1 LEU   128     -21.105 -16.307 -13.964  1.00                 C  
+ATOM   1325  CD2 LEU   128     -20.499 -15.545 -11.664  1.00                 C  
+ATOM   1326  N   GLU   129     -16.685 -13.150 -15.155  1.00                 N  
+ATOM   1327  CA  GLU   129     -15.365 -12.583 -15.099  1.00                 C  
+ATOM   1328  C   GLU   129     -15.304 -12.248 -13.678  1.00                 C  
+ATOM   1329  O   GLU   129     -14.703 -11.257 -13.277  1.00                 O  
+ATOM   1330  H   GLU   129     -17.393 -12.625 -15.337  1.00                 H  
+ATOM   1331  CB  GLU   129     -15.245 -11.407 -16.070  1.00                 C  
+ATOM   1332  CD  GLU   129     -14.320 -12.713 -18.024  1.00                 C  
+ATOM   1333  CG  GLU   129     -15.416 -11.789 -17.532  1.00                 C  
+ATOM   1334  OE1 GLU   129     -13.159 -12.537 -17.600  1.00                 O  
+ATOM   1335  OE2 GLU   129     -14.623 -13.614 -18.834  1.00                 O  
+ATOM   1336  N   PHE   130     -15.759 -13.216 -12.852  1.00                 N  
+ATOM   1337  CA  PHE   130     -15.834 -13.147 -11.440  1.00                 C  
+ATOM   1338  C   PHE   130     -14.440 -13.562 -11.045  1.00                 C  
+ATOM   1339  O   PHE   130     -14.159 -14.032  -9.947  1.00                 O  
+ATOM   1340  H   PHE   130     -16.031 -13.959 -13.281  1.00                 H  
+ATOM   1341  CB  PHE   130     -16.952 -14.052 -10.918  1.00                 C  
+ATOM   1342  CG  PHE   130     -17.127 -14.001  -9.427  1.00                 C  
+ATOM   1343  CZ  PHE   130     -17.450 -13.912  -6.668  1.00                 C  
+ATOM   1344  CD1 PHE   130     -17.316 -12.792  -8.779  1.00                 C  
+ATOM   1345  CE1 PHE   130     -17.477 -12.745  -7.407  1.00                 C  
+ATOM   1346  CD2 PHE   130     -17.102 -15.160  -8.673  1.00                 C  
+ATOM   1347  CE2 PHE   130     -17.263 -15.113  -7.301  1.00                 C  
+ATOM   1348  N   VAL   131     -13.492 -13.214 -11.931  1.00                 N  
+ATOM   1349  CA  VAL   131     -12.149 -13.545 -11.864  1.00                 C  
+ATOM   1350  C   VAL   131     -11.318 -12.318 -12.172  1.00                 C  
+ATOM   1351  O   VAL   131     -11.725 -11.338 -12.795  1.00                 O  
+ATOM   1352  H   VAL   131     -13.800 -12.720 -12.617  1.00                 H  
+ATOM   1353  CB  VAL   131     -11.803 -14.696 -12.826  1.00                 C  
+ATOM   1354  CG1 VAL   131     -12.588 -15.947 -12.465  1.00                 C  
+ATOM   1355  CG2 VAL   131     -12.077 -14.288 -14.266  1.00                 C  
+ATOM   1356  N   THR   132     -10.065 -12.499 -11.771  1.00                 N  
+ATOM   1357  CA  THR   132      -8.846 -11.848 -11.502  1.00                 C  
+ATOM   1358  C   THR   132      -8.368 -10.554 -12.002  1.00                 C  
+ATOM   1359  O   THR   132      -9.050  -9.571 -11.851  1.00                 O  
+ATOM   1360  H   THR   132     -10.133 -13.390 -11.661  1.00                 H  
+ATOM   1361  CB  THR   132      -7.641 -12.723 -11.894  1.00                 C  
+ATOM   1362  HG1 THR   132      -7.625 -13.762 -10.328  1.00                 H  
+ATOM   1363  OG1 THR   132      -7.664 -13.940 -11.138  1.00                 O  
+ATOM   1364  CG2 THR   132      -6.337 -11.995 -11.603  1.00                 C  
+ATOM   1365  N   GLY   133      -7.126 -10.485 -12.523  1.00                 N  
+ATOM   1366  CA  GLY   133      -6.488  -9.199 -12.534  1.00                 C  
+ATOM   1367  C   GLY   133      -5.941  -9.222 -11.137  1.00                 C  
+ATOM   1368  O   GLY   133      -4.922  -9.872 -10.916  1.00                 O  
+ATOM   1369  H   GLY   133      -6.697 -11.203 -12.855  1.00                 H  
+ATOM   1370  N   GLY   134      -6.606  -8.573 -10.149  1.00                 N  
+ATOM   1371  CA  GLY   134      -6.087  -8.624  -8.805  1.00                 C  
+ATOM   1372  C   GLY   134      -7.099  -9.076  -7.807  1.00                 C  
+ATOM   1373  O   GLY   134      -8.296  -8.944  -8.021  1.00                 O  
+ATOM   1374  H   GLY   134      -7.361  -8.115 -10.323  1.00                 H  
+ATOM   1375  N   TRP   135      -6.585  -9.518  -6.636  1.00                 N  
+ATOM   1376  CA  TRP   135      -7.248 -10.128  -5.498  1.00                 C  
+ATOM   1377  C   TRP   135      -8.230  -9.177  -4.914  1.00                 C  
+ATOM   1378  O   TRP   135      -9.343  -9.594  -4.608  1.00                 O  
+ATOM   1379  H   TRP   135      -5.695  -9.387  -6.621  1.00                 H  
+ATOM   1380  CB  TRP   135      -6.222 -10.559  -4.448  1.00                 C  
+ATOM   1381 1HB  TRP   135      -5.910  -9.759  -3.871  1.00                 H  
+ATOM   1382 2HB  TRP   135      -5.649 -11.341  -4.695  1.00                 H  
+ATOM   1383  CG  TRP   135      -6.832 -11.219  -3.249  1.00                 C  
+ATOM   1384  CD1 TRP   135      -7.111 -12.546  -3.097  1.00                 C  
+ATOM   1385  HE1 TRP   135      -7.937 -13.614  -1.540  1.00                 H  
+ATOM   1386  NE1 TRP   135      -7.666 -12.776  -1.862  1.00                 N  
+ATOM   1387  CD2 TRP   135      -7.239 -10.581  -2.032  1.00                 C  
+ATOM   1388  CE2 TRP   135      -7.754 -11.582  -1.190  1.00                 C  
+ATOM   1389  CH2 TRP   135      -8.211 -10.007   0.508  1.00                 C  
+ATOM   1390  CZ2 TRP   135      -8.245 -11.306   0.085  1.00                 C  
+ATOM   1391  CE3 TRP   135      -7.217  -9.260  -1.574  1.00                 C  
+ATOM   1392  CZ3 TRP   135      -7.704  -8.991  -0.309  1.00                 C  
+ATOM   1393  N   VAL   136      -7.860  -7.889  -4.769  1.00                 N  
+ATOM   1394  CA  VAL   136      -8.735  -6.879  -4.212  1.00                 C  
+ATOM   1395  C   VAL   136      -8.355  -5.626  -4.906  1.00                 C  
+ATOM   1396  O   VAL   136      -7.313  -5.611  -5.560  1.00                 O  
+ATOM   1397  H   VAL   136      -7.030  -7.667  -5.036  1.00                 H  
+ATOM   1398  CB  VAL   136      -8.593  -6.792  -2.681  1.00                 C  
+ATOM   1399  CG1 VAL   136      -7.190  -6.345  -2.300  1.00                 C  
+ATOM   1400  CG2 VAL   136      -9.633  -5.844  -2.103  1.00                 C  
+ATOM   1401  N   MET   137      -9.193  -4.559  -4.808  1.00                 N  
+ATOM   1402  CA  MET   137      -8.849  -3.292  -5.425  1.00                 C  
+ATOM   1403  C   MET   137      -8.333  -2.365  -4.334  1.00                 C  
+ATOM   1404  O   MET   137      -9.097  -1.894  -3.493  1.00                 O  
+ATOM   1405  H   MET   137      -9.966  -4.644  -4.356  1.00                 H  
+ATOM   1406  CB  MET   137     -10.062  -2.700  -6.146  1.00                 C  
+ATOM   1407  SD  MET   137     -11.234  -0.724  -7.693  1.00                 S  
+ATOM   1408  CE  MET   137     -12.207  -0.186  -6.289  1.00                 C  
+ATOM   1409  CG  MET   137      -9.779  -1.391  -6.865  1.00                 C  
+ATOM   1410  N   PRO   138      -7.032  -2.129  -4.319  1.00                 N  
+ATOM   1411  CA  PRO   138      -6.411  -1.283  -3.325  1.00                 C  
+ATOM   1412  C   PRO   138      -6.039   0.112  -3.690  1.00                 C  
+ATOM   1413  O   PRO   138      -5.850   0.412  -4.865  1.00                 O  
+ATOM   1414  CB  PRO   138      -5.128  -2.029  -2.953  1.00                 C  
+ATOM   1415  CD  PRO   138      -5.977  -3.137  -4.897  1.00                 C  
+ATOM   1416  CG  PRO   138      -4.709  -2.705  -4.215  1.00                 C  
+ATOM   1417  N   ASP   139      -5.755   0.899  -2.634  1.00                 N  
+ATOM   1418  CA  ASP   139      -5.489   2.312  -2.613  1.00                 C  
+ATOM   1419  C   ASP   139      -4.204   2.700  -3.325  1.00                 C  
+ATOM   1420  O   ASP   139      -4.033   3.851  -3.736  1.00                 O  
+ATOM   1421  H   ASP   139      -5.743   0.427  -1.868  1.00                 H  
+ATOM   1422  CB  ASP   139      -5.426   2.824  -1.173  1.00                 C  
+ATOM   1423  CG  ASP   139      -5.412   4.338  -1.093  1.00                 C  
+ATOM   1424  OD1 ASP   139      -6.504   4.944  -1.110  1.00                 O  
+ATOM   1425  OD2 ASP   139      -4.309   4.918  -1.013  1.00                 O  
+ATOM   1426  N   GLU   140      -3.220   1.787  -3.423  1.00                 N  
+ATOM   1427  CA  GLU   140      -2.003   2.078  -4.129  1.00                 C  
+ATOM   1428  C   GLU   140      -1.040   2.751  -3.171  1.00                 C  
+ATOM   1429  O   GLU   140      -0.185   2.094  -2.574  1.00                 O  
+ATOM   1430  H   GLU   140      -3.335   0.982  -3.036  1.00                 H  
+ATOM   1431  CB  GLU   140      -2.288   2.958  -5.347  1.00                 C  
+ATOM   1432  CD  GLU   140      -2.374   1.111  -7.068  1.00                 C  
+ATOM   1433  CG  GLU   140      -3.107   2.274  -6.430  1.00                 C  
+ATOM   1434  OE1 GLU   140      -1.209   1.296  -7.477  1.00                 O  
+ATOM   1435  OE2 GLU   140      -2.965   0.014  -7.158  1.00                 O  
+ATOM   1436  N   ALA   141      -1.140   4.089  -3.001  1.00                 N  
+ATOM   1437  CA  ALA   141      -0.211   4.796  -2.160  1.00                 C  
+ATOM   1438  C   ALA   141      -0.297   4.442  -0.696  1.00                 C  
+ATOM   1439  O   ALA   141       0.716   4.483  -0.013  1.00                 O  
+ATOM   1440  H   ALA   141      -1.797   4.537  -3.421  1.00                 H  
+ATOM   1441  CB  ALA   141      -0.406   6.298  -2.300  1.00                 C  
+ATOM   1442  N   ASN   142      -1.486   4.135  -0.152  1.00                 N  
+ATOM   1443  CA  ASN   142      -1.724   3.807   1.240  1.00                 C  
+ATOM   1444  C   ASN   142      -1.251   2.444   1.617  1.00                 C  
+ATOM   1445  O   ASN   142      -1.173   2.154   2.810  1.00                 O  
+ATOM   1446  H   ASN   142      -2.171   4.144  -0.736  1.00                 H  
+ATOM   1447  CB  ASN   142      -3.211   3.938   1.575  1.00                 C  
+ATOM   1448  CG  ASN   142      -3.480   3.878   3.065  1.00                 C  
+ATOM   1449  OD1 ASN   142      -2.679   4.352   3.870  1.00                 O  
+ATOM   1450 1HD2 ASN   142      -4.821   3.230   4.311  1.00                 H  
+ATOM   1451 2HD2 ASN   142      -5.172   2.958   2.817  1.00                 H  
+ATOM   1452  ND2 ASN   142      -4.613   3.293   3.438  1.00                 N  
+ATOM   1453  N   SER   143      -1.057   1.549   0.625  1.00                 N  
+ATOM   1454  CA  SER   143      -0.594   0.195   0.849  1.00                 C  
+ATOM   1455  C   SER   143       0.812   0.151   0.325  1.00                 C  
+ATOM   1456  O   SER   143       1.118   0.796  -0.682  1.00                 O  
+ATOM   1457  H   SER   143      -1.231   1.832  -0.211  1.00                 H  
+ATOM   1458  CB  SER   143      -1.518  -0.809   0.157  1.00                 C  
+ATOM   1459  HG  SER   143      -1.541  -2.656  -0.095  1.00                 H  
+ATOM   1460  OG  SER   143      -1.024  -2.131   0.287  1.00                 O  
+ATOM   1461  N   HIS   144       1.667  -0.632   1.033  1.00                 N  
+ATOM   1462  CA  HIS   144       3.085  -0.862   0.863  1.00                 C  
+ATOM   1463  C   HIS   144       3.368  -1.518  -0.436  1.00                 C  
+ATOM   1464  O   HIS   144       2.575  -2.324  -0.922  1.00                 O  
+ATOM   1465  H   HIS   144       1.221  -1.045   1.697  1.00                 H  
+ATOM   1466  CB  HIS   144       3.631  -1.713   2.011  1.00                 C  
+ATOM   1467  CG  HIS   144       5.124  -1.829   2.020  1.00                 C  
+ATOM   1468  HD1 HIS   144       5.420  -3.273   0.578  1.00                 H  
+ATOM   1469  ND1 HIS   144       5.808  -2.697   1.196  1.00                 N  
+ATOM   1470  CE1 HIS   144       7.126  -2.576   1.432  1.00                 C  
+ATOM   1471  CD2 HIS   144       6.210  -1.197   2.755  1.00                 C  
+ATOM   1472  NE2 HIS   144       7.375  -1.678   2.365  1.00                 N  
+ATOM   1473  N   TRP   145       4.572  -1.221  -0.984  1.00                 N  
+ATOM   1474  CA  TRP   145       4.912  -1.713  -2.262  1.00                 C  
+ATOM   1475  C   TRP   145       4.903  -3.204  -2.306  1.00                 C  
+ATOM   1476  O   TRP   145       4.491  -3.835  -3.283  1.00                 O  
+ATOM   1477  H   TRP   145       5.155  -0.708  -0.529  1.00                 H  
+ATOM   1478  CB  TRP   145       6.287  -1.195  -2.687  1.00                 C  
+ATOM   1479 1HB  TRP   145       7.050  -1.737  -2.246  1.00                 H  
+ATOM   1480 2HB  TRP   145       6.336  -0.221  -2.910  1.00                 H  
+ATOM   1481  CG  TRP   145       6.709  -1.659  -4.048  1.00                 C  
+ATOM   1482  CD1 TRP   145       7.782  -2.448  -4.348  1.00                 C  
+ATOM   1483  HE1 TRP   145       8.502  -3.174  -6.137  1.00                 H  
+ATOM   1484  NE1 TRP   145       7.847  -2.662  -5.704  1.00                 N  
+ATOM   1485  CD2 TRP   145       6.065  -1.363  -5.293  1.00                 C  
+ATOM   1486  CE2 TRP   145       6.802  -2.005  -6.305  1.00                 C  
+ATOM   1487  CH2 TRP   145       5.343  -1.191  -7.973  1.00                 C  
+ATOM   1488  CZ2 TRP   145       6.449  -1.926  -7.651  1.00                 C  
+ATOM   1489  CE3 TRP   145       4.938  -0.618  -5.651  1.00                 C  
+ATOM   1490  CZ3 TRP   145       4.592  -0.542  -6.987  1.00                 C  
+ATOM   1491  N   ARG   146       5.318  -3.864  -1.232  1.00                 N  
+ATOM   1492  CA  ARG   146       5.134  -5.269  -1.409  1.00                 C  
+ATOM   1493  C   ARG   146       3.692  -5.698  -1.303  1.00                 C  
+ATOM   1494  O   ARG   146       3.372  -6.775  -1.795  1.00                 O  
+ATOM   1495  H   ARG   146       5.673  -3.550  -0.467  1.00                 H  
+ATOM   1496  CB  ARG   146       5.961  -6.051  -0.386  1.00                 C  
+ATOM   1497  CD  ARG   146       6.396  -8.046  -1.845  1.00                 C  
+ATOM   1498  HE  ARG   146       6.131  -9.946  -1.259  1.00                 H  
+ATOM   1499  NE  ARG   146       6.323  -9.500  -1.970  1.00                 N  
+ATOM   1500  CG  ARG   146       5.842  -7.561  -0.516  1.00                 C  
+ATOM   1501  CZ  ARG   146       6.534 -10.164  -3.102  1.00                 C  
+ATOM   1502 1HH1 ARG   146       6.253 -11.915  -2.400  1.00                 H  
+ATOM   1503 2HH1 ARG   146       6.583 -11.917  -3.853  1.00                 H  
+ATOM   1504  NH1 ARG   146       6.446 -11.487  -3.120  1.00                 N  
+ATOM   1505 1HH2 ARG   146       6.888  -8.645  -4.200  1.00                 H  
+ATOM   1506 2HH2 ARG   146       6.968  -9.933  -4.945  1.00                 H  
+ATOM   1507  NH2 ARG   146       6.832  -9.503  -4.212  1.00                 N  
+ATOM   1508  N   ASN   147       2.786  -4.952  -0.621  1.00                 N  
+ATOM   1509  CA  ASN   147       1.403  -5.388  -0.592  1.00                 C  
+ATOM   1510  C   ASN   147       0.804  -5.309  -1.942  1.00                 C  
+ATOM   1511  O   ASN   147       0.021  -6.188  -2.291  1.00                 O  
+ATOM   1512  H   ASN   147       3.030  -4.199  -0.192  1.00                 H  
+ATOM   1513  CB  ASN   147       0.600  -4.557   0.411  1.00                 C  
+ATOM   1514  CG  ASN   147      -0.809  -5.082   0.607  1.00                 C  
+ATOM   1515  OD1 ASN   147      -1.724  -4.720  -0.132  1.00                 O  
+ATOM   1516 1HD2 ASN   147      -1.803  -6.281   1.766  1.00                 H  
+ATOM   1517 2HD2 ASN   147      -0.289  -6.178   2.123  1.00                 H  
+ATOM   1518  ND2 ASN   147      -0.986  -5.939   1.606  1.00                 N  
+ATOM   1519  N   VAL   148       1.159  -4.274  -2.733  1.00                 N  
+ATOM   1520  CA  VAL   148       0.590  -4.131  -4.043  1.00                 C  
+ATOM   1521  C   VAL   148       0.925  -5.380  -4.798  1.00                 C  
+ATOM   1522  O   VAL   148       0.044  -5.996  -5.392  1.00                 O  
+ATOM   1523  H   VAL   148       1.757  -3.671  -2.434  1.00                 H  
+ATOM   1524  CB  VAL   148       1.113  -2.867  -4.751  1.00                 C  
+ATOM   1525  CG1 VAL   148       0.670  -2.850  -6.206  1.00                 C  
+ATOM   1526  CG2 VAL   148       0.635  -1.616  -4.029  1.00                 C  
+ATOM   1527  N   LEU   149       2.197  -5.825  -4.736  1.00                 N  
+ATOM   1528  CA  LEU   149       2.654  -6.966  -5.478  1.00                 C  
+ATOM   1529  C   LEU   149       1.988  -8.204  -4.962  1.00                 C  
+ATOM   1530  O   LEU   149       1.622  -9.083  -5.733  1.00                 O  
+ATOM   1531  H   LEU   149       2.767  -5.377  -4.203  1.00                 H  
+ATOM   1532  CB  LEU   149       4.176  -7.089  -5.388  1.00                 C  
+ATOM   1533  CG  LEU   149       4.988  -6.002  -6.096  1.00                 C  
+ATOM   1534  CD1 LEU   149       6.469  -6.146  -5.782  1.00                 C  
+ATOM   1535  CD2 LEU   149       4.758  -6.053  -7.598  1.00                 C  
+ATOM   1536  N   LEU   150       1.784  -8.306  -3.641  1.00                 N  
+ATOM   1537  CA  LEU   150       1.137  -9.447  -3.069  1.00                 C  
+ATOM   1538  C   LEU   150      -0.274  -9.545  -3.549  1.00                 C  
+ATOM   1539  O   LEU   150      -0.758 -10.663  -3.710  1.00                 O  
+ATOM   1540  H   LEU   150       2.065  -7.635  -3.111  1.00                 H  
+ATOM   1541  CB  LEU   150       1.176  -9.375  -1.541  1.00                 C  
+ATOM   1542  CG  LEU   150       2.550  -9.550  -0.890  1.00                 C  
+ATOM   1543  CD1 LEU   150       2.474  -9.278   0.605  1.00                 C  
+ATOM   1544  CD2 LEU   150       3.092 -10.948  -1.145  1.00                 C  
+ATOM   1545  N   GLN   151      -0.982  -8.405  -3.749  1.00                 N  
+ATOM   1546  CA  GLN   151      -2.359  -8.481  -4.163  1.00                 C  
+ATOM   1547  C   GLN   151      -2.388  -9.141  -5.490  1.00                 C  
+ATOM   1548  O   GLN   151      -3.217 -10.017  -5.705  1.00                 O  
+ATOM   1549  H   GLN   151      -0.593  -7.603  -3.624  1.00                 H  
+ATOM   1550  CB  GLN   151      -2.985  -7.085  -4.202  1.00                 C  
+ATOM   1551  CD  GLN   151      -4.122  -7.193  -1.949  1.00                 C  
+ATOM   1552  CG  GLN   151      -3.149  -6.440  -2.836  1.00                 C  
+ATOM   1553  OE1 GLN   151      -4.666  -8.224  -2.345  1.00                 O  
+ATOM   1554 1HE2 GLN   151      -4.911  -7.087  -0.179  1.00                 H  
+ATOM   1555 2HE2 GLN   151      -3.924  -5.923  -0.495  1.00                 H  
+ATOM   1556  NE2 GLN   151      -4.343  -6.679  -0.745  1.00                 N  
+ATOM   1557  N   LEU   152      -1.441  -8.786  -6.381  1.00                 N  
+ATOM   1558  CA  LEU   152      -1.383  -9.353  -7.708  1.00                 C  
+ATOM   1559  C   LEU   152      -1.097 -10.809  -7.603  1.00                 C  
+ATOM   1560  O   LEU   152      -1.757 -11.581  -8.291  1.00                 O  
+ATOM   1561  H   LEU   152      -0.832  -8.174  -6.126  1.00                 H  
+ATOM   1562  CB  LEU   152      -0.322  -8.641  -8.549  1.00                 C  
+ATOM   1563  CG  LEU   152      -0.626  -7.193  -8.940  1.00                 C  
+ATOM   1564  CD1 LEU   152       0.580  -6.553  -9.612  1.00                 C  
+ATOM   1565  CD2 LEU   152      -1.838  -7.127  -9.856  1.00                 C  
+ATOM   1566  N   THR   153      -0.139 -11.223  -6.734  1.00                 N  
+ATOM   1567  CA  THR   153       0.247 -12.612  -6.678  1.00                 C  
+ATOM   1568  C   THR   153      -0.945 -13.422  -6.276  1.00                 C  
+ATOM   1569  O   THR   153      -1.240 -14.421  -6.925  1.00                 O  
+ATOM   1570  H   THR   153       0.256 -10.624  -6.191  1.00                 H  
+ATOM   1571  CB  THR   153       1.414 -12.834  -5.698  1.00                 C  
+ATOM   1572  HG1 THR   153       2.381 -11.297  -6.180  1.00                 H  
+ATOM   1573  OG1 THR   153       2.564 -12.106  -6.146  1.00                 O  
+ATOM   1574  CG2 THR   153       1.773 -14.311  -5.623  1.00                 C  
+ATOM   1575  N   GLU   154      -1.692 -12.993  -5.235  1.00                 N  
+ATOM   1576  CA  GLU   154      -2.827 -13.743  -4.760  1.00                 C  
+ATOM   1577  C   GLU   154      -3.870 -13.785  -5.832  1.00                 C  
+ATOM   1578  O   GLU   154      -4.502 -14.818  -6.026  1.00                 O  
+ATOM   1579  H   GLU   154      -1.466 -12.218  -4.836  1.00                 H  
+ATOM   1580  CB  GLU   154      -3.380 -13.122  -3.476  1.00                 C  
+ATOM   1581  CD  GLU   154      -3.020 -12.600  -1.031  1.00                 C  
+ATOM   1582  CG  GLU   154      -2.477 -13.293  -2.265  1.00                 C  
+ATOM   1583  OE1 GLU   154      -3.996 -11.831  -1.162  1.00                 O  
+ATOM   1584  OE2 GLU   154      -2.470 -12.825   0.068  1.00                 O  
+ATOM   1585  N   GLY   155      -4.092 -12.669  -6.555  1.00                 N  
+ATOM   1586  CA  GLY   155      -5.104 -12.636  -7.567  1.00                 C  
+ATOM   1587  C   GLY   155      -4.777 -13.613  -8.645  1.00                 C  
+ATOM   1588  O   GLY   155      -5.668 -14.290  -9.147  1.00                 O  
+ATOM   1589  H   GLY   155      -3.593 -11.938  -6.394  1.00                 H  
+ATOM   1590  N   GLN   156      -3.495 -13.693  -9.043  1.00                 N  
+ATOM   1591  CA  GLN   156      -3.068 -14.587 -10.084  1.00                 C  
+ATOM   1592  C   GLN   156      -3.293 -15.988  -9.636  1.00                 C  
+ATOM   1593  O   GLN   156      -3.793 -16.791 -10.416  1.00                 O  
+ATOM   1594  H   GLN   156      -2.896 -13.161  -8.633  1.00                 H  
+ATOM   1595  CB  GLN   156      -1.598 -14.343 -10.430  1.00                 C  
+ATOM   1596  CD  GLN   156      -1.994 -12.889 -12.456  1.00                 C  
+ATOM   1597  CG  GLN   156      -1.331 -13.004 -11.098  1.00                 C  
+ATOM   1598  OE1 GLN   156      -1.796 -13.734 -13.329  1.00                 O  
+ATOM   1599 1HE2 GLN   156      -3.205 -11.723 -13.427  1.00                 H  
+ATOM   1600 2HE2 GLN   156      -2.905 -11.244 -11.975  1.00                 H  
+ATOM   1601  NE2 GLN   156      -2.787 -11.839 -12.639  1.00                 N  
+ATOM   1602  N   THR   157      -2.961 -16.307  -8.364  1.00                 N  
+ATOM   1603  CA  THR   157      -3.066 -17.659  -7.889  1.00                 C  
+ATOM   1604  C   THR   157      -4.507 -18.073  -7.949  1.00                 C  
+ATOM   1605  O   THR   157      -4.818 -19.167  -8.416  1.00                 O  
+ATOM   1606  H   THR   157      -2.671 -15.658  -7.813  1.00                 H  
+ATOM   1607  CB  THR   157      -2.515 -17.799  -6.458  1.00                 C  
+ATOM   1608  HG1 THR   157      -1.029 -16.675  -6.700  1.00                 H  
+ATOM   1609  OG1 THR   157      -1.123 -17.458  -6.443  1.00                 O  
+ATOM   1610  CG2 THR   157      -2.671 -19.229  -5.964  1.00                 C  
+ATOM   1611  N   TRP   158      -5.433 -17.194  -7.517  1.00                 N  
+ATOM   1612  CA  TRP   158      -6.829 -17.523  -7.519  1.00                 C  
+ATOM   1613  C   TRP   158      -7.345 -17.732  -8.909  1.00                 C  
+ATOM   1614  O   TRP   158      -8.150 -18.624  -9.163  1.00                 O  
+ATOM   1615  H   TRP   158      -5.161 -16.388  -7.224  1.00                 H  
+ATOM   1616  CB  TRP   158      -7.639 -16.426  -6.825  1.00                 C  
+ATOM   1617 1HB  TRP   158      -8.636 -16.689  -6.738  1.00                 H  
+ATOM   1618 2HB  TRP   158      -7.305 -15.492  -6.952  1.00                 H  
+ATOM   1619  CG  TRP   158      -7.484 -16.418  -5.335  1.00                 C  
+ATOM   1620  CD1 TRP   158      -6.897 -15.445  -4.578  1.00                 C  
+ATOM   1621  HE1 TRP   158      -6.600 -15.270  -2.546  1.00                 H  
+ATOM   1622  NE1 TRP   158      -6.942 -15.788  -3.248  1.00                 N  
+ATOM   1623  CD2 TRP   158      -7.922 -17.430  -4.421  1.00                 C  
+ATOM   1624  CE2 TRP   158      -7.568 -17.004  -3.128  1.00                 C  
+ATOM   1625  CH2 TRP   158      -8.492 -18.952  -2.164  1.00                 C  
+ATOM   1626  CZ2 TRP   158      -7.848 -17.758  -1.990  1.00                 C  
+ATOM   1627  CE3 TRP   158      -8.579 -18.655  -4.570  1.00                 C  
+ATOM   1628  CZ3 TRP   158      -8.855 -19.399  -3.439  1.00                 C  
+ATOM   1629  N   LEU   159      -6.858 -16.928  -9.853  1.00                 N  
+ATOM   1630  CA  LEU   159      -7.180 -16.974 -11.239  1.00                 C  
+ATOM   1631  C   LEU   159      -6.820 -18.322 -11.779  1.00                 C  
+ATOM   1632  O   LEU   159      -7.594 -18.906 -12.532  1.00                 O  
+ATOM   1633  H   LEU   159      -6.276 -16.314  -9.546  1.00                 H  
+ATOM   1634  CB  LEU   159      -6.451 -15.862 -11.996  1.00                 C  
+ATOM   1635  CG  LEU   159      -6.843 -15.670 -13.462  1.00                 C  
+ATOM   1636  CD1 LEU   159      -6.427 -14.292 -13.953  1.00                 C  
+ATOM   1637  CD2 LEU   159      -6.221 -16.751 -14.332  1.00                 C  
+ATOM   1638  N   LYS   160      -5.613 -18.810 -11.435  1.00                 N  
+ATOM   1639  CA  LYS   160      -5.055 -20.057 -11.887  1.00                 C  
+ATOM   1640  C   LYS   160      -5.837 -21.196 -11.331  1.00                 C  
+ATOM   1641  O   LYS   160      -5.930 -22.253 -11.951  1.00                 O  
+ATOM   1642  H   LYS   160      -5.145 -18.285 -10.874  1.00                 H  
+ATOM   1643  CB  LYS   160      -3.583 -20.163 -11.483  1.00                 C  
+ATOM   1644  CD  LYS   160      -1.220 -19.374 -11.783  1.00                 C  
+ATOM   1645  CE  LYS   160      -0.297 -18.437 -12.547  1.00                 C  
+ATOM   1646  CG  LYS   160      -2.664 -19.211 -12.230  1.00                 C  
+ATOM   1647 1HZ  LYS   160       1.624 -17.989 -12.551  1.00                 H  
+ATOM   1648 2HZ  LYS   160       1.401 -19.383 -12.206  1.00                 H  
+ATOM   1649 3HZ  LYS   160       1.160 -18.343 -11.220  1.00                 H  
+ATOM   1650  NZ  LYS   160       1.114 -18.549 -12.084  1.00                 N  
+ATOM   1651  N   GLN   161      -6.419 -21.002 -10.138  1.00                 N  
+ATOM   1652  CA  GLN   161      -7.019 -22.090  -9.423  1.00                 C  
+ATOM   1653  C   GLN   161      -8.435 -22.322  -9.757  1.00                 C  
+ATOM   1654  O   GLN   161      -8.778 -22.822 -10.826  1.00                 O  
+ATOM   1655  H   GLN   161      -6.429 -20.173  -9.787  1.00                 H  
+ATOM   1656  CB  GLN   161      -6.909 -21.865  -7.914  1.00                 C  
+ATOM   1657  CD  GLN   161      -5.411 -21.653  -5.891  1.00                 C  
+ATOM   1658  CG  GLN   161      -5.488 -21.938  -7.378  1.00                 C  
+ATOM   1659  OE1 GLN   161      -6.237 -20.921  -5.346  1.00                 O  
+ATOM   1660 1HE2 GLN   161      -4.325 -22.097  -4.344  1.00                 H  
+ATOM   1661 2HE2 GLN   161      -3.833 -22.761  -5.665  1.00                 H  
+ATOM   1662  NE2 GLN   161      -4.416 -22.233  -5.229  1.00                 N  
+ATOM   1663  N   PHE   162      -9.285 -21.912  -8.807  1.00                 N  
+ATOM   1664  CA  PHE   162     -10.621 -22.377  -8.725  1.00                 C  
+ATOM   1665  C   PHE   162     -11.422 -22.310  -9.935  1.00                 C  
+ATOM   1666  O   PHE   162     -11.846 -23.333 -10.457  1.00                 O  
+ATOM   1667  H   PHE   162      -8.978 -21.317  -8.205  1.00                 H  
+ATOM   1668  CB  PHE   162     -11.389 -21.612  -7.645  1.00                 C  
+ATOM   1669  CG  PHE   162     -11.016 -22.003  -6.244  1.00                 C  
+ATOM   1670  CZ  PHE   162     -10.328 -22.721  -3.648  1.00                 C  
+ATOM   1671  CD1 PHE   162     -10.315 -23.171  -5.999  1.00                 C  
+ATOM   1672  CE1 PHE   162      -9.972 -23.531  -4.710  1.00                 C  
+ATOM   1673  CD2 PHE   162     -11.366 -21.203  -5.171  1.00                 C  
+ATOM   1674  CE2 PHE   162     -11.022 -21.563  -3.881  1.00                 C  
+ATOM   1675  N   MET   163     -11.629 -21.123 -10.445  1.00                 N  
+ATOM   1676  CA  MET   163     -12.521 -21.015 -11.554  1.00                 C  
+ATOM   1677  C   MET   163     -11.986 -21.663 -12.791  1.00                 C  
+ATOM   1678  O   MET   163     -12.761 -22.198 -13.574  1.00                 O  
+ATOM   1679  H   MET   163     -11.228 -20.387 -10.117  1.00                 H  
+ATOM   1680  CB  MET   163     -12.833 -19.547 -11.850  1.00                 C  
+ATOM   1681  SD  MET   163     -15.205 -19.601 -10.419  1.00                 S  
+ATOM   1682  CE  MET   163     -14.809 -20.635  -9.011  1.00                 C  
+ATOM   1683  CG  MET   163     -13.603 -18.841 -10.745  1.00                 C  
+ATOM   1684  N   ASN   164     -10.658 -21.649 -12.993  1.00                 N  
+ATOM   1685  CA  ASN   164     -10.007 -22.120 -14.193  1.00                 C  
+ATOM   1686  C   ASN   164      -9.906 -21.031 -15.235  1.00                 C  
+ATOM   1687  O   ASN   164      -9.327 -21.271 -16.290  1.00                 O  
+ATOM   1688  H   ASN   164     -10.167 -21.317 -12.315  1.00                 H  
+ATOM   1689  CB  ASN   164     -10.745 -23.334 -14.762  1.00                 C  
+ATOM   1690  CG  ASN   164     -10.729 -24.520 -13.817  1.00                 C  
+ATOM   1691  OD1 ASN   164      -9.679 -24.900 -13.300  1.00                 O  
+ATOM   1692 1HD2 ASN   164     -11.945 -25.817 -13.037  1.00                 H  
+ATOM   1693 2HD2 ASN   164     -12.643 -24.799 -13.988  1.00                 H  
+ATOM   1694  ND2 ASN   164     -11.898 -25.109 -13.590  1.00                 N  
+ATOM   1695  N   VAL   165     -10.384 -19.785 -14.997  1.00                 N  
+ATOM   1696  CA  VAL   165     -10.083 -18.818 -16.031  1.00                 C  
+ATOM   1697  C   VAL   165      -9.850 -17.453 -15.465  1.00                 C  
+ATOM   1698  O   VAL   165     -10.183 -17.199 -14.313  1.00                 O  
+ATOM   1699  H   VAL   165     -10.854 -19.536 -14.271  1.00                 H  
+ATOM   1700  CB  VAL   165     -11.205 -18.750 -17.084  1.00                 C  
+ATOM   1701  CG1 VAL   165     -10.888 -17.695 -18.133  1.00                 C  
+ATOM   1702  CG2 VAL   165     -11.408 -20.109 -17.735  1.00                 C  
+ATOM   1703  N   THR   166      -9.230 -16.560 -16.279  1.00                 N  
+ATOM   1704  CA  THR   166      -8.856 -15.206 -15.920  1.00                 C  
+ATOM   1705  C   THR   166      -9.357 -14.211 -16.936  1.00                 C  
+ATOM   1706  O   THR   166      -9.827 -14.576 -18.014  1.00                 O  
+ATOM   1707  H   THR   166      -9.052 -16.872 -17.104  1.00                 H  
+ATOM   1708  CB  THR   166      -7.329 -15.061 -15.777  1.00                 C  
+ATOM   1709  HG1 THR   166      -7.300 -13.182 -15.799  1.00                 H  
+ATOM   1710  OG1 THR   166      -7.016 -13.757 -15.272  1.00                 O  
+ATOM   1711  CG2 THR   166      -6.649 -15.237 -17.126  1.00                 C  
+ATOM   1712  N   PRO   167      -9.370 -12.942 -16.548  1.00                 N  
+ATOM   1713  CA  PRO   167      -9.370 -11.883 -17.540  1.00                 C  
+ATOM   1714  C   PRO   167      -7.998 -11.311 -17.710  1.00                 C  
+ATOM   1715  O   PRO   167      -7.249 -11.317 -16.734  1.00                 O  
+ATOM   1716  CB  PRO   167     -10.346 -10.848 -16.977  1.00                 C  
+ATOM   1717  CD  PRO   167      -9.988 -12.443 -15.228  1.00                 C  
+ATOM   1718  CG  PRO   167     -10.219 -10.982 -15.496  1.00                 C  
+ATOM   1719  N   THR   168      -7.670 -10.738 -18.892  1.00                 N  
+ATOM   1720  CA  THR   168      -6.338 -10.207 -19.062  1.00                 C  
+ATOM   1721  C   THR   168      -6.379  -8.714 -18.933  1.00                 C  
+ATOM   1722  O   THR   168      -5.873  -7.984 -19.785  1.00                 O  
+ATOM   1723  H   THR   168      -8.265 -10.685 -19.565  1.00                 H  
+ATOM   1724  CB  THR   168      -5.739 -10.611 -20.422  1.00                 C  
+ATOM   1725  HG1 THR   168      -7.349 -10.529 -21.387  1.00                 H  
+ATOM   1726  OG1 THR   168      -6.604 -10.174 -21.477  1.00                 O  
+ATOM   1727  CG2 THR   168      -5.588 -12.122 -20.510  1.00                 C  
+ATOM   1728  N   ALA   169      -6.943  -8.208 -17.826  1.00                 N  
+ATOM   1729  CA  ALA   169      -6.937  -6.790 -17.615  1.00                 C  
+ATOM   1730  C   ALA   169      -6.443  -6.576 -16.221  1.00                 C  
+ATOM   1731  O   ALA   169      -6.399  -7.501 -15.409  1.00                 O  
+ATOM   1732  H   ALA   169      -7.323  -8.752 -17.218  1.00                 H  
+ATOM   1733  CB  ALA   169      -8.327  -6.215 -17.840  1.00                 C  
+ATOM   1734  N   SER   170      -5.964  -5.348 -15.960  1.00                 N  
+ATOM   1735  CA  SER   170      -5.564  -4.891 -14.664  1.00                 C  
+ATOM   1736  C   SER   170      -6.664  -3.941 -14.359  1.00                 C  
+ATOM   1737  O   SER   170      -6.933  -3.012 -15.124  1.00                 O  
+ATOM   1738  H   SER   170      -5.902  -4.798 -16.670  1.00                 H  
+ATOM   1739  CB  SER   170      -4.162  -4.280 -14.720  1.00                 C  
+ATOM   1740  HG  SER   170      -3.030  -3.412 -13.519  1.00                 H  
+ATOM   1741  OG  SER   170      -3.792  -3.737 -13.465  1.00                 O  
+ATOM   1742  N   TRP   171      -7.347  -4.178 -13.232  1.00                 N  
+ATOM   1743  CA  TRP   171      -8.470  -3.376 -12.869  1.00                 C  
+ATOM   1744  C   TRP   171      -8.131  -2.401 -11.806  1.00                 C  
+ATOM   1745  O   TRP   171      -7.390  -2.668 -10.866  1.00                 O  
+ATOM   1746  H   TRP   171      -7.087  -4.856 -12.700  1.00                 H  
+ATOM   1747  CB  TRP   171      -9.632  -4.258 -12.407  1.00                 C  
+ATOM   1748 1HB  TRP   171      -9.510  -4.563 -11.426  1.00                 H  
+ATOM   1749 2HB  TRP   171     -10.077  -4.799 -13.121  1.00                 H  
+ATOM   1750  CG  TRP   171     -10.863  -3.486 -12.042  1.00                 C  
+ATOM   1751  CD1 TRP   171     -11.276  -2.302 -12.579  1.00                 C  
+ATOM   1752  HE1 TRP   171     -12.919  -1.115 -12.203  1.00                 H  
+ATOM   1753  NE1 TRP   171     -12.452  -1.899 -11.992  1.00                 N  
+ATOM   1754  CD2 TRP   171     -11.841  -3.846 -11.059  1.00                 C  
+ATOM   1755  CE2 TRP   171     -12.818  -2.834 -11.055  1.00                 C  
+ATOM   1756  CH2 TRP   171     -14.041  -3.934  -9.361  1.00                 C  
+ATOM   1757  CZ2 TRP   171     -13.924  -2.867 -10.208  1.00                 C  
+ATOM   1758  CE3 TRP   171     -11.986  -4.925 -10.183  1.00                 C  
+ATOM   1759  CZ3 TRP   171     -13.085  -4.955  -9.345  1.00                 C  
+ATOM   1760  N   ALA   172      -8.653  -1.188 -12.001  1.00                 N  
+ATOM   1761  CA  ALA   172      -8.688  -0.181 -10.993  1.00                 C  
+ATOM   1762  C   ALA   172      -9.880   0.590 -11.451  1.00                 C  
+ATOM   1763  O   ALA   172      -9.718   1.442 -12.305  1.00                 O  
+ATOM   1764  H   ALA   172      -8.994  -1.020 -12.817  1.00                 H  
+ATOM   1765  CB  ALA   172      -7.373   0.583 -10.960  1.00                 C  
+ATOM   1766  N   ILE   173     -11.130   0.290 -11.042  1.00                 N  
+ATOM   1767  CA  ILE   173     -12.093   1.205 -11.590  1.00                 C  
+ATOM   1768  C   ILE   173     -12.132   2.445 -10.740  1.00                 C  
+ATOM   1769  O   ILE   173     -12.037   3.551 -11.256  1.00                 O  
+ATOM   1770  H   ILE   173     -11.400  -0.376 -10.501  1.00                 H  
+ATOM   1771  CB  ILE   173     -13.489   0.562 -11.691  1.00                 C  
+ATOM   1772  CD1 ILE   173     -13.961   1.534 -14.000  1.00                 C  
+ATOM   1773  CG1 ILE   173     -14.410   1.421 -12.560  1.00                 C  
+ATOM   1774  CG2 ILE   173     -14.070   0.331 -10.305  1.00                 C  
+ATOM   1775  N   ASP   174     -12.213   2.318  -9.394  1.00                 N  
+ATOM   1776  CA  ASP   174     -12.295   3.527  -8.611  1.00                 C  
+ATOM   1777  C   ASP   174     -11.080   3.737  -7.722  1.00                 C  
+ATOM   1778  O   ASP   174     -11.305   4.138  -6.580  1.00                 O  
+ATOM   1779  H   ASP   174     -12.217   1.516  -8.985  1.00                 H  
+ATOM   1780  CB  ASP   174     -13.556   3.520  -7.744  1.00                 C  
+ATOM   1781  CG  ASP   174     -14.828   3.588  -8.566  1.00                 C  
+ATOM   1782  OD1 ASP   174     -14.847   4.328  -9.572  1.00                 O  
+ATOM   1783  OD2 ASP   174     -15.806   2.901  -8.205  1.00                 O  
+ATOM   1784  N   PRO   175      -9.824   3.536  -8.070  1.00                 N  
+ATOM   1785  CA  PRO   175      -8.824   3.837  -7.085  1.00                 C  
+ATOM   1786  C   PRO   175      -8.604   5.312  -6.937  1.00                 C  
+ATOM   1787  O   PRO   175      -8.710   6.033  -7.927  1.00                 O  
+ATOM   1788  CB  PRO   175      -7.566   3.143  -7.611  1.00                 C  
+ATOM   1789  CD  PRO   175      -9.310   2.708  -9.191  1.00                 C  
+ATOM   1790  CG  PRO   175      -8.077   2.117  -8.566  1.00                 C  
+ATOM   1791  N   PHE   176      -8.253   5.782  -5.721  1.00                 N  
+ATOM   1792  CA  PHE   176      -8.064   7.187  -5.534  1.00                 C  
+ATOM   1793  C   PHE   176      -6.613   7.507  -5.798  1.00                 C  
+ATOM   1794  O   PHE   176      -5.904   7.948  -4.898  1.00                 O  
+ATOM   1795  H   PHE   176      -8.138   5.217  -5.030  1.00                 H  
+ATOM   1796  CB  PHE   176      -8.485   7.601  -4.123  1.00                 C  
+ATOM   1797  CG  PHE   176      -9.953   7.434  -3.854  1.00                 C  
+ATOM   1798  CZ  PHE   176     -12.670   7.127  -3.352  1.00                 C  
+ATOM   1799  CD1 PHE   176     -10.782   6.851  -4.798  1.00                 C  
+ATOM   1800  CE1 PHE   176     -12.133   6.697  -4.551  1.00                 C  
+ATOM   1801  CD2 PHE   176     -10.506   7.859  -2.659  1.00                 C  
+ATOM   1802  CE2 PHE   176     -11.857   7.704  -2.413  1.00                 C  
+ATOM   1803  N   GLY   177      -6.139   7.341  -7.048  1.00                 N  
+ATOM   1804  CA  GLY   177      -4.804   7.728  -7.430  1.00                 C  
+ATOM   1805  C   GLY   177      -3.997   6.498  -7.757  1.00                 C  
+ATOM   1806  O   GLY   177      -3.739   5.662  -6.893  1.00                 O  
+ATOM   1807  H   GLY   177      -6.692   6.972  -7.655  1.00                 H  
+ATOM   1808  N   HIS   178      -3.510   6.409  -9.018  1.00                 N  
+ATOM   1809  CA  HIS   178      -2.853   5.236  -9.527  1.00                 C  
+ATOM   1810  C   HIS   178      -1.363   5.360  -9.348  1.00                 C  
+ATOM   1811  O   HIS   178      -0.774   6.389  -9.670  1.00                 O  
+ATOM   1812  H   HIS   178      -3.614   7.131  -9.545  1.00                 H  
+ATOM   1813  CB  HIS   178      -3.203   5.023 -11.001  1.00                 C  
+ATOM   1814  CG  HIS   178      -4.647   4.707 -11.239  1.00                 C  
+ATOM   1815  HD1 HIS   178      -4.935   3.140  -9.931  1.00                 H  
+ATOM   1816  ND1 HIS   178      -5.310   3.700 -10.571  1.00                 N  
+ATOM   1817  CE1 HIS   178      -6.585   3.659 -10.995  1.00                 C  
+ATOM   1818  CD2 HIS   178      -5.698   5.237 -12.096  1.00                 C  
+ATOM   1819  NE2 HIS   178      -6.825   4.578 -11.910  1.00                 N  
+ATOM   1820  N   SER   179      -0.673   4.295  -8.885  1.00                 N  
+ATOM   1821  CA  SER   179       0.735   4.496  -8.696  1.00                 C  
+ATOM   1822  C   SER   179       1.417   4.590 -10.040  1.00                 C  
+ATOM   1823  O   SER   179       1.060   3.920 -11.011  1.00                 O  
+ATOM   1824  H   SER   179      -1.043   3.496  -8.697  1.00                 H  
+ATOM   1825  CB  SER   179       1.331   3.362  -7.859  1.00                 C  
+ATOM   1826  HG  SER   179      -0.044   3.235  -6.606  1.00                 H  
+ATOM   1827  OG  SER   179       0.777   3.345  -6.555  1.00                 O  
+ATOM   1828  N   PRO   180       2.434   5.416 -10.097  1.00                 N  
+ATOM   1829  CA  PRO   180       3.189   5.650 -11.294  1.00                 C  
+ATOM   1830  C   PRO   180       3.712   4.382 -11.916  1.00                 C  
+ATOM   1831  O   PRO   180       3.858   4.322 -13.142  1.00                 O  
+ATOM   1832  CB  PRO   180       4.343   6.544 -10.835  1.00                 C  
+ATOM   1833  CD  PRO   180       3.036   6.049  -8.892  1.00                 C  
+ATOM   1834  CG  PRO   180       4.439   6.304  -9.366  1.00                 C  
+ATOM   1835  N   THR   181       3.998   3.352 -11.097  1.00                 N  
+ATOM   1836  CA  THR   181       4.586   2.160 -11.626  1.00                 C  
+ATOM   1837  C   THR   181       3.510   1.166 -11.966  1.00                 C  
+ATOM   1838  O   THR   181       3.760  -0.034 -11.901  1.00                 O  
+ATOM   1839  H   THR   181       3.819   3.413 -10.217  1.00                 H  
+ATOM   1840  CB  THR   181       5.587   1.537 -10.635  1.00                 C  
+ATOM   1841  HG1 THR   181       7.183   2.128  -9.838  1.00                 H  
+ATOM   1842  OG1 THR   181       6.645   2.466 -10.372  1.00                 O  
+ATOM   1843  CG2 THR   181       6.188   0.266 -11.215  1.00                 C  
+ATOM   1844  N   MET   182       2.296   1.617 -12.360  1.00                 N  
+ATOM   1845  CA  MET   182       1.252   0.697 -12.747  1.00                 C  
+ATOM   1846  C   MET   182       1.653   0.006 -14.022  1.00                 C  
+ATOM   1847  O   MET   182       1.415  -1.194 -14.172  1.00                 O  
+ATOM   1848  H   MET   182       2.144   2.504 -12.379  1.00                 H  
+ATOM   1849  CB  MET   182      -0.078   1.435 -12.913  1.00                 C  
+ATOM   1850  SD  MET   182      -1.571  -0.644 -11.853  1.00                 S  
+ATOM   1851  CE  MET   182      -2.281   0.438 -10.616  1.00                 C  
+ATOM   1852  CG  MET   182      -1.263   0.524 -13.191  1.00                 C  
+ATOM   1853  N   PRO   183       2.219   0.709 -14.975  1.00                 N  
+ATOM   1854  CA  PRO   183       2.600   0.054 -16.199  1.00                 C  
+ATOM   1855  C   PRO   183       3.650  -0.993 -16.026  1.00                 C  
+ATOM   1856  O   PRO   183       3.528  -2.039 -16.657  1.00                 O  
+ATOM   1857  CB  PRO   183       3.125   1.190 -17.079  1.00                 C  
+ATOM   1858  CD  PRO   183       2.300   2.250 -15.098  1.00                 C  
+ATOM   1859  CG  PRO   183       2.409   2.404 -16.589  1.00                 C  
+ATOM   1860  N   TYR   184       4.679  -0.757 -15.190  1.00                 N  
+ATOM   1861  CA  TYR   184       5.682  -1.765 -14.996  1.00                 C  
+ATOM   1862  C   TYR   184       5.056  -2.924 -14.320  1.00                 C  
+ATOM   1863  O   TYR   184       5.346  -4.054 -14.691  1.00                 O  
+ATOM   1864  H   TYR   184       4.740   0.028 -14.754  1.00                 H  
+ATOM   1865  CB  TYR   184       6.853  -1.207 -14.184  1.00                 C  
+ATOM   1866  CG  TYR   184       7.977  -2.195 -13.971  1.00                 C  
+ATOM   1867  HH  TYR   184      11.676  -4.761 -13.950  1.00                 H  
+ATOM   1868  OH  TYR   184      11.076  -4.907 -13.396  1.00                 O  
+ATOM   1869  CZ  TYR   184      10.049  -4.011 -13.585  1.00                 C  
+ATOM   1870  CD1 TYR   184       9.111  -2.167 -14.772  1.00                 C  
+ATOM   1871  CE1 TYR   184      10.143  -3.066 -14.584  1.00                 C  
+ATOM   1872  CD2 TYR   184       7.900  -3.154 -12.968  1.00                 C  
+ATOM   1873  CE2 TYR   184       8.922  -4.062 -12.766  1.00                 C  
+ATOM   1874  N   ILE   185       4.212  -2.684 -13.291  1.00                 N  
+ATOM   1875  CA  ILE   185       3.696  -3.806 -12.580  1.00                 C  
+ATOM   1876  C   ILE   185       2.847  -4.633 -13.492  1.00                 C  
+ATOM   1877  O   ILE   185       2.960  -5.856 -13.459  1.00                 O  
+ATOM   1878  H   ILE   185       3.974  -1.850 -13.050  1.00                 H  
+ATOM   1879  CB  ILE   185       2.894  -3.368 -11.340  1.00                 C  
+ATOM   1880  CD1 ILE   185       2.101  -4.184  -9.059  1.00                 C  
+ATOM   1881  CG1 ILE   185       2.639  -4.564 -10.421  1.00                 C  
+ATOM   1882  CG2 ILE   185       1.600  -2.687 -11.756  1.00                 C  
+ATOM   1883  N   LEU   186       2.011  -4.016 -14.360  1.00                 N  
+ATOM   1884  CA  LEU   186       1.203  -4.828 -15.224  1.00                 C  
+ATOM   1885  C   LEU   186       2.055  -5.620 -16.164  1.00                 C  
+ATOM   1886  O   LEU   186       1.803  -6.802 -16.377  1.00                 O  
+ATOM   1887  H   LEU   186       1.955  -3.119 -14.403  1.00                 H  
+ATOM   1888  CB  LEU   186       0.218  -3.959 -16.009  1.00                 C  
+ATOM   1889  CG  LEU   186      -0.907  -3.310 -15.200  1.00                 C  
+ATOM   1890  CD1 LEU   186      -1.697  -2.338 -16.063  1.00                 C  
+ATOM   1891  CD2 LEU   186      -1.829  -4.369 -14.616  1.00                 C  
+ATOM   1892  N   GLN   187       3.082  -5.001 -16.770  1.00                 N  
+ATOM   1893  CA  GLN   187       3.823  -5.692 -17.785  1.00                 C  
+ATOM   1894  C   GLN   187       4.543  -6.850 -17.158  1.00                 C  
+ATOM   1895  O   GLN   187       4.622  -7.917 -17.760  1.00                 O  
+ATOM   1896  H   GLN   187       3.306  -4.159 -16.543  1.00                 H  
+ATOM   1897  CB  GLN   187       4.800  -4.740 -18.477  1.00                 C  
+ATOM   1898  CD  GLN   187       3.302  -4.197 -20.436  1.00                 C  
+ATOM   1899  CG  GLN   187       4.130  -3.646 -19.292  1.00                 C  
+ATOM   1900  OE1 GLN   187       3.788  -4.992 -21.240  1.00                 O  
+ATOM   1901 1HE2 GLN   187       1.511  -4.071 -21.174  1.00                 H  
+ATOM   1902 2HE2 GLN   187       1.729  -3.192 -19.905  1.00                 H  
+ATOM   1903  NE2 GLN   187       2.045  -3.774 -20.513  1.00                 N  
+ATOM   1904  N   LYS   188       5.106  -6.690 -15.940  1.00                 N  
+ATOM   1905  CA  LYS   188       5.753  -7.829 -15.367  1.00                 C  
+ATOM   1906  C   LYS   188       4.721  -8.893 -15.099  1.00                 C  
+ATOM   1907  O   LYS   188       4.915 -10.059 -15.414  1.00                 O  
+ATOM   1908  H   LYS   188       5.087  -5.910 -15.491  1.00                 H  
+ATOM   1909  CB  LYS   188       6.492  -7.437 -14.086  1.00                 C  
+ATOM   1910  CD  LYS   188       8.808  -7.303 -15.043  1.00                 C  
+ATOM   1911  CE  LYS   188      10.062  -6.455 -15.173  1.00                 C  
+ATOM   1912  CG  LYS   188       7.706  -6.552 -14.315  1.00                 C  
+ATOM   1913 1HZ  LYS   188      11.850  -6.634 -15.989  1.00                 H  
+ATOM   1914 2HZ  LYS   188      10.840  -7.349 -16.750  1.00                 H  
+ATOM   1915 3HZ  LYS   188      11.349  -7.912 -15.511  1.00                 H  
+ATOM   1916  NZ  LYS   188      11.133  -7.158 -15.932  1.00                 N  
+ATOM   1917  N   SER   189       3.551  -8.548 -14.550  1.00                 N  
+ATOM   1918  CA  SER   189       2.619  -9.590 -14.218  1.00                 C  
+ATOM   1919  C   SER   189       2.007 -10.179 -15.466  1.00                 C  
+ATOM   1920  O   SER   189       1.095 -10.998 -15.391  1.00                 O  
+ATOM   1921  H   SER   189       3.341  -7.688 -14.388  1.00                 H  
+ATOM   1922  CB  SER   189       1.524  -9.055 -13.293  1.00                 C  
+ATOM   1923  HG  SER   189       1.187  -7.465 -14.208  1.00                 H  
+ATOM   1924  OG  SER   189       0.715  -8.101 -13.959  1.00                 O  
+ATOM   1925  N   GLY   190       2.442  -9.760 -16.665  1.00                 N  
+ATOM   1926  CA  GLY   190       1.897 -10.342 -17.867  1.00                 C  
+ATOM   1927  C   GLY   190       0.827  -9.454 -18.477  1.00                 C  
+ATOM   1928  O   GLY   190       0.467  -9.639 -19.638  1.00                 O  
+ATOM   1929  H   GLY   190       3.071  -9.119 -16.721  1.00                 H  
+ATOM   1930  N   PHE   191       0.297  -8.451 -17.743  1.00                 N  
+ATOM   1931  CA  PHE   191      -0.773  -7.623 -18.253  1.00                 C  
+ATOM   1932  C   PHE   191      -0.213  -6.606 -19.196  1.00                 C  
+ATOM   1933  O   PHE   191       0.890  -6.096 -19.001  1.00                 O  
+ATOM   1934  H   PHE   191       0.626  -8.304 -16.918  1.00                 H  
+ATOM   1935  CB  PHE   191      -1.522  -6.947 -17.103  1.00                 C  
+ATOM   1936  CG  PHE   191      -2.355  -7.892 -16.284  1.00                 C  
+ATOM   1937  CZ  PHE   191      -3.900  -9.642 -14.775  1.00                 C  
+ATOM   1938  CD1 PHE   191      -2.209  -7.954 -14.910  1.00                 C  
+ATOM   1939  CE1 PHE   191      -2.975  -8.823 -14.156  1.00                 C  
+ATOM   1940  CD2 PHE   191      -3.286  -8.719 -16.889  1.00                 C  
+ATOM   1941  CE2 PHE   191      -4.052  -9.588 -16.136  1.00                 C  
+ATOM   1942  N   LYS   192      -1.022  -6.231 -20.207  1.00                 N  
+ATOM   1943  CA  LYS   192      -0.651  -5.181 -21.117  1.00                 C  
+ATOM   1944  C   LYS   192      -1.697  -4.098 -21.053  1.00                 C  
+ATOM   1945  O   LYS   192      -1.605  -3.099 -21.771  1.00                 O  
+ATOM   1946  H   LYS   192      -1.810  -6.654 -20.306  1.00                 H  
+ATOM   1947  CB  LYS   192      -0.502  -5.731 -22.537  1.00                 C  
+ATOM   1948  CD  LYS   192       0.743  -7.210 -24.138  1.00                 C  
+ATOM   1949  CE  LYS   192       1.897  -8.184 -24.307  1.00                 C  
+ATOM   1950  CG  LYS   192       0.634  -6.728 -22.700  1.00                 C  
+ATOM   1951 1HZ  LYS   192       2.680  -9.257 -25.767  1.00                 H  
+ATOM   1952 2HZ  LYS   192       2.125  -8.007 -26.259  1.00                 H  
+ATOM   1953 3HZ  LYS   192       1.242  -9.111 -25.921  1.00                 H  
+ATOM   1954  NZ  LYS   192       1.996  -8.691 -25.704  1.00                 N  
+ATOM   1955  N   ASN   193      -2.711  -4.250 -20.173  1.00                 N  
+ATOM   1956  CA  ASN   193      -3.777  -3.286 -20.154  1.00                 C  
+ATOM   1957  C   ASN   193      -4.329  -3.089 -18.754  1.00                 C  
+ATOM   1958  O   ASN   193      -4.452  -4.026 -17.958  1.00                 O  
+ATOM   1959  H   ASN   193      -2.723  -4.946 -19.603  1.00                 H  
+ATOM   1960  CB  ASN   193      -4.894  -3.704 -21.112  1.00                 C  
+ATOM   1961  CG  ASN   193      -5.593  -4.976 -20.673  1.00                 C  
+ATOM   1962  OD1 ASN   193      -6.540  -4.936 -19.888  1.00                 O  
+ATOM   1963 1HD2 ASN   193      -5.505  -6.895 -20.952  1.00                 H  
+ATOM   1964 2HD2 ASN   193      -4.431  -6.096 -21.751  1.00                 H  
+ATOM   1965  ND2 ASN   193      -5.126  -6.111 -21.180  1.00                 N  
+ATOM   1966  N   MET   194      -4.702  -1.820 -18.454  1.00                 N  
+ATOM   1967  CA  MET   194      -5.322  -1.395 -17.221  1.00                 C  
+ATOM   1968  C   MET   194      -6.504  -0.525 -17.525  1.00                 C  
+ATOM   1969  O   MET   194      -6.528   0.203 -18.520  1.00                 O  
+ATOM   1970  H   MET   194      -4.533  -1.220 -19.103  1.00                 H  
+ATOM   1971  CB  MET   194      -4.313  -0.655 -16.341  1.00                 C  
+ATOM   1972  SD  MET   194      -2.629   1.494 -15.867  1.00                 S  
+ATOM   1973  CE  MET   194      -3.730   2.037 -14.563  1.00                 C  
+ATOM   1974  CG  MET   194      -3.784   0.633 -16.951  1.00                 C  
+ATOM   1975  N   LEU   195      -7.533  -0.600 -16.652  1.00                 N  
+ATOM   1976  CA  LEU   195      -8.711   0.205 -16.827  1.00                 C  
+ATOM   1977  C   LEU   195      -8.942   0.967 -15.555  1.00                 C  
+ATOM   1978  O   LEU   195      -8.973   0.371 -14.479  1.00                 O  
+ATOM   1979  H   LEU   195      -7.473  -1.164 -15.953  1.00                 H  
+ATOM   1980  CB  LEU   195      -9.911  -0.673 -17.189  1.00                 C  
+ATOM   1981  CG  LEU   195     -11.254   0.044 -17.342  1.00                 C  
+ATOM   1982  CD1 LEU   195     -11.222   1.000 -18.525  1.00                 C  
+ATOM   1983  CD2 LEU   195     -12.384  -0.960 -17.503  1.00                 C  
+ATOM   1984  N   ILE   196      -9.066   2.317 -15.634  1.00                 N  
+ATOM   1985  CA  ILE   196      -9.253   3.061 -14.414  1.00                 C  
+ATOM   1986  C   ILE   196     -10.228   4.194 -14.582  1.00                 C  
+ATOM   1987  O   ILE   196     -10.400   4.722 -15.678  1.00                 O  
+ATOM   1988  H   ILE   196      -9.034   2.748 -16.423  1.00                 H  
+ATOM   1989  CB  ILE   196      -7.919   3.615 -13.881  1.00                 C  
+ATOM   1990  CD1 ILE   196      -7.753   6.043 -14.639  1.00                 C  
+ATOM   1991  CG1 ILE   196      -7.320   4.613 -14.875  1.00                 C  
+ATOM   1992  CG2 ILE   196      -6.957   2.479 -13.569  1.00                 C  
+ATOM   1993  N   GLN   197     -10.968   4.562 -13.505  1.00                 N  
+ATOM   1994  CA  GLN   197     -11.786   5.735 -13.654  1.00                 C  
+ATOM   1995  C   GLN   197     -11.562   6.709 -12.535  1.00                 C  
+ATOM   1996  O   GLN   197     -12.278   6.730 -11.534  1.00                 O  
+ATOM   1997  H   GLN   197     -10.965   4.112 -12.726  1.00                 H  
+ATOM   1998  CB  GLN   197     -13.266   5.351 -13.720  1.00                 C  
+ATOM   1999  CD  GLN   197     -14.529   7.447 -13.094  1.00                 C  
+ATOM   2000  CG  GLN   197     -14.176   6.471 -14.199  1.00                 C  
+ATOM   2001  OE1 GLN   197     -14.908   7.044 -11.995  1.00                 O  
+ATOM   2002 1HE2 GLN   197     -14.603   9.359 -12.765  1.00                 H  
+ATOM   2003 2HE2 GLN   197     -14.126   8.989 -14.202  1.00                 H  
+ATOM   2004  NE2 GLN   197     -14.406   8.737 -13.385  1.00                 N  
+ATOM   2005  N   ARG   198     -10.555   7.585 -12.731  1.00                 N  
+ATOM   2006  CA  ARG   198     -10.213   8.642 -11.820  1.00                 C  
+ATOM   2007  C   ARG   198      -8.945   9.240 -12.348  1.00                 C  
+ATOM   2008  O   ARG   198      -8.067   8.520 -12.817  1.00                 O  
+ATOM   2009  H   ARG   198     -10.084   7.476 -13.490  1.00                 H  
+ATOM   2010  CB  ARG   198     -10.067   8.097 -10.398  1.00                 C  
+ATOM   2011  CD  ARG   198     -10.976  10.002  -9.039  1.00                 C  
+ATOM   2012  HE  ARG   198     -11.847   8.409  -8.186  1.00                 H  
+ATOM   2013  NE  ARG   198     -12.044   9.210  -8.433  1.00                 N  
+ATOM   2014  CG  ARG   198      -9.752   9.158  -9.356  1.00                 C  
+ATOM   2015  CZ  ARG   198     -13.284   9.650  -8.243  1.00                 C  
+ATOM   2016 1HH1 ARG   198     -13.974   8.061  -7.444  1.00                 H  
+ATOM   2017 2HH1 ARG   198     -14.992   9.143  -7.561  1.00                 H  
+ATOM   2018  NH1 ARG   198     -14.190   8.859  -7.683  1.00                 N  
+ATOM   2019 1HH2 ARG   198     -13.029  11.392  -8.976  1.00                 H  
+ATOM   2020 2HH2 ARG   198     -14.418  11.163  -8.490  1.00                 H  
+ATOM   2021  NH2 ARG   198     -13.616  10.879  -8.613  1.00                 N  
+ATOM   2022  N   THR   199      -8.804  10.572 -12.205  1.00                 N  
+ATOM   2023  CA  THR   199      -7.677  11.365 -12.615  1.00                 C  
+ATOM   2024  C   THR   199      -7.291  11.185 -14.061  1.00                 C  
+ATOM   2025  O   THR   199      -6.318  10.533 -14.425  1.00                 O  
+ATOM   2026  H   THR   199      -9.510  10.965 -11.808  1.00                 H  
+ATOM   2027  CB  THR   199      -6.434  11.065 -11.757  1.00                 C  
+ATOM   2028  HG1 THR   199      -5.188  11.862 -12.917  1.00                 H  
+ATOM   2029  OG1 THR   199      -5.375  11.962 -12.115  1.00                 O  
+ATOM   2030  CG2 THR   199      -5.960   9.638 -11.987  1.00                 C  
+ATOM   2031  N   HIS   200      -8.116  11.727 -14.960  1.00                 N  
+ATOM   2032  CA  HIS   200      -7.815  11.780 -16.370  1.00                 C  
+ATOM   2033  C   HIS   200      -8.948  12.588 -16.887  1.00                 C  
+ATOM   2034  O   HIS   200     -10.096  12.351 -16.506  1.00                 O  
+ATOM   2035  H   HIS   200      -8.889  12.069 -14.652  1.00                 H  
+ATOM   2036  CB  HIS   200      -7.711  10.368 -16.949  1.00                 C  
+ATOM   2037  CG  HIS   200      -8.988   9.590 -16.878  1.00                 C  
+ATOM   2038  HD1 HIS   200      -8.826   8.728 -15.011  1.00                 H  
+ATOM   2039  ND1 HIS   200      -9.335   8.828 -15.783  1.00                 N  
+ATOM   2040  CE1 HIS   200     -10.529   8.252 -16.012  1.00                 C  
+ATOM   2041  CD2 HIS   200     -10.127   9.380 -17.760  1.00                 C  
+ATOM   2042  NE2 HIS   200     -11.010   8.579 -17.196  1.00                 N  
+ATOM   2043  N   TYR   201      -8.648  13.541 -17.781  1.00                 N  
+ATOM   2044  CA  TYR   201      -9.649  14.361 -18.401  1.00                 C  
+ATOM   2045  C   TYR   201      -9.509  14.099 -19.847  1.00                 C  
+ATOM   2046  O   TYR   201      -8.449  14.378 -20.405  1.00                 O  
+ATOM   2047  H   TYR   201      -7.780  13.657 -17.988  1.00                 H  
+ATOM   2048  CB  TYR   201      -9.445  15.831 -18.027  1.00                 C  
+ATOM   2049  CG  TYR   201     -10.473  16.764 -18.626  1.00                 C  
+ATOM   2050  HH  TYR   201     -14.027  19.240 -19.850  1.00                 H  
+ATOM   2051  OH  TYR   201     -13.311  19.324 -20.262  1.00                 O  
+ATOM   2052  CZ  TYR   201     -12.371  18.477 -19.722  1.00                 C  
+ATOM   2053  CD1 TYR   201     -11.764  16.820 -18.117  1.00                 C  
+ATOM   2054  CE1 TYR   201     -12.710  17.669 -18.658  1.00                 C  
+ATOM   2055  CD2 TYR   201     -10.149  17.585 -19.698  1.00                 C  
+ATOM   2056  CE2 TYR   201     -11.082  18.441 -20.252  1.00                 C  
+ATOM   2057  N   SER   202     -10.570  13.552 -20.473  1.00                 N  
+ATOM   2058  CA  SER   202     -10.552  13.305 -21.894  1.00                 C  
+ATOM   2059  C   SER   202     -11.108  14.518 -22.573  1.00                 C  
+ATOM   2060  O   SER   202     -11.974  15.216 -22.047  1.00                 O  
+ATOM   2061  H   SER   202     -11.298  13.340 -19.989  1.00                 H  
+ATOM   2062  CB  SER   202     -11.353  12.045 -22.229  1.00                 C  
+ATOM   2063  HG  SER   202     -11.874  11.164 -23.788  1.00                 H  
+ATOM   2064  OG  SER   202     -11.436  11.851 -23.630  1.00                 O  
+ATOM   2065  N   VAL   203     -10.608  14.789 -23.788  1.00                 N  
+ATOM   2066  CA  VAL   203     -11.034  15.903 -24.570  1.00                 C  
+ATOM   2067  C   VAL   203     -11.444  15.283 -25.873  1.00                 C  
+ATOM   2068  O   VAL   203     -10.904  14.249 -26.270  1.00                 O  
+ATOM   2069  H   VAL   203      -9.977  14.231 -24.106  1.00                 H  
+ATOM   2070  CB  VAL   203      -9.919  16.956 -24.706  1.00                 C  
+ATOM   2071  CG1 VAL   203      -9.545  17.515 -23.342  1.00                 C  
+ATOM   2072  CG2 VAL   203      -8.701  16.357 -25.393  1.00                 C  
+ATOM   2073  N   LYS   204     -12.421  15.903 -26.562  1.00                 N  
+ATOM   2074  CA  LYS   204     -13.021  15.350 -27.740  1.00                 C  
+ATOM   2075  C   LYS   204     -12.120  15.524 -28.921  1.00                 C  
+ATOM   2076  O   LYS   204     -11.145  16.266 -28.875  1.00                 O  
+ATOM   2077  H   LYS   204     -12.695  16.702 -26.250  1.00                 H  
+ATOM   2078  CB  LYS   204     -14.379  16.002 -28.006  1.00                 C  
+ATOM   2079  CD  LYS   204     -16.755  16.366 -27.284  1.00                 C  
+ATOM   2080  CE  LYS   204     -17.805  16.066 -26.227  1.00                 C  
+ATOM   2081  CG  LYS   204     -15.424  15.718 -26.939  1.00                 C  
+ATOM   2082 1HZ  LYS   204     -19.698  16.520 -25.900  1.00                 H  
+ATOM   2083 2HZ  LYS   204     -19.409  16.420 -27.321  1.00                 H  
+ATOM   2084 3HZ  LYS   204     -18.997  17.598 -26.577  1.00                 H  
+ATOM   2085  NZ  LYS   204     -19.108  16.716 -26.537  1.00                 N  
+ATOM   2086  N   LYS   205     -12.436  14.835 -30.036  1.00                 N  
+ATOM   2087  CA  LYS   205     -11.613  14.940 -31.205  1.00                 C  
+ATOM   2088  C   LYS   205     -11.622  16.360 -31.695  1.00                 C  
+ATOM   2089  O   LYS   205     -10.617  16.827 -32.229  1.00                 O  
+ATOM   2090  H   LYS   205     -13.166  14.308 -30.045  1.00                 H  
+ATOM   2091  CB  LYS   205     -12.102  13.981 -32.292  1.00                 C  
+ATOM   2092  CD  LYS   205     -12.375  11.620 -33.097  1.00                 C  
+ATOM   2093  CE  LYS   205     -12.124  10.152 -32.789  1.00                 C  
+ATOM   2094  CG  LYS   205     -11.862  12.513 -31.979  1.00                 C  
+ATOM   2095 1HZ  LYS   205     -12.495   8.413 -33.645  1.00                 H  
+ATOM   2096 2HZ  LYS   205     -12.263   9.456 -34.630  1.00                 H  
+ATOM   2097 3HZ  LYS   205     -13.537   9.384 -33.934  1.00                 H  
+ATOM   2098  NZ  LYS   205     -12.658   9.262 -33.857  1.00                 N  
+ATOM   2099  N   GLU   206     -12.749  17.092 -31.542  1.00                 N  
+ATOM   2100  CA  GLU   206     -12.784  18.439 -32.031  1.00                 C  
+ATOM   2101  C   GLU   206     -12.334  19.425 -30.993  1.00                 C  
+ATOM   2102  O   GLU   206     -13.144  20.073 -30.332  1.00                 O  
+ATOM   2103  H   GLU   206     -13.472  16.741 -31.138  1.00                 H  
+ATOM   2104  CB  GLU   206     -14.193  18.800 -32.506  1.00                 C  
+ATOM   2105  CD  GLU   206     -16.079  18.361 -34.128  1.00                 C  
+ATOM   2106  CG  GLU   206     -14.679  17.979 -33.689  1.00                 C  
+ATOM   2107  OE1 GLU   206     -16.728  19.156 -33.417  1.00                 O  
+ATOM   2108  OE2 GLU   206     -16.526  17.865 -35.183  1.00                 O  
+ATOM   2109  N   LEU   207     -11.003  19.591 -30.867  1.00                 N  
+ATOM   2110  CA  LEU   207     -10.380  20.512 -29.953  1.00                 C  
+ATOM   2111  C   LEU   207      -8.908  20.350 -30.155  1.00                 C  
+ATOM   2112  O   LEU   207      -8.448  19.310 -30.625  1.00                 O  
+ATOM   2113  H   LEU   207     -10.495  19.077 -31.404  1.00                 H  
+ATOM   2114  CB  LEU   207     -10.820  20.222 -28.517  1.00                 C  
+ATOM   2115  CG  LEU   207     -10.219  21.115 -27.430  1.00                 C  
+ATOM   2116  CD1 LEU   207     -10.688  22.552 -27.595  1.00                 C  
+ATOM   2117  CD2 LEU   207     -10.580  20.596 -26.046  1.00                 C  
+ATOM   2118  N   ALA   208      -8.135  21.388 -29.790  1.00                 N  
+ATOM   2119  CA  ALA   208      -6.723  21.414 -30.038  1.00                 C  
+ATOM   2120  C   ALA   208      -5.885  20.405 -29.294  1.00                 C  
+ATOM   2121  O   ALA   208      -5.103  19.701 -29.917  1.00                 O  
+ATOM   2122  H   ALA   208      -8.532  22.082 -29.377  1.00                 H  
+ATOM   2123  CB  ALA   208      -6.154  22.788 -29.719  1.00                 C  
+ATOM   2124  N   GLN   209      -6.034  20.266 -27.965  1.00                 N  
+ATOM   2125  CA  GLN   209      -5.166  19.478 -27.117  1.00                 C  
+ATOM   2126  C   GLN   209      -4.201  20.493 -26.567  1.00                 C  
+ATOM   2127  O   GLN   209      -3.475  21.148 -27.312  1.00                 O  
+ATOM   2128  H   GLN   209      -6.733  20.707 -27.608  1.00                 H  
+ATOM   2129  CB  GLN   209      -4.504  18.358 -27.922  1.00                 C  
+ATOM   2130  CD  GLN   209      -3.072  16.277 -27.905  1.00                 C  
+ATOM   2131  CG  GLN   209      -3.656  17.412 -27.087  1.00                 C  
+ATOM   2132  OE1 GLN   209      -3.119  16.298 -29.135  1.00                 O  
+ATOM   2133 1HE2 GLN   209      -2.155  14.583 -27.661  1.00                 H  
+ATOM   2134 2HE2 GLN   209      -2.503  15.306 -26.324  1.00                 H  
+ATOM   2135  NE2 GLN   209      -2.517  15.282 -27.223  1.00                 N  
+ATOM   2136  N   GLN   210      -4.189  20.635 -25.228  1.00                 N  
+ATOM   2137  CA  GLN   210      -3.560  21.708 -24.491  1.00                 C  
+ATOM   2138  C   GLN   210      -2.056  21.778 -24.445  1.00                 C  
+ATOM   2139  O   GLN   210      -1.530  22.878 -24.307  1.00                 O  
+ATOM   2140  H   GLN   210      -4.623  19.981 -24.788  1.00                 H  
+ATOM   2141  CB  GLN   210      -4.019  21.696 -23.031  1.00                 C  
+ATOM   2142  CD  GLN   210      -4.032  24.201 -22.709  1.00                 C  
+ATOM   2143  CG  GLN   210      -3.508  22.869 -22.211  1.00                 C  
+ATOM   2144  OE1 GLN   210      -5.236  24.374 -22.899  1.00                 O  
+ATOM   2145 1HE2 GLN   210      -3.386  25.960 -23.218  1.00                 H  
+ATOM   2146 2HE2 GLN   210      -2.256  24.983 -22.771  1.00                 H  
+ATOM   2147  NE2 GLN   210      -3.127  25.150 -22.922  1.00                 N  
+ATOM   2148  N   ARG   211      -1.343  20.635 -24.464  1.00                 N  
+ATOM   2149  CA  ARG   211       0.096  20.463 -24.352  1.00                 C  
+ATOM   2150  C   ARG   211       0.541  20.670 -22.928  1.00                 C  
+ATOM   2151  O   ARG   211       1.246  19.823 -22.383  1.00                 O  
+ATOM   2152  H   ARG   211      -1.876  19.916 -24.561  1.00                 H  
+ATOM   2153  CB  ARG   211       0.826  21.431 -25.286  1.00                 C  
+ATOM   2154  CD  ARG   211       1.207  22.264 -27.622  1.00                 C  
+ATOM   2155  HE  ARG   211       0.410  21.416 -29.256  1.00                 H  
+ATOM   2156  NE  ARG   211       0.924  22.074 -29.043  1.00                 N  
+ATOM   2157  CG  ARG   211       0.533  21.208 -26.761  1.00                 C  
+ATOM   2158  CZ  ARG   211       1.407  22.845 -30.011  1.00                 C  
+ATOM   2159 1HH1 ARG   211       0.582  21.934 -31.469  1.00                 H  
+ATOM   2160 2HH1 ARG   211       1.409  23.095 -31.902  1.00                 H  
+ATOM   2161  NH1 ARG   211       1.096  22.596 -31.276  1.00                 N  
+ATOM   2162 1HH2 ARG   211       2.403  24.026 -28.892  1.00                 H  
+ATOM   2163 2HH2 ARG   211       2.514  24.364 -30.339  1.00                 H  
+ATOM   2164  NH2 ARG   211       2.201  23.865 -29.712  1.00                 N  
+ATOM   2165  N   GLN   212       0.073  21.745 -22.261  1.00                 N  
+ATOM   2166  CA  GLN   212       0.425  22.063 -20.898  1.00                 C  
+ATOM   2167  C   GLN   212      -0.270  21.143 -19.970  1.00                 C  
+ATOM   2168  O   GLN   212       0.133  21.054 -18.814  1.00                 O  
+ATOM   2169  H   GLN   212      -0.490  22.279 -22.717  1.00                 H  
+ATOM   2170  CB  GLN   212       0.076  23.518 -20.580  1.00                 C  
+ATOM   2171  CD  GLN   212       0.534  25.966 -21.003  1.00                 C  
+ATOM   2172  CG  GLN   212       0.926  24.537 -21.322  1.00                 C  
+ATOM   2173  OE1 GLN   212      -0.626  26.250 -20.703  1.00                 O  
+ATOM   2174 1HE2 GLN   212       1.324  27.736 -20.886  1.00                 H  
+ATOM   2175 2HE2 GLN   212       2.338  26.623 -21.290  1.00                 H  
+ATOM   2176  NE2 GLN   212       1.503  26.872 -21.067  1.00                 N  
+ATOM   2177  N   LEU   213      -1.396  20.537 -20.411  1.00                 N  
+ATOM   2178  CA  LEU   213      -2.079  19.600 -19.560  1.00                 C  
+ATOM   2179  C   LEU   213      -1.361  18.300 -19.661  1.00                 C  
+ATOM   2180  O   LEU   213      -1.159  17.767 -20.753  1.00                 O  
+ATOM   2181  H   LEU   213      -1.718  20.717 -21.232  1.00                 H  
+ATOM   2182  CB  LEU   213      -3.548  19.477 -19.969  1.00                 C  
+ATOM   2183  CG  LEU   213      -4.394  20.747 -19.847  1.00                 C  
+ATOM   2184  CD1 LEU   213      -5.797  20.512 -20.385  1.00                 C  
+ATOM   2185  CD2 LEU   213      -4.453  21.217 -18.402  1.00                 C  
+ATOM   2186  N   GLU   214      -0.850  17.826 -18.509  1.00                 N  
+ATOM   2187  CA  GLU   214      -0.237  16.537 -18.419  1.00                 C  
+ATOM   2188  C   GLU   214      -1.306  15.473 -18.383  1.00                 C  
+ATOM   2189  O   GLU   214      -1.225  14.471 -19.094  1.00                 O  
+ATOM   2190  H   GLU   214      -0.904  18.351 -17.780  1.00                 H  
+ATOM   2191  CB  GLU   214       0.659  16.455 -17.181  1.00                 C  
+ATOM   2192  CD  GLU   214       2.736  17.262 -15.992  1.00                 C  
+ATOM   2193  CG  GLU   214       1.906  17.320 -17.259  1.00                 C  
+ATOM   2194  OE1 GLU   214       2.141  17.207 -14.895  1.00                 O  
+ATOM   2195  OE2 GLU   214       3.980  17.272 -16.096  1.00                 O  
+ATOM   2196  N   PHE   215      -2.346  15.696 -17.543  1.00                 N  
+ATOM   2197  CA  PHE   215      -3.442  14.800 -17.288  1.00                 C  
+ATOM   2198  C   PHE   215      -4.591  15.157 -18.157  1.00                 C  
+ATOM   2199  O   PHE   215      -5.726  15.156 -17.680  1.00                 O  
+ATOM   2200  H   PHE   215      -2.309  16.492 -17.125  1.00                 H  
+ATOM   2201  CB  PHE   215      -3.840  14.847 -15.811  1.00                 C  
+ATOM   2202  CG  PHE   215      -2.766  14.364 -14.879  1.00                 C  
+ATOM   2203  CZ  PHE   215      -0.781  13.465 -13.153  1.00                 C  
+ATOM   2204  CD1 PHE   215      -1.960  15.264 -14.204  1.00                 C  
+ATOM   2205  CE1 PHE   215      -0.972  14.820 -13.346  1.00                 C  
+ATOM   2206  CD2 PHE   215      -2.563  13.011 -14.675  1.00                 C  
+ATOM   2207  CE2 PHE   215      -1.575  12.567 -13.817  1.00                 C  
+ATOM   2208  N   LEU   216      -4.354  15.415 -19.447  1.00                 N  
+ATOM   2209  CA  LEU   216      -5.477  15.584 -20.311  1.00                 C  
+ATOM   2210  C   LEU   216      -5.399  14.435 -21.255  1.00                 C  
+ATOM   2211  O   LEU   216      -4.574  13.564 -21.048  1.00                 O  
+ATOM   2212  H   LEU   216      -3.519  15.483 -19.776  1.00                 H  
+ATOM   2213  CB  LEU   216      -5.420  16.948 -21.003  1.00                 C  
+ATOM   2214  CG  LEU   216      -4.180  17.225 -21.854  1.00                 C  
+ATOM   2215  CD1 LEU   216      -4.299  16.552 -23.213  1.00                 C  
+ATOM   2216  CD2 LEU   216      -3.967  18.722 -22.022  1.00                 C  
+ATOM   2217  N   TRP   217      -6.266  14.292 -22.269  1.00                 N  
+ATOM   2218  CA  TRP   217      -6.128  12.993 -22.899  1.00                 C  
+ATOM   2219  C   TRP   217      -7.004  12.843 -24.084  1.00                 C  
+ATOM   2220  O   TRP   217      -8.205  12.838 -23.921  1.00                 O  
+ATOM   2221  H   TRP   217      -6.878  14.877 -22.574  1.00                 H  
+ATOM   2222  CB  TRP   217      -6.434  11.877 -21.898  1.00                 C  
+ATOM   2223 1HB  TRP   217      -7.451  11.704 -21.821  1.00                 H  
+ATOM   2224 2HB  TRP   217      -5.780  11.774 -21.148  1.00                 H  
+ATOM   2225  CG  TRP   217      -6.215  10.501 -22.449  1.00                 C  
+ATOM   2226  CD1 TRP   217      -5.743  10.180 -23.689  1.00                 C  
+ATOM   2227  HE1 TRP   217      -5.384   8.368 -24.602  1.00                 H  
+ATOM   2228  NE1 TRP   217      -5.679   8.815 -23.833  1.00                 N  
+ATOM   2229  CD2 TRP   217      -6.460   9.259 -21.778  1.00                 C  
+ATOM   2230  CE2 TRP   217      -6.115   8.228 -22.671  1.00                 C  
+ATOM   2231  CH2 TRP   217      -6.701   6.576 -21.090  1.00                 C  
+ATOM   2232  CZ2 TRP   217      -6.232   6.880 -22.337  1.00                 C  
+ATOM   2233  CE3 TRP   217      -6.938   8.918 -20.509  1.00                 C  
+ATOM   2234  CZ3 TRP   217      -7.053   7.580 -20.182  1.00                 C  
+ATOM   2235  N   ARG   218      -6.467  12.743 -25.305  1.00                 N  
+ATOM   2236  CA  ARG   218      -7.199  12.250 -26.423  1.00                 C  
+ATOM   2237  C   ARG   218      -7.071  10.740 -26.091  1.00                 C  
+ATOM   2238  O   ARG   218      -8.008   9.989 -26.358  1.00                 O  
+ATOM   2239  H   ARG   218      -5.611  13.001 -25.406  1.00                 H  
+ATOM   2240  CB  ARG   218      -6.568  12.731 -27.731  1.00                 C  
+ATOM   2241  CD  ARG   218      -6.018  14.642 -29.262  1.00                 C  
+ATOM   2242  HE  ARG   218      -6.187  13.275 -30.720  1.00                 H  
+ATOM   2243  NE  ARG   218      -6.576  13.992 -30.446  1.00                 N  
+ATOM   2244  CG  ARG   218      -6.733  14.220 -27.990  1.00                 C  
+ATOM   2245  CZ  ARG   218      -7.635  14.438 -31.113  1.00                 C  
+ATOM   2246 1HH1 ARG   218      -7.671  13.067 -32.438  1.00                 H  
+ATOM   2247 2HH1 ARG   218      -8.758  14.070 -32.610  1.00                 H  
+ATOM   2248  NH1 ARG   218      -8.073  13.782 -32.179  1.00                 N  
+ATOM   2249 1HH2 ARG   218      -7.972  15.966 -30.022  1.00                 H  
+ATOM   2250 2HH2 ARG   218      -8.941  15.829 -31.145  1.00                 H  
+ATOM   2251  NH2 ARG   218      -8.255  15.540 -30.713  1.00                 N  
+ATOM   2252  N   GLN   219      -5.888  10.268 -25.517  1.00                 N  
+ATOM   2253  CA  GLN   219      -5.745   8.981 -24.806  1.00                 C  
+ATOM   2254  C   GLN   219      -4.514   8.105 -24.898  1.00                 C  
+ATOM   2255  O   GLN   219      -4.251   7.634 -25.987  1.00                 O  
+ATOM   2256  H   GLN   219      -5.178  10.814 -25.605  1.00                 H  
+ATOM   2257  CB  GLN   219      -6.877   8.027 -25.193  1.00                 C  
+ATOM   2258  CD  GLN   219      -8.036   5.818 -24.794  1.00                 C  
+ATOM   2259  CG  GLN   219      -6.862   6.708 -24.436  1.00                 C  
+ATOM   2260  OE1 GLN   219      -8.781   6.104 -25.732  1.00                 O  
+ATOM   2261 1HE2 GLN   219      -8.887   4.172 -24.216  1.00                 H  
+ATOM   2262 2HE2 GLN   219      -7.638   4.562 -23.369  1.00                 H  
+ATOM   2263  NE2 GLN   219      -8.205   4.735 -24.046  1.00                 N  
+ATOM   2264  N   ILE   220      -3.840   7.754 -23.748  1.00                 N  
+ATOM   2265  CA  ILE   220      -2.838   6.694 -23.525  1.00                 C  
+ATOM   2266  C   ILE   220      -1.783   7.110 -22.605  1.00                 C  
+ATOM   2267  O   ILE   220      -1.437   8.286 -22.577  1.00                 O  
+ATOM   2268  H   ILE   220      -4.091   8.286 -23.067  1.00                 H  
+ATOM   2269  CB  ILE   220      -2.200   6.233 -24.849  1.00                 C  
+ATOM   2270  CD1 ILE   220      -4.045   4.527 -25.277  1.00                 C  
+ATOM   2271  CG1 ILE   220      -3.275   5.716 -25.807  1.00                 C  
+ATOM   2272  CG2 ILE   220      -1.125   5.189 -24.587  1.00                 C  
+ATOM   2273  N   TRP   221      -1.397   6.148 -21.728  1.00                 N  
+ATOM   2274  CA  TRP   221      -0.390   6.355 -20.731  1.00                 C  
+ATOM   2275  C   TRP   221       0.883   5.603 -21.034  1.00                 C  
+ATOM   2276  O   TRP   221       0.848   4.563 -21.680  1.00                 O  
+ATOM   2277  H   TRP   221      -1.807   5.350 -21.795  1.00                 H  
+ATOM   2278  CB  TRP   221      -0.908   5.941 -19.352  1.00                 C  
+ATOM   2279 1HB  TRP   221      -0.267   6.246 -18.599  1.00                 H  
+ATOM   2280 2HB  TRP   221      -1.461   5.108 -19.327  1.00                 H  
+ATOM   2281  CG  TRP   221      -1.992   6.832 -18.827  1.00                 C  
+ATOM   2282  CD1 TRP   221      -2.446   7.990 -19.389  1.00                 C  
+ATOM   2283  HE1 TRP   221      -3.907   9.323 -18.812  1.00                 H  
+ATOM   2284  NE1 TRP   221      -3.448   8.529 -18.620  1.00                 N  
+ATOM   2285  CD2 TRP   221      -2.759   6.637 -17.632  1.00                 C  
+ATOM   2286  CE2 TRP   221      -3.658   7.715 -17.535  1.00                 C  
+ATOM   2287  CH2 TRP   221      -4.554   6.867 -15.521  1.00                 C  
+ATOM   2288  CZ2 TRP   221      -4.562   7.840 -16.481  1.00                 C  
+ATOM   2289  CE3 TRP   221      -2.773   5.656 -16.636  1.00                 C  
+ATOM   2290  CZ3 TRP   221      -3.671   5.784 -15.594  1.00                 C  
+ATOM   2291  N   ASP   222       2.048   6.224 -20.695  1.00                 N  
+ATOM   2292  CA  ASP   222       3.413   5.707 -20.712  1.00                 C  
+ATOM   2293  C   ASP   222       3.868   5.933 -19.332  1.00                 C  
+ATOM   2294  O   ASP   222       3.808   7.069 -18.869  1.00                 O  
+ATOM   2295  H   ASP   222       1.890   7.070 -20.431  1.00                 H  
+ATOM   2296  CB  ASP   222       4.245   6.426 -21.776  1.00                 C  
+ATOM   2297  CG  ASP   222       5.646   5.861 -21.900  1.00                 C  
+ATOM   2298  OD1 ASP   222       6.099   5.183 -20.953  1.00                 O  
+ATOM   2299  OD2 ASP   222       6.292   6.096 -22.943  1.00                 O  
+ATOM   2300  N   ASN   223       4.264   4.856 -18.630  1.00                 N  
+ATOM   2301  CA  ASN   223       4.767   5.013 -17.290  1.00                 C  
+ATOM   2302  C   ASN   223       6.196   5.478 -17.423  1.00                 C  
+ATOM   2303  O   ASN   223       6.739   5.491 -18.528  1.00                 O  
+ATOM   2304  H   ASN   223       4.214   4.037 -18.999  1.00                 H  
+ATOM   2305  CB  ASN   223       4.631   3.704 -16.510  1.00                 C  
+ATOM   2306  CG  ASN   223       5.516   2.603 -17.060  1.00                 C  
+ATOM   2307  OD1 ASN   223       6.408   2.856 -17.869  1.00                 O  
+ATOM   2308 1HD2 ASN   223       5.767   0.683 -16.916  1.00                 H  
+ATOM   2309 2HD2 ASN   223       4.608   1.231 -16.028  1.00                 H  
+ATOM   2310  ND2 ASN   223       5.271   1.374 -16.621  1.00                 N  
+ATOM   2311  N   LYS   224       6.828   5.932 -16.321  1.00                 N  
+ATOM   2312  CA  LYS   224       8.209   6.363 -16.386  1.00                 C  
+ATOM   2313  C   LYS   224       9.039   5.121 -16.317  1.00                 C  
+ATOM   2314  O   LYS   224       8.809   4.253 -15.492  1.00                 O  
+ATOM   2315  H   LYS   224       6.382   5.965 -15.540  1.00                 H  
+ATOM   2316  CB  LYS   224       8.519   7.342 -15.252  1.00                 C  
+ATOM   2317  CD  LYS   224       7.925   9.422 -16.525  1.00                 C  
+ATOM   2318  CE  LYS   224       7.145  10.727 -16.500  1.00                 C  
+ATOM   2319  CG  LYS   224       7.669   8.602 -15.271  1.00                 C  
+ATOM   2320 1HZ  LYS   224       6.905  12.289 -17.682  1.00                 H  
+ATOM   2321 2HZ  LYS   224       7.116  11.069 -18.444  1.00                 H  
+ATOM   2322 3HZ  LYS   224       8.240  11.728 -17.801  1.00                 H  
+ATOM   2323  NZ  LYS   224       7.375  11.534 -17.730  1.00                 N  
+ATOM   2324  N   GLY   225      10.077   5.014 -17.145  1.00                 N  
+ATOM   2325  CA  GLY   225      10.895   3.834 -17.230  1.00                 C  
+ATOM   2326  C   GLY   225      10.703   3.288 -18.605  1.00                 C  
+ATOM   2327  O   GLY   225      11.446   2.407 -19.034  1.00                 O  
+ATOM   2328  H   GLY   225      10.257   5.725 -17.667  1.00                 H  
+ATOM   2329  N   ASP   226       9.710   3.886 -19.300  1.00                 N  
+ATOM   2330  CA  ASP   226       9.124   3.713 -20.612  1.00                 C  
+ATOM   2331  C   ASP   226       8.473   2.360 -20.807  1.00                 C  
+ATOM   2332  O   ASP   226       8.276   1.928 -21.941  1.00                 O  
+ATOM   2333  H   ASP   226       9.397   4.524 -18.748  1.00                 H  
+ATOM   2334  CB  ASP   226      10.180   3.914 -21.701  1.00                 C  
+ATOM   2335  CG  ASP   226      10.717   5.331 -21.737  1.00                 C  
+ATOM   2336  OD1 ASP   226       9.971   6.259 -21.358  1.00                 O  
+ATOM   2337  OD2 ASP   226      11.883   5.515 -22.145  1.00                 O  
+ATOM   2338  N   THR   227       8.042   1.679 -19.720  1.00                 N  
+ATOM   2339  CA  THR   227       7.382   0.406 -19.873  1.00                 C  
+ATOM   2340  C   THR   227       5.884   0.633 -19.879  1.00                 C  
+ATOM   2341  O   THR   227       5.234   0.586 -18.837  1.00                 O  
+ATOM   2342  H   THR   227       8.169   2.024 -18.899  1.00                 H  
+ATOM   2343  CB  THR   227       7.779  -0.574 -18.754  1.00                 C  
+ATOM   2344  HG1 THR   227       9.588  -0.070 -18.673  1.00                 H  
+ATOM   2345  OG1 THR   227       9.195  -0.792 -18.786  1.00                 O  
+ATOM   2346  CG2 THR   227       7.077  -1.910 -18.941  1.00                 C  
+ATOM   2347  N   ALA   228       5.318   0.806 -21.104  1.00                 N  
+ATOM   2348  CA  ALA   228       3.972   1.244 -21.454  1.00                 C  
+ATOM   2349  C   ALA   228       2.935   0.149 -21.576  1.00                 C  
+ATOM   2350  O   ALA   228       3.262  -1.029 -21.473  1.00                 O  
+ATOM   2351  H   ALA   228       5.909   0.605 -21.753  1.00                 H  
+ATOM   2352  CB  ALA   228       3.989   2.010 -22.768  1.00                 C  
+ATOM   2353  N   LEU   229       1.623   0.540 -21.662  1.00                 N  
+ATOM   2354  CA  LEU   229       0.502  -0.371 -21.865  1.00                 C  
+ATOM   2355  C   LEU   229      -0.701   0.349 -22.351  1.00                 C  
+ATOM   2356  O   LEU   229      -0.720   1.573 -22.423  1.00                 O  
+ATOM   2357  H   LEU   229       1.476   1.424 -21.584  1.00                 H  
+ATOM   2358  CB  LEU   229       0.175  -1.116 -20.569  1.00                 C  
+ATOM   2359  CG  LEU   229      -0.154  -0.247 -19.353  1.00                 C  
+ATOM   2360  CD1 LEU   229      -1.596   0.234 -19.410  1.00                 C  
+ATOM   2361  CD2 LEU   229       0.098  -1.012 -18.062  1.00                 C  
+ATOM   2362  N   PHE   230      -1.739  -0.429 -22.713  1.00                 N  
+ATOM   2363  CA  PHE   230      -2.982   0.104 -23.192  1.00                 C  
+ATOM   2364  C   PHE   230      -3.680   0.639 -21.990  1.00                 C  
+ATOM   2365  O   PHE   230      -3.866  -0.065 -20.994  1.00                 O  
+ATOM   2366  H   PHE   230      -1.628  -1.319 -22.644  1.00                 H  
+ATOM   2367  CB  PHE   230      -3.785  -0.978 -23.916  1.00                 C  
+ATOM   2368  CG  PHE   230      -3.215  -1.365 -25.251  1.00                 C  
+ATOM   2369  CZ  PHE   230      -2.160  -2.074 -27.723  1.00                 C  
+ATOM   2370  CD1 PHE   230      -3.096  -2.696 -25.609  1.00                 C  
+ATOM   2371  CE1 PHE   230      -2.571  -3.052 -26.837  1.00                 C  
+ATOM   2372  CD2 PHE   230      -2.799  -0.398 -26.148  1.00                 C  
+ATOM   2373  CE2 PHE   230      -2.275  -0.754 -27.377  1.00                 C  
+ATOM   2374  N   THR   231      -4.058   1.931 -22.094  1.00                 N  
+ATOM   2375  CA  THR   231      -4.701   2.714 -21.075  1.00                 C  
+ATOM   2376  C   THR   231      -6.096   2.875 -21.500  1.00                 C  
+ATOM   2377  O   THR   231      -6.376   3.330 -22.608  1.00                 O  
+ATOM   2378  H   THR   231      -3.871   2.299 -22.894  1.00                 H  
+ATOM   2379  CB  THR   231      -3.998   4.070 -20.877  1.00                 C  
+ATOM   2380  HG1 THR   231      -2.244   3.417 -21.049  1.00                 H  
+ATOM   2381  OG1 THR   231      -2.643   3.853 -20.465  1.00                 O  
+ATOM   2382  CG2 THR   231      -4.706   4.886 -19.807  1.00                 C  
+ATOM   2383  N   HIS   232      -6.982   2.487 -20.576  1.00                 N  
+ATOM   2384  CA  HIS   232      -8.406   2.450 -20.737  1.00                 C  
+ATOM   2385  C   HIS   232      -8.905   3.522 -19.832  1.00                 C  
+ATOM   2386  O   HIS   232      -8.704   3.463 -18.617  1.00                 O  
+ATOM   2387  H   HIS   232      -6.611   2.234 -19.796  1.00                 H  
+ATOM   2388  CB  HIS   232      -8.947   1.059 -20.399  1.00                 C  
+ATOM   2389  CG  HIS   232      -8.440  -0.022 -21.302  1.00                 C  
+ATOM   2390  ND1 HIS   232      -8.991  -0.280 -22.538  1.00                 N  
+ATOM   2391  CE1 HIS   232      -8.327  -1.300 -23.109  1.00                 C  
+ATOM   2392  CD2 HIS   232      -7.381  -1.018 -21.234  1.00                 C  
+ATOM   2393  HE2 HIS   232      -6.775  -2.446 -22.524  1.00                 H  
+ATOM   2394  NE2 HIS   232      -7.360  -1.749 -22.333  1.00                 N  
+ATOM   2395  N   MET   233      -9.565   4.545 -20.408  1.00                 N  
+ATOM   2396  CA  MET   233     -10.029   5.594 -19.544  1.00                 C  
+ATOM   2397  C   MET   233     -11.512   5.643 -19.467  1.00                 C  
+ATOM   2398  O   MET   233     -12.252   5.250 -20.376  1.00                 O  
+ATOM   2399  H   MET   233      -9.720   4.590 -21.293  1.00                 H  
+ATOM   2400  CB  MET   233      -9.497   6.950 -20.014  1.00                 C  
+ATOM   2401  SD  MET   233      -9.267   8.926 -21.941  1.00                 S  
+ATOM   2402  CE  MET   233      -9.883   9.018 -23.620  1.00                 C  
+ATOM   2403  CG  MET   233      -9.903   7.319 -21.431  1.00                 C  
+ATOM   2404  N   MET   234     -11.968   6.050 -18.268  1.00                 N  
+ATOM   2405  CA  MET   234     -13.336   6.394 -18.150  1.00                 C  
+ATOM   2406  C   MET   234     -13.346   7.853 -18.585  1.00                 C  
+ATOM   2407  O   MET   234     -12.928   8.722 -17.819  1.00                 O  
+ATOM   2408  H   MET   234     -11.426   6.106 -17.551  1.00                 H  
+ATOM   2409  CB  MET   234     -13.828   6.152 -16.722  1.00                 C  
+ATOM   2410  SD  MET   234     -14.841   3.604 -17.118  1.00                 S  
+ATOM   2411  CE  MET   234     -13.744   2.862 -18.323  1.00                 C  
+ATOM   2412  CG  MET   234     -13.705   4.710 -16.259  1.00                 C  
+ATOM   2413  N   PRO   235     -13.666   8.207 -19.820  1.00                 N  
+ATOM   2414  CA  PRO   235     -14.112   9.543 -19.965  1.00                 C  
+ATOM   2415  C   PRO   235     -15.472   9.145 -19.720  1.00                 C  
+ATOM   2416  O   PRO   235     -15.719   8.028 -20.131  1.00                 O  
+ATOM   2417  CB  PRO   235     -13.699   9.919 -21.390  1.00                 C  
+ATOM   2418  CD  PRO   235     -12.964   7.669 -21.035  1.00                 C  
+ATOM   2419  CG  PRO   235     -12.613   8.954 -21.730  1.00                 C  
+ATOM   2420  N   PHE   236     -16.353   9.979 -19.178  1.00                 N  
+ATOM   2421  CA  PHE   236     -17.628   9.490 -18.764  1.00                 C  
+ATOM   2422  C   PHE   236     -17.142   8.557 -17.652  1.00                 C  
+ATOM   2423  O   PHE   236     -16.647   7.446 -17.849  1.00                 O  
+ATOM   2424  H   PHE   236     -16.148  10.849 -19.072  1.00                 H  
+ATOM   2425  CB  PHE   236     -18.360   8.840 -19.940  1.00                 C  
+ATOM   2426  CG  PHE   236     -19.742   8.357 -19.601  1.00                 C  
+ATOM   2427  CZ  PHE   236     -22.298   7.460 -18.980  1.00                 C  
+ATOM   2428  CD1 PHE   236     -20.437   8.898 -18.534  1.00                 C  
+ATOM   2429  CE1 PHE   236     -21.708   8.454 -18.223  1.00                 C  
+ATOM   2430  CD2 PHE   236     -20.346   7.363 -20.350  1.00                 C  
+ATOM   2431  CE2 PHE   236     -21.617   6.919 -20.039  1.00                 C  
+ATOM   2432  N   TYR   237     -17.213   9.024 -16.402  1.00                 N  
+ATOM   2433  CA  TYR   237     -16.747   8.249 -15.292  1.00                 C  
+ATOM   2434  C   TYR   237     -17.356   6.888 -15.259  1.00                 C  
+ATOM   2435  O   TYR   237     -18.319   6.606 -15.972  1.00                 O  
+ATOM   2436  H   TYR   237     -17.562   9.842 -16.265  1.00                 H  
+ATOM   2437  CB  TYR   237     -17.039   8.970 -13.975  1.00                 C  
+ATOM   2438  CG  TYR   237     -16.209  10.216 -13.762  1.00                 C  
+ATOM   2439  HH  TYR   237     -13.192  13.553 -13.587  1.00                 H  
+ATOM   2440  OH  TYR   237     -13.914  13.635 -13.185  1.00                 O  
+ATOM   2441  CZ  TYR   237     -14.674  12.505 -13.375  1.00                 C  
+ATOM   2442  CD1 TYR   237     -14.947  10.336 -14.331  1.00                 C  
+ATOM   2443  CE1 TYR   237     -14.182  11.471 -14.142  1.00                 C  
+ATOM   2444  CD2 TYR   237     -16.689  11.268 -12.992  1.00                 C  
+ATOM   2445  CE2 TYR   237     -15.937  12.410 -12.792  1.00                 C  
+ATOM   2446  N   SER   238     -16.750   5.981 -14.440  1.00                 N  
+ATOM   2447  CA  SER   238     -17.432   4.755 -14.135  1.00                 C  
+ATOM   2448  C   SER   238     -18.694   5.357 -13.573  1.00                 C  
+ATOM   2449  O   SER   238     -18.640   6.408 -12.957  1.00                 O  
+ATOM   2450  H   SER   238     -15.935   6.141 -14.092  1.00                 H  
+ATOM   2451  CB  SER   238     -16.594   3.898 -13.185  1.00                 C  
+ATOM   2452  HG  SER   238     -16.020   4.030 -11.415  1.00                 H  
+ATOM   2453  OG  SER   238     -16.477   4.511 -11.913  1.00                 O  
+ATOM   2454  N   TYR   239     -19.856   4.717 -13.665  1.00                 N  
+ATOM   2455  CA  TYR   239     -21.130   5.360 -13.430  1.00                 C  
+ATOM   2456  C   TYR   239     -21.749   5.922 -14.685  1.00                 C  
+ATOM   2457  O   TYR   239     -22.763   6.605 -14.598  1.00                 O  
+ATOM   2458  H   TYR   239     -19.826   3.845 -13.885  1.00                 H  
+ATOM   2459  CB  TYR   239     -20.982   6.483 -12.401  1.00                 C  
+ATOM   2460  CG  TYR   239     -20.387   6.034 -11.086  1.00                 C  
+ATOM   2461  HH  TYR   239     -19.314   4.409  -7.025  1.00                 H  
+ATOM   2462  OH  TYR   239     -18.738   4.806  -7.472  1.00                 O  
+ATOM   2463  CZ  TYR   239     -19.285   5.212  -8.667  1.00                 C  
+ATOM   2464  CD1 TYR   239     -19.060   6.303 -10.777  1.00                 C  
+ATOM   2465  CE1 TYR   239     -18.508   5.896  -9.576  1.00                 C  
+ATOM   2466  CD2 TYR   239     -21.155   5.343 -10.157  1.00                 C  
+ATOM   2467  CE2 TYR   239     -20.620   4.929  -8.952  1.00                 C  
+ATOM   2468  N   ASP   240     -21.190   5.654 -15.880  1.00                 N  
+ATOM   2469  CA  ASP   240     -21.766   6.042 -17.158  1.00                 C  
+ATOM   2470  C   ASP   240     -22.975   5.201 -17.421  1.00                 C  
+ATOM   2471  O   ASP   240     -23.932   5.706 -18.015  1.00                 O  
+ATOM   2472  H   ASP   240     -20.410   5.205 -15.856  1.00                 H  
+ATOM   2473  CB  ASP   240     -20.734   5.895 -18.278  1.00                 C  
+ATOM   2474  CG  ASP   240     -20.186   4.485 -18.383  1.00                 C  
+ATOM   2475  OD1 ASP   240     -20.425   3.684 -17.455  1.00                 O  
+ATOM   2476  OD2 ASP   240     -19.517   4.182 -19.394  1.00                 O  
+ATOM   2477  N   ILE   241     -22.979   3.872 -17.096  1.00                 N  
+ATOM   2478  CA  ILE   241     -24.335   3.436 -17.235  1.00                 C  
+ATOM   2479  C   ILE   241     -24.964   2.882 -15.992  1.00                 C  
+ATOM   2480  O   ILE   241     -25.385   1.728 -15.926  1.00                 O  
+ATOM   2481  H   ILE   241     -22.343   3.290 -16.838  1.00                 H  
+ATOM   2482  CB  ILE   241     -24.475   2.369 -18.337  1.00                 C  
+ATOM   2483  CD1 ILE   241     -24.624   4.127 -20.176  1.00                 C  
+ATOM   2484  CG1 ILE   241     -23.916   2.893 -19.661  1.00                 C  
+ATOM   2485  CG2 ILE   241     -25.924   1.926 -18.468  1.00                 C  
+ATOM   2486  N   PRO   242     -25.075   3.747 -15.019  1.00                 N  
+ATOM   2487  CA  PRO   242     -25.708   3.484 -13.776  1.00                 C  
+ATOM   2488  C   PRO   242     -27.209   3.469 -13.941  1.00                 C  
+ATOM   2489  O   PRO   242     -27.789   4.362 -14.561  1.00                 O  
+ATOM   2490  CB  PRO   242     -25.247   4.632 -12.876  1.00                 C  
+ATOM   2491  CD  PRO   242     -24.396   5.086 -15.066  1.00                 C  
+ATOM   2492  CG  PRO   242     -24.923   5.741 -13.820  1.00                 C  
+ATOM   2493  N   HIS   243     -27.851   2.494 -13.308  1.00                 N  
+ATOM   2494  CA  HIS   243     -29.267   2.298 -13.157  1.00                 C  
+ATOM   2495  C   HIS   243     -30.096   2.173 -14.383  1.00                 C  
+ATOM   2496  O   HIS   243     -31.293   2.015 -14.199  1.00                 O  
+ATOM   2497  H   HIS   243     -27.274   1.907 -12.944  1.00                 H  
+ATOM   2498  CB  HIS   243     -29.882   3.439 -12.344  1.00                 C  
+ATOM   2499  CG  HIS   243     -29.284   3.601 -10.982  1.00                 C  
+ATOM   2500  ND1 HIS   243     -29.101   4.832 -10.391  1.00                 N  
+ATOM   2501  CE1 HIS   243     -28.547   4.658  -9.177  1.00                 C  
+ATOM   2502  CD2 HIS   243     -28.768   2.701  -9.960  1.00                 C  
+ATOM   2503  HE2 HIS   243     -27.974   3.030  -8.136  1.00                 H  
+ATOM   2504  NE2 HIS   243     -28.345   3.382  -8.913  1.00                 N  
+ATOM   2505  N   THR   244     -29.516   2.024 -15.594  1.00                 N  
+ATOM   2506  CA  THR   244     -30.232   2.057 -16.851  1.00                 C  
+ATOM   2507  C   THR   244     -31.633   1.562 -16.805  1.00                 C  
+ATOM   2508  O   THR   244     -31.874   0.422 -16.419  1.00                 O  
+ATOM   2509  H   THR   244     -28.625   1.898 -15.587  1.00                 H  
+ATOM   2510  CB  THR   244     -29.505   1.241 -17.936  1.00                 C  
+ATOM   2511  HG1 THR   244     -29.792   0.951 -19.771  1.00                 H  
+ATOM   2512  OG1 THR   244     -30.186   1.392 -19.188  1.00                 O  
+ATOM   2513  CG2 THR   244     -29.485  -0.235 -17.569  1.00                 C  
+ATOM   2514  N   CYS   245     -32.578   2.474 -17.154  1.00                 N  
+ATOM   2515  CA  CYS   245     -34.011   2.228 -17.162  1.00                 C  
+ATOM   2516  C   CYS   245     -34.217   1.143 -18.142  1.00                 C  
+ATOM   2517  O   CYS   245     -33.862  -0.004 -17.911  1.00                 O  
+ATOM   2518  H   CYS   245     -32.259   3.281 -17.393  1.00                 H  
+ATOM   2519  CB  CYS   245     -34.772   3.507 -17.514  1.00                 C  
+ATOM   2520  SG  CYS   245     -34.634   4.823 -16.281  1.00                 S  
+ATOM   2521  N   GLY   246     -34.933   1.454 -19.215  1.00                 N  
+ATOM   2522  CA  GLY   246     -35.036   0.647 -20.389  1.00                 C  
+ATOM   2523  C   GLY   246     -36.074  -0.456 -20.510  1.00                 C  
+ATOM   2524  O   GLY   246     -36.082  -1.070 -21.580  1.00                 O  
+ATOM   2525  H   GLY   246     -35.374   2.237 -19.167  1.00                 H  
+ATOM   2526  N   PRO   247     -36.956  -0.759 -19.591  1.00                 N  
+ATOM   2527  CA  PRO   247     -37.836  -1.900 -19.770  1.00                 C  
+ATOM   2528  C   PRO   247     -39.081  -2.025 -20.566  1.00                 C  
+ATOM   2529  O   PRO   247     -39.907  -2.767 -20.035  1.00                 O  
+ATOM   2530  CB  PRO   247     -38.311  -2.227 -18.353  1.00                 C  
+ATOM   2531  CD  PRO   247     -36.771  -0.408 -18.131  1.00                 C  
+ATOM   2532  CG  PRO   247     -37.251  -1.667 -17.465  1.00                 C  
+ATOM   2533  N   ASP   248     -39.359  -1.304 -21.673  1.00                 N  
+ATOM   2534  CA  ASP   248     -40.578  -1.757 -22.302  1.00                 C  
+ATOM   2535  C   ASP   248     -41.029  -0.899 -23.440  1.00                 C  
+ATOM   2536  O   ASP   248     -41.816   0.006 -23.159  1.00                 O  
+ATOM   2537  H   ASP   248     -38.895  -0.621 -22.031  1.00                 H  
+ATOM   2538  CB  ASP   248     -41.711  -1.840 -21.277  1.00                 C  
+ATOM   2539  CG  ASP   248     -42.973  -2.453 -21.852  1.00                 C  
+ATOM   2540  OD1 ASP   248     -42.996  -2.734 -23.069  1.00                 O  
+ATOM   2541  OD2 ASP   248     -43.939  -2.651 -21.086  1.00                 O  
+ATOM   2542  N   PRO   249     -40.651  -1.091 -24.678  1.00                 N  
+ATOM   2543  CA  PRO   249     -41.386  -0.415 -25.708  1.00                 C  
+ATOM   2544  C   PRO   249     -42.672  -1.097 -25.769  1.00                 C  
+ATOM   2545  O   PRO   249     -42.717  -2.304 -26.005  1.00                 O  
+ATOM   2546  CB  PRO   249     -40.525  -0.599 -26.959  1.00                 C  
+ATOM   2547  CD  PRO   249     -39.507  -1.872 -25.206  1.00                 C  
+ATOM   2548  CG  PRO   249     -39.736  -1.837 -26.691  1.00                 C  
+ATOM   2549  N   LYS   250     -43.718  -0.342 -25.481  1.00                 N  
+ATOM   2550  CA  LYS   250     -45.013  -0.836 -25.725  1.00                 C  
+ATOM   2551  C   LYS   250     -45.145  -0.652 -27.209  1.00                 C  
+ATOM   2552  O   LYS   250     -45.995  -1.248 -27.870  1.00                 O  
+ATOM   2553  H   LYS   250     -43.608   0.480 -25.132  1.00                 H  
+ATOM   2554  CB  LYS   250     -46.044  -0.073 -24.890  1.00                 C  
+ATOM   2555  CD  LYS   250     -46.992   0.462 -22.629  1.00                 C  
+ATOM   2556  CE  LYS   250     -46.888   0.211 -21.133  1.00                 C  
+ATOM   2557  CG  LYS   250     -45.935  -0.318 -23.394  1.00                 C  
+ATOM   2558 1HZ  LYS   250     -47.810   0.821 -19.499  1.00                 H  
+ATOM   2559 2HZ  LYS   250     -48.716   0.758 -20.633  1.00                 H  
+ATOM   2560 3HZ  LYS   250     -47.777   1.860 -20.514  1.00                 H  
+ATOM   2561  NZ  LYS   250     -47.899   0.991 -20.368  1.00                 N  
diff --git a/modules/bindings/src/tmalign/PDB2.pdb b/modules/bindings/src/tmalign/PDB2.pdb
new file mode 100644
index 000000000..afe4a7bcf
--- /dev/null
+++ b/modules/bindings/src/tmalign/PDB2.pdb
@@ -0,0 +1,1396 @@
+ATOM      1  N   CYS A  31      44.187  36.201 -18.891  1.00 25.31           N  
+ATOM      2  CA  CYS A  31      43.428  37.449 -18.580  1.00 24.65           C  
+ATOM      3  C   CYS A  31      41.921  37.251 -18.677  1.00 24.78           C  
+ATOM      4  O   CYS A  31      41.430  36.634 -19.621  1.00 24.15           O  
+ATOM      5  CB  CYS A  31      43.813  38.571 -19.545  1.00 24.27           C  
+ATOM      6  SG  CYS A  31      45.498  39.241 -19.408  1.00 23.78           S  
+ATOM      7  N   GLN A  32      41.193  37.784 -17.700  1.00 24.87           N  
+ATOM      8  CA  GLN A  32      39.737  37.695 -17.703  1.00 25.04           C  
+ATOM      9  C   GLN A  32      39.194  38.597 -18.801  1.00 24.06           C  
+ATOM     10  O   GLN A  32      39.778  39.634 -19.114  1.00 23.51           O  
+ATOM     11  CB  GLN A  32      39.148  38.167 -16.373  1.00 26.41           C  
+ATOM     12  CG  GLN A  32      39.171  37.151 -15.256  1.00 29.41           C  
+ATOM     13  CD  GLN A  32      38.255  37.550 -14.117  1.00 30.90           C  
+ATOM     14  OE1 GLN A  32      37.035  37.617 -14.282  1.00 31.76           O  
+ATOM     15  NE2 GLN A  32      38.837  37.826 -12.955  1.00 32.11           N  
+ATOM     16  N   ASP A  33      38.075  38.196 -19.385  1.00 23.14           N  
+ATOM     17  CA  ASP A  33      37.443  38.988 -20.426  1.00 22.18           C  
+ATOM     18  C   ASP A  33      36.545  39.962 -19.666  1.00 21.27           C  
+ATOM     19  O   ASP A  33      35.610  39.546 -18.990  1.00 22.14           O  
+ATOM     20  CB  ASP A  33      36.630  38.070 -21.341  1.00 22.39           C  
+ATOM     21  CG  ASP A  33      36.031  38.800 -22.523  1.00 23.26           C  
+ATOM     22  OD1 ASP A  33      35.779  38.140 -23.554  1.00 22.79           O  
+ATOM     23  OD2 ASP A  33      35.799  40.024 -22.418  1.00 23.65           O  
+ATOM     24  N   VAL A  34      36.838  41.256 -19.759  1.00 19.12           N  
+ATOM     25  CA  VAL A  34      36.061  42.256 -19.032  1.00 16.99           C  
+ATOM     26  C   VAL A  34      34.888  42.826 -19.819  1.00 16.48           C  
+ATOM     27  O   VAL A  34      34.205  43.735 -19.351  1.00 15.42           O  
+ATOM     28  CB  VAL A  34      36.968  43.427 -18.570  1.00 17.13           C  
+ATOM     29  CG1 VAL A  34      38.130  42.890 -17.752  1.00 17.15           C  
+ATOM     30  CG2 VAL A  34      37.494  44.198 -19.778  1.00 16.24           C  
+ATOM     31  N   VAL A  35      34.636  42.278 -21.002  1.00 15.15           N  
+ATOM     32  CA  VAL A  35      33.553  42.778 -21.837  1.00 15.95           C  
+ATOM     33  C   VAL A  35      32.379  41.828 -22.064  1.00 16.66           C  
+ATOM     34  O   VAL A  35      31.221  42.212 -21.906  1.00 15.94           O  
+ATOM     35  CB  VAL A  35      34.087  43.180 -23.237  1.00 15.87           C  
+ATOM     36  CG1 VAL A  35      32.943  43.697 -24.114  1.00 16.28           C  
+ATOM     37  CG2 VAL A  35      35.186  44.223 -23.096  1.00 15.14           C  
+ATOM     38  N   GLN A  36      32.691  40.587 -22.418  1.00 18.23           N  
+ATOM     39  CA  GLN A  36      31.673  39.595 -22.769  1.00 19.70           C  
+ATOM     40  C   GLN A  36      31.069  38.673 -21.719  1.00 20.67           C  
+ATOM     41  O   GLN A  36      30.123  37.948 -22.019  1.00 20.85           O  
+ATOM     42  CB  GLN A  36      32.217  38.742 -23.912  1.00 20.01           C  
+ATOM     43  CG  GLN A  36      32.974  39.561 -24.944  1.00 20.99           C  
+ATOM     44  CD  GLN A  36      33.446  38.734 -26.114  1.00 21.57           C  
+ATOM     45  OE1 GLN A  36      32.675  38.428 -27.021  1.00 23.00           O  
+ATOM     46  NE2 GLN A  36      34.719  38.357 -26.097  1.00 21.92           N  
+ATOM     47  N   ASP A  37      31.599  38.677 -20.502  1.00 21.66           N  
+ATOM     48  CA  ASP A  37      31.059  37.813 -19.458  1.00 22.24           C  
+ATOM     49  C   ASP A  37      30.423  38.615 -18.331  1.00 22.03           C  
+ATOM     50  O   ASP A  37      31.125  39.195 -17.505  1.00 22.55           O  
+ATOM     51  CB  ASP A  37      32.157  36.916 -18.868  1.00 23.53           C  
+ATOM     52  CG  ASP A  37      32.745  35.959 -19.885  1.00 24.69           C  
+ATOM     53  OD1 ASP A  37      31.966  35.290 -20.593  1.00 25.81           O  
+ATOM     54  OD2 ASP A  37      33.988  35.867 -19.966  1.00 25.79           O  
+ATOM     55  N   VAL A  38      29.095  38.639 -18.296  1.00 21.55           N  
+ATOM     56  CA  VAL A  38      28.370  39.359 -17.254  1.00 21.24           C  
+ATOM     57  C   VAL A  38      28.528  38.640 -15.915  1.00 21.28           C  
+ATOM     58  O   VAL A  38      28.040  37.521 -15.734  1.00 20.23           O  
+ATOM     59  CB  VAL A  38      26.867  39.458 -17.585  1.00 21.90           C  
+ATOM     60  CG1 VAL A  38      26.129  40.196 -16.470  1.00 21.22           C  
+ATOM     61  CG2 VAL A  38      26.678  40.175 -18.918  1.00 21.24           C  
+ATOM     62  N   PRO A  39      29.218  39.274 -14.957  1.00 20.86           N  
+ATOM     63  CA  PRO A  39      29.416  38.656 -13.644  1.00 20.83           C  
+ATOM     64  C   PRO A  39      28.110  38.261 -12.965  1.00 21.09           C  
+ATOM     65  O   PRO A  39      27.102  38.962 -13.068  1.00 21.03           O  
+ATOM     66  CB  PRO A  39      30.158  39.740 -12.863  1.00 20.96           C  
+ATOM     67  CG  PRO A  39      30.954  40.430 -13.926  1.00 20.10           C  
+ATOM     68  CD  PRO A  39      29.938  40.558 -15.044  1.00 21.11           C  
+ATOM     69  N   ASN A  40      28.125  37.124 -12.279  1.00 21.74           N  
+ATOM     70  CA  ASN A  40      26.942  36.675 -11.562  1.00 21.48           C  
+ATOM     71  C   ASN A  40      27.126  37.023 -10.091  1.00 20.38           C  
+ATOM     72  O   ASN A  40      27.910  36.385  -9.389  1.00 19.77           O  
+ATOM     73  CB  ASN A  40      26.751  35.167 -11.709  1.00 23.80           C  
+ATOM     74  CG  ASN A  40      25.581  34.653 -10.894  1.00 25.81           C  
+ATOM     75  OD1 ASN A  40      24.460  35.149 -11.016  1.00 28.00           O  
+ATOM     76  ND2 ASN A  40      25.835  33.656 -10.054  1.00 27.49           N  
+ATOM     77  N   VAL A  41      26.410  38.040  -9.628  1.00 19.22           N  
+ATOM     78  CA  VAL A  41      26.516  38.458  -8.234  1.00 18.06           C  
+ATOM     79  C   VAL A  41      25.156  38.457  -7.549  1.00 17.09           C  
+ATOM     80  O   VAL A  41      24.119  38.565  -8.203  1.00 16.82           O  
+ATOM     81  CB  VAL A  41      27.132  39.870  -8.122  1.00 17.92           C  
+ATOM     82  CG1 VAL A  41      28.572  39.850  -8.614  1.00 18.12           C  
+ATOM     83  CG2 VAL A  41      26.312  40.857  -8.937  1.00 18.31           C  
+ATOM     84  N   ASP A  42      25.165  38.328  -6.229  1.00 16.54           N  
+ATOM     85  CA  ASP A  42      23.927  38.313  -5.462  1.00 16.47           C  
+ATOM     86  C   ASP A  42      23.260  39.678  -5.487  1.00 16.38           C  
+ATOM     87  O   ASP A  42      22.033  39.783  -5.525  1.00 16.53           O  
+ATOM     88  CB  ASP A  42      24.209  37.901  -4.015  1.00 17.26           C  
+ATOM     89  CG  ASP A  42      24.746  36.486  -3.909  1.00 17.50           C  
+ATOM     90  OD1 ASP A  42      24.081  35.564  -4.425  1.00 18.85           O  
+ATOM     91  OD2 ASP A  42      25.823  36.294  -3.310  1.00 17.25           O  
+ATOM     92  N   VAL A  43      24.075  40.726  -5.456  1.00 15.74           N  
+ATOM     93  CA  VAL A  43      23.569  42.089  -5.481  1.00 15.67           C  
+ATOM     94  C   VAL A  43      24.320  42.919  -6.516  1.00 14.97           C  
+ATOM     95  O   VAL A  43      25.546  43.031  -6.464  1.00 14.68           O  
+ATOM     96  CB  VAL A  43      23.733  42.781  -4.110  1.00 16.44           C  
+ATOM     97  CG1 VAL A  43      23.143  44.189  -4.163  1.00 15.76           C  
+ATOM     98  CG2 VAL A  43      23.062  41.961  -3.019  1.00 16.47           C  
+ATOM     99  N   GLN A  44      23.582  43.479  -7.466  1.00 13.76           N  
+ATOM    100  CA  GLN A  44      24.174  44.328  -8.491  1.00 14.03           C  
+ATOM    101  C   GLN A  44      23.413  45.642  -8.321  1.00 13.66           C  
+ATOM    102  O   GLN A  44      22.211  45.717  -8.580  1.00 13.67           O  
+ATOM    103  CB  GLN A  44      23.960  43.720  -9.882  1.00 13.58           C  
+ATOM    104  CG  GLN A  44      25.022  44.137 -10.892  1.00 12.51           C  
+ATOM    105  CD  GLN A  44      25.125  45.646 -11.011  1.00 12.88           C  
+ATOM    106  OE1 GLN A  44      24.138  46.320 -11.294  1.00 12.17           O  
+ATOM    107  NE2 GLN A  44      26.321  46.183 -10.792  1.00 11.67           N  
+ATOM    108  N   MET A  45      24.116  46.674  -7.869  1.00 13.47           N  
+ATOM    109  CA  MET A  45      23.484  47.953  -7.575  1.00 13.42           C  
+ATOM    110  C   MET A  45      22.593  48.604  -8.631  1.00 13.05           C  
+ATOM    111  O   MET A  45      21.597  49.236  -8.278  1.00 12.84           O  
+ATOM    112  CB  MET A  45      24.536  48.947  -7.075  1.00 13.39           C  
+ATOM    113  CG  MET A  45      25.144  48.553  -5.727  1.00 13.23           C  
+ATOM    114  SD  MET A  45      23.893  48.158  -4.465  1.00 15.58           S  
+ATOM    115  CE  MET A  45      23.315  49.802  -4.036  1.00 14.06           C  
+ATOM    116  N   LEU A  46      22.927  48.466  -9.910  1.00 13.05           N  
+ATOM    117  CA  LEU A  46      22.085  49.063 -10.947  1.00 13.73           C  
+ATOM    118  C   LEU A  46      20.768  48.286 -11.004  1.00 14.80           C  
+ATOM    119  O   LEU A  46      19.686  48.871 -11.138  1.00 14.62           O  
+ATOM    120  CB  LEU A  46      22.776  49.011 -12.315  1.00 13.11           C  
+ATOM    121  CG  LEU A  46      22.020  49.709 -13.456  1.00 11.58           C  
+ATOM    122  CD1 LEU A  46      22.012  51.218 -13.226  1.00 12.67           C  
+ATOM    123  CD2 LEU A  46      22.678  49.382 -14.789  1.00 12.26           C  
+ATOM    124  N   GLU A  47      20.865  46.963 -10.890  1.00 15.67           N  
+ATOM    125  CA  GLU A  47      19.680  46.112 -10.924  1.00 17.28           C  
+ATOM    126  C   GLU A  47      18.822  46.412  -9.701  1.00 17.04           C  
+ATOM    127  O   GLU A  47      17.606  46.564  -9.807  1.00 17.59           O  
+ATOM    128  CB  GLU A  47      20.085  44.633 -10.943  1.00 18.06           C  
+ATOM    129  CG  GLU A  47      18.928  43.666 -11.192  1.00 21.12           C  
+ATOM    130  CD  GLU A  47      18.113  43.362  -9.949  1.00 22.51           C  
+ATOM    131  OE1 GLU A  47      17.000  42.811 -10.091  1.00 23.59           O  
+ATOM    132  OE2 GLU A  47      18.582  43.655  -8.829  1.00 23.26           O  
+ATOM    133  N   LEU A  48      19.464  46.513  -8.542  1.00 16.82           N  
+ATOM    134  CA  LEU A  48      18.753  46.811  -7.301  1.00 16.96           C  
+ATOM    135  C   LEU A  48      18.020  48.143  -7.416  1.00 16.52           C  
+ATOM    136  O   LEU A  48      16.860  48.259  -7.026  1.00 16.78           O  
+ATOM    137  CB  LEU A  48      19.734  46.867  -6.125  1.00 17.11           C  
+ATOM    138  CG  LEU A  48      19.124  47.152  -4.747  1.00 18.11           C  
+ATOM    139  CD1 LEU A  48      18.088  46.088  -4.415  1.00 19.15           C  
+ATOM    140  CD2 LEU A  48      20.219  47.179  -3.691  1.00 19.09           C  
+ATOM    141  N   TYR A  49      18.697  49.147  -7.964  1.00 16.16           N  
+ATOM    142  CA  TYR A  49      18.097  50.467  -8.124  1.00 15.99           C  
+ATOM    143  C   TYR A  49      16.854  50.417  -9.004  1.00 16.91           C  
+ATOM    144  O   TYR A  49      15.882  51.138  -8.771  1.00 15.81           O  
+ATOM    145  CB  TYR A  49      19.125  51.445  -8.710  1.00 15.10           C  
+ATOM    146  CG  TYR A  49      19.679  52.399  -7.676  1.00 14.37           C  
+ATOM    147  CD1 TYR A  49      20.155  51.927  -6.450  1.00 13.37           C  
+ATOM    148  CD2 TYR A  49      19.673  53.777  -7.896  1.00 13.71           C  
+ATOM    149  CE1 TYR A  49      20.603  52.804  -5.464  1.00 13.51           C  
+ATOM    150  CE2 TYR A  49      20.120  54.664  -6.917  1.00 14.02           C  
+ATOM    151  CZ  TYR A  49      20.578  54.172  -5.703  1.00 13.80           C  
+ATOM    152  OH  TYR A  49      20.976  55.048  -4.720  1.00 14.00           O  
+ATOM    153  N   ASP A  50      16.886  49.550 -10.007  1.00 18.17           N  
+ATOM    154  CA  ASP A  50      15.765  49.404 -10.926  1.00 20.55           C  
+ATOM    155  C   ASP A  50      14.529  48.873 -10.192  1.00 21.35           C  
+ATOM    156  O   ASP A  50      13.406  49.302 -10.464  1.00 20.28           O  
+ATOM    157  CB  ASP A  50      16.153  48.446 -12.058  1.00 21.59           C  
+ATOM    158  CG  ASP A  50      15.330  48.655 -13.315  1.00 23.84           C  
+ATOM    159  OD1 ASP A  50      15.404  47.791 -14.214  1.00 24.47           O  
+ATOM    160  OD2 ASP A  50      14.626  49.683 -13.412  1.00 23.97           O  
+ATOM    161  N   ARG A  51      14.745  47.951  -9.255  1.00 22.49           N  
+ATOM    162  CA  ARG A  51      13.656  47.335  -8.492  1.00 23.79           C  
+ATOM    163  C   ARG A  51      13.160  48.091  -7.259  1.00 23.42           C  
+ATOM    164  O   ARG A  51      11.983  48.008  -6.919  1.00 23.44           O  
+ATOM    165  CB  ARG A  51      14.051  45.915  -8.061  1.00 25.98           C  
+ATOM    166  CG  ARG A  51      14.171  44.928  -9.198  1.00 29.02           C  
+ATOM    167  CD  ARG A  51      14.345  43.490  -8.702  1.00 31.62           C  
+ATOM    168  NE  ARG A  51      15.632  43.258  -8.049  1.00 33.58           N  
+ATOM    169  CZ  ARG A  51      15.876  43.459  -6.757  1.00 34.28           C  
+ATOM    170  NH1 ARG A  51      14.916  43.900  -5.955  1.00 35.39           N  
+ATOM    171  NH2 ARG A  51      17.085  43.216  -6.268  1.00 34.27           N  
+ATOM    172  N   MET A  52      14.049  48.816  -6.587  1.00 22.73           N  
+ATOM    173  CA  MET A  52      13.680  49.558  -5.380  1.00 23.00           C  
+ATOM    174  C   MET A  52      12.642  50.646  -5.616  1.00 22.34           C  
+ATOM    175  O   MET A  52      12.605  51.260  -6.682  1.00 22.29           O  
+ATOM    176  CB  MET A  52      14.923  50.185  -4.749  1.00 23.41           C  
+ATOM    177  CG  MET A  52      15.891  49.186  -4.157  1.00 24.97           C  
+ATOM    178  SD  MET A  52      17.406  50.003  -3.614  1.00 25.94           S  
+ATOM    179  CE  MET A  52      16.774  51.018  -2.285  1.00 26.36           C  
+ATOM    180  N   SER A  53      11.811  50.891  -4.605  1.00 21.60           N  
+ATOM    181  CA  SER A  53      10.762  51.904  -4.698  1.00 21.57           C  
+ATOM    182  C   SER A  53      11.155  53.235  -4.058  1.00 20.89           C  
+ATOM    183  O   SER A  53      10.524  54.262  -4.310  1.00 20.64           O  
+ATOM    184  CB  SER A  53       9.476  51.382  -4.051  1.00 21.98           C  
+ATOM    185  OG  SER A  53       8.988  50.247  -4.747  1.00 23.60           O  
+ATOM    186  N   PHE A  54      12.188  53.204  -3.222  1.00 20.48           N  
+ATOM    187  CA  PHE A  54      12.688  54.399  -2.545  1.00 19.94           C  
+ATOM    188  C   PHE A  54      11.648  55.187  -1.752  1.00 20.23           C  
+ATOM    189  O   PHE A  54      11.733  56.413  -1.662  1.00 19.07           O  
+ATOM    190  CB  PHE A  54      13.355  55.344  -3.553  1.00 19.44           C  
+ATOM    191  CG  PHE A  54      14.604  54.789  -4.179  1.00 18.48           C  
+ATOM    192  CD1 PHE A  54      14.530  53.917  -5.261  1.00 18.21           C  
+ATOM    193  CD2 PHE A  54      15.854  55.135  -3.679  1.00 17.90           C  
+ATOM    194  CE1 PHE A  54      15.686  53.395  -5.839  1.00 18.22           C  
+ATOM    195  CE2 PHE A  54      17.020  54.621  -4.245  1.00 18.45           C  
+ATOM    196  CZ  PHE A  54      16.938  53.748  -5.329  1.00 18.73           C  
+ATOM    197  N   LYS A  55      10.670  54.502  -1.169  1.00 20.67           N  
+ATOM    198  CA  LYS A  55       9.660  55.207  -0.388  1.00 21.62           C  
+ATOM    199  C   LYS A  55      10.271  55.651   0.935  1.00 21.78           C  
+ATOM    200  O   LYS A  55      10.930  54.870   1.617  1.00 22.38           O  
+ATOM    201  CB  LYS A  55       8.445  54.309  -0.134  1.00 21.83           C  
+ATOM    202  CG  LYS A  55       7.755  53.846  -1.404  1.00 22.02           C  
+ATOM    203  CD  LYS A  55       7.336  55.018  -2.280  1.00 22.69           C  
+ATOM    204  CE  LYS A  55       6.702  54.530  -3.576  1.00 23.08           C  
+ATOM    205  NZ  LYS A  55       6.203  55.657  -4.416  1.00 22.45           N  
+ATOM    206  N   ASP A  56      10.049  56.911   1.287  1.00 21.80           N  
+ATOM    207  CA  ASP A  56      10.584  57.479   2.516  1.00 22.37           C  
+ATOM    208  C   ASP A  56       9.523  57.493   3.618  1.00 23.20           C  
+ATOM    209  O   ASP A  56       8.963  58.537   3.942  1.00 24.20           O  
+ATOM    210  CB  ASP A  56      11.092  58.899   2.226  1.00 21.35           C  
+ATOM    211  CG  ASP A  56      11.696  59.571   3.440  1.00 20.66           C  
+ATOM    212  OD1 ASP A  56      12.227  58.864   4.319  1.00 20.49           O  
+ATOM    213  OD2 ASP A  56      11.652  60.817   3.506  1.00 20.52           O  
+ATOM    214  N   ILE A  57       9.248  56.328   4.196  1.00 23.84           N  
+ATOM    215  CA  ILE A  57       8.244  56.243   5.249  1.00 24.73           C  
+ATOM    216  C   ILE A  57       8.869  56.244   6.638  1.00 24.28           C  
+ATOM    217  O   ILE A  57      10.025  55.861   6.813  1.00 24.60           O  
+ATOM    218  CB  ILE A  57       7.368  54.973   5.105  1.00 25.86           C  
+ATOM    219  CG1 ILE A  57       8.174  53.730   5.472  1.00 26.51           C  
+ATOM    220  CG2 ILE A  57       6.852  54.853   3.673  1.00 25.42           C  
+ATOM    221  CD1 ILE A  57       7.342  52.466   5.533  1.00 28.01           C  
+ATOM    222  N   ASP A  58       8.087  56.683   7.619  1.00 24.16           N  
+ATOM    223  CA  ASP A  58       8.523  56.743   9.010  1.00 23.79           C  
+ATOM    224  C   ASP A  58       8.550  55.332   9.592  1.00 23.19           C  
+ATOM    225  O   ASP A  58       7.503  54.714   9.782  1.00 23.11           O  
+ATOM    226  CB  ASP A  58       7.556  57.624   9.807  1.00 24.75           C  
+ATOM    227  CG  ASP A  58       7.979  57.809  11.254  1.00 25.63           C  
+ATOM    228  OD1 ASP A  58       7.381  58.670  11.934  1.00 27.55           O  
+ATOM    229  OD2 ASP A  58       8.893  57.099  11.719  1.00 25.03           O  
+ATOM    230  N   GLY A  59       9.747  54.827   9.873  1.00 21.84           N  
+ATOM    231  CA  GLY A  59       9.872  53.484  10.414  1.00 20.61           C  
+ATOM    232  C   GLY A  59       9.837  53.394  11.930  1.00 19.41           C  
+ATOM    233  O   GLY A  59      10.042  52.319  12.493  1.00 19.42           O  
+ATOM    234  N   GLY A  60       9.574  54.515  12.593  1.00 18.67           N  
+ATOM    235  CA  GLY A  60       9.525  54.523  14.045  1.00 18.72           C  
+ATOM    236  C   GLY A  60      10.791  55.127  14.622  1.00 17.89           C  
+ATOM    237  O   GLY A  60      11.348  56.061  14.043  1.00 18.07           O  
+ATOM    238  N   VAL A  61      11.259  54.607  15.754  1.00 18.07           N  
+ATOM    239  CA  VAL A  61      12.478  55.139  16.353  1.00 17.18           C  
+ATOM    240  C   VAL A  61      13.605  55.071  15.324  1.00 17.50           C  
+ATOM    241  O   VAL A  61      14.430  55.982  15.243  1.00 16.79           O  
+ATOM    242  CB  VAL A  61      12.857  54.390  17.656  1.00 17.33           C  
+ATOM    243  CG1 VAL A  61      11.810  54.686  18.730  1.00 17.11           C  
+ATOM    244  CG2 VAL A  61      12.956  52.895  17.412  1.00 17.43           C  
+ATOM    245  N   TRP A  62      13.649  53.992  14.544  1.00 17.45           N  
+ATOM    246  CA  TRP A  62      14.639  53.901  13.476  1.00 17.77           C  
+ATOM    247  C   TRP A  62      13.850  54.511  12.324  1.00 18.42           C  
+ATOM    248  O   TRP A  62      13.191  53.810  11.552  1.00 18.76           O  
+ATOM    249  CB  TRP A  62      15.021  52.448  13.166  1.00 17.39           C  
+ATOM    250  CG  TRP A  62      15.980  52.326  12.001  1.00 17.20           C  
+ATOM    251  CD1 TRP A  62      16.666  53.344  11.394  1.00 16.92           C  
+ATOM    252  CD2 TRP A  62      16.333  51.130  11.291  1.00 17.12           C  
+ATOM    253  NE1 TRP A  62      17.417  52.858  10.349  1.00 17.41           N  
+ATOM    254  CE2 TRP A  62      17.233  51.502  10.263  1.00 17.00           C  
+ATOM    255  CE3 TRP A  62      15.976  49.780  11.422  1.00 16.65           C  
+ATOM    256  CZ2 TRP A  62      17.779  50.573   9.371  1.00 16.39           C  
+ATOM    257  CZ3 TRP A  62      16.518  48.855  10.535  1.00 16.25           C  
+ATOM    258  CH2 TRP A  62      17.412  49.257   9.520  1.00 17.05           C  
+ATOM    259  N   LYS A  63      13.904  55.835  12.242  1.00 18.93           N  
+ATOM    260  CA  LYS A  63      13.159  56.592  11.243  1.00 19.51           C  
+ATOM    261  C   LYS A  63      13.180  56.102   9.800  1.00 19.03           C  
+ATOM    262  O   LYS A  63      12.175  56.216   9.091  1.00 19.12           O  
+ATOM    263  CB  LYS A  63      13.588  58.061  11.291  1.00 20.61           C  
+ATOM    264  CG  LYS A  63      13.123  58.808  12.548  1.00 23.11           C  
+ATOM    265  CD  LYS A  63      11.601  58.967  12.573  1.00 25.37           C  
+ATOM    266  CE  LYS A  63      11.120  59.797  13.761  1.00 26.65           C  
+ATOM    267  NZ  LYS A  63      11.453  59.205  15.098  1.00 28.47           N  
+ATOM    268  N   GLN A  64      14.304  55.555   9.356  1.00 18.03           N  
+ATOM    269  CA  GLN A  64      14.403  55.100   7.974  1.00 17.35           C  
+ATOM    270  C   GLN A  64      14.463  53.584   7.815  1.00 16.79           C  
+ATOM    271  O   GLN A  64      14.838  53.071   6.756  1.00 16.51           O  
+ATOM    272  CB  GLN A  64      15.614  55.766   7.319  1.00 16.88           C  
+ATOM    273  CG  GLN A  64      15.514  57.283   7.347  1.00 16.59           C  
+ATOM    274  CD  GLN A  64      16.855  57.967   7.159  1.00 16.74           C  
+ATOM    275  OE1 GLN A  64      17.819  57.671   7.870  1.00 16.63           O  
+ATOM    276  NE2 GLN A  64      16.920  58.892   6.206  1.00 15.31           N  
+ATOM    277  N   GLY A  65      14.075  52.878   8.873  1.00 17.02           N  
+ATOM    278  CA  GLY A  65      14.064  51.428   8.845  1.00 17.45           C  
+ATOM    279  C   GLY A  65      12.717  50.880   9.287  1.00 18.41           C  
+ATOM    280  O   GLY A  65      11.684  51.206   8.697  1.00 18.22           O  
+ATOM    281  N   TRP A  66      12.727  50.051  10.325  1.00 18.93           N  
+ATOM    282  CA  TRP A  66      11.500  49.452  10.852  1.00 19.84           C  
+ATOM    283  C   TRP A  66      11.770  49.023  12.288  1.00 20.32           C  
+ATOM    284  O   TRP A  66      12.908  49.104  12.750  1.00 20.54           O  
+ATOM    285  CB  TRP A  66      11.106  48.231  10.009  1.00 19.43           C  
+ATOM    286  CG  TRP A  66      12.029  47.044  10.177  1.00 19.20           C  
+ATOM    287  CD1 TRP A  66      11.896  46.022  11.075  1.00 19.00           C  
+ATOM    288  CD2 TRP A  66      13.228  46.775   9.441  1.00 18.87           C  
+ATOM    289  NE1 TRP A  66      12.936  45.134  10.943  1.00 19.25           N  
+ATOM    290  CE2 TRP A  66      13.770  45.571   9.948  1.00 18.70           C  
+ATOM    291  CE3 TRP A  66      13.901  47.435   8.401  1.00 18.92           C  
+ATOM    292  CZ2 TRP A  66      14.954  45.010   9.452  1.00 19.13           C  
+ATOM    293  CZ3 TRP A  66      15.078  46.879   7.907  1.00 18.67           C  
+ATOM    294  CH2 TRP A  66      15.594  45.676   8.434  1.00 18.98           C  
+ATOM    295  N   ASN A  67      10.734  48.578  12.997  1.00 21.03           N  
+ATOM    296  CA  ASN A  67      10.908  48.126  14.377  1.00 21.52           C  
+ATOM    297  C   ASN A  67      11.529  46.736  14.367  1.00 21.49           C  
+ATOM    298  O   ASN A  67      10.856  45.742  14.082  1.00 20.91           O  
+ATOM    299  CB  ASN A  67       9.567  48.079  15.120  1.00 23.07           C  
+ATOM    300  CG  ASN A  67       8.994  49.458  15.382  1.00 24.08           C  
+ATOM    301  OD1 ASN A  67       9.728  50.408  15.655  1.00 25.03           O  
+ATOM    302  ND2 ASN A  67       7.671  49.570  15.321  1.00 24.96           N  
+ATOM    303  N   ILE A  68      12.818  46.667  14.679  1.00 21.23           N  
+ATOM    304  CA  ILE A  68      13.522  45.394  14.679  1.00 21.06           C  
+ATOM    305  C   ILE A  68      13.074  44.488  15.819  1.00 22.16           C  
+ATOM    306  O   ILE A  68      12.961  44.922  16.965  1.00 21.35           O  
+ATOM    307  CB  ILE A  68      15.046  45.603  14.794  1.00 20.60           C  
+ATOM    308  CG1 ILE A  68      15.541  46.485  13.642  1.00 19.51           C  
+ATOM    309  CG2 ILE A  68      15.755  44.257  14.772  1.00 20.32           C  
+ATOM    310  CD1 ILE A  68      16.995  46.906  13.772  1.00 19.01           C  
+ATOM    311  N   LYS A  69      12.817  43.227  15.487  1.00 22.93           N  
+ATOM    312  CA  LYS A  69      12.400  42.239  16.474  1.00 24.22           C  
+ATOM    313  C   LYS A  69      13.399  41.089  16.441  1.00 23.83           C  
+ATOM    314  O   LYS A  69      13.972  40.788  15.396  1.00 22.73           O  
+ATOM    315  CB  LYS A  69      10.989  41.727  16.153  1.00 26.19           C  
+ATOM    316  CG  LYS A  69       9.907  42.792  16.303  1.00 28.71           C  
+ATOM    317  CD  LYS A  69       8.527  42.287  15.889  1.00 31.39           C  
+ATOM    318  CE  LYS A  69       8.472  41.940  14.405  1.00 33.05           C  
+ATOM    319  NZ  LYS A  69       7.072  41.697  13.934  1.00 34.34           N  
+ATOM    320  N   TYR A  70      13.622  40.460  17.589  1.00 23.76           N  
+ATOM    321  CA  TYR A  70      14.555  39.346  17.658  1.00 24.15           C  
+ATOM    322  C   TYR A  70      14.068  38.291  18.641  1.00 25.10           C  
+ATOM    323  O   TYR A  70      13.304  38.587  19.560  1.00 25.14           O  
+ATOM    324  CB  TYR A  70      15.950  39.842  18.066  1.00 22.99           C  
+ATOM    325  CG  TYR A  70      16.029  40.444  19.452  1.00 22.19           C  
+ATOM    326  CD1 TYR A  70      16.261  39.646  20.574  1.00 21.94           C  
+ATOM    327  CD2 TYR A  70      15.854  41.812  19.646  1.00 21.75           C  
+ATOM    328  CE1 TYR A  70      16.317  40.198  21.850  1.00 21.91           C  
+ATOM    329  CE2 TYR A  70      15.905  42.372  20.916  1.00 21.83           C  
+ATOM    330  CZ  TYR A  70      16.136  41.562  22.013  1.00 22.08           C  
+ATOM    331  OH  TYR A  70      16.171  42.121  23.270  1.00 21.93           O  
+ATOM    332  N   ASP A  71      14.505  37.058  18.426  1.00 26.03           N  
+ATOM    333  CA  ASP A  71      14.137  35.952  19.296  1.00 27.31           C  
+ATOM    334  C   ASP A  71      15.171  35.881  20.414  1.00 27.86           C  
+ATOM    335  O   ASP A  71      16.330  35.550  20.178  1.00 27.89           O  
+ATOM    336  CB  ASP A  71      14.113  34.648  18.495  1.00 28.12           C  
+ATOM    337  CG  ASP A  71      13.866  33.431  19.362  1.00 29.16           C  
+ATOM    338  OD1 ASP A  71      13.360  33.591  20.494  1.00 29.60           O  
+ATOM    339  OD2 ASP A  71      14.169  32.310  18.903  1.00 30.07           O  
+ATOM    340  N   PRO A  72      14.764  36.204  21.651  1.00 28.75           N  
+ATOM    341  CA  PRO A  72      15.691  36.168  22.786  1.00 29.04           C  
+ATOM    342  C   PRO A  72      16.439  34.849  22.948  1.00 29.30           C  
+ATOM    343  O   PRO A  72      17.552  34.819  23.476  1.00 29.22           O  
+ATOM    344  CB  PRO A  72      14.791  36.493  23.981  1.00 29.12           C  
+ATOM    345  CG  PRO A  72      13.446  36.002  23.545  1.00 29.91           C  
+ATOM    346  CD  PRO A  72      13.387  36.461  22.108  1.00 28.91           C  
+ATOM    347  N   LEU A  73      15.838  33.761  22.476  1.00 29.07           N  
+ATOM    348  CA  LEU A  73      16.464  32.449  22.590  1.00 29.29           C  
+ATOM    349  C   LEU A  73      17.535  32.199  21.534  1.00 29.04           C  
+ATOM    350  O   LEU A  73      18.188  31.158  21.544  1.00 28.38           O  
+ATOM    351  CB  LEU A  73      15.402  31.350  22.517  1.00 29.71           C  
+ATOM    352  CG  LEU A  73      14.402  31.334  23.675  1.00 30.24           C  
+ATOM    353  CD1 LEU A  73      13.400  30.210  23.470  1.00 30.85           C  
+ATOM    354  CD2 LEU A  73      15.147  31.157  24.993  1.00 30.94           C  
+ATOM    355  N   LYS A  74      17.720  33.153  20.628  1.00 28.90           N  
+ATOM    356  CA  LYS A  74      18.724  33.006  19.581  1.00 29.16           C  
+ATOM    357  C   LYS A  74      20.110  32.813  20.191  1.00 29.06           C  
+ATOM    358  O   LYS A  74      20.906  32.006  19.713  1.00 28.48           O  
+ATOM    359  CB  LYS A  74      18.727  34.235  18.673  1.00 29.59           C  
+ATOM    360  CG  LYS A  74      19.677  34.129  17.492  1.00 30.89           C  
+ATOM    361  CD  LYS A  74      19.506  35.305  16.546  1.00 31.68           C  
+ATOM    362  CE  LYS A  74      20.368  35.144  15.306  1.00 32.74           C  
+ATOM    363  NZ  LYS A  74      20.184  36.275  14.355  1.00 33.06           N  
+ATOM    364  N   TYR A  75      20.394  33.560  21.250  1.00 29.64           N  
+ATOM    365  CA  TYR A  75      21.682  33.461  21.920  1.00 30.21           C  
+ATOM    366  C   TYR A  75      21.534  32.729  23.249  1.00 30.22           C  
+ATOM    367  O   TYR A  75      20.530  32.886  23.943  1.00 29.48           O  
+ATOM    368  CB  TYR A  75      22.272  34.859  22.138  1.00 30.84           C  
+ATOM    369  CG  TYR A  75      22.559  35.585  20.842  1.00 31.74           C  
+ATOM    370  CD1 TYR A  75      21.675  36.540  20.336  1.00 32.75           C  
+ATOM    371  CD2 TYR A  75      23.686  35.268  20.087  1.00 32.40           C  
+ATOM    372  CE1 TYR A  75      21.907  37.157  19.104  1.00 33.07           C  
+ATOM    373  CE2 TYR A  75      23.925  35.875  18.857  1.00 33.57           C  
+ATOM    374  CZ  TYR A  75      23.033  36.815  18.371  1.00 33.54           C  
+ATOM    375  OH  TYR A  75      23.266  37.389  17.141  1.00 35.15           O  
+ATOM    376  N   ASN A  76      22.531  31.916  23.584  1.00 30.68           N  
+ATOM    377  CA  ASN A  76      22.521  31.154  24.828  1.00 31.98           C  
+ATOM    378  C   ASN A  76      23.948  30.798  25.232  1.00 32.32           C  
+ATOM    379  O   ASN A  76      24.905  31.194  24.568  1.00 32.16           O  
+ATOM    380  CB  ASN A  76      21.695  29.875  24.670  1.00 33.03           C  
+ATOM    381  CG  ASN A  76      22.382  28.842  23.805  1.00 34.12           C  
+ATOM    382  OD1 ASN A  76      22.646  29.076  22.629  1.00 35.55           O  
+ATOM    383  ND2 ASN A  76      22.679  27.685  24.388  1.00 36.18           N  
+ATOM    384  N   ALA A  77      24.083  30.041  26.317  1.00 32.84           N  
+ATOM    385  CA  ALA A  77      25.393  29.643  26.824  1.00 33.42           C  
+ATOM    386  C   ALA A  77      26.310  29.030  25.767  1.00 33.80           C  
+ATOM    387  O   ALA A  77      27.530  29.178  25.837  1.00 34.32           O  
+ATOM    388  CB  ALA A  77      25.222  28.668  27.985  1.00 33.92           C  
+ATOM    389  N   HIS A  78      25.726  28.348  24.789  1.00 33.88           N  
+ATOM    390  CA  HIS A  78      26.515  27.703  23.743  1.00 34.26           C  
+ATOM    391  C   HIS A  78      26.699  28.575  22.507  1.00 33.18           C  
+ATOM    392  O   HIS A  78      27.470  28.236  21.609  1.00 33.28           O  
+ATOM    393  CB  HIS A  78      25.859  26.378  23.345  1.00 35.96           C  
+ATOM    394  CG  HIS A  78      25.596  25.466  24.502  1.00 37.85           C  
+ATOM    395  ND1 HIS A  78      26.595  25.022  25.342  1.00 39.12           N  
+ATOM    396  CD2 HIS A  78      24.445  24.925  24.967  1.00 38.67           C  
+ATOM    397  CE1 HIS A  78      26.071  24.248  26.275  1.00 39.72           C  
+ATOM    398  NE2 HIS A  78      24.767  24.172  26.070  1.00 39.67           N  
+ATOM    399  N   HIS A  79      25.994  29.701  22.468  1.00 31.64           N  
+ATOM    400  CA  HIS A  79      26.076  30.617  21.336  1.00 29.62           C  
+ATOM    401  C   HIS A  79      25.850  32.049  21.821  1.00 27.90           C  
+ATOM    402  O   HIS A  79      24.727  32.548  21.815  1.00 27.52           O  
+ATOM    403  CB  HIS A  79      25.027  30.221  20.291  1.00 29.75           C  
+ATOM    404  CG  HIS A  79      25.105  31.008  19.021  1.00 30.28           C  
+ATOM    405  ND1 HIS A  79      24.280  32.080  18.756  1.00 30.40           N  
+ATOM    406  CD2 HIS A  79      25.919  30.885  17.946  1.00 30.43           C  
+ATOM    407  CE1 HIS A  79      24.583  32.582  17.572  1.00 30.48           C  
+ATOM    408  NE2 HIS A  79      25.574  31.875  17.060  1.00 29.90           N  
+ATOM    409  N   LYS A  80      26.931  32.698  22.243  1.00 25.92           N  
+ATOM    410  CA  LYS A  80      26.866  34.063  22.758  1.00 24.37           C  
+ATOM    411  C   LYS A  80      27.122  35.127  21.696  1.00 23.13           C  
+ATOM    412  O   LYS A  80      27.748  34.861  20.669  1.00 22.12           O  
+ATOM    413  CB  LYS A  80      27.895  34.255  23.874  1.00 25.51           C  
+ATOM    414  CG  LYS A  80      27.769  33.297  25.051  1.00 26.96           C  
+ATOM    415  CD  LYS A  80      28.839  33.613  26.088  1.00 28.40           C  
+ATOM    416  CE  LYS A  80      28.788  32.653  27.266  1.00 30.05           C  
+ATOM    417  NZ  LYS A  80      29.867  32.953  28.259  1.00 31.24           N  
+ATOM    418  N   LEU A  81      26.631  36.335  21.964  1.00 20.95           N  
+ATOM    419  CA  LEU A  81      26.823  37.470  21.071  1.00 19.57           C  
+ATOM    420  C   LEU A  81      28.096  38.173  21.530  1.00 19.29           C  
+ATOM    421  O   LEU A  81      28.169  38.661  22.659  1.00 18.46           O  
+ATOM    422  CB  LEU A  81      25.636  38.439  21.165  1.00 18.83           C  
+ATOM    423  CG  LEU A  81      25.716  39.696  20.290  1.00 18.83           C  
+ATOM    424  CD1 LEU A  81      25.670  39.301  18.815  1.00 17.98           C  
+ATOM    425  CD2 LEU A  81      24.564  40.636  20.621  1.00 18.24           C  
+ATOM    426  N   LYS A  82      29.104  38.195  20.665  1.00 18.49           N  
+ATOM    427  CA  LYS A  82      30.375  38.842  20.977  1.00 18.31           C  
+ATOM    428  C   LYS A  82      30.281  40.289  20.515  1.00 17.70           C  
+ATOM    429  O   LYS A  82      30.107  40.554  19.326  1.00 17.21           O  
+ATOM    430  CB  LYS A  82      31.518  38.128  20.248  1.00 20.59           C  
+ATOM    431  CG  LYS A  82      31.742  36.694  20.717  1.00 23.57           C  
+ATOM    432  CD  LYS A  82      32.629  35.901  19.759  1.00 26.69           C  
+ATOM    433  CE  LYS A  82      34.044  36.452  19.693  1.00 28.36           C  
+ATOM    434  NZ  LYS A  82      34.870  35.693  18.710  1.00 31.00           N  
+ATOM    435  N   VAL A  83      30.394  41.222  21.455  1.00 16.13           N  
+ATOM    436  CA  VAL A  83      30.290  42.636  21.125  1.00 15.53           C  
+ATOM    437  C   VAL A  83      31.620  43.373  21.232  1.00 15.44           C  
+ATOM    438  O   VAL A  83      32.304  43.299  22.253  1.00 15.48           O  
+ATOM    439  CB  VAL A  83      29.262  43.346  22.047  1.00 14.75           C  
+ATOM    440  CG1 VAL A  83      29.133  44.812  21.660  1.00 13.70           C  
+ATOM    441  CG2 VAL A  83      27.904  42.655  21.947  1.00 15.05           C  
+ATOM    442  N   PHE A  84      31.978  44.085  20.168  1.00 15.25           N  
+ATOM    443  CA  PHE A  84      33.209  44.868  20.147  1.00 14.99           C  
+ATOM    444  C   PHE A  84      32.879  46.356  20.070  1.00 14.55           C  
+ATOM    445  O   PHE A  84      32.345  46.823  19.065  1.00 14.61           O  
+ATOM    446  CB  PHE A  84      34.082  44.493  18.947  1.00 16.19           C  
+ATOM    447  CG  PHE A  84      34.769  43.167  19.083  1.00 17.36           C  
+ATOM    448  CD1 PHE A  84      34.326  42.060  18.365  1.00 18.12           C  
+ATOM    449  CD2 PHE A  84      35.867  43.024  19.928  1.00 18.57           C  
+ATOM    450  CE1 PHE A  84      34.972  40.826  18.485  1.00 18.75           C  
+ATOM    451  CE2 PHE A  84      36.520  41.799  20.056  1.00 18.94           C  
+ATOM    452  CZ  PHE A  84      36.072  40.697  19.333  1.00 19.32           C  
+ATOM    453  N   VAL A  85      33.189  47.085  21.140  1.00 13.43           N  
+ATOM    454  CA  VAL A  85      32.960  48.528  21.204  1.00 13.57           C  
+ATOM    455  C   VAL A  85      34.271  49.166  20.768  1.00 12.28           C  
+ATOM    456  O   VAL A  85      35.286  49.052  21.454  1.00 12.57           O  
+ATOM    457  CB  VAL A  85      32.606  48.977  22.639  1.00 13.14           C  
+ATOM    458  CG1 VAL A  85      32.415  50.495  22.689  1.00 13.45           C  
+ATOM    459  CG2 VAL A  85      31.330  48.271  23.089  1.00 13.81           C  
+ATOM    460  N   VAL A  86      34.239  49.840  19.623  1.00 12.15           N  
+ATOM    461  CA  VAL A  86      35.438  50.443  19.059  1.00 12.22           C  
+ATOM    462  C   VAL A  86      35.505  51.968  19.172  1.00 11.46           C  
+ATOM    463  O   VAL A  86      34.868  52.686  18.401  1.00 11.04           O  
+ATOM    464  CB  VAL A  86      35.572  50.035  17.571  1.00 12.96           C  
+ATOM    465  CG1 VAL A  86      36.899  50.524  17.000  1.00 11.89           C  
+ATOM    466  CG2 VAL A  86      35.445  48.516  17.437  1.00 13.24           C  
+ATOM    467  N   PRO A  87      36.293  52.477  20.134  1.00 10.98           N  
+ATOM    468  CA  PRO A  87      36.449  53.922  20.345  1.00 11.12           C  
+ATOM    469  C   PRO A  87      37.146  54.567  19.148  1.00 11.39           C  
+ATOM    470  O   PRO A  87      38.125  54.020  18.627  1.00 11.32           O  
+ATOM    471  CB  PRO A  87      37.307  54.000  21.610  1.00 10.81           C  
+ATOM    472  CG  PRO A  87      37.006  52.695  22.314  1.00 10.89           C  
+ATOM    473  CD  PRO A  87      37.013  51.722  21.172  1.00 10.89           C  
+ATOM    474  N   HIS A  88      36.647  55.723  18.716  1.00 11.08           N  
+ATOM    475  CA  HIS A  88      37.236  56.424  17.577  1.00 11.92           C  
+ATOM    476  C   HIS A  88      37.017  57.931  17.663  1.00 12.62           C  
+ATOM    477  O   HIS A  88      36.205  58.417  18.454  1.00 12.20           O  
+ATOM    478  CB  HIS A  88      36.663  55.879  16.259  1.00 11.44           C  
+ATOM    479  CG  HIS A  88      35.213  56.187  16.052  1.00 12.14           C  
+ATOM    480  ND1 HIS A  88      34.778  57.313  15.385  1.00 11.22           N  
+ATOM    481  CD2 HIS A  88      34.098  55.519  16.430  1.00 11.67           C  
+ATOM    482  CE1 HIS A  88      33.458  57.324  15.361  1.00 12.08           C  
+ATOM    483  NE2 HIS A  88      33.020  56.246  15.988  1.00 11.43           N  
+ATOM    484  N   SER A  89      37.754  58.665  16.839  1.00 12.23           N  
+ATOM    485  CA  SER A  89      37.672  60.117  16.825  1.00 11.95           C  
+ATOM    486  C   SER A  89      37.855  60.573  15.386  1.00 12.06           C  
+ATOM    487  O   SER A  89      38.931  60.416  14.809  1.00 12.80           O  
+ATOM    488  CB  SER A  89      38.774  60.697  17.722  1.00 11.65           C  
+ATOM    489  OG  SER A  89      38.737  62.112  17.756  1.00 12.47           O  
+ATOM    490  N   HIS A  90      36.794  61.125  14.806  1.00 11.80           N  
+ATOM    491  CA  HIS A  90      36.838  61.589  13.426  1.00 11.77           C  
+ATOM    492  C   HIS A  90      37.495  62.965  13.354  1.00 11.83           C  
+ATOM    493  O   HIS A  90      36.920  63.966  13.794  1.00 12.20           O  
+ATOM    494  CB  HIS A  90      35.417  61.639  12.854  1.00 10.56           C  
+ATOM    495  CG  HIS A  90      35.370  61.923  11.387  1.00  9.97           C  
+ATOM    496  ND1 HIS A  90      35.987  61.117  10.455  1.00 10.67           N  
+ATOM    497  CD2 HIS A  90      34.794  62.930  10.691  1.00  9.37           C  
+ATOM    498  CE1 HIS A  90      35.794  61.616   9.248  1.00 10.03           C  
+ATOM    499  NE2 HIS A  90      35.073  62.716   9.364  1.00 10.05           N  
+ATOM    500  N   ASN A  91      38.706  63.003  12.803  1.00 11.98           N  
+ATOM    501  CA  ASN A  91      39.469  64.242  12.678  1.00 12.08           C  
+ATOM    502  C   ASN A  91      39.632  64.672  11.225  1.00 12.51           C  
+ATOM    503  O   ASN A  91      40.326  64.017  10.448  1.00 12.90           O  
+ATOM    504  CB  ASN A  91      40.860  64.080  13.302  1.00 12.43           C  
+ATOM    505  CG  ASN A  91      40.814  63.944  14.810  1.00 12.73           C  
+ATOM    506  OD1 ASN A  91      40.211  63.015  15.348  1.00 14.45           O  
+ATOM    507  ND2 ASN A  91      41.458  64.874  15.501  1.00 10.93           N  
+ATOM    508  N   ASP A  92      38.998  65.784  10.873  1.00 11.67           N  
+ATOM    509  CA  ASP A  92      39.065  66.310   9.518  1.00 12.44           C  
+ATOM    510  C   ASP A  92      40.294  67.172   9.284  1.00 12.31           C  
+ATOM    511  O   ASP A  92      40.524  68.138  10.006  1.00 12.75           O  
+ATOM    512  CB  ASP A  92      37.829  67.157   9.225  1.00 11.91           C  
+ATOM    513  CG  ASP A  92      36.557  66.378   9.382  1.00 12.41           C  
+ATOM    514  OD1 ASP A  92      36.331  65.468   8.564  1.00 12.26           O  
+ATOM    515  OD2 ASP A  92      35.801  66.669  10.330  1.00 13.57           O  
+ATOM    516  N   PRO A  93      41.114  66.814   8.283  1.00 12.88           N  
+ATOM    517  CA  PRO A  93      42.311  67.605   7.983  1.00 13.02           C  
+ATOM    518  C   PRO A  93      41.825  68.879   7.289  1.00 13.33           C  
+ATOM    519  O   PRO A  93      42.161  69.147   6.133  1.00 13.80           O  
+ATOM    520  CB  PRO A  93      43.102  66.697   7.044  1.00 12.88           C  
+ATOM    521  CG  PRO A  93      42.680  65.312   7.476  1.00 14.10           C  
+ATOM    522  CD  PRO A  93      41.190  65.492   7.640  1.00 12.79           C  
+ATOM    523  N   GLY A  94      41.007  69.641   8.010  1.00 12.76           N  
+ATOM    524  CA  GLY A  94      40.446  70.869   7.483  1.00 12.32           C  
+ATOM    525  C   GLY A  94      38.966  70.726   7.160  1.00 12.48           C  
+ATOM    526  O   GLY A  94      38.530  69.698   6.636  1.00 10.80           O  
+ATOM    527  N   TRP A  95      38.193  71.752   7.506  1.00 12.40           N  
+ATOM    528  CA  TRP A  95      36.757  71.811   7.232  1.00 13.33           C  
+ATOM    529  C   TRP A  95      36.244  73.194   7.621  1.00 14.29           C  
+ATOM    530  O   TRP A  95      36.123  74.071   6.769  1.00 13.32           O  
+ATOM    531  CB  TRP A  95      35.966  70.741   7.995  1.00 12.83           C  
+ATOM    532  CG  TRP A  95      34.484  70.811   7.671  1.00 12.67           C  
+ATOM    533  CD1 TRP A  95      33.929  71.144   6.466  1.00 12.27           C  
+ATOM    534  CD2 TRP A  95      33.383  70.522   8.550  1.00 12.58           C  
+ATOM    535  NE1 TRP A  95      32.557  71.081   6.538  1.00 12.83           N  
+ATOM    536  CE2 TRP A  95      32.195  70.700   7.804  1.00 12.25           C  
+ATOM    537  CE3 TRP A  95      33.286  70.126   9.893  1.00 12.59           C  
+ATOM    538  CZ2 TRP A  95      30.922  70.497   8.355  1.00 12.77           C  
+ATOM    539  CZ3 TRP A  95      32.015  69.923  10.443  1.00 12.70           C  
+ATOM    540  CH2 TRP A  95      30.854  70.109   9.672  1.00 13.05           C  
+ATOM    541  N   ILE A  96      35.933  73.387   8.903  1.00 15.87           N  
+ATOM    542  CA  ILE A  96      35.470  74.695   9.362  1.00 17.19           C  
+ATOM    543  C   ILE A  96      36.653  75.456   9.954  1.00 17.19           C  
+ATOM    544  O   ILE A  96      36.561  76.643  10.267  1.00 17.26           O  
+ATOM    545  CB  ILE A  96      34.329  74.586  10.397  1.00 19.05           C  
+ATOM    546  CG1 ILE A  96      34.750  73.701  11.567  1.00 20.64           C  
+ATOM    547  CG2 ILE A  96      33.073  74.051   9.716  1.00 18.72           C  
+ATOM    548  CD1 ILE A  96      33.742  73.675  12.693  1.00 23.80           C  
+ATOM    549  N   GLN A  97      37.765  74.741  10.098  1.00 16.68           N  
+ATOM    550  CA  GLN A  97      39.025  75.293  10.579  1.00 16.58           C  
+ATOM    551  C   GLN A  97      40.065  74.685   9.642  1.00 14.95           C  
+ATOM    552  O   GLN A  97      39.792  73.685   8.980  1.00 14.14           O  
+ATOM    553  CB  GLN A  97      39.324  74.856  12.018  1.00 18.41           C  
+ATOM    554  CG  GLN A  97      38.434  75.488  13.086  1.00 22.32           C  
+ATOM    555  CD  GLN A  97      38.927  75.196  14.498  1.00 25.03           C  
+ATOM    556  OE1 GLN A  97      40.057  75.538  14.858  1.00 27.69           O  
+ATOM    557  NE2 GLN A  97      38.082  74.559  15.304  1.00 27.33           N  
+ATOM    558  N   THR A  98      41.247  75.283   9.569  1.00 13.85           N  
+ATOM    559  CA  THR A  98      42.291  74.741   8.708  1.00 12.90           C  
+ATOM    560  C   THR A  98      42.938  73.550   9.409  1.00 12.87           C  
+ATOM    561  O   THR A  98      42.704  73.311  10.598  1.00 12.91           O  
+ATOM    562  CB  THR A  98      43.400  75.763   8.452  1.00 12.40           C  
+ATOM    563  OG1 THR A  98      44.035  76.074   9.694  1.00 13.77           O  
+ATOM    564  CG2 THR A  98      42.838  77.040   7.832  1.00 11.59           C  
+ATOM    565  N   PHE A  99      43.753  72.810   8.667  1.00 12.19           N  
+ATOM    566  CA  PHE A  99      44.460  71.665   9.222  1.00 12.51           C  
+ATOM    567  C   PHE A  99      45.210  72.087  10.487  1.00 12.91           C  
+ATOM    568  O   PHE A  99      45.054  71.477  11.540  1.00 13.41           O  
+ATOM    569  CB  PHE A  99      45.468  71.119   8.205  1.00 11.85           C  
+ATOM    570  CG  PHE A  99      46.347  70.016   8.745  1.00 12.28           C  
+ATOM    571  CD1 PHE A  99      45.936  68.686   8.691  1.00 12.14           C  
+ATOM    572  CD2 PHE A  99      47.589  70.310   9.307  1.00 11.83           C  
+ATOM    573  CE1 PHE A  99      46.749  67.662   9.187  1.00 12.73           C  
+ATOM    574  CE2 PHE A  99      48.409  69.296   9.806  1.00 12.68           C  
+ATOM    575  CZ  PHE A  99      47.987  67.966   9.745  1.00 12.58           C  
+ATOM    576  N   GLU A 100      46.025  73.133  10.370  1.00 13.59           N  
+ATOM    577  CA  GLU A 100      46.818  73.618  11.500  1.00 14.57           C  
+ATOM    578  C   GLU A 100      45.974  74.136  12.664  1.00 14.84           C  
+ATOM    579  O   GLU A 100      46.332  73.937  13.825  1.00 14.69           O  
+ATOM    580  CB  GLU A 100      47.786  74.710  11.032  1.00 14.81           C  
+ATOM    581  CG  GLU A 100      48.841  75.116  12.059  1.00 16.15           C  
+ATOM    582  CD  GLU A 100      49.751  73.969  12.471  1.00 17.18           C  
+ATOM    583  OE1 GLU A 100      49.924  73.019  11.674  1.00 16.43           O  
+ATOM    584  OE2 GLU A 100      50.311  74.029  13.589  1.00 18.13           O  
+ATOM    585  N   GLU A 101      44.860  74.799  12.362  1.00 14.90           N  
+ATOM    586  CA  GLU A 101      43.989  75.314  13.419  1.00 14.80           C  
+ATOM    587  C   GLU A 101      43.417  74.144  14.224  1.00 14.64           C  
+ATOM    588  O   GLU A 101      43.413  74.168  15.456  1.00 14.01           O  
+ATOM    589  CB  GLU A 101      42.849  76.150  12.822  1.00 15.87           C  
+ATOM    590  CG  GLU A 101      43.309  77.447  12.156  1.00 16.98           C  
+ATOM    591  CD  GLU A 101      42.156  78.271  11.598  1.00 17.95           C  
+ATOM    592  OE1 GLU A 101      41.223  77.680  11.016  1.00 16.38           O  
+ATOM    593  OE2 GLU A 101      42.191  79.514  11.731  1.00 18.50           O  
+ATOM    594  N   TYR A 102      42.931  73.120  13.527  1.00 13.67           N  
+ATOM    595  CA  TYR A 102      42.386  71.946  14.206  1.00 14.11           C  
+ATOM    596  C   TYR A 102      43.481  71.246  15.002  1.00 14.07           C  
+ATOM    597  O   TYR A 102      43.255  70.793  16.126  1.00 13.32           O  
+ATOM    598  CB  TYR A 102      41.823  70.933  13.210  1.00 14.28           C  
+ATOM    599  CG  TYR A 102      40.411  71.171  12.734  1.00 14.30           C  
+ATOM    600  CD1 TYR A 102      39.358  71.349  13.636  1.00 14.76           C  
+ATOM    601  CD2 TYR A 102      40.111  71.121  11.373  1.00 14.37           C  
+ATOM    602  CE1 TYR A 102      38.036  71.460  13.184  1.00 14.60           C  
+ATOM    603  CE2 TYR A 102      38.812  71.230  10.917  1.00 14.32           C  
+ATOM    604  CZ  TYR A 102      37.777  71.398  11.821  1.00 14.23           C  
+ATOM    605  OH  TYR A 102      36.495  71.491  11.336  1.00 13.76           O  
+ATOM    606  N   TYR A 103      44.663  71.136  14.406  1.00 14.00           N  
+ATOM    607  CA  TYR A 103      45.763  70.470  15.085  1.00 14.81           C  
+ATOM    608  C   TYR A 103      46.087  71.149  16.408  1.00 15.61           C  
+ATOM    609  O   TYR A 103      46.218  70.491  17.438  1.00 15.68           O  
+ATOM    610  CB  TYR A 103      47.023  70.461  14.218  1.00 13.35           C  
+ATOM    611  CG  TYR A 103      48.189  69.802  14.916  1.00 13.86           C  
+ATOM    612  CD1 TYR A 103      48.192  68.428  15.160  1.00 13.70           C  
+ATOM    613  CD2 TYR A 103      49.262  70.558  15.392  1.00 14.32           C  
+ATOM    614  CE1 TYR A 103      49.231  67.825  15.863  1.00 13.48           C  
+ATOM    615  CE2 TYR A 103      50.305  69.965  16.097  1.00 14.28           C  
+ATOM    616  CZ  TYR A 103      50.282  68.599  16.331  1.00 14.10           C  
+ATOM    617  OH  TYR A 103      51.303  68.008  17.040  1.00 14.76           O  
+ATOM    618  N   GLN A 104      46.212  72.470  16.372  1.00 16.28           N  
+ATOM    619  CA  GLN A 104      46.546  73.234  17.567  1.00 17.23           C  
+ATOM    620  C   GLN A 104      45.440  73.262  18.612  1.00 17.92           C  
+ATOM    621  O   GLN A 104      45.708  73.161  19.807  1.00 17.74           O  
+ATOM    622  CB  GLN A 104      46.908  74.677  17.189  1.00 17.59           C  
+ATOM    623  CG  GLN A 104      48.229  74.830  16.442  1.00 16.54           C  
+ATOM    624  CD  GLN A 104      49.411  74.287  17.228  1.00 18.02           C  
+ATOM    625  OE1 GLN A 104      49.455  74.387  18.457  1.00 17.68           O  
+ATOM    626  NE2 GLN A 104      50.383  73.717  16.521  1.00 16.40           N  
+ATOM    627  N   HIS A 105      44.198  73.388  18.161  1.00 18.39           N  
+ATOM    628  CA  HIS A 105      43.068  73.476  19.077  1.00 19.49           C  
+ATOM    629  C   HIS A 105      42.491  72.150  19.564  1.00 18.94           C  
+ATOM    630  O   HIS A 105      42.005  72.068  20.691  1.00 18.47           O  
+ATOM    631  CB  HIS A 105      41.935  74.280  18.428  1.00 22.28           C  
+ATOM    632  CG  HIS A 105      42.370  75.594  17.855  1.00 25.33           C  
+ATOM    633  ND1 HIS A 105      41.512  76.422  17.162  1.00 27.31           N  
+ATOM    634  CD2 HIS A 105      43.570  76.222  17.865  1.00 26.87           C  
+ATOM    635  CE1 HIS A 105      42.165  77.501  16.770  1.00 27.58           C  
+ATOM    636  NE2 HIS A 105      43.416  77.404  17.183  1.00 27.73           N  
+ATOM    637  N   ASP A 106      42.551  71.113  18.731  1.00 17.31           N  
+ATOM    638  CA  ASP A 106      41.952  69.836  19.102  1.00 16.73           C  
+ATOM    639  C   ASP A 106      42.788  68.567  18.972  1.00 15.91           C  
+ATOM    640  O   ASP A 106      43.056  67.888  19.960  1.00 15.69           O  
+ATOM    641  CB  ASP A 106      40.664  69.640  18.293  1.00 17.06           C  
+ATOM    642  CG  ASP A 106      39.646  70.734  18.543  1.00 18.52           C  
+ATOM    643  OD1 ASP A 106      38.957  70.677  19.580  1.00 19.17           O  
+ATOM    644  OD2 ASP A 106      39.544  71.656  17.706  1.00 19.14           O  
+ATOM    645  N   THR A 107      43.190  68.251  17.747  1.00 14.98           N  
+ATOM    646  CA  THR A 107      43.930  67.027  17.469  1.00 13.55           C  
+ATOM    647  C   THR A 107      45.182  66.711  18.285  1.00 13.77           C  
+ATOM    648  O   THR A 107      45.368  65.567  18.701  1.00 12.64           O  
+ATOM    649  CB  THR A 107      44.289  66.944  15.981  1.00 13.52           C  
+ATOM    650  OG1 THR A 107      43.104  67.151  15.201  1.00 12.29           O  
+ATOM    651  CG2 THR A 107      44.866  65.565  15.649  1.00 12.34           C  
+ATOM    652  N   LYS A 108      46.051  67.688  18.516  1.00 13.50           N  
+ATOM    653  CA  LYS A 108      47.252  67.369  19.281  1.00 14.57           C  
+ATOM    654  C   LYS A 108      46.889  66.968  20.707  1.00 14.28           C  
+ATOM    655  O   LYS A 108      47.587  66.175  21.330  1.00 14.34           O  
+ATOM    656  CB  LYS A 108      48.248  68.539  19.279  1.00 14.81           C  
+ATOM    657  CG  LYS A 108      47.853  69.755  20.094  1.00 16.00           C  
+ATOM    658  CD  LYS A 108      48.937  70.829  19.980  1.00 16.35           C  
+ATOM    659  CE  LYS A 108      48.697  71.987  20.935  1.00 16.81           C  
+ATOM    660  NZ  LYS A 108      49.803  72.990  20.871  1.00 16.94           N  
+ATOM    661  N   HIS A 109      45.788  67.508  21.215  1.00 14.87           N  
+ATOM    662  CA  HIS A 109      45.342  67.181  22.567  1.00 15.31           C  
+ATOM    663  C   HIS A 109      44.702  65.799  22.573  1.00 14.78           C  
+ATOM    664  O   HIS A 109      44.872  65.025  23.515  1.00 14.27           O  
+ATOM    665  CB  HIS A 109      44.349  68.232  23.053  1.00 16.92           C  
+ATOM    666  CG  HIS A 109      44.916  69.615  23.083  1.00 18.62           C  
+ATOM    667  ND1 HIS A 109      45.933  69.982  23.940  1.00 19.72           N  
+ATOM    668  CD2 HIS A 109      44.640  70.709  22.334  1.00 19.06           C  
+ATOM    669  CE1 HIS A 109      46.258  71.243  23.717  1.00 20.16           C  
+ATOM    670  NE2 HIS A 109      45.489  71.706  22.748  1.00 20.28           N  
+ATOM    671  N   ILE A 110      43.967  65.494  21.511  1.00 14.36           N  
+ATOM    672  CA  ILE A 110      43.320  64.195  21.380  1.00 13.64           C  
+ATOM    673  C   ILE A 110      44.379  63.096  21.353  1.00 13.50           C  
+ATOM    674  O   ILE A 110      44.259  62.081  22.041  1.00 12.81           O  
+ATOM    675  CB  ILE A 110      42.492  64.120  20.077  1.00 14.32           C  
+ATOM    676  CG1 ILE A 110      41.299  65.079  20.170  1.00 14.21           C  
+ATOM    677  CG2 ILE A 110      42.046  62.683  19.824  1.00 13.79           C  
+ATOM    678  CD1 ILE A 110      40.507  65.219  18.875  1.00 14.00           C  
+ATOM    679  N   LEU A 111      45.422  63.300  20.559  1.00 13.09           N  
+ATOM    680  CA  LEU A 111      46.481  62.308  20.453  1.00 13.59           C  
+ATOM    681  C   LEU A 111      47.340  62.242  21.706  1.00 14.03           C  
+ATOM    682  O   LEU A 111      47.783  61.162  22.106  1.00 14.42           O  
+ATOM    683  CB  LEU A 111      47.349  62.592  19.220  1.00 13.59           C  
+ATOM    684  CG  LEU A 111      46.620  62.276  17.909  1.00 13.18           C  
+ATOM    685  CD1 LEU A 111      47.447  62.733  16.713  1.00 12.48           C  
+ATOM    686  CD2 LEU A 111      46.342  60.775  17.844  1.00 13.68           C  
+ATOM    687  N   SER A 112      47.569  63.389  22.333  1.00 14.45           N  
+ATOM    688  CA  SER A 112      48.377  63.414  23.545  1.00 15.43           C  
+ATOM    689  C   SER A 112      47.664  62.674  24.674  1.00 15.56           C  
+ATOM    690  O   SER A 112      48.271  61.872  25.390  1.00 15.29           O  
+ATOM    691  CB  SER A 112      48.662  64.855  23.967  1.00 16.09           C  
+ATOM    692  OG  SER A 112      49.503  64.874  25.107  1.00 19.54           O  
+ATOM    693  N   ASN A 113      46.371  62.934  24.835  1.00 15.44           N  
+ATOM    694  CA  ASN A 113      45.622  62.267  25.888  1.00 15.93           C  
+ATOM    695  C   ASN A 113      45.328  60.803  25.557  1.00 15.98           C  
+ATOM    696  O   ASN A 113      45.141  59.986  26.460  1.00 14.90           O  
+ATOM    697  CB  ASN A 113      44.348  63.055  26.205  1.00 16.49           C  
+ATOM    698  CG  ASN A 113      44.662  64.406  26.832  1.00 17.39           C  
+ATOM    699  OD1 ASN A 113      45.654  64.540  27.545  1.00 19.42           O  
+ATOM    700  ND2 ASN A 113      43.830  65.402  26.575  1.00 16.88           N  
+ATOM    701  N   ALA A 114      45.309  60.464  24.270  1.00 15.56           N  
+ATOM    702  CA  ALA A 114      45.080  59.076  23.873  1.00 16.11           C  
+ATOM    703  C   ALA A 114      46.297  58.265  24.311  1.00 16.35           C  
+ATOM    704  O   ALA A 114      46.161  57.170  24.858  1.00 16.30           O  
+ATOM    705  CB  ALA A 114      44.898  58.969  22.358  1.00 16.09           C  
+ATOM    706  N   LEU A 115      47.487  58.810  24.068  1.00 16.40           N  
+ATOM    707  CA  LEU A 115      48.726  58.140  24.448  1.00 17.18           C  
+ATOM    708  C   LEU A 115      48.746  57.888  25.955  1.00 18.08           C  
+ATOM    709  O   LEU A 115      49.032  56.778  26.410  1.00 17.12           O  
+ATOM    710  CB  LEU A 115      49.942  58.993  24.048  1.00 17.62           C  
+ATOM    711  CG  LEU A 115      51.322  58.484  24.487  1.00 17.69           C  
+ATOM    712  CD1 LEU A 115      51.541  57.068  23.971  1.00 17.85           C  
+ATOM    713  CD2 LEU A 115      52.409  59.412  23.974  1.00 18.21           C  
+ATOM    714  N   ARG A 116      48.425  58.921  26.723  1.00 18.85           N  
+ATOM    715  CA  ARG A 116      48.417  58.810  28.175  1.00 20.56           C  
+ATOM    716  C   ARG A 116      47.382  57.809  28.678  1.00 19.55           C  
+ATOM    717  O   ARG A 116      47.705  56.897  29.442  1.00 18.80           O  
+ATOM    718  CB  ARG A 116      48.157  60.183  28.798  1.00 23.75           C  
+ATOM    719  CG  ARG A 116      49.275  61.177  28.536  1.00 28.93           C  
+ATOM    720  CD  ARG A 116      48.939  62.571  29.037  1.00 33.35           C  
+ATOM    721  NE  ARG A 116      50.041  63.503  28.807  1.00 36.91           N  
+ATOM    722  CZ  ARG A 116      49.991  64.804  29.076  1.00 38.94           C  
+ATOM    723  NH1 ARG A 116      48.888  65.336  29.585  1.00 40.21           N  
+ATOM    724  NH2 ARG A 116      51.047  65.574  28.841  1.00 40.22           N  
+ATOM    725  N   HIS A 117      46.140  57.973  28.238  1.00 19.24           N  
+ATOM    726  CA  HIS A 117      45.071  57.089  28.672  1.00 19.37           C  
+ATOM    727  C   HIS A 117      45.205  55.633  28.266  1.00 18.60           C  
+ATOM    728  O   HIS A 117      44.898  54.750  29.062  1.00 17.88           O  
+ATOM    729  CB  HIS A 117      43.728  57.656  28.231  1.00 20.18           C  
+ATOM    730  CG  HIS A 117      43.231  58.738  29.135  1.00 22.35           C  
+ATOM    731  ND1 HIS A 117      42.625  58.469  30.343  1.00 22.22           N  
+ATOM    732  CD2 HIS A 117      43.349  60.085  29.063  1.00 22.97           C  
+ATOM    733  CE1 HIS A 117      42.395  59.604  30.980  1.00 23.33           C  
+ATOM    734  NE2 HIS A 117      42.826  60.600  30.226  1.00 23.60           N  
+ATOM    735  N   LEU A 118      45.658  55.371  27.043  1.00 18.18           N  
+ATOM    736  CA  LEU A 118      45.834  53.990  26.605  1.00 18.16           C  
+ATOM    737  C   LEU A 118      47.007  53.381  27.366  1.00 18.79           C  
+ATOM    738  O   LEU A 118      46.980  52.210  27.744  1.00 19.50           O  
+ATOM    739  CB  LEU A 118      46.094  53.928  25.094  1.00 17.70           C  
+ATOM    740  CG  LEU A 118      44.910  54.381  24.227  1.00 17.50           C  
+ATOM    741  CD1 LEU A 118      45.295  54.349  22.755  1.00 17.43           C  
+ATOM    742  CD2 LEU A 118      43.715  53.476  24.486  1.00 17.74           C  
+ATOM    743  N   HIS A 119      48.043  54.181  27.588  1.00 18.87           N  
+ATOM    744  CA  HIS A 119      49.206  53.706  28.319  1.00 19.43           C  
+ATOM    745  C   HIS A 119      48.790  53.247  29.717  1.00 19.71           C  
+ATOM    746  O   HIS A 119      49.175  52.167  30.162  1.00 19.72           O  
+ATOM    747  CB  HIS A 119      50.257  54.822  28.414  1.00 20.91           C  
+ATOM    748  CG  HIS A 119      51.415  54.488  29.303  1.00 22.83           C  
+ATOM    749  ND1 HIS A 119      51.414  54.750  30.657  1.00 24.16           N  
+ATOM    750  CD2 HIS A 119      52.598  53.883  29.038  1.00 23.89           C  
+ATOM    751  CE1 HIS A 119      52.546  54.321  31.187  1.00 24.53           C  
+ATOM    752  NE2 HIS A 119      53.282  53.790  30.227  1.00 24.63           N  
+ATOM    753  N   ASP A 120      47.978  54.060  30.388  1.00 19.22           N  
+ATOM    754  CA  ASP A 120      47.524  53.763  31.747  1.00 19.25           C  
+ATOM    755  C   ASP A 120      46.367  52.775  31.892  1.00 19.42           C  
+ATOM    756  O   ASP A 120      46.124  52.273  32.989  1.00 19.09           O  
+ATOM    757  CB  ASP A 120      47.144  55.057  32.468  1.00 18.84           C  
+ATOM    758  CG  ASP A 120      48.322  55.987  32.657  1.00 19.37           C  
+ATOM    759  OD1 ASP A 120      49.473  55.502  32.675  1.00 18.78           O  
+ATOM    760  OD2 ASP A 120      48.092  57.205  32.802  1.00 21.18           O  
+ATOM    761  N   ASN A 121      45.652  52.501  30.804  1.00 19.13           N  
+ATOM    762  CA  ASN A 121      44.521  51.573  30.846  1.00 19.56           C  
+ATOM    763  C   ASN A 121      44.679  50.514  29.756  1.00 20.42           C  
+ATOM    764  O   ASN A 121      44.100  50.625  28.673  1.00 20.02           O  
+ATOM    765  CB  ASN A 121      43.206  52.340  30.658  1.00 19.10           C  
+ATOM    766  CG  ASN A 121      43.001  53.420  31.715  1.00 20.04           C  
+ATOM    767  OD1 ASN A 121      43.440  54.564  31.552  1.00 19.80           O  
+ATOM    768  ND2 ASN A 121      42.346  53.055  32.810  1.00 17.76           N  
+ATOM    769  N   PRO A 122      45.456  49.454  30.043  1.00 20.96           N  
+ATOM    770  CA  PRO A 122      45.736  48.349  29.119  1.00 20.73           C  
+ATOM    771  C   PRO A 122      44.584  47.753  28.310  1.00 20.51           C  
+ATOM    772  O   PRO A 122      44.801  47.297  27.186  1.00 20.32           O  
+ATOM    773  CB  PRO A 122      46.435  47.315  30.012  1.00 21.89           C  
+ATOM    774  CG  PRO A 122      45.941  47.647  31.395  1.00 22.52           C  
+ATOM    775  CD  PRO A 122      45.975  49.145  31.388  1.00 21.57           C  
+ATOM    776  N   GLU A 123      43.370  47.756  28.856  1.00 19.71           N  
+ATOM    777  CA  GLU A 123      42.228  47.192  28.134  1.00 20.22           C  
+ATOM    778  C   GLU A 123      41.508  48.170  27.213  1.00 19.10           C  
+ATOM    779  O   GLU A 123      40.685  47.759  26.394  1.00 18.70           O  
+ATOM    780  CB  GLU A 123      41.209  46.591  29.104  1.00 22.06           C  
+ATOM    781  CG  GLU A 123      41.481  45.146  29.480  1.00 26.93           C  
+ATOM    782  CD  GLU A 123      42.673  44.993  30.392  1.00 29.21           C  
+ATOM    783  OE1 GLU A 123      42.663  45.610  31.479  1.00 31.64           O  
+ATOM    784  OE2 GLU A 123      43.615  44.255  30.026  1.00 32.04           O  
+ATOM    785  N   MET A 124      41.801  49.458  27.352  1.00 18.17           N  
+ATOM    786  CA  MET A 124      41.167  50.464  26.506  1.00 17.41           C  
+ATOM    787  C   MET A 124      41.742  50.353  25.092  1.00 17.17           C  
+ATOM    788  O   MET A 124      42.918  50.023  24.918  1.00 15.97           O  
+ATOM    789  CB  MET A 124      41.420  51.864  27.068  1.00 18.20           C  
+ATOM    790  CG  MET A 124      40.643  52.964  26.356  1.00 18.11           C  
+ATOM    791  SD  MET A 124      38.864  52.640  26.332  1.00 19.65           S  
+ATOM    792  CE  MET A 124      38.254  54.161  25.589  1.00 17.72           C  
+ATOM    793  N   LYS A 125      40.908  50.622  24.090  1.00 16.29           N  
+ATOM    794  CA  LYS A 125      41.320  50.543  22.691  1.00 16.25           C  
+ATOM    795  C   LYS A 125      40.980  51.841  21.954  1.00 15.56           C  
+ATOM    796  O   LYS A 125      40.182  52.647  22.437  1.00 14.94           O  
+ATOM    797  CB  LYS A 125      40.621  49.358  22.017  1.00 17.56           C  
+ATOM    798  CG  LYS A 125      40.947  48.002  22.642  1.00 19.86           C  
+ATOM    799  CD  LYS A 125      42.344  47.533  22.267  1.00 21.31           C  
+ATOM    800  CE  LYS A 125      42.744  46.272  23.032  1.00 22.88           C  
+ATOM    801  NZ  LYS A 125      41.818  45.132  22.794  1.00 22.89           N  
+ATOM    802  N   PHE A 126      41.567  52.037  20.777  1.00 14.31           N  
+ATOM    803  CA  PHE A 126      41.323  53.262  20.016  1.00 13.19           C  
+ATOM    804  C   PHE A 126      41.824  53.079  18.582  1.00 13.17           C  
+ATOM    805  O   PHE A 126      42.902  52.529  18.367  1.00 12.87           O  
+ATOM    806  CB  PHE A 126      42.075  54.416  20.698  1.00 13.07           C  
+ATOM    807  CG  PHE A 126      41.704  55.795  20.203  1.00 13.13           C  
+ATOM    808  CD1 PHE A 126      40.382  56.229  20.214  1.00 12.88           C  
+ATOM    809  CD2 PHE A 126      42.697  56.687  19.800  1.00 12.99           C  
+ATOM    810  CE1 PHE A 126      40.052  57.534  19.838  1.00 12.73           C  
+ATOM    811  CE2 PHE A 126      42.381  57.995  19.420  1.00 14.10           C  
+ATOM    812  CZ  PHE A 126      41.054  58.420  19.441  1.00 13.20           C  
+ATOM    813  N   ILE A 127      41.043  53.523  17.602  1.00 12.96           N  
+ATOM    814  CA  ILE A 127      41.471  53.416  16.210  1.00 12.51           C  
+ATOM    815  C   ILE A 127      41.733  54.808  15.639  1.00 12.40           C  
+ATOM    816  O   ILE A 127      41.068  55.780  16.020  1.00 12.72           O  
+ATOM    817  CB  ILE A 127      40.426  52.684  15.340  1.00 13.03           C  
+ATOM    818  CG1 ILE A 127      39.088  53.432  15.363  1.00 12.52           C  
+ATOM    819  CG2 ILE A 127      40.254  51.258  15.846  1.00 13.68           C  
+ATOM    820  CD1 ILE A 127      38.065  52.870  14.392  1.00 11.51           C  
+ATOM    821  N   TRP A 128      42.713  54.907  14.743  1.00 11.53           N  
+ATOM    822  CA  TRP A 128      43.060  56.190  14.134  1.00 11.00           C  
+ATOM    823  C   TRP A 128      43.177  56.074  12.616  1.00 10.95           C  
+ATOM    824  O   TRP A 128      43.819  55.158  12.103  1.00 10.31           O  
+ATOM    825  CB  TRP A 128      44.370  56.718  14.715  1.00 10.91           C  
+ATOM    826  CG  TRP A 128      44.608  58.144  14.353  1.00 11.82           C  
+ATOM    827  CD1 TRP A 128      45.345  58.618  13.306  1.00 12.38           C  
+ATOM    828  CD2 TRP A 128      44.050  59.289  15.004  1.00 12.05           C  
+ATOM    829  NE1 TRP A 128      45.282  59.993  13.265  1.00 12.35           N  
+ATOM    830  CE2 TRP A 128      44.492  60.429  14.297  1.00 11.66           C  
+ATOM    831  CE3 TRP A 128      43.215  59.463  16.119  1.00 11.84           C  
+ATOM    832  CZ2 TRP A 128      44.126  61.730  14.667  1.00 11.95           C  
+ATOM    833  CZ3 TRP A 128      42.851  60.757  16.485  1.00 12.18           C  
+ATOM    834  CH2 TRP A 128      43.309  61.872  15.760  1.00 11.70           C  
+ATOM    835  N   ALA A 129      42.583  57.025  11.899  1.00 10.97           N  
+ATOM    836  CA  ALA A 129      42.590  56.972  10.438  1.00 10.86           C  
+ATOM    837  C   ALA A 129      43.441  57.982   9.673  1.00 11.29           C  
+ATOM    838  O   ALA A 129      44.075  57.625   8.684  1.00 12.05           O  
+ATOM    839  CB  ALA A 129      41.153  57.051   9.930  1.00 10.88           C  
+ATOM    840  N   GLU A 130      43.454  59.233  10.124  1.00 11.69           N  
+ATOM    841  CA  GLU A 130      44.181  60.297   9.428  1.00 11.76           C  
+ATOM    842  C   GLU A 130      45.667  60.421   9.756  1.00 12.56           C  
+ATOM    843  O   GLU A 130      46.048  61.041  10.751  1.00 11.54           O  
+ATOM    844  CB  GLU A 130      43.490  61.639   9.688  1.00 12.79           C  
+ATOM    845  CG  GLU A 130      41.999  61.651   9.373  1.00 13.31           C  
+ATOM    846  CD  GLU A 130      41.152  61.053  10.486  1.00 14.75           C  
+ATOM    847  OE1 GLU A 130      41.706  60.749  11.565  1.00 13.73           O  
+ATOM    848  OE2 GLU A 130      39.928  60.897  10.284  1.00 14.94           O  
+ATOM    849  N   ILE A 131      46.510  59.870   8.888  1.00 12.39           N  
+ATOM    850  CA  ILE A 131      47.947  59.910   9.125  1.00 12.74           C  
+ATOM    851  C   ILE A 131      48.568  61.305   9.006  1.00 13.30           C  
+ATOM    852  O   ILE A 131      49.597  61.574   9.631  1.00 12.93           O  
+ATOM    853  CB  ILE A 131      48.679  58.906   8.205  1.00 13.35           C  
+ATOM    854  CG1 ILE A 131      48.065  57.513   8.392  1.00 12.55           C  
+ATOM    855  CG2 ILE A 131      50.164  58.850   8.552  1.00 14.06           C  
+ATOM    856  CD1 ILE A 131      47.934  57.089   9.856  1.00 13.67           C  
+ATOM    857  N   SER A 132      47.952  62.193   8.226  1.00 12.40           N  
+ATOM    858  CA  SER A 132      48.467  63.557   8.089  1.00 12.80           C  
+ATOM    859  C   SER A 132      48.608  64.163   9.488  1.00 12.95           C  
+ATOM    860  O   SER A 132      49.628  64.777   9.814  1.00 12.50           O  
+ATOM    861  CB  SER A 132      47.522  64.419   7.235  1.00 12.98           C  
+ATOM    862  OG  SER A 132      46.193  64.404   7.740  1.00 12.82           O  
+ATOM    863  N   TYR A 133      47.578  63.979  10.312  1.00 12.80           N  
+ATOM    864  CA  TYR A 133      47.588  64.480  11.684  1.00 12.92           C  
+ATOM    865  C   TYR A 133      48.552  63.687  12.566  1.00 13.22           C  
+ATOM    866  O   TYR A 133      49.313  64.271  13.341  1.00 13.58           O  
+ATOM    867  CB  TYR A 133      46.190  64.394  12.303  1.00 12.47           C  
+ATOM    868  CG  TYR A 133      45.288  65.570  12.003  1.00 11.97           C  
+ATOM    869  CD1 TYR A 133      44.018  65.374  11.461  1.00 11.50           C  
+ATOM    870  CD2 TYR A 133      45.697  66.875  12.282  1.00 11.86           C  
+ATOM    871  CE1 TYR A 133      43.173  66.450  11.202  1.00 11.97           C  
+ATOM    872  CE2 TYR A 133      44.862  67.959  12.028  1.00 12.41           C  
+ATOM    873  CZ  TYR A 133      43.603  67.740  11.490  1.00 12.92           C  
+ATOM    874  OH  TYR A 133      42.775  68.813  11.252  1.00 14.26           O  
+ATOM    875  N   PHE A 134      48.525  62.361  12.451  1.00 12.77           N  
+ATOM    876  CA  PHE A 134      49.396  61.536  13.284  1.00 13.70           C  
+ATOM    877  C   PHE A 134      50.874  61.827  13.057  1.00 14.52           C  
+ATOM    878  O   PHE A 134      51.654  61.894  14.011  1.00 14.03           O  
+ATOM    879  CB  PHE A 134      49.143  60.046  13.054  1.00 13.30           C  
+ATOM    880  CG  PHE A 134      49.663  59.179  14.167  1.00 12.85           C  
+ATOM    881  CD1 PHE A 134      48.921  59.006  15.333  1.00 13.10           C  
+ATOM    882  CD2 PHE A 134      50.925  58.600  14.086  1.00 12.70           C  
+ATOM    883  CE1 PHE A 134      49.430  58.274  16.405  1.00 12.84           C  
+ATOM    884  CE2 PHE A 134      51.445  57.867  15.150  1.00 13.05           C  
+ATOM    885  CZ  PHE A 134      50.695  57.704  16.315  1.00 12.90           C  
+ATOM    886  N   ALA A 135      51.261  61.989  11.795  1.00 14.75           N  
+ATOM    887  CA  ALA A 135      52.653  62.270  11.469  1.00 15.80           C  
+ATOM    888  C   ALA A 135      53.068  63.618  12.062  1.00 16.47           C  
+ATOM    889  O   ALA A 135      54.167  63.756  12.603  1.00 17.81           O  
+ATOM    890  CB  ALA A 135      52.843  62.268   9.958  1.00 15.18           C  
+ATOM    891  N   ARG A 136      52.180  64.602  11.958  1.00 16.38           N  
+ATOM    892  CA  ARG A 136      52.417  65.945  12.489  1.00 17.85           C  
+ATOM    893  C   ARG A 136      52.659  65.866  13.999  1.00 18.07           C  
+ATOM    894  O   ARG A 136      53.549  66.524  14.540  1.00 17.96           O  
+ATOM    895  CB  ARG A 136      51.194  66.828  12.214  1.00 18.62           C  
+ATOM    896  CG  ARG A 136      51.233  68.221  12.851  1.00 19.63           C  
+ATOM    897  CD  ARG A 136      51.971  69.240  11.985  1.00 21.28           C  
+ATOM    898  NE  ARG A 136      51.889  70.590  12.550  1.00 21.22           N  
+ATOM    899  CZ  ARG A 136      52.513  70.963  13.663  1.00 21.60           C  
+ATOM    900  NH1 ARG A 136      53.266  70.090  14.318  1.00 21.56           N  
+ATOM    901  NH2 ARG A 136      52.373  72.197  14.130  1.00 21.01           N  
+ATOM    902  N   PHE A 137      51.856  65.044  14.667  1.00 17.06           N  
+ATOM    903  CA  PHE A 137      51.946  64.857  16.110  1.00 16.50           C  
+ATOM    904  C   PHE A 137      53.216  64.116  16.520  1.00 16.82           C  
+ATOM    905  O   PHE A 137      54.007  64.599  17.336  1.00 15.91           O  
+ATOM    906  CB  PHE A 137      50.728  64.069  16.589  1.00 16.48           C  
+ATOM    907  CG  PHE A 137      50.709  63.817  18.065  1.00 16.50           C  
+ATOM    908  CD1 PHE A 137      50.399  64.842  18.954  1.00 16.68           C  
+ATOM    909  CD2 PHE A 137      51.000  62.553  18.570  1.00 16.93           C  
+ATOM    910  CE1 PHE A 137      50.376  64.612  20.324  1.00 16.87           C  
+ATOM    911  CE2 PHE A 137      50.980  62.313  19.944  1.00 16.89           C  
+ATOM    912  CZ  PHE A 137      50.665  63.348  20.820  1.00 17.07           C  
+ATOM    913  N   TYR A 138      53.399  62.934  15.943  1.00 17.33           N  
+ATOM    914  CA  TYR A 138      54.544  62.088  16.241  1.00 19.31           C  
+ATOM    915  C   TYR A 138      55.896  62.791  16.135  1.00 20.43           C  
+ATOM    916  O   TYR A 138      56.738  62.662  17.027  1.00 20.11           O  
+ATOM    917  CB  TYR A 138      54.546  60.870  15.321  1.00 19.16           C  
+ATOM    918  CG  TYR A 138      55.573  59.832  15.707  1.00 20.39           C  
+ATOM    919  CD1 TYR A 138      55.322  58.931  16.737  1.00 20.40           C  
+ATOM    920  CD2 TYR A 138      56.797  59.750  15.041  1.00 20.04           C  
+ATOM    921  CE1 TYR A 138      56.262  57.966  17.095  1.00 21.70           C  
+ATOM    922  CE2 TYR A 138      57.745  58.787  15.393  1.00 20.96           C  
+ATOM    923  CZ  TYR A 138      57.467  57.900  16.417  1.00 20.86           C  
+ATOM    924  OH  TYR A 138      58.381  56.929  16.756  1.00 22.32           O  
+ATOM    925  N   HIS A 139      56.116  63.522  15.047  1.00 21.39           N  
+ATOM    926  CA  HIS A 139      57.391  64.212  14.872  1.00 23.26           C  
+ATOM    927  C   HIS A 139      57.628  65.306  15.910  1.00 23.56           C  
+ATOM    928  O   HIS A 139      58.762  65.734  16.117  1.00 24.04           O  
+ATOM    929  CB  HIS A 139      57.494  64.791  13.459  1.00 23.86           C  
+ATOM    930  CG  HIS A 139      57.669  63.749  12.396  1.00 25.63           C  
+ATOM    931  ND1 HIS A 139      58.772  62.923  12.338  1.00 26.39           N  
+ATOM    932  CD2 HIS A 139      56.877  63.391  11.357  1.00 25.59           C  
+ATOM    933  CE1 HIS A 139      58.652  62.104  11.308  1.00 26.89           C  
+ATOM    934  NE2 HIS A 139      57.511  62.367  10.697  1.00 25.94           N  
+ATOM    935  N   ASP A 140      56.559  65.752  16.561  1.00 23.49           N  
+ATOM    936  CA  ASP A 140      56.662  66.782  17.590  1.00 23.71           C  
+ATOM    937  C   ASP A 140      56.879  66.173  18.980  1.00 23.14           C  
+ATOM    938  O   ASP A 140      57.233  66.877  19.926  1.00 22.68           O  
+ATOM    939  CB  ASP A 140      55.401  67.651  17.593  1.00 24.66           C  
+ATOM    940  CG  ASP A 140      55.507  68.835  16.649  1.00 26.17           C  
+ATOM    941  OD1 ASP A 140      56.361  68.798  15.738  1.00 26.79           O  
+ATOM    942  OD2 ASP A 140      54.732  69.802  16.815  1.00 26.95           O  
+ATOM    943  N   LEU A 141      56.675  64.863  19.093  1.00 22.45           N  
+ATOM    944  CA  LEU A 141      56.851  64.162  20.364  1.00 22.73           C  
+ATOM    945  C   LEU A 141      58.309  63.966  20.748  1.00 22.98           C  
+ATOM    946  O   LEU A 141      59.182  63.860  19.890  1.00 22.46           O  
+ATOM    947  CB  LEU A 141      56.194  62.780  20.317  1.00 22.57           C  
+ATOM    948  CG  LEU A 141      54.676  62.622  20.381  1.00 22.78           C  
+ATOM    949  CD1 LEU A 141      54.334  61.132  20.284  1.00 22.33           C  
+ATOM    950  CD2 LEU A 141      54.140  63.203  21.682  1.00 22.26           C  
+ATOM    951  N   GLY A 142      58.564  63.915  22.051  1.00 23.87           N  
+ATOM    952  CA  GLY A 142      59.914  63.685  22.528  1.00 24.62           C  
+ATOM    953  C   GLY A 142      60.197  62.205  22.353  1.00 25.34           C  
+ATOM    954  O   GLY A 142      59.265  61.411  22.209  1.00 25.05           O  
+ATOM    955  N   GLU A 143      61.469  61.825  22.375  1.00 26.02           N  
+ATOM    956  CA  GLU A 143      61.857  60.431  22.194  1.00 27.00           C  
+ATOM    957  C   GLU A 143      61.168  59.474  23.164  1.00 26.81           C  
+ATOM    958  O   GLU A 143      60.742  58.389  22.770  1.00 26.55           O  
+ATOM    959  CB  GLU A 143      63.376  60.290  22.318  1.00 28.32           C  
+ATOM    960  CG  GLU A 143      63.917  58.939  21.872  1.00 30.69           C  
+ATOM    961  CD  GLU A 143      63.531  58.595  20.442  1.00 32.34           C  
+ATOM    962  OE1 GLU A 143      63.731  59.442  19.545  1.00 33.73           O  
+ATOM    963  OE2 GLU A 143      63.031  57.475  20.212  1.00 33.41           O  
+ATOM    964  N   ASN A 144      61.061  59.871  24.427  1.00 26.82           N  
+ATOM    965  CA  ASN A 144      60.416  59.028  25.429  1.00 27.16           C  
+ATOM    966  C   ASN A 144      58.973  58.725  25.031  1.00 25.97           C  
+ATOM    967  O   ASN A 144      58.535  57.576  25.089  1.00 25.46           O  
+ATOM    968  CB  ASN A 144      60.456  59.715  26.802  1.00 28.53           C  
+ATOM    969  CG  ASN A 144      59.674  58.955  27.865  1.00 30.89           C  
+ATOM    970  OD1 ASN A 144      58.439  58.931  27.850  1.00 31.99           O  
+ATOM    971  ND2 ASN A 144      60.392  58.326  28.794  1.00 31.24           N  
+ATOM    972  N   LYS A 145      58.244  59.757  24.614  1.00 25.27           N  
+ATOM    973  CA  LYS A 145      56.850  59.592  24.208  1.00 24.54           C  
+ATOM    974  C   LYS A 145      56.701  58.801  22.910  1.00 23.67           C  
+ATOM    975  O   LYS A 145      55.737  58.050  22.750  1.00 23.28           O  
+ATOM    976  CB  LYS A 145      56.172  60.960  24.077  1.00 24.90           C  
+ATOM    977  CG  LYS A 145      55.891  61.636  25.417  1.00 26.63           C  
+ATOM    978  CD  LYS A 145      54.932  60.797  26.254  1.00 28.26           C  
+ATOM    979  CE  LYS A 145      54.651  61.429  27.613  1.00 29.93           C  
+ATOM    980  NZ  LYS A 145      55.861  61.468  28.481  1.00 31.47           N  
+ATOM    981  N   LYS A 146      57.643  58.966  21.983  1.00 23.03           N  
+ATOM    982  CA  LYS A 146      57.591  58.224  20.726  1.00 22.22           C  
+ATOM    983  C   LYS A 146      57.651  56.733  21.037  1.00 21.73           C  
+ATOM    984  O   LYS A 146      56.970  55.932  20.402  1.00 21.25           O  
+ATOM    985  CB  LYS A 146      58.762  58.599  19.806  1.00 22.23           C  
+ATOM    986  CG  LYS A 146      58.621  59.948  19.115  1.00 22.76           C  
+ATOM    987  CD  LYS A 146      59.761  60.193  18.134  1.00 23.90           C  
+ATOM    988  CE  LYS A 146      59.592  61.528  17.421  1.00 24.68           C  
+ATOM    989  NZ  LYS A 146      60.723  61.802  16.502  1.00 26.83           N  
+ATOM    990  N   LEU A 147      58.471  56.370  22.020  1.00 21.32           N  
+ATOM    991  CA  LEU A 147      58.618  54.977  22.425  1.00 20.74           C  
+ATOM    992  C   LEU A 147      57.331  54.453  23.066  1.00 20.55           C  
+ATOM    993  O   LEU A 147      56.914  53.328  22.796  1.00 19.53           O  
+ATOM    994  CB  LEU A 147      59.795  54.830  23.396  1.00 21.37           C  
+ATOM    995  CG  LEU A 147      61.174  55.062  22.764  1.00 21.47           C  
+ATOM    996  CD1 LEU A 147      62.268  54.961  23.820  1.00 22.05           C  
+ATOM    997  CD2 LEU A 147      61.402  54.031  21.667  1.00 22.58           C  
+ATOM    998  N   GLN A 148      56.705  55.259  23.918  1.00 20.54           N  
+ATOM    999  CA  GLN A 148      55.454  54.836  24.539  1.00 20.71           C  
+ATOM   1000  C   GLN A 148      54.392  54.655  23.457  1.00 19.55           C  
+ATOM   1001  O   GLN A 148      53.577  53.735  23.521  1.00 19.48           O  
+ATOM   1002  CB  GLN A 148      54.958  55.869  25.553  1.00 22.42           C  
+ATOM   1003  CG  GLN A 148      55.690  55.854  26.882  1.00 26.50           C  
+ATOM   1004  CD  GLN A 148      55.029  56.746  27.919  1.00 28.92           C  
+ATOM   1005  OE1 GLN A 148      55.442  56.776  29.080  1.00 30.98           O  
+ATOM   1006  NE2 GLN A 148      53.996  57.478  27.504  1.00 28.96           N  
+ATOM   1007  N   MET A 149      54.408  55.537  22.464  1.00 18.23           N  
+ATOM   1008  CA  MET A 149      53.436  55.467  21.380  1.00 17.54           C  
+ATOM   1009  C   MET A 149      53.634  54.195  20.561  1.00 17.52           C  
+ATOM   1010  O   MET A 149      52.671  53.509  20.229  1.00 15.68           O  
+ATOM   1011  CB  MET A 149      53.557  56.695  20.475  1.00 17.55           C  
+ATOM   1012  CG  MET A 149      52.535  56.748  19.347  1.00 17.22           C  
+ATOM   1013  SD  MET A 149      50.825  56.820  19.926  1.00 18.65           S  
+ATOM   1014  CE  MET A 149      50.575  58.585  20.074  1.00 17.65           C  
+ATOM   1015  N   LYS A 150      54.884  53.876  20.242  1.00 17.85           N  
+ATOM   1016  CA  LYS A 150      55.162  52.678  19.461  1.00 19.03           C  
+ATOM   1017  C   LYS A 150      54.741  51.427  20.216  1.00 18.85           C  
+ATOM   1018  O   LYS A 150      54.314  50.448  19.607  1.00 18.69           O  
+ATOM   1019  CB  LYS A 150      56.651  52.597  19.106  1.00 19.98           C  
+ATOM   1020  CG  LYS A 150      57.119  53.722  18.195  1.00 22.90           C  
+ATOM   1021  CD  LYS A 150      58.627  53.711  17.996  1.00 25.52           C  
+ATOM   1022  CE  LYS A 150      59.079  52.488  17.225  1.00 27.56           C  
+ATOM   1023  NZ  LYS A 150      60.546  52.528  16.959  1.00 30.17           N  
+ATOM   1024  N   SER A 151      54.841  51.463  21.542  1.00 19.40           N  
+ATOM   1025  CA  SER A 151      54.476  50.306  22.348  1.00 20.06           C  
+ATOM   1026  C   SER A 151      52.970  50.036  22.376  1.00 19.84           C  
+ATOM   1027  O   SER A 151      52.551  48.882  22.280  1.00 18.81           O  
+ATOM   1028  CB  SER A 151      55.004  50.457  23.779  1.00 21.55           C  
+ATOM   1029  OG  SER A 151      54.275  51.439  24.489  1.00 24.67           O  
+ATOM   1030  N   ILE A 152      52.150  51.078  22.502  1.00 19.33           N  
+ATOM   1031  CA  ILE A 152      50.710  50.851  22.525  1.00 18.89           C  
+ATOM   1032  C   ILE A 152      50.179  50.464  21.144  1.00 19.23           C  
+ATOM   1033  O   ILE A 152      49.076  49.937  21.023  1.00 19.09           O  
+ATOM   1034  CB  ILE A 152      49.923  52.070  23.071  1.00 19.27           C  
+ATOM   1035  CG1 ILE A 152      50.241  53.330  22.270  1.00 18.37           C  
+ATOM   1036  CG2 ILE A 152      50.251  52.272  24.545  1.00 19.38           C  
+ATOM   1037  CD1 ILE A 152      49.354  54.502  22.643  1.00 20.01           C  
+ATOM   1038  N   VAL A 153      50.965  50.723  20.103  1.00 19.03           N  
+ATOM   1039  CA  VAL A 153      50.565  50.342  18.750  1.00 19.39           C  
+ATOM   1040  C   VAL A 153      50.961  48.879  18.579  1.00 20.08           C  
+ATOM   1041  O   VAL A 153      50.178  48.056  18.104  1.00 19.10           O  
+ATOM   1042  CB  VAL A 153      51.286  51.193  17.680  1.00 19.59           C  
+ATOM   1043  CG1 VAL A 153      51.072  50.590  16.292  1.00 18.72           C  
+ATOM   1044  CG2 VAL A 153      50.757  52.619  17.716  1.00 19.20           C  
+ATOM   1045  N   LYS A 154      52.183  48.561  18.995  1.00 20.71           N  
+ATOM   1046  CA  LYS A 154      52.692  47.200  18.897  1.00 22.43           C  
+ATOM   1047  C   LYS A 154      51.830  46.217  19.693  1.00 22.31           C  
+ATOM   1048  O   LYS A 154      51.601  45.087  19.248  1.00 22.99           O  
+ATOM   1049  CB  LYS A 154      54.141  47.148  19.396  1.00 23.60           C  
+ATOM   1050  CG  LYS A 154      54.883  45.873  19.010  1.00 26.51           C  
+ATOM   1051  CD  LYS A 154      56.371  45.962  19.330  1.00 28.32           C  
+ATOM   1052  CE  LYS A 154      56.647  45.768  20.815  1.00 30.60           C  
+ATOM   1053  NZ  LYS A 154      55.949  46.758  21.689  1.00 32.04           N  
+ATOM   1054  N   ASN A 155      51.343  46.645  20.858  1.00 21.74           N  
+ATOM   1055  CA  ASN A 155      50.523  45.775  21.699  1.00 21.60           C  
+ATOM   1056  C   ASN A 155      49.048  45.707  21.292  1.00 21.26           C  
+ATOM   1057  O   ASN A 155      48.268  44.985  21.907  1.00 21.23           O  
+ATOM   1058  CB  ASN A 155      50.634  46.182  23.179  1.00 22.98           C  
+ATOM   1059  CG  ASN A 155      49.828  47.429  23.519  1.00 23.68           C  
+ATOM   1060  OD1 ASN A 155      49.086  47.950  22.689  1.00 25.06           O  
+ATOM   1061  ND2 ASN A 155      49.967  47.905  24.755  1.00 22.98           N  
+ATOM   1062  N   GLY A 156      48.664  46.470  20.274  1.00 20.62           N  
+ATOM   1063  CA  GLY A 156      47.289  46.420  19.798  1.00 19.54           C  
+ATOM   1064  C   GLY A 156      46.252  47.364  20.381  1.00 18.92           C  
+ATOM   1065  O   GLY A 156      45.077  47.274  20.012  1.00 18.44           O  
+ATOM   1066  N   GLN A 157      46.652  48.263  21.277  1.00 17.60           N  
+ATOM   1067  CA  GLN A 157      45.695  49.198  21.872  1.00 16.41           C  
+ATOM   1068  C   GLN A 157      45.307  50.324  20.920  1.00 15.89           C  
+ATOM   1069  O   GLN A 157      44.142  50.704  20.842  1.00 15.45           O  
+ATOM   1070  CB  GLN A 157      46.254  49.811  23.149  1.00 16.48           C  
+ATOM   1071  CG  GLN A 157      46.313  48.866  24.328  1.00 16.57           C  
+ATOM   1072  CD  GLN A 157      46.574  49.616  25.611  1.00 17.00           C  
+ATOM   1073  OE1 GLN A 157      45.672  50.242  26.171  1.00 18.25           O  
+ATOM   1074  NE2 GLN A 157      47.815  49.586  26.069  1.00 15.69           N  
+ATOM   1075  N   LEU A 158      46.296  50.884  20.234  1.00 15.44           N  
+ATOM   1076  CA  LEU A 158      46.044  51.940  19.266  1.00 15.69           C  
+ATOM   1077  C   LEU A 158      46.227  51.278  17.909  1.00 15.14           C  
+ATOM   1078  O   LEU A 158      47.304  50.772  17.597  1.00 13.89           O  
+ATOM   1079  CB  LEU A 158      47.040  53.092  19.440  1.00 17.44           C  
+ATOM   1080  CG  LEU A 158      46.940  54.281  18.473  1.00 19.44           C  
+ATOM   1081  CD1 LEU A 158      47.449  53.888  17.094  1.00 21.37           C  
+ATOM   1082  CD2 LEU A 158      45.507  54.763  18.390  1.00 20.34           C  
+ATOM   1083  N   GLU A 159      45.169  51.277  17.106  1.00 14.02           N  
+ATOM   1084  CA  GLU A 159      45.228  50.640  15.801  1.00 13.37           C  
+ATOM   1085  C   GLU A 159      44.887  51.597  14.671  1.00 13.31           C  
+ATOM   1086  O   GLU A 159      43.908  52.336  14.740  1.00 13.33           O  
+ATOM   1087  CB  GLU A 159      44.275  49.444  15.770  1.00 13.62           C  
+ATOM   1088  CG  GLU A 159      44.208  48.724  14.433  1.00 12.38           C  
+ATOM   1089  CD  GLU A 159      43.264  47.539  14.473  1.00 13.65           C  
+ATOM   1090  OE1 GLU A 159      43.594  46.543  15.150  1.00 12.96           O  
+ATOM   1091  OE2 GLU A 159      42.191  47.608  13.835  1.00 13.40           O  
+ATOM   1092  N   PHE A 160      45.707  51.583  13.631  1.00 12.97           N  
+ATOM   1093  CA  PHE A 160      45.464  52.443  12.490  1.00 12.70           C  
+ATOM   1094  C   PHE A 160      44.545  51.741  11.512  1.00 12.66           C  
+ATOM   1095  O   PHE A 160      44.721  50.557  11.209  1.00 12.44           O  
+ATOM   1096  CB  PHE A 160      46.778  52.816  11.808  1.00 12.38           C  
+ATOM   1097  CG  PHE A 160      47.709  53.592  12.692  1.00 12.87           C  
+ATOM   1098  CD1 PHE A 160      48.750  52.954  13.361  1.00 13.11           C  
+ATOM   1099  CD2 PHE A 160      47.512  54.954  12.898  1.00 13.24           C  
+ATOM   1100  CE1 PHE A 160      49.580  53.662  14.226  1.00 13.27           C  
+ATOM   1101  CE2 PHE A 160      48.338  55.670  13.764  1.00 13.58           C  
+ATOM   1102  CZ  PHE A 160      49.370  55.022  14.427  1.00 13.04           C  
+ATOM   1103  N   VAL A 161      43.544  52.475  11.046  1.00 12.52           N  
+ATOM   1104  CA  VAL A 161      42.592  51.948  10.085  1.00 12.57           C  
+ATOM   1105  C   VAL A 161      42.804  52.722   8.788  1.00 12.64           C  
+ATOM   1106  O   VAL A 161      42.876  53.956   8.795  1.00 12.94           O  
+ATOM   1107  CB  VAL A 161      41.138  52.088  10.602  1.00 12.21           C  
+ATOM   1108  CG1 VAL A 161      40.918  51.127  11.772  1.00 12.32           C  
+ATOM   1109  CG2 VAL A 161      40.866  53.520  11.057  1.00 11.76           C  
+ATOM   1110  N   THR A 162      42.918  51.977   7.689  1.00 12.71           N  
+ATOM   1111  CA  THR A 162      43.182  52.517   6.357  1.00 12.53           C  
+ATOM   1112  C   THR A 162      44.643  52.973   6.312  1.00 12.55           C  
+ATOM   1113  O   THR A 162      45.455  52.417   5.572  1.00 13.03           O  
+ATOM   1114  CB  THR A 162      42.268  53.713   5.989  1.00 12.27           C  
+ATOM   1115  OG1 THR A 162      40.895  53.302   6.014  1.00 12.19           O  
+ATOM   1116  CG2 THR A 162      42.597  54.205   4.579  1.00 12.13           C  
+ATOM   1117  N   GLY A 163      44.978  53.978   7.112  1.00 12.23           N  
+ATOM   1118  CA  GLY A 163      46.352  54.453   7.147  1.00 12.18           C  
+ATOM   1119  C   GLY A 163      46.721  55.413   6.035  1.00 12.70           C  
+ATOM   1120  O   GLY A 163      47.896  55.565   5.707  1.00 12.54           O  
+ATOM   1121  N   GLY A 164      45.718  56.052   5.444  1.00 12.35           N  
+ATOM   1122  CA  GLY A 164      45.980  57.013   4.392  1.00 11.82           C  
+ATOM   1123  C   GLY A 164      46.273  58.378   4.991  1.00 11.35           C  
+ATOM   1124  O   GLY A 164      45.991  58.626   6.166  1.00 10.66           O  
+ATOM   1125  N   TRP A 165      46.847  59.267   4.188  1.00 10.91           N  
+ATOM   1126  CA  TRP A 165      47.160  60.611   4.659  1.00 11.06           C  
+ATOM   1127  C   TRP A 165      45.851  61.229   5.156  1.00 10.60           C  
+ATOM   1128  O   TRP A 165      45.828  61.962   6.147  1.00 10.80           O  
+ATOM   1129  CB  TRP A 165      47.744  61.439   3.510  1.00 10.61           C  
+ATOM   1130  CG  TRP A 165      48.536  62.645   3.941  1.00 11.31           C  
+ATOM   1131  CD1 TRP A 165      48.295  63.948   3.604  1.00 11.10           C  
+ATOM   1132  CD2 TRP A 165      49.722  62.654   4.749  1.00 11.26           C  
+ATOM   1133  NE1 TRP A 165      49.258  64.767   4.150  1.00 11.53           N  
+ATOM   1134  CE2 TRP A 165      50.146  64.001   4.855  1.00 11.38           C  
+ATOM   1135  CE3 TRP A 165      50.470  61.658   5.388  1.00 11.20           C  
+ATOM   1136  CZ2 TRP A 165      51.287  64.376   5.581  1.00 11.13           C  
+ATOM   1137  CZ3 TRP A 165      51.608  62.033   6.111  1.00 12.07           C  
+ATOM   1138  CH2 TRP A 165      52.001  63.381   6.197  1.00 11.73           C  
+ATOM   1139  N   VAL A 166      44.758  60.901   4.470  1.00 10.33           N  
+ATOM   1140  CA  VAL A 166      43.427  61.401   4.824  1.00 10.39           C  
+ATOM   1141  C   VAL A 166      42.396  60.295   4.592  1.00 10.34           C  
+ATOM   1142  O   VAL A 166      42.753  59.161   4.283  1.00 11.04           O  
+ATOM   1143  CB  VAL A 166      43.020  62.613   3.931  1.00 10.12           C  
+ATOM   1144  CG1 VAL A 166      44.062  63.729   4.039  1.00  9.61           C  
+ATOM   1145  CG2 VAL A 166      42.881  62.166   2.466  1.00 10.51           C  
+ATOM   1146  N   MET A 167      41.123  60.636   4.778  1.00 10.46           N  
+ATOM   1147  CA  MET A 167      39.999  59.737   4.502  1.00 10.79           C  
+ATOM   1148  C   MET A 167      39.455  60.494   3.296  1.00 10.84           C  
+ATOM   1149  O   MET A 167      38.657  61.424   3.435  1.00 11.16           O  
+ATOM   1150  CB  MET A 167      38.982  59.751   5.643  1.00 10.60           C  
+ATOM   1151  CG  MET A 167      37.732  58.925   5.362  1.00 10.61           C  
+ATOM   1152  SD  MET A 167      36.559  58.988   6.729  1.00 12.95           S  
+ATOM   1153  CE  MET A 167      37.543  58.160   8.030  1.00  9.81           C  
+ATOM   1154  N   PRO A 168      39.881  60.101   2.086  1.00 10.28           N  
+ATOM   1155  CA  PRO A 168      39.448  60.779   0.866  1.00 10.67           C  
+ATOM   1156  C   PRO A 168      38.005  60.755   0.403  1.00 10.67           C  
+ATOM   1157  O   PRO A 168      37.235  59.845   0.705  1.00  9.88           O  
+ATOM   1158  CB  PRO A 168      40.366  60.180  -0.193  1.00 10.26           C  
+ATOM   1159  CG  PRO A 168      40.433  58.744   0.244  1.00 10.47           C  
+ATOM   1160  CD  PRO A 168      40.634  58.872   1.760  1.00 10.20           C  
+ATOM   1161  N   ASP A 169      37.672  61.796  -0.351  1.00 10.52           N  
+ATOM   1162  CA  ASP A 169      36.378  61.909  -0.984  1.00 10.65           C  
+ATOM   1163  C   ASP A 169      36.460  60.738  -1.958  1.00 11.03           C  
+ATOM   1164  O   ASP A 169      37.558  60.359  -2.367  1.00 10.54           O  
+ATOM   1165  CB  ASP A 169      36.291  63.223  -1.761  1.00  9.53           C  
+ATOM   1166  CG  ASP A 169      35.172  63.223  -2.781  1.00  9.60           C  
+ATOM   1167  OD1 ASP A 169      34.080  62.707  -2.466  1.00  9.07           O  
+ATOM   1168  OD2 ASP A 169      35.380  63.753  -3.890  1.00  9.49           O  
+ATOM   1169  N   GLU A 170      35.325  60.153  -2.321  1.00 11.28           N  
+ATOM   1170  CA  GLU A 170      35.357  59.027  -3.245  1.00 11.38           C  
+ATOM   1171  C   GLU A 170      34.654  59.324  -4.563  1.00 11.01           C  
+ATOM   1172  O   GLU A 170      34.631  58.487  -5.464  1.00 11.28           O  
+ATOM   1173  CB  GLU A 170      34.758  57.782  -2.570  1.00 11.52           C  
+ATOM   1174  CG  GLU A 170      35.632  57.262  -1.424  1.00 11.42           C  
+ATOM   1175  CD  GLU A 170      35.031  56.070  -0.691  1.00 11.56           C  
+ATOM   1176  OE1 GLU A 170      34.234  55.329  -1.305  1.00 10.57           O  
+ATOM   1177  OE2 GLU A 170      35.380  55.863   0.496  1.00 11.41           O  
+ATOM   1178  N   ALA A 171      34.110  60.531  -4.685  1.00 11.08           N  
+ATOM   1179  CA  ALA A 171      33.400  60.919  -5.900  1.00 11.05           C  
+ATOM   1180  C   ALA A 171      34.239  61.695  -6.916  1.00 11.31           C  
+ATOM   1181  O   ALA A 171      34.296  61.335  -8.092  1.00 11.52           O  
+ATOM   1182  CB  ALA A 171      32.167  61.733  -5.534  1.00 11.81           C  
+ATOM   1183  N   ASN A 172      34.884  62.761  -6.452  1.00 11.31           N  
+ATOM   1184  CA  ASN A 172      35.682  63.637  -7.306  1.00 10.86           C  
+ATOM   1185  C   ASN A 172      37.143  63.225  -7.469  1.00 11.09           C  
+ATOM   1186  O   ASN A 172      37.802  63.594  -8.437  1.00 11.02           O  
+ATOM   1187  CB  ASN A 172      35.641  65.053  -6.732  1.00 10.31           C  
+ATOM   1188  CG  ASN A 172      34.229  65.593  -6.612  1.00 11.30           C  
+ATOM   1189  OD1 ASN A 172      33.570  65.858  -7.618  1.00 11.17           O  
+ATOM   1190  ND2 ASN A 172      33.758  65.757  -5.379  1.00 10.93           N  
+ATOM   1191  N   SER A 173      37.642  62.462  -6.512  1.00 10.96           N  
+ATOM   1192  CA  SER A 173      39.038  62.036  -6.520  1.00 12.32           C  
+ATOM   1193  C   SER A 173      39.433  61.112  -7.658  1.00 11.10           C  
+ATOM   1194  O   SER A 173      38.674  60.218  -8.034  1.00 10.01           O  
+ATOM   1195  CB  SER A 173      39.351  61.352  -5.198  1.00 13.01           C  
+ATOM   1196  OG  SER A 173      39.238  62.295  -4.144  1.00 22.67           O  
+ATOM   1197  N   HIS A 174      40.625  61.336  -8.209  1.00 11.04           N  
+ATOM   1198  CA  HIS A 174      41.122  60.474  -9.272  1.00 10.88           C  
+ATOM   1199  C   HIS A 174      41.790  59.294  -8.564  1.00 10.47           C  
+ATOM   1200  O   HIS A 174      42.426  59.480  -7.527  1.00  9.37           O  
+ATOM   1201  CB  HIS A 174      42.137  61.214 -10.138  1.00 11.97           C  
+ATOM   1202  CG  HIS A 174      42.382  60.554 -11.456  1.00 11.73           C  
+ATOM   1203  ND1 HIS A 174      43.067  59.363 -11.575  1.00 11.80           N  
+ATOM   1204  CD2 HIS A 174      41.967  60.878 -12.703  1.00 11.03           C  
+ATOM   1205  CE1 HIS A 174      43.059  58.980 -12.839  1.00 12.03           C  
+ATOM   1206  NE2 HIS A 174      42.397  59.881 -13.544  1.00 11.53           N  
+ATOM   1207  N   TRP A 175      41.648  58.087  -9.106  1.00  9.98           N  
+ATOM   1208  CA  TRP A 175      42.233  56.920  -8.453  1.00 10.04           C  
+ATOM   1209  C   TRP A 175      43.724  57.085  -8.219  1.00 10.08           C  
+ATOM   1210  O   TRP A 175      44.259  56.585  -7.231  1.00  9.95           O  
+ATOM   1211  CB  TRP A 175      41.964  55.631  -9.250  1.00  9.79           C  
+ATOM   1212  CG  TRP A 175      42.794  55.452 -10.499  1.00  9.87           C  
+ATOM   1213  CD1 TRP A 175      42.465  55.826 -11.771  1.00  9.70           C  
+ATOM   1214  CD2 TRP A 175      44.087  54.838 -10.582  1.00  9.81           C  
+ATOM   1215  NE1 TRP A 175      43.475  55.480 -12.645  1.00  9.50           N  
+ATOM   1216  CE2 TRP A 175      44.481  54.871 -11.940  1.00  9.87           C  
+ATOM   1217  CE3 TRP A 175      44.951  54.262  -9.638  1.00  9.77           C  
+ATOM   1218  CZ2 TRP A 175      45.706  54.348 -12.380  1.00  9.19           C  
+ATOM   1219  CZ3 TRP A 175      46.170  53.742 -10.075  1.00  9.97           C  
+ATOM   1220  CH2 TRP A 175      46.534  53.790 -11.438  1.00 10.26           C  
+ATOM   1221  N   ARG A 176      44.400  57.788  -9.122  1.00  9.90           N  
+ATOM   1222  CA  ARG A 176      45.830  58.003  -8.972  1.00  9.73           C  
+ATOM   1223  C   ARG A 176      46.145  58.757  -7.676  1.00  9.68           C  
+ATOM   1224  O   ARG A 176      47.116  58.433  -6.982  1.00 10.18           O  
+ATOM   1225  CB  ARG A 176      46.371  58.761 -10.190  1.00 10.41           C  
+ATOM   1226  CG  ARG A 176      46.433  57.891 -11.444  1.00 10.38           C  
+ATOM   1227  CD  ARG A 176      46.405  58.708 -12.722  1.00 10.68           C  
+ATOM   1228  NE  ARG A 176      47.504  59.664 -12.821  1.00 11.00           N  
+ATOM   1229  CZ  ARG A 176      47.661  60.499 -13.845  1.00 10.86           C  
+ATOM   1230  NH1 ARG A 176      46.790  60.488 -14.851  1.00 10.95           N  
+ATOM   1231  NH2 ARG A 176      48.678  61.348 -13.865  1.00 10.81           N  
+ATOM   1232  N   ASN A 177      45.326  59.750  -7.338  1.00  9.32           N  
+ATOM   1233  CA  ASN A 177      45.558  60.513  -6.112  1.00  9.19           C  
+ATOM   1234  C   ASN A 177      45.076  59.760  -4.875  1.00  9.29           C  
+ATOM   1235  O   ASN A 177      45.582  59.976  -3.769  1.00  9.08           O  
+ATOM   1236  CB  ASN A 177      44.898  61.893  -6.197  1.00  9.09           C  
+ATOM   1237  CG  ASN A 177      45.571  62.786  -7.219  1.00 10.22           C  
+ATOM   1238  OD1 ASN A 177      46.752  62.615  -7.514  1.00 10.54           O  
+ATOM   1239  ND2 ASN A 177      44.827  63.747  -7.758  1.00 11.17           N  
+ATOM   1240  N   VAL A 178      44.096  58.882  -5.055  1.00  9.46           N  
+ATOM   1241  CA  VAL A 178      43.619  58.079  -3.936  1.00  9.57           C  
+ATOM   1242  C   VAL A 178      44.797  57.175  -3.557  1.00  9.41           C  
+ATOM   1243  O   VAL A 178      45.094  56.980  -2.377  1.00  9.85           O  
+ATOM   1244  CB  VAL A 178      42.400  57.206  -4.337  1.00 10.85           C  
+ATOM   1245  CG1 VAL A 178      42.063  56.219  -3.216  1.00 10.89           C  
+ATOM   1246  CG2 VAL A 178      41.202  58.098  -4.639  1.00 11.12           C  
+ATOM   1247  N   LEU A 179      45.477  56.635  -4.569  1.00  9.20           N  
+ATOM   1248  CA  LEU A 179      46.630  55.769  -4.324  1.00  9.06           C  
+ATOM   1249  C   LEU A 179      47.785  56.572  -3.738  1.00  9.03           C  
+ATOM   1250  O   LEU A 179      48.486  56.100  -2.836  1.00  9.82           O  
+ATOM   1251  CB  LEU A 179      47.100  55.095  -5.619  1.00  9.32           C  
+ATOM   1252  CG  LEU A 179      48.403  54.281  -5.498  1.00 10.09           C  
+ATOM   1253  CD1 LEU A 179      48.240  53.160  -4.470  1.00  9.73           C  
+ATOM   1254  CD2 LEU A 179      48.764  53.707  -6.863  1.00 10.39           C  
+ATOM   1255  N   LEU A 180      47.982  57.785  -4.250  1.00  8.67           N  
+ATOM   1256  CA  LEU A 180      49.062  58.639  -3.764  1.00  8.60           C  
+ATOM   1257  C   LEU A 180      48.924  58.902  -2.262  1.00  8.58           C  
+ATOM   1258  O   LEU A 180      49.879  58.711  -1.501  1.00  9.49           O  
+ATOM   1259  CB  LEU A 180      49.068  59.974  -4.524  1.00  8.74           C  
+ATOM   1260  CG  LEU A 180      50.208  60.940  -4.177  1.00  9.14           C  
+ATOM   1261  CD1 LEU A 180      51.516  60.391  -4.745  1.00  9.34           C  
+ATOM   1262  CD2 LEU A 180      49.919  62.329  -4.741  1.00  9.43           C  
+ATOM   1263  N   GLN A 181      47.740  59.325  -1.826  1.00  8.27           N  
+ATOM   1264  CA  GLN A 181      47.547  59.620  -0.410  1.00  8.75           C  
+ATOM   1265  C   GLN A 181      47.592  58.378   0.475  1.00  8.99           C  
+ATOM   1266  O   GLN A 181      48.072  58.447   1.603  1.00  9.46           O  
+ATOM   1267  CB  GLN A 181      46.250  60.421  -0.186  1.00  8.36           C  
+ATOM   1268  CG  GLN A 181      44.932  59.684  -0.427  1.00  9.43           C  
+ATOM   1269  CD  GLN A 181      44.564  58.745   0.710  1.00  9.81           C  
+ATOM   1270  OE1 GLN A 181      44.821  59.036   1.884  1.00 10.55           O  
+ATOM   1271  NE2 GLN A 181      43.946  57.618   0.370  1.00  9.03           N  
+ATOM   1272  N   LEU A 182      47.107  57.244  -0.030  1.00  9.16           N  
+ATOM   1273  CA  LEU A 182      47.155  56.011   0.749  1.00  9.23           C  
+ATOM   1274  C   LEU A 182      48.627  55.645   0.938  1.00  9.77           C  
+ATOM   1275  O   LEU A 182      49.061  55.308   2.039  1.00  9.83           O  
+ATOM   1276  CB  LEU A 182      46.435  54.867   0.019  1.00  9.06           C  
+ATOM   1277  CG  LEU A 182      46.499  53.481   0.680  1.00  9.28           C  
+ATOM   1278  CD1 LEU A 182      45.751  53.490   2.014  1.00  8.74           C  
+ATOM   1279  CD2 LEU A 182      45.890  52.439  -0.262  1.00 10.15           C  
+ATOM   1280  N   THR A 183      49.393  55.735  -0.146  1.00 10.03           N  
+ATOM   1281  CA  THR A 183      50.814  55.409  -0.114  1.00 10.34           C  
+ATOM   1282  C   THR A 183      51.568  56.352   0.827  1.00 10.54           C  
+ATOM   1283  O   THR A 183      52.432  55.921   1.599  1.00 10.55           O  
+ATOM   1284  CB  THR A 183      51.436  55.490  -1.538  1.00 11.14           C  
+ATOM   1285  OG1 THR A 183      50.711  54.631  -2.431  1.00  9.99           O  
+ATOM   1286  CG2 THR A 183      52.902  55.057  -1.511  1.00 11.69           C  
+ATOM   1287  N   GLU A 184      51.240  57.638   0.774  1.00 10.40           N  
+ATOM   1288  CA  GLU A 184      51.914  58.613   1.626  1.00 10.88           C  
+ATOM   1289  C   GLU A 184      51.714  58.250   3.100  1.00 11.01           C  
+ATOM   1290  O   GLU A 184      52.663  58.256   3.887  1.00 10.99           O  
+ATOM   1291  CB  GLU A 184      51.371  60.018   1.345  1.00 11.56           C  
+ATOM   1292  CG  GLU A 184      52.227  61.164   1.883  1.00 12.09           C  
+ATOM   1293  CD  GLU A 184      53.622  61.218   1.269  1.00 13.16           C  
+ATOM   1294  OE1 GLU A 184      53.772  60.904   0.070  1.00 12.72           O  
+ATOM   1295  OE2 GLU A 184      54.568  61.597   1.990  1.00 13.92           O  
+ATOM   1296  N   GLY A 185      50.479  57.921   3.463  1.00 11.02           N  
+ATOM   1297  CA  GLY A 185      50.183  57.558   4.840  1.00 11.05           C  
+ATOM   1298  C   GLY A 185      50.769  56.223   5.271  1.00 11.42           C  
+ATOM   1299  O   GLY A 185      51.357  56.112   6.354  1.00 10.33           O  
+ATOM   1300  N   GLN A 186      50.623  55.202   4.433  1.00 11.05           N  
+ATOM   1301  CA  GLN A 186      51.143  53.885   4.789  1.00 11.77           C  
+ATOM   1302  C   GLN A 186      52.667  53.803   4.782  1.00 12.24           C  
+ATOM   1303  O   GLN A 186      53.256  53.044   5.552  1.00 12.03           O  
+ATOM   1304  CB  GLN A 186      50.561  52.806   3.872  1.00 11.77           C  
+ATOM   1305  CG  GLN A 186      49.047  52.630   4.000  1.00 13.37           C  
+ATOM   1306  CD  GLN A 186      48.617  51.189   3.793  1.00 14.28           C  
+ATOM   1307  OE1 GLN A 186      49.193  50.476   2.978  1.00 16.36           O  
+ATOM   1308  NE2 GLN A 186      47.593  50.757   4.526  1.00 14.09           N  
+ATOM   1309  N   THR A 187      53.313  54.573   3.915  1.00 12.35           N  
+ATOM   1310  CA  THR A 187      54.768  54.551   3.874  1.00 11.70           C  
+ATOM   1311  C   THR A 187      55.288  55.133   5.189  1.00 12.42           C  
+ATOM   1312  O   THR A 187      56.253  54.630   5.766  1.00 11.77           O  
+ATOM   1313  CB  THR A 187      55.299  55.355   2.673  1.00 12.06           C  
+ATOM   1314  OG1 THR A 187      54.840  54.744   1.459  1.00 10.71           O  
+ATOM   1315  CG2 THR A 187      56.828  55.372   2.666  1.00 11.14           C  
+ATOM   1316  N   TRP A 188      54.630  56.181   5.675  1.00 12.42           N  
+ATOM   1317  CA  TRP A 188      55.033  56.790   6.937  1.00 12.91           C  
+ATOM   1318  C   TRP A 188      54.838  55.762   8.054  1.00 12.44           C  
+ATOM   1319  O   TRP A 188      55.726  55.556   8.877  1.00 12.28           O  
+ATOM   1320  CB  TRP A 188      54.189  58.035   7.240  1.00 13.70           C  
+ATOM   1321  CG  TRP A 188      54.654  58.787   8.463  1.00 14.71           C  
+ATOM   1322  CD1 TRP A 188      55.574  59.800   8.505  1.00 15.26           C  
+ATOM   1323  CD2 TRP A 188      54.295  58.516   9.825  1.00 14.94           C  
+ATOM   1324  NE1 TRP A 188      55.815  60.170   9.810  1.00 15.10           N  
+ATOM   1325  CE2 TRP A 188      55.044  59.397  10.639  1.00 15.92           C  
+ATOM   1326  CE3 TRP A 188      53.420  57.609  10.436  1.00 15.07           C  
+ATOM   1327  CZ2 TRP A 188      54.942  59.397  12.034  1.00 15.07           C  
+ATOM   1328  CZ3 TRP A 188      53.321  57.606  11.829  1.00 16.08           C  
+ATOM   1329  CH2 TRP A 188      54.078  58.496  12.610  1.00 16.04           C  
+ATOM   1330  N   LEU A 189      53.674  55.114   8.073  1.00 12.36           N  
+ATOM   1331  CA  LEU A 189      53.378  54.112   9.096  1.00 12.63           C  
+ATOM   1332  C   LEU A 189      54.378  52.961   9.115  1.00 12.98           C  
+ATOM   1333  O   LEU A 189      54.797  52.515  10.186  1.00 13.11           O  
+ATOM   1334  CB  LEU A 189      51.967  53.541   8.905  1.00 12.03           C  
+ATOM   1335  CG  LEU A 189      50.799  54.434   9.328  1.00 11.18           C  
+ATOM   1336  CD1 LEU A 189      49.478  53.722   9.017  1.00 10.90           C  
+ATOM   1337  CD2 LEU A 189      50.908  54.744  10.823  1.00 11.01           C  
+ATOM   1338  N   LYS A 190      54.755  52.469   7.940  1.00 13.15           N  
+ATOM   1339  CA  LYS A 190      55.706  51.364   7.884  1.00 15.49           C  
+ATOM   1340  C   LYS A 190      57.048  51.789   8.467  1.00 16.12           C  
+ATOM   1341  O   LYS A 190      57.647  51.067   9.263  1.00 15.59           O  
+ATOM   1342  CB  LYS A 190      55.916  50.885   6.445  1.00 16.77           C  
+ATOM   1343  CG  LYS A 190      56.750  49.602   6.348  1.00 19.16           C  
+ATOM   1344  CD  LYS A 190      56.965  49.176   4.903  1.00 21.67           C  
+ATOM   1345  CE  LYS A 190      57.526  47.759   4.814  1.00 24.05           C  
+ATOM   1346  NZ  LYS A 190      58.694  47.576   5.721  1.00 26.01           N  
+ATOM   1347  N   GLN A 191      57.512  52.967   8.070  1.00 16.47           N  
+ATOM   1348  CA  GLN A 191      58.791  53.472   8.541  1.00 18.20           C  
+ATOM   1349  C   GLN A 191      58.846  53.798  10.033  1.00 18.19           C  
+ATOM   1350  O   GLN A 191      59.809  53.434  10.710  1.00 18.72           O  
+ATOM   1351  CB  GLN A 191      59.194  54.717   7.741  1.00 19.41           C  
+ATOM   1352  CG  GLN A 191      60.525  55.315   8.185  1.00 23.36           C  
+ATOM   1353  CD  GLN A 191      60.940  56.530   7.371  1.00 24.84           C  
+ATOM   1354  OE1 GLN A 191      61.983  57.134   7.634  1.00 27.37           O  
+ATOM   1355  NE2 GLN A 191      60.129  56.895   6.381  1.00 25.62           N  
+ATOM   1356  N   PHE A 192      57.823  54.470  10.556  1.00 17.55           N  
+ATOM   1357  CA  PHE A 192      57.838  54.852  11.966  1.00 17.32           C  
+ATOM   1358  C   PHE A 192      57.041  54.008  12.966  1.00 18.08           C  
+ATOM   1359  O   PHE A 192      57.392  53.971  14.147  1.00 18.30           O  
+ATOM   1360  CB  PHE A 192      57.418  56.319  12.108  1.00 16.53           C  
+ATOM   1361  CG  PHE A 192      58.326  57.278  11.397  1.00 16.66           C  
+ATOM   1362  CD1 PHE A 192      58.029  57.716  10.109  1.00 15.84           C  
+ATOM   1363  CD2 PHE A 192      59.493  57.727  12.006  1.00 16.59           C  
+ATOM   1364  CE1 PHE A 192      58.878  58.588   9.438  1.00 16.74           C  
+ATOM   1365  CE2 PHE A 192      60.355  58.603  11.342  1.00 17.54           C  
+ATOM   1366  CZ  PHE A 192      60.046  59.034  10.056  1.00 17.19           C  
+ATOM   1367  N   MET A 193      55.983  53.342  12.514  1.00 17.73           N  
+ATOM   1368  CA  MET A 193      55.163  52.520  13.413  1.00 19.14           C  
+ATOM   1369  C   MET A 193      55.332  51.025  13.148  1.00 19.53           C  
+ATOM   1370  O   MET A 193      54.858  50.189  13.924  1.00 18.11           O  
+ATOM   1371  CB  MET A 193      53.678  52.880  13.275  1.00 20.34           C  
+ATOM   1372  CG  MET A 193      53.268  54.222  13.862  1.00 21.40           C  
+ATOM   1373  SD  MET A 193      53.643  54.391  15.630  1.00 25.49           S  
+ATOM   1374  CE  MET A 193      54.971  55.537  15.481  1.00 23.36           C  
+ATOM   1375  N   ASN A 194      55.996  50.699  12.044  1.00 20.19           N  
+ATOM   1376  CA  ASN A 194      56.234  49.314  11.656  1.00 22.50           C  
+ATOM   1377  C   ASN A 194      54.931  48.522  11.529  1.00 20.91           C  
+ATOM   1378  O   ASN A 194      54.839  47.376  11.969  1.00 19.47           O  
+ATOM   1379  CB  ASN A 194      57.166  48.641  12.672  1.00 28.58           C  
+ATOM   1380  CG  ASN A 194      57.623  47.263  12.226  1.00 35.23           C  
+ATOM   1381  OD1 ASN A 194      57.755  47.001  11.029  1.00 35.45           O  
+ATOM   1382  ND2 ASN A 194      57.879  46.390  13.197  1.00 42.54           N  
+ATOM   1383  N   VAL A 195      53.919  49.143  10.933  1.00 18.77           N  
+ATOM   1384  CA  VAL A 195      52.634  48.480  10.739  1.00 17.69           C  
+ATOM   1385  C   VAL A 195      52.006  48.928   9.424  1.00 16.28           C  
+ATOM   1386  O   VAL A 195      52.233  50.050   8.971  1.00 15.37           O  
+ATOM   1387  CB  VAL A 195      51.627  48.792  11.885  1.00 17.63           C  
+ATOM   1388  CG1 VAL A 195      52.177  48.308  13.225  1.00 18.95           C  
+ATOM   1389  CG2 VAL A 195      51.329  50.284  11.932  1.00 17.73           C  
+ATOM   1390  N   THR A 196      51.231  48.034   8.819  1.00 14.92           N  
+ATOM   1391  CA  THR A 196      50.531  48.307   7.566  1.00 14.60           C  
+ATOM   1392  C   THR A 196      49.098  47.815   7.737  1.00 14.09           C  
+ATOM   1393  O   THR A 196      48.851  46.610   7.778  1.00 13.92           O  
+ATOM   1394  CB  THR A 196      51.164  47.549   6.371  1.00 14.25           C  
+ATOM   1395  OG1 THR A 196      52.521  47.974   6.189  1.00 14.63           O  
+ATOM   1396  CG2 THR A 196      50.380  47.822   5.096  1.00 15.08           C  
diff --git a/modules/bindings/src/tmalign/TMalign.cpp b/modules/bindings/src/tmalign/TMalign.cpp
new file mode 100644
index 000000000..f62fc4584
--- /dev/null
+++ b/modules/bindings/src/tmalign/TMalign.cpp
@@ -0,0 +1,569 @@
+/* command line argument parsing and document of TMalign main program */
+
+#include "TMalign.h"
+
+using namespace std;
+
+void print_version()
+{
+    cout << 
+"\n"
+" *********************************************************************\n"
+" * TM-align (Version 20190209): protein and RNA structure alignment  *\n"
+" * References: Y Zhang, J Skolnick. Nucl Acids Res 33, 2302-9 (2005) *\n"
+" *             S Gong, C Zhang, Y Zhang. Bioinformatics (2019)       *\n"
+" * Please email comments and suggestions to yangzhanglab@umich.edu   *\n"
+" *********************************************************************"
+    << endl;
+}
+
+void print_extra_help()
+{
+    cout <<
+"Additional options:\n"
+"    -fast    Fast but slightly inaccurate alignment\n"
+"\n"
+"    -dir     Perform all-against-all alignment among the list of PDB\n"
+"             chains listed by 'chain_list' under 'chain_folder'. Note\n"
+"             that the slash is necessary.\n"
+"             $ TMalign -dir chain_folder/ chain_list\n"
+"\n"
+"    -dir1    Use chain2 to search a list of PDB chains listed by 'chain1_list'\n"
+"             under 'chain1_folder'. Note that the slash is necessary.\n"
+"             $ TMalign -dir1 chain1_folder/ chain1_list chain2\n"
+"\n"
+"    -dir2    Use chain1 to search a list of PDB chains listed by 'chain2_list'\n"
+"             under 'chain2_folder'\n"
+"             $ TMalign chain1 -dir2 chain2_folder/ chain2_list\n"
+"\n"
+"    -suffix  (Only when -dir1 and/or -dir2 are set, default is empty)\n"
+"             add file name suffix to files listed by chain1_list or chain2_list\n"
+"\n"
+"    -atom    4-character atom name used to represent a residue.\n"
+"             Default is \" C3'\" for RNA/DNA and \" CA \" for proteins\n"
+"             (note the spaces before and after CA).\n"
+"\n"
+"    -mol     Molecule type: RNA or protein\n"
+"             Default is detect molecule type automatically\n"
+"\n"
+"    -ter     Strings to mark the end of a chain\n"
+"             3: (default) TER, ENDMDL, END or different chain ID\n"
+"             2: ENDMDL, END, or different chain ID\n"
+"             1: ENDMDL or END\n"
+"             0: (default in the first C++ TMalign) end of file\n"
+"\n"
+"    -split   Whether to split PDB file into multiple chains\n"
+"             0: (default) treat the whole structure as one single chain\n"
+"             1: treat each MODEL as a separate chain (-ter should be 0)\n"
+"             2: treat each chain as a seperate chain (-ter should be <=1)\n"
+"\n"
+"    -outfmt  Output format\n"
+"             0: (default) full output\n"
+"             1: fasta format compact output\n"
+"             2: tabular format very compact output\n"
+"            -1: full output, but without version or citation information\n"
+"\n"
+"    -byresi  Whether to assume residue index correspondence between the\n" 
+"             two structures.\n"
+"             0: (default) sequence independent alignment\n"
+"             1: (same as TMscore program) sequence-dependent superposition,\n"
+"                i.e. align by residue index\n"
+"             2: (same as TMscore -c, should be used with -ter <=1)\n"
+"                align by residue index and chain ID\n"
+"             3: (similar to TMscore -c, should be used with -ter <=1)\n"
+"                align by residue index and order of chain\n"
+"\n"
+"    -TMcut   -1: (default) do not consider TMcut\n"
+"             Values in [0.5,1): Do not proceed with TM-align for this\n"
+"                 structure pair if TM-score is unlikely to reach TMcut.\n"
+"                 TMcut is normalized is set by -a option:\n"
+"                 -2: normalized by longer structure length\n"
+"                 -1: normalized by shorter structure length\n"
+"                  0: (default, same as F) normalized by second structure\n"
+"                  1: same as T, normalized by average structure length\n"
+"\n"
+"    -infmt1  Input format for chain1\n"
+"    -infmt2  Input format for chain2\n"
+"            -1: (default) automatically detect PDB or PDBx/mmCIF format\n"
+"             0: PDB format\n"
+"             1: SPICKER format\n"
+"             2: xyz format\n"
+"             3: PDBx/mmCIF format\n"
+    <<endl;
+}
+
+void print_help(bool h_opt=false)
+{
+    print_version();
+    cout <<
+"\n"
+"Usage: TMalign PDB1.pdb PDB2.pdb [Options]\n"
+"\n"
+"Options:\n"
+"    -u    TM-score normalized by user assigned length (the same as -L)\n"
+"          warning: it should be >= minimum length of the two structures\n"
+"          otherwise, TM-score may be >1\n"
+"\n"
+"    -a    TM-score normalized by the average length of two structures\n"
+"          T or F, (default F)\n"
+"\n"
+"    -i    Start with an alignment specified in fasta file 'align.txt'\n"
+"\n"
+"    -I    Stick to the alignment 'align.txt'\n"
+"\n"
+"    -m    Output TM-align rotation matrix\n"
+"\n"
+"    -d    TM-score scaled by an assigned d0, e.g. 5 Angstroms\n"
+"\n"
+"    -o    Output the superposition of PDB1.pdb to TM_sup.pdb\n"
+"          $ TMalign PDB1.pdb PDB2.pdb -o TM_sup.pdb\n"
+"          To view superposed full-atom structures:\n"
+"          $ pymol TM_sup.pdb PDB2.pdb\n"
+"\n"
+"    -v    Print the version of TM-align\n"
+"\n"
+"    -h    Print the full help message, including options not available\n"
+"          in standard TM-align program\n"
+"\n"
+"    (Options -u, -a, -d, -o won't change the final structure alignment)\n\n"
+"Example usages:\n"
+"    TMalign PDB1.pdb PDB2.pdb\n"
+"    TMalign PDB1.pdb PDB2.pdb -u 100 -d 5.0\n"
+"    TMalign PDB1.pdb PDB2.pdb -a T -o PDB1.sup\n"
+"    TMalign PDB1.pdb PDB2.pdb -i align.txt\n"
+"    TMalign PDB1.pdb PDB2.pdb -m matrix.txt\n"
+    <<endl;
+
+    if (h_opt) print_extra_help();
+
+    exit(EXIT_SUCCESS);
+}
+
+int main(int argc, char *argv[])
+{
+    if (argc < 2) print_help();
+
+
+    clock_t t1, t2;
+    t1 = clock();
+
+    /**********************/
+    /*    get argument    */
+    /**********************/
+    string xname       = "";
+    string yname       = "";
+    string fname_super = ""; // file name for superposed structure
+    string fname_lign  = ""; // file name for user alignment
+    string fname_matrix= ""; // file name for output matrix
+    vector<string> sequence; // get value from alignment file
+    double Lnorm_ass, d0_scale;
+
+    bool h_opt = false; // print full help message
+    bool v_opt = false; // print version
+    bool m_opt = false; // flag for -m, output rotation matrix
+    bool i_opt = false; // flag for -i, with user given initial alignment
+    bool I_opt = false; // flag for -I, stick to user given alignment
+    bool o_opt = false; // flag for -o, output superposed structure
+    int  a_opt = 0;     // flag for -a, do not normalized by average length
+    bool u_opt = false; // flag for -u, normalized by user specified length
+    bool d_opt = false; // flag for -d, user specified d0
+
+    double TMcut     =-1;
+    int    infmt1_opt=-1;    // PDB or PDBx/mmCIF format for chain_1
+    int    infmt2_opt=-1;    // PDB or PDBx/mmCIF format for chain_2
+    int    ter_opt   =3;     // TER, END, or different chainID
+    int    split_opt =0;     // do not split chain
+    int    outfmt_opt=0;     // set -outfmt to full output
+    bool   fast_opt  =false; // flags for -fast, fTM-align algorithm
+    string atom_opt  ="auto";// use C alpha atom for protein and C3' for RNA
+    string mol_opt   ="auto";// auto-detect the molecule type as protein/RNA
+    string suffix_opt="";    // set -suffix to empty
+    string dir_opt   ="";    // set -dir to empty
+    string dir1_opt  ="";    // set -dir1 to empty
+    string dir2_opt  ="";    // set -dir2 to empty
+    int    byresi_opt=0;     // set -byresi to 0
+    vector<string> chain1_list; // only when -dir1 is set
+    vector<string> chain2_list; // only when -dir2 is set
+
+    for(int i = 1; i < argc; i++)
+    {
+        if ( !strcmp(argv[i],"-o") && i < (argc-1) )
+        {
+            fname_super = argv[i + 1];     o_opt = true; i++;
+        }
+        else if ( (!strcmp(argv[i],"-u") || 
+                   !strcmp(argv[i],"-L")) && i < (argc-1) )
+        {
+            Lnorm_ass = atof(argv[i + 1]); u_opt = true; i++;
+        }
+        else if ( !strcmp(argv[i],"-a") && i < (argc-1) )
+        {
+            if (!strcmp(argv[i + 1], "T"))      a_opt=true;
+            else if (!strcmp(argv[i + 1], "F")) a_opt=false;
+            else 
+            {
+                a_opt=atoi(argv[i + 1]);
+                if (a_opt!=-2 && a_opt!=-1 && a_opt!=1)
+                    PrintErrorAndQuit("-a must be -2, -1, 1, T or F");
+            }
+            i++;
+        }
+        else if ( !strcmp(argv[i],"-d") && i < (argc-1) )
+        {
+            d0_scale = atof(argv[i + 1]); d_opt = true; i++;
+        }
+        else if ( !strcmp(argv[i],"-v") )
+        {
+            v_opt = true;
+        }
+        else if ( !strcmp(argv[i],"-h") )
+        {
+            h_opt = true;
+        }
+        else if ( !strcmp(argv[i],"-i") && i < (argc-1) )
+        {
+            fname_lign = argv[i + 1];      i_opt = true; i++;
+        }
+        else if (!strcmp(argv[i], "-m") && i < (argc-1) )
+        {
+            fname_matrix = argv[i + 1];    m_opt = true; i++;
+        }// get filename for rotation matrix
+        else if (!strcmp(argv[i], "-I") && i < (argc-1) )
+        {
+            fname_lign = argv[i + 1];      I_opt = true; i++;
+        }
+        else if (!strcmp(argv[i], "-fast"))
+        {
+            fast_opt = true;
+        }
+        else if ( !strcmp(argv[i],"-infmt1") && i < (argc-1) )
+        {
+            infmt1_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-infmt2") && i < (argc-1) )
+        {
+            infmt2_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-ter") && i < (argc-1) )
+        {
+            ter_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-split") && i < (argc-1) )
+        {
+            split_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-atom") && i < (argc-1) )
+        {
+            atom_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-mol") && i < (argc-1) )
+        {
+            mol_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir") && i < (argc-1) )
+        {
+            dir_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir1") && i < (argc-1) )
+        {
+            dir1_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir2") && i < (argc-1) )
+        {
+            dir2_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-suffix") && i < (argc-1) )
+        {
+            suffix_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-outfmt") && i < (argc-1) )
+        {
+            outfmt_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-TMcut") && i < (argc-1) )
+        {
+            TMcut=atof(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-byresi") && i < (argc-1) )
+        {
+            byresi_opt=atoi(argv[i + 1]); i++;
+        }
+        else if (xname.size() == 0) xname=argv[i];
+        else if (yname.size() == 0) yname=argv[i];
+        else PrintErrorAndQuit(string("ERROR! Undefined option ")+argv[i]);
+    }
+
+    if(xname.size()==0 || (yname.size()==0 && dir_opt.size()==0) || 
+                          (yname.size()    && dir_opt.size()))
+    {
+        if (h_opt) print_help(h_opt);
+        if (v_opt)
+        {
+            print_version();
+            exit(EXIT_FAILURE);
+        }
+        if (xname.size()==0)
+            PrintErrorAndQuit("Please provide input structures");
+        else if (yname.size()==0 && dir_opt.size()==0)
+            PrintErrorAndQuit("Please provide structure B");
+        else if (yname.size() && dir_opt.size())
+            PrintErrorAndQuit("Please provide only one file name if -dir is set");
+    }
+
+    if (suffix_opt.size() && dir_opt.size()+dir1_opt.size()+dir2_opt.size()==0)
+        PrintErrorAndQuit("-suffix is only valid if -dir, -dir1 or -dir2 is set");
+    if ((dir_opt.size() || dir1_opt.size() || dir2_opt.size()))
+    {
+        if (m_opt || o_opt)
+            PrintErrorAndQuit("-m or -o cannot be set with -dir, -dir1 or -dir2");
+        else if (dir_opt.size() && (dir1_opt.size() || dir2_opt.size()))
+            PrintErrorAndQuit("-dir cannot be set with -dir1 or -dir2");
+    }
+    if (atom_opt.size()!=4)
+        PrintErrorAndQuit("ERROR! atom name must have 4 characters, including space.");
+    if (mol_opt!="auto" && mol_opt!="protein" && mol_opt!="RNA")
+        PrintErrorAndQuit("ERROR! molecule type must be either RNA or protein.");
+    else if (mol_opt=="protein" && atom_opt=="auto")
+        atom_opt=" CA ";
+    else if (mol_opt=="RNA" && atom_opt=="auto")
+        atom_opt=" C3'";
+
+    if (i_opt && I_opt)
+        PrintErrorAndQuit("ERROR! -I and -i cannot be used together");
+    if (u_opt && Lnorm_ass<=0)
+        PrintErrorAndQuit("Wrong value for option -u!  It should be >0");
+    if (d_opt && d0_scale<=0)
+        PrintErrorAndQuit("Wrong value for option -d!  It should be >0");
+    if (outfmt_opt>=2 && (a_opt || u_opt || d_opt))
+        PrintErrorAndQuit("-outfmt 2 cannot be used with -a, -u, -L, -d");
+    if (byresi_opt!=0)
+    {
+        if (i_opt || I_opt)
+            PrintErrorAndQuit("-byresi >=1 cannot be used with -i or -I");
+        if (byresi_opt<0 || byresi_opt>3)
+            PrintErrorAndQuit("-byresi can only be 0, 1, 2 or 3");
+        if (byresi_opt>=2 && ter_opt>=2)
+            PrintErrorAndQuit("-byresi >=2 should be used with -ter <=1");
+    }
+    if (split_opt==1 && ter_opt!=0)
+        PrintErrorAndQuit("-split 1 should be used with -ter 0");
+    else if (split_opt==2 && ter_opt!=0 && ter_opt!=1)
+        PrintErrorAndQuit("-split 2 should be used with -ter 0 or 1");
+    if (split_opt<0 || split_opt>2)
+        PrintErrorAndQuit("-split can only be 0, 1 or 2");
+
+    /* read initial alignment file from 'align.txt' */
+    if (i_opt || I_opt) read_user_alignment(sequence, fname_lign, I_opt);
+
+    if (byresi_opt) I_opt=true;
+
+    if (m_opt && fname_matrix == "") // Output rotation matrix: matrix.txt
+        PrintErrorAndQuit("ERROR! Please provide a file name for option -m!");
+
+    /* parse file list */
+    if (dir1_opt.size()+dir_opt.size()==0) chain1_list.push_back(xname);
+    else file2chainlist(chain1_list, xname, dir_opt+dir1_opt, suffix_opt);
+
+    if (dir_opt.size())
+        for (int i=0;i<chain1_list.size();i++)
+            chain2_list.push_back(chain1_list[i]);
+    else if (dir2_opt.size()==0) chain2_list.push_back(yname);
+    else file2chainlist(chain2_list, yname, dir2_opt, suffix_opt);
+
+    if (outfmt_opt==2)
+        cout<<"#PDBchain1\tPDBchain2\tTM1\tTM2\t"
+            <<"RMSD\tID1\tID2\tIDali\tL1\tL2\tLali"<<endl;
+
+    /* declare previously global variables */
+    vector<vector<string> >PDB_lines1; // text of chain1
+    vector<vector<string> >PDB_lines2; // text of chain2
+    vector<int> mol_vec1;              // molecule type of chain1, RNA if >0
+    vector<int> mol_vec2;              // molecule type of chain2, RNA if >0
+    vector<string> chainID_list1;      // list of chainID1
+    vector<string> chainID_list2;      // list of chainID2
+    int    i,j;                // file index
+    int    chain_i,chain_j;    // chain index
+    int    xlen, ylen;         // chain length
+    int    xchainnum,ychainnum;// number of chains in a PDB file
+    char   *seqx, *seqy;       // for the protein sequence 
+    int    *secx, *secy;       // for the secondary structure 
+    double **xa, **ya;         // for input vectors xa[0...xlen-1][0..2] and
+                               // ya[0...ylen-1][0..2], in general,
+                               // ya is regarded as native structure 
+                               // --> superpose xa onto ya
+    vector<string> resi_vec1;  // residue index for chain1
+    vector<string> resi_vec2;  // residue index for chain2
+
+    /* loop over file names */
+    for (i=0;i<chain1_list.size();i++)
+    {
+        /* parse chain 1 */
+        xname=chain1_list[i];
+        xchainnum=get_PDB_lines(xname, PDB_lines1, chainID_list1,
+            mol_vec1, ter_opt, infmt1_opt, atom_opt, split_opt);
+        if (!xchainnum)
+        {
+            cerr<<"Warning! Cannot parse file: "<<xname
+                <<". Chain number 0."<<endl;
+            continue;
+        }
+        for (chain_i=0;chain_i<xchainnum;chain_i++)
+        {
+            xlen=PDB_lines1[chain_i].size();
+            if (mol_opt=="RNA") mol_vec1[chain_i]=1;
+            else if (mol_opt=="protein") mol_vec1[chain_i]=-1;
+            if (!xlen)
+            {
+                cerr<<"Warning! Cannot parse file: "<<xname
+                    <<". Chain length 0."<<endl;
+                continue;
+            }
+            else if (xlen<=5)
+            {
+                cerr<<"Sequence is too short <=5!: "<<xname<<endl;
+                continue;
+            }
+            NewArray(&xa, xlen, 3);
+            seqx = new char[xlen + 1];
+            secx = new int[xlen];
+            xlen = read_PDB(PDB_lines1[chain_i], xa, seqx, 
+                resi_vec1, byresi_opt);
+            if (mol_vec1[chain_i]>0) make_sec(seqx,xa, xlen, secx,atom_opt);
+            else make_sec(xa, xlen, secx); // secondary structure assignment
+
+            for (j=(dir_opt.size()>0)*(i+1);j<chain2_list.size();j++)
+            {
+                /* parse chain 2 */
+                if (PDB_lines2.size()==0)
+                {
+                    yname=chain2_list[j];
+                    ychainnum=get_PDB_lines(yname, PDB_lines2, chainID_list2,
+                        mol_vec2, ter_opt, infmt2_opt, atom_opt, split_opt);
+                    if (!ychainnum)
+                    {
+                        cerr<<"Warning! Cannot parse file: "<<yname
+                            <<". Chain number 0."<<endl;
+                        continue;
+                    }
+                }
+                for (chain_j=0;chain_j<ychainnum;chain_j++)
+                {
+                    ylen=PDB_lines2[chain_j].size();
+                    if (mol_opt=="RNA") mol_vec2[chain_j]=1;
+                    else if (mol_opt=="protein") mol_vec2[chain_j]=-1;
+                    if (!ylen)
+                    {
+                        cerr<<"Warning! Cannot parse file: "<<yname
+                            <<". Chain length 0."<<endl;
+                        continue;
+                    }
+                    else if (ylen<=5)
+                    {
+                        cerr<<"Sequence is too short <=5!: "<<yname<<endl;
+                        continue;
+                    }
+                    NewArray(&ya, ylen, 3);
+                    seqy = new char[ylen + 1];
+                    secy = new int[ylen];
+                    ylen = read_PDB(PDB_lines2[chain_j], ya, seqy,
+                        resi_vec2, byresi_opt);
+                    if (mol_vec2[chain_j]>0)
+                         make_sec(seqy, ya, ylen, secy, atom_opt);
+                    else make_sec(ya, ylen, secy);
+
+                    if (byresi_opt) extract_aln_from_resi(sequence,
+                        seqx,seqy,resi_vec1,resi_vec2,byresi_opt);
+
+                    /* declare variable specific to this pair of TMalign */
+                    double t0[3], u0[3][3];
+                    double TM1, TM2;
+                    double TM3, TM4, TM5;     // for a_opt, u_opt, d_opt
+                    double d0_0, TM_0;
+                    double d0A, d0B, d0u, d0a;
+                    double d0_out=5.0;
+                    string seqM, seqxA, seqyA;// for output alignment
+                    double rmsd0 = 0.0;
+                    int L_ali;                // Aligned length in standard_TMscore
+                    double Liden=0;
+                    double TM_ali, rmsd_ali;  // TMscore and rmsd in standard_TMscore
+                    int n_ali=0;
+                    int n_ali8=0;
+
+                    /* entry function for structure alignment */
+                    TMalign_main(
+                        xa, ya, seqx, seqy, secx, secy,
+                        t0, u0, TM1, TM2, TM3, TM4, TM5,
+                        d0_0, TM_0, d0A, d0B, d0u, d0a, d0_out,
+                        seqM, seqxA, seqyA,
+                        rmsd0, L_ali, Liden, TM_ali, rmsd_ali, n_ali, n_ali8,
+                        xlen, ylen, sequence, Lnorm_ass, d0_scale,
+                        i_opt, I_opt, a_opt, u_opt, d_opt, fast_opt,
+                        mol_vec1[chain_i]+mol_vec2[chain_j],TMcut);
+
+                    /* print result */
+                    if (outfmt_opt==0) print_version();
+                    output_results(
+                        xname.substr(dir1_opt.size()),
+                        yname.substr(dir2_opt.size()),
+                        chainID_list1[chain_i].c_str(),
+                        chainID_list2[chain_j].c_str(),
+                        xlen, ylen, t0, u0, TM1, TM2, 
+                        TM3, TM4, TM5, rmsd0, d0_out,
+                        seqM.c_str(), seqxA.c_str(), seqyA.c_str(), Liden,
+                        n_ali8, n_ali, L_ali, TM_ali, rmsd_ali,
+                        TM_0, d0_0, d0A, d0B,
+                        Lnorm_ass, d0_scale, d0a, d0u, 
+                        (m_opt?fname_matrix+chainID_list1[chain_i]:"").c_str(),
+                        outfmt_opt, ter_opt, 
+                        (o_opt?fname_super+chainID_list1[chain_i]:"").c_str(),
+                        i_opt, I_opt, a_opt, u_opt, d_opt);
+
+                    /* Done! Free memory */
+                    seqM.clear();
+                    seqxA.clear();
+                    seqyA.clear();
+                    DeleteArray(&ya, ylen);
+                    delete [] seqy;
+                    delete [] secy;
+                    resi_vec2.clear();
+                } // chain_j
+                if (chain2_list.size()>1)
+                {
+                    yname.clear();
+                    for (chain_j=0;chain_j<ychainnum;chain_j++)
+                        PDB_lines2[chain_j].clear();
+                    PDB_lines2.clear();
+                    chainID_list2.clear();
+                    mol_vec2.clear();
+                }
+            } // j
+            PDB_lines1[chain_i].clear();
+            DeleteArray(&xa, xlen);
+            delete [] seqx;
+            delete [] secx;
+            resi_vec1.clear();
+        } // chain_i
+        xname.clear();
+        PDB_lines1.clear();
+        chainID_list1.clear();
+        mol_vec1.clear();
+    } // i
+    if (chain2_list.size()==1)
+    {
+        yname.clear();
+        for (chain_j=0;chain_j<ychainnum;chain_j++)
+            PDB_lines2[chain_j].clear();
+        PDB_lines2.clear();
+        resi_vec2.clear();
+        chainID_list2.clear();
+        mol_vec2.clear();
+    }
+    chain1_list.clear();
+    chain2_list.clear();
+    sequence.clear();
+
+    t2 = clock();
+    float diff = ((float)t2 - (float)t1)/CLOCKS_PER_SEC;
+    printf("Total CPU time is %5.2f seconds\n", diff);
+    return 0;
+}
diff --git a/modules/bindings/src/tmalign/TMalign.h b/modules/bindings/src/tmalign/TMalign.h
new file mode 100644
index 000000000..79abc61af
--- /dev/null
+++ b/modules/bindings/src/tmalign/TMalign.h
@@ -0,0 +1,2439 @@
+/* Functions for the core TMalign algorithm, including the entry function
+ * TMalign_main */
+
+#include "param_set.h"
+#include "NW.h"
+#include "Kabsch.h"
+
+//     1, collect those residues with dis<d;
+//     2, calculate TMscore
+int score_fun8( double **xa, double **ya, int n_ali, double d, int i_ali[],
+    double *score1, int score_sum_method, const double Lnorm, 
+    const double score_d8, const double d0)
+{
+    double score_sum=0, di;
+    double d_tmp=d*d;
+    double d02=d0*d0;
+    double score_d8_cut = score_d8*score_d8;
+    
+    int i, n_cut, inc=0;
+
+    while(1)
+    {
+        n_cut=0;
+        score_sum=0;
+        for(i=0; i<n_ali; i++)
+        {
+            di = dist(xa[i], ya[i]);
+            if(di<d_tmp)
+            {
+                i_ali[n_cut]=i;
+                n_cut++;
+            }
+            if(score_sum_method==8)
+            {                
+                if(di<=score_d8_cut) score_sum += 1/(1+di/d02);
+            }
+            else score_sum += 1/(1+di/d02);
+        }
+        //there are not enough feasible pairs, reliefe the threshold         
+        if(n_cut<3 && n_ali>3)
+        {
+            inc++;
+            double dinc=(d+inc*0.5);
+            d_tmp = dinc * dinc;
+        }
+        else break;
+    }  
+
+    *score1=score_sum/Lnorm;
+    return n_cut;
+}
+
+int score_fun8_standard(double **xa, double **ya, int n_ali, double d,
+    int i_ali[], double *score1, int score_sum_method,
+    double score_d8, double d0)
+{
+    double score_sum = 0, di;
+    double d_tmp = d*d;
+    double d02 = d0*d0;
+    double score_d8_cut = score_d8*score_d8;
+
+    int i, n_cut, inc = 0;
+    while (1)
+    {
+        n_cut = 0;
+        score_sum = 0;
+        for (i = 0; i<n_ali; i++)
+        {
+            di = dist(xa[i], ya[i]);
+            if (di<d_tmp)
+            {
+                i_ali[n_cut] = i;
+                n_cut++;
+            }
+            if (score_sum_method == 8)
+            {
+                if (di <= score_d8_cut) score_sum += 1 / (1 + di / d02);
+            }
+            else
+            {
+                score_sum += 1 / (1 + di / d02);
+            }
+        }
+        //there are not enough feasible pairs, reliefe the threshold         
+        if (n_cut<3 && n_ali>3)
+        {
+            inc++;
+            double dinc = (d + inc*0.5);
+            d_tmp = dinc * dinc;
+        }
+        else break;
+    }
+
+    *score1 = score_sum / n_ali;
+    return n_cut;
+}
+
+double TMscore8_search(double **r1, double **r2, double **xtm, double **ytm,
+    double **xt, int Lali, double t0[3], double u0[3][3], int simplify_step,
+    int score_sum_method, double *Rcomm, double local_d0_search, double Lnorm,
+    double score_d8, double d0)
+{
+    int i, m;
+    double score_max, score, rmsd;    
+    const int kmax=Lali;    
+    int k_ali[kmax], ka, k;
+    double t[3];
+    double u[3][3];
+    double d;
+    
+
+    //iterative parameters
+    int n_it=20;            //maximum number of iterations
+    int n_init_max=6; //maximum number of different fragment length 
+    int L_ini[n_init_max];  //fragment lengths, Lali, Lali/2, Lali/4 ... 4   
+    int L_ini_min=4;
+    if(Lali<L_ini_min) L_ini_min=Lali;   
+
+    int n_init=0, i_init;      
+    for(i=0; i<n_init_max-1; i++)
+    {
+        n_init++;
+        L_ini[i]=(int) (Lali/pow(2.0, (double) i));
+        if(L_ini[i]<=L_ini_min)
+        {
+            L_ini[i]=L_ini_min;
+            break;
+        }
+    }
+    if(i==n_init_max-1)
+    {
+        n_init++;
+        L_ini[i]=L_ini_min;
+    }
+    
+    score_max=-1;
+    //find the maximum score starting from local structures superposition
+    int i_ali[kmax], n_cut;
+    int L_frag; //fragment length
+    int iL_max; //maximum starting postion for the fragment
+    
+    for(i_init=0; i_init<n_init; i_init++)
+    {
+        L_frag=L_ini[i_init];
+        iL_max=Lali-L_frag;
+      
+        i=0;   
+        while(1)
+        {
+            //extract the fragment starting from position i 
+            ka=0;
+            for(k=0; k<L_frag; k++)
+            {
+                int kk=k+i;
+                r1[k][0]=xtm[kk][0];  
+                r1[k][1]=xtm[kk][1]; 
+                r1[k][2]=xtm[kk][2];   
+                
+                r2[k][0]=ytm[kk][0];  
+                r2[k][1]=ytm[kk][1]; 
+                r2[k][2]=ytm[kk][2];
+                
+                k_ali[ka]=kk;
+                ka++;
+            }
+            
+            //extract rotation matrix based on the fragment
+            Kabsch(r1, r2, L_frag, 1, &rmsd, t, u);
+            if (simplify_step != 1)
+                *Rcomm = 0;
+            do_rotation(xtm, xt, Lali, t, u);
+            
+            //get subsegment of this fragment
+            d = local_d0_search - 1;
+            n_cut=score_fun8(xt, ytm, Lali, d, i_ali, &score, 
+                score_sum_method, Lnorm, score_d8, d0);
+            if(score>score_max)
+            {
+                score_max=score;
+                
+                //save the rotation matrix
+                for(k=0; k<3; k++)
+                {
+                    t0[k]=t[k];
+                    u0[k][0]=u[k][0];
+                    u0[k][1]=u[k][1];
+                    u0[k][2]=u[k][2];
+                }
+            }
+            
+            //try to extend the alignment iteratively            
+            d = local_d0_search + 1;
+            for(int it=0; it<n_it; it++)            
+            {
+                ka=0;
+                for(k=0; k<n_cut; k++)
+                {
+                    m=i_ali[k];
+                    r1[k][0]=xtm[m][0];  
+                    r1[k][1]=xtm[m][1]; 
+                    r1[k][2]=xtm[m][2];
+                    
+                    r2[k][0]=ytm[m][0];  
+                    r2[k][1]=ytm[m][1]; 
+                    r2[k][2]=ytm[m][2];
+                    
+                    k_ali[ka]=m;
+                    ka++;
+                } 
+                //extract rotation matrix based on the fragment                
+                Kabsch(r1, r2, n_cut, 1, &rmsd, t, u);
+                do_rotation(xtm, xt, Lali, t, u);
+                n_cut=score_fun8(xt, ytm, Lali, d, i_ali, &score, 
+                    score_sum_method, Lnorm, score_d8, d0);
+                if(score>score_max)
+                {
+                    score_max=score;
+
+                    //save the rotation matrix
+                    for(k=0; k<3; k++)
+                    {
+                        t0[k]=t[k];
+                        u0[k][0]=u[k][0];
+                        u0[k][1]=u[k][1];
+                        u0[k][2]=u[k][2];
+                    }                     
+                }
+                
+                //check if it converges            
+                if(n_cut==ka)
+                {                
+                    for(k=0; k<n_cut; k++)
+                    {
+                        if(i_ali[k]!=k_ali[k]) break;
+                    }
+                    if(k==n_cut) break;
+                }                                                               
+            } //for iteration            
+
+            if(i<iL_max)
+            {
+                i=i+simplify_step; //shift the fragment        
+                if(i>iL_max) i=iL_max;  //do this to use the last missed fragment
+            }
+            else if(i>=iL_max) break;
+        }//while(1)
+        //end of one fragment
+    }//for(i_init
+    return score_max;
+}
+
+
+double TMscore8_search_standard( double **r1, double **r2,
+    double **xtm, double **ytm, double **xt, int Lali,
+    double t0[3], double u0[3][3], int simplify_step, int score_sum_method,
+    double *Rcomm, double local_d0_search, double score_d8, double d0)
+{
+    int i, m;
+    double score_max, score, rmsd;
+    const int kmax = Lali;
+    int k_ali[kmax], ka, k;
+    double t[3];
+    double u[3][3];
+    double d;
+
+    //iterative parameters
+    int n_it = 20;            //maximum number of iterations
+    int n_init_max = 6; //maximum number of different fragment length 
+    int L_ini[n_init_max];  //fragment lengths, Lali, Lali/2, Lali/4 ... 4   
+    int L_ini_min = 4;
+    if (Lali<L_ini_min) L_ini_min = Lali;
+
+    int n_init = 0, i_init;
+    for (i = 0; i<n_init_max - 1; i++)
+    {
+        n_init++;
+        L_ini[i] = (int)(Lali / pow(2.0, (double)i));
+        if (L_ini[i] <= L_ini_min)
+        {
+            L_ini[i] = L_ini_min;
+            break;
+        }
+    }
+    if (i == n_init_max - 1)
+    {
+        n_init++;
+        L_ini[i] = L_ini_min;
+    }
+
+    score_max = -1;
+    //find the maximum score starting from local structures superposition
+    int i_ali[kmax], n_cut;
+    int L_frag; //fragment length
+    int iL_max; //maximum starting postion for the fragment
+
+    for (i_init = 0; i_init<n_init; i_init++)
+    {
+        L_frag = L_ini[i_init];
+        iL_max = Lali - L_frag;
+
+        i = 0;
+        while (1)
+        {
+            //extract the fragment starting from position i 
+            ka = 0;
+            for (k = 0; k<L_frag; k++)
+            {
+                int kk = k + i;
+                r1[k][0] = xtm[kk][0];
+                r1[k][1] = xtm[kk][1];
+                r1[k][2] = xtm[kk][2];
+
+                r2[k][0] = ytm[kk][0];
+                r2[k][1] = ytm[kk][1];
+                r2[k][2] = ytm[kk][2];
+
+                k_ali[ka] = kk;
+                ka++;
+            }
+            //extract rotation matrix based on the fragment
+            Kabsch(r1, r2, L_frag, 1, &rmsd, t, u);
+            if (simplify_step != 1)
+                *Rcomm = 0;
+            do_rotation(xtm, xt, Lali, t, u);
+
+            //get subsegment of this fragment
+            d = local_d0_search - 1;
+            n_cut = score_fun8_standard(xt, ytm, Lali, d, i_ali, &score,
+                score_sum_method, score_d8, d0);
+
+            if (score>score_max)
+            {
+                score_max = score;
+
+                //save the rotation matrix
+                for (k = 0; k<3; k++)
+                {
+                    t0[k] = t[k];
+                    u0[k][0] = u[k][0];
+                    u0[k][1] = u[k][1];
+                    u0[k][2] = u[k][2];
+                }
+            }
+
+            //try to extend the alignment iteratively            
+            d = local_d0_search + 1;
+            for (int it = 0; it<n_it; it++)
+            {
+                ka = 0;
+                for (k = 0; k<n_cut; k++)
+                {
+                    m = i_ali[k];
+                    r1[k][0] = xtm[m][0];
+                    r1[k][1] = xtm[m][1];
+                    r1[k][2] = xtm[m][2];
+
+                    r2[k][0] = ytm[m][0];
+                    r2[k][1] = ytm[m][1];
+                    r2[k][2] = ytm[m][2];
+
+                    k_ali[ka] = m;
+                    ka++;
+                }
+                //extract rotation matrix based on the fragment                
+                Kabsch(r1, r2, n_cut, 1, &rmsd, t, u);
+                do_rotation(xtm, xt, Lali, t, u);
+                n_cut = score_fun8_standard(xt, ytm, Lali, d, i_ali, &score,
+                    score_sum_method, score_d8, d0);
+                if (score>score_max)
+                {
+                    score_max = score;
+
+                    //save the rotation matrix
+                    for (k = 0; k<3; k++)
+                    {
+                        t0[k] = t[k];
+                        u0[k][0] = u[k][0];
+                        u0[k][1] = u[k][1];
+                        u0[k][2] = u[k][2];
+                    }
+                }
+
+                //check if it converges            
+                if (n_cut == ka)
+                {
+                    for (k = 0; k<n_cut; k++)
+                    {
+                        if (i_ali[k] != k_ali[k]) break;
+                    }
+                    if (k == n_cut) break;
+                }
+            } //for iteration            
+
+            if (i<iL_max)
+            {
+                i = i + simplify_step; //shift the fragment        
+                if (i>iL_max) i = iL_max;  //do this to use the last missed fragment
+            }
+            else if (i >= iL_max) break;
+        }//while(1)
+        //end of one fragment
+    }//for(i_init
+    return score_max;
+}
+
+//Comprehensive TMscore search engine
+// input:   two vector sets: x, y
+//          an alignment invmap0[] between x and y
+//          simplify_step: 1 or 40 or other integers
+//          score_sum_method: 0 for score over all pairs
+//                            8 for socre over the pairs with dist<score_d8
+// output:  the best rotaion matrix t, u that results in highest TMscore
+double detailed_search(double **r1, double **r2, double **xtm, double **ytm,
+    double **xt, double **x, double **y, int xlen, int ylen, 
+    int invmap0[], double t[3], double u[3][3], int simplify_step,
+    int score_sum_method, double local_d0_search, double Lnorm,
+    double score_d8, double d0)
+{
+    //x is model, y is template, try to superpose onto y
+    int i, j, k;     
+    double tmscore;
+    double rmsd;
+
+    k=0;
+    for(i=0; i<ylen; i++) 
+    {
+        j=invmap0[i];
+        if(j>=0) //aligned
+        {
+            xtm[k][0]=x[j][0];
+            xtm[k][1]=x[j][1];
+            xtm[k][2]=x[j][2];
+                
+            ytm[k][0]=y[i][0];
+            ytm[k][1]=y[i][1];
+            ytm[k][2]=y[i][2];
+            k++;
+        }
+    }
+
+    //detailed search 40-->1
+    tmscore = TMscore8_search(r1, r2, xtm, ytm, xt, k, t, u, simplify_step,
+        score_sum_method, &rmsd, local_d0_search, Lnorm, score_d8, d0);
+    return tmscore;
+}
+
+double detailed_search_standard( double **r1, double **r2,
+    double **xtm, double **ytm, double **xt, double **x, double **y,
+    int xlen, int ylen, int invmap0[], double t[3], double u[3][3],
+    int simplify_step, int score_sum_method, double local_d0_search,
+    const bool& bNormalize, double Lnorm, double score_d8, double d0)
+{
+    //x is model, y is template, try to superpose onto y
+    int i, j, k;     
+    double tmscore;
+    double rmsd;
+
+    k=0;
+    for(i=0; i<ylen; i++) 
+    {
+        j=invmap0[i];
+        if(j>=0) //aligned
+        {
+            xtm[k][0]=x[j][0];
+            xtm[k][1]=x[j][1];
+            xtm[k][2]=x[j][2];
+                
+            ytm[k][0]=y[i][0];
+            ytm[k][1]=y[i][1];
+            ytm[k][2]=y[i][2];
+            k++;
+        }
+    }
+
+    //detailed search 40-->1
+    tmscore = TMscore8_search_standard( r1, r2, xtm, ytm, xt, k, t, u,
+        simplify_step, score_sum_method, &rmsd, local_d0_search, score_d8, d0);
+    if (bNormalize)// "-i", to use standard_TMscore, then bNormalize=true, else bNormalize=false; 
+        tmscore = tmscore * k / Lnorm;
+
+    return tmscore;
+}
+
+//compute the score quickly in three iterations
+double get_score_fast( double **r1, double **r2, double **xtm, double **ytm,
+    double **x, double **y, int xlen, int ylen, int invmap[],
+    double d0, double d0_search, double t[3], double u[3][3])
+{
+    double rms, tmscore, tmscore1, tmscore2;
+    int i, j, k;
+
+    k=0;
+    for(j=0; j<ylen; j++)
+    {
+        i=invmap[j];
+        if(i>=0)
+        {
+            r1[k][0]=x[i][0];
+            r1[k][1]=x[i][1];
+            r1[k][2]=x[i][2];
+
+            r2[k][0]=y[j][0];
+            r2[k][1]=y[j][1];
+            r2[k][2]=y[j][2];
+            
+            xtm[k][0]=x[i][0];
+            xtm[k][1]=x[i][1];
+            xtm[k][2]=x[i][2];
+            
+            ytm[k][0]=y[j][0];
+            ytm[k][1]=y[j][1];
+            ytm[k][2]=y[j][2];                  
+            
+            k++;
+        }
+        else if(i!=-1) PrintErrorAndQuit("Wrong map!\n");
+    }
+    Kabsch(r1, r2, k, 1, &rms, t, u);
+    
+    //evaluate score   
+    double di;
+    const int len=k;
+    double dis[len];    
+    double d00=d0_search;
+    double d002=d00*d00;
+    double d02=d0*d0;
+    
+    int n_ali=k;
+    double xrot[3];
+    tmscore=0;
+    for(k=0; k<n_ali; k++)
+    {
+        transform(t, u, &xtm[k][0], xrot);        
+        di=dist(xrot, &ytm[k][0]);
+        dis[k]=di;
+        tmscore += 1/(1+di/d02);
+    }
+    
+   
+   
+   //second iteration 
+    double d002t=d002;
+    while(1)
+    {
+        j=0;
+        for(k=0; k<n_ali; k++)
+        {            
+            if(dis[k]<=d002t)
+            {
+                r1[j][0]=xtm[k][0];
+                r1[j][1]=xtm[k][1];
+                r1[j][2]=xtm[k][2];
+                
+                r2[j][0]=ytm[k][0];
+                r2[j][1]=ytm[k][1];
+                r2[j][2]=ytm[k][2];
+                
+                j++;
+            }
+        }
+        //there are not enough feasible pairs, relieve the threshold 
+        if(j<3 && n_ali>3) d002t += 0.5;
+        else break;
+    }
+    
+    if(n_ali!=j)
+    {
+        Kabsch(r1, r2, j, 1, &rms, t, u);
+        tmscore1=0;
+        for(k=0; k<n_ali; k++)
+        {
+            transform(t, u, &xtm[k][0], xrot);        
+            di=dist(xrot, &ytm[k][0]);
+            dis[k]=di;
+            tmscore1 += 1/(1+di/d02);
+        }
+        
+        //third iteration
+        d002t=d002+1;
+       
+        while(1)
+        {
+            j=0;
+            for(k=0; k<n_ali; k++)
+            {            
+                if(dis[k]<=d002t)
+                {
+                    r1[j][0]=xtm[k][0];
+                    r1[j][1]=xtm[k][1];
+                    r1[j][2]=xtm[k][2];
+                    
+                    r2[j][0]=ytm[k][0];
+                    r2[j][1]=ytm[k][1];
+                    r2[j][2]=ytm[k][2];
+                                        
+                    j++;
+                }
+            }
+            //there are not enough feasible pairs, relieve the threshold 
+            if(j<3 && n_ali>3) d002t += 0.5;
+            else break;
+        }
+
+        //evaluate the score
+        Kabsch(r1, r2, j, 1, &rms, t, u);
+        tmscore2=0;
+        for(k=0; k<n_ali; k++)
+        {
+            transform(t, u, &xtm[k][0], xrot);
+            di=dist(xrot, &ytm[k][0]);
+            tmscore2 += 1/(1+di/d02);
+        }    
+    }
+    else
+    {
+        tmscore1=tmscore;
+        tmscore2=tmscore;
+    }
+    
+    if(tmscore1>=tmscore) tmscore=tmscore1;
+    if(tmscore2>=tmscore) tmscore=tmscore2;
+    return tmscore; // no need to normalize this score because it will not be used for latter scoring
+}
+
+
+//perform gapless threading to find the best initial alignment
+//input: x, y, xlen, ylen
+//output: y2x0 stores the best alignment: e.g., 
+//y2x0[j]=i means:
+//the jth element in y is aligned to the ith element in x if i>=0 
+//the jth element in y is aligned to a gap in x if i==-1
+double get_initial(double **r1, double **r2, double **xtm, double **ytm,
+    double **x, double **y, int xlen, int ylen, int *y2x,
+    double d0, double d0_search, const bool fast_opt,
+    double t[3], double u[3][3])
+{
+    int min_len=getmin(xlen, ylen);
+    if(min_len<=5) PrintErrorAndQuit("Sequence is too short <=5!\n");
+    
+    int min_ali= min_len/2;              //minimum size of considered fragment 
+    if(min_ali<=5)  min_ali=5;    
+    int n1, n2;
+    n1 = -ylen+min_ali; 
+    n2 = xlen-min_ali;
+
+    int i, j, k, k_best;
+    double tmscore, tmscore_max=-1;
+
+    k_best=n1;
+    for(k=n1; k<=n2; k+=(fast_opt)?5:1)
+    {
+        //get the map
+        for(j=0; j<ylen; j++)
+        {
+            i=j+k;
+            if(i>=0 && i<xlen) y2x[j]=i;
+            else y2x[j]=-1;
+        }
+        
+        //evaluate the map quickly in three iterations
+        //this is not real tmscore, it is used to evaluate the goodness of the initial alignment
+        tmscore=get_score_fast(r1, r2, xtm, ytm,
+            x, y, xlen, ylen, y2x, d0,d0_search, t, u);
+        if(tmscore>=tmscore_max)
+        {
+            tmscore_max=tmscore;
+            k_best=k;
+        }
+    }
+    
+    //extract the best map
+    k=k_best;
+    for(j=0; j<ylen; j++)
+    {
+        i=j+k;
+        if(i>=0 && i<xlen) y2x[j]=i;
+        else y2x[j]=-1;
+    }    
+
+    return tmscore_max;
+}
+
+void smooth(int *sec, int len)
+{
+    int i, j;
+    //smooth single  --x-- => -----
+    for (i=2; i<len-2; i++)
+    {
+        if(sec[i]==2 || sec[i]==4)
+        {
+            j=sec[i];
+            if (sec[i-2]!=j && sec[i-1]!=j && sec[i+1]!=j && sec[i+2]!=j)
+                sec[i]=1;
+        }
+    }
+
+    //   smooth double 
+    //   --xx-- => ------
+    for (i=0; i<len-5; i++)
+    {
+        //helix
+        if (sec[i]!=2   && sec[i+1]!=2 && sec[i+2]==2 && sec[i+3]==2 &&
+            sec[i+4]!=2 && sec[i+5]!= 2)
+        {
+            sec[i+2]=1;
+            sec[i+3]=1;
+        }
+
+        //beta
+        if (sec[i]!=4   && sec[i+1]!=4 && sec[i+2]==4 && sec[i+3]==4 &&
+            sec[i+4]!=4 && sec[i+5]!= 4)
+        {
+            sec[i+2]=1;
+            sec[i+3]=1;
+        }
+    }
+
+    //smooth connect
+    for (i=0; i<len-2; i++)
+    {        
+        if (sec[i]==2 && sec[i+1]!=2 && sec[i+2]==2) sec[i+1]=2;
+        else if(sec[i]==4 && sec[i+1]!=4 && sec[i+2]==4) sec[i+1]=4;
+    }
+
+}
+
+int sec_str(double dis13, double dis14, double dis15,
+            double dis24, double dis25, double dis35)
+{
+    int s=1;
+    
+    double delta=2.1;
+    if (fabs(dis15-6.37)<delta && fabs(dis14-5.18)<delta && 
+        fabs(dis25-5.18)<delta && fabs(dis13-5.45)<delta &&
+        fabs(dis24-5.45)<delta && fabs(dis35-5.45)<delta)
+    {
+        s=2; //helix                        
+        return s;
+    }
+
+    delta=1.42;
+    if (fabs(dis15-13  )<delta && fabs(dis14-10.4)<delta &&
+        fabs(dis25-10.4)<delta && fabs(dis13-6.1 )<delta &&
+        fabs(dis24-6.1 )<delta && fabs(dis35-6.1 )<delta)
+    {
+        s=4; //strand
+        return s;
+    }
+
+    if (dis15 < 8) s=3; //turn
+    return s;
+}
+
+
+/* secondary stucture assignment for protein:
+ * 1->coil, 2->helix, 3->turn, 4->strand */
+void make_sec(double **x, int len, int *sec)
+{
+    int j1, j2, j3, j4, j5;
+    double d13, d14, d15, d24, d25, d35;
+    for(int i=0; i<len; i++)
+    {     
+        sec[i]=1;
+        j1=i-2;
+        j2=i-1;
+        j3=i;
+        j4=i+1;
+        j5=i+2;        
+        
+        if(j1>=0 && j5<len)
+        {
+            d13=sqrt(dist(x[j1], x[j3]));
+            d14=sqrt(dist(x[j1], x[j4]));
+            d15=sqrt(dist(x[j1], x[j5]));
+            d24=sqrt(dist(x[j2], x[j4]));
+            d25=sqrt(dist(x[j2], x[j5]));
+            d35=sqrt(dist(x[j3], x[j5]));
+            sec[i]=sec_str(d13, d14, d15, d24, d25, d35);            
+        }    
+    } 
+}
+
+/* a c d b: a paired to b, c paired to d */
+bool overlap(const int a1,const int b1,const int c1,const int d1,
+             const int a2,const int b2,const int c2,const int d2)
+{
+    return (a2>=a1&&a2<=c1)||(c2>=a1&&c2<=c1)||
+           (d2>=a1&&d2<=c1)||(b2>=a1&&b2<=c1)||
+           (a2>=d1&&a2<=b1)||(c2>=d1&&c2<=b1)||
+           (d2>=d1&&d2<=b1)||(b2>=d1&&b2<=b1);
+}
+
+/* find base pairing stacks in RNA*/
+void sec_str(int len,char *seq, const vector<vector<bool> >&bp, 
+    int a, int b,int &c, int &d)
+{
+    int i,j;
+    
+    for (i=0;i<len;i++)
+    {
+        if (a+i<len-3 && b-i>0)
+        {
+            if (a+i<b-i && bp[a+i][b-i]) continue;
+            break;
+        }
+    }
+    c=a+i-1;d=b-i+1;
+}
+
+/* secondary structure assignment for RNA:
+ * 1->unpair, 2->paired with upstream, 3->paired with downstream */
+void make_sec(char *seq, double **x, int len, int *sec,const string atom_opt)
+{
+    int ii,jj,i,j;
+
+    float lb=12.5; // lower bound for " C3'"
+    float ub=15.0; // upper bound for " C3'"
+    if     (atom_opt==" C4'") {lb=14.0;ub=16.0;}
+    else if(atom_opt==" C5'") {lb=16.0;ub=18.0;}
+    else if(atom_opt==" O3'") {lb=13.5;ub=16.5;}
+    else if(atom_opt==" O5'") {lb=15.5;ub=18.5;}
+    else if(atom_opt==" P  ") {lb=16.5;ub=21.0;}
+
+    float dis;
+    vector<bool> bp_tmp(len,false);
+    vector<vector<bool> > bp(len,bp_tmp);
+    bp_tmp.clear();
+    for (i=0; i<len; i++)
+    {
+        sec[i]=1;
+        for (j=i+1; j<len; j++)
+        {
+            if (((seq[i]=='u'||seq[i]=='t')&&(seq[j]=='a'             ))||
+                ((seq[i]=='a'             )&&(seq[j]=='u'||seq[j]=='t'))||
+                ((seq[i]=='g'             )&&(seq[j]=='c'||seq[j]=='u'))||
+                ((seq[i]=='c'||seq[i]=='u')&&(seq[j]=='g'             )))
+            {
+                dis=sqrt(dist(x[i], x[j]));
+                bp[j][i]=bp[i][j]=(dis>lb && dis<ub);
+            }
+        }
+    }
+    
+    // From 5' to 3': A0 C0 D0 B0: A0 paired to B0, C0 paired to D0
+    vector<int> A0,B0,C0,D0;
+    for (i=0; i<len-2; i++)
+    {
+        for (j=i+3; j<len; j++)
+        {
+            if (!bp[i][j]) continue;
+            if (i>0 && j+1<len && bp[i-1][j+1]) continue;
+            if (!bp[i+1][j-1]) continue;
+            sec_str(len,seq, bp, i,j,ii,jj);
+            A0.push_back(i);
+            B0.push_back(j);
+            C0.push_back(ii);
+            D0.push_back(jj);
+        }
+    }
+    
+    int sign;
+    for (i=0;i<A0.size();i++)
+    {
+        /*
+        sign=0;
+        if(C0[i]-A0[i]<=1)
+        {
+            for(j=0;j<A0.size();j++)
+            {
+                if(i==j) continue;
+
+                if((A0[j]>=A0[i]&&A0[j]<=C0[i])||
+                   (C0[j]>=A0[i]&&C0[j]<=C0[i])||
+                   (D0[j]>=A0[i]&&D0[j]<=C0[i])||
+                   (B0[j]>=A0[i]&&B0[j]<=C0[i])||
+                   (A0[j]>=D0[i]&&A0[j]<=B0[i])||
+                   (C0[j]>=D0[i]&&C0[j]<=B0[i])||
+                   (D0[j]>=D0[i]&&D0[j]<=B0[i])||
+                   (B0[j]>=D0[i]&&B0[j]<=B0[i]))
+                {
+                    sign=-1;
+                    break;
+                }
+            }
+        }
+        if(sign!=0) continue;
+        */
+
+        for (j=0;;j++)
+        {
+            if(A0[i]+j>C0[i]) break;
+            sec[A0[i]+j]=2;
+            sec[D0[i]+j]=3;
+        }
+    }
+
+    /* clean up */
+    A0.clear();
+    B0.clear();
+    C0.clear();
+    D0.clear();
+    bp.clear();
+}
+
+//get initial alignment from secondary structure alignment
+//input: x, y, xlen, ylen
+//output: y2x stores the best alignment: e.g., 
+//y2x[j]=i means:
+//the jth element in y is aligned to the ith element in x if i>=0 
+//the jth element in y is aligned to a gap in x if i==-1
+void get_initial_ss(bool **path, double **val,
+    const int *secx, const int *secy, int xlen, int ylen, int *y2x)
+{
+    double gap_open=-1.0;
+    NWDP_TM(path, val, secx, secy, xlen, ylen, gap_open, y2x);
+}
+
+
+// get_initial5 in TMalign fortran, get_initial_local in TMalign c by yangji
+//get initial alignment of local structure superposition
+//input: x, y, xlen, ylen
+//output: y2x stores the best alignment: e.g., 
+//y2x[j]=i means:
+//the jth element in y is aligned to the ith element in x if i>=0 
+//the jth element in y is aligned to a gap in x if i==-1
+bool get_initial5( double **r1, double **r2, double **xtm, double **ytm,
+    bool **path, double **val,
+    double **x, double **y, int xlen, int ylen, int *y2x,
+    double d0, double d0_search, const bool fast_opt, const double D0_MIN)
+{
+    double GL, rmsd;
+    double t[3];
+    double u[3][3];
+
+    double d01 = d0 + 1.5;
+    if (d01 < D0_MIN) d01 = D0_MIN;
+    double d02 = d01*d01;
+
+    double GLmax = 0;
+    int aL = getmin(xlen, ylen);
+    int *invmap = new int[ylen + 1];
+
+    // jump on sequence1-------------->
+    int n_jump1 = 0;
+    if (xlen > 250)
+        n_jump1 = 45;
+    else if (xlen > 200)
+        n_jump1 = 35;
+    else if (xlen > 150)
+        n_jump1 = 25;
+    else
+        n_jump1 = 15;
+    if (n_jump1 > (xlen / 3))
+        n_jump1 = xlen / 3;
+
+    // jump on sequence2-------------->
+    int n_jump2 = 0;
+    if (ylen > 250)
+        n_jump2 = 45;
+    else if (ylen > 200)
+        n_jump2 = 35;
+    else if (ylen > 150)
+        n_jump2 = 25;
+    else
+        n_jump2 = 15;
+    if (n_jump2 > (ylen / 3))
+        n_jump2 = ylen / 3;
+
+    // fragment to superimpose-------------->
+    int n_frag[2] = { 20, 100 };
+    if (n_frag[0] > (aL / 3))
+        n_frag[0] = aL / 3;
+    if (n_frag[1] > (aL / 2))
+        n_frag[1] = aL / 2;
+
+    // start superimpose search-------------->
+    if (fast_opt)
+    {
+        n_jump1*=5;
+        n_jump2*=5;
+    }
+    bool flag = false;
+    for (int i_frag = 0; i_frag < 2; i_frag++)
+    {
+        int m1 = xlen - n_frag[i_frag] + 1;
+        int m2 = ylen - n_frag[i_frag] + 1;
+
+        for (int i = 0; i<m1; i = i + n_jump1) //index starts from 0, different from FORTRAN
+        {
+            for (int j = 0; j<m2; j = j + n_jump2)
+            {
+                for (int k = 0; k<n_frag[i_frag]; k++) //fragment in y
+                {
+                    r1[k][0] = x[k + i][0];
+                    r1[k][1] = x[k + i][1];
+                    r1[k][2] = x[k + i][2];
+
+                    r2[k][0] = y[k + j][0];
+                    r2[k][1] = y[k + j][1];
+                    r2[k][2] = y[k + j][2];
+                }
+
+                // superpose the two structures and rotate it
+                Kabsch(r1, r2, n_frag[i_frag], 1, &rmsd, t, u);
+
+                double gap_open = 0.0;
+                NWDP_TM(path, val, x, y, xlen, ylen,
+                    t, u, d02, gap_open, invmap);
+                GL = get_score_fast(r1, r2, xtm, ytm, x, y, xlen, ylen,
+                    invmap, d0, d0_search, t, u);
+                if (GL>GLmax)
+                {
+                    GLmax = GL;
+                    for (int ii = 0; ii<ylen; ii++) y2x[ii] = invmap[ii];
+                    flag = true;
+                }
+            }
+        }
+    }
+
+    delete[] invmap;
+    return flag;
+}
+
+void score_matrix_rmsd_sec( double **r1, double **r2,
+    double **score, const int *secx, const int *secy,
+    double **x, double **y, int xlen, int ylen,
+    int *y2x, const double D0_MIN, double d0)
+{
+    double t[3], u[3][3];
+    double rmsd, dij;
+    double d01=d0+1.5;
+    if(d01 < D0_MIN) d01=D0_MIN;
+    double d02=d01*d01;
+
+    double xx[3];
+    int i, k=0;
+    for(int j=0; j<ylen; j++)
+    {
+        i=y2x[j];
+        if(i>=0)
+        {
+            r1[k][0]=x[i][0];  
+            r1[k][1]=x[i][1]; 
+            r1[k][2]=x[i][2];   
+            
+            r2[k][0]=y[j][0];  
+            r2[k][1]=y[j][1]; 
+            r2[k][2]=y[j][2];
+            
+            k++;
+        }
+    }
+    Kabsch(r1, r2, k, 1, &rmsd, t, u);
+
+    
+    for(int ii=0; ii<xlen; ii++)
+    {        
+        transform(t, u, &x[ii][0], xx);
+        for(int jj=0; jj<ylen; jj++)
+        {
+            dij=dist(xx, &y[jj][0]); 
+            if (secx[ii]==secy[jj])
+                score[ii+1][jj+1] = 1.0/(1+dij/d02) + 0.5;
+            else
+                score[ii+1][jj+1] = 1.0/(1+dij/d02);
+        }
+    }
+}
+
+
+//get initial alignment from secondary structure and previous alignments
+//input: x, y, xlen, ylen
+//output: y2x stores the best alignment: e.g., 
+//y2x[j]=i means:
+//the jth element in y is aligned to the ith element in x if i>=0 
+//the jth element in y is aligned to a gap in x if i==-1
+void get_initial_ssplus(double **r1, double **r2, double **score, bool **path,
+    double **val, const int *secx, const int *secy, double **x, double **y,
+    int xlen, int ylen, int *y2x0, int *y2x, const double D0_MIN, double d0)
+{
+    //create score matrix for DP
+    score_matrix_rmsd_sec(r1, r2, score, secx, secy, x, y, xlen, ylen,
+        y2x0, D0_MIN,d0);
+    
+    double gap_open=-1.0;
+    NWDP_TM(score, path, val, xlen, ylen, gap_open, y2x);
+}
+
+
+void find_max_frag(double **x, int len, int *start_max,
+    int *end_max, double dcu0, const bool fast_opt)
+{
+    int r_min, fra_min=4;           //minimum fragment for search
+    if (fast_opt) fra_min=8;
+    int start;
+    int Lfr_max=0;
+
+    r_min= (int) (len*1.0/3.0); //minimum fragment, in case too small protein
+    if(r_min > fra_min) r_min=fra_min;
+    
+    int inc=0;
+    double dcu0_cut=dcu0*dcu0;;
+    double dcu_cut=dcu0_cut;
+
+    while(Lfr_max < r_min)
+    {        
+        Lfr_max=0;            
+        int j=1;    //number of residues at nf-fragment
+        start=0;
+        for(int i=1; i<len; i++)
+        {
+            if(dist(x[i-1], x[i]) < dcu_cut)
+            {
+                j++;
+
+                if(i==(len-1))
+                {
+                    if(j > Lfr_max) 
+                    {
+                        Lfr_max=j;
+                        *start_max=start;
+                        *end_max=i;                        
+                    }
+                    j=1;
+                }
+            }
+            else
+            {
+                if(j>Lfr_max) 
+                {
+                    Lfr_max=j;
+                    *start_max=start;
+                    *end_max=i-1;                                        
+                }
+
+                j=1;
+                start=i;
+            }
+        }// for i;
+        
+        if(Lfr_max < r_min)
+        {
+            inc++;
+            double dinc=pow(1.1, (double) inc) * dcu0;
+            dcu_cut= dinc*dinc;
+        }
+    }//while <;    
+}
+
+//perform fragment gapless threading to find the best initial alignment
+//input: x, y, xlen, ylen
+//output: y2x0 stores the best alignment: e.g., 
+//y2x0[j]=i means:
+//the jth element in y is aligned to the ith element in x if i>=0 
+//the jth element in y is aligned to a gap in x if i==-1
+double get_initial_fgt(double **r1, double **r2, double **xtm, double **ytm,
+    double **x, double **y, int xlen, int ylen, 
+    int *y2x, double d0, double d0_search,
+    double dcu0, const bool fast_opt, double t[3], double u[3][3])
+{
+    int fra_min=4;           //minimum fragment for search
+    if (fast_opt) fra_min=8;
+    int fra_min1=fra_min-1;  //cutoff for shift, save time
+
+    int xstart=0, ystart=0, xend=0, yend=0;
+
+    find_max_frag(x, xlen, &xstart, &xend, dcu0, fast_opt);
+    find_max_frag(y, ylen, &ystart, &yend, dcu0, fast_opt);
+
+
+    int Lx = xend-xstart+1;
+    int Ly = yend-ystart+1;
+    int *ifr, *y2x_;
+    int L_fr=getmin(Lx, Ly);
+    ifr= new int[L_fr];
+    y2x_= new int[ylen+1];
+
+    //select what piece will be used. The original implement may cause 
+    //asymetry, but only when xlen==ylen and Lx==Ly
+    //if L1=Lfr1 and L2=Lfr2 (normal proteins), it will be the same as initial1
+
+    if(Lx<Ly || (Lx==Ly && xlen<ylen))
+    {        
+        for(int i=0; i<L_fr; i++) ifr[i]=xstart+i;
+    }
+    else if(Lx>Ly || (Lx==Ly && xlen>ylen))
+    {        
+        for(int i=0; i<L_fr; i++) ifr[i]=ystart+i;
+    }
+    else // solve asymetric for 1x5gA vs 2q7nA5
+    {
+        /* In this case, L0==xlen==ylen; L_fr==Lx==Ly */
+        int L0=xlen;
+        double tmscore, tmscore_max=-1;
+        int i, j, k;
+        int n1, n2;
+        int min_len;
+        int min_ali;
+
+        /* part 1, normalized by xlen */
+        for(i=0; i<L_fr; i++) ifr[i]=xstart+i;
+
+        if(L_fr==L0)
+        {
+            n1= (int)(L0*0.1); //my index starts from 0
+            n2= (int)(L0*0.89);
+            j=0;
+            for(i=n1; i<= n2; i++)
+            {
+                ifr[j]=ifr[i];
+                j++;
+            }
+            L_fr=j;
+        }
+
+        int L1=L_fr;
+        min_len=getmin(L1, ylen);    
+        min_ali= (int) (min_len/2.5); //minimum size of considered fragment 
+        if(min_ali<=fra_min1)  min_ali=fra_min1;    
+        n1 = -ylen+min_ali; 
+        n2 = L1-min_ali;
+
+        for(k=n1; k<=n2; k+=(fast_opt)?3:1)
+        {
+            //get the map
+            for(j=0; j<ylen; j++)
+            {
+                i=j+k;
+                if(i>=0 && i<L1) y2x_[j]=ifr[i];
+                else             y2x_[j]=-1;
+            }
+
+            //evaluate the map quickly in three iterations
+            tmscore=get_score_fast(r1, r2, xtm, ytm, x, y, xlen, ylen, y2x_,
+                d0, d0_search, t, u);
+
+            if(tmscore>=tmscore_max)
+            {
+                tmscore_max=tmscore;
+                for(j=0; j<ylen; j++) y2x[j]=y2x_[j];
+            }
+        }
+
+        /* part 2, normalized by ylen */
+        L_fr=Ly;
+        for(i=0; i<L_fr; i++) ifr[i]=ystart+i;
+
+        if (L_fr==L0)
+        {
+            n1= (int)(L0*0.1); //my index starts from 0
+            n2= (int)(L0*0.89);
+
+            j=0;
+            for(i=n1; i<= n2; i++)
+            {
+                ifr[j]=ifr[i];
+                j++;
+            }
+            L_fr=j;
+        }
+
+        int L2=L_fr;
+        min_len=getmin(xlen, L2);    
+        min_ali= (int) (min_len/2.5); //minimum size of considered fragment 
+        if(min_ali<=fra_min1)  min_ali=fra_min1;    
+        n1 = -L2+min_ali; 
+        n2 = xlen-min_ali;
+
+        for(k=n1; k<=n2; k++)
+        {
+            //get the map
+            for(j=0; j<ylen; j++) y2x_[j]=-1;
+
+            for(j=0; j<L2; j++)
+            {
+                i=j+k;
+                if(i>=0 && i<xlen) y2x_[ifr[j]]=i;
+            }
+        
+            //evaluate the map quickly in three iterations
+            tmscore=get_score_fast(r1, r2, xtm, ytm,
+                x, y, xlen, ylen, y2x_, d0,d0_search, t, u);
+            if(tmscore>=tmscore_max)
+            {
+                tmscore_max=tmscore;
+                for(j=0; j<ylen; j++) y2x[j]=y2x_[j];
+            }
+        }
+
+        delete [] ifr;
+        delete [] y2x_;
+        return tmscore_max;
+    }
+
+    
+    int L0=getmin(xlen, ylen); //non-redundant to get_initial1
+    if(L_fr==L0)
+    {
+        int n1= (int)(L0*0.1); //my index starts from 0
+        int n2= (int)(L0*0.89);
+
+        int j=0;
+        for(int i=n1; i<= n2; i++)
+        {
+            ifr[j]=ifr[i];
+            j++;
+        }
+        L_fr=j;
+    }
+
+
+    //gapless threading for the extracted fragment
+    double tmscore, tmscore_max=-1;
+
+    if(Lx<Ly || (Lx==Ly && xlen<=ylen))
+    {
+        int L1=L_fr;
+        int min_len=getmin(L1, ylen);    
+        int min_ali= (int) (min_len/2.5);              //minimum size of considered fragment 
+        if(min_ali<=fra_min1)  min_ali=fra_min1;    
+        int n1, n2;
+        n1 = -ylen+min_ali; 
+        n2 = L1-min_ali;
+
+        int i, j, k;
+        for(k=n1; k<=n2; k+=(fast_opt)?3:1)
+        {
+            //get the map
+            for(j=0; j<ylen; j++)
+            {
+                i=j+k;
+                if(i>=0 && i<L1) y2x_[j]=ifr[i];
+                else             y2x_[j]=-1;
+            }
+
+            //evaluate the map quickly in three iterations
+            tmscore=get_score_fast(r1, r2, xtm, ytm, x, y, xlen, ylen, y2x_,
+                d0, d0_search, t, u);
+
+            if(tmscore>=tmscore_max)
+            {
+                tmscore_max=tmscore;
+                for(j=0; j<ylen; j++) y2x[j]=y2x_[j];
+            }
+        }
+    }
+    else
+    {
+        int L2=L_fr;
+        int min_len=getmin(xlen, L2);    
+        int min_ali= (int) (min_len/2.5);              //minimum size of considered fragment 
+        if(min_ali<=fra_min1)  min_ali=fra_min1;    
+        int n1, n2;
+        n1 = -L2+min_ali; 
+        n2 = xlen-min_ali;
+
+        int i, j, k;    
+
+        for(k=n1; k<=n2; k++)
+        {
+            //get the map
+            for(j=0; j<ylen; j++) y2x_[j]=-1;
+
+            for(j=0; j<L2; j++)
+            {
+                i=j+k;
+                if(i>=0 && i<xlen) y2x_[ifr[j]]=i;
+            }
+        
+            //evaluate the map quickly in three iterations
+            tmscore=get_score_fast(r1, r2, xtm, ytm,
+                x, y, xlen, ylen, y2x_, d0,d0_search, t, u);
+            if(tmscore>=tmscore_max)
+            {
+                tmscore_max=tmscore;
+                for(j=0; j<ylen; j++) y2x[j]=y2x_[j];
+            }
+        }
+    }    
+
+
+    delete [] ifr;
+    delete [] y2x_;
+    return tmscore_max;
+}
+
+//heuristic run of dynamic programing iteratively to find the best alignment
+//input: initial rotation matrix t, u
+//       vectors x and y, d0
+//output: best alignment that maximizes the TMscore, will be stored in invmap
+double DP_iter(double **r1, double **r2, double **xtm, double **ytm,
+    double **xt, bool **path, double **val, double **x, double **y,
+    int xlen, int ylen, double t[3], double u[3][3], int invmap0[],
+    int g1, int g2, int iteration_max, double local_d0_search,
+    double D0_MIN, double Lnorm, double d0, double score_d8)
+{
+    double gap_open[2]={-0.6, 0};
+    double rmsd; 
+    int *invmap=new int[ylen+1];
+    
+    int iteration, i, j, k;
+    double tmscore, tmscore_max, tmscore_old=0;    
+    int score_sum_method=8, simplify_step=40;
+    tmscore_max=-1;
+
+    //double d01=d0+1.5;
+    double d02=d0*d0;
+    for(int g=g1; g<g2; g++)
+    {
+        for(iteration=0; iteration<iteration_max; iteration++)
+        {           
+            NWDP_TM(path, val, x, y, xlen, ylen,
+                t, u, d02, gap_open[g], invmap);
+            
+            k=0;
+            for(j=0; j<ylen; j++) 
+            {
+                i=invmap[j];
+
+                if(i>=0) //aligned
+                {
+                    xtm[k][0]=x[i][0];
+                    xtm[k][1]=x[i][1];
+                    xtm[k][2]=x[i][2];
+                    
+                    ytm[k][0]=y[j][0];
+                    ytm[k][1]=y[j][1];
+                    ytm[k][2]=y[j][2];
+                    k++;
+                }
+            }
+
+            tmscore = TMscore8_search(r1, r2, xtm, ytm, xt, k, t, u,
+                simplify_step, score_sum_method, &rmsd, local_d0_search,
+                Lnorm, score_d8, d0);
+
+           
+            if(tmscore>tmscore_max)
+            {
+                tmscore_max=tmscore;
+                for(i=0; i<ylen; i++) invmap0[i]=invmap[i];
+            }
+    
+            if(iteration>0)
+            {
+                if(fabs(tmscore_old-tmscore)<0.000001) break;       
+            }
+            tmscore_old=tmscore;
+        }// for iteration           
+        
+    }//for gapopen
+    
+    
+    delete []invmap;
+    return tmscore_max;
+}
+
+
+void output_superpose(const string filename, const char *fname_super,
+    double t[3], double u[3][3], const int ter_opt=3)
+{
+    int compress_type=0; // uncompressed file
+    ifstream fin;
+    redi::ipstream fin_gz; // if file is compressed
+    if (filename.size()>=3 && 
+        filename.substr(filename.size()-3,3)==".gz")
+    {
+        fin_gz.open("zcat "+filename);
+        compress_type=1;
+    }
+    else if (filename.size()>=4 && 
+        filename.substr(filename.size()-4,4)==".bz2")
+    {
+        fin_gz.open("bzcat "+filename);
+        compress_type=2;
+    }
+    else fin.open(filename.c_str());
+
+    stringstream buf;
+    string line;
+    double x[3];  // before transform
+    double x1[3]; // after transform
+
+    /* for PDBx/mmCIF only */
+    map<string,int> _atom_site;
+    int atom_site_pos;
+    vector<string> line_vec;
+
+    while (compress_type?fin_gz.good():fin.good())
+    {
+        if (compress_type) getline(fin_gz, line);
+        else               getline(fin, line);
+        if (line.compare(0, 6, "ATOM  ")==0 || 
+            line.compare(0, 6, "HETATM")==0) // PDB format
+        {
+            x[0]=atof(line.substr(30,8).c_str());
+            x[1]=atof(line.substr(38,8).c_str());
+            x[2]=atof(line.substr(46,8).c_str());
+            transform(t, u, x, x1);
+            buf<<line.substr(0,30)<<setiosflags(ios::fixed)
+                <<setprecision(3)
+                <<setw(8)<<x1[0] <<setw(8)<<x1[1] <<setw(8)<<x1[2]
+                <<line.substr(54)<<'\n';
+        }
+        else if (line.compare(0,5,"loop_")==0) // PDBx/mmCIF
+        {
+            buf<<line<<'\n';
+            if (compress_type) getline(fin_gz, line);
+            else               getline(fin, line);
+            buf<<line<<'\n';
+            if (line.compare(0,11,"_atom_site.")) continue;
+            _atom_site.clear();
+            atom_site_pos=0;
+            _atom_site[line.substr(11,line.size()-12)]=atom_site_pos;
+            while(1)
+            {
+                if (compress_type) getline(fin_gz, line);
+                else               getline(fin, line);
+                if (line.compare(0,11,"_atom_site.")) break;
+                _atom_site[line.substr(11,line.size()-12)]=++atom_site_pos;
+                buf<<line<<'\n';
+            }
+
+            if (_atom_site.count("group_PDB")*
+                _atom_site.count("Cartn_x")*
+                _atom_site.count("Cartn_y")*
+                _atom_site.count("Cartn_z")==0)
+            {
+                buf<<line<<'\n';
+                cerr<<"Warning! Missing one of the following _atom_site data items: group_PDB, Cartn_x, Cartn_y, Cartn_z"<<endl;
+                continue;
+            }
+
+            while(1)
+            {
+                line_vec.clear();
+                split(line,line_vec);
+                if (line_vec[_atom_site["group_PDB"]]!="ATOM" &&
+                    line_vec[_atom_site["group_PDB"]]!="HETATM") break;
+
+                x[0]=atof(line_vec[_atom_site["Cartn_x"]].c_str());
+                x[1]=atof(line_vec[_atom_site["Cartn_y"]].c_str());
+                x[2]=atof(line_vec[_atom_site["Cartn_z"]].c_str());
+                transform(t, u, x, x1);
+
+                for (atom_site_pos=0; atom_site_pos<_atom_site.size(); atom_site_pos++)
+                {
+                    if (atom_site_pos==_atom_site["Cartn_x"])
+                        buf<<setiosflags(ios::fixed)<<setprecision(3)
+                           <<setw(8)<<x1[0]<<' ';
+                    else if (atom_site_pos==_atom_site["Cartn_y"])
+                        buf<<setiosflags(ios::fixed)<<setprecision(3)
+                           <<setw(8)<<x1[1]<<' ';
+                    else if (atom_site_pos==_atom_site["Cartn_z"])
+                        buf<<setiosflags(ios::fixed)<<setprecision(3)
+                           <<setw(8)<<x1[2]<<' ';
+                    else buf<<line_vec[atom_site_pos]<<' ';
+                }
+                buf<<'\n';
+
+                if (compress_type && fin_gz.good()) getline(fin_gz, line);
+                else if (!compress_type && fin.good()) getline(fin, line);
+                else break;
+            }
+            if (compress_type?fin_gz.good():fin.good()) buf<<line<<'\n';
+        }
+        else if (line.size())
+        {
+            buf<<line<<'\n';
+            if (ter_opt>=1 && line.compare(0,3,"END")==0) break;
+        }
+    }
+    if (compress_type) fin_gz.close();
+    else               fin.close();
+
+    ofstream fp(fname_super);
+    fp<<buf.str();
+    fp.close();
+    buf.str(string()); // clear stream
+}
+
+/* extract rotation matrix based on TMscore8 */
+void output_rotation_matrix(const char* fname_matrix,
+    const double t[3], const double u[3][3])
+{
+    fstream fout;
+    fout.open(fname_matrix, ios::out | ios::trunc);
+    if (fout)// succeed
+    {
+        fout << "------ The rotation matrix to rotate Chain_1 to Chain_2 ------\n";
+        char dest[1000];
+        sprintf(dest, "m %18s %14s %14s %14s\n", "t[m]", "u[m][0]", "u[m][1]", "u[m][2]");
+        fout << string(dest);
+        for (int k = 0; k < 3; k++)
+        {
+            sprintf(dest, "%d %18.10f %14.10f %14.10f %14.10f\n", k, t[k], u[k][0], u[k][1], u[k][2]);
+            fout << string(dest);
+        }
+        fout << "\nCode for rotating Structure A from (x,y,z) to (X,Y,Z):\n"
+                "for(i=0; i<L; i++)\n"
+                "{\n"
+                "   X[i] = t[0] + u[0][0]*x[i] + u[0][1]*y[i] + u[0][2]*z[i]\n"
+                "   Y[i] = t[1] + u[1][0]*x[i] + u[1][1]*y[i] + u[1][2]*z[i]\n"
+                "   Z[i] = t[2] + u[2][0]*x[i] + u[2][1]*y[i] + u[2][2]*z[i]\n"
+                "}\n";
+        fout.close();
+    }
+    else
+        cout << "Open file to output rotation matrix fail.\n";
+}
+
+//output the final results
+void output_results(
+    const string xname, const string yname,
+    const char *chainID1, const char *chainID2,
+    const int xlen, const int ylen, double t[3], double u[3][3],
+    const double TM1, const double TM2,
+    const double TM3, const double TM4, const double TM5,
+    const double rmsd, const double d0_out,
+    const char *seqM, const char *seqxA, const char *seqyA, const double Liden,
+    const int n_ali8, const int n_ali, const int L_ali,
+    const double TM_ali, const double rmsd_ali, const double TM_0,
+    const double d0_0, const double d0A, const double d0B,
+    const double Lnorm_ass, const double d0_scale, 
+    const double d0a, const double d0u, const char* fname_matrix,
+    const int outfmt_opt, const int ter_opt, const char *fname_super,
+    const bool i_opt, const bool I_opt, const int a_opt,
+    const bool u_opt, const bool d_opt)
+{
+    if (outfmt_opt<=0)
+    {
+        printf("\nName of Chain_1: %s%s (to be superimposed onto Chain_2)\n",
+            xname.c_str(), chainID1);
+        printf("Name of Chain_2: %s%s\n", yname.c_str(), chainID2);
+        printf("Length of Chain_1: %d residues\n", xlen);
+        printf("Length of Chain_2: %d residues\n\n", ylen);
+
+        if (i_opt || I_opt)
+            printf("User-specified initial alignment: TM/Lali/rmsd = %7.5lf, %4d, %6.3lf\n", TM_ali, L_ali, rmsd_ali);
+
+        printf("Aligned length= %d, RMSD= %6.2f, Seq_ID=n_identical/n_aligned= %4.3f\n", n_ali8, rmsd, Liden/(n_ali8+0.00000001));
+        printf("TM-score= %6.5f (if normalized by length of Chain_1, i.e., LN=%d, d0=%.2f)\n", TM2, xlen, d0B);
+        printf("TM-score= %6.5f (if normalized by length of Chain_2, i.e., LN=%d, d0=%.2f)\n", TM1, ylen, d0A);
+
+        if (a_opt==1)
+            printf("TM-score= %6.5f (if normalized by average length of two structures, i.e., LN= %.1f, d0= %.2f)\n", TM3, (xlen+ylen)*0.5, d0a);
+        if (u_opt)
+            printf("TM-score= %6.5f (if normalized by user-specified LN=%.2f and d0=%.2f)\n", TM4, Lnorm_ass, d0u);
+        if (d_opt)
+            printf("TM-score= %6.5f (if scaled by user-specified d0= %.2f, and LN= %d)\n", TM5, d0_scale, ylen);
+        printf("(You should use TM-score normalized by length of the reference structure)\n");
+    
+        //output alignment
+        printf("\n(\":\" denotes residue pairs of d < %4.1f Angstrom, ", d0_out);
+        printf("\".\" denotes other aligned residues)\n");
+        printf("%s\n", seqxA);
+        printf("%s\n", seqM);
+        printf("%s\n", seqyA);
+    }
+    else if (outfmt_opt==1)
+    {
+        printf(">%s%s\tL=%d\td0=%.2f\tseqID=%.3f\tTM-score=%.5f\n",
+            xname.c_str(), chainID1, xlen, d0B, Liden/xlen, TM2);
+        printf("%s\n", seqxA);
+        printf(">%s%s\tL=%d\td0=%.2f\tseqID=%.3f\tTM-score=%.5f\n",
+            yname.c_str(), chainID2, ylen, d0A, Liden/ylen, TM1);
+        printf("%s\n", seqyA);
+
+        printf("# Lali=%d\tRMSD=%.2f\tseqID_ali=%.3f\n",
+            n_ali8, rmsd, Liden/(n_ali8+0.00000001));
+
+        if (i_opt || I_opt)
+            printf("# User-specified initial alignment: TM=%.5lf\tLali=%4d\trmsd=%.3lf\n", TM_ali, L_ali, rmsd_ali);
+
+        if(a_opt)
+            printf("# TM-score=%.5f (normalized by average length of two structures: L=%.1f\td0=%.2f)\n", TM3, (xlen+ylen)*0.5, d0a);
+
+        if(u_opt)
+            printf("# TM-score=%.5f (normalized by user-specified L=%.2f\td0=%.2f)\n", TM4, Lnorm_ass, d0u);
+
+        if(d_opt)
+            printf("# TM-score=%.5f (scaled by user-specified d0=%.2f\tL=%d)\n", TM5, d0_scale, ylen);
+
+        printf("$$$$\n");
+    }
+    else if (outfmt_opt==2)
+    {
+        printf("%s%s\t%s%s\t%.4f\t%.4f\t%.2f\t%4.3f\t%4.3f\t%4.3f\t%d\t%d\t%d",
+            xname.c_str(), chainID1, yname.c_str(), chainID2, TM2, TM1, rmsd,
+            Liden/xlen, Liden/ylen, Liden/(n_ali8+0.00000001),
+            xlen, ylen, n_ali8);
+    }
+    cout << endl;
+
+    if (strlen(fname_matrix)) 
+        output_rotation_matrix(fname_matrix, t, u);
+    if (strlen(fname_super))
+        output_superpose(xname, fname_super, t, u, ter_opt);
+}
+
+double standard_TMscore(double **r1, double **r2, double **xtm, double **ytm,
+    double **xt, double **x, double **y, int xlen, int ylen, int invmap[],
+    int& L_ali, double& RMSD, double D0_MIN, double Lnorm, double d0,
+    double d0_search, double score_d8, double t[3], double u[3][3],
+    const int mol_type)
+{
+    D0_MIN = 0.5;
+    Lnorm = ylen;
+    if (mol_type>0) // RNA
+    {
+        if     (Lnorm<=11) d0=0.3; 
+        else if(Lnorm>11 && Lnorm<=15) d0=0.4;
+        else if(Lnorm>15 && Lnorm<=19) d0=0.5;
+        else if(Lnorm>19 && Lnorm<=23) d0=0.6;
+        else if(Lnorm>23 && Lnorm<30)  d0=0.7;
+        else d0=(0.6*pow((Lnorm*1.0-0.5), 1.0/2)-2.5);
+    }
+    else
+    {
+        if (Lnorm > 21) d0=(1.24*pow((Lnorm*1.0-15), 1.0/3) -1.8);
+        else d0 = D0_MIN;
+        if (d0 < D0_MIN) d0 = D0_MIN;
+    }
+    double d0_input = d0;// Scaled by seq_min
+
+    double tmscore;// collected alined residues from invmap
+    int n_al = 0;
+    int i;
+    for (int j = 0; j<ylen; j++)
+    {
+        i = invmap[j];
+        if (i >= 0)
+        {
+            xtm[n_al][0] = x[i][0];
+            xtm[n_al][1] = x[i][1];
+            xtm[n_al][2] = x[i][2];
+
+            ytm[n_al][0] = y[j][0];
+            ytm[n_al][1] = y[j][1];
+            ytm[n_al][2] = y[j][2];
+
+            r1[n_al][0] = x[i][0];
+            r1[n_al][1] = x[i][1];
+            r1[n_al][2] = x[i][2];
+
+            r2[n_al][0] = y[j][0];
+            r2[n_al][1] = y[j][1];
+            r2[n_al][2] = y[j][2];
+
+            n_al++;
+        }
+        else if (i != -1) PrintErrorAndQuit("Wrong map!\n");
+    }
+    L_ali = n_al;
+
+    Kabsch(r1, r2, n_al, 0, &RMSD, t, u);
+    RMSD = sqrt( RMSD/(1.0*n_al) );
+    
+    int temp_simplify_step = 1;
+    int temp_score_sum_method = 0;
+    d0_search = d0_input;
+    double rms = 0.0;
+    tmscore = TMscore8_search_standard(r1, r2, xtm, ytm, xt, n_al, t, u,
+        temp_simplify_step, temp_score_sum_method, &rms, d0_input,
+        score_d8, d0);
+    tmscore = tmscore * n_al / (1.0*Lnorm);
+
+    return tmscore;
+}
+
+/* copy the value of t and u into t0,u0 */
+void copy_t_u(double t[3], double u[3][3], double t0[3], double u0[3][3])
+{
+    int i,j;
+    for (i=0;i<3;i++)
+    {
+        t0[i]=t[i];
+        for (j=0;j<3;j++) u0[i][j]=u[i][j];
+    }
+}
+
+/* calculate approximate TM-score given rotation matrix */
+double approx_TM(const int xlen, const int ylen, const int a_opt,
+    double **xa, double **ya, double t[3], double u[3][3],
+    const int invmap0[], const int mol_type)
+{
+    double Lnorm_0=ylen; // normalized by the second protein
+    if (a_opt==-2 && xlen>ylen) Lnorm_0=xlen;      // longer
+    else if (a_opt==-1 && xlen<ylen) Lnorm_0=xlen; // shorter
+    else if (a_opt==1) Lnorm_0=(xlen+ylen)/2.;     // average
+    
+    double D0_MIN;
+    double Lnorm;
+    double d0;
+    double d0_search;
+    parameter_set4final(Lnorm_0, D0_MIN, Lnorm, d0, d0_search, mol_type);
+    double TMtmp=0;
+    double d;
+    double xtmp[3]={0,0,0};
+
+    for(int i=0,j=0; j<ylen; j++)
+    {
+        i=invmap0[j];
+        if(i>=0)//aligned
+        {
+            transform(t, u, &xa[i][0], &xtmp[0]);
+            d=sqrt(dist(&xtmp[0], &ya[j][0]));
+            TMtmp+=1/(1+(d/d0)*(d/d0));
+            //if (d <= score_d8) TMtmp+=1/(1+(d/d0)*(d/d0));
+        }
+    }
+    TMtmp/=Lnorm_0;
+    return TMtmp;
+}
+
+void clean_up_after_approx_TM(int *invmap0, int *invmap,
+    double **score, bool **path, double **val, double **xtm, double **ytm,
+    double **xt, double **r1, double **r2, const int xlen, const int minlen)
+{
+    delete [] invmap0;
+    delete [] invmap;
+    DeleteArray(&score, xlen+1);
+    DeleteArray(&path, xlen+1);
+    DeleteArray(&val, xlen+1);
+    DeleteArray(&xtm, minlen);
+    DeleteArray(&ytm, minlen);
+    DeleteArray(&xt, xlen);
+    DeleteArray(&r1, minlen);
+    DeleteArray(&r2, minlen);
+    return;
+}
+
+/* Entry function for TM-align. Return TM-score calculation status:
+ * 0   - full TM-score calculation 
+ * 1   - terminated due to exception
+ * 2-7 - pre-terminated due to low TM-score */
+int TMalign_main(double **xa, double **ya,
+    const char *seqx, const char *seqy, const int *secx, const int *secy,
+    double t0[3], double u0[3][3],
+    double &TM1, double &TM2, double &TM3, double &TM4, double &TM5,
+    double &d0_0, double &TM_0,
+    double &d0A, double &d0B, double &d0u, double &d0a, double &d0_out,
+    string &seqM, string &seqxA, string &seqyA,
+    double &rmsd0, int &L_ali, double &Liden,
+    double &TM_ali, double &rmsd_ali, int &n_ali, int &n_ali8,
+    const int xlen, const int ylen,
+    const vector<string> sequence, const double Lnorm_ass,
+    const double d0_scale,
+    const bool i_opt, const bool I_opt, const int a_opt,
+    const bool u_opt, const bool d_opt, const bool fast_opt,
+    const int mol_type, const double TMcut=-1)
+{
+    double D0_MIN;        //for d0
+    double Lnorm;         //normalization length
+    double score_d8,d0,d0_search,dcu0;//for TMscore search
+    double t[3], u[3][3]; //Kabsch translation vector and rotation matrix
+    double **score;       // Input score table for dynamic programming
+    bool   **path;        // for dynamic programming  
+    double **val;         // for dynamic programming  
+    double **xtm, **ytm;  // for TMscore search engine
+    double **xt;          //for saving the superposed version of r_1 or xtm
+    double **r1, **r2;    // for Kabsch rotation
+
+    /***********************/
+    /* allocate memory     */
+    /***********************/
+    int minlen = min(xlen, ylen);
+    NewArray(&score, xlen+1, ylen+1);
+    NewArray(&path, xlen+1, ylen+1);
+    NewArray(&val, xlen+1, ylen+1);
+    NewArray(&xtm, minlen, 3);
+    NewArray(&ytm, minlen, 3);
+    NewArray(&xt, xlen, 3);
+    NewArray(&r1, minlen, 3);
+    NewArray(&r2, minlen, 3);
+
+    /***********************/
+    /*    parameter set    */
+    /***********************/
+    parameter_set4search(xlen, ylen, D0_MIN, Lnorm, 
+        score_d8, d0, d0_search, dcu0);
+    int simplify_step    = 40; //for similified search engine
+    int score_sum_method = 8;  //for scoring method, whether only sum over pairs with dis<score_d8
+
+    int i;
+    int *invmap0         = new int[ylen+1];
+    int *invmap          = new int[ylen+1];
+    double TM, TMmax=-1;
+    for(i=0; i<ylen; i++) invmap0[i]=-1;
+
+    double ddcc=0.4;
+    if (Lnorm <= 40) ddcc=0.1;   //Lnorm was setted in parameter_set4search
+    double local_d0_search = d0_search;
+
+    //************************************************//
+    //    get initial alignment from user's input:    //
+    //    Stick to the initial alignment              //
+    //************************************************//
+    bool bAlignStick = false;
+    if (I_opt)// if input has set parameter for "-I"
+    {
+        // In the original code, this loop starts from 1, which is
+        // incorrect. Fortran starts from 1 but C++ should starts from 0.
+        for (int j = 0; j < ylen; j++)// Set aligned position to be "-1"
+            invmap[j] = -1;
+
+        int i1 = -1;// in C version, index starts from zero, not from one
+        int i2 = -1;
+        int L1 = sequence[0].size();
+        int L2 = sequence[1].size();
+        int L = min(L1, L2);// Get positions for aligned residues
+        for (int kk1 = 0; kk1 < L; kk1++)
+        {
+            if (sequence[0][kk1] != '-') i1++;
+            if (sequence[1][kk1] != '-')
+            {
+                i2++;
+                if (i2 >= ylen || i1 >= xlen) kk1 = L;
+                else if (sequence[0][kk1] != '-') invmap[i2] = i1;
+            }
+        }
+
+        //--------------- 2. Align proteins from original alignment
+        double prevD0_MIN = D0_MIN;// stored for later use
+        int prevLnorm = Lnorm;
+        double prevd0 = d0;
+        TM_ali = standard_TMscore(r1, r2, xtm, ytm, xt, xa, ya, xlen, ylen,
+            invmap, L_ali, rmsd_ali, D0_MIN, Lnorm, d0, d0_search, score_d8,
+            t, u, mol_type);
+        D0_MIN = prevD0_MIN;
+        Lnorm = prevLnorm;
+        d0 = prevd0;
+        TM = detailed_search_standard(r1, r2, xtm, ytm, xt, xa, ya, xlen, ylen,
+            invmap, t, u, 40, 8, local_d0_search, true, Lnorm, score_d8, d0);
+        if (TM > TMmax)
+        {
+            TMmax = TM;
+            for (i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+        }
+        bAlignStick = true;
+    }
+
+    /******************************************************/
+    /*    get initial alignment with gapless threading    */
+    /******************************************************/
+    if (!bAlignStick)
+    {
+        get_initial(r1, r2, xtm, ytm, xa, ya, xlen, ylen, invmap0, d0,
+            d0_search, fast_opt, t, u);
+        TM = detailed_search(r1, r2, xtm, ytm, xt, xa, ya, xlen, ylen, invmap0,
+            t, u, simplify_step, score_sum_method, local_d0_search, Lnorm,
+            score_d8, d0);
+        if (TM>TMmax) TMmax = TM;
+        if (TMcut>0) copy_t_u(t, u, t0, u0);
+        //run dynamic programing iteratively to find the best alignment
+        TM = DP_iter(r1, r2, xtm, ytm, xt, path, val, xa, ya, xlen, ylen,
+             t, u, invmap, 0, 2, (fast_opt)?2:30, local_d0_search,
+             D0_MIN, Lnorm, d0, score_d8);
+        if (TM>TMmax)
+        {
+            TMmax = TM;
+            for (int i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+            if (TMcut>0) copy_t_u(t, u, t0, u0);
+        }
+
+        if (TMcut>0) // pre-terminate if TM-score is too low
+        {
+            double TMtmp=approx_TM(xlen, ylen, a_opt,
+                xa, ya, t0, u0, invmap0, mol_type);
+
+            if (TMtmp<0.5*TMcut)
+            {
+                TM1=TM2=TM3=TM4=TM5=TMtmp;
+                clean_up_after_approx_TM(invmap0, invmap, score, path, val,
+                    xtm, ytm, xt, r1, r2, xlen, minlen);
+                return 2;
+            }
+        }
+
+        /************************************************************/
+        /*    get initial alignment based on secondary structure    */
+        /************************************************************/
+        get_initial_ss(path, val, secx, secy, xlen, ylen, invmap);
+        TM = detailed_search(r1, r2, xtm, ytm, xt, xa, ya, xlen, ylen, invmap,
+            t, u, simplify_step, score_sum_method, local_d0_search, Lnorm,
+            score_d8, d0);
+        if (TM>TMmax)
+        {
+            TMmax = TM;
+            for (int i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+            if (TMcut>0) copy_t_u(t, u, t0, u0);
+        }
+        if (TM > TMmax*0.2)
+        {
+            TM = DP_iter(r1, r2, xtm, ytm, xt, path, val, xa, ya,
+                xlen, ylen, t, u, invmap, 0, 2, (fast_opt)?2:30,
+                local_d0_search, D0_MIN, Lnorm, d0, score_d8);
+            if (TM>TMmax)
+            {
+                TMmax = TM;
+                for (int i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+                if (TMcut>0) copy_t_u(t, u, t0, u0);
+            }
+        }
+
+        if (TMcut>0) // pre-terminate if TM-score is too low
+        {
+            double TMtmp=approx_TM(xlen, ylen, a_opt,
+                xa, ya, t0, u0, invmap0, mol_type);
+
+            if (TMtmp<0.52*TMcut)
+            {
+                TM1=TM2=TM3=TM4=TM5=TMtmp;
+                clean_up_after_approx_TM(invmap0, invmap, score, path, val,
+                    xtm, ytm, xt, r1, r2, xlen, minlen);
+                return 3;
+            }
+        }
+
+        /************************************************************/
+        /*    get initial alignment based on local superposition    */
+        /************************************************************/
+        //=initial5 in original TM-align
+        if (get_initial5( r1, r2, xtm, ytm, path, val, xa, ya,
+            xlen, ylen, invmap, d0, d0_search, fast_opt, D0_MIN))
+        {
+            TM = detailed_search(r1, r2, xtm, ytm, xt, xa, ya, xlen, ylen,
+                invmap, t, u, simplify_step, score_sum_method,
+                local_d0_search, Lnorm, score_d8, d0);
+            if (TM>TMmax)
+            {
+                TMmax = TM;
+                for (int i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+                if (TMcut>0) copy_t_u(t, u, t0, u0);
+            }
+            if (TM > TMmax*ddcc)
+            {
+                TM = DP_iter(r1, r2, xtm, ytm, xt, path, val, xa, ya,
+                    xlen, ylen, t, u, invmap, 0, 2, 2, local_d0_search,
+                    D0_MIN, Lnorm, d0, score_d8);
+                if (TM>TMmax)
+                {
+                    TMmax = TM;
+                    for (int i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+                    if (TMcut>0) copy_t_u(t, u, t0, u0);
+                }
+            }
+        }
+        else
+            cerr << "\n\nWarning: initial alignment from local superposition fail!\n\n" << endl;
+
+        if (TMcut>0) // pre-terminate if TM-score is too low
+        {
+            double TMtmp=approx_TM(xlen, ylen, a_opt,
+                xa, ya, t0, u0, invmap0, mol_type);
+
+            if (TMtmp<0.54*TMcut)
+            {
+                TM1=TM2=TM3=TM4=TM5=TMtmp;
+                clean_up_after_approx_TM(invmap0, invmap, score, path, val,
+                    xtm, ytm, xt, r1, r2, xlen, minlen);
+                return 4;
+            }
+        }
+
+        /********************************************************************/
+        /* get initial alignment by local superposition+secondary structure */
+        /********************************************************************/
+        //=initial3 in original TM-align
+        get_initial_ssplus(r1, r2, score, path, val, secx, secy, xa, ya,
+            xlen, ylen, invmap0, invmap, D0_MIN, d0);
+        TM = detailed_search(r1, r2, xtm, ytm, xt, xa, ya, xlen, ylen, invmap,
+             t, u, simplify_step, score_sum_method, local_d0_search, Lnorm,
+             score_d8, d0);
+        if (TM>TMmax)
+        {
+            TMmax = TM;
+            for (i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+            if (TMcut>0) copy_t_u(t, u, t0, u0);
+        }
+        if (TM > TMmax*ddcc)
+        {
+            TM = DP_iter(r1, r2, xtm, ytm, xt, path, val, xa, ya,
+                xlen, ylen, t, u, invmap, 0, 2, (fast_opt)?2:30,
+                local_d0_search, D0_MIN, Lnorm, d0, score_d8);
+            if (TM>TMmax)
+            {
+                TMmax = TM;
+                for (i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+                if (TMcut>0) copy_t_u(t, u, t0, u0);
+            }
+        }
+
+        if (TMcut>0) // pre-terminate if TM-score is too low
+        {
+            double TMtmp=approx_TM(xlen, ylen, a_opt,
+                xa, ya, t0, u0, invmap0, mol_type);
+
+            if (TMtmp<0.56*TMcut)
+            {
+                TM1=TM2=TM3=TM4=TM5=TMtmp;
+                clean_up_after_approx_TM(invmap0, invmap, score, path, val,
+                    xtm, ytm, xt, r1, r2, xlen, minlen);
+                return 5;
+            }
+        }
+
+        /*******************************************************************/
+        /*    get initial alignment based on fragment gapless threading    */
+        /*******************************************************************/
+        //=initial4 in original TM-align
+        get_initial_fgt(r1, r2, xtm, ytm, xa, ya, xlen, ylen,
+            invmap, d0, d0_search, dcu0, fast_opt, t, u);
+        TM = detailed_search(r1, r2, xtm, ytm, xt, xa, ya, xlen, ylen, invmap,
+            t, u, simplify_step, score_sum_method, local_d0_search, Lnorm,
+            score_d8, d0);
+        if (TM>TMmax)
+        {
+            TMmax = TM;
+            for (i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+            if (TMcut>0) copy_t_u(t, u, t0, u0);
+        }
+        if (TM > TMmax*ddcc)
+        {
+            TM = DP_iter(r1, r2, xtm, ytm, xt, path, val, xa, ya,
+                xlen, ylen, t, u, invmap, 1, 2, 2, local_d0_search, D0_MIN,
+                Lnorm, d0, score_d8);
+            if (TM>TMmax)
+            {
+                TMmax = TM;
+                for (i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+                if (TMcut>0) copy_t_u(t, u, t0, u0);
+            }
+        }
+
+        if (TMcut>0) // pre-terminate if TM-score is too low
+        {
+            double TMtmp=approx_TM(xlen, ylen, a_opt,
+                xa, ya, t0, u0, invmap0, mol_type);
+
+            if (TMtmp<0.58*TMcut)
+            {
+                TM1=TM2=TM3=TM4=TM5=TMtmp;
+                clean_up_after_approx_TM(invmap0, invmap, score, path, val,
+                    xtm, ytm, xt, r1, r2, xlen, minlen);
+                return 6;
+            }
+        }
+
+        //************************************************//
+        //    get initial alignment from user's input:    //
+        //************************************************//
+        if (i_opt)// if input has set parameter for "-i"
+        {
+            for (int j = 0; j < ylen; j++)// Set aligned position to be "-1"
+                invmap[j] = -1;
+
+            int i1 = -1;// in C version, index starts from zero, not from one
+            int i2 = -1;
+            int L1 = sequence[0].size();
+            int L2 = sequence[1].size();
+            int L = min(L1, L2);// Get positions for aligned residues
+            for (int kk1 = 0; kk1 < L; kk1++)
+            {
+                if (sequence[0][kk1] != '-')
+                    i1++;
+                if (sequence[1][kk1] != '-')
+                {
+                    i2++;
+                    if (i2 >= ylen || i1 >= xlen) kk1 = L;
+                    else if (sequence[0][kk1] != '-') invmap[i2] = i1;
+                }
+            }
+
+            //--------------- 2. Align proteins from original alignment
+            double prevD0_MIN = D0_MIN;// stored for later use
+            int prevLnorm = Lnorm;
+            double prevd0 = d0;
+            TM_ali = standard_TMscore(r1, r2, xtm, ytm, xt, xa, ya,
+                xlen, ylen, invmap, L_ali, rmsd_ali, D0_MIN, Lnorm, d0,
+                d0_search, score_d8, t, u, mol_type);
+            D0_MIN = prevD0_MIN;
+            Lnorm = prevLnorm;
+            d0 = prevd0;
+
+            TM = detailed_search_standard(r1, r2, xtm, ytm, xt, xa, ya,
+                xlen, ylen, invmap, t, u, 40, 8, local_d0_search, true, Lnorm,
+                score_d8, d0);
+            if (TM > TMmax)
+            {
+                TMmax = TM;
+                for (i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+            }
+            // Different from get_initial, get_initial_ss and get_initial_ssplus
+            TM = DP_iter(r1, r2, xtm, ytm, xt, path, val, xa, ya,
+                xlen, ylen, t, u, invmap, 0, 2, (fast_opt)?2:30,
+                local_d0_search, D0_MIN, Lnorm, d0, score_d8);
+            if (TM>TMmax)
+            {
+                TMmax = TM;
+                for (i = 0; i<ylen; i++) invmap0[i] = invmap[i];
+            }
+        }
+    }
+
+
+
+    //*******************************************************************//
+    //    The alignment will not be changed any more in the following    //
+    //*******************************************************************//
+    //check if the initial alignment is generated approriately
+    bool flag=false;
+    for(i=0; i<ylen; i++)
+    {
+        if(invmap0[i]>=0)
+        {
+            flag=true;
+            break;
+        }
+    }
+    if(!flag)
+    {
+        cout << "There is no alignment between the two proteins!" << endl;
+        cout << "Program stop with no result!" << endl;
+        return 1;
+    }
+
+    /* last TM-score pre-termination */
+    if (TMcut>0)
+    {
+        double TMtmp=approx_TM(xlen, ylen, a_opt,
+            xa, ya, t0, u0, invmap0, mol_type);
+
+        if (TMtmp<0.6*TMcut)
+        {
+            TM1=TM2=TM3=TM4=TM5=TMtmp;
+            clean_up_after_approx_TM(invmap0, invmap, score, path, val,
+                xtm, ytm, xt, r1, r2, xlen, minlen);
+            return 7;
+        }
+    }
+
+    //********************************************************************//
+    //    Detailed TMscore search engine --> prepare for final TMscore    //
+    //********************************************************************//
+    //run detailed TMscore search engine for the best alignment, and
+    //extract the best rotation matrix (t, u) for the best alginment
+    simplify_step=1;
+    if (fast_opt) simplify_step=40;
+    score_sum_method=8;
+    TM = detailed_search_standard(r1, r2, xtm, ytm, xt, xa, ya, xlen, ylen,
+        invmap0, t, u, simplify_step, score_sum_method, local_d0_search,
+        false, Lnorm, score_d8, d0);
+
+    //select pairs with dis<d8 for final TMscore computation and output alignment
+    int k=0;
+    int *m1, *m2;
+    double d;
+    m1=new int[xlen]; //alignd index in x
+    m2=new int[ylen]; //alignd index in y
+    do_rotation(xa, xt, xlen, t, u);
+    k=0;
+    for(int j=0; j<ylen; j++)
+    {
+        i=invmap0[j];
+        if(i>=0)//aligned
+        {
+            n_ali++;
+            d=sqrt(dist(&xt[i][0], &ya[j][0]));
+            if (d <= score_d8 || (I_opt == true))
+            {
+                m1[k]=i;
+                m2[k]=j;
+
+                xtm[k][0]=xa[i][0];
+                xtm[k][1]=xa[i][1];
+                xtm[k][2]=xa[i][2];
+
+                ytm[k][0]=ya[j][0];
+                ytm[k][1]=ya[j][1];
+                ytm[k][2]=ya[j][2];
+
+                r1[k][0] = xt[i][0];
+                r1[k][1] = xt[i][1];
+                r1[k][2] = xt[i][2];
+                r2[k][0] = ya[j][0];
+                r2[k][1] = ya[j][1];
+                r2[k][2] = ya[j][2];
+
+                k++;
+            }
+        }
+    }
+    n_ali8=k;
+
+    Kabsch(r1, r2, n_ali8, 0, &rmsd0, t, u);// rmsd0 is used for final output, only recalculate rmsd0, not t & u
+    rmsd0 = sqrt(rmsd0 / n_ali8);
+
+
+    //****************************************//
+    //              Final TMscore             //
+    //    Please set parameters for output    //
+    //****************************************//
+    double rmsd;
+    simplify_step=1;
+    score_sum_method=0;
+    double Lnorm_0=ylen;
+
+
+    //normalized by length of structure A
+    parameter_set4final(Lnorm_0, D0_MIN, Lnorm, d0, d0_search, mol_type);
+    d0A=d0;
+    d0_0=d0A;
+    local_d0_search = d0_search;
+    TM1 = TMscore8_search(r1, r2, xtm, ytm, xt, n_ali8, t0, u0, simplify_step,
+        score_sum_method, &rmsd, local_d0_search, Lnorm, score_d8, d0);
+    TM_0 = TM1;
+
+    //normalized by length of structure B
+    parameter_set4final(xlen+0.0, D0_MIN, Lnorm, d0, d0_search, mol_type);
+    d0B=d0;
+    local_d0_search = d0_search;
+    TM2 = TMscore8_search(r1, r2, xtm, ytm, xt, n_ali8, t, u, simplify_step,
+        score_sum_method, &rmsd, local_d0_search, Lnorm, score_d8, d0);
+
+    double Lnorm_d0;
+    if (a_opt>0)
+    {
+        //normalized by average length of structures A, B
+        Lnorm_0=(xlen+ylen)*0.5;
+        parameter_set4final(Lnorm_0, D0_MIN, Lnorm, d0, d0_search, mol_type);
+        d0a=d0;
+        d0_0=d0a;
+        local_d0_search = d0_search;
+
+        TM3 = TMscore8_search(r1, r2, xtm, ytm, xt, n_ali8, t0, u0,
+            simplify_step, score_sum_method, &rmsd, local_d0_search, Lnorm,
+            score_d8, d0);
+        TM_0=TM3;
+    }
+    if (u_opt)
+    {
+        //normalized by user assigned length
+        parameter_set4final(Lnorm_ass, D0_MIN, Lnorm,
+            d0, d0_search, mol_type);
+        d0u=d0;
+        d0_0=d0u;
+        Lnorm_0=Lnorm_ass;
+        local_d0_search = d0_search;
+        TM4 = TMscore8_search(r1, r2, xtm, ytm, xt, n_ali8, t0, u0,
+            simplify_step, score_sum_method, &rmsd, local_d0_search, Lnorm,
+            score_d8, d0);
+        TM_0=TM4;
+    }
+    if (d_opt)
+    {
+        //scaled by user assigned d0
+        parameter_set4scale(ylen, d0_scale, Lnorm, d0, d0_search);
+        d0_out=d0_scale;
+        d0_0=d0_scale;
+        //Lnorm_0=ylen;
+        Lnorm_d0=Lnorm_0;
+        local_d0_search = d0_search;
+        TM5 = TMscore8_search(r1, r2, xtm, ytm, xt, n_ali8, t0, u0,
+            simplify_step, score_sum_method, &rmsd, local_d0_search, Lnorm,
+            score_d8, d0);
+        TM_0=TM5;
+    }
+
+    /* derive alignment from superposition */
+    int ali_len=xlen+ylen; //maximum length of alignment
+    seqxA.assign(ali_len,'-');
+    seqM.assign( ali_len,' ');
+    seqyA.assign(ali_len,'-');
+    
+    do_rotation(xa, xt, xlen, t, u);
+
+    int kk=0, i_old=0, j_old=0;
+    d=0;
+    for(int k=0; k<n_ali8; k++)
+    {
+        for(int i=i_old; i<m1[k]; i++)
+        {
+            //align x to gap
+            seqxA[kk]=seqx[i];
+            seqyA[kk]='-';
+            seqM[kk]=' ';                    
+            kk++;
+        }
+
+        for(int j=j_old; j<m2[k]; j++)
+        {
+            //align y to gap
+            seqxA[kk]='-';
+            seqyA[kk]=seqy[j];
+            seqM[kk]=' ';
+            kk++;
+        }
+
+        seqxA[kk]=seqx[m1[k]];
+        seqyA[kk]=seqy[m2[k]];
+        Liden+=(seqxA[kk]==seqyA[kk]);
+        d=sqrt(dist(&xt[m1[k]][0], &ya[m2[k]][0]));
+        if(d<d0_out) seqM[kk]=':';
+        else         seqM[kk]='.';
+        kk++;  
+        i_old=m1[k]+1;
+        j_old=m2[k]+1;
+    }
+
+    //tail
+    for(int i=i_old; i<xlen; i++)
+    {
+        //align x to gap
+        seqxA[kk]=seqx[i];
+        seqyA[kk]='-';
+        seqM[kk]=' ';
+        kk++;
+    }    
+    for(int j=j_old; j<ylen; j++)
+    {
+        //align y to gap
+        seqxA[kk]='-';
+        seqyA[kk]=seqy[j];
+        seqM[kk]=' ';
+        kk++;
+    }
+    seqxA=seqxA.substr(0,kk);
+    seqyA=seqyA.substr(0,kk);
+    seqM =seqM.substr(0,kk);
+
+    /* free memory */
+    clean_up_after_approx_TM(invmap0, invmap, score, path, val,
+        xtm, ytm, xt, r1, r2, xlen, minlen);
+    delete [] m1;
+    delete [] m2;
+    return 0; // zero for no exception
+}
diff --git a/modules/bindings/src/tmalign/align.txt b/modules/bindings/src/tmalign/align.txt
new file mode 100644
index 000000000..0c9e2fdbd
--- /dev/null
+++ b/modules/bindings/src/tmalign/align.txt
@@ -0,0 +1,23 @@
+> model1 (this line should start with '>')
+TNQKTKELSNLIETFAEQSRVLEKECT-KIGSKRDSKELRYKIETELIPNCTSVRDKIESN-I-L
+IH-----QNGKLSADFKNLKTKYQSLQQSYNQRKSLFPLK
+
+> model2 (this line should start with '>')
+--E--DPFQQVVKDTKEQLNRINNYITRHNT---AD-DQEEEIQD-ILKDVEETIVDLDRSIIVM
+K-RDENEDVSGREAQVKNIKQQLDALKLRFDRR--I----
+
+>>>> the following lines (starting from third '>') will be ignored by TM-align: <<<<<
+
+1, this is an example of fasta-format file to specify seed alignment used
+   by TM-align structure alignment program.
+
+2, This file should include alignments for two protein sequences. The 
+   alignment entry can have any width (but should be <5,000).
+
+3, Each alignment should start from the first amino acid of the target
+   sequences. The ending unaligned residure can be ignored.
+
+4, There should be at least three pairs of aligned residues, because
+   superposition for <3 pairs of atoms is not mathematically defined.
+
+5, More explanation on FASTA format can be seen at http://zhanglab.ccmb.med.umich.edu/FASTA
diff --git a/modules/bindings/src/tmalign/basic_fun.h b/modules/bindings/src/tmalign/basic_fun.h
new file mode 100644
index 000000000..57f000d08
--- /dev/null
+++ b/modules/bindings/src/tmalign/basic_fun.h
@@ -0,0 +1,763 @@
+/* File parsing and basic geometry operations */
+#ifndef TMalign_basic_fun_h
+#define TMalign_basic_fun_h 1
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <time.h>
+#include <string.h>
+#include <malloc.h>
+
+#include <sstream>
+#include <iostream>
+#include <iomanip>
+#include <fstream>
+#include <vector>
+#include <iterator>
+#include <algorithm>
+#include <string>
+#include <iomanip>
+#include <map>
+
+#include "pstream.h" // For reading gzip and bz2 compressed files
+
+using namespace std;
+
+
+void PrintErrorAndQuit(const string sErrorString)
+{
+    cout << sErrorString << endl;
+    exit(1);
+}
+
+template <typename T> inline T getmin(const T &a, const T &b)
+{
+    return b<a?b:a;
+}
+
+template <class A> void NewArray(A *** array, int Narray1, int Narray2)
+{
+    *array=new A* [Narray1];
+    for(int i=0; i<Narray1; i++) *(*array+i)=new A [Narray2];
+}
+
+template <class A> void DeleteArray(A *** array, int Narray)
+{
+    for(int i=0; i<Narray; i++)
+        if(*(*array+i)) delete [] *(*array+i);
+    if(Narray) delete [] (*array);
+    (*array)=NULL;
+}
+
+string AAmap(char A)
+{
+    if (A=='A') return "ALA";
+    if (A=='B') return "ASX";
+    if (A=='C') return "CYS";
+    if (A=='D') return "ASP";
+    if (A=='E') return "GLU";
+    if (A=='F') return "PHE";
+    if (A=='G') return "GLY";
+    if (A=='H') return "HIS";
+    if (A=='I') return "ILE";
+    if (A=='K') return "LYS";
+    if (A=='L') return "LEU";
+    if (A=='M') return "MET";
+    if (A=='N') return "ASN";
+    if (A=='O') return "PYL";
+    if (A=='P') return "PRO";
+    if (A=='Q') return "GLN";
+    if (A=='R') return "ARG";
+    if (A=='S') return "SER";
+    if (A=='T') return "THR";
+    if (A=='U') return "SEC";
+    if (A=='V') return "VAL";
+    if (A=='W') return "TRP";    
+    if (A=='Y') return "TYR";
+    if (A=='Z') return "GLX";
+    if ('a'<=A && A<='z') return "  "+toupper(A);
+    return "UNK";
+}
+
+char AAmap(const string &AA)
+{
+    if (AA.compare("ALA")==0) return 'A';
+    if (AA.compare("ASX")==0) return 'B';
+    if (AA.compare("CYS")==0) return 'C';
+    if (AA.compare("ASP")==0) return 'D';
+    if (AA.compare("GLU")==0) return 'E';
+    if (AA.compare("PHE")==0) return 'F';
+    if (AA.compare("GLY")==0) return 'G';
+    if (AA.compare("HIS")==0) return 'H';
+    if (AA.compare("ILE")==0) return 'I';
+    if (AA.compare("LYS")==0) return 'K';
+    if (AA.compare("LEU")==0) return 'L';
+    if (AA.compare("MET")==0 || AA.compare("MSE")==0) return 'M';
+    if (AA.compare("ASN")==0) return 'N';
+    if (AA.compare("PYL")==0) return 'O';
+    if (AA.compare("PRO")==0) return 'P';
+    if (AA.compare("GLN")==0) return 'Q';
+    if (AA.compare("ARG")==0) return 'R';
+    if (AA.compare("SER")==0) return 'S';
+    if (AA.compare("THR")==0) return 'T';
+    if (AA.compare("SEC")==0) return 'U';
+    if (AA.compare("VAL")==0) return 'V';
+    if (AA.compare("TRP")==0) return 'W';    
+    if (AA.compare("TYR")==0) return 'Y';
+    if (AA.compare("GLX")==0) return 'Z';
+
+    if (AA.compare(0,2," D")==0) return tolower(AA[2]);
+    if (AA.compare(0,2,"  ")==0) return tolower(AA[2]);
+    return 'X';
+}
+
+/* split a long string into vectors by whitespace 
+ * line          - input string
+ * line_vec      - output vector 
+ * delimiter     - delimiter */
+void split(const string &line, vector<string> &line_vec,
+    const char delimiter=' ')
+{
+    bool within_word = false;
+    for (int pos=0;pos<line.size();pos++)
+    {
+        if (line[pos]==delimiter)
+        {
+            within_word = false;
+            continue;
+        }
+        if (!within_word)
+        {
+            within_word = true;
+            line_vec.push_back("");
+        }
+        line_vec.back()+=line[pos];
+    }
+}
+
+size_t get_PDB_lines(const string filename,
+    vector<vector<string> >&PDB_lines, vector<string> &chainID_list,
+    vector<int> &mol_vec, const int ter_opt=3, const int infmt_opt=-1,
+    const string atom_opt="auto", const int split_opt=0)
+{
+    size_t i=0; // resi i.e. atom index
+    string line;
+    char chainID=0;
+    string resi="";
+    bool select_atom=false;
+    size_t model_idx=0;
+    vector<string> tmp_str_vec;
+    
+    int compress_type=0; // uncompressed file
+    ifstream fin;
+    redi::ipstream fin_gz; // if file is compressed
+    if (filename.size()>=3 && 
+        filename.substr(filename.size()-3,3)==".gz")
+    {
+        fin_gz.open("zcat "+filename);
+        compress_type=1;
+    }
+    else if (filename.size()>=4 && 
+        filename.substr(filename.size()-4,4)==".bz2")
+    {
+        fin_gz.open("bzcat "+filename);
+        compress_type=2;
+    }
+    else fin.open(filename.c_str());
+
+    if (infmt_opt==0||infmt_opt==-1) // PDB format
+    {
+        while (compress_type?fin_gz.good():fin.good())
+        {
+            if (compress_type) getline(fin_gz, line);
+            else               getline(fin, line);
+            if (infmt_opt==-1 && line.compare(0,5,"loop_")==0) // PDBx/mmCIF
+                return get_PDB_lines(filename,PDB_lines,chainID_list,
+                    mol_vec, ter_opt, 3, atom_opt, split_opt);
+            if (i > 0)
+            {
+                if      (ter_opt>=1 && line.compare(0,3,"END")==0) break;
+                else if (ter_opt>=3 && line.compare(0,3,"TER")==0) break;
+            }
+            if (split_opt && line.compare(0,3,"END")==0) chainID=0;
+            if (line.compare(0, 6, "ATOM  ")==0 && line.size()>=54 &&
+               (line[16]==' ' || line[16]=='A'))
+            {
+                if (atom_opt=="auto")
+                {
+                    if (line[17]==' ' && (line[18]=='D'||line[18]==' '))
+                         select_atom=(line.compare(12,4," C3'")==0);
+                    else select_atom=(line.compare(12,4," CA ")==0);
+                }
+                else     select_atom=(line.compare(12,4,atom_opt)==0);
+                if (select_atom)
+                {
+                    if (!chainID)
+                    {
+                        chainID=line[21];
+                        model_idx++;
+                        stringstream i8_stream;
+                        i=0;
+                        if (split_opt==2) // split by chain
+                        {
+                            if (chainID==' ')
+                            {
+                                if (ter_opt>=1) i8_stream << ":_";
+                                else i8_stream<<':'<<model_idx<<":_";
+                            }
+                            else
+                            {
+                                if (ter_opt>=1) i8_stream << ':' << chainID;
+                                else i8_stream<<':'<<model_idx<<':'<<chainID;
+                            }
+                            chainID_list.push_back(i8_stream.str());
+                        }
+                        else if (split_opt==1) // split by model
+                        {
+                            i8_stream << ':' << model_idx;
+                            chainID_list.push_back(i8_stream.str());
+                        }
+                        PDB_lines.push_back(tmp_str_vec);
+                        mol_vec.push_back(0);
+                    }
+                    else if (ter_opt>=2 && chainID!=line[21]) break;
+                    if (split_opt==2 && chainID!=line[21])
+                    {
+                        chainID=line[21];
+                        i=0;
+                        stringstream i8_stream;
+                        if (chainID==' ')
+                        {
+                            if (ter_opt>=1) i8_stream << ":_";
+                            else i8_stream<<':'<<model_idx<<":_";
+                        }
+                        else
+                        {
+                            if (ter_opt>=1) i8_stream << ':' << chainID;
+                            else i8_stream<<':'<<model_idx<<':'<<chainID;
+                        }
+                        chainID_list.push_back(i8_stream.str());
+                        PDB_lines.push_back(tmp_str_vec);
+                        mol_vec.push_back(0);
+                    }
+
+                    if (resi==line.substr(22,5))
+                        cerr<<"Warning! Duplicated residue "<<resi<<endl;
+                    resi=line.substr(22,5); // including insertion code
+
+                    PDB_lines.back().push_back(line);
+                    if (line[17]==' ' && (line[18]=='D'||line[18]==' ')) mol_vec.back()++;
+                    else mol_vec.back()--;
+                    i++;
+                }
+            }
+        }
+    }
+    else if (infmt_opt==1) // SPICKER format
+    {
+        int L=0;
+        float x,y,z;
+        stringstream i8_stream;
+        while (compress_type?fin_gz.good():fin.good())
+        {
+            if (compress_type) fin_gz>>L>>x>>y>>z;
+            else               fin   >>L>>x>>y>>z;
+            if (compress_type) getline(fin_gz, line);
+            else               getline(fin, line);
+            if (!(compress_type?fin_gz.good():fin.good())) break;
+            model_idx++;
+            stringstream i8_stream;
+            i8_stream << ':' << model_idx;
+            chainID_list.push_back(i8_stream.str());
+            PDB_lines.push_back(tmp_str_vec);
+            mol_vec.push_back(0);
+            for (i=0;i<L;i++)
+            {
+                if (compress_type) fin_gz>>x>>y>>z;
+                else               fin   >>x>>y>>z;
+                i8_stream<<"ATOM   "<<setw(4)<<i+1<<"  CA  UNK  "<<setw(4)
+                    <<i+1<<"    "<<setiosflags(ios::fixed)<<setprecision(3)
+                    <<setw(8)<<x<<setw(8)<<y<<setw(8)<<z;
+                line=i8_stream.str();
+                i8_stream.str(string());
+                PDB_lines.back().push_back(line);
+            }
+            if (compress_type) getline(fin_gz, line);
+            else               getline(fin, line);
+        }
+    }
+    else if (infmt_opt==2) // xyz format
+    {
+        int L=0;
+        char A;
+        stringstream i8_stream;
+        while (compress_type?fin_gz.good():fin.good())
+        {
+            if (compress_type) getline(fin_gz, line);
+            else               getline(fin, line);
+            L=atoi(line.c_str());
+            if (compress_type) getline(fin_gz, line);
+            else               getline(fin, line);
+            for (i=0;i<line.size();i++)
+                if (line[i]==' '||line[i]=='\t') break;
+            if (!(compress_type?fin_gz.good():fin.good())) break;
+            chainID_list.push_back(':'+line.substr(0,i));
+            PDB_lines.push_back(tmp_str_vec);
+            mol_vec.push_back(0);
+            for (i=0;i<L;i++)
+            {
+                if (compress_type) getline(fin_gz, line);
+                else               getline(fin, line);
+                i8_stream<<"ATOM   "<<setw(4)<<i+1<<"  CA  "
+                    <<AAmap(line[0])<<"  "<<setw(4)<<i+1<<"    "
+                    <<line.substr(2,8)<<line.substr(11,8)<<line.substr(20,8);
+                line=i8_stream.str();
+                i8_stream.str(string());
+                PDB_lines.back().push_back(line);
+                if (line[0]>='a' && line[0]<='z') mol_vec.back()++; // RNA
+                else mol_vec.back()--;
+            }
+        }
+    }
+    else if (infmt_opt==3) // PDBx/mmCIF format
+    {
+        bool loop_ = false; // not reading following content
+        map<string,int> _atom_site;
+        int atom_site_pos;
+        vector<string> line_vec;
+        string alt_id=".";  // alternative location indicator
+        string asym_id="."; // this is similar to chainID, except that
+                            // chainID is char while asym_id is a string
+                            // with possibly multiple char
+        string prev_asym_id="";
+        string AA="";       // residue name
+        string atom="";
+        string prev_resi="";
+        string model_index=""; // the same as model_idx but type is string
+        stringstream i8_stream;
+        while (compress_type?fin_gz.good():fin.good())
+        {
+            if (compress_type) getline(fin_gz, line);
+            else               getline(fin, line);
+            if (loop_) loop_ = line.compare(0,2,"# ");
+            if (!loop_)
+            {
+                if (line.compare(0,5,"loop_")) continue;
+                if (compress_type) getline(fin_gz, line);
+                else               getline(fin, line);
+                if (line.compare(0,11,"_atom_site.")) continue;
+
+                loop_=true;
+                _atom_site.clear();
+                atom_site_pos=0;
+                _atom_site[line.substr(11,line.size()-12)]=atom_site_pos;
+
+                while(1)
+                {
+                    if (compress_type) getline(fin_gz, line);
+                    else               getline(fin, line);
+                    if (line.compare(0,11,"_atom_site.")) break;
+                    _atom_site[line.substr(11,line.size()-12)]=++atom_site_pos;
+                }
+
+
+                if (_atom_site.count("group_PDB")*
+                    _atom_site.count("label_atom_id")*
+                    _atom_site.count("label_comp_id")*
+                   (_atom_site.count("auth_asym_id")+
+                    _atom_site.count("label_asym_id"))*
+                   (_atom_site.count("auth_seq_id")+
+                    _atom_site.count("label_seq_id"))*
+                    _atom_site.count("Cartn_x")*
+                    _atom_site.count("Cartn_y")*
+                    _atom_site.count("Cartn_z")==0)
+                {
+                    loop_ = false;
+                    cerr<<"Warning! Missing one of the following _atom_site data items: group_PDB, label_atom_id, label_atom_id, auth_asym_id/label_asym_id, auth_seq_id/label_seq_id, Cartn_x, Cartn_y, Cartn_z"<<endl;
+                    continue;
+                }
+            }
+
+            line_vec.clear();
+            split(line,line_vec);
+            if (line_vec[_atom_site["group_PDB"]]!="ATOM") continue;
+            
+            alt_id=".";
+            if (_atom_site.count("label_alt_id")) // in 39.4 % of entries
+                alt_id=line_vec[_atom_site["label_alt_id"]];
+            if (alt_id!="." && alt_id!="A") continue;
+
+            atom=line_vec[_atom_site["label_atom_id"]];
+            if (atom[0]=='"') atom=atom.substr(1);
+            if (atom.size() && atom[atom.size()-1]=='"')
+                atom=atom.substr(0,atom.size()-1);
+            if (atom.size()==0) continue;
+            if      (atom.size()==1) atom=" "+atom+"  ";
+            else if (atom.size()==2) atom=" "+atom+" "; // wrong for sidechain H
+            else if (atom.size()==3) atom=" "+atom;
+            else if (atom.size()>=5) continue;
+
+            AA=line_vec[_atom_site["label_comp_id"]]; // residue name
+            if      (AA.size()==1) AA="  "+AA;
+            else if (AA.size()==2) AA=" " +AA;
+            else if (AA.size()>=4) continue;
+
+            if (atom_opt=="auto")
+            {
+                if (AA[0]==' ' && (AA[1]=='D'||AA[1]==' ')) // DNA || RNA
+                     select_atom=(atom==" C3'");
+                else select_atom=(atom==" CA ");
+            }
+            else     select_atom=(atom==atom_opt);
+
+            if (!select_atom) continue;
+
+            if (_atom_site.count("auth_asym_id"))
+                 asym_id=line_vec[_atom_site["auth_asym_id"]];
+            else asym_id=line_vec[_atom_site["label_asym_id"]];
+            if (asym_id==".") asym_id=" ";
+            
+            if (_atom_site.count("pdbx_PDB_model_num") && 
+                model_index!=line_vec[_atom_site["pdbx_PDB_model_num"]])
+            {
+                model_index=line_vec[_atom_site["pdbx_PDB_model_num"]];
+                if (PDB_lines.size() && ter_opt>=1) break;
+                if (PDB_lines.size()==0 || split_opt>=1)
+                {
+                    PDB_lines.push_back(tmp_str_vec);
+                    mol_vec.push_back(0);
+                    prev_asym_id=asym_id;
+
+                    if (split_opt==1 && ter_opt==0) chainID_list.push_back(
+                        ':'+model_index);
+                    else if (split_opt==2 && ter_opt==0)
+                        chainID_list.push_back(':'+model_index+':'+asym_id);
+                    else if (split_opt==2 && ter_opt==1)
+                        chainID_list.push_back(':'+asym_id);
+                }
+            }
+
+            if (prev_asym_id!=asym_id)
+            {
+                if (prev_asym_id!="" && ter_opt>=2) break;
+                if (split_opt>=2)
+                {
+                    PDB_lines.push_back(tmp_str_vec);
+                    mol_vec.push_back(0);
+
+                    if (split_opt==1 && ter_opt==0) chainID_list.push_back(
+                        ':'+model_index);
+                    else if (split_opt==2 && ter_opt==0)
+                        chainID_list.push_back(':'+model_index+':'+asym_id);
+                    else if (split_opt==2 && ter_opt==1)
+                        chainID_list.push_back(':'+asym_id);
+                }
+            }
+            if (prev_asym_id!=asym_id) prev_asym_id=asym_id;
+
+            if (AA[0]==' ' && (AA[1]=='D'||AA[1]==' ')) mol_vec.back()++;
+            else mol_vec.back()--;
+
+            if (_atom_site.count("auth_seq_id"))
+                 resi=line_vec[_atom_site["auth_seq_id"]];
+            else resi=line_vec[_atom_site["label_seq_id"]];
+            if (_atom_site.count("pdbx_PDB_ins_code") && 
+                line_vec[_atom_site["pdbx_PDB_ins_code"]]!="?")
+                resi+=line_vec[_atom_site["pdbx_PDB_ins_code"]][0];
+            else resi+=" ";
+
+            if (prev_resi==resi)
+                cerr<<"Warning! Duplicated residue "<<resi<<endl;
+            prev_resi=resi;
+
+            i++;
+            i8_stream<<"ATOM  "
+                <<setw(5)<<i<<" "<<atom<<" "<<AA<<" "<<asym_id[0]
+                <<setw(5)<<resi.substr(0,5)<<"   "
+                <<setw(8)<<line_vec[_atom_site["Cartn_x"]]
+                <<setw(8)<<line_vec[_atom_site["Cartn_y"]]
+                <<setw(8)<<line_vec[_atom_site["Cartn_z"]];
+            PDB_lines.back().push_back(i8_stream.str());
+            i8_stream.str(string());
+        }
+        _atom_site.clear();
+        line_vec.clear();
+        alt_id.clear();
+        asym_id.clear();
+        AA.clear();
+    }
+
+    if (compress_type) fin_gz.close();
+    else               fin.close();
+    line.clear();
+    if (!split_opt) chainID_list.push_back("");
+    return PDB_lines.size();
+}
+
+/* read fasta file from filename. sequence is stored into FASTA_lines
+ * while sequence name is stored into chainID_list.
+ * if ter_opt >=1, only read the first sequence.
+ * if ter_opt ==0, read all sequences.
+ * if split_opt >=1 and ter_opt ==0, each sequence is a separate entry.
+ * if split_opt ==0 and ter_opt ==0, all sequences are combined into one */
+size_t get_FASTA_lines(const string filename,
+    vector<vector<string> >&FASTA_lines, vector<string> &chainID_list,
+    vector<int> &mol_vec, const int ter_opt=3, const int split_opt=0)
+{
+    string line;
+    vector<string> tmp_str_vec;
+    int l;
+    
+    int compress_type=0; // uncompressed file
+    ifstream fin;
+    redi::ipstream fin_gz; // if file is compressed
+    if (filename.size()>=3 && 
+        filename.substr(filename.size()-3,3)==".gz")
+    {
+        fin_gz.open("zcat "+filename);
+        compress_type=1;
+    }
+    else if (filename.size()>=4 && 
+        filename.substr(filename.size()-4,4)==".bz2")
+    {
+        fin_gz.open("bzcat "+filename);
+        compress_type=2;
+    }
+    else fin.open(filename.c_str());
+
+    while (compress_type?fin_gz.good():fin.good())
+    {
+        if (compress_type) getline(fin_gz, line);
+        else               getline(fin, line);
+        if (line.size()==0 || line[0]=='#') continue;
+
+        if (line[0]=='>')
+        {
+            if (FASTA_lines.size())
+            {
+                if (ter_opt) break;
+                if (split_opt==0) continue;
+            }
+            FASTA_lines.push_back(tmp_str_vec);
+            FASTA_lines.back().push_back("");
+            mol_vec.push_back(0);
+            if (ter_opt==0 && split_opt)
+            {
+                line[0]=':';
+                chainID_list.push_back(line);
+            }
+            else chainID_list.push_back("");
+        }
+        else
+        {
+            FASTA_lines.back()[0]+=line;
+            for (l=0;l<line.size();l++) mol_vec.back()+=
+                ('a'<=line[l] && line[l]<='z')-('A'<=line[l] && line[l]<='Z');
+        }
+    }
+
+    line.clear();
+    if (compress_type) fin_gz.close();
+    else               fin.close();
+    return FASTA_lines.size();
+}
+
+
+/* extract pairwise sequence alignment from residue index vectors,
+ * assuming that "sequence" contains two empty strings.
+ * return length of alignment, including gap. */
+int extract_aln_from_resi(vector<string> &sequence, char *seqx, char *seqy,
+    const vector<string> resi_vec1, const vector<string> resi_vec2,
+    const int byresi_opt)
+{
+    sequence.clear();
+    sequence.push_back("");
+    sequence.push_back("");
+
+    int i1=0; // positions in resi_vec1
+    int i2=0; // positions in resi_vec2
+    int xlen=resi_vec1.size();
+    int ylen=resi_vec2.size();
+    map<char,int> chainID_map1;
+    map<char,int> chainID_map2;
+    if (byresi_opt==3)
+    {
+        vector<char> chainID_vec;
+        char chainID;
+        int i;
+        for (i=0;i<xlen;i++)
+        {
+            chainID=resi_vec1[i][5];
+            if (!chainID_vec.size()|| chainID_vec.back()!=chainID)
+            {
+                chainID_vec.push_back(chainID);
+                chainID_map1[chainID]=chainID_vec.size();
+            }
+        }
+        chainID_vec.clear();
+        for (i=0;i<ylen;i++)
+        {
+            chainID=resi_vec2[i][5];
+            if (!chainID_vec.size()|| chainID_vec.back()!=chainID)
+            {
+                chainID_vec.push_back(chainID);
+                chainID_map2[chainID]=chainID_vec.size();
+            }
+        }
+        chainID_vec.clear();
+    }
+    while(i1<xlen && i2<ylen)
+    {
+        if ((byresi_opt<=2 && resi_vec1[i1]==resi_vec2[i2]) || (byresi_opt==3
+             && resi_vec1[i1].substr(0,5)==resi_vec2[i2].substr(0,5)
+             && chainID_map1[resi_vec1[i1][5]]==chainID_map2[resi_vec2[i2][5]]))
+        {
+            sequence[0]+=seqx[i1++];
+            sequence[1]+=seqy[i2++];
+        }
+        else if (atoi(resi_vec1[i1].substr(0,4).c_str())<=
+                 atoi(resi_vec2[i2].substr(0,4).c_str()))
+        {
+            sequence[0]+=seqx[i1++];
+            sequence[1]+='-';
+        }
+        else
+        {
+            sequence[0]+='-';
+            sequence[1]+=seqy[i2++];
+        }
+    }
+    chainID_map1.clear();
+    chainID_map2.clear();
+    return sequence[0].size();
+}
+
+int read_PDB(const vector<string> &PDB_lines, double **a, char *seq,
+    vector<string> &resi_vec, const int byresi_opt)
+{
+    int i;
+    for (i=0;i<PDB_lines.size();i++)
+    {
+        a[i][0] = atof(PDB_lines[i].substr(30, 8).c_str());
+        a[i][1] = atof(PDB_lines[i].substr(38, 8).c_str());
+        a[i][2] = atof(PDB_lines[i].substr(46, 8).c_str());
+        seq[i]  = AAmap(PDB_lines[i].substr(17, 3));
+
+        if (byresi_opt>=2) resi_vec.push_back(PDB_lines[i].substr(22,5)+
+                                              PDB_lines[i][21]);
+        if (byresi_opt==1) resi_vec.push_back(PDB_lines[i].substr(22,5));
+    }
+    seq[i]='\0'; 
+    return i;
+}
+
+double dist(double x[3], double y[3])
+{
+    double d1=x[0]-y[0];
+    double d2=x[1]-y[1];
+    double d3=x[2]-y[2];
+ 
+    return (d1*d1 + d2*d2 + d3*d3);
+}
+
+double dot(double *a, double *b)
+{
+    return (a[0] * b[0] + a[1] * b[1] + a[2] * b[2]);
+}
+
+void transform(double t[3], double u[3][3], double *x, double *x1)
+{
+    x1[0]=t[0]+dot(&u[0][0], x);
+    x1[1]=t[1]+dot(&u[1][0], x);
+    x1[2]=t[2]+dot(&u[2][0], x);
+}
+
+void do_rotation(double **x, double **x1, int len, double t[3], double u[3][3])
+{
+    for(int i=0; i<len; i++)
+    {
+        transform(t, u, &x[i][0], &x1[i][0]);
+    }    
+}
+
+/* strip white space at the begining or end of string */
+string Trim(const string &inputString)
+{
+    string result = inputString;
+    int idxBegin = inputString.find_first_not_of(" \n\r\t");
+    int idxEnd = inputString.find_last_not_of(" \n\r\t");
+    if (idxBegin >= 0 && idxEnd >= 0)
+        result = inputString.substr(idxBegin, idxEnd + 1 - idxBegin);
+    return result;
+}
+
+/* read user specified pairwise alignment from 'fname_lign' to 'sequence'.
+ * This function should only be called by main function, as it will
+ * terminate a program if wrong alignment is given */
+void read_user_alignment(vector<string>&sequence, const string &fname_lign,
+    const bool I_opt)
+{
+    if (fname_lign == "")
+        PrintErrorAndQuit("Please provide a file name for option -i!");
+    // open alignment file
+    int n_p = 0;// number of structures in alignment file
+    string line;
+    
+    ifstream fileIn(fname_lign.c_str());
+    if (fileIn.is_open())
+    {
+        while (fileIn.good())
+        {
+            getline(fileIn, line);
+            if (line.compare(0, 1, ">") == 0)// Flag for a new structure
+            {
+                if (n_p >= 2) break;
+                sequence.push_back("");
+                n_p++;
+            }
+            else if (n_p > 0 && line!="") sequence.back()+=line;
+        }
+        fileIn.close();
+    }
+    else PrintErrorAndQuit("ERROR! Alignment file does not exist.");
+    
+    if (n_p < 2)
+        PrintErrorAndQuit("ERROR: Fasta format is wrong, two proteins should be included.");
+    if (sequence[0].size() != sequence[1].size())
+        PrintErrorAndQuit("ERROR! FASTA file is wrong. The length in alignment should be equal for the two aligned proteins.");
+    if (I_opt)
+    {
+        int aligned_resNum=0;
+        for (int i=0;i<sequence[0].size();i++) 
+            aligned_resNum+=(sequence[0][i]!='-' && sequence[1][i]!='-');
+        if (aligned_resNum<3)
+            PrintErrorAndQuit("ERROR! Superposition is undefined for <3 aligned residues.");
+    }
+    line.clear();
+    return;
+}
+
+/* read list of entries from 'name' to 'chain_list'.
+ * dir_opt is the folder name (prefix).
+ * suffix_opt is the file name extension (suffix_opt).
+ * This function should only be called by main function, as it will
+ * terminate a program if wrong alignment is given */
+void file2chainlist(vector<string>&chain_list, const string &name,
+    const string &dir_opt, const string &suffix_opt)
+{
+    ifstream fp(name.c_str());
+    if (! fp.is_open())
+        PrintErrorAndQuit(("Can not open file: "+name+'\n').c_str());
+    string line;
+    while (fp.good())
+    {
+        getline(fp, line);
+        if (! line.size()) continue;
+        chain_list.push_back(dir_opt+Trim(line)+suffix_opt);
+    }
+    fp.close();
+    line.clear();
+}
+
+#endif
diff --git a/modules/bindings/src/tmalign/param_set.h b/modules/bindings/src/tmalign/param_set.h
new file mode 100644
index 000000000..31ac26866
--- /dev/null
+++ b/modules/bindings/src/tmalign/param_set.h
@@ -0,0 +1,77 @@
+/* These functions implement d0 normalization. The d0 for final TM-score
+ * output is implemented by parameter_set4final. For both RNA alignment
+ * and protein alignment, using d0 set by parameter_set4search yields
+ * slightly better results during initial alignment-superposition iteration.
+ */
+#include <math.h>
+#include "basic_fun.h"
+
+void parameter_set4search(const int xlen, const int ylen,
+    double &D0_MIN, double &Lnorm,
+    double &score_d8, double &d0, double &d0_search, double &dcu0)
+{
+    //parameter initilization for searching: D0_MIN, Lnorm, d0, d0_search, score_d8
+    D0_MIN=0.5; 
+    dcu0=4.25;                       //update 3.85-->4.25
+ 
+    Lnorm=getmin(xlen, ylen);        //normaliz TMscore by this in searching
+    if (Lnorm<=19)                    //update 15-->19
+        d0=0.168;                   //update 0.5-->0.168
+    else d0=(1.24*pow((Lnorm*1.0-15), 1.0/3)-1.8);
+    D0_MIN=d0+0.8;              //this should be moved to above
+    d0=D0_MIN;                  //update: best for search    
+
+    d0_search=d0;
+    if (d0_search>8)   d0_search=8;
+    if (d0_search<4.5) d0_search=4.5;
+
+    score_d8=1.5*pow(Lnorm*1.0, 0.3)+3.5; //remove pairs with dis>d8 during search & final
+}
+
+void parameter_set4final_C3prime(const double len, double &D0_MIN,
+    double &Lnorm, double &d0, double &d0_search)
+{
+    D0_MIN=0.3; 
+ 
+    Lnorm=len;            //normaliz TMscore by this in searching
+    if(Lnorm<=11) d0=0.3;
+    else if(Lnorm>11&&Lnorm<=15) d0=0.4;
+    else if(Lnorm>15&&Lnorm<=19) d0=0.5;
+    else if(Lnorm>19&&Lnorm<=23) d0=0.6;
+    else if(Lnorm>23&&Lnorm<30)  d0=0.7;
+    else d0=(0.6*pow((Lnorm*1.0-0.5), 1.0/2)-2.5);
+
+    d0_search=d0;
+    if (d0_search>8)   d0_search=8;
+    if (d0_search<4.5) d0_search=4.5;
+}
+
+void parameter_set4final(const double len, double &D0_MIN, double &Lnorm,
+    double &d0, double &d0_search, const int mol_type)
+{
+    if (mol_type>0) // RNA
+    {
+        parameter_set4final_C3prime(len, D0_MIN, Lnorm,
+            d0, d0_search);
+        return;
+    }
+    D0_MIN=0.5; 
+ 
+    Lnorm=len;            //normaliz TMscore by this in searching
+    if (Lnorm<=21) d0=0.5;          
+    else d0=(1.24*pow((Lnorm*1.0-15), 1.0/3)-1.8);
+    if (d0<D0_MIN) d0=D0_MIN;   
+    d0_search=d0;
+    if (d0_search>8)   d0_search=8;
+    if (d0_search<4.5) d0_search=4.5;
+}
+
+void parameter_set4scale(const int len, const double d_s, double &Lnorm,
+    double &d0, double &d0_search)
+{
+    d0=d_s;          
+    Lnorm=len;            //normaliz TMscore by this in searching
+    d0_search=d0;
+    if (d0_search>8)   d0_search=8;
+    if (d0_search<4.5) d0_search=4.5;  
+}
diff --git a/modules/bindings/src/tmalign/pdb2fasta.cpp b/modules/bindings/src/tmalign/pdb2fasta.cpp
new file mode 100644
index 000000000..420514205
--- /dev/null
+++ b/modules/bindings/src/tmalign/pdb2fasta.cpp
@@ -0,0 +1,175 @@
+#include "basic_fun.h"
+
+using namespace std;
+
+void print_help()
+{
+    cout <<
+"Converting PDB file(s) into FASTA format sequence.\n"
+"\n"
+"Usage: pdb2fasta pdb.pdb > seq.fasta\n"
+"\n"
+"    -dir     Convert all chains listed by 'chain_list' under 'chain_folder'.\n"
+"             Note that the slash is necessary.\n"
+"             $ pdb2xyz -dir chain_folder/ chain_list\n"
+"\n"
+"    -suffix  (Only when -dir is set, default is empty)\n"
+"             add file name suffix to files listed by chain_list\n"
+"\n"
+"    -atom    4-character atom name used to represent a residue.\n"
+"             Default is \" C3'\" for RNA/DNA and \" CA \" for proteins\n"
+"             (note the spaces before and after CA).\n"
+"\n"
+"    -ter     Strings to mark the end of a chain\n"
+"             3: (default) TER, ENDMDL, END or different chain ID\n"
+"             2: ENDMDL, END, or different chain ID\n"
+"             1: ENDMDL or END\n"
+"             0: end of file\n"
+"\n"
+"    -split   Whether to split PDB file into multiple chains\n"
+"             0: (default) treat the whole structure as one single chain\n"
+"             1: treat each MODEL as a separate chain (-ter should be 0)\n"
+"             2: treat each chain as a seperate chain (-ter should be <=1)\n"
+"\n"
+"    -infmt   Input format for chain\n"
+"            -1: (default) automatically detect PDB or PDBx/mmCIF format\n"
+"             0: PDB format\n"
+"             2: xyz format\n"
+"             3: PDBx/mmCIF format\n"
+    <<endl;
+    exit(EXIT_SUCCESS);
+}
+
+int main(int argc, char *argv[])
+{
+    if (argc < 2) print_help();
+
+
+    /**********************/
+    /*    get argument    */
+    /**********************/
+    string xname     = "";
+    int    ter_opt   =3;     // TER, END, or different chainID
+    int    infmt_opt =-1;    // PDB or PDBx/mmCIF format
+    int    split_opt =0;     // do not split chain
+    string atom_opt  ="auto";// use C alpha atom for protein and C3' for RNA
+    string suffix_opt="";    // set -suffix to empty
+    string dir_opt   ="";    // set -dir to empty
+    vector<string> chain_list; // only when -dir1 is set
+
+    int nameIdx = 0;
+    for(int i = 1; i < argc; i++)
+    {
+        if ( !strcmp(argv[i],"-ter") && i < (argc-1) )
+        {
+            ter_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-split") && i < (argc-1) )
+        {
+            split_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-atom") && i < (argc-1) )
+        {
+            atom_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir") && i < (argc-1) )
+        {
+            dir_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-suffix") && i < (argc-1) )
+        {
+            suffix_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-infmt") && i < (argc-1) )
+        {
+            infmt_opt=atoi(argv[i + 1]); i++;
+        }
+        else xname=argv[i];
+    }
+
+    if(xname.size()==0||xname=="-h") print_help();
+
+    if (suffix_opt.size() && dir_opt.size()==0)
+        PrintErrorAndQuit("-suffix is only valid if -dir is set");
+    if (atom_opt.size()!=4)
+        PrintErrorAndQuit("ERROR! atom name must have 4 characters, including space.");
+    if (split_opt==1 && ter_opt!=0)
+        PrintErrorAndQuit("-split 1 should be used with -ter 0");
+    else if (split_opt==2 && ter_opt!=0 && ter_opt!=1)
+        PrintErrorAndQuit("-split 2 should be used with -ter 0 or 1");
+    if (split_opt<0 || split_opt>2)
+        PrintErrorAndQuit("-split can only be 0, 1 or 2");
+
+    /* parse file list */
+    if (dir_opt.size()==0)
+        chain_list.push_back(xname);
+    else
+    {
+        ifstream fp(xname.c_str());
+        if (! fp.is_open())
+        {
+            char message[5000];
+            sprintf(message, "Can not open file: %s\n", xname.c_str());
+            PrintErrorAndQuit(message);
+        }
+        string line;
+        while (fp.good())
+        {
+            getline(fp, line);
+            if (! line.size()) continue;
+            chain_list.push_back(dir_opt+Trim(line)+suffix_opt);
+        }
+        fp.close();
+        line.clear();
+    }
+
+    /* declare previously global variables */
+    vector<vector<string> >PDB_lines; // text of chain
+    vector<int> mol_vec;              // molecule type of chain
+    vector<string> chainID_list;      // list of chainID1
+    vector<string> resi_vec;          // residue index for chain
+    int    i;                         // file index
+    int    l;                         // residue index
+    int    chain_i;                   // chain index
+    int    xlen;                      // chain length
+    int    xchainnum;                 // number of chains in a PDB file
+    string sequence;                  // amino acid sequence
+
+    /* loop over file names */
+    for (i=0;i<chain_list.size();i++)
+    {
+        xname=chain_list[i];
+        xchainnum=get_PDB_lines(xname, PDB_lines, chainID_list,
+            mol_vec, ter_opt, infmt_opt, atom_opt, split_opt);
+        if (!xchainnum)
+        {
+            cerr<<"Warning! Cannot parse file: "<<xname
+                <<". Chain number 0."<<endl;
+            continue;
+        }
+        for (chain_i=0;chain_i<xchainnum;chain_i++)
+        {
+            xlen=PDB_lines[chain_i].size();
+            if (!xlen)
+            {
+                cerr<<"Warning! Cannot parse file: "<<xname
+                    <<". Chain length 0."<<endl;
+                continue;
+            }
+            
+            for (l=0;l<PDB_lines[chain_i].size();l++)
+                sequence+=AAmap(PDB_lines[chain_i][l].substr(17,3));
+            cout<<'>'<<xname.substr(dir_opt.size(),
+                xname.size()-dir_opt.size()-suffix_opt.size())
+                <<chainID_list[chain_i]<<'\t'<<xlen<<'\n'<<sequence<<endl;
+            sequence.clear();
+            PDB_lines[chain_i].clear();
+        } // chain_i
+        xname.clear();
+        PDB_lines.clear();
+        resi_vec.clear();
+        mol_vec.clear();
+    } // i
+    chain_list.clear();
+    return 0;
+}
diff --git a/modules/bindings/src/tmalign/pdb2ss.cpp b/modules/bindings/src/tmalign/pdb2ss.cpp
new file mode 100644
index 000000000..a346cad36
--- /dev/null
+++ b/modules/bindings/src/tmalign/pdb2ss.cpp
@@ -0,0 +1,218 @@
+#include "TMalign.h"
+
+using namespace std;
+
+// secondary structure    01234
+const char* SSmapProtein=" CHTE";
+const char* SSmapRNA    =" .<>";
+
+void print_help()
+{
+    cout <<
+"Converting PDB file(s) into FASTA format secondary structure sequence.\n"
+"Proteins have four states: H E C T (helix, strand, coil, turn)\n"
+"RNA have three states: < > . (paired with 3', paired with 5', unpaired)\n"
+"\n"
+"Usage: pdb2ss pdb.pdb > seq.ss\n"
+"\n"
+"    -dir     Convert all chains listed by 'chain_list' under 'chain_folder'.\n"
+"             Note that the slash is necessary.\n"
+"             $ pdb2xyz -dir chain_folder/ chain_list\n"
+"\n"
+"    -suffix  (Only when -dir is set, default is empty)\n"
+"             add file name suffix to files listed by chain_list\n"
+"\n"
+"    -atom    4-character atom name used to represent a residue.\n"
+"             Default is \" C3'\" for RNA/DNA and \" CA \" for proteins\n"
+"             (note the spaces before and after CA).\n"
+"\n"
+"    -mol     Molecule type: RNA or protein\n"
+"             Default is detect molecule type automatically\n"
+"\n"
+"    -ter     Strings to mark the end of a chain\n"
+"             3: (default) TER, ENDMDL, END or different chain ID\n"
+"             2: ENDMDL, END, or different chain ID\n"
+"             1: ENDMDL or END\n"
+"             0: end of file\n"
+"\n"
+"    -split   Whether to split PDB file into multiple chains\n"
+"             0: (default) treat the whole structure as one single chain\n"
+"             1: treat each MODEL as a separate chain (-ter should be 0)\n"
+"             2: treat each chain as a seperate chain (-ter should be <=1)\n"
+"\n"
+"    -infmt   Input format for chain\n"
+"            -1: (default) automatically detect PDB or PDBx/mmCIF format\n"
+"             0: PDB format\n"
+"             2: xyz format\n"
+"             3: PDBx/mmCIF format\n"
+    <<endl;
+    exit(EXIT_SUCCESS);
+}
+
+int main(int argc, char *argv[])
+{
+    if (argc < 2) print_help();
+
+
+    /**********************/
+    /*    get argument    */
+    /**********************/
+    string xname     = "";
+    int    ter_opt   =3;     // TER, END, or different chainID
+    int    infmt_opt =-1;    // PDB format
+    int    split_opt =0;     // do not split chain
+    string atom_opt  ="auto";// use C alpha atom for protein and C3' for RNA
+    string mol_opt   ="auto";// auto-detect the molecule type as protein/RNA
+    string suffix_opt="";    // set -suffix to empty
+    string dir_opt   ="";    // set -dir to empty
+    vector<string> chain_list; // only when -dir1 is set
+
+    int nameIdx = 0;
+    for(int i = 1; i < argc; i++)
+    {
+        if ( !strcmp(argv[i],"-ter") && i < (argc-1) )
+        {
+            ter_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-split") && i < (argc-1) )
+        {
+            split_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-atom") && i < (argc-1) )
+        {
+            atom_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-mol") && i < (argc-1) )
+        {
+            mol_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir") && i < (argc-1) )
+        {
+            dir_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-suffix") && i < (argc-1) )
+        {
+            suffix_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-infmt") && i < (argc-1) )
+        {
+            infmt_opt=atoi(argv[i + 1]); i++;
+        }
+        else xname=argv[i];
+    }
+
+    if(xname.size()==0||xname=="-h") print_help();
+
+    if (suffix_opt.size() && dir_opt.size()==0)
+        PrintErrorAndQuit("-suffix is only valid if -dir is set");
+    if (atom_opt.size()!=4)
+        PrintErrorAndQuit("ERROR! atom name must have 4 characters, including space.");
+    if (mol_opt!="auto" && mol_opt!="protein" && mol_opt!="RNA")
+        PrintErrorAndQuit("ERROR! molecule type must be either RNA or protein.");
+    else if (mol_opt=="protein" && atom_opt=="auto")
+        atom_opt=" CA ";
+    else if (mol_opt=="RNA" && atom_opt=="auto")
+        atom_opt=" C3'";
+    if (split_opt==1 && ter_opt!=0)
+        PrintErrorAndQuit("-split 1 should be used with -ter 0");
+    else if (split_opt==2 && ter_opt!=0 && ter_opt!=1)
+        PrintErrorAndQuit("-split 2 should be used with -ter 0 or 1");
+    if (split_opt<0 || split_opt>2)
+        PrintErrorAndQuit("-split can only be 0, 1 or 2");
+
+    /* parse file list */
+    if (dir_opt.size()==0)
+        chain_list.push_back(xname);
+    else
+    {
+        ifstream fp(xname.c_str());
+        if (! fp.is_open())
+        {
+            char message[5000];
+            sprintf(message, "Can not open file: %s\n", xname.c_str());
+            PrintErrorAndQuit(message);
+        }
+        string line;
+        while (fp.good())
+        {
+            getline(fp, line);
+            if (! line.size()) continue;
+            chain_list.push_back(dir_opt+Trim(line)+suffix_opt);
+        }
+        fp.close();
+        line.clear();
+    }
+
+    /* declare previously global variables */
+    vector<vector<string> >PDB_lines; // text of chain
+    vector<int> mol_vec;              // molecule type of chain
+    vector<string> chainID_list;      // list of chainID1
+    int    i;                         // file index
+    int    l;                         // residue index
+    int    chain_i;                   // chain index
+    int    xlen;                      // chain length
+    int    xchainnum;                 // number of chains in a PDB file
+    char   *seqx;                     // for the protein sequence 
+    int    *secx;                     // for the secondary structure 
+    double **xa;                      // for input vectors xa[0...xlen-1][0..2] and
+    vector<string> resi_vec;          // residue index for chain
+    string sequence;                  // secondary structure sequence
+
+    /* loop over file names */
+    for (i=0;i<chain_list.size();i++)
+    {
+        xname=chain_list[i];
+        xchainnum=get_PDB_lines(xname, PDB_lines, chainID_list,
+            mol_vec, ter_opt, infmt_opt, atom_opt, split_opt);
+        if (!xchainnum)
+        {
+            cerr<<"Warning! Cannot parse file: "<<xname
+                <<". Chain number 0."<<endl;
+            continue;
+        }
+        for (chain_i=0;chain_i<xchainnum;chain_i++)
+        {
+            xlen=PDB_lines[chain_i].size();
+            if (mol_opt=="RNA") mol_vec[chain_i]=1;
+            else if (mol_opt=="protein") mol_vec[chain_i]=-1;
+            if (!xlen)
+            {
+                cerr<<"Warning! Cannot parse file: "<<xname
+                    <<". Chain length 0."<<endl;
+                continue;
+            }
+            NewArray(&xa, xlen, 3);
+            seqx = new char[xlen + 1];
+            secx = new int[xlen];
+            xlen = read_PDB(PDB_lines[chain_i], xa, seqx, resi_vec, 0);
+            if (mol_vec[chain_i]>0) // RNA
+            {
+                make_sec(seqx,xa, xlen, secx,atom_opt);
+                for (l=0;l<PDB_lines[chain_i].size();l++)
+                    sequence+=SSmapRNA[secx[l]];
+            }
+            else //protein
+            {
+                make_sec(xa, xlen, secx);
+                for (l=0;l<PDB_lines[chain_i].size();l++)
+                    sequence+=SSmapProtein[secx[l]];
+            }
+            
+            cout<<'>'<<xname.substr(dir_opt.size(),
+                xname.size()-dir_opt.size()-suffix_opt.size())
+                <<chainID_list[chain_i]<<'\t'<<xlen<<'\n'<<sequence<<endl;
+
+            sequence.clear();
+            PDB_lines[chain_i].clear();
+            DeleteArray(&xa, xlen);
+            delete [] seqx;
+            delete [] secx;
+        } // chain_i
+        xname.clear();
+        PDB_lines.clear();
+        resi_vec.clear();
+        mol_vec.clear();
+    } // i
+    chain_list.clear();
+    return 0;
+}
diff --git a/modules/bindings/src/tmalign/pdb2xyz.cpp b/modules/bindings/src/tmalign/pdb2xyz.cpp
new file mode 100644
index 000000000..6fd235f6e
--- /dev/null
+++ b/modules/bindings/src/tmalign/pdb2xyz.cpp
@@ -0,0 +1,176 @@
+#include "basic_fun.h"
+
+using namespace std;
+
+void print_help()
+{
+    cout <<
+"Converting PDB or PDBx/mmCIF file(s) into xyz format.\n"
+"\n"
+"Usage: pdb2xyz pdb.pdb > ca.xyz\n"
+"\n"
+"    -dir     Convert all chains listed by 'chain_list' under 'chain_folder'.\n"
+"             Note that the slash is necessary.\n"
+"             $ pdb2xyz -dir chain_folder/ chain_list\n"
+"\n"
+"    -suffix  (Only when -dir is set, default is empty)\n"
+"             add file name suffix to files listed by chain_list\n"
+"\n"
+"    -atom    4-character atom name used to represent a residue.\n"
+"             Default is \" C3'\" for RNA/DNA and \" CA \" for proteins\n"
+"             (note the spaces before and after CA).\n"
+"\n"
+"    -ter     Strings to mark the end of a chain\n"
+"             3: (default) TER, ENDMDL, END or different chain ID\n"
+"             2: ENDMDL, END, or different chain ID\n"
+"             1: ENDMDL or END\n"
+"             0: end of file\n"
+"\n"
+"    -split   Whether to split PDB file into multiple chains\n"
+"             0: (default) treat the whole structure as one single chain\n"
+"             1: treat each MODEL as a separate chain (-ter should be 0)\n"
+"             2: treat each chain as a seperate chain (-ter should be <=1)\n"
+"\n"
+"    -infmt   Input format for chain2\n"
+"            -1: (default) automatically detect PDB or PDBx/mmCIF format\n"
+"             3: PDBx/mmCIF format\n"
+    <<endl;
+    exit(EXIT_SUCCESS);
+}
+
+int main(int argc, char *argv[])
+{
+    if (argc < 2) print_help();
+
+
+    /**********************/
+    /*    get argument    */
+    /**********************/
+    string xname     = "";
+    int    ter_opt   =3;     // TER, END, or different chainID
+    int    infmt_opt =-1;    // PDB or PDBx/mmCIF format
+    int    split_opt =0;     // do not split chain
+    string atom_opt  ="auto";// use C alpha atom for protein and C3' for RNA
+    string suffix_opt="";    // set -suffix to empty
+    string dir_opt   ="";    // set -dir to empty
+    vector<string> chain_list; // only when -dir1 is set
+
+    int nameIdx = 0;
+    for(int i = 1; i < argc; i++)
+    {
+        if ( !strcmp(argv[i],"-ter") && i < (argc-1) )
+        {
+            ter_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-split") && i < (argc-1) )
+        {
+            split_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-atom") && i < (argc-1) )
+        {
+            atom_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir") && i < (argc-1) )
+        {
+            dir_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-suffix") && i < (argc-1) )
+        {
+            suffix_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-infmt") && i < (argc-1) )
+        {
+            infmt_opt=atoi(argv[i + 1]); i++;
+        }
+        else xname=argv[i];
+    }
+
+    if(xname.size()==0||xname=="-h") print_help();
+
+    if (suffix_opt.size() && dir_opt.size()==0)
+        PrintErrorAndQuit("-suffix is only valid if -dir is set");
+    if (atom_opt.size()!=4)
+        PrintErrorAndQuit("ERROR! atom name must have 4 characters, including space.");
+    if (split_opt==1 && ter_opt!=0)
+        PrintErrorAndQuit("-split 1 should be used with -ter 0");
+    else if (split_opt==2 && ter_opt!=0 && ter_opt!=1)
+        PrintErrorAndQuit("-split 2 should be used with -ter 0 or 1");
+
+    /* parse file list */
+    if (dir_opt.size()==0)
+        chain_list.push_back(xname);
+    else
+    {
+        ifstream fp(xname.c_str());
+        if (! fp.is_open())
+        {
+            char message[5000];
+            sprintf(message, "Can not open file: %s\n", xname.c_str());
+            PrintErrorAndQuit(message);
+        }
+        string line;
+        while (fp.good())
+        {
+            getline(fp, line);
+            if (! line.size()) continue;
+            chain_list.push_back(dir_opt+Trim(line)+suffix_opt);
+        }
+        fp.close();
+        line.clear();
+    }
+
+    /* declare previously global variables */
+    vector<vector<string> >PDB_lines; // text of chain
+    vector<int> mol_vec;              // molecule type of chain
+    vector<string> chainID_list;      // list of chainID1
+    vector<string> resi_vec;          // residue index for chain
+    int    i;                         // file index
+    int    l;                         // residue index
+    int    chain_i;                   // chain index
+    int    xlen;                      // chain length
+    int    xchainnum;                 // number of chains in a PDB file
+
+    /* loop over file names */
+    for (i=0;i<chain_list.size();i++)
+    {
+        xname=chain_list[i];
+        xchainnum=get_PDB_lines(xname, PDB_lines, chainID_list,
+            mol_vec, ter_opt, infmt_opt, atom_opt, split_opt);
+        if (!xchainnum)
+        {
+            cerr<<"Warning! Cannot parse file: "<<xname
+                <<". Chain number 0."<<endl;
+            continue;
+        }
+        for (chain_i=0;chain_i<xchainnum;chain_i++)
+        {
+            xlen=PDB_lines[chain_i].size();
+            if (!xlen)
+            {
+                cerr<<"Warning! Cannot parse file: "<<xname
+                    <<". Chain length 0."<<endl;
+                continue;
+            }
+            
+            cout<<xlen<<'\n'<<xname.substr(dir_opt.size(),
+                xname.size()-dir_opt.size()-suffix_opt.size())
+                <<chainID_list[chain_i];
+            for (l=0;l<PDB_lines[chain_i].size();l++)
+            {
+                cout<<'\n'<<AAmap(PDB_lines[chain_i][l].substr(17,3))<<' '
+                    <<PDB_lines[chain_i][l].substr(30,8)<<' '
+                    <<PDB_lines[chain_i][l].substr(38,8)<<' '
+                    <<PDB_lines[chain_i][l].substr(46,8);
+            }
+            cout<<endl;
+
+            PDB_lines[chain_i].clear();
+        } // chain_i
+        xname.clear();
+        PDB_lines.clear();
+        resi_vec.clear();
+        mol_vec.clear();
+    } // i
+    chain_list.clear();
+    return 0;
+}
diff --git a/modules/bindings/src/tmalign/pstream.h b/modules/bindings/src/tmalign/pstream.h
new file mode 100644
index 000000000..28cbeadb1
--- /dev/null
+++ b/modules/bindings/src/tmalign/pstream.h
@@ -0,0 +1,2255 @@
+// PStreams - POSIX Process I/O for C++
+
+//        Copyright (C) 2001 - 2017 Jonathan Wakely
+// Distributed under the Boost Software License, Version 1.0.
+//    (See accompanying file LICENSE_1_0.txt or copy at
+//          http://www.boost.org/LICENSE_1_0.txt)
+//
+
+/**
+ * @file pstream.h
+ * @brief Declares all PStreams classes.
+ * @author Jonathan Wakely
+ *
+ * Defines classes redi::ipstream, redi::opstream, redi::pstream
+ * and redi::rpstream.
+ */
+
+#ifndef REDI_PSTREAM_H_SEEN
+#define REDI_PSTREAM_H_SEEN
+
+#include <ios>
+#include <streambuf>
+#include <istream>
+#include <ostream>
+#include <string>
+#include <vector>
+#include <algorithm>    // for min()
+#include <cerrno>       // for errno
+#include <cstddef>      // for size_t, NULL
+#include <cstdlib>      // for exit()
+#include <sys/types.h>  // for pid_t
+#include <sys/wait.h>   // for waitpid()
+#include <sys/ioctl.h>  // for ioctl() and FIONREAD
+#if defined(__sun)
+# include <sys/filio.h> // for FIONREAD on Solaris 2.5
+#endif
+#include <unistd.h>     // for pipe() fork() exec() and filedes functions
+#include <signal.h>     // for kill()
+#include <fcntl.h>      // for fcntl()
+#if REDI_EVISCERATE_PSTREAMS
+# include <stdio.h>     // for FILE, fdopen()
+#endif
+
+
+/// The library version.
+#define PSTREAMS_VERSION 0x0101   // 1.0.1
+
+/**
+ *  @namespace redi
+ *  @brief  All PStreams classes are declared in namespace redi.
+ *
+ *  Like the standard iostreams, PStreams is a set of class templates,
+ *  taking a character type and traits type. As with the standard streams
+ *  they are most likely to be used with @c char and the default
+ *  traits type, so typedefs for this most common case are provided.
+ *
+ *  The @c pstream_common class template is not intended to be used directly,
+ *  it is used internally to provide the common functionality for the
+ *  other stream classes.
+ */
+namespace redi
+{
+  /// Common base class providing constants and typenames.
+  struct pstreams
+  {
+    /// Type used to specify how to connect to the process.
+    typedef std::ios_base::openmode           pmode;
+
+    /// Type used to hold the arguments for a command.
+    typedef std::vector<std::string>          argv_type;
+
+    /// Type used for file descriptors.
+    typedef int                               fd_type;
+
+    static const pmode pstdin  = std::ios_base::out; ///< Write to stdin
+    static const pmode pstdout = std::ios_base::in;  ///< Read from stdout
+    static const pmode pstderr = std::ios_base::app; ///< Read from stderr
+
+    /// Create a new process group for the child process.
+    static const pmode newpg   = std::ios_base::trunc;
+
+  protected:
+    enum { bufsz = 32 };  ///< Size of pstreambuf buffers.
+    enum { pbsz  = 2 };   ///< Number of putback characters kept.
+  };
+
+  /// Class template for stream buffer.
+  template <typename CharT, typename Traits = std::char_traits<CharT> >
+    class basic_pstreambuf
+    : public std::basic_streambuf<CharT, Traits>
+    , public pstreams
+    {
+    public:
+      // Type definitions for dependent types
+      typedef CharT                             char_type;
+      typedef Traits                            traits_type;
+      typedef typename traits_type::int_type    int_type;
+      typedef typename traits_type::off_type    off_type;
+      typedef typename traits_type::pos_type    pos_type;
+      /** @deprecated use pstreams::fd_type instead. */
+      typedef fd_type                           fd_t;
+
+      /// Default constructor.
+      basic_pstreambuf();
+
+      /// Constructor that initialises the buffer with @a cmd.
+      basic_pstreambuf(const std::string& cmd, pmode mode);
+
+      /// Constructor that initialises the buffer with @a file and @a argv.
+      basic_pstreambuf( const std::string& file,
+                        const argv_type& argv,
+                        pmode mode );
+
+      /// Destructor.
+      ~basic_pstreambuf();
+
+      /// Initialise the stream buffer with @a cmd.
+      basic_pstreambuf*
+      open(const std::string& cmd, pmode mode);
+
+      /// Initialise the stream buffer with @a file and @a argv.
+      basic_pstreambuf*
+      open(const std::string& file, const argv_type& argv, pmode mode);
+
+      /// Close the stream buffer and wait for the process to exit.
+      basic_pstreambuf*
+      close();
+
+      /// Send a signal to the process.
+      basic_pstreambuf*
+      kill(int signal = SIGTERM);
+
+      /// Send a signal to the process' process group.
+      basic_pstreambuf*
+      killpg(int signal = SIGTERM);
+
+      /// Close the pipe connected to the process' stdin.
+      void
+      peof();
+
+      /// Change active input source.
+      bool
+      read_err(bool readerr = true);
+
+      /// Report whether the stream buffer has been initialised.
+      bool
+      is_open() const;
+
+      /// Report whether the process has exited.
+      bool
+      exited();
+
+#if REDI_EVISCERATE_PSTREAMS
+      /// Obtain FILE pointers for each of the process' standard streams.
+      std::size_t
+      fopen(FILE*& in, FILE*& out, FILE*& err);
+#endif
+
+      /// Return the exit status of the process.
+      int
+      status() const;
+
+      /// Return the error number (errno) for the most recent failed operation.
+      int
+      error() const;
+
+    protected:
+      /// Transfer characters to the pipe when character buffer overflows.
+      int_type
+      overflow(int_type c);
+
+      /// Transfer characters from the pipe when the character buffer is empty.
+      int_type
+      underflow();
+
+      /// Make a character available to be returned by the next extraction.
+      int_type
+      pbackfail(int_type c = traits_type::eof());
+
+      /// Write any buffered characters to the stream.
+      int
+      sync();
+
+      /// Insert multiple characters into the pipe.
+      std::streamsize
+      xsputn(const char_type* s, std::streamsize n);
+
+      /// Insert a sequence of characters into the pipe.
+      std::streamsize
+      write(const char_type* s, std::streamsize n);
+
+      /// Extract a sequence of characters from the pipe.
+      std::streamsize
+      read(char_type* s, std::streamsize n);
+
+      /// Report how many characters can be read from active input without blocking.
+      std::streamsize
+      showmanyc();
+
+    protected:
+      /// Enumerated type to indicate whether stdout or stderr is to be read.
+      enum buf_read_src { rsrc_out = 0, rsrc_err = 1 };
+
+      /// Initialise pipes and fork process.
+      pid_t
+      fork(pmode mode);
+
+      /// Wait for the child process to exit.
+      int
+      wait(bool nohang = false);
+
+      /// Return the file descriptor for the output pipe.
+      fd_type&
+      wpipe();
+
+      /// Return the file descriptor for the active input pipe.
+      fd_type&
+      rpipe();
+
+      /// Return the file descriptor for the specified input pipe.
+      fd_type&
+      rpipe(buf_read_src which);
+
+      void
+      create_buffers(pmode mode);
+
+      void
+      destroy_buffers(pmode mode);
+
+      /// Writes buffered characters to the process' stdin pipe.
+      bool
+      empty_buffer();
+
+      bool
+      fill_buffer(bool non_blocking = false);
+
+      /// Return the active input buffer.
+      char_type*
+      rbuffer();
+
+      buf_read_src
+      switch_read_buffer(buf_read_src);
+
+    private:
+      basic_pstreambuf(const basic_pstreambuf&);
+      basic_pstreambuf& operator=(const basic_pstreambuf&);
+
+      void
+      init_rbuffers();
+
+      pid_t         ppid_;        // pid of process
+      fd_type       wpipe_;       // pipe used to write to process' stdin
+      fd_type       rpipe_[2];    // two pipes to read from, stdout and stderr
+      char_type*    wbuffer_;
+      char_type*    rbuffer_[2];
+      char_type*    rbufstate_[3];
+      /// Index into rpipe_[] to indicate active source for read operations.
+      buf_read_src  rsrc_;
+      int           status_;      // hold exit status of child process
+      int           error_;       // hold errno if fork() or exec() fails
+    };
+
+  /// Class template for common base class.
+  template <typename CharT, typename Traits = std::char_traits<CharT> >
+    class pstream_common
+    : virtual public std::basic_ios<CharT, Traits>
+    , virtual public pstreams
+    {
+    protected:
+      typedef basic_pstreambuf<CharT, Traits>       streambuf_type;
+
+      typedef pstreams::pmode                       pmode;
+      typedef pstreams::argv_type                   argv_type;
+
+      /// Default constructor.
+      pstream_common();
+
+      /// Constructor that initialises the stream by starting a process.
+      pstream_common(const std::string& cmd, pmode mode);
+
+      /// Constructor that initialises the stream by starting a process.
+      pstream_common(const std::string& file, const argv_type& argv, pmode mode);
+
+      /// Pure virtual destructor.
+      virtual
+      ~pstream_common() = 0;
+
+      /// Start a process.
+      void
+      do_open(const std::string& cmd, pmode mode);
+
+      /// Start a process.
+      void
+      do_open(const std::string& file, const argv_type& argv, pmode mode);
+
+    public:
+      /// Close the pipe.
+      void
+      close();
+
+      /// Report whether the stream's buffer has been initialised.
+      bool
+      is_open() const;
+
+      /// Return the command used to initialise the stream.
+      const std::string&
+      command() const;
+
+      /// Return a pointer to the stream buffer.
+      streambuf_type*
+      rdbuf() const;
+
+#if REDI_EVISCERATE_PSTREAMS
+      /// Obtain FILE pointers for each of the process' standard streams.
+      std::size_t
+      fopen(FILE*& in, FILE*& out, FILE*& err);
+#endif
+
+    protected:
+      std::string       command_; ///< The command used to start the process.
+      streambuf_type    buf_;     ///< The stream buffer.
+    };
+
+
+  /**
+   * @class basic_ipstream
+   * @brief Class template for Input PStreams.
+   *
+   * Reading from an ipstream reads the command's standard output and/or
+   * standard error (depending on how the ipstream is opened)
+   * and the command's standard input is the same as that of the process
+   * that created the object, unless altered by the command itself.
+   */
+
+  template <typename CharT, typename Traits = std::char_traits<CharT> >
+    class basic_ipstream
+    : public std::basic_istream<CharT, Traits>
+    , public pstream_common<CharT, Traits>
+    , virtual public pstreams
+    {
+      typedef std::basic_istream<CharT, Traits>     istream_type;
+      typedef pstream_common<CharT, Traits>         pbase_type;
+
+      using pbase_type::buf_;  // declare name in this scope
+
+      // Ensure a basic_ipstream will read from at least one pipe
+      pmode readable(pmode mode)
+      {
+        if (!(mode & (pstdout|pstderr)))
+          mode |= pstdout;
+        return mode;
+      }
+
+    public:
+      /// Type used to specify how to connect to the process.
+      typedef typename pbase_type::pmode            pmode;
+
+      /// Type used to hold the arguments for a command.
+      typedef typename pbase_type::argv_type        argv_type;
+
+      /// Default constructor, creates an uninitialised stream.
+      basic_ipstream()
+      : istream_type(NULL), pbase_type()
+      { }
+
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling do_open() with the supplied
+       * arguments.
+       *
+       * @param cmd   a string containing a shell command.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, pmode)
+       */
+      explicit
+      basic_ipstream(const std::string& cmd, pmode mode = pstdout)
+      : istream_type(NULL), pbase_type(cmd, readable(mode))
+      { }
+
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling do_open() with the supplied
+       * arguments.
+       *
+       * @param file  a string containing the pathname of a program to execute.
+       * @param argv  a vector of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      basic_ipstream( const std::string& file,
+                      const argv_type& argv,
+                      pmode mode = pstdout )
+      : istream_type(NULL), pbase_type(file, argv, readable(mode))
+      { }
+
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling
+       * @c do_open(argv[0],argv,mode|pstdout)
+       *
+       * @param argv  a vector of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      explicit
+      basic_ipstream(const argv_type& argv, pmode mode = pstdout)
+      : istream_type(NULL), pbase_type(argv.at(0), argv, readable(mode))
+      { }
+
+#if __cplusplus >= 201103L
+      template<typename T>
+        explicit
+        basic_ipstream(std::initializer_list<T> args, pmode mode = pstdout)
+        : basic_ipstream(argv_type(args.begin(), args.end()), mode)
+        { }
+#endif
+
+      /**
+       * @brief Destructor.
+       *
+       * Closes the stream and waits for the child to exit.
+       */
+      ~basic_ipstream()
+      { }
+
+      /**
+       * @brief Start a process.
+       *
+       * Calls do_open( @a cmd , @a mode|pstdout ).
+       *
+       * @param cmd   a string containing a shell command.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, pmode)
+       */
+      void
+      open(const std::string& cmd, pmode mode = pstdout)
+      {
+        this->do_open(cmd, readable(mode));
+      }
+
+      /**
+       * @brief Start a process.
+       *
+       * Calls do_open( @a file , @a argv , @a mode|pstdout ).
+       *
+       * @param file  a string containing the pathname of a program to execute.
+       * @param argv  a vector of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      void
+      open( const std::string& file,
+            const argv_type& argv,
+            pmode mode = pstdout )
+      {
+        this->do_open(file, argv, readable(mode));
+      }
+
+      /**
+       * @brief Set streambuf to read from process' @c stdout.
+       * @return  @c *this
+       */
+      basic_ipstream&
+      out()
+      {
+        this->buf_.read_err(false);
+        return *this;
+      }
+
+      /**
+       * @brief Set streambuf to read from process' @c stderr.
+       * @return  @c *this
+       */
+      basic_ipstream&
+      err()
+      {
+        this->buf_.read_err(true);
+        return *this;
+      }
+    };
+
+
+  /**
+   * @class basic_opstream
+   * @brief Class template for Output PStreams.
+   *
+   * Writing to an open opstream writes to the standard input of the command;
+   * the command's standard output is the same as that of the process that
+   * created the pstream object, unless altered by the command itself.
+   */
+
+  template <typename CharT, typename Traits = std::char_traits<CharT> >
+    class basic_opstream
+    : public std::basic_ostream<CharT, Traits>
+    , public pstream_common<CharT, Traits>
+    , virtual public pstreams
+    {
+      typedef std::basic_ostream<CharT, Traits>     ostream_type;
+      typedef pstream_common<CharT, Traits>         pbase_type;
+
+      using pbase_type::buf_;  // declare name in this scope
+
+    public:
+      /// Type used to specify how to connect to the process.
+      typedef typename pbase_type::pmode            pmode;
+
+      /// Type used to hold the arguments for a command.
+      typedef typename pbase_type::argv_type        argv_type;
+
+      /// Default constructor, creates an uninitialised stream.
+      basic_opstream()
+      : ostream_type(NULL), pbase_type()
+      { }
+
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling do_open() with the supplied
+       * arguments.
+       *
+       * @param cmd   a string containing a shell command.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, pmode)
+       */
+      explicit
+      basic_opstream(const std::string& cmd, pmode mode = pstdin)
+      : ostream_type(NULL), pbase_type(cmd, mode|pstdin)
+      { }
+
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling do_open() with the supplied
+       * arguments.
+       *
+       * @param file  a string containing the pathname of a program to execute.
+       * @param argv  a vector of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      basic_opstream( const std::string& file,
+                      const argv_type& argv,
+                      pmode mode = pstdin )
+      : ostream_type(NULL), pbase_type(file, argv, mode|pstdin)
+      { }
+
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling
+       * @c do_open(argv[0],argv,mode|pstdin)
+       *
+       * @param argv  a vector of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      explicit
+      basic_opstream(const argv_type& argv, pmode mode = pstdin)
+      : ostream_type(NULL), pbase_type(argv.at(0), argv, mode|pstdin)
+      { }
+
+#if __cplusplus >= 201103L
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * @param args  a list of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      template<typename T>
+        explicit
+        basic_opstream(std::initializer_list<T> args, pmode mode = pstdin)
+        : basic_opstream(argv_type(args.begin(), args.end()), mode)
+        { }
+#endif
+
+      /**
+       * @brief Destructor
+       *
+       * Closes the stream and waits for the child to exit.
+       */
+      ~basic_opstream() { }
+
+      /**
+       * @brief Start a process.
+       *
+       * Calls do_open( @a cmd , @a mode|pstdin ).
+       *
+       * @param cmd   a string containing a shell command.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, pmode)
+       */
+      void
+      open(const std::string& cmd, pmode mode = pstdin)
+      {
+        this->do_open(cmd, mode|pstdin);
+      }
+
+      /**
+       * @brief Start a process.
+       *
+       * Calls do_open( @a file , @a argv , @a mode|pstdin ).
+       *
+       * @param file  a string containing the pathname of a program to execute.
+       * @param argv  a vector of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      void
+      open( const std::string& file,
+            const argv_type& argv,
+            pmode mode = pstdin)
+      {
+        this->do_open(file, argv, mode|pstdin);
+      }
+    };
+
+
+  /**
+   * @class basic_pstream
+   * @brief Class template for Bidirectional PStreams.
+   *
+   * Writing to a pstream opened with @c pmode @c pstdin writes to the
+   * standard input of the command.
+   * Reading from a pstream opened with @c pmode @c pstdout and/or @c pstderr
+   * reads the command's standard output and/or standard error.
+   * Any of the process' @c stdin, @c stdout or @c stderr that is not
+   * connected to the pstream (as specified by the @c pmode)
+   * will be the same as the process that created the pstream object,
+   * unless altered by the command itself.
+   */
+  template <typename CharT, typename Traits = std::char_traits<CharT> >
+    class basic_pstream
+    : public std::basic_iostream<CharT, Traits>
+    , public pstream_common<CharT, Traits>
+    , virtual public pstreams
+    {
+      typedef std::basic_iostream<CharT, Traits>    iostream_type;
+      typedef pstream_common<CharT, Traits>         pbase_type;
+
+      using pbase_type::buf_;  // declare name in this scope
+
+    public:
+      /// Type used to specify how to connect to the process.
+      typedef typename pbase_type::pmode            pmode;
+
+      /// Type used to hold the arguments for a command.
+      typedef typename pbase_type::argv_type        argv_type;
+
+      /// Default constructor, creates an uninitialised stream.
+      basic_pstream()
+      : iostream_type(NULL), pbase_type()
+      { }
+
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling do_open() with the supplied
+       * arguments.
+       *
+       * @param cmd   a string containing a shell command.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, pmode)
+       */
+      explicit
+      basic_pstream(const std::string& cmd, pmode mode = pstdout|pstdin)
+      : iostream_type(NULL), pbase_type(cmd, mode)
+      { }
+
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling do_open() with the supplied
+       * arguments.
+       *
+       * @param file  a string containing the pathname of a program to execute.
+       * @param argv  a vector of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      basic_pstream( const std::string& file,
+                     const argv_type& argv,
+                     pmode mode = pstdout|pstdin )
+      : iostream_type(NULL), pbase_type(file, argv, mode)
+      { }
+
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling
+       * @c do_open(argv[0],argv,mode)
+       *
+       * @param argv  a vector of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      explicit
+      basic_pstream(const argv_type& argv, pmode mode = pstdout|pstdin)
+      : iostream_type(NULL), pbase_type(argv.at(0), argv, mode)
+      { }
+
+#if __cplusplus >= 201103L
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * @param l     a list of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      template<typename T>
+        explicit
+        basic_pstream(std::initializer_list<T> l, pmode mode = pstdout|pstdin)
+        : basic_pstream(argv_type(l.begin(), l.end()), mode)
+        { }
+#endif
+
+      /**
+       * @brief Destructor
+       *
+       * Closes the stream and waits for the child to exit.
+       */
+      ~basic_pstream() { }
+
+      /**
+       * @brief Start a process.
+       *
+       * Calls do_open( @a cnd , @a mode ).
+       *
+       * @param cmd   a string containing a shell command.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, pmode)
+       */
+      void
+      open(const std::string& cmd, pmode mode = pstdout|pstdin)
+      {
+        this->do_open(cmd, mode);
+      }
+
+      /**
+       * @brief Start a process.
+       *
+       * Calls do_open( @a file , @a argv , @a mode ).
+       *
+       * @param file  a string containing the pathname of a program to execute.
+       * @param argv  a vector of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      void
+      open( const std::string& file,
+            const argv_type& argv,
+            pmode mode = pstdout|pstdin )
+      {
+        this->do_open(file, argv, mode);
+      }
+
+      /**
+       * @brief Set streambuf to read from process' @c stdout.
+       * @return  @c *this
+       */
+      basic_pstream&
+      out()
+      {
+        this->buf_.read_err(false);
+        return *this;
+      }
+
+      /**
+       * @brief Set streambuf to read from process' @c stderr.
+       * @return  @c *this
+       */
+      basic_pstream&
+      err()
+      {
+        this->buf_.read_err(true);
+        return *this;
+      }
+    };
+
+
+  /**
+   * @class basic_rpstream
+   * @brief Class template for Restricted PStreams.
+   *
+   * Writing to an rpstream opened with @c pmode @c pstdin writes to the
+   * standard input of the command.
+   * It is not possible to read directly from an rpstream object, to use
+   * an rpstream as in istream you must call either basic_rpstream::out()
+   * or basic_rpstream::err(). This is to prevent accidental reads from
+   * the wrong input source. If the rpstream was not opened with @c pmode
+   * @c pstderr then the class cannot read the process' @c stderr, and
+   * basic_rpstream::err() will return an istream that reads from the
+   * process' @c stdout, and vice versa.
+   * Reading from an rpstream opened with @c pmode @c pstdout and/or
+   * @c pstderr reads the command's standard output and/or standard error.
+   * Any of the process' @c stdin, @c stdout or @c stderr that is not
+   * connected to the pstream (as specified by the @c pmode)
+   * will be the same as the process that created the pstream object,
+   * unless altered by the command itself.
+   */
+
+  template <typename CharT, typename Traits = std::char_traits<CharT> >
+    class basic_rpstream
+    : public std::basic_ostream<CharT, Traits>
+    , private std::basic_istream<CharT, Traits>
+    , private pstream_common<CharT, Traits>
+    , virtual public pstreams
+    {
+      typedef std::basic_ostream<CharT, Traits>     ostream_type;
+      typedef std::basic_istream<CharT, Traits>     istream_type;
+      typedef pstream_common<CharT, Traits>         pbase_type;
+
+      using pbase_type::buf_;  // declare name in this scope
+
+    public:
+      /// Type used to specify how to connect to the process.
+      typedef typename pbase_type::pmode            pmode;
+
+      /// Type used to hold the arguments for a command.
+      typedef typename pbase_type::argv_type        argv_type;
+
+      /// Default constructor, creates an uninitialised stream.
+      basic_rpstream()
+      : ostream_type(NULL), istream_type(NULL), pbase_type()
+      { }
+
+      /**
+       * @brief  Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling do_open() with the supplied
+       * arguments.
+       *
+       * @param cmd   a string containing a shell command.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, pmode)
+       */
+      explicit
+      basic_rpstream(const std::string& cmd, pmode mode = pstdout|pstdin)
+      : ostream_type(NULL) , istream_type(NULL) , pbase_type(cmd, mode)
+      { }
+
+      /**
+       * @brief  Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling do_open() with the supplied
+       * arguments.
+       *
+       * @param file a string containing the pathname of a program to execute.
+       * @param argv a vector of argument strings passed to the new program.
+       * @param mode the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      basic_rpstream( const std::string& file,
+                      const argv_type& argv,
+                      pmode mode = pstdout|pstdin )
+      : ostream_type(NULL), istream_type(NULL), pbase_type(file, argv, mode)
+      { }
+
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * Initialises the stream buffer by calling
+       * @c do_open(argv[0],argv,mode)
+       *
+       * @param argv  a vector of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      explicit
+      basic_rpstream(const argv_type& argv, pmode mode = pstdout|pstdin)
+      : ostream_type(NULL), istream_type(NULL),
+        pbase_type(argv.at(0), argv, mode)
+      { }
+
+#if __cplusplus >= 201103L
+      /**
+       * @brief Constructor that initialises the stream by starting a process.
+       *
+       * @param l     a list of argument strings passed to the new program.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      template<typename T>
+        explicit
+        basic_rpstream(std::initializer_list<T> l, pmode mode = pstdout|pstdin)
+        : basic_rpstream(argv_type(l.begin(), l.end()), mode)
+        { }
+#endif
+
+      /// Destructor
+      ~basic_rpstream() { }
+
+      /**
+       * @brief  Start a process.
+       *
+       * Calls do_open( @a cmd , @a mode ).
+       *
+       * @param cmd   a string containing a shell command.
+       * @param mode  the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, pmode)
+       */
+      void
+      open(const std::string& cmd, pmode mode = pstdout|pstdin)
+      {
+        this->do_open(cmd, mode);
+      }
+
+      /**
+       * @brief  Start a process.
+       *
+       * Calls do_open( @a file , @a argv , @a mode ).
+       *
+       * @param file a string containing the pathname of a program to execute.
+       * @param argv a vector of argument strings passed to the new program.
+       * @param mode the I/O mode to use when opening the pipe.
+       * @see   do_open(const std::string&, const argv_type&, pmode)
+       */
+      void
+      open( const std::string& file,
+            const argv_type& argv,
+            pmode mode = pstdout|pstdin )
+      {
+        this->do_open(file, argv, mode);
+      }
+
+      /**
+       * @brief  Obtain a reference to the istream that reads
+       *         the process' @c stdout.
+       * @return @c *this
+       */
+      istream_type&
+      out()
+      {
+        this->buf_.read_err(false);
+        return *this;
+      }
+
+      /**
+       * @brief  Obtain a reference to the istream that reads
+       *         the process' @c stderr.
+       * @return @c *this
+       */
+      istream_type&
+      err()
+      {
+        this->buf_.read_err(true);
+        return *this;
+      }
+    };
+
+
+  /// Type definition for common template specialisation.
+  typedef basic_pstreambuf<char> pstreambuf;
+  /// Type definition for common template specialisation.
+  typedef basic_ipstream<char> ipstream;
+  /// Type definition for common template specialisation.
+  typedef basic_opstream<char> opstream;
+  /// Type definition for common template specialisation.
+  typedef basic_pstream<char> pstream;
+  /// Type definition for common template specialisation.
+  typedef basic_rpstream<char> rpstream;
+
+
+  /**
+   * When inserted into an output pstream the manipulator calls
+   * basic_pstreambuf<C,T>::peof() to close the output pipe,
+   * causing the child process to receive the end-of-file indicator
+   * on subsequent reads from its @c stdin stream.
+   *
+   * @brief   Manipulator to close the pipe connected to the process' stdin.
+   * @param   s  An output PStream class.
+   * @return  The stream object the manipulator was invoked on.
+   * @see     basic_pstreambuf<C,T>::peof()
+   * @relates basic_opstream basic_pstream basic_rpstream
+   */
+  template <typename C, typename T>
+    inline std::basic_ostream<C,T>&
+    peof(std::basic_ostream<C,T>& s)
+    {
+      typedef basic_pstreambuf<C,T> pstreambuf_type;
+      if (pstreambuf_type* p = dynamic_cast<pstreambuf_type*>(s.rdbuf()))
+        p->peof();
+      return s;
+    }
+
+
+  /*
+   * member definitions for pstreambuf
+   */
+
+
+  /**
+   * @class basic_pstreambuf
+   * Provides underlying streambuf functionality for the PStreams classes.
+   */
+
+  /** Creates an uninitialised stream buffer. */
+  template <typename C, typename T>
+    inline
+    basic_pstreambuf<C,T>::basic_pstreambuf()
+    : ppid_(-1)   // initialise to -1 to indicate no process run yet.
+    , wpipe_(-1)
+    , wbuffer_(NULL)
+    , rsrc_(rsrc_out)
+    , status_(-1)
+    , error_(0)
+    {
+      init_rbuffers();
+    }
+
+  /**
+   * Initialises the stream buffer by calling open() with the supplied
+   * arguments.
+   *
+   * @param cmd   a string containing a shell command.
+   * @param mode  the I/O mode to use when opening the pipe.
+   * @see   open()
+   */
+  template <typename C, typename T>
+    inline
+    basic_pstreambuf<C,T>::basic_pstreambuf(const std::string& cmd, pmode mode)
+    : ppid_(-1)   // initialise to -1 to indicate no process run yet.
+    , wpipe_(-1)
+    , wbuffer_(NULL)
+    , rsrc_(rsrc_out)
+    , status_(-1)
+    , error_(0)
+    {
+      init_rbuffers();
+      open(cmd, mode);
+    }
+
+  /**
+   * Initialises the stream buffer by calling open() with the supplied
+   * arguments.
+   *
+   * @param file  a string containing the name of a program to execute.
+   * @param argv  a vector of argument strings passsed to the new program.
+   * @param mode  the I/O mode to use when opening the pipe.
+   * @see   open()
+   */
+  template <typename C, typename T>
+    inline
+    basic_pstreambuf<C,T>::basic_pstreambuf( const std::string& file,
+                                             const argv_type& argv,
+                                             pmode mode )
+    : ppid_(-1)   // initialise to -1 to indicate no process run yet.
+    , wpipe_(-1)
+    , wbuffer_(NULL)
+    , rsrc_(rsrc_out)
+    , status_(-1)
+    , error_(0)
+    {
+      init_rbuffers();
+      open(file, argv, mode);
+    }
+
+  /**
+   * Closes the stream by calling close().
+   * @see close()
+   */
+  template <typename C, typename T>
+    inline
+    basic_pstreambuf<C,T>::~basic_pstreambuf()
+    {
+      close();
+    }
+
+  /**
+   * Starts a new process by passing @a command to the shell (/bin/sh)
+   * and opens pipes to the process with the specified @a mode.
+   *
+   * If @a mode contains @c pstdout the initial read source will be
+   * the child process' stdout, otherwise if @a mode  contains @c pstderr
+   * the initial read source will be the child's stderr.
+   *
+   * Will duplicate the actions of  the  shell  in searching for an
+   * executable file if the specified file name does not contain a slash (/)
+   * character.
+   *
+   * @warning
+   * There is no way to tell whether the shell command succeeded, this
+   * function will always succeed unless resource limits (such as
+   * memory usage, or number of processes or open files) are exceeded.
+   * This means is_open() will return true even if @a command cannot
+   * be executed.
+   * Use pstreambuf::open(const std::string&, const argv_type&, pmode)
+   * if you need to know whether the command failed to execute.
+   *
+   * @param   command  a string containing a shell command.
+   * @param   mode     a bitwise OR of one or more of @c out, @c in, @c err.
+   * @return  NULL if the shell could not be started or the
+   *          pipes could not be opened, @c this otherwise.
+   * @see     <b>execl</b>(3)
+   */
+  template <typename C, typename T>
+    basic_pstreambuf<C,T>*
+    basic_pstreambuf<C,T>::open(const std::string& command, pmode mode)
+    {
+      const char * shell_path = "/bin/sh";
+#if 0
+      const std::string argv[] = { "sh", "-c", command };
+      return this->open(shell_path, argv_type(argv, argv+3), mode);
+#else
+      basic_pstreambuf<C,T>* ret = NULL;
+
+      if (!is_open())
+      {
+        switch(fork(mode))
+        {
+        case 0 :
+          // this is the new process, exec command
+          ::execl(shell_path, "sh", "-c", command.c_str(), (char*)NULL);
+
+          // can only reach this point if exec() failed
+
+          // parent can get exit code from waitpid()
+          ::_exit(errno);
+          // using std::exit() would make static dtors run twice
+
+        case -1 :
+          // couldn't fork, error already handled in pstreambuf::fork()
+          break;
+
+        default :
+          // this is the parent process
+          // activate buffers
+          create_buffers(mode);
+          ret = this;
+        }
+      }
+      return ret;
+#endif
+    }
+
+  /**
+   * @brief  Helper function to close a file descriptor.
+   *
+   * Inspects @a fd and calls <b>close</b>(3) if it has a non-negative value.
+   *
+   * @param   fd  a file descriptor.
+   * @relates basic_pstreambuf
+   */
+  inline void
+  close_fd(pstreams::fd_type& fd)
+  {
+    if (fd >= 0 && ::close(fd) == 0)
+      fd = -1;
+  }
+
+  /**
+   * @brief  Helper function to close an array of file descriptors.
+   *
+   * Calls @c close_fd() on each member of the array.
+   * The length of the array is determined automatically by
+   * template argument deduction to avoid errors.
+   *
+   * @param   fds  an array of file descriptors.
+   * @relates basic_pstreambuf
+   */
+  template <int N>
+    inline void
+    close_fd_array(pstreams::fd_type (&fds)[N])
+    {
+      for (std::size_t i = 0; i < N; ++i)
+        close_fd(fds[i]);
+    }
+
+  /**
+   * Starts a new process by executing @a file with the arguments in
+   * @a argv and opens pipes to the process with the specified @a mode.
+   *
+   * By convention @c argv[0] should be the file name of the file being
+   * executed.
+   *
+   * If @a mode contains @c pstdout the initial read source will be
+   * the child process' stdout, otherwise if @a mode  contains @c pstderr
+   * the initial read source will be the child's stderr.
+   *
+   * Will duplicate the actions of  the  shell  in searching for an
+   * executable file if the specified file name does not contain a slash (/)
+   * character.
+   *
+   * Iff @a file is successfully executed then is_open() will return true.
+   * Otherwise, pstreambuf::error() can be used to obtain the value of
+   * @c errno that was set by <b>execvp</b>(3) in the child process.
+   *
+   * The exit status of the new process will be returned by
+   * pstreambuf::status() after pstreambuf::exited() returns true.
+   *
+   * @param   file  a string containing the pathname of a program to execute.
+   * @param   argv  a vector of argument strings passed to the new program.
+   * @param   mode  a bitwise OR of one or more of @c out, @c in and @c err.
+   * @return  NULL if a pipe could not be opened or if the program could
+   *          not be executed, @c this otherwise.
+   * @see     <b>execvp</b>(3)
+   */
+  template <typename C, typename T>
+    basic_pstreambuf<C,T>*
+    basic_pstreambuf<C,T>::open( const std::string& file,
+                                 const argv_type& argv,
+                                 pmode mode )
+    {
+      basic_pstreambuf<C,T>* ret = NULL;
+
+      if (!is_open())
+      {
+        // constants for read/write ends of pipe
+        enum { RD, WR };
+
+        // open another pipe and set close-on-exec
+        fd_type ck_exec[] = { -1, -1 };
+        if (-1 == ::pipe(ck_exec)
+            || -1 == ::fcntl(ck_exec[RD], F_SETFD, FD_CLOEXEC)
+            || -1 == ::fcntl(ck_exec[WR], F_SETFD, FD_CLOEXEC))
+        {
+          error_ = errno;
+          close_fd_array(ck_exec);
+        }
+        else
+        {
+          switch(fork(mode))
+          {
+          case 0 :
+            // this is the new process, exec command
+            {
+              char** arg_v = new char*[argv.size()+1];
+              for (std::size_t i = 0; i < argv.size(); ++i)
+              {
+                const std::string& src = argv[i];
+                char*& dest = arg_v[i];
+                dest = new char[src.size()+1];
+                dest[ src.copy(dest, src.size()) ] = '\0';
+              }
+              arg_v[argv.size()] = NULL;
+
+              ::execvp(file.c_str(), arg_v);
+
+              // can only reach this point if exec() failed
+
+              // parent can get error code from ck_exec pipe
+              error_ = errno;
+
+              while (::write(ck_exec[WR], &error_, sizeof(error_)) == -1
+                  && errno == EINTR)
+              { }
+
+              ::close(ck_exec[WR]);
+              ::close(ck_exec[RD]);
+
+              ::_exit(error_);
+              // using std::exit() would make static dtors run twice
+            }
+
+          case -1 :
+            // couldn't fork, error already handled in pstreambuf::fork()
+            close_fd_array(ck_exec);
+            break;
+
+          default :
+            // this is the parent process
+
+            // check child called exec() successfully
+            ::close(ck_exec[WR]);
+            switch (::read(ck_exec[RD], &error_, sizeof(error_)))
+            {
+            case 0:
+              // activate buffers
+              create_buffers(mode);
+              ret = this;
+              break;
+            case -1:
+              error_ = errno;
+              break;
+            default:
+              // error_ contains error code from child
+              // call wait() to clean up and set ppid_ to 0
+              this->wait();
+              break;
+            }
+            ::close(ck_exec[RD]);
+          }
+        }
+      }
+      return ret;
+    }
+
+  /**
+   * Creates pipes as specified by @a mode and calls @c fork() to create
+   * a new process. If the fork is successful the parent process stores
+   * the child's PID and the opened pipes and the child process replaces
+   * its standard streams with the opened pipes.
+   *
+   * If an error occurs the error code will be set to one of the possible
+   * errors for @c pipe() or @c fork().
+   * See your system's documentation for these error codes.
+   *
+   * @param   mode  an OR of pmodes specifying which of the child's
+   *                standard streams to connect to.
+   * @return  On success the PID of the child is returned in the parent's
+   *          context and zero is returned in the child's context.
+   *          On error -1 is returned and the error code is set appropriately.
+   */
+  template <typename C, typename T>
+    pid_t
+    basic_pstreambuf<C,T>::fork(pmode mode)
+    {
+      pid_t pid = -1;
+
+      // Three pairs of file descriptors, for pipes connected to the
+      // process' stdin, stdout and stderr
+      // (stored in a single array so close_fd_array() can close all at once)
+      fd_type fd[] = { -1, -1, -1, -1, -1, -1 };
+      fd_type* const pin = fd;
+      fd_type* const pout = fd+2;
+      fd_type* const perr = fd+4;
+
+      // constants for read/write ends of pipe
+      enum { RD, WR };
+
+      // N.B.
+      // For the pstreambuf pin is an output stream and
+      // pout and perr are input streams.
+
+      if (!error_ && mode&pstdin && ::pipe(pin))
+        error_ = errno;
+
+      if (!error_ && mode&pstdout && ::pipe(pout))
+        error_ = errno;
+
+      if (!error_ && mode&pstderr && ::pipe(perr))
+        error_ = errno;
+
+      if (!error_)
+      {
+        pid = ::fork();
+        switch (pid)
+        {
+          case 0 :
+          {
+            // this is the new process
+
+            // for each open pipe close one end and redirect the
+            // respective standard stream to the other end
+
+            if (*pin >= 0)
+            {
+              ::close(pin[WR]);
+              ::dup2(pin[RD], STDIN_FILENO);
+              ::close(pin[RD]);
+            }
+            if (*pout >= 0)
+            {
+              ::close(pout[RD]);
+              ::dup2(pout[WR], STDOUT_FILENO);
+              ::close(pout[WR]);
+            }
+            if (*perr >= 0)
+            {
+              ::close(perr[RD]);
+              ::dup2(perr[WR], STDERR_FILENO);
+              ::close(perr[WR]);
+            }
+
+#ifdef _POSIX_JOB_CONTROL
+            if (mode&newpg)
+              ::setpgid(0, 0); // Change to a new process group
+#endif
+
+            break;
+          }
+          case -1 :
+          {
+            // couldn't fork for some reason
+            error_ = errno;
+            // close any open pipes
+            close_fd_array(fd);
+            break;
+          }
+          default :
+          {
+            // this is the parent process, store process' pid
+            ppid_ = pid;
+
+            // store one end of open pipes and close other end
+            if (*pin >= 0)
+            {
+              wpipe_ = pin[WR];
+              ::close(pin[RD]);
+            }
+            if (*pout >= 0)
+            {
+              rpipe_[rsrc_out] = pout[RD];
+              ::close(pout[WR]);
+            }
+            if (*perr >= 0)
+            {
+              rpipe_[rsrc_err] = perr[RD];
+              ::close(perr[WR]);
+            }
+          }
+        }
+      }
+      else
+      {
+        // close any pipes we opened before failure
+        close_fd_array(fd);
+      }
+      return pid;
+    }
+
+  /**
+   * Closes all pipes and calls wait() to wait for the process to finish.
+   * If an error occurs the error code will be set to one of the possible
+   * errors for @c waitpid().
+   * See your system's documentation for these errors.
+   *
+   * @return  @c this on successful close or @c NULL if there is no
+   *          process to close or if an error occurs.
+   */
+  template <typename C, typename T>
+    basic_pstreambuf<C,T>*
+    basic_pstreambuf<C,T>::close()
+    {
+      const bool running = is_open();
+
+      sync(); // this might call wait() and reap the child process
+
+      // rather than trying to work out whether or not we need to clean up
+      // just do it anyway, all cleanup functions are safe to call twice.
+
+      destroy_buffers(pstdin|pstdout|pstderr);
+
+      // close pipes before wait() so child gets EOF/SIGPIPE
+      close_fd(wpipe_);
+      close_fd_array(rpipe_);
+
+      do
+      {
+        error_ = 0;
+      } while (wait() == -1 && error() == EINTR);
+
+      return running ? this : NULL;
+    }
+
+  /**
+   *  Called on construction to initialise the arrays used for reading.
+   */
+  template <typename C, typename T>
+    inline void
+    basic_pstreambuf<C,T>::init_rbuffers()
+    {
+      rpipe_[rsrc_out] = rpipe_[rsrc_err] = -1;
+      rbuffer_[rsrc_out] = rbuffer_[rsrc_err] = NULL;
+      rbufstate_[0] = rbufstate_[1] = rbufstate_[2] = NULL;
+    }
+
+  template <typename C, typename T>
+    void
+    basic_pstreambuf<C,T>::create_buffers(pmode mode)
+    {
+      if (mode & pstdin)
+      {
+        delete[] wbuffer_;
+        wbuffer_ = new char_type[bufsz];
+        this->setp(wbuffer_, wbuffer_ + bufsz);
+      }
+      if (mode & pstdout)
+      {
+        delete[] rbuffer_[rsrc_out];
+        rbuffer_[rsrc_out] = new char_type[bufsz];
+        rsrc_ = rsrc_out;
+        this->setg(rbuffer_[rsrc_out] + pbsz, rbuffer_[rsrc_out] + pbsz,
+            rbuffer_[rsrc_out] + pbsz);
+      }
+      if (mode & pstderr)
+      {
+        delete[] rbuffer_[rsrc_err];
+        rbuffer_[rsrc_err] = new char_type[bufsz];
+        if (!(mode & pstdout))
+        {
+          rsrc_ = rsrc_err;
+          this->setg(rbuffer_[rsrc_err] + pbsz, rbuffer_[rsrc_err] + pbsz,
+              rbuffer_[rsrc_err] + pbsz);
+        }
+      }
+    }
+
+  template <typename C, typename T>
+    void
+    basic_pstreambuf<C,T>::destroy_buffers(pmode mode)
+    {
+      if (mode & pstdin)
+      {
+        this->setp(NULL, NULL);
+        delete[] wbuffer_;
+        wbuffer_ = NULL;
+      }
+      if (mode & pstdout)
+      {
+        if (rsrc_ == rsrc_out)
+          this->setg(NULL, NULL, NULL);
+        delete[] rbuffer_[rsrc_out];
+        rbuffer_[rsrc_out] = NULL;
+      }
+      if (mode & pstderr)
+      {
+        if (rsrc_ == rsrc_err)
+          this->setg(NULL, NULL, NULL);
+        delete[] rbuffer_[rsrc_err];
+        rbuffer_[rsrc_err] = NULL;
+      }
+    }
+
+  template <typename C, typename T>
+    typename basic_pstreambuf<C,T>::buf_read_src
+    basic_pstreambuf<C,T>::switch_read_buffer(buf_read_src src)
+    {
+      if (rsrc_ != src)
+      {
+        char_type* tmpbufstate[] = {this->eback(), this->gptr(), this->egptr()};
+        this->setg(rbufstate_[0], rbufstate_[1], rbufstate_[2]);
+        for (std::size_t i = 0; i < 3; ++i)
+          rbufstate_[i] = tmpbufstate[i];
+        rsrc_ = src;
+      }
+      return rsrc_;
+    }
+
+  /**
+   * Suspends execution and waits for the associated process to exit, or
+   * until a signal is delivered whose action is to terminate the current
+   * process or to call a signal handling function. If the process has
+   * already exited (i.e. it is a "zombie" process) then wait() returns
+   * immediately.  Waiting for the child process causes all its system
+   * resources to be freed.
+   *
+   * error() will return EINTR if wait() is interrupted by a signal.
+   *
+   * @param   nohang  true to return immediately if the process has not exited.
+   * @return  1 if the process has exited and wait() has not yet been called.
+   *          0 if @a nohang is true and the process has not exited yet.
+   *          -1 if no process has been started or if an error occurs,
+   *          in which case the error can be found using error().
+   */
+  template <typename C, typename T>
+    int
+    basic_pstreambuf<C,T>::wait(bool nohang)
+    {
+      int child_exited = -1;
+      if (is_open())
+      {
+        int exit_status;
+        switch(::waitpid(ppid_, &exit_status, nohang ? WNOHANG : 0))
+        {
+          case 0 :
+            // nohang was true and process has not exited
+            child_exited = 0;
+            break;
+          case -1 :
+            error_ = errno;
+            break;
+          default :
+            // process has exited
+            ppid_ = 0;
+            status_ = exit_status;
+            child_exited = 1;
+            // Close wpipe, would get SIGPIPE if we used it.
+            destroy_buffers(pstdin);
+            close_fd(wpipe_);
+            // Must free read buffers and pipes on destruction
+            // or next call to open()/close()
+            break;
+        }
+      }
+      return child_exited;
+    }
+
+  /**
+   * Sends the specified signal to the process.  A signal can be used to
+   * terminate a child process that would not exit otherwise.
+   *
+   * If an error occurs the error code will be set to one of the possible
+   * errors for @c kill().  See your system's documentation for these errors.
+   *
+   * @param   signal  A signal to send to the child process.
+   * @return  @c this or @c NULL if @c kill() fails.
+   */
+  template <typename C, typename T>
+    inline basic_pstreambuf<C,T>*
+    basic_pstreambuf<C,T>::kill(int signal)
+    {
+      basic_pstreambuf<C,T>* ret = NULL;
+      if (is_open())
+      {
+        if (::kill(ppid_, signal))
+          error_ = errno;
+        else
+        {
+#if 0
+          // TODO call exited() to check for exit and clean up? leave to user?
+          if (signal==SIGTERM || signal==SIGKILL)
+            this->exited();
+#endif
+          ret = this;
+        }
+      }
+      return ret;
+    }
+
+  /**
+   * Sends the specified signal to the process group of the child process.
+   * A signal can be used to terminate a child process that would not exit
+   * otherwise, or to kill the process and its own children.
+   *
+   * If an error occurs the error code will be set to one of the possible
+   * errors for @c getpgid() or @c kill().  See your system's documentation
+   * for these errors. If the child is in the current process group then
+   * NULL will be returned and the error code set to EPERM.
+   *
+   * @param   signal  A signal to send to the child process.
+   * @return  @c this on success or @c NULL on failure.
+   */
+  template <typename C, typename T>
+    inline basic_pstreambuf<C,T>*
+    basic_pstreambuf<C,T>::killpg(int signal)
+    {
+      basic_pstreambuf<C,T>* ret = NULL;
+#ifdef _POSIX_JOB_CONTROL
+      if (is_open())
+      {
+        pid_t pgid = ::getpgid(ppid_);
+        if (pgid == -1)
+          error_ = errno;
+        else if (pgid == ::getpgrp())
+          error_ = EPERM;  // Don't commit suicide
+        else if (::killpg(pgid, signal))
+          error_ = errno;
+        else
+          ret = this;
+      }
+#else
+      error_ = ENOTSUP;
+#endif
+      return ret;
+    }
+
+  /**
+   *  This function can call pstreambuf::wait() and so may change the
+   *  object's state if the child process has already exited.
+   *
+   *  @return  True if the associated process has exited, false otherwise.
+   *  @see     basic_pstreambuf<C,T>::wait()
+   */
+  template <typename C, typename T>
+    inline bool
+    basic_pstreambuf<C,T>::exited()
+    {
+      return ppid_ == 0 || wait(true)==1;
+    }
+
+
+  /**
+   *  @return  The exit status of the child process, or -1 if wait()
+   *           has not yet been called to wait for the child to exit.
+   *  @see     basic_pstreambuf<C,T>::wait()
+   */
+  template <typename C, typename T>
+    inline int
+    basic_pstreambuf<C,T>::status() const
+    {
+      return status_;
+    }
+
+  /**
+   *  @return  The error code of the most recently failed operation, or zero.
+   */
+  template <typename C, typename T>
+    inline int
+    basic_pstreambuf<C,T>::error() const
+    {
+      return error_;
+    }
+
+  /**
+   *  Closes the output pipe, causing the child process to receive the
+   *  end-of-file indicator on subsequent reads from its @c stdin stream.
+   */
+  template <typename C, typename T>
+    inline void
+    basic_pstreambuf<C,T>::peof()
+    {
+      sync();
+      destroy_buffers(pstdin);
+      close_fd(wpipe_);
+    }
+
+  /**
+   * Unlike pstreambuf::exited(), this function will not call wait() and
+   * so will not change the object's state.  This means that once a child
+   * process is executed successfully this function will continue to
+   * return true even after the process exits (until wait() is called.)
+   *
+   * @return  true if a previous call to open() succeeded and wait() has
+   *          not been called and determined that the process has exited,
+   *          false otherwise.
+   */
+  template <typename C, typename T>
+    inline bool
+    basic_pstreambuf<C,T>::is_open() const
+    {
+      return ppid_ > 0;
+    }
+
+  /**
+   * Toggle the stream used for reading. If @a readerr is @c true then the
+   * process' @c stderr output will be used for subsequent extractions, if
+   * @a readerr is false the the process' stdout will be used.
+   * @param   readerr  @c true to read @c stderr, @c false to read @c stdout.
+   * @return  @c true if the requested stream is open and will be used for
+   *          subsequent extractions, @c false otherwise.
+   */
+  template <typename C, typename T>
+    inline bool
+    basic_pstreambuf<C,T>::read_err(bool readerr)
+    {
+      buf_read_src src = readerr ? rsrc_err : rsrc_out;
+      if (rpipe_[src]>=0)
+      {
+        switch_read_buffer(src);
+        return true;
+      }
+      return false;
+    }
+
+  /**
+   * Called when the internal character buffer is not present or is full,
+   * to transfer the buffer contents to the pipe.
+   *
+   * @param   c  a character to be written to the pipe.
+   * @return  @c traits_type::eof() if an error occurs, otherwise if @a c
+   *          is not equal to @c traits_type::eof() it will be buffered and
+   *          a value other than @c traits_type::eof() returned to indicate
+   *          success.
+   */
+  template <typename C, typename T>
+    typename basic_pstreambuf<C,T>::int_type
+    basic_pstreambuf<C,T>::overflow(int_type c)
+    {
+      if (!empty_buffer())
+        return traits_type::eof();
+      else if (!traits_type::eq_int_type(c, traits_type::eof()))
+        return this->sputc(c);
+      else
+        return traits_type::not_eof(c);
+    }
+
+
+  template <typename C, typename T>
+    int
+    basic_pstreambuf<C,T>::sync()
+    {
+      return !exited() && empty_buffer() ? 0 : -1;
+    }
+
+  /**
+   * @param   s  character buffer.
+   * @param   n  buffer length.
+   * @return  the number of characters written.
+   */
+  template <typename C, typename T>
+    std::streamsize
+    basic_pstreambuf<C,T>::xsputn(const char_type* s, std::streamsize n)
+    {
+      std::streamsize done = 0;
+      while (done < n)
+      {
+        if (std::streamsize nbuf = this->epptr() - this->pptr())
+        {
+          nbuf = std::min(nbuf, n - done);
+          traits_type::copy(this->pptr(), s + done, nbuf);
+          this->pbump(nbuf);
+          done += nbuf;
+        }
+        else if (!empty_buffer())
+          break;
+      }
+      return done;
+    }
+
+  /**
+   * @return  true if the buffer was emptied, false otherwise.
+   */
+  template <typename C, typename T>
+    bool
+    basic_pstreambuf<C,T>::empty_buffer()
+    {
+      const std::streamsize count = this->pptr() - this->pbase();
+      if (count > 0)
+      {
+        const std::streamsize written = this->write(this->wbuffer_, count);
+        if (written > 0)
+        {
+          if (const std::streamsize unwritten = count - written)
+            traits_type::move(this->pbase(), this->pbase()+written, unwritten);
+          this->pbump(-written);
+          return true;
+        }
+      }
+      return false;
+    }
+
+  /**
+   * Called when the internal character buffer is is empty, to re-fill it
+   * from the pipe.
+   *
+   * @return The first available character in the buffer,
+   * or @c traits_type::eof() in case of failure.
+   */
+  template <typename C, typename T>
+    typename basic_pstreambuf<C,T>::int_type
+    basic_pstreambuf<C,T>::underflow()
+    {
+      if (this->gptr() < this->egptr() || fill_buffer())
+        return traits_type::to_int_type(*this->gptr());
+      else
+        return traits_type::eof();
+    }
+
+  /**
+   * Attempts to make @a c available as the next character to be read by
+   * @c sgetc().
+   *
+   * @param   c   a character to make available for extraction.
+   * @return  @a c if the character can be made available,
+   *          @c traits_type::eof() otherwise.
+   */
+  template <typename C, typename T>
+    typename basic_pstreambuf<C,T>::int_type
+    basic_pstreambuf<C,T>::pbackfail(int_type c)
+    {
+      if (this->gptr() != this->eback())
+      {
+        this->gbump(-1);
+        if (!traits_type::eq_int_type(c, traits_type::eof()))
+          *this->gptr() = traits_type::to_char_type(c);
+        return traits_type::not_eof(c);
+      }
+      else
+         return traits_type::eof();
+    }
+
+  template <typename C, typename T>
+    std::streamsize
+    basic_pstreambuf<C,T>::showmanyc()
+    {
+      int avail = 0;
+      if (sizeof(char_type) == 1)
+        avail = fill_buffer(true) ? this->egptr() - this->gptr() : -1;
+#ifdef FIONREAD
+      else
+      {
+        if (::ioctl(rpipe(), FIONREAD, &avail) == -1)
+          avail = -1;
+        else if (avail)
+          avail /= sizeof(char_type);
+      }
+#endif
+      return std::streamsize(avail);
+    }
+
+  /**
+   * @return  true if the buffer was filled, false otherwise.
+   */
+  template <typename C, typename T>
+    bool
+    basic_pstreambuf<C,T>::fill_buffer(bool non_blocking)
+    {
+      const std::streamsize pb1 = this->gptr() - this->eback();
+      const std::streamsize pb2 = pbsz;
+      const std::streamsize npb = std::min(pb1, pb2);
+
+      char_type* const rbuf = rbuffer();
+
+      if (npb)
+        traits_type::move(rbuf + pbsz - npb, this->gptr() - npb, npb);
+
+      std::streamsize rc = -1;
+
+      if (non_blocking)
+      {
+        const int flags = ::fcntl(rpipe(), F_GETFL);
+        if (flags != -1)
+        {
+          const bool blocking = !(flags & O_NONBLOCK);
+          if (blocking)
+            ::fcntl(rpipe(), F_SETFL, flags | O_NONBLOCK);  // set non-blocking
+
+          error_ = 0;
+          rc = read(rbuf + pbsz, bufsz - pbsz);
+
+          if (rc == -1 && error_ == EAGAIN)  // nothing available
+            rc = 0;
+          else if (rc == 0)  // EOF
+            rc = -1;
+
+          if (blocking)
+            ::fcntl(rpipe(), F_SETFL, flags); // restore
+        }
+      }
+      else
+        rc = read(rbuf + pbsz, bufsz - pbsz);
+
+      if (rc > 0 || (rc == 0 && non_blocking))
+      {
+        this->setg( rbuf + pbsz - npb,
+                    rbuf + pbsz,
+                    rbuf + pbsz + rc );
+        return true;
+      }
+      else
+      {
+        this->setg(NULL, NULL, NULL);
+        return false;
+      }
+    }
+
+  /**
+   * Writes up to @a n characters to the pipe from the buffer @a s.
+   *
+   * @param   s  character buffer.
+   * @param   n  buffer length.
+   * @return  the number of characters written.
+   */
+  template <typename C, typename T>
+    inline std::streamsize
+    basic_pstreambuf<C,T>::write(const char_type* s, std::streamsize n)
+    {
+      std::streamsize nwritten = 0;
+      if (wpipe() >= 0)
+      {
+        nwritten = ::write(wpipe(), s, n * sizeof(char_type));
+        if (nwritten == -1)
+          error_ = errno;
+        else
+          nwritten /= sizeof(char_type);
+      }
+      return nwritten;
+    }
+
+  /**
+   * Reads up to @a n characters from the pipe to the buffer @a s.
+   *
+   * @param   s  character buffer.
+   * @param   n  buffer length.
+   * @return  the number of characters read.
+   */
+  template <typename C, typename T>
+    inline std::streamsize
+    basic_pstreambuf<C,T>::read(char_type* s, std::streamsize n)
+    {
+      std::streamsize nread = 0;
+      if (rpipe() >= 0)
+      {
+        nread = ::read(rpipe(), s, n * sizeof(char_type));
+        if (nread == -1)
+          error_ = errno;
+        else
+          nread /= sizeof(char_type);
+      }
+      return nread;
+    }
+
+  /** @return a reference to the output file descriptor */
+  template <typename C, typename T>
+    inline pstreams::fd_type&
+    basic_pstreambuf<C,T>::wpipe()
+    {
+      return wpipe_;
+    }
+
+  /** @return a reference to the active input file descriptor */
+  template <typename C, typename T>
+    inline pstreams::fd_type&
+    basic_pstreambuf<C,T>::rpipe()
+    {
+      return rpipe_[rsrc_];
+    }
+
+  /** @return a reference to the specified input file descriptor */
+  template <typename C, typename T>
+    inline pstreams::fd_type&
+    basic_pstreambuf<C,T>::rpipe(buf_read_src which)
+    {
+      return rpipe_[which];
+    }
+
+  /** @return a pointer to the start of the active input buffer area. */
+  template <typename C, typename T>
+    inline typename basic_pstreambuf<C,T>::char_type*
+    basic_pstreambuf<C,T>::rbuffer()
+    {
+      return rbuffer_[rsrc_];
+    }
+
+
+  /*
+   * member definitions for pstream_common
+   */
+
+  /**
+   * @class pstream_common
+   * Abstract Base Class providing common functionality for basic_ipstream,
+   * basic_opstream and basic_pstream.
+   * pstream_common manages the basic_pstreambuf stream buffer that is used
+   * by the derived classes to initialise an iostream class.
+   */
+
+  /** Creates an uninitialised stream. */
+  template <typename C, typename T>
+    inline
+    pstream_common<C,T>::pstream_common()
+    : std::basic_ios<C,T>(NULL)
+    , command_()
+    , buf_()
+    {
+      this->std::basic_ios<C,T>::rdbuf(&buf_);
+    }
+
+  /**
+   * Initialises the stream buffer by calling
+   * do_open( @a command , @a mode )
+   *
+   * @param cmd   a string containing a shell command.
+   * @param mode  the I/O mode to use when opening the pipe.
+   * @see   do_open(const std::string&, pmode)
+   */
+  template <typename C, typename T>
+    inline
+    pstream_common<C,T>::pstream_common(const std::string& cmd, pmode mode)
+    : std::basic_ios<C,T>(NULL)
+    , command_(cmd)
+    , buf_()
+    {
+      this->std::basic_ios<C,T>::rdbuf(&buf_);
+      do_open(cmd, mode);
+    }
+
+  /**
+   * Initialises the stream buffer by calling
+   * do_open( @a file , @a argv , @a mode )
+   *
+   * @param file  a string containing the pathname of a program to execute.
+   * @param argv  a vector of argument strings passed to the new program.
+   * @param mode  the I/O mode to use when opening the pipe.
+   * @see do_open(const std::string&, const argv_type&, pmode)
+   */
+  template <typename C, typename T>
+    inline
+    pstream_common<C,T>::pstream_common( const std::string& file,
+                                         const argv_type& argv,
+                                         pmode mode )
+    : std::basic_ios<C,T>(NULL)
+    , command_(file)
+    , buf_()
+    {
+      this->std::basic_ios<C,T>::rdbuf(&buf_);
+      do_open(file, argv, mode);
+    }
+
+  /**
+   * This is a pure virtual function to make @c pstream_common abstract.
+   * Because it is the destructor it will be called by derived classes
+   * and so must be defined.  It is also protected, to discourage use of
+   * the PStreams classes through pointers or references to the base class.
+   *
+   * @sa If defining a pure virtual seems odd you should read
+   * http://www.gotw.ca/gotw/031.htm (and the rest of the site as well!)
+   */
+  template <typename C, typename T>
+    inline
+    pstream_common<C,T>::~pstream_common()
+    {
+    }
+
+  /**
+   * Calls rdbuf()->open( @a command , @a mode )
+   * and sets @c failbit on error.
+   *
+   * @param cmd   a string containing a shell command.
+   * @param mode  the I/O mode to use when opening the pipe.
+   * @see   basic_pstreambuf::open(const std::string&, pmode)
+   */
+  template <typename C, typename T>
+    inline void
+    pstream_common<C,T>::do_open(const std::string& cmd, pmode mode)
+    {
+      if (!buf_.open((command_=cmd), mode))
+        this->setstate(std::ios_base::failbit);
+    }
+
+  /**
+   * Calls rdbuf()->open( @a file, @a  argv, @a mode )
+   * and sets @c failbit on error.
+   *
+   * @param file  a string containing the pathname of a program to execute.
+   * @param argv  a vector of argument strings passed to the new program.
+   * @param mode  the I/O mode to use when opening the pipe.
+   * @see   basic_pstreambuf::open(const std::string&, const argv_type&, pmode)
+   */
+  template <typename C, typename T>
+    inline void
+    pstream_common<C,T>::do_open( const std::string& file,
+                                  const argv_type& argv,
+                                  pmode mode )
+    {
+      if (!buf_.open((command_=file), argv, mode))
+        this->setstate(std::ios_base::failbit);
+    }
+
+  /** Calls rdbuf->close() and sets @c failbit on error. */
+  template <typename C, typename T>
+    inline void
+    pstream_common<C,T>::close()
+    {
+      if (!buf_.close())
+        this->setstate(std::ios_base::failbit);
+    }
+
+  /**
+   * @return  rdbuf()->is_open().
+   * @see     basic_pstreambuf::is_open()
+   */
+  template <typename C, typename T>
+    inline bool
+    pstream_common<C,T>::is_open() const
+    {
+      return buf_.is_open();
+    }
+
+  /** @return a string containing the command used to initialise the stream. */
+  template <typename C, typename T>
+    inline const std::string&
+    pstream_common<C,T>::command() const
+    {
+      return command_;
+    }
+
+  /** @return a pointer to the private stream buffer member. */
+  // TODO  document behaviour if buffer replaced.
+  template <typename C, typename T>
+    inline typename pstream_common<C,T>::streambuf_type*
+    pstream_common<C,T>::rdbuf() const
+    {
+      return const_cast<streambuf_type*>(&buf_);
+    }
+
+
+#if REDI_EVISCERATE_PSTREAMS
+  /**
+   * @def REDI_EVISCERATE_PSTREAMS
+   * If this macro has a non-zero value then certain internals of the
+   * @c basic_pstreambuf template class are exposed. In general this is
+   * a Bad Thing, as the internal implementation is largely undocumented
+   * and may be subject to change at any time, so this feature is only
+   * provided because it might make PStreams useful in situations where
+   * it is necessary to do Bad Things.
+   */
+
+  /**
+   * @warning  This function exposes the internals of the stream buffer and
+   *           should be used with caution. It is the caller's responsibility
+   *           to flush streams etc. in order to clear any buffered data.
+   *           The POSIX.1 function <b>fdopen</b>(3) is used to obtain the
+   *           @c FILE pointers from the streambuf's private file descriptor
+   *           members so consult your system's documentation for
+   *           <b>fdopen</b>(3).
+   *
+   * @param   in    A FILE* that will refer to the process' stdin.
+   * @param   out   A FILE* that will refer to the process' stdout.
+   * @param   err   A FILE* that will refer to the process' stderr.
+   * @return  An OR of zero or more of @c pstdin, @c pstdout, @c pstderr.
+   *
+   * For each open stream shared with the child process a @c FILE* is
+   * obtained and assigned to the corresponding parameter. For closed
+   * streams @c NULL is assigned to the parameter.
+   * The return value can be tested to see which parameters should be
+   * @c !NULL by masking with the corresponding @c pmode value.
+   *
+   * @see <b>fdopen</b>(3)
+   */
+  template <typename C, typename T>
+    std::size_t
+    basic_pstreambuf<C,T>::fopen(FILE*& in, FILE*& out, FILE*& err)
+    {
+      in = out = err = NULL;
+      std::size_t open_files = 0;
+      if (wpipe() > -1)
+      {
+        if ((in = ::fdopen(wpipe(), "w")))
+        {
+            open_files |= pstdin;
+        }
+      }
+      if (rpipe(rsrc_out) > -1)
+      {
+        if ((out = ::fdopen(rpipe(rsrc_out), "r")))
+        {
+            open_files |= pstdout;
+        }
+      }
+      if (rpipe(rsrc_err) > -1)
+      {
+        if ((err = ::fdopen(rpipe(rsrc_err), "r")))
+        {
+            open_files |= pstderr;
+        }
+      }
+      return open_files;
+    }
+
+  /**
+   *  @warning This function exposes the internals of the stream buffer and
+   *  should be used with caution.
+   *
+   *  @param  in   A FILE* that will refer to the process' stdin.
+   *  @param  out  A FILE* that will refer to the process' stdout.
+   *  @param  err  A FILE* that will refer to the process' stderr.
+   *  @return A bitwise-or of zero or more of @c pstdin, @c pstdout, @c pstderr.
+   *  @see    basic_pstreambuf::fopen()
+   */
+  template <typename C, typename T>
+    inline std::size_t
+    pstream_common<C,T>::fopen(FILE*& fin, FILE*& fout, FILE*& ferr)
+    {
+      return buf_.fopen(fin, fout, ferr);
+    }
+
+#endif // REDI_EVISCERATE_PSTREAMS
+
+
+} // namespace redi
+
+/**
+ * @mainpage PStreams Reference
+ * @htmlinclude mainpage.html
+ */
+
+#endif  // REDI_PSTREAM_H_SEEN
+
+// vim: ts=2 sw=2 expandtab
+
diff --git a/modules/bindings/src/tmalign/readme.txt b/modules/bindings/src/tmalign/readme.txt
new file mode 100644
index 000000000..ea276da42
--- /dev/null
+++ b/modules/bindings/src/tmalign/readme.txt
@@ -0,0 +1,87 @@
+==============================================================================
+   TM-align: protein and RNA structure alignment by TM-score superposition.
+
+   This program was written by (in reverse chronological order)
+   Chengxin Zhang, Sha Gong, Jianjie Wu, and Jianyi Yang
+   at Yang Zhang lab, Department of Computational Medicine and Bioinformatics,
+   University of Michigan, 100 Washtenaw Ave, Ann Arbor, MI 48109-2218.
+   Please report issues to yangzhanglab@umich.edu
+
+   References to cite:
+   S Gong, C Zhang, Y Zhang. Bioinformatics (2019)
+   Y Zhang, J Skolnick. Nucl Acids Res 33, 2302-9 (2005)
+
+   DISCLAIMER:
+     Permission to use, copy, modify, and distribute this program for 
+     any purpose, with or without fee, is hereby granted, provided that
+     the notices on the head, the reference information, and this
+     copyright notice appear in all copies or substantial portions of 
+     the Software. It is provided "as is" without express or implied 
+     warranty.
+
+   *************** updating history ********************************
+   2012/01/24: A C/C++ code of TM-align was constructed by J Yang
+   2016/05/21: Several updates of this program were made by J Wu, including
+              (1) fixed several compiling bugs
+              (2) made I/O of C/C++ version consistent with the Fortran version
+              (3) added outputs including full-atom and ligand structures
+              (4) added options of '-i', '-I' and '-m'
+   2016/05/25: fixed a bug on PDB file reading
+   2018/06/04: Several updates were made by C Zhang, including
+              (1) Fixed bug in reading PDB files with negative residue index,
+                  at the expense of the '-o' option now only being able to
+                  output superposed structure instead of full rasmol script.
+              (2) Implemented the fTM-align algorithm (by the '-fast' option)
+                  as described in R Dong, S Pan, Z Peng, Y Zhang, J Yang
+                  (2018) Nucleic acids research. gky430.
+              (3) Included option to perform TM-align against a whole 
+                  folder of PDB files. A full list of options not available
+                  in the Fortran version can be explored by TMalign -h
+   2018/07/27: Added the -byresi option for TM-score superposition without
+               re-alignment as in TMscore and TMscore -c
+   2018/08/07: Added the -dir option
+   2018/08/14: Added the -split option
+   2018/08/16: Added the -infmt1, -infmt2 options.
+               TMalign can now read .gz and .bz2 compressed files.
+   2018/10/20: C Zhang and S Gong updated the RNA alignment part of
+               the program. Changes include:
+              (1) new d0 calculation for RNA.
+              (2) secondary structure assignment for RNA.
+              (3) automatic detection of molecule type (protein vs RNA).
+   2019/01/07: C Zhang added support for PDBx/mmCIF format.
+   2019/02/09: Fixed asymmetric alignment bug.
+===============================================================================
+
+=========================
+ How to install TM-align
+=========================
+To compile the program in your Linux computer, simply enter
+
+ make
+
+or
+
+ g++ -static -O3 -ffast-math -lm -o TMalign TMalign.cpp
+
+The '-static' flag should be removed on Mac OS, which does not support
+building static executables.
+
+=====================
+ How to use TM-align
+=====================
+You can run the program without arguments to obtain a brief instruction
+
+ ./TMalign structure1.pdb structure2.pdb
+
+===================
+ Fortran version
+===================
+You can download the fortran version of TM-align from
+https://zhanglab.ccmb.med.umich.edu/TM-align/
+
+This C++ version of TM-align implemented several features not available in the
+fortran version, including RNA alignment and batch alignment of multiple 
+structures. A full list of available options can be explored by:
+  ./TMalign -h
+
+02/09/2019
diff --git a/modules/bindings/src/tmalign/se.cpp b/modules/bindings/src/tmalign/se.cpp
new file mode 100644
index 000000000..aa22b07f7
--- /dev/null
+++ b/modules/bindings/src/tmalign/se.cpp
@@ -0,0 +1,442 @@
+#include "se.h"
+
+using namespace std;
+
+void print_extra_help()
+{
+    cout <<
+"Additional options: \n"
+"    -dir     Perform all-against-all alignment extraction among the list\n"
+"             of PDB chains listed by 'chain_list' under 'chain_folder'.\n"
+"             Note that the slash is necessary.\n"
+"             $ se -dir chain1_folder/ chain_list\n"
+"\n"
+"    -dir1    Use chain2 to perform alignment extraction from a list of\n"
+"             PDB chains listed by 'chain1_list' under 'chain1_folder'.\n"
+"             Note that the slash is necessary.\n"
+"             $ se -dir1 chain1_folder/ chain1_list chain2\n"
+"\n"
+"    -dir2    Use chain2 to perform alignment extraction from a list of\n"
+"             PDB chains listed by 'chain2_list' under 'chain2_folder'\n"
+"             $ se chain1 -dir2 chain2_folder/ chain2_list\n"
+"\n"
+"    -suffix  (Only when -dir1 and/or -dir2 are set, default is empty)\n"
+"             add file name suffix to files listed by chain1_list or chain2_list\n"
+"\n"
+"    -atom    4-character atom name used to represent a residue.\n"
+"             Default is \" C3'\" for RNA/DNA and \" CA \" for proteins\n"
+"             (note the spaces before and after CA).\n"
+"\n"
+"    -mol     Molecule type: RNA or protein\n"
+"             Default is detect molecule type automatically\n"
+"\n"
+"    -ter     Strings to mark the end of a chain\n"
+"             3: (default) TER, ENDMDL, END or different chain ID\n"
+"             2: ENDMDL, END, or different chain ID\n"
+"             1: ENDMDL or END\n"
+"             0: (default in the first C++ TMalign) end of file\n"
+"\n"
+"    -split   Whether to split PDB file into multiple chains\n"
+"             0: (default) treat the whole structure as one single chain\n"
+"             1: treat each MODEL as a separate chain (-ter should be 0)\n"
+"             2: treat each chain as a seperate chain (-ter should be <=1)\n"
+"\n"
+"    -outfmt  Output format\n"
+"             0: (default) full output\n"
+"             1: fasta format compact output\n"
+"             2: tabular format very compact output\n"
+"\n"
+"    -byresi  Whether to align two structures by residue index.\n"
+"             0: (default) do not align by residue index\n"
+"             1: (same as TMscore program) align by residue index\n"
+"             2: (same as TMscore -c, should be used with -ter <=1)\n"
+"                align by residue index and chain ID\n"
+"             3: (similar to TMscore -c, should be used with -ter <=1)\n"
+"                align by residue index and order of chain\n"
+"\n"
+"    -infmt1  Input format for chain1\n"
+"    -infmt2  Input format for chain2\n"
+"            -1: (default) automatically detect PDB or PDBx/mmCIF format\n"
+"             0: PDB format\n"
+"             1: SPICKER format\n"
+"             2: xyz format\n"
+"             3: PDBx/mmCIF format\n"
+    <<endl;
+}
+
+void print_help(bool h_opt=false)
+{
+    cout <<
+"Extract sequence alignment from a pair of superposed structures.\n"
+"\n"
+"Usage: se PDB1.pdb PDB2.pdb [Options]\n"
+"\n"
+"Options:\n"
+"    -u    TM-score normalized by user assigned length (the same as -L)\n"
+"          warning: it should be >= minimum length of the two structures\n"
+"          otherwise, TM-score may be >1\n"
+"\n"
+"    -a    TM-score normalized by the average length of two structures\n"
+"          T or F, (default F)\n"
+"\n"
+"    -i    (Same as -I) use alignment specified in fasta file 'align.txt'\n"
+"\n"
+"    -d    TM-score scaled by an assigned d0, e.g. 5 Angstroms\n"
+"\n"
+"    -h    Print the full help message.\n"
+"\n"
+"    (Options -u, -a, -d won't change the final structure alignment)\n"
+"\n"
+"Example usages:\n"
+"    se PDB1.pdb PDB2.pdb\n"
+"    se PDB1.pdb PDB2.pdb -u 100 -d 5.0 -a T\n"
+"    se PDB1.pdb PDB2.pdb -i align.txt\n"
+    <<endl;
+
+    if (h_opt) print_extra_help();
+
+    exit(EXIT_SUCCESS);
+}
+
+int main(int argc, char *argv[])
+{
+    if (argc < 2) print_help();
+
+    /**********************/
+    /*    get argument    */
+    /**********************/
+    string xname       = "";
+    string yname       = "";
+    string fname_lign  = ""; // file name for user alignment
+    vector<string> sequence; // get value from alignment file
+    double Lnorm_ass, d0_scale;
+
+    bool h_opt = false; // print full help message
+    bool i_opt = false; // flag for -i, stick to user given alignment
+    bool a_opt = false; // flag for -a, normalized by average length
+    bool u_opt = false; // flag for -u, normalized by user specified length
+    bool d_opt = false; // flag for -d, user specified d0
+
+    int    infmt1_opt=-1;    // PDB or PDBx/mmCIF format for chain_1
+    int    infmt2_opt=-1;    // PDB or PDBx/mmCIF format for chain_2
+    int    ter_opt   =3;     // TER, END, or different chainID
+    int    split_opt =0;     // do not split chain
+    int    outfmt_opt=0;     // set -outfmt to full output
+    string atom_opt  ="auto";// use C alpha atom for protein and C3' for RNA
+    string mol_opt   ="auto";// auto-detect the molecule type as protein/RNA
+    string suffix_opt="";    // set -suffix to empty
+    string dir_opt   ="";    // set -dir to empty
+    string dir1_opt  ="";    // set -dir1 to empty
+    string dir2_opt  ="";    // set -dir2 to empty
+    int    byresi_opt=0;     // set -byresi to 0
+    vector<string> chain1_list; // only when -dir1 is set
+    vector<string> chain2_list; // only when -dir2 is set
+
+    for(int i = 1; i < argc; i++)
+    {
+        if ( (!strcmp(argv[i],"-u") || 
+              !strcmp(argv[i],"-L")) && i < (argc-1) )
+        {
+            Lnorm_ass = atof(argv[i + 1]); u_opt = true; i++;
+        }
+        else if ( !strcmp(argv[i],"-a") && i < (argc-1) )
+        {
+            if (!strcmp(argv[i + 1], "T"))      a_opt=true;
+            else if (!strcmp(argv[i + 1], "F")) a_opt=false;
+            else PrintErrorAndQuit("Wrong value for option -a! It should be T or F");
+            i++;
+        }
+        else if ( !strcmp(argv[i],"-d") && i < (argc-1) )
+        {
+            d0_scale = atof(argv[i + 1]); d_opt = true; i++;
+        }
+        else if ( !strcmp(argv[i],"-h") )
+        {
+            h_opt = true;
+        }
+        else if ((!strcmp(argv[i],"-i")||!strcmp(argv[i],"-I")) && i<(argc-1))
+        {
+            fname_lign = argv[i + 1];      i_opt = true; i++;
+        }
+        else if ( !strcmp(argv[i],"-infmt1") && i < (argc-1) )
+        {
+            infmt1_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-infmt2") && i < (argc-1) )
+        {
+            infmt2_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-ter") && i < (argc-1) )
+        {
+            ter_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-split") && i < (argc-1) )
+        {
+            split_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-atom") && i < (argc-1) )
+        {
+            atom_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-mol") && i < (argc-1) )
+        {
+            mol_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir") && i < (argc-1) )
+        {
+            dir_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir1") && i < (argc-1) )
+        {
+            dir1_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-dir2") && i < (argc-1) )
+        {
+            dir2_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-suffix") && i < (argc-1) )
+        {
+            suffix_opt=argv[i + 1]; i++;
+        }
+        else if ( !strcmp(argv[i],"-outfmt") && i < (argc-1) )
+        {
+            outfmt_opt=atoi(argv[i + 1]); i++;
+        }
+        else if ( !strcmp(argv[i],"-byresi") && i < (argc-1) )
+        {
+            byresi_opt=atoi(argv[i + 1]); i++;
+        }
+        else if (xname.size() == 0) xname=argv[i];
+        else if (yname.size() == 0) yname=argv[i];
+        else PrintErrorAndQuit(string("ERROR! Undefined option ")+argv[i]);
+    }
+
+    if(xname.size()==0 || (yname.size()==0 && dir_opt.size()==0) || 
+                          (yname.size()    && dir_opt.size()))
+    {
+        if (h_opt) print_help(h_opt);
+        if (xname.size()==0)
+            PrintErrorAndQuit("Please provide input structures");
+        else if (yname.size()==0 && dir_opt.size()==0)
+            PrintErrorAndQuit("Please provide structure B");
+        else if (yname.size() && dir_opt.size())
+            PrintErrorAndQuit("Please provide only one file name if -dir is set");
+    }
+
+    if (suffix_opt.size() && dir_opt.size()+dir1_opt.size()+dir2_opt.size()==0)
+        PrintErrorAndQuit("-suffix is only valid if -dir1 or -dir2 is set");
+    if (dir_opt.size() && (dir1_opt.size() || dir2_opt.size()))
+        PrintErrorAndQuit("-dir cannot be set with -dir1 or -dir2");
+    if (atom_opt.size()!=4)
+        PrintErrorAndQuit("ERROR! atom name must have 4 characters, including space.");
+    if (mol_opt!="auto" && mol_opt!="protein" && mol_opt!="RNA")
+        PrintErrorAndQuit("ERROR! molecule type must be either RNA or protein.");
+    else if (mol_opt=="protein" && atom_opt=="auto")
+        atom_opt=" CA ";
+    else if (mol_opt=="RNA" && atom_opt=="auto")
+        atom_opt=" C3'";
+    if (u_opt && Lnorm_ass<=0)
+        PrintErrorAndQuit("Wrong value for option -u!  It should be >0");
+    if (d_opt && d0_scale<=0)
+        PrintErrorAndQuit("Wrong value for option -d!  It should be >0");
+    if (outfmt_opt>=2 && (a_opt || u_opt || d_opt))
+        PrintErrorAndQuit("-outfmt 2 cannot be used with -a, -u, -L, -d");
+    if (byresi_opt!=0)
+    {
+        if (i_opt)
+            PrintErrorAndQuit("-byresi >=1 cannot be used with -i or -I");
+        if (byresi_opt<0 || byresi_opt>3)
+            PrintErrorAndQuit("-byresi can only be 0, 1, 2 or 3");
+        if (byresi_opt>=2 && ter_opt>=2)
+            PrintErrorAndQuit("-byresi >=2 should be used with -ter <=1");
+    }
+    if (split_opt==1 && ter_opt!=0)
+        PrintErrorAndQuit("-split 1 should be used with -ter 0");
+    else if (split_opt==2 && ter_opt!=0 && ter_opt!=1)
+        PrintErrorAndQuit("-split 2 should be used with -ter 0 or 1");
+    if (split_opt<0 || split_opt>2)
+        PrintErrorAndQuit("-split can only be 0, 1 or 2");
+
+    /* read initial alignment file from 'align.txt' */
+    if (i_opt) read_user_alignment(sequence, fname_lign, false);
+
+    if (byresi_opt) i_opt=true;
+    
+    /* parse file list */
+    if (dir1_opt.size()+dir_opt.size()==0) chain1_list.push_back(xname);
+    else file2chainlist(chain1_list, xname, dir_opt+dir1_opt, suffix_opt);
+
+    if (dir_opt.size())
+        for (int i=0;i<chain1_list.size();i++)
+            chain2_list.push_back(chain1_list[i]);
+    else if (dir2_opt.size()==0) chain2_list.push_back(yname);
+    else file2chainlist(chain2_list, yname, dir2_opt, suffix_opt);
+
+    if (outfmt_opt==2)
+        cout<<"#PDBchain1\tPDBchain2\tTM1\tTM2\t"
+            <<"RMSD\tID1\tID2\tIDali\tL1\tL2\tLali"<<endl;
+
+    /* declare previously global variables */
+    vector<vector<string> >PDB_lines1; // text of chain1
+    vector<vector<string> >PDB_lines2; // text of chain2
+    vector<int> mol_vec1;              // molecule type of chain1, RNA if >0
+    vector<int> mol_vec2;              // molecule type of chain2, RNA if >0
+    vector<string> chainID_list1;      // list of chainID1
+    vector<string> chainID_list2;      // list of chainID2
+    int    i,j;                // file index
+    int    chain_i,chain_j;    // chain index
+    int    xlen, ylen;         // chain length
+    int    xchainnum,ychainnum;// number of chains in a PDB file
+    char   *seqx, *seqy;       // for the protein sequence 
+    double **xa, **ya;         // for input vectors xa[0...xlen-1][0..2] and
+                               // ya[0...ylen-1][0..2], in general,
+                               // ya is regarded as native structure 
+                               // --> superpose xa onto ya
+    vector<string> resi_vec1;  // residue index for chain1
+    vector<string> resi_vec2;  // residue index for chain2
+    double t0[3]={0,0,0};
+    double u0[3][3]={{1,0,0},{0,1,0},{0,0,1}};
+
+    /* loop over file names */
+    for (int i=0;i<chain1_list.size();i++)
+    {
+        /* parse chain 1 */
+        xname=chain1_list[i];
+        xchainnum=get_PDB_lines(xname, PDB_lines1, chainID_list1,
+            mol_vec1, ter_opt, infmt1_opt, atom_opt, split_opt);
+        if (!xchainnum)
+        {
+            cerr<<"Warning! Cannot parse file: "<<xname
+                <<". Chain number 0."<<endl;
+            continue;
+        }
+        for (int chain_i=0;chain_i<xchainnum;chain_i++)
+        {
+            xlen=PDB_lines1[chain_i].size();
+            if (mol_opt=="RNA") mol_vec1[chain_i]=1;
+            else if (mol_opt=="protein") mol_vec1[chain_i]=-1;
+            if (!xlen)
+            {
+                cerr<<"Warning! Cannot parse file: "<<xname
+                    <<". Chain length 0."<<endl;
+                continue;
+            }
+            NewArray(&xa, xlen, 3);
+            seqx = new char[xlen + 1];
+            xlen = read_PDB(PDB_lines1[chain_i], xa, seqx, 
+                resi_vec1, byresi_opt);
+
+            for (int j=(dir_opt.size()>0)*(i+1);j<chain2_list.size();j++)
+            {
+                /* parse chain 2 */
+                if (PDB_lines2.size()==0)
+                {
+                    yname=chain2_list[j];
+                    ychainnum=get_PDB_lines(yname, PDB_lines2, chainID_list2,
+                        mol_vec2, ter_opt, infmt2_opt, atom_opt, split_opt);
+                    if (!ychainnum)
+                    {
+                        cerr<<"Warning! Cannot parse file: "<<yname
+                            <<". Chain number 0."<<endl;
+                        continue;
+                    }
+                }
+                for (int chain_j=0;chain_j<ychainnum;chain_j++)
+                {
+                    ylen=PDB_lines2[chain_j].size();
+                    if (mol_opt=="RNA") mol_vec2[chain_j]=1;
+                    else if (mol_opt=="protein") mol_vec2[chain_j]=-1;
+                    if (!ylen)
+                    {
+                        cerr<<"Warning! Cannot parse file: "<<yname
+                            <<". Chain length 0."<<endl;
+                        continue;
+                    }
+                    NewArray(&ya, ylen, 3);
+                    seqy = new char[ylen + 1];
+                    ylen = read_PDB(PDB_lines2[chain_j], ya, seqy,
+                        resi_vec2, byresi_opt);
+
+                    if (byresi_opt) extract_aln_from_resi(sequence,
+                        seqx,seqy,resi_vec1,resi_vec2,byresi_opt);
+
+                    /* declare variable specific to this pair of TMalign */
+                    double TM1, TM2;
+                    double TM3, TM4, TM5;     // for a_opt, u_opt, d_opt
+                    double d0_0, TM_0;
+                    double d0A, d0B, d0u, d0a;
+                    double d0_out=5.0;
+                    string seqM, seqxA, seqyA;// for output alignment
+                    double rmsd0 = 0.0;
+                    int L_ali;                // Aligned length in standard_TMscore
+                    double Liden=0;
+                    double TM_ali, rmsd_ali;  // TMscore and rmsd in standard_TMscore
+                    int n_ali=0;
+                    int n_ali8=0;
+
+                    /* entry function for structure alignment */
+                    se_main(
+                        xa, ya, seqx, seqy, TM1, TM2, TM3, TM4, TM5,
+                        d0_0, TM_0, d0A, d0B, d0u, d0a, d0_out,
+                        seqM, seqxA, seqyA,
+                        rmsd0, L_ali, Liden, TM_ali, rmsd_ali, n_ali, n_ali8,
+                        xlen, ylen, sequence, Lnorm_ass, d0_scale,
+                        i_opt, a_opt, u_opt, d_opt,
+                        mol_vec1[chain_i]+mol_vec2[chain_j]);
+
+                    /* print result */
+                    output_results(
+                        xname.substr(dir1_opt.size()).c_str(),
+                        yname.substr(dir2_opt.size()).c_str(),
+                        chainID_list1[chain_i].c_str(),
+                        chainID_list2[chain_j].c_str(),
+                        xlen, ylen, t0, u0, TM1, TM2, 
+                        TM3, TM4, TM5, rmsd0, d0_out,
+                        seqM.c_str(), seqxA.c_str(), seqyA.c_str(), Liden,
+                        n_ali8, n_ali, L_ali, TM_ali, rmsd_ali,
+                        TM_0, d0_0, d0A, d0B,
+                        Lnorm_ass, d0_scale, d0a, d0u, 
+                        "", outfmt_opt, ter_opt, "",
+                        false, false, a_opt, u_opt, d_opt);
+
+                    /* Done! Free memory */
+                    seqM.clear();
+                    seqxA.clear();
+                    seqyA.clear();
+                    DeleteArray(&ya, ylen);
+                    delete [] seqy;
+                    resi_vec2.clear();
+                } // chain_j
+                if (chain2_list.size()>1)
+                {
+                    yname.clear();
+                    for (int chain_j=0;chain_j<ychainnum;chain_j++)
+                        PDB_lines2[chain_j].clear();
+                    PDB_lines2.clear();
+                    chainID_list2.clear();
+                    mol_vec2.clear();
+                }
+            } // j
+            DeleteArray(&xa, xlen);
+            delete [] seqx;
+            resi_vec1.clear();
+        } // chain_i
+        xname.clear();
+        PDB_lines1.clear();
+        chainID_list1.clear();
+        mol_vec1.clear();
+    } // i
+    if (chain2_list.size()==1)
+    {
+        yname.clear();
+        for (int chain_j=0;chain_j<ychainnum;chain_j++)
+            PDB_lines2[chain_j].clear();
+        PDB_lines2.clear();
+        resi_vec2.clear();
+        chainID_list2.clear();
+        mol_vec2.clear();
+    }
+    chain1_list.clear();
+    chain2_list.clear();
+    return 0;
+}
diff --git a/modules/bindings/src/tmalign/se.h b/modules/bindings/src/tmalign/se.h
new file mode 100644
index 000000000..0021dd6d4
--- /dev/null
+++ b/modules/bindings/src/tmalign/se.h
@@ -0,0 +1,178 @@
+#include "TMalign.h"
+
+/* entry function for se */
+int se_main(
+    double **xa, double **ya, const char *seqx, const char *seqy,
+    double &TM1, double &TM2, double &TM3, double &TM4, double &TM5,
+    double &d0_0, double &TM_0,
+    double &d0A, double &d0B, double &d0u, double &d0a, double &d0_out,
+    string &seqM, string &seqxA, string &seqyA,
+    double &rmsd0, int &L_ali, double &Liden,
+    double &TM_ali, double &rmsd_ali, int &n_ali, int &n_ali8,
+    const int xlen, const int ylen, const vector<string> &sequence,
+    const double Lnorm_ass, const double d0_scale, const bool i_opt,
+    const bool a_opt, const bool u_opt, const bool d_opt, const int mol_type)
+{
+    double D0_MIN;        //for d0
+    double Lnorm;         //normalization length
+    double score_d8,d0,d0_search,dcu0;//for TMscore search
+    double t[3]={0,0,0};  // dummy translation vection
+    double u[3][3]={{1,0,0},{0,1,0},{0,0,1}}; // dummy rotation matrix
+    double **score;       // Input score table for dynamic programming
+    bool   **path;        // for dynamic programming  
+    double **val;         // for dynamic programming  
+
+    int *m1, *m2;
+    double d;
+    m1=new int[xlen]; //alignd index in x
+    m2=new int[ylen]; //alignd index in y
+
+    /***********************/
+    /* allocate memory     */
+    /***********************/
+    int minlen = min(xlen, ylen);
+    NewArray(&score, xlen+1, ylen+1);
+    NewArray(&path, xlen+1, ylen+1);
+    NewArray(&val, xlen+1, ylen+1);
+    int *invmap          = new int[ylen+1];
+    for(int i=0; i<ylen; i++) invmap[i]=-1;
+
+    /* set d0 */
+    parameter_set4search(xlen, ylen, D0_MIN, Lnorm,
+        score_d8, d0, d0_search, dcu0); // set score_d8
+    parameter_set4final(xlen, D0_MIN, Lnorm,
+        d0B, d0_search, mol_type); // set d0B
+    parameter_set4final(ylen, D0_MIN, Lnorm,
+        d0A, d0_search, mol_type); // set d0A
+    if (a_opt)
+        parameter_set4final((xlen+ylen)*0.5, D0_MIN, Lnorm,
+            d0a, d0_search, mol_type); // set d0a
+    if (u_opt)
+        parameter_set4final(Lnorm_ass, D0_MIN, Lnorm,
+            d0u, d0_search, mol_type); // set d0u
+
+    /* perform alignment */
+    if (!i_opt)
+        NWDP_TM(path, val, xa, ya, xlen, ylen, t, u, d0*d0, 0, invmap);
+    else
+    {
+        for (int j = 0; j < ylen; j++)// Set aligned position to be "-1"
+            invmap[j] = -1;
+
+        int i1 = -1;// in C version, index starts from zero, not from one
+        int i2 = -1;
+        int L1 = sequence[0].size();
+        int L2 = sequence[1].size();
+        int L = min(L1, L2);// Get positions for aligned residues
+        for (int kk1 = 0; kk1 < L; kk1++)
+        {
+            if (sequence[0][kk1] != '-') i1++;
+            if (sequence[1][kk1] != '-')
+            {
+                i2++;
+                if (i2 >= ylen || i1 >= xlen) kk1 = L;
+                else if (sequence[0][kk1] != '-') invmap[i2] = i1;
+            }
+        }
+    }
+
+    rmsd0=TM1=TM2=TM3=TM4=TM5=0;
+    int k=0;
+    for(int i=0,j=0; j<ylen; j++)
+    {
+        i=invmap[j];
+        if(i>=0)//aligned
+        {
+            n_ali++;
+            d=sqrt(dist(&xa[i][0], &ya[j][0]));
+            if (d <= score_d8)
+            {
+                m1[k]=i;
+                m2[k]=j;
+                k++;
+                TM2+=1/(1+(d/d0B)*(d/d0B)); // chain_1
+                TM1+=1/(1+(d/d0A)*(d/d0A)); // chain_2
+                if (a_opt) TM3+=1/(1+(d/d0a)*(d/d0a)); // -a
+                if (u_opt) TM4+=1/(1+(d/d0u)*(d/d0u)); // -u
+                if (d_opt) TM5+=1/(1+(d/d0_scale)*(d/d0_scale)); // -d
+                rmsd0+=d*d;
+            }
+        }
+    }
+    n_ali8=k;
+    TM2/=xlen;
+    TM1/=ylen;
+    TM3/=(xlen+ylen)*0.5;
+    TM4/=Lnorm_ass;
+    TM5/=ylen;
+    if (n_ali8) rmsd0=sqrt(rmsd0/n_ali8);
+
+    /* extract aligned sequence */
+    int ali_len=xlen+ylen; //maximum length of alignment
+    seqxA.assign(ali_len,'-');
+    seqM.assign( ali_len,' ');
+    seqyA.assign(ali_len,'-');
+    
+    int kk=0, i_old=0, j_old=0;
+    d=0;
+    for(int k=0; k<n_ali8; k++)
+    {
+        for(int i=i_old; i<m1[k]; i++)
+        {
+            //align x to gap
+            seqxA[kk]=seqx[i];
+            seqyA[kk]='-';
+            seqM[kk]=' ';                    
+            kk++;
+        }
+
+        for(int j=j_old; j<m2[k]; j++)
+        {
+            //align y to gap
+            seqxA[kk]='-';
+            seqyA[kk]=seqy[j];
+            seqM[kk]=' ';
+            kk++;
+        }
+
+        seqxA[kk]=seqx[m1[k]];
+        seqyA[kk]=seqy[m2[k]];
+        Liden+=(seqxA[kk]==seqyA[kk]);
+        d=sqrt(dist(&xa[m1[k]][0], &ya[m2[k]][0]));
+        if(d<d0_out) seqM[kk]=':';
+        else         seqM[kk]='.';
+        kk++;  
+        i_old=m1[k]+1;
+        j_old=m2[k]+1;
+    }
+
+    //tail
+    for(int i=i_old; i<xlen; i++)
+    {
+        //align x to gap
+        seqxA[kk]=seqx[i];
+        seqyA[kk]='-';
+        seqM[kk]=' ';
+        kk++;
+    }    
+    for(int j=j_old; j<ylen; j++)
+    {
+        //align y to gap
+        seqxA[kk]='-';
+        seqyA[kk]=seqy[j];
+        seqM[kk]=' ';
+        kk++;
+    }
+    seqxA=seqxA.substr(0,kk);
+    seqyA=seqyA.substr(0,kk);
+    seqM =seqM.substr(0,kk);
+
+    /* free memory */
+    delete [] invmap;
+    delete [] m1;
+    delete [] m2;
+    DeleteArray(&score, xlen+1);
+    DeleteArray(&path, xlen+1);
+    DeleteArray(&val, xlen+1);
+    return 0; // zero for no exception
+}
diff --git a/modules/bindings/src/tmalign/xyz_sfetch.cpp b/modules/bindings/src/tmalign/xyz_sfetch.cpp
new file mode 100644
index 000000000..5d413d5c5
--- /dev/null
+++ b/modules/bindings/src/tmalign/xyz_sfetch.cpp
@@ -0,0 +1,133 @@
+/* xyz_sfetch - index and fetch entries from multi-chain xyz file.
+ *     The time of indexing operation scales linearly with the size of xyz
+ * file. Indexing is very fast (~2 s for PDB70 library with ~70000 entries).
+ *     The time of fetching operation scales linearly with the length of
+ * entry list, but is almost unrelated to the size of xyz file. Therefore,
+ * this program is designed for fetch a small number of entries from a
+ * big xyz file. Fetching the whole PDB70 from PDB70 itself take ~0.5 min;
+ * fetching 1000 entries from PDB70 only takes 1~2 s */
+#include <iostream>
+#include <fstream>
+#include <cstdlib>
+#include <vector>
+#include <algorithm>
+
+using namespace std;
+
+void print_help()
+{
+    cout <<
+"Usage: xyz_sfetch ca.xyz\n"
+"    Index all entries in xyz file 'ca.xyz' into 'ca.xyz.index'.\n"
+"    Output file name inferred from input file name.\n"
+"\n"
+"Usage: xyz_sfetch ca.xyz list > subset.xyz\n"
+"    From xyz file 'ca.xyz' and respective index file 'ca.xyz.index',\n"
+"    fetch all entries listed by 'list'. Output them to 'subset.xyz'.\n"
+    <<endl;
+    exit(EXIT_SUCCESS);
+}
+
+int main(int argc, char *argv[])
+{
+    if (argc < 2) print_help();
+
+    /* get argument */
+    string filename="";
+    string list_opt="";
+
+    for(int i=1; i<argc; i++)
+    {
+        if (filename.size()==0) filename=argv[i];
+        else list_opt=argv[i];
+    }
+
+    if(filename.size()==0||filename=="-h") print_help();
+    if ((filename.size()>=3 && filename.substr(filename.size()-3,3)==".gz")||
+        (filename.size()>=4 && filename.substr(filename.size()-4,4)==".bz2"))
+    {
+        cerr<<"ERROR! This program does not support .gz or .bz2 file"<<endl;
+        exit(EXIT_SUCCESS);
+    }
+
+    ifstream fin(filename.c_str());
+
+    /* list all entries in xyz file */
+    string line;
+    int L,i;
+    int start_pos,end_pos; // position of starting and ending character
+    if (list_opt.size()==0)
+    {
+        ofstream fp((filename+".index").c_str());
+        while (fin.good())
+        {
+            start_pos=fin.tellg();
+            getline(fin, line);
+            L=atoi(line.c_str());
+            getline(fin, line);
+            if (!fin.good()) break;
+            for(i=0;i<line.size();i++) if(line[i]==' '||line[i]=='\t') break;
+            cout<<line.substr(0,i)<<'\t'<<L<<endl;
+            fp<<line.substr(0,i)<<'\t'<<start_pos;
+            for (i=0;i<L;i++) getline(fin, line);
+            end_pos=fin.tellg();
+            fp<<'\t'<<end_pos<<endl;
+        }
+        fin.close();
+        fp.close();
+        /* clean up */
+        line.clear();
+        filename.clear();
+        list_opt.clear();
+        return 0;
+    }
+
+    /* read entry list */
+    vector<string> chain_list;
+    ifstream fp(list_opt.c_str());
+    while (fp.good())
+    {
+        getline(fp, line);
+        for (i=0;i<line.size();i++)
+            if (line[i]==' '||line[i]=='\t') break;
+        if (line.size() && i) chain_list.push_back(line.substr(0,i));
+    }
+    fp.close();
+
+    /* read xyz index */
+    /* In xyz file, each line has 28 chacters plus an additional '\n'. In PDB
+     * file, a residue number has up to 4 digits, which means a PDB chain
+     * usually has up to 9999 residues. 29*9999 == 289971 < 300000 */
+    fp.open((filename+".index").c_str());
+    if (!fp.is_open())
+    {
+        cerr<<"ERROR! No index file at "+filename+".index"<<endl;
+        cerr<<"Run the following command to create the index file:"<<endl;
+        cerr<<argv[0]<<" "<<filename<<endl;
+        exit(EXIT_SUCCESS);
+    }
+    char *buf=new char [300000];
+    string chain;
+    while (fp.good())
+    {
+        fp>>chain>>start_pos>>end_pos;
+        if (!fp.good()) break;
+        if (find(chain_list.begin(), chain_list.end(), 
+            chain)==chain_list.end()) continue;
+        fin.seekg(start_pos);
+        fin.read(buf,end_pos-start_pos);
+        buf[end_pos-start_pos]=0; // ensures old text beyond this is ignored
+        cout<<buf;
+    }
+    fp.close();
+    fin.close();
+
+    /* clean up */
+    /* No need to flush, because any input from cin, output to cerr, or
+     * or program termination forces cout.flush() */
+    delete[]buf;
+    filename.clear();
+    list_opt.clear();
+    chain_list.clear();
+    return 0;
+}
diff --git a/modules/bindings/src/wrap_tmalign.cc b/modules/bindings/src/wrap_tmalign.cc
new file mode 100644
index 000000000..7fe81be31
--- /dev/null
+++ b/modules/bindings/src/wrap_tmalign.cc
@@ -0,0 +1,191 @@
+//------------------------------------------------------------------------------
+// This file is part of the OpenStructure project <www.openstructure.org>
+//
+// Copyright (C) 2008-2019 by the OpenStructure authors
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the Free
+// Software Foundation; either version 3.0 of the License, or (at your option)
+// any later version.
+// This library is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+// details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this library; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//------------------------------------------------------------------------------
+
+#include "tmalign/TMalign.h" // include for the external TMalign
+
+#include <ost/mol/atom_view.hh>
+#include <ost/message.hh>
+#include <ost/bindings/wrap_tmalign.hh>
+
+namespace ost{ namespace bindings{
+
+TMAlignResult WrappedTMAlign(const geom::Vec3List& pos_one, 
+                             const geom::Vec3List& pos_two, 
+                             const ost::seq::SequenceHandle& seq1,
+                             const ost::seq::SequenceHandle& seq2,
+                             bool fast) {
+
+  int xlen = pos_one.size();
+  int ylen = pos_two.size();  
+
+  if(xlen <= 5 || ylen <= 5) {
+    throw ost::Error("Input sequence to short!");
+  }
+
+  if(xlen != seq1.GetLength() || ylen != seq2.GetLength()) {
+    throw ost::Error("Positions and Sequence must have consistent size "
+                     "to run TMAlign!");
+  }
+
+  // squeeze input into right format
+  char* seqx = new char[xlen+1];
+  char* seqy = new char[ylen+1];
+  seqx[xlen] = '\0';
+  seqy[ylen] = '\0';
+  int* secx = new int[xlen];
+  int* secy = new int[ylen];
+
+  // use TMalign functionality to generate position arrays
+  double** xa;
+  double** ya;
+  NewArray(&xa, xlen, 3);
+  NewArray(&ya, ylen, 3);
+
+  for(int i = 0; i < xlen; ++i) {
+    xa[i][0] = pos_one[i][0];
+    xa[i][1] = pos_one[i][1];
+    xa[i][2] = pos_one[i][2];
+    seqx[i] = seq1[i];
+  }
+
+  for(int i = 0; i < ylen; ++i) {
+    ya[i][0] = pos_two[i][0];
+    ya[i][1] = pos_two[i][1];
+    ya[i][2] = pos_two[i][2];
+    seqy[i] = seq2[i];
+  }
+
+  make_sec(xa, xlen, secx);
+  make_sec(ya, ylen, secy);
+
+  // these variables are chosen such that running TMalign_main is the same as 
+  // you would call the executable without any additional parameters
+  double Lnorm_ass = -1.0;
+  double d0_scale = -1.0;
+  bool u_opt = false;
+  bool d_opt = false;
+  int a_opt = 0; 
+  std::vector<String> sequence; 
+  bool i_opt = false;
+  bool I_opt = false;
+  double TMcut = -1; 
+
+  // following variables are copied from the TMAlign source code
+  double t0[3], u0[3][3];
+  double TM1, TM2;
+  double TM3, TM4, TM5;     // for a_opt, u_opt, d_opt
+  double d0_0, TM_0;
+  double d0A, d0B, d0u, d0a;
+  double d0_out=5.0;
+  String seqM, seqxA, seqyA;// for output alignment
+  double rmsd0 = 0.0;
+  int L_ali;                // Aligned length in standard_TMscore
+  double Liden=0;
+  double TM_ali, rmsd_ali;  // TMscore and rmsd in standard_TMscore
+  int n_ali=0;
+  int n_ali8=0;
+
+  TMalign_main(xa, ya, seqx, seqy, secx, secy, t0, u0, TM1, TM2, TM3, TM4, TM5,
+               d0_0, TM_0, d0A, d0B, d0u, d0a, d0_out, seqM, seqxA, seqyA,
+               rmsd0, L_ali, Liden, TM_ali, rmsd_ali, n_ali, n_ali8, xlen, ylen, 
+               sequence, Lnorm_ass, d0_scale, i_opt, I_opt, a_opt, u_opt, d_opt, 
+               fast, 0, TMcut);
+
+  // cleanup
+  DeleteArray(&xa, xlen);
+  DeleteArray(&ya, ylen);
+  delete [] seqx;
+  delete [] seqy;
+  delete [] secx;
+  delete [] secy;
+
+  // collect results and return
+  TMAlignResult res;
+  res.tm_score = TM1;
+  res.rmsd = rmsd0;
+  res.aligned_length = n_ali8;
+  res.transform = geom::Mat4(u0[0][0], u0[0][1], u0[0][2], t0[0],
+                             u0[1][0], u0[1][1], u0[1][2], t0[1],
+                             u0[2][0], u0[2][1], u0[2][2], t0[2],
+                             0.0, 0.0, 0.0, 1.0);
+  res.alignment = ost::seq::CreateAlignment();
+  ost::seq::SequenceHandle aligned_seq1 = ost::seq::CreateSequence("seq1", seqxA);
+  ost::seq::SequenceHandle aligned_seq2 = ost::seq::CreateSequence("seq2", seqyA);
+  res.alignment.AddSequence(aligned_seq1);
+  res.alignment.AddSequence(aligned_seq2);
+  return res;
+}
+
+
+TMAlignResult WrappedTMAlign(const ost::mol::ChainView& chain1,
+                             const ost::mol::ChainView& chain2,
+                             bool fast) {
+
+  geom::Vec3List pos1;
+  geom::Vec3List pos2;
+  std::vector<char> s1;
+  std::vector<char> s2;
+
+  ost::mol::ResidueViewList res_list_1 = chain1.GetResidueList();
+  ost::mol::ResidueViewList res_list_2 = chain2.GetResidueList();
+
+  for(ost::mol::ResidueViewList::iterator it = res_list_1.begin(); 
+      it != res_list_1.end(); ++it) {
+    if(!it->IsPeptideLinking()) {
+      continue;
+    }
+    ost::mol::AtomView ca = it->FindAtom("CA");
+    if(!ca.IsValid()) {
+      continue;
+    }
+    char olc = it->GetOneLetterCode();
+    if(olc == '?') {
+      continue;
+    }
+    pos1.push_back(ca.GetPos());
+    s1.push_back(olc);
+  }
+
+  for(ost::mol::ResidueViewList::iterator it = res_list_2.begin(); 
+      it != res_list_2.end(); ++it) {
+    if(!it->IsPeptideLinking()) {
+      continue;
+    }
+    ost::mol::AtomView ca = it->FindAtom("CA");
+    if(!ca.IsValid()) {
+      continue;
+    }
+    char olc = it->GetOneLetterCode();
+    if(olc == '?') {
+      continue;
+    }
+    pos2.push_back(ca.GetPos());
+    s2.push_back(olc);
+  }
+
+  String str_s1(s1.begin(), s1.end());
+  String str_s2(s2.begin(), s2.end());
+
+  ost::seq::SequenceHandle seq_s1 = ost::seq::CreateSequence("one", str_s1);
+  ost::seq::SequenceHandle seq_s2 = ost::seq::CreateSequence("two", str_s2);
+
+  return WrappedTMAlign(pos1, pos2, seq_s1, seq_s2, fast);
+}
+
+}} //ns
diff --git a/modules/bindings/src/wrap_tmalign.hh b/modules/bindings/src/wrap_tmalign.hh
new file mode 100644
index 000000000..124f51f05
--- /dev/null
+++ b/modules/bindings/src/wrap_tmalign.hh
@@ -0,0 +1,66 @@
+//------------------------------------------------------------------------------
+// This file is part of the OpenStructure project <www.openstructure.org>
+//
+// Copyright (C) 2008-2019 by the OpenStructure authors
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the Free
+// Software Foundation; either version 3.0 of the License, or (at your option)
+// any later version.
+// This library is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+// details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this library; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//------------------------------------------------------------------------------
+#ifndef OST_BINDINGS_TMALIGN_H
+#define OST_BINDINGS_TMALIGN_H
+
+#include <ost/geom/mat4.hh>
+#include <ost/geom/vec3.hh>
+#include <ost/seq/alignment_handle.hh>
+#include <ost/mol/chain_view.hh>
+#include <ost/mol/chain_handle.hh>
+
+namespace ost { namespace bindings {
+
+struct TMAlignResult {
+
+  TMAlignResult() { }
+
+  TMAlignResult(Real rm, Real tm, int aln_l, const geom::Mat4& t, 
+                const ost::seq::AlignmentHandle& aln): rmsd(rm),
+                                                       tm_score(tm),
+                                                       aligned_length(aln_l),
+                                                       transform(t),
+                                                       alignment(aln) { } 
+
+
+  Real rmsd;
+  Real tm_score;
+  int aligned_length;
+  geom::Mat4 transform;
+  ost::seq::AlignmentHandle alignment;
+
+  Real GetTMScore() { return tm_score; }
+  Real GetRMSD() { return rmsd; }
+  int GetAlignedLength() { return aligned_length; }
+  const geom::Mat4& GetTransform() { return transform; }
+  const ost::seq::AlignmentHandle& GetAlignment() { return alignment; }
+};
+
+TMAlignResult WrappedTMAlign(const geom::Vec3List& pos_one, 
+                             const geom::Vec3List& pos_two, 
+                             const ost::seq::SequenceHandle& seq1,
+                             const ost::seq::SequenceHandle& seq2,
+                             bool fast = false);
+
+TMAlignResult WrappedTMAlign(const ost::mol::ChainView& ent1,
+                             const ost::mol::ChainView& ent2,
+                             bool fast = false);
+}} //ns
+
+#endif
-- 
GitLab