text:
/* If we use autoconf.  */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifndef FIX_UNUSED
#define FIX_UNUSED(X) (void) (X) /* avoid warnings for unused params */
#endif

#include "RNAsubopt_cmdl.h"

const char *RNAsubopt_args_info_purpose = "calculate suboptimal secondary structures of RNAs";

const char *RNAsubopt_args_info_usage = "Usage: RNAsubopt [OPTIONS]...";

const char *RNAsubopt_args_info_description = "reads RNA sequences from stdin and (in the default -e mode) calculates all \nsuboptimal secondary structures within a user defined energy range above the \nminimum free energy (mfe). It prints the suboptimal structures in dot-bracket \nnotation followed by the energy in kcal/mol to stdout. Be careful, the number \nof structures returned grows exponentially with both sequence length and energy \nrange.\n\nAlternatively, when used with the -p option, RNAsubopt produces Boltzmann \nweighted samples of secondary structures.\n";

const char *RNAsubopt_args_info_detailed_help[] = {
  "  -h, --help                    Print help and exit",
  "      --detailed-help           Print help, including all details and hidden \n                                  options, and exit",
  "      --full-help               Print help, including hidden options, and exit",
  "  -V, --version                 Print version and exit",
  "\nGeneral Options:",
  "  Below are command line options which alter the general behavior of this \n  program\n",
  "  -C, --constraint              Calculate structures subject to constraints.\n                                    (default=off)",
  "  The program reads first the sequence, then a string containing constraints on \n  the structure encoded with the symbols:\n\n  . (no constraint for this base)\n\n  | (the corresponding base has to be paired\n\n  x (the base is unpaired)\n\n  < (base i is paired with a base j>i)\n\n  > (base i is paired with a base j<i)\n\n  and matching brackets ( ) (base i pairs base j)\n\n  With the exception of \"|\", constraints will disallow all pairs conflicting \n  with the constraint. This is usually sufficient to enforce the constraint, \n  but occasionally a base may stay unpaired in spite of constraints. PF folding \n  ignores constraints of type \"|\".\n\n",
  "      --canonicalBPonly         Remove non-canonical base pairs from the \n                                  structure constraint\n\n                                    (default=off)",
  "      --noconv                  Do not automatically substitude nucleotide \n                                  \"T\" with \"U\"\n\n                                    (default=off)",
  "\nAlgorithms:",
  "  Select the algorithms which should be applied to the given RNA sequence.\n",
  "  -e, --deltaEnergy=range       Compute suboptimal structures with energy in a \n                                  certain range of the optimum (kcal/mol). \n                                  Default is calculation of mfe structure only.\n\n",
  "      --deltaEnergyPost=range   Only print structures with energy within range \n                                  of the mfe after post reevaluation of \n                                  energies.\n",
  "  Useful in conjunction with -logML, -d1 or -d3: while the -e option specifies \n  the range before energies are re-evaluated, this option specifies the maximum \n  energy after re-evaluation.\n\n",
  "  -s, --sorted                  Sort the suboptimal structures by energy.\n                                    (default=off)",
  "  Since the sort in is done in memory, this becomes impractical when the number \n  of structures produced goes into millions. In such cases better pipe the \n  output through \"sort +1n\".\n\n",
  "  -p, --stochBT=number          Instead of producing all suboptimals in an \n                                  energy range, produce a random sample of \n                                  suboptimal structures, drawn with \n                                  probabilities equal to their Boltzmann \n                                  weights via stochastic backtracking in the \n                                  partition function. The -e and -p options are \n                                  mutually exclusive.\n\n",
  "  -S, --pfScale=scaling factor  In the calculation of the pf use scale*mfe as \n                                  an estimate for the ensemble free energy \n                                  (used to avoid overflows). Needed by \n                                  stochastic backtracking\n",
  "  The default is 1.07, useful values are 1.0 to 1.2. Occasionally needed for \n  long sequences.\n  You can also recompile the program to use double precision (see the README \n  file).\n\n",
  "  -c, --circ                    Assume a circular (instead of linear) RNA \n                                  molecule.\n\n                                    (default=off)",
  "  -D, --dos                     Compute density of states instead of secondary \n                                  structures\n                                    (default=off)",
  "  This option enables the evaluation of the number of secondary structures in \n  certain energy bands arround the MFE.\n",
  "  -z, --zuker                   Compute Zuker suboptimals instead of all \n                                  suboptimal structures within an engery band \n                                  arround the MFE.\n\n                                    (default=off)",
  "  -g, --gquad                   Incoorporate G-Quadruplex formation into the \n                                  structure prediction algorithm\n                                  (no support of G-quadruplex prediction for \n                                  stochastic backtracking and Zuker-style \n                                  suboptimals yet)\n                                    (default=off)",
  "\nModel Details:",
  "  -T, --temp=DOUBLE             Rescale energy parameters to a temperature of \n                                  temp C. Default is 37C.\n\n",
  "  -4, --noTetra                 Do not include special tabulated stabilizing \n                                  energies for tri-, tetra- and hexaloop \n                                  hairpins. Mostly for testing.\n\n                                    (default=off)",
  "  -d, --dangles=INT             How to treat \"dangling end\" energies for \n                                  bases adjacent to helices in free ends and \n                                  multi-loops\n                                    (default=`2')",
  "  \n  With -d1 only unpaired bases can participate in at most one dangling end, \n  this is the default for mfe folding but unsupported for the partition \n  function folding.\n\n  With -d2 this check is ignored, dangling energies will be added for the bases \n  adjacent to a helix on both sides in any case; this is the default for \n  partition function folding (-p).\n  The option -d0 ignores dangling ends altogether (mostly for debugging).\n  With -d3 mfe folding will allow coaxial stacking of adjacent helices in \n  multi-loops. At the moment the implementation will not allow coaxial stacking \n  of the two interior pairs in a loop of degree 3 and works only for mfe \n  folding.\n\n  Note that by default (as well as with -d1 and -d3) pf and mfe folding treat \n  dangling ends differently. Use -d2 in addition to -p to ensure that both \n  algorithms use the same energy model.\n\n",
  "      --noLP                    Produce structures without lonely pairs \n                                  (helices of length 1).\n                                    (default=off)",
  "  For partition function folding this only disallows pairs that can only occur \n  isolated. Other pairs may still occasionally occur as helices of length 1.\n\n",
  "      --noGU                    Do not allow GU pairs\n\n                                    (default=off)",
  "      --noClosingGU             Do not allow GU pairs at the end of helices\n\n                                    (default=off)",
  "      --logML                   Recalculate energies of structures using a \n                                  logarithmic energy function for multi-loops \n                                  before output.  (default=off)",
  "  This option does not effect structure generation, only the energies that are \n  printed out. Since logML lowers energies somewhat, some structures may be \n  missing.\n\n",
  "      --betaScale=DOUBLE        Set the scaling of the Boltzmann factors\n                                    (default=`1.')",
  "  The argument provided with this option enables to scale the thermodynamic \n  temperature used in the Boltzmann factors independently from the temperature \n  used to scale the individual energy contributions of the loop types. The \n  Boltzmann factors then become exp(-dG/(kT*betaScale)) where k is the \n  Boltzmann constant, dG the free energy contribution of the state and T the \n  absolute temperature.\n\n",
  "  -P, --paramFile=paramfile     Read energy parameters from paramfile, instead \n                                  of using the default parameter set.\n",
  "  A sample parameter file should accompany your distribution.\n  See the RNAlib documentation for details on the file format.\n\n",
  "      --nsp=STRING              Allow other pairs in addition to the usual \n                                  AU,GC,and GU pairs.\n",
  "  Its argument is a comma separated list of additionally allowed pairs. If the \n  first character is a \"-\" then AB will imply that AB and BA are allowed \n  pairs.\n  e.g. RNAfold -nsp -GA  will allow GA and AG pairs. Nonstandard pairs are \n  given 0 stacking energy.\n\n",
  "\nIf in doubt our program is right, nature is at fault.\nComments should be sent to rna@tbi.univie.ac.at.\n",
    0
};
static void
init_full_help_array(void)
{
  RNAsubopt_args_info_full_help[0] = RNAsubopt_args_info_detailed_help[0];
  RNAsubopt_args_info_full_help[1] = RNAsubopt_args_info_detailed_help[1];
  RNAsubopt_args_info_full_help[2] = RNAsubopt_args_info_detailed_help[2];
  RNAsubopt_args_info_full_help[3] = RNAsubopt_args_info_detailed_help[3];
  RNAsubopt_args_info_full_help[4] = RNAsubopt_args_info_detailed_help[4];
  RNAsubopt_args_info_full_help[5] = RNAsubopt_args_info_detailed_help[5];
  RNAsubopt_args_info_full_help[6] = RNAsubopt_args_info_detailed_help[6];
  RNAsubopt_args_info_full_help[7] = RNAsubopt_args_info_detailed_help[8];
  RNAsubopt_args_info_full_help[8] = RNAsubopt_args_info_detailed_help[9];
  RNAsubopt_args_info_full_help[9] = RNAsubopt_args_info_detailed_help[10];
  RNAsubopt_args_info_full_help[10] = RNAsubopt_args_info_detailed_help[11];
  RNAsubopt_args_info_full_help[11] = RNAsubopt_args_info_detailed_help[12];
  RNAsubopt_args_info_full_help[12] = RNAsubopt_args_info_detailed_help[13];
  RNAsubopt_args_info_full_help[13] = RNAsubopt_args_info_detailed_help[15];
  RNAsubopt_args_info_full_help[14] = RNAsubopt_args_info_detailed_help[17];
  RNAsubopt_args_info_full_help[15] = RNAsubopt_args_info_detailed_help[18];
  RNAsubopt_args_info_full_help[16] = RNAsubopt_args_info_detailed_help[20];
  RNAsubopt_args_info_full_help[17] = RNAsubopt_args_info_detailed_help[21];
  RNAsubopt_args_info_full_help[18] = RNAsubopt_args_info_detailed_help[23];
  RNAsubopt_args_info_full_help[19] = RNAsubopt_args_info_detailed_help[24];
  RNAsubopt_args_info_full_help[20] = RNAsubopt_args_info_detailed_help[25];
  RNAsubopt_args_info_full_help[21] = RNAsubopt_args_info_detailed_help[26];
  RNAsubopt_args_info_full_help[22] = RNAsubopt_args_info_detailed_help[27];
  RNAsubopt_args_info_full_help[23] = RNAsubopt_args_info_detailed_help[28];
  RNAsubopt_args_info_full_help[24] = RNAsubopt_args_info_detailed_help[30];
  RNAsubopt_args_info_full_help[25] = RNAsubopt_args_info_detailed_help[32];
  RNAsubopt_args_info_full_help[26] = RNAsubopt_args_info_detailed_help[33];
  RNAsubopt_args_info_full_help[27] = RNAsubopt_args_info_detailed_help[34];
  RNAsubopt_args_info_full_help[28] = RNAsubopt_args_info_detailed_help[36];
  RNAsubopt_args_info_full_help[29] = RNAsubopt_args_info_detailed_help[38];
  RNAsubopt_args_info_full_help[30] = RNAsubopt_args_info_detailed_help[40];
  RNAsubopt_args_info_full_help[31] = RNAsubopt_args_info_detailed_help[42];
  RNAsubopt_args_info_full_help[32] = 0;

}

const char *RNAsubopt_args_info_full_help[33];

static void
init_help_array(void)
{
  RNAsubopt_args_info_help[0] = RNAsubopt_args_info_detailed_help[0];
  RNAsubopt_args_info_help[1] = RNAsubopt_args_info_detailed_help[1];
  RNAsubopt_args_info_help[2] = RNAsubopt_args_info_detailed_help[2];
  RNAsubopt_args_info_help[3] = RNAsubopt_args_info_detailed_help[3];
  RNAsubopt_args_info_help[4] = RNAsubopt_args_info_detailed_help[4];
  RNAsubopt_args_info_help[5] = RNAsubopt_args_info_detailed_help[5];
  RNAsubopt_args_info_help[6] = RNAsubopt_args_info_detailed_help[6];
  RNAsubopt_args_info_help[7] = RNAsubopt_args_info_detailed_help[8];
  RNAsubopt_args_info_help[8] = RNAsubopt_args_info_detailed_help[9];
  RNAsubopt_args_info_help[9] = RNAsubopt_args_info_detailed_help[10];
  RNAsubopt_args_info_help[10] = RNAsubopt_args_info_detailed_help[11];
  RNAsubopt_args_info_help[11] = RNAsubopt_args_info_detailed_help[12];
  RNAsubopt_args_info_help[12] = RNAsubopt_args_info_detailed_help[13];
  RNAsubopt_args_info_help[13] = RNAsubopt_args_info_detailed_help[15];
  RNAsubopt_args_info_help[14] = RNAsubopt_args_info_detailed_help[17];
  RNAsubopt_args_info_help[15] = RNAsubopt_args_info_detailed_help[20];
  RNAsubopt_args_info_help[16] = RNAsubopt_args_info_detailed_help[21];
  RNAsubopt_args_info_help[17] = RNAsubopt_args_info_detailed_help[23];
  RNAsubopt_args_info_help[18] = RNAsubopt_args_info_detailed_help[24];
  RNAsubopt_args_info_help[19] = RNAsubopt_args_info_detailed_help[25];
  RNAsubopt_args_info_help[20] = RNAsubopt_args_info_detailed_help[26];
  RNAsubopt_args_info_help[21] = RNAsubopt_args_info_detailed_help[27];
  RNAsubopt_args_info_help[22] = RNAsubopt_args_info_detailed_help[28];
  RNAsubopt_args_info_help[23] = RNAsubopt_args_info_detailed_help[30];
  RNAsubopt_args_info_help[24] = RNAsubopt_args_info_detailed_help[32];
  RNAsubopt_args_info_help[25] = RNAsubopt_args_info_detailed_help[33];
  RNAsubopt_args_info_help[26] = RNAsubopt_args_info_detailed_help[34];
  RNAsubopt_args_info_help[27] = RNAsubopt_args_info_detailed_help[38];
  RNAsubopt_args_info_help[28] = RNAsubopt_args_info_detailed_help[42];
  RNAsubopt_args_info_help[29] = 0;

}

const char *RNAsubopt_args_info_help[30];

typedef enum {ARG_NO
  , ARG_FLAG
  , ARG_STRING
  , ARG_INT
  , ARG_FLOAT
  , ARG_DOUBLE
} RNAsubopt_cmdline_parser_arg_type;

static
void clear_given (struct RNAsubopt_args_info *args_info);
static
void clear_args (struct RNAsubopt_args_info *args_info);

static int
RNAsubopt_cmdline_parser_internal (int argc, char **argv, struct RNAsubopt_args_info *args_info,
                        struct RNAsubopt_cmdline_parser_params *params, const char *additional_error);

static int
RNAsubopt_cmdline_parser_required2 (struct RNAsubopt_args_info *args_info, const char *prog_name, const char *additional_error);

static char *
gengetopt_strdup (const char *s);

static
void clear_given (struct RNAsubopt_args_info *args_info)
{
  args_info->help_given = 0 ;
  args_info->detailed_help_given = 0 ;
  args_info->full_help_given = 0 ;
  args_info->version_given = 0 ;
  args_info->constraint_given = 0 ;
  args_info->canonicalBPonly_given = 0 ;
  args_info->noconv_given = 0 ;
  args_info->deltaEnergy_given = 0 ;
  args_info->deltaEnergyPost_given = 0 ;
  args_info->sorted_given = 0 ;
  args_info->stochBT_given = 0 ;
  args_info->pfScale_given = 0 ;
  args_info->circ_given = 0 ;
  args_info->dos_given = 0 ;
  args_info->zuker_given = 0 ;
  args_info->gquad_given = 0 ;
  args_info->temp_given = 0 ;
  args_info->noTetra_given = 0 ;
  args_info->dangles_given = 0 ;
  args_info->noLP_given = 0 ;
  args_info->noGU_given = 0 ;
  args_info->noClosingGU_given = 0 ;
  args_info->logML_given = 0 ;
  args_info->betaScale_given = 0 ;
  args_info->paramFile_given = 0 ;
  args_info->nsp_given = 0 ;
}

static
void clear_args (struct RNAsubopt_args_info *args_info)
{
  FIX_UNUSED (args_info);
  args_info->constraint_flag = 0;
  args_info->canonicalBPonly_flag = 0;
  args_info->noconv_flag = 0;
  args_info->deltaEnergy_orig = NULL;
  args_info->deltaEnergyPost_orig = NULL;
  args_info->sorted_flag = 0;
  args_info->stochBT_orig = NULL;
  args_info->pfScale_orig = NULL;
  args_info->circ_flag = 0;
  args_info->dos_flag = 0;
  args_info->zuker_flag = 0;
  args_info->gquad_flag = 0;
  args_info->temp_orig = NULL;
  args_info->noTetra_flag = 0;
  args_info->dangles_arg = 2;
  args_info->dangles_orig = NULL;
  args_info->noLP_flag = 0;
  args_info->noGU_flag = 0;
  args_info->noClosingGU_flag = 0;
  args_info->logML_flag = 0;
  args_info->betaScale_arg = 1.;
  args_info->betaScale_orig = NULL;
  args_info->paramFile_arg = NULL;
  args_info->paramFile_orig = NULL;
  args_info->nsp_arg = NULL;
  args_info->nsp_orig = NULL;

}

static
void init_args_info(struct RNAsubopt_args_info *args_info)
{
  init_full_help_array();
  init_help_array();
  args_info->help_help = RNAsubopt_args_info_detailed_help[0] ;
  args_info->detailed_help_help = RNAsubopt_args_info_detailed_help[1] ;
  args_info->full_help_help = RNAsubopt_args_info_detailed_help[2] ;
  args_info->version_help = RNAsubopt_args_info_detailed_help[3] ;
  args_info->constraint_help = RNAsubopt_args_info_detailed_help[6] ;
  args_info->canonicalBPonly_help = RNAsubopt_args_info_detailed_help[8] ;
  args_info->noconv_help = RNAsubopt_args_info_detailed_help[9] ;
  args_info->deltaEnergy_help = RNAsubopt_args_info_detailed_help[12] ;
  args_info->deltaEnergyPost_help = RNAsubopt_args_info_detailed_help[13] ;
  args_info->sorted_help = RNAsubopt_args_info_detailed_help[15] ;
  args_info->stochBT_help = RNAsubopt_args_info_detailed_help[17] ;
  args_info->pfScale_help = RNAsubopt_args_info_detailed_help[18] ;
  args_info->circ_help = RNAsubopt_args_info_detailed_help[20] ;
  args_info->dos_help = RNAsubopt_args_info_detailed_help[21] ;
  args_info->zuker_help = RNAsubopt_args_info_detailed_help[23] ;
  args_info->gquad_help = RNAsubopt_args_info_detailed_help[24] ;
  args_info->temp_help = RNAsubopt_args_info_detailed_help[26] ;
  args_info->noTetra_help = RNAsubopt_args_info_detailed_help[27] ;
  args_info->dangles_help = RNAsubopt_args_info_detailed_help[28] ;
  args_info->noLP_help = RNAsubopt_args_info_detailed_help[30] ;
  args_info->noGU_help = RNAsubopt_args_info_detailed_help[32] ;
  args_info->noClosingGU_help = RNAsubopt_args_info_detailed_help[33] ;
  args_info->logML_help = RNAsubopt_args_info_detailed_help[34] ;
  args_info->betaScale_help = RNAsubopt_args_info_detailed_help[36] ;
  args_info->paramFile_help = RNAsubopt_args_info_detailed_help[38] ;
  args_info->nsp_help = RNAsubopt_args_info_detailed_help[40] ;

}

void
RNAsubopt_cmdline_parser_print_version (void)
{
  printf ("%s %s\n",
     (strlen(RNASUBOPT_CMDLINE_PARSER_PACKAGE_NAME) ? RNASUBOPT_CMDLINE_PARSER_PACKAGE_NAME : RNASUBOPT_CMDLINE_PARSER_PACKAGE),
     RNASUBOPT_CMDLINE_PARSER_VERSION);
}

static void print_help_common(void) {
  RNAsubopt_cmdline_parser_print_version ();

  if (strlen(RNAsubopt_args_info_purpose) > 0)
    printf("\n%s\n", RNAsubopt_args_info_purpose);

  if (strlen(RNAsubopt_args_info_usage) > 0)
    printf("\n%s\n", RNAsubopt_args_info_usage);

  printf("\n");

  if (strlen(RNAsubopt_args_info_description) > 0)
    printf("%s\n\n", RNAsubopt_args_info_description);
}

void
RNAsubopt_cmdline_parser_print_help (void)
{
  int i = 0;
  print_help_common();
  while (RNAsubopt_args_info_help[i])
    printf("%s\n", RNAsubopt_args_info_help[i++]);
}

void
RNAsubopt_cmdline_parser_print_full_help (void)
{
  int i = 0;
  print_help_common();
  while (RNAsubopt_args_info_full_help[i])
    printf("%s\n", RNAsubopt_args_info_full_help[i++]);
}

void
RNAsubopt_cmdline_parser_print_detailed_help (void)
{
  int i = 0;
  print_help_common();
  while (RNAsubopt_args_info_detailed_help[i])
    printf("%s\n", RNAsubopt_args_info_detailed_help[i++]);
}

void
RNAsubopt_cmdline_parser_init (struct RNAsubopt_args_info *args_info)
{
  clear_given (args_info);
  clear_args (args_info);
  init_args_info (args_info);
}

void
RNAsubopt_cmdline_parser_params_init(struct RNAsubopt_cmdline_parser_params *params)
{
  if (params)
    {
      params->override = 0;
      params->initialize = 1;
      params->check_required = 1;
      params->check_ambiguity = 0;
      params->print_errors = 1;
    }
}

struct RNAsubopt_cmdline_parser_params *
RNAsubopt_cmdline_parser_params_create(void)
{
  struct RNAsubopt_cmdline_parser_params *params =
    (struct RNAsubopt_cmdline_parser_params *)malloc(sizeof(struct RNAsubopt_cmdline_parser_params));
  RNAsubopt_cmdline_parser_params_init(params);
  return params;
}

static void
free_string_field (char **s)
{
  if (*s)
    {
      free (*s);
      *s = 0;
    }
}

static void
RNAsubopt_cmdline_parser_release (struct RNAsubopt_args_info *args_info)
{

  free_string_field (&(args_info->deltaEnergy_orig));
  free_string_field (&(args_info->deltaEnergyPost_orig));
  free_string_field (&(args_info->stochBT_orig));
  free_string_field (&(args_info->pfScale_orig));
  free_string_field (&(args_info->temp_orig));
  free_string_field (&(args_info->dangles_orig));
  free_string_field (&(args_info->betaScale_orig));
  free_string_field (&(args_info->paramFile_arg));
  free_string_field (&(args_info->paramFile_orig));
  free_string_field (&(args_info->nsp_arg));
  free_string_field (&(args_info->nsp_orig));

  clear_given (args_info);
}

static void
write_into_file(FILE *outfile, const char *opt, const char *arg, const char *values[])
{
  FIX_UNUSED (values);
  if (arg) {
    fprintf(outfile, "%s=\"%s\"\n", opt, arg);
  } else {
    fprintf(outfile, "%s\n", opt);
  }
}

int
RNAsubopt_cmdline_parser_dump(FILE *outfile, struct RNAsubopt_args_info *args_info)
{
  int i = 0;

  if (!outfile)
    {
      fprintf (stderr, "%s: cannot dump options to stream\n", RNASUBOPT_CMDLINE_PARSER_PACKAGE);
      return EXIT_FAILURE;
    }

  if (args_info->help_given)
    write_into_file(outfile, "help", 0, 0 );
  if (args_info->detailed_help_given)
    write_into_file(outfile, "detailed-help", 0, 0 );
  if (args_info->full_help_given)
    write_into_file(outfile, "full-help", 0, 0 );
  if (args_info->version_given)
    write_into_file(outfile, "version", 0, 0 );
  if (args_info->constraint_given)
    write_into_file(outfile, "constraint", 0, 0 );
  if (args_info->canonicalBPonly_given)
    write_into_file(outfile, "canonicalBPonly", 0, 0 );
  if (args_info->noconv_given)
    write_into_file(outfile, "noconv", 0, 0 );
  if (args_info->deltaEnergy_given)
    write_into_file(outfile, "deltaEnergy", args_info->deltaEnergy_orig, 0);
  if (args_info->deltaEnergyPost_given)
    write_into_file(outfile, "deltaEnergyPost", args_info->deltaEnergyPost_orig, 0);
  if (args_info->sorted_given)
    write_into_file(outfile, "sorted", 0, 0 );
  if (args_info->stochBT_given)
    write_into_file(outfile, "stochBT", args_info->stochBT_orig, 0);
  if (args_info->pfScale_given)
    write_into_file(outfile, "pfScale", args_info->pfScale_orig, 0);
  if (args_info->circ_given)
    write_into_file(outfile, "circ", 0, 0 );
  if (args_info->dos_given)
    write_into_file(outfile, "dos", 0, 0 );
  if (args_info->zuker_given)
    write_into_file(outfile, "zuker", 0, 0 );
  if (args_info->gquad_given)
    write_into_file(outfile, "gquad", 0, 0 );
  if (args_info->temp_given)
    write_into_file(outfile, "temp", args_info->temp_orig, 0);
  if (args_info->noTetra_given)
    write_into_file(outfile, "noTetra", 0, 0 );
  if (args_info->dangles_given)
    write_into_file(outfile, "dangles", args_info->dangles_orig, 0);
  if (args_info->noLP_given)
    write_into_file(outfile, "noLP", 0, 0 );
  if (args_info->noGU_given)
    write_into_file(outfile, "noGU", 0, 0 );
  if (args_info->noClosingGU_given)
    write_into_file(outfile, "noClosingGU", 0, 0 );
  if (args_info->logML_given)
    write_into_file(outfile, "logML", 0, 0 );
  if (args_info->betaScale_given)
    write_into_file(outfile, "betaScale", args_info->betaScale_orig, 0);
  if (args_info->paramFile_given)
    write_into_file(outfile, "paramFile", args_info->paramFile_orig, 0);
  if (args_info->nsp_given)
    write_into_file(outfile, "nsp", args_info->nsp_orig, 0);

  i = EXIT_SUCCESS;
  return i;
}

int
RNAsubopt_cmdline_parser_file_save(const char *filename, struct RNAsubopt_args_info *args_info)
{
  FILE *outfile;
  int i = 0;

  outfile = fopen(filename, "w");

  if (!outfile)
    {
      fprintf (stderr, "%s: cannot open file for writing: %s\n", RNASUBOPT_CMDLINE_PARSER_PACKAGE, filename);
      return EXIT_FAILURE;
    }

  i = RNAsubopt_cmdline_parser_dump(outfile, args_info);
  fclose (outfile);

  return i;
}

void
RNAsubopt_cmdline_parser_free (struct RNAsubopt_args_info *args_info)
{
  RNAsubopt_cmdline_parser_release (args_info);
}

/** @brief replacement of strdup, which is not standard */
char *
gengetopt_strdup (const char *s)
{
  char *result = 0;
  if (!s)
    return result;

  result = (char*)malloc(strlen(s) + 1);
  if (result == (char*)0)
    return (char*)0;
  strcpy(result, s);
  return result;
}

int
RNAsubopt_cmdline_parser (int argc, char **argv, struct RNAsubopt_args_info *args_info)
{
  return RNAsubopt_cmdline_parser2 (argc, argv, args_info, 0, 1, 1);
}

int
RNAsubopt_cmdline_parser_ext (int argc, char **argv, struct RNAsubopt_args_info *args_info,
                   struct RNAsubopt_cmdline_parser_params *params)
{
  int result;
  result = RNAsubopt_cmdline_parser_internal (argc, argv, args_info, params, 0);

  if (result == EXIT_FAILURE)
    {
      RNAsubopt_cmdline_parser_free (args_info);
      exit (EXIT_FAILURE);
    }

  return result;
}

int
RNAsubopt_cmdline_parser2 (int argc, char **argv, struct RNAsubopt_args_info *args_info, int override, int initialize, int check_required)
{
  int result;
  struct RNAsubopt_cmdline_parser_params params;

  params.override = override;
  params.initialize = initialize;
  params.check_required = check_required;
  params.check_ambiguity = 0;
  params.print_errors = 1;

  result = RNAsubopt_cmdline_parser_internal (argc, argv, args_info, &params, 0);

  if (result == EXIT_FAILURE)
    {
      RNAsubopt_cmdline_parser_free (args_info);
      exit (EXIT_FAILURE);
    }

  return result;
}

int
RNAsubopt_cmdline_parser_required (struct RNAsubopt_args_info *args_info, const char *prog_name)
{
  int result = EXIT_SUCCESS;

  if (RNAsubopt_cmdline_parser_required2(args_info, prog_name, 0) > 0)
    result = EXIT_FAILURE;

  if (result == EXIT_FAILURE)
    {
      RNAsubopt_cmdline_parser_free (args_info);
      exit (EXIT_FAILURE);
    }

  return result;
}

int
RNAsubopt_cmdline_parser_required2 (struct RNAsubopt_args_info *args_info, const char *prog_name, const char *additional_error)
{
  int error = 0;
  FIX_UNUSED (additional_error);

  /* checks for required options */

  /* checks for dependences among options */
  if (args_info->canonicalBPonly_given && ! args_info->constraint_given)
    {
      fprintf (stderr, "%s: '--canonicalBPonly' option depends on option 'constraint'%s\n", prog_name, (additional_error ? additional_error : ""));
      error = 1;
    }
  if (args_info->betaScale_given && ! args_info->stochBT_given)
    {
      fprintf (stderr, "%s: '--betaScale' option depends on option 'stochBT'%s\n", prog_name, (additional_error ? additional_error : ""));
      error = 1;
    }

  return error;
}

/*
 * Extracted from the glibc source tree, version 2.3.6
 *
 * Licensed under the GPL as per the whole glibc source tree.
 *
 * This file was modified so that getopt_long can be called
 * many times without risking previous memory to be spoiled.
 *
 * Modified by Andre Noll and Lorenzo Bettini for use in
 * GNU gengetopt generated files.
 *
 */

/*
 * we must include anything we need since this file is not thought to be
 * inserted in a file already using getopt.h
 *
 * Lorenzo
 */

struct option
{
  const char *name;
  /* has_arg can't be an enum because some compilers complain about
     type mismatches in all the code that assumes it is an int.  */
  int has_arg;
  int *flag;
  int val;
};

/* This version of `getopt' appears to the caller like standard Unix `getopt'
   but it behaves differently for the user, since it allows the user
   to intersperse the options with the other arguments.

   As `getopt' works, it permutes the elements of ARGV so that,
   when it is done, all the options precede everything else.  Thus
   all application programs are extended to handle flexible argument order.
*/
/*
   If the field `flag' is not NULL, it points to a variable that is set
   to the value given in the field `val' when the option is found, but
   left unchanged if the option is not found.

   To have a long-named option do something other than set an `int' to
   a compiled-in constant, such as set a value from `custom_optarg', set the
   option's `flag' field to zero and its `val' field to a nonzero
   value (the equivalent single-letter option character, if there is
   one).  For long options that have a zero `flag' field, `getopt'
   returns the contents of the `val' field.  */

/* Names for the values of the `has_arg' field of `struct option'.  */
#ifndef no_argument
#define no_argument		0
#endif

#ifndef required_argument
#define required_argument	1
#endif

#ifndef optional_argument
#define optional_argument	2
#endif

struct custom_getopt_data {
	/*
	 * These have exactly the same meaning as the corresponding global variables,
	 * except that they are used for the reentrant versions of getopt.
	 */
	int custom_optind;
	int custom_opterr;
	int custom_optopt;
	char *custom_optarg;

	/* True if the internal members have been initialized.  */
	int initialized;

	/*
	 * The next char to be scanned in the option-element in which the last option
	 * character we returned was found.  This allows us to pick up the scan where
	 * we left off.  If this is zero, or a null string, it means resume the scan by
	 * advancing to the next ARGV-element.
	 */
	char *nextchar;

	/*
	 * Describe the part of ARGV that contains non-options that have been skipped.
	 * `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is
	 * the index after the last of them.
	 */
	int first_nonopt;
	int last_nonopt;
};

/*
 * the variables optarg, optind, opterr and optopt are renamed with
 * the custom_ prefix so that they don't interfere with getopt ones.
 *
 * Moreover they're static so they are visible only from within the
 * file where this very file will be included.
 */

/*
 * For communication from `custom_getopt' to the caller.  When `custom_getopt' finds an
 * option that takes an argument, the argument value is returned here.
 */
static char *custom_optarg;

/*
 * Index in ARGV of the next element to be scanned.  This is used for
 * communication to and from the caller and for communication between
 * successive calls to `custom_getopt'.
 *
 * On entry to `custom_getopt', 1 means this is the first call; initialize.
 *
 * When `custom_getopt' returns -1, this is the index of the first of the non-option
 * elements that the caller should itself scan.
 *
 * Otherwise, `custom_optind' communicates from one call to the next how much of ARGV
 * has been scanned so far.
 *
 * 1003.2 says this must be 1 before any call.
 */
static int custom_optind = 1;

/*
 * Callers store zero here to inhibit the error message for unrecognized
 * options.
 */
static int custom_opterr = 1;

/*
 * Set to an option character which was unrecognized.  This must be initialized
 * on some systems to avoid linking in the system's own getopt implementation.
 */
static int custom_optopt = '?';

/*
 * Exchange two adjacent subsequences of ARGV.  One subsequence is elements
 * [first_nonopt,last_nonopt) which contains all the non-options that have been
 * skipped so far.  The other is elements [last_nonopt,custom_optind), which contains
 * all the options processed since those non-options were skipped.
 * `first_nonopt' and `last_nonopt' are relocated so that they describe the new
 * indices of the non-options in ARGV after they are moved.
 */
static void exchange(char **argv, struct custom_getopt_data *d)
{
	int bottom = d->first_nonopt;
	int middle = d->last_nonopt;
	int top = d->custom_optind;
	char *tem;

	/*
	 * Exchange the shorter segment with the far end of the longer segment.
	 * That puts the shorter segment into the right place.  It leaves the
	 * longer segment in the right place overall, but it consists of two
	 * parts that need to be swapped next.
	 */
	while (top > middle && middle > bottom) {
		if (top - middle > middle - bottom) {
			/* Bottom segment is the short one.  */
			int len = middle - bottom;
			int i;

			/* Swap it with the top part of the top segment.  */
			for (i = 0; i < len; i++) {
				tem = argv[bottom + i];
				argv[bottom + i] =
					argv[top - (middle - bottom) + i];
				argv[top - (middle - bottom) + i] = tem;
			}
			/* Exclude the moved bottom segment from further swapping.  */
			top -= len;
		} else {
			/* Top segment is the short one.  */
			int len = top - middle;
			int i;

			/* Swap it with the bottom part of the bottom segment.  */
			for (i = 0; i < len; i++) {
				tem = argv[bottom + i];
				argv[bottom + i] = argv[middle + i];
				argv[middle + i] = tem;
			}
			/* Exclude the moved top segment from further swapping.  */
			bottom += len;
		}
	}
	/* Update records for the slots the non-options now occupy.  */
	d->first_nonopt += (d->custom_optind - d->last_nonopt);
	d->last_nonopt = d->custom_optind;
}

/* Initialize the internal data when the first call is made.  */
static void custom_getopt_initialize(struct custom_getopt_data *d)
{
	/*
	 * Start processing options with ARGV-element 1 (since ARGV-element 0
	 * is the program name); the sequence of previously skipped non-option
	 * ARGV-elements is empty.
	 */
	d->first_nonopt = d->last_nonopt = d->custom_optind;
	d->nextchar = NULL;
	d->initialized = 1;
}

#define NONOPTION_P (argv[d->custom_optind][0] != '-' || argv[d->custom_optind][1] == '\0')

/* return: zero: continue, nonzero: return given value to user */
static int shuffle_argv(int argc, char *const *argv,const struct option *longopts,
	struct custom_getopt_data *d)
{
	/*
	 * Give FIRST_NONOPT & LAST_NONOPT rational values if CUSTOM_OPTIND has been
	 * moved back by the user (who may also have changed the arguments).
	 */
	if (d->last_nonopt > d->custom_optind)
		d->last_nonopt = d->custom_optind;
	if (d->first_nonopt > d->custom_optind)
		d->first_nonopt = d->custom_optind;
	/*
	 * If we have just processed some options following some
	 * non-options, exchange them so that the options come first.
	 */
	if (d->first_nonopt != d->last_nonopt &&
			d->last_nonopt != d->custom_optind)
		exchange((char **) argv, d);
	else if (d->last_nonopt != d->custom_optind)
		d->first_nonopt = d->custom_optind;
	/*
	 * Skip any additional non-options and extend the range of
	 * non-options previously skipped.
	 */
	while (d->custom_optind < argc && NONOPTION_P)
		d->custom_optind++;
	d->last_nonopt = d->custom_optind;
	/*
	 * The special ARGV-element `--' means premature end of options.  Skip
	 * it like a null option, then exchange with previous non-options as if
	 * it were an option, then skip everything else like a non-option.
	 */
	if (d->custom_optind != argc && !strcmp(argv[d->custom_optind], "--")) {
		d->custom_optind++;
		if (d->first_nonopt != d->last_nonopt
				&& d->last_nonopt != d->custom_optind)
			exchange((char **) argv, d);
		else if (d->first_nonopt == d->last_nonopt)
			d->first_nonopt = d->custom_optind;
		d->last_nonopt = argc;
		d->custom_optind = argc;
	}
	/*
	 * If we have done all the ARGV-elements, stop the scan and back over
	 * any non-options that we skipped and permuted.
	 */
	if (d->custom_optind == argc) {
		/*
		 * Set the next-arg-index to point at the non-options that we
		 * previously skipped, so the caller will digest them.
		 */
		if (d->first_nonopt != d->last_nonopt)
			d->custom_optind = d->first_nonopt;
		return -1;
	}
	/*
	 * If we have come to a non-option and did not permute it, either stop
	 * the scan or describe it to the caller and pass it by.
	 */
	if (NONOPTION_P) {
		d->custom_optarg = argv[d->custom_optind++];
		return 1;
	}
	/*
	 * We have found another option-ARGV-element. Skip the initial
	 * punctuation.
	 */
	d->nextchar = (argv[d->custom_optind] + 1 + (longopts != NULL && argv[d->custom_optind][1] == '-'));
	return 0;
}

/*
 * Check whether the ARGV-element is a long option.
 *
 * If there's a long option "fubar" and the ARGV-element is "-fu", consider
 * that an abbreviation of the long option, just like "--fu", and not "-f" with
 * arg "u".
 *
 * This distinction seems to be the most useful approach.
 *
 */
static int check_long_opt(int argc, char *const *argv, const char *optstring,
		const struct option *longopts, int *longind,
		int print_errors, struct custom_getopt_data *d)
{
	char *nameend;
	const struct option *p;
	const struct option *pfound = NULL;
	int exact = 0;
	int ambig = 0;
	int indfound = -1;
	int option_index;

	for (nameend = d->nextchar; *nameend && *nameend != '='; nameend++)
		/* Do nothing.  */ ;

	/* Test all long options for either exact match or abbreviated matches */
	for (p = longopts, option_index = 0; p->name; p++, option_index++)
		if (!strncmp(p->name, d->nextchar, nameend - d->nextchar)) {
			if ((unsigned int) (nameend - d->nextchar)
					== (unsigned int) strlen(p->name)) {
				/* Exact match found.  */
				pfound = p;
				indfound = option_index;
				exact = 1;
				break;
			} else if (pfound == NULL) {
				/* First nonexact match found.  */
				pfound = p;
				indfound = option_index;
			} else if (pfound->has_arg != p->has_arg
					|| pfound->flag != p->flag
					|| pfound->val != p->val)
				/* Second or later nonexact match found.  */
				ambig = 1;
		}
	if (ambig && !exact) {
		if (print_errors) {
			fprintf(stderr,
				"%s: option `%s' is ambiguous\n",
				argv[0], argv[d->custom_optind]);
		}
		d->nextchar += strlen(d->nextchar);
		d->custom_optind++;
		d->custom_optopt = 0;
		return '?';
	}
	if (pfound) {
		option_index = indfound;
		d->custom_optind++;
		if (*nameend) {
			if (pfound->has_arg != no_argument)
				d->custom_optarg = nameend + 1;
			else {
				if (print_errors) {
					if (argv[d->custom_optind - 1][1] == '-') {
						/* --option */
						fprintf(stderr, "%s: option `--%s' doesn't allow an argument\n",
							argv[0], pfound->name);
					} else {
						/* +option or -option */
						fprintf(stderr, "%s: option `%c%s' doesn't allow an argument\n",
							argv[0], argv[d->custom_optind - 1][0], pfound->name);
					}

				}
				d->nextchar += strlen(d->nextchar);
				d->custom_optopt = pfound->val;
				return '?';
			}
		} else if (pfound->has_arg == required_argument) {
			if (d->custom_optind < argc)
				d->custom_optarg = argv[d->custom_optind++];
			else {
				if (print_errors) {
					fprintf(stderr,
						"%s: option `%s' requires an argument\n",
						argv[0],
						argv[d->custom_optind - 1]);
				}
				d->nextchar += strlen(d->nextchar);
				d->custom_optopt = pfound->val;
				return optstring[0] == ':' ? ':' : '?';
			}
		}
		d->nextchar += strlen(d->nextchar);
		if (longind != NULL)
			*longind = option_index;
		if (pfound->flag) {
			*(pfound->flag) = pfound->val;
			return 0;
		}
		return pfound->val;
	}
	/*
	 * Can't find it as a long option.  If this is not getopt_long_only, or
	 * the option starts with '--' or is not a valid short option, then
	 * it's an error.  Otherwise interpret it as a short option.
	 */
	if (print_errors) {
		if (argv[d->custom_optind][1] == '-') {
			/* --option */
			fprintf(stderr,
				"%s: unrecognized option `--%s'\n",
				argv[0], d->nextchar);
		} else {
			/* +option or -option */
			fprintf(stderr,
				"%s: unrecognized option `%c%s'\n",
				argv[0], argv[d->custom_optind][0],
				d->nextchar);
		}
	}
	d->nextchar = (char *) "";
	d->custom_optind++;
	d->custom_optopt = 0;
	return '?';
}

static int check_short_opt(int argc, char *const *argv, const char *optstring,
		int print_errors, struct custom_getopt_data *d)
{
	char c = *d->nextchar++;
	const char *temp = strchr(optstring, c);

	/* Increment `custom_optind' when we start to process its last character.  */
	if (*d->nextchar == '\0')
		++d->custom_optind;
	if (!temp || c == ':') {
		if (print_errors)
			fprintf(stderr, "%s: invalid option -- %c\n", argv[0], c);

		d->custom_optopt = c;
		return '?';
	}
	if (temp[1] == ':') {
		if (temp[2] == ':') {
			/* This is an option that accepts an argument optionally.  */
			if (*d->nextchar != '\0') {
				d->custom_optarg = d->nextchar;
				d->custom_optind++;
			} else
				d->custom_optarg = NULL;
			d->nextchar = NULL;
		} else {
			/* This is an option that requires an argument.  */
			if (*d->nextchar != '\0') {
				d->custom_optarg = d->nextchar;
				/*
				 * If we end this ARGV-element by taking the
				 * rest as an arg, we must advance to the next
				 * element now.
				 */
				d->custom_optind++;
			} else if (d->custom_optind == argc) {
				if (print_errors) {
					fprintf(stderr,
						"%s: option requires an argument -- %c\n",
						argv[0], c);
				}
				d->custom_optopt = c;
				if (optstring[0] == ':')
					c = ':';
				else
					c = '?';
			} else
				/*
				 * We already incremented `custom_optind' once;
				 * increment it again when taking next ARGV-elt
				 * as argument.
				 */
				d->custom_optarg = argv[d->custom_optind++];
			d->nextchar = NULL;
		}
	}
	return c;
}

/*
 * Scan elements of ARGV for option characters given in OPTSTRING.
 *
 * If an element of ARGV starts with '-', and is not exactly "-" or "--",
 * then it is an option element.  The characters of this element
 * (aside from the initial '-') are option characters.  If `getopt'
 * is called repeatedly, it returns successively each of the option characters
 * from each of the option elements.
 *
 * If `getopt' finds another option character, it returns that character,
 * updating `custom_optind' and `nextchar' so that the next call to `getopt' can
 * resume the scan with the following option character or ARGV-element.
 *
 * If there are no more option characters, `getopt' returns -1.
 * Then `custom_optind' is the index in ARGV of the first ARGV-element
 * that is not an option.  (The ARGV-elements have been permuted
 * so that those that are not options now come last.)
 *
 * OPTSTRING is a string containing the legitimate option characters.
 * If an option character is seen that is not listed in OPTSTRING,
 * return '?' after printing an error message.  If you set `custom_opterr' to
 * zero, the error message is suppressed but we still return '?'.
 *
 * If a char in OPTSTRING is followed by a colon, that means it wants an arg,
 * so the following text in the same ARGV-element, or the text of the following
 * ARGV-element, is returned in `custom_optarg'.  Two colons mean an option that
 * wants an optional arg; if there is text in the current ARGV-element,
 * it is returned in `custom_optarg', otherwise `custom_optarg' is set to zero.
 *
 * If OPTSTRING starts with `-' or `+', it requests different methods of
 * handling the non-option ARGV-elements.
 * See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
 *
 * Long-named options begin with `--' instead of `-'.
 * Their names may be abbreviated as long as the abbreviation is unique
 * or is an exact match for some defined option.  If they have an
 * argument, it follows the option name in the same ARGV-element, separated
 * from the option name by a `=', or else the in next ARGV-element.
 * When `getopt' finds a long-named option, it returns 0 if that option's
 * `flag' field is nonzero, the value of the option's `val' field
 * if the `flag' field is zero.
 *
 * The elements of ARGV aren't really const, because we permute them.
 * But we pretend they're const in the prototype to be compatible
 * with other systems.
 *
 * LONGOPTS is a vector of `struct option' terminated by an
 * element containing a name which is zero.
 *
 * LONGIND returns the index in LONGOPT of the long-named option found.
 * It is only valid when a long-named option has been found by the most
 * recent call.
 *
 * Return the option character from OPTS just read.  Return -1 when there are
 * no more options.  For unrecognized options, or options missing arguments,
 * `custom_optopt' is set to the option letter, and '?' is returned.
 *
 * The OPTS string is a list of characters which are recognized option letters,
 * optionally followed by colons, specifying that that letter takes an
 * argument, to be placed in `custom_optarg'.
 *
 * If a letter in OPTS is followed by two colons, its argument is optional.
 * This behavior is specific to the GNU `getopt'.
 *
 * The argument `--' causes premature termination of argument scanning,
 * explicitly telling `getopt' that there are no more options.  If OPTS begins
 * with `--', then non-option arguments are treated as arguments to the option
 * '\0'.  This behavior is specific to the GNU `getopt'.
 */

static int getopt_internal_r(int argc, char *const *argv, const char *optstring,
		const struct option *longopts, int *longind,
		struct custom_getopt_data *d)
{
	int ret, print_errors = d->custom_opterr;

	if (optstring[0] == ':')
		print_errors = 0;
	if (argc < 1)
		return -1;
	d->custom_optarg = NULL;

	/*
	 * This is a big difference with GNU getopt, since optind == 0
	 * means initialization while here 1 means first call.
	 */
	if (d->custom_optind == 0 || !d->initialized) {
		if (d->custom_optind == 0)
			d->custom_optind = 1;	/* Don't scan ARGV[0], the program name.  */
		custom_getopt_initialize(d);
	}
	if (d->nextchar == NULL || *d->nextchar == '\0') {
		ret = shuffle_argv(argc, argv, longopts, d);
		if (ret)
			return ret;
	}
	if (longopts && (argv[d->custom_optind][1] == '-' ))
		return check_long_opt(argc, argv, optstring, longopts,
			longind, print_errors, d);
	return check_short_opt(argc, argv, optstring, print_errors, d);
}

static int custom_getopt_internal(int argc, char *const *argv, const char *optstring,
	const struct option *longopts, int *longind)
{
	int result;
	/* Keep a global copy of all internal members of d */
	static struct custom_getopt_data d;

	d.custom_optind = custom_optind;
	d.custom_opterr = custom_opterr;
	result = getopt_internal_r(argc, argv, optstring, longopts,
		longind, &d);
	custom_optind = d.custom_optind;
	custom_optarg = d.custom_optarg;
	custom_optopt = d.custom_optopt;
	return result;
}

static int custom_getopt_long (int argc, char *const *argv, const char *options,
	const struct option *long_options, int *opt_index)
{
	return custom_getopt_internal(argc, argv, options, long_options,
		opt_index);
}

static char *package_name = 0;

/**
 * @brief updates an option
 * @param field the generic pointer to the field to update
 * @param orig_field the pointer to the orig field
 * @param field_given the pointer to the number of occurrence of this option
 * @param prev_given the pointer to the number of occurrence already seen
 * @param value the argument for this option (if null no arg was specified)
 * @param possible_values the possible values for this option (if specified)
 * @param default_value the default value (in case the option only accepts fixed values)
 * @param arg_type the type of this option
 * @param check_ambiguity @see RNAsubopt_cmdline_parser_params.check_ambiguity
 * @param override @see RNAsubopt_cmdline_parser_params.override
 * @param no_free whether to free a possible previous value
 * @param multiple_option whether this is a multiple option
 * @param long_opt the corresponding long option
 * @param short_opt the corresponding short option (or '-' if none)
 * @param additional_error possible further error specification
 */
static
int update_arg(void *field, char **orig_field,
               unsigned int *field_given, unsigned int *prev_given,
               char *value, const char *possible_values[],
               const char *default_value,
               RNAsubopt_cmdline_parser_arg_type arg_type,
               int check_ambiguity, int override,
               int no_free, int multiple_option,
               const char *long_opt, char short_opt,
               const char *additional_error)
{
  char *stop_char = 0;
  const char *val = value;
  int found;
  char **string_field;
  FIX_UNUSED (field);

  stop_char = 0;
  found = 0;

  if (!multiple_option && prev_given && (*prev_given || (check_ambiguity && *field_given)))
    {
      if (short_opt != '-')
        fprintf (stderr, "%s: `--%s' (`-%c') option given more than once%s\n",
               package_name, long_opt, short_opt,
               (additional_error ? additional_error : ""));
      else
        fprintf (stderr, "%s: `--%s' option given more than once%s\n",
               package_name, long_opt,
               (additional_error ? additional_error : ""));
      return 1; /* failure */
    }

  FIX_UNUSED (default_value);

  if (field_given && *field_given && ! override)
    return 0;
  if (prev_given)
    (*prev_given)++;
  if (field_given)
    (*field_given)++;
  if (possible_values)
    val = possible_values[found];

  switch(arg_type) {
  case ARG_FLAG:
    *((int *)field) = !*((int *)field);
    break;
  case ARG_INT:
    if (val) *((int *)field) = strtol (val, &stop_char, 0);
    break;
  case ARG_FLOAT:
    if (val) *((float *)field) = (float)strtod (val, &stop_char);
    break;
  case ARG_DOUBLE:
    if (val) *((double *)field) = strtod (val, &stop_char);
    break;
  case ARG_STRING:
    if (val) {
      string_field = (char **)field;
      if (!no_free && *string_field)
        free (*string_field); /* free previous string */
      *string_field = gengetopt_strdup (val);
    }
    break;
  default:
    break;
  };

  /* check numeric conversion */
  switch(arg_type) {
  case ARG_INT:
  case ARG_FLOAT:
  case ARG_DOUBLE:
    if (val && !(stop_char && *stop_char == '\0')) {
      fprintf(stderr, "%s: invalid numeric value: %s\n", package_name, val);
      return 1; /* failure */
    }
    break;
  default:
    ;
  };

  /* store the original value */
  switch(arg_type) {
  case ARG_NO:
  case ARG_FLAG:
    break;
  default:
    if (value && orig_field) {
      if (no_free) {
        *orig_field = value;
      } else {
        if (*orig_field)
          free (*orig_field); /* free previous string */
        *orig_field = gengetopt_strdup (value);
      }
    }
  };

  return 0; /* OK */
}

int
RNAsubopt_cmdline_parser_internal (
  int argc, char **argv, struct RNAsubopt_args_info *args_info,
                        struct RNAsubopt_cmdline_parser_params *params, const char *additional_error)
{
  int c;	/* Character of the parsed option.  */

  int error = 0;
  struct RNAsubopt_args_info local_args_info;

  int override;
  int initialize;
  int check_required;
  int check_ambiguity;

  char *optarg;
  int optind;
  int opterr;
  int optopt;

  package_name = argv[0];

  override = params->override;
  initialize = params->initialize;
  check_required = params->check_required;
  check_ambiguity = params->check_ambiguity;

  if (initialize)
    RNAsubopt_cmdline_parser_init (args_info);

  RNAsubopt_cmdline_parser_init (&local_args_info);

  optarg = 0;
  optind = 0;
  opterr = params->print_errors;
  optopt = '?';

  while (1)
    {
      int option_index = 0;

      static struct option long_options[] = {
        { "help",	0, NULL, 'h' },
        { "detailed-help",	0, NULL, 0 },
        { "full-help",	0, NULL, 0 },
        { "version",	0, NULL, 'V' },
        { "constraint",	0, NULL, 'C' },
        { "canonicalBPonly",	0, NULL, 0 },
        { "noconv",	0, NULL, 0 },
        { "deltaEnergy",	1, NULL, 'e' },
        { "deltaEnergyPost",	1, NULL, 0 },
        { "sorted",	0, NULL, 's' },
        { "stochBT",	1, NULL, 'p' },
        { "pfScale",	1, NULL, 'S' },
        { "circ",	0, NULL, 'c' },
        { "dos",	0, NULL, 'D' },
        { "zuker",	0, NULL, 'z' },
        { "gquad",	0, NULL, 'g' },
        { "temp",	1, NULL, 'T' },
        { "noTetra",	0, NULL, '4' },
        { "dangles",	1, NULL, 'd' },
        { "noLP",	0, NULL, 0 },
        { "noGU",	0, NULL, 0 },
        { "noClosingGU",	0, NULL, 0 },
        { "logML",	0, NULL, 0 },
        { "betaScale",	1, NULL, 0 },
        { "paramFile",	1, NULL, 'P' },
        { "nsp",	1, NULL, 0 },
        { 0,  0, 0, 0 }
      };

      custom_optarg = optarg;
      custom_optind = optind;
      custom_opterr = opterr;
      custom_optopt = optopt;

      c = custom_getopt_long (argc, argv, "hVCe:sp:S:cDzgT:4d:P:", long_options, &option_index);

      optarg = custom_optarg;
      optind = custom_optind;
      opterr = custom_opterr;
      optopt = custom_optopt;

      if (c == -1) break;	/* Exit from `while (1)' loop.  */

      switch (c)
        {
        case 'h':	/* Print help and exit.  */
          RNAsubopt_cmdline_parser_print_help ();
          RNAsubopt_cmdline_parser_free (&local_args_info);
          exit (EXIT_SUCCESS);

        case 'V':	/* Print version and exit.  */
          RNAsubopt_cmdline_parser_print_version ();
          RNAsubopt_cmdline_parser_free (&local_args_info);
          exit (EXIT_SUCCESS);

        case 'C':	/* Calculate structures subject to constraints.
.  */

          if (update_arg((void *)&(args_info->constraint_flag), 0, &(args_info->constraint_given),
              &(local_args_info.constraint_given), optarg, 0, 0, ARG_FLAG,
              check_ambiguity, override, 1, 0, "constraint", 'C',
              additional_error))
            goto failure;

          break;
        case 'e':	/* Compute suboptimal structures with energy in a certain range of the optimum (kcal/mol). Default is calculation of mfe structure only.

.  */

          if (update_arg( (void *)&(args_info->deltaEnergy_arg),
               &(args_info->deltaEnergy_orig), &(args_info->deltaEnergy_given),
              &(local_args_info.deltaEnergy_given), optarg, 0, 0, ARG_FLOAT,
              check_ambiguity, override, 0, 0,
              "deltaEnergy", 'e',
              additional_error))
            goto failure;

          break;
        case 's':	/* Sort the suboptimal structures by energy.
.  */

          if (update_arg((void *)&(args_info->sorted_flag), 0, &(args_info->sorted_given),
              &(local_args_info.sorted_given), optarg, 0, 0, ARG_FLAG,
              check_ambiguity, override, 1, 0, "sorted", 's',
              additional_error))
            goto failure;

          break;
        case 'p':	/* Instead of producing all suboptimals in an energy range, produce a random sample of suboptimal structures, drawn with probabilities equal to their Boltzmann weights via stochastic backtracking in the partition function. The -e and -p options are mutually exclusive.

.  */

          if (update_arg( (void *)&(args_info->stochBT_arg),
               &(args_info->stochBT_orig), &(args_info->stochBT_given),
              &(local_args_info.stochBT_given), optarg, 0, 0, ARG_INT,
              check_ambiguity, override, 0, 0,
              "stochBT", 'p',
              additional_error))
            goto failure;

          break;
        case 'S':	/* In the calculation of the pf use scale*mfe as an estimate for the ensemble free energy (used to avoid overflows). Needed by stochastic backtracking
.  */

          if (update_arg( (void *)&(args_info->pfScale_arg),
               &(args_info->pfScale_orig), &(args_info->pfScale_given),
              &(local_args_info.pfScale_given), optarg, 0, 0, ARG_DOUBLE,
              check_ambiguity, override, 0, 0,
              "pfScale", 'S',
              additional_error))
            goto failure;

          break;
        case 'c':	/* Assume a circular (instead of linear) RNA molecule.

.  */

          if (update_arg((void *)&(args_info->circ_flag), 0, &(args_info->circ_given),
              &(local_args_info.circ_given), optarg, 0, 0, ARG_FLAG,
              check_ambiguity, override, 1, 0, "circ", 'c',
              additional_error))
            goto failure;

          break;
        case 'D':	/* Compute density of states instead of secondary structures
.  */

          if (update_arg((void *)&(args_info->dos_flag), 0, &(args_info->dos_given),
              &(local_args_info.dos_given), optarg, 0, 0, ARG_FLAG,
              check_ambiguity, override, 1, 0, "dos", 'D',
              additional_error))
            goto failure;

          break;
        case 'z':	/* Compute Zuker suboptimals instead of all suboptimal structures within an engery band arround the MFE.

.  */

          if (update_arg((void *)&(args_info->zuker_flag), 0, &(args_info->zuker_given),
              &(local_args_info.zuker_given), optarg, 0, 0, ARG_FLAG,
              check_ambiguity, override, 1, 0, "zuker", 'z',
              additional_error))
            goto failure;

          break;
        case 'g':	/* Incoorporate G-Quadruplex formation into the structure prediction algorithm
        (no support of G-quadruplex prediction for stochastic backtracking and Zuker-style suboptimals yet)
.  */

          if (update_arg((void *)&(args_info->gquad_flag), 0, &(args_info->gquad_given),
              &(local_args_info.gquad_given), optarg, 0, 0, ARG_FLAG,
              check_ambiguity, override, 1, 0, "gquad", 'g',
              additional_error))
            goto failure;

          break;
        case 'T':	/* Rescale energy parameters to a temperature of temp C. Default is 37C.

.  */

          if (update_arg( (void *)&(args_info->temp_arg),
               &(args_info->temp_orig), &(args_info->temp_given),
              &(local_args_info.temp_given), optarg, 0, 0, ARG_DOUBLE,
              check_ambiguity, override, 0, 0,
              "temp", 'T',
              additional_error))
            goto failure;

          break;
        case '4':	/* Do not include special tabulated stabilizing energies for tri-, tetra- and hexaloop hairpins. Mostly for testing.

.  */

          if (update_arg((void *)&(args_info->noTetra_flag), 0, &(args_info->noTetra_given),
              &(local_args_info.noTetra_given), optarg, 0, 0, ARG_FLAG,
              check_ambiguity, override, 1, 0, "noTetra", '4',
              additional_error))
            goto failure;

          break;
        case 'd':	/* How to treat \"dangling end\" energies for bases adjacent to helices in free ends and multi-loops
.  */

          if (update_arg( (void *)&(args_info->dangles_arg),
               &(args_info->dangles_orig), &(args_info->dangles_given),
              &(local_args_info.dangles_given), optarg, 0, "2", ARG_INT,
              check_ambiguity, override, 0, 0,
              "dangles", 'd',
              additional_error))
            goto failure;

          break;
        case 'P':	/* Read energy parameters from paramfile, instead of using the default parameter set.
.  */

          if (update_arg( (void *)&(args_info->paramFile_arg),
               &(args_info->paramFile_orig), &(args_info->paramFile_given),
              &(local_args_info.paramFile_given), optarg, 0, 0, ARG_STRING,
              check_ambiguity, override, 0, 0,
              "paramFile", 'P',
              additional_error))
            goto failure;

          break;

        case 0:	/* Long option with no short option */
          if (strcmp (long_options[option_index].name, "detailed-help") == 0) {
            RNAsubopt_cmdline_parser_print_detailed_help ();
            RNAsubopt_cmdline_parser_free (&local_args_info);
            exit (EXIT_SUCCESS);
          }

          if (strcmp (long_options[option_index].name, "full-help") == 0) {
            RNAsubopt_cmdline_parser_print_full_help ();
            RNAsubopt_cmdline_parser_free (&local_args_info);
            exit (EXIT_SUCCESS);
          }

          /* Remove non-canonical base pairs from the structure constraint

.  */
          if (strcmp (long_options[option_index].name, "canonicalBPonly") == 0)
          {

            if (update_arg((void *)&(args_info->canonicalBPonly_flag), 0, &(args_info->canonicalBPonly_given),
                &(local_args_info.canonicalBPonly_given), optarg, 0, 0, ARG_FLAG,
                check_ambiguity, override, 1, 0, "canonicalBPonly", '-',
                additional_error))
              goto failure;

          }
          /* Do not automatically substitude nucleotide \"T\" with \"U\"

.  */
          else if (strcmp (long_options[option_index].name, "noconv") == 0)
          {

            if (update_arg((void *)&(args_info->noconv_flag), 0, &(args_info->noconv_given),
                &(local_args_info.noconv_given), optarg, 0, 0, ARG_FLAG,
                check_ambiguity, override, 1, 0, "noconv", '-',
                additional_error))
              goto failure;

          }
          /* Only print structures with energy within range of the mfe after post reevaluation of energies.
.  */
          else if (strcmp (long_options[option_index].name, "deltaEnergyPost") == 0)
          {

            if (update_arg( (void *)&(args_info->deltaEnergyPost_arg),
                 &(args_info->deltaEnergyPost_orig), &(args_info->deltaEnergyPost_given),
                &(local_args_info.deltaEnergyPost_given), optarg, 0, 0, ARG_FLOAT,
                check_ambiguity, override, 0, 0,
                "deltaEnergyPost", '-',
                additional_error))
              goto failure;

          }
          /* Produce structures without lonely pairs (helices of length 1).
.  */
          else if (strcmp (long_options[option_index].name, "noLP") == 0)
          {

            if (update_arg((void *)&(args_info->noLP_flag), 0, &(args_info->noLP_given),
                &(local_args_info.noLP_given), optarg, 0, 0, ARG_FLAG,
                check_ambiguity, override, 1, 0, "noLP", '-',
                additional_error))
              goto failure;

          }
          /* Do not allow GU pairs

.  */
          else if (strcmp (long_options[option_index].name, "noGU") == 0)
          {

            if (update_arg((void *)&(args_info->noGU_flag), 0, &(args_info->noGU_given),
                &(local_args_info.noGU_given), optarg, 0, 0, ARG_FLAG,
                check_ambiguity, override, 1, 0, "noGU", '-',
                additional_error))
              goto failure;

          }
          /* Do not allow GU pairs at the end of helices

.  */
          else if (strcmp (long_options[option_index].name, "noClosingGU") == 0)
          {

            if (update_arg((void *)&(args_info->noClosingGU_flag), 0, &(args_info->noClosingGU_given),
                &(local_args_info.noClosingGU_given), optarg, 0, 0, ARG_FLAG,
                check_ambiguity, override, 1, 0, "noClosingGU", '-',
                additional_error))
              goto failure;

          }
          /* Recalculate energies of structures using a logarithmic energy function for multi-loops before output..  */
          else if (strcmp (long_options[option_index].name, "logML") == 0)
          {

            if (update_arg((void *)&(args_info->logML_flag), 0, &(args_info->logML_given),
                &(local_args_info.logML_given), optarg, 0, 0, ARG_FLAG,
                check_ambiguity, override, 1, 0, "logML", '-',
                additional_error))
              goto failure;

          }
          /* Set the scaling of the Boltzmann factors
.  */
          else if (strcmp (long_options[option_index].name, "betaScale") == 0)
          {

            if (update_arg( (void *)&(args_info->betaScale_arg),
                 &(args_info->betaScale_orig), &(args_info->betaScale_given),
                &(local_args_info.betaScale_given), optarg, 0, "1.", ARG_DOUBLE,
                check_ambiguity, override, 0, 0,
                "betaScale", '-',
                additional_error))
              goto failure;

          }
          /* Allow other pairs in addition to the usual AU,GC,and GU pairs.
.  */
          else if (strcmp (long_options[option_index].name, "nsp") == 0)
          {

            if (update_arg( (void *)&(args_info->nsp_arg),
                 &(args_info->nsp_orig), &(args_info->nsp_given),
                &(local_args_info.nsp_given), optarg, 0, 0, ARG_STRING,
                check_ambiguity, override, 0, 0,
                "nsp", '-',
                additional_error))
              goto failure;

          }

          break;
        case '?':	/* Invalid option.  */
          /* `getopt_long' already printed an error message.  */
          goto failure;

        default:	/* bug: option not considered.  */
          fprintf (stderr, "%s: option unknown: %c%s\n", RNASUBOPT_CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : ""));
          abort ();
        } /* switch */
    } /* while */

  if (check_required)
    {
      error += RNAsubopt_cmdline_parser_required2 (args_info, argv[0], additional_error);
    }

  RNAsubopt_cmdline_parser_release (&local_args_info);

  if ( error )
    return (EXIT_FAILURE);

  return 0;

failure:

  RNAsubopt_cmdline_parser_release (&local_args_info);
  return (EXIT_FAILURE);
}


A haven in the inner west, St Peters luxury 2 storey Terraces really are the best of both worlds – a quiet sanctuary with everything on your doorstep.
Comprising just four luxurious bespoke Terraces, every aspect of these stylish residences has been created with true heart and soul and this is the perfect opportunity for investors or those seeking a quality home in Sydney's cosmopolitan inner west.
Only moments from vibrant Newtown and Marrickville, St Peters Luxury Terraces are extremely well located close to some of the best dining, café and shopping options in Sydney.
These luxury Terraces with north aspect offers convenient living and relaxing lifestyle. The prime location is fast becoming one of Sydney's property hotspots due to its close proximity to St Peters trains, nearby Sydney Park, Metro shops and all the action along Newtown's King Street.
St Peters is a popular area thanks to its easy accessibility to transport and its short distance from the CBD. The suburb holds claim to Sydney Park, the vast greenery, walkways and recreation areas making it one of the largest public spaces in the area.
12 mins walk to train station.
Finance available from 4.28%, conditions applies.
Midas specializes in showing new and experienced investors the most effective ways to correctly enhance current and future borrowing capacity for additional investments and access existing property equity to get started investing.
Construction well underway and expected completion late 2015.


text:
Mom travels 1,200 miles to see sons play in NFL games
'See something, say something': Community reminded to be proactive to improve school safety
by: Kiona Dyches
MIAMI VALLEY, Ohio (WDTN) — School safety has taken center stage across the country and in the Miami Valley in the past week. A student is accused of killing four classmates at a Michigan high school, and there have been several threats at Miami Valley schools since then. Local leaders recommend being proactive even if those threats are not always credible.
"It's important to realize there is no prank like this anymore. Those days are over," said Montgomery County Sheriff Rob Streck.
Within one week after the Oxford High School shooting in Michigan, several statements made by students across Miami Valley schools districts were considered threatening in nature, including one at Centerville High School.
"As soon as we had the information, school administration staff and our resource officers worked together and within minutes they made everything safe. Thankfully there was never a real threat, but it was posted on social media and unfortunately, there was a weapon at school," said Centerville Officer John Davis.
Police: Student facing charges after comments on committing shooting
The Centerville Police Department charged two students at Centerville High School after a threat was made on Snapchat on Friday. A 15-year-old girl was charged with making terroristic threats, and a 16-year-old boy was charged with illegal conveyance of a weapon on school grounds. Now officers are looking for people to speak up.
"Don't let your first reaction be put it on social media and put your twist on it," Officer Davis said.
"It's not one of the things anymore where you can say 'oh it's just kids being kids,'" said Sherriff Streck.
They said "see something, say something" is key, but who you say it to matters most.
"We need you to say something to someone who can actually do something about it. The simple act of sharing something across social media only makes it that much more difficult for us. If you're able to, get with a school administrator, a school resource officer, a teacher, or law enforcement," Davis said.
Sherriff Streck said, "if parents think it's an immediate threat contact 9-1-1, but it's important to get a hold of the school because all schools should have a plan in place. Let people who are trained to handle these situations step in and determine if it's a real threat, if it's some kind of online prank, or if it's somebody who upset and just blowing off steam."
Fatal rollover crash in Dayton on Jan. 15
Dayton brothers indicted for double homicide
Crime / 4 days ago

redpajama_set_name: RedPajamaCommonCrawl


text:
Saskatchewan school shooting: La Loche official says youth support desperately needed | CBC News Loaded
Saskatchewan school shooting: La Loche official says youth support desperately needed
Community workers in the village of La Loche, Sask. say their young people desperately need a place they can call their own.
Human resources co-ordinator says La Loche feels bypassed by government despite needing support for years
CBC News · Posted: Jan 25, 2016 1:02 PM EST | Last Updated: January 25, 2016
Hundreds gathered at La Loche Community Hall for candle vigil and prayer gathering on Sunday night. (Devin Heroux/CBC)
While the northern Saskatchewan community has recently gained international attention as the site of a school shooting that killed four people, La Loche has been plagued by youth suicide, violence and addiction for decades.
"For far too long, we've been a forgotten people," said Connie Cheecham, human resources co-ordinator for the community of La Loche. "And the only way government pays attention is if they discover uranium mining or some sort of resource development. That's the only way they know that La Loche does exist."
La Loche, Sask., shootings: Male, 17, charged with 4 counts of 1st-degree murder
La Loche hopes for a better future after deadly shooting, struggles with youth suicides
On Friday afternoon, Adam Wood, a teacher, and Marie Janvier, an educational assistant, were gunned down at La Loche Community School — where seven people were also injured — and brothers Dayne and Drayden Fontaine, aged 17 and 13 respectively, were killed at a separate residence.
A 17-year-old male suspect has been charged with four counts of first-degree murder and seven counts of attempted murder.
La Loche, Sask., shootings: Accused teen in court
Cheecham said the village of 2,500 people doesn't have a youth centre. Considering the village has three times Saskatchewan's highest suicide rate, Cheecham said having a youth centre is vital.
"It's unacceptable. It is morally, and even legally justified that we should have some of these services to address all the challenges that our community is faced with," said Cheecham. "The kids need to be heard. And they need a place where they can feel safe and they can feel that they can talk to people."
Locals would also like to see more mental health and addictions programming tied to traditional indigenous culture.
"If you are really well-versed and you practice your traditional beliefs, you would think twice about harming anyone."
Funeral arrangements for the four victims have not yet been announced.
La Loche shooting: 'Release the pain' Community comes together for vigil
La Loche shooting: Mayor, local MP call for school to be 'torn down'
Flags lowered across Sask. for victims of La Loche shootings


If you or a loved one is under investigation by the IRS for tax evasion, contact a Los Angeles Tax Evasion Attorney for sound legal representation immediately.
Tax evasion is the term used to describe the act an individual, firm or trust undergoes to attempt to not pay taxes illegally. It generally includes taxpayers deliberately misrepresenting or concealing the true state of their matters to the tax authorities in order to reduce their tax liability. This includes dishonest tax reporting methods such as declaring less income, profits or gains that were actually earned or overstating deductions. As more and more individuals are caught committing tax evasion, the tax gap, or the difference between the amount of taxes that should be collected and the amount that is actually collected, increases.
In some cases, tax evasion includes an unintentional mistake made by an individual on their returns. If you have unknowingly made an error, and the IRS is auditing you, it is time to contact a seasoned criminal lawyer to help protect your future.
What Are The Signs Of Tax Evasion?
All too often clients will come to our firm with legitimate questions regarding their audit by the IRS. Many of them wonder what the difference is between a simple mistake and a conviction for tax evasion because they fear that their simple mistake will be viewed as fraud. If you or someone you know is being audited by the IRS, it is extremely important to consult with our firm before you reveal any information that can make you appear to be guilty.


Shane McMahon's status for WrestleMania is now in doubt after he was hospitalized with an abdominal infection.
McMahon developed acute diverticulitis and an umbilical hernia while on vacation in the Caribbean and has been receiving treatment at a New York-area hospital, WWE said. It's not part of any storyline, either, according to the Wrestling Observer.
Before leaving for vacation, McMahon was feuding with Kevin Owens and Sami Zayn and was widely expected to be facing Owens and Zayn in a tag match at WrestleMania with Daniel Bryan as his partner.
With less than two weeks to go before WrestleMania, McMahon's illness likely throws a wrench in WWE's plans. The company has to at least be prepared for the possibility he isn't healthy enough to be part of the show. Any tweak to the plan will have to be set in motion with Tuesday night's SmackDown.


Lindsay Lohan's lips look extra full in her mug shot photo.
Why? Multiple plastic surgeons tell UsMagazine.com that the actress, 24, surgically plumped her pout before checking into the Lynwood Regional Detention Center Tuesday to serve just 14 days of her 90-day sentence.
"There is no question that Ms. Lohan had filler of some type in her lips," Dr. Michael Olding, the Chief of the Division of Plastic Surgery at George Washington University (and director of the Cosmetic Surgery & Laser Center), tells Us.
In the "before" photos — taken around the time Lohan's SCRAM bracelet went off at the MTV Movie Awards in June — "her lips look asymmetric, so she was probably having filler even then," points out Dr. Olding.
But he believes she got a touch up before checking into jail because, "There is often an initial period of swelling that occurs with injection that rapidly resolves within the first 24 hours."
Lohan also won't have access to plastic surgeons in prison in case there are medical issues, but that shouldn't be a problem. "Given the fact that she has probably had it previously, and therefore will not be 'allergic,' she will likely not have any complications," says Dr. Olding.
Could she have enhanced her lips to look sexier in this mug shot than the one from 2007?
"Lohan knew the photo of her mugshot would be widely distributed. It is likely she had it done for this reason," dermatologist Dr. Marcy Street tells Us.
Lohan could have even asked for a specific look.
"On the upper lip, a common technique is to inject the filler along the border between the pink of the lip and the normal skin — this gives a 'pouty' look to the lip," says New York City plastic surgeon Dr. Elliot W. Jacobs.


text:
2535 - 26 March 2022
Moore's Mother and Child in lead takes £320,000 at Dreweatts auction
Dreweatts offered this market-fresh Henry Moore (1898-1986) figure group, 'Mother and Child', on March 16.
Roland Arkell
This Henry Moore (1898-1986) figure group, Mother and Child sold at £320,000 (plus 25% buyer's premium) at Dreweatts.
Estimated at £30,000-50,000, it sold at £320,000 (plus 25% buyer's premium).
The Berkshire saleroom had worked for two years with the Henry Moore Foundation and the family of the owner, former publisher and editor of The Architectural Review magazine, Hubert de Cronin Hastings (1902-86), to have the cast fully authenticated. The foundation was able to link the work to a 1939 sketch of the sculpture by Moore already held in its records, titled Eighteen Ideas for Sculpture.
The work is cast in lead, which was a material Moore used only for a short period in the late 1930s, during a time when he was experimenting with other materials such as string and wire for his series of sculptures. Mother and Child, conceived in 1939-40 and potentially a unique cast, is believed to be a preliminary design for one of these.
The 7in (17cm) sculpture is believed to have been gifted to Hastings directly by Moore, as they met through The Architectural Review, via Moore's friend Jim Richards, assistant editor of the magazine at the time. He had befriended the artist after writing an article on his work for the magazine in 1934.
It passed to Hastings' son John in 1974, remaining on the mantlepiece of his Wiltshire farmhouse until he died in 2019.
It attracted numerous bidders at what was a very attractive estimate. The buyer was a UK private collector.
Clarion brings down prices for summer at the Olympia Grand
Pick of the week: Record bidding for The Danish Girl
Art dealers Bowman sell sculpture to French museum
Rothschild Qing cache packed away but now seeing the light of sale day
Services surface from a country house
Brotherly love: Jacobean double portrait attracts interest in Newbury auction
Bumper selection of fourteen Bombergs offered


text:
Q: express.js cannot find route at reload after initial load I created a small express server to serve my react app. It's a static context react app that only uses API calls to fetch and show data.
When I start my server everything goes well and when I navigate to localhost:5000 the server automatically redirects to localhost:5000/login. However, the server throws an error once the login page is loaded and I trigger a reload. It then gives me Error: Cannot GET /login.
Does anyone has an idea what goes wrong? Here is the code of my express server script which I trigger with yarn start (added start script in package.json ("start": "NODE_ENVIRONMENT=production node server.js").
const express = require("express");
const app = express(); // create express app

// add middleware
app.use(express.static("dist"));

// start express server on port 5000
app.listen(5000, () => {
  console.log("server started on port 5000");
});

redpajama_set_name: RedPajamaStackExchange


The Benefits of Hiring a Residential Electrician.
The residential electricians are experts who specialize in all home electrical solutions including installation, repair, and maintenance. The residential electricians also plan electrical designs in new homes and determine the placement of electrical outlets such as lighting fixtures, heating, and air conditioning as well as ventilation systems.Residential electricians also help in the installation of temporary power systems in homes that are under constructions.
Residential electricians can also guide the installation and repair of circuit breakers boxes. Upgrading the electrical panel can solve problems associated with an outdated breaker box which does not support high-powered appliances.
Nowadays, our lives have been made comfortable by the high-tech gadgets such as televisions, fridges, microwaves, electric cookers and dishwashers. The truth is that most homes that were built some years ago cannot support such electric-hungry technology. Fortunately, professional residential electricians can help you upgrade your electrical panel to enhance the electrical capacity of your home to meet your needs.
During electrical panel upgrade, existing breaker boxes are replaced with panels that supply a higher electrical capacity. The residential electrician will check for other electrical components that may hinder the smooth flow of electricity such as faulty wires and meter sockets.
It is important to hire a certified and licensed residential electrician who is qualified to offer electrical services. It is very risky to allow an untrained personnel to install your electrical systems. A professional residential electrician will guarantee compliance with municipal codes and employ wiring protection measures and other electrical safety.
It is paramount that for a residential electrician to understand the house blueprints and to use the architecture's plan while providing residential electrical services. The residential electricians is supposed to make sure that there is a smooth and safe flow of power from the main source, into the socket breaker and capable of powering the electrical appliances.
Homeowners should contact residential electricians in case any of their electrical system is not operational. The residential electrician will then figure out the problem and determine the necessary update, repair or replacement.
Problems with faulty circuit breaker boxes which trips or turns of when an electrical appliance is plugged in can be solved by repairing the wires or replacing the breaker box. Residential electrical solutions are offered by many electrical services companies which makes it quite challenging to choose the right electrician.
The best choice for a residential electrician should be based on a company's track record, the cost of services as well as the quality of services offered. It is dangerous to do your own electrical repairs if you are not qualified to do the job. Contact your residential electrician for electrical panel upgrades and any other electrical solution to keep your family safe.


text:
We Need the Ideal Of The Olympics More Than Ever In 2016
The Olympics are a lonely and desperately needed outpost for a sense of striving, heroism, and human nobility.
By Robert Tracinski
There are always plenty of reasons to complain about the Olympic games, if you are so inclined.
There is the usual debacle of the preparations for the venue, which is worse than usual this year, despite the fact that there is a simple solution. Or there is the unfolding live-action spy novel of the Russian doping scandal, to which the IOC has responded, to its credit, by banning a whole lot of Russian athletes.
Then there's the television coverage, which if the past is any indication will go heavy on saccharine sob stories and overhype a couple of athletes who flop. Plus there's Bob Costas, who I like, but who rubs some people the wrong way. Yet we have to have him there, because at this point, it's just tradition.
So it's easy, I suppose, to be cynical about the Olympics, and The Federalist's Rich Cromwell gives you his old-man-yelling-at-the-television version. But while the trappings of the games may be encrusted with a layer of corruption, as with any big institution, it's worth remembering what the Olympics are really about at their core. They are a lonely and desperately needed outpost for a sense of striving, heroism, and human nobility. We need that this year more than ever, and we might even find in it the antidote for some of our cynicism.
The Ideals of the Olympics
The modern Olympics revive two crucial elements of the Greek ideal.
The first is the idea of a benevolent competition among rivals, fighting not to kill each other but to outdo each other's achievements. The Olympic truce was the one time when the fractious Greek city-states would lay down their weapons, set aside whatever wars they were fighting amongst themselves, and compete like civilized people (more or less; there was always pankration).
It's an example we can use right now when most of our political competition seems to be over which side is worse.
But the real core of the Greek idea was the pursuit of human excellence. This is expressed in Latin in the motto of the modern games: "Citius, Altius, Fortius"—"Swifter, Higher, Stronger." The core story of the Olympics is about athletes who have spent years of dedication training to perform at the very highest level.
Yes, this might be a little hard to spot in table tennis—though it also strikes me as churlish to disparage other people's enjoyment of niche sports. But the core of the games, and the most popular events, are the classics: running, swimming, gymnastics. As someone who has been watching the Olympics for more than 30 years, I've been amazed that the level of performance keeps getting higher and higher. Take a look at this chart of the progression of the signature event of the games, the men's 100-meter dash.
Whenever you think the limits of human capability have been reached, someone pushes them just a little farther.
I wrote recently about the value of nudity in art, insofar as it represents an idealized view of human nature. This kind of idealization of the human form was central to Greek art and culture, and the closest we get to that in our own era—the closest we get to understanding how the Ancient Greeks saw mankind—is the Olympics. We rarely get it in the form of actual art these days, but we get it in the photos and television coverage of the lithe, toned, powerful bodies of athletes. It is a version of the human body that is idealized by virtue of being optimized for extraordinary athletic performance.
No, most of us are never going to be this fit, but that's not what it's really about. Our fascination with Olympic athletes comes from our ability to grasp a wider, abstract meaning. The extraordinary physiques of athletes are an easily grasped, visual symbol for the idea of extraordinary achievement as such. What we get from them is the idea of striving to make ourselves extraordinary in some way, even if it is not on the athletic field.
Plus There's Sweet Music
That message is reinforced by another aspect of the coverage of the Olympic games that is somewhat unique in today's culture: a soundtrack of heroic music, mostly thanks to John Williams, who has become even more of an Olympic institution than Bob Costas.
It's music that makes you want to stand up straight, throw back your shoulders, flare your nostrils, and go run a marathon right now, this moment. Even if you have no earthly reason to think you could accomplish such a thing, Williams gives you a sense of what it would feel like if you could. Listen to this and ask yourself: what else in our music, or in our culture, gives you that sense of unlimited potential and uplifted purpose?
Speaking of Bob Costas, I want to say a word about why he has become an Olympic institution. He has the job of Mr. Olympics, for as long as he wants it, because of his remarkable preparation and depth of knowledge. Who else is going to be that interested in knowing the details about dozens of obscure sports and being able to pronounce the names of little-known athletes from around the world? And Costas is always fair-minded and objective in his coverage of the games. This is, alas, not the kind of dedication and mastery that we're exactly used to seeing from journalists in other fields. But it's what is required to measure up to the spirit of the games.
For all of our politician's incoherent blustering about making America great again, Olympic athletes show us how to make being human great again. We might want to look at that with a little of the seriousness and even reverence it deserves. There are a lot of things that are wrong in the world, and a lot of that is going to smear off on the edges of the Olympics. But the games themselves are part of what's right.
Follow Robert on Twitter.
Robert Tracinski's work can also be found at The Tracinski Letter.
Photo pcruciatti / Shutterstock.com
2016 Olympic Games Ancient Greece Bob Costas heroism ideals John Williams Olympics Rio Rio 2016
# Comments


text:
Chicago Independent Film Critics Circle: 2017 CIFCC Awards Winners
Chicago Independent Film Critics Circle (CIFCC)
The 26 film critics and voting members of the Chicago Independent Film Critics Circle completed their final ballots in 21 categories for their second annual CIFCC Awards. Leading all films with four awards is Get Out from Universal Pictures and Blumhouse Productions, including three awards for Jordan Peele and his many hats. A24's Lady Bird from director Greta Gerwig follows with three wins, including Best Independent Film. Fifteen different films were award winners.
In two special award categories, the Trailblazer Award honoring the work of an artist who truly pushed the boundaries of the medium in terms of form and content was won by Jordan Peele for his work on Get Out . The Impact Award celebrating a person whose work has had a positive impact on society was given to Patty Jenkins and her efforts leading Wonder Woman.
The complete list of winners for the 2017 CIFCC Awards:
BEST INDEPENDENT FILM
Lady Bird – Scott Rudin, Eli Bush, and Evelyn O'Neil (producers)
BEST STUDIO FILM
Logan – Hutch Parker, Simon Kinberg, and Lauren Schuler Donner (producers)
BEST FOREIGN FILM
Raw – Jean de Forêts (producer)
Faces Places – JR and Agnes Varda (co-directors)
Coco – Darla K. Anderson (producer)
Jordan Peele, Get Out
Get Out- Jordan Peele
The Disaster Artist- Scott Neustadter and Michael H. Weber
Daniel Kaluuya, Get Out
Gary Oldman, Darkest Hour
Saoirse Ronan, Lady Bird
Willem Dafoe, The Florida Project
Allison Janney, I, Tonya
Laurie Metcalf, Lady Bird
BEST ENSEMBLE CAST
Three Billboards Outside Ebbing, Missouri – Abbie Cornish, Peter Dinklage, Woody Harrelson, John Hawkes, Lucas Hedges, Željko Ivanek, Caleb Landry Jones, Frances McDormand,, Sam Rockwell, and Samara Weaving
Blade Runner 2049 – Roger Deakins
Blade Runner 2049 – Dennis Gassner
Baby Driver – Jonathan Amos and Paul Machliss
BEST COSTUME DESIGN AND MAKEUP
Phantom Thread – Mark Bridges (costumes), Paul Engelen (makeup)
BEST ORIGINAL SCORE
Phantom Thread – Jonny Greenwood
War for the Planet of the Apes – Joe Leterri, Dan Lemmon, Eric Winquist, and Dan Cervin
TRAILBLAZER AWARD
Patty Jenkins, Wonder Woman
Previous Post Previous post: Aida's Secrets
Next Post Next post: The House is Surprisingly Okay
Danielle Solzman
Danielle Solzman is native of Louisville, KY, and holds a BA in Public Relations from Northern Kentucky University and a MA in Media Communications from Webster University. She roots for her beloved Kentucky Wildcats, St. Louis Cardinals, Indianapolis Colts, and Boston Celtics. Living less than a mile away from Wrigley Field in Chicago, she is an active reader (sports/entertainment/history/biographies/select fiction) and involved with the Chicago improv scene. She also sees many movies and reviews them. She has previously written for Redbird Rants, Wildcat Blue Nation, and Hidden Remote/Flicksided. From April 2016 through May 2017, her film reviews can be found on Creators.


There are a number of things you can do to improve your chances of getting a home loan approved. If you've gone through our Real Wealth mentoring program, you'll have studied these actions in serious detail; they include actions such as minimising your bad debt to unlock untapped borrowing power.
There are also external influences that can impact your ability to get a loan and unfortunately, there is little you can do about them.
One such factor has recently been unleashed by Australian banks and lenders, in an effort to cool Sydney and Melbourne surging property.
Interest rates have never been lower, which means mortgage credit has never been cheaper. Combine this with booming property prices and an eager investor market, and banks start to become concerned that a bubble may eventuate and compromise their clients' financial positions.
So how are they attempting to address this?
By tightening their lending policies to property investors – ie. making it harder or more expensive for you to get a loan.
The Property Investment Professionals of Australia (PIPA) reports that a number of banks, including the Big Four, have amended their lending policies in regards to investors over the last few weeks.
They are either changing their lending criteria to make it more difficult for investors to get loan approval, or charging investors more to take loans with them.
Ben Kingsley, Chair of PIPA, believes this approach – which has been driven by APRA (the Australian Prudential Regulation Authority) – is not a sound solution for the long-term.
"While we welcome and endorse a responsible approach to lending, we are concerned about APRA's market intervention and don't believe their lender-by-lender approach is the most effective means to control the property market," he says.
"We recognise that marketplaces like Sydney and Melbourne are posing concerns, as new and existing investors are potentially speculating in trying to capitalise on boom conditions, and we have been active in warning consumers to be careful about this.
"The government, APRA, ASIC, RBA and the state consumer affairs departments need to join forces and invest in a consumer education campaign to explain to Australian investors the truths about property investment. Only with a clear understanding of the market can investors make more informed decisions," he says.
He goes on to state that not every property makes a sound property investment, something my clients learn early in their investing education.
"In this upswing cycle, there will be many who will lose money," Kingsley adds.
I have to say that I agree with Kingsley's sentiments, and I believe that now more than ever, investors need to be educated about the investment decisions they make – as there will be many who wind up over-paying in hot markets.
You also need to maintain an open line of communication with your mortgage broker to see what impacts, if any, these new investor lending guidelines are going to have on your own borrowing power.
If you're planning to buy property now or in the near future (the next 3-6 months), I urge you to meet with your broker or check in with our team at Real Wealth Money to ensure that you don't get caught out by evolving lending policies. The next steps you take will be crucial in either ensuring your mortgage application's success, or having your loan declined and stopping your investment journey in its tracks.