[SCM] csound/master: Imported Upstream version 5.17.6~dfsg

fsateler at users.alioth.debian.org fsateler at users.alioth.debian.org
Thu Apr 19 12:52:36 UTC 2012


The following commit has been merged in the master branch:
commit 5a6d920cdd789ca82b7b52c896e43ae19d79e85d
Author: Felipe Sateler <fsateler at debian.org>
Date:   Wed Apr 18 18:47:52 2012 -0300

    Imported Upstream version 5.17.6~dfsg

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4837a61..29cdb31 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -263,6 +263,11 @@ find_package(OpenMP)
 
 # First, required stuff
 find_library(LIBSNDFILE_LIBRARY sndfile)
+
+if(NOT LIBSNDFILE_LIBRARY AND WIN32)
+find_library(LIBSNDFILE_LIBRARY sndfile-1)
+endif()
+
 if(NOT LIBSNDFILE_LIBRARY)
     message(FATAL_ERROR "Csound requires the sndfile library")
 endif()
@@ -339,8 +344,12 @@ endif()
 check_deps(USE_OPEN_MP OPENMP_FOUND PTHREAD_BARRIER_INIT_EXISTS) 
 if(USE_OPEN_MP)
    list(APPEND libcsound_CFLAGS -DUSE_OPENMP)
-   list(APPEND CMAKE_C_FLAGS ${OpenMP_C_FLAGS})
-   list(APPEND CMAKE_CXX_FLAGS ${OpenMP_CXX_FLAGS})
+   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+
+   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${OpenMP_CXX_FLAGS}")
+   set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${OpenMP_CXX_FLAGS}")
+
 endif()
 
 
diff --git a/Doxyfile b/Doxyfile
index e4e25fd..b1789bd 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -1,1522 +1,1522 @@
-# Doxyfile 1.5.8
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file 
-# that follow. The default is UTF-8 which is also the encoding used for all 
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
-# iconv built into libc) for the transcoding. See 
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
-# by quotes) that should identify the project.
-
-PROJECT_NAME           = "Csound and CsoundAC API"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
-# if some version control system is used.
-
-PROJECT_NUMBER         = 5.14
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = doc
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
-# 4096 sub-directories (in 2 levels) under the output directory of each output 
-# format and will distribute the generated files over these directories. 
-# Enabling this option can be useful when feeding doxygen a huge amount of 
-# source files, where putting all generated files in the same directory would 
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS         = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, 
-# Spanish, Swedish, and Ukrainian.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator 
-# that is used to form the text in various listings. Each string 
-# in this list, if found as the leading text of the brief description, will be 
-# stripped from the text and the result after processing the whole list, is 
-# used as the annotated text. Otherwise, the brief description is used as-is. 
-# If left blank, the following values are used ("$name" is automatically 
-# replaced with the name of the entity): "The $name class" "The $name widget" 
-# "The $name file" "is" "provides" "specifies" "contains" 
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       = NO
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
-# description.
-
-ALWAYS_DETAILED_SEC    = YES
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
-# inherited members of a class in the documentation of that class as if those 
-# members were ordinary class members. Constructors, destructors and assignment 
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = YES
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = YES
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user-defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. The tag can be used to show relative paths in the file list. 
-# If left blank the directory from which doxygen is run is used as the 
-# path to strip.
-
-STRIP_FROM_PATH        = 
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
-# the path mentioned in the documentation of a class, which tells 
-# the reader which header file to include in order to use a class. 
-# If left blank only the name of the header file containing the class 
-# definition is used. Otherwise one should specify the include paths that 
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH    = 
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments will behave just like regular Qt-style comments 
-# (thus requiring an explicit @brief command for a brief description.)
-
-JAVADOC_AUTOBRIEF      = YES
-
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
-# interpret the first line (until the first dot) of a Qt-style 
-# comment as the brief description. If set to NO, the comments 
-# will behave just like regular Qt-style comments (thus requiring 
-# an explicit \brief command for a brief description.)
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
-# re-implements.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
-# a new page for each member. If set to NO, the documentation of a member will 
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 4
-
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user-defined paragraph with heading "Side Effects:". 
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                = 
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
-# sources only. Doxygen will then generate output that is more tailored for C. 
-# For instance, some of the names that are used will be different. The list 
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
-# sources only. Doxygen will then generate output that is more tailored for 
-# Java. For instance, namespaces will be presented as packages, qualified 
-# scopes will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
-# sources only. Doxygen will then generate output that is more tailored for 
-# Fortran.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
-# sources. Doxygen will then generate output that is tailored for 
-# VHDL.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it parses. 
-# With this tag you can assign which parser to use for a given extension. 
-# Doxygen has a built-in mapping, but you can override or extend it using this tag. 
-# The format is ext=language, where ext is a file extension, and language is one of 
-# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, 
-# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat 
-# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), 
-# use: inc=Fortran f=C
-
-EXTENSION_MAPPING      = YES
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
-# to include (a tag file for) the STL sources as input, then you should 
-# set this tag to YES in order to let doxygen match functions declarations and 
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
-# func(std::string) {}). This also make the inheritance and collaboration 
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT    = YES
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to 
-# enable parsing support.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
-# Doxygen will parse them like normal C++ but will assume all classes use public 
-# instead of private inheritance when no explicit protection keyword is present.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate getter 
-# and setter methods for a property. Setting this option to YES (the default) 
-# will make doxygen to replace the get and set methods by a property in the 
-# documentation. This will only work if the methods are indeed getting or 
-# setting a simple type. If this is not the case, or you want to show the 
-# methods anyway, you should set this option to NO.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
-# the same type (for instance a group of public functions) to be put as a 
-# subgroup of that type (e.g. under the Public Functions section). Set it to 
-# NO to prevent subgrouping. Alternatively, this can be done per class using 
-# the \nosubgrouping command.
-
-SUBGROUPING            = YES
-
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
-# is documented as struct, union, or enum with the name of the typedef. So 
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
-# with name TypeT. When disabled the typedef will appear as a member of a file, 
-# namespace, or class. And the struct will be named TypeS. This can typically 
-# be useful for C code in case the coding convention dictates that all compound 
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
-# determine which symbols to keep in memory and which to flush to disk. 
-# When the cache is full, less often used symbols will be written to disk. 
-# For small to medium size projects (<1000 input files) the default value is 
-# probably good enough. For larger projects a too small cache size can cause 
-# doxygen to be busy swapping symbols to and from disk most of the time 
-# causing a significant performance penality. 
-# If the system has enough physical memory increasing the cache will improve the 
-# performance by keeping more symbols in memory. Note that the value works on 
-# a logarithmic scale so increasing the size by one will rougly double the 
-# memory usage. The cache size is given by this formula: 
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
-# corresponding to a cache size of 2^16 = 65536 symbols
-
-SYMBOL_CACHE_SIZE      = 0
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = YES
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
-# will be included in the documentation.
-
-EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. When set to YES local 
-# methods, which are defined in the implementation section but not in 
-# the interface are included in the documentation. 
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be 
-# extracted and appear in the documentation as a namespace called 
-# 'anonymous_namespace{file}', where file will be replaced with the base 
-# name of the file that contains the anonymous namespace. By default 
-# anonymous namespace are hidden.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these classes will be included in the various 
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower-case letters. If set to YES upper-case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put a list of the files that are included by a file in the documentation 
-# of that file.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
-# declaration order.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
-# brief documentation of file, namespace and class members alphabetically 
-# by member name. If set to NO (the default) the members will appear in 
-# declaration order.
-
-SORT_BRIEF_DOCS        = YES
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
-# hierarchy of group names into alphabetical order. If set to NO (the default) 
-# the group names will appear in their defined order.
-
-SORT_GROUP_NAMES       = YES
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
-# sorted by fully-qualified names, including namespaces. If set to 
-# NO (the default), the class list will be sorted only by class name, 
-# not including the namespace part. 
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
-# Note: This option applies only to the class list, not to the 
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME     = YES
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting 
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional 
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       = 
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or define consists of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and defines in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = NO
-
-# If the sources in your project are distributed over multiple directories 
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES       = YES
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
-# This will remove the Files entry from the Quick Index and from the 
-# Folder Tree View (if specified). The default is YES.
-
-SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
-# Namespaces page. 
-# This will remove the Namespaces entry from the Quick Index 
-# and from the Folder Tree View (if specified). The default is YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
-# doxygen should invoke to get the current version for each file (typically from 
-# the version control system). Doxygen will invoke the program by executing (via 
-# popen()) the command <command> <input-file>, where <command> is the value of 
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
-# provided by doxygen. Whatever the program writes to standard output 
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER    = 
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by 
-# doxygen. The layout file controls the global structure of the generated output files 
-# in an output format independent way. The create the layout file that represents 
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a 
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name 
-# of the layout file.
-
-LAYOUT_FILE            = 
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated 
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
-# potential errors in the documentation, such as not documenting some 
-# parameters in a documented function, or documenting parameters that 
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for 
-# functions that are documented, but have no documentation for their parameters 
-# or return value. If set to NO (the default) doxygen will only warn about 
-# wrong or incomplete parameter documentation, but not about the absence of 
-# documentation.
-
-WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text. Optionally the format may contain 
-# $version, which will be replaced by the version of the file (if it could 
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
-# to stderr.
-
-WARN_LOGFILE           = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/myproject". Separate the files or directories 
-# with spaces.
-
-INPUT                  = H \
-                         interfaces \
-                         frontends/CsoundVST \
-                         frontends/CsoundAC \
-                         frontends/tclcsound
-
-# This tag can be used to specify the character encoding of the source files 
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
-# also the default input encoding. Doxygen uses libiconv (or the iconv built 
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
-# the list of possible encodings.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
-
-FILE_PATTERNS          = *.h \
-                         *.hh \
-                         *.hxx \
-                         *.hpp \
-                         *.h++
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
-# If left blank NO is used.
-
-RECURSIVE              = NO
-
-# The EXCLUDE tag can be used to specify files and/or directories that should 
-# excluded from the INPUT source files. This way you can easily exclude a 
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE                = 
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
-# directories that are symbolic links (a Unix filesystem feature) are excluded 
-# from the input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories. Note that the wildcards are matched 
-# against the file with absolute path, so to exclude all test directories 
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       = AEff* \
-                         aeff* \
-                         AudioEff* \
-                         audioeff* \
-                         *wrap*
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
-# (namespaces, classes, functions, etc.) that should be excluded from the 
-# output. The symbol name can be a fully qualified name, a word, or if the 
-# wildcard * is used, a substring. Examples: ANamespace, AClass, 
-# AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS        = 
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
-# the \include command).
-
-EXAMPLE_PATH           = 
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank all files are included.
-
-EXAMPLE_PATTERNS       = 
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
-# the \image command).
-
-IMAGE_PATH             = 
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
-# to standard output. 
-# If FILTER_PATTERNS is specified, this tag will be 
-# ignored.
-
-INPUT_FILTER           = 
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
-# basis. 
-# Doxygen will compare the file name with each pattern and apply the 
-# filter if there is a match. 
-# The filters are a list of the form: 
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
-# is applied to all files.
-
-FILTER_PATTERNS        = 
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these sources. 
-# Note: To get rid of all source code in the generated output, make sure also 
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body 
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES 
-# then for each documented function all documented 
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES 
-# then for each documented function all documented entities 
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
-# link to the source code. 
-# Otherwise they will link to the documentation.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code 
-# will point to the HTML generated by the htags(1) tool instead of doxygen 
-# built-in source browser. The htags tool is part of GNU's global source 
-# tagging system (see http://www.gnu.org/software/global/global.html). You 
-# will need version 4.8.6 or higher.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX     = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
-# generate HTML output.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard header.
-
-HTML_HEADER            = 
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard footer.
-
-HTML_FOOTER            = 
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet. Note that doxygen will try to copy 
-# the style sheet file to the HTML output directory, so don't put your own 
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        = 
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
-# documentation will contain sections that can be hidden and shown after the 
-# page has loaded. For this to work a browser that supports 
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-
-HTML_DYNAMIC_SECTIONS  = YES
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files 
-# will be generated that can be used as input for Apple's Xcode 3 
-# integrated development environment, introduced with OSX 10.5 (Leopard). 
-# To create a documentation set, doxygen will generate a Makefile in the 
-# HTML output directory. Running make will produce the docset in that 
-# directory and running "make install" will install the docset in 
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
-# it at startup. 
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
-
-GENERATE_DOCSET        = NO
-
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
-# feed. A documentation feed provides an umbrella under which multiple 
-# documentation sets from a single provider (such as a company or product suite) 
-# can be grouped.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
-# should uniquely identify the documentation set bundle. This should be a 
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
-# will append .docset to the name.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
-# written to the html output directory.
-
-CHM_FILE               = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
-# content.
-
-CHM_INDEX_ENCODING     = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER 
-# are set, an additional index file will be generated that can be used as input for 
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated 
-# HTML documentation.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
-# be used to specify the file name of the resulting .qch file. 
-# The path specified is relative to the HTML output folder.
-
-QCH_FILE               = 
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating 
-# Qt Help Project output. For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#namespace
-
-QHP_NAMESPACE          = 
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
-# Qt Help Project output. For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#virtual-folders
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. 
-# For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#custom-filters
-
-QHP_CUST_FILTER_NAME   = 
-
-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see 
-# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
-
-QHP_CUST_FILTER_ATTRS  = 
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's 
-# filter section matches. 
-# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
-
-QHP_SECT_FILTER_ATTRS  = 
-
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
-# be used to specify the location of Qt's qhelpgenerator. 
-# If non-empty doxygen will try to run qhelpgenerator on the generated 
-# .qhp file.
-
-QHG_LOCATION           = 
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-# top of each HTML page. The value NO (the default) enables the index and 
-# the value YES disables it.
-
-DISABLE_INDEX          = NO
-
-# This tag can be used to set the number of enum values (range [1..20]) 
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
-# structure should be generated to display hierarchical information. 
-# If the tag value is set to FRAME, a side panel will be generated 
-# containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
-# probably better off using the HTML help feature. Other possible values 
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories, 
-# and Class Hierarchy pages using a tree view instead of an ordered list; 
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which 
-# disables this behavior completely. For backwards compatibility with previous 
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE 
-# respectively.
-
-GENERATE_TREEVIEW      = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-# Use this tag to change the font size of Latex formulas included 
-# as images in the HTML documentation. The default is 10. Note that 
-# when you change the font size after a successful doxygen run you need 
-# to manually remove any form_*.png images from the HTML output directory 
-# to force them to be regenerated.
-
-FORMULA_FONTSIZE       = 10
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
-# generate Latex output.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME         = pdflatex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, a4wide, letter, legal and 
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = letter
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         = 
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           = refman_header.tex
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = YES
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
-# include the index chapters (such as File Index, Compound Index, etc.) 
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimized for Word 97 and may not look very pretty with 
-# other RTF readers or editors.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assignments. You only have to provide 
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    = 
-
-# Set optional variables used in the generation of an rtf document. 
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
-# generate man pages
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to 
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
-# the code including all documentation.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_SCHEMA             = 
-
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_DTD                = 
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
-# dump the program listings (including syntax highlighting 
-# and cross-referencing information) to the XML output. Note that 
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
-# generate a Perl module file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
-# moment.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
-# nicely formatted so it can be parsed by a human reader. 
-# This is useful 
-# if you want to understand what is going on. 
-# On the other hand, if this 
-# tag is set to NO the size of the Perl module output will be much smaller 
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file 
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
-# This is useful so different doxyrules.make files included by the same 
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX = 
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
-# files.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
-# the preprocessor.
-
-INCLUDE_PATH           = 
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
-# be used.
-
-INCLUDE_FILE_PATTERNS  = 
-
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed. To prevent a macro definition from being 
-# undefined via #undef or recursively expanded use the := operator 
-# instead of the = operator.
-
-PREDEFINED             = 
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be expanded. 
-# The macro definition that is found in the sources will be used. 
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED      = 
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all function-like macros that are alone 
-# on a line, have an all uppercase name, and do not end with a semicolon. Such 
-# function macros are typically used for boiler-plate code, and will confuse 
-# the parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references   
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles. 
-# Optionally an initial location of the external documentation 
-# can be added for each tagfile. The format of a tag file without 
-# this location is as follows: 
-#  
-# TAGFILES = file1 file2 ... 
-# Adding location for the tag files is done as follows: 
-#  
-# TAGFILES = file1=loc1 "file2 = loc2" ... 
-# where "loc1" and "loc2" can be relative or absolute paths or 
-# URLs. If a location is present for each tag, the installdox tool 
-# does not have to be run to correct the links. 
-# Note that each tag file must have a unique name 
-# (where the name does NOT include the path) 
-# If a tag file is not located in the directory in which doxygen 
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES               = 
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       = 
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script 
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
-# or super classes. Setting the tag to NO turns the diagrams off. Note that 
-# this option is superseded by the HAVE_DOT option below. This is only a 
-# fallback. It is recommended to install and use dot, since it yields more 
-# powerful graphs.
-
-CLASS_DIAGRAMS         = NO
-
-# You can define message sequence charts within doxygen comments using the \msc 
-# command. Doxygen will then run the mscgen tool (see 
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
-# the mscgen tool resides. If left empty the tool is assumed to be found in the 
-# default search path.
-
-MSCGEN_PATH            = 
-
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = YES
-
-# By default doxygen will write a font called FreeSans.ttf to the output 
-# directory and reference it in all dot files that doxygen generates. This 
-# font does not include all possible unicode characters however, so when you need 
-# these (or just want a differently looking font) you can specify the font name 
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
-# which can be done by putting it in a standard location or by setting the 
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
-# containing the font.
-
-DOT_FONTNAME           = FreeSans
-
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
-# The default size is 10pt.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the output directory to look for the 
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
-# different font using DOT_FONTNAME you can set the path where dot 
-# can find it using this tag.
-
-DOT_FONTPATH           = 
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = NO
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS           = NO
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
-# collaboration diagrams in a style similar to the OMG's Unified Modeling 
-# Language.
-
-UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the 
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
-# other documented files.
-
-INCLUDE_GRAPH          = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = NO
-
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
-# doxygen will generate a call dependency graph for every global function 
-# or class method. Note that enabling this option will significantly increase 
-# the time of a run. So in most cases it will be better to enable call graphs 
-# for selected functions only using the \callgraph command.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
-# doxygen will generate a caller dependency graph for every global function 
-# or class method. Note that enabling this option will significantly increase 
-# the time of a run. So in most cases it will be better to enable caller 
-# graphs for selected functions only using the \callergraph command.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
-# then doxygen will show the dependencies a directory has on other directories 
-# in a graphical way. The dependency relations are determined by the #include 
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
-# generated by dot. Possible values are png, jpg, or gif 
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT       = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH               = D:\utah\opt\ATT\Graphviz\bin
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
-# \dotfile command).
-
-DOTFILE_DIRS           = 
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
-# nodes that will be shown in the graph. If the number of nodes in a graph 
-# becomes larger than this value, doxygen will truncate the graph, which is 
-# visualized by representing a node as a red box. Note that doxygen if the 
-# number of direct children of the root node in a graph is already larger than 
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
-# graphs generated by dot. A depth value of 3 means that only nodes reachable 
-# from the root by following a path via at most 3 edges will be shown. Nodes 
-# that lay further from the root node will be omitted. Note that setting this 
-# option to 1 or 2 may greatly reduce the computation time needed for large 
-# code bases. Also note that the size of a graph can be further restricted by 
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
-# background. This is disabled by default, because dot on Windows does not 
-# seem to support this out of the box. Warning: Depending on the platform used, 
-# enabling this option may lead to badly anti-aliased labels on the edges of 
-# a graph (i.e. they become hard to read).
-
-DOT_TRANSPARENT        = YES
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
-# files in one run (i.e. multiple -o and -T options on the command line). This 
-# makes dot run faster, but since only newer versions of dot (>1.8.10) 
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS      = YES
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = NO
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermediate dot files that are used to generate 
-# the various graphs.
-
-DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Options related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be 
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = NO
+# Doxyfile 1.5.8
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = "Csound and CsoundAC API"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 5.17
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = doc
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, 
+# Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = NO
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = YES
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 4
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses. 
+# With this tag you can assign which parser to use for a given extension. 
+# Doxygen has a built-in mapping, but you can override or extend it using this tag. 
+# The format is ext=language, where ext is a file extension, and language is one of 
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, 
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat 
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), 
+# use: inc=Fortran f=C
+
+EXTENSION_MAPPING      = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = YES
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to 
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter 
+# and setter methods for a property. Setting this option to YES (the default) 
+# will make doxygen to replace the get and set methods by a property in the 
+# documentation. This will only work if the methods are indeed getting or 
+# setting a simple type. If this is not the case, or you want to show the 
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
+# determine which symbols to keep in memory and which to flush to disk. 
+# When the cache is full, less often used symbols will be written to disk. 
+# For small to medium size projects (<1000 input files) the default value is 
+# probably good enough. For larger projects a too small cache size can cause 
+# doxygen to be busy swapping symbols to and from disk most of the time 
+# causing a significant performance penality. 
+# If the system has enough physical memory increasing the cache will improve the 
+# performance by keeping more symbols in memory. Note that the value works on 
+# a logarithmic scale so increasing the size by one will rougly double the 
+# memory usage. The cache size is given by this formula: 
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = YES
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = YES
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = YES
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = NO
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
+# This will remove the Files entry from the Quick Index and from the 
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
+# Namespaces page. 
+# This will remove the Namespaces entry from the Quick Index 
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by 
+# doxygen. The layout file controls the global structure of the generated output files 
+# in an output format independent way. The create the layout file that represents 
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a 
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name 
+# of the layout file.
+
+LAYOUT_FILE            = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = H \
+                         interfaces \
+                         frontends/CsoundVST \
+                         frontends/CsoundAC \
+                         frontends/tclcsound
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS          = *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = AEff* \
+                         aeff* \
+                         AudioEff* \
+                         audioeff* \
+                         *wrap*
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output. 
+# If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis. 
+# Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match. 
+# The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
+# link to the source code. 
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded. For this to work a browser that supports 
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = YES
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup. 
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET        = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
+# content.
+
+CHM_INDEX_ENCODING     = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER 
+# are set, an additional index file will be generated that can be used as input for 
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated 
+# HTML documentation.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
+# be used to specify the file name of the resulting .qch file. 
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE               = 
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE          = 
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. 
+# For more information please see 
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME   = 
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see 
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS  = 
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's 
+# filter section matches. 
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS  = 
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
+# be used to specify the location of Qt's qhelpgenerator. 
+# If non-empty doxygen will try to run qhelpgenerator on the generated 
+# .qhp file.
+
+QHG_LOCATION           = 
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
+# structure should be generated to display hierarchical information. 
+# If the tag value is set to FRAME, a side panel will be generated 
+# containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature. Other possible values 
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories, 
+# and Class Hierarchy pages using a tree view instead of an ordered list; 
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which 
+# disables this behavior completely. For backwards compatibility with previous 
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE 
+# respectively.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+# Use this tag to change the font size of Latex formulas included 
+# as images in the HTML documentation. The default is 10. Note that 
+# when you change the font size after a successful doxygen run you need 
+# to manually remove any form_*.png images from the HTML output directory 
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE       = 10
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = pdflatex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = letter
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = refman_header.tex
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = YES
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader. 
+# This is useful 
+# if you want to understand what is going on. 
+# On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#  
+# TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#  
+# TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links. 
+# Note that each tag file must have a unique name 
+# (where the name does NOT include the path) 
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = NO
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = YES
+
+# By default doxygen will write a font called FreeSans.ttf to the output 
+# directory and reference it in all dot files that doxygen generates. This 
+# font does not include all possible unicode characters however, so when you need 
+# these (or just want a differently looking font) you can specify the font name 
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
+# which can be done by putting it in a standard location or by setting the 
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
+# containing the font.
+
+DOT_FONTNAME           = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
+# The default size is 10pt.
+
+DOT_FONTSIZE           = 10
+
+# By default doxygen will tell dot to use the output directory to look for the 
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
+# different font using DOT_FONTNAME you can set the path where dot 
+# can find it using this tag.
+
+DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = NO
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = NO
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = NO
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include 
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif 
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = D:\utah\opt\ATT\Graphviz\bin
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, because dot on Windows does not 
+# seem to support this out of the box. Warning: Depending on the platform used, 
+# enabling this option may lead to badly anti-aliased labels on the edges of 
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = YES
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = NO
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Options related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
diff --git a/Engine/corfiles.c b/Engine/corfiles.c
index f4d2447..5fc130b 100644
--- a/Engine/corfiles.c
+++ b/Engine/corfiles.c
@@ -24,6 +24,7 @@
 #include "csoundCore.h"     /*                              CORFILES.C      */
 #include <string.h>
 #include <stdio.h>
+#include <ctype.h>
 
 extern int csoundFileClose(CSOUND*, void*);
 
@@ -48,19 +49,33 @@ CORFIL *corfile_create_r(const char *text)
 
 void corfile_putc(int c, CORFIL *f)
 {
-    if (f->p+1 >= f->len)
+    f->body[f->p++] = c;
+    if (f->p >= f->len)
       f->body = (char*) realloc(f->body, f->len+=100);
-    f->body[f->p] = c;
-    f->body[++f->p] = '\0';
+    f->body[f->p] = '\0';
 }
 
 void corfile_puts(char *s, CORFIL *f)
 {
-    int slen = strlen(s);
-    while (f->p+slen+1>=f->len)
-      f->body = (char*) realloc(f->body, f->len+=100);
-    strcat(f->body, s);
-    f->p += slen;
+    char *c;
+    int n;
+    /* skip and count the NUL chars to the end */
+    for (n=0; f->p > 0 && f->body[f->p-1] == '\0'; n++, f->p--);
+    /* append the string */
+    for (c = s; *c != '\0'; c++) {
+      f->body[f->p++] = *c;
+      if (f->p >= f->len)
+        f->body = (char*) realloc(f->body, f->len+=100);
+    }
+    if (n > 0) {
+      /* put the extra NUL chars to the end */
+      while (--n >= 0) {
+        f->body[f->p++] = '\0';
+        if (f->p >= f->len)
+          f->body = (char*) realloc(f->body, f->len+=100);
+      }
+    }
+    f->body[f->p] = '\0';
 }
 
 void corfile_flush(CORFIL *f)
@@ -102,14 +117,10 @@ void corfile_ungetc(CORFIL *f)
 
 MYFLT corfile_get_flt(CORFIL *f)
 {
-    int n;
+    int n = f->p;
     MYFLT ans;
-#ifdef USE_DOUBLE
-    sscanf(&f->body[f->p], "%lf%n", &ans, &n);
-#else
-    sscanf(&f->body[f->p], "%f%n", &ans, &n);
-#endif
-    f->p += n;
+    while (!isspace(f->body[++f->p]));
+    ans = (MYFLT) atof(&f->body[n]);
     return ans;
 }
 
diff --git a/Engine/cs_par_base.c b/Engine/cs_par_base.c
index c2e2773..27dec6f 100644
--- a/Engine/cs_par_base.c
+++ b/Engine/cs_par_base.c
@@ -215,7 +215,7 @@ void csp_barrier_dealloc(CSOUND *csound, pthread_barrier_t **barrier)
 //{
 //    /* int val, res; */
 //    /* res = sem_getvalue(sem, &val); */
-//    /* csound->DebugMsg(csound, "before sem_grow: %d %i\t", 
+//    /* csound->DebugMsg(csound, "before sem_grow: %d %i\t",
 //               val, csp_thread_index_get(csound)); */
 //    sem_post(sem);
 //    /* res = sem_getvalue(sem, &val); */
@@ -249,7 +249,7 @@ void csp_barrier_dealloc(CSOUND *csound, pthread_barrier_t **barrier)
 //void csp_semaphore_release_print(CSOUND *csound, sem_t *sem)
 //{
 //    int val, res;
-//    if (UNLIKELY(sem == NULL)) 
+//    if (UNLIKELY(sem == NULL))
 //      csound->Die(csound, "Invalid NULL Parameter sem");
 //    res = sem_getvalue(sem, &val);
 //    csound->DebugMsg(csound, "sem_release_print: %d %p\n",
@@ -260,18 +260,16 @@ void csp_barrier_dealloc(CSOUND *csound, pthread_barrier_t **barrier)
 /***********************************************************************
  * set data structure
  */
-#pragma mark -
-#pragma mark Set
 
 /* static prototypes */
-static int set_element_delloc(CSOUND *csound, 
+static int set_element_delloc(CSOUND *csound,
                               struct set_element_t **set_element);
 static int set_element_alloc(CSOUND *csound,
-                             struct set_element_t **set_element, 
+                             struct set_element_t **set_element,
                              char *data);
 static int set_is_set(CSOUND *csound, struct set_t *set);
 #if 0
-static int 
+static int
   set_element_is_set_element(CSOUND *csound,
                              struct set_element_t *set_element);
 #endif
@@ -358,7 +356,7 @@ static int set_is_set(CSOUND *csound, struct set_t *set)
 }
 
 #if 0
-static int 
+static int
   set_element_is_set_element(CSOUND *csound,
                              struct set_element_t *set_element)
 {
@@ -410,7 +408,7 @@ static int set_update_cache(CSOUND *csound, struct set_t *set)
     if (set->count > 0) {
       struct set_element_t *ele;
       int ctr = 0;
-      set->cache = 
+      set->cache =
         csound->Malloc(csound,
                        sizeof(struct set_element_t *) * set->count);
       ele = set->head;
diff --git a/Engine/cs_par_dispatch.c b/Engine/cs_par_dispatch.c
index ecd8b2d..eeba3c6 100644
--- a/Engine/cs_par_dispatch.c
+++ b/Engine/cs_par_dispatch.c
@@ -91,8 +91,6 @@ static uint32_t hash_string(char *str, uint32_t hash_size)
 /***********************************************************************
  * Global Var Lock Inserts
  */
-#pragma mark -
-#pragma mark Global Var Lock Inserts
 
 /* global variables lock support */
 struct global_var_lock_t {
@@ -154,7 +152,7 @@ static struct global_var_lock_t *global_var_lock_alloc(CSOUND *csound,
     return ret;
 }
 
-static struct global_var_lock_t 
+static struct global_var_lock_t
   *global_var_lock_find(CSOUND *csound, char *name)
 {
     if (UNLIKELY(name == NULL))
@@ -328,7 +326,7 @@ void csp_locks_cache_build(CSOUND *csound)
     /* csound->Message(csound, "Global Locks Cache\n");
        ctr = 0;
        while (ctr < csound->global_var_lock_count) {
-       csound->Message(csound, "[%i] %s\n", 
+       csound->Message(csound, "[%i] %s\n",
                        csound->global_var_lock_cache[ctr]->index,
        csound->global_var_lock_cache[ctr]->name);
        ctr++;
@@ -353,10 +351,8 @@ int globalunlock(CSOUND *csound, GLOBAL_LOCK_UNLOCK *p)
 /***********************************************************************
  * weighting
  */
-#pragma mark -
-#pragma mark Instr weightings
 
-/* static struct instr_weight_info_t 
+/* static struct instr_weight_info_t
    *instr_weight_info_alloc(CSOUND *csound)
    {
    struct instr_weight_info_t *ret =
@@ -379,10 +375,10 @@ static void csp_weights_calculate_instr(CSOUND *csound, TREE *root,
     TREE *current = root;
     INSTR_SEMANTICS *nested_instr = NULL;
 
-    while(current != NULL) {
+    while (current != NULL) {
       switch(current->type) {
       case INSTR_TOKEN:
-        nested_instr = 
+        nested_instr =
           csp_orc_sa_instr_get_by_name(csound,
                                        current->left->value->lexeme);
         /* if (nested_instr->weight == NULL) {
@@ -430,7 +426,7 @@ void csp_weights_calculate(CSOUND *csound, TREE *root)
     TREE *current = root;
     INSTR_SEMANTICS *instr = NULL;
 
-    while(current != NULL) {
+    while (current != NULL) {
       switch(current->type) {
       case INSTR_TOKEN:
         if (current->left->type == T_INSTLIST) {
@@ -475,7 +471,7 @@ static void csp_orc_sa_opcode_dump_instr(CSOUND *csound, TREE *root)
 {
     TREE *current = root;
 
-    while(current != NULL) {
+    while (current != NULL) {
       switch(current->type) {
       case INSTR_TOKEN:
         break;
@@ -504,8 +500,8 @@ void csp_orc_sa_opcode_dump(CSOUND *csound, TREE *root)
 
     TREE *current = root;
 
-    while(current != NULL) {
-      switch(current->type) {
+    while (current != NULL) {
+      switch (current->type) {
       case INSTR_TOKEN:
         csp_orc_sa_opcode_dump_instr(csound, current->right);
         break;
@@ -524,8 +520,6 @@ void csp_orc_sa_opcode_dump(CSOUND *csound, TREE *root)
 /***********************************************************************
  * weights structure
  */
-#pragma mark -
-#pragma mark weights structure
 
 struct opcode_weight_cache_entry_t {
   uint32_t                            hash_val;
@@ -547,7 +541,7 @@ struct opcode_weight_cache_entry_t {
 static void opcode_weight_entry_add(CSOUND *csound,
                                     char *name, uint32_t weight);
 
-static int 
+static int
   opcode_weight_entry_alloc(CSOUND *csound,
                             struct opcode_weight_cache_entry_t **entry,
                             char *name, uint32_t weight, uint32_t hash_val)
@@ -575,7 +569,7 @@ static int
 }
 
 #if 0
-static int 
+static int
   opcode_weight_entry_dealloc(CSOUND *csound,
                               struct opcode_weight_cache_entry_t **entry)
 {
@@ -915,8 +909,6 @@ void csp_weights_load(CSOUND *csound)
 /***********************************************************************
  * weighting decision
  */
-#pragma mark -
-#pragma mark dag weighting decision
 
 /* static struct instr_weight_info_t *weight_info; */
 
@@ -996,8 +988,6 @@ int inline csp_parallel_compute_should(CSOUND *csound, DAG *dag)
 /***********************************************************************
  * dag2 data structure
  */
-#pragma mark -
-#pragma mark Dag2
 
 /* prototypes for dag2 */
 static void dag_node_2_alloc(CSOUND *csound, DAG_NODE **dag_node,
@@ -1155,7 +1145,7 @@ void csp_dag_add(CSOUND *csound, DAG *dag,
     dag_node_2_alloc(csound, &dag_node, instr, insds);
 
     TRACE_1("dag->count = %d\n", dag->count);
-    //    dag->all = 
+    //    dag->all =
     //     (DAG_NODE **)csound->Malloc(csound,
     //                                 sizeof(DAG_NODE *) * (dag->count + 1));
     /* Can not this be done with memcpy or Realloc */
@@ -1305,7 +1295,7 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
         }
         csp_set_dealloc(csound, &write_intersection);
 
-        /* csound->Message(csound, 
+        /* csound->Message(csound,
                            "write_intersection depends: %i\n", depends);
            csp_set_print(csound, dag->all[dag_root_ctr]->instr->write);
            csp_set_print(csound, dag->all[dag_curr_ctr]->instr->read); */
@@ -1348,14 +1338,14 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
         }
         csp_set_dealloc(csound, &readwrite_write_intersection);
 
-        /* csound->Message(csound, 
+        /* csound->Message(csound,
                            "readwrite_write_intersection depends: %i\n",
                            depends);
            csp_set_print(csound, dag->all[dag_root_ctr]->instr->read_write);
            csp_set_print(csound, dag->all[dag_curr_ctr]->instr->write); */
 
         struct set_t *readwrite_read_intersection = NULL;
-        csp_set_intersection(csound, 
+        csp_set_intersection(csound,
                              dag->all[dag_root_ctr]->instr->read_write,
                              dag->all[dag_curr_ctr]->instr->read,
                              &readwrite_read_intersection);
@@ -1367,7 +1357,7 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
         /* csound->Message(csound,
                            "readwrite_read_intersection depends: %i\n",
                            depends);
-           csp_set_print(csound, 
+           csp_set_print(csound,
                          dag->all[dag_root_ctr]->instr->read_write);
            csp_set_print(csound, dag->all[dag_curr_ctr]->instr->write); */
 
@@ -1380,11 +1370,11 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
         }
         csp_set_dealloc(csound, &read_readwrite_intersection);
 
-        /* csound->Message(csound, 
+        /* csound->Message(csound,
                            "read_readwrite_intersection depends: %i\n",
                            depends);
            csp_set_print(csound, dag->all[dag_root_ctr]->instr->read);
-           csp_set_print(csound, 
+           csp_set_print(csound,
                          dag->all[dag_curr_ctr]->instr->read_write); */
 
         struct set_t *write_readwrite_intersection = NULL;
@@ -1418,7 +1408,7 @@ inline static void csp_dag_build_edges(CSOUND *csound, DAG *dag)
                            "readwrite_readwrite_intersection depends: %i\n",
                            depends);
            csp_set_print(csound, dag->all[dag_root_ctr]->instr->read_write);
-           csp_set_print(csound, 
+           csp_set_print(csound,
                          dag->all[dag_curr_ctr]->instr->read_write); */
 
         if (depends & DAG_STRONG_LINK) {
@@ -1863,8 +1853,6 @@ void csp_dag_print(CSOUND *csound, DAG *dag)
 /**********************************************************************************************
  * dag2 optimization structure
  */
-#pragma mark -
-#pragma mark Dag2 optimization
 
 static uint64_t dag_opt_counter;
 
@@ -2189,8 +2177,6 @@ void csp_dag_optimization(CSOUND *csound, DAG *dag)
 /**********************************************************************************************
  * dag2 cache structure
  */
-#pragma mark -
-#pragma mark Dag2 Cache
 
 /* #ifdef LINEAR_CACHE */
 
diff --git a/Engine/csound_orc.l b/Engine/csound_orc.l
index 1f78d28..eebaa1c 100644
--- a/Engine/csound_orc.l
+++ b/Engine/csound_orc.l
@@ -81,14 +81,14 @@ LABEL           ^[ \t]*[a-zA-Z0-9_][a-zA-Z0-9_]*:
 IDENT           [a-zA-Z_][a-zA-Z0-9_]*
 IDENTN          [a-zA-Z0-9_]+
 INTGR           [0-9]+
-NUMBER          [0-9]+\.?[0-9]*(e[-+]?[0-9]+)?|\.[0-9]+(e[-+]?[0-9]+)?
+NUMBER          [0-9]+\.?[0-9]*(e[-+]?[0-9]+)?|\.[0-9]+(e[-+]?[0-9]+)?|0[xX][0-9a-fA-F]+
 WHITE           [ \t]+
 OPTWHITE        [ \t]*
 CONT            \\[ \t]*(;.*)?\n
 XSTR            "{{"
 EXSTR           "}}"
-LINE            ^"#line"
-FILE            ^"#source"
+LINE            ^[ \t]*"#line"
+FILE            ^[ \t]*"#source"
 FNAME           [a-zA-Z0-9/:.+-_]+
 %x line
 %x src
@@ -237,17 +237,18 @@ FNAME           [a-zA-Z0-9/:.+-_]+
                                                        PARM->xstrmax+=80);
                       csound->DebugMsg(csound,"Extending xstr buffer\n");
                   }
-//                  csound->DebugMsg(csound,"Adding newline (%.2x)\n", yytext[0]);
+                  //csound->DebugMsg(csound,"Adding newline (%.2x)\n", yytext[0]);
                   PARM->xstrbuff[PARM->xstrptr++] = yytext[0];
                   PARM->xstrbuff[PARM->xstrptr] = '\0';
                 }
 
-<xstr>.     { if (PARM->xstrptr+2==PARM->xstrmax) {
+<xstr>"\r"     { }
+<xstr>.         { if (PARM->xstrptr+2==PARM->xstrmax) {
                       PARM->xstrbuff = (char *)realloc(PARM->xstrbuff,
                                                        PARM->xstrmax+=80);
                       csound->DebugMsg(csound,"Extending xstr buffer\n");
                   }
-//                  csound->DebugMsg(csound,"Adding (%.2x)\n", yytext[0]);
+                  //csound->DebugMsg(csound,"Adding (%.2x)\n", yytext[0]);
                   PARM->xstrbuff[PARM->xstrptr++] = yytext[0];
                   PARM->xstrbuff[PARM->xstrptr] = '\0';
                 }
@@ -478,6 +479,6 @@ char *csound_orcget_current_pointer(void *yyscanner)
 
 int csound_orcget_locn(void *yyscanner)
 {
-    struct yyguts_t *yyg  = (struct yyguts_t*)yyscanner;
+//    struct yyguts_t *yyg  = (struct yyguts_t*)yyscanner;
     return PARM->locn;
 }
diff --git a/Engine/csound_orc.y b/Engine/csound_orc.y
index 045abbc..259a4cb 100644
--- a/Engine/csound_orc.y
+++ b/Engine/csound_orc.y
@@ -178,7 +178,8 @@ extern int csound_orcget_lineno(void *);
 
 orcfile           : rootstatement
                         {
-                            *astTree = *((TREE *)$1);
+                            if ($1 != NULL)
+                              *astTree = *((TREE *)$1);
                             csound->synterrcnt = csound_orcnerrs;
                             //print_tree(csound, "ALL", $1);
                         }
@@ -600,7 +601,7 @@ bexpr     : '(' bexpr ')'       { $$ = $2; }
           | bexpr S_OR error
           | '!' bexpr %prec S_UNOT { $$ = make_node(csound, LINE,LOCN,
                                                     S_UNOT, $2, NULL); }
-          | '!' error           { $$ = NULL }
+          | '!' error           { $$ = NULL; }
           ;
 
 expr      : bexpr '?' expr ':' expr %prec '?'
@@ -620,12 +621,12 @@ iexp      : iexp '+' iexp   { $$ = make_node(csound, LINE,LOCN, '+', $1, $3); }
             {
                 $$ = make_node(csound,LINE,LOCN, S_UMINUS, NULL, $2);
             }
-          | '-' error           { $$ = NULL }
+          | '-' error           { $$ = NULL; }
           | '+' iexp %prec S_UMINUS
             {
                 $$ = $2;
             }
-          | '+' error           { $$ = NULL }
+          | '+' error           { $$ = NULL; }
           | iterm               { $$ = $1; }
           ;
 
@@ -662,10 +663,10 @@ ifac      : ident               { $$ = $1; }
           | iexp S_BITSHIFT_RIGHT error
           | '~' iexp %prec S_UMINUS
             { $$ = make_node(csound, LINE,LOCN, '~', NULL, $2);}
-          | '~' error         { $$ = NULL }
+          | '~' error         { $$ = NULL; }
           | '(' expr ')'      { $$ = $2; }
-          | '(' expr error    { $$ = NULL }
-          | '(' error         { $$ = NULL }
+          | '(' expr error    { $$ = NULL; }
+          | '(' error         { $$ = NULL; }
           | function '(' exprlist ')'
             {
                 $1->left = NULL;
diff --git a/Engine/csound_orc_compile.c b/Engine/csound_orc_compile.c
index e71f426..f68152a 100644
--- a/Engine/csound_orc_compile.c
+++ b/Engine/csound_orc_compile.c
@@ -162,7 +162,7 @@ static void lblrequest(CSOUND *csound, char *s)
 
 static inline void resetouts(CSOUND *csound)
 {
-    csound->acount = csound->kcount = csound->icount = 
+    csound->acount = csound->kcount = csound->icount =
       csound->Bcount = csound->bcount = 0;
 }
 
@@ -489,9 +489,9 @@ OPTXT *create_opcode(CSOUND *csound, TREE *root, INSTRTXT *ip)
           }
           /* VL 14/12/11 : calling lgbuild here seems to be problematic for
              undef arg checks */
-	  else {
-	    lgbuild(csound, arg, 1);
-	  } 
+          else {
+            lgbuild(csound, arg, 1);
+          }
 
 
         }
@@ -533,7 +533,7 @@ OPTXT *create_opcode(CSOUND *csound, TREE *root, INSTRTXT *ip)
 
         //        csound->Message(csound, "Opcode InTypes: %s\n", ep->intypes);
         //        csound->Message(csound, "Opcode OutTypes: %s\n", ep->outypes);
-  
+
         set_xincod(csound, tp, ep, root->line);
         set_xoutcod(csound, tp, ep, root->line);
 
@@ -842,7 +842,7 @@ void close_instrument(CSOUND *csound, INSTRTXT * ip)
           ip->lclkcnt = (ip->lclkcnt + 1) & (~1);
     }
 
-    ip->lclfixed = ip->lclkcnt + 
+    ip->lclfixed = ip->lclkcnt +
                    ip->lclwcnt * Wfloats * ip->lclpcnt * Pfloats;*/
 
     ip->mdepends = ip->mdepends >> 4;
@@ -931,7 +931,7 @@ void insert_instrtxt(CSOUND *csound, INSTRTXT *instrtxt, int32 instrNum) {
     csound->instrtxtp[instrNum] = instrtxt;
 }
 
-OPCODINFO *find_opcode_info(CSOUND *csound, char *opname) 
+OPCODINFO *find_opcode_info(CSOUND *csound, char *opname)
 {
     OPCODINFO *opinfo = csound->opcodeInfo;
     if (UNLIKELY(opinfo == NULL)) {
@@ -953,7 +953,7 @@ OPCODINFO *find_opcode_info(CSOUND *csound, char *opname)
 /**
  * Compile the given TREE node into structs for Csound to use
  */
-void csound_orc_compile(CSOUND *csound, TREE *root) 
+void csound_orc_compile(CSOUND *csound, TREE *root)
 {
 //    csound->Message(csound, "Begin Compiling AST (Currently Implementing)\n");
 
@@ -1218,7 +1218,7 @@ void csound_orc_compile(CSOUND *csound, TREE *root)
         csound->DebugMsg(csound, "Instr 0 check on opcode=%s\n", bp->t.opcod);
       if (UNLIKELY((thread = csound->opcodlst[opnum].thread) & 06 ||
                    (!thread && bp->t.pftype != 'b'))) {
-        csound->DebugMsg(csound, "***opcode=%s thread=%d pftype=%c\n", 
+        csound->DebugMsg(csound, "***opcode=%s thread=%d pftype=%c\n",
                bp->t.opcod, thread, bp->t.pftype);
         synterr(csound, Str("perf-pass statements illegal in header blk\n"));
       }
@@ -1826,7 +1826,7 @@ char argtyp2(CSOUND *csound, char *s)
 {                   /* find arg type:  d, w, a, k, i, c, p, r, S, B, b, t */
     char c = *s;    /*   also set lgprevdef if !c && !p && !S */
 
-    /* VL: added this to make sure the object exists before we try to read 
+    /* VL: added this to make sure the object exists before we try to read
        from it */
     if (UNLIKELY(csound->otranGlobals == NULL)) {
       csound->otranGlobals = csound->Calloc(csound, sizeof(OTRAN_GLOBALS));
@@ -1882,4 +1882,3 @@ int file_to_int(CSOUND *csound, const char *name)
     }
     return n;
 }
-
diff --git a/Engine/csound_orc_semantics.c b/Engine/csound_orc_semantics.c
index 400e854..413c94a 100644
--- a/Engine/csound_orc_semantics.c
+++ b/Engine/csound_orc_semantics.c
@@ -90,7 +90,7 @@ static TREE * optimize_ifun(CSOUND *csound, TREE *root)
 }
 
 /** Verifies and optimise; constant fold and opcodes and args are correct*/
-static TREE * verify_tree1(CSOUND *csound, TREE *root) 
+static TREE * verify_tree1(CSOUND *csound, TREE *root)
 {
     TREE *ans, *last;
     double lval, rval;
@@ -110,7 +110,7 @@ static TREE * verify_tree1(CSOUND *csound, TREE *root)
           last = last->next;
         }
       }
-      if (root->right->type == T_FUNCTION &&                 
+      if (root->right->type == T_FUNCTION &&
           (strcmp(root->right->value->lexeme, "i") == 0)) {  /* i() function */
         root->right = optimize_ifun(csound, root->right);
       }
@@ -121,7 +121,7 @@ static TREE * verify_tree1(CSOUND *csound, TREE *root)
       }
       root->right = verify_tree1(csound, root->right);
       if (root->left) {
-        if (root->left->type == T_FUNCTION &&                 
+        if (root->left->type == T_FUNCTION &&
             (strcmp(root->left->value->lexeme, "i") == 0)) {  /* i() function */
           root->left = optimize_ifun(csound, root->left);
         }
@@ -145,7 +145,7 @@ static TREE * verify_tree1(CSOUND *csound, TREE *root)
               (char*)mrealloc(csound, ans->value->lexeme, 24);
             sprintf(ans->value->lexeme, "%f", ans->value->fvalue);
             ans->next = root->next;
-            //Memory leak!! 
+            //Memory leak!!
             //mfree(csound, root); mfree(csound root->right);
             return ans;
           case '-':
@@ -154,7 +154,7 @@ static TREE * verify_tree1(CSOUND *csound, TREE *root)
               (char*)mrealloc(csound, ans->value->lexeme, 24);
             sprintf(ans->value->lexeme, "%f", ans->value->fvalue);
             ans->next = root->next;
-            //Memory leak!! 
+            //Memory leak!!
             //mfree(csound, root); mfree(csound, root->right);
             return ans;
           case '*':
@@ -163,7 +163,7 @@ static TREE * verify_tree1(CSOUND *csound, TREE *root)
               (char*)mrealloc(csound, ans->value->lexeme, 24);
             sprintf(ans->value->lexeme, "%f", ans->value->fvalue);
             ans->next = root->next;
-            //Memory leak!! 
+            //Memory leak!!
             //mfree(csound, root); mfree(csound, root->right);
             return ans;
           case '/':
@@ -172,7 +172,7 @@ static TREE * verify_tree1(CSOUND *csound, TREE *root)
               (char*)mrealloc(csound, ans->value->lexeme, 24);
             sprintf(ans->value->lexeme, "%f", ans->value->fvalue);
             ans->next = root->next;
-            //Memory leak!! 
+            //Memory leak!!
             //mfree(csound, root); mfree(csound, root->right);
             return ans;
             /* case S_NEQ: */
@@ -218,7 +218,7 @@ static TREE * verify_tree1(CSOUND *csound, TREE *root)
     return root;
 }
 
-TREE * verify_tree(CSOUND *csound, TREE *root) 
+TREE * verify_tree(CSOUND *csound, TREE *root)
 {
     TREE *original=root, *last = NULL;
     while (root) {
@@ -260,7 +260,7 @@ void csound_orcerror(PARSE_PARM *pp, void *yyscanner,
     /*  csound->Message(csound, Str("error: %s (\"\\n\")"), */
     /*                 str); */
     /*  csound->Message(csound, Str(" line %d:\n>>> "), */
-    /*     	     csound_orcget_lineno(yyscanner)); */
+    /*               csound_orcget_lineno(yyscanner)); */
     /* } */
     /* else { */
     /*  csound->Message(csound, Str("\nerror: %s  (token \"%s\")"), */
diff --git a/Engine/csound_pre.lex b/Engine/csound_pre.lex
index f006634..22d0c3e 100644
--- a/Engine/csound_pre.lex
+++ b/Engine/csound_pre.lex
@@ -75,8 +75,8 @@ DEFINE          #[ \t]*define
 UNDEF           "#undef"
 IFDEF           #ifn?def
 ELSE            #else[ \t]*(;.*)?$
-END             #end(if)?[ \t]*(;.*)?\n
-CONT            \\[ \t]*(;.*)?\n
+END             #end(if)?[ \t]*(;.*)?(\n|\r\n?)
+CONT            \\[ \t]*(;.*)?(\n|\r\n?)
 
 %x incl
 %x macro
@@ -219,6 +219,7 @@ CONT            \\[ \t]*(;.*)?\n
                  }
 {MACRONAMEA}    {
                    MACRO     *mm = PARM->macros;
+                   char      *mname;
                    int c, i, j;
                    /* csound->DebugMsg(csound,"Macro with arguments call %s\n", yytext); */
                    yytext[yyleng-1] = '\0';
@@ -232,6 +233,7 @@ CONT            \\[ \t]*(;.*)?\n
                      csound->Message(csound,Str("Undefined macro: '%s'"), yytext);
                      csound->LongJmp(csound, 1);
                    }
+                   mname = yytext;
                    /* Need to read from macro definition */
                    csound->DebugMsg(csound,"Looking for %d args\n", mm->acnt);
                    for (j = 0; j < mm->acnt; j++) {
@@ -280,11 +282,12 @@ CONT            \\[ \t]*(;.*)?\n
                    yypush_buffer_state(YY_CURRENT_BUFFER, yyscanner);
                    csound_preset_lineno(1, yyscanner);
                    PARM->lstack[++PARM->depth] =
-                     (strchr(mm->body,'\n') ?file_to_int(csound, yytext) : 63);
+                     (strchr(mm->body,'\n') ?file_to_int(csound, mname) : 63);
                    yy_scan_string(mm->body, yyscanner);
                  }
 {MACRONAMEDA}    {
                    MACRO     *mm = PARM->macros;
+                   char      *mname;
                    int c, i, j;
                    /* csound->DebugMsg(csound,"Macro with arguments call %s\n", yytext); */
                    yytext[yyleng-2] = '\0';
@@ -298,6 +301,7 @@ CONT            \\[ \t]*(;.*)?\n
                      csound->Message(csound,Str("Undefined macro: '%s'"), yytext);
                      csound->LongJmp(csound, 1);
                    }
+                   mname = yytext;
                    /* Need to read from macro definition */
                    csound->DebugMsg(csound,"Looking for %d args\n", mm->acnt);
                    for (j = 0; j < mm->acnt; j++) {
@@ -342,7 +346,7 @@ CONT            \\[ \t]*(;.*)?\n
                    }
                    csound_preset_lineno(1, yyscanner);
                    PARM->lstack[PARM->depth] = 
-                     (strchr(mm->body,'\n') ?file_to_int(csound, yytext) : 63);
+                     (strchr(mm->body,'\n') ?file_to_int(csound, mname) : 63);
                    yy_scan_string(mm->body, yyscanner);
                  }
 {INCLUDE}       {
@@ -508,24 +512,58 @@ void comment(yyscan_t yyscanner)              /* Skip until nextline */
 {
     char c;
     struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
-    while ((c = input(yyscanner)) != '\n' && c != '\r'); /* skip */
-    if (c == '\r' && (c = input(yyscanner)) != '\n')
-      unput(c);
+    while ((c = input(yyscanner)) != '\n' && c != '\r') { /* skip */
+      if (c == EOF) {
+        YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+          YY_BUFFER_EOF_PENDING;
+        return;
+      }
+    }
+    if (c == '\r' && (c = input(yyscanner)) != '\n') {
+      if (c != EOF)
+        unput(c);
+      else
+        YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+          YY_BUFFER_EOF_PENDING;
+    }
     csound_preset_lineno(1+csound_preget_lineno(yyscanner),yyscanner);
 }
 
 void do_comment(yyscan_t yyscanner)              /* Skip until * and / chars */
 {
     char c;
+    struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
     for (;;) {
       c = input(yyscanner);
-      if (UNLIKELY(c=='\n')) /* skip */
-          csound_preset_lineno(1+csound_preget_lineno(yyscanner),yyscanner);
+      if (UNLIKELY(c == '\r')) { /* skip */
+        if ((c = input(yyscanner)) != '\n')
+          unput(c);
+        csound_preset_lineno(1+csound_preget_lineno(yyscanner),yyscanner);
+      }
+      else if (UNLIKELY(c=='\n')) { /* skip */
+        csound_preset_lineno(1+csound_preget_lineno(yyscanner),yyscanner);
+      }
+      if (c == EOF) {
+        YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+          YY_BUFFER_EOF_PENDING;
+        return;
+      }
       if (c != '*') continue;
       while ((c=input(yyscanner))=='*');
       if (c=='/') return;
-      if (UNLIKELY(c=='\n'))
+      if (UNLIKELY(c == '\r')) {
+        if ((c = input(yyscanner)) != '\n')
+          unput(c);
         csound_preset_lineno(1+csound_preget_lineno(yyscanner),yyscanner);
+      }
+      else if (UNLIKELY(c=='\n')) {
+        csound_preset_lineno(1+csound_preget_lineno(yyscanner),yyscanner);
+      }
+      if (c == EOF) {
+        YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+          YY_BUFFER_EOF_PENDING;
+        return;
+      }
     }
 }
 
@@ -814,7 +852,7 @@ void cs_init_math_constants_macros(CSOUND *csound, PRE_PARM* qq)
      add_math_const_macro(csound, qq,"2_SQRTPI", "1.12837916709551257390");
      add_math_const_macro(csound, qq, "SQRT2", "1.41421356237309504880");
      add_math_const_macro(csound, qq,"SQRT1_2","0.70710678118654752440");
-     add_math_const_macro(csound, qq, "INF",   "2147483647.0"); /* ~7 years */
+     add_math_const_macro(csound, qq, "INF",   "800000000000.0"); /* ~25367 years */
 }
 
 void cs_init_omacros(CSOUND *csound, PRE_PARM *qq, NAMES *nn)
diff --git a/Engine/entry1.c b/Engine/entry1.c
index b705816..fa20861 100644
--- a/Engine/entry1.c
+++ b/Engine/entry1.c
@@ -413,8 +413,8 @@ OENTRY opcodlst_1[] = {
 { "pan",    S(PAN),   5, "aaaa", "akkioo",(SUBR)panset,NULL, (SUBR)pan  },
 { "soundin",S(SOUNDIN_),5,"mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm","Toooo",
                                                 sndinset, NULL, soundin   },
-{ "soundout",S(SNDOUT), DP|5,   "",     "aTo",  sndo1set, NULL, soundout  },
-{ "soundouts",S(SNDOUTS),DP|5,  "",     "aaTo", sndo1set, NULL, soundouts },
+{ "soundout",S(SNDOUT), _QQ|5,   "",     "aTo",  sndo1set, NULL, soundout  },
+{ "soundouts",S(SNDOUTS),_QQ|5,  "",     "aaTo", sndo1set, NULL, soundouts },
 { "in",     S(INM),     4,      "a",    "",     NULL,   NULL,   in      },
 { "ins",    S(INS),     4,      "aa",   "",     NULL,   NULL,   ins     },
 { "inq",    S(INQ),     4,      "aaaa", "",     NULL,   NULL,   inq     },
@@ -505,10 +505,11 @@ OENTRY opcodlst_1[] = {
 { "unirand.i",S(PRAND), 1,     "i",     "k",    ikuniform, NULL,  NULL  },
 { "unirand.k",S(PRAND), 2,     "k",     "k",    NULL,    ikuniform, NULL},
 { "unirand.a",S(PRAND), 4,     "a",     "k",    NULL,    NULL, auniform },
-{ "diskin",S(SOUNDINEW),DP|5, "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", 
+
+{ "diskin",S(SOUNDINEW),_QQ|5, "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm",
                             "Tkooooo",
                             (SUBR) newsndinset, NULL, (SUBR) soundinew  },
-{ "diskin2",S(DISKIN2), 5,  "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm", 
+{ "diskin2",S(DISKIN2), 5,  "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm",
                             "Tkoooooo",
                             (SUBR) diskin2_init, (SUBR) NULL,
                             (SUBR) diskin2_perf                         },
@@ -573,7 +574,7 @@ OENTRY opcodlst_1[] = {
 { "tableicopy",S(TABLECOPY),TB|1, "", "ii",   (SUBR)itablecopy, NULL, NULL},
 { "tablecopy", S(TABLECOPY),TB|2, "", "kk",
                                       (SUBR)tablecopyset, (SUBR)tablecopy, NULL},
-{ "tablera", S(TABLERA),TR|5,   "a",  "kkk",  
+{ "tablera", S(TABLERA),TR|5,   "a",  "kkk",
                                       (SUBR)tableraset, NULL, (SUBR)tablera},
 { "tablewa", S(TABLEWA),TW|5,   "k",  "kak",
                                       (SUBR)tablewaset, NULL, (SUBR)tablewa},
@@ -657,7 +658,7 @@ OENTRY opcodlst_1[] = {
 { "event", S(LINEVENT),  2,     "",     "SUz",  NULL, eventOpcode, NULL   },
 { "event_i", S(LINEVENT),1,     "",     "STm",  eventOpcodeI, NULL, NULL  },
 { "lfo", S(LFO),         7,     "s",    "kko",  lfoset,   lfok,   lfoa    },
-{ "oscils",   S(OSCILS), 5,     "a", "iiio",     
+{ "oscils",   S(OSCILS), 5,     "a", "iiio",
                                          (SUBR)oscils_set, NULL, (SUBR)oscils },
 { "lphasor",  S(LPHASOR),5,     "a", "xooooooo" ,
                                          (SUBR)lphasor_set, NULL, (SUBR)lphasor },
@@ -665,7 +666,7 @@ OENTRY opcodlst_1[] = {
                                          (SUBR)tablexkt_set, NULL, (SUBR)tablexkt },
 { "reverb2",  S(NREV2),  5,     "a",    "akkoojoj",
                                          (SUBR)reverbx_set,NULL,(SUBR)reverbx },
-{ "nreverb",  S(NREV2),  5,     "a",    "akkoojoj", 
+{ "nreverb",  S(NREV2),  5,     "a",    "akkoojoj",
                                          (SUBR)reverbx_set,NULL,(SUBR) reverbx },
 { "=.f",      S(FASSIGN), 2,    "f",   "f",      NULL, fassign, NULL    },
 { "init.f",   S(FASSIGN), 2,    "f",   "f",      fassign, NULL, NULL    },
@@ -760,7 +761,7 @@ OENTRY opcodlst_1[] = {
 { "a.k",    S(INTERP),  5,  "a", "k",    (SUBR)a_k_set,NULL,   (SUBR)interp  },
 { "integ", S(INDIFF), 7, "s", "xo", (SUBR)indfset,(SUBR)kntegrate,(SUBR)integrate},
 { "diff",   S(INDIFF),  7,  "s", "xo",   (SUBR)indfset,(SUBR)kdiff, (SUBR)diff },
-{ "samphold",S(SAMPHOLD),7, "s", "xxoo", 
+{ "samphold",S(SAMPHOLD),7, "s", "xxoo",
                                  (SUBR)samphset,(SUBR)ksmphold,(SUBR)samphold},
 { "delay",  S(DELAY),   5,  "a", "aio",  (SUBR)delset, NULL,   (SUBR)delay   },
 { "delayr", S(DELAYR),  5,  "aX","io",   (SUBR)delrset,NULL,   (SUBR)delayr  },
@@ -773,7 +774,7 @@ OENTRY opcodlst_1[] = {
 { "reverb", S(REVERB),  5,  "a", "ako",  (SUBR)rvbset, NULL,   (SUBR)reverb  },
 { "vdelay",   S(VDEL),  5,  "a", "axio", (SUBR)vdelset, NULL,  (SUBR)vdelay  },
 { "vdelay3",  S(VDEL),  5,  "a", "axio", (SUBR)vdelset, NULL,  (SUBR)vdelay3 },
-{ "vdelayxwq",S(VDELXQ),5,  "aaaa", "aaaaaiio", 
+{ "vdelayxwq",S(VDELXQ),5,  "aaaa", "aaaaaiio",
                                          (SUBR)vdelxqset, NULL, (SUBR)vdelayxwq},
 { "vdelayxws",S(VDELXS),5,  "aa", "aaaiio", (SUBR)vdelxsset, NULL, (SUBR)vdelayxws},
 { "vdelayxw", S(VDELX), 5,  "a",  "aaiio", (SUBR)vdelxset, NULL, (SUBR)vdelayxw},
@@ -934,9 +935,9 @@ OENTRY opcodlst_1[] = {
 { "remove",      S(DELETEIN),         1,      "",             "T",
    (SUBR) delete_instr, (SUBR) NULL, (SUBR) NULL                       },
 #ifdef PARCS
-{ "##globallock",   S(GLOBAL_LOCK_UNLOCK), 3, "", "k", 
+{ "##globallock",   S(GLOBAL_LOCK_UNLOCK), 3, "", "k",
                     globallock,   globallock,   NULL},
-{ "##globalunlock", S(GLOBAL_LOCK_UNLOCK), 3, "", "k", 
+{ "##globalunlock", S(GLOBAL_LOCK_UNLOCK), 3, "", "k",
                     globalunlock, globalunlock, NULL},
 #endif
 { "##error",S(ERRFN), 1,          "i",     "i",   error_fn, NULL,    NULL    },
@@ -954,4 +955,3 @@ OENTRY opcodlst_1[] = {
 /* terminate list */
 {  NULL, 0, 0, NULL, NULL, (SUBR) NULL, (SUBR) NULL, (SUBR) NULL       }
 };
-
diff --git a/Engine/envvar.c b/Engine/envvar.c
index 8e70fba..64d2065 100644
--- a/Engine/envvar.c
+++ b/Engine/envvar.c
@@ -789,7 +789,9 @@ char *csoundGetDirectoryForPath(CSOUND* csound, const char * path) {
     /* do we need to worry about ~/ on *nix systems ? */
     /* we have a relative path or just a filename */
     cwd = mmalloc(csound, 512);
-    getcwd(cwd, 512);
+    if (UNLIKELY(getcwd(cwd, 512)==NULL)) {
+      csoundDie(csound, "Current directory path name too long\n");
+    }
 
     if (lastIndex == NULL) {
         return cwd;
diff --git a/Engine/express.c b/Engine/express.c
index 18eefa0..d8fbaa4 100644
--- a/Engine/express.c
+++ b/Engine/express.c
@@ -138,7 +138,7 @@ int express(CSOUND *csound, char *s)
       else if (nontermin(c)) {        /* if not just a termin char */
         if (c == '.' || (c >= '0' && c <= '9')) {
           char  *tmp = --s;
-          (void) strtod(s, &tmp);     /*      copy constant        */
+          double tt = strtod(s, &tmp);     /*      copy constant   */
           while (++s < tmp)
             *t++ = *s;
           /* also copy any trailing characters after a constant,   */
diff --git a/Engine/fgens.c b/Engine/fgens.c
index 047f659..b76bc39 100644
--- a/Engine/fgens.c
+++ b/Engine/fgens.c
@@ -2137,7 +2137,7 @@ static int gen42(FGDATA *ff, FUNC *ftp) /*gab d5*/
       p3 = *valp++;
       if (UNLIKELY(nsw && valp>=&ff->e.p[PMAX-1]))
         nsw =0, valp = &(ff->e.c.extra[1]);
-      width = (int) ((p3/tot_prob) * ff->flen +FL(0.5)); 
+      width = (int) ((p3/tot_prob) * ff->flen +FL(0.5));
       inc = (p2-p1) / (MYFLT) (width-1);
       for ( k=0; k < width; k++) {
         *fp++ = p1+(inc*k);
@@ -2567,11 +2567,11 @@ static int gen01raw(FGDATA *ff, FUNC *ftp)
     ftp->end1 = ftp->flenfrms;          /* Greg Sullivan */
 #endif      /* HAVE_LIBSNDFILE >= 1013 */
     /* read sound with opt gain */
-   
+
     if (UNLIKELY((inlocs=getsndin(csound, fd, ftp->ftable, table_length, p)) < 0)) {
       return fterror(ff, Str("GEN1 read error"));
     }
-    
+
     if (p->audrem > 0 && !truncmsg && p->framesrem > ff->flen) {
       /* Reduce msg */
       csound->Warning(csound, Str("GEN1: aiff file truncated by ftable size"));
@@ -2584,7 +2584,7 @@ static int gen01raw(FGDATA *ff, FUNC *ftp)
     if (def) {
       MYFLT *tab = (MYFLT *) ftp->ftable;
       ftresdisp(ff, ftp);       /* VL: 11.01.05  for deferred alloc tables */
-      tab[ff->flen] = tab[0];  /* guard point */ 
+      tab[ff->flen] = tab[0];  /* guard point */
       ftp->flen -= 1;  /* exclude guard point */
     }
     return OK;
@@ -3190,7 +3190,7 @@ int resize_table(CSOUND *csound, RESIZE *p)
     }
     if ((ftp = csound->FTFind(csound, p->fn)) == NULL)
       return NOTOK;
-    if (ftp->flen<fsize) 
+    if (ftp->flen<fsize)
       ftp = (FUNC*) csound->ReAlloc(csound, ftp, sizeof(FUNC)+sizeof(MYFLT)*fsize);
     ftp->flen = fsize;
     csound->flist[fno] = ftp;
diff --git a/Engine/insert.c b/Engine/insert.c
index f0b9ea7..a66c79b 100644
--- a/Engine/insert.c
+++ b/Engine/insert.c
@@ -371,7 +371,7 @@ int MIDIinsert(CSOUND *csound, int insno, MCHNBLK *chn, MEVENT *mep)
       MYFLT value = (MYFLT) ip->m_pitch;
       pfields[index] = value;
       if (O->msglevel & WARNMSG) {
-        csound->Message(csound, "  midiKey:         pfield: %3d  value: %.3f\n",
+        csound->Message(csound, "  midiKey:         pfield: %3d  value: %3d\n",
                         pfield, (int) pfields[index]);
       }
     }
@@ -431,7 +431,7 @@ int MIDIinsert(CSOUND *csound, int insno, MCHNBLK *chn, MEVENT *mep)
     }
     else if (O->midiVelocityAmp) {
       int pfield = O->midiVelocityAmp;
-      int index = pfield - 1; 
+      int index = pfield - 1;
       MYFLT *pfields = &ip->p1;
       MYFLT value = (MYFLT) ip->m_veloc;
       value = value * value / FL(16239.0);
@@ -442,17 +442,17 @@ int MIDIinsert(CSOUND *csound, int insno, MCHNBLK *chn, MEVENT *mep)
                         pfield, pfields[index]);
       }
     }
-    /* 
-       the code above assumes &p1 is a pointer to an array of N pfields, but 
+    /*
+       the code above assumes &p1 is a pointer to an array of N pfields, but
        this is wrong. It overwrites memory and uses it for passing p-field
        values. When the overwritten memory is taken to be a pointer in the
        loop below, the loop does not stop at the end of the opcode list
-       and causes iopadr to be garbage, leading to a segfault. 
-       This happens where there is exactly one opcode in an instrument. 
-       It is a nasty bug that needs to be fixed. 
-        
+       and causes iopadr to be garbage, leading to a segfault.
+       This happens where there is exactly one opcode in an instrument.
+       It is a nasty bug that needs to be fixed.
+
        A possible solution is to  allocate always a minimum of 5 p-fields (see line
-       approx 1809 below). The extra p-fields appear to be hanging at the end of 
+       approx 1809 below). The extra p-fields appear to be hanging at the end of
        an INSDS structure, and &p1 appears to be a legal array start address.
        This allows p4 and p5 to be mapped, but no further p-fields (possibly).
 
@@ -1103,7 +1103,7 @@ int xinset(CSOUND *csound, XIN *p)
     *(tmp++) = NULL;            /* put delimiter */
     /* ... same for k-rate */
     while (*++ndx_list >= 0) {
-      *(tmp++) = *(bufs + *ndx_list);   /* "from" address */   
+      *(tmp++) = *(bufs + *ndx_list);   /* "from" address */
       *(tmp++) = *(p->args + *ndx_list);/* "to" address */
     }
     *(tmp++) = NULL;            /* put delimiter */
@@ -1111,23 +1111,23 @@ int xinset(CSOUND *csound, XIN *p)
      while (*++ndx_list >= 0) {
        void *in, *out;
        in = (void *)*(bufs + *ndx_list);
-       *(tmp++) = (MYFLT *) in;   
+       *(tmp++) = (MYFLT *) in;
        out = (void *) *(p->args + *ndx_list);
        *(tmp++) = (MYFLT *) out;
-       memcpy(out, in, sizeof(PVSDAT));    
+       memcpy(out, in, sizeof(PVSDAT));
     }
      *(tmp++) = NULL;
     /* tsigs: similar to avove */
      while (*++ndx_list >= 0) {
        void *in, *out;
        in = (void *)*(bufs + *ndx_list);
-       *(tmp++) = (MYFLT *) in;   
+       *(tmp++) = (MYFLT *) in;
        out = (void *) *(p->args + *ndx_list);
        *(tmp++) = (MYFLT *) out;
-       memcpy(out, in, sizeof(TABDAT));   
+       memcpy(out, in, sizeof(TABDAT));
     }
      *(tmp++) = NULL;
-   
+
     /* fix for case when xout is omitted */
     *(tmp++) = NULL;  *(tmp++) = NULL;  *(tmp++) = NULL; *tmp = NULL;
     return OK;
@@ -1139,7 +1139,7 @@ int xoutset(CSOUND *csound, XOUT *p)
     OPCODINFO   *inm;
     int16       *ndx_list;
     MYFLT       **tmp, **bufs;
-    
+
     (void) csound;
     buf = (OPCOD_IOBUFS*) p->h.insdshead->opcod_iobufs;
     inm = buf->opcode_info;
@@ -1167,7 +1167,7 @@ int xoutset(CSOUND *csound, XOUT *p)
     tmp += 4;  /* VL: this was 2, now 4 with fsigs and tsigs added */
     if (*tmp || *(tmp + 1))
     return OK;
-   
+
     /* find a-rate variables and add to list of perf-time buf ptrs ... */
     while (*++ndx_list >= 0) {
       *(tmp++) = *(p->args + *ndx_list);/* "from" address */
@@ -1180,23 +1180,23 @@ int xoutset(CSOUND *csound, XOUT *p)
       *(tmp++) = *(bufs + *ndx_list);   /* "to" address */
     }
     *(tmp++) = NULL;                /* put delimiter */
- 
+
     /* fsigs: we'll need to do extra work */
     while (*++ndx_list >= 0) {
       void *in, *out;
       in =  (void *) *(p->args + *ndx_list);
       *(tmp++) = (MYFLT *) in;
-      out = (void *) *(bufs + *ndx_list); 
+      out = (void *) *(bufs + *ndx_list);
       *(tmp++) = (MYFLT *) out;
       memcpy(out, in, sizeof(PVSDAT));
     }
-    *(tmp++) = NULL; 
+    *(tmp++) = NULL;
    /* tsigs: as above */
     while (*++ndx_list >= 0) {
       void *in, *out;
       in =  (void *) *(p->args + *ndx_list);
       *(tmp++) = (MYFLT *) in;
-      out = (void *) *(bufs + *ndx_list); 
+      out = (void *) *(bufs + *ndx_list);
       *(tmp++) = (MYFLT *) out;
       memcpy(out, in, sizeof(TABDAT));
     }
@@ -1593,16 +1593,16 @@ int useropcd1(CSOUND *csound, UOPCODE *p)
           ptr1 = *tmp; *(*(++tmp)) = *ptr1;
         }
         /* VL: fsigs in need to be dealt with here */
-        while (*(++tmp)) {                
-         ptr1 = *tmp; 
-         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT)); 
+        while (*(++tmp)) {
+         ptr1 = *tmp;
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT));
          }
         /* and tsigs */
-        while (*(++tmp)) {                
-         ptr1 = *tmp; 
-         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT)); 
+        while (*(++tmp)) {
+         ptr1 = *tmp;
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT));
          }
-        
+
         /*  run each opcode  */
         csound->pds = (OPDS *) (p->ip);
         while ((csound->pds = csound->pds->nxtp)) {
@@ -1630,15 +1630,15 @@ int useropcd1(CSOUND *csound, UOPCODE *p)
           ptr1 = *tmp; *(*(++tmp)) = *ptr1;
         }
         /* VL: fsigs in need to be dealt with here */
-        while (*(++tmp)) {                
-         ptr1 = *tmp; 
-         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT)); 
+        while (*(++tmp)) {
+         ptr1 = *tmp;
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT));
          }
         /* and tsigs */
-        while (*(++tmp)) {                
-         ptr1 = *tmp; 
-         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT)); 
-         } 
+        while (*(++tmp)) {
+         ptr1 = *tmp;
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT));
+         }
         /*  run each opcode  */
         csound->pds = (OPDS *) (p->ip);
         while ((csound->pds = csound->pds->nxtp)) {
@@ -1658,20 +1658,20 @@ int useropcd1(CSOUND *csound, UOPCODE *p)
     /* k-rate outputs are copied only in the last sub-kperiod, */
     /* so we do it now */
     while (*(++tmp)) {                  /* k-rate */
-      ptr1 = *tmp; 
+      ptr1 = *tmp;
       *(*(++tmp)) = *ptr1;
     }
     /* VL: fsigs out need to be dealt with here */
-     while (*(++tmp)) {                
+     while (*(++tmp)) {
        ptr1 = *tmp;
        memcpy((void *)(*(++tmp)), (void *)ptr1, sizeof(PVSDAT));
     }
      /* tsigs  */
-    while (*(++tmp)) {                
+    while (*(++tmp)) {
        ptr1 = *tmp;
        memcpy((void *)(*(++tmp)), (void *)ptr1, sizeof(TABDAT));
     }
-    
+
     /* restore globals */
     csound->ksmps = g_ksmps;
     csound->pool[csound->poolcount + 2] = (MYFLT) g_ksmps;
@@ -1694,13 +1694,13 @@ int useropcd2(CSOUND *csound, UOPCODE *p)
     OPDS    *saved_pds = csound->pds;
     int     n;
     MYFLT   **tmp, *ptr1, *ptr2;
-    
+
      if (!(csound->pds = (OPDS*) (p->ip->nxtp))) goto endop; /* no perf code */
 
-    //csound->Message(csound, "end input\n"); /* FOR SOME REASON the opcode has no perf code */ 
+    //csound->Message(csound, "end input\n"); /* FOR SOME REASON the opcode has no perf code */
     /* IV - Nov 16 2002: update release flag */
     p->ip->relesing = p->parent_ip->relesing;
-   
+
     tmp = p->buf->iobufp_ptrs;
     if (csound->ksmps != 1) {           /* generic case for kr != sr */
 
@@ -1712,23 +1712,23 @@ int useropcd2(CSOUND *csound, UOPCODE *p)
           *(ptr2++) = *(ptr1++);
         } while (--n);
       }
-   
+
       while (*(++tmp)) {                /* k-rate */
         ptr1 = *tmp; *(*(++tmp)) = *ptr1;
       }
-  
+
       /* VL: fsigs in need to be dealt with here */
-       while (*(++tmp)) {                
-         ptr1 = *tmp; 
-         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT)); 
-         } 
+       while (*(++tmp)) {
+         ptr1 = *tmp;
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT));
+         }
        /* VL: tsigs */
-        while (*(++tmp)) {                
-         ptr1 = *tmp; 
-         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT)); 
-         } 
-       
-        
+        while (*(++tmp)) {
+         ptr1 = *tmp;
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT));
+         }
+
+
       /*  run each opcode  */
       do {
         (*csound->pds->opadr)(csound, csound->pds);
@@ -1745,22 +1745,22 @@ int useropcd2(CSOUND *csound, UOPCODE *p)
     else {                      /* special case for kr == sr */
       /* copy inputs */
       while (*tmp) {                    /* a-rate */
-        ptr1 = *(tmp++); 
+        ptr1 = *(tmp++);
         *(*(tmp++)) = *ptr1;
       }
       while (*(++tmp)) {                /* k-rate */
         ptr1 = *tmp; *(*(++tmp)) = *ptr1;
       }
       /* VL: fsigs in need to be dealt with here */
-       while (*(++tmp)) {                
-         ptr1 = *tmp; 
-         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT)); 
+       while (*(++tmp)) {
+         ptr1 = *tmp;
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(PVSDAT));
          }
        /* VL: tsigs */
-       while (*(++tmp)) {                
-         ptr1 = *tmp; 
-         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT)); 
-         } 
+       while (*(++tmp)) {
+         ptr1 = *tmp;
+         memcpy((void *)(*(++tmp)), (void *) ptr1, sizeof(TABDAT));
+         }
       /*  run each opcode  */
       do {
         (*csound->pds->opadr)(csound, csound->pds);
@@ -1774,15 +1774,15 @@ int useropcd2(CSOUND *csound, UOPCODE *p)
       ptr1 = *tmp; *(*(++tmp)) = *ptr1;
     }
     /* VL: fsigs out need to be dealt with here */
-     while (*(++tmp)) {                
+     while (*(++tmp)) {
        ptr1 = *tmp;
        memcpy((void *)(*(++tmp)), (void *)ptr1, sizeof(PVSDAT));
        }
      /* tsigs */
-    while (*(++tmp)) {                
+    while (*(++tmp)) {
        ptr1 = *tmp;
        memcpy((void *)(*(++tmp)), (void *)ptr1, sizeof(TABDAT));
-       } 
+       }
  endop:
     /* restore globals */
     csound->pds = saved_pds;
@@ -1804,7 +1804,7 @@ static void instance(CSOUND *csound, int insno)
     const OENTRY  *ep;
     LBLBLK    **lopdsp;
     LARGNO    *largp;
-    int       n, cnt, pextent, opnum;
+    int       n, cnt, pextent, opnum, pextra;
     char      *nxtopds, *opdslim;
     MYFLT     **argpp, *lclbas, *gbloffbas, *lcloffbas;
     int       *ndxp;
@@ -1823,7 +1823,8 @@ static void instance(CSOUND *csound, int insno)
     if (O->midiKeyPch>n) n = O->midiKeyPch;
     if (O->midiVelocity>n) n = O->midiVelocity;
     if (O->midiVelocityAmp>n) n = O->midiVelocityAmp;
-    pextent = sizeof(INSDS) + tp->pextrab + (n-3)*sizeof(MYFLT *);      /* alloc new space,  */
+    pextra = n-3;
+    pextent = sizeof(INSDS) + tp->pextrab + pextra*sizeof(MYFLT *);      /* alloc new space,  */
     ip = (INSDS*) mcalloc(csound, (size_t) pextent + tp->localen + tp->opdstot);
     ip->csound = csound;
     ip->m_chnbp = (MCHNBLK*) NULL;
@@ -2040,5 +2041,3 @@ int delete_instr(CSOUND *csound, DELETEIN *p)
       }
     return NOTOK;
 }
-
-
diff --git a/Engine/memfiles.c b/Engine/memfiles.c
index 61fc234..b3d04cd 100644
--- a/Engine/memfiles.c
+++ b/Engine/memfiles.c
@@ -349,7 +349,7 @@ SNDMEMFILE *csoundLoadSoundFile(CSOUND *csound, const char *fileName, void *sfi)
     SNDMEMFILE    *p = NULL;
     SF_INFO       tmp;
     unsigned char h;
-  
+
 
     if (UNLIKELY(fileName == NULL || fileName[0] == '\0'))
       return NULL;
@@ -458,4 +458,3 @@ SNDMEMFILE *csoundLoadSoundFile(CSOUND *csound, const char *fileName, void *sfi)
     /* return with pointer to file structure */
     return p;
 }
-
diff --git a/Engine/musmon.c b/Engine/musmon.c
index c6f7ff0..71961bf 100644
--- a/Engine/musmon.c
+++ b/Engine/musmon.c
@@ -85,7 +85,7 @@ static void settempo(CSOUND *csound, MYFLT tempo)
 {
     if (tempo <= FL(0.0)) return;
     if (csound->oparms->Beatmode==1)
-      csound->ibeatTime = (int)(csound->esr*60.0 / (double) tempo);
+      csound->ibeatTime = (int64_t)(csound->esr*60.0 / (double) tempo);
     csound->curBeat_inc = (double) tempo / (60.0 * (double) csound->global_ekr);
 }
 
@@ -395,7 +395,7 @@ PUBLIC int csoundCleanup(CSOUND *csound)
     }
     orcompact(csound);
     corfile_rm(&csound->scstr);
-  
+
     /* print stats only if musmon was actually run */
     if (UNLIKELY(csound->musmonGlobals != NULL)) {
       csound->Message(csound, Str("end of score.\t\t   overall amps:"));
@@ -417,12 +417,12 @@ PUBLIC int csoundCleanup(CSOUND *csound)
                               csound->perferrcnt);
       print_benchmark_info(csound, Str("end of performance"));
     }
-     
+
     /* close line input (-L) */
     RTclose(csound);
     /* close MIDI input */
     MidiClose(csound);
- 
+
     /* IV - Feb 03 2005: do not need to call rtclose from here, */
     /* as sfclosein/sfcloseout will do that. */
     if (!csound->enableHostImplementedAudioIO) {
@@ -435,7 +435,7 @@ PUBLIC int csoundCleanup(CSOUND *csound)
     if (csound->remoteGlobals) remote_Cleanup(csound);
     if (csound->oparms->ringbell)
       cs_beep(csound);
-   
+
     return dispexit(csound);    /* hold or terminate the display output     */
 }
 
@@ -704,8 +704,8 @@ static int process_score_event(CSOUND *csound, EVTBLK *evt, int rtEvt)
       break;
     case 'a':
       {
-        int kCnt;
-        kCnt = (int) ((double) csound->global_ekr * (double) evt->p[3] + 0.5);
+        int64_t kCnt;
+        kCnt = (int64_t) ((double) csound->global_ekr * (double) evt->p[3] + 0.5);
         if (kCnt > csound->advanceCnt) {
           csound->advanceCnt = kCnt;
           csound->Message(csound,
@@ -724,7 +724,7 @@ static void process_midi_event(CSOUND *csound, MEVENT *mep, MCHNBLK *chn)
 {
     int n, insno = chn->insno;
     if (mep->type == NOTEON_TYPE && mep->dat2) {      /* midi note ON: */
-      if (UNLIKELY((n = MIDIinsert(csound, insno, chn, mep)))) { 
+      if (UNLIKELY((n = MIDIinsert(csound, insno, chn, mep)))) {
         /* alloc,init,activ */
         csound->Message(csound,
                         Str("\t\t   T%7.3f - note deleted. "), csound->curp2);
@@ -805,7 +805,7 @@ static int process_rt_event(CSOUND *csound, int sensType)
     return retval;
 }
 
-#define RNDINT(x) ((int) ((double) (x) + ((double) (x) < 0.0 ? -0.5 : 0.5)))
+#define RNDINT64(x) ((int64_t) ((double) (x) + ((double) (x) < 0.0 ? -0.5 : 0.5)))
 
 extern  int     sensMidi(CSOUND *);
 
@@ -919,10 +919,10 @@ int sensevents(CSOUND *csound)
       /* calculate the number of k-periods remaining until next event */
       if (O->Beatmode)
         csound->cyclesRemaining =
-          RNDINT((csound->nxtbt - csound->curBeat) / csound->curBeat_inc);
+          RNDINT64((csound->nxtbt - csound->curBeat) / csound->curBeat_inc);
       else {
         csound->cyclesRemaining =
-          RNDINT((csound->nxtim*csound->esr - csound->icurTime) / csound->ksmps);
+          RNDINT64((csound->nxtim*csound->esr - csound->icurTime) / csound->ksmps);
         csound->nxtim = (csound->cyclesRemaining*csound->ksmps+csound->icurTime)/csound->esr;
       }
     }
@@ -1029,14 +1029,14 @@ int sensevents(CSOUND *csound)
     return 2;                   /* done with entire score */
 }
 
-static inline uint32 time2kcnt(CSOUND *csound, double tval)
+static inline uint64_t time2kcnt(CSOUND *csound, double tval)
 {
     if (tval > 0.0) {
       tval *= (double) csound->global_ekr;
 #ifdef HAVE_C99
-      return (uint32) llrint(tval);
+      return (uint64_t) llrint(tval);
 #else
-      return (uint32) (tval + 0.5);
+      return (uint64_t) (tval + 0.5);
 #endif
     }
     return 0UL;
@@ -1057,7 +1057,7 @@ static inline uint32 time2kcnt(CSOUND *csound, double tval)
 /* made.                                                              */
 /* Return value is zero on success.                                   */
 
-int insert_score_event_at_sample(CSOUND *csound, EVTBLK *evt, long time_ofs)
+int insert_score_event_at_sample(CSOUND *csound, EVTBLK *evt, int64_t time_ofs)
 {
     double        start_time;
     EVTNODE       *e, *prv;
@@ -1268,4 +1268,3 @@ PUBLIC int csoundRegisterSenseEventCallback(CSOUND *csound,
 
     return 0;
 }
-
diff --git a/Engine/namedins.c b/Engine/namedins.c
index e1c0ca5..4bbdb44 100644
--- a/Engine/namedins.c
+++ b/Engine/namedins.c
@@ -538,7 +538,7 @@ char *strsav_string(CSOUND *csound, char *s)
          sp->sp =
           (char*)mcalloc(csound, sp->size = n+STRSPACE);
          csound->DebugMsg(csound,
-                        "internal message: strsav: buffer length now %d\n", 
+                        "internal message: strsav: buffer length now %d\n",
                         sp->size);
 
        }
@@ -1119,4 +1119,3 @@ int csoundLoadAllPluginOpcodes(CSOUND *csound)
 #ifdef __cplusplus
 }
 #endif
-
diff --git a/Engine/new_orc_parser.c b/Engine/new_orc_parser.c
index 9caed43..5bcb3ef 100644
--- a/Engine/new_orc_parser.c
+++ b/Engine/new_orc_parser.c
@@ -67,7 +67,7 @@ void csound_print_preextra(CSOUND *csound, PRE_PARM  *x)
     csound->DebugMsg(csound,"********* Extra Pre Data %p *********\n", x);
     csound->DebugMsg(csound,"macros = %p, macro_stack_ptr = %u, ifdefStack=%p, isIfndef=%d\n"
            "isInclude=%d, clearBufferAfterEOF=%d, line=%d\n",
-           x->macros, x->macro_stack_ptr, x->ifdefStack, x->isIfndef, 
+           x->macros, x->macro_stack_ptr, x->ifdefStack, x->isIfndef,
            x->isInclude, x->clearBufferAfterEOF, x->line);
     csound->DebugMsg(csound,"******************\n");
 }
@@ -107,7 +107,7 @@ int new_orc_parser(CSOUND *csound)
         sprintf(bb, "#line %d\n", csound->orcLineOffset);
         corfile_puts(bb, csound->expanded_orc);
       }
-      csound->DebugMsg(csound, "Calling preprocess on >>%s<<\n", 
+      csound->DebugMsg(csound, "Calling preprocess on >>%s<<\n",
               corfile_body(csound->orchstr));
       //csound->DebugMsg(csound,"FILE: %s \n", csound->orchstr->body);
       //    csound_print_preextra(&qq);
@@ -121,7 +121,7 @@ int new_orc_parser(CSOUND *csound)
       }
       csound_prelex_destroy(qq.yyscanner);
       csound->DebugMsg(csound, "yielding >>%s<<\n", corfile_body(csound->expanded_orc));
-      free(csound->orchstr); csound->orchstr=NULL;
+      corfile_rm(&csound->orchstr);
     }
     {
       TREE* astTree = (TREE *)mcalloc(csound, sizeof(TREE));
@@ -136,9 +136,9 @@ int new_orc_parser(CSOUND *csound)
       csound_orcset_extra(&pp, pp.yyscanner);
       csound_orc_scan_buffer(corfile_body(csound->expanded_orc),
                              corfile_tell(csound->expanded_orc), pp.yyscanner);
-      free(csound->expanded_orc);
       //csound_orcset_lineno(csound->orcLineOffset, pp.yyscanner);
       retVal = csound_orcparse(&pp, pp.yyscanner, csound, astTree);
+      corfile_rm(&csound->expanded_orc);
       if (csound->synterrcnt) retVal = 3;
       if (LIKELY(retVal == 0)) {
         csound->Message(csound, "Parsing successful!\n");
@@ -174,14 +174,14 @@ int new_orc_parser(CSOUND *csound)
 
       if (UNLIKELY(PARSER_DEBUG)) {
         print_tree(csound, "AST - AFTER EXPANSION\n", astTree);
-      }     
+      }
 #ifdef PARCS
       if (LIKELY(O->numThreads > 1)) {
         /* calculate the weights for the instruments */
         csp_weights_calculate(csound, astTree);
       }
 #endif /* PARCS */
-      
+
       astTree = csound_orc_optimize(csound, astTree);
       csound_orc_compile(csound, astTree);
 
@@ -190,4 +190,3 @@ int new_orc_parser(CSOUND *csound)
     }
     return retVal;
 }
-
diff --git a/Engine/otran.c b/Engine/otran.c
index 0e8b359..ac0acb1 100644
--- a/Engine/otran.c
+++ b/Engine/otran.c
@@ -135,7 +135,7 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
         break;
       case 't':
           t_incnt++; *otypes++ = *types;
-          break;              
+          break;
       case 'i':
       case 'o':
       case 'p':
@@ -183,7 +183,7 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
         break;
       case 't':
         t_outcnt++; *otypes++ = *types;
-        break;              
+        break;
       case 'i':
         i_outcnt++; *otypes++ = *types;
         break;
@@ -211,14 +211,14 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     a_inlist = S_inlist + S_incnt + 1;
     k_inlist = a_inlist + a_incnt + 1;
     f_inlist = k_inlist + k_incnt + 1;
-    t_inlist = f_inlist + f_incnt + 1;    
+    t_inlist = f_inlist + f_incnt + 1;
     i = 0; types = inm->intypes;
     while (*types) {
       switch (*types++) {
         case 'a': *a_inlist++ = i; break;
         case 'k': *k_inlist++ = i; break;
         case 'f': *f_inlist++ = i; break;
-        case 't': *t_inlist++ = i; break;      
+        case 't': *t_inlist++ = i; break;
         case 'K': *k_inlist++ = i;      /* also updated at i-time */
         case 'i':
         case 'o':
@@ -234,14 +234,14 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     a_outlist = S_outlist + S_outcnt + 1;
     k_outlist = a_outlist + a_outcnt + 1;
     f_outlist = k_outlist + k_outcnt + 1;
-    t_outlist = f_outlist + f_outcnt + 1;    
+    t_outlist = f_outlist + f_outcnt + 1;
     i = 0; types = inm->outtypes;
     while (*types) {
       switch (*types++) {
         case 'a': *a_outlist++ = i; break;
         case 'k': *k_outlist++ = i; break;
         case 'f': *f_outlist++ = i; break;
-        case 't': *t_outlist++ = i; break;      
+        case 't': *t_outlist++ = i; break;
         case 'K': *k_outlist++ = i;     /* also updated at i-time */
         case 'i': *i_outlist++ = i; break;
         case 'S': *S_outlist++ = i; break;
@@ -303,7 +303,6 @@ void otran(CSOUND *csound)
     ST(poolcount) = 0;
     ST(nconsts) = NCONSTS;
     ST(constTbl) = (int*) mcalloc(csound, (256 + NCONSTS) * sizeof(int));
-    setlocale(LC_NUMERIC, "C"); /* Ensure C syntax */
     constndx(csound, "0");
 
     while ((tp = getoptxt(csound, &init)) != NULL) {
@@ -991,14 +990,14 @@ int lgexist(CSOUND *csound, const char *s)
 {
     unsigned char h = name_hash(csound, s);
     NAME          *p;
- 
-    
+
+
 
     for (p = ST(gblNames)[h]; p != NULL && sCmp(p->namep, s); p = p->nxt);
     if (p != NULL)
       return 1;
     for (p = ST(lclNames)[h]; p != NULL && sCmp(p->namep, s); p = p->nxt);
-  
+
     return (p == NULL ? 0 : 1);
 
 }
@@ -1443,7 +1442,7 @@ void oload(CSOUND *p)
     if (O->Beatmode && O->cmdTempo > 0) {
       /* if performing from beats, set the initial tempo */
       p->curBeat_inc = (double) O->cmdTempo / (60.0 * (double) p->ekr);
-      p->ibeatTime = (int)(p->esr*60.0 / (double) O->cmdTempo);
+      p->ibeatTime = (int64_t)(p->esr*60.0 / (double) O->cmdTempo);
     }
     else {
       p->curBeat_inc = 1.0 / (double) p->ekr;
@@ -1460,4 +1459,3 @@ void oload(CSOUND *p)
     if (UNLIKELY(init0(p) != 0))
       csoundDie(p, Str("header init errors"));
 }
-
diff --git a/Engine/parse_param.h b/Engine/parse_param.h
index dd37005..6df0617 100644
--- a/Engine/parse_param.h
+++ b/Engine/parse_param.h
@@ -4,7 +4,7 @@ struct MACRO;
 
 typedef struct MACRON {
   int             n;
-  unsigned int    line; 
+  unsigned int    line;
   struct MACRO    *s;
 } MACRON;
 
@@ -27,7 +27,7 @@ typedef struct IFDEFSTACK_ {
 } IFDEFSTACK;
 
 
-typedef struct pre_parm_s {  
+typedef struct pre_parm_s {
     void            *yyscanner;
     MACRO           *macros;
     MACRON alt_stack[MAX_INCLUDE_DEPTH];
@@ -41,7 +41,7 @@ typedef struct pre_parm_s {
     uint32_t        locn;
     uint32_t        llocn;
     uint16_t        depth;
-    uint8_t         lstack[1024]; 
+    uint8_t         lstack[1024];
 } PRE_PARM;
 
 typedef struct parse_parm_s {
diff --git a/Engine/rdorch.c b/Engine/rdorch.c
index 0e6b837..084bccd 100644
--- a/Engine/rdorch.c
+++ b/Engine/rdorch.c
@@ -414,7 +414,7 @@ static void init_math_constants_macros(CSOUND *csound)
   add_math_const_macro(csound, "2_SQRTPI", "1.12837916709551257390");
   add_math_const_macro(csound, "SQRT2", "1.41421356237309504880");
   add_math_const_macro(csound, "SQRT1_2", "0.70710678118654752440");
-  add_math_const_macro(csound, "INF", "2147483647.0"); /* ~7 years */
+  add_math_const_macro(csound, "INF", "800000000000.0"); /* ~25367 years */
 }
 
 static void init_omacros(CSOUND *csound, NAMES *nn)
@@ -1933,7 +1933,7 @@ TEXT *getoptxt(CSOUND *csound, int *init)
       }
       tfound = argtyp(csound, s);     /* else get arg type */
       /* IV - Oct 31 2002 */
-      
+
       tfound_m = ST(typemask_tabl)[(unsigned char) tfound];
       if (UNLIKELY(!(tfound_m & (ARGTYP_c|ARGTYP_p)) &&
                    !ST(lgprevdef) && *s != '"')) {
diff --git a/Engine/rdscor.c b/Engine/rdscor.c
index bde13b1..c22de11 100644
--- a/Engine/rdscor.c
+++ b/Engine/rdscor.c
@@ -29,7 +29,7 @@ static void dumpline(CSOUND *);
 static void flushline(CSOUND *csound)   /* flush scorefile to next newline */
 {
     int     c;
-    while ((c = corfile_getc(csound->scstr)) != '0' && c != '\n')
+    while ((c = corfile_getc(csound->scstr)) != '\0' && c != '\n')
         ;
 }
 
diff --git a/Engine/scsort.c b/Engine/scsort.c
index d26222a..c44bcb0 100644
--- a/Engine/scsort.c
+++ b/Engine/scsort.c
@@ -68,7 +68,7 @@ void scsortstr(CSOUND *csound, CORFIL *scin)
       swritestr(csound);
       m++;
     }
-    if (m==0) corfile_puts("f0 2147483647.0\ne\n", csound->scstr);
+    if (m==0) corfile_puts("f0 800000000000.0\ne\n", csound->scstr); /* ~25367 years */
     else corfile_puts("e\n", csound->scstr);
     corfile_flush(csound->scstr);
     sfree(csound);              /* return all memory used */
diff --git a/Engine/sort.c b/Engine/sort.c
index c8a11f8..7aa2683 100644
--- a/Engine/sort.c
+++ b/Engine/sort.c
@@ -125,7 +125,7 @@ static void inline sift(SRTBLK *A[], int data[])
 
 static void inline trinkle(SRTBLK *A[], int data[])
 {
-    int p1,r2,r3, r0, temp;
+    int p1, r2, r3, r0, temp;
     SRTBLK * T;
     p1 = p; b1 = b; c1 = c;
     r0 = r1; T = A[r0];
@@ -140,13 +140,13 @@ static void inline trinkle(SRTBLK *A[], int data[])
         p1--;
         if (b1==1) {
           A[r1] = A[r3];
-          r1 = r3;
+          r1    = r3;
         }
         else
           if (b1 >= 3) {
             r2 = r1-b1+c1;
             if (! ordering(A[r1-1],A[r2])) {
-              r2 = r1-1;
+              r2   = r1-1;
               DOWN(b1,c1)
               p1 <<= 1;
             }
@@ -179,7 +179,8 @@ static void inline semitrinkle(SRTBLK *A[], int data[])
 static void smoothsort(SRTBLK *A[], const int N)
 {
     int temp;
-    int data[] = {/*q*/ 1, /*r*/ 0, /*p*/ 1, /*b*/ 1, /*c*/ 1, 0,0,0};
+    int data[] = {/*q*/ 1, /*r*/  0, /*p*/  1, /*b*/  1,
+                  /*c*/ 1, /*r1*/ 0, /*b1*/ 0, /*c1*/ 0};
 
     /* building tree */
     while (q < N) {
@@ -198,7 +199,7 @@ static void smoothsort(SRTBLK *A[], const int N)
         p <<= 1;
         while (b > 1) {
           DOWN(b,c)
-            p <<= 1;
+          p <<= 1;
         }
         p++;
       }
diff --git a/Engine/sread.c b/Engine/sread.c
index abb97ed..3386931 100644
--- a/Engine/sread.c
+++ b/Engine/sread.c
@@ -228,10 +228,10 @@ static void print_input_backtrace(CSOUND *csound, int needLFs,
                 (lastsource == 0 ? csound->scoLineOffset + curr->line - 1 :
                  csound->scoLineOffset + curr->line), csound->csdname, lf);
       }
-      else {
-        msgfunc(csound, m, (lastsource == 0 ? curr->line - 1 : curr->line),
-                corfile_tell(curr->cf), lf);  /* #include is one line before */
-      }
+      /* else { */
+      /*   msgfunc(csound, m, (lastsource == 0 ? curr->line - 1 : curr->line), */
+      /*           corfile_tell(curr->cf), lf);  /\* #include is one line before *\/ */
+      /* } */
     } while (!lastsource);
     curr--;
     return;
@@ -319,7 +319,7 @@ static int getscochar(CSOUND *csound, int expand)
     c = corfile_getc(ST(str)->cf);
     if (c == EOF) {
       if (ST(str) == &ST(inputs)[0]) {
-        corfile_ungetc(ST(str)->cf);      /* to ensure repeated EOF */
+        corfile_putc('\n', ST(str)->cf);  /* to ensure repeated EOF */
         return EOF;
       }
       if (ST(str)->mac == 0) {
@@ -668,7 +668,7 @@ static int nested_repeat(CSOUND *csound)                /* gab A9*/
 #ifdef MACDEBUG
       csound->DebugMsg(csound,"%s(%d) reset point to %d\n", __FILE__, __LINE__,
              ST(repeat_point_n)[ST(repeat_index)], i);
-      csound->DebugMsg(csound,"%s(%d) corefile: %s %d %d\n", __FILE__, __LINE__, 
+      csound->DebugMsg(csound,"%s(%d) corefile: %s %d %d\n", __FILE__, __LINE__,
              ST(repeat_mm_n)[ST(repeat_index)]->body->body,
              ST(repeat_mm_n)[ST(repeat_index)]->body->p,
              ST(repeat_mm_n)[ST(repeat_index)]->body->len);
@@ -684,7 +684,7 @@ static int nested_repeat(CSOUND *csound)                /* gab A9*/
         corfile_puts(buffer, ST(repeat_mm_n)[ST(repeat_index)]->body);
         corfile_rewind(ST(repeat_mm_n)[ST(repeat_index)]->body);
 #ifdef MACDEBUG
-        csound->DebugMsg(csound,"%s(%d) corefile: %s %d %d\n", __FILE__, __LINE__, 
+        csound->DebugMsg(csound,"%s(%d) corefile: %s %d %d\n", __FILE__, __LINE__,
                ST(repeat_mm_n)[ST(repeat_index)]->body->body,
                ST(repeat_mm_n)[ST(repeat_index)]->body->p,
                ST(repeat_mm_n)[ST(repeat_index)]->body->len);
@@ -795,7 +795,7 @@ static void init_smacros(CSOUND *csound, NAMES *nn)
     mm = (MACRO*) mcalloc(csound, sizeof(MACRO));
     mm->name = (char*)mmalloc(csound,4);
     strcpy(mm->name, "INF");
-    mm->body = corfile_create_r("2147483647.0");
+    mm->body = corfile_create_r("800000000000.0");
 #ifdef MACDEBUG
     csound->DebugMsg(csound,"%s(%d): INF %p\n", __FILE__, __LINE__, mm->body);
 #endif
@@ -998,7 +998,7 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
           flushlin(csound);     /* Ignore rest of line */
           ST(repeat_point_n)[ST(repeat_index)] =
             corfile_tell(ST(str)->cf);
-          
+
           /* { does not start a new section - akozar */
           /* ST(clock_base) = FL(0.0);
           ST(warp_factor) = FL(1.0);
@@ -1110,7 +1110,7 @@ int sread(CSOUND *csound)       /*  called from main,  reads from SCOREIN   */
           else mfree(csound, ST(names)[j].file);
           ST(names)[ST(next_name)].posit = corfile_tell(ST(str)->cf);
           ST(names)[ST(next_name)].line = ST(str)->line;
-          ST(names)[ST(next_name)].file = 
+          ST(names)[ST(next_name)].file =
             mmalloc(csound, strlen(corfile_body(ST(str)->cf)) + 1);
           strcpy(ST(names)[ST(next_name)].file, corfile_body(ST(str)->cf));
           if (csound->oparms->msglevel & TIMEMSG)
@@ -1836,7 +1836,7 @@ MYFLT stof(CSOUND *csound, char s[])            /* convert string to MYFLT  */
     char    *p;
     MYFLT   x = (MYFLT) strtod(s, &p);
 
-    if (*p=='z') return FL(INF); /* Infinity or 7 years */
+    if (*p=='z') return FL(800000000000.0); /* 25367 years */
     if (UNLIKELY(s == p || !(*p == '\0' || isspace(*p)))) {
       csound->Message(csound, Str("sread: illegal number format:  "));
       p = s;
@@ -1850,4 +1850,3 @@ MYFLT stof(CSOUND *csound, char s[])            /* convert string to MYFLT  */
     }
     return x;
 }
-
diff --git a/Engine/swritestr.c b/Engine/swritestr.c
index 3c3d46c..a7e1821 100644
--- a/Engine/swritestr.c
+++ b/Engine/swritestr.c
@@ -37,11 +37,13 @@ static char   *randramp(CSOUND *,SRTBLK *, char *, int, int);
 static char   *pfStr(CSOUND *,char *, int, int);
 static char   *fpnum(CSOUND *,char *, int, int);
 
-static void fltout(CSOUND *csound, MYFLT n) 
+static void fltout(CSOUND *csound, MYFLT n)
 {
-    char buffer[1024];
+    char *c, buffer[1024];
     sprintf(buffer, "%.6f", n);
-    corfile_puts(buffer, csound->scstr);
+    /* corfile_puts(buffer, csound->scstr); */
+    for (c = buffer; *c != '\0'; c++)
+      corfile_putc(*c, csound->scstr);
 }
 
 void swritestr(CSOUND *csound)
@@ -539,4 +541,3 @@ static char *fpnum(CSOUND *csound,
     }
     return(p);
 }
-
diff --git a/Engine/symbtab.c b/Engine/symbtab.c
index 398d29d..d35b530 100644
--- a/Engine/symbtab.c
+++ b/Engine/symbtab.c
@@ -139,6 +139,7 @@ void init_symbtab(CSOUND *csound)
     add_token(csound, "ampdbfs", T_FUNCTION);
     add_token(csound, "dbamp", T_FUNCTION);
     add_token(csound, "dbfsamp", T_FUNCTION);
+    add_token_p(csound, "ftcps", T_FUNCTION, TR);
     add_token_p(csound, "ftlen", T_FUNCTION, TR);
     add_token_p(csound, "ftsr", T_FUNCTION, TR);
     add_token_p(csound, "ftlptim", T_FUNCTION, TR);
@@ -205,7 +206,7 @@ ORCTOKEN *add_token(CSOUND *csound, char *s, int type)
     while (a!=NULL) {
       if (strcmp(a->lexeme, s)==0) {
         if (type == a->type) return a;
-        if (type!= T_FUNCTION || a->type!=T_OPCODE) 
+        if (type!= T_FUNCTION || a->type!=T_OPCODE)
           csound->Warning(csound,
                           Str("Type confusion for %s (%d,%d), replacing\n"),
                           s, type, a->type);
@@ -230,7 +231,7 @@ static ORCTOKEN *add_token_p(CSOUND *csound, char *s, int type, int val)
     ans->value = val;
     return ans;
 }
-    
+
 int isUDOArgList(char *s)
 {
     int len = strlen(s) - 1;
@@ -297,7 +298,7 @@ ORCTOKEN *lookup_token(CSOUND *csound, char *s, void *yyscanner)
         if (PARSER_DEBUG)
           csound->Message(csound, "Looking up token for: %d: %d: %s : %s\n",
                           hash("reverb"), hash("a4"), s, a->lexeme);
-			  }
+      }
       if (strcmp(a->lexeme, s)==0) {
         ans = (ORCTOKEN*)mmalloc(csound, sizeof(ORCTOKEN));
         memcpy(ans, a, sizeof(ORCTOKEN));
@@ -308,7 +309,7 @@ ORCTOKEN *lookup_token(CSOUND *csound, char *s, void *yyscanner)
       }
       a = a->next;
     }
-   
+
 
     ans = new_token(csound, T_IDENT);
     ans->lexeme = (char*)mmalloc(csound, 1+strlen(s));
@@ -378,7 +379,7 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
     int     S_incnt, S_outcnt, f_outcnt, f_incnt, t_incnt, t_outcnt;
     int16   *a_inlist, *k_inlist, *i_inlist, *a_outlist, *k_outlist, *i_outlist;
     int16   *S_inlist, *S_outlist, *f_inlist, *f_outlist, *t_inlist, *t_outlist;
-  
+
     /* count the number of arguments, and check types */
     i = i_incnt = S_incnt = a_incnt = k_incnt = f_incnt = f_outcnt =
         i_outcnt = S_outcnt = a_outcnt = k_outcnt = t_incnt = t_outcnt = err = 0;
@@ -494,9 +495,9 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
       }
       i++;
     }
-      
+
     /* put delimiters */
-    *i_inlist = *S_inlist = *a_inlist = *k_inlist = *f_inlist = *t_inlist = -1; 
+    *i_inlist = *S_inlist = *a_inlist = *k_inlist = *f_inlist = *t_inlist = -1;
     i_outlist = inm->out_ndx_list = t_inlist + 1;
     S_outlist = i_outlist + i_outcnt + 1;
     a_outlist = S_outlist + S_outcnt + 1;
@@ -516,7 +517,7 @@ static int parse_opcode_args(CSOUND *csound, OENTRY *opc)
       }
       i++;
     }
-    
+
     *i_outlist = *S_outlist = *a_outlist = *k_outlist =
       *f_outlist = *t_outlist = -1;  /* put delimiters */
     return err;
diff --git a/Engine/twarp.c b/Engine/twarp.c
index 871dfbf..03ea820 100644
--- a/Engine/twarp.c
+++ b/Engine/twarp.c
@@ -148,7 +148,7 @@ int realtset(CSOUND *csound, SRTBLK *bp)
     tp->durslp = FL(0.0);                     /* clear last durslp */
     if (UNLIKELY(++tp > (TSEG*) csound->tplim))
       goto error3;
-    tp->betbas = FL(999999.9);                /* and cap with large betval */
+    tp->betbas = FL(9223372036854775807.0);   /* and cap with large betval */
     return(1);
 
  error1:
diff --git a/H/csound.h b/H/csound.h
index b027cb4..4f08e2a 100644
--- a/H/csound.h
+++ b/H/csound.h
@@ -954,6 +954,9 @@ extern "C" {
     PUBLIC int csoundScoreEvent(CSOUND *,
             char type, const MYFLT *pFields, long numFields);
 
+    PUBLIC int csoundScoreEventAbsolute(CSOUND *,
+            char type, const MYFLT *pfields, long numFields, double time_ofs);
+
     /*
      * MIDI
      */
@@ -1415,7 +1418,7 @@ extern "C" {
 # define CSOUND_SPIN_UNLOCK csoundSpinUnLock(&spinlock);
 
 #elif defined(MACOSX)
-  
+
 #ifndef SWIG
 
 #include <libkern/OSAtomic.h>
@@ -1968,4 +1971,3 @@ extern "C" {
 #endif
 
 #endif  /* CSOUND_H */
-
diff --git a/H/csound.hpp b/H/csound.hpp
index b3dbbe4..89b8a1e 100644
--- a/H/csound.hpp
+++ b/H/csound.hpp
@@ -454,6 +454,11 @@ public:
   {
     return csoundScoreEvent(csound, type, pFields, numFields);
   }
+  virtual int ScoreEventAbsolute(char type, const MYFLT *pFields,
+				 long numFields, double time_ofs)
+  {
+    return csoundScoreEventAbsolute(csound, type, pFields, numFields, time_ofs);
+  }
   // MIDI
   virtual void SetExternalMidiInOpenCallback(
       int (*func)(CSOUND *, void **, const char *))
diff --git a/H/csoundCore.h b/H/csoundCore.h
index 3231c07..d833264 100644
--- a/H/csoundCore.h
+++ b/H/csoundCore.h
@@ -35,7 +35,7 @@
 #endif /* PARCS */
 #include <stdarg.h>
 #include <setjmp.h>
- 
+
 /*
 #include <sndfile.h>
 JPff:  But this gives warnings in many files as rewriteheader expects
@@ -798,6 +798,8 @@ typedef struct {
                                                      MYFLT value));
     int (*ScoreEvent)(CSOUND *,
                       char type, const MYFLT *pFields, long numFields);
+    int (*ScoreEventAbsolute)(CSOUND *,
+                      char type, const MYFLT *pFields, long numFields, double time_ofs);
     void (*SetExternalMidiInOpenCallback)(CSOUND *,
                 int (*func)(CSOUND *, void **, const char *));
     void (*SetExternalMidiReadCallback)(CSOUND *,
@@ -1062,12 +1064,12 @@ typedef struct {
     /** start time of current section    */
     double        timeOffs, beatOffs;
     /** current time in seconds, inc. per kprd */
-    long          icurTime;   /* Current time in samples */
+    int64_t       icurTime;   /* Current time in samples */
     double        curTime_inc;
     /** current time in beats, inc per kprd */
     double        curBeat, curBeat_inc;
     /** beat time = 60 / tempo           */
-    long          ibeatTime;   /* Beat time in samples */
+    int64_t       ibeatTime;   /* Beat time in samples */
 #if defined(HAVE_PTHREAD_SPIN_LOCK) && defined(PARCS)
     pthread_spinlock_t spoutlock, spinlock;
 #else
@@ -1186,7 +1188,7 @@ typedef struct {
     EVTNODE       *OrcTrigEvts;             /* List of events to be started */
     EVTNODE       *freeEvtNodes;
     int           csoundIsScorePending_;
-    int           advanceCnt;
+    int64_t       advanceCnt;
     int           initonly;
     int           evt_poll_cnt;
     int           evt_poll_maxcnt;
@@ -1209,7 +1211,7 @@ typedef struct {
     void          **cfgVariableDB;
     double        prvbt, curbt, nxtbt;
     double        curp2, nxtim;
-    int           cyclesRemaining;
+    int64_t       cyclesRemaining;
     EVTBLK        evt;
     void          *memalloc_db;
     MGLOBAL       *midiGlobals;
@@ -1347,7 +1349,7 @@ typedef struct {
     struct global_var_lock_t **global_var_lock_cache;
     int           global_var_lock_count;
     int           opcode_weight_cache_ctr;
-    struct opcode_weight_cache_entry_t 
+    struct opcode_weight_cache_entry_t
                   *opcode_weight_cache[OPCODE_WEIGHT_CACHE_SIZE];
     int           opcode_weight_have_cache;
     struct        dag_cache_entry_t *cache[DAG_2_CACHE_SIZE];
@@ -1381,11 +1383,11 @@ typedef struct {
 
 #define LINKAGE1(name)                                         \
 long name##_init(CSOUND *csound, OENTRY **ep)           \
-{   (void) csound; *ep = name; return (long) (sizeof(name));  } 
+{   (void) csound; *ep = name; return (long) (sizeof(name));  }
 
 #define FLINKAGE1(name)                                                 \
 NGFENS* name##_init(CSOUND *csound)                         \
-{   (void) csound; return name;                                     } 
+{   (void) csound; return name;                                     }
 
 #ifdef __cplusplus
 }
diff --git a/H/entry1.h b/H/entry1.h
index 7e84640..455d072 100644
--- a/H/entry1.h
+++ b/H/entry1.h
@@ -316,7 +316,7 @@ int     lp2_set(CSOUND *, void *), lp2(CSOUND *, void *);
 int     phaser2set(CSOUND *, void *), phaser2(CSOUND *, void *);
 int     phaser1set(CSOUND *, void *), phaser1(CSOUND *, void *);
 int     balnset(CSOUND *, void *), balance(CSOUND *, void *);
-int     prealloc(CSOUND *, void *);
+int     prealloc(CSOUND *, void *), active_alloc(CSOUND*, void*);
 int     cpsxpch(CSOUND *, void *), cps2pch(CSOUND *, void *);
 int     cpstmid(CSOUND *, void *);
 int     cpstun(CSOUND *, void *), cpstun_i(CSOUND *, void *);
diff --git a/H/interlocks.h b/H/interlocks.h
index 8d0328d..b5b9a5c 100644
--- a/H/interlocks.h
+++ b/H/interlocks.h
@@ -34,6 +34,6 @@
 #define CB (0x3000)
 
 #define SB (0x4000)
+#define _QQ (0x8000)
 
-#define DP (0x8000)
 
diff --git a/H/prototyp.h b/H/prototyp.h
index bcfaa07..44d7ee0 100644
--- a/H/prototyp.h
+++ b/H/prototyp.h
@@ -103,7 +103,7 @@ int     csoundCheckOpcodePluginFile(CSOUND *, const char *);
 int     csoundLoadAllPluginOpcodes(CSOUND *);
 int     csoundLoadAndInitModule(CSOUND *, const char *);
 void    csoundNotifyFileOpened(CSOUND *, const char *, int, int, int);
-int     insert_score_event_at_sample(CSOUND *, EVTBLK *, long);
+int     insert_score_event_at_sample(CSOUND *, EVTBLK *, int64_t);
 
 /**
  * Register a function to be called at note deactivation.
diff --git a/H/soundio.h b/H/soundio.h
index c64522b..fe0d288 100644
--- a/H/soundio.h
+++ b/H/soundio.h
@@ -32,6 +32,9 @@
 #elif defined(NeXT) || defined(__MACH__)
 #define IOBUFSAMPS   1024   /* default sampframes in audio iobuf, -b settable */
 #define IODACSAMPS   4096   /* default samps in hardware buffer,  -B settable */
+#elif defined(ANDROID)
+#define IOBUFSAMPS   2048   /* default sampframes in audio iobuf, -b settable */
+#define IODACSAMPS   4096   /* default samps in hardware buffer,  -B settable */
 #else
 #define IOBUFSAMPS   256    /* default sampframes in audio iobuf, -b settable */
 #define IODACSAMPS   1024   /* default samps in hardware buffer,  -B settable */
diff --git a/H/version.h b/H/version.h
index 55a12d2..3a69332 100644
--- a/H/version.h
+++ b/H/version.h
@@ -24,7 +24,7 @@
 #ifndef CSOUND_VERSION_H
 #define CSOUND_VERSION_H
 
-#define VERSION "5.16"
+#define VERSION "5.17"
 
 /* Define to the full name of this package. */
 #ifndef PARCS
@@ -46,7 +46,7 @@
 /* Define to the version of this package. */
 #define CS_PACKAGE_VERSION  VERSION
 #define CS_VERSION          (5)
-#define CS_SUBVER           (16)
+#define CS_SUBVER           (17)
 #define CS_PATCHLEVEL       (6)
 
 #define CS_APIVERSION       2   /* should be increased anytime a new version
diff --git a/How_to_Build_Csound_on_Windows.doc b/How_to_Build_Csound_on_Windows.doc
index 9c0d095..3dcb646 100644
Binary files a/How_to_Build_Csound_on_Windows.doc and b/How_to_Build_Csound_on_Windows.doc differ
diff --git a/InOut/FL_graph.cpp b/InOut/FL_graph.cpp
index 1ec008d..a557fbe 100644
--- a/InOut/FL_graph.cpp
+++ b/InOut/FL_graph.cpp
@@ -72,7 +72,7 @@ typedef struct {
 
 #define ST(x)   (((FLGRAPH_GLOBALS*) csound->flgraphGlobals)->x)
 
-/*void printouts(CSOUND *csound){ 
+/*void printouts(CSOUND *csound){
     csound->Message(csound, "menu object: %p\n", ST(menu));
     csound->Message(csound, "form object: %p\n", ST(form));
     csound->Message(csound, "graph object: %p\n", ST(graph));
@@ -82,8 +82,8 @@ typedef struct {
 
 void flgraph_init(CSOUND *csound)
 {
-  
-    if (csound->flgraphGlobals==NULL) {  
+
+    if (csound->flgraphGlobals==NULL) {
       csound->flgraphGlobals =
         (FLGRAPH_GLOBALS*) csound->Malloc(csound,sizeof(FLGRAPH_GLOBALS));
     }
@@ -93,12 +93,12 @@ void flgraph_init(CSOUND *csound)
       ST(graph) = (graph_box *) 0;
       ST(menu) = (Fl_Menu_Item *) 0;
       ST(graph_created) = 0;
-     
+
 
       /*ST(menu) =  (Fl_Menu_Item*) csound->Calloc(csound,
         sizeof(Fl_Menu_Item)*(1+NUMOFWINDOWS));*/
       /* VL: moved menu object to be built at each new compilation */
- 
+
 }
 
 /* static  graph_box   *graph = (graph_box *) 0; */
@@ -203,12 +203,12 @@ void add_graph(CSOUND *csound, WINDAT *wdptr)
     int    m;
     WINDAT *old;
     int    replacing = 0;
-    
+
     memcpy(n, wdptr, sizeof(WINDAT));
     n->fdata = (MYFLT*) malloc(n->npts * sizeof(MYFLT));
     memcpy(n->fdata, wdptr->fdata, n->npts * sizeof(MYFLT));
 
- 
+
     for (m = 0; m < NUMOFWINDOWS; m++) {  // If text the same use slot
       if(ST(menu) != NULL) {
        if (ST(menu)[m].text != NULL && wdptr->caption != NULL){
@@ -225,7 +225,7 @@ void add_graph(CSOUND *csound, WINDAT *wdptr)
     if (m >= NUMOFWINDOWS)
       m = ST(graph)->last = 0;
  replace:
-    
+
     old = (WINDAT*)ST(menu)[m].user_data_;
     if (old) {
       free((void*) old->fdata);
@@ -238,11 +238,11 @@ void add_graph(CSOUND *csound, WINDAT *wdptr)
       ST(menu)[m].text = (const char*) malloc(strlen(n->caption) + 1);
       strcpy((char*) ST(menu)[m].text, n->caption);
     }
-    
-    
+
+
     // ST(graph)->curr = m;
     //  ST(choice)->value(m);
-    
+
     ST(graph)->curr = ST(choice)->value();  /* VL: 29.04.09 fix */
     ST(graph)->redraw();
 }
@@ -258,10 +258,10 @@ void makeWindow(CSOUND *csound, char *name)
 {
     if (ST(form))
       return;
-    
+
     ST(form) = new Fl_Window(WIDTH, HEIGHT, name);
     ST(menu) = new Fl_Menu_Item[1+NUMOFWINDOWS];
-    memset(ST(menu), 0, sizeof(Fl_Menu_Item)*(1+NUMOFWINDOWS));    
+    memset(ST(menu), 0, sizeof(Fl_Menu_Item)*(1+NUMOFWINDOWS));
     ST(choice) = new Fl_Choice(140, 0, 140, 20, "Choose Graph");
     ST(choice)->menu(ST(menu));
     ST(choice)->value(0);
@@ -274,7 +274,7 @@ void makeWindow(CSOUND *csound, char *name)
     ST(form)->resizable(ST(graph));
     ST(form)->end();
     ST(graph_created) = 1;
-     
+
 }
 
 void graphs_reset(CSOUND * csound){
@@ -285,19 +285,19 @@ extern "C" {
 
   void DrawGraph_FLTK(CSOUND *csound, WINDAT *wdptr)
   {
-   
+
       add_graph(csound, wdptr);
       csound->CheckEvents(csound);
   }
 
   uintptr_t MakeWindow_FLTK(CSOUND *csound, char *name)
   {
- 
+
       if (ST(form) == NULL) {
         makeWindow(csound, name);
         ST(form)->show();
       }
-      
+
       return (uintptr_t) ST(form);
   }
 
@@ -331,41 +331,41 @@ extern "C" {
   int ExitGraph_FLTK(CSOUND *csound)
   {
       if (ST(form) && ST(graph_created) == 1) {
-          
+
         if (ST(form)->shown() && !(getFLTKFlags(csound) & 256)) {
         const char *env = csound->GetEnv(csound, "CSNOSTOP");
         if (env == NULL || strcmp(env, "yes") != 0) {
           ST(end)->show();
-           // print click-Exit message in most recently active window 
+           // print click-Exit message in most recently active window
           while (ST(end)->value() == 0 && ST(form)->shown()) {
             Fl_wait_locked(csound, 0.03);
           }
           }
          }
 
-        delete ST(form); 
+        delete ST(form);
         ST(form) = (Fl_Window *) 0;
         Fl_wait_locked(csound, 0.0);
-        
+
       ST(choice) = (Fl_Choice *) 0;
       ST(graph) = (graph_box *) 0;
       ST(end) = (Fl_Button *) 0;
       ST(graph_created) = 0;
-      
+
        for (int i = 0; i < NUMOFWINDOWS; i++) {
         WINDAT *n = (WINDAT*) ST(menu)[i].user_data_;
         if (n)
           kill_graph(csound, (uintptr_t) ((void*) n));
-          } 
+          }
        if(ST(menu)){
              delete ST(menu);
              ST(menu) = (Fl_Menu_Item *) 0;
        }
-       
-       
-       
+
+
+
       }
-     
+
       return 0;
   }
 
@@ -456,9 +456,8 @@ extern "C" {
 
   void KillXYin_FLTK(CSOUND *csound, XYINDAT *wdptr)
   {
-    
+
       delete ((Fl_Window*) wdptr->windid);
       wdptr->windid = (uintptr_t) 0;
   }
 }
-
diff --git a/InOut/cmidi.c b/InOut/cmidi.c
index 8917e15..b168b0d 100644
--- a/InOut/cmidi.c
+++ b/InOut/cmidi.c
@@ -24,7 +24,7 @@
 /* Realtime MIDI using coremidi */
 
 
-#include <CoreMidi/CoreMidi.h>
+#include <CoreMIDI/CoreMIDI.h>
 #include <CoreAudio/HostTime.h>
 #include <CoreFoundation/CoreFoundation.h>
 #include "csdl.h"                               /*      CMIDI.C         */
@@ -55,94 +55,97 @@ typedef struct _cdata {
 
 
 /* coremidi callback, called when MIDI data is available */
-void ReadProc(const MIDIPacketList *pktlist, void *refcon, void *srcConnRefCon){
- 
-  cdata *data = (cdata *)refcon;  
-  MIDIdata *mdata = data->mdata; 
-  int *p = &data->p, i, j;
-  MIDIPacket *packet = &((MIDIPacketList *)pktlist)->packet[0];
-  Byte *curpack;
-  
- for (i = 0; i < pktlist->numPackets; i++) {
-   for(j=0; j < packet->length; j+=3){
-    curpack = packet->data+j;
-    memcpy(&mdata[*p], curpack, 3);
-    mdata[*p].flag = 1;
-    (*p)++;
-    if(*p == DSIZE) *p = 0;
- }
-    packet = MIDIPacketNext(packet);
-  } 
+void ReadProc(const MIDIPacketList *pktlist, void *refcon, void *srcConnRefCon)
+{
+    cdata *data = (cdata *)refcon;
+    MIDIdata *mdata = data->mdata;
+    int *p = &data->p, i, j;
+    MIDIPacket *packet = &((MIDIPacketList *)pktlist)->packet[0];
+    Byte *curpack;
+
+    for (i = 0; i < pktlist->numPackets; i++) {
+      for (j=0; j < packet->length; j+=3) {
+        curpack = packet->data+j;
+        memcpy(&mdata[*p], curpack, 3);
+        mdata[*p].flag = 1;
+        (*p)++;
+        if(*p == DSIZE) *p = 0;
+      }
+      packet = MIDIPacketNext(packet);
+    }
 
 }
 
-/* csound MIDI input open callback, sets the device for input */ 
+/* csound MIDI input open callback, sets the device for input */
 static int MidiInDeviceOpen(CSOUND *csound, void **userData, const char *dev)
 {
-     int k, endpoints, dest;
-     CFStringRef name = NULL, cname = NULL, pname = NULL;
-     CFStringEncoding defaultEncoding = CFStringGetSystemEncoding();
-     MIDIClientRef mclient = (MIDIClientRef) 0;
-     MIDIPortRef mport =  (MIDIPortRef) 0;
-     MIDIEndpointRef endpoint;
-     MIDIdata *mdata = (MIDIdata *) malloc(DSIZE*sizeof(MIDIdata));
-     OSStatus ret;
-     cdata *refcon = (cdata *) malloc(sizeof(cdata));
-     memset(mdata, 0, sizeof(MIDIdata)*DSIZE);
-     refcon->mdata = mdata;
-     refcon->p = 0;
-     refcon->q = 0;
-     
-     /* MIDI client */
-     cname = CFStringCreateWithCString(NULL, "my client", defaultEncoding);
-     ret = MIDIClientCreate(cname, NULL, NULL, &mclient);
-     if(!ret){
+    int k, endpoints, dest;
+    CFStringRef name = NULL, cname = NULL, pname = NULL;
+    CFStringEncoding defaultEncoding = CFStringGetSystemEncoding();
+    MIDIClientRef mclient = (MIDIClientRef) 0;
+    MIDIPortRef mport =  (MIDIPortRef) 0;
+    MIDIEndpointRef endpoint;
+    MIDIdata *mdata = (MIDIdata *) malloc(DSIZE*sizeof(MIDIdata));
+    OSStatus ret;
+    cdata *refcon = (cdata *) malloc(sizeof(cdata));
+    memset(mdata, 0, sizeof(MIDIdata)*DSIZE);
+    refcon->mdata = mdata;
+    refcon->p = 0;
+    refcon->q = 0;
+
+    /* MIDI client */
+    cname = CFStringCreateWithCString(NULL, "my client", defaultEncoding);
+    ret = MIDIClientCreate(cname, NULL, NULL, &mclient);
+    if(!ret){
       /* MIDI input port */
-       pname = CFStringCreateWithCString(NULL, "inport", defaultEncoding);
-       ret = MIDIInputPortCreate(mclient, pname, ReadProc, refcon, &mport);
-       if(!ret){
-         /* sources, we connect to all available input sources */
+      pname = CFStringCreateWithCString(NULL, "inport", defaultEncoding);
+      ret = MIDIInputPortCreate(mclient, pname, ReadProc, refcon, &mport);
+      if(!ret){
+        /* sources, we connect to all available input sources */
         endpoints = MIDIGetNumberOfSources();
         csound->Message(csound, "%d MIDI sources in system \n", endpoints);
-        if(!strcmp(dev,"all")) { 
-        csound->Message(csound, "receiving from all sources \n");
-        for(k=0; k < endpoints; k++){
-          endpoint = MIDIGetSource(k);
-          long srcRefCon = (long) endpoint;
-          MIDIPortConnectSource(mport, endpoint, (void *) srcRefCon);
-          MIDIObjectGetStringProperty(endpoint, kMIDIPropertyName, &name);
-          csound->Message(csound, "connecting midi device %d: %s \n", k,
-                        CFStringGetCStringPtr(name, defaultEncoding)); 
-         }
+        if(!strcmp(dev,"all")) {
+          csound->Message(csound, "receiving from all sources \n");
+          for(k=0; k < endpoints; k++){
+            endpoint = MIDIGetSource(k);
+            long srcRefCon = (long) endpoint;
+            MIDIPortConnectSource(mport, endpoint, (void *) srcRefCon);
+            MIDIObjectGetStringProperty(endpoint, kMIDIPropertyName, &name);
+            csound->Message(csound, "connecting midi device %d: %s \n", k,
+                            CFStringGetCStringPtr(name, defaultEncoding));
+          }
         }
         else{
           k = atoi(dev);
           if(k < endpoints){
-          endpoint = MIDIGetSource(k);
-          long srcRefCon = (long) endpoint;
-          MIDIPortConnectSource(mport, endpoint, (void *) srcRefCon);
-          MIDIObjectGetStringProperty(endpoint, kMIDIPropertyName, &name);
-          csound->Message(csound, "connecting midi device %d: %s \n", k,
-                        CFStringGetCStringPtr(name, defaultEncoding));
+            endpoint = MIDIGetSource(k);
+            long srcRefCon = (long) endpoint;
+            MIDIPortConnectSource(mport, endpoint, (void *) srcRefCon);
+            MIDIObjectGetStringProperty(endpoint, kMIDIPropertyName, &name);
+            csound->Message(csound, "connecting midi device %d: %s \n", k,
+                            CFStringGetCStringPtr(name, defaultEncoding));
           }
-          else csound->Message(csound, "MIDI device number %d is out-of-range, not connected \n", k);         
+          else
+            csound->Message(csound,
+                            "MIDI device number %d is out-of-range, "
+                            "not connected \n", k);
         }
 
-       }
-     }
-     refcon->mclient = mclient;
-     *userData = (void*) refcon;
+      }
+    }
+    refcon->mclient = mclient;
+    *userData = (void*) refcon;
     if(name) CFRelease(name);
     if(pname) CFRelease(pname);
-    if(cname) CFRelease(cname); 
+    if(cname) CFRelease(cname);
     /* report success */
     return 0;
 }
 
 static int MidiOutDeviceOpen(CSOUND *csound, void **userData, const char *dev)
 {
-  /*stub for the moment */
-  csound->Message(csound, "output not implemented yet in CoreMIDI \n");
+    /*stub for the moment */
+    csound->Message(csound, "output not implemented yet in CoreMIDI \n");
     return 0;
 }
 
@@ -159,43 +162,43 @@ static int MidiDataRead(CSOUND *csound, void *userData,
 
     /* check if there is new data in circular queue */
     while (mdata[*q].flag) {
-          st = (int) mdata[*q].status;
-          d1 = (int) mdata[*q].data1;
-          d2 = (int) mdata[*q].data2;
-         
-          if (st < 0x80) goto next;
-          
-          if (st >= 0xF0 &&
-              !(st == 0xF8 || st == 0xFA || st == 0xFB ||
-                st == 0xFC || st == 0xFF)) goto next;
-
-          nbytes -= (datbyts[(st - 0x80) >> 4] + 1);
-          if (nbytes < 0) break;
-
-          /* write to csound midi buffer */
-          n += (datbyts[(st - 0x80) >> 4] + 1);
-          switch (datbyts[(st - 0x80) >> 4]) {
-            case 0:
-              *mbuf++ = (unsigned char) st;
-              break;
-            case 1:
-              *mbuf++ = (unsigned char) st;
-              *mbuf++ = (unsigned char) d1;
-              break;
-            case 2:
-              *mbuf++ = (unsigned char) st;
-              *mbuf++ = (unsigned char) d1;
-              *mbuf++ = (unsigned char) d2;
-              break;
-              } 
-          /* mark as read */
-    next:
-          mdata[*q].flag = 0;
-          (*q)++;
-          if(*q==DSIZE) *q = 0;
-         
+      st = (int) mdata[*q].status;
+      d1 = (int) mdata[*q].data1;
+      d2 = (int) mdata[*q].data2;
+
+      if (st < 0x80) goto next;
+
+      if (st >= 0xF0 &&
+          !(st == 0xF8 || st == 0xFA || st == 0xFB ||
+            st == 0xFC || st == 0xFF)) goto next;
+
+      nbytes -= (datbyts[(st - 0x80) >> 4] + 1);
+      if (nbytes < 0) break;
+
+      /* write to csound midi buffer */
+      n += (datbyts[(st - 0x80) >> 4] + 1);
+      switch (datbyts[(st - 0x80) >> 4]) {
+      case 0:
+        *mbuf++ = (unsigned char) st;
+        break;
+      case 1:
+        *mbuf++ = (unsigned char) st;
+        *mbuf++ = (unsigned char) d1;
+        break;
+      case 2:
+        *mbuf++ = (unsigned char) st;
+        *mbuf++ = (unsigned char) d1;
+        *mbuf++ = (unsigned char) d2;
+        break;
       }
-    
+      /* mark as read */
+    next:
+      mdata[*q].flag = 0;
+      (*q)++;
+      if(*q==DSIZE) *q = 0;
+
+    }
+
     /* return the number of bytes read */
     return n;
 }
@@ -213,7 +216,7 @@ static int MidiInDeviceClose(CSOUND *csound, void *userData)
 static int MidiDataWrite(CSOUND *csound, void *userData,
                           const unsigned char *mbuf, int nbytes)
 {
-  /* stub at the moment */
+    /* stub at the moment */
     return nbytes;
 }
 
@@ -221,7 +224,7 @@ static int MidiDataWrite(CSOUND *csound, void *userData,
 
 static int MidiOutDeviceClose(CSOUND *csound, void *userData)
 {
-  /* sutb at the mement */
+    /* stub at the mement */
     return 0;
 }
 
diff --git a/InOut/libsnd.c b/InOut/libsnd.c
index 4477421..0b35260 100644
--- a/InOut/libsnd.c
+++ b/InOut/libsnd.c
@@ -222,14 +222,14 @@ static void writesf_dither_16(CSOUND *csound, const MYFLT *outbuf, int nbytes)
       return;
 
     for (n=0; n<m; n++) {
-        int   tmp = ((ST(dither) * 15625) + 1) & 0xFFFF;
-        int   rnd = ((tmp * 15625) + 1) & 0xFFFF;
-        MYFLT result;
-        ST(dither) = rnd;
-        rnd = (rnd+tmp)>>1;           /* triangular distribution */
-        result = (MYFLT) (rnd - 0x8000)  / ((MYFLT) 0x10000);
-        result /= ((MYFLT) 0x7fff);
-        buf[n] += result;
+      int   tmp = ((ST(dither) * 15625) + 1) & 0xFFFF;
+      int   rnd = ((tmp * 15625) + 1) & 0xFFFF;
+      MYFLT result;
+      ST(dither) = rnd;
+      rnd = (rnd+tmp)>>1;           /* triangular distribution */
+      result = (MYFLT) (rnd - 0x8000)  / ((MYFLT) 0x10000);
+      result /= ((MYFLT) 0x7fff);
+      buf[n] += result;
     }
     n = (int) sf_write_MYFLT(ST(outfile), (MYFLT*) outbuf,
                              nbytes / sizeof(MYFLT)) * (int) sizeof(MYFLT);
diff --git a/InOut/midisend.c b/InOut/midisend.c
index 665ef97..6e631d4 100644
--- a/InOut/midisend.c
+++ b/InOut/midisend.c
@@ -191,7 +191,10 @@ void openMIDIout(CSOUND *csound)
     }
     p->midiOutFileData = (void *) fp;
     /* write header */
-    fwrite(&(midiOutFile_header[0]), (size_t)1, (size_t)22, fp->f);
+    if (UNLIKELY(fwrite(&(midiOutFile_header[0]),
+                        (size_t)1, (size_t)22, fp->f) != 22)) {
+      csound->Die(csound, "SHort write in MIDI\n");
+    }
 }
 
 void csoundCloseMidiOutFile(CSOUND *csound)
diff --git a/InOut/rtauhal.c b/InOut/rtauhal.c
index a011627..27d8954 100644
--- a/InOut/rtauhal.c
+++ b/InOut/rtauhal.c
@@ -21,7 +21,6 @@
   02111-1307 USA
 */
 
-#include <CoreMidi/CoreMidi.h>
 #include <AudioUnit/AudioUnit.h>
 #include <CoreAudio/AudioHardware.h>
 #include <CoreFoundation/CoreFoundation.h>
@@ -114,7 +113,7 @@ int AuHAL_open(CSOUND *csound, const csRtAudioParams * parm,
     psize = sizeof(AudioDeviceID);
     AudioObjectGetPropertyData(kAudioObjectSystemObject,
                                &prop, 0, NULL, &psize, &dev);
-    
+
     if(isInput) cdata->defdevin = dev;
     else cdata->defdevout = dev;
 
@@ -178,22 +177,22 @@ int AuHAL_open(CSOUND *csound, const csRtAudioParams * parm,
       bufframes = csound->GetInputBufferSize(csound)/nchnls;
     }
 
-    /* although the SR is set in the stream properties, 
+    /* although the SR is set in the stream properties,
        we also need to set the device to match */
     prop.mSelector = kAudioDevicePropertyNominalSampleRate;
     psize = sizeof(double);
     AudioObjectSetPropertyData(dev, &prop, 0, NULL, psize, &srate);
-    
+
     double sr;
     AudioObjectGetPropertyData(dev, &prop, 0, NULL, &psize, &sr);
     if(sr != srate) {
-       csound->Die(csound, 
+       csound->Die(csound,
             "could not set SR, tried %.1f, got %.1f \n", srate, sr);
-    } 
+    }
 
     HALOutput = AudioComponentFindNext(NULL, &cd);
     if(isInput){
-      AudioComponentInstanceNew(HALOutput, &(cdata->inunit));    
+      AudioComponentInstanceNew(HALOutput, &(cdata->inunit));
       enableIO = 1;
       AudioUnitSetProperty(cdata->inunit, kAudioOutputUnitProperty_EnableIO,
                            kAudioUnitScope_Input, 1, &enableIO, sizeof(enableIO));
@@ -203,7 +202,7 @@ int AuHAL_open(CSOUND *csound, const csRtAudioParams * parm,
       psize = sizeof(AudioDeviceID);
       /* for input, select device AFTER enabling IO */
       AudioUnitSetProperty(cdata->inunit,kAudioOutputUnitProperty_CurrentDevice,
-                           kAudioUnitScope_Global, isInput, &dev, psize); 
+                           kAudioUnitScope_Global, isInput, &dev, psize);
       aunit = &(cdata->inunit);
     } else {
       AudioComponentInstanceNew(HALOutput, &(cdata->outunit));
@@ -508,14 +507,14 @@ static void rtclose_(CSOUND *csound)
       };
       UInt32 psize = sizeof(AudioDeviceID);
       AudioObjectSetPropertyData(kAudioObjectSystemObject,
-                               &prop, 0, NULL, psize, &cdata->defdevin); 
+                               &prop, 0, NULL, psize, &cdata->defdevin);
       }
-      if(cdata->defdevout) { 
+      if(cdata->defdevout) {
       AudioObjectPropertyAddress prop = {
      kAudioHardwarePropertyDefaultOutputDevice,
       kAudioObjectPropertyScopeGlobal,
       kAudioObjectPropertyElementMaster
-      };   
+      };
       UInt32 psize = sizeof(AudioDeviceID);
       AudioObjectSetPropertyData(kAudioObjectSystemObject,
                                &prop, 0, NULL, psize, &cdata->defdevout);
diff --git a/InOut/rtpa.c b/InOut/rtpa.c
index e752907..20a0dcd 100644
--- a/InOut/rtpa.c
+++ b/InOut/rtpa.c
@@ -30,7 +30,7 @@
 #endif
 #include <portaudio.h>
 
-#define NO_FULLDUPLEX_PA_LOCK   0   
+#define NO_FULLDUPLEX_PA_LOCK   0
 
 typedef struct PaAlsaStreamInfo {
     unsigned long   size;
@@ -355,12 +355,12 @@ static int paBlockingReadWriteStreamCallback(const void *input,
     float   *paInput = (float*) input;
     float   *paOutput = (float*) output;
 
-   
+
     if (pabs->complete == 1) {
         return paComplete;
     }
-    
-#ifdef WIN32    
+
+#ifdef WIN32
 if (pabs->paStream == NULL
       || pabs->paused
 ) {
@@ -378,13 +378,13 @@ return paContinue;
       /*#  ifdef WIN32 */
       err = csound->WaitThreadLock(pabs->paLock, (size_t) pabs->paLockTimeout);
     /*#  else
-    err = csound->WaitThreadLock(pabs->paLock, (size_t) 500); 
+    err = csound->WaitThreadLock(pabs->paLock, (size_t) 500);
 #  endif
     #else
       csound->WaitThreadLock(pabs->paLock, (size_t) 500);
       err = 0;
      #endif*/
- 
+
     if (pabs->mode & 1) {
       int n = pabs->inBufSamples;
       int i = 0;
@@ -407,7 +407,7 @@ return paContinue;
         paClearOutputBuffer(pabs, paOutput);
       }
     }
-   
+
    paClearOutputBuffer(pabs, pabs->outputBuffer);
    csound->NotifyThreadLock(pabs->clientLock);
 
@@ -499,7 +499,7 @@ static int recopen_(CSOUND *csound, const csRtAudioParams *parm)
     *(p->GetRtRecordUserData(p)) = (void*) pabs;
 
     pabs->complete = 0;
-    
+
     return 0;
 }
 
@@ -523,7 +523,7 @@ static int playopen_(CSOUND *csound, const csRtAudioParams *parm)
     *(p->GetRtPlayUserData(p)) = (void*) pabs;
 
     pabs->complete = 0;
-    
+
     return (paBlockingReadWriteOpen(p));
 }
 
@@ -536,7 +536,7 @@ static void rtclose_(CSOUND *csound)
                                                              "_rtpaGlobals");
     if (pabs == NULL)
       return;
-   
+
     pabs->complete = 1;
 
     if (pabs->paStream != NULL) {
@@ -551,7 +551,7 @@ static void rtclose_(CSOUND *csound)
         csound->NotifyThreadLock(pabs->clientLock);
 //        Pa_Sleep(80);
       }
-      
+
       Pa_StopStream(stream);
       Pa_CloseStream(stream);
 //      Pa_Sleep(80);
@@ -833,4 +833,3 @@ PUBLIC int csoundModuleInfo(void)
 {
     return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int) sizeof(MYFLT));
 }
-
diff --git a/InOut/virtual_keyboard/FLTKKeyboardWidget.cpp b/InOut/virtual_keyboard/FLTKKeyboardWidget.cpp
index 08149de..c43f31c 100644
--- a/InOut/virtual_keyboard/FLTKKeyboardWidget.cpp
+++ b/InOut/virtual_keyboard/FLTKKeyboardWidget.cpp
@@ -135,12 +135,12 @@ FLTKKeyboardWidget::FLTKKeyboardWidget(CSOUND *csound,
     setProgramNames();
 
     octaveChoice->clear();
- 
+
     for(unsigned int i = 1; i < 8; i++) {
             octave[0] = i + 48;
             octaveChoice->add(octave);
     }
- 
+
     octaveChoice->value(4);
 
     this->bankChoice->callback((Fl_Callback*)bankChange, this);
diff --git a/InOut/virtual_keyboard/SliderBank.hpp b/InOut/virtual_keyboard/SliderBank.hpp
index cde4f6f..6dceb65 100644
--- a/InOut/virtual_keyboard/SliderBank.hpp
+++ b/InOut/virtual_keyboard/SliderBank.hpp
@@ -35,7 +35,7 @@ class WheelSlider: public Fl_Value_Slider
 {
     int handle(int);
 public:
-    WheelSlider(int x, int y, int w, int h, const char *l=0) : 
+    WheelSlider(int x, int y, int w, int h, const char *l=0) :
       Fl_Value_Slider (x,y,w,h,l) {}
 };
 
diff --git a/InOut/widgets.cpp b/InOut/widgets.cpp
index 994f349..ba58272 100644
--- a/InOut/widgets.cpp
+++ b/InOut/widgets.cpp
@@ -1094,8 +1094,14 @@ SNAPSHOT::SNAPSHOT (vector<ADDR_SET_VALUE>& valuators, int snapGroup)
         case LIN_:
         case EXP_:
           val = *p->kout;
-          if (val < min) val=min;
-          else if(val>max) val=max;
+          if (min < max) {
+            if (val < min) val=min;
+            else if(val>max) val=max;
+          }
+          else {
+            if (val < max) val=max;
+            else if(val>min) val=min;
+          }
           break;
         default: val = ((Fl_Valuator *)v.WidgAddress)->value();
         }
@@ -1115,8 +1121,14 @@ SNAPSHOT::SNAPSHOT (vector<ADDR_SET_VALUE>& valuators, int snapGroup)
           case LIN_: case EXP_:
             val = *fld->sldbnk[j].out;
             min = fld->sldbnk[j].min; max = fld->sldbnk[j].max;
-            if (val < min) val = min;
-            if (val > max) val = max;
+            if (min < max) {
+              if (val < min) val=min;
+              else if(val>max) val=max;
+            }
+            else {
+              if (val < max) val=max;
+              else if(val>min) val=min;
+            }
             break;
           default:
             val = ((Fl_Valuator *) ((Fl_Group*)v.WidgAddress)->
@@ -1138,8 +1150,14 @@ SNAPSHOT::SNAPSHOT (vector<ADDR_SET_VALUE>& valuators, int snapGroup)
           case LIN_: case EXP_:
             val = *fld->sldbnk[j].out;
             min = fld->sldbnk[j].min; max = fld->sldbnk[j].max;
-            if (val < min) val = min;
-            if (val > max) val = max;
+            if (min < max) {
+              if (val < min) val=min;
+              else if(val>max) val=max;
+            }
+            else {
+              if (val < max) val=max;
+              else if(val>min) val=min;
+            }
             break;
           default:
             val = ((Fl_Valuator *) ((Fl_Group*) v.WidgAddress)->child(j))->value();
@@ -1156,8 +1174,14 @@ SNAPSHOT::SNAPSHOT (vector<ADDR_SET_VALUE>& valuators, int snapGroup)
         case LIN_:
         case EXP_:
           val = *p->kout;
-          if (val < min) val=min;
-          else if(val>max) val=max;
+          if (min < max) {
+            if (val < min) val=min;
+            else if(val>max) val=max;
+          }
+          else {
+            if (val < max) val=max;
+            else if(val>min) val=min;
+          }
           break;
         default: val = ((Fl_Valuator *)v.WidgAddress)->value();
         }
@@ -1172,8 +1196,14 @@ SNAPSHOT::SNAPSHOT (vector<ADDR_SET_VALUE>& valuators, int snapGroup)
         case LIN_:
         case EXP_:
           val = *p->kout;
-          if (val < min) val=min;
-          else if(val>max) val=max;
+          if (min < max) {
+            if (val < min) val=min;
+            else if(val>max) val=max;
+          }
+          else {
+            if (val < max) val=max;
+            else if(val>min) val=min;
+          }
           break;
         default: val = ((Fl_Valuator *)v.WidgAddress)->value();
         }
@@ -1183,8 +1213,14 @@ SNAPSHOT::SNAPSHOT (vector<ADDR_SET_VALUE>& valuators, int snapGroup)
         FLTEXT *p = (FLTEXT *) (v.opcode);
         fld->widg_name = GetString(csound, p->name, p->XSTRCODE);
         val = *p->kout; min = fld->min = *p->imin; max = fld->max = *p->imax;
-        if (val < min) val=min;
-        else if (val>max) val=max;
+        if (min < max) {
+          if (val < min) val=min;
+          else if(val>max) val=max;
+        }
+        else {
+          if (val < max) val=max;
+          else if(val>min) val=min;
+        }
         fld->value = val;
         fld->exp = LIN_;
       }
@@ -1197,8 +1233,14 @@ SNAPSHOT::SNAPSHOT (vector<ADDR_SET_VALUE>& valuators, int snapGroup)
         case LIN_:
         case EXP_:
           val = *p->koutx;
-          if (val < min) val=min;
-          else if(val>max) val=max;
+          if (min < max) {
+            if (val < min) val=min;
+            else if(val>max) val=max;
+          }
+          else {
+            if (val < max) val=max;
+            else if(val>min) val=min;
+          }
           break;
         default:
           val = ((Fl_Positioner *)v.WidgAddress)->xvalue();
@@ -1209,8 +1251,14 @@ SNAPSHOT::SNAPSHOT (vector<ADDR_SET_VALUE>& valuators, int snapGroup)
         switch (fld->exp2) {
         case LIN_: case EXP_:
           val = *p->kouty;
-          if (val < min) val=min;
-          else if(val>max) val=max;
+          if (min < max) {
+            if (val < min) val=min;
+            else if(val>max) val=max;
+          }
+          else {
+            if (val < max) val=max;
+            else if(val>min) val=min;
+          }
           break;
         default:
           val = ((Fl_Positioner *)v.WidgAddress)->yvalue();
@@ -1278,8 +1326,14 @@ int SNAPSHOT::get(vector<ADDR_SET_VALUE>& valuators, int snapGroup)
 
       MYFLT val = fld->value, valtab = fld->value, min=fld->min,
         max=fld->max, range,base;
-      if (val < min) val = min;
-      else if (val >max) val = max;
+      if (min < max) {
+        if (val < min) val = min;
+        else if (val >max) val = max;
+      }
+      else {
+        if (val < max) val=max;
+        else if(val>min) val=min;
+      }
 
       if (opcode_name == "FLjoy") {
         switch(fld->exp) {
@@ -1418,7 +1472,10 @@ int SNAPSHOT::get(vector<ADDR_SET_VALUE>& valuators, int snapGroup)
         case LIN_:
           if (opcode_name == "FLbox" || opcode_name == "FLvalue" ) continue;
           else if (opcode_name == "FLtext" &&
-                   *((FLTEXT *)opcode)->itype == 1) continue;
+                   *((FLTEXT *)opcode)->itype == 1) {
+            ((Fl_Valuator*) o)->value(val);
+            continue;
+          }
           ((Fl_Valuator*) o)->value(val);
           break;
         case EXP_:
@@ -1519,7 +1576,7 @@ extern "C" {
           Fl_lock(csound);
           n = fl_choice("%s", Str("Saving could overwrite the old file.\n"
                                   "Are you sure you want to save ?"),
-                        Str("No"), Str("Yes"), (char*)NULL); // should thing be "" ?
+                        Str("No"), Str("Yes"), (const char*)""); // used to be NULL
           Fl_unlock(csound);
           if (!n)
             return OK;
@@ -2682,11 +2739,12 @@ extern "C" {
   {
       Fl_Pack *o = new Fl_Pack ((int) *p->ix, (int) *p->iy,
                                 (int) *p->iwidth, (int) *p->iheight);
-      Fl_Boxtype borderType;
+      Fl_Boxtype borderType = FL_FLAT_BOX;
       int iborder = (int)*p->iborder;
       // fl_window->resizable(o);
-      if (iborder<0 || iborder>7) borderType = FL_FLAT_BOX;
-      else borderType = BOX_TABLE[iborder];
+      if (!((iborder<0 || iborder>7)))
+          borderType = BOX_TABLE[iborder];
+      o->box(borderType);       // JPff added March 2012
       o->type((int)*p->itype);
       o->spacing((int)*p->ispace);
 
diff --git a/InOut/winEPS.c b/InOut/winEPS.c
index 6a1668c..ddcc6b1 100644
--- a/InOut/winEPS.c
+++ b/InOut/winEPS.c
@@ -193,7 +193,7 @@ static void setAxisNumbers(MYFLT *min, MYFLT *max, char *cmin, char *cmax)
 
     bmax = 0.0000001;
     if (fabs((double)*max) > bmax) {
-      while ((i = (int)(fabs(*max) / bmax)))
+      while ((i = (int)(FABS(*max) / bmax)))
         bmax = bmax * 10.0;
     }
     if (fabs(bmin) > fabs(bmax))
diff --git a/InOut/winFLTK.c b/InOut/winFLTK.c
index c6a4cec..3474bcd 100644
--- a/InOut/winFLTK.c
+++ b/InOut/winFLTK.c
@@ -103,7 +103,7 @@ PUBLIC int csoundModuleInit(CSOUND *csound)
            /* seemed to crash, but not anymore... */
           csound->RegisterResetCallback(csound, NULL, widget_reset);
           csound->Message(csound, "graph init \n");
-         
+
         }
 #ifdef LINUX
       }
@@ -150,4 +150,3 @@ PUBLIC int csoundModuleInfo(void)
 {
     return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int)sizeof(MYFLT));
 }
-
diff --git a/InOut/window.c b/InOut/window.c
index 5894fbd..eefd0c1 100644
--- a/InOut/window.c
+++ b/InOut/window.c
@@ -153,7 +153,7 @@ void display(CSOUND *csound, WINDAT *wdptr)   /* prepare a MYFLT array, then  */
     MYFLT   *fp, *fplim;
     MYFLT   max, min, absmax, fval;
     int     pol;
-     
+
     if (!csound->oparms->displays)  return;   /* displays disabled? return */
     fp = wdptr->fdata;
     fplim = fp + wdptr->npts;
@@ -177,7 +177,7 @@ void display(CSOUND *csound, WINDAT *wdptr)   /* prepare a MYFLT array, then  */
     else if (pol == (int16)POSPOL && min < FL(0.0)) pol = (int16)BIPOL;
     else if (pol == (int16)NEGPOL && max > FL(0.0)) pol = (int16)BIPOL;
     wdptr->polarity = pol;
-    
+
     /* now graph the function */
     csound->csoundDrawGraphCallback_(csound, wdptr);
 
@@ -186,4 +186,3 @@ void display(CSOUND *csound, WINDAT *wdptr)   /* prepare a MYFLT array, then  */
     if (csound->oparms->postscript)
       PS_DrawGraph(csound, wdptr);
 }
-
diff --git a/OOps/aops.c b/OOps/aops.c
index d5896e7..b6195e9 100644
--- a/OOps/aops.c
+++ b/OOps/aops.c
@@ -76,7 +76,7 @@ MYFLT csoundPow2(CSOUND *csound, MYFLT a){
 
 /*static inline MYFLT pow2(MYFLT a)
 {
-    int n = (int)MYFLT2LRND(a * FL(POW2TABSIZI)) + POW2MAX*POW2TABSIZI;  
+    int n = (int)MYFLT2LRND(a * FL(POW2TABSIZI)) + POW2MAX*POW2TABSIZI;
     return ((MYFLT) (1 << (n >> 12)) * powerof2[n & (POW2TABSIZI-1)]);
 }*/
 
@@ -162,7 +162,7 @@ typedef struct {
     OPDS    h;
     TABDAT  *tab;
 } TABDEL;
-  
+
 static int tabdel(CSOUND *csound, void *p)
 {
     TABDAT *t = ((TABDEL*)p)->tab;
@@ -177,7 +177,7 @@ int tinit(CSOUND *csound, INITT *p)
     MYFLT val = *p->value;
     TABDAT *t = p->a;
     int i;
- 
+
     t->size = size;
     mfree(csound, t->data);
     t->data = mmalloc(csound, sizeof(MYFLT)*(size+1));
@@ -195,7 +195,7 @@ int tassign(CSOUND *csound, ASSIGNT *p)
 {
     TABDAT *t = p->tab;
     int ind = MYFLT2LRND(*p->ind);
-    if (ind<0 || ind>t->size) 
+    if (ind<0 || ind>t->size)
       return csound->PerfError(csound,
                                Str("Index %d out of range [0,%d] in t[]\n"),
                                ind, t->size);
@@ -214,7 +214,7 @@ int tabref(CSOUND *csound, TABREF *p)
 {
     int ind = MYFLT2LRND(*p->ind);
     TABDAT *t = p->tab;
-     if (ind<0 || ind>t->size) 
+     if (ind<0 || ind>t->size)
       return csound->PerfError(csound,
                                Str("Index %d out of range [0,%d] in t[]\n"),
                                ind, t->size);
@@ -1804,7 +1804,7 @@ int is_NaNa(CSOUND *csound, ASSIGN *p)
     int k, nsmps = csound->ksmps;
     MYFLT *a = p->a;
     *p->r = FL(0.0);
-    for (k=0; k<nsmps; k++) 
+    for (k=0; k<nsmps; k++)
       *p->r += isnan(a[k]);
     return OK;
 }
diff --git a/OOps/bus.c b/OOps/bus.c
index 93955b9..2bf729d 100644
--- a/OOps/bus.c
+++ b/OOps/bus.c
@@ -547,7 +547,7 @@ static CS_NOINLINE int create_new_channel(CSOUND *csound, MYFLT **p,
     do {
       h = strhash_tabl_8[(unsigned char) *(s++) ^ h];
     } while (isalnum((unsigned char) *s) ||
-             *s == (char) '_' || *s == (char) '.');
+             *s == (char) '_' || *s == (char) '-' || *s == (char) '.');
     if (*s != (char) 0)
       return CSOUND_ERROR;
     /* create new empty database on first call */
@@ -1389,8 +1389,9 @@ int sensekey_perf(CSOUND *csound, KSENSE *p)
         retval = select(1, &rfds, NULL, NULL, &tv);
 
         if (retval) {
-          char    ch = (char) 0;
-          read(0, &ch, 1);
+          char    ch = '\0';
+          if (UNLIKELY(read(0, &ch, 1)!=1))
+            csound->Die(csound, "read failure in sensekey\n");
           keyCode = (int)((unsigned char) ch);
           /* FD_ISSET(0, &rfds) will be true. */
         }
diff --git a/OOps/cmath.c b/OOps/cmath.c
index 796ee2e..ded4f75 100644
--- a/OOps/cmath.c
+++ b/OOps/cmath.c
@@ -34,7 +34,7 @@ int ipow(CSOUND *csound, POW *p)        /*      Power for i-rate */
     MYFLT powerOf = *p->powerOf;
     if (UNLIKELY(in == FL(0.0) && powerOf == FL(0.0)))
       return csound->PerfError(csound, Str("NaN in pow\n"));
-    else if (p->norm!=NULL)
+    else if (p->norm!=NULL && *p->norm != FL(0.0))
       *p->sr = POWER(in, powerOf) / *p->norm;
     else
       *p->sr = POWER(in, powerOf);
@@ -270,7 +270,7 @@ int auniform(CSOUND *csound, PRAND *p)  /* Uniform distribution */
     int n, nsmps = csound->ksmps;
     double  scale = (double)*p->arg1 * (1.0 / 4294967295.03125);
 
-    for (n=0; n>nsmps; n++) {
+    for (n=0; n<nsmps; n++) {
       out[n] = (MYFLT)((double)csoundRandMT(&(csound->randState_)) * scale);
     }
     return OK;
@@ -335,7 +335,7 @@ int kexprndi(CSOUND *csound, PRANDI *p)
     if (UNLIKELY(p->phs >= MAXLEN)) {         /* when phs overflows,  */
       p->phs &= PHMASK;                       /*      mod the phs     */
       p->num1 = p->num2;                      /*      & new num vals  */
-      p->num2 = exprand(csound, *p->arg1); 
+      p->num2 = exprand(csound, *p->arg1);
       p->dfdmax = (p->num2 - p->num1) / FMAXLEN;
     }
     return OK;
@@ -457,7 +457,7 @@ int kgaussi(CSOUND *csound, PRANDI *p)
     if (UNLIKELY(p->phs >= MAXLEN)) {           /* when phs overflows,  */
       p->phs &= PHMASK;                         /*      mod the phs     */
       p->num1 = p->num2;                        /*      & new num vals  */
-      p->num2 = gaussrand(csound, *p->arg1); 
+      p->num2 = gaussrand(csound, *p->arg1);
       p->dfdmax = (p->num2 - p->num1) / FMAXLEN;
     }
     return OK;
@@ -540,7 +540,7 @@ int kcauchyi(CSOUND *csound, PRANDI *p)
     if (UNLIKELY(p->phs >= MAXLEN)) {         /* when phs overflows,  */
       p->phs &= PHMASK;                       /*      mod the phs     */
       p->num1 = p->num2;                      /*      & new num vals  */
-      p->num2 = cauchrand(csound, *p->arg1); 
+      p->num2 = cauchrand(csound, *p->arg1);
       p->dfdmax = (p->num2 - p->num1) / FMAXLEN;
     }
     return OK;
@@ -706,4 +706,3 @@ int gen21_rand(FGDATA *ff, FUNC *ftp)
     }
     return OK;
 }
-
diff --git a/OOps/diskin2.c b/OOps/diskin2.c
index f4abff7..0066951 100644
--- a/OOps/diskin2.c
+++ b/OOps/diskin2.c
@@ -228,12 +228,14 @@ int diskin2_init(CSOUND *csound, DISKIN2 *p)
     p->fdch.fd = fd;
     fdrecord(csound, &(p->fdch));
     /* print file information */
-    csound->Message(csound, Str("diskin2: opened '%s':\n"
-                                "         %d Hz, %d channel(s), "
-                                "%ld sample frames\n"),
-                    csound->GetFileName(fd),
-                    (int)sfinfo.samplerate, (int)sfinfo.channels,
-                    (int32) sfinfo.frames);
+    if (UNLIKELY((csound->oparms_.msglevel & 7) == 7)) {
+      csound->Message(csound, Str("diskin2: opened '%s':\n"
+                                  "         %d Hz, %d channel(s), "
+                                  "%ld sample frames\n"),
+                      csound->GetFileName(fd),
+                      (int)sfinfo.samplerate, (int)sfinfo.channels,
+                      (int32) sfinfo.frames);
+    }
     /* check number of channels in file (must equal the number of outargs) */
     if (UNLIKELY(sfinfo.channels != p->nChannels)) {
       return csound->InitError(csound,
diff --git a/OOps/dumpf.c b/OOps/dumpf.c
index 0be1493..942d036 100644
--- a/OOps/dumpf.c
+++ b/OOps/dumpf.c
@@ -139,7 +139,7 @@ int kdmp4set(CSOUND *csound, KDUMP4 *p)
 
 static void nkdump(CSOUND *csound, MYFLT *kp, FILE *ofd, int format, int nk)
 {
-    char  buf1[128], outbuf[256];
+    char  buf1[256], outbuf[256];
     int   len = 0;
 
     switch(format) {               /* place formatted kvals into outbuf */
@@ -192,7 +192,9 @@ static void nkdump(CSOUND *csound, MYFLT *kp, FILE *ofd, int format, int nk)
       break;
     default: csound->Die(csound, Str("unknown kdump format"));
     }
-    fwrite(outbuf, 1, len, ofd);                /* now write the buffer */
+    if (UNLIKELY(fwrite(outbuf, len, 1, ofd)!=1)) { /* now write the buffer */
+      csound->PerfError(csound, Str("write failure in dumpk"));
+    }
 }
 
 int kdump(CSOUND *csound, KDUMP *p)
@@ -370,16 +372,15 @@ static void nkread(CSOUND *csound, MYFLT *kp, FILE *ifd, int format, int nk)
     case 1: {
       int8_t *bp = (int8_t*)inbuf;
       len = nk;
-      fread(inbuf, 1, len, ifd);        /* now read the buffer */
-      while (nk--) {
+      len = fread(inbuf, 1, len, ifd);        /* now read the buffer */
+      while (nk--)
         *kp++ = (MYFLT)*bp++;
-        break;
-      }
+      break;
     }
     case 4: {
       int16_t *bp = (int16_t*)inbuf;
       len = nk * 2;
-      fread(inbuf, 1, len, ifd);        /* now read the buffer */
+      len = fread(inbuf, 1, len, ifd);        /* now read the buffer */
       while (nk--)
         *kp++ = (MYFLT)*bp++;
       break;
@@ -387,7 +388,7 @@ static void nkread(CSOUND *csound, MYFLT *kp, FILE *ifd, int format, int nk)
     case 5: {
       int32_t *bp = (int32_t*)inbuf;
       len = nk * 4;
-      fread(inbuf, 1, len, ifd);        /* now read the buffer */
+      len = fread(inbuf, 1, len, ifd);        /* now read the buffer */
       while (nk--)
         *kp++ = (MYFLT)*bp++;
       break;
@@ -395,7 +396,7 @@ static void nkread(CSOUND *csound, MYFLT *kp, FILE *ifd, int format, int nk)
     case 6: {
       float *bp = (float*)inbuf;
       len = nk * sizeof(float);
-      fread(inbuf, 1, len, ifd);        /* now read the buffer */
+      len = fread(inbuf, 1, len, ifd);        /* now read the buffer */
       while (nk--)
         *kp++ = (MYFLT)*bp++;
       break;
@@ -538,7 +539,9 @@ int kreads(CSOUND *csound, KREADS *p)
 {
     if (--p->countdown <= 0) {
       p->countdown = p->timcount;
-      fgets(p->lasts, csound->strVarMaxLen,  p->f);
+      if (UNLIKELY(fgets(p->lasts, csound->strVarMaxLen,  p->f)==NULL)) {
+        csound->PerfError(csound, "Read failure in readks");
+      }
     }
     strncpy((char*) p->str, p->lasts, csound->strVarMaxLen);
     return OK;
diff --git a/OOps/goto_ops.c b/OOps/goto_ops.c
index 7ff9b4c..e0b59f1 100644
--- a/OOps/goto_ops.c
+++ b/OOps/goto_ops.c
@@ -181,7 +181,7 @@ int turnoff2(CSOUND *csound, TURNOFF2 *p, int isStringArg)
 
     if (p1 <= FL(0.0))
       return OK;    /* not triggered */
-    
+
     insno = (int) p1;
     if (UNLIKELY(insno < 1 || insno > (int) csound->maxinsno ||
                  csound->instrtxtp[insno] == NULL)) {
@@ -318,4 +318,3 @@ int loop_ge_p(CSOUND *csound, LOOP_OPS *p)
       csound->pds = p->l->prvp;
     return OK;
 }
-
diff --git a/OOps/midiout.c b/OOps/midiout.c
index 5bbd61f..241391d 100644
--- a/OOps/midiout.c
+++ b/OOps/midiout.c
@@ -308,13 +308,13 @@ int out_controller (CSOUND *csound, OUT_CONTR *p)
       value =  (int)((*p->value - min) * FL(127.0) / (*p->max - min));
       value = (value < 128) ?  value : 127;
       value = (value > -1) ?  value : 0;
-      if (value != p->last_value || *p->chn != p->lastchn || *p->num != p->lastctrl) { 
+      if (value != p->last_value || *p->chn != p->lastchn || *p->num != p->lastctrl) {
         /* csound->Message(csound, "out contr value: %d\n", value); */
         control_change(csound, (int)*p->chn-1,(int)*p->num ,value);
         p->last_value = value;
         p->lastchn = *p->chn;
         p->lastctrl = *p->num;
-        } 
+        }
     }
     return OK;
 }
@@ -363,11 +363,11 @@ int out_progchange (CSOUND *csound, OUT_PCHG *p)
       prog_num =  (int)((*p->prog_num - min) * FL(127.0) / (*p->max - min));
       prog_num = prog_num < 128 ?  prog_num : 127;
       prog_num = prog_num > -1  ?  prog_num : 0;
-      if (prog_num != p->last_prog_num || *p->chn != p->lastchn) { 
+      if (prog_num != p->last_prog_num || *p->chn != p->lastchn) {
         program_change(csound, (int)*p->chn-1, prog_num);
         p->last_prog_num = prog_num;
         p->lastchn = *p->chn;
-        } 
+        }
     }
     return OK;
 }
@@ -392,7 +392,7 @@ int out_controller14 (CSOUND *csound, OUT_CONTR14 *p)
         p->last_value = value;
         p->lastchn = *p->chn;
         p->lastctrl = *p->msb_num;
-         } 
+         }
     }
     return OK;
 }
@@ -550,4 +550,3 @@ int mdelay(CSOUND *csound, MDELAY *p)                   /*gab-A6 fixed*/
     }
     return OK;
 }
-
diff --git a/OOps/pvsanal.c b/OOps/pvsanal.c
index 19d9577..1079e27 100644
--- a/OOps/pvsanal.c
+++ b/OOps/pvsanal.c
@@ -140,7 +140,7 @@ int pvssanalset(CSOUND *csound, PVSANAL *p)
       double *s = c+NB;
       p->cosine = c;
       p->sine = s;
-      c[0] = 1.0; s[0] = 0.0;
+      c[0] = 1.0; s[0] = 0.0; // assignment to s unnecessary as auxalloc zeros
         /*
           direct computation of c and s may be better for large n
           c[i] = cos(2*M_PI*i/n);
@@ -228,13 +228,13 @@ int pvsanalset(CSOUND *csound, PVSANAL *p)
     }
     /* get net amp */
     sum = FL(0.0);
-    
+
     for (i = -halfwinsize; i <= halfwinsize; i++)
       sum += *(analwinhalf + i);
     sum = FL(2.0) / sum;  /* factor of 2 comes in later in trig identity */
     for (i = -halfwinsize; i <= halfwinsize; i++)
       *(analwinhalf + i) *= sum;
-    
+
 
   /*    p->invR = (float)(FL(1.0) / csound->esr); */
     p->RoverTwoPi = (float)(p->arate / TWOPI_F);
@@ -384,7 +384,7 @@ static void generate_frame(CSOUND *csound, PVSANAL *p)
 
       /* add in filter center freq.*/
       /* *i1 */ anal[ii+1]  = angleDif * p->RoverTwoPi + ((MYFLT) i * p->Fexact);
-     
+
     }
     /* } */
     /* else must be PVOC_COMPLEX */
@@ -681,7 +681,7 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
     int32 halfwinsize,buflen;
     int i,nBins,Mf,Lf;
     double IO;
-      
+
     /* get params from input fsig */
     /* we TRUST they are legal */
     int32 N = p->fsig->N;
@@ -722,34 +722,34 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
     csound->AuxAlloc(csound, nBins * sizeof(MYFLT), &p->oldOutPhase);
     csound->AuxAlloc(csound, buflen * sizeof(MYFLT), &p->output);
 
-  
+
 
 
     synwinhalf = (MYFLT *) (p->synwinbuf.auxp) + halfwinsize;
- 
-    
-  
+
+
+
     /* synthesis windows */
     if (M <= N) {
       if (UNLIKELY(PVS_CreateWindow(csound, synwinhalf, wintype, M) != OK))
         return NOTOK;
-  
+
       for (i = 1; i <= halfwinsize; i++)
         *(synwinhalf - i) = *(synwinhalf + i - Lf);
-       
 
-       sum = FL(0.0); 
+
+       sum = FL(0.0);
         for (i = -halfwinsize; i <= halfwinsize; i++)
            sum += *(synwinhalf + i);
          sum = FL(2.0) / sum;
 
        for (i = -halfwinsize; i <= halfwinsize; i++)
         *(synwinhalf + i) *= sum;
-      
-         sum = FL(0.0); 
+
+         sum = FL(0.0);
    /* no timescaling, so I(nterpolation) will always = D(ecimation) = overlap */
         for (i = -halfwinsize; i <= halfwinsize; i+=overlap)
-          sum += *(synwinhalf + i) * *(synwinhalf + i); 
+          sum += *(synwinhalf + i) * *(synwinhalf + i);
     }
     else {
      /* have to make analysis window to get amp scaling */
@@ -761,8 +761,8 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
 
     for (i = 1; i <= halfwinsize; i++)
       analwinhalf[-i] = analwinhalf[i - Mf];
-    
-      // sinc function 
+
+      // sinc function
       if (Mf)
         *analwinhalf *= (MYFLT)(dN * sin(PI*0.5/dN) / ( PI*0.5));
       for (i = 1; i <= halfwinsize; i++)
@@ -770,9 +770,9 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
           (dN * sin((double)(PI*(i+0.5*Mf)/dN)) / (PI*(i+0.5*Mf)));
       for (i = 1; i <= halfwinsize; i++)
         *(analwinhalf - i) = *(analwinhalf + i - Mf);
-    
+
      /* get net amp */
-    sum = FL(0.0); 
+    sum = FL(0.0);
     for (i = -halfwinsize; i <= halfwinsize; i++)
     sum += *(analwinhalf + i);
     sum = FL(2.0) / sum;  /* factor of 2 comes in later in trig identity */
@@ -792,16 +792,16 @@ int pvsynthset(CSOUND *csound, PVSYNTH *p)
       for (i = 1; i <= halfwinsize; i++)
         *(synwinhalf - i) = *(synwinhalf + i - Lf);
     }
-   
-   
+
+
    if (!(N & (N - 1L)))
      sum = csound->GetInverseRealFFTScale(csound, (int) N) / sum;
     else
       sum = FL(1.0) / sum;
-   
+
   for (i = -halfwinsize; i <= halfwinsize; i++)
       *(synwinhalf + i) *= sum;
- 
+
 /*  p->invR = FL(1.0) / csound->esr; */
     p->RoverTwoPi = p->arate / TWOPI_F;
     p->TwoPioverR = TWOPI_F / p->arate;
@@ -1101,4 +1101,3 @@ static void vonhann(MYFLT *win, int winLen, int even)
         win[i] = (MYFLT)(0.5 + 0.5 * cos(ftmp*(double)i));
     }
 }
-
diff --git a/OOps/ugens1.c b/OOps/ugens1.c
index 1b82a3d..3795436 100644
--- a/OOps/ugens1.c
+++ b/OOps/ugens1.c
@@ -116,7 +116,7 @@ int lsgset(CSOUND *csound, LINSEG *p)
     MYFLT       **argp;
     double val;
 
-    nsegs = p->INOCOUNT >> 1;           /* count segs & alloc if nec */
+    nsegs = (p->INOCOUNT - (!(p->INOCOUNT & 1))) >> 1; /* count segs & alloc if nec */
     if ((segp = (SEG *) p->auxch.auxp) == NULL ||
         nsegs*sizeof(SEG) < (unsigned int)p->auxch.size) {
       csound->AuxAlloc(csound, (int32)nsegs*sizeof(SEG), &p->auxch);
@@ -341,8 +341,8 @@ int lsgrset(CSOUND *csound, LINSEG *p)
     int32 relestim;
     lsgset(csound,p);
     relestim = (p->cursegp + p->segsrem - 1)->cnt;
-    p->xtra = relestim;  /* VL 4-1-2011 was -1, making all linsegr 
-                            releases in an instr => xtratim 
+    p->xtra = relestim;  /* VL 4-1-2011 was -1, making all linsegr
+                            releases in an instr => xtratim
                             set to relestim seems to fix this */
     if (relestim > p->h.insdshead->xtratim)
       p->h.insdshead->xtratim = (int)relestim;
@@ -430,7 +430,7 @@ int xsgset(CSOUND *csound, EXXPSEG *p)
     MYFLT       d, **argp, val, dur, nxtval;
     int         n=0;
 
-    nsegs = p->INOCOUNT >> 1;                   /* count segs & alloc if nec */
+    nsegs = (p->INOCOUNT - (!(p->INOCOUNT & 1))) >> 1; /* count segs & alloc if nec */
     if ((segp = (XSEG *) p->auxch.auxp) == NULL ||
         nsegs*sizeof(XSEG) < (unsigned int)p->auxch.size) {
       csound->AuxAlloc(csound, (int32)nsegs*sizeof(XSEG), &p->auxch);
@@ -474,7 +474,7 @@ int xsgset_bkpt(CSOUND *csound, EXXPSEG *p)
     MYFLT       d, **argp, val, dur, dursum = FL(0.0), bkpt, nxtval;
     int         n=0;
 
-    nsegs = p->INOCOUNT >> 1;                   /* count segs & alloc if nec */
+    nsegs = (p->INOCOUNT - (!(p->INOCOUNT & 1))) >> 1; /* count segs & alloc if nec */
     if ((segp = (XSEG *) p->auxch.auxp) == NULL ||
         nsegs*sizeof(XSEG) < (unsigned int)p->auxch.size) {
       csound->AuxAlloc(csound, (int32)nsegs*sizeof(XSEG), &p->auxch);
@@ -524,7 +524,7 @@ int xsgset2b(CSOUND *csound, EXPSEG2 *p)
     MYFLT       d, **argp, val, dur, dursum = FL(0.0), bkpt, nxtval;
     int         n;
 
-    nsegs = p->INOCOUNT >> 1;           /* count segs & alloc if nec */
+    nsegs = (p->INOCOUNT - (!(p->INOCOUNT & 1))) >> 1; /* count segs & alloc if nec */
     if ((segp = (XSEG*) p->auxch.auxp) == NULL ||
         (unsigned int)nsegs*sizeof(XSEG) > (unsigned int)p->auxch.size) {
       csound->AuxAlloc(csound, (int32)nsegs*sizeof(XSEG), &p->auxch);
@@ -575,7 +575,7 @@ int xsgset2(CSOUND *csound, EXPSEG2 *p)   /*gab-A1 (G.Maldonado) */
     MYFLT       d, **argp, val, dur, nxtval;
     int         n;
 
-    nsegs = p->INOCOUNT >> 1;           /* count segs & alloc if nec */
+    nsegs = (p->INOCOUNT - (!(p->INOCOUNT & 1))) >> 1; /* count segs & alloc if nec */
     if ((segp = (XSEG*) p->auxch.auxp) == NULL ||
         (unsigned int)nsegs*sizeof(XSEG) > (unsigned int)p->auxch.size) {
       csound->AuxAlloc(csound, (int32)nsegs*sizeof(XSEG), &p->auxch);
@@ -741,7 +741,7 @@ int xsgrset(CSOUND *csound, EXPSEG *p)
     MYFLT   **argp, prvpt;
 
     p->xtra = -1;
-    nsegs = p->INOCOUNT >> 1;               /* count segs & alloc if nec */
+    nsegs = (p->INOCOUNT - (!(p->INOCOUNT & 1))) >> 1; /* count segs & alloc if nec */
     if ((segp = (SEG *) p->auxch.auxp) == NULL ||
         (unsigned int)nsegs*sizeof(SEG) > (unsigned int)p->auxch.size) {
       csound->AuxAlloc(csound, (int32)nsegs*sizeof(SEG), &p->auxch);
@@ -1420,4 +1420,3 @@ int envlpxr(CSOUND *csound, ENVLPR *p)
     }
     return OK;
 }
-
diff --git a/OOps/ugens2.c b/OOps/ugens2.c
index 234d54b..d0c8462 100644
--- a/OOps/ugens2.c
+++ b/OOps/ugens2.c
@@ -87,11 +87,11 @@ int ephsor(CSOUND *csound, EPHSOR *p)
         b *= R;
         if (UNLIKELY(phase >= 1.0)) {
           phase -= 1.0;
-          b = pow(R, 1+phase); 
+          b = pow(R, 1+phase);
         }
         else if (UNLIKELY(phase < 0.0)) {
           phase += 1.0;
-          b = pow(R, 1+phase); 
+          b = pow(R, 1+phase);
         }
       }
     }
@@ -104,11 +104,11 @@ int ephsor(CSOUND *csound, EPHSOR *p)
         b *= R;
         if (UNLIKELY(phase >= 1.0)) {
           phase -= 1.0;
-          b =  pow(R, 1+phase); 
+          b =  pow(R, 1+phase);
         }
         else if (UNLIKELY(phase < 0.0)) {
           phase += 1.0;
-          b = pow(R, 1+phase); 
+          b = pow(R, 1+phase);
         }
       }
     }
@@ -144,8 +144,8 @@ int phsor(CSOUND *csound, PHSOR *p)
         incr = (double)(cps[n] * onedsr);
         rs[n] = (MYFLT)phase;
         phase += incr;
-        if (UNLIKELY((MYFLT)phase >= 1.0)) /* VL convert to MYFLT 
-                                              to avoid rounded output 
+        if (UNLIKELY((MYFLT)phase >= 1.0)) /* VL convert to MYFLT
+                                              to avoid rounded output
                                               exceeding 1.0 on float version */
           phase -= 1.0;
         else if (UNLIKELY((MYFLT)phase < 0.0))
@@ -1589,4 +1589,3 @@ int oscaa3(CSOUND *csound, OSC   *p)
  err1:
     return csound->PerfError(csound, Str("oscil3: not initialised"));
 }
-
diff --git a/OOps/vdelay.c b/OOps/vdelay.c
index e361413..6bd5568 100644
--- a/OOps/vdelay.c
+++ b/OOps/vdelay.c
@@ -732,7 +732,9 @@ int multitap_set(CSOUND *csound, MDEL *p)
     int32 n;
     MYFLT max = FL(0.0);
 
-    if (UNLIKELY(p->INOCOUNT/2 == (MYFLT)p->INOCOUNT*FL(0.5)))
+    //if (UNLIKELY(p->INOCOUNT/2 == (MYFLT)p->INOCOUNT*FL(0.5)))
+    /* Should this test just be p->INOCOUNT&1 ==  */
+    if (UNLIKELY((p->INOCOUNT&1)==0))
       csound->Die(csound, Str("Wrong input count in multitap\n"));
 
     for (n = 0; n < p->INOCOUNT - 1; n += 2) {
@@ -992,9 +994,10 @@ int reverbx_set(CSOUND *csound, NREV2 *p)
         p->z[i] = FL(0.0);
       }
       csound->AuxAlloc(csound, n * sizeof(MYFLT), &p->caux);
-      for (i = 0; i < n; i++) {
-        ((MYFLT*) p->caux.auxp)[i] = FL(0.0);
-      }
+      /* unnecessary as Auxlloc clears to 0 */
+      /* for (i = 0; i < n; i++) { */
+      /*   ((MYFLT*) p->caux.auxp)[i] = FL(0.0); */
+      /* } */
       p->pcbuf_cur[0] = p->cbuf_cur[0] = (MYFLT*)p->caux.auxp;
       for (i = 0; i < p->numCombs; i++) {
         p->pcbuf_cur[i + 1] = p->cbuf_cur[i + 1] =
@@ -1021,9 +1024,10 @@ int reverbx_set(CSOUND *csound, NREV2 *p)
         n += a_time;
       }
       csound->AuxAlloc(csound, n * sizeof(MYFLT), &p->aaux);
-      for (i = 0; i < n; i++) {
-        ((MYFLT*) p->aaux.auxp)[i] = FL(0.0);
-      }
+      /* unnecessary as AuxAlloc clears */
+      /* for (i = 0; i < n; i++) { */
+      /*   ((MYFLT*) p->aaux.auxp)[i] = FL(0.0); */
+      /* } */
       p->pabuf_cur[0] = p->abuf_cur[0] = (MYFLT*) p->aaux.auxp;
       for (i = 0; i < p->numAlpas; i++) {
         p->pabuf_cur[i + 1] = p->abuf_cur[i + 1] =
diff --git a/Opcodes/CMakeLists.txt b/Opcodes/CMakeLists.txt
index 133fa88..e8ca737 100644
--- a/Opcodes/CMakeLists.txt
+++ b/Opcodes/CMakeLists.txt
@@ -1,151 +1,161 @@
-option(BUILD_CHUA_OPCODES "Build the chua opcodes (requires boost)" ON)
-option(BUILD_DSSI_OPCODES "Build the DSSI opcodes" ON)
-option(BUILD_FLUID_OPCODES "Build the fluidsynth opcodes" ON)
-option(BUILD_JACK_OPCODES "Build the JACK related opcodes" ON)
-option(BUILD_LINEAR_ALGEBRA_OPCODES "Build the Linear Algebra Opcodes" ON)
-option(BUILD_OSC_OPCODES "Build the OSC Opcodes" ON)
-option(BUILD_IMAGE_OPCODES "Build the image opcodes" ON)
-option(BUILD_PYTHON_OPCODES "Build the Python opcodes" ON)
-option(BUILD_LUA_OPCODES "Build the Lua opcodes" ON)
-
-find_package(Boost)
-check_include_file(ladspa.h LADSPA_H)
-check_include_file(fluidsynth.h FLUIDSYNTH_H)
-find_library(JACK_LIBRARY jack)
-find_library(JACKDMP_LIBRARY jackdmp)
-check_include_file(jack/jack.h JACK_HEADER)
-check_include_file_cxx(gmm/gmm.h GMM_HEADER)
-check_include_file(lo/lo.h OSC_HEADER)
-find_package(PNG)
-find_package(PythonLibs)
-find_package(Lua51)
-
-
-## OPCODE LIBS WITH NO EXTERNAL DEPENDENCIES ##
-
-make_plugin(mixer mixer.cpp)
-make_plugin(signalflowgraph signalflowgraph.cpp)
-
-make_plugin(ampmidid ampmidid.cpp)
-make_plugin(cs_date date.c)
-make_plugin(system_call system_call.c)
-make_plugin(doppler doppler.cpp)
-make_plugin(fractalnoise tl/fractalnoise.cpp)
-
-make_plugin(fareygen fareygen.c)
-
-# temporarily do not build on Windows until these opcodes are fixed
-# to compile
-if(NOT WIN32) 
-    make_plugin(udprecv sockrecv.c)
-    make_plugin(udpsend socksend.c)
-
-endif()
-
-set(scansyn_SRCS
-    scansyn.c scansynx.c)
-make_plugin(scansyn "${scansyn_SRCS}" m)
-
-if(UNIX)
-    make_plugin(control control.c)
-endif()
-
-if(LINUX)
-    make_plugin(urandom urandom.c)
-endif()
-
-## OPCODES WITH EXTERNAL DEPENDENCIES ##
-
-check_deps(BUILD_CHUA_OPCODES Boost_FOUND)
-if(BUILD_CHUA_OPCODES)
-    include_directories(${Boost_INCLUDE_DIRS})
-    make_plugin(chua chua/ChuaOscillator.cpp)
-endif()
-
-check_deps(BUILD_DSSI_OPCODES LADSPA_H)
-if(BUILD_DSSI_OPCODES)
-    set(dssi_SRC dssi4cs/src/load.c dssi4cs/src/dssi4cs.c)
-    make_plugin(dssi4cs "${dssi_SRC}" )
-endif()
-
-check_deps(BUILD_FLUID_OPCODES FLUIDSYNTH_H)
-if(BUILD_FLUID_OPCODES)
-    make_plugin(fluidOpcodes fluidOpcodes/fluidOpcodes.cpp fluidsynth)
-endif()
-
-set(JACK_LIB (JACK_LIBRARY OR JACKDMP_LIBRARY))
-check_deps(BUILD_JACK_OPCODES JACK_HEADER JACK_LIB)
-if(BUILD_JACK_OPCODES)
-    set(jack_LIBS ${PTHREAD_LIBRARY})
-    if(JACKDMP_LIBRARY)
-        list(APPEND jack_LIBS ${JACKDMP_LIBRARY})
-    else()
-        list(APPEND jack_LIBS ${JACK_LIBRARY})
-    endif()
-    make_plugin(jacko jacko.cpp "${jack_LIBS}")
-    make_plugin(jackTransport jackTransport.c "${jack_LIBS}")
-endif()
-
-check_deps(BUILD_LINEAR_ALGEBRA_OPCODES GMM_HEADER)
-if(BUILD_LINEAR_ALGEBRA_OPCODES)
-    make_plugin(linear_algebra linear_algebra.cpp)
-endif()
-
-check_deps(BUILD_OSC_OPCODES OSC_HEADER)
-if(BUILD_OSC_OPCODES)
-    make_plugin(osc OSC.c)
-    target_link_libraries(osc lo pthread)
-endif()
-
-check_deps(BUILD_IMAGE_OPCODES PNG_FOUND)
-if(BUILD_IMAGE_OPCODES)
-    include_directories(${PNG_INCLUDE_DIR})
-    make_plugin(image imageOpcodes.c "${PNG_LIBRARIES}")
-    set_target_properties(image
-        PROPERTIES COMPILER_FLAGS "${PNG_DEFINITIONS}")
-endif()
-
-check_deps(BUILD_PYTHON_OPCODES PYTHONLIBS_FOUND)
-if(BUILD_PYTHON_OPCODES)
-    include_directories(${PYTHON_INCLUDE_DIRS})
-    make_plugin(py py/pythonopcodes.c ${PYTHON_LIBRARIES})
-endif()
-
-check_deps(BUILD_LUA_OPCODES LUA51_FOUND)
-if(BUILD_LUA_OPCODES)
-    include_directories(${LUA_INCLUDE_DIR})
-    make_plugin(LuaCsound LuaCsound.cpp ${LUA_LIBRARIES})
-endif()
-
-# OGG Opcode previously was built only for OLPC
-#if(VORBISFILE_LIBRARY)
-#    set(vorbis_LIBS ${libcsound_LIBS} ${VORBISFILE_LIBRARY})
-#    make_plugin(ogg ogg.c "${vorbis_LIBS}")
-#endif()
-
-
-
-#set(sfont_FLAGS "")
-
-#if(CMAKE_C_COMPILER MATCHES "gcc")
-#    set(sfont_FLAGS ${sfont_FLAGS} -fno-strict-aliasing)
-#endif()
-#if(BIG_ENDIAN)
-#    set(sfont_FLAGS ${sfont_FLAGS} -DWORDS_BIGENDIAN)
-#endif()
-#message(STATUS "Compiler flags used for sfont lib: ${sfont_FLAGS}")
-#make_plugin(sfont sfont.c m)
-#set_target_properties(sfont
-#    PROPERTIES COMPILER_FLAGS "${sfont_FLAGS}")
-
-    
-          
-
-#if wiifound==1:
-#  WiiEnvironment = pluginEnvironment.Clone()
-#  makePlugin(WiiEnvironment, 'wiimote', ['wiimote.c'])
-#if p5gfound==1:
-#  P5GEnvironment = pluginEnvironment.Clone()
-#  makePlugin(P5GEnvironment, 'p5g', ['p5glove.c'])
-
-add_subdirectory(stk)
+option(BUILD_CHUA_OPCODES "Build the chua opcodes (requires boost)" ON)
+option(BUILD_DSSI_OPCODES "Build the DSSI opcodes" ON)
+option(BUILD_FLUID_OPCODES "Build the fluidsynth opcodes" ON)
+option(BUILD_JACK_OPCODES "Build the JACK related opcodes" ON)
+option(BUILD_LINEAR_ALGEBRA_OPCODES "Build the Linear Algebra Opcodes" ON)
+option(BUILD_OSC_OPCODES "Build the OSC Opcodes" ON)
+option(BUILD_IMAGE_OPCODES "Build the image opcodes" ON)
+option(BUILD_PYTHON_OPCODES "Build the Python opcodes" ON)
+option(BUILD_LUA_OPCODES "Build the Lua opcodes" ON)
+option(BUILD_WIIMOTE_OPCODES "Build the Lua opcodes" ON)
+
+find_package(Boost)
+check_include_file(ladspa.h LADSPA_H)
+check_include_file(fluidsynth.h FLUIDSYNTH_H)
+find_library(JACK_LIBRARY jack)
+find_library(JACKDMP_LIBRARY jackdmp)
+check_include_file(jack/jack.h JACK_HEADER)
+check_include_file_cxx(gmm/gmm.h GMM_HEADER)
+check_include_file(lo/lo.h OSC_HEADER)
+find_package(PNG)
+find_package(PythonLibs)
+find_package(Lua51)
+check_include_file(wiiuse.h WIIUSE_H)
+find_library(WIIUSE_LIB wiiuse)
+
+## OPCODE LIBS WITH NO EXTERNAL DEPENDENCIES ##
+
+make_plugin(mixer mixer.cpp)
+make_plugin(signalflowgraph signalflowgraph.cpp)
+
+make_plugin(ampmidid ampmidid.cpp)
+make_plugin(cs_date date.c)
+make_plugin(system_call system_call.c)
+make_plugin(doppler doppler.cpp)
+make_plugin(fractalnoise tl/fractalnoise.cpp)
+
+make_plugin(fareygen fareygen.c)
+
+make_plugin(cellular cellular.c)
+
+# temporarily do not build on Windows until these opcodes are fixed
+# to compile
+if(NOT WIN32) 
+    make_plugin(udprecv sockrecv.c)
+    make_plugin(udpsend socksend.c)
+
+endif()
+
+set(scansyn_SRCS
+    scansyn.c scansynx.c)
+make_plugin(scansyn "${scansyn_SRCS}" m)
+
+if(UNIX)
+    make_plugin(control control.c)
+endif()
+
+if(LINUX)
+    make_plugin(urandom urandom.c)
+endif()
+
+## OPCODES WITH EXTERNAL DEPENDENCIES ##
+
+check_deps(BUILD_CHUA_OPCODES Boost_FOUND)
+if(BUILD_CHUA_OPCODES)
+    include_directories(${Boost_INCLUDE_DIRS})
+    make_plugin(chua chua/ChuaOscillator.cpp)
+endif()
+
+check_deps(BUILD_DSSI_OPCODES LADSPA_H)
+if(BUILD_DSSI_OPCODES)
+    set(dssi_SRC dssi4cs/src/load.c dssi4cs/src/dssi4cs.c)
+    make_plugin(dssi4cs "${dssi_SRC}" )
+endif()
+
+check_deps(BUILD_FLUID_OPCODES FLUIDSYNTH_H)
+if(BUILD_FLUID_OPCODES)
+    make_plugin(fluidOpcodes fluidOpcodes/fluidOpcodes.cpp fluidsynth)
+endif()
+
+set(JACK_LIB (JACK_LIBRARY OR JACKDMP_LIBRARY))
+check_deps(BUILD_JACK_OPCODES JACK_HEADER JACK_LIB)
+if(BUILD_JACK_OPCODES)
+    set(jack_LIBS ${PTHREAD_LIBRARY})
+    if(JACKDMP_LIBRARY)
+        list(APPEND jack_LIBS ${JACKDMP_LIBRARY})
+    else()
+        list(APPEND jack_LIBS ${JACK_LIBRARY})
+    endif()
+    make_plugin(jacko jacko.cpp "${jack_LIBS}")
+    make_plugin(jackTransport jackTransport.c "${jack_LIBS}")
+endif()
+
+check_deps(BUILD_LINEAR_ALGEBRA_OPCODES GMM_HEADER)
+if(BUILD_LINEAR_ALGEBRA_OPCODES)
+    make_plugin(linear_algebra linear_algebra.cpp)
+endif()
+
+check_deps(BUILD_OSC_OPCODES OSC_HEADER)
+if(BUILD_OSC_OPCODES)
+    make_plugin(osc OSC.c)
+    target_link_libraries(osc lo pthread)
+endif()
+
+check_deps(BUILD_IMAGE_OPCODES PNG_FOUND)
+if(BUILD_IMAGE_OPCODES)
+    include_directories(${PNG_INCLUDE_DIR})
+    make_plugin(image imageOpcodes.c "${PNG_LIBRARIES}")
+    set_target_properties(image
+        PROPERTIES COMPILER_FLAGS "${PNG_DEFINITIONS}")
+endif()
+
+check_deps(BUILD_PYTHON_OPCODES PYTHONLIBS_FOUND)
+if(BUILD_PYTHON_OPCODES)
+    include_directories(${PYTHON_INCLUDE_DIRS})
+    make_plugin(py py/pythonopcodes.c ${PYTHON_LIBRARIES})
+endif()
+
+check_deps(BUILD_LUA_OPCODES LUA51_FOUND)
+if(BUILD_LUA_OPCODES)
+    include_directories(${LUA_INCLUDE_DIR})
+    make_plugin(LuaCsound LuaCsound.cpp ${LUA_LIBRARIES})
+endif()
+
+check_deps(BUILD_WIIMOTE_OPCODES WIIUSE_H)
+if(BUILD_WIIMOTE_OPCODES)
+    make_plugin(wiimote wiimote.c ${WIIUSE_LIB})
+endif()
+
+
+# OGG Opcode previously was built only for OLPC
+#if(VORBISFILE_LIBRARY)
+#    set(vorbis_LIBS ${libcsound_LIBS} ${VORBISFILE_LIBRARY})
+#    make_plugin(ogg ogg.c "${vorbis_LIBS}")
+#endif()
+
+
+
+#set(sfont_FLAGS "")
+
+#if(CMAKE_C_COMPILER MATCHES "gcc")
+#    set(sfont_FLAGS ${sfont_FLAGS} -fno-strict-aliasing)
+#endif()
+#if(BIG_ENDIAN)
+#    set(sfont_FLAGS ${sfont_FLAGS} -DWORDS_BIGENDIAN)
+#endif()
+#message(STATUS "Compiler flags used for sfont lib: ${sfont_FLAGS}")
+#make_plugin(sfont sfont.c m)
+#set_target_properties(sfont
+#    PROPERTIES COMPILER_FLAGS "${sfont_FLAGS}")
+
+    
+          
+
+#if wiifound==1:
+#  WiiEnvironment = pluginEnvironment.Clone()
+#  makePlugin(WiiEnvironment, 'wiimote', ['wiimote.c'])
+#if p5gfound==1:
+#  P5GEnvironment = pluginEnvironment.Clone()
+#  makePlugin(P5GEnvironment, 'p5g', ['p5glove.c'])
+
+add_subdirectory(stk)
diff --git a/Opcodes/Loris/lorisgens5.C b/Opcodes/Loris/lorisgens5.C
index ee25247..2dcbff0 100644
--- a/Opcodes/Loris/lorisgens5.C
+++ b/Opcodes/Loris/lorisgens5.C
@@ -949,7 +949,7 @@ LorisMorpher::LorisMorpher( LORISMORPH * params ) :
 #ifdef DEBUG_LORISGENS
     std::cerr << "** Morph will use " << labelMap.size() << " labeled Partials, ";
     std::cerr << src_unlabeled.size() << " unlabeled source Partials, and ";
-    std::cerr << tgt_unlabeled.size() << " unlabeled target Partials." 
+    std::cerr << tgt_unlabeled.size() << " unlabeled target Partials."
               << std::endl;
 #endif
 
@@ -1011,7 +1011,7 @@ LorisMorpher::updateEnvelopes( void )
         if ( itgt < 0 && isrc < 0 )
           {
 #ifdef DEBUG_LORISGENS
-            std::cerr << 
+            std::cerr <<
               "HEY!!!! The labelMap had a pair of bogus indices in it at pos "
                       << envidx << std::endl;
 #endif
@@ -1155,4 +1155,3 @@ extern "C"
 
   csound --opcode-lib=.libs/lorisgens.so tryit.csd
 */
-
diff --git a/Opcodes/LuaCsound.cpp b/Opcodes/LuaCsound.cpp
index 7210211..95b85be 100644
--- a/Opcodes/LuaCsound.cpp
+++ b/Opcodes/LuaCsound.cpp
@@ -39,7 +39,7 @@ extern "C"
  * Author: Michael Gogins
  * 1 September 2011
  *
- * These opcodes require LuaJIT 2.0 or later with FFI to be installed with 
+ * These opcodes require LuaJIT 2.0 or later with FFI to be installed with
  * Csound. They allow users to define new opcodes in Lua, a modern language
  * with simple sytax, full lexical scoping, support for classes, and support
  * for functional programming. These opcodes are designed to be thread-safe.
@@ -47,7 +47,7 @@ extern "C"
  */
 
 /**
- * Stores Lua references to opcode subroutines for greater efficiency of 
+ * Stores Lua references to opcode subroutines for greater efficiency of
  * calling.
  */
 struct keys_t
@@ -59,7 +59,7 @@ struct keys_t
     int noteoff_key;
 };
 
-/** 
+/**
  * Thread-safe storage for Lua references to opcode subroutines.
  */
 keys_t &manageLuaReferenceKeys(const lua_State *L, const std::string &opcode, char operation = 'O')
@@ -88,7 +88,7 @@ keys_t &manageLuaReferenceKeys(const lua_State *L, const std::string &opcode, ch
 
 /**
  * Thread-safe storage for Lua states (virtual machines). There is one Lua state
- * per thread, rather than per instance of Csound, in case one instance of Csound 
+ * per thread, rather than per instance of Csound, in case one instance of Csound
  * is running multiple threads with multiple instances of a Lua opcode.
  */
 lua_State *manageLuaState(char operation = 'O')
@@ -169,21 +169,21 @@ public:
 };
 
 /**
- * lua_iopcall Sname, ...  Calls a Lua opcode at i-rate only. Any number of 
- *                         output and/or input arguments may be passed. 
- *                         All arguments must be passed on the right-hand 
+ * lua_iopcall Sname, ...  Calls a Lua opcode at i-rate only. Any number of
+ *                         output and/or input arguments may be passed.
+ *                         All arguments must be passed on the right-hand
  *                         side and outputs are returned in the argument.
  *                         Requires opname_init to be defined in Lua.
  *
- * lua_ikopcall Sname, ... Calls a Lua opcode at i-rate and k-rate. Any number of 
- *                         output and/or input arguments may be passed. 
- *                         All arguments must be passed on the right-hand 
+ * lua_ikopcall Sname, ... Calls a Lua opcode at i-rate and k-rate. Any number of
+ *                         output and/or input arguments may be passed.
+ *                         All arguments must be passed on the right-hand
  *                         side and outputs are returned in the argument.
  *                         Requires opname_init and opname_kontrol to be defined in Lua.
  *
- * lua_iaopcall Sname, ... Calls a Lua opcode at i-rate and a-rate. Any number of 
- *                         output and/or input arguments may be passed. 
- *                         All arguments must be passed on the right-hand 
+ * lua_iaopcall Sname, ... Calls a Lua opcode at i-rate and a-rate. Any number of
+ *                         output and/or input arguments may be passed.
+ *                         All arguments must be passed on the right-hand
  *                         side and outputs are returned in the argument.
  *                         Requires opname_init and opname_audio to be defined in Lua.
  *
@@ -283,21 +283,21 @@ public:
 };
 
 /**
- * lua_iopcall_off Sname, ...  Calls a Lua opcode at i-rate only. Any number of 
- *                             output and/or input arguments may be passed. 
- *                             All arguments must be passed on the right-hand 
+ * lua_iopcall_off Sname, ...  Calls a Lua opcode at i-rate only. Any number of
+ *                             output and/or input arguments may be passed.
+ *                             All arguments must be passed on the right-hand
  *                             side and outputs are returned in the argument.
  *                             Requires opname_init to be defined in Lua.
  *
- * lua_ikopcall_off Sname, ... Calls a Lua opcode at i-rate and k-rate. Any number of 
- *                             output and/or input arguments may be passed. 
- *                             All arguments must be passed on the right-hand 
+ * lua_ikopcall_off Sname, ... Calls a Lua opcode at i-rate and k-rate. Any number of
+ *                             output and/or input arguments may be passed.
+ *                             All arguments must be passed on the right-hand
  *                             side and outputs are returned in the argument.
  *                             Requires opname_init and opname_kontrol to be defined in Lua.
  *
- * lua_iaopcall_off Sname, ... Calls a Lua opcode at i-rate and a-rate. Any number of 
- *                             output and/or input arguments may be passed. 
- *                             All arguments must be passed on the right-hand 
+ * lua_iaopcall_off Sname, ... Calls a Lua opcode at i-rate and a-rate. Any number of
+ *                             output and/or input arguments may be passed.
+ *                             All arguments must be passed on the right-hand
  *                             side and outputs are returned in the argument.
  *                             Requires opname_init and opname_audio to be defined in Lua.
  *
@@ -423,9 +423,9 @@ public:
 };
 
 /**
- * lua_opdef Sname, Scode -- Define an opcode in Lua at i-rate. The opcode can 
- *                           take any number of output and/or input arguments 
- *                           of any type. 
+ * lua_opdef Sname, Scode -- Define an opcode in Lua at i-rate. The opcode can
+ *                           take any number of output and/or input arguments
+ *                           of any type.
  *
  * Opcode that effectively defines new opcodes in Lua. The Lua code must
  * define all functions that will be called from Csound,
diff --git a/Opcodes/ambicode.c b/Opcodes/ambicode.c
index 709a8d3..ca5595e 100644
--- a/Opcodes/ambicode.c
+++ b/Opcodes/ambicode.c
@@ -29,7 +29,7 @@ typedef struct {
     OPDS    h;                                      /* required header */
     MYFLT   *mw, *mx, *my, *mz, *mr, *ms, *mt, *mu, *mv, *mk,
             *ml, *mm, *mn, *mo, *mp, *mq;           /* addr outarg */
-  MYFLT   *asig, *kalpha, *kbeta, *kin[4];          /* addr inargs */
+    MYFLT   *asig, *kalpha, *kbeta, *kin[4];          /* addr inargs */
     /* private dataspace */
     double  w, x, y, z, r, s, t, u, v, k, l, m, n, o, p, q;
 } AMBIC;
@@ -714,9 +714,9 @@ static int aambideco(CSOUND *csound, AMBID *p)
 #define S(x)    sizeof(x)
 
 static OENTRY localops[] = {
-  { "bformenc", S(AMBIC), DP|5, "mmmmmmmmmmmmmmmm", "akkPPPP",
+  { "bformenc", S(AMBIC), _QQ|5, "mmmmmmmmmmmmmmmm", "akkPPPP",
                             (SUBR)iambicode, NULL, (SUBR)aambicode },
-  { "bformdec", S(AMBID), DP|5, "mmmmmmmm", "iaaay",
+  { "bformdec", S(AMBID), _QQ|5, "mmmmmmmm", "iaaay",
                             (SUBR)iambideco, NULL, (SUBR)aambideco }
 };
 
diff --git a/Opcodes/ambicode1.c b/Opcodes/ambicode1.c
index 6efed2a..798bd6a 100644
--- a/Opcodes/ambicode1.c
+++ b/Opcodes/ambicode1.c
@@ -29,7 +29,7 @@
 */
 
 // #include "csdl.h"
-#include "csoundCore.h"        
+#include "csoundCore.h"
 #include "interlocks.h"
 #include <assert.h>
 #include <math.h>
@@ -38,14 +38,14 @@
 
 typedef struct {
 
-  /* Required header: */
-  OPDS   h;
+    /* Required header: */
+    OPDS   h;
 
-  /* Output channels (4, 9 or 16 in use): */
-  MYFLT *aouts[16];
+    /* Output channels (4, 9 or 16 in use): */
+    MYFLT *aouts[16];
 
-  /* Input arguments: */
-  MYFLT *ain, *kangle, *kelevation;
+    /* Input arguments: */
+    MYFLT *ain, *kangle, *kelevation;
 
 } AMBIC;
 
@@ -53,15 +53,15 @@ typedef struct {
 
 typedef struct {
 
-  /* Required header: */
-  OPDS   h;
+    /* Required header: */
+    OPDS   h;
 
-  /* Output channels (up to eight supported here, depending on the
+    /* Output channels (up to eight supported here, depending on the
      isetup parameter). */
-  MYFLT *aouts[8];
+    MYFLT *aouts[8];
 
-  /* Input arguments: */
-  MYFLT *isetup, *ains[VARGMAX];
+    /* Input arguments: */
+    MYFLT *isetup, *ains[VARGMAX];
 
 } AMBID;
 
@@ -69,89 +69,89 @@ typedef struct {
 #define ROOT27 (5.1961524227066318806)
 #define ROOT135d16 (0.72618437741389066597) /* sqrt(135.0/256.0) */
 
-static int
-ibformenc(CSOUND * csound, AMBIC * p) {
-  /* All we do in here is police our parameters. */
-  switch (p->OUTOCOUNT) {
-  case 4:
-  case 9:
-  case 16:
-    return OK;
-  default:
-    return csound->InitError
-      (csound, Str("The numbers of input and output arguments are not valid."));
+static int ibformenc(CSOUND * csound, AMBIC * p)
+{
+    /* All we do in here is police our parameters. */
+    switch (p->OUTOCOUNT) {
+    case 4:
+    case 9:
+    case 16:
+      return OK;
+    default:
+      return csound->InitError
+        (csound, Str("The numbers of input and output arguments are not valid."));
   }
 }
 
 static int
 abformenc(CSOUND * csound, AMBIC * p) {
 
-  int sampleCount, sampleIndex, channelCount, channelIndex;
-  double angle, elevation, x, y, z;
-  MYFLT coefficients[16], coefficient, * output, * input;
-  MYFLT x2, y2, z2;
-
-  /* Find basic mode & angles: */
-  sampleCount = csound->ksmps;
-  channelCount = p->OUTOCOUNT;
-  angle = (double)(*(p->kangle)) * (PI / 180.0);
-  elevation = (double)(*(p->kelevation)) * (PI / 180.0);
-
-  /* Find direction cosines: */
-  x  = cos(elevation);
-  y  = x;
-  z  = sin(elevation);
-  x *= cos(angle);
-  y *= sin(angle);
-  x2 = x * x;
-  y2 = y * y;
-  z2 = z * z;
-
-  /* Find directional coefficients: */
-  switch (channelCount) {
-  case 16:
-    /* Third order. */
-    coefficients[ 9] = (MYFLT)((2.5 * z2 - 1.5) * z);
-    coefficients[10] = (MYFLT)(ROOT135d16 * x * (5.0 * z2 - 1));
-    coefficients[11] = (MYFLT)(ROOT135d16 * y * (5.0 * z2 - 1));
-    coefficients[12] = (MYFLT)(0.5*ROOT27 * z * (x2 - y2));
-    coefficients[13] = (MYFLT)(ROOT27 * x * y * z);
-    coefficients[14] = (MYFLT)(x * (x2 - 3.0 * y2));
-    coefficients[15] = (MYFLT)(y * (3.0 * x2 - y2));
-    /* Deliberately no break;. */
-  case 9:
-    /* Second order. */
-    coefficients[ 4] = (MYFLT)(1.5 * z2 - 0.5);
-    coefficients[ 5] = (MYFLT)(2.0 * z * x);
-    coefficients[ 6] = (MYFLT)(2.0 * y * z);
-    coefficients[ 7] = (MYFLT)(x2 - y2);
-    coefficients[ 8] = (MYFLT)(2.0 * x * y);
-    /* Deliberately no break;. */
-  case 4:
-    /* Zero and first order. */
-    coefficients[ 0] = SQRT(FL(0.5));
-    coefficients[ 1] = (MYFLT)x;
-    coefficients[ 2] = (MYFLT)y;
-    coefficients[ 3] = (MYFLT)z;
-    break;
-  default:
-    /* Should never be reached as this is policed at init time. */
-    assert(0);
-  }
-  /* (There are some repeated multiplies in the code above, but I
-     suggest these aren't removed until everyone is sure the
-     unoptimised code is doing the right thing!) */
-
-  /* Process channels: */
-  for (channelIndex = 0; channelIndex < channelCount; channelIndex++) {
-    coefficient = coefficients[channelIndex];
-    input = p->ain;
-    output = p->aouts[channelIndex];
-    for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++)
-      output[sampleIndex] = coefficient * input[sampleIndex];
-  }
+    int sampleCount, sampleIndex, channelCount, channelIndex;
+    double angle, elevation, x, y, z;
+    MYFLT coefficients[16], coefficient, * output, * input;
+    MYFLT x2, y2, z2;
+
+    /* Find basic mode & angles: */
+    sampleCount = csound->ksmps;
+    channelCount = p->OUTOCOUNT;
+    angle = (double)(*(p->kangle)) * (PI / 180.0);
+    elevation = (double)(*(p->kelevation)) * (PI / 180.0);
+
+    /* Find direction cosines: */
+    x  = cos(elevation);
+    y  = x;
+    z  = sin(elevation);
+    x *= cos(angle);
+    y *= sin(angle);
+    x2 = x * x;
+    y2 = y * y;
+    z2 = z * z;
+
+    /* Find directional coefficients: */
+    switch (channelCount) {
+    case 16:
+      /* Third order. */
+      coefficients[ 9] = (MYFLT)((2.5 * z2 - 1.5) * z);
+      coefficients[10] = (MYFLT)(ROOT135d16 * x * (5.0 * z2 - 1));
+      coefficients[11] = (MYFLT)(ROOT135d16 * y * (5.0 * z2 - 1));
+      coefficients[12] = (MYFLT)(0.5*ROOT27 * z * (x2 - y2));
+      coefficients[13] = (MYFLT)(ROOT27 * x * y * z);
+      coefficients[14] = (MYFLT)(x * (x2 - 3.0 * y2));
+      coefficients[15] = (MYFLT)(y * (3.0 * x2 - y2));
+      /* Deliberately no break;. */
+    case 9:
+      /* Second order. */
+      coefficients[ 4] = (MYFLT)(1.5 * z2 - 0.5);
+      coefficients[ 5] = (MYFLT)(2.0 * z * x);
+      coefficients[ 6] = (MYFLT)(2.0 * y * z);
+      coefficients[ 7] = (MYFLT)(x2 - y2);
+      coefficients[ 8] = (MYFLT)(2.0 * x * y);
+      /* Deliberately no break;. */
+    case 4:
+      /* Zero and first order. */
+      coefficients[ 0] = SQRT(FL(0.5));
+      coefficients[ 1] = (MYFLT)x;
+      coefficients[ 2] = (MYFLT)y;
+      coefficients[ 3] = (MYFLT)z;
+      break;
+    default:
+      /* Should never be reached as this is policed at init time. */
+      assert(0);
+    }
+    /* (There are some repeated multiplies in the code above, but I
+       suggest these aren't removed until everyone is sure the
+       unoptimised code is doing the right thing!) */
+
+    /* Process channels: */
+    for (channelIndex = 0; channelIndex < channelCount; channelIndex++) {
+      coefficient = coefficients[channelIndex];
+      input = p->ain;
+      output = p->aouts[channelIndex];
+      for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++)
+        output[sampleIndex] = coefficient * input[sampleIndex];
+    }
 
-  return OK;
+    return OK;
 
 }
 
@@ -159,309 +159,311 @@ abformenc(CSOUND * csound, AMBIC * p) {
 
 static int
 ibformdec(CSOUND * csound, AMBID * p) {
-  /* All we do in here is police our parameters. */
-    if (UNLIKELY(p->INOCOUNT != 1 + 4 && p->INOCOUNT != 1 + 9 && p->INOCOUNT != 1 + 16)) {
-    return csound->InitError(csound,
-                             Str("The number of input arguments is not valid."));
-  }
-    else if (UNLIKELY(*(p->isetup) < 1 || *(p->isetup) > 5)) {
-    return csound->InitError(csound,
-                             Str("The isetup value should be between 1 and 5."));
-  }
-  else {
-    /* Then we check the output arguments. */
-    if (*(p->isetup) == 1 && p->OUTOCOUNT == 2) {
-      /* Stereo. */
-      return OK;
-    }
-    else if (*(p->isetup) == 2 && p->OUTOCOUNT == 4) {
-      /* Quad. */
-      return OK;
-    }
-    else if (*(p->isetup) == 3 && p->OUTOCOUNT == 5) {
-      /* Surround 5.0. */
-      return OK;
-    }
-    else if (*(p->isetup) == 4 && p->OUTOCOUNT == 8) {
-      /* Octagon. */
-      return OK;
+    /* All we do in here is police our parameters. */
+    if (UNLIKELY(p->INOCOUNT != 1 + 4 &&
+                 p->INOCOUNT != 1 + 9 &&
+                 p->INOCOUNT != 1 + 16)) {
+      return csound->InitError(csound,
+                               Str("The number of input arguments is not valid."));
     }
-    else if (*(p->isetup) == 5 && p->OUTOCOUNT == 8) {
-      /* Cube. */
-      return OK;
+    else if (UNLIKELY(*(p->isetup) < 1 || *(p->isetup) > 5)) {
+      return csound->InitError(csound,
+                               Str("The isetup value should be between 1 and 5."));
     }
     else {
-      return csound->InitError(csound,
-                                Str("The output channel count does not"
-                                    " match the isetup value."));
+      /* Then we check the output arguments. */
+      if (*(p->isetup) == 1 && p->OUTOCOUNT == 2) {
+        /* Stereo. */
+        return OK;
+      }
+      else if (*(p->isetup) == 2 && p->OUTOCOUNT == 4) {
+        /* Quad. */
+        return OK;
+      }
+      else if (*(p->isetup) == 3 && p->OUTOCOUNT == 5) {
+        /* Surround 5.0. */
+        return OK;
+      }
+      else if (*(p->isetup) == 4 && p->OUTOCOUNT == 8) {
+        /* Octagon. */
+        return OK;
+      }
+      else if (*(p->isetup) == 5 && p->OUTOCOUNT == 8) {
+        /* Cube. */
+        return OK;
+      }
+      else {
+        return csound->InitError(csound,
+                                 Str("The output channel count does not"
+                                     " match the isetup value."));
+      }
     }
-  }
-  return OK;                    /* Never used */
+    return OK;                    /* Never used */
 }
 
 static int
 abformdec(CSOUND * csound, AMBID * p) {
 
-  /* All assert() calls in here should already have been validated in
-     ibformdec(). I've also abused the notation a fair bit, often
-     holding scaled values in w, x, y etc. */
-
-  /* (There are some repeated multiplies in the code below, but I
-     suggest these aren't removed until everyone is sure the
-     unoptimised code is doing the right thing!) */
-
-  int sampleCount, sampleIndex;
-  MYFLT p0, q, u, v, w, x, y, z;
-
-  sampleCount = csound->ksmps;
-  assert(p->INOCOUNT >= 5);
-
-  switch ((int)*(p->isetup)) {
-  case 1: /* Stereo */
-    assert(p->OUTOCOUNT == 2);
-    /* Use a 90degree stereo decode, equivalent to a M+S microphone
-       array at the origin. Works better than front-facing
-       arrangements for most purposes, as a composer using this opcode
-       probably wants to hear the back stage. */
-    for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
-      w = p->ains[0][sampleIndex] * SQRT(FL(0.5));
-      y = p->ains[2][sampleIndex] * FL(0.5);
-      /* Left: */
-      p->aouts[0][sampleIndex] = w + y;
-      /* Right: */
-      p->aouts[1][sampleIndex] = w - y;
-    }
-    break;
-  case 2: /* Quad */
-    assert(p->OUTOCOUNT == 4);
-    /* Use a first-order 'in-phase' decode. */
-    for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
-      w = p->ains[0][sampleIndex] * FL(0.35355);
-      x = p->ains[1][sampleIndex] * FL(0.17677);
-      y = p->ains[2][sampleIndex] * FL(0.17677);
-      /* Front left: */
-      p->aouts[0][sampleIndex] = w + x + y;
-      /* Back left: */
-      p->aouts[1][sampleIndex] = w - x + y;
-      /* Back right: */
-      p->aouts[2][sampleIndex] = w - x - y;
-      /* Front right: */
-      p->aouts[3][sampleIndex] = w + x - y;
-    }
-    break;
-  case 3: /* 5.0 */
-    assert(p->OUTOCOUNT == 5);
-    /* This is a second order decoder provided by Bruce Wiggins. It is
-       optimised for high frequency use within a dual-band decoder,
-       however it has good a low-frequency response. It isn't quite
-       'in-phase' but it is not far off. */
-    if (p->INOCOUNT == 1 + 4) {
-      /* Matrix truncated to first order (not ideal). */
+    /* All assert() calls in here should already have been validated in
+       ibformdec(). I've also abused the notation a fair bit, often
+       holding scaled values in w, x, y etc. */
+
+    /* (There are some repeated multiplies in the code below, but I
+       suggest these aren't removed until everyone is sure the
+       unoptimised code is doing the right thing!) */
+
+    int sampleCount, sampleIndex;
+    MYFLT p0, q, u, v, w, x, y, z;
+
+    sampleCount = csound->ksmps;
+    assert(p->INOCOUNT >= 5);
+
+    switch ((int)*(p->isetup)) {
+    case 1: /* Stereo */
+      assert(p->OUTOCOUNT == 2);
+      /* Use a 90degree stereo decode, equivalent to a M+S microphone
+         array at the origin. Works better than front-facing
+         arrangements for most purposes, as a composer using this opcode
+         probably wants to hear the back stage. */
       for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
-        w = p->ains[0][sampleIndex];
-        x = p->ains[1][sampleIndex];
-        y = p->ains[2][sampleIndex];
+        w = p->ains[0][sampleIndex] * SQRT(FL(0.5));
+        y = p->ains[2][sampleIndex] * FL(0.5);
         /* Left: */
-        p->aouts[0][sampleIndex]
-          = w * FL(0.405) + x * FL(0.32) + y * FL(0.31);
+        p->aouts[0][sampleIndex] = w + y;
         /* Right: */
-        p->aouts[1][sampleIndex]
-          = w * FL(0.405) + x * FL(0.32) - y * FL(0.31);
-        /* Centre: */
-        p->aouts[2][sampleIndex]
-          = w * FL(0.085) + x * FL(0.04);
-        /* Surround Left: */
-        p->aouts[3][sampleIndex]
-          = w * FL(0.635) - x * FL(0.335) + y * FL(0.28);
-        /* Surround Right: */
-        p->aouts[4][sampleIndex]
-          = w * FL(0.635) - x * FL(0.335) - y * FL(0.28);
+        p->aouts[1][sampleIndex] = w - y;
       }
-    }
-    else {
-      /* This is the full matrix. */
+      break;
+    case 2: /* Quad */
+      assert(p->OUTOCOUNT == 4);
+      /* Use a first-order 'in-phase' decode. */
       for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
-        w = p->ains[0][sampleIndex];
-        x = p->ains[1][sampleIndex];
-        y = p->ains[2][sampleIndex];
-        u = p->ains[7][sampleIndex];
-        v = p->ains[8][sampleIndex];
-        /* Left: */
-        p->aouts[0][sampleIndex]
-          = (w * FL(0.405) + x * FL(0.32) + y * FL(0.31)
-             + u * FL(0.085) + v * FL(0.125));
-        /* Right: */
-        p->aouts[1][sampleIndex]
-          = (w * FL(0.405) + x * FL(0.32) - y * FL(0.31)
-             + u * FL(0.085) - v * FL(0.125));
-        /* Centre: */
-        p->aouts[2][sampleIndex]
-          = (w * FL(0.085) + x * FL(0.04)
-             + u * FL(0.045));
-        /* Surround Left: */
-        p->aouts[3][sampleIndex]
-          = (w * FL(0.635) - x * FL(0.335) + y * FL(0.28)
-             - u * FL(0.08) + v * FL(0.08));
-        /* Surround Right: */
-        p->aouts[4][sampleIndex]
-          = (w * FL(0.635) - x * FL(0.335) - y * FL(0.28)
-             - u * FL(0.08) - v * FL(0.08));
+        w = p->ains[0][sampleIndex] * FL(0.35355);
+        x = p->ains[1][sampleIndex] * FL(0.17677);
+        y = p->ains[2][sampleIndex] * FL(0.17677);
+        /* Front left: */
+        p->aouts[0][sampleIndex] = w + x + y;
+        /* Back left: */
+        p->aouts[1][sampleIndex] = w - x + y;
+        /* Back right: */
+        p->aouts[2][sampleIndex] = w - x - y;
+        /* Front right: */
+        p->aouts[3][sampleIndex] = w + x - y;
       }
-    }
-    break;
-  case 4: /* Octagon: */
-    assert(p->OUTOCOUNT == 8);
-    if (p->INOCOUNT == 1 + 4) {
-      /* First order 'in-phase' decode: */
-      for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
-        w = p->ains[0][sampleIndex] * FL(0.17677);
-        x = p->ains[1][sampleIndex];
-        y = p->ains[2][sampleIndex];
-        /* About 11 o'clock: */
-        p->aouts[0][sampleIndex] = w + x * FL(0.11548) + y * FL(0.04783);
-        /* About 10 o'clock: */
-        p->aouts[1][sampleIndex] = w + x * FL(0.04783) + y * FL(0.11546);
-        /* About 8 o'clock: */
-        p->aouts[2][sampleIndex] = w - x * FL(0.04783) + y * FL(0.11546);
-        /* About 7 o'clock: */
-        p->aouts[3][sampleIndex] = w - x * FL(0.11548) + y * FL(0.04783);
-        /* About 5 o'clock: */
-        p->aouts[4][sampleIndex] = w - x * FL(0.11548) - y * FL(0.04783);
-        /* About 4 o'clock: */
-        p->aouts[5][sampleIndex] = w - x * FL(0.04783) - y * FL(0.11546);
-        /* About 2 o'clock: */
-        p->aouts[6][sampleIndex] = w + x * FL(0.04783) - y * FL(0.11546);
-        /* About 1 o'clock: */
-        p->aouts[7][sampleIndex] = w + x * FL(0.11548) - y * FL(0.04783);
+      break;
+    case 3: /* 5.0 */
+      assert(p->OUTOCOUNT == 5);
+      /* This is a second order decoder provided by Bruce Wiggins. It is
+         optimised for high frequency use within a dual-band decoder,
+         however it has good a low-frequency response. It isn't quite
+         'in-phase' but it is not far off. */
+      if (p->INOCOUNT == 1 + 4) {
+        /* Matrix truncated to first order (not ideal). */
+        for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
+          w = p->ains[0][sampleIndex];
+          x = p->ains[1][sampleIndex];
+          y = p->ains[2][sampleIndex];
+          /* Left: */
+          p->aouts[0][sampleIndex]
+            = w * FL(0.405) + x * FL(0.32) + y * FL(0.31);
+          /* Right: */
+          p->aouts[1][sampleIndex]
+            = w * FL(0.405) + x * FL(0.32) - y * FL(0.31);
+          /* Centre: */
+          p->aouts[2][sampleIndex]
+            = w * FL(0.085) + x * FL(0.04);
+          /* Surround Left: */
+          p->aouts[3][sampleIndex]
+            = w * FL(0.635) - x * FL(0.335) + y * FL(0.28);
+          /* Surround Right: */
+          p->aouts[4][sampleIndex]
+            = w * FL(0.635) - x * FL(0.335) - y * FL(0.28);
+        }
       }
-    }
-    else if (p->INOCOUNT == 1 + 9) {
-      /* Second order 'in-phase' / 'controlled opposites' decode: */
-      for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
-        w = p->ains[0][sampleIndex] * FL(0.17677);
-        x = p->ains[1][sampleIndex];
-        y = p->ains[2][sampleIndex];
-        u = p->ains[7][sampleIndex] * FL(0.03417);
-        v = p->ains[8][sampleIndex] * FL(0.03417);
-        /* About 11 o'clock: */
-        p->aouts[0][sampleIndex]
-          = w + x * FL(0.15906) + y * FL(0.06588) + u + v;
-        /* About 10 o'clock: */
-        p->aouts[1][sampleIndex]
-          = w + x * FL(0.06588) + y * FL(0.15906) - u + v;
-        /* About 8 o'clock: */
-        p->aouts[2][sampleIndex]
-          = w - x * FL(0.06588) + y * FL(0.15906) - u - v;
-        /* About 7 o'clock: */
-        p->aouts[3][sampleIndex]
-          = w - x * FL(0.15906) + y * FL(0.06588) + u - v;
-        /* About 5 o'clock: */
-        p->aouts[4][sampleIndex]
-          = w - x * FL(0.15906) - y * FL(0.06588) + u + v;
-        /* About 4 o'clock: */
-        p->aouts[5][sampleIndex]
-          = w - x * FL(0.06588) - y * FL(0.15906) - u + v;
-        /* About 2 o'clock: */
-        p->aouts[6][sampleIndex]
-          = w + x * FL(0.06588) - y * FL(0.15906) - u - v;
-        /* About 1 o'clock: */
-        p->aouts[7][sampleIndex]
-          = w + x * FL(0.15906) - y * FL(0.06588) + u - v;
+      else {
+        /* This is the full matrix. */
+        for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
+          w = p->ains[0][sampleIndex];
+          x = p->ains[1][sampleIndex];
+          y = p->ains[2][sampleIndex];
+          u = p->ains[7][sampleIndex];
+          v = p->ains[8][sampleIndex];
+          /* Left: */
+          p->aouts[0][sampleIndex]
+            = (w * FL(0.405) + x * FL(0.32) + y * FL(0.31)
+               + u * FL(0.085) + v * FL(0.125));
+          /* Right: */
+          p->aouts[1][sampleIndex]
+            = (w * FL(0.405) + x * FL(0.32) - y * FL(0.31)
+               + u * FL(0.085) - v * FL(0.125));
+          /* Centre: */
+          p->aouts[2][sampleIndex]
+            = (w * FL(0.085) + x * FL(0.04)
+               + u * FL(0.045));
+          /* Surround Left: */
+          p->aouts[3][sampleIndex]
+            = (w * FL(0.635) - x * FL(0.335) + y * FL(0.28)
+               - u * FL(0.08) + v * FL(0.08));
+          /* Surround Right: */
+          p->aouts[4][sampleIndex]
+            = (w * FL(0.635) - x * FL(0.335) - y * FL(0.28)
+               - u * FL(0.08) - v * FL(0.08));
+        }
       }
-    }
-    else {
-      assert(p->INOCOUNT == 1 + 16);
-      /* Third order 'in-phase' / 'controlled opposites' decode: */
+      break;
+    case 4: /* Octagon: */
+      assert(p->OUTOCOUNT == 8);
+      if (p->INOCOUNT == 1 + 4) {
+        /* First order 'in-phase' decode: */
+        for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
+          w = p->ains[0][sampleIndex] * FL(0.17677);
+          x = p->ains[1][sampleIndex];
+          y = p->ains[2][sampleIndex];
+          /* About 11 o'clock: */
+          p->aouts[0][sampleIndex] = w + x * FL(0.11548) + y * FL(0.04783);
+          /* About 10 o'clock: */
+          p->aouts[1][sampleIndex] = w + x * FL(0.04783) + y * FL(0.11546);
+          /* About 8 o'clock: */
+          p->aouts[2][sampleIndex] = w - x * FL(0.04783) + y * FL(0.11546);
+          /* About 7 o'clock: */
+          p->aouts[3][sampleIndex] = w - x * FL(0.11548) + y * FL(0.04783);
+          /* About 5 o'clock: */
+          p->aouts[4][sampleIndex] = w - x * FL(0.11548) - y * FL(0.04783);
+          /* About 4 o'clock: */
+          p->aouts[5][sampleIndex] = w - x * FL(0.04783) - y * FL(0.11546);
+          /* About 2 o'clock: */
+          p->aouts[6][sampleIndex] = w + x * FL(0.04783) - y * FL(0.11546);
+          /* About 1 o'clock: */
+          p->aouts[7][sampleIndex] = w + x * FL(0.11548) - y * FL(0.04783);
+        }
+      }
+      else if (p->INOCOUNT == 1 + 9) {
+        /* Second order 'in-phase' / 'controlled opposites' decode: */
+        for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
+          w = p->ains[0][sampleIndex] * FL(0.17677);
+          x = p->ains[1][sampleIndex];
+          y = p->ains[2][sampleIndex];
+          u = p->ains[7][sampleIndex] * FL(0.03417);
+          v = p->ains[8][sampleIndex] * FL(0.03417);
+          /* About 11 o'clock: */
+          p->aouts[0][sampleIndex]
+            = w + x * FL(0.15906) + y * FL(0.06588) + u + v;
+          /* About 10 o'clock: */
+          p->aouts[1][sampleIndex]
+            = w + x * FL(0.06588) + y * FL(0.15906) - u + v;
+          /* About 8 o'clock: */
+          p->aouts[2][sampleIndex]
+            = w - x * FL(0.06588) + y * FL(0.15906) - u - v;
+          /* About 7 o'clock: */
+          p->aouts[3][sampleIndex]
+            = w - x * FL(0.15906) + y * FL(0.06588) + u - v;
+          /* About 5 o'clock: */
+          p->aouts[4][sampleIndex]
+            = w - x * FL(0.15906) - y * FL(0.06588) + u + v;
+          /* About 4 o'clock: */
+          p->aouts[5][sampleIndex]
+            = w - x * FL(0.06588) - y * FL(0.15906) - u + v;
+          /* About 2 o'clock: */
+          p->aouts[6][sampleIndex]
+            = w + x * FL(0.06588) - y * FL(0.15906) - u - v;
+          /* About 1 o'clock: */
+          p->aouts[7][sampleIndex]
+            = w + x * FL(0.15906) - y * FL(0.06588) + u - v;
+        }
+      }
+      else {
+        assert(p->INOCOUNT == 1 + 16);
+        /* Third order 'in-phase' / 'controlled opposites' decode: */
+        for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
+          w  = p->ains[ 0][sampleIndex] * FL(0.176777);
+          x  = p->ains[ 1][sampleIndex];
+          y  = p->ains[ 2][sampleIndex];
+          u  = p->ains[ 7][sampleIndex] * FL(0.053033);
+          v  = p->ains[ 8][sampleIndex] * FL(0.053033);
+          p0 = p->ains[14][sampleIndex];
+          q  = p->ains[15][sampleIndex];
+          /* About 11 o'clock: */
+          p->aouts[0][sampleIndex]
+            = (w
+               + x * FL(0.173227) + y * FL(0.071753)
+               + u + v
+               + p0 * FL(0.004784) + q * FL(0.011548));
+          /* About 10 o'clock: */
+          p->aouts[1][sampleIndex]
+            = (w
+               + x * FL(0.071753) + y * FL(0.173227)
+               - u + v
+               - p0 * FL(0.011548) - q * FL(0.004784));
+          /* About 8 o'clock: */
+          p->aouts[2][sampleIndex]
+            = (w
+               - x * FL(0.071753) + y * FL(0.173227)
+               - u - v
+               + p0 * FL(0.004784) - q * FL(0.011548));
+          /* About 7 o'clock: */
+          p->aouts[3][sampleIndex]
+            = (w
+               - x * FL(0.173227) + y * FL(0.071753)
+               + u - v
+               - p0 * FL(0.011548) + q * FL(0.004784));
+          /* About 5 o'clock: */
+          p->aouts[4][sampleIndex]
+            = (w
+               - x * FL(0.173227) - y * FL(0.071753)
+               + u + v
+               - p0 * FL(0.004784) - q * FL(0.011548));
+          /* About 4 o'clock: */
+          p->aouts[5][sampleIndex]
+            = (w
+               - x * FL(0.071753) - y * FL(0.173227)
+               - u + v
+               + p0 * FL(0.011548) + q * FL(0.004784));
+          /* About 2 o'clock: */
+          p->aouts[6][sampleIndex]
+            = (w
+               + x * FL(0.071753) - y * FL(0.173227)
+               - u - v
+               - p0 * FL(0.004784) + q * FL(0.011548));
+          /* About 1 o'clock: */
+          p->aouts[7][sampleIndex]
+            = (w
+               + x * FL(0.173227) - y * FL(0.071753)
+               + u - v
+               + p0 * FL(0.011548) - q * FL(0.004784));
+        }
+      }
+      break;
+    case 5: /* Cube: */
+      assert(p->OUTOCOUNT == 8);
+      /* First order 'in-phase' decode: */
       for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
-        w  = p->ains[ 0][sampleIndex] * FL(0.176777);
-        x  = p->ains[ 1][sampleIndex];
-        y  = p->ains[ 2][sampleIndex];
-        u  = p->ains[ 7][sampleIndex] * FL(0.053033);
-        v  = p->ains[ 8][sampleIndex] * FL(0.053033);
-        p0 = p->ains[14][sampleIndex];
-        q  = p->ains[15][sampleIndex];
-        /* About 11 o'clock: */
-        p->aouts[0][sampleIndex]
-          = (w
-             + x * FL(0.173227) + y * FL(0.071753)
-             + u + v
-             + p0 * FL(0.004784) + q * FL(0.011548));
-        /* About 10 o'clock: */
-        p->aouts[1][sampleIndex]
-          = (w
-             + x * FL(0.071753) + y * FL(0.173227)
-             - u + v
-             - p0 * FL(0.011548) - q * FL(0.004784));
-        /* About 8 o'clock: */
-        p->aouts[2][sampleIndex]
-          = (w
-             - x * FL(0.071753) + y * FL(0.173227)
-             - u - v
-             + p0 * FL(0.004784) - q * FL(0.011548));
-        /* About 7 o'clock: */
-        p->aouts[3][sampleIndex]
-          = (w
-             - x * FL(0.173227) + y * FL(0.071753)
-             + u - v
-             - p0 * FL(0.011548) + q * FL(0.004784));
-        /* About 5 o'clock: */
-        p->aouts[4][sampleIndex]
-          = (w
-             - x * FL(0.173227) - y * FL(0.071753)
-             + u + v
-             - p0 * FL(0.004784) - q * FL(0.011548));
-        /* About 4 o'clock: */
-        p->aouts[5][sampleIndex]
-          = (w
-             - x * FL(0.071753) - y * FL(0.173227)
-             - u + v
-             + p0 * FL(0.011548) + q * FL(0.004784));
-        /* About 2 o'clock: */
-        p->aouts[6][sampleIndex]
-          = (w
-             + x * FL(0.071753) - y * FL(0.173227)
-             - u - v
-             - p0 * FL(0.004784) + q * FL(0.011548));
-        /* About 1 o'clock: */
-        p->aouts[7][sampleIndex]
-          = (w
-             + x * FL(0.173227) - y * FL(0.071753)
-             + u - v
-             + p0 * FL(0.011548) - q * FL(0.004784));
+        w = p->ains[0][sampleIndex] * FL(0.17677);
+        x = p->ains[1][sampleIndex] * FL(0.07216);
+        y = p->ains[2][sampleIndex] * FL(0.07216);
+        z = p->ains[3][sampleIndex] * FL(0.07216);
+        /* Front left bottom: */
+        p->aouts[0][sampleIndex] = w + x + y - z;
+        /* Front left top: */
+        p->aouts[1][sampleIndex] = w + x + y + z;
+        /* Back left bottom: */
+        p->aouts[2][sampleIndex] = w - x + y - z;
+        /* Back left top: */
+        p->aouts[3][sampleIndex] = w - x + y + z;
+        /* Back right bottom: */
+        p->aouts[4][sampleIndex] = w - x - y - z;
+        /* Back right top: */
+        p->aouts[5][sampleIndex] = w - x - y + z;
+        /* Front right bottom: */
+        p->aouts[6][sampleIndex] = w + x - y - z;
+        /* Front right top: */
+        p->aouts[7][sampleIndex] = w + x - y + z;
       }
+      break;
+    default:
+      assert(0);
     }
-    break;
-  case 5: /* Cube: */
-    assert(p->OUTOCOUNT == 8);
-    /* First order 'in-phase' decode: */
-    for (sampleIndex = 0; sampleIndex < sampleCount; sampleIndex++) {
-      w = p->ains[0][sampleIndex] * FL(0.17677);
-      x = p->ains[1][sampleIndex] * FL(0.07216);
-      y = p->ains[2][sampleIndex] * FL(0.07216);
-      z = p->ains[3][sampleIndex] * FL(0.07216);
-      /* Front left bottom: */
-      p->aouts[0][sampleIndex] = w + x + y - z;
-      /* Front left top: */
-      p->aouts[1][sampleIndex] = w + x + y + z;
-      /* Back left bottom: */
-      p->aouts[2][sampleIndex] = w - x + y - z;
-      /* Back left top: */
-      p->aouts[3][sampleIndex] = w - x + y + z;
-      /* Back right bottom: */
-      p->aouts[4][sampleIndex] = w - x - y - z;
-      /* Back right top: */
-      p->aouts[5][sampleIndex] = w - x - y + z;
-      /* Front right bottom: */
-      p->aouts[6][sampleIndex] = w + x - y - z;
-      /* Front right top: */
-      p->aouts[7][sampleIndex] = w + x - y + z;
-    }
-    break;
-  default:
-    assert(0);
-  }
 
-  return OK;
+    return OK;
 
 }
 
@@ -477,4 +479,3 @@ static OENTRY ambicode1_localops[] = {
 };
 
 LINKAGE1(ambicode1_localops)
-
diff --git a/Opcodes/babo.c b/Opcodes/babo.c
index b6e3c54..0d09bfb 100644
--- a/Opcodes/babo.c
+++ b/Opcodes/babo.c
@@ -155,7 +155,7 @@ BaboMemory_create(CSOUND *csound, BaboMemory *this, size_t size_in_floats)
 
     csound->AuxAlloc(csound, size_in_bytes, &this->memptr);
 
-    memset(this->memptr.auxp, 0, size_in_bytes);
+    //memset(this->memptr.auxp, 0, size_in_bytes);
 
     this->samples = size_in_floats;
 
diff --git a/Opcodes/cellular.c b/Opcodes/cellular.c
index 430aa0e..f416261 100644
--- a/Opcodes/cellular.c
+++ b/Opcodes/cellular.c
@@ -41,7 +41,7 @@ static int cell_set(CSOUND *csound,CELL *p)
     FUNC        *ftp;
     int elements;
     MYFLT *currLine, *initVec = NULL;
-	
+
     if (LIKELY((ftp = csound->FTnp2Find(csound,p->ioutFunc)) != NULL)) {
       p->outVec = ftp->ftable;
       elements = (p->elements = (int) *p->ielements);
@@ -61,7 +61,7 @@ static int cell_set(CSOUND *csound,CELL *p)
     }
     else
       return csound->InitError(csound, Str("cell: invalid rule table"));
-    
+
     if (p->auxch.auxp == NULL)
       csound->AuxAlloc(csound, elements * sizeof(MYFLT) * 2, &p->auxch);
     currLine = (p->currLine = (MYFLT *) p->auxch.auxp);
@@ -89,14 +89,14 @@ static int cell(CSOUND *csound,CELL *p)
       p->NewOld += 1;
       p->NewOld %= 2;
       actual   = &(p->currLine[elements * p->NewOld]);
-// Cellular Engine		
+// Cellular Engine
       for (j=0; j < elements; j++) {
         jm1 = (j < 1) ? elements-1 : j-1;
         outVec[j] = previous[j];
         actual[j] = ruleVec[(int)(previous[jm1]*4 + previous[j]*2 +
-                                  previous[(j+1) % elements])]; 
+                                  previous[(j+1) % elements])];
       }
-      
+
     } else {
       int elements =  p->elements;
       MYFLT *actual = &(p->currLine[elements * !(p->NewOld)]);
@@ -112,9 +112,9 @@ static int cell(CSOUND *csound,CELL *p)
 #define S sizeof
 
 static OENTRY localops[] = {
-	{"cell",  S(CELL),  3, "",  "kkiiii",(SUBR)cell_set, (SUBR)cell        }
-	};
+  {"cell",  S(CELL),  3|TB, "",  "kkiiii",(SUBR)cell_set, (SUBR)cell        }
+};
 
-LINKAGE 
+LINKAGE
 
 // Author: Gleb Rogozinsky, October 2011
diff --git a/Opcodes/chua/ChuaOscillator.cpp b/Opcodes/chua/ChuaOscillator.cpp
index e8a681c..6be129a 100644
--- a/Opcodes/chua/ChuaOscillator.cpp
+++ b/Opcodes/chua/ChuaOscillator.cpp
@@ -97,12 +97,12 @@
 //     k3(2) = (G*(M(1) + h2*k2(1) - (M(2) + h2*k2(2))) + M(3) + h2*k2(3))/C2;
 //     k3(3) = (-(M(2) + h2*k2(2) + R0*(M(3) + h2*k2(3))))/L;
 //     % Round Four
-//     k4(1) = (G*(M(2) + h*k3(2) - (M(1) + h*k3(1))) - gnor(M(1) + 
+//     k4(1) = (G*(M(2) + h*k3(2) - (M(1) + h*k3(1))) - gnor(M(1) +
 //              h*k3(1),sys_variables))/C1;
 //     k4(2) = (G*(M(1) + h*k3(1) - (M(2) + h*k3(2))) + M(3) + h*k3(3))/C2;
 //     k4(3) = (-(M(2) + h*k3(2) + R0*(M(3) + h*k3(3))))/L;
 // %Finishes integration and assigns values to M(1),
-//     M = M + (k1 + 2*k2 + 2*k3 + k4)*(h6); 
+//     M = M + (k1 + 2*k2 + 2*k3 + k4)*(h6);
 //                                           %M(2) and M(3)
 //     TimeSeries(3,i+1) = M(1);  %TimeSeries 3 is V1
 //     TimeSeries(2,i+1) = M(2);  %TimeSeries 2 is V2
@@ -131,7 +131,7 @@ public:
   MYFLT *V1;
   // INPUTS
   // % L,R0,C2,G,Ga,Gb,E,C1,a,b,c,d
-  // sys_variables = [system_vars(5:12),system_vars(23:26)]; 
+  // sys_variables = [system_vars(5:12),system_vars(23:26)];
   // % x0,y0,z0,dataset_size,step_size
   // integ_variables = [system_vars(14:16),system_vars(1:2)];
   // function TimeSeries = chuacc(L,R0,C2,G,Ga,Gb,C1,E,x0,y0,z0,
@@ -208,9 +208,9 @@ public:
     d = 0.0;
     ksmps = csound->GetKsmps(csound);
     warn(csound, "ChuasOscillatorCubic::init: L: %f  R0: %f  C2: %f  G: %f"
-         "  C1: %f  V1: %f  V2: %f  I3: %f step: %f\n", 
+         "  C1: %f  V1: %f  V2: %f  I3: %f step: %f\n",
          *L_, *R0_, *C2_, *G_, *C1_, M(1), M(2), M(3), h);
-    warn(csound, "ChuasOscillatorCubic::init: a: %f  b: %f  c: %f  d: %f\n", 
+    warn(csound, "ChuasOscillatorCubic::init: a: %f  b: %f  c: %f  d: %f\n",
          a, b, c, d);
     return OK;
   }
@@ -343,7 +343,7 @@ public:
 //     k1(3) = -beta*M(2) - gammaloc*M(3);
 //     % Round Two
 //     temp = M(1) + h2*k1(1);
-//     k2(1) = alpha*(M(2) + h2*k1(2) - bnorplus1*temp - 
+//     k2(1) = alpha*(M(2) + h2*k1(2) - bnorplus1*temp -
 //             (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
 //     k2(2) = k1(2) + h2*(k1(1) - k1(2) + k1(3));
 //     k2(3) = omch2*k1(3) - bh2*k1(2);
@@ -355,7 +355,7 @@ public:
 //     k3(3) = k1(3) - bh2*k2(2) - ch2*k2(3);
 //     % Round Four
 //     temp = M(1) + h*k3(1);
-//     k4(1) = alpha*(M(2) + h*k3(2) - bnorplus1*temp - 
+//     k4(1) = alpha*(M(2) + h*k3(2) - bnorplus1*temp -
 //             (.5)*(anor - bnor)*(abs(temp + 1) - abs(temp - 1)));
 //     k4(2) = k1(2) + h*(k3(1) - k3(2) + k3(3));
 //     k4(3) = k1(3) - bh*k3(2) - ch*k3(3);
@@ -616,4 +616,3 @@ extern "C"
     return 0;
   }
 }
-
diff --git a/Opcodes/control.c b/Opcodes/control.c
index 9713387..c2cedf4 100644
--- a/Opcodes/control.c
+++ b/Opcodes/control.c
@@ -70,7 +70,10 @@ static void start_tcl_tk(CONTROL_GLOBALS *p)
     int i;
 
     p->csound->Message(p->csound, "TCL/Tk\n");
-    pipe(p->pip1); pipe(p->pip2);
+    if (UNLIKELY(pipe(p->pip1) || pipe(p->pip2))) {
+      printf("Failed to create pipes");
+      return;
+    }
     if ((p->wish_pid = fork()) < 0)
       return;
     if (p->wish_pid == 0) {     /* Child process */
@@ -99,7 +102,10 @@ static void start_tcl_tk(CONTROL_GLOBALS *p)
     p->csound->RegisterResetCallback(p->csound, (void*) p,
                                      (int (*)(CSOUND *, void *)) kill_wish);
     fprintf(p->wish_cmd, "source nsliders.tk\n");
-    fgets(p->cmd, 100, p->wish_res);
+    if (UNLIKELY(NULL==fgets(p->cmd, 100, p->wish_res))) {
+      printf("Failed to read from child");
+      return;
+    };
     p->csound->Message(p->csound, "Wish %s\n", p->cmd);
     p->values = (int*) calloc(8, sizeof(int));
     p->minvals = (int*) calloc(8, sizeof(int));
@@ -147,7 +153,10 @@ static void readvalues(CONTROL_GLOBALS *p)
                                 /* Read all changes */
     while (select(p->pip1[0] + 1, &rfds, NULL, NULL, &tv)) {
       int n, val;
-      fscanf(p->wish_res, "%d %d", &n, &val);
+      if (UNLIKELY(2!=fscanf(p->wish_res, "%d %d", &n, &val))) {
+        printf("Failed to read from child");
+        return;
+      }
       if (n > 0) p->values[n] = val;
       else if (n == 0) p->buttons[val] = 1;
       else p->checks[-n] = val;
diff --git a/Opcodes/cpumeter.c b/Opcodes/cpumeter.c
index 38e8911..e6b5875 100644
--- a/Opcodes/cpumeter.c
+++ b/Opcodes/cpumeter.c
@@ -13,11 +13,11 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Library General Public License for more details.
- * 
+ *
  */
 
 #if defined(__MACH__) || defined(LINUX)
- 
+
 #include "csoundCore.h"
 #include <sys/resource.h>
 #include <sys/time.h>
@@ -43,7 +43,7 @@ typedef          long long SIC_t;
 
 typedef struct CPU_t {
    TIC_t u, n, s, i, w, x, y, z; // as represented in /proc/stat
-   TIC_t u_sav, n_sav, s_sav, i_sav, 
+   TIC_t u_sav, n_sav, s_sav, i_sav,
          w_sav, x_sav, y_sav, z_sav;
    unsigned id;  // the CPU ID number
 } CPU_t;
@@ -107,7 +107,7 @@ static int cpupercent_renew(CSOUND *csound, CPUMETER* p)
     rewind(p->fp);
     fflush(p->fp);
     k = p->cpu_max;
-    if (!fgets(buf, SMLBUFSIZ, p->fp)) 
+    if (!fgets(buf, SMLBUFSIZ, p->fp))
       return csound->PerfError(csound,Str("failed /proc/stat read"));
     num = sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu",
                  &cpu[k].u, &cpu[k].n, &cpu[k].s, &cpu[k].i,
@@ -198,7 +198,7 @@ static int cpupercent(CSOUND *csound, CPUMETER* p)
       p->cnt = p->trig;
       return n;
     }
-    return OK;   
+    return OK;
 }
 
 #define S(x)    sizeof(x)
diff --git a/Opcodes/crossfm.h b/Opcodes/crossfm.h
index 129d167..67b9f1d 100644
--- a/Opcodes/crossfm.h
+++ b/Opcodes/crossfm.h
@@ -49,12 +49,12 @@
 
 typedef struct {
   OPDS h;                                     /* common to all opcodes */
-  
+
   MYFLT *aout1, *aout2;                       /* output args */
   MYFLT *xfrq1, *xfrq2, *xndx1, *xndx2;       /* input args  */
   MYFLT *kcps, *ifn1, *ifn2;                  /* input args  */
   MYFLT *iphs1, *iphs2;                       /* input args  */
-  
+
   MYFLT phase1, phase2;                       /* phase of oscillators       */
   MYFLT sig1, sig2;                           /* a-rate oscillators outputs */
   MYFLT siz1, siz2;                           /* size of funtion tables     */
@@ -63,4 +63,3 @@ typedef struct {
                                               /* pointers (0 for i-rate and */
                                               /* k-rate, 1 for a-rate args  */
 } CROSSFM;
-
diff --git a/Opcodes/dcblockr.c b/Opcodes/dcblockr.c
index f8b5eed..260e03a 100644
--- a/Opcodes/dcblockr.c
+++ b/Opcodes/dcblockr.c
@@ -92,6 +92,7 @@ static int dcblock2set(CSOUND *csound, DCBlock2* p)
         p->delay1.size < (order-1)*2*sizeof(double))
       csound->AuxAlloc(csound, (order-1)*2*sizeof(double),
                        &p->delay1);
+
     if (p->iirdelay1.auxp == NULL ||
         p->iirdelay1.size < (order)*sizeof(double))
       csound->AuxAlloc(csound,
diff --git a/Opcodes/dssi4cs/src/dssi4cs.c b/Opcodes/dssi4cs/src/dssi4cs.c
index 68c7b7f..c890df3 100644
--- a/Opcodes/dssi4cs/src/dssi4cs.c
+++ b/Opcodes/dssi4cs/src/dssi4cs.c
@@ -587,6 +587,16 @@ int dssiaudio_init(CSOUND * csound, DSSIAUDIO * p)
 {
     /* TODO not realtime safe, try to make it so. */
     int     Number = *p->iDSSIhandle;
+    int     icnt = csound->GetInputArgCnt(p) - 1;
+    int     ocnt = csound->GetOutputArgCnt(p);
+
+    if (UNLIKELY(icnt > DSSI4CS_MAX_IN_CHANNELS))
+      csound->Die(csound, Str("DSSI4CS: number of audio input channels is greater than %d"),
+                  DSSI4CS_MAX_IN_CHANNELS);
+
+    if (UNLIKELY(ocnt > DSSI4CS_MAX_OUT_CHANNELS))
+      csound->Die(csound, Str("DSSI4CS: number of audio output channels is greater than %d"),
+                  DSSI4CS_MAX_OUT_CHANNELS);
 
 #ifdef DEBUG
     csound->Message(csound,
@@ -669,7 +679,7 @@ int dssiaudio_init(CSOUND * csound, DSSIAUDIO * p)
 
     p->NumInputPorts = ConnectedInputPorts;
     p->NumOutputPorts = ConnectedOutputPorts;
-    if ((p->NumInputPorts) < (csound->GetInputArgCnt(p) - 1)) {
+    if ((p->NumInputPorts) < icnt) {
       if (p->NumInputPorts == 0)
         csound->Message(csound, "DSSI4CS: Plugin '%s' has %i audio input ports "
                                 "audio input discarded.\n",
@@ -679,7 +689,7 @@ int dssiaudio_init(CSOUND * csound, DSSIAUDIO * p)
                                          "has %i audio input ports.",
                                          Descriptor->Name, p->NumOutputPorts);
     }
-    if (p->NumOutputPorts < csound->GetOutputArgCnt(p))
+    if (p->NumOutputPorts < ocnt)
       return csound->InitError(csound, "DSSI4CS: Plugin '%s' "
                                        "has %i audio output ports.",
                                        Descriptor->Name, p->NumOutputPorts);
@@ -1048,7 +1058,7 @@ static OENTRY dssi_localops[] = {
     {"dssiactivate", sizeof(DSSIACTIVATE), 3, "", "ik",
      (SUBR) dssiactivate_init, (SUBR) dssiactivate, NULL }
     ,
-    {"dssiaudio", sizeof(DSSIAUDIO), 5, "mmmm", "iy", (SUBR) dssiaudio_init,
+    {"dssiaudio", sizeof(DSSIAUDIO), 5, "mmmmmmmmm", "iMMMMMMMMM", (SUBR) dssiaudio_init,
      NULL, (SUBR) dssiaudio }
     ,
     {"dssictls", sizeof(DSSICTLS), 3, "", "iikk", (SUBR) dssictls_init,
diff --git a/Opcodes/dssi4cs/src/dssi4cs.h b/Opcodes/dssi4cs/src/dssi4cs.h
index 31e369a..7621e63 100644
--- a/Opcodes/dssi4cs/src/dssi4cs.h
+++ b/Opcodes/dssi4cs/src/dssi4cs.h
@@ -23,8 +23,8 @@
 #include "dssi.h"
 
 /* When changing these remember to change dssiaudio function */
-#define DSSI4CS_MAX_IN_CHANNELS 4
-#define DSSI4CS_MAX_OUT_CHANNELS 4
+#define DSSI4CS_MAX_IN_CHANNELS 9
+#define DSSI4CS_MAX_OUT_CHANNELS 9
 
 enum PluginType {LADSPA, DSSI};
 
diff --git a/Opcodes/fout.c b/Opcodes/fout.c
index e65d2a8..fa0decd 100644
--- a/Opcodes/fout.c
+++ b/Opcodes/fout.c
@@ -516,7 +516,7 @@ static int ioutfile_set(CSOUND *csound, IOUTFILE *p)
     }
     else { /* binary format */
       for (j = 0; j < p->INOCOUNT - 3; j++) {
-        fwrite(args[j], sizeof(MYFLT), 1, rfil);
+        if (UNLIKELY(1!=fwrite(args[j], sizeof(MYFLT), 1, rfil))) return NOTOK;
       }
     }
     return OK;
@@ -583,7 +583,7 @@ static int ioutfile_r(CSOUND *csound, IOUTFILE_R *p)
     }
     else { /* binary format */
       for (j = 0; j < p->INOCOUNT - 3; j++) {
-        fwrite(args[j], sizeof(MYFLT), 1, rfil);
+        if (UNLIKELY(1!=fwrite(args[j], sizeof(MYFLT), 1, rfil))) return NOTOK;
       }
     }
     p->done = 0;
diff --git a/Opcodes/ftgen.c b/Opcodes/ftgen.c
index 21fa8cb..1062238 100644
--- a/Opcodes/ftgen.c
+++ b/Opcodes/ftgen.c
@@ -252,77 +252,78 @@ static int ftload(CSOUND *csound, FTLOAD *p)
         memset(&header, 0, sizeof(FUNC));
         /* IMPORTANT!! If FUNC structure and/or GEN01ARGS structure
            will be modified, the following code has to be modified too */
-        fgets(s, 64, file);
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;
+        s1 = strchr(s, ' ')+1;
         header.flen = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.lenmask = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.lobits = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.lomask = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.lodiv = (MYFLT)strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.cvtbas = (MYFLT)strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.cpscvt = (MYFLT)strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.loopmode1 = (int16) strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.loopmode2 = (int16) strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.begin1 = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.end1 = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.begin2 = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.end2 = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.soundend = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.flenfrms = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.nchanls = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.fno = strtol(s1, &endptr, 10);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.gen01args.gen01 = (MYFLT)strtod(s1, &endptr);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.gen01args.ifilno = (MYFLT)strtod(s1, &endptr);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.gen01args.iskptim = (MYFLT)strtod(s1, &endptr);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.gen01args.iformat = (MYFLT)strtod(s1, &endptr);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.gen01args.channel = (MYFLT)strtod(s1, &endptr);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);  s1 = strchr(s, ' ')+1;
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         header.gen01args.sample_rate = (MYFLT)strtod(s1, &endptr);
         if (UNLIKELY(endptr==NULL)) goto err4;
-        fgets(s, 64, file);
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;  s1 = strchr(s, ' ')+1;
         /* WARNING! skips header.gen01args.strarg from saving/loading
            in text format */
         header.fno = (int32) fno;
@@ -332,11 +333,11 @@ static int ftload(CSOUND *csound, FTLOAD *p)
         memcpy(ftp, &header, sizeof(FUNC) - sizeof(MYFLT));
         memset(&(ftp->ftable[0]), 0, sizeof(MYFLT) * (ftp->flen + 1));
         for (j = 0; j <= ftp->flen; j++) {
-          fgets(s, 64, file);
+          if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;
           ftp->ftable[j] = (MYFLT) strtod(s, &endptr);
           if (UNLIKELY(endptr==NULL)) goto err4;
         }
-        fgets(s, 64, file);
+        if (UNLIKELY(NULL==fgets(s, 64, file))) goto err4;
         argp++;
       }
     }
diff --git a/Opcodes/grain4.c b/Opcodes/grain4.c
index 17cfd3c..fdea5ff 100644
--- a/Opcodes/grain4.c
+++ b/Opcodes/grain4.c
@@ -34,7 +34,7 @@
 /* Minor changes by John Fitch Dec 1995                 */
 
 // #include "csdl.h"
-#include "csoundCore.h"        
+#include "csoundCore.h"
 #include "interlocks.h"
 #include "grain4.h"
 #include <math.h>
@@ -436,4 +436,3 @@ static OENTRY grain4_localops[] = {
 };
 
 LINKAGE1(grain4_localops)
-
diff --git a/Opcodes/hrtfearly.c b/Opcodes/hrtfearly.c
index 4e95070..3e71ae8 100644
--- a/Opcodes/hrtfearly.c
+++ b/Opcodes/hrtfearly.c
@@ -153,7 +153,7 @@ typedef struct
            coeffs, gain for 3 band pass, same for floor and ceiling] */
         MYFLT *in, *srcx, *srcy, *srcz, *lstnrx, *lstnry, *lstnrz, *ifilel, *ifiler,
               *idefroom, *ofade, *osr, *porder, *othreed, *Oheadrot,
-              *ormx, *ormy, *ormz, *owlh, *owll, *owlg1, *owlg2, *owlg3, *oflh, 
+              *ormx, *ormy, *ormz, *owlh, *owll, *owlg1, *owlg2, *owlg3, *oflh,
               *ofll, *oflg1, *oflg2, *oflg3,*oclh, *ocll, *oclg1, *oclg2, *oclg3;
 
         /* check if relative source has changed, to avoid recalculations */
@@ -325,7 +325,7 @@ static int early_init(CSOUND *csound, early *p)
       return
         csound->InitError(csound,
                           Str("\n\n\nCannot load left data file, exiting\n\n"));
-    
+
     fpr = csound->ldmemfile2withCB(csound, filer, CSFTYPE_FLOATS_BINARY,
                                    swap4bytes);
     if (UNLIKELY(fpr == NULL))
@@ -355,7 +355,7 @@ static int early_init(CSOUND *csound, early *p)
     /* 3 default rooms allowed*/
     if(defroom > 3)
       defroom = 1;
-    
+
     /* setup wall coeffs: walls: plasterboard, ceiling: painted plaster,
        floor: carpet
        if any default room is chosen, default parameters for walls/ceiling/floor */
@@ -433,7 +433,7 @@ static int early_init(CSOUND *csound, early *p)
         rmy = 25;
         rmz = 7;
       }
-    
+
     /* read values if they exist, use medium if not valid (must be at
        least a 2*2*2 room! */
     else
@@ -474,35 +474,53 @@ static int early_init(CSOUND *csound, early *p)
     /* allocate memory, reuse if possible: interpolation buffers */
     if (!p->lowl1.auxp || p->lowl1.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowl1);
+    else
+      memset(p->lowl1.auxp, 0, irlength * sizeof(MYFLT));
+
     if (!p->lowr1.auxp || p->lowr1.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowr1);
+    else
+      memset(p->lowr1.auxp, 0, irlength * sizeof(MYFLT));
+
     if (!p->lowl2.auxp || p->lowl2.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowl2);
+    else
+      memset(p->lowl2.auxp, 0, irlength * sizeof(MYFLT));
+
     if (!p->lowr2.auxp || p->lowr2.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->lowr2);
+    else
+      memset(p->lowr2.auxp, 0, irlength * sizeof(MYFLT));
+
     if (!p->highl1.auxp || p->highl1.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl1);
+    else
+      memset(p->highl1.auxp, 0, irlength * sizeof(MYFLT));
+
     if (!p->highr1.auxp || p->highr1.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr1);
+    else
+      memset(p->highr1.auxp, 0, irlength * sizeof(MYFLT));
+
     if (!p->highl2.auxp || p->highl2.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl2);
+    else
+      memset(p->highl2.auxp, 0, irlength * sizeof(MYFLT));
+
     if (!p->highr2.auxp || p->highr2.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr2);
+    else
+      memset(p->highr2.auxp, 0, irlength * sizeof(MYFLT));
+
     if (!p->hrtflinterp.auxp || p->hrtflinterp.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->hrtflinterp);
+    else
+      memset(p->hrtflinterp.auxp, 0, irlength * sizeof(MYFLT));
+
     if (!p->hrtfrinterp.auxp || p->hrtfrinterp.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->hrtfrinterp);
-
-    memset(p->lowl1.auxp, 0, irlength * sizeof(MYFLT));
-    memset(p->lowr1.auxp, 0, irlength * sizeof(MYFLT));
-    memset(p->lowl2.auxp, 0, irlength * sizeof(MYFLT));
-    memset(p->lowr2.auxp, 0, irlength * sizeof(MYFLT));
-    memset(p->highl1.auxp, 0, irlength * sizeof(MYFLT));
-    memset(p->highl2.auxp, 0, irlength * sizeof(MYFLT));
-    memset(p->highr1.auxp, 0, irlength * sizeof(MYFLT));
-    memset(p->highr2.auxp, 0, irlength * sizeof(MYFLT));
-    memset(p->hrtflinterp.auxp, 0, irlength * sizeof(MYFLT));
-    memset(p->hrtfrinterp.auxp, 0, irlength * sizeof(MYFLT));
+    else
+      memset(p->hrtfrinterp.auxp, 0, irlength * sizeof(MYFLT));
 
     /* hrtf processing buffers */
     if (!p->hrtflpad.auxp || p->hrtflpad.size < irlengthpad * sizeof(MYFLT))
@@ -1605,23 +1623,23 @@ static int early_process(CSOUND *csound, early *p)
                                         band(hrtfrinterp, FL(4000.0), FL(4000.0) / p->q, p->ceilingg3, deldoubler, irlength, sr);
                                       }
                                   }
-                                
+
                                 for(i = 0; i < irlength; i++)
                                   {
                                     hrtflpad[i] = hrtflinterp[i];
                                     hrtfrpad[i] = hrtfrinterp[i];
                                   }
-                                
+
                                 for(i = irlength; i < irlengthpad; i++)
                                   {
                                     hrtflpad[i] = FL(0.0);
                                     hrtfrpad[i] = FL(0.0);
                                   }
-                                
+
                                 /* back to freq domain */
                                 csound->RealFFT(csound, hrtflpad, irlengthpad);
                                 csound->RealFFT(csound, hrtfrpad, irlengthpad);
-                                
+
                                 /* store */
                                 for(i = 0; i < irlengthpad; i++)
                                   {
@@ -1631,7 +1649,7 @@ static int early_process(CSOUND *csound, early *p)
                               }
                           }       /* end of source / listener relative
                                      change process */
-                        
+
                         /* look after overlap add */
                         for(i = 0; i < overlapsize ; i++)
                           {
diff --git a/Opcodes/hrtferX.c b/Opcodes/hrtferX.c
index 565f3e4..34c2ad3 100644
--- a/Opcodes/hrtferX.c
+++ b/Opcodes/hrtferX.c
@@ -51,7 +51,7 @@
  ***************************************************************/
 
 // #include "csdl.h"
-#include "csoundCore.h"        
+#include "csoundCore.h"
 #include "interlocks.h"
 #include <stdio.h>
 #include <math.h>
@@ -499,4 +499,3 @@ static OENTRY hrtferX_localops[] = {
 };
 
 LINKAGE1(hrtferX_localops)
-
diff --git a/Opcodes/hrtfopcodes.c b/Opcodes/hrtfopcodes.c
index 3587c62..7282255 100644
--- a/Opcodes/hrtfopcodes.c
+++ b/Opcodes/hrtfopcodes.c
@@ -769,7 +769,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                         lowr1[i] = fpindexr[skip+i];
                       }
                   }
-                
+
                 skip = 0;
                 if(angleindex2 > elevationarray[elevindexlow] / 2)
                   {
@@ -797,7 +797,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                         lowr2[i] = fpindexr[skip+i];
                       }
                   }
-                
+
                 skip = 0;
                 if(angleindex3 > elevationarray[elevindexhigh] / 2)
                   {
@@ -825,7 +825,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                         highr1[i] = fpindexr[skip+i];
                       }
                   }
-                
+
                 skip = 0;
                 if(angleindex4 > elevationarray[elevindexhigh] / 2)
                   {
@@ -888,7 +888,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                     logmagl[1] = LOG(magl == FL(0.0) ? FL(0.00000001) : magl);
                   }
                 else
-                  
+
                   {
                     if(currentphasel[1] < FL(0.0))
                       hrtflfloat[1] = -magl;
@@ -1037,7 +1037,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                     hrtflpad[i] = FL(0.0);
                     hrtfrpad[i] = FL(0.0);
                   }
-                
+
                 /* back to freq domain */
                 csound->RealFFT(csound, hrtflpad, irlengthpad);
                 csound->RealFFT(csound, hrtfrpad, irlengthpad);
@@ -1065,7 +1065,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                           skip++;
                         delaylow1 = minphasedels[skip];
                       }
-                    
+
                     /* point 2 */
                     skip = 0;
                     if(angleindex2 > elevationarray[elevindexlow] / 2)
@@ -1086,7 +1086,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                           skip++;
                         delaylow2 = minphasedels[skip];
                       }
-                    
+
                     /* point 3 */
                     skip = 0;
                     if(angleindex3 > elevationarray[elevindexhigh] / 2)
@@ -1107,7 +1107,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                           skip++;
                         delayhigh1 = minphasedels[skip];
                       }
-                    
+
                     /* point 4 */
                     skip = 0;
                     if(angleindex4 > elevationarray[elevindexhigh] / 2)
@@ -1136,7 +1136,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                                               angleindex4per);
                     delayfloat = delaylow + ((delayhigh - delaylow) *
                                              elevindexhighper);
-                    
+
                     p->delayfloat = delayfloat;
                   }
                 /* end of angle/elev change process */
@@ -1180,7 +1180,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                                 irlengthpad, FL(1.0));
             csound->RealFFTMult(csound, outspecr, hrtfrpad, complexinsig,
                                 irlengthpad, FL(1.0));
-            
+
             /* convolution is the inverse FFT of above result */
             csound->InverseRealFFT(csound, outspecl, irlengthpad);
             csound->InverseRealFFT(csound, outspecr, irlengthpad);
@@ -1214,7 +1214,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                         outlold[i] = outspecoldl[i] / (sr / FL(38000.0));
                         outrold[i] = outspecoldr[i] / (sr / FL(38000.0));
                       }
-                    
+
                     cross++;
                     /* number of processing buffers in a fade */
                     cross = cross % fade;
@@ -1296,7 +1296,7 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                     outl[i] = outvdl;
                     ptl = (ptl != mdtl - 1 ? ptl + 1 : 0);
                   }
-                
+
                 p->ptl = ptl;
                 p->ptr = ptr;
               }
@@ -1309,11 +1309,11 @@ static int hrtfmove_process(CSOUND *csound, hrtfmove *p)
                 p->cross = cross;
                 p->l = l;
               }
-            
+
           }       /* end of irlength == counter */
-        
+
       }   /* end of ksmps audio loop */
-    
+
     /* update */
     p->counter = counter;
     if(phasetrunc)
@@ -1447,7 +1447,7 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
         irlengthpad = 512;
         overlapsize = (irlength - 1);
       }
-    
+
     /* copy in string name... */
     strncpy(filel, (char*) p->ifilel, MAXNAME);
     strncpy(filer, (char*) p->ifiler, MAXNAME);
@@ -1459,7 +1459,7 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
       return
         csound->InitError(csound,
                           Str("\n\n\nCannot load left data file, exiting\n\n"));
-    
+
     fpr = csound->ldmemfile2withCB(csound, filer, CSFTYPE_FLOATS_BINARY,
                                    swap4bytes);
     if (UNLIKELY(fpr == NULL))
@@ -1503,7 +1503,7 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
       csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapl);
     if (!p->overlapr.auxp || p->overlapr.size < overlapsize * sizeof(MYFLT))
       csound->AuxAlloc(csound, overlapsize*sizeof(MYFLT), &p->overlapr);
-    
+
     memset(p->insig.auxp, 0, irlength * sizeof(MYFLT));
     memset(p->outl.auxp, 0, irlengthpad * sizeof(MYFLT));
     memset(p->outr.auxp, 0, irlengthpad * sizeof(MYFLT));
@@ -1534,7 +1534,7 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highl2);
     if (!p->highr2.auxp || p->highr2.size < irlength * sizeof(MYFLT))
       csound->AuxAlloc(csound, irlength * sizeof(MYFLT), &p->highr2);
-    
+
     /* best to zero, for future changes (filled in init) */
     memset(p->lowl1.auxp, 0, irlength * sizeof(MYFLT));
     memset(p->lowr1.auxp, 0, irlength * sizeof(MYFLT));
@@ -1590,16 +1590,16 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
     /* two nearest elev indices to avoid recalculating */
     elevindexstore = (elev - minelev) / elevincrement;
     elevindexlow = (int)elevindexstore;
-    
+
     if(elevindexlow < 13)
       elevindexhigh = elevindexlow + 1;
     /* highest index reached */
     else
       elevindexhigh = elevindexlow;
-    
+
     /* get percentage value for interpolation */
     elevindexhighper = elevindexstore - elevindexlow;
-    
+
     /* avoid recalculation */
     angleindexlowstore = angle / (FL(360.0) / elevationarray[elevindexlow]);
     angleindexhighstore = angle / (FL(360.0) / elevationarray[elevindexhigh]);
@@ -1646,7 +1646,7 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
             lowr1[i] = fpindexr[skip + i];
           }
       }
-    
+
     skip = 0;
     if(angleindex2 > elevationarray[elevindexlow] / 2)
       {
@@ -1672,7 +1672,7 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
             lowr2[i] = fpindexr[skip + i];
           }
       }
-    
+
     skip = 0;
     if(angleindex3 > elevationarray[elevindexhigh] / 2)
       {
@@ -1796,7 +1796,7 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
             if((i / 2) < 6)
               itd = itdww * nonlinitd[(i / 2) - 1];
           }
-        
+
         if(angle > FL(180.))
           {
             phasel = TWOPI_F * freq * (itd / 2);
@@ -1807,7 +1807,7 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
             phasel = TWOPI_F * freq * -(itd / 2);
             phaser = TWOPI_F * freq * (itd / 2);
           }
-        
+
         /* polar to rectangular */
         hrtflfloat[i] = magl * COS(phasel);
         hrtflfloat[i+1] = magl * SIN(phasel);
@@ -1848,7 +1848,7 @@ static int hrtfstat_init(CSOUND *csound, hrtfstat *p)
         hrtflpad[i] = FL(0.0);
         hrtfrpad[i] = FL(0.0);
       }
-    
+
     /* back to freq domain */
     csound->RealFFT(csound, hrtflpad, irlengthpad);
     csound->RealFFT(csound, hrtfrpad, irlengthpad);
@@ -1919,9 +1919,9 @@ static int hrtfstat_process(CSOUND *csound, hrtfstat *p)
 
             for (i = irlength; i <  irlengthpad; i++)
               complexinsig[i] = FL(0.0);
-            
+
             csound->RealFFT(csound, complexinsig, irlengthpad);
-            
+
             /* complex multiplication */
             csound->RealFFTMult(csound, outspecl, hrtflpad, complexinsig,
                                 irlengthpad, FL(1.0));
@@ -2062,21 +2062,21 @@ static int hrtfmove2_init(CSOUND *csound, hrtfmove2 *p)
     strncpy(filel, (char*) p->ifilel, MAXNAME);
     strncpy(filer, (char*) p->ifiler, MAXNAME);
 
-    /* reading files, with byte swap */ 
+    /* reading files, with byte swap */
     fpl = csound->ldmemfile2withCB(csound, filel, CSFTYPE_FLOATS_BINARY,
                                    swap4bytes);
     if (UNLIKELY(fpl == NULL))
      return
         csound->InitError(csound,
                           Str("\n\n\nCannot load left data file, exiting\n\n"));
-    
+
     fpr = csound->ldmemfile2withCB(csound, filer, CSFTYPE_FLOATS_BINARY,
                                    swap4bytes);
     if (UNLIKELY(fpr == NULL))
       return
         csound->InitError(csound,
                           Str("\n\n\nCannot load right data file, exiting\n\n"));
-    
+
     p->irlength = irlength;
     p->sroverN = sr / irlength;
 
@@ -2091,7 +2091,7 @@ static int hrtfmove2_init(CSOUND *csound, hrtfmove2 *p)
     if(r <= 0 || r > 15)
       r = FL(8.8);
     p->radius = r;
-    
+
     p->hopsize = (int)(irlength / overlap);
 
     /* buffers */
@@ -2277,7 +2277,7 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
               win[overlapskipin[i]];
             overlapskipin[i]++;
           }
-        
+
         counter++;
 
         if(counter == hopsize)
@@ -2287,12 +2287,12 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
               elev = FL(90.0);
             if(elev < FL(-40.0))
               elev = FL(-40.0);
-            
+
             while(angle < FL(0.0))
               angle += FL(360.0);
             while(angle >= FL(360.0))
               angle -= FL(360.0);
-            
+
             if(angle != p->anglev || elev != p->elevv)
               {
                 /* two nearest elev indices to avoid recalculating */
@@ -2304,16 +2304,16 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
                 /* highest index reached */
                 else
                   elevindexhigh = elevindexlow;
-                
+
                 /* get percentage value for interpolation */
                 elevindexhighper = elevindexstore - elevindexlow;
-                
+
                 /* avoid recalculation */
                 angleindexlowstore = angle / (FL(360.0) /
                                               elevationarray[elevindexlow]);
                 angleindexhighstore = angle / (FL(360.0) /
                                                elevationarray[elevindexhigh]);
-                
+
                 /* 4 closest indices, 2 low and 2 high */
                 angleindex1 = (int)angleindexlowstore;
 
@@ -2414,7 +2414,7 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
                         highr1[i] = fpindexr[skip + i];
                       }
                   }
-                
+
                 skip = 0;
                 if(angleindex4 > elevationarray[elevindexhigh] / 2)
                   {
@@ -2450,7 +2450,7 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
                 else
                   radianangle = angle * PI_F / FL(180.0);  /* degrees to radians */
                 radianelev = elev * PI_F / FL(180.0);
-                
+
                 /* get in correct range for formula */
                 if(radianangle > (PI_F / FL(2.0)))
                   radianangle = FL(PI) - radianangle;
@@ -2467,13 +2467,13 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
                 maglhigh = FABS(highl1[0]) + (FABS(highl2[0]) - FABS(highl1[0])) *
                   angleindex4per;
                 hrtflfloat[0] = magllow + (maglhigh - magllow) * elevindexhighper;
-                
+
                 magllow = FABS(lowl1[1]) + (FABS(lowl2[1]) - FABS(lowl1[1])) *
                   angleindex2per;
                 maglhigh = FABS(highl1[1]) + (FABS(highl2[1]) - FABS(highl1[1])) *
                   angleindex4per;
                 hrtflfloat[1] = magllow + (maglhigh - magllow) * elevindexhighper;
-                
+
                 magrlow = FABS(lowr1[0]) + (FABS(lowr2[0]) - FABS(lowr1[0])) *
                   angleindex2per;
                 magrhigh = FABS(highr1[0]) + (FABS(highr2[0]) - FABS(highr1[0])) *
@@ -2492,16 +2492,16 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
                     /* interpolate high and low mags */
                     magllow = lowl1[i] + (lowl2[i] - lowl1[i]) * angleindex2per;
                     maglhigh = highl1[i] + (highl2[i] - highl1[i]) * angleindex4per;
-                    
+
                     magrlow = lowr1[i] + (lowr2[i] - lowr1[i]) * angleindex2per;
                     magrhigh = highr1[i] + (highr2[i] - highr1[i]) * angleindex4per;
-                    
+
                     /* interpolate high and low results */
                     magl = magllow + (maglhigh - magllow) * elevindexhighper;
                     magr = magrlow + (magrhigh - magrlow) * elevindexhighper;
-                    
+
                     freq = (i / 2) * sroverN;
-                    
+
                     /* non linear itd...last value in array = 1.0, so back to itdww */
                     if(p->sr == 96000)
                       {
@@ -2518,7 +2518,7 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
                         if((i / 2) < 6)
                           itd = itdww * nonlinitd[(i / 2) - 1];
                       }
-                    
+
                     if(angle > FL(180.))
                       {
                         phasel = TWOPI_F * freq * (itd / 2);
@@ -2528,38 +2528,38 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
                         phasel = TWOPI_F * freq * -(itd / 2);
                         phaser = TWOPI_F * freq * (itd / 2);
                       }
-                    
+
                     /* polar to rectangular */
                     hrtflfloat[i] = magl * COS(phasel);
                     hrtflfloat[i+1] = magl * SIN(phasel);
-                    
+
                     hrtfrfloat[i] = magr * COS(phaser);
                     hrtfrfloat[i+1] = magr * SIN(phaser);
                   }
-                
+
                 p->elevv = elev;
                 p->anglev = angle;
               }
-            
+
             /* t used to read inbuf...*/
             t--;
             if(t < 0)
               t = overlap - 1;
-            
+
             /* insert insig for complex real, im fft */
             for(i = 0; i < irlength; i++)
               complexinsig[i] = inbuf[(t * irlength) + i];
-            
+
             /* zero the current input sigframe time pointer */
             overlapskipin[t] = 0;
-            
+
             csound->RealFFT(csound, complexinsig, irlength);
-            
+
             csound->RealFFTMult(csound, outspecl, hrtflfloat,
                                 complexinsig, irlength, FL(1.0));
             csound->RealFFTMult(csound, outspecr, hrtfrfloat,
                                 complexinsig, irlength, FL(1.0));
-            
+
             /* convolution is the inverse FFT of above result */
             csound->InverseRealFFT(csound, outspecl, irlength);
             csound->InverseRealFFT(csound, outspecr, irlength);
@@ -2572,7 +2572,7 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
                 outbufr[(t * irlength) + i] = outspecr[i] /
                   (overlap * FL(0.5) * (sr / FL(44100.0)));
               }
-            
+
           }       /* end of !counter % hopsize */
 
         /* output = sum of all relevant outputs: eg if overlap = 4 and
@@ -2607,7 +2607,7 @@ static int hrtfmove2_process(CSOUND *csound, hrtfmove2 *p)
 
         outsigl[j] = outsuml;
         outsigr[j] = outsumr;
-        
+
       }   /* end of ksmps audio loop */
 
     /* update */
diff --git a/Opcodes/hrtfreverb.c b/Opcodes/hrtfreverb.c
index ff57680..92722ab 100644
--- a/Opcodes/hrtfreverb.c
+++ b/Opcodes/hrtfreverb.c
@@ -411,7 +411,7 @@ int hrtfreverb_init(CSOUND *csound, hrtfreverb *p)
     Mtwelve = abs((int)(delaytime / 12) - meanfpsamps);
     Mtwentyfour = abs((int)(delaytime / 24) - meanfpsamps);
     M = Mtwelve < Mtwentyfour ? (Msix < Mtwelve ? 6 : 12) : 24;
-    
+
     csound->Message(csound, "%d \n", M);
 
     delaytime /= M;
@@ -442,7 +442,7 @@ int hrtfreverb_init(CSOUND *csound, hrtfreverb *p)
         if(delaytimeint < 410)
           delaytimeint = 410;
       }
-   
+
     /* allocate memory based on M: number of delays */
     if (!p->delays.auxp || p->delays.size < M * sizeof(int))
       csound->AuxAlloc(csound, M * sizeof(int), &p->delays);
@@ -476,7 +476,7 @@ int hrtfreverb_init(CSOUND *csound, hrtfreverb *p)
           test = (i > 15 ? i : 15) - 15;
         else
           test = (i > 16 ? i : 16) - 16;
-        
+
         if(primes[i] > delaytimeint || primes[test] > meanfpordersamps)
           {
             basedelay = i - 1;
@@ -592,7 +592,7 @@ int hrtfreverb_init(CSOUND *csound, hrtfreverb *p)
           csound->AuxAlloc(csound, delaysp[22] * sizeof(MYFLT), &p->del11tf);
         if (!p->del12tf.auxp || p->del12tf.size < delaysp[23] * sizeof(MYFLT))
           csound->AuxAlloc(csound, delaysp[23] * sizeof(MYFLT), &p->del12tf);
-        
+
         memset(p->del1tf.auxp, 0, delaysp[12] * sizeof(MYFLT));
         memset(p->del2tf.auxp, 0, delaysp[13] * sizeof(MYFLT));
         memset(p->del3tf.auxp, 0, delaysp[14] * sizeof(MYFLT));
@@ -649,7 +649,7 @@ int hrtfreverb_init(CSOUND *csound, hrtfreverb *p)
             powerp[0] = powerp[0] + SQUARE(bufflp[0]) + SQUARE(buffrp[0]);
             powerp[1] = powerp[1] + SQUARE(bufflp[1]) + SQUARE(buffrp[1]);
           }
-        
+
         for(j = 2; j < irlength; j += 2)
           {
             if(skipdouble)
@@ -664,7 +664,7 @@ int hrtfreverb_init(CSOUND *csound, hrtfreverb *p)
 
     for(i = 0; i < irlength; i++)
       HRTFavep[i] = SQRT(powerp[i] / FL(710.0));
-    
+
     fpindexl = (float *)fpl->beginp;
     fpindexr = (float *)fpr->beginp;
     skip = 0;
@@ -687,7 +687,7 @@ int hrtfreverb_init(CSOUND *csound, hrtfreverb *p)
             bufflp[j] = fpindexl[skip + j];
             buffrp[j] = fpindexr[skip + j];
           }
-        
+
         /* back to rectangular to find numerator: need complex nos */
         /* 0Hz and Nyq ok as real */
         if(skipdouble)
@@ -955,7 +955,7 @@ int hrtfreverb_process(CSOUND *csound, hrtfreverb *p)
     inmatlpp = (MYFLT *)p->inmatlp.auxp;
     dellpp = (MYFLT *)p->dellp.auxp;
     outmatp = (MYFLT *)p->outmat.auxp;
-    
+
     gip = (MYFLT *)p->gi.auxp;
     aip = (MYFLT *)p->ai.auxp;
 
@@ -1067,7 +1067,7 @@ int hrtfreverb_process(CSOUND *csound, hrtfreverb *p)
            gi ( 1 - ai / 1 - ai pow(z,-1)
            op = gi - gi ai x(n) + ai del
            del = op */
-                
+
         for(j = 0; j < M; j++)
           {
             inmatlpp[j] = (gip[j] * (1 - aip[j]) * inmatp[j]) +
@@ -1124,14 +1124,14 @@ int hrtfreverb_process(CSOUND *csound, hrtfreverb *p)
             del11tfp[ytf2] = outmatp[22] + sigin;
             del12tfp[ztf2] = outmatp[23] + sigin;
           }
-                
+
         u = (u != delaysp[0] - 1 ? u + 1 : 0);
         v = (v != delaysp[1] - 1 ? v + 1 : 0);
         w = (w != delaysp[2] - 1 ? w + 1 : 0);
         x = (x != delaysp[3] - 1 ? x + 1 : 0);
         y = (y != delaysp[4] - 1 ? y + 1 : 0);
         z = (z != delaysp[5] - 1 ? z + 1 : 0);
-                
+
         if(M == 12 || M == 24)
           {
             ut = (ut != delaysp[6] - 1 ? ut + 1 : 0);
@@ -1160,7 +1160,7 @@ int hrtfreverb_process(CSOUND *csound, hrtfreverb *p)
         /* output, increment counter */
         //                      outl[i] = hrtflp[counter];
         //                      outr[i] = hrtfrp[counter];
-                
+
         outl[i] = hrtflp[counter] * (csound->e0dbfs / FL(32767.0));
         outr[i] = hrtfrp[counter] * (csound->e0dbfs / FL(32767.0));
 
@@ -1236,7 +1236,7 @@ int hrtfreverb_process(CSOUND *csound, hrtfreverb *p)
                 hrtflp[j] = hrtflp[j]/(sr / FL(38000.0));
                 hrtfrp[j] = hrtfrp[j]/(sr / FL(38000.0));
               }
-                    
+
             for(j = 0; j < irlength; j++)
               {
                 hrtflp[j] = hrtflp[j] + (j < overlapsize ?
@@ -1255,7 +1255,7 @@ int hrtfreverb_process(CSOUND *csound, hrtfreverb *p)
             counter = 0;
           }       /* end of irlength loop */
       }       /* end of ksmps loop */
-        
+
     /* keep for next time */
     p->counter = counter;
 
@@ -1289,7 +1289,7 @@ int hrtfreverb_process(CSOUND *csound, hrtfreverb *p)
         p->ytf2 = ytf2;
         p->ztf2 = ztf2;
       }
-        
+
     p->inoldl = inoldl;
     p->inoldr = inoldr;
 
diff --git a/Opcodes/imageOpcodes.c b/Opcodes/imageOpcodes.c
index 6e62156..7883215 100644
--- a/Opcodes/imageOpcodes.c
+++ b/Opcodes/imageOpcodes.c
@@ -103,7 +103,10 @@ static Image * __doOpenImage(char * filename, CSOUND *csound)
       return NULL;
     }
 
-    fread(header, 1, hs, fp);
+    if (UNLIKELY(hs!=fread(header, 1, hs, fp)))
+      csound->InitError(csound,
+                        Str("imageload: file %s is not in PNG format.\n"),
+                        filename);
     is_png = !png_sig_cmp(header, 0, hs);
 
     if (UNLIKELY(!is_png)) {
diff --git a/Opcodes/jacko.cpp b/Opcodes/jacko.cpp
index 486663b..e9ae692 100644
--- a/Opcodes/jacko.cpp
+++ b/Opcodes/jacko.cpp
@@ -521,7 +521,7 @@ struct JackoState
       result = pthread_mutex_init(&conditionMutex, 0);
       result = pthread_cond_init(&csoundCondition, 0);
       result = pthread_cond_init(&closeCondition, 0);
-      // Create a thread to run the close routine. It will immediately 
+      // Create a thread to run the close routine. It will immediately
       // block until it is signaled.
       result = pthread_create(&closeThread, 0, &JackoState::closeRoutine_, this);
       std::memset(&jack_position, 0, sizeof(jack_position_t));
@@ -703,8 +703,8 @@ struct JackoState
         // thread. Doing this inside the Jack process callback
         // takes too long and may cause other problems.
         result = pthread_mutex_lock(&conditionMutex);
-        result = pthread_cond_signal(&closeCondition);
-        result = pthread_mutex_unlock(&conditionMutex);
+        result |= pthread_cond_signal(&closeCondition);
+        result |= pthread_mutex_unlock(&conditionMutex);
         return result;
       }
   }
@@ -713,15 +713,17 @@ struct JackoState
       int result = 0;
       // Wait until signaled to actually shut down the Jack client.
       result = pthread_mutex_lock(&conditionMutex);
-      result = pthread_cond_wait(&closeCondition, &conditionMutex);
-      result = pthread_mutex_unlock(&conditionMutex);
+      result |= pthread_cond_wait(&closeCondition, &conditionMutex);
+      result |= pthread_mutex_unlock(&conditionMutex);
       close();
-      return (void *) result;
+      void *result_ = 0;
+      memcpy(&result_, &result, std::min(sizeof(result), sizeof(result_)));
+      return result_;
   }
   static void *closeRoutine_(void *userdata)
   {
       return ((JackoState *)userdata)->closeRoutine();
-  }
+  }\
   void startTransport()
   {
       midiInputQueue.clear();
diff --git a/Opcodes/loscilx.c b/Opcodes/loscilx.c
index 187aca1..5f464ce 100644
--- a/Opcodes/loscilx.c
+++ b/Opcodes/loscilx.c
@@ -22,7 +22,7 @@
 */
 
 // #include "csdl.h"
-#include "csoundCore.h"        
+#include "csoundCore.h"
 #include "interlocks.h"
 #include "soundio.h"
 
@@ -677,4 +677,3 @@ static OENTRY loscilx_localops[] = {
 };
 
 LINKAGE1(loscilx_localops)
-
diff --git a/Opcodes/minmax.c b/Opcodes/minmax.c
index b7e5b18..f96c76a 100644
--- a/Opcodes/minmax.c
+++ b/Opcodes/minmax.c
@@ -31,7 +31,7 @@
 */
 
 // #include "csdl.h"
-#include "csoundCore.h"        
+#include "csoundCore.h"
 #include "interlocks.h"
 #include <math.h>
 
@@ -313,4 +313,3 @@ static OENTRY minmax_localops[] = {
 };
 
 LINKAGE1(minmax_localops)
-
diff --git a/Opcodes/nlfilt.c b/Opcodes/nlfilt.c
index 2129605..15daef1 100644
--- a/Opcodes/nlfilt.c
+++ b/Opcodes/nlfilt.c
@@ -54,7 +54,7 @@ static int nlfiltset(CSOUND *csound, NLFILT *p)
         p->delay.size<MAX_DELAY * sizeof(MYFLT)) {        /* get newspace    */
       csound->AuxAlloc(csound, MAX_DELAY * sizeof(MYFLT), &p->delay);
     }
-    else{
+    else {
       memset(p->delay.auxp, 0, MAX_DELAY * sizeof(MYFLT));
     }
     p->point = 0;
diff --git a/Opcodes/pan2.c b/Opcodes/pan2.c
index e8d37f3..7664626 100644
--- a/Opcodes/pan2.c
+++ b/Opcodes/pan2.c
@@ -22,7 +22,7 @@
 */
 
 // #include "csdl.h"
-#include "csoundCore.h"        
+#include "csoundCore.h"
 #include "interlocks.h"
 
 #include <math.h>
@@ -102,6 +102,3 @@ static OENTRY pan2_localops[] =
 };
 
 LINKAGE1(pan2_localops)
-
-
-
diff --git a/Opcodes/partikkel.c b/Opcodes/partikkel.c
index bf487a4..e7449bd 100644
--- a/Opcodes/partikkel.c
+++ b/Opcodes/partikkel.c
@@ -301,7 +301,8 @@ static int partikkel_init(CSOUND *csound, PARTIKKEL *p)
     size = csound->ksmps*sizeof(MYFLT);
     if (p->aux.auxp == NULL || p->aux.size < size)
         csound->AuxAlloc(csound, size, &p->aux);
-    memset(p->aux.auxp, 0, sizeof(MYFLT)*csound->ksmps);
+    else
+      memset(p->aux.auxp, 0, size);
 
     /* allocate memory for the grain pool and initialize it*/
     if (UNLIKELY(*p->max_grains < FL(1.0)))
diff --git a/Opcodes/phisem.c b/Opcodes/phisem.c
index 3073658..2d7573e 100644
--- a/Opcodes/phisem.c
+++ b/Opcodes/phisem.c
@@ -46,7 +46,7 @@
 /**********************************************************/
 
 // #include "csdl.h"
-#include "csoundCore.h"        
+#include "csoundCore.h"
 #include "interlocks.h"
 #include "phisem.h"
 #include <math.h>
@@ -1249,4 +1249,3 @@ static OENTRY phisem_localops[] = {
 };
 
 LINKAGE1(phisem_localops)
-
diff --git a/Opcodes/pitch.c b/Opcodes/pitch.c
index 2778754..e1d296d 100644
--- a/Opcodes/pitch.c
+++ b/Opcodes/pitch.c
@@ -1806,7 +1806,7 @@ int trnsetr(CSOUND *csound, TRANSEG *p)
       double dur = (double)**argp++;
       MYFLT alpha = **argp++;
       MYFLT nxtval = **argp++;
-      MYFLT d = dur * csound->ekr;
+      MYFLT d = dur * csound->esr;
       if ((segp->cnt = (int32)(d + FL(0.5))) < 0)
         segp->cnt = 0;
       else
@@ -1892,7 +1892,7 @@ int trnsegr(CSOUND *csound, TRANSEG *p)
       return csound->PerfError(csound, Str("transeg: not initialised (arate)\n"));
     }
     val = p->curval;                      /* sav the cur value    */
-    if (LIKELY(p->segsrem)) {             /* if no more segs putk */ 
+    if (LIKELY(p->segsrem)) {             /* if no more segs putk */
       NSEG  *segp;
       if (p->h.insdshead->relesing && p->segsrem > 1) {
         while (p->segsrem > 1) {          /* if release flag new  */
diff --git a/Opcodes/pitch0.c b/Opcodes/pitch0.c
index 817f9e3..d196110 100644
--- a/Opcodes/pitch0.c
+++ b/Opcodes/pitch0.c
@@ -46,16 +46,27 @@ int mute_inst(CSOUND *csound, MUTE *p)
 
 int instcount(CSOUND *csound, INSTCNT *p)
 {
-    int n = (int) csound->strarg2insno(csound, p->ins, p->XSTRCODE);
+    int n;
+    if (p->XSTRCODE)
+      n = (int) csound->strarg2insno(csound, p->ins, p->XSTRCODE);
+    else
+      n = *p->ins;
     if (n<0 || n > csound->maxinsno || csound->instrtxtp[n] == NULL)
       *p->cnt = FL(0.0);
+    else if (n==0) {  /* Count all instruments */
+      int tot = 1;
+      for (n=1; n<csound->maxinsno; n++)
+        if (csound->instrtxtp[n]) /* If it exists */
+          tot += ((*p->opt) ? csound->instrtxtp[n]->instcnt :
+                              csound->instrtxtp[n]->active);
+      *p->cnt = (MYFLT)tot;
+    }
     else {
       *p->cnt = ((*p->opt) ?
                  (MYFLT) csound->instrtxtp[n]->instcnt :
                  (MYFLT) csound->instrtxtp[n]->active);
     }
 
-
     return OK;
 }
 
diff --git a/Opcodes/pitchtrack.c b/Opcodes/pitchtrack.c
index 8a072ae..e8452dc 100644
--- a/Opcodes/pitchtrack.c
+++ b/Opcodes/pitchtrack.c
@@ -471,14 +471,16 @@ int pitchafset(CSOUND *csound, PITCHAF *p){
   int siz = (int)(csound->GetSr(csound)/ (*p->iflow));
   if (p->buff1.auxp == NULL || p->buff1.size < siz*sizeof(MYFLT))
     csound->AuxAlloc(csound, siz*sizeof(MYFLT), &p->buff1);
+  else
+    memset(p->buff1.auxp, 0, p->buff1.size);
   if (p->buff2.auxp == NULL ||p-> buff2.size < siz*sizeof(MYFLT))
     csound->AuxAlloc(csound, siz*sizeof(MYFLT), &p->buff2);
+  else
+    memset(p->buff2.auxp, 0, p->buff2.size);
   if (p->cor.auxp == NULL || p->cor.size < siz*sizeof(MYFLT))
     csound->AuxAlloc(csound, siz*sizeof(MYFLT), &p->cor);
-
-  memset(p->buff1.auxp, 0, p->buff1.size);
-  memset(p->buff2.auxp, 0, p->buff2.size);
-  memset(p->cor.auxp, 0, p->cor.size);
+  else
+    memset(p->cor.auxp, 0, p->cor.size);
   p->lag = 0;
   p->pitch = FL(0.0);
   p->len = siz;
diff --git a/Opcodes/psynth.c b/Opcodes/psynth.c
index b586fac..ece3738 100644
--- a/Opcodes/psynth.c
+++ b/Opcodes/psynth.c
@@ -222,7 +222,7 @@ static int psynth_process(CSOUND *csound, _PSYN *p)
             }
             /* keep amp, freq, and phase values for next time */
             if (contin) {
-             
+
               amps[k] = ampnext;
               freqs[k] = freqnext;
               phases[k] = phase;
@@ -395,7 +395,7 @@ static int psynth2_process(CSOUND *csound, _PSYN2 *p)
             }
             /* keep amp, freq, and phase values for next time */
             if (contin) {
-             
+
               amps[k] = ampnext;
               freqs[k] = freqnext;
               phases[k] = phasenext;
@@ -1239,4 +1239,3 @@ int psynth_init_(CSOUND *csound)
   return csound->AppendOpcodes(csound, &(localops[0]),
                                (int) (sizeof(localops) / sizeof(OENTRY)));
 }
-
diff --git a/Opcodes/pvlock.c b/Opcodes/pvlock.c
index 7c3fe82..7b190d9 100644
--- a/Opcodes/pvlock.c
+++ b/Opcodes/pvlock.c
@@ -70,13 +70,15 @@ static int sinit(CSOUND *csound, DATASPACE *p)
     size = decim*sizeof(int);
     if (p->framecount[i].auxp == NULL || p->framecount[i].size < size)
       csound->AuxAlloc(csound, size, &p->framecount[i]);
-    memset(p->framecount[i].auxp,0,size);
+    else
+      memset(p->framecount[i].auxp,0,size);
     size = decim*sizeof(MYFLT)*N;
     if (p->outframe[i].auxp == NULL || p->outframe[i].size < size)
       csound->AuxAlloc(csound, size, &p->outframe[i]);
-    memset(p->outframe[i].auxp,0,size);
+    else
+      memset(p->outframe[i].auxp,0,size);
     }
-   size = N*sizeof(MYFLT);
+    size = N*sizeof(MYFLT);
     if (p->win.auxp == NULL || p->win.size < size)
       csound->AuxAlloc(csound, size, &p->win);
 
@@ -113,13 +115,13 @@ static int sprocess(CSOUND *csound, DATASPACE *p)
         ft = csound->FTnp2Find(csound,p->knum);
         tab = ft->ftable;
         size = ft->flen;
-       
+
         if (UNLIKELY((int) ft->nchanls != nchans))
           return csound->PerfError(csound, Str("number of output arguments "
                                                "inconsistent with number of "
                                                "sound file channels"));
 
-       
+
 
         /* spos is the reading position in samples, hsize is hopsize,
            time[n] is current read position in secs
@@ -235,14 +237,14 @@ static int sprocess(CSOUND *csound, DATASPACE *p)
           framecnt[curframe] = curframe*N;
           /* write to overlapped output frames */
           for (i=0;i<N;i++) outframe[framecnt[curframe]+i] = win[i]*fwin[i];
-        
+
         }
 
         cnt=0;
         curframe++;
         if (curframe == decim) curframe = 0;
       }
-      
+
       for (j=0; j < nchans; j++) {
         framecnt  = (int *) p->framecount[j].auxp;
         outframe  = (MYFLT *) p->outframe[j].auxp;
@@ -258,7 +260,7 @@ static int sprocess(CSOUND *csound, DATASPACE *p)
       }
       cnt++;
     }
- 
+
     p->cnt = cnt;
     p->curframe = curframe;
     return OK;
@@ -298,7 +300,7 @@ static int sprocess2(CSOUND *csound, DATASPACE *p)
     int decim = p->decim;
 
     for (n=0; n < ksmps; n++) {
-      
+
       if (cnt == hsize){
         ft = csound->FTnp2Find(csound,p->knum);
         tab = ft->ftable;
@@ -334,7 +336,7 @@ static int sprocess2(CSOUND *csound, DATASPACE *p)
           prev = (MYFLT *)p->prev[j].auxp;
           framecnt  = (int *)p->framecount[j].auxp;
           outframe= (MYFLT *) p->outframe[j].auxp;
-        
+
           for (i=0; i < N; i++) {
             post = (int) pos;
             frac = pos  - post;
@@ -343,15 +345,15 @@ static int sprocess2(CSOUND *csound, DATASPACE *p)
             if (post >= 0 && post < size)
               in = tab[post] + frac*(tab[post+nchans] - tab[post]);
             else in =  (MYFLT) 0;
-            fwin[i] = in * win[i]; 
-         
+            fwin[i] = in * win[i];
+
             post = (int) (pos - hsize*pitch);
             post *= nchans;
             post += j;
             if (post >= 0 && post < size)
               in =  tab[post] + frac*(tab[post+nchans] - tab[post]);
             else in =  (MYFLT) 0;
-            bwin[i] = in * win[i];  
+            bwin[i] = in * win[i];
             post = (int) pos + hsize;
             post *= nchans;
             post += j;
@@ -360,7 +362,7 @@ static int sprocess2(CSOUND *csound, DATASPACE *p)
             nwin[i] = in * win[i];
             pos += pitch;
           }
-         
+
           csound->RealFFT(csound, bwin, N);
           bwin[N] = bwin[1];
           bwin[N+1] = FL(0.0);
@@ -421,7 +423,7 @@ static int sprocess2(CSOUND *csound, DATASPACE *p)
 
             tmp_real =   fwin[i] * ph_real - fwin[i+1] * ph_im;
             tmp_im =   fwin[i] * ph_im + fwin[i+1] * ph_real;
-          
+
             prev[i] = fwin[i] = tmp_real;
             prev[i+1] = fwin[i+1] = tmp_im;
           }
@@ -432,27 +434,27 @@ static int sprocess2(CSOUND *csound, DATASPACE *p)
           framecnt[curframe] = curframe*N;
 
           for (i=0;i<N;i++) outframe[framecnt[curframe]+i] = win[i]*fwin[i];
-        
+
         }
         cnt=0;
         curframe++;
         if (curframe == decim) curframe = 0;
       }
-           
+
       for (j=0; j < nchans; j++) {
         out = p->out[j];
         framecnt  = (int *) p->framecount[j].auxp;
         outframe  = (MYFLT *) p->outframe[j].auxp;
- 
+
         out[n] = (MYFLT) 0;
-     
+
         for (i = 0; i < decim; i++) {
           out[n] += outframe[framecnt[i]];
-          framecnt[i]++;        
+          framecnt[i]++;
         }
         out[n] *= amp*(2./3.);
       }
-      cnt++;  
+      cnt++;
     }
     p->cnt = cnt;
     p->curframe = curframe;
@@ -497,13 +499,13 @@ static int pvslockset(CSOUND *csound, PVSLOCK *p)
 static int pvslockproc(CSOUND *csound, PVSLOCK *p)
 {
     int i;
-    float *fout = (float *) p->fout->frame.auxp, 
+    float *fout = (float *) p->fout->frame.auxp,
       *fin = (float *) p->fin->frame.auxp;
     int N = p->fin->N;
-  
+
     if (p->lastframe < p->fin->framecount) {
       memcpy(fout,fin, sizeof(float)*(N+2));
-  
+
       if (*p->klock) {
         for (i=2; i < N-4; i+=2){
           float p2 = fin[i];
@@ -511,7 +513,7 @@ static int pvslockproc(CSOUND *csound, PVSLOCK *p)
           float p1 = fin[i-2];
           float p4 = fin[i+4];
           float p5 = fin[i+6];
-          if (p3 > p1 && p3 > p2 && p3 > p4 && p3 > p5) {       
+          if (p3 > p1 && p3 > p2 && p3 > p4 && p3 > p5) {
             float freq = fin[i+3], d;
             d = 0.01*freq;
             if (FABS(fout[i-1] - freq) < d)fout[i-1]  = freq;
diff --git a/Opcodes/pvoc.c b/Opcodes/pvoc.c
index 2635ecb..f5e6147 100644
--- a/Opcodes/pvoc.c
+++ b/Opcodes/pvoc.c
@@ -36,7 +36,7 @@ int     pvinterpset(CSOUND *, void *), pvinterp(CSOUND *, void *);
 static OENTRY pvoc_localops[] = {
 { "pvoc",      S(PVOC),      5, "a",  "kkToooo", pvset, NULL, pvoc            },
 { "tableseg",  S(TABLESEG),  TR|3, "",   "iin",     tblesegset, ktableseg, NULL  },
-{ "ktableseg", S(TABLESEG),  DP|TR|3, "",   "iin",  tblesegset, ktableseg, NULL  },
+{ "ktableseg", S(TABLESEG),  _QQ|TR|3, "",   "iin",  tblesegset, ktableseg, NULL  },
 { "tablexseg", S(TABLESEG),  TW|3, "",   "iin",     tblesegset, ktablexseg, NULL },
 { "vpvoc",     S(VPVOC),     TR|5, "a",  "kkToo",   vpvset, NULL, vpvoc          },
 { "pvread",    S(PVREAD),    3, "kk", "kTi",     pvreadset, pvread, NULL      },
diff --git a/Opcodes/pvoc.h b/Opcodes/pvoc.h
index c3deebe..ba3f21b 100644
--- a/Opcodes/pvoc.h
+++ b/Opcodes/pvoc.h
@@ -23,8 +23,8 @@
 #define CSOUND_PVOC_H
 
 // #include "csdl.h"
-#include "csoundCore.h"        
-#include "interlocks.h" 
+#include "csoundCore.h"
+#include "interlocks.h"
 
 typedef struct PVOC_GLOBALS_ PVOC_GLOBALS;
 
@@ -56,4 +56,3 @@ static inline PVOC_GLOBALS *PVOC_GetGlobals(CSOUND *csound)
 }
 
 #endif  /* CSOUND_PVOC_H */
-
diff --git a/Opcodes/pvsbasic.c b/Opcodes/pvsbasic.c
index 247da60..91d4527 100644
--- a/Opcodes/pvsbasic.c
+++ b/Opcodes/pvsbasic.c
@@ -105,7 +105,7 @@ static int pvsgain(CSOUND *csound, PVSGAIN *p)
         p->fout->framecount = p->fa->framecount;
         p->lastframe = p->fout->framecount;
     }
-    return OK;    
+    return OK;
 }
 
 
@@ -148,7 +148,7 @@ static int pvsinit(CSOUND *csound, PVSINI *p)
         }
         bframe = (float *) p->fout->frame.auxp;
         for (i = 0; i < N + 2; i += 2) {
-          bframe[i] = 0.0f;
+          //bframe[i] = 0.0f;
           bframe[i + 1] = (i >>1) * N * csound->onedsr;
         }
       }
@@ -388,26 +388,29 @@ int pvstanalset(CSOUND *csound, PVST *p)
       if (p->fout[i]->frame.auxp == NULL ||
           p->fout[i]->frame.size < sizeof(float) * (N + 2))
         csound->AuxAlloc(csound, (N + 2) * sizeof(float), &p->fout[i]->frame);
+      else
+        memset(p->fout[i]->frame.auxp, 0, sizeof(float)*(N+2));
       if (p->bwin[i].auxp == NULL ||
           p->bwin[i].size < sizeof(MYFLT) * (N + 2))
         csound->AuxAlloc(csound, (N + 2) * sizeof(MYFLT), &p->bwin[i]);
+      else
+        memset(p->bwin[i].auxp, 0, p->bwin[i].size);
       if (p->fwin[i].auxp == NULL ||
           p->fwin[i].size < sizeof(MYFLT) * (N + 2))
         csound->AuxAlloc(csound, (N + 2) * sizeof(MYFLT), &p->fwin[i]);
+      else
+        memset(p->fwin[i].auxp, 0, sizeof(MYFLT)*(N+2));
       if (p->nwin[i].auxp == NULL ||
           p->nwin[i].size < sizeof(MYFLT) * (N + 2))
         csound->AuxAlloc(csound, (N + 2) * sizeof(MYFLT), &p->nwin[i]);
-      memset(p->fwin[i].auxp, 0, sizeof(MYFLT)*(N+2));
-      memset(p->bwin[i].auxp, 0, sizeof(MYFLT)*(N+2));
-      memset(p->nwin[i].auxp, 0, sizeof(MYFLT)*(N+2));
-      memset(p->fout[i]->frame.auxp, 0, sizeof(float)*(N+2));
-
+      else
+        memset(p->nwin[i].auxp, 0, sizeof(MYFLT)*(N+2));
     }
 
     if (p->win.auxp == NULL ||
         p->win.size < sizeof(MYFLT) * (N))
       csound->AuxAlloc(csound, (N) * sizeof(MYFLT), &p->win);
-    p->scale = 0.f;
+    p->scale = 0.0f;
     for (i=0; i < N; i++)
       p->scale += (((MYFLT *)p->win.auxp)[i] = 0.5 - 0.5*cos(i*2*PI/N));
     for (i=0; i < N; i++)
@@ -701,7 +704,7 @@ static int pvsoscset(CSOUND *csound, PVSOSC *p)
           csound->AuxAlloc(csound, (N + 2) * sizeof(float), &p->fout->frame);
         bframe = (float *) p->fout->frame.auxp;
         for (i = 0; i < N + 2; i += 2) {
-          bframe[i] = 0.0f;
+          //bframe[i] = 0.0f;
           bframe[i + 1] = (i / 2) * N * csound->onedsr;
         }
         p->lastframe = 1;
@@ -1419,11 +1422,13 @@ static int pvsshiftset(CSOUND *csound, PVSSHIFT *p)
     if (p->ceps.auxp == NULL ||
         p->ceps.size < sizeof(MYFLT) * (N+2))
       csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->ceps);
-    memset(p->ceps.auxp, 0, sizeof(MYFLT)*(N+2));
+    else
+      memset(p->ceps.auxp, 0, sizeof(MYFLT)*(N+2));
     if (p->fenv.auxp == NULL ||
         p->fenv.size < sizeof(MYFLT) * (N+2))
       csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->fenv);
-    memset(p->fenv.auxp, 0, sizeof(MYFLT)*(N+2));
+    else
+      memset(p->fenv.auxp, 0, sizeof(MYFLT)*(N+2));
 
     return OK;
 }
@@ -1607,11 +1612,13 @@ static int pvswarpset(CSOUND *csound, PVSWARP *p)
     if (p->ceps.auxp == NULL ||
         p->ceps.size < sizeof(MYFLT) * (N+2))
       csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->ceps);
-    memset(p->ceps.auxp, 0, sizeof(MYFLT)*(N+2));
+    else
+      memset(p->ceps.auxp, 0, sizeof(MYFLT)*(N+2));
     if (p->fenv.auxp == NULL ||
         p->fenv.size < sizeof(MYFLT) * (N+2))
       csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->fenv);
-    memset(p->fenv.auxp, 0, sizeof(MYFLT)*(N+2));
+    else
+      memset(p->fenv.auxp, 0, sizeof(MYFLT)*(N+2));
 
     return OK;
 }
@@ -2037,11 +2044,13 @@ static int pvsenvwset(CSOUND *csound, PVSENVW *p)
     if (p->ceps.auxp == NULL ||
         p->ceps.size < sizeof(MYFLT) * (N+2))
       csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->ceps);
-    memset(p->ceps.auxp, 0, sizeof(MYFLT)*(N+2));
+    else
+      memset(p->ceps.auxp, 0, sizeof(MYFLT)*(N+2));
     if (p->fenv.auxp == NULL ||
         p->fenv.size < sizeof(MYFLT) * (N+2))
       csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->fenv);
-    memset(p->fenv.auxp, 0, sizeof(MYFLT)*(N+2));
+    else
+      memset(p->fenv.auxp, 0, sizeof(MYFLT)*(N+2));
 
     return OK;
 }
@@ -2135,7 +2144,7 @@ static int pvsenvw(CSOUND *csound, PVSENVW *p)
 
 }
 
-typedef struct pvs2tab_t { 
+typedef struct pvs2tab_t {
     OPDS h;
     MYFLT *framecount;
     TABDAT *ans;
@@ -2153,16 +2162,16 @@ int pvs2tab_init(CSOUND *csound, PVS2TAB_T *p)
 }
 
 int  pvs2tab(CSOUND *csound, PVS2TAB_T *p){
- 
+
   int size = p->ans->size, N = p->fsig->N, i;
   float *fsig = (float *) p->fsig->frame.auxp;
   for(i = 0; i < size && i < N+2; i++)
-      p->ans->data[i] = (MYFLT) fsig[i];   
+      p->ans->data[i] = (MYFLT) fsig[i];
   *p->framecount = (MYFLT) p->fsig->framecount;
-  return OK; 
+  return OK;
 }
 
-typedef struct tab2pvs_t { 
+typedef struct tab2pvs_t {
     OPDS h;
     PVSDAT *fout;
     TABDAT *in;
@@ -2185,8 +2194,8 @@ int tab2pvs_init(CSOUND *csound, TAB2PVS_T *p)
           p->fout->frame.size < sizeof(float) * (N + 2)) {
         csound->AuxAlloc(csound, (N + 2) * sizeof(float), &p->fout->frame);
       }
-
-      memset(p->fout->frame.auxp, 0, sizeof(float)*(N+2));
+      else
+        memset(p->fout->frame.auxp, 0, sizeof(float)*(N+2));
       return OK;
     }
     else return csound->InitError(csound, Str("t-variable not initialised"));
@@ -2196,11 +2205,11 @@ int  tab2pvs(CSOUND *csound, TAB2PVS_T *p)
 {
     int size = p->in->size, i;
     float *fout = (float *) p->fout->frame.auxp;
-  
+
     if (p->lastframe < p->fout->framecount){
       for (i = 0; i < size; i++){
-        fout[i] = (float) p->in->data[i]; 
-      } 
+        fout[i] = (float) p->in->data[i];
+      }
       p->lastframe = p->fout->framecount;
     }
     return OK;
@@ -2220,7 +2229,7 @@ static OENTRY localops[] = {
    (SUBR) pvsshift},
   {"pvsfilter", sizeof(PVSFILTER), 3, "f", "fffp", (SUBR) pvsfilterset,
    (SUBR) pvsfilter},
-  {"pvscale", sizeof(PVSSCALE), 3, "f", "fkOPO", 
+  {"pvscale", sizeof(PVSSCALE), 3, "f", "fkOPO",
               (SUBR) pvsscaleset, (SUBR) pvsscale},
   {"pvshift", sizeof(PVSSHIFT), 3, "f", "fkkOPO", (SUBR) pvsshiftset,
    (SUBR) pvsshift},
@@ -2256,4 +2265,3 @@ int pvsbasic_init_(CSOUND *csound)
   return csound->AppendOpcodes(csound, &(localops[0]),
                                (int) (sizeof(localops) / sizeof(OENTRY)));
 }
-
diff --git a/Opcodes/pvsbuffer.c b/Opcodes/pvsbuffer.c
index 7e1448c..c874f32 100644
--- a/Opcodes/pvsbuffer.c
+++ b/Opcodes/pvsbuffer.c
@@ -67,7 +67,7 @@ static int pvsbufferset(CSOUND *csound, PVSBUFFER *p)
     if (p->buffer.auxp == NULL ||
         p->buffer.size < sizeof(float) * (N + 2) * p->nframes)
       csound->AuxAlloc(csound, (N + 2) * sizeof(float) * p->nframes, &p->buffer);
-    /*else*/
+    else
       memset(p->buffer.auxp, 0, (N + 2) * sizeof(float) * p->nframes);
 
     p->handle->header.frame.auxp = p->buffer.auxp;
@@ -206,7 +206,7 @@ static int pvsbufreadset(CSOUND *csound, PVSBUFFERREAD *p)
      buffer = handle->data;
    N = p->fout->N;
    overlap = p->fout->overlap;
-   
+
    if (p->scnt >= overlap){
      float *frame1, *frame2;
      strt /= (sr/N);
@@ -215,7 +215,7 @@ static int pvsbufreadset(CSOUND *csound, PVSBUFFERREAD *p)
      end = (int)(end <= strt ? N/2 + 2 : end > N/2 + 2 ? N/2 + 2 : end);
      frames = handle->frames-1;
      pos = *p->ktime*(sr/overlap);
-     
+
      if (p->iclear) memset(fout, 0, sizeof(float)*(N+2));
      while (pos >= frames) pos -= frames;
      while (pos < 0) pos += frames;
@@ -274,19 +274,19 @@ static int pvsbufreadproc2(CSOUND *csound, PVSBUFFERREAD *p)
     buffer = handle->data;
     N = p->fout->N;
     overlap = p->fout->overlap;
-   
-    
+
+
     if (p->scnt >= overlap) {
       float *frame1, *frame2;
       frames = handle->frames-1;
       ftab = csound->FTFind(csound, p->strt);
-      if (ftab->flen < N/2+1) 
+      if (ftab->flen < N/2+1)
         csound->PerfError(csound,
                           Str("table length too small: needed %d, got %d\n"),
                           N/2+1, ftab->flen);
       tab = tab1 = ftab->ftable;
       ftab = csound->FTFind(csound, p->end);
-      if (ftab->flen < N/2+1) 
+      if (ftab->flen < N/2+1)
         csound->PerfError(csound,
                           Str("table length too small: needed %d, got %d\n"),
                           N/2+1, ftab->flen);
@@ -321,7 +321,7 @@ static int pvsbufreadproc2(CSOUND *csound, PVSBUFFERREAD *p)
 
 #define S(x)    sizeof(x)
 
-/* static */ 
+/* static */
 static OENTRY pvsbuffer_localops[] = {
   {"pvsbuffer", S(PVSBUFFER), 3, "ik", "fi",
    (SUBR)pvsbufferset, (SUBR)pvsbufferproc, NULL},
diff --git a/Opcodes/serial.c b/Opcodes/serial.c
index 2883889..37806bb 100644
--- a/Opcodes/serial.c
+++ b/Opcodes/serial.c
@@ -354,7 +354,8 @@ int serialWrite(CSOUND *csound, SERIALWRITE *p)
 #endif  
     if (p->XSTRCODE & 2) {
 #ifndef WIN32
-      write((int)*p->port, p->toWrite, strlen((char *)p->toWrite));
+      if (UNLIKELY(write((int)*p->port, p->toWrite, strlen((char *)p->toWrite))<0))
+        return NOTOK;
 #else
       int nbytes;
       WriteFile(port,p->toWrite, strlen((char *)p->toWrite),
@@ -364,7 +365,8 @@ int serialWrite(CSOUND *csound, SERIALWRITE *p)
     else {
       unsigned char b = *p->toWrite;
 #ifndef WIN32
-      write((int)*p->port, &b, 1);
+      if (UNLIKELY(write((int)*p->port, &b, 1)<0))
+        return NOTOK;
 #else
       int nbytes;
       WriteFile(port, &b, 1, (PDWORD)&nbytes, NULL);
diff --git a/Opcodes/sfont.c b/Opcodes/sfont.c
index c679e32..3d4f15a 100644
--- a/Opcodes/sfont.c
+++ b/Opcodes/sfont.c
@@ -30,7 +30,7 @@
    directive switch.  */
 
 // #include "csdl.h"
-#include "csoundCore.h"        
+#include "csoundCore.h"
 #include "interlocks.h"
 #include <stdio.h>
 #include <stdlib.h>
@@ -1952,8 +1952,10 @@ static void splitDefaults(splitType *split)
 
 static int chunk_read(FILE *fil, CHUNK *chunk)
 {
-    fread(chunk->ckID,1,4, fil);
-    fread(&chunk->ckSize,4,1,fil);
+    if (UNLIKELY(4 != fread(chunk->ckID,1,4, fil)))
+      return 0;
+    if (UNLIKELY(1 != fread(&chunk->ckSize,4,1,fil)))
+      return 0;
     ChangeByteOrder("d", (char *)&chunk->ckSize, 4);
     chunk->ckDATA = (BYTE *) malloc( chunk->ckSize);
     return fread(chunk->ckDATA,1,chunk->ckSize,fil);
@@ -2562,4 +2564,3 @@ int sfont_ModuleInit(CSOUND *csound)
     }
     return err;
 }
-
diff --git a/Opcodes/signalflowgraph.cpp b/Opcodes/signalflowgraph.cpp
index 91d7032..2da195c 100644
--- a/Opcodes/signalflowgraph.cpp
+++ b/Opcodes/signalflowgraph.cpp
@@ -912,7 +912,7 @@ struct FtGenOnce : public OpcodeBase<FtGenOnce> {
         // otherwise, look up and return the already created function table's number.
         if(functionTablesForCsoundsForEvtblks[csound].find(eventBlock) != functionTablesForCsoundsForEvtblks[csound].end()) {
           *ifno = functionTablesForCsoundsForEvtblks[csound][eventBlock];
-          warn(csound, "ftgenonce: re-using existing func: %f\n", *ifno);
+          // warn(csound, "ftgenonce: re-using existing func: %f\n", *ifno);
           // std::cerr << "ftgenonce: re-using existing func:" << evtblk << std::endl;
         } else {
           FUNC *func = 0;
@@ -1090,21 +1090,21 @@ extern "C"
     {
       aoutletsForCsoundsForSourceOutletIds[csound].clear();
       ainletsForCsoundsForSinkInletIds[csound].clear();
-      for (size_t i = 0, n = aoutletVectorsForCsounds[csound].size(); i < n; i++) {
-        delete aoutletVectorsForCsounds[csound][i];
-      }
+      //for (size_t i = 0, n = aoutletVectorsForCsounds[csound].size(); i < n; i++) {
+      //  delete aoutletVectorsForCsounds[csound][i];
+      //}
       aoutletVectorsForCsounds[csound].clear();
       koutletsForCsoundsForSourceOutletIds[csound].clear();
       kinletsForCsoundsForSinkInletIds[csound].clear();
-      for (size_t i = 0, n = koutletVectorsForCsounds[csound].size(); i < n; i++) {
-        delete koutletVectorsForCsounds[csound][i];
-      }
+      //for (size_t i = 0, n = koutletVectorsForCsounds[csound].size(); i < n; i++) {
+      //  delete koutletVectorsForCsounds[csound][i];
+      //}
       koutletVectorsForCsounds[csound].clear();
       foutletsForCsoundsForSourceOutletIds[csound].clear();
       finletsForCsoundsForSinkInletIds[csound].clear();
-      for (size_t i = 0, n = foutletVectorsForCsounds[csound].size(); i < n; i++) {
-        delete foutletVectorsForCsounds[csound][i];
-      }
+      //for (size_t i = 0, n = foutletVectorsForCsounds[csound].size(); i < n; i++) {
+      //  delete foutletVectorsForCsounds[csound][i];
+      //}
       foutletVectorsForCsounds[csound].clear();
       connectionsForCsounds[csound].clear();
     }
diff --git a/Opcodes/sndloop.c b/Opcodes/sndloop.c
index 74b3f6c..827a5e1 100644
--- a/Opcodes/sndloop.c
+++ b/Opcodes/sndloop.c
@@ -656,7 +656,7 @@ static int flooper2_process(CSOUND *csound, flooper2 *p)
 static int flooper3_init(CSOUND *csound, flooper3 *p)
 {
     int len,i,p2s,lomod;
-    p->sfunc = csound->FTnp2Find(csound, p->ifn);  
+    p->sfunc = csound->FTnp2Find(csound, p->ifn);
     if (UNLIKELY(p->sfunc==NULL)) {
       return csound->InitError(csound,Str("function table not found\n"));
     }
@@ -832,7 +832,7 @@ static int flooper3_process(CSOUND *csound, flooper3 *p)
       }
       else if (mode == 2){
         out[i] = 0;
-        
+
         tndx0 = ndx[0]>>lobits;
         frac0 = (ndx[0] & lomask)*lodiv;
         if (init && tndx0 < loop_start + crossfade) {
@@ -870,7 +870,7 @@ static int flooper3_process(CSOUND *csound, flooper3 *p)
           count  += ei;
         }
 
-        
+
         tndx1 = ndx[1]>>lobits;
         frac1 = (ndx[1] & lomask)*lodiv;
         if (tndx1 > loop_end - crossfade) {
@@ -998,15 +998,16 @@ static int pvsvoc_init(CSOUND *csound, pvsvoc *p)
    if (p->ceps.auxp == NULL ||
       p->ceps.size < sizeof(MYFLT) * (N+2))
     csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->ceps);
-  memset(p->ceps.auxp, 0, sizeof(MYFLT)*(N+2));
-  if (p->fenv.auxp == NULL ||
-      p->fenv.size < sizeof(MYFLT) * (N+2))
-    csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->fenv);
-  if (p->fexc.auxp == NULL ||
-      p->fexc.size < sizeof(MYFLT) * (N+2))
-    csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->fexc);
-
-    return OK;
+   else
+     memset(p->ceps.auxp, 0, sizeof(MYFLT)*(N+2));
+   if (p->fenv.auxp == NULL ||
+       p->fenv.size < sizeof(MYFLT) * (N+2))
+     csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->fenv);
+   if (p->fexc.auxp == NULL ||
+       p->fexc.size < sizeof(MYFLT) * (N+2))
+     csound->AuxAlloc(csound, sizeof(MYFLT) * (N + 2), &p->fexc);
+
+   return OK;
 }
 
 static int pvsvoc_process(CSOUND *csound, pvsvoc *p)
diff --git a/Opcodes/sockrecv.c b/Opcodes/sockrecv.c
index e498f9c..550e697 100644
--- a/Opcodes/sockrecv.c
+++ b/Opcodes/sockrecv.c
@@ -50,7 +50,7 @@ typedef struct {
     OPDS    h;
     MYFLT   *asig, *ipaddress, *port;
     AUXCH   aux, tmp;
-    int     sock;
+    int     sock, conn;
     struct sockaddr_in server_addr;
 } SOCKRECVT;
 
@@ -307,6 +307,7 @@ static int send_recvS(CSOUND *csound, SOCKRECV *p)
 /* TCP version */
 static int init_srecv(CSOUND *csound, SOCKRECVT *p)
 {
+    socklen_t clilen;
 #ifdef WIN32
     WSADATA wsaData = {0};
     int err;
@@ -337,16 +338,23 @@ static int init_srecv(CSOUND *csound, SOCKRECVT *p)
     /* the port we are going to listen on, in network byte order */
     p->server_addr.sin_port = htons((int) *p->port);
 
-again:
-    if (connect(p->sock, (struct sockaddr *) &p->server_addr,
-                sizeof(p->server_addr)) < 0) {
-#ifdef ECONNREFUSED
-      if (errno == ECONNREFUSED)
-        goto again;
-#endif
-      return csound->InitError(csound, Str("connect failed (%d)"), errno);
+    /* associate the socket with the address and port */
+    if (UNLIKELY(bind
+        (p->sock, (struct sockaddr *) &p->server_addr, sizeof(p->server_addr))
+                 < 0)) {
+      return csound->InitError(csound, Str("bind failed"));
     }
 
+    /* start the socket listening for new connections -- may wait */
+    if (UNLIKELY(listen(p->sock, 5) < 0)) {
+      return csound->InitError(csound, Str("listen failed"));
+    }
+    clilen = sizeof(p->server_addr);
+    p->conn = accept(p->sock, (struct sockaddr *) &p->server_addr, &clilen);
+
+    if (UNLIKELY(p->conn < 0)) {
+      return csound->InitError(csound, Str("accept failed"));
+    }
     return OK;
 }
 
@@ -354,12 +362,9 @@ static int send_srecv(CSOUND *csound, SOCKRECVT *p)
 {
     int     n = sizeof(MYFLT) * csound->ksmps;
 
-    if (n != read(p->sock, p->asig, n)) {
-      csound->Message(csound, "Expected %d got %d\n",
-                      (int) (sizeof(MYFLT) * csound->ksmps), n);
+    if (UNLIKELY(n != read(p->conn, p->asig, sizeof(MYFLT) * csound->ksmps))) {
       return csound->PerfError(csound, Str("read from socket failed"));
     }
-
     return OK;
 }
 
diff --git a/Opcodes/socksend.c b/Opcodes/socksend.c
index 6bf318a..566ad81 100644
--- a/Opcodes/socksend.c
+++ b/Opcodes/socksend.c
@@ -34,6 +34,7 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
+#include <errno.h>
 
 extern  int     inet_aton(const char *cp, struct in_addr *inp);
 
@@ -42,7 +43,7 @@ typedef struct {
     MYFLT   *asig, *ipaddress, *port, *buffersize;
     MYFLT   *format;
     AUXCH   aux;
-    int     sock, conn;
+    int     sock;
     int     bsize, wp;
     int     ff, bwidth;
     struct sockaddr_in server_addr;
@@ -53,7 +54,7 @@ typedef struct {
     MYFLT   *asigl, *asigr, *ipaddress, *port, *buffersize;
     MYFLT   *format;
     AUXCH   aux;
-    int     sock, conn;
+    int     sock;
     int     bsize, wp;
     int     ff, bwidth;
     struct sockaddr_in server_addr;
@@ -81,7 +82,7 @@ static int init_send(CSOUND *csound, SOCKSEND *p)
     /* } */
     p->wp = 0;
 
-    p->sock = socket(AF_INET, SOCK_DGRAM, 0); 
+    p->sock = socket(AF_INET, SOCK_DGRAM, 0);
     if (UNLIKELY(p->sock < 0)) {
       return csound->InitError(csound, Str("creating socket"));
     }
@@ -137,7 +138,7 @@ static int send_send(CSOUND *csound, SOCKSEND *p)
         ch.benchar[1] = 0xFF & (val >> 8);
         outs[wp] = ch.bensht;
       }
-      else 
+      else
        out[wp] = asig[i];
     }
     p->wp = wp;
@@ -244,7 +245,6 @@ static int send_sendS(CSOUND *csound, SOCKSENDS *p)
 /* TCP version */
 static int init_ssend(CSOUND *csound, SOCKSEND *p)
 {
-    socklen_t clilen;
 #ifdef WIN32
     WSADATA wsaData = {0};
     int err;
@@ -277,23 +277,16 @@ static int init_ssend(CSOUND *csound, SOCKSEND *p)
     /* the port we are going to listen on, in network byte order */
     p->server_addr.sin_port = htons((int) *p->port);
 
-    /* associate the socket with the address and port */
-    if (UNLIKELY(bind
-        (p->sock, (struct sockaddr *) &p->server_addr, sizeof(p->server_addr))
-                 < 0)) {
-      return csound->InitError(csound, Str("bind failed"));
-    }
-
-    /* start the socket listening for new connections -- may wait */
-    if (UNLIKELY(listen(p->sock, 5) < 0)) {
-      return csound->InitError(csound, Str("listen failed"));
+again:
+    if (connect(p->sock, (struct sockaddr *) &p->server_addr,
+                sizeof(p->server_addr)) < 0) {
+#ifdef ECONNREFUSED
+      if (errno == ECONNREFUSED)
+        goto again;
+#endif
+      return csound->InitError(csound, Str("connect failed (%d)"), errno);
     }
-    clilen = sizeof(p->server_addr);
-    p->conn = accept(p->sock, (struct sockaddr *) &p->server_addr, &clilen);
 
-    if (UNLIKELY(p->conn < 0)) {
-      return csound->InitError(csound, Str("accept failed"));
-    }
     return OK;
 }
 
@@ -301,9 +294,12 @@ static int send_ssend(CSOUND *csound, SOCKSEND *p)
 {
     int     n = sizeof(MYFLT) * csound->ksmps;
 
-    if (UNLIKELY(n != write(p->conn, p->asig, sizeof(MYFLT) * csound->ksmps))) {
+    if (n != write(p->sock, p->asig, n)) {
+      csound->Message(csound, "Expected %d got %d\n",
+                      (int) (sizeof(MYFLT) * csound->ksmps), n);
       return csound->PerfError(csound, Str("write to socket failed"));
     }
+
     return OK;
 }
 
@@ -319,4 +315,3 @@ static OENTRY socksend_localops[] = {
 };
 
 LINKAGE1(socksend_localops)
-
diff --git a/Opcodes/spectra.c b/Opcodes/spectra.c
index 0f8d945..a036e44 100644
--- a/Opcodes/spectra.c
+++ b/Opcodes/spectra.c
@@ -22,7 +22,7 @@
 */
 
 // #include "csdl.h"
-#include "csoundCore.h"        
+#include "csoundCore.h"
 #include "interlocks.h"
 #include <math.h>
 #include "cwindow.h"
@@ -1247,11 +1247,10 @@ static OENTRY spectra_localops[] = {
 { "active.i", S(INSTCNT),1,     "i",    "To",    (SUBR)instcount, NULL, NULL },
 { "active.k", S(INSTCNT),2,     "k",    "Uo",    NULL, (SUBR)instcount, NULL },
 { "p.i", S(PFUN),        1,     "i",    "i",     (SUBR)pfun, NULL, NULL     },
-{ "p.k", S(PFUNK),       3,     "k",    "k",     (SUBR)pfunk_init, (SUBR)pfunk, NULL },
+{ "p.k", S(PFUNK),       3,     "k",    "k", (SUBR)pfunk_init, (SUBR)pfunk, NULL },
 { "mute", S(MUTE), 1,          "",      "To",   (SUBR)mute_inst             },
 { "median", S(MEDFILT),  5,     "a", "akio", (SUBR)medfiltset, NULL, (SUBR)medfilt},
 { "mediank", S(MEDFILT), 5,     "k", "kkio", (SUBR)medfiltset, (SUBR)kmedfilt},
 };
 
 LINKAGE1(spectra_localops)
-
diff --git a/Opcodes/stk/CMakeLists.txt b/Opcodes/stk/CMakeLists.txt
index 9aaf761..15152f0 100644
--- a/Opcodes/stk/CMakeLists.txt
+++ b/Opcodes/stk/CMakeLists.txt
@@ -3,29 +3,50 @@ option(BUILD_STK_OPCODES "Build the stk opcodes" ON)
 if(BUILD_STK_OPCODES)
     find_library(STK_LIBRARY stk)
     if(STK_LIBRARY)
-        make_plugin(stk-ops stkOpcodes.cpp "stk")
-        set_target_properties(stk-ops PROPERTIES
-            OUTPUT_NAME stk)
+        find_path(STK_INCLUDE_DIR Stk.h
+            /usr/include/stk
+            /usr/local/include/stk)
+        
+        check_deps(BUILD_STK_OPCODES STK_INCLUDE_DIR)
+        if(STK_INCLUDE_DIR)
+            include_directories(${STK_INCLUDE_DIR})
+
+            make_plugin(stk-ops stkOpcodes.cpp "stk")
+
+            set_target_properties(stk-ops PROPERTIES
+                OUTPUT_NAME stk)
+        endif()
     else()
-        set(stk_srcs
+
+        set(stk_remove_srcs
             src/InetWvIn.cpp    src/InetWvOut.cpp
             src/Mutex.cpp       src/RtAudio.cpp
             src/RtMidi.cpp
             src/RtWvIn.cpp      src/RtWvOut.cpp
             src/Socket.cpp      src/TcpClient.cpp
             src/TcpServer.cpp   src/Thread.cpp
-            src/UdpSocket.cpp
-            stkOpcodes.cpp)
+            src/UdpSocket.cpp)
+        
+        file(GLOB stk_srcs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} src/*)
+	       
+        list(REMOVE_ITEM stk_srcs ${stk_remove_srcs})
 
+        list(APPEND stk_srcs stkOpcodes.cpp)
+  
         # Assume that if this file exists, then we have the sources
         find_file(STK_FOUND
             NAMES src/InetWvIn.cpp
             HINTS ${CMAKE_CURRENT_SOURCE_DIR})
-        check_deps(BUILD_STK_OPCODES STK_FOUND)
+
+        find_path(STK_INCLUDE_DIR Stk.h ./include)            
+
+        check_deps(BUILD_STK_OPCODES STK_FOUND STK_INCLUDE_DIR)
 
         if(BUILD_STK_OPCODES)
 
             include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
+            include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/stk)
+            include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
 
             make_plugin(stk "${stk_srcs}")
 
diff --git a/Opcodes/system_call.c b/Opcodes/system_call.c
index d5b197e..edcb37a 100644
--- a/Opcodes/system_call.c
+++ b/Opcodes/system_call.c
@@ -64,8 +64,8 @@ static int call_system(CSOUND *csound, SYSTEM *p)
       if ((*p->res = fork()))
         return OK;
       else {
-        system((char*)p->commandLine);
-        exit(1);
+        if (UNLIKELY(system((char*)p->commandLine)<0)) exit(1);
+        exit(0);
       }
     }
     else {
diff --git a/Opcodes/tabvars.c b/Opcodes/tabvars.c
index 6d1e9ce..ccf7025 100644
--- a/Opcodes/tabvars.c
+++ b/Opcodes/tabvars.c
@@ -22,7 +22,7 @@
 */
 
 // #include "csdl.h"
-#include "csoundCore.h"        
+#include "csoundCore.h"
 #include "interlocks.h"
 
 
@@ -85,7 +85,7 @@ static int tabmult(CSOUND *csound, TABARITH *p)
       ans->data[i] = l->data[i] * r->data[i];
     return OK;
 }
- 
+
 static int tabqset(CSOUND *csound, TABQUERY *p)
 {
     if (LIKELY(p->tab->data)) return OK;
@@ -103,7 +103,7 @@ static int tabmax(CSOUND *csound, TABQUERY *p)
     *p->ans = ans;
     return OK;
 }
-  
+
 static int tabmin(CSOUND *csound, TABQUERY *p)
 {
     TABDAT *t = p->tab;
@@ -115,7 +115,7 @@ static int tabmin(CSOUND *csound, TABQUERY *p)
     *p->ans = ans;
     return OK;
 }
-  
+
 static int tabsum(CSOUND *csound, TABQUERY *p)
 {
     TABDAT *t = p->tab;
@@ -127,7 +127,7 @@ static int tabsum(CSOUND *csound, TABQUERY *p)
     *p->ans = ans;
     return OK;
 }
-  
+
 static int tabscaleset(CSOUND *csound, TABSCALE *p)
 {
     if (LIKELY(p->tab->data)) return OK;
@@ -177,7 +177,7 @@ static int tabcopy_set(CSOUND *csound, TABCPY *p)
     int sizes,sized;
     if (UNLIKELY(p->src->data==NULL))
       return csound->InitError(csound, Str("t-variable not initialised"));
-    if (UNLIKELY(p->dst->data==NULL)) 
+    if (UNLIKELY(p->dst->data==NULL))
       return csound->InitError(csound, Str("t-variable not initialised"));
     sizes = p->src->size;
     sized = p->dst->size;
@@ -216,7 +216,7 @@ static int ftab2tab(CSOUND *csound, TABCOPY *p)
     int tlen = p->tab->size;
     if (UNLIKELY(p->tab->data==NULL))
       return csound->PerfError(csound, Str("t-var not initialised"));
-    if (UNLIKELY((ftp = csound->FTFindP(csound, p->kfn)) == NULL)) 
+    if (UNLIKELY((ftp = csound->FTFindP(csound, p->kfn)) == NULL))
         return csound->PerfError(csound, Str("No table for copy2ftab"));
     fsize = ftp->flen;
     fdata = ftp->ftable;
@@ -241,10 +241,7 @@ static OENTRY tabvars_localops[] =
 };
 // reverse, scramble, mirror, stutter, rotate, ...
 // jpff: stutter is an interesting one (very musical). It basically
-//          randomly repeats (holds) values based on a probability parameter    
+//          randomly repeats (holds) values based on a probability parameter
 
 
 LINKAGE1(tabvars_localops)
-
-
-
diff --git a/Opcodes/tl/fractalnoise.cpp b/Opcodes/tl/fractalnoise.cpp
index a7bb797..5531c67 100644
--- a/Opcodes/tl/fractalnoise.cpp
+++ b/Opcodes/tl/fractalnoise.cpp
@@ -44,25 +44,25 @@ inline void *aligned_calloc(size_t nmemb, size_t size)
 
 /* ABSTRACT USER INTERFACE */
 
-struct Meta 
+struct Meta
 {
     void declare (const char* key, const char* value) { }
 };
 
 class UserInterface
 {
-  bool	fStopped;
+  bool  fStopped;
 public:
   UserInterface() : fStopped(false) {}
   virtual ~UserInterface() {}
   virtual void addButton(char* label, MYFLT* zone) = 0;
   virtual void addToggleButton(char* label, MYFLT* zone) = 0;
   virtual void addCheckButton(char* label, MYFLT* zone) = 0;
-  virtual void addVerticalSlider(char* label, MYFLT* zone, MYFLT init, 
-				 MYFLT min, MYFLT max, MYFLT step) = 0;
-  virtual void addHorizontalSlider(char* label, MYFLT* zone, MYFLT init, 
-				   MYFLT min, MYFLT max, MYFLT step) = 0;
-  virtual void addNumEntry(char* label, MYFLT* zone, MYFLT init, MYFLT min, 
+  virtual void addVerticalSlider(char* label, MYFLT* zone, MYFLT init,
+                                 MYFLT min, MYFLT max, MYFLT step) = 0;
+  virtual void addHorizontalSlider(char* label, MYFLT* zone, MYFLT init,
+                                   MYFLT min, MYFLT max, MYFLT step) = 0;
+  virtual void addNumEntry(char* label, MYFLT* zone, MYFLT init, MYFLT min,
                            MYFLT max, MYFLT step) = 0;
   virtual void openFrameBox(char* label) = 0;
   virtual void openTabBox(char* label) = 0;
@@ -78,7 +78,7 @@ class csUI : public UserInterface {
 private:
   MYFLT* args[2];
   int ctrlCount;
-  
+
   void addZone(MYFLT* zone) {
       args[ctrlCount++] = zone;
   }
@@ -149,65 +149,65 @@ public:
 
 class mydsp : public dsp {
   private:
-	int 	iConst0;
-	MYFLT 	fConst1;
-	MYFLT 	fConst2;
-	int 	iRec8[2];
-	MYFLT 	fConst3;
-	MYFLT 	fConst4;
-	MYFLT 	fConst5;
-	MYFLT 	fConst6;
-	MYFLT 	fConst7;
-	MYFLT 	fConst8;
-	MYFLT 	fRec7[3];
-	MYFLT 	fslider0;
-	MYFLT 	fConst9;
-	MYFLT 	fConst10;
-	MYFLT 	fConst11;
-	MYFLT 	fConst12;
-	MYFLT 	fConst13;
-	MYFLT 	fConst14;
-	MYFLT 	fRec6[3];
-	MYFLT 	fConst15;
-	MYFLT 	fConst16;
-	MYFLT 	fConst17;
-	MYFLT 	fConst18;
-	MYFLT 	fConst19;
-	MYFLT 	fConst20;
-	MYFLT 	fRec5[3];
-	MYFLT 	fConst21;
-	MYFLT 	fConst22;
-	MYFLT 	fConst23;
-	MYFLT 	fConst24;
-	MYFLT 	fConst25;
-	MYFLT 	fConst26;
-	MYFLT 	fRec4[3];
-	MYFLT 	fConst27;
-	MYFLT 	fConst28;
-	MYFLT 	fConst29;
-	MYFLT 	fConst30;
-	MYFLT 	fConst31;
-	MYFLT 	fConst32;
-	MYFLT 	fRec3[3];
-	MYFLT 	fConst33;
-	MYFLT 	fConst34;
-	MYFLT 	fConst35;
-	MYFLT 	fConst36;
-	MYFLT 	fConst37;
-	MYFLT 	fConst38;
-	MYFLT 	fRec2[3];
-	MYFLT 	fConst39;
-	MYFLT 	fConst40;
-	MYFLT 	fConst41;
-	MYFLT 	fConst42;
-	MYFLT 	fConst43;
-	MYFLT 	fConst44;
-	MYFLT 	fRec1[3];
-	MYFLT 	fRec0[2];
-	MYFLT 	fslider1;
+        int     iConst0;
+        MYFLT   fConst1;
+        MYFLT   fConst2;
+        int     iRec8[2];
+        MYFLT   fConst3;
+        MYFLT   fConst4;
+        MYFLT   fConst5;
+        MYFLT   fConst6;
+        MYFLT   fConst7;
+        MYFLT   fConst8;
+        MYFLT   fRec7[3];
+        MYFLT   fslider0;
+        MYFLT   fConst9;
+        MYFLT   fConst10;
+        MYFLT   fConst11;
+        MYFLT   fConst12;
+        MYFLT   fConst13;
+        MYFLT   fConst14;
+        MYFLT   fRec6[3];
+        MYFLT   fConst15;
+        MYFLT   fConst16;
+        MYFLT   fConst17;
+        MYFLT   fConst18;
+        MYFLT   fConst19;
+        MYFLT   fConst20;
+        MYFLT   fRec5[3];
+        MYFLT   fConst21;
+        MYFLT   fConst22;
+        MYFLT   fConst23;
+        MYFLT   fConst24;
+        MYFLT   fConst25;
+        MYFLT   fConst26;
+        MYFLT   fRec4[3];
+        MYFLT   fConst27;
+        MYFLT   fConst28;
+        MYFLT   fConst29;
+        MYFLT   fConst30;
+        MYFLT   fConst31;
+        MYFLT   fConst32;
+        MYFLT   fRec3[3];
+        MYFLT   fConst33;
+        MYFLT   fConst34;
+        MYFLT   fConst35;
+        MYFLT   fConst36;
+        MYFLT   fConst37;
+        MYFLT   fConst38;
+        MYFLT   fRec2[3];
+        MYFLT   fConst39;
+        MYFLT   fConst40;
+        MYFLT   fConst41;
+        MYFLT   fConst42;
+        MYFLT   fConst43;
+        MYFLT   fConst44;
+        MYFLT   fRec1[3];
+        MYFLT   fRec0[2];
+        MYFLT   fslider1;
   public:
-	static void metadata(Meta* m)
-        { 
+        static void metadata(Meta* m)
+        {
             m->declare("name", "Fractal Noise");
             m->declare("author", "Tito Latini");
             m->declare("license", "GNU LGPL");
@@ -223,12 +223,12 @@ class mydsp : public dsp {
             m->declare("math.lib/copyright", "GRAME");
             m->declare("math.lib/version", "1.0");
             m->declare("math.lib/license", "LGPL");
-	}
+        }
 
-	virtual int getNumInputs()  { return 0; }
-	virtual int getNumOutputs() { return 1; }
-	static  void classInit(int samplingFreq) { }
-	virtual void instanceInit(int samplingFreq)
+        virtual int getNumInputs()  { return 0; }
+        virtual int getNumOutputs() { return 1; }
+        static  void classInit(int samplingFreq) { }
+        virtual void instanceInit(int samplingFreq)
         {
             fSamplingFreq = samplingFreq;
             iConst0 = min(192000, max(1, fSamplingFreq));
@@ -287,13 +287,13 @@ class mydsp : public dsp {
             for (int i=0; i<3; i++) fRec1[i] = 0;
             for (int i=0; i<2; i++) fRec0[i] = 0;
             fslider1 = FL(1.0);
-	}
-	virtual void init(int samplingFreq)
+        }
+        virtual void init(int samplingFreq)
         {
             classInit(samplingFreq);
             instanceInit(samplingFreq);
-	}
-	virtual void buildUserInterface(UserInterface* userInterface)
+        }
+        virtual void buildUserInterface(UserInterface* userInterface)
         {
             userInterface->openVerticalBox((char*)"fractalnoise");
             userInterface->addVerticalSlider((char*)"amp", &fslider1, FL(1.0),
@@ -301,7 +301,7 @@ class mydsp : public dsp {
             userInterface->addVerticalSlider((char*)"beta", &fslider0, FL(1.75),
                                          FL(0.0), FL(10.0), FL(0.01));
             userInterface->closeBox();
-	}
+        }
         virtual void compute (CSOUND* csound, MYFLT* output)
         {
             int     nn = csound->ksmps;
@@ -366,7 +366,7 @@ class mydsp : public dsp {
               fRec7[2] = fRec7[1]; fRec7[1] = fRec7[0];
               iRec8[1] = iRec8[0];
             }
-	}
+        }
 };
 
 //typedef struct mydsp FaustCode;
@@ -408,7 +408,7 @@ extern "C"
     }
 
     static OENTRY localops[] = {
-      { (char*)"fractalnoise", sizeof(FRACTALNOISE), 5, (char*)"a", (char*)"kk", 
+      { (char*)"fractalnoise", sizeof(FRACTALNOISE), 5, (char*)"a", (char*)"kk",
         (SUBR)fractalnoise_init, NULL, (SUBR)fractalnoise_process },
       { 0, 0, 0, 0, 0, 0, 0, 0, }
     };
diff --git a/Opcodes/uggab.c b/Opcodes/uggab.c
index 329dc9d..8757af1 100644
--- a/Opcodes/uggab.c
+++ b/Opcodes/uggab.c
@@ -211,7 +211,7 @@ static int posc_set(CSOUND *csound, POSC *p)
 {
     FUNC *ftp;
 
-    if (UNLIKELY((ftp = csound->FTnp2Find(csound, p->ift)) == NULL)) 
+    if (UNLIKELY((ftp = csound->FTnp2Find(csound, p->ift)) == NULL))
       return csound->InitError(csound, Str("table not found in poscil"));
     p->ftp        = ftp;
     p->tablen     = ftp->flen;
@@ -1889,4 +1889,3 @@ int uggab_init_(CSOUND *csound)
     return csound->AppendOpcodes(csound, &(localops[0]),
                                  (int) (sizeof(localops) / sizeof(OENTRY)));
 }
-
diff --git a/Opcodes/uggab.h b/Opcodes/uggab.h
index 6e26558..96d1593 100644
--- a/Opcodes/uggab.h
+++ b/Opcodes/uggab.h
@@ -206,7 +206,7 @@ typedef struct  {
 /* by Francois Pinot, jan. 2011    */
 typedef struct {
         OPDS    h;
-        MYFLT   *ar, *min, *max, *xcps, *mode, *fstval; 
+        MYFLT   *ar, *min, *max, *xcps, *mode, *fstval;
         int16   cpscod;
         int32   phs;
         MYFLT   num1, num2, dfdmax;
@@ -232,4 +232,3 @@ typedef struct {
 } RANDOM3;
 
 #endif /* UGGAB_H */
-
diff --git a/Opcodes/ugnorman.c b/Opcodes/ugnorman.c
index 1ed5460..93c0d0a 100644
--- a/Opcodes/ugnorman.c
+++ b/Opcodes/ugnorman.c
@@ -785,7 +785,7 @@ static void FetchADDNZbands(int ptls, int firstband, double *datastart,
 #endif
     frame = (int) position;
     frm_0 = datastart + frame * frmInc;
-  
+
     /* if we are using the data from the last frame */
     /* we should not try to interpolate */
     if (frame == maxFr) {
@@ -798,7 +798,7 @@ static void FetchADDNZbands(int ptls, int firstband, double *datastart,
 
     frm_1 = frm_0 + frmInc;
     frac = (double) (position - frame);
-    
+
     for (i = 0; i < ptls; i++) {
       if (swapped == 1) {
         frm0val = bswap(&(frm_0[firstband + i]));
@@ -808,11 +808,11 @@ static void FetchADDNZbands(int ptls, int firstband, double *datastart,
         frm0val = frm_0[firstband + i];
         frm1val = frm_1[firstband + i];
       }
-   
+
       buf[i] = frm0val + frac * (frm1val - frm0val);  /* calc energy */
-   
+
     }
-    
+
 }
 
 static double freqs[25]= {
@@ -921,7 +921,7 @@ static int atsaddnzset(CSOUND *csound, ATSADDNZ *p)
 
     {
       double tmp = TWOPI * csound->onedsr;
-      
+
       /* initialise frequencies to modulate noise by */
       p->phaseinc[0] = 50.0 * tmp;
       p->phaseinc[1] = 150.0 * tmp;
@@ -1129,7 +1129,7 @@ static int atssinnoiset(CSOUND *csound, ATSSINNOI *p)
                                                         + sizeof(RANDIATS));
     /* allocate space if we need it */
     /* need room for a buffer and an array of oscillator phase increments */
-    if(p->auxch.auxp != NULL || memsize > p->auxch.size) 
+    if(p->auxch.auxp != NULL || memsize > p->auxch.size)
         csound->AuxAlloc(csound, (size_t) memsize, &p->auxch);
 
     /* set up the buffer, phase, etc. */
@@ -1160,7 +1160,7 @@ static int atssinnoiset(CSOUND *csound, ATSSINNOI *p)
       p->nzdata = (double *) csound->Malloc(csound, sizeof(double) * nzmemsize);
     }
 
-    
+
     /* make sure partials are in range */
     if (UNLIKELY((int) (*p->iptloffset + *p->iptls * *p->iptlincr) > p->npartials ||
                  (int) (*p->iptloffset) < 0)) {
@@ -1221,8 +1221,8 @@ static int atssinnoiset(CSOUND *csound, ATSSINNOI *p)
     }
     /* save the memory size of the noise */
     p->nzmemsize = nzmemsize;
-  
-   
+
+
     /* flag set to reduce the amount of warnings sent out */
     /* for time pointer out of range */
     p->prFlg = 1;               /* true */
@@ -1288,7 +1288,7 @@ static int atssinnoiset(CSOUND *csound, ATSSINNOI *p)
     for (i = 0; i < (int) *p->iptls; i++) {
       randiats_setup(csound, freqs[i], &(p->randinoise[i]));
     }
-   
+
     return OK;
 }
 
@@ -1328,14 +1328,14 @@ static int atssinnoi(CSOUND *csound, ATSSINNOI *p)
     }
     else
       p->prFlg = 1;
-    
-    
+
+
     fetchSINNOIpartials(p, frIndx);
-    
+
     FetchADDNZbands(*p->iptls, p->firstband, p->datastart, p->frmInc, p->maxFr,
                     p->swapped, p->nzbuf, frIndx);
-   
-   
+
+
     /* set local pointer to output and initialise output to zero */
     ar = p->aoutput;
 
@@ -1344,7 +1344,7 @@ static int atssinnoi(CSOUND *csound, ATSSINNOI *p)
 /*       *ar++ = FL(0.0); */
 
     oscbuf = p->oscbuf;
-  
+
     /* do synthesis */
     if (p->firstband != -1) {
 
@@ -1371,11 +1371,11 @@ static int atssinnoi(CSOUND *csound, ATSSINNOI *p)
           /* calc output */
           ar[n] += csound->e0dbfs *
             (MYFLT)(amp * sinewave * *p->ksinamp + noise **p->knzamp);
-          
+
         }
         p->oscphase[i] = phase;
       }
-      
+
     }
     else {
       for (i = 0; i < (int) *p->iptls; i++) {
@@ -1393,9 +1393,9 @@ static int atssinnoi(CSOUND *csound, ATSSINNOI *p)
         }
         p->oscphase[i] = phase;
       }
-     
+
     }
-   
+
     return OK;
 }
 
@@ -2167,4 +2167,3 @@ int ugnorman_init_(CSOUND *csound)
     return csound->AppendOpcodes(csound, &(localops[0]),
                                  (int) (sizeof(localops) / sizeof(OENTRY)));
 }
-
diff --git a/Opcodes/ugsc.c b/Opcodes/ugsc.c
index bc17330..1bf2176 100644
--- a/Opcodes/ugsc.c
+++ b/Opcodes/ugsc.c
@@ -381,7 +381,7 @@ static int phaser1(CSOUND *csound, PHASER1 *p)
 
 static int phaser2set(CSOUND *csound, PHASER2 *p)
 {
-    int modetype, j;
+    int modetype;
     int loop;
 
     p->modetype = modetype = (int)*p->mode;
diff --git a/Opcodes/urandom.c b/Opcodes/urandom.c
index f60c292..b7ce86f 100644
--- a/Opcodes/urandom.c
+++ b/Opcodes/urandom.c
@@ -57,11 +57,11 @@ static int urand_run(CSOUND *csound, URANDOM *p)
     int ur = p->ur;
     /* union ieee754_double x; */
     int64_t x;
-    read(ur, &x, sizeof(int64_t));
+    if (UNLIKELY(read(ur, &x, sizeof(int64_t))!=sizeof(int64_t))) return NOTOK;
 
-    /* x.ieee.exponent = x.ieee.exponent& 0x377; */
-    /* printf("Debug: %s(%d): %g %d %03x %05x %08x\n", __FILE__, __LINE__, x.d, */
-    /*        x.ieee.negative, x.ieee.exponent, x.ieee.mantissa0, x.ieee.mantissa1); */
+/* x.ieee.exponent = x.ieee.exponent& 0x377; */
+/* printf("Debug: %s(%d): %g %d %03x %05x %08x\n", __FILE__, __LINE__, x.d, */
+/*        x.ieee.negative, x.ieee.exponent, x.ieee.mantissa0, x.ieee.mantissa1); */
     *p->ar = p->mul *((MYFLT)x/(MYFLT)0x7fffffffffffffff) + p->add;
     return OK;
 }
@@ -80,7 +80,7 @@ static int urand_arun(CSOUND *csound, URANDOM *p)
     MYFLT *ar = p->ar;
     int n, nsmps = csound->ksmps;
     for (n=0; n<nsmps; n++) {
-      read(ur, &x, sizeof(int64_t));
+      if (UNLIKELY(read(ur, &x, sizeof(int64_t))!= sizeof(int64_t))) return NOTOK;
       ar[n] = p->mul *((MYFLT)x/(MYFLT)0x7fffffffffffffff) + p->add;
     }
     return OK;
diff --git a/Opcodes/vbap.c b/Opcodes/vbap.c
index 1f3d181..e122e98 100644
--- a/Opcodes/vbap.c
+++ b/Opcodes/vbap.c
@@ -899,7 +899,7 @@ void new_spread_base(CART_VEC spreaddir, CART_VEC vscartdir,
 
 #define S(x)    sizeof(x)
 
-/* static */ 
+/* static */
 static OENTRY vbap_localops[] = {
   { "vbap4",      S(VBAP_FOUR),             TR|5,  "aaaa",             "akOO",
     (SUBR) vbap_FOUR_init,          (SUBR) NULL,    (SUBR) vbap_FOUR        },
diff --git a/Opcodes/vbap_zak.c b/Opcodes/vbap_zak.c
index 18baf42..e0cc0ae 100644
--- a/Opcodes/vbap_zak.c
+++ b/Opcodes/vbap_zak.c
@@ -75,7 +75,7 @@ int vbap_zak(CSOUND *csound, VBAP_ZAK *p)   /* during note performance: */
           for (i=0; i<nsmps; ++i)
             outptr[i] = inptr[i] * ogain;
         }
-      else 
+      else
         memset(outptr, 0, nsmps*sizeof(MYFLT));
       outptr += nsmps;
     }
diff --git a/Opcodes/vst4cs/src/vsthost.cpp b/Opcodes/vst4cs/src/vsthost.cpp
index 764669d..b066768 100644
--- a/Opcodes/vst4cs/src/vsthost.cpp
+++ b/Opcodes/vst4cs/src/vsthost.cpp
@@ -857,11 +857,11 @@ bool VSTPlugin::OnOutputConnected(AEffect *effect, long output)
   return true;
 }
 
-long VSTPlugin::Master(AEffect *effect, 
-                       long opcode, 
+long VSTPlugin::Master(AEffect *effect,
+                       long opcode,
                        long index,
-                       long value, 
-                       void *ptr, 
+                       long value,
+                       void *ptr,
                        float opt)
 {
   VSTPlugin *plugin = 0;
@@ -965,4 +965,3 @@ long VSTPlugin::Master(AEffect *effect,
   }
   return 0;
 }
-
diff --git a/Opcodes/vst4cs/src/vsthost.h b/Opcodes/vst4cs/src/vsthost.h
index 9e9e66f..da5900b 100644
--- a/Opcodes/vst4cs/src/vsthost.h
+++ b/Opcodes/vst4cs/src/vsthost.h
@@ -114,16 +114,16 @@ class VSTPlugin {
   virtual bool IsSynth();
   virtual bool AddMIDI(int data, int deltaFrames, int detune);
   virtual void SendMidi();
-  virtual void processReplacing(float **inputs, 
+  virtual void processReplacing(float **inputs,
                                 float **outputs,
                                 long sampleframes);
-  virtual void process(float **inputs, 
-                       float **outputs, 
+  virtual void process(float **inputs,
+                       float **outputs,
                        long sampleframes);
-  virtual long Dispatch(long opCode, 
-                        long index=0, 
-                        long value=0, 
-                        void *ptr=0, 
+  virtual long Dispatch(long opCode,
+                        long index=0,
+                        long value=0,
+                        void *ptr=0,
                         float opt=0);
   virtual void Log(const char *format, ...);
   virtual void Debug(const char *format, ...);
@@ -142,17 +142,17 @@ class VSTPlugin {
   {
     return Dispatch(effGetChunk, isPreset, 0, ptr);
   }
-  long EffGetProgram() 
-  { 
-    return Dispatch(effGetProgram); 
+  long EffGetProgram()
+  {
+    return Dispatch(effGetProgram);
   }
-  void EffSetProgram(long lValue) 
-  { 
-    Dispatch(effSetProgram, 0, lValue); 
+  void EffSetProgram(long lValue)
+  {
+    Dispatch(effSetProgram, 0, lValue);
   }
-  void EffGetProgramName(char *ptr) 
-  { 
-    Dispatch(effGetProgramName, 0, 0, ptr); 
+  void EffGetProgramName(char *ptr)
+  {
+    Dispatch(effGetProgramName, 0, 0, ptr);
   }
   static std::map<long, std::string> &masterOpcodes()
   {
@@ -197,4 +197,3 @@ inline void VSTPlugin::process(float **ins, float **outs, long frames)
 }
 
 #endif
-
diff --git a/Opcodes/wiimote.c b/Opcodes/wiimote.c
index 2408894..3c0decc 100644
--- a/Opcodes/wiimote.c
+++ b/Opcodes/wiimote.c
@@ -80,7 +80,11 @@ typedef struct {
     MYFLT     *num;
  } WIIRANGE;
 
-#define WIIMOTE_STATE_CONNECTED         (0x0008)
+#ifdef WIIUSE_0_12
+#  define WIIMOTE_STATE_CONNECTED          (0x0008)
+#else
+#  define WIIMOTE_STATE_CONNECTED          (0x0010)
+#endif
 
 int wiimote_find(CSOUND *csound, WIIMOTE *p)
 {
@@ -116,7 +120,7 @@ int wiimote_find(CSOUND *csound, WIIMOTE *p)
       return csound->InitError(csound, Str("unable to open wiimote\n"));
     }
     /* Initialise ranges */
-    for (i=0; i<max_wiimotes; i++) {
+    for (i=0; i<n; i++) {
       wiiuse_set_leds(wiimotes[i], WIIMOTE_LED_1<<i);
       wiirange[i].axis_x_min    = FL(0.0);
       wiirange[i].axis_x_scale  = FL(1.0);
@@ -136,7 +140,7 @@ int wiimote_find(CSOUND *csound, WIIMOTE *p)
       wiiuse_motion_sensing(wiimotes[i], 1);
     }
     p->wii = wiimotes;
-    p->max_wiimotes = max_wiimotes;
+    p->max_wiimotes = n;
     *p->res = FL(1.0);
     return OK;
 }
@@ -207,8 +211,10 @@ int wii_data(CSOUND *csound, WIIMOTE *p)
     wiirange_t *wiir = p->wiir;
     int n = (int)*p->num;
     int kontrol = (int)(*p->kControl+FL(0.5));
-    if (UNLIKELY(n>=MAX_WIIMOTES || !(wii[n]->state & WIIMOTE_STATE_CONNECTED)))
+    if (UNLIKELY(n>=MAX_WIIMOTES || !(wii[n]->state & WIIMOTE_STATE_CONNECTED))) {
+      printf("state of wii %d is %x\n", n, wii[n]->state);
       return csound->PerfError(csound, Str("wiimote %d does not exist"), n);
+    }
     if (kontrol<0) {
       printf("%f -- %.4x: "
              "tilt=[%f %f];\nforce=(%f %f %f)\n",
diff --git a/SConstruct b/SConstruct
index 987f033..233a6f3 100644
--- a/SConstruct
+++ b/SConstruct
@@ -267,14 +267,14 @@ commandOptions.Add('tclversion',
     'Set to 8.4 or 8.5',
     '8.5')
 commandOptions.Add('includeWii',
-     'Set to 1 if using libwiimote',
+     'Set to 12 or 13 if using libwiiuse v0.12 or v0.13',
      '0')
 commandOptions.Add('includeP5Glove',
      'Set to 1 if using P5 Glove',
      '0')
 commandOptions.Add('buildBeats',
      'Set to 1 if building beats score language',
-     '0')
+     '1')
 commandOptions.Add('buildcatalog',
      'Set to 1 if building opcode/library catalogue',
      '0')
@@ -529,8 +529,8 @@ elif getPlatform() == 'win32':
         commonEnvironment.Prepend(CCFLAGS = ["-Wall"])
         commonEnvironment.Append(CPPPATH = '/usr/local/include')
         commonEnvironment.Append(CPPPATH = '/usr/include')
-        commonEnvironment.Append(SHLINKFLAGS = Split(' -mno-cygwin -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc'))
-        commonEnvironment.Append(LINKFLAGS = Split(' -mno-cygwin -Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc'))
+        commonEnvironment.Append(SHLINKFLAGS = Split('-Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc'))
+        commonEnvironment.Append(LINKFLAGS = Split('-Wl,--enable-auto-import -Wl,--enable-runtime-pseudo-reloc'))
     else:
         commonEnvironment.Append(CCFLAGS =  '/DMSVC')
         commonEnvironment.Append(CXXFLAGS = '/EHsc')
@@ -701,8 +701,9 @@ if not configure.CheckLibWithHeader("pthread", "pthread.h", language = "C"):
 
 # Support for GEN49 (load MP3 file)
 
-if commonEnvironment['includeWii'] == '1' and configure.CheckLibWithHeader('wiiuse', "wiiuse.h", language = "C") :
+if commonEnvironment['includeWii'] != '0' and configure.CheckLibWithHeader('wiiuse', "wiiuse.h", language = "C") :
     wiifound = 1
+    wiiversion = commonEnvironment['includeWii']
     print 'CONFIGURATION DECISION: Building with Wiimote support'
 else:
     wiifound = 0
@@ -885,6 +886,9 @@ if getPlatform() == 'darwin':
         tmp = OSXFrameworkBaseDir + '/Versions/%s'
         OSXFrameworkCurrentVersion = tmp % csoundLibraryVersion
 
+if getPlatform() == "win32":
+    Tool('lex')(commonEnvironment)
+    Tool('yacc')(commonEnvironment)
 csoundLibraryEnvironment = commonEnvironment.Clone()
 
 if commonEnvironment['buildMultiCore'] != '0':
@@ -894,9 +898,6 @@ if commonEnvironment['buildMultiCore'] != '0':
 if commonEnvironment['buildNewParser'] != '0':
     if commonEnvironment['buildMultiCore'] != '0':
       csoundLibraryEnvironment.Append(CPPFLAGS = ['-DPARCS'])
-      if getPlatform() == "win32":
-        Tool('lex')(csoundLibraryEnvironment)
-        Tool('yacc')(csoundLibraryEnvironment)
     print 'CONFIGURATION DECISION: Building with new parser enabled'
     reportflag='--report=itemset'
     csoundLibraryEnvironment.Append(YACCFLAGS = ['-d', reportflag, '-p','csound_orc'])
@@ -1297,7 +1298,7 @@ pluginEnvironment.Append(LIBS = Split('sndfile'))
 
 if getPlatform() == 'darwin':
     pluginEnvironment.Append(LINKFLAGS = Split('''
-        -framework CoreMidi -framework CoreFoundation -framework CoreServices -framework CoreAudio
+        -framework CoreMIDI -framework CoreFoundation -framework CoreServices -framework CoreAudio
     '''))
     # pluginEnvironment.Append(LINKFLAGS = ['-dynamiclib'])
     pluginEnvironment['SHLIBSUFFIX'] = '.dylib'
@@ -1462,8 +1463,8 @@ else:
         if getPlatform() == 'win32':
             csoundLuaInterface = luaWrapperEnvironment.SharedObject(
 		    'interfaces/lua_interface.i',
-		    SWIGFLAGS = [swigflags, '-lua', '-module', 'luaCsnd', '-lua51', '-outdir', '.'])
-	    luaWrapperEnvironment.Prepend(LIBS = ['csnd','luaj51'])
+		    SWIGFLAGS = [swigflags, '-lua', '-module', 'luaCsnd', '-outdir', '.'])
+	    luaWrapperEnvironment.Prepend(LIBS = ['csnd','lua51'])
 	else:
 	    csoundLuaInterface = luaWrapperEnvironment.SharedObject(
 			'interfaces/lua_interface.i',
@@ -1517,7 +1518,7 @@ else:
         libs.append(javaWrapper)
         jcsnd = javaWrapperEnvironment.Java(
             target = './interfaces', source = './interfaces',
-            JAVACFLAGS = ['-source', '1.4', '-target', '1.4'])
+            JAVACFLAGS = ['-source', '5', '-target', '5'])
         try:
             os.mkdir('interfaces/csnd', 0755)
         except:
@@ -1737,6 +1738,8 @@ else:
 if wiifound==1:
   WiiEnvironment = pluginEnvironment.Clone()
   makePlugin(WiiEnvironment, 'wiimote', ['Opcodes/wiimote.c'])
+  if wiiversion=='12':
+    WiiEnvironment.Append(CCFLAGS = ['-DWIIUSE_0_12'])
 if p5gfound==1:
   P5GEnvironment = pluginEnvironment.Clone()
   makePlugin(P5GEnvironment, 'p5g', ['Opcodes/p5glove.c'])
@@ -1820,13 +1823,16 @@ else:
         guiProgramEnvironment.Append(LIBS = ['dl'])
     csoundProgramEnvironment.Append(LIBS = ['pthread', 'm'])
     if wiifound :
+      if getPlatform() == 'darwin':
+        WiiEnvironment.Append(LIBS = ['wiiuse'])
+      else:
         WiiEnvironment.Append(LIBS = ['wiiuse', 'bluetooth'])
     if p5gfound :
         P5GEnvironment.Append(LIBS = ['p5glove'])
     vstEnvironment.Append(LIBS = ['stdc++', 'pthread', 'm'])
     guiProgramEnvironment.Append(LIBS = ['stdc++', 'pthread', 'm'])
     if getPlatform() == 'darwin':
-        csoundProgramEnvironment.Append(LINKFLAGS = Split('''-framework Carbon -framework CoreAudio -framework CoreMidi'''))
+        csoundProgramEnvironment.Append(LINKFLAGS = Split('''-framework Carbon -framework CoreAudio -framework CoreMIDI'''))
 
 if (not (commonEnvironment['useFLTK'] == '1' and fltkFound)):
     print 'CONFIGURATION DECISION: Not building with FLTK graphs and widgets.'
@@ -2009,7 +2015,7 @@ else:
         vst4Environment = vstEnvironment.Clone()
         vst4Environment.Append(LIBS = ['fltk'])
         vst4Environment.Append(LIBS = ['stdc++'])
-        vst4Environment.Append(LINKFLAGS=['-framework', 'carbon', '-framework',
+        vst4Environment.Append(LINKFLAGS=['-framework', 'Carbon', '-framework',
                                           'ApplicationServices'])
         vst4Environment.Append(CPPPATH = ['frontends/CsoundVST'])
         vst4Environment.Append(CPPFLAGS = ['-DCS_VSTHOST'])
@@ -2272,7 +2278,7 @@ def addOSXResourceFork(env, baseName, dirName):
         else:
             fileName = baseName
         env.Command(('%s/resources' % fileName).replace('/', '_'), fileName,
-                    "/Developer/Tools/Rez -i APPL -o $SOURCE cs5.r")
+                    "Rez -i APPL -o $SOURCE cs5.r")
 
 csoundProgramSources = ['frontends/csound/csound_main.c']
 if getPlatform() == 'linux':
@@ -2453,7 +2459,7 @@ else:
     elif getPlatform() == 'darwin':
         acEnvironment.Append(LIBS = ['fltk'])
         acEnvironment.Append(LIBS = ['dl', 'm', 'fltk_images', 'png', 'jpeg'])
-        acEnvironment.Append(SHLINKFLAGS = '--no-export-all-symbols')
+        #acEnvironment.Append(SHLINKFLAGS = '--no-export-all-symbols')
         acEnvironment.Append(SHLINKFLAGS = '--add-stdcall-alias')
         acEnvironment['SHLIBSUFFIX'] = '.dylib'
     elif getPlatform() == 'win32':
@@ -2473,6 +2479,15 @@ else:
         acEnvironment.Append(SWIGFLAGS = [option])
     print 'PATH =', commonEnvironment['ENV']['PATH']
     csoundAcSources = Split('''
+    frontends/CsoundAC/allegro.cpp
+    frontends/CsoundAC/allegrord.cpp
+    frontends/CsoundAC/allegroserial.cpp
+    frontends/CsoundAC/allegrosmfrd.cpp
+    frontends/CsoundAC/allegrosmfwr.cpp
+    frontends/CsoundAC/allegrowr.cpp
+    frontends/CsoundAC/mfmidi.cpp
+    frontends/CsoundAC/strparse.cpp
+    frontends/CsoundAC/trace.cpp
     frontends/CsoundAC/Cell.cpp
     frontends/CsoundAC/ChordLindenmayer.cpp
     frontends/CsoundAC/Composition.cpp
@@ -2694,7 +2709,7 @@ if commonEnvironment['buildTclcsound'] == '1' and tclhfound:
         SHLIBPREFIX = '')
     if getPlatform() == 'darwin':
         csTclEnvironment.Command('cswish_resources', 'cswish',
-                                 "/Developer/Tools/Rez -i APPL -o cswish frontends/tclcsound/cswish.r")
+                                 "Rez -i APPL -o cswish frontends/tclcsound/cswish.r")
         #if commonEnvironment['dynamicCsoundLibrary'] == '1':
         #  if commonEnvironment['useDouble'] == '0': 
         #    tcloc = 'CsoundLib.framework/Resources/TclTk/'
@@ -2753,7 +2768,7 @@ if commonEnvironment['buildWinsound'] == '1' and fltkFound:
         csWinEnvironment.Append(CXXFLAGS = ['-fno-rtti'])
         csWinEnvironment.Append(LIBS = ['fltk', 'stdc++', 'pthread', 'm'])
         csWinEnvironment.Append(LINKFLAGS = Split('''
-            -framework Carbon -framework CoreAudio -framework CoreMidi
+            -framework Carbon -framework CoreAudio -framework CoreMIDI
             -framework ApplicationServices
         '''))
         appDir = 'frontends/winsound/Winsound.app/Contents/MacOS'
@@ -2810,7 +2825,7 @@ if not (commonEnvironment['buildBeats'] != '0'):
     print 'CONFIGURATION DECISION: Not building beats score frontend.'
 else:
     print "CONFIGURATION DECISION: Building beats score frontend"
-    csBeatsEnvironment = Environment(ENV = os.environ)
+    csBeatsEnvironment = commonEnvironment.Clone()
     csBeatsEnvironment.Append(LINKFLAGS = ['-lm'])
     csBeatsEnvironment.Append(YACCFLAGS = ['-d'])
     #csBeatsEnvironment.Append(LEXFLAGS = ['-Pbeats'])
@@ -2820,8 +2835,8 @@ else:
                                source = 'frontends/beats/beats.l')
     bb = csBeatsEnvironment.Program('csbeats',
                                     ['frontends/beats/main.c', 
-                                     'frontends/beats/lex.yy.c', 
-                                     'frontends/beats/beats.tab.c'])
+                                    byb, 
+                                    blb])
     executables.append(bb)
 
 if not (commonEnvironment['buildcatalog'] != '0'):
diff --git a/SuSE/csound.spec b/SuSE/csound.spec
index 69da068..03a98f0 100644
--- a/SuSE/csound.spec
+++ b/SuSE/csound.spec
@@ -2,6 +2,7 @@
 # spec file for package csound
 #
 # Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+#           (c) 2012 Csound Developers
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -24,8 +25,8 @@ BuildRequires:  alsa-devel fdupes fluidsynth-devel gcc-c++ jack-devel liblo-deve
 BuildRequires:  fltk-devel libjpeg-devel libpng-devel xorg-x11-devel
 %endif
 Summary:        Computer Sound Synthesis and Composition Program
-Version:        5.16.1
-Release:        130
+Version:        5.17.2
+Release:        135
 License:        GFDL-1.2 ; LGPL-2.1+ ; MIT
 Group:          Productivity/Multimedia/Sound/Utilities
 Source:         Csound%{version}.tar.bz2
diff --git a/Top/argdecode.c b/Top/argdecode.c
index f7559fb..abf7002 100644
--- a/Top/argdecode.c
+++ b/Top/argdecode.c
@@ -424,8 +424,6 @@ static int decode_long(CSOUND *csound, char *s, int argc, char **argv)
     }
     else if (!(strcmp (s, "nodisplays"))) {
       O->displays = 0;                  /* no func displays */
-      O->graphsoff = 1;
-      O->postscript = 0;
       return 1;
     }
     else if (!(strcmp (s, "displays"))) {
@@ -1028,8 +1026,6 @@ int argdecode(CSOUND *csound, int argc, char **argv_)
             break;
           case 'd':
             O->displays = 0;              /* no func displays */
-            O->graphsoff = 1;
-            O->postscript = 0;                  
             break;
           case 'g':
             O->graphsoff = 1;             /* don't use graphics */
diff --git a/Top/cscorfns.c b/Top/cscorfns.c
index a7a46c7..e7cf957 100644
--- a/Top/cscorfns.c
+++ b/Top/cscorfns.c
@@ -172,6 +172,10 @@ PUBLIC EVLIST * cscoreListCreate(CSOUND *csound, int nslots)
     int   needsiz = sizeof(EVLIST) + nslots * sizeof(EVENT *);
     int   minfreesiz = needsiz + sizeof(CSHDR);
 
+    if (minfreesiz > MAXALLOC) {
+      csound->Message(csound, Str("Not enough memory\n"));
+      exit(1);
+    }
     if (nxtfree != NULL && nxtfree->size >= minfreesiz)
       newblk = nxtfree;
     else newblk = getfree(csound, minfreesiz);
@@ -199,6 +203,10 @@ PUBLIC EVENT * cscoreCreateEvent(CSOUND *csound, int pcnt)
     int   needsiz = sizeof(EVENT) + pcnt * sizeof(MYFLT);
     int   minfreesiz = needsiz + sizeof(CSHDR);
 
+    if (minfreesiz > MAXALLOC) {
+      csound->Message(csound, Str("Not enough memory\n"));
+      exit(1);
+    }
     if (nxtfree != NULL && nxtfree->size >= minfreesiz)
       newblk = nxtfree;
     else newblk = getfree(csound, minfreesiz);
@@ -941,7 +949,7 @@ PUBLIC void cscoreFileSetCurrent(CSOUND *csound, FILE *fp)
       corfile_rewind(inf);
       corfile_rm(&csound->scstr);
       csound->scstr = inf;
-      nxtevt->op = NULL;
+      nxtevt->op = '\0';
       atEOF = 0;
     }
     if (csound->scfp != NULL)
diff --git a/Top/csmodule.c b/Top/csmodule.c
index f3c1f75..eafccbb 100644
--- a/Top/csmodule.c
+++ b/Top/csmodule.c
@@ -1344,7 +1344,7 @@ const INITFN staticmodules[] = { hrtfopcodes_localops_init, babo_localops_init,
                                  crossfm_localops_init, pvlock_localops_init,
                                  fareyseq_localops_init, hrtfearly_localops_init,
                                  hrtfreverb_localops_init, minmax_localops_init,
-                                 vaops_localops_init, 
+                                 vaops_localops_init,
 #ifndef WIN32
                                  cpumeter_localops_init,
 #endif
diff --git a/Top/csound.c b/Top/csound.c
index 67b1e45..1a4f8d2 100644
--- a/Top/csound.c
+++ b/Top/csound.c
@@ -148,6 +148,7 @@ extern "C" {
     csoundSetInputValueCallback,
     csoundSetOutputValueCallback,
     csoundScoreEvent,
+    csoundScoreEventAbsolute,
     csoundSetExternalMidiInOpenCallback,
     csoundSetExternalMidiReadCallback,
     csoundSetExternalMidiInCloseCallback,
@@ -961,8 +962,8 @@ extern "C" {
       if (!(flags & CSOUNDINIT_NO_SIGNAL_HANDLER)) {
         install_signal_handler();
       }
-      if (!(flags & CSOUNDINIT_NO_ATEXIT))
 #if !defined(WIN32)
+      if (!(flags & CSOUNDINIT_NO_ATEXIT))
         atexit(destroy_all_instances);
 #endif
       /*aops_init_tables();*/
@@ -1326,7 +1327,9 @@ extern "C" {
 #ifdef PARCS
   static int inline nodePerf(CSOUND *csound, int index)
   {
-      struct instr_semantics_t *instr = NULL;
+#if (TRACE&4) == 4
+      struct instr_semantics_t *instr;
+#endif
       INSDS *insds = NULL;
       OPDS  *opstart = NULL;
       int update_hdl = -1;
@@ -1342,7 +1345,9 @@ extern "C" {
         }
 
         if (node->hdr.type == DAG_NODE_INDV) {
+#if (TRACE&4) == 4
           instr = node->instr;
+#endif
           insds = node->insds;
           played_count++;
 
@@ -1361,9 +1366,12 @@ extern "C" {
           int node_ctr = 0;
           while (node_ctr < node->count) {
             DAG_NODE *play_node = node->nodes[node_ctr];
+#if (TRACE&4) == 4
             instr = play_node->instr;
+#endif
             insds = play_node->insds;
-            TRACE_1("DAG_NODE_LIST: node->nodes=%p: play_node = %p, instr=%p, insds=%p\n",
+            TRACE_1("DAG_NODE_LIST: node->nodes=%p: play_node = %p, "
+                    "instr=%p, insds=%p\n",
                     node->nodes, play_node, instr, insds);
 
             TRACE_2("[%i] Playing: %s [%p]\n", index, instr->name, insds);
@@ -1478,7 +1486,7 @@ extern "C" {
   int kperf(CSOUND *csound)
   {
 #ifdef PARCS
-      void *barrier1, *barrier2;
+      /* void *barrier1, *barrier2; */
       INSDS *ip;
 #endif /* PARCS */
       /* update orchestra time */
@@ -1549,8 +1557,8 @@ extern "C" {
 #endif
       }
 #else /* PARCS */
-      barrier1 = csound->multiThreadedBarrier1;
-      barrier2 = csound->multiThreadedBarrier2;
+      /* barrier1 = csound->multiThreadedBarrier1; */
+      /* barrier2 = csound->multiThreadedBarrier2; */
       ip = csound->actanchor.nxtact;
 
       if (ip != NULL) {
@@ -2096,8 +2104,22 @@ extern "C" {
         evt.p[i + 1] = pfields[i];
       //memcpy(&evt.p[1],pfields, numFields*sizeof(MYFLT));
       return insert_score_event_at_sample(csound, &evt, csound->icurTime);
-      }
+  }
 
+  PUBLIC int csoundScoreEventAbsolute(CSOUND *csound, char type,
+                                      const MYFLT *pfields, long numFields,
+                                      double time_ofs)
+  {
+      EVTBLK  evt;
+      int     i;
+
+      evt.strarg = NULL;
+      evt.opcod = type;
+      evt.pcnt = (int16) numFields;
+      for (i = 0; i < (int) numFields; i++)
+        evt.p[i + 1] = pfields[i];
+      return insert_score_event(csound, &evt, time_ofs);
+  }
 
   /*
    *    REAL-TIME AUDIO
@@ -2626,9 +2648,9 @@ extern "C" {
       void      *p1, *p2;
       uintptr_t length;
       int n = 0;
-     
+
       csoundCleanup(csound);
- 
+
       /* call registered reset callbacks */
       while (csound->reset_list != NULL) {
         resetCallback_t *p = (resetCallback_t*) csound->reset_list;
@@ -2639,12 +2661,12 @@ extern "C" {
       /* call local destructor routines of external modules */
       /* should check return value... */
       csoundDestroyModules(csound);
- 
+
       /* IV - Feb 01 2005: clean up configuration variables and */
       /* named dynamic "global" variables of Csound instance */
       csoundDeleteAllConfigurationVariables(csound);
       csoundDeleteAllGlobalVariables(csound);
- 
+
 #ifdef CSCORE
       cscoreRESET(csound);
 #endif
@@ -2658,6 +2680,8 @@ extern "C" {
       remove_tmpfiles(csound);
       rlsmemfiles(csound);
       memRESET(csound);
+      while (csound->filedir[n])        /* Clear source directory */
+        free(csound->filedir[n++]);
       /**
        * Copy everything EXCEPT the function pointers.
        * We do it by saving them and copying them back again...
@@ -2678,9 +2702,6 @@ extern "C" {
       memcpy(&(csound->exitjmp), &(saved_env->exitjmp), sizeof(jmp_buf));
       csound->memalloc_db = saved_env->memalloc_db;
       free(saved_env);
-      while (csound->filedir[n])        /* Clear source directoiry */
-        free(csound->filedir[n++]);
-   
   }
 
   PUBLIC int csoundGetDebug(CSOUND *csound)
@@ -3715,4 +3736,3 @@ extern "C" {
 #ifdef __cplusplus
 }
 #endif
-
diff --git a/Top/getstring.c b/Top/getstring.c
index aebba22..4f01821 100644
--- a/Top/getstring.c
+++ b/Top/getstring.c
@@ -43,6 +43,7 @@ int closedir(DIR*);
 #ifndef GNU_GETTEXT
 void init_getstring(void)
 {
+    setlocale(LC_NUMERIC, "C"); /* Ensure C syntax */
 }
 PUBLIC char *csoundLocalizeString(const char *s)
 {
@@ -67,6 +68,7 @@ void init_getstring(void)
     /* This is experimental; where should these be?? */
     bindtextdomain("csound5", "/home/jpff/Sourceforge/csound/csound5/po");
 #endif
+    setlocale(LC_NUMERIC, "C"); /* Ensure C syntax */
 }
 
 PUBLIC char *csoundLocalizeString(const char *s)
diff --git a/Top/one_file.c b/Top/one_file.c
index 1a427cc..b61ced1 100644
--- a/Top/one_file.c
+++ b/Top/one_file.c
@@ -110,10 +110,16 @@ CS_NOINLINE char *csoundTmpFileName(CSOUND *csound, char *buf, const char *ext)
         //        if (UNLIKELY(mytmpnam(buf) == NULL))
         //          csound->Die(csound, Str(" *** cannot create temporary file"));
         int fd;
-        strcpy(buf, "/tmp/csoundXXXXXX");
+        char *tmpdir = getenv("TMPDIR");
+        if (tmpdir != NULL && tmpdir[0] != '\0')
+          snprintf(buf, nBytes, "%s/csound-XXXXXX", tmpdir);
+        else
+          strcpy(buf, "/tmp/csound-XXXXXX");
+        umask(0077); /* ensure exclusive access on buggy implementations of mkstemp */
         if (UNLIKELY((fd = mkstemp(buf)) < 0))
           csound->Die(csound, Str(" *** cannot create temporary file"));
         close(fd);
+        unlink(buf);
 #else
         {
           char  *s = (char*) csoundGetEnv(csound, "SFDIR");
@@ -359,7 +365,7 @@ static int createOrchestra(CSOUND *csound, FILE *unf)
         csound->orchstr = incore;
         return TRUE;
       }
-      else 
+      else
         corfile_puts(buffer, incore);
     }
     csoundErrorMsg(csound, Str("Missing end tag </CsInstruments>"));
@@ -381,7 +387,7 @@ static int createScore(CSOUND *csound, FILE *unf)
         csound->scorestr = incore;
         return TRUE;
       }
-      else 
+      else
         corfile_puts(buffer, incore);
     }
     csoundErrorMsg(csound, Str("Missing end tag </CsScore>"));
@@ -430,6 +436,8 @@ static int createExScore(CSOUND *csound, char *p, FILE *unf)
         sprintf(sys, "%s %s %s", prog, extname, ST(sconame));
         if (UNLIKELY(system(sys) != 0)) {
           csoundErrorMsg(csound, Str("External generation failed"));
+          remove(extname);
+          remove(ST(sconame));
           return FALSE;
         }
         remove(extname);
@@ -800,7 +808,7 @@ int read_unified_file(CSOUND *csound, char **pname, char **score)
         result = r && result;
       }
       else if (blank_buffer(csound, buffer)) continue;
-      else if (started && strchr(p, '<') == buffer){ 
+      else if (started && strchr(p, '<') == buffer){
         csoundMessage(csound, Str("unknown CSD tag: %s\n"), buffer);
       }
     }
@@ -818,4 +826,3 @@ int read_unified_file(CSOUND *csound, char **pname, char **score)
     csoundFileClose(csound, fd);
     return result;
 }
-
diff --git a/Top/threads.c b/Top/threads.c
index 32d7b19..66e08e5 100644
--- a/Top/threads.c
+++ b/Top/threads.c
@@ -33,10 +33,6 @@
 #include "csoundCore.h"
 #include "csGblMtx.h"
 
-static CS_NOINLINE void notImplementedWarning_(const char *name)
-{
-    fprintf(stderr, Str("%s() is not implemented on this platform.\n"), name);
-}
 
 #if defined(WIN32)
 #include <windows.h>
@@ -91,6 +87,11 @@ PUBLIC void csoundSleep(size_t milliseconds)
 
 #elif defined(mac_classic)
 
+static CS_NOINLINE void notImplementedWarning_(const char *name)
+{
+    fprintf(stderr, Str("%s() is not implemented on this platform.\n"), name);
+}
+
 PUBLIC long csoundRunCommand(const char * const *argv, int noWait)
 {
     notImplementedWarning_("csoundRunCommand");
@@ -181,7 +182,7 @@ PUBLIC void csoundSleep(size_t milliseconds)
 
 #define BARRIER_SERIAL_THREAD (-1)
 
-#if !defined(HAVE_PTHREAD_BARRIER_INIT) 
+#if !defined(HAVE_PTHREAD_BARRIER_INIT)
 #ifndef __MACH__
 
 typedef struct barrier {
@@ -550,6 +551,11 @@ PUBLIC void csoundDestroyMutex(void *mutex_)
 
 #else
 
+static CS_NOINLINE void notImplementedWarning_(const char *name)
+{
+    fprintf(stderr, Str("%s() is not implemented on this platform.\n"), name);
+}
+
 PUBLIC void *csoundCreateThread(uintptr_t (*threadRoutine)(void *),
                                 void *userdata)
 {
diff --git a/all_string_files b/all_string_files
index aae4bcd..09122b3 100644
--- a/all_string_files
+++ b/all_string_files
@@ -328,6 +328,7 @@
 ./Opcodes/bowed.h
 ./Opcodes/brass.h
 ./Opcodes/butter.c
+./Opcodes/cellular.c
 ./Opcodes/chua/ChuaOscillator.cpp
 ./Opcodes/clarinet.h
 ./Opcodes/clfilt.c
@@ -336,55 +337,10 @@
 ./Opcodes/control.c
 ./Opcodes/control.h
 ./Opcodes/cpumeter.c
-./Opcodes/cpupercent.c
 ./Opcodes/cross2.c
 ./Opcodes/crossfm.c
 ./Opcodes/crossfm.h
-./Opcodes/dam.c
-./Opcodes/dam.h
-./Opcodes/date.c
-./Opcodes/dcblockr.c
-./Opcodes/dcblockr.h
-./Opcodes/doppler.cpp
-./Opcodes/dsputil.c
-./Opcodes/dsputil.h
-./Opcodes/dssi4cs/src/dssi4cs.c
-./Opcodes/dssi4cs/src/dssi4cs.h
-./Opcodes/dssi4cs/src/dssi.h
-./Opcodes/dssi4cs/src/ladspa.h
-./Opcodes/dssi4cs/src/load.c
-./Opcodes/dssi4cs/src/seq_event.h
-./Opcodes/dssi4cs/src/utils.h
-./Opcodes/eqfil.c
-./Opcodes/fareygen.c
-./Opcodes/fareyseq.c
-./Opcodes/fhtfun.h
-./Opcodes/filter.c
-./Opcodes/filter.h
-./Opcodes/flanger.c
-./Opcodes/flanger.h
-./Opcodes/fluidOpcodes/fluidOpcodes.c
-./Opcodes/fluidOpcodes/fluidOpcodes.cpp
-./Opcodes/fluidOpcodes/fluidOpcodes.h
-./Opcodes/flute.h
-./Opcodes/fm4op.c
-./Opcodes/fm4op.h
-./Opcodes/follow.c
-./Opcodes/follow.h
-./Opcodes/fout.c
-./Opcodes/fout.h
-./Opcodes/freeverb.c
-./Opcodes/ftconv.c
-./Opcodes/ftest.c
-./Opcodes/ftgen.c
-./Opcodes/gab/gab.c
-./Opcodes/gab/gab.h
-./Opcodes/gab/hvs.c
-./Opcodes/gab/newgabopc.c
-./Opcodes/gab/radiobaton.c
-./Opcodes/gab/sliderTable.c
-./Opcodes/gab/tabmorph.c
-./Opcodes/gab/vectorial.c
+./Opcodes/gendy.c
 ./Opcodes/gab/vectorial.h
 ./Opcodes/grain4.c
 ./Opcodes/grain4.h
@@ -426,7 +382,6 @@
 ./Opcodes/moog1.c
 ./Opcodes/moog1.h
 ./Opcodes/mp3in.c
-./Opcodes/mutexops.cpp
 ./Opcodes/newfils.c
 ./Opcodes/newfils.h
 ./Opcodes/nlfilt.c
@@ -452,7 +407,6 @@
 ./Opcodes/pitchtrack.c
 ./Opcodes/pluck.c
 ./Opcodes/pluck.h
-./Opcodes/ppp.c
 ./Opcodes/psynth.c
 ./Opcodes/ptrigtbl.h
 ./Opcodes/pvadd.c
@@ -524,6 +478,8 @@
 ./Opcodes/system_call.c
 ./Opcodes/tabsum.c
 ./Opcodes/tabvars.c
+./Opcodes/tl/fractalnoise.cpp
+./Opcodes/tl/sc_noise.c
 ./Opcodes/ugakbari.c
 ./Opcodes/ugens7.c
 ./Opcodes/ugens8.c
diff --git a/COPYING b/android/COPYING
similarity index 100%
copy from COPYING
copy to android/COPYING
diff --git a/android/CSDPlayer/.classpath b/android/CSDPlayer/.classpath
new file mode 100644
index 0000000..a4763d1
--- /dev/null
+++ b/android/CSDPlayer/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="gen"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+	<classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/android/CSDPlayer/.gitignore b/android/CSDPlayer/.gitignore
new file mode 100644
index 0000000..91e378c
--- /dev/null
+++ b/android/CSDPlayer/.gitignore
@@ -0,0 +1,10 @@
+*DS_Store
+obj
+libs
+bin
+gen
+src/csnd*
+*swp
+jni/csound_orc*
+jni/csound_prelex.c
+jni/java_interface*
diff --git a/android/CSDPlayer/.project b/android/CSDPlayer/.project
new file mode 100644
index 0000000..d0336f8
--- /dev/null
+++ b/android/CSDPlayer/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>CsoundApp</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/android/CSDPlayer/AndroidManifest.xml b/android/CSDPlayer/AndroidManifest.xml
new file mode 100644
index 0000000..cc4a49b
--- /dev/null
+++ b/android/CSDPlayer/AndroidManifest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.csounds.CsoundApp"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk android:minSdkVersion="9" />
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
+
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name" >
+        <activity
+            android:label="@string/app_name"
+            android:name=".CsoundAppActivity" >
+            <intent-filter >
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/COPYING b/android/CSDPlayer/COPYING
similarity index 100%
copy from COPYING
copy to android/CSDPlayer/COPYING
diff --git a/android/CSDPlayer/proguard.cfg b/android/CSDPlayer/proguard.cfg
new file mode 100644
index 0000000..b1cdf17
--- /dev/null
+++ b/android/CSDPlayer/proguard.cfg
@@ -0,0 +1,40 @@
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontpreverify
+-verbose
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class com.android.vending.licensing.ILicensingService
+
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclassmembers class * extends android.app.Activity {
+   public void *(android.view.View);
+}
+
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+
+-keep class * implements android.os.Parcelable {
+  public static final android.os.Parcelable$Creator *;
+}
diff --git a/android/CSDPlayer/project.properties b/android/CSDPlayer/project.properties
new file mode 100644
index 0000000..72d5245
--- /dev/null
+++ b/android/CSDPlayer/project.properties
@@ -0,0 +1,12 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-9
+android.library.reference.1=../CsoundAndroid
diff --git a/android/CSDPlayer/res/drawable-hdpi/directory_icon.png b/android/CSDPlayer/res/drawable-hdpi/directory_icon.png
new file mode 100755
index 0000000..b32dc34
Binary files /dev/null and b/android/CSDPlayer/res/drawable-hdpi/directory_icon.png differ
diff --git a/android/CSDPlayer/res/drawable-hdpi/directory_up.png b/android/CSDPlayer/res/drawable-hdpi/directory_up.png
new file mode 100755
index 0000000..29f2710
Binary files /dev/null and b/android/CSDPlayer/res/drawable-hdpi/directory_up.png differ
diff --git a/android/CSDPlayer/res/drawable-hdpi/file_icon.png b/android/CSDPlayer/res/drawable-hdpi/file_icon.png
new file mode 100755
index 0000000..912399b
Binary files /dev/null and b/android/CSDPlayer/res/drawable-hdpi/file_icon.png differ
diff --git a/android/CSDPlayer/res/drawable-hdpi/ic_launcher.png b/android/CSDPlayer/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..8074c4c
Binary files /dev/null and b/android/CSDPlayer/res/drawable-hdpi/ic_launcher.png differ
diff --git a/android/CSDPlayer/res/drawable-hdpi/icon.png b/android/CSDPlayer/res/drawable-hdpi/icon.png
new file mode 100755
index 0000000..8074c4c
Binary files /dev/null and b/android/CSDPlayer/res/drawable-hdpi/icon.png differ
diff --git a/android/CSDPlayer/res/drawable-ldpi/ic_launcher.png b/android/CSDPlayer/res/drawable-ldpi/ic_launcher.png
new file mode 100644
index 0000000..1095584
Binary files /dev/null and b/android/CSDPlayer/res/drawable-ldpi/ic_launcher.png differ
diff --git a/android/CSDPlayer/res/drawable-ldpi/icon.png b/android/CSDPlayer/res/drawable-ldpi/icon.png
new file mode 100755
index 0000000..1095584
Binary files /dev/null and b/android/CSDPlayer/res/drawable-ldpi/icon.png differ
diff --git a/android/CSDPlayer/res/drawable-mdpi/ic_launcher.png b/android/CSDPlayer/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..a07c69f
Binary files /dev/null and b/android/CSDPlayer/res/drawable-mdpi/ic_launcher.png differ
diff --git a/android/CSDPlayer/res/drawable-mdpi/icon.png b/android/CSDPlayer/res/drawable-mdpi/icon.png
new file mode 100755
index 0000000..a07c69f
Binary files /dev/null and b/android/CSDPlayer/res/drawable-mdpi/icon.png differ
diff --git a/android/CSDPlayer/res/layout/main.xml b/android/CSDPlayer/res/layout/main.xml
new file mode 100644
index 0000000..0ca5f2c
--- /dev/null
+++ b/android/CSDPlayer/res/layout/main.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical" >
+
+    <LinearLayout
+        android:id="@+id/linearLayout1"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical" >
+
+        <Button
+            android:id="@+id/browseButton"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="Browse" />
+
+        <ToggleButton
+            android:id="@+id/onOffButton"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="ToggleButton" />
+
+        <SeekBar
+            android:id="@+id/seekBar1"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <TextView
+            android:id="@+id/textView1"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="slider1"
+            android:textAppearance="?android:attr/textAppearanceSmall" />
+
+        <SeekBar
+            android:id="@+id/seekBar2"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <TextView
+            android:id="@+id/textView2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="slider2"
+            android:textAppearance="?android:attr/textAppearanceSmall" />
+
+        <SeekBar
+            android:id="@+id/seekBar3"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <TextView
+            android:id="@+id/textView3"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="slider3"
+            android:textAppearance="?android:attr/textAppearanceSmall" />
+
+        <SeekBar
+            android:id="@+id/seekBar4"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <TextView
+            android:id="@+id/textView4"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="slider4"
+            android:textAppearance="?android:attr/textAppearanceSmall" />
+
+        <SeekBar
+            android:id="@+id/seekBar5"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+        <TextView
+            android:id="@+id/textView5"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="slider5"
+            android:textAppearance="?android:attr/textAppearanceSmall" />
+
+        <TextView
+            android:id="@+id/textView6"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="---------------------------------------"
+            android:textAppearance="?android:attr/textAppearanceSmall" />
+
+<LinearLayout
+    android:id="@+id/LinearLayout02"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:layout_alignParentBottom="true" >
+
+    <Button
+        android:id="@+id/button1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.52"
+        android:text="butt1" />
+
+    <Button
+        android:id="@+id/button2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.60"
+        android:text="butt2" />
+
+    <Button
+        android:id="@+id/button3"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.79"
+        android:text="butt3" />
+
+    <Button
+        android:id="@+id/button4"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.70"
+        android:text="butt4" />
+
+    <Button
+        android:id="@+id/button5"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.34"
+        android:text="butt5" />
+</LinearLayout>
+
+    </LinearLayout>
+
+    <Button
+        android:id="@+id/pad"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:text="trackpad" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/android/CSDPlayer/res/values/strings.xml b/android/CSDPlayer/res/values/strings.xml
new file mode 100644
index 0000000..e15c162
--- /dev/null
+++ b/android/CSDPlayer/res/values/strings.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="hello">Hello World, CsoundAppActivity!</string>
+    <string name="app_name">CSD Player</string>
+
+</resources>
\ No newline at end of file
diff --git a/android/CSDPlayer/src/com/csounds/CsoundApp/CsoundAppActivity.java b/android/CSDPlayer/src/com/csounds/CsoundApp/CsoundAppActivity.java
new file mode 100644
index 0000000..3ba29d2
--- /dev/null
+++ b/android/CSDPlayer/src/com/csounds/CsoundApp/CsoundAppActivity.java
@@ -0,0 +1,260 @@
+package com.csounds.CsoundApp;
+
+import java.io.File;
+import java.util.ArrayList;
+import com.csounds.CsoundApp.R;
+
+import java.io.FilenameFilter;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.AlertDialog.Builder;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.os.Environment;
+import android.os.Handler;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.CompoundButton;
+import android.widget.ListAdapter;
+import android.widget.SeekBar;
+import android.widget.TextView;
+import android.widget.ToggleButton;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+
+import com.csounds.CsoundObj;
+import com.csounds.CsoundObjCompletionListener;
+
+public class CsoundAppActivity extends Activity  implements CsoundObjCompletionListener {
+	Button browseButton;
+	ToggleButton startStopButton = null;
+	CsoundObj csound = null;
+	File csd = null;
+	Button pad;
+	ArrayList<SeekBar> sliders = new ArrayList<SeekBar>();
+	ArrayList<Button> buttons = new ArrayList<Button>();
+	ArrayList<String> str = new ArrayList<String>();
+	private Boolean firstLvl = true;
+	private Item[] fileList;
+	private File path = new File(Environment.getExternalStorageDirectory() + "");
+	private String chosenFile;
+	private static final int BROWSE_DIALOG = 0xFFFFFFFF;
+	private static final int ERROR_DIALOG = 0xFFFFFFF0;
+	ListAdapter adapter;
+	protected Handler handler = new Handler();
+	boolean running = false;
+	String errorMessage;
+
+	@Override
+	public void csoundObjComplete(CsoundObj csoundObj) {
+		handler.post(new Runnable() {
+			public void run() {
+				startStopButton.setChecked(false);
+				if(csound.getError() != 0) displayError(csound.getError());
+				running = false;
+			}
+		});
+	}
+
+   private void displayError(int error){
+	   errorMessage = "Csound Compilation Error " + error;
+	   showDialog(ERROR_DIALOG);    
+   }
+
+	private void OnFileChosen(File file){
+		Log.d("FILE CHOSEN", file.getAbsolutePath());
+		csd = file;		
+	}
+
+	@Override
+	protected void onDestroy() {
+		// TODO Auto-generated method stub
+		super.onDestroy();
+		try {
+			csound.stopCsound();
+		} catch (Exception e){
+			Log.e("error", "could not stop csound");
+		}
+
+	}
+
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.main);
+		browseButton = (Button) findViewById(R.id.browseButton);
+		browseButton.setOnClickListener(new OnClickListener(){ 
+			@Override
+			public void onClick(View v){
+				if(!running) {
+					loadFileList();
+					showDialog(BROWSE_DIALOG); 
+				}
+			}
+		});
+		
+		sliders.add((SeekBar)findViewById(R.id.seekBar1));
+		sliders.add((SeekBar)findViewById(R.id.seekBar2));
+		sliders.add((SeekBar)findViewById(R.id.seekBar3));
+		sliders.add((SeekBar)findViewById(R.id.seekBar4));
+		sliders.add((SeekBar)findViewById(R.id.seekBar5));
+
+		buttons.add((Button)findViewById(R.id.button1));
+		buttons.add((Button)findViewById(R.id.button2));
+		buttons.add((Button)findViewById(R.id.button3));
+		buttons.add((Button)findViewById(R.id.button4));
+		buttons.add((Button)findViewById(R.id.button5));
+		
+		pad = (Button)findViewById(R.id.pad);
+
+		startStopButton = (ToggleButton) findViewById(R.id.onOffButton);
+		startStopButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+			@Override
+			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+				if (csd == null) {
+					buttonView.toggle();
+					return;
+				}
+				Log.d("CSD", csd.getAbsolutePath());		
+				if(isChecked) {
+					csound = new CsoundObj();
+					String channelName;
+					for(int i = 0; i < 5; i++){
+						channelName = "slider" + (i+1);
+						csound.addSlider(sliders.get(i),channelName, 0., 1.);
+						channelName = "butt" + (i+1);
+						csound.addButton(buttons.get(i),channelName, 1);
+					}
+					csound.addButton(pad,"trackpad", 1);
+					csound.enableAccelerometer(CsoundAppActivity.this);
+					csound.addCompletionListener(CsoundAppActivity.this);
+					csound.startCsound(csd);
+			
+				} else {
+					csound.stopCsound();
+					running = false;
+				}
+			}
+		});
+	}
+	private void loadFileList() {
+		try {
+			path.mkdirs();
+		} catch (SecurityException e) {
+			Log.e("error", "unable to write on the sd card ");
+		}
+
+		if (path.exists()) {
+			FilenameFilter filter = new FilenameFilter() {
+				@Override
+				public boolean accept(File dir, String filename) {
+					File sel = new File(dir, filename);
+					return (sel.isFile() || sel.isDirectory())
+							&& !sel.isHidden();
+				}
+			};
+
+			String[] fList = path.list(filter);
+			fileList = new Item[fList.length];
+			for (int i = 0; i < fList.length; i++) {
+				fileList[i] = new Item(fList[i], R.drawable.file_icon);
+				File sel = new File(path, fList[i]);
+				if (sel.isDirectory()) {
+					fileList[i].icon = R.drawable.directory_icon;
+				} 
+			}
+			if (!firstLvl) {
+				Item temp[] = new Item[fileList.length + 1];
+				for (int i = 0; i < fileList.length; i++) {
+					temp[i + 1] = fileList[i];
+				}
+				temp[0] = new Item("Up", R.drawable.directory_up);
+				fileList = temp;
+			}
+		} 
+		adapter = new ArrayAdapter<Item>(this,
+				android.R.layout.select_dialog_item, android.R.id.text1,
+				fileList) {
+			@Override
+			public View getView(int position, View convertView, ViewGroup parent) {
+				View view = super.getView(position, convertView, parent);
+				TextView textView = (TextView) view
+						.findViewById(android.R.id.text1);
+				textView.setCompoundDrawablesWithIntrinsicBounds(
+						fileList[position].icon, 0, 0, 0);
+				int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f);
+				textView.setCompoundDrawablePadding(dp5);
+				return view;
+			}
+		};
+	}
+
+	private class Item {
+		public String file;
+		public int icon;
+		public Item(String file, Integer icon) {
+			this.file = file;
+			this.icon = icon;
+		}
+
+		@Override
+		public String toString() {
+			return file;
+		}
+	}
+
+	@Override
+	protected Dialog onCreateDialog(int id) {
+		Dialog dialog = null;
+		AlertDialog.Builder builder = new Builder(this);
+		if (fileList == null) {
+			dialog = builder.create();
+			return dialog;
+		}
+
+		switch (id) {
+		case BROWSE_DIALOG:
+			builder.setTitle("Choose your file");
+			builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
+				@Override
+				public void onClick(DialogInterface dialog, int which) {
+					chosenFile = fileList[which].file;
+					File sel = new File(path + "/" + chosenFile);
+					if (sel.isDirectory()) {
+						firstLvl = false;
+						str.add(chosenFile);
+						fileList = null;
+						path = new File(sel + "");
+						loadFileList();
+						removeDialog(BROWSE_DIALOG);
+						showDialog(BROWSE_DIALOG);
+					}
+					else if (chosenFile.equalsIgnoreCase("up") && !sel.exists()) {
+						String s = str.remove(str.size() - 1);
+						path = new File(path.toString().substring(0,
+								path.toString().lastIndexOf(s)));
+						fileList = null;
+						if (str.isEmpty()) {
+							firstLvl = true;
+						}
+						loadFileList();
+						removeDialog(BROWSE_DIALOG);
+						showDialog(BROWSE_DIALOG);
+					}
+					else OnFileChosen(sel);
+				}
+			});
+			break;
+		  case  ERROR_DIALOG:
+			  builder.setTitle(errorMessage);
+			  break;
+		}
+		dialog = builder.show();
+		return dialog;
+	}
+}
\ No newline at end of file
diff --git a/android/CsoundAndroid/.classpath b/android/CsoundAndroid/.classpath
new file mode 100644
index 0000000..a4763d1
--- /dev/null
+++ b/android/CsoundAndroid/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="gen"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+	<classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/android/CsoundAndroid/.gitignore b/android/CsoundAndroid/.gitignore
new file mode 100644
index 0000000..91e378c
--- /dev/null
+++ b/android/CsoundAndroid/.gitignore
@@ -0,0 +1,10 @@
+*DS_Store
+obj
+libs
+bin
+gen
+src/csnd*
+*swp
+jni/csound_orc*
+jni/csound_prelex.c
+jni/java_interface*
diff --git a/android/CsoundAndroid/.project b/android/CsoundAndroid/.project
new file mode 100644
index 0000000..369db1e
--- /dev/null
+++ b/android/CsoundAndroid/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>CsoundAndroid</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/android/CsoundAndroid/AndroidManifest.xml b/android/CsoundAndroid/AndroidManifest.xml
new file mode 100644
index 0000000..9f0d80f
--- /dev/null
+++ b/android/CsoundAndroid/AndroidManifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.csounds"
+    android:versionCode="1"
+    android:versionName="1.0" 
+    android:installLocation="auto">
+
+    <uses-sdk android:minSdkVersion="9" />
+
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+        
+ <!-- MODIFY_AUDIO_SETTINGS is needed to use audio effects such as environmental reverb -->
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></uses-permission>
+	<uses-permission android:name="android.permission.RECORD_AUDIO" />
+</manifest>
\ No newline at end of file
diff --git a/COPYING b/android/CsoundAndroid/COPYING
similarity index 100%
copy from COPYING
copy to android/CsoundAndroid/COPYING
diff --git a/android/CsoundAndroid/android_interface.i b/android/CsoundAndroid/android_interface.i
new file mode 100644
index 0000000..fc7d2ed
--- /dev/null
+++ b/android/CsoundAndroid/android_interface.i
@@ -0,0 +1,73 @@
+/*
+* C S O U N D
+*
+* External language interfaces for the "C" Csound API.
+*
+* L I C E N S E
+*
+* This software is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2.1 of the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+%module(directors="1") csnd
+
+%feature("director") CsoundCallbackWrapper;
+%feature("nodirector") Csound;
+%include "typemaps.i"
+%include "std_string.i"
+%include "std_vector.i"
+%feature("autodoc", "1");
+%{
+    #include "csound.h"
+    #include "cfgvar.h"
+    #include "csound.hpp"
+   #include "AndroidCsound.hpp"
+    #include "cs_glue.hpp"
+    #include "csPerfThread.hpp"
+    #include "CsoundFile.hpp"
+    #include "CppSound.hpp"
+    #include "Soundfile.hpp" 
+%}
+
+%apply int { size_t };
+typedef unsigned int uint32_t;
+
+/* %typemap(freearg) char ** {
+  free((char *) $1);
+} */
+
+// Enable the JNI class to load the required native library.
+%pragma(java) jniclasscode=%{
+  static {
+    try {
+        java.lang.System.loadLibrary("csoundandroid");
+    } catch (UnsatisfiedLinkError e) {
+        java.lang.System.err.println("csoundandroid native code library failed to load.\n" + e);
+        java.lang.System.exit(1);
+    }
+  }
+%}
+
+%include "exclusions.i"
+
+%include "csound.h"
+%include "cfgvar.h"
+%include "csound.hpp"
+%include "AndroidCsound.hpp"
+%include "cs_glue.hpp"
+%include "csPerfThread.hpp"
+%include "CsoundFile.hpp"
+%include "CppSound.hpp"
+%include "Soundfile.hpp"
+
diff --git a/android/CsoundAndroid/build.sh b/android/CsoundAndroid/build.sh
new file mode 100755
index 0000000..49b7bd9
--- /dev/null
+++ b/android/CsoundAndroid/build.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+export ANDROID_NDK_ROOT=$HOME/work/android-ndk-r7
+export NDK_MODULE_PATH=../../../android
+flex -B -t ../../Engine/csound_orc.l > jni/csound_orclex.c 
+flex -B ../../Engine/csound_pre.lex > jni/csound_prelex.c 
+bison -d -pcsound_orc --report=itemset -o jni/csound_orcparse.c ../../Engine/csound_orc.y
+
+rm -rf src/csnd
+mkdir -p src/csnd
+
+swig -java -package csnd -D__BUILDING_LIBCSOUND -DENABLE_NEW_PARSER -DPARCS -DHAVE_DIRENT_H -DHAVE_FCNTL_H -DHAVE_UNISTD_H -DHAVE_STDINT_H -DHAVE_SYS_TIME_H -DHAVE_SYS_TYPES_H -DHAVE_TERMIOS_H -includeall -verbose -outdir src/csnd -c++ -I/usr/local/include -I../../H -I../../Engine -I../.. -I../../interfaces -I/System/Library/Frameworks/Python.framework/Headers -I/System/Library/Frameworks/JavaVM.framework/Headers -I./jni -o jni/java_interfaceJAVA_wrap.cpp android_interface.i
+
+# ADJUST SWIG CODE FOR ANDROID and DIRECTORS
+sed -i "" 's/AttachCurrentThread((void \*\*)/AttachCurrentThread(/' jni/java_interfaceJAVA_wrap.cpp 
+
+$ANDROID_NDK_ROOT/ndk-build TARGET_PLATFORM=android-9
+
+
+
diff --git a/android/CsoundAndroid/jni/Android.mk b/android/CsoundAndroid/jni/Android.mk
new file mode 100644
index 0000000..0fd820a
--- /dev/null
+++ b/android/CsoundAndroid/jni/Android.mk
@@ -0,0 +1,242 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+CSOUND_SRC_ROOT := ../../..
+LIBSNDFILE_SRC_DIR := $(LOCAL_PATH)/../../../../android/libsndfile-android/jni/
+
+LOCAL_MODULE   := csoundandroid
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../H $(LOCAL_PATH)/../../../ $(LIBSNDFILE_SRC_DIR) $(LOCAL_PATH)/../../../Engine $(LOCAL_PATH)/../../../interfaces
+LOCAL_CFLAGS := -O3 -D__BUILDING_LIBCSOUND -DENABLE_NEW_PARSER -DLINUX -DHAVE_DIRENT_H -DHAVE_FCNTL_H -DHAVE_UNISTD_H -DHAVE_STDINT_H -DHAVE_SYS_TIME_H -DHAVE_SYS_TYPES_H -DHAVE_TERMIOS_H 
+LOCAL_CPPFLAGS :=$(LOCAL_CFLAGS)
+###
+
+LOCAL_SRC_FILES := $(CSOUND_SRC_ROOT)/Engine/auxfd.c \
+$(CSOUND_SRC_ROOT)/Engine/cfgvar.c \
+$(CSOUND_SRC_ROOT)/Engine/corfiles.c \
+$(CSOUND_SRC_ROOT)/Engine/entry1.c \
+$(CSOUND_SRC_ROOT)/Engine/envvar.c \
+$(CSOUND_SRC_ROOT)/Engine/express.c \
+$(CSOUND_SRC_ROOT)/Engine/extract.c \
+$(CSOUND_SRC_ROOT)/Engine/fgens.c \
+$(CSOUND_SRC_ROOT)/Engine/insert.c \
+$(CSOUND_SRC_ROOT)/Engine/linevent.c \
+$(CSOUND_SRC_ROOT)/Engine/memalloc.c \
+$(CSOUND_SRC_ROOT)/Engine/memfiles.c \
+$(CSOUND_SRC_ROOT)/Engine/musmon.c \
+$(CSOUND_SRC_ROOT)/Engine/namedins.c \
+$(CSOUND_SRC_ROOT)/Engine/otran.c \
+$(CSOUND_SRC_ROOT)/Engine/rdorch.c \
+$(CSOUND_SRC_ROOT)/Engine/rdscor.c \
+$(CSOUND_SRC_ROOT)/Engine/scsort.c \
+$(CSOUND_SRC_ROOT)/Engine/scxtract.c \
+$(CSOUND_SRC_ROOT)/Engine/sort.c \
+$(CSOUND_SRC_ROOT)/Engine/sread.c \
+$(CSOUND_SRC_ROOT)/Engine/swrite.c \
+$(CSOUND_SRC_ROOT)/Engine/swritestr.c \
+$(CSOUND_SRC_ROOT)/Engine/twarp.c \
+$(CSOUND_SRC_ROOT)/InOut/libsnd.c \
+$(CSOUND_SRC_ROOT)/InOut/libsnd_u.c \
+$(CSOUND_SRC_ROOT)/InOut/midifile.c \
+$(CSOUND_SRC_ROOT)/InOut/midirecv.c \
+$(CSOUND_SRC_ROOT)/InOut/midisend.c \
+$(CSOUND_SRC_ROOT)/InOut/winascii.c \
+$(CSOUND_SRC_ROOT)/InOut/windin.c \
+$(CSOUND_SRC_ROOT)/InOut/window.c \
+$(CSOUND_SRC_ROOT)/InOut/winEPS.c \
+$(CSOUND_SRC_ROOT)/OOps/aops.c \
+$(CSOUND_SRC_ROOT)/OOps/bus.c \
+$(CSOUND_SRC_ROOT)/OOps/cmath.c \
+$(CSOUND_SRC_ROOT)/OOps/diskin.c \
+$(CSOUND_SRC_ROOT)/OOps/diskin2.c \
+$(CSOUND_SRC_ROOT)/OOps/disprep.c \
+$(CSOUND_SRC_ROOT)/OOps/dumpf.c \
+$(CSOUND_SRC_ROOT)/OOps/fftlib.c \
+$(CSOUND_SRC_ROOT)/OOps/goto_ops.c \
+$(CSOUND_SRC_ROOT)/OOps/midiinterop.c \
+$(CSOUND_SRC_ROOT)/OOps/midiops.c \
+$(CSOUND_SRC_ROOT)/OOps/midiout.c \
+$(CSOUND_SRC_ROOT)/OOps/mxfft.c \
+$(CSOUND_SRC_ROOT)/OOps/oscils.c \
+$(CSOUND_SRC_ROOT)/OOps/pstream.c \
+$(CSOUND_SRC_ROOT)/OOps/pvfileio.c \
+$(CSOUND_SRC_ROOT)/OOps/pvsanal.c \
+$(CSOUND_SRC_ROOT)/OOps/random.c \
+$(CSOUND_SRC_ROOT)/OOps/remote.c \
+$(CSOUND_SRC_ROOT)/OOps/schedule.c \
+$(CSOUND_SRC_ROOT)/OOps/sndinfUG.c \
+$(CSOUND_SRC_ROOT)/OOps/str_ops.c \
+$(CSOUND_SRC_ROOT)/OOps/ugens1.c \
+$(CSOUND_SRC_ROOT)/OOps/ugens2.c \
+$(CSOUND_SRC_ROOT)/OOps/ugens2a.c \
+$(CSOUND_SRC_ROOT)/OOps/ugens3.c \
+$(CSOUND_SRC_ROOT)/OOps/ugens4.c \
+$(CSOUND_SRC_ROOT)/OOps/ugens5.c \
+$(CSOUND_SRC_ROOT)/OOps/ugens6.c \
+$(CSOUND_SRC_ROOT)/OOps/ugrw1.c \
+$(CSOUND_SRC_ROOT)/OOps/ugrw2.c \
+$(CSOUND_SRC_ROOT)/OOps/vdelay.c \
+$(CSOUND_SRC_ROOT)/Opcodes/babo.c \
+$(CSOUND_SRC_ROOT)/Opcodes/bilbar.c \
+$(CSOUND_SRC_ROOT)/Opcodes/compress.c \
+$(CSOUND_SRC_ROOT)/Opcodes/eqfil.c \
+$(CSOUND_SRC_ROOT)/Opcodes/Vosim.c \
+$(CSOUND_SRC_ROOT)/Opcodes/pitch.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pitch0.c   \
+$(CSOUND_SRC_ROOT)/Opcodes/spectra.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/ambicode1.c \
+$(CSOUND_SRC_ROOT)/Opcodes/sfont.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/grain4.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/hrtferX.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/loscilx.c \
+$(CSOUND_SRC_ROOT)/Opcodes/minmax.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pan2.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/tabvars.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/phisem.c \
+$(CSOUND_SRC_ROOT)/Opcodes/hrtfopcodes.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/stackops.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/vbap.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/vbap_eight.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/vbap_four.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/vbap_sixteen.c \
+$(CSOUND_SRC_ROOT)/Opcodes/vbap_zak.c   \
+$(CSOUND_SRC_ROOT)/Opcodes/vaops.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/ugakbari.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/harmon.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pitchtrack.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/partikkel.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/shape.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/tabsum.c \
+$(CSOUND_SRC_ROOT)/Opcodes/crossfm.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pvlock.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/fareyseq.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/modmatrix.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/scoreline.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/modal4.c \
+$(CSOUND_SRC_ROOT)/Opcodes/physutil.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/physmod.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/mandolin.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/singwave.c \
+$(CSOUND_SRC_ROOT)/Opcodes/fm4op.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/moog1.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/shaker.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/bowedbar.c \
+$(CSOUND_SRC_ROOT)/Opcodes/gab/tabmorph.c \
+$(CSOUND_SRC_ROOT)/Opcodes/gab/hvs.c \
+$(CSOUND_SRC_ROOT)/Opcodes/gab/sliderTable.c \
+$(CSOUND_SRC_ROOT)/Opcodes/gab/newgabopc.c \
+$(CSOUND_SRC_ROOT)/Opcodes/ftest.c \
+$(CSOUND_SRC_ROOT)/Top/argdecode.c \
+$(CSOUND_SRC_ROOT)/Opcodes/hrtfearly.c \
+$(CSOUND_SRC_ROOT)/Opcodes/hrtfreverb.c \
+$(CSOUND_SRC_ROOT)/Opcodes/cpumeter.c \
+$(CSOUND_SRC_ROOT)/Opcodes/gendy.c \
+$(CSOUND_SRC_ROOT)/Opcodes/tl/sc_noise.c \
+$(CSOUND_SRC_ROOT)/Top/cscore_internal.c \
+$(CSOUND_SRC_ROOT)/Top/cscorfns.c \
+$(CSOUND_SRC_ROOT)/Top/csmodule.c \
+$(CSOUND_SRC_ROOT)/Top/csound.c \
+$(CSOUND_SRC_ROOT)/Top/getstring.c \
+$(CSOUND_SRC_ROOT)/Top/main.c \
+$(CSOUND_SRC_ROOT)/Top/new_opts.c \
+$(CSOUND_SRC_ROOT)/Top/one_file.c \
+$(CSOUND_SRC_ROOT)/Top/opcode.c \
+$(CSOUND_SRC_ROOT)/Top/threads.c \
+$(CSOUND_SRC_ROOT)/Top/utility.c \
+$(CSOUND_SRC_ROOT)/Opcodes/ambicode.c       \
+$(CSOUND_SRC_ROOT)/Opcodes/bbcut.c          \
+$(CSOUND_SRC_ROOT)/Opcodes/biquad.c \
+$(CSOUND_SRC_ROOT)/Opcodes/butter.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/clfilt.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/cross2.c \
+$(CSOUND_SRC_ROOT)/Opcodes/dam.c            \
+$(CSOUND_SRC_ROOT)/Opcodes/dcblockr.c       \
+$(CSOUND_SRC_ROOT)/Opcodes/filter.c \
+$(CSOUND_SRC_ROOT)/Opcodes/flanger.c        \
+$(CSOUND_SRC_ROOT)/Opcodes/follow.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/fout.c \
+$(CSOUND_SRC_ROOT)/Opcodes/freeverb.c       \
+$(CSOUND_SRC_ROOT)/Opcodes/ftconv.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/ftgen.c \
+$(CSOUND_SRC_ROOT)/Opcodes/gab/gab.c        \
+$(CSOUND_SRC_ROOT)/Opcodes/gab/vectorial.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/grain.c \
+$(CSOUND_SRC_ROOT)/Opcodes/locsig.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/lowpassr.c       \
+$(CSOUND_SRC_ROOT)/Opcodes/metro.c \
+$(CSOUND_SRC_ROOT)/Opcodes/midiops2.c       \
+$(CSOUND_SRC_ROOT)/Opcodes/midiops3.c       \
+$(CSOUND_SRC_ROOT)/Opcodes/newfils.c \
+$(CSOUND_SRC_ROOT)/Opcodes/nlfilt.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/oscbnk.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/pluck.c \
+$(CSOUND_SRC_ROOT)/Opcodes/repluck.c        \
+$(CSOUND_SRC_ROOT)/Opcodes/reverbsc.c       \
+$(CSOUND_SRC_ROOT)/Opcodes/seqtime.c \
+$(CSOUND_SRC_ROOT)/Opcodes/sndloop.c        \
+$(CSOUND_SRC_ROOT)/Opcodes/sndwarp.c        \
+$(CSOUND_SRC_ROOT)/Opcodes/space.c \
+$(CSOUND_SRC_ROOT)/Opcodes/spat3d.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/syncgrain.c      \
+$(CSOUND_SRC_ROOT)/Opcodes/ugens7.c \
+$(CSOUND_SRC_ROOT)/Opcodes/ugens9.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/ugensa.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/uggab.c \
+$(CSOUND_SRC_ROOT)/Opcodes/ugmoss.c         \
+$(CSOUND_SRC_ROOT)/Opcodes/ugnorman.c       \
+$(CSOUND_SRC_ROOT)/Opcodes/ugsc.c \
+$(CSOUND_SRC_ROOT)/Opcodes/wave-terrain.c   \
+$(CSOUND_SRC_ROOT)/Opcodes/stdopcod.c \
+$(CSOUND_SRC_ROOT)/Opcodes/ifd.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/partials.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/psynth.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pvsbasic.c \
+$(CSOUND_SRC_ROOT)/Opcodes/pvscent.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pvsdemix.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pvs_ops.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pvsband.c \
+$(CSOUND_SRC_ROOT)/Opcodes/pvsbuffer.c \
+$(CSOUND_SRC_ROOT)/Opcodes/dsputil.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pvadd.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pvinterp.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pvocext.c \
+$(CSOUND_SRC_ROOT)/Opcodes/pvread.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/ugens8.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/vpvoc.c  \
+$(CSOUND_SRC_ROOT)/Opcodes/pvoc.c \
+$(CSOUND_SRC_ROOT)/Engine/csound_orc_semantics.c \
+$(CSOUND_SRC_ROOT)/Engine/csound_orc_expressions.c \
+$(CSOUND_SRC_ROOT)/Engine/csound_orc_optimize.c \
+$(CSOUND_SRC_ROOT)/Engine/csound_orc_compile.c \
+$(CSOUND_SRC_ROOT)/Engine/new_orc_parser.c \
+$(CSOUND_SRC_ROOT)/Engine/symbtab.c \
+$(CSOUND_SRC_ROOT)/Opcodes/mp3in.c \
+$(CSOUND_SRC_ROOT)/InOut/libmpadec/layer1.c \
+$(CSOUND_SRC_ROOT)/InOut/libmpadec/layer2.c \
+$(CSOUND_SRC_ROOT)/InOut/libmpadec/layer3.c \
+$(CSOUND_SRC_ROOT)/InOut/libmpadec/synth.c \
+$(CSOUND_SRC_ROOT)/InOut/libmpadec/tables.c \
+$(CSOUND_SRC_ROOT)/InOut/libmpadec/mpadec.c \
+$(CSOUND_SRC_ROOT)/InOut/libmpadec/mp3dec.c \
+csound_orclex.c \
+csound_prelex.c \
+csound_orcparse.c \
+rtopensl.c \
+AndroidCsound.cpp \
+$(CSOUND_SRC_ROOT)/interfaces/CppSound.cpp \
+$(CSOUND_SRC_ROOT)/interfaces/CsoundFile.cpp \
+$(CSOUND_SRC_ROOT)/interfaces/Soundfile.cpp \
+$(CSOUND_SRC_ROOT)/interfaces/csPerfThread.cpp \
+$(CSOUND_SRC_ROOT)/interfaces/cs_glue.cpp \
+$(CSOUND_SRC_ROOT)/interfaces/filebuilding.cpp \
+java_interfaceJAVA_wrap.cpp
+#CsoundObj.cpp
+
+LOCAL_LDLIBS := -llog -lOpenSLES
+
+LOCAL_STATIC_LIBRARIES := sndfile
+
+
+include $(BUILD_SHARED_LIBRARY)
+
+$(call import-module,libsndfile-android/jni)
diff --git a/android/CsoundAndroid/jni/AndroidCsound.cpp b/android/CsoundAndroid/jni/AndroidCsound.cpp
new file mode 100644
index 0000000..ecd3004
--- /dev/null
+++ b/android/CsoundAndroid/jni/AndroidCsound.cpp
@@ -0,0 +1,42 @@
+#include "AndroidCsound.hpp"
+#include <android/log.h>
+extern "C" {
+extern void androidrtclose_(CSOUND *csound);
+extern void androidrtplay_(CSOUND *csound, const MYFLT *buffer, int nbytes);
+extern int androidrtrecord_(CSOUND *csound, MYFLT *buffer, int nbytes);
+extern int androidrecopen_(CSOUND *csound, const csRtAudioParams *parm);
+extern int androidplayopen_(CSOUND *csound, const csRtAudioParams *parm);
+
+static void androidMessageCallbac(CSOUND*, int attr, const char *format, va_list valist) {
+
+char message[1024];
+
+vsnprintf(message, 1024, format, valist);
+__android_log_print(ANDROID_LOG_INFO,"AndroidCsound",message); 
+  
+}
+
+
+}
+
+int AndroidCsound::PreCompile()
+{
+
+__android_log_print(ANDROID_LOG_INFO,"AndroidCsound","PreCompile()"); 
+
+     int retVal = Csound::PreCompile(); 
+__android_log_print(ANDROID_LOG_INFO,"AndroidCsound","set callbacks"); 
+      csoundSetPlayopenCallback(csound, androidplayopen_);
+      csoundSetRecopenCallback(csound, androidrecopen_);
+      csoundSetRtplayCallback(csound, androidrtplay_);
+      csoundSetRtrecordCallback(csound, androidrtrecord_);
+      csoundSetRtcloseCallback(csound, androidrtclose_);
+      csoundSetMessageCallback(csound, androidMessageCallbac);
+__android_log_print(ANDROID_LOG_INFO,"AndroidCsound","callbacks set"); 
+
+    return retVal; 
+};
+
+void AndroidCsound::SetGlobalEnv(const char* name, const char* variable) {
+    csoundSetGlobalEnv(name, variable);
+}
diff --git a/android/CsoundAndroid/jni/AndroidCsound.hpp b/android/CsoundAndroid/jni/AndroidCsound.hpp
new file mode 100644
index 0000000..9d092d9
--- /dev/null
+++ b/android/CsoundAndroid/jni/AndroidCsound.hpp
@@ -0,0 +1,11 @@
+#ifdef SWIG
+%module csnd
+#endif
+
+#include "csound.hpp"
+
+class PUBLIC AndroidCsound : public Csound {
+public:
+virtual int PreCompile();
+void SetGlobalEnv(const char* name, const char* variable);
+};
diff --git a/android/CsoundAndroid/jni/Application.mk b/android/CsoundAndroid/jni/Application.mk
new file mode 100644
index 0000000..679fb59
--- /dev/null
+++ b/android/CsoundAndroid/jni/Application.mk
@@ -0,0 +1,5 @@
+APP_STL := gnustl_static
+APP_CPPFLAGS += -fexceptions -frtti
+APP_ABI := armeabi armeabi-v7a 
+
+
diff --git a/android/CsoundAndroid/jni/rtopensl.c b/android/CsoundAndroid/jni/rtopensl.c
new file mode 100644
index 0000000..d57b3da
--- /dev/null
+++ b/android/CsoundAndroid/jni/rtopensl.c
@@ -0,0 +1,578 @@
+
+/* 
+    rtopensl.c
+    OpenSl ES Audio Module for Csound                        
+
+    Copyright (C) 2011 Victor Lazzarini.
+
+    This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+
+*/
+#include <SLES/OpenSLES.h>
+#include "SLES/OpenSLES_Android.h"
+#include "csdl.h"
+#include <android/log.h> 
+
+typedef struct OPEN_SL_PARAMS_ {
+  CSOUND      *csound;
+  // engine interfaces
+  SLObjectItf engineObject;
+  SLEngineItf engineEngine;
+
+// output mix interfaces
+ SLObjectItf outputMixObject;
+
+// buffer queue player interfaces
+ SLObjectItf bqPlayerObject;
+ SLPlayItf bqPlayerPlay;
+ SLAndroidSimpleBufferQueueItf bqPlayerBufferQueue;
+ SLEffectSendItf bqPlayerEffectSend;
+
+// recorder interfaces
+ SLObjectItf recorderObject;
+ SLRecordItf recorderRecord;
+ SLAndroidSimpleBufferQueueItf recorderBufferQueue;
+
+  int currentInputIndex;
+  int currentOutputIndex;
+
+  int currentOutputBuffer;
+  int currentInputBuffer;
+  
+  short *outputBuffer[2];
+  short *inputBuffer[2];
+
+  int outBufSamples;
+  int inBufSamples;
+
+  // locks
+  void *clientLockIn;
+  void *clientLockOut;
+
+  csRtAudioParams outParm;
+  csRtAudioParams inParm;
+
+} open_sl_params;
+
+#define CONV16BIT 32768
+#define CONVMYFLT FL(1./32768.)
+
+// this callback handler is called every time a buffer finishes playing
+void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
+{
+   open_sl_params *params = (open_sl_params *) context;
+   params->csound->NotifyThreadLock(params->clientLockOut);
+
+}
+
+/* put samples to DAC */
+void androidrtplay_(CSOUND *csound, const MYFLT *buffer, int nbytes)
+{
+    open_sl_params *params; 
+    int     i = 0, samples = nbytes / (int) sizeof(MYFLT);
+    short* openslBuffer;
+
+    params = (open_sl_params *) *(csound->GetRtPlayUserData(csound));
+    openslBuffer = params->outputBuffer[params->currentOutputBuffer];
+    if (params == NULL)
+      return;
+    do {     
+      openslBuffer[params->currentOutputIndex++] = (short) (buffer[i]*CONV16BIT);
+      if (params->currentOutputIndex >= params->outBufSamples) {
+	 csound->WaitThreadLock(params->clientLockOut, (size_t) 1000);
+         (*params->bqPlayerBufferQueue)->Enqueue(params->bqPlayerBufferQueue, 
+	   openslBuffer,params->outBufSamples*sizeof(short));
+         params->currentOutputBuffer = (params->currentOutputBuffer ?  0 : 1);
+         params->currentOutputIndex = 0;
+         openslBuffer = params->outputBuffer[params->currentOutputBuffer];
+      }
+    } while (++i < samples);
+}
+
+SLresult openSLCreateEngine(open_sl_params *params)
+{
+    SLresult result;
+
+    // create engine
+    result = slCreateEngine(&(params->engineObject), 0, NULL, 0, NULL, NULL);
+    if(result != SL_RESULT_SUCCESS) goto engine_end;
+
+    // realize the engine 
+    result = (*params->engineObject)->Realize(params->engineObject, SL_BOOLEAN_FALSE);
+     if(result != SL_RESULT_SUCCESS) goto engine_end;
+
+    // get the engine interface, which is needed in order to create other objects
+    result = (*params->engineObject)->GetInterface(params->engineObject, SL_IID_ENGINE, &(params->engineEngine));
+     if(result != SL_RESULT_SUCCESS) goto engine_end;
+
+ engine_end:
+    return result;
+}
+
+int openSLPlayOpen(open_sl_params *params)
+{
+    SLresult result;
+    SLuint32 sr = params->outParm.sampleRate;
+
+    // configure audio source
+    SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
+
+    switch(sr){
+
+    case 8000:
+      sr = SL_SAMPLINGRATE_8;
+      break;
+    case 11025:
+      sr = SL_SAMPLINGRATE_11_025;
+      break;
+    case 16000:
+      sr = SL_SAMPLINGRATE_16;
+      break;
+    case 22050:
+      sr = SL_SAMPLINGRATE_22_05;
+      break;
+    case 24000:
+      sr = SL_SAMPLINGRATE_24;
+      break;
+    case 32000:
+      sr = SL_SAMPLINGRATE_32;
+      break;
+    case 44100:
+      sr = SL_SAMPLINGRATE_44_1;
+      break;
+    case 64000:
+      sr = SL_SAMPLINGRATE_64;
+      break;
+    case 88200:
+      sr = SL_SAMPLINGRATE_88_2;
+      break;
+    case 96000:
+      sr = SL_SAMPLINGRATE_96;
+      break;
+    case 192000:
+      sr = SL_SAMPLINGRATE_192;
+      break;
+    default:
+      return -1;
+    }
+   
+    const SLInterfaceID ids[] = {SL_IID_VOLUME};
+    const SLboolean req[] = {SL_BOOLEAN_FALSE};
+    result = (*params->engineEngine)->CreateOutputMix(params->engineEngine, &(params->outputMixObject), 1, ids, req);
+     if(result != SL_RESULT_SUCCESS) goto end_openaudio;
+
+    // realize the output mix
+    result = (*params->outputMixObject)->Realize(params->outputMixObject, SL_BOOLEAN_FALSE);
+    int chnls = params->csound->GetNchnls(params->csound);
+    int speakers;
+      if(chnls == 1) speakers =  SL_SPEAKER_FRONT_CENTER;
+      else speakers = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT;
+
+    SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM, chnls , sr,
+        SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
+       speakers, SL_BYTEORDER_LITTLEENDIAN};
+
+    SLDataSource audioSrc = {&loc_bufq, &format_pcm};
+
+    // configure audio sink
+    SLDataLocator_OutputMix loc_outmix = {SL_DATALOCATOR_OUTPUTMIX, params->outputMixObject};
+    SLDataSink audioSnk = {&loc_outmix, NULL};
+
+    // create audio player
+    const SLInterfaceID ids1[] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE};
+    const SLboolean req1[] = {SL_BOOLEAN_TRUE};
+    result = (*params->engineEngine)->CreateAudioPlayer(params->engineEngine, &(params->bqPlayerObject), &audioSrc, &audioSnk,
+            1, ids1, req1);
+    if(result != SL_RESULT_SUCCESS) goto end_openaudio;
+
+    // realize the player
+    result = (*params->bqPlayerObject)->Realize(params->bqPlayerObject, SL_BOOLEAN_FALSE);
+    if(result != SL_RESULT_SUCCESS) goto end_openaudio;
+
+    // get the play interface
+    result = (*params->bqPlayerObject)->GetInterface(params->bqPlayerObject, SL_IID_PLAY, &(params->bqPlayerPlay));
+    if(result != SL_RESULT_SUCCESS) goto end_openaudio;
+
+    // get the buffer queue interface
+    result = (*params->bqPlayerObject)->GetInterface(params->bqPlayerObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE,
+						    &(params->bqPlayerBufferQueue));
+   if(result != SL_RESULT_SUCCESS) goto end_openaudio;
+
+    // register callback on the buffer queue
+    result = (*params->bqPlayerBufferQueue)->RegisterCallback(params->bqPlayerBufferQueue, bqPlayerCallback, params);
+    if(result != SL_RESULT_SUCCESS) goto end_openaudio;
+
+     // set the player's state to playing
+    result = (*params->bqPlayerPlay)->SetPlayState(params->bqPlayerPlay, SL_PLAYSTATE_PLAYING);
+ 
+ end_openaudio:
+    return result;
+}
+
+int openSLInitOutParams(open_sl_params *params){
+
+   params->clientLockOut = params->csound->CreateThreadLock();
+   if (params->clientLockOut == NULL)
+      goto err_return;
+   params->outBufSamples  =  params->csound->GetOutputBufferSize(params->csound);
+
+   if((params->outputBuffer[0] = calloc(params->outBufSamples, sizeof(short))) == NULL ||
+      (params->outputBuffer[1] = calloc(params->outBufSamples, sizeof(short))) == NULL ){
+       params->csound->Message(params->csound, "memory allocation failure in opensl module \n");
+        goto err_return;
+     }
+    params->currentInputIndex = 0;
+    params->currentOutputBuffer  = 0;
+   return OK;
+
+ err_return:
+    return -1;  
+}
+
+/* open for audio output */
+int androidplayopen_(CSOUND *csound, const csRtAudioParams *parm)
+{
+
+    CSOUND *p = csound;
+    open_sl_params *params;
+
+    params = (open_sl_params*) p->QueryGlobalVariable(p, "_openslGlobals");
+    if (params == NULL) {
+      if (p->CreateGlobalVariable(p, "_openslGlobals", sizeof(open_sl_params))
+          != 0)
+        return -1;
+      params = (open_sl_params*) p->QueryGlobalVariable(p, "_openslGlobals");
+      params->csound = p;
+      
+      if(openSLCreateEngine(params) != SL_RESULT_SUCCESS) {
+           csound->Message(csound, Str("OpenSL: engine create error \n")); 
+           return -1;
+      }
+      
+    }
+    memcpy(&(params->outParm), parm, sizeof(csRtAudioParams));
+    *(p->GetRtPlayUserData(p)) = (void*) params;
+    
+    if(openSLPlayOpen(params) !=  SL_RESULT_SUCCESS) return -1;
+   
+    int returnVal = openSLInitOutParams(params);
+    params->csound->NotifyThreadLock(params->clientLockOut);
+    return returnVal;
+}
+// ===============================
+
+// this callback handler is called every time a buffer finishes recording
+void bqRecorderCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
+{
+  open_sl_params *params = (open_sl_params *) context;
+  params->csound->NotifyThreadLock(params->clientLockIn);
+}
+
+/* get samples from ADC */
+int androidrtrecord_(CSOUND *csound, MYFLT *buffer, int nbytes)
+{
+
+    open_sl_params  *params;
+    int     i = 0, j = 0, samples = nbytes / (int) sizeof(MYFLT);
+    short *openslBuffer; int nchnls = csound->GetNchnls(csound);
+    params = (open_sl_params*) *(csound->GetRtRecordUserData(csound));
+    openslBuffer = params->inputBuffer[params->currentInputBuffer];
+
+    if (params == NULL) {
+      memset(buffer, 0, nbytes);
+      return nbytes;
+    } 
+    do {
+      if (params->currentInputIndex >= params->inBufSamples) {
+	  csound->WaitThreadLock(params->clientLockIn, (size_t) 1000);
+          (*params->recorderBufferQueue)->Enqueue(params->recorderBufferQueue, 
+	 						  openslBuffer,params->inBufSamples*sizeof(short));
+          params->currentInputBuffer = (params->currentInputBuffer ? 0 : 1);
+          params->currentInputIndex = 0;
+          openslBuffer = params->inputBuffer[params->currentInputBuffer];
+      }
+       for(j = 0; j < nchnls; j++) {
+       buffer[i + j] = (MYFLT) openslBuffer[params->currentInputIndex]*CONVMYFLT;
+      }
+      params->currentInputIndex++;
+      i += nchnls;
+    } while (i < samples);
+    
+
+    return nbytes;
+}
+
+int openSLRecOpen(open_sl_params *params){
+
+    SLresult result;
+    SLuint32 sr = params->inParm.sampleRate;
+    int nchnls;
+    switch(sr){
+
+    case 8000:
+      sr = SL_SAMPLINGRATE_8;
+      break;
+    case 11025:
+      sr = SL_SAMPLINGRATE_11_025;
+      break;
+    case 16000:
+      sr = SL_SAMPLINGRATE_16;
+      break;
+    case 22050:
+      sr = SL_SAMPLINGRATE_22_05;
+      break;
+    case 24000:
+      sr = SL_SAMPLINGRATE_24;
+      break;
+    case 32000:
+      sr = SL_SAMPLINGRATE_32;
+      break;
+    case 44100:
+      sr = SL_SAMPLINGRATE_44_1;
+      break;
+    case 64000:
+      sr = SL_SAMPLINGRATE_64;
+      break;
+    case 88200:
+      sr = SL_SAMPLINGRATE_88_2;
+      break;
+    case 96000:
+      sr = SL_SAMPLINGRATE_96;
+      break;
+    case 192000:
+      sr = SL_SAMPLINGRATE_192;
+      break;
+    default:
+      return -1;
+    }
+    nchnls = 1; /* always mono for the moment // params->csound->GetNchnls(params->csound); */
+   // configure audio source
+    SLDataLocator_IODevice loc_dev = {SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT,
+            SL_DEFAULTDEVICEID_AUDIOINPUT, NULL};
+    SLDataSource audioSrc = {&loc_dev, NULL};
+
+    // configure audio sink
+    SLDataLocator_AndroidSimpleBufferQueue loc_bq = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
+    SLDataFormat_PCM format_pcm = {SL_DATAFORMAT_PCM,nchnls, sr,
+        SL_PCMSAMPLEFORMAT_FIXED_16, SL_PCMSAMPLEFORMAT_FIXED_16,
+        SL_SPEAKER_FRONT_CENTER, SL_BYTEORDER_LITTLEENDIAN};
+    SLDataSink audioSnk = {&loc_bq, &format_pcm};
+
+    // create audio recorder
+    // (requires the RECORD_AUDIO permission)
+    const SLInterfaceID id[1] = {SL_IID_ANDROIDSIMPLEBUFFERQUEUE};
+    const SLboolean req[1] = {SL_BOOLEAN_TRUE};
+    result = (*params->engineEngine)->CreateAudioRecorder(params->engineEngine, &(params->recorderObject), &audioSrc,
+            &audioSnk, 1, id, req);
+    if (SL_RESULT_SUCCESS != result) goto end_recopen;
+
+    // realize the audio recorder
+    result = (*params->recorderObject)->Realize(params->recorderObject, SL_BOOLEAN_FALSE);
+    if (SL_RESULT_SUCCESS != result) goto end_recopen;
+
+ 
+    // get the record interface
+    result = (*params->recorderObject)->GetInterface(params->recorderObject, SL_IID_RECORD, &(params->recorderRecord));
+    if (SL_RESULT_SUCCESS != result) goto end_recopen;
+ 
+    // get the buffer queue interface
+    result = (*params->recorderObject)->GetInterface(params->recorderObject, SL_IID_ANDROIDSIMPLEBUFFERQUEUE,
+						     &(params->recorderBufferQueue));
+    if (SL_RESULT_SUCCESS != result) goto end_recopen;
+
+    // register callback on the buffer queue
+    result = (*params->recorderBufferQueue)->RegisterCallback(params->recorderBufferQueue, bqRecorderCallback,
+            params);
+    if (SL_RESULT_SUCCESS != result) goto end_recopen;
+
+
+    result = (*params->recorderRecord)->SetRecordState(params->recorderRecord, SL_RECORDSTATE_RECORDING);
+
+   
+ end_recopen: 
+    return result;
+}
+
+int openSLInitInParams(open_sl_params *params){
+   params->clientLockIn = params->csound->CreateThreadLock();
+   if (params->clientLockIn == NULL)
+      return -1; 
+   /* input is always mono, so buffer size needs to be adjusted accordingly */
+  params->inBufSamples  = params->csound->GetInputBufferSize(params->csound) /
+                          params->csound->GetNchnls(params->csound);
+  if((params->inputBuffer[0] = (short *)calloc(params->inBufSamples, sizeof(short))) == NULL ||
+     (params->inputBuffer[1] = (short *)calloc(params->inBufSamples, sizeof(short))) == NULL){
+       params->csound->Message(params->csound, "memory allocation failure in opensl module \n");
+       return -1;
+     }
+   params->currentInputIndex = params->inBufSamples;
+   params->currentInputBuffer = 0;    
+   return OK;
+
+}
+/* open for audio input */
+int androidrecopen_(CSOUND *csound, const csRtAudioParams *parm)
+{
+    CSOUND *p = csound; int res;
+    open_sl_params *params;
+    params = (open_sl_params*) p->QueryGlobalVariable(p, "_openslGlobals");
+    if (params == NULL) {
+      if (p->CreateGlobalVariable(p, "_openslGlobals", sizeof(open_sl_params))
+          != 0)
+        return -1;
+      params = (open_sl_params*) p->QueryGlobalVariable(p, "_openslGlobals");
+      params->csound = p;
+      
+      if(openSLCreateEngine(params) != SL_RESULT_SUCCESS) {
+           csound->Message(csound, Str("OpenSL: engine create error \n")); 
+           return -1;
+      }
+      
+    }
+    memcpy(&(params->inParm), parm, sizeof(csRtAudioParams));
+    *(p->GetRtRecordUserData(p)) = (void*) params;
+    if(openSLRecOpen(params) !=  SL_RESULT_SUCCESS) {
+      csound->Message(csound, Str("OpenSL: input open error \n")); 
+     return -1;
+    }
+    
+    res = openSLInitInParams(params);
+    if(res == OK)  params->csound->NotifyThreadLock(params->clientLockIn);
+    return res;
+}
+
+/* close the I/O device entirely */
+void androidrtclose_(CSOUND *csound)
+{
+ 
+    open_sl_params *params;
+    params = (open_sl_params *) csound->QueryGlobalVariable(csound,
+                                                             "_openslGlobals");
+    if (params == NULL)
+      return;
+
+    if (params->clientLockIn != NULL) {
+      csound->NotifyThreadLock(params->clientLockIn);
+      csound->DestroyThreadLock(params->clientLockIn);
+      params->clientLockIn = NULL;
+    }
+    
+    if (params->clientLockOut != NULL) {
+      csound->NotifyThreadLock(params->clientLockOut);
+      csound->DestroyThreadLock(params->clientLockOut);
+      params->clientLockOut = NULL;
+    }
+    
+    if (params->outputBuffer[0] != NULL) {
+      free(params->outputBuffer[0]);
+      params->outputBuffer[0] = NULL;
+    }
+
+    if (params->outputBuffer[1] != NULL) {
+      free(params->outputBuffer[1]);
+      params->outputBuffer[1] = NULL;
+    }
+
+    if (params->inputBuffer[0] != NULL) {
+      free(params->inputBuffer[0]);
+      params->inputBuffer[0] = NULL;
+    }
+
+     if (params->inputBuffer[1] != NULL) {
+      free(params->inputBuffer[1]);
+      params->inputBuffer[1] = NULL;
+    }
+
+    *(csound->GetRtRecordUserData(csound)) = NULL;
+    *(csound->GetRtPlayUserData(csound)) = NULL;
+    csound->DestroyGlobalVariable(csound, "_openslGlobals");
+
+
+// destroy buffer queue audio player object, and invalidate all associated interfaces
+    if (params->bqPlayerObject != NULL) {
+        (*params->bqPlayerObject)->Destroy(params->bqPlayerObject);
+        params->bqPlayerObject = NULL;
+        params->bqPlayerPlay = NULL;
+        params->bqPlayerBufferQueue = NULL;
+        params->bqPlayerEffectSend = NULL;
+    }
+
+    // destroy audio recorder object, and invalidate all associated interfaces
+    if (params->recorderObject != NULL) {
+        (*params->recorderObject)->Destroy(params->recorderObject);
+        params->recorderObject = NULL;
+        params->recorderRecord = NULL;
+        params->recorderBufferQueue = NULL;
+    }
+
+    // destroy output mix object, and invalidate all associated interfaces
+    if (params->outputMixObject != NULL) {
+        (*params->outputMixObject)->Destroy(params->outputMixObject);
+        params->outputMixObject = NULL;
+    }
+
+    // destroy engine object, and invalidate all associated interfaces
+    if (params->engineObject != NULL) {
+        (*params->engineObject)->Destroy(params->engineObject);
+        params->engineObject = NULL;
+        params->engineEngine = NULL;
+    }
+
+}
+
+//PUBLIC int csoundModuleCreate(CSOUND *csound)
+//{
+//    /* nothing to do, report success */
+//   csound->Message(csound,
+//     Str("OpenSL ES real-time audio module for Csound\n"));
+//    return 0;
+//}
+//
+//PUBLIC int csoundModuleInit(CSOUND *csound)
+//{
+//    char    *s, drv[12];
+//    int     i;
+//
+//    if ((s = (char*) csound->QueryGlobalVariable(csound, "_RTAUDIO")) == NULL)
+//      return 0;
+//    for (i = 0; s[i] != '\0' && i < 11; i++)
+//      drv[i] = s[i] & (char) 0xDF;
+//    drv[i] = '\0';
+//    if (!(strcmp(drv, "OPENSL") == 0 || strcmp(drv, "OSL") == 0 )
+//      return 0;
+//    csound->Message(csound, Str("rtaudio: OenSL ES module enabled ... "));
+//    /* set function pointers */
+//      csound->SetPlayopenCallback(csound, playopen_);
+//      csound->SetRecopenCallback(csound, recopen_);
+//      csound->SetRtplayCallback(csound, rtplay_);
+//      csound->SetRtrecordCallback(csound, rtrecord_);
+//      csound->SetRtcloseCallback(csound, rtclose_);
+//    
+//    return 0;
+//}
+//
+//PUBLIC int csoundModuleDestroy(CSOUND *csound)
+//{
+//    return 0;
+//}
+//
+//PUBLIC int csoundModuleInfo(void)
+//{
+//    return ((CS_APIVERSION << 16) + (CS_APISUBVER << 8) + (int) sizeof(MYFLT));
+//}
+//
diff --git a/android/CsoundAndroid/proguard.cfg b/android/CsoundAndroid/proguard.cfg
new file mode 100644
index 0000000..b1cdf17
--- /dev/null
+++ b/android/CsoundAndroid/proguard.cfg
@@ -0,0 +1,40 @@
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontpreverify
+-verbose
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class com.android.vending.licensing.ILicensingService
+
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclassmembers class * extends android.app.Activity {
+   public void *(android.view.View);
+}
+
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+
+-keep class * implements android.os.Parcelable {
+  public static final android.os.Parcelable$Creator *;
+}
diff --git a/android/CsoundAndroid/project.properties b/android/CsoundAndroid/project.properties
new file mode 100644
index 0000000..2f8f737
--- /dev/null
+++ b/android/CsoundAndroid/project.properties
@@ -0,0 +1,12 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system use,
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-9
+android.library=true
diff --git a/android/CsoundAndroid/res/drawable-hdpi/ic_launcher.png b/android/CsoundAndroid/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..8074c4c
Binary files /dev/null and b/android/CsoundAndroid/res/drawable-hdpi/ic_launcher.png differ
diff --git a/android/CsoundAndroid/res/drawable-ldpi/ic_launcher.png b/android/CsoundAndroid/res/drawable-ldpi/ic_launcher.png
new file mode 100644
index 0000000..1095584
Binary files /dev/null and b/android/CsoundAndroid/res/drawable-ldpi/ic_launcher.png differ
diff --git a/android/CsoundAndroid/res/drawable-mdpi/ic_launcher.png b/android/CsoundAndroid/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..a07c69f
Binary files /dev/null and b/android/CsoundAndroid/res/drawable-mdpi/ic_launcher.png differ
diff --git a/android/CsoundAndroid/src/com/csounds/CsoundObj.java b/android/CsoundAndroid/src/com/csounds/CsoundObj.java
new file mode 100644
index 0000000..e0680aa
--- /dev/null
+++ b/android/CsoundAndroid/src/com/csounds/CsoundObj.java
@@ -0,0 +1,473 @@
+/* 
+ 
+ CsoundObj.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import android.content.Context;
+import android.media.AudioFormat;
+import android.media.AudioManager;
+import android.media.AudioRecord;
+import android.media.AudioTrack;
+import android.media.MediaRecorder;
+import android.util.Log;
+import android.widget.Button;
+import android.widget.SeekBar;
+
+import com.csounds.valueCacheable.CachedAccelerometer;
+import com.csounds.valueCacheable.CachedButton;
+import com.csounds.valueCacheable.CachedSlider;
+import com.csounds.valueCacheable.CsoundValueCacheable;
+
+import csnd.AndroidCsound;
+import csnd.Csound;
+import csnd.CsoundCallbackWrapper;
+import csnd.CsoundMYFLTArray;
+import csnd.csndConstants;
+
+public class CsoundObj {
+
+	private Csound csound;
+	private ArrayList<CsoundValueCacheable> valuesCache;
+	private ArrayList<CsoundObjCompletionListener> completionListeners;
+	private boolean muted = false;
+	private boolean stopped = false;
+	private Thread thread;
+	private boolean audioInEnabled = false;
+	private boolean messageLoggingEnabled = false;
+	private boolean useAudioTrack = false;
+	int retVal = 0;
+
+	private CsoundCallbackWrapper callbacks;
+
+	public CsoundObj() {
+		valuesCache = new ArrayList<CsoundValueCacheable>();
+		completionListeners = new ArrayList<CsoundObjCompletionListener>();
+	}
+	
+	public CsoundObj(boolean useAudioTrack) {
+		valuesCache = new ArrayList<CsoundValueCacheable>();
+		completionListeners = new ArrayList<CsoundObjCompletionListener>();
+		this.useAudioTrack = useAudioTrack;
+	}
+
+	/* VALUE CACHEABLE */
+
+	// -(id<ValueCacheable>)addSwitch:(UISwitch*)uiSwitch
+	// forChannelName:(NSString*)channelName;
+
+	public boolean isAudioInEnabled() {
+		return audioInEnabled;
+	}
+
+	public void setAudioInEnabled(boolean audioInEnabled) {
+		this.audioInEnabled = audioInEnabled;
+	}
+
+	public boolean isMessageLoggingEnabled() {
+		return messageLoggingEnabled;
+	}
+
+	public void setMessageLoggingEnabled(boolean messageLoggingEnabled) {
+		this.messageLoggingEnabled = messageLoggingEnabled;
+	}
+
+	public CsoundValueCacheable addSlider(SeekBar seekBar, String channelName,
+			double min, double max) {
+		CachedSlider cachedSlider = new CachedSlider(seekBar, channelName, min,
+				max);
+		valuesCache.add(cachedSlider);
+
+		return cachedSlider;
+	}
+
+	public CsoundValueCacheable addButton(Button button, String channelName,int type) {
+		CachedButton cachedButton = new CachedButton(button, channelName, type);
+		valuesCache.add(cachedButton);
+
+		return cachedButton;
+	}
+	
+	public CsoundValueCacheable addButton(Button button, String channelName) {
+		CachedButton cachedButton = new CachedButton(button, channelName);
+		valuesCache.add(cachedButton);
+
+		return cachedButton;
+	}
+
+
+	// -(id<ValueCacheable>)addButton:(UIButton*)uiButton
+	// forChannelName:(NSString*)channelName;
+
+	public Csound getCsound() {
+		return csound;
+	}
+
+	public boolean isMuted() {
+		return muted;
+	}
+
+	public void setMuted(boolean muted) {
+		this.muted = muted;
+	}
+
+	public void addValueCacheable(CsoundValueCacheable valueCacheable) {
+		valuesCache.add(valueCacheable);
+	}
+
+	public void removeValueCacheable(CsoundValueCacheable valueCacheable) {
+		valuesCache.remove(valueCacheable);
+	}
+
+	public CsoundValueCacheable enableAccelerometer(Context context) {
+		CachedAccelerometer accelerometer = new CachedAccelerometer(context);
+		addValueCacheable(accelerometer);
+		return accelerometer;
+	}
+
+	// -(id<ValueCacheable>)enableGyroscope;
+	// -(id<ValueCacheable>)enableAttitude;
+
+	public CsoundMYFLTArray getInputChannelPtr(String channelName) {
+		CsoundMYFLTArray ptr = new CsoundMYFLTArray(1);
+		getCsound().GetChannelPtr(
+				ptr.GetPtr(),
+				channelName,
+				csndConstants.CSOUND_CONTROL_CHANNEL
+						| csndConstants.CSOUND_INPUT_CHANNEL);
+		return ptr;
+	}
+
+	public void sendScore(String score) {
+		csound.InputMessage(score);
+	}
+
+	public void addCompletionListener(CsoundObjCompletionListener listener) {
+		completionListeners.add(listener);
+	}
+
+	public void startCsound(final File csdFile) {
+		stopped = false;
+		thread = new Thread() {
+			public void run() {
+				setPriority(Thread.MAX_PRIORITY);
+				// android.os.Process
+				// .setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
+				if(useAudioTrack == false)
+				  runCsoundOpenSL(csdFile);
+				else
+				  runCsoundAudioTrack(csdFile);
+			}
+		};
+		thread.start();
+	}
+
+	public void stopCsound() {
+		stopped = true;
+		thread = null;
+	}
+
+	public int getNumChannels() {
+		return csound.GetNchnls();
+	}
+
+	public int getKsmps() {
+		return csound.GetKsmps();
+	}
+
+	public int getError(){
+     return retVal;
+	}
+	
+	// -(float*)getInputChannelPtr:(NSString*)channelName;
+	// -(float*)getOutputChannelPtr:(NSString*)channelName;
+	// -(NSData*)getOutSamples;
+
+	/* Render Methods */
+
+	private void runCsoundOpenSL(File f) {
+
+		AndroidCsound c = new AndroidCsound();
+		csound = c;
+		retVal = c.PreCompile();
+
+		Log.d("CsoundAndroid", "Return Value: " + retVal);
+
+		retVal = c.Compile(f.getAbsolutePath());
+		Log.d("CsoundAndroid", "Return Value2: " + retVal);
+
+		if (retVal == 0) {
+			for (CsoundValueCacheable cacheable : valuesCache) {
+				cacheable.setup(this);
+			}
+
+			for (CsoundValueCacheable cacheable : valuesCache) {
+				cacheable.updateValuesToCsound();
+			}
+
+			while (c.PerformKsmps() == 0 && !stopped) {
+				for (CsoundValueCacheable cacheable : valuesCache) {
+					cacheable.updateValuesFromCsound();
+				}
+
+				for (CsoundValueCacheable cacheable : valuesCache) {
+					cacheable.updateValuesToCsound();
+				}
+			}
+
+			c.Stop();
+			c.Cleanup();
+			c.Reset();
+
+			for (CsoundValueCacheable cacheable : valuesCache) {
+				cacheable.cleanup();
+			}
+
+			for (CsoundObjCompletionListener listener : completionListeners) {
+				listener.csoundObjComplete(this);
+			}
+
+		} else {			
+			for (CsoundObjCompletionListener listener : completionListeners) {
+				listener.csoundObjComplete(this);
+			}
+			
+		}
+
+	}
+
+	private void runCsoundAudioTrack(File f) {
+
+		csound = new Csound();
+
+		if (messageLoggingEnabled) {
+			callbacks = new CsoundCallbackWrapper(csound) {
+
+				@Override
+				public void MessageCallback(int attr, String msg) {
+					Log.d("CsoundObj", msg);
+					// super.MessageCallback(attr, msg);
+				}
+
+			};
+			callbacks.SetMessageCallback();
+		}
+		retVal = csound.PreCompile();
+		csound.SetHostImplementedAudioIO(1, 0);
+
+		Log.d("CsoundAndroid", "Return Value: " + retVal);
+
+		retVal = csound.Compile(f.getAbsolutePath());
+		Log.d("CsoundAndroid", "Return Value2: " + retVal);
+
+		if (retVal == 0) {
+			for (CsoundValueCacheable cacheable : valuesCache) {
+				cacheable.setup(this);
+			}
+
+			int channelConfig = (csound.GetNchnls() == 2) ? AudioFormat.CHANNEL_CONFIGURATION_STEREO
+					: AudioFormat.CHANNEL_CONFIGURATION_MONO;
+
+			int channelInConfig = AudioFormat.CHANNEL_IN_MONO;
+
+			int minSize = AudioTrack.getMinBufferSize((int) csound.GetSr(),
+					channelConfig, AudioFormat.ENCODING_PCM_16BIT);
+
+			if (audioInEnabled) {
+
+				int recordMinSize = AudioRecord.getMinBufferSize(
+						(int) csound.GetSr(), channelInConfig,
+						AudioFormat.ENCODING_PCM_16BIT);
+
+				minSize = (minSize > recordMinSize) ? minSize : recordMinSize;
+
+			}
+
+			AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
+					(int) csound.GetSr(), channelConfig,
+					AudioFormat.ENCODING_PCM_16BIT, minSize,
+					AudioTrack.MODE_STREAM);
+			Log.d("CsoundAndroid", "Buffer Size: " + minSize);
+
+			AudioRecord audioRecord = null;
+			CsoundMYFLTArray audioIn = null;
+
+			if (audioInEnabled) {
+
+				// int channelInConfig = (csound.GetNchnls() == 2) ?
+				// AudioFormat.CHANNEL_IN_STEREO
+				// : AudioFormat.CHANNEL_IN_MONO;
+
+				// int channelInConfig = AudioFormat.CHANNEL_IN_MONO;
+				//
+				// int recordMinSize =
+				// AudioRecord.getMinBufferSize((int)csound.GetSr(),
+				// channelInConfig,
+				// AudioFormat.ENCODING_PCM_16BIT);
+
+				audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
+						(int) csound.GetSr(), channelInConfig,
+						AudioFormat.ENCODING_PCM_16BIT, minSize);
+
+				if (audioRecord.getState() != AudioRecord.STATE_INITIALIZED) {
+					Log.d("CsoundObj",
+							"AudioRecord unable to be initialized. Error "
+									+ audioRecord.getState());
+					audioRecord.release();
+					audioRecord = null;
+				} else {
+					try {
+						audioRecord.startRecording();
+						if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) {
+							Log.d("CsoundObj",
+									"AudioRecord unable to be initialized. Error "
+											+ audioRecord.getRecordingState());
+
+						}
+						audioIn = new CsoundMYFLTArray();
+						audioIn.SetPtr(csound.GetSpin());
+					} catch (IllegalStateException e) {
+						audioRecord.release();
+						audioRecord = null;
+						audioIn = null;
+					}
+				}
+			}
+
+			audioTrack.play();
+
+			int counter = 0;
+			int nchnls = csound.GetNchnls();
+			int recBufferSize = csound.GetKsmps();
+			int bufferSize = recBufferSize * nchnls;
+
+			short[] samples = new short[bufferSize];
+
+			float multiplier = Short.MAX_VALUE / csound.Get0dBFS();
+			float recMultiplier = 1 / multiplier;
+
+			Log.d("CsoundObj", "Multiplier: " + multiplier + " : "
+					+ recMultiplier);
+
+			
+			for (CsoundValueCacheable cacheable : valuesCache) {
+				cacheable.updateValuesToCsound();
+			}
+
+			short recordSample[] = new short[recBufferSize];
+
+			if (audioRecord != null) {
+				audioRecord.read(recordSample, 0, recBufferSize);
+				for (int i = 0; i < csound.GetKsmps(); i++) {
+					short sample = recordSample[i];
+
+					if (nchnls == 2) {
+						int index = i * 2;
+						audioIn.SetValues(index,
+								(double) (sample * recMultiplier),
+								(double) (sample * recMultiplier));
+					} else {
+						audioIn.SetValue(i, sample);
+					}
+				}
+			}
+
+			while (csound.PerformKsmps() == 0 && !stopped) {
+
+				for (int i = 0; i < csound.GetKsmps(); i++) {
+					samples[counter++] = (short) (csound.GetSpoutSample(i, 0) * multiplier);
+
+					if (nchnls > 1) {
+						samples[counter++] = (short) (csound.GetSpoutSample(i,
+								1) * multiplier);
+					}
+				}
+
+				if (counter >= bufferSize) {
+					audioTrack.write(samples, 0, bufferSize);
+					counter = 0;
+					// if(audioTrack.getPlayState() !=
+					// AudioTrack.PLAYSTATE_PLAYING) {
+					// audioTrack.play();
+					//
+					// }
+				}
+
+				for (CsoundValueCacheable cacheable : valuesCache) {
+					cacheable.updateValuesFromCsound();
+				}
+
+				for (CsoundValueCacheable cacheable : valuesCache) {
+					cacheable.updateValuesToCsound();
+				}
+
+				if (audioRecord != null) {
+					audioRecord.read(recordSample, 0, recBufferSize);
+					for (int i = 0; i < csound.GetKsmps(); i++) {
+						short sample = recordSample[i];
+
+						if (nchnls == 2) {
+							int index = i * 2;
+							audioIn.SetValues(index,
+									(double) (sample * recMultiplier),
+									(double) (sample * recMultiplier));
+						} else {
+							audioIn.SetValue(i, sample);
+						}
+					}
+				}
+			}
+
+			audioTrack.stop();
+			audioTrack.release();
+
+			if (audioRecord != null) {
+				audioRecord.stop();
+				audioRecord.release();
+				audioIn.Clear();
+			}
+
+			csound.Stop();
+			csound.Cleanup();
+			csound.Reset();
+
+			for (CsoundValueCacheable cacheable : valuesCache) {
+				cacheable.cleanup();
+			}
+
+			for (CsoundObjCompletionListener listener : completionListeners) {
+				listener.csoundObjComplete(this);
+			}
+
+		}
+		else {
+			for (CsoundObjCompletionListener listener : completionListeners) {
+				listener.csoundObjComplete(this);
+			}
+		}
+	} 		
+}
diff --git a/android/CsoundAndroid/src/com/csounds/CsoundObjCompletionListener.java b/android/CsoundAndroid/src/com/csounds/CsoundObjCompletionListener.java
new file mode 100644
index 0000000..305c819
--- /dev/null
+++ b/android/CsoundAndroid/src/com/csounds/CsoundObjCompletionListener.java
@@ -0,0 +1,30 @@
+/* 
+ 
+ CsoundObjectCompletionListener.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound.
+ 
+ Csound is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds;
+
+public interface CsoundObjCompletionListener {
+	public void csoundObjComplete(CsoundObj csoundObj);
+}
diff --git a/android/CsoundAndroid/src/com/csounds/valueCacheable/AbstractValueCacheable.java b/android/CsoundAndroid/src/com/csounds/valueCacheable/AbstractValueCacheable.java
new file mode 100644
index 0000000..1b80d3e
--- /dev/null
+++ b/android/CsoundAndroid/src/com/csounds/valueCacheable/AbstractValueCacheable.java
@@ -0,0 +1,45 @@
+/* 
+ 
+ AbstractValueCacheable.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.valueCacheable;
+
+import com.csounds.CsoundObj;
+
+public abstract class AbstractValueCacheable implements CsoundValueCacheable {
+
+	@Override
+	public abstract void setup(CsoundObj csoundObj);
+	
+	@Override
+	public void updateValuesToCsound() {
+	}
+
+	@Override
+	public void updateValuesFromCsound() {
+	}
+
+	@Override
+	public abstract void cleanup();
+}
diff --git a/android/CsoundAndroid/src/com/csounds/valueCacheable/CachedAccelerometer.java b/android/CsoundAndroid/src/com/csounds/valueCacheable/CachedAccelerometer.java
new file mode 100644
index 0000000..00bd5a3
--- /dev/null
+++ b/android/CsoundAndroid/src/com/csounds/valueCacheable/CachedAccelerometer.java
@@ -0,0 +1,123 @@
+/* 
+ 
+ CachedAccelerometer.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.valueCacheable;
+
+import java.util.List;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.util.Log;
+
+import com.csounds.CsoundObj;
+
+import csnd.CsoundMYFLTArray;
+
+public class CachedAccelerometer extends AbstractValueCacheable implements SensorEventListener {
+
+	private static final String CS_ACCEL_X = "accelerometerX";
+	private static final String CS_ACCEL_Y = "accelerometerY";
+	private static final String CS_ACCEL_Z = "accelerometerZ";
+	
+	CsoundMYFLTArray channelPtrX;
+	CsoundMYFLTArray channelPtrY;
+	CsoundMYFLTArray channelPtrZ;
+	
+	double x, y, z;
+	
+	Context context;
+	
+	SensorManager sensorManager;
+	Sensor sensor;
+	
+	public CachedAccelerometer(Context context) {
+		this.context = context;
+		x = y = z = 0;
+	}
+	
+	@Override
+	public void setup(CsoundObj csoundObj) {
+		
+		 sensorManager = (SensorManager) context.
+	                getSystemService(Context.SENSOR_SERVICE);
+	        List<Sensor> sensors = sensorManager.getSensorList(
+	                Sensor.TYPE_ACCELEROMETER);
+	        
+	    if(sensors.size() > 0) {
+	    	sensor = sensors.get(0);
+	    	
+	    	sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
+	    	
+	    	channelPtrX = csoundObj.getInputChannelPtr(CS_ACCEL_X);
+			channelPtrY = csoundObj.getInputChannelPtr(CS_ACCEL_Y);
+			channelPtrZ = csoundObj.getInputChannelPtr(CS_ACCEL_Z);	
+	    } else {
+	    	Log.d("CachedAccelerometer", "Unable to get Accelerometer sensor.");
+	    }
+		
+	}
+
+	@Override
+	public void updateValuesToCsound() {
+		if(channelPtrX != null) {
+			channelPtrX.SetValue(0, x);
+			channelPtrY.SetValue(0, y);
+			channelPtrZ.SetValue(0, z);
+		}
+	}
+	
+	@Override
+	public void cleanup() {
+		if(channelPtrX != null) {
+			channelPtrX.Clear();
+			channelPtrY.Clear();
+			channelPtrZ.Clear();
+			
+			channelPtrX = null;
+			channelPtrY = null;
+			channelPtrZ = null;
+			
+			sensorManager.unregisterListener(this);
+		}
+	}
+
+	// SENSOR EVENT LISTENER
+	
+	@Override
+	public void onAccuracyChanged(Sensor sensor, int accuracy) {
+		
+	}
+
+	@Override
+	public void onSensorChanged(SensorEvent event) {
+		  x = event.values[0] / sensor.getMaximumRange();
+          y = event.values[1] / sensor.getMaximumRange();
+          z = event.values[2] / sensor.getMaximumRange();
+	}
+
+}
diff --git a/android/CsoundAndroid/src/com/csounds/valueCacheable/CachedButton.java b/android/CsoundAndroid/src/com/csounds/valueCacheable/CachedButton.java
new file mode 100644
index 0000000..91f48a1
--- /dev/null
+++ b/android/CsoundAndroid/src/com/csounds/valueCacheable/CachedButton.java
@@ -0,0 +1,132 @@
+/* 
+ 
+ CachedButton.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.valueCacheable;
+
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnTouchListener;
+import android.widget.Button;
+
+import com.csounds.CsoundObj;
+
+import csnd.CsoundMYFLTArray;
+
+public class CachedButton extends AbstractValueCacheable {
+
+	private CsoundObj csoundObj;
+	private Button button;
+	private String channelName;
+	private int type;
+	CsoundMYFLTArray ptr, ptrX, ptrY;
+	double xpos, ypos;
+	
+	boolean selected = false;
+	boolean cacheDirty = false;
+	
+	public CachedButton(Button button, String channelName){
+		this.button = button;
+		this.channelName = channelName;
+		this.type = 0; 
+	}
+	
+	public CachedButton(Button button, String channelName, int type) {
+		this.button = button;
+		this.channelName = channelName;
+		this.type = type;
+	}
+	
+	@Override
+	public void setup(CsoundObj csoundObj) {
+		this.csoundObj = csoundObj;
+		
+		if(type == 0){	
+		button.setOnClickListener(new OnClickListener() {	
+			@Override
+			public void onClick(View v) {
+				selected = true;
+				cacheDirty = true;
+			}
+		});
+		}
+		else {
+			button.setOnTouchListener(new OnTouchListener(){	
+				@Override
+				public boolean onTouch(View v, MotionEvent event) {
+					final int action = event.getAction() & MotionEvent.ACTION_MASK;
+					switch (action){
+					case MotionEvent.ACTION_DOWN:
+					case MotionEvent.ACTION_POINTER_DOWN:
+					button.setPressed(true);
+					selected = true;
+					break;
+					case MotionEvent.ACTION_POINTER_UP:
+					case MotionEvent.ACTION_UP:
+					selected = false;
+					button.setPressed(false);
+					break;
+					case MotionEvent.ACTION_MOVE:
+					break;
+					}
+					if (selected){
+					xpos = event.getX()/v.getWidth();
+					ypos = 1. - (event.getY()/v.getHeight());
+					} else xpos = ypos = 0.;
+					return true;
+				}
+			});
+			ptrX = csoundObj.getInputChannelPtr(channelName + ".x");
+			ptrY = csoundObj.getInputChannelPtr(channelName + ".y");
+		}
+		ptr = csoundObj.getInputChannelPtr(channelName);
+	}
+	
+	
+	@Override
+	public void updateValuesToCsound() {
+		if(type == 0){
+		if (csoundObj != null && cacheDirty) {
+			ptr.SetValue(0, (selected ? 1. : 0.));		
+			cacheDirty = selected;
+			selected = false;
+		}
+		} else {
+			ptr.SetValue(0, (selected ? 1. : 0.));		
+			ptrX.SetValue(0, xpos);	
+			ptrY.SetValue(0, ypos);	
+		}
+		
+	}
+
+	@Override
+	public void cleanup() {
+		if(type==0) button.setOnClickListener(null);
+		else button.setOnTouchListener(null);
+		ptr.Clear();
+		ptr = null;
+	}
+
+}
diff --git a/android/CsoundAndroid/src/com/csounds/valueCacheable/CachedSlider.java b/android/CsoundAndroid/src/com/csounds/valueCacheable/CachedSlider.java
new file mode 100644
index 0000000..821f18c
--- /dev/null
+++ b/android/CsoundAndroid/src/com/csounds/valueCacheable/CachedSlider.java
@@ -0,0 +1,109 @@
+/* 
+ 
+ CachedSlider.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.valueCacheable;
+
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
+
+import com.csounds.CsoundObj;
+
+import csnd.CsoundMYFLTArray;
+
+public class CachedSlider extends AbstractValueCacheable{
+	private SeekBar seekBar;
+	private String channelName;
+	private CsoundObj csoundObj;
+	protected double minValue, maxValue, cachedValue;
+	boolean cacheDirty = true;
+	CsoundMYFLTArray ptr;
+
+	public CachedSlider(SeekBar seekBar, String channelName, double min, double max) {
+		this.seekBar = seekBar;
+		this.channelName = channelName;
+		this.minValue = min;
+		this.maxValue = max;
+		
+		seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
+			
+			@Override
+			public void onStopTrackingTouch(SeekBar seekBar) {
+				// TODO Auto-generated method stub
+				
+			}
+			
+			@Override
+			public void onStartTrackingTouch(SeekBar seekBar) {
+				// TODO Auto-generated method stub
+				
+			}
+			
+			@Override
+			public void onProgressChanged(SeekBar seekBar, int progress,
+					boolean fromUser) {
+				
+				if(fromUser) {
+					double percent = progress / (double)seekBar.getMax();
+					double value = (percent * (maxValue - minValue)) + minValue;
+					
+					if(value != cachedValue) {
+						cachedValue = value;
+						cacheDirty = true;
+					}
+				}
+				
+			}
+		});
+	}
+
+	@Override
+	public void setup(CsoundObj csoundObj) {
+		this.csoundObj = csoundObj;
+		
+		double percent = seekBar.getProgress() / (double)seekBar.getMax();
+		cachedValue = (percent * (maxValue - minValue)) + minValue;
+		cacheDirty = true;
+		
+		ptr = this.csoundObj.getInputChannelPtr(channelName);
+
+	}
+	
+	@Override
+	public void updateValuesToCsound() {
+		if (cacheDirty) {
+			ptr.SetValue(0, this.cachedValue);
+			cacheDirty = false;
+		}
+	}
+
+	@Override
+	public void cleanup() {
+		seekBar.setOnSeekBarChangeListener(null);
+		ptr.Clear();
+		ptr = null;
+	}
+	
+	
+}
diff --git a/android/CsoundAndroid/src/com/csounds/valueCacheable/CsoundValueCacheable.java b/android/CsoundAndroid/src/com/csounds/valueCacheable/CsoundValueCacheable.java
new file mode 100644
index 0000000..0907a22
--- /dev/null
+++ b/android/CsoundAndroid/src/com/csounds/valueCacheable/CsoundValueCacheable.java
@@ -0,0 +1,40 @@
+/* 
+ 
+ CsoundValueCacheable.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.valueCacheable;
+
+import com.csounds.CsoundObj;
+
+public interface CsoundValueCacheable {
+	
+	public void setup(CsoundObj csoundObj);
+	
+	public void updateValuesToCsound();
+	
+	public void updateValuesFromCsound();
+	
+	public void cleanup();
+	
+}
diff --git a/android/CsoundAndroidExamples/.classpath b/android/CsoundAndroidExamples/.classpath
new file mode 100644
index 0000000..a4763d1
--- /dev/null
+++ b/android/CsoundAndroidExamples/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="gen"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+	<classpathentry kind="output" path="bin/classes"/>
+</classpath>
diff --git a/android/CsoundAndroidExamples/.gitignore b/android/CsoundAndroidExamples/.gitignore
new file mode 100644
index 0000000..91e378c
--- /dev/null
+++ b/android/CsoundAndroidExamples/.gitignore
@@ -0,0 +1,10 @@
+*DS_Store
+obj
+libs
+bin
+gen
+src/csnd*
+*swp
+jni/csound_orc*
+jni/csound_prelex.c
+jni/java_interface*
diff --git a/android/CsoundAndroidExamples/.project b/android/CsoundAndroidExamples/.project
new file mode 100644
index 0000000..bf5513d
--- /dev/null
+++ b/android/CsoundAndroidExamples/.project
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>CsoundAndroidExamples</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/android/CsoundAndroidExamples/AndroidManifest.xml b/android/CsoundAndroidExamples/AndroidManifest.xml
new file mode 100644
index 0000000..7196562
--- /dev/null
+++ b/android/CsoundAndroidExamples/AndroidManifest.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.csounds.examples"
+    android:versionCode="1"
+    android:versionName="1.0" 
+    android:installLocation="auto">
+
+    <uses-sdk android:minSdkVersion="9" />
+
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name" >
+        <activity
+            android:label="@string/app_name"
+            android:name=".CsoundAndroidActivity" 
+            android:configChanges="orientation"
+			android:screenOrientation="portrait">
+            <intent-filter >
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        
+        <activity
+            android:label="@string/simple_test_name"
+            android:name=".tests.SimpleTest1Activity"
+            android:configChanges="orientation"
+			android:screenOrientation="portrait"/>
+        
+        <activity
+            android:label="@string/simple_test2_name"
+            android:name=".tests.SimpleTest2Activity"
+            android:configChanges="orientation"
+			android:screenOrientation="portrait"/>
+        
+        <activity
+            android:label="Button Test"
+            android:name=".tests.ButtonTestActivity"
+            android:configChanges="orientation"
+			android:screenOrientation="portrait"/>
+        
+        <activity
+            android:label="Ping Pong Delay"
+            android:name=".tests.PingPongDelayActivity"
+            android:configChanges="orientation"
+			android:screenOrientation="portrait"/>
+        
+         <activity
+            android:label="@string/haiku_name"
+            android:name=".tests.CsoundHaikuIVActivity"
+            android:configChanges="orientation"
+			android:screenOrientation="portrait"/>
+         
+          <activity
+            android:label="Harmonizer"
+            android:name=".tests.HarmonizerActivity"
+            android:configChanges="orientation"
+			android:screenOrientation="portrait"/>
+          
+          <activity
+            android:label="Accelerometer"
+            android:name=".tests.AccelerometerActivity"
+            android:configChanges="orientation"
+			android:screenOrientation="portrait"/>
+          
+          <activity
+            android:label="MultiTouch XY"
+            android:name=".tests.MultiTouchXYActivity"
+            android:configChanges="orientation"
+			android:screenOrientation="portrait"/>
+          
+          <activity
+            android:label="Waveview"
+            android:name=".examples.tests.WaveviewTestActivity"
+            android:configChanges="orientation"
+			android:screenOrientation="portrait"/>
+            
+    </application>
+    
+        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+        
+ <!-- MODIFY_AUDIO_SETTINGS is needed to use audio effects such as environmental reverb -->
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"></uses-permission>
+	<uses-permission android:name="android.permission.RECORD_AUDIO" />
+</manifest>
\ No newline at end of file
diff --git a/COPYING b/android/CsoundAndroidExamples/COPYING
similarity index 100%
copy from COPYING
copy to android/CsoundAndroidExamples/COPYING
diff --git a/android/CsoundAndroidExamples/proguard-project.txt b/android/CsoundAndroidExamples/proguard-project.txt
new file mode 100644
index 0000000..f2fe155
--- /dev/null
+++ b/android/CsoundAndroidExamples/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
diff --git a/android/CsoundAndroidExamples/proguard.cfg b/android/CsoundAndroidExamples/proguard.cfg
new file mode 100644
index 0000000..b1cdf17
--- /dev/null
+++ b/android/CsoundAndroidExamples/proguard.cfg
@@ -0,0 +1,40 @@
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontpreverify
+-verbose
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class com.android.vending.licensing.ILicensingService
+
+-keepclasseswithmembernames class * {
+    native <methods>;
+}
+
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembers class * {
+    public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclassmembers class * extends android.app.Activity {
+   public void *(android.view.View);
+}
+
+-keepclassmembers enum * {
+    public static **[] values();
+    public static ** valueOf(java.lang.String);
+}
+
+-keep class * implements android.os.Parcelable {
+  public static final android.os.Parcelable$Creator *;
+}
diff --git a/android/CsoundAndroidExamples/project.properties b/android/CsoundAndroidExamples/project.properties
new file mode 100644
index 0000000..2c31c9b
--- /dev/null
+++ b/android/CsoundAndroidExamples/project.properties
@@ -0,0 +1,15 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-9
+android.library.reference.1=../CsoundAndroid
diff --git a/android/CsoundAndroidExamples/res/drawable-hdpi/ic_launcher.png b/android/CsoundAndroidExamples/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..96a442e
Binary files /dev/null and b/android/CsoundAndroidExamples/res/drawable-hdpi/ic_launcher.png differ
diff --git a/android/CsoundAndroidExamples/res/drawable-ldpi/ic_launcher.png b/android/CsoundAndroidExamples/res/drawable-ldpi/ic_launcher.png
new file mode 100644
index 0000000..9923872
Binary files /dev/null and b/android/CsoundAndroidExamples/res/drawable-ldpi/ic_launcher.png differ
diff --git a/android/CsoundAndroidExamples/res/drawable-mdpi/ic_launcher.png b/android/CsoundAndroidExamples/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..359047d
Binary files /dev/null and b/android/CsoundAndroidExamples/res/drawable-mdpi/ic_launcher.png differ
diff --git a/android/CsoundAndroidExamples/res/drawable-xhdpi/ic_launcher.png b/android/CsoundAndroidExamples/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..71c6d76
Binary files /dev/null and b/android/CsoundAndroidExamples/res/drawable-xhdpi/ic_launcher.png differ
diff --git a/android/CsoundAndroidExamples/res/layout/accelerometer_test.xml b/android/CsoundAndroidExamples/res/layout/accelerometer_test.xml
new file mode 100644
index 0000000..bbae0c3
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/layout/accelerometer_test.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+    <ToggleButton
+        android:id="@+id/onOffButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:text="ToggleButton" />
+
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/android/CsoundAndroidExamples/res/layout/button_test.xml b/android/CsoundAndroidExamples/res/layout/button_test.xml
new file mode 100644
index 0000000..3d2a105
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/layout/button_test.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+    <ToggleButton
+        android:id="@+id/onOffButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:text="ToggleButton" />
+
+    <Button
+        android:id="@+id/valueButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"
+        android:layout_below="@+id/onOffButton"
+        android:text="Value Button" />
+
+    <Button
+        android:id="@+id/eventButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"
+        android:layout_below="@+id/valueButton"
+        android:text="Event Button" />
+
+    <TextView
+        android:id="@+id/TextView01"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/eventButton"
+        android:padding="5dp"
+        android:text="Duration"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+    <SeekBar
+        android:id="@+id/durationSlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_toRightOf="@+id/TextView01"
+        android:layout_alignParentRight="true"
+        android:layout_alignTop="@+id/TextView01"
+        android:padding="5dp" />
+
+    <TextView
+        android:id="@+id/textView2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"
+        android:layout_below="@+id/durationSlider"
+        android:padding="5dp"
+        android:text="ADSR"
+        android:textAppearance="?android:attr/textAppearanceLarge" />
+
+    <SeekBar
+        android:id="@+id/attackSlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/textView2"
+        android:padding="5dp" />
+
+    <SeekBar
+        android:id="@+id/decaySlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/attackSlider"
+        android:padding="5dp" />
+
+    <SeekBar
+        android:id="@+id/sustainSlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/decaySlider"
+        android:padding="5dp" />
+
+    <SeekBar
+        android:id="@+id/releaseSlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/sustainSlider"
+        android:padding="5dp" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/android/CsoundAndroidExamples/res/layout/csound_haiku_iv.xml b/android/CsoundAndroidExamples/res/layout/csound_haiku_iv.xml
new file mode 100644
index 0000000..3988980
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/layout/csound_haiku_iv.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical" >
+
+    <TextView
+        android:id="@+id/textView1"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.29"
+        android:text="Csound Haiku IV"
+        android:textAppearance="?android:attr/textAppearanceLarge" android:gravity="center"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/android/CsoundAndroidExamples/res/layout/harmonizer.xml b/android/CsoundAndroidExamples/res/layout/harmonizer.xml
new file mode 100644
index 0000000..98cca64
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/layout/harmonizer.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+    <ToggleButton
+        android:id="@+id/onOffButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:text="ToggleButton" />
+   
+    <TextView
+        android:id="@+id/harmony_pitch_label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.29"
+        android:text="Harmony Pitch"
+        android:layout_below="@+id/onOffButton"
+        />
+    
+    
+    <SeekBar
+        android:id="@+id/harmony_pitch_slider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/harmony_pitch_label"
+        android:padding="5dp" />
+
+    
+     <TextView
+        android:id="@+id/gain_label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.29"
+        android:text="Gain"
+        android:layout_below="@+id/harmony_pitch_slider"
+        />
+    
+    
+    <SeekBar
+        android:id="@+id/gain_slider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/gain_label"
+        android:padding="5dp" />
+    
+</RelativeLayout>
\ No newline at end of file
diff --git a/android/CsoundAndroidExamples/res/layout/main.xml b/android/CsoundAndroidExamples/res/layout/main.xml
new file mode 100644
index 0000000..8a18334
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/layout/main.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ListView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+     android:id="@+id/list_view">
+
+    
+
+</ListView>
\ No newline at end of file
diff --git a/android/CsoundAndroidExamples/res/layout/ping_pong_delay.xml b/android/CsoundAndroidExamples/res/layout/ping_pong_delay.xml
new file mode 100644
index 0000000..a7e988e
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/layout/ping_pong_delay.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+    <ToggleButton
+        android:id="@+id/onOffButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:text="ToggleButton" />
+    
+    <TextView
+        android:id="@+id/left_channel_label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.29"
+        android:text="Left Channel"
+        android:layout_below="@+id/onOffButton"
+        android:textAppearance="?android:attr/textAppearanceMedium" android:gravity="center"/>
+
+    <TextView
+        android:id="@+id/left_delay_label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.29"
+        android:text="Delay"
+        android:layout_below="@+id/left_channel_label"
+        />
+    
+    
+    <SeekBar
+        android:id="@+id/left_delay_slider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/left_delay_label"
+        android:padding="5dp" />
+
+    
+     <TextView
+        android:id="@+id/left_feedback_label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.29"
+        android:text="Feedback"
+        android:layout_below="@+id/left_delay_slider"
+        />
+    
+    
+    <SeekBar
+        android:id="@+id/left_feedback_slider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/left_feedback_label"
+        android:padding="5dp" />
+    
+    
+      <TextView
+        android:id="@+id/right_channel_label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.29"
+        android:text="Right Channel"
+        android:layout_below="@+id/left_feedback_slider"
+        android:textAppearance="?android:attr/textAppearanceMedium" android:gravity="center"/>
+    
+    <TextView
+        android:id="@+id/right_delay_label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.29"
+        android:text="Delay"
+        android:layout_below="@+id/right_channel_label"
+        />
+    
+
+    <SeekBar
+        android:id="@+id/right_delay_slider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/right_delay_label"
+        android:padding="5dp" />
+
+    
+    <TextView
+        android:id="@+id/right_feedback_label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0.29"
+        android:text="Feedback"
+        android:layout_below="@+id/right_delay_slider"
+        />
+      
+    <SeekBar
+        android:id="@+id/right_feedback_slider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/right_feedback_label"
+        android:padding="5dp" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/android/CsoundAndroidExamples/res/layout/simple_test_1.xml b/android/CsoundAndroidExamples/res/layout/simple_test_1.xml
new file mode 100644
index 0000000..7094db0
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/layout/simple_test_1.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical" >
+
+    <ToggleButton
+        android:id="@+id/onOffButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="ToggleButton" />
+
+    <SeekBar
+        android:id="@+id/slider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/android/CsoundAndroidExamples/res/layout/simple_test_2.xml b/android/CsoundAndroidExamples/res/layout/simple_test_2.xml
new file mode 100644
index 0000000..d36818a
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/layout/simple_test_2.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+    <ToggleButton
+        android:id="@+id/onOffButton"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentTop="true"
+        android:text="ToggleButton" />
+
+    <TextView
+        android:id="@+id/textView1"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/onOffButton"
+        android:text="Note Rate" android:padding="5dp" android:textAppearance="?android:attr/textAppearanceMedium"/>
+
+    <TextView
+        android:id="@+id/TextView01"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/textView1"
+        android:text="Duration"
+        android:padding="5dp" android:textAppearance="?android:attr/textAppearanceMedium"/>
+
+    <SeekBar
+        android:id="@+id/noteRateSlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignTop="@+id/textView1"
+        android:layout_toRightOf="@+id/textView1" android:padding="5dp"/>
+
+    <SeekBar
+        android:id="@+id/durationSlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignLeft="@+id/noteRateSlider"
+        android:layout_alignParentRight="true"
+        android:layout_alignTop="@+id/TextView01"
+        android:padding="5dp" />
+
+    <TextView
+        android:id="@+id/textView2"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentRight="true"
+        android:layout_below="@+id/durationSlider"
+        android:text="ADSR"
+        android:textAppearance="?android:attr/textAppearanceLarge" android:padding="5dp"/>
+
+    <SeekBar
+        android:id="@+id/attackSlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/textView2" android:padding="5dp"/>
+
+    <SeekBar
+        android:id="@+id/decaySlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/attackSlider" android:padding="5dp"/>
+
+    <SeekBar
+        android:id="@+id/sustainSlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/decaySlider" android:padding="5dp"/>
+
+    <SeekBar
+        android:id="@+id/releaseSlider"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentLeft="true"
+        android:layout_below="@+id/sustainSlider" android:padding="5dp"/>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/android/CsoundAndroidExamples/res/raw/button_test.csd b/android/CsoundAndroidExamples/res/raw/button_test.csd
new file mode 100644
index 0000000..d1e77ef
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/raw/button_test.csd
@@ -0,0 +1,56 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtaudio=null -d -+msg_color=0 -m0
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+seed 0
+
+instr 1
+
+ktrigger chnget "button1" 
+knotedur chnget "duration" 
+
+if(ktrigger > 0) then
+    event "i", 2, 0, knotedur
+endif
+
+endin
+
+instr 2
+
+print p3
+
+iattack chnget "attack" 
+idecay chnget "decay" 
+isustain chnget "sustain" 
+irelease chnget "release" 
+
+
+;ipchMul rnd31 .5, -0.5
+;ipchMul = ipchMul + .5
+;ipch = 100 + (1000 * ipchMul)
+ipch = 100 + rnd(1000)
+
+;print iattack
+;print idecay
+;print isustain
+;print irelease
+
+a2 linsegr 0, iattack, 1, idecay, isustain, irelease, 0
+a1 oscili a2 * .25, ipch, 1
+outs a1,a1
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i1 0 3600
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/android/CsoundAndroidExamples/res/raw/hardware_test.csd b/android/CsoundAndroidExamples/res/raw/hardware_test.csd
new file mode 100644
index 0000000..13ad1c0
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/raw/hardware_test.csd
@@ -0,0 +1,50 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+instr 1
+
+kaccelX chnget "accelerometerX" 
+kaccelY chnget "accelerometerY" 
+kaccelZ chnget "accelerometerZ" 
+
+;kgyroX chnget "gyroX" 
+;kgyroY chnget "gyroY" 
+;kgyroZ chnget "gyroZ" 
+
+;kattRoll chnget "attitudeRoll" 
+;kattPitch chnget "attitudePitch" 
+;kattYaw chnget "attitudeYaw" 
+kaccelX port kaccelX*1000, 0.01
+kaccelY port kaccelY*1000, 0.01
+kaccelZ port kaccelZ*1000, 0.01
+
+kcutoff = 5000 + (4000 * kaccelX)
+kresonance = .3 + (.6  * kaccelY)
+kpch = 880 + kaccelX * 220
+
+a1 vco2 (kaccelZ + .5) * 0.2, kpch
+
+a1 moogladder a1, kcutoff, kresonance
+
+aL, aR reverbsc a1, a1, .72, 5000
+
+out aL, aR
+
+
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i1 0 360000
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/android/CsoundAndroidExamples/res/raw/harmonizer.csd b/android/CsoundAndroidExamples/res/raw/harmonizer.csd
new file mode 100644
index 0000000..f3b574c
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/raw/harmonizer.csd
@@ -0,0 +1,34 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtaudio=null -dm0 -i adc
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 22050
+
+instr 3
+
+asig,asig1 ins
+
+ksl chnget "slider"
+kgain chnget "gain"
+fsig1 pvsanal asig,2048,256,2048,1
+fsig2 pvscale fsig1,0.75+ksl,1
+fsig3 pvscale fsig1,(0.75+ksl)*1.25,1
+fsig4 pvsmix fsig2, fsig3
+a1 pvsynth fsig4 
+
+a1 = a1 * kgain
+   outs a1,a1
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i3 0.1 10000
+
+</CsScore>
+</CsoundSynthesizer>
diff --git a/android/CsoundAndroidExamples/res/raw/iv.csd b/android/CsoundAndroidExamples/res/raw/iv.csd
new file mode 100644
index 0000000..ebb08eb
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/raw/iv.csd
@@ -0,0 +1,87 @@
+Csound Haiku - IV
+Iain McCurdy, 2011.
+
+<CsoundSynthesizer>
+
+<CsOptions>
+-odac -dm0 -+rtmidi=null -+rtaudio=null -+msg_color=0
+</CsOptions>
+
+<CsInstruments>
+sr 		= 		44100
+ksmps 		= 	        64	
+nchnls 		= 		2
+0dbfs 		= 		1
+
+gisine		ftgen		0, 0, 4096, 10, 1
+gioctfn		ftgen		0, 0, 4096, -19, 1, 0.5, 270, 0.5
+gasendL		init		0
+gasendR		init		0
+ginotes		ftgen		0, 0, -100, -17, 0, 8.00, 10, 8.03, 15, 8.04, 25, 8.05, 50, 8.07, 60, 8.08, 73, 8.09, 82, 8.11
+		seed		0
+;		alwayson	"trigger_notes"
+;		alwayson	"reverb"
+
+		instr		trigger_notes
+krate		rspline		0.04, 0.15, 0.05, 0.1
+ktrig		metro		krate
+gktrans		init		0
+gktrans		trandom		ktrig,-1, 1
+gktrans		=		semitone(gktrans)
+idur		=		15
+		schedkwhen	ktrig, 0, 0, "hboscil_note", rnd(2), idur
+		schedkwhen	ktrig, 0, 0, "hboscil_note", rnd(2), idur
+		schedkwhen	ktrig, 0, 0, "hboscil_note", rnd(2), idur
+		schedkwhen	ktrig, 0, 0, "hboscil_note", rnd(2), idur
+		endin
+
+		instr		hboscil_note
+ipch		table		int(rnd(100)),ginotes
+icps		=		cpspch(ipch)*i(gktrans)*semitone(rnd(0.5)-0.25)
+kamp		expseg		0.001,0.02,0.2,p3-0.01,0.001
+ktonemoddep	jspline		0.01,0.05,0.2
+ktonemodrte	jspline		6,0.1,0.2
+ktone		oscil		ktonemoddep,ktonemodrte,gisine
+kbrite		rspline		-2,3,0.0002,3
+ibasfreq	init		icps
+ioctcnt		init		2
+iphs		init		0
+a1 		hsboscil 	kamp, ktone, kbrite, ibasfreq, gisine, gioctfn, ioctcnt, iphs	
+amod		oscil		1, ibasfreq*3.47, gisine
+arm		=		a1*amod
+kmix		expseg		0.001, 0.01, rnd(1), rnd(3)+0.3, 0.001
+a1		ntrpol		a1, arm, kmix
+a1 		pareq 		a1/10, 400, 15, .707
+a1		tone		a1, 500
+kpanrte		jspline		5, 0.05, 0.1
+kpandep		jspline		0.9, 0.2, 0.4
+kpan		oscil		kpandep, kpanrte, gisine
+a1,a2		pan2		a1, kpan
+a1		delay		a1, rnd(0.1)
+a2		delay		a2, rnd(0.1)
+kenv		linsegr		1, 1, 0
+a1		=		a1*kenv
+a2		=		a2*kenv
+		outs		a1, a2
+gasendL		=		gasendL+a1/5
+gasendR		=		gasendR+a2/5
+		endin
+
+		instr		reverb
+aL, aR		reverbsc	gasendL, gasendR, 0.9, 10000
+		outs		aL, aR
+		clear		gasendL, gasendR
+		endin
+
+</CsInstruments>
+
+<CsScore>
+f 0 3600
+i "trigger_notes" 0 3600
+i "reverb" 0 3600
+
+
+e
+</CsScore>
+
+</CsoundSynthesizer>
diff --git a/android/CsoundAndroidExamples/res/raw/multitouch_xy.csd b/android/CsoundAndroidExamples/res/raw/multitouch_xy.csd
new file mode 100644
index 0000000..73d6cac
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/raw/multitouch_xy.csd
@@ -0,0 +1,56 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+ga1 init 0
+
+instr 1
+itie tival
+i_instanceNum = p4
+S_xName sprintf "touch.%d.x", i_instanceNum
+S_yName sprintf "touch.%d.y", i_instanceNum
+
+kx chnget S_xName
+ky chnget S_yName
+
+kenv linsegr 0, .01, 1, .1, 1, .25, 0
+a1 vco2 ky * .5 * kenv, 60 + (log(1 - kx) * 3000), 0
+
+ga1 = ga1 + a1
+
+endin
+
+instr 2
+
+;kcutoff chnget "cutoff"
+;kresonance chnget "resonance"
+
+kcutoff = 6000
+kresonance = .2
+
+
+a1 moogladder ga1, kcutoff, kresonance
+
+aL, aR reverbsc a1, a1, .72, 5000
+
+outs aL, aR
+
+ga1 = 0
+
+endin
+
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i2 0 360000
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/android/CsoundAndroidExamples/res/raw/ping_pong_delay.csd b/android/CsoundAndroidExamples/res/raw/ping_pong_delay.csd
new file mode 100644
index 0000000..dd719f9
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/raw/ping_pong_delay.csd
@@ -0,0 +1,34 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0 -i adc
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+instr 1
+
+kldelay     chnget "leftDelayTime"
+klfeedback  chnget "leftFeedback"
+krdelay     chnget "rightDelayTime"
+krfeedback  chnget "rightFeedback"
+
+asig,asig1 ins
+a1 init 0
+a2 init 0
+a1 vdelay3 asig+a2*klfeedback, kldelay, 3000
+a2 vdelay3 asig+a1*krfeedback, krdelay, 3000
+outs a2,a1
+
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i1 0 360000
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/android/CsoundAndroidExamples/res/raw/test.csd b/android/CsoundAndroidExamples/res/raw/test.csd
new file mode 100644
index 0000000..b700bc0
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/raw/test.csd
@@ -0,0 +1,31 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtaudio=null -d
+</CsOptions>
+<CsInstruments>
+nchnls=1
+0dbfs=1
+ksmps=64
+sr = 44100
+
+instr 1
+
+isl chnget "slider" 
+ksl chnget "slider" 
+ksl port ksl, 0.01, isl 
+a2 expsegr 0.001,0.01,p4,p3-0.01, 0.001, 0.1, 0.001
+a1 oscili a2, p5*(1+ksl), 1
+out a1
+endin
+
+
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+{ 10 CNT
+i1 [$CNT*0.2] 0.5 0.5 [440*(2^[$CNT/12])]
+}
+
+</CsScore>
+</CsoundSynthesizer>
diff --git a/android/CsoundAndroidExamples/res/raw/test2.csd b/android/CsoundAndroidExamples/res/raw/test2.csd
new file mode 100644
index 0000000..9c26e55
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/raw/test2.csd
@@ -0,0 +1,60 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtaudio=null -d -+msg_color=0 -m0
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+seed 0
+
+instr 1
+
+inoterate chnget "noteRate" 
+inotedur chnget "duration" 
+
+;print inoterate
+;print inotedur
+
+event_i "i", 1, inoterate, 1
+event_i "i", 2, 0, inotedur
+
+turnoff
+
+endin
+
+instr 2
+
+iattack chnget "attack" 
+idecay chnget "decay" 
+isustain chnget "sustain" 
+irelease chnget "release" 
+
+
+;ipchMul rnd31 .5, -0.5
+;ipchMul = ipchMul + .5
+;ipch = 100 + (1000 * ipchMul)
+ipch = 100 + rnd(1000)
+
+;print iattack
+;print idecay
+;print isustain
+;print irelease
+
+a2 linsegr 0, iattack, 1, idecay, isustain, irelease, 0
+a1 oscili a2 * .3, ipch, 1
+outs a1,a1
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i1 0 1
+
+f 0 3600
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/android/CsoundAndroidExamples/res/raw/trapped.csd b/android/CsoundAndroidExamples/res/raw/trapped.csd
new file mode 100644
index 0000000..37edce7
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/raw/trapped.csd
@@ -0,0 +1,745 @@
+<CsoundSynthesizer>
+<CsOptions>
+-odac -dm0 -+rtmidi=null -+rtaudio=null -+msg_color=0
+</CsOptions>
+<CsInstruments>
+;============================================================================;
+;============================================================================;
+;============================================================================;
+;                            == TRAPPED IN CONVERT ==                        ;
+;                                Richard Boulanger                           ;
+;============================================================================;
+;============================================================================;
+;                                   ORCHESTRA                                ;
+;============================================================================;
+;============================================================================;
+;============================================================================;
+;                            written July 1979 in music11                    ;
+;                          M.I.T. Experimental Music Studio                  ;
+;                            revised June 1986 in Csound                     ;
+;                                M.I.T. Media Lab                            ;
+;                          revised July 1996 in SHARCsound                   ;
+;                                Analog Devices Inc.                         ;
+;============================================================================;
+;============================================================================;
+;=================================== HEADER =================================;
+;============================================================================;
+sr     =        44100
+;kr     =        4410
+ksmps  =        64 
+nchnls =        2
+;============================================================================;
+;=============================== INITIALIZATION =============================;
+;============================================================================;
+garvb  init     0
+gadel  init     0
+;============================================================================;
+;================================== INSTRUMENTS =============================;
+;============================================================================;
+;==================================== IVORY =================================;
+;============================================================================;
+       instr    1                            ; p6 = amp
+ifreq  =        cpspch(p5)                   ; p7 = vib rate
+                                             ; p8 = glis. del time (default < 1)
+aglis  expseg   1, p8, 1, p3 - p8, p9        ; p9 = freq drop factor
+
+k1     line     0, p3, 5
+k2     oscil    k1, p7, 1
+k3     linseg   0, p3 * .7, p6, p3 * .3, 0
+a1     oscil    k3, (ifreq + k2) * aglis, 1
+
+k4     linseg   0, p3 * .6, 6, p3 * .4, 0
+k5     oscil    k4, p7 * .9, 1, 1.4
+k6     linseg   0, p3 * .9, p6, p3 * .1, 0
+a3     oscil    k6, ((ifreq + .009) + k5) * aglis, 9, .2
+
+k7     linseg   9, p3 * .7, 1, p3 * .3, 1
+k8     oscil    k7, p7 * 1.2, 1, .7
+k9     linen    p6, p3 * .5, p3, p3 * .333
+a5     oscil    k9, ((ifreq + .007) + k8) * aglis, 10, .3
+
+k10    expseg   1, p3 * .99, 3.1, p3 * .01, 3.1
+k11    oscil    k10, p7 * .97, 1, .6
+k12    expseg   .001, p3 * .8, p6, p3 * .2, .001
+a7     oscil    k12,((ifreq + .005) + k11) * aglis, 11, .5
+
+k13    expseg   1, p3 * .4, 3, p3 * .6, .02
+k14    oscil    k13, p7 * .99, 1, .4
+k15    expseg   .001, p3 *.5, p6, p3 *.1, p6 *.6, p3 *.2, p6 *.97, p3 *.2, .001
+a9     oscil    k15, ((ifreq + .003) + k14) * aglis, 12, .8
+
+k16    expseg   4, p3 * .91, 1, p3 * .09, 1
+k17    oscil    k16, p7 * 1.4, 1, .2
+k18    expseg   .001, p3 *.6, p6, p3 *.2, p6 *.8, p3 *.1, p6 *.98, p3 *.1, .001
+a11    oscil    k18, ((ifreq + .001) + k17) * aglis, 13, 1.3
+
+       outs     a1 + a3 + a5, a7 + a9 + a11
+       endin
+;============================================================================;
+;==================================== BLUE ==================================;
+;============================================================================;
+       instr 2                               ; p6 = amp
+ifreq  =        cpspch(p5)                   ; p7 = reverb send factor
+                                             ; p8 = lfo freq
+k1     randi    1, 30                        ; p9 = number of harmonic
+k2     linseg   0, p3 * .5, 1, p3 * .5, 0    ; p10 = sweep rate
+k3     linseg   .005, p3 * .71, .015, p3 * .29, .01
+k4     oscil    k2, p8, 1,.2
+k5     =        k4 + 2
+
+ksweep linseg   p9, p3 * p10, 1, p3 * (p3 - (p3 * p10)), 1
+
+kenv   expseg   .001, p3 * .01, p6, p3 * .99, .001
+asig   gbuzz    kenv, ifreq + k3, k5, ksweep, k1, 15
+
+       outs     asig, asig
+garvb  =        garvb + (asig * p7)
+       endin
+;============================================================================;
+;================================== VIOLET ==================================;
+;============================================================================;
+       instr   3                             ; p6 = amp
+ifreq  =       cpspch(p5)                    ; p7 = reverb send factor
+                                             ; p8 = rand freq
+k3     expseg  1, p3 * .5, 30 ,p3 * .5, 2
+k4     expseg  10, p3 *.7, p8, p3 *.3, 6
+k8     linen   p6, p3 * .333, p3, p3 * .333
+k13    line    0, p3, -1
+
+k14    randh   k3, k4, .5
+a1     oscil   k8, ifreq + (p5 * .05) + k14 + k13, 1, .1
+
+k1     expseg  1, p3 * .8, 6, p3 *.2, 1
+k6     linseg  .4, p3 * .9, p8 * .96, p3 * .1, 0
+k7     linseg  8, p3 * .2, 10, p3 * .76, 2
+
+kenv2  expseg  .001, p3 * .4, p6 * .99, p3 * .6, .0001
+k15    randh   k6, k7
+a2     buzz    kenv2, ifreq + (p5 * .009) + k15 + k13, k1, 1, .2
+
+kenv1  linen   p6, p3 * .25, p3, p3 * .4
+k16    randh   k4 * 1.4, k7 * 2.1, .2
+a3     oscil   kenv1, ifreq + (p5 * .1) + k16 + k13, 16, .3
+
+amix   =       a1 + a2 + a3
+       outs    a1 + a3, a2 + a3
+garvb  =       garvb + (amix * p7)
+       endin
+;============================================================================;
+;==================================== BLACK =================================;
+;============================================================================;
+       instr   4                             ; p6 = amp
+ifreq  =       cpspch(p5)                    ; p7 = filtersweep strtfreq
+                                             ; p8 = filtersweep endfreq
+k1     expon   p7, p3, p8                    ; p9 = bandwidth
+anoise rand    8000                          ; p10 = reverb send factor
+a1     reson   anoise, k1, k1 / p9, 1
+k2     oscil   .6, 11.3, 1, .1
+k3     expseg  .001,p3 * .001, p6, p3 * .999, .001
+a2     oscil   k3, ifreq + k2, 15
+
+       outs   (a1 * .8) + a2, (a1 * .6) + (a2 * .7)
+garvb  =      garvb + (a2 * p10)
+       endin
+;============================================================================;
+;==================================== GREEN =================================;
+;============================================================================;
+        instr  5                             ; p6 = amp
+ifreq   =      cpspch(p5)                    ; p7 = reverb send factor
+                                             ; p8 = pan direction
+k1     line    p9, p3, 1                     ; ... (1.0 = L -> R, 0.1 = R -> L)
+k2     line    1, p3, p10                    ; p9 = carrier freq
+k4     expon   2, p3, p12                    ; p10 = modulator freq
+k5     linseg  0, p3 * .8, 8, p3 * .2, 8     ; p11 = modulation index
+k7     randh   p11, k4                       ; p12 = rand freq
+k6     oscil   k4, k5, 1, .3
+
+kenv1  linen   p6, .03, p3, .2
+a1     foscil  kenv1, ifreq + k6, k1, k2, k7, 1
+
+kenv2  linen   p6, .1, p3, .1
+a2     oscil   kenv2, ifreq * 1.001, 1
+
+amix   =       a1 + a2
+kpan   linseg  int(p8), p3 * .7, frac(p8), p3 * .3, int(p8)
+       outs    amix * kpan, amix * (1 - kpan)
+garvb  =       garvb + (amix * p7)
+       endin
+;============================================================================;
+;================================== COPPER ==================================;
+;============================================================================;
+        instr  6                             ; p5 = FilterSweep StartFreq
+ifuncl  =      8                             ; p6 = FilterSweep EndFreq
+                                             ; p7 = bandwidth
+k1      phasor p4                            ; p8 = reverb send factor
+k2      table  k1 * ifuncl, 19               ; p9 = amp
+anoise  rand   8000
+k3      expon  p5, p3, p6
+a1      reson  anoise, k3 * k2, k3 / p7, 1
+
+kenv    linen  p9, .01, p3, .05
+asig    =      a1 * kenv
+
+        outs   asig, asig
+garvb   =      garvb + (asig * p8)
+        endin
+;============================================================================;
+;==================================== PEWTER ================================;
+;============================================================================;
+       instr   7                             ; p4 = amp
+ifuncl =       512                           ; p5 = freq
+ifreq  =       cpspch(p5)                    ; p6 = begin phase point
+                                             ; p7 = end phase point
+a1     oscil   1, ifreq, p10                 ; p8 = ctrl osc amp (.1 -> 1)
+k1     linseg  p6, p3 * .5, p7, p3 * .5, p6  ; p9 = ctrl osc func
+a3     oscili  p8, ifreq + k1, p9            ; p10 = main osc func (f2 or f3)
+a4     phasor  ifreq                         ; ...(function length must be 512!)
+a5     table   (a4 + a3) * ifuncl, p10       ; p11 = reverb send factor
+
+kenv   linen   p4, p3 * .4, p3, p3 * .5
+asig   =       kenv * ((a1 + a5) * .2)
+
+       outs    asig, asig
+garvb  =       garvb + (asig * p11)
+       endin
+;============================================================================;
+;==================================== RED ===================================;
+;============================================================================;
+       instr   8                             ; p4 = amp
+ifuncl =       16                            ; p5 = FilterSweep StartFreq
+                                             ; p6 = FilterSweep EndFreq
+k1     expon   p5, p3, p6                    ; p7 = bandwidth
+k2     line    p8, p3, p8 * .93              ; p8 = cps of rand1
+k3     phasor  k2                            ; p9 = cps of rand2
+k4     table   k3 * ifuncl, 20               ; p10 = reverb send factor
+anoise rand    8000
+aflt1  reson   anoise, k1, 20 + (k4 * k1 / p7), 1
+
+k5     linseg  p6 * .9, p3 * .8, p5 * 1.4, p3 * .2, p5 * 1.4
+k6     expon   p9 * .97, p3, p9
+k7     phasor  k6
+k8     tablei  k7 * ifuncl, 21
+aflt2  reson   anoise, k5, 30 + (k8 * k5 / p7 * .9), 1
+
+abal   oscil   1000, 1000, 1
+a3     balance aflt1, abal
+a5     balance aflt2, abal
+
+k11    linen   p4, .15, p3, .5
+a3     =       a3 * k11
+a5     =       a5 * k11
+
+k9     randh   1, k2
+aleft  =       ((a3 * k9) * .7) + ((a5 * k9) * .3)
+k10    randh   1, k6
+aright =       ((a3 * k10) * .3)+((a5 * k10) * .7)
+       outs    aleft, aright
+garvb  =       garvb + (a3 * p10)
+endin
+;============================================================================;
+;==================================== SAND ==================================;
+;============================================================================;
+        instr  9                             ; p4 = delay send factor
+ifreq   =      cpspch(p5)                    ; p5 = freq
+                                             ; p6 = amp
+k2      randh  p8, p9, .1                    ; p7 = reverb send factor
+k3      randh  p8 * .98, p9 * .91, .2        ; p8 = rand amp
+k4      randh  p8 * 1.2, p9 * .96, .3        ; p9 = rand freq
+k5      randh  p8 * .9, p9 * 1.3
+
+kenv    linen  p6, p3 *.1, p3, p3 * .8
+
+a1      oscil  kenv, ifreq + k2, 1, .2
+a2      oscil  kenv * .91, (ifreq + .004) + k3, 2, .3
+a3      oscil  kenv * .85, (ifreq + .006) + k4, 3, .5
+a4      oscil  kenv * .95, (ifreq + .009) + k5, 4, .8
+
+amix    =      a1 + a2 + a3 + a4
+
+        outs   a1 + a3, a2 + a4
+garvb   =      garvb + (amix * p7)
+gadel   =      gadel + (amix * p4)
+        endin
+;============================================================================;
+;==================================== TAUPE =================================;
+;============================================================================;
+        instr  10
+ifreq   =      cpspch(p5)                    ; p5 = freq
+                                             ; p6 = amp
+k2      randh  p8, p9, .1                    ; p7 = reverb send factor
+k3      randh  p8 * .98, p9 * .91, .2        ; p8 = rand amp
+k4      randh  p8 * 1.2, p9 * .96, .3        ; p9 = rand freq
+k5      randh  p8 * .9, p9 * 1.3
+
+kenv    linen  p6, p3 *.1, p3, p3 * .8
+
+a1      oscil  kenv, ifreq + k2, 1, .2
+a2      oscil  kenv * .91, (ifreq + .004) + k3, 2, .3
+a3      oscil  kenv * .85, (ifreq + .006) + k4, 3, .5
+a4      oscil  kenv * .95, (ifreq + .009) + k5, 4, .8
+
+amix    =      a1 + a2 + a3 + a4
+
+        outs   a1 + a3, a2 + a4
+garvb   =      garvb + (amix * p7)
+        endin
+;============================================================================;
+;==================================== RUST ==================================;
+;============================================================================;
+       instr   11                            ; p4 = delay send factor
+ifreq  =       cpspch(p5)                    ; p5 = freq
+                                             ; p6 = amp
+k1     expseg  1, p3 * .5, 40, p3 * .5, 2    ; p7 = reverb send factor
+k2     expseg  10, p3 * .72, 35, p3 * .28, 6
+k3     linen   p6, p3* .333, p3, p3 * .333
+k4     randh   k1, k2, .5
+a4     oscil   k3, ifreq + (p5 * .05) + k4, 1, .1
+
+k5     linseg  .4, p3 * .9, 26, p3 * .1, 0
+k6     linseg  8, p3 * .24, 20, p3 * .76, 2
+k7     linen   p6, p3 * .5, p3, p3 * .46
+k8     randh   k5, k6, .4
+a3     oscil   k7, ifreq + (p5 * .03) + k8, 14, .3
+
+k9     expseg  1, p3 * .7, 50, p3 * .3, 2
+k10    expseg  10, p3 * .3, 45, p3 * .7, 6
+k11    linen   p6, p3 * .25, p3, p3 * .25
+k12    randh   k9, k10, .5
+a2     oscil   k11, ifreq + (p5 * .02) + k12, 1, .1
+
+k13    linseg  .4, p3 * .6, 46, p3 * .4, 0
+k14    linseg  18, p3 * .1, 50, p3 * .9, 2
+k15    linen   p6, p3 * .2, p3, p3 * .3
+k16    randh   k13, k14, .8
+a1     oscil   k15, ifreq + (p5 * .01) + k16, 14, .3
+
+amix   =       a1 + a2 + a3 + a4
+       outs    a1 + a3, a2 + a4
+garvb  =       garvb + (amix * p7)
+gadel  =       gadel + (amix * p4)
+       endin
+;============================================================================;
+;==================================== TEAL ==================================;
+;============================================================================;
+       instr   12                            ; p6 = amp
+ifreq  =       octpch(p5)                    ; p7 = FilterSweep StartFreq
+ifuncl =       8                             ; p8 = FilterSweep PeakFreq
+                                             ; p9 = bandwdth
+k1     linseg  0, p3 * .8, 9, p3 * .2, 1     ; p10 = reverb send factor
+k2     phasor  k1
+k3     table   k2 * ifuncl, 22
+k4     expseg  p7, p3 * .7, p8, p3 * .3, p7 * .9
+
+anoise rand    8000
+
+aflt   reson   anoise, k4, k4 / p9, 1
+kenv1  expseg  .001, p3 *.1, p6, p3 *.1, p6 *.5, p3 *.3, p6 *.8, p3 *.5,.001
+a3     oscil   kenv1, cpsoct(ifreq + k3) + aflt * .8, 1
+
+       outs    a3,(a3 * .98) + (aflt * .3)
+garvb  =       garvb + (anoise * p10)
+       endin
+;============================================================================;
+;==================================== FOAM ==================================;
+;============================================================================;
+       instr   13                            ; p6 = amp
+ifreq  =       octpch(p5)                    ; p7 = vibrato rate
+                                             ; p8 = glis. factor
+k1     line    0, p3, p8
+k2     oscil   k1, p7, 1
+k3     linseg  0, p3 * .7, p6, p3 * .3, 1
+a1     oscil   k3, cpsoct(ifreq + k2), 1
+
+k4     linseg  0, p3 * .6, p8 * .995, p3 * .4, 0
+k5     oscil   k4, p7 * .9, 1, .1
+k6     linseg  0, p3 * .9, p6, p3 * .1, 3
+a2     oscil   k6, cpsoct((ifreq + .009) + k5), 4, .2
+
+k7     linseg  p8 * .985, p3 * .7, 0, p3 * .3, 0
+k8     oscil   k7, p7 * 1.2, 1, .7
+k9     linen   p6, p3 * .5, p3, p3 * .333
+a3     oscil   k6, cpsoct((ifreq + .007) + k8), 5, .5
+
+k10    expseg  1, p3 * .8, p8, p3 * .2, 4
+k11    oscil   k10, p7 * .97, 1, .6
+k12    expseg  .001, p3 * .99, p6 * .97, p3 * .01, p6 * .97
+a4     oscil   k12, cpsoct((ifreq + .005) + k11), 6, .8
+
+k13    expseg  .002, p3 * .91, p8 * .99, p3 * .09, p8 * .99
+k14    oscil   k13, p7 * .99, 1, .4
+k15    expseg  .001, p3 *.5, p6, p3 *.1, p6 *.6, p3 *.2, p6 *.97, p3 *.2, .001
+a5     oscil   k15, cpsoct((ifreq + .003) + k14), 7, .9
+
+k16    expseg  p8 * .98, p3 * .81, .003, p3 * .19, .003
+k17    oscil   k16, p7 * 1.4, 1, .2
+k18    expseg  .001, p3 *.6, p6, p3 *.2, p6 *.8, p3 *.1, p6 *.98, p3 *.1, .001
+a6     oscil   k18, cpsoct((ifreq + .001) + k17), 8, .1
+
+       outs    a1 + a3 + a5, a2 + a4 + a6
+       endin
+;============================================================================;
+;==================================== SMEAR =================================;
+;============================================================================;
+        instr  98
+asig    delay  gadel, .08
+        outs   asig, asig
+gadel   =      0
+        endin
+;============================================================================;
+;==================================== SWIRL =================================;
+;============================================================================;
+       instr   99                            ; p4 = panrate
+k1     oscil   .5, p4, 1
+k2     =       .5 + k1
+k3     =       1 - k2
+asig   reverb  garvb, 2.1
+       outs    asig * k2, (asig * k3) * (-1)
+garvb  =       0
+       endin
+;============================================================================;
+;============================================================================;
+;============================================================================;
+;============================================================================;
+instr 100
+  ;k0,1,k2 cpumeter 0.3
+  ;   printk2 k0
+  ;   printk2 k1, 10
+  ;   printk2 k2, 20
+endin
+
+</CsInstruments>
+<CsScore>
+;============================================================================;
+;============================================================================;
+;                            == TRAPPED IN CONVERT ==                        ;
+;                                Richard Boulanger                           ;
+;============================================================================;
+;============================================================================;
+;                                     SCORE                                  ;
+;============================================================================;
+;================================= PARAMETERS ===============================;
+;============================================================================;
+; i1:  p6=amp,p7=vibrat,p8=glisdeltime (default < 1),p9=frqdrop              ;
+; i2:  p6=amp,p7=rvbsnd,p8=lfofrq,p9=num of harmonics,p10=sweeprate          ;
+; i3:  p6=amp,p7=rvbsnd,p8=rndfrq                                            ;
+; i4:  p6=amp,p7=fltrswp:strtval,p8=fltrswp:endval,p9=bdwth,p10=rvbsnd       ;
+; i5:  p6=amp,p7=rvbatn,p8=pan:1.0,p9=carfrq,p10=modfrq,p11=modndx,p12=rndfrq;
+; i6:  p5=swpfrq:strt,p6=swpfrq:end,p7=bndwth,p8=rvbsnd,p9=amp               ;
+; i7:  p4=amp,p5=frq,p6=strtphse,p7=endphse,p8=ctrlamp(.1-1),p9=ctrlfnc      ;
+;             p10=audfnc(f2,f3,f14,p11=rvbsnd                                ;
+; i8:  p4=amp,p5=swpstrt,p6=swpend,p7=bndwt,p8=rnd1:cps,p9=rnd2:cps,p10=rvbsnd;
+; i9:  p4=delsnd,p5=frq,p6=amp,p7=rvbsnd,p8=rndamp,p9=rndfrq                 ;
+; i10: p4=0,p5=frq,p6=amp,p7=rvbsnd,p8=rndamp,p9=rndfrq                      ;
+; i11: p4=delsnd,p5=frq,p6=amp,p7=rvbsnd                                     ;
+; i12: p6=amp,p7=swpstrt,p8=swppeak,p9=bndwth,p10=rvbsnd                     ;
+; i13: p6=amp,p7=vibrat,p8=dropfrq                                           ;
+; i98: p2=strt,p3=dur                                                        ;
+; i99: p4=pancps                                                             ;
+;============================================================================;
+;========================= FUNCTIONS ========================================;
+;============================================================================;
+f1   0  8192  10   1
+f2   0  512   10   10  8   0   6   0   4   0   1
+f3   0  512   10   10  0   5   5   0   4   3   0   1
+f4   0  2048  10   10  0   9   0   0   8   0   7   0  4  0  2  0  1
+f5   0  2048  10   5   3   2   1   0
+f6   0  2048  10   8   10  7   4   3   1
+f7   0  2048  10   7   9   11  4   2   0   1   1
+f8   0  2048  10   0   0   0   0   7   0   0   0   0  2  0  0  0  1  1
+f9   0  2048  10   10  9   8   7   6   5   4   3   2  1
+f10  0  2048  10   10  0   9   0   8   0   7   0   6  0  5
+f11  0  2048  10   10  10  9   0   0   0   3   2   0  0  1
+f12  0  2048  10   10  0   0   0   5   0   0   0   0  0  3
+f13  0  2048  10   10  0   0   0   0   3   1
+f14  0  512   9    1   3   0   3   1   0   9  .333   180
+f15  0  8192  9    1   1   90
+f16  0  2048  9    1   3   0   3   1   0   6   1   0
+f17  0  9     5   .1   8   1
+f18  0  17    5   .1   10  1   6  .4
+f19  0  16    2    1   7   10  7   6   5   4   2   1   1  1  1  1  1  1  1
+f20  0  16   -2    0   30  40  45  50  40  30  20  10  5  4  3  2  1  0  0  0
+f21  0  16   -2    0   20  15  10  9   8   7   6   5   4  3  2  1  0  0
+f22  0  9    -2   .001 .004 .007 .003 .002 .005 .009 .006
+;============================================================================;
+;========================= SECTION I: 78 SECONDS  ===========================;
+;============================================================================;
+i1   0.0    24.12   0      11.057   200    0.001  17.8   0.99
+i1   1.0    21.76   0      11.049   240    0.001  10.2   0.99
+i1   3.6    17.13   0      11.082   390    0.001  11.3   0.99
+i1   6.2    15.02   0      11.075   460    0.001  10.5   0.99
+i1   8.4    13.85   0      11.069   680    0.001  13.8   0.99
+i99  22.0   7.5     5
+i2   22.0   4       0      9.029    600    0.6    23     10     0.52
+i2   22.13  4       0      9.01     600    0.5    20     6      0.66
+i1   26.5   5.6     0      12.019   500    4.0    5.8    0.98
+i1   26.51  6.1     0      12.004   550    5.0    5.5    0.98
+i1   26.52  5.4     0      12.026   600    5.2    5.6    0.98
+i1   26.55  5       0      12.031   660    4.5    5.7    0.98
+i99  31.3   0.7     22
+i4   31.3   1       0      13.045   2200   6000   7000   30     0.5
+i99  32.0   4       11
+i2   32.0   4       0      14.107   900    0.4    19     13     0.21
+i2   32.14  4       0      11.023   750    0.7    21     9      0.19
+i2   32.19  4       0      11.029   589    0.97   20     10     0.22
+i4   35.0   1       0      12.029   1000   4600   6500   33     0.6
+i99  36.0   10      7
+i3   36.0   7.6     0      13.087   800    0.8    57
+i1   39.31  8.1     0      10.024   519    3.0    3.1    0.002
+i1   39.32  8       0      10.031   520    5.1    3.7    0.001
+i1   39.35  7.9     0      10.042   557    3.4    3.5    0.003
+i1   39.37  7.86    0      10.050   547    4.2    3.3    0.004
+i99  46.0   7.3     2
+i5   46.0   0.9     0      4.09     3500   0.2    0.1    3      10   12  27
+i5   49.2   1.1     0      3.07     4500   0.1    1.0    5      3    16  30
+i99  53.3   9.6     5
+i6   53.3   8.5     0.81   3000     17     10     0.6    1.6
+i98  62.9   15.1
+i99  62.9   15.1    3
+i9   62.9   2.9     0.4    4.113    600    0.2    6.2    320
+i9   62.93  2.85    0.43   4.115    640    0.23   6.1    300
+i9   67.1   7.9     0.2    5.004    700    0.4    4.5    289
+i9   67.14  7.78    0.17   5.007    700    0.43   4.4    280
+;s   80
+i100 0 78
+s
+;============================================================================;
+;========================= SECTION II: 49 SECONDS ===========================;
+;============================================================================;
+i98  0      48.5
+i99  0      4.5     1
+i9   0      5       0.4    10.01    1200   0.2    28     39
+i9   0      5       0.3    9.119    1200   0.4    29     37
+i3   0.5    6.5     0      12.067   600    0.6    47
+i99  4.5    2       7
+i6   4.5    4.3     17     6000     9000   100    0.4    0.9
+i99  6.5    9.9     0.7
+i7   6.5    3.2     9999   5.023    0.2    0.7    0.6    2      3    0.12
+i7   8      1.9     9800   5.039    0.01   0.9    1      3      2    0.23
+i7   9      3.8     9900   10.001   0.99   0.1    0.3    3      2    0.12
+i3   9.1    5.5     0      10.017   900    0.5    67
+i7   9.2    2.5     9890   5.052    0.1    1.0    0.7    2      3    0.23
+i8   11     4.6     4      20       8000   590    2      9.9    0.6
+i8   15.5   3.1     3      50       4000   129    8      2.6    0.3
+i8   16.2   4.3     2      10000    9000   200    12     17.9   1
+i99  16.4   10.3    0.3
+i7   16.4   3.5     8000   5.019    0.2    0.7    0.5    2      3    0.1
+i7   19.3   6.4     8000   5.041    0.01   0.9    1      3      2    0.1
+i9   20.2   4       0.4    9.021    1000   0.2    4      100
+i9   21     4.2     0.4    9.099    1100   0.4    4      167
+i9   21.1   8       0.4    9.043    1000   0.6    4      210
+i9   21.25  5       0.4    9.062    1200   0.9    5      200
+i99  26.7   5.3     11
+i9   26.7   1.9     0.5    4.114    3100   0.1    5.9    300
+i9   29.1   2.1     0.1    5.013    2900   0.2    4.2    390
+i99  32     6.2     0.28
+i9   32     9.1     0.34   5.051    2300   0.5    3.8    420
+i9   32.1   9.0     0.4    5.0517   2500   0.4    4      430
+i2   34.2   5       0      9.029    1900   0.3    23     10     0.42
+i2   34.23  5       0      9.01     2100   0.2    20     6      0.29
+i2   36     5       0      13.027   3500   0.5    27     9      0.38
+i2   36.05  5       0      12.119   3399   0.1    21     3      0.30
+i2   36.12  5       0      13.018   3709   0.4    17     12     0.33
+i99  38.2   10.8    2
+i2   38.2   7.3     0      8.062    5900   0.4    19     13     0.26
+i2   38.4   7       0      7.077    4730   0.6    26     21     0.23
+i4   38.9   3.1     0      10.001   2600   2000   3000   46     0.3
+i4   39.7   2.3     0      9.0119   1200   1000   2000   50     0.2
+i100 0 49
+s
+;============================================================================;
+;========================= SECTION III: 56 SECONDS ==========================;
+;============================================================================;
+i98  0      42
+i99  0      42      0.0618
+i9   0      7       0.6    11.031   1100   0.2    30     40
+i9   0.1    7       0.2    11.042   1100   0.9    26     37
+i9   0.3    6.2     0.9    11.049   1105   0.1    32     29
+i9   0.6    5.8     0.4    11.021   1110   0.6    41     34
+i11  3.7    8       0.2    5.02     2200   0.2
+i13  7.0    4.5     0.4    11.064   1500   40.0   7
+i9   9.3    9       0.8    7.098    1300   0.3    33     27
+i9   9.8    7       0.2    7.087    1400   0.7    39     31
+i2   10.9   4       0.2    8.113    5000   0.9    45     20     1
+i11  12     5       0.2    4.101    3300   0.3
+i2   12.9   5       0.2    9.108    5900   0.4    59     14     0.6
+i8   15     4.7     2.5    8600     8900   900    13     11.1   0.7
+i11  17.9   7       0.4    4.091    3000   0.1
+i9   22     7       0.6    10.031   1000   0.2    30     40
+i9   22.1   7       0.2    10.042   1000   0.9    26     37
+i9   22.3   6.2     0.9    10.049   1005   0.1    32     29
+i9   22.6   5.8     0.4    10.021   1010   0.6    41     34
+i11  25.2   5.3     0.3    5.111    2500   0.2
+i11  26.9   5.1     0.2    4.093    2330   0.1
+i13  27.1   4       0.4    12.064   2000   40     7
+i13  28.9   4       0.4    11.117   2000   30.0   5
+i9   29.3   9       0.8    8.098    1000   0.3    33     27
+i9   30.8   7       0.2    8.087    1200   0.7    39     31
+i9   31.2   7.2     0.9    8.071    1400   0.9    29     40
+i2   32.9   5       0.9    8.113    5000   0.8    45     20     1
+i8   33.1   7       2      5000     6000   1000   17     15     0.3
+i2   33.3   6       0.9    7.097    5100   0.5    51     18     0.3
+i11  34     5       0.3    4.111    2000   0.5
+i8   34.5   6       2      3000     100    500    8.3    9.8    0.1
+i2   34.9   6       0.9    9.108    2900   0.4    59     14     0.4
+i2   35     5       0.9    8.042    2800   0.6    39     20     0.3
+i11  36.1   5       0.5    3.119    1200   0.4
+i11  36.8   7       0.2    5.118    1800   0.4
+i11  38     6       0.2    4.031    2000   0.2
+i11  39     4       0.3    6.003    1300   0.1
+i99  42     3.6     8.3
+i4   42     1       9.6    13.061   3000   8000   20     10     0.9
+i4   42     0.99    9.6    13.013   3110   6000   30     6      0.3
+i4   42     1.01    9.6    12.119   2999   10000  25     15     0.7
+i5   43     1.1     9.6    3.106    2500   0.4    1.0    8      3    17  34
+i5   43.1   1       9.6    4.034    2500   0.2    0.1    2      7    19  29
+i99  45.6   4.9     3.2
+i5   45.6   3       3.2    4.022    2300   0.3    1.0    11     4    20  37
+i5   46.1   2.4     3.2    3.049    2400   0.2    0.1    5      8    19  27
+i99  50.5   5.5     8.3
+i4   50.5   0.7     11     11.059   3000   7000   40     9      0.9
+i4   50.5   0.7     11     10.038   3000   10000  20     20     0.7
+i4   50.5   0.71    11     13.077   3000   9500   25     5      0.8
+i4   50.52  0.64    11     12.016   3000   8500   18     14     0.5
+i5   51     1.5     11     4.011    2000   0.1    1.0    3      11   13  28
+i5   51     1.5     11     3.106    2000   0.4    0.1    7      5    15  34
+i100 0 56
+s
+;============================================================================;
+;========================= SECTION IV: 100 SECONDS  =========================;
+;============================================================================;
+;========================= VARIABLE TEMPO ===================================;
+t 0 60 40 60 45 30 49 40 52 90 55 100 58 160 59 200 61 230 65 270 78 40
+;============================================================================;
+i99  0      1       2.8
+i4   0      1       6.8    12.013   3700   9000   40     17     0.5
+i4   0.01   1       6.8    12.061   3501   8500   30     20     0.3
+i4   0.02   1       6.8    11.119   3399   7780   32     22     0.8
+i4   0.03   1       6.8    12.042   3010   8600   41     27     0.45
+i99  1      3.4     9.8
+i12  1      3       6.8    5.06     1000   100    7000   16     0.2
+i12  1.03   2.9     6.8    5.02     1000   60     6000   30     0.2
+i99  4.4    3.6     4.8
+i12  4.4    2.6     6.8    11.09    2000   1000   200    5      0.1
+i99  8      2.1     7
+i4   8      0.9     11     10.013   3000   9000   40     17     0.9
+i4   8.1    0.9     11     10.061   3001   8500   30     20     0.8
+i4   8.2    0.9     11     10.119   2999   7780   32     22     0.7
+i99  10.1   1.1     21
+i12  10.1   0.6     11     11.02    1000   1500   300    4      0.2
+i99  11.2   6.8     2
+i10  11.2   6       0      4.092    3000   0.3    6.9    200
+i10  11.2   10      0      4.113    3000   0.1    7.2    278
+i12  13     1.6     0.3    10.01    3000   2000   500    5.2    0.2
+i10  13     1.6     0.4    9.012    3000   0.3    21     31
+i4   15     0.7     0.4    13.023   5000   9000   40     17     0.9
+i4   15     0.7     0.4    13.081   5001   8500   30     20     0.3
+i4   15     0.7     0.4    13.019   4999   7780   32     22     0.7
+i4   15     0.7     0.4    13.079   4550   9699   50     30     0.5
+i4   15.7   1       0.4    9.013    1101   9000   40     17     0.9
+i4   15.7   1       0.4    10.051   1051   8500   30     20     0.6
+i4   15.7   1       0.4    7.119    1111   7780   32     22     0.2
+i4   15.7   1       0.4    8.099    1100   10000  100    27     0.8
+i12  17     2       0.4    9.02     3000   3000   1000   4      0.3
+i99  18     3       9.3
+i10  18     5       0      11.09    900    0.4    23     33
+i10  18.1   5       0      11.08    900    0.4    20     40
+i10  18.3   5       0      11.073   900    0.4    30     27
+i10  18.6   5       0      11.068   900    0.4    33     33
+i10  19     10      0      11.001   500    0.8    8      200
+i10  20     9       0      11.022   500    0.8    9      300
+i10  20.4   8.6     0      11.091   500    0.8    5      223
+i99  21     56      0.15
+i10  21     18      0      11.115   500    0.8    6.4    311
+i10  21.6   17.4    0      12.041   500    0.8    7      276
+i10  21.9   2.9     0      5.002    2000   0.3    4.1    200
+i10  25.3   3.5     0      5.031    2300   0.5    3.6    160
+i10  30.9   3.9     0      5.017    2500   0.7    3      100
+i10  36.3   6.1     0      4.097    1770   0.8    4      200
+i10  42     34.09   0      4.0017   6000   0.19   4.1    310
+i8   45     26.9    0.79   190      500    11     1.9    2.7    0.1
+i8   49     22.9    0.80   10000    8000   300    11     12.6   0.2
+i8   52     19.1    0.85   7000     10000  16     4.1    4.8    0.3
+i8   55     16.9    0.91   500      190    10     2.9    1.3    0.2
+i8   58     13.9    0.98   40       9000   379    33     19     0.1
+i8   60     12.9    0.99   3600     11000  19     17     22     0.3
+i8   61     11.9    1.01   2000     3000   30     4      18.8   0.2
+i99  77     23      0.09
+i4   77     1.7     0.3    13.079   850    9699   50     30     0.8
+i10  77.1   2.14    0      13.03    600    0.5    60     26
+i10  77.6   2.3     0      13.02    800    0.6    62     24
+i10  78.3   9.9     0      5.004    900    0.2    4.1    160
+i10  78.7   9.8     0      5.001    800    0.3    1.4    220
+i2   80.4   9       0      7.077    930    0.8    26     21     0.23
+i2   80.7   8       0      8.077    830    0.7    24     19     0.13
+i4   81.9   1.9     0.7    11.079   950    7699   40     20     0.7
+i4   82     2.8     0.5    10.079   850    5699   60     40     0.5
+i10  82.11  5.3     0      3.053    1800   0.1    4.0    210
+i10  82.14  3.8     0      4.048    1100   0.2    71     33
+i10  82.32  3.1     0      5.049    1000   0.2    68     27
+i10  82.06  2.9     0      5.051    900    0.2    72     31
+i10  84.04  9.9     0      4.003    1800   0.1    4.1    160
+i10  84.06  9.8     0      4.002    1900   0.3    1.4    220
+i10  84.618 9.8     0      5.005    900    0.4    4.1    180
+i100 0 100
+e
+;============================================================================;
+;======================= TOTAL TIME: 283 SECONDS ============================;
+;============================================================================;
+
+
+
+
+
+</CsScore>
+</CsoundSynthesizer>
+<bsbPanel>
+ <label>Widgets</label>
+ <objectName/>
+ <x>966</x>
+ <y>366</y>
+ <width>400</width>
+ <height>201</height>
+ <visible>true</visible>
+ <uuid/>
+ <bgcolor mode="nobackground">
+  <r>231</r>
+  <g>46</g>
+  <b>255</b>
+ </bgcolor>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider1</objectName>
+  <x>5</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{86b9ad70-540b-4d5b-b0b9-07fa3da7466b}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+</bsbPanel>
+<bsbPresets>
+</bsbPresets>
+<MacOptions>
+Version: 3
+Render: Real
+Ask: Yes
+Functions: ioObject
+Listing: Window
+WindowBounds: 966 366 400 201
+CurrentView: io
+IOViewEdit: On
+Options:
+</MacOptions>
+
+<MacGUI>
+ioView nobackground {59367, 11822, 65535}
+ioSlider {5, 5} {20, 100} 0.000000 1.000000 0.000000 slider1
+</MacGUI>
diff --git a/android/CsoundAndroidExamples/res/raw/waveviewtest.csd b/android/CsoundAndroidExamples/res/raw/waveviewtest.csd
new file mode 100644
index 0000000..01e465e
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/raw/waveviewtest.csd
@@ -0,0 +1,63 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0 -i adc
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+instr 1
+
+
+
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i1 0 360000
+ 
+</CsScore>
+</CsoundSynthesizer>
+<bsbPanel>
+ <label>Widgets</label>
+ <objectName/>
+ <x>1036</x>
+ <y>61</y>
+ <width>396</width>
+ <height>744</height>
+ <visible>true</visible>
+ <uuid/>
+ <bgcolor mode="nobackground">
+  <r>231</r>
+  <g>46</g>
+  <b>255</b>
+ </bgcolor>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider1</objectName>
+  <x>5</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{ea2b771b-3cad-462f-b9df-a821dbfeaaf8}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+</bsbPanel>
+<bsbPresets>
+</bsbPresets>
+<MacGUI>
+ioView nobackground {59367, 11822, 65535}
+ioSlider {5, 5} {20, 100} 0.000000 1.000000 0.000000 slider1
+</MacGUI>
diff --git a/android/CsoundAndroidExamples/res/values/strings.xml b/android/CsoundAndroidExamples/res/values/strings.xml
new file mode 100644
index 0000000..57e2efa
--- /dev/null
+++ b/android/CsoundAndroidExamples/res/values/strings.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="hello">Hello World, CsoundAndroidActivity!</string>
+    <string name="app_name">CsoundAndroid</string>
+    <string name="simple_test_name">Simple Test 1</string>
+    <string name="simple_test2_name">Simple Test 2</string>
+    <string name="haiku_name">Csound Haiku IV</string>
+        
+</resources>
\ No newline at end of file
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/BaseCsoundActivity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/BaseCsoundActivity.java
new file mode 100644
index 0000000..60d56a4
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/BaseCsoundActivity.java
@@ -0,0 +1,102 @@
+/* 
+ 
+ BaseCsoundActivity.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+
+package com.csounds.examples;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.os.Handler;
+import android.widget.SeekBar;
+
+import com.csounds.CsoundObj;
+
+public class BaseCsoundActivity extends Activity {
+	
+	protected CsoundObj csoundObj = new CsoundObj();
+	protected Handler handler = new Handler();
+	
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+	}
+	
+	@Override
+	protected void onDestroy() {
+		// TODO Auto-generated method stub
+		super.onDestroy();
+		csoundObj.stopCsound();
+		
+	}
+	
+	public void setSeekBarValue(SeekBar seekBar, double min, double max, double value) {
+		double range = max - min;
+		double percent = (value - min) / range;
+		
+		seekBar.setProgress((int)(percent * seekBar.getMax()));
+	}
+
+	
+	protected String getResourceFileAsString(int resId) {
+		StringBuilder str = new StringBuilder();
+		
+		InputStream is = getResources().openRawResource(resId);
+		BufferedReader r = new BufferedReader(new InputStreamReader(is));
+		String line;
+		
+		try {
+			while ((line = r.readLine()) != null) {
+				str.append(line).append("\n");
+			}
+		} catch (IOException ios) {
+
+		}
+		
+		return str.toString();
+	}
+
+	protected File createTempFile(String csd) {
+		File f = null;
+		
+		try {
+			f = File.createTempFile("temp", ".csd", this.getCacheDir());
+			FileOutputStream fos = new FileOutputStream(f);
+			fos.write(csd.getBytes());
+			fos.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		return f;
+	}
+}
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/CsoundAndroidActivity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/CsoundAndroidActivity.java
new file mode 100644
index 0000000..6c5473c
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/CsoundAndroidActivity.java
@@ -0,0 +1,86 @@
+/* 
+ 
+ CsoundBaseActivity.java:
+
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.examples;
+
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import com.csounds.examples.BaseCsoundActivity;
+import com.csounds.examples.tests.AccelerometerActivity;
+import com.csounds.examples.tests.ButtonTestActivity;
+import com.csounds.examples.tests.CsoundHaikuIVActivity;
+import com.csounds.examples.tests.HarmonizerActivity;
+import com.csounds.examples.tests.MultiTouchXYActivity;
+import com.csounds.examples.tests.PingPongDelayActivity;
+import com.csounds.examples.tests.SimpleTest1Activity;
+import com.csounds.examples.tests.SimpleTest2Activity;
+import com.csounds.examples.tests.WaveviewTestActivity;
+
+public class CsoundAndroidActivity extends BaseCsoundActivity {
+
+	String[] testNames = new String[] { "Simple Test 1", "Simple Test 2", "Button Test", 
+			"Ping Pong Delay", "Harmonizer", "Accelerometer", "Csound Haiku IV", "MultiTouch XY", "Waveview"};
+	@SuppressWarnings("rawtypes")
+	Class[] activities = new Class[] { SimpleTest1Activity.class, SimpleTest2Activity.class, 
+			ButtonTestActivity.class, PingPongDelayActivity.class, HarmonizerActivity.class, 
+			AccelerometerActivity.class, CsoundHaikuIVActivity.class, MultiTouchXYActivity.class,
+			WaveviewTestActivity.class};
+	
+	
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.main);
+		ListView listView = (ListView) findViewById(R.id.list_view);
+
+		listView.setAdapter(new ArrayAdapter<String>(this,
+				android.R.layout.simple_list_item_1,
+				testNames));
+		listView.setOnItemClickListener(new OnItemClickListener() {
+
+			@Override
+			public void onItemClick(AdapterView<?> arg0, View arg1,
+					int position, long arg3) {
+
+			
+					startActivity(new Intent(CsoundAndroidActivity.this,
+							activities[position]));
+				
+
+			}
+		});
+
+	}
+
+}
\ No newline at end of file
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/tests/AccelerometerActivity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/AccelerometerActivity.java
new file mode 100644
index 0000000..05dc961
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/AccelerometerActivity.java
@@ -0,0 +1,83 @@
+/* 
+ 
+ AccelerometerActivity.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.examples.tests;
+
+import java.io.File;
+
+import android.os.Bundle;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.ToggleButton;
+
+import com.csounds.CsoundObj;
+import com.csounds.CsoundObjCompletionListener;
+import com.csounds.examples.BaseCsoundActivity;
+import com.csounds.examples.R;
+
+public class AccelerometerActivity extends BaseCsoundActivity implements
+		CsoundObjCompletionListener {
+	
+	ToggleButton startStopButton = null;
+
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.accelerometer_test);
+
+		startStopButton = (ToggleButton) findViewById(R.id.onOffButton);
+
+		startStopButton
+				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+
+					public void onCheckedChanged(CompoundButton buttonView,
+							boolean isChecked) {
+						if (isChecked) {
+							String csd = getResourceFileAsString(R.raw.hardware_test);
+							File f = createTempFile(csd);
+
+							csoundObj.enableAccelerometer(AccelerometerActivity.this);
+							
+							csoundObj.startCsound(f);
+						} else {
+							csoundObj.stopCsound();
+						}
+
+					}
+				});
+
+	}
+
+	@Override
+	public void csoundObjComplete(CsoundObj csoundObj) {
+		handler.post(new Runnable() {
+			public void run() {
+				startStopButton.setChecked(false);
+			}
+		});
+	}
+
+}
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/tests/ButtonTestActivity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/ButtonTestActivity.java
new file mode 100644
index 0000000..05d6eeb
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/ButtonTestActivity.java
@@ -0,0 +1,138 @@
+/* 
+ 
+ ButtonTestActivity.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.examples.tests;
+
+import java.io.File;
+
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.SeekBar;
+import android.widget.ToggleButton;
+
+import com.csounds.CsoundObj;
+import com.csounds.CsoundObjCompletionListener;
+import com.csounds.examples.BaseCsoundActivity;
+import com.csounds.examples.R;
+
+public class ButtonTestActivity extends BaseCsoundActivity implements
+		CsoundObjCompletionListener {
+	
+	ToggleButton startStopButton = null;
+
+	Button eventButton;
+	Button valueButton;
+	
+	SeekBar durationSlider;
+	SeekBar attackSlider;
+	SeekBar decaySlider;
+	SeekBar sustainSlider;
+	SeekBar releaseSlider;
+
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.button_test);
+
+		startStopButton = (ToggleButton) findViewById(R.id.onOffButton);
+
+		eventButton = (Button) findViewById(R.id.eventButton);
+		valueButton = (Button) findViewById(R.id.valueButton);
+		
+		durationSlider = (SeekBar) findViewById(R.id.durationSlider);
+		attackSlider = (SeekBar) findViewById(R.id.attackSlider);
+		decaySlider = (SeekBar) findViewById(R.id.decaySlider);
+		sustainSlider = (SeekBar) findViewById(R.id.sustainSlider);
+		releaseSlider = (SeekBar) findViewById(R.id.releaseSlider);
+
+		setSeekBarValue(durationSlider, .5, 4, 1.5);
+		setSeekBarValue(attackSlider, .001, 2, .05);
+		setSeekBarValue(decaySlider, .05, 2, .05);
+		setSeekBarValue(sustainSlider, 0, 1, .7);
+		setSeekBarValue(releaseSlider, .05, 4, 1.5);
+
+		startStopButton
+				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+
+					@Override
+					public void onCheckedChanged(CompoundButton buttonView,
+							boolean isChecked) {
+						if (isChecked) {
+							String csd = getResourceFileAsString(R.raw.button_test);
+							File f = createTempFile(csd);
+
+							csoundObj.addSlider(durationSlider, "duration", .5,
+									4);
+							csoundObj.addSlider(attackSlider, "attack", 0, 2);
+							csoundObj.addSlider(decaySlider, "decay", .05, 2);
+							csoundObj.addSlider(sustainSlider, "sustain", 0, 1);
+							csoundObj.addSlider(releaseSlider, "release", 0, 4);
+
+							csoundObj.addButton(valueButton, "button1");
+							
+							eventButton.setOnClickListener(new OnClickListener() {
+								
+								@Override
+								public void onClick(View v) {
+									
+									Log.d("TEST", "Event Button");
+									
+									float value = durationSlider.getProgress() / (float)durationSlider.getMax();
+									float min = .5f;
+									float max = 4f;
+									float range = max - min;
+									value = (value * range) + min;
+									String event = String.format("i2 0 %f", value);
+									
+									csoundObj.sendScore(event);
+								}
+							});
+							
+							csoundObj.startCsound(f);
+						} else {
+							csoundObj.stopCsound();
+						}
+
+					}
+				});
+
+	}
+
+	@Override
+	public void csoundObjComplete(CsoundObj csoundObj) {
+		handler.post(new Runnable() {
+			public void run() {
+				startStopButton.setChecked(false);
+			}
+		});
+	}
+
+}
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/tests/CsoundHaikuIVActivity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/CsoundHaikuIVActivity.java
new file mode 100644
index 0000000..bf84802
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/CsoundHaikuIVActivity.java
@@ -0,0 +1,51 @@
+/* 
+ 
+CsoundHaikuIVActivity.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.examples.tests;
+
+import java.io.File;
+
+import android.os.Bundle;
+
+import com.csounds.examples.BaseCsoundActivity;
+import com.csounds.examples.R;
+
+public class CsoundHaikuIVActivity extends BaseCsoundActivity {
+
+
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.csound_haiku_iv);
+
+		String csd = getResourceFileAsString(R.raw.iv);
+		File f = createTempFile(csd);
+		//csoundObj.setMessageLoggingEnabled(true);
+		csoundObj.startCsound(f);
+		
+	}
+
+}
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/tests/HarmonizerActivity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/HarmonizerActivity.java
new file mode 100644
index 0000000..9d26b33
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/HarmonizerActivity.java
@@ -0,0 +1,101 @@
+/* 
+ 
+ HarmonizerActivity.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.examples.tests;
+
+import java.io.File;
+
+import android.os.Bundle;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.SeekBar;
+import android.widget.ToggleButton;
+
+import com.csounds.CsoundObj;
+import com.csounds.CsoundObjCompletionListener;
+import com.csounds.examples.BaseCsoundActivity;
+import com.csounds.examples.R;
+
+
+public class HarmonizerActivity extends BaseCsoundActivity implements
+		CsoundObjCompletionListener {
+
+	ToggleButton startStopButton = null;
+
+	SeekBar harmonyPitchSlider;
+	SeekBar gainSlider;
+
+
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.harmonizer);
+
+		startStopButton = (ToggleButton) findViewById(R.id.onOffButton);
+
+		harmonyPitchSlider = (SeekBar) findViewById(R.id.harmony_pitch_slider);
+		gainSlider = (SeekBar) findViewById(R.id.gain_slider);
+		
+
+		setSeekBarValue(harmonyPitchSlider, 0, 1, .5);
+		setSeekBarValue(gainSlider, .5, 3, 1.5);
+
+		startStopButton
+				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+
+					@Override
+					public void onCheckedChanged(CompoundButton buttonView,
+							boolean isChecked) {
+						if (isChecked) {
+							String csd = getResourceFileAsString(R.raw.harmonizer);
+							File f = createTempFile(csd);
+
+							csoundObj.addSlider(harmonyPitchSlider,
+									"slider", 0, 1);
+							csoundObj.addSlider(gainSlider,
+									"gain", .5, 3);
+							
+							csoundObj.setAudioInEnabled(true);
+							csoundObj.startCsound(f);
+						} else {
+							csoundObj.stopCsound();
+						}
+
+					}
+				});
+
+	}
+
+	@Override
+	public void csoundObjComplete(CsoundObj csoundObj) {
+		handler.post(new Runnable() {
+			public void run() {
+				startStopButton.setChecked(false);
+			}
+		});
+	}
+
+}
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/tests/MultiTouchXYActivity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/MultiTouchXYActivity.java
new file mode 100644
index 0000000..583cec4
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/MultiTouchXYActivity.java
@@ -0,0 +1,200 @@
+/* 
+ 
+ MultiTouchXYActivity.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.examples.tests;
+
+import java.io.File;
+
+import android.os.Bundle;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnTouchListener;
+
+import com.csounds.CsoundObj;
+import com.csounds.CsoundObjCompletionListener;
+import com.csounds.examples.BaseCsoundActivity;
+import com.csounds.examples.R;
+import com.csounds.valueCacheable.CsoundValueCacheable;
+
+import csnd.CsoundMYFLTArray;
+
+public class MultiTouchXYActivity extends BaseCsoundActivity implements
+		CsoundObjCompletionListener, CsoundValueCacheable {
+
+	public View multiTouchView;
+	
+	int touchIds[] = new int[10];
+	float touchX[] = new float[10];
+	float touchY[] = new float[10];
+	CsoundMYFLTArray touchXPtr[] = new CsoundMYFLTArray[10];
+	CsoundMYFLTArray touchYPtr[] = new CsoundMYFLTArray[10];
+
+	protected int getTouchIdAssignment() {
+		for(int i = 0; i < touchIds.length; i++) {
+			if(touchIds[i] == -1) {
+				return i;
+			}
+		}
+		return -1;
+	}
+	
+	protected int getTouchId(int touchId) {
+		for(int i = 0; i < touchIds.length; i++) {
+			if(touchIds[i] == touchId) {
+				return i;
+			}
+		}
+		return -1;
+	}
+	
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		
+		for(int i = 0; i < touchIds.length; i++) {
+			touchIds[i] = -1;
+			touchX[i] = -1;
+			touchY[i] = -1;
+		}
+		
+		multiTouchView = new View(this);
+		
+		multiTouchView.setOnTouchListener(new OnTouchListener() {
+
+			@Override
+			public boolean onTouch(View v, MotionEvent event) {
+				final int action = event.getAction() & MotionEvent.ACTION_MASK;
+				switch(action) {
+				case MotionEvent.ACTION_DOWN:
+				case MotionEvent.ACTION_POINTER_DOWN:
+					
+					for(int i = 0; i < event.getPointerCount(); i++) {
+						int pointerId = event.getPointerId(i);
+						int id = getTouchId(pointerId);
+						
+						if(id == -1) {
+							
+							id = getTouchIdAssignment();
+							
+							if(id != -1) {
+								touchIds[id] = pointerId;
+								touchX[id] = event.getX(i) / multiTouchView.getWidth();
+								touchY[id] = 1 - (event.getY(i) / multiTouchView.getHeight());
+								
+								if(touchXPtr[id] != null) {
+									touchXPtr[id].SetValue(0, touchX[id]);
+									touchYPtr[id].SetValue(0, touchY[id]);
+									
+									csoundObj.sendScore(String.format("i1.%d 0 -2 %d", id, id));
+								}
+							}
+						}
+						
+					}
+					
+					break;
+				case MotionEvent.ACTION_MOVE:
+
+					for(int i = 0; i < event.getPointerCount(); i++) {
+						int pointerId = event.getPointerId(i);
+						int id = getTouchId(pointerId);
+
+						if(id != -1) {
+							touchX[id] = event.getX(i) / multiTouchView.getWidth();
+							touchY[id] = 1 - (event.getY(i) / multiTouchView.getHeight());
+						}
+						
+					}
+					break;
+				case MotionEvent.ACTION_POINTER_UP:
+				case MotionEvent.ACTION_UP:
+				{
+					int activePointerIndex = event.getActionIndex();
+					int pointerId = event.getPointerId(activePointerIndex);
+						
+					int id = getTouchId(pointerId);
+					if(id != -1) {
+						touchIds[id] = -1;
+						csoundObj.sendScore(String.format("i-1.%d 0 0 %d", id, id));
+					}
+					
+				}
+					break;
+				}
+				return true;
+			}
+			
+		});
+		
+		setContentView(multiTouchView);
+
+		String csd = getResourceFileAsString(R.raw.multitouch_xy);
+		File f = createTempFile(csd);
+
+		csoundObj.addValueCacheable(this);
+
+		csoundObj.startCsound(f);
+	}
+
+	@Override
+	public void csoundObjComplete(CsoundObj csoundObj) {
+
+	}
+	
+	// VALUE CACHEABLE
+
+	@Override
+	public void setup(CsoundObj csoundObj) {
+		for(int i = 0; i < touchIds.length; i++) {
+			touchXPtr[i] = csoundObj.getInputChannelPtr(String.format("touch.%d.x", i));
+			touchYPtr[i] = csoundObj.getInputChannelPtr(String.format("touch.%d.y", i));
+		}
+	}
+
+	@Override
+	public void updateValuesToCsound() {
+		for(int i = 0; i < touchX.length; i++) {
+			touchXPtr[i].SetValue(0, touchX[i]);
+			touchYPtr[i].SetValue(0, touchY[i]);
+		}
+		
+	}
+
+	@Override
+	public void updateValuesFromCsound() {
+	}
+
+	@Override
+	public void cleanup() {
+		for(int i = 0; i < touchIds.length; i++) {
+			touchXPtr[i].Clear();
+			touchXPtr[i] = null;
+			touchYPtr[i].Clear();
+			touchYPtr[i] = null;
+		}
+	}
+
+}
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/tests/PingPongDelayActivity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/PingPongDelayActivity.java
new file mode 100644
index 0000000..9629c94
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/PingPongDelayActivity.java
@@ -0,0 +1,108 @@
+/* 
+ 
+ PingPongDelayActivity.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.examples.tests;
+
+import java.io.File;
+
+import android.os.Bundle;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.SeekBar;
+import android.widget.ToggleButton;
+
+import com.csounds.CsoundObj;
+import com.csounds.CsoundObjCompletionListener;
+import com.csounds.examples.BaseCsoundActivity;
+import com.csounds.examples.R;
+
+public class PingPongDelayActivity extends BaseCsoundActivity implements
+		CsoundObjCompletionListener {
+
+	ToggleButton startStopButton = null;
+
+	SeekBar leftDelaySlider;
+	SeekBar leftFeedbackSlider;
+	SeekBar rightDelaySlider;
+	SeekBar rightFeedbackSlider;
+
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.ping_pong_delay);
+
+		startStopButton = (ToggleButton) findViewById(R.id.onOffButton);
+
+		leftDelaySlider = (SeekBar) findViewById(R.id.left_delay_slider);
+		leftFeedbackSlider = (SeekBar) findViewById(R.id.left_feedback_slider);
+		rightDelaySlider = (SeekBar) findViewById(R.id.right_delay_slider);
+		rightFeedbackSlider = (SeekBar) findViewById(R.id.right_feedback_slider);
+
+		setSeekBarValue(leftDelaySlider, 50, 3000, 300);
+		setSeekBarValue(leftFeedbackSlider, 0, .8, .5);
+		setSeekBarValue(rightDelaySlider, 50, 3000, 300);
+		setSeekBarValue(rightFeedbackSlider, 0, .8, .5);
+
+		startStopButton
+				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+
+					@Override
+					public void onCheckedChanged(CompoundButton buttonView,
+							boolean isChecked) {
+						if (isChecked) {
+							String csd = getResourceFileAsString(R.raw.ping_pong_delay);
+							File f = createTempFile(csd);
+
+							csoundObj.addSlider(leftDelaySlider,
+									"leftDelayTime", 50, 3000);
+							csoundObj.addSlider(leftFeedbackSlider,
+									"leftFeedback", 0, .8);
+							csoundObj.addSlider(rightDelaySlider,
+									"rightDelayTime", 50, 3000);
+							csoundObj.addSlider(rightFeedbackSlider,
+									"rightFeedback", 0, .8);
+
+							csoundObj.setAudioInEnabled(true);
+							csoundObj.startCsound(f);
+						} else {
+							csoundObj.stopCsound();
+						}
+
+					}
+				});
+
+	}
+
+	@Override
+	public void csoundObjComplete(CsoundObj csoundObj) {
+		handler.post(new Runnable() {
+			public void run() {
+				startStopButton.setChecked(false);
+			}
+		});
+	}
+
+}
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/tests/SimpleTest1Activity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/SimpleTest1Activity.java
new file mode 100644
index 0000000..b0f8497
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/SimpleTest1Activity.java
@@ -0,0 +1,111 @@
+/* 
+ 
+ SimpleTest1Activity.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.examples.tests;
+
+import java.io.File;
+
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.SeekBar;
+import android.widget.ToggleButton;
+
+import com.csounds.CsoundObj;
+import com.csounds.CsoundObjCompletionListener;
+import com.csounds.examples.BaseCsoundActivity;
+import com.csounds.examples.R;
+import com.csounds.valueCacheable.CsoundValueCacheable;
+
+public class SimpleTest1Activity extends BaseCsoundActivity implements CsoundObjCompletionListener {
+
+	ToggleButton startStopButton = null;
+	SeekBar fSlider;
+	
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.simple_test_1);
+		
+		startStopButton = (ToggleButton) findViewById(R.id.onOffButton);
+		fSlider = (SeekBar) findViewById(R.id.slider);
+		startStopButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+			
+			@Override
+			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+				if(isChecked) {
+					String csd = getResourceFileAsString(R.raw.test);
+					File f = createTempFile(csd);
+					csoundObj.addSlider(fSlider, "slider", 0.,
+							1.);
+					csoundObj.addCompletionListener(SimpleTest1Activity.this);
+					csoundObj.startCsound(f);
+				} else {
+					csoundObj.stopCsound();
+				}
+				
+			}
+		});
+		
+	
+		
+		csoundObj.addValueCacheable(new CsoundValueCacheable() {
+			
+			@Override
+			public void updateValuesToCsound() {
+				// TODO Auto-generated method stub
+				
+			}
+			
+			@Override
+			public void updateValuesFromCsound() {
+				// TODO Auto-generated method stub
+				
+			}
+			
+			@Override
+			public void setup(CsoundObj csoundObj) {
+				Log.d("CsoundAndroidActivity", "ValueCacheable setup called");
+			}
+			
+			@Override
+			public void cleanup() {
+				Log.d("CsoundAndroidActivity", "ValueCacheable cleanup called");
+			}
+		});
+	}
+
+	@Override
+	public void csoundObjComplete(CsoundObj csoundObj) {
+		handler.post(new Runnable() {
+			public void run() {
+				startStopButton.setChecked(false);
+			}
+		});
+	}
+	
+}
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/tests/SimpleTest2Activity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/SimpleTest2Activity.java
new file mode 100644
index 0000000..c68b221
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/SimpleTest2Activity.java
@@ -0,0 +1,139 @@
+/* 
+ 
+ SimpleTest2Activity.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.examples.tests;
+
+import java.io.File;
+
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.SeekBar;
+import android.widget.ToggleButton;
+
+import com.csounds.CsoundObj;
+import com.csounds.CsoundObjCompletionListener;
+import com.csounds.examples.BaseCsoundActivity;
+import com.csounds.examples.R;
+import com.csounds.valueCacheable.CsoundValueCacheable;
+
+public class SimpleTest2Activity extends BaseCsoundActivity implements
+		CsoundObjCompletionListener {
+
+	ToggleButton startStopButton = null;
+
+	SeekBar noteRateSlider;
+	SeekBar durationSlider;
+	SeekBar attackSlider;
+	SeekBar decaySlider;
+	SeekBar sustainSlider;
+	SeekBar releaseSlider;
+
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.simple_test_2);
+
+		startStopButton = (ToggleButton) findViewById(R.id.onOffButton);
+
+		noteRateSlider = (SeekBar) findViewById(R.id.noteRateSlider);
+		durationSlider = (SeekBar) findViewById(R.id.durationSlider);
+		attackSlider = (SeekBar) findViewById(R.id.attackSlider);
+		decaySlider = (SeekBar) findViewById(R.id.decaySlider);
+		sustainSlider = (SeekBar) findViewById(R.id.sustainSlider);
+		releaseSlider = (SeekBar) findViewById(R.id.releaseSlider);
+
+		setSeekBarValue(noteRateSlider, 1, 4, 1.5);
+		setSeekBarValue(durationSlider, .5, 4, 1.5);
+		setSeekBarValue(attackSlider, .001, 2, .05);
+		setSeekBarValue(decaySlider, .05, 2, .05);
+		setSeekBarValue(sustainSlider, 0, 1, .7);
+		setSeekBarValue(releaseSlider, .05, 4, 1.5);
+
+		startStopButton
+				.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+
+					@Override
+					public void onCheckedChanged(CompoundButton buttonView,
+							boolean isChecked) {
+						if (isChecked) {
+							String csd = getResourceFileAsString(R.raw.test2);
+							File f = createTempFile(csd);
+
+							csoundObj.addSlider(noteRateSlider, "noteRate", 1,
+									4);
+							csoundObj.addSlider(durationSlider, "duration", .5,
+									4);
+							csoundObj.addSlider(attackSlider, "attack", 0, 2);
+							csoundObj.addSlider(decaySlider, "decay", .05, 2);
+							csoundObj.addSlider(sustainSlider, "sustain", 0, 1);
+							csoundObj.addSlider(releaseSlider, "release", 0, 4);
+
+							csoundObj.startCsound(f);
+						} else {
+							csoundObj.stopCsound();
+						}
+
+					}
+				});
+
+		csoundObj.addValueCacheable(new CsoundValueCacheable() {
+
+			@Override
+			public void updateValuesToCsound() {
+				// TODO Auto-generated method stub
+
+			}
+
+			@Override
+			public void updateValuesFromCsound() {
+				// TODO Auto-generated method stub
+
+			}
+
+			@Override
+			public void setup(CsoundObj csoundObj) {
+				Log.d("CsoundAndroidActivity", "ValueCacheable setup called");
+			}
+
+			@Override
+			public void cleanup() {
+				Log.d("CsoundAndroidActivity", "ValueCacheable cleanup called");
+			}
+		});
+	}
+
+	@Override
+	public void csoundObjComplete(CsoundObj csoundObj) {
+		handler.post(new Runnable() {
+			public void run() {
+				startStopButton.setChecked(false);
+			}
+		});
+	}
+
+}
diff --git a/android/CsoundAndroidExamples/src/com/csounds/examples/tests/WaveviewTestActivity.java b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/WaveviewTestActivity.java
new file mode 100644
index 0000000..c8fc3fc
--- /dev/null
+++ b/android/CsoundAndroidExamples/src/com/csounds/examples/tests/WaveviewTestActivity.java
@@ -0,0 +1,169 @@
+/* 
+ 
+ WaveviewTestActivity.java:
+ 
+ Copyright (C) 2011 Victor Lazzarini, Steven Yi
+ 
+ This file is part of Csound Android Examples.
+ 
+ The Csound Android Examples is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+package com.csounds.examples.tests;
+
+import java.io.File;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ToggleButton;
+
+import com.csounds.CsoundObj;
+import com.csounds.examples.BaseCsoundActivity;
+import com.csounds.examples.R;
+import com.csounds.valueCacheable.CsoundValueCacheable;
+
+import csnd.Csound;
+import csnd.CsoundMYFLTArray;
+
+public class WaveviewTestActivity extends BaseCsoundActivity {
+
+	ToggleButton startStopButton = null;
+
+	/** Called when the activity is first created. */
+	@Override
+	public void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+
+		final WaveView view = new WaveView(this);
+
+		setContentView(view);
+
+		String csd = getResourceFileAsString(R.raw.waveviewtest);
+		File f = createTempFile(csd);
+
+		csoundObj.addValueCacheable(view);
+
+		csoundObj.startCsound(f);
+
+	}
+
+	class WaveView extends View implements CsoundValueCacheable {
+
+		boolean tableLoaded = false;
+		CsoundObj csoundObj = null;
+		double[] tableData = null;
+		int[] points = null;
+
+		Paint paint;
+
+		public WaveView(Context context) {
+			super(context);
+			paint = new Paint();
+			paint.setDither(true);
+			paint.setColor(0xFFFFFF00);
+			paint.setStyle(Paint.Style.STROKE);
+			paint.setStrokeJoin(Paint.Join.ROUND);
+			paint.setStrokeCap(Paint.Cap.ROUND);
+			paint.setStrokeWidth(3);
+		}
+
+		@Override
+		public void setup(CsoundObj csoundObj) {
+			tableLoaded = false;
+			this.csoundObj = csoundObj;
+		}
+
+		@Override
+		public void updateValuesToCsound() {
+			// TODO Auto-generated method stub
+
+		}
+
+		@Override
+		public void updateValuesFromCsound() {
+			if (!tableLoaded) {
+				Csound csound = csoundObj.getCsound();
+				CsoundMYFLTArray table = new CsoundMYFLTArray();
+				int length = csound.TableLength(1);
+				csound.GetTable(table.GetPtr(), 1);
+				tableData = new double[length];
+
+				for (int i = 0; i < length; i++) {
+					tableData[i] = table.GetValue(i);
+				}
+
+				tableLoaded = true;
+
+				new Thread() {
+					@Override
+					public void run() {
+
+						int width = getWidth();
+						int height = getHeight();
+						int middle = height / 2;
+
+						points = new int[width];
+
+						int tableLength = tableData.length;
+
+						for (int i = 0; i < width; i++) {
+							float percent = i / (float) (width);
+							int index = (int) (percent * tableLength);
+							points[i] = (int) ((tableData[index] * middle) + middle);
+						}
+
+						postInvalidate();
+
+					}
+				}.start();
+			}
+		}
+
+		@Override
+		public void cleanup() {
+			csoundObj = null;
+			tableData = null;
+			points = null;
+		}
+
+		@Override
+		public void onDraw(Canvas canvas) {
+			super.onDraw(canvas);
+			if(points == null || points.length == 0) {
+				return;
+			}
+			
+			int currentX = 0;
+			int currentY = points[0];
+			
+			for(int i = 1;i < points.length; i++) {
+				int nextX = i;
+				int nextY = points[i];
+				
+				canvas.drawLine(currentX, currentY, nextX, nextY, paint);
+				currentX = nextX;
+				currentY = nextY;
+			}
+			
+		}
+
+	}
+
+}
diff --git a/build-linux-double.sh b/build-linux-double.sh
index b8c84ff..18244c9 100755
--- a/build-linux-double.sh
+++ b/build-linux-double.sh
@@ -1,5 +1,5 @@
 #!/bin/sh
 
-scons usePortMIDI=0 custom=custom-linux-mkg.py buildLuaWrapper=1 buildLuaOpcodes=1 buildPythonWrapper=1 useJack=1 buildCsoundVST=0 buildvst4cs=0 buildInterfaces=1 buildCsoundAC=1 buildJavaWrapper=0 useOSC=1 buildPythonOpcodes=1 buildLoris=0 buildStkOpcodes=1 buildWinsound=1 noFLTKThreads=0 useLrint=1 usePortAudio=0 buildPDClass=1 buildVirtual=1 buildTclcsound=1 buildLua=1 useDouble=1 dynamicCsoundLibrary=1 buildRelease=0 buildDSSI=1 noDebug=0 gcc4opt=atom $1 $2 $3 $4
+scons usePortMIDI=0 custom=custom-linux-mkg.py buildLuaWrapper=1 buildLuaOpcodes=1 buildPythonWrapper=1 useJack=1 buildCsoundVST=0 buildvst4cs=0 buildInterfaces=1 buildCsoundAC=1 buildJavaWrapper=0 useOSC=1 buildPythonOpcodes=1 buildLoris=0 buildStkOpcodes=1 buildWinsound=1 noFLTKThreads=0 useLrint=1 usePortAudio=0 buildPDClass=1 buildVirtual=1 buildTclcsound=1 buildLua=1 useDouble=1 dynamicCsoundLibrary=1 buildRelease=0 buildDSSI=1 noDebug=0 gcc4opt=corei7 $1 $2 $3 $4
 
 # doxygen
diff --git a/examples/CsoundAC.csd b/examples/CsoundAC.csd
index 517e787..5c8d641 100644
--- a/examples/CsoundAC.csd
+++ b/examples/CsoundAC.csd
@@ -167,7 +167,7 @@ gitonewheel6            ftgen                   0, 0, 65537,     8     -.8, 336,
                         ; Table for Reed Physical Model
 gireedtable             ftgen                   0, 0, 256,       7,     1, 80, 1, 156, -1, 40, -1
                         ; Tables for simple granular synthesis
-gigrtab                 ftgen                   0, 0, 65537,    10,     1, 0.3, .1 0, .2, .02, 0, .1, .04
+gigrtab                 ftgen                   0, 0, 65537,    10,     1, .3, .1, 0, .2, .02, 0, .1, .04
 giwintab                ftgen                   0, 0, 65537,    10,     1, 0, .5, 0, .33, 0, .25, 0, .2, 0, .167
                         ; Tables for waveshaping drone
 giharmonics             ftgen                   0, 0, 65537,    10,     1,   0,   2,   0,   0,   1 
@@ -541,7 +541,7 @@ amp2                    =                       aamp2 * (1 + adev2)
 aamp3                   linseg                  0,.001,3000,.001,1000,.0017,12000,.0013,3700,.001,12500,.0018,3000,.0012,1200,.001,1400,.0017,6000,.0023,200,.001,3000,.001,1200,.0015,8000,.001,1800,.0015,6000,.08,1200,.2,200,.2,40,.2,10,.4,0,1,0
 adevamp3                linseg                  0, .02, .8, idur - .02, 0
 adev3                   poscil                  adevamp3, 70, gisine ,0
-amp3                    =                       aamp3 * (1 + adev3),
+amp3                    =                       aamp3 * (1 + adev3)
 awt1                    poscil                  amp1, kfreq, gisine
 awt2                    poscil                  amp2, 2.7 * kfreq, gisine
 awt3                    poscil                  amp3, 4.95 * kfreq, gisine
@@ -1027,7 +1027,7 @@ asignal                 =                       kenvelope * (agleft + adelayleft
 asignal1                butterhp                asignal, 32.0
 asignal2                balance                 asignal1, asignal
 aleft, aright		    Pan			            p7, asignal2 * iamplitude
-p3, aleft, aright	    Declick			        0       .006, p3, 0.06, aleft, aright
+p3, aleft, aright	    Declick			        0.006, p3, 0.06, aleft, aright
                         AssignSend		        p1, 0.0, 0.0, 0.2, 1
                         SendOut			        p1, aleft, aright
                         endin
@@ -1903,7 +1903,7 @@ p3, aleft, aright	    Declick			        0.003, p3, .05, aleft, aright
                         ; Low level implementation
                         ; of the classic Karplus-Strong algorithm
                         ; fixed pitches : no vibratos or glissandi !
-                        ; implemented by Josep M Comajuncosas / Aug´98
+                        ; implemented by Josep M Comajuncosas / Aug\B498
                         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                         ; Initialised with a wide pulse (buzz)
                         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/examples/CsoundVST.csd b/examples/CsoundVST.csd
index 1b0387e..5f26906 100644
--- a/examples/CsoundVST.csd
+++ b/examples/CsoundVST.csd
@@ -1,6 +1,6 @@
 <CsoundSynthesizer>
 <CsOptions>
-csound -f -h -+rtmidi=null -M0 -d -n -m7 --midi-key-oct=4 --midi-velocity=5 temp.orc temp.sco
+csound -f -h -+rtmidi=null -M0 -d -n -m7 --midi-key=4 --midi-velocity=5 temp.orc temp.sco
 </CsOptions>
 <CsInstruments>
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -18,7 +18,7 @@ sr                      =                       44100
 ksmps                   =                       30
 nchnls                  =                       2
 ; Adjust 0dbfs to allow for MIDI velocity as decibels.
-0dbfs                   =                       32000
+0dbfs                   =                       10000000
 
 ; Note that -1 dB for float is 29205.
 
@@ -26,9 +26,9 @@ nchnls                  =                       2
 ; Channel to instrument assignments.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-                        massign                 1,24
-                        massign                 2,13
-                        massign                 3,24
+                        massign                 1,14
+                        ;massign                 2,2
+                        ;massign                 3,17
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Tables
@@ -58,7 +58,7 @@ gitonewheel3            ftgen                   0, 0, 8193,     7,      0, 110,
 gitonewheel4            ftgen                   0, 0, 8193,     7,      0, 80, 0.2, 16, 1, 64, 1, 16, 0.2, 80, 0
 ; Distortion Tables
 gitonewheel5            ftgen                   0, 0, 8193,     8,      -.8, 336, -.78,  800, -.7, 5920, 0.7,  800, 0.78, 336, 0.8
-gitonewheel6            ftgen                   0, 0, 8193,     8       -.8, 336, -.76, 3000, -.7, 1520, 0.7, 3000, 0.76, 336, 0.8
+gitonewheel6            ftgen                   0, 0, 8193,     8,       -.8, 336, -.76, 3000, -.7, 1520, 0.7, 3000, 0.76, 336, 0.8
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Instruments
@@ -67,7 +67,7 @@ gitonewheel6            ftgen                   0, 0, 8193,     8       -.8, 336
                         instr                   1 ; Tone wheel organ by Mikelson
                         pset                    0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0
 ; Pitch.
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ; Amplitude.
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) / 16.0
@@ -119,9 +119,9 @@ ishift      =           0.00666667               ;shift it 8/1200.
 ipch        =           cpspch(p5)              ;convert parameter 5 to cps.
 ioct        =           octpch(p5)              ;convert parameter 5 to oct.
 kvib        oscili       1/120, ipch/50, gisine       ;vibrato
-ag          pluck       2000, cpsoct(ioct+kvib), 1000, 1, 1
-agleft      pluck       2000, cpsoct(ioct+ishift), 1000, 1, 1
-agright     pluck       2000, cpsoct(ioct-ishift), 1000, 1, 1
+ag          pluck       2000, cpsmidinn(ioct+kvib), 1000, 1, 1
+agleft      pluck       2000, cpsmidinn(ioct+ishift), 1000, 1, 1
+agright     pluck       2000, cpsmidinn(ioct-ishift), 1000, 1, 1
 kf1         expon       0.1, p3, 1.0             ;exponential from 0.1 to 1.0
 kf2         expon       1.0, p3, 0.1             ;exponential from 1.0 to 0.1
 adump       delayr      2.0                     ;set delay line of 2.0 sec
@@ -135,7 +135,7 @@ ad2         deltap      1.1                     ;delay 1.1 sec.
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                         instr                   2 ; Xanadu instr 1
-                        pset                    0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0
+                        ; pset                    0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0
 ; Envelope initialization.
 iattack                 =                       0.005
 isustain                =                       p3
@@ -144,7 +144,7 @@ irelease                =                       0.05
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
 iduration               =                       p3 + iattack + irelease
-ifrequency              =                       cpsoct(p4)
+ifrequency		        =			            cpsmidinn(p4)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) / 2000.
 ijunk6                  =                       p6
@@ -174,9 +174,9 @@ iattack                 =                       0.05
 isustain                =                       p3
 irelease                =                       0.05
 kdamping                linsegr                  0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ag          pluck       1000, cpsoct(ioct + kvib), 1000,gisine, 1
-agleft      pluck       1000, cpsoct(ioct+ishift), 1000,gisine, 1
-agright     pluck       1000, cpsoct(ioct-ishift), 1000,gisine, 1
+ag          pluck       1000, cpsmidinn(ioct + kvib), 1000,gisine, 1
+agleft      pluck       1000, cpsmidinn(ioct+ishift), 1000,gisine, 1
+agright     pluck       1000, cpsmidinn(ioct-ishift), 1000,gisine, 1
 adump       delayr      0.4                     ;set delay line of 0.3 sec
 ad1         deltap      0.1                     ;delay 100 msec.
 ad2         deltap      0.2                     ;delay 200 msec.
@@ -195,7 +195,7 @@ irelease                =                       0.05
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                  0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
 iduration               =                       p3 + iattack + irelease
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) / 600.
 ijunk6                  =                       p6
@@ -230,8 +230,8 @@ a3          tablei      a1ndx,giln, 1             ;lookup tbl in f3, normal inde
 ao1         oscili       a1, ipch, gicosine             ;cosine
 a4          =           exp(-0.5*a3+ao1)
 ao2         oscili       a2*ipch, ipch, gicosine        ;cosine
-aoutl       oscili       1000*kadsr*a4, ao2+cpsoct(ioct+ishift), gisine ;fnl outleft
-aoutr       oscili       1000*kadsr*a4, ao2+cpsoct(ioct-ishift), gisine ;fnl outright
+aoutl       oscili       1000*kadsr*a4, ao2+cpsmidinn(ioct+ishift), gisine ;fnl outleft
+aoutr       oscili       1000*kadsr*a4, ao2+cpsmidinn(ioct-ishift), gisine ;fnl outright
             outs        aoutl, aoutr
             endin
 
@@ -246,7 +246,7 @@ irelease                =                       0.05
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                  0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
 iduration               =                       p3 + iattack + irelease
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) / 2400.
 ijunk6                  =                       p6
@@ -271,7 +271,7 @@ asig2                   =                       asig2 * kdamping * ileftgain
                         instr                   5 ; Tone wheel organ by Mikelson
                         pset                    0, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0
 ; Pitch.
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ; Amplitude.
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) / 16.0
@@ -324,7 +324,7 @@ isustain                =                       p3
 irelease                =                       0.05
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) * 5
 ijunk6                  =                       p6
@@ -348,7 +348,7 @@ af3                     reson                   asig, 440, 80
 aout                    balance                 0.6 * af1+ af2 + 0.6 * af3 + 0.4 * asig, asigcomp
 kexp                    expseg                  1.0, iattack, 2.0, isustain, 1.0, irelease, 1.0
 kenv                    =                       kexp - 1.0
-asig1                   =                       aout * ileftgain * kenv * kdamping,
+asig1                   =                       aout * ileftgain * kenv * kdamping
 asig2                   =                       aout* irightgain * kenv * kdamping
 						outs					asig1, asig2
                         endin
@@ -364,7 +364,7 @@ irelease                =                       0.05
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
 iduration               =                       p3 + iattack + irelease
-ifrequency              =                       cpsoct(p4 + 1)
+ifrequency              =                       cpsmidinn(p4 + 1)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) * 2.0
 ijunk6                  =                       p6
@@ -413,7 +413,7 @@ ifn2                    =                       giexponentialrise
 ifn3                    =                       githirteen
 ifn4                    =                       gisine
 ivibefn                 =                       gicosine
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) * 32.0
 ijunk6                  =                       p6
@@ -455,8 +455,8 @@ irelease                =                       0.06
                         ; xtratim                       iattack + irelease
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                  0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ioctave                 =                       p4
-ifrequency              =                       cpsoct(ioctave)
+ikeyin                 =                       p4
+ifrequency              =                       cpsmidinn(ikeyin)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) * 875.0
 iphase                  =                       p6
@@ -494,7 +494,7 @@ amp2                    =                       aamp2 * (1 + kdev2)
 aamp3                   linsegr                  0,.001,3000,.001,1000,.0017,12000,.0013,3700,.001,12500,.0018,3000,.0012,1200,.001,1400,.0017,6000,.0023,200,.001,3000,.001,1200,.0015,8000,.001,1800,.0015,6000,.08,1200,.2,200,.2,40,.2,10,.4,0,1,0
 kdevamp3                linsegr                  0, 0.02, 0.8, idur - 0.02, 0
 kdev3                   oscili                  kdevamp3, 70, gisine ,0
-amp3                    =                       aamp3 * (1 + kdev3),
+amp3                    =                       aamp3 * (1 + kdev3)
 
 awt1                    oscili                  amp1, ifreq, gisine
 awt2                    oscili                  amp2, 2.7 * ifreq, gisine
@@ -538,7 +538,7 @@ ijunk11                 =                       p11
 ; shift it.
 ishift                  =                       4.0 / 12000
 ; convert parameter 5 to cps.
-ipch                    =                       cpsoct(p4)
+ipch                    =                       cpsmidinn(p4)
 ; convert parameter 5 to oct.
 ioct                    =                       p4
 ; KONTROL
@@ -559,9 +559,9 @@ a4                      =                       exp(-0.5 * a3 + ao1)
 ; Cosine
 ao2                     oscili                  a2 * ipch, ipch, gicosine
 ; Final output left
-aoutl                   oscili                  iamplitude * kadsr * a4, ao2 + cpsoct(ioct + ishift), gisine
+aoutl                   oscili                  iamplitude * kadsr * a4, ao2 + cpsmidinn(ioct + ishift), gisine
 ; Final output right
-aoutr                   oscili                  iamplitude * kadsr * a4, ao2 + cpsoct(ioct - ishift), gisine
+aoutr                   oscili                  iamplitude * kadsr * a4, ao2 + cpsmidinn(ioct - ishift), gisine
 asig1                   =                       ileftpan * aoutl * kdamping
 asig2                   =                       irightpan * aoutr * kdamping
                         outs					asig1, asig2
@@ -583,7 +583,7 @@ asig2                   =                       irightpan * aoutr * kdamping
     ij9=p9
     ij10=p10
     ij11=p11
-  ihz  = cpsoct(p4)
+  ihz  = cpsmidinn(p4)
   idb  = p5
   ipos = p7
   iamp = ampdb(idb) * 1.5
@@ -639,8 +639,8 @@ ip5                     =                       gibergeman
 ip3                     =                       p3
 ip6                     =                       p3 * 0.25
 ip7                     =                       p3 * 0.75
-ip8                     =                       cpsoct(p4 - 0.01)
-ip9                     =                       cpsoct(p4 + 0.01)
+ip8                     =                       cpsmidinn(p4 - 0.01)
+ip9                     =                       cpsmidinn(p4 + 0.01)
 ip10                    =                       p10
 isc                     =                       idb * 0.333
 k1                      line                    40, p3, 800
@@ -682,7 +682,7 @@ irelease                =                       0.075
                         ; xtratim                       iattack + irelease
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                  0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) * 1.25
 ijunk6                  =                       p6
@@ -726,7 +726,7 @@ ifn2                    =                       gicosine
 ifn3                    =                       gisine
 ifn4                    =                       gicookblank
 ivibefn                 =                       gisine
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) * 1.25
 ijunk6                  =                       p6
@@ -765,7 +765,7 @@ ifn2                    =                       gicook3
 ifn3                    =                       gisine
 ifn4                    =                       gisine
 ivibefn                 =                       gicosine
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) * 2.0
 ; Constant-power pan.
@@ -799,7 +799,7 @@ irelease                =                       0.05
                         ; xtratim                       iattack + irelease
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ifrequencyb             =                       ifrequency * 1.003
 icarrierb               =                       icarrier * 1.004
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
@@ -840,7 +840,7 @@ irelease                =                       0.05
                         ; xtratim                       iattack + irelease
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ifrequencyb             =                       ifrequency * 1.003
 icarrierb               =                       icarrier * 1.004
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
@@ -879,7 +879,7 @@ irelease                =                       0.05
                         ; xtratim                       iattack + irelease
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ifrequency              =                       cpsoct(p4)
+ifrequency              =                       cpsmidinn(p4)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) * 5
 ijunk6                  =                       p6
@@ -903,7 +903,7 @@ af3                     reson                   asig, 440, 80
 aout                    balance                 0.6 * af1+ af2 + 0.6 * af3 + 0.4 * asig, asigcomp
 kexp                    expseg                  1.0, iattack, 2.0, isustain, 1.0, irelease, 1.0
 kenv                    =                       kexp - 1.0
-asig1                   =                       aout * ileftgain * kenv * kdamping,
+asig1                   =                       aout * ileftgain * kenv * kdamping
 asig2                   =                       aout* irightgain * kenv * kdamping
 						outs					asig1, asig2
                         endin
@@ -915,8 +915,8 @@ asig2                   =                       aout* irightgain * kenv * kdampi
                         ; mididefault             60, p3
                         ; midinoteonoct           p4, p5
 ; Do some phasing.
-icpsp1                  =                       cpsoct(p4 - 0.0002)
-icpsp2                  =                       cpsoct(p4 + 0.0002)
+icpsp1                  =                       cpsmidinn(p4 - 0.0002)
+icpsp2                  =                       cpsmidinn(p4 + 0.0002)
 ; Normalize to 80 dB = ampdb(80).
 ip6                     =                       ampdb(p5)
 ijunk6                  =                       p6
@@ -994,12 +994,12 @@ irelease                =                       0.15
                         ; xtratim                       iattack + irelease
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                  0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ioctave                 =                       p4
-ihertz                  =                       cpsoct(ioctave)
+ikeyin                 =                       p4
+ihertz                  =                       cpsmidinn(ikeyin)
 ; Detuning of strings by 4 cents each way.
 idetune                 =                       4.0 / 1200.0
-ihertzleft              =                       cpsoct(ioctave + idetune)
-ihertzright             =                       cpsoct(ioctave - idetune)
+ihertzleft              =                       cpsmidinn(ikeyin + idetune)
+ihertzright             =                       cpsmidinn(ikeyin - idetune)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5)
 ijunk6                  =                       p6
@@ -1022,7 +1022,7 @@ kvibrato                oscili                  1.0 / 120.0, 7.0, 1
 ; AUDIO
 kexponential            expseg                  1.0, p3 + iattack, 0.0001, irelease, 0.0001
 kenvelope               =                       (kexponential - 0.0001) * kdamping
-ag                      pluck                   iamplitude, cpsoct(ioctave + kvibrato), 200, igenleft, 1
+ag                      pluck                   iamplitude, cpsmidinn(ikeyin + kvibrato), 200, igenleft, 1
 agleft                  pluck                   iamplitude, ihertzleft, 200, igenleft, 1
 agright                 pluck                   iamplitude, ihertzright, 200, igenright, 1
 imsleft                 =                       0.2 * 1000
@@ -1045,7 +1045,7 @@ asig2                   =                       irightpan * asignal * kdamping
                         ; mididefault             60, p3
                         ; midinoteonoct           p4, p5
 ; Pitch.
-i1                      =                       cpsoct(p4)
+i1                      =                       cpsmidinn(p4)
 ; Amplitude.
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) * 1.0 / 5000.0
@@ -1107,8 +1107,8 @@ isustain                =                       p3
 irelease                =                       0.06
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ioctave                 =                       p4
-ifrequency              =                       cpsoct(ioctave)
+ikeyin                 =                       p4
+ifrequency              =                       cpsmidinn(ikeyin)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) / 3
 iphase                  =                       p6
@@ -1128,9 +1128,9 @@ idur                    =                       15
 iamp                    =                       iamplitude
 ifenv                   =                       giffitch2                       ; BELL SETTINGS:
 ifdyn                   =                       giffitch3                       ; AMP AND INDEX ENV ARE EXPONENTIAL
-ifq1                    =                       cpsoct(p4 - 1) * 5              ; DECREASING, N1:N2 IS 5:7, imax=10
+ifq1                    =                       cpsmidinn(p4 - 1) * 5              ; DECREASING, N1:N2 IS 5:7, imax=10
 if1                     =                       giffitch1                               ; DURATION = 15 sec
-ifq2                    =                       cpsoct(p4 - 1) * 7
+ifq2                    =                       cpsmidinn(p4 - 1) * 7
 if2                     =                       giffitch1
 imax                    =                       10
 aenv                    oscili                  iamp, 1 / idur, ifenv           ; ENVELOPE
@@ -1161,8 +1161,8 @@ isustain                =                       p3
 irelease                =                       0.06
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ioctave                 =                       p4
-ifrequency              =                       cpsoct(ioctave)
+ikeyin                  =                       p4
+ifrequency              =                       cpsmidinn(ikeyin)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) / 3
 iphase                  =                       p6
@@ -1194,8 +1194,8 @@ isustain                =                       p3
 irelease                =                       0.06
 p3                      =                       isustain + iattack + irelease
 kdamping                linsegr                 0.0, iattack, 1.0, isustain, 1.0, irelease, 0.0
-ioctave                 =                       p4
-ifrequency              =                       cpsoct(ioctave)
+ikeyin                 =                       p4
+ifrequency              =                       cpsmidinn(ikeyin)
 ; Normalize so iamplitude for p5 of 80 == ampdb(80).
 iamplitude              =                       ampdb(p5) / 3
 iphase                  =                       p6
@@ -1221,5 +1221,7 @@ asig2                   =                       asignal * irightgain * kdamping
 <CsScore>
 f 0 3600
 
+
+
 </CsScore>
 </CsoundSynthesizer>
diff --git a/examples/hommage.csd b/examples/hommage.csd
index b79b039..c19abef 100644
--- a/examples/hommage.csd
+++ b/examples/hommage.csd
@@ -1,7 +1,5 @@
 <CsoundSynthesizer>
-
 <CsOptions>
--odac 
 </CsOptions>
 
 <CsInstruments>
@@ -14,7 +12,8 @@ nchnls= 2
 
 instr 1
 
-
+ii   active       0
+print ii
 kfreq    expon      p5, p3, p6
 kinterval expon      p7, p3, p8    
 kglissdur line     p9, p3, p10
@@ -116,6 +115,8 @@ endin
 
 instr 2
 
+ii   active       2
+print ii
 
 kfreq    expon      p5, p3, p6
 kinterval expon      p7, p3, p8    
@@ -232,6 +233,8 @@ endin
 
 instr 3
 
+ii   active       0
+print ii
 
 kfreq0    expon      p5, p3, p6
 kinterval expon      p7, p3, p8    
@@ -368,13 +371,120 @@ i3 125   6   -20    800  850  1.1  1.3    6  6   -1  .5    22    3  500 0 0
 </CsScore>
 
 </CsoundSynthesizer>
+<bsbPanel>
+ <label>Widgets</label>
+ <objectName/>
+ <x>755</x>
+ <y>61</y>
+ <width>297</width>
+ <height>497</height>
+ <visible>true</visible>
+ <uuid/>
+ <bgcolor mode="nobackground">
+  <r>212</r>
+  <g>208</g>
+  <b>200</b>
+ </bgcolor>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider1</objectName>
+  <x>5</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{c337f225-a9f2-4de2-9e9d-e5cef5316d07}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider2</objectName>
+  <x>45</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{dfc06bbd-8563-4f7e-8ae3-845b96d54c38}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider3</objectName>
+  <x>85</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{e3c628a3-55e7-4178-8529-2a65308e2429}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider4</objectName>
+  <x>125</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{d594b856-3e0f-4f15-9838-6cffc5f12288}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider5</objectName>
+  <x>165</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{a710f9ee-5cc2-4dea-91b6-187b0dd8eac5}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+</bsbPanel>
+<bsbPresets>
+</bsbPresets>
 <MacOptions>
 Version: 3
 Render: Real
 Ask: Yes
 Functions: ioObject
 Listing: Window
-WindowBounds: 1040 71 400 535
+WindowBounds: 755 61 297 497
 CurrentView: io
 IOViewEdit: On
 Options:
@@ -387,4 +497,3 @@ ioSlider {85, 5} {20, 100} 0.000000 1.000000 0.000000 slider3
 ioSlider {125, 5} {20, 100} 0.000000 1.000000 0.000000 slider4
 ioSlider {165, 5} {20, 100} 0.000000 1.000000 0.000000 slider5
 </MacGUI>
-
diff --git a/examples/opcode_demos/lua_scoregen.csd b/examples/opcode_demos/lua_scoregen.csd
index 8c2dbe7..76375c4 100644
--- a/examples/opcode_demos/lua_scoregen.csd
+++ b/examples/opcode_demos/lua_scoregen.csd
@@ -12,7 +12,7 @@ lua_exec {{
 local ffi = require("ffi")
 local math = require("math")
 local string = require("string")
-local csoundApi = ffi.load('csound64')
+local csoundApi = ffi.load('C:\\utah\\opt\\Csound\\bin\\csound64.dll')
 -- Declare the parts of the Csound API that we need.
 ffi.cdef[[
     int csoundGetKsmps(void *);
@@ -72,3 +72,38 @@ e 4.0
 </CsScore>
 
 </CsoundSynthesizer>
+<bsbPanel>
+ <label>Widgets</label>
+ <objectName/>
+ <x>0</x>
+ <y>0</y>
+ <width>30</width>
+ <height>105</height>
+ <visible>true</visible>
+ <uuid/>
+ <bgcolor mode="nobackground">
+  <r>231</r>
+  <g>46</g>
+  <b>255</b>
+ </bgcolor>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider1</objectName>
+  <x>5</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{930dd6dd-5342-4be2-969c-8a8e68d109c4}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+</bsbPanel>
+<bsbPresets>
+</bsbPresets>
diff --git a/examples/python/Lindenmayer.py b/examples/python/Lindenmayer.py
index 8d16693..1c85554 100644
--- a/examples/python/Lindenmayer.py
+++ b/examples/python/Lindenmayer.py
@@ -44,7 +44,7 @@ filename = os.path.abspath('Lindenmayer.py')
 print 'Filename:', filename
 model.setConformPitches(True)
 csound.load('../CsoundAC.csd')
-csound.setCommand("csound --old-parser -m3 -RWZdfo" + filename + ".wav " + filename + ".orc " + filename + ".sco")
+csound.setCommand("csound -m3 -RWZdfo" + filename + ".wav " + filename + ".orc " + filename + ".sco")
 csound.setFilename(filename)
 score = model.getScore()
 print 'Events in generated score:', len(score)
diff --git a/examples/python/StrangeAtrractor.py b/examples/python/StrangeAtrractor.py
index bd2fcd0..43b802b 100644
--- a/examples/python/StrangeAtrractor.py
+++ b/examples/python/StrangeAtrractor.py
@@ -51,7 +51,7 @@ model.addChild(rescale)
 model.setTonesPerOctave(12.0)
 model.generate()
 
-csound.load("./CsoundAC.csd")
+csound.load("../CsoundAC.csd")
 csound.setCommand("csound -RWdfo StrangeAttractor.wav StrangeAttractor.orc StrangeAttractor.sco")
 score = model.getScore()
 print 'Events in generated score:', len(score)
diff --git a/frontends/CMakeLists.txt b/frontends/CMakeLists.txt
index 94bd35b..fd65a80 100644
--- a/frontends/CMakeLists.txt
+++ b/frontends/CMakeLists.txt
@@ -63,6 +63,7 @@ if(BUILD_CSBEATS)
     ADD_FLEX_BISON_DEPENDENCY(csbeats_SCANNER csbeats_PARSER)
 
     include_directories(${CMAKE_CURRENT_BINARY_DIR})
+    include_directories(${CMAKE_CURRENT_SOURCE_DIR}/beats)
 
     set(csbeats_SRCS
 	${CMAKE_CURRENT_SOURCE_DIR}/beats/main.c
diff --git a/frontends/CsoundAC/CMakeLists.txt b/frontends/CsoundAC/CMakeLists.txt
index c7a350e..4b0891e 100644
--- a/frontends/CsoundAC/CMakeLists.txt
+++ b/frontends/CsoundAC/CMakeLists.txt
@@ -71,6 +71,7 @@ if(BUILD_CSOUND_AC)
         include(${SWIG_USE_FILE})
         set(CMAKE_SWIG_OUTDIR ${BUILD_LIB_DIR})
         include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+	list(APPEND CMAKE_SWIG_FLAGS "-includeall" "-verbose")
     endif()
 
     if(BUILD_CSOUND_AC_PYTHON_INTERFACE)
diff --git a/frontends/CsoundAC/ChordLindenmayer.cpp b/frontends/CsoundAC/ChordLindenmayer.cpp
index 03c34ac..6f1ac72 100644
--- a/frontends/CsoundAC/ChordLindenmayer.cpp
+++ b/frontends/CsoundAC/ChordLindenmayer.cpp
@@ -140,30 +140,7 @@ namespace csound
 
   void ChordLindenmayer::tieOverlappingNotes()
   {
-    // If the score contains two notes of the same pitch
-    // and loudness greater than 0 that overlap in time,
-    // extend the earlier note and discard the later note.
-    // Retain the instrument number of the earlier note.
-    score.sort();
-    for (int laterI = score.size() - 1; laterI > 1; --laterI) {
-      Event &laterEvent = score[laterI];
-      for (int earlierI = laterI - 1; earlierI > 0; --earlierI) {
-        Event &earlierEvent = score[earlierI];
-        if (earlierEvent.getKeyNumber() != laterEvent.getKeyNumber()) {
-          continue;
-        }
-        if (earlierEvent.getVelocity() <= 0.0 || laterEvent.getVelocity() <= 0.0) {
-          continue;
-        }
-        if (earlierEvent.getOffTime() < laterEvent.getTime()) {
-          continue;
-        }
-        // Ok, must be tied.
-        earlierEvent.setOffTime(laterEvent.getOffTime());
-        score.erase(score.begin() + laterI);
-        break;
-      }
-    }
+    score.tieOverlappingNotes();
   }
 
   void ChordLindenmayer::applyVoiceleadingOperations()
diff --git a/frontends/CsoundAC/ChordLindenmayer.hpp b/frontends/CsoundAC/ChordLindenmayer.hpp
index 93d6acd..a076a1d 100644
--- a/frontends/CsoundAC/ChordLindenmayer.hpp
+++ b/frontends/CsoundAC/ChordLindenmayer.hpp
@@ -63,9 +63,9 @@ using namespace boost::numeric;
 
 namespace csound
 {
-  extern void printChord(std::ostream &stream, std::string label, const std::vector<double> &chord);
+  extern void SILENCE_PUBLIC printChord(std::ostream &stream, std::string label, const std::vector<double> &chord);
 
-  struct Turtle
+  struct SILENCE_PUBLIC Turtle
   {
     Event note;
     Event step;
@@ -170,7 +170,7 @@ namespace csound
     }
   };
 
-  struct Command
+  struct SILENCE_PUBLIC Command
   {
     char operation;
     char target;
@@ -302,7 +302,7 @@ namespace csound
    * </ul>
    */
 
-  class ChordLindenmayer :
+  class SILENCE_PUBLIC ChordLindenmayer :
     public VoiceleadingNode
   {
   public:
diff --git a/frontends/CsoundAC/ChordSpace.cpp b/frontends/CsoundAC/ChordSpace.cpp
new file mode 100644
index 0000000..8d06c9a
--- /dev/null
+++ b/frontends/CsoundAC/ChordSpace.cpp
@@ -0,0 +1,2729 @@
+local Silencio = require("Silencio")
+local metalua_serialize = require("metalua_serialize")
+local io = require("io")
+local string = require("string")
+
+local ChordSpace = {}
+
+function ChordSpace.help()
+print [[
+
+C H O R D S P A C E
+
+Copyright 2010, 2011 by Michael Gogins.
+
+This software is licensed under the terms of the GNU Lesser General Public
+License.
+
+This package, part of Silencio, implements a geometric approach to some common
+operations on chords in neo-Riemannian music theory for use in score
+generating procedures:
+
+--  Identifying whether a chord belongs to some equivalence class of music
+    theory, or sending a chord to its equivalent within a representative
+    fundamental domain of some equivalence class. The equivalence classes are
+    octave (O), permutational (P), transpositional, (T), inversional (I), and
+    their compounds OP, OPT (set-class or chord type), and OPTI (prime form).
+
+--  Causing chord progressions to move strictly within an orbifold that
+    generates some equivalence class.
+
+--  Implementing chord progressions based on the L, P, R, D, K, and Q
+    operations of neo-Riemannian theory (thus implementing some aspects of
+    "harmony").
+
+--  Implementing chord progressions performed within a more abstract
+    equivalence class by means of the best-formed voice-leading within a less
+    abstract equivalence class (thus implementing some fundamentals of
+    "counterpoint").
+
+The associated ChordSpaceView package can display these chord spaces and
+operations for trichords in an interactive 3-dimensional view.
+
+DEFINITIONS
+
+Pitch is the perception of a distinct sound frequency. It is a logarithmic
+perception; octaves, which sound 'equivalent' in some sense, represent
+doublings or halvings of frequency.
+
+Pitches and intervals are represented as real numbers. Middle C is 60 and the
+octave is 12. Our usual system of 12-tone equal temperament, as well as MIDI
+key numbers, are completely represented by the whole numbers; any and all
+other pitches can be represented simply by using fractions.
+
+A voice is a distinct sound that is heard as having a pitch.
+
+A chord is simply a set of voices heard at the same time, represented here
+as a point in a chord space having one dimension of pitch for each voice
+in the chord.
+
+For the purposes of algorithmic composition in Silencio, a score is considered
+as a sequence of more or less fleeting chords.
+
+EQUIVALENCE CLASSES
+
+An equivalence class identifies elements of a set. Operations that send one
+equivalent point to another induce quotient spaces or orbifolds, where the
+equivalence operation identifies points on one face of the orbifold with
+points on an opposing face. The fundamental domain of the equivalence class
+is the space "within" the orbifold.
+
+Plain chord space has no equivalence classes. Ordered chords are represented
+as vectors in parentheses (p1, ..., pN). Unordered chords are represented as
+sorted vectors in braces {p1, ..., pN}. Unordering is itself an equivalence
+class.
+
+The following equivalence classes apply to pitches and chords, and exist in
+different orbifolds. Equivalence classes can be combined (Callendar, Quinn,
+and Tymoczko, "Generalized Voice-Leading Spaces," _Science_ 320, 2008), and
+the more equivalence classes are combined, the more abstract is the resulting
+orbifold compared to the parent space.
+
+In most cases, a chord space can be divided into a number, possibly
+infinite, of geometrically equivalent fundamental domains for the same
+equivalence class. Therefore, here we use the notion of 'representative'
+fundamental domain. For example, the representative fundamental domain of
+unordered sequences, out of all possible orderings, consists of all sequences
+in their ordinary sorted order. It is important, in the following, to identify
+representative fundamental domains that combine properly, e.g. such that the
+representative fundamental domain of OP / the representative fundamental
+domain of PI equals the representative fundamental domain of OPI. And this in
+turn may require accounting for duplicate elements of the representative
+fundamental domain caused by reflections or singularities in the orbifold.
+
+C       Cardinality equivalence, e.g. {1, 1, 2} == {1, 2}. _Not_ assuming
+        cardinality equivalence ensures that there is a proto-metric in plain
+        chord space that is inherited by all child chord spaces. Cardinality
+        equivalence is never assumed here, because we are working in chord
+        spaces of fixed dimensionality; e.g. we represent the note middle C
+        not as {60}, but as {60, 60, ..., 60}.
+
+O       Octave equivalence. The fundamental domain is defined by the pitches
+        in a chord spanning the range of an octave or less, and summing to
+        an octave or less.
+
+P       Permutational equivalence. The fundamental domain is defined by a
+        "wedge" of plain chord space in which th#e voices of a chord are always
+        sorted by pitch.
+
+T       Transpositional equivalence, e.g. {1, 2} == {7, 8}. The fundamental
+        domain is defined as a plane in chord space at right angles to the
+        diagonal of unison chords. Represented by the chord always having a
+        sum of pitches equal to 0.
+
+I       Inversional equivalence. Care is needed to distinguish the
+        mathematician's sense of 'invert', which means 'pitch-space inversion'
+        or 'reflect in a point', from the musician's sense of 'invert', which
+        varies according to context but in practice often means 'registral
+        inversion' or 'revoice by adding an octave to the lowest tone of a
+        chord.' Here, we use 'invert' and 'inversion' in the mathematician's
+        sense, and we use the terms 'revoice' and 'voicing' for the musician's
+        'invert' and 'inversion'. The inversion point for any inversion lies
+        on the unison diagonal. A fundamental domain is defined as any half of
+        chord space that is bounded by a plane containing the inversion point.
+        Represented as the chord having the first interval between voices be
+        smaller than or equal to the final interval (recursing for chords of
+        more than 3 voices).
+
+PI      Inversional equivalence with permutational equivalence. The
+        'inversion flat' of unordered chord space is a hyperplane consisting
+        of all those unordered chords that are invariant under inversion. A
+        fundamental domain is defined by any half space bounded by a
+        hyperplane containing the inversion flat. It is represented as that
+        half of the space on or lower than the hyperplane defined by the
+        inversion flat and the unison diagonal.
+
+OP      Octave equivalence with permutational equivalence. Tymoczko's orbifold
+        for chords; i.e. chords with a fixed number of voices in a harmonic
+        context. The fundamental domain is defined as a hyperprism one octave
+        long with as many sides as voices and the ends identified by octave
+        equivalence and one cyclical permutation of voices, modulo the
+        unordering. In OP for trichords in 12TET, the augmented triads run up
+        the middle of the prism, the major and minor triads are in 6
+        alternating columns around the augmented triads, the two-pitch chords
+        form the 3 sides, and the one-pitch chords form the 3 edges that join
+        the sides.
+
+OPT     The layer of the OP prism as close as possible to the origin, modulo
+        the number of voices. Chord type. Note that CM and Cm are different
+        OPT. Because the OP prism is canted down from the origin, at least one
+        pitch in each OPT chord (excepting the origin itself) is negative.
+
+OPI     The OP prism modulo inversion, i.e. 1/2 of the OP prism. The
+        representative fundamental consits of those chords less than or equal
+        to their inversions modulo OP.
+
+OPTI    The OPT layer modulo inversion, i.e. 1/2 of the OPT layer.
+        Set-class. Note that CM and Cm are the same OPTI.
+
+OPERATIONS
+
+Each of the above equivalence classes is, of course, an operation that sends
+chords outside the fundamental domain to chords inside the fundamental domain.
+And we define the following additional operations:
+
+T(p, x)         Translate p by x.
+
+I(p [, x])      Reflect p in x, by default the origin.
+
+P               Send a major triad to the minor triad with the same root,
+                or vice versa (Riemann's parallel transformation).
+
+L               Send a major triad to the minor triad one major third higher,
+                or vice versa (Riemann's Leittonwechsel or leading-tone
+                exchange transformation).
+
+R               Send a major triad to the minor triad one minor third lower,
+                or vice versa (Riemann's relative transformation).
+
+D               Send a triad to the next triad a perfect fifth lower
+                (dominant transformation).
+
+P, L, and R have been extended as follows, see Fiore and Satyendra,
+"Generalized Contextual Groups", _Music Theory Online_ 11, August 2008:
+
+K(c)            Interchange by inversion;
+                K(c) := I(c, c[1] + c[2]).
+                This is a generalized form of P; for major and minor triads,
+                it is exactly the same as P, but it also works with other
+                chord types.
+
+Q(c, n, m)      Contexual transposition;
+                Q(c, n, m) := T(c, n) if c is a T-form of m,
+                or T(c, -n) if c is an I-form of M. Not a generalized form
+                of L or R; but, like them, K and Q generate the T-I group.
+
+]]
+end
+--[[
+
+LOG
+
+2011-Sep-07
+
+Redoing this package from scratch using GVLS formulas.
+
+2011-Sep-09
+
+There are definite problems with side effects in these tests. The first test
+passes, but not when in series with another test.
+
+Is there a bug in "~=" for Lua and/or LuaJIT?
+
+2011-Sep-10
+
+There is definitely one or more bugs in LuaJIT vs. Lua. Tests run to 4 or 5
+voices in Lua that do not work in LuaJIT. There appear to be false temporaries
+or something in LuaJIT.
+
+2011-Sep-11
+
+I am going to redo the equivalence formulas in sets: vanilla GVLS, GVLS with
+my modifications, and mine. This seems like the only way of sorting out the
+mess.
+
+2011-Sep-22
+
+It may be that my R, P, T, and I do not fit together to make OPTI because my I
+does not use the inversion flat.
+
+[2011-Sep-28: Not so, but because my T was aligned on 12-TET.]
+
+2011-Sep-27
+
+Redo tests of equivalences. [2011-Sep-28: They pass up to 5 voices.]
+
+2011-Sep-28
+
+First, some lessons learned painfully. I can still think quite well, but I AM
+slower, and I have to ALLOW for that. So I actually need to think MORE
+CAREFULLY (which takes longer) in order to make sure tests and logic are quite
+clear, as this will save yet more time in testing and debugging. E.g., if I
+had had my current unit tests in place when I began to rewrite this code,
+I would have been where I am now four or five months ago. It wouldn't hurt,
+either, to ask for help sooner rather than later -- DT's advice was extremely
+helpful.
+
+OK, I get it now. My prior attempts to combine representative fundamental
+domains were ill-advised.
+
+The fundamental domain formulas are now as correct as the tests I have written
+can tell, although I should try to come up with some additional tests. Yet
+there still may be problems...
+
+2011-Oct-11
+
+RPTT and RPTTI need unit tests. The definitions in :information and in
+ChordSpaceGroup are not consistent, this is why ChordSpaceGroup is failing.
+
+2011-Oct-13
+
+I have redone ChordSpaceGroup using different orbifolds and equivalences that
+keep operations in OPTI, I, and T strictly within equal temperament. I do not
+use the GVLS fundamental domains directly for this at all. The symmetries of
+the operations are all I need musically, so I simply put the GVLS OPTIs into
+equal temperament and enumerate them for my set-class group (OPTTI). I do this
+by taking the floor of the OPTI and then transposing it up by one unit of
+transposition.
+
+2011-Oct-16
+
+Problems with ChordSpaceGroup:toChord and :fromChord. Look at voicing number
+and transposition.
+
+2011-Oct-17
+
+Problems, e.g. {-4, 0, 4} transposed 4 is also eOP {-4, 0, 4}, ditto
+transposed 8 and 12. The inversion flat would behave similiarly.
+
+In other words, for some chords ChordSpaceGroup:toChord will give the same
+chord for several different P, I, T, V, but ChordSpaceGroup:fromChord can only
+give the same P, I, T, V for all of those chords. This is correct, but it
+means that in unit testing from and should compare only chords, not numbers.
+
+2011-Oct-19
+
+In 1 dimension, all pitches under OP equivalence fall in the fundamental
+domain {[0, 12)}; there are no duplicate equivalents.
+
+In 2 dimensions, all chords under OP equivalence fall in the fundamental
+domain {[-6, 6], [-6, 6], [12, 0], [0, 12]}; there are duplicate
+equivalents, because otherwise the chord {11, 11} has no equivalent in
+the domain (it is actually {-1, 11}).
+
+2011-Oct-20
+
+DD'OOOOHHHHHHHHHHHHH.... -0 and 0 are messing up chord comparators and hashes.
+Hence the sets of OPTTI are wrong. Hence the ChordSpaceGroup is wrong. But,
+now I know what the problem is!
+
+2011-Oct-24
+
+"allOf" fails for OPT and OPTI because of fractional pitches. This must be
+dealt with, but is not so serious right now.
+
+More urgently, there is still a problem with OPI for 5 voices. I should
+capture the offending chord and test it in solitary confinement. Well, here
+it is:
+
+TESTING CHORDS OF  5 VOICES...
+
+pitches:  { -13.0000 -13.0000 -13.0000  -8.0000  -6.0000}
+I:        {  13.0000  13.0000  13.0000   8.0000   6.0000}
+eO:       {  -1.0000  -1.0000  -1.0000   4.0000   6.0000}  iseO:    false
+eP:       { -13.0000 -13.0000 -13.0000  -8.0000  -6.0000}  iseP:    true
+eT:       {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseT:    false
+          {   0.0000   0.0000   0.0000   5.0000   7.0000}
+eI:       { -13.0000 -13.0000 -13.0000  -8.0000  -6.0000}  iseI:    true
+eV:       { -13.0000 -13.0000 -13.0000  -8.0000  -6.0000}  iseV:    true
+          {   0.0000   0.0000   0.0000   5.0000   7.0000}
+eOP:      {  -1.0000  -1.0000  -1.0000   4.0000   6.0000}  iseOP:   false
+pcs:      {   4.0000   6.0000  11.0000  11.0000  11.0000}
+eOPT:     {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseOPT:  false
+eOPTT:    {  -2.0000  -2.0000  -2.0000   3.0000   5.0000}
+          {   0.0000   0.0000   0.0000   5.0000   7.0000}
+eOPI:     {  -4.0000   1.0000   1.0000   1.0000   6.0000}  iseOPI:  false
+eOPTI:    {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseOPTI: false
+eOPTTI:   {  -2.0000  -2.0000  -2.0000   3.0000   5.0000}
+          {   0.0000   0.0000   0.0000   5.0000   7.0000}
+layer:      -53.00
+pitches:  {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}
+I:        {   2.4000   2.4000   2.4000  -2.6000  -4.6000}
+eO:       {  -2.4000  -2.4000   9.6000   2.6000   4.6000}  iseO:    true
+eP:       {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseP:    true
+eT:       {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseT:    true
+          {   0.0000   0.0000   0.0000   5.0000   7.0000}
+eI:       {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseI:    true
+eV:       {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseV:    true
+          {   0.0000   0.0000   0.0000   5.0000   7.0000}
+eOP:      {  -2.4000  -2.4000   2.6000   4.6000   9.6000}  iseOP:   true
+pcs:      {   2.6000   4.6000   9.6000   9.6000   9.6000}
+eOPT:     {  -4.6000  -2.6000   2.4000   2.4000   2.4000}  iseOPT:  true
+eOPTT:    {  -4.0000  -2.0000   3.0000   3.0000   3.0000}
+          {   0.0000   2.0000   7.0000   7.0000   7.0000}
+eOPI:     {  -2.6000   2.4000   2.4000   2.4000   7.4000}  iseOPI:  false
+eOPTI:    {  -4.6000  -2.6000   2.4000   2.4000   2.4000}  iseOPTI: false
+eOPTTI:   {  -4.0000  -2.0000   3.0000   3.0000   3.0000}
+          {   0.0000   2.0000   7.0000   7.0000   7.0000}
+layer:        0.00
+========================================================================
+FAILED: chord:eOPTI():iseOPTI() == true
+========================================================================
+pitches:  { -13.0000 -13.0000 -13.0000  -8.0000   6.0000}
+I:        {  13.0000  13.0000  13.0000   8.0000  -6.0000}
+eO:       {  -1.0000  -1.0000  -1.0000   4.0000   6.0000}  iseO:    false
+eP:       { -13.0000 -13.0000 -13.0000  -8.0000   6.0000}  iseP:    true
+eT:       {  -4.8000  -4.8000  -4.8000   0.2000  14.2000}  iseT:    false
+          {   0.0000   0.0000   0.0000   5.0000  19.0000}
+eI:       { -13.0000 -13.0000 -13.0000  -8.0000   6.0000}  iseI:    true
+eV:       {  -8.0000   6.0000 -13.0000 -13.0000 -13.0000}  iseV:    false
+          {   5.0000  19.0000   0.0000   0.0000   0.0000}
+eOP:      {  -1.0000  -1.0000  -1.0000   4.0000   6.0000}  iseOP:   false
+pcs:      {   4.0000   6.0000  11.0000  11.0000  11.0000}
+eOPT:     {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseOPT:  false
+eOPTT:    {  -2.0000  -2.0000  -2.0000   3.0000   5.0000}
+          {   0.0000   0.0000   0.0000   5.0000   7.0000}
+eOPI:     {  -4.0000   1.0000   1.0000   1.0000   6.0000}  iseOPI:  false
+eOPTI:    {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseOPTI: false
+eOPTTI:   {  -2.0000  -2.0000  -2.0000   3.0000   5.0000}
+          {   0.0000   0.0000   0.0000   5.0000   7.0000}
+layer:      -41.00
+pitches:  {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}
+I:        {   2.4000   2.4000   2.4000  -2.6000  -4.6000}
+eO:       {  -2.4000  -2.4000   9.6000   2.6000   4.6000}  iseO:    true
+eP:       {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseP:    true
+eT:       {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseT:    true
+          {   0.0000   0.0000   0.0000   5.0000   7.0000}
+eI:       {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseI:    true
+eV:       {  -2.4000  -2.4000  -2.4000   2.6000   4.6000}  iseV:    true
+          {   0.0000   0.0000   0.0000   5.0000   7.0000}
+eOP:      {  -2.4000  -2.4000   2.6000   4.6000   9.6000}  iseOP:   true
+pcs:      {   2.6000   4.6000   9.6000   9.6000   9.6000}
+eOPT:     {  -4.6000  -2.6000   2.4000   2.4000   2.4000}  iseOPT:  true
+eOPTT:    {  -4.0000  -2.0000   3.0000   3.0000   3.0000}
+          {   0.0000   2.0000   7.0000   7.0000   7.0000}
+eOPI:     {  -2.6000   2.4000   2.4000   2.4000   7.4000}  iseOPI:  false
+eOPTI:    {  -4.6000  -2.6000   2.4000   2.4000   2.4000}  iseOPTI: false
+eOPTTI:   {  -4.0000  -2.0000   3.0000   3.0000   3.0000}
+          {   0.0000   2.0000   7.0000   7.0000   7.0000}
+layer:        0.00
+========================================================================
+FAILED: chord:eOPTI():iseOPTI() == true
+========================================================================
+pitches:  { -13.0000 -13.0000 -13.0000  -7.0000  -7.0000}
+I:        {  13.0000  13.0000  13.0000   7.0000   7.0000}
+eO:       {  -1.0000  -1.0000  -1.0000   5.0000   5.0000}  iseO:    false
+eP:       { -13.0000 -13.0000 -13.0000  -7.0000  -7.0000}  iseP:    true
+eT:       {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseT:    false
+          {   0.0000   0.0000   0.0000   6.0000   6.0000}
+eI:       { -13.0000 -13.0000 -13.0000  -7.0000  -7.0000}  iseI:    true
+eV:       { -13.0000 -13.0000 -13.0000  -7.0000  -7.0000}  iseV:    true
+          {   0.0000   0.0000   0.0000   6.0000   6.0000}
+eOP:      {  -1.0000  -1.0000  -1.0000   5.0000   5.0000}  iseOP:   false
+pcs:      {   5.0000   5.0000  11.0000  11.0000  11.0000}
+eOPT:     {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseOPT:  false
+eOPTT:    {  -2.0000  -2.0000  -2.0000   4.0000   4.0000}
+          {   0.0000   0.0000   0.0000   6.0000   6.0000}
+eOPI:     {  -5.0000   1.0000   1.0000   1.0000   7.0000}  iseOPI:  false
+eOPTI:    {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseOPTI: false
+eOPTTI:   {  -2.0000  -2.0000  -2.0000   4.0000   4.0000}
+          {   0.0000   0.0000   0.0000   6.0000   6.0000}
+layer:      -53.00
+pitches:  {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}
+I:        {   2.4000   2.4000   2.4000  -3.6000  -3.6000}
+eO:       {  -2.4000  -2.4000   9.6000   3.6000   3.6000}  iseO:    true
+eP:       {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseP:    true
+eT:       {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseT:    true
+          {   0.0000   0.0000   0.0000   6.0000   6.0000}
+eI:       {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseI:    true
+eV:       {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseV:    true
+          {   0.0000   0.0000   0.0000   6.0000   6.0000}
+eOP:      {  -2.4000  -2.4000   3.6000   3.6000   9.6000}  iseOP:   true
+pcs:      {   3.6000   3.6000   9.6000   9.6000   9.6000}
+eOPT:     {  -3.6000  -3.6000   2.4000   2.4000   2.4000}  iseOPT:  true
+eOPTT:    {  -3.0000  -3.0000   3.0000   3.0000   3.0000}
+          {   0.0000   0.0000   6.0000   6.0000   6.0000}
+eOPI:     {  -3.6000   2.4000   2.4000   2.4000   8.4000}  iseOPI:  false
+eOPTI:    {  -3.6000  -3.6000   2.4000   2.4000   2.4000}  iseOPTI: false
+eOPTTI:   {  -3.0000  -3.0000   3.0000   3.0000   3.0000}
+          {   0.0000   0.0000   6.0000   6.0000   6.0000}
+layer:        0.00
+========================================================================
+FAILED: chord:eOPTI():iseOPTI() == true
+========================================================================
+pitches:  { -13.0000 -13.0000 -13.0000  -7.0000   5.0000}
+I:        {  13.0000  13.0000  13.0000   7.0000  -5.0000}
+eO:       {  -1.0000  -1.0000  -1.0000   5.0000   5.0000}  iseO:    false
+eP:       { -13.0000 -13.0000 -13.0000  -7.0000   5.0000}  iseP:    true
+eT:       {  -4.8000  -4.8000  -4.8000   1.2000  13.2000}  iseT:    false
+          {   0.0000   0.0000   0.0000   6.0000  18.0000}
+eI:       { -13.0000 -13.0000 -13.0000  -7.0000   5.0000}  iseI:    true
+eV:       { -13.0000 -13.0000  -7.0000   5.0000 -13.0000}  iseV:    false
+          {   0.0000   0.0000   6.0000  18.0000   0.0000}
+eOP:      {  -1.0000  -1.0000  -1.0000   5.0000   5.0000}  iseOP:   false
+pcs:      {   5.0000   5.0000  11.0000  11.0000  11.0000}
+eOPT:     {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseOPT:  false
+eOPTT:    {  -2.0000  -2.0000  -2.0000   4.0000   4.0000}
+          {   0.0000   0.0000   0.0000   6.0000   6.0000}
+eOPI:     {  -5.0000   1.0000   1.0000   1.0000   7.0000}  iseOPI:  false
+eOPTI:    {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseOPTI: false
+eOPTTI:   {  -2.0000  -2.0000  -2.0000   4.0000   4.0000}
+          {   0.0000   0.0000   0.0000   6.0000   6.0000}
+layer:      -41.00
+pitches:  {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}
+I:        {   2.4000   2.4000   2.4000  -3.6000  -3.6000}
+eO:       {  -2.4000  -2.4000   9.6000   3.6000   3.6000}  iseO:    true
+eP:       {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseP:    true
+eT:       {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseT:    true
+          {   0.0000   0.0000   0.0000   6.0000   6.0000}
+eI:       {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseI:    true
+eV:       {  -2.4000  -2.4000  -2.4000   3.6000   3.6000}  iseV:    true
+          {   0.0000   0.0000   0.0000   6.0000   6.0000}
+eOP:      {  -2.4000  -2.4000   3.6000   3.6000   9.6000}  iseOP:   true
+pcs:      {   3.6000   3.6000   9.6000   9.6000   9.6000}
+eOPT:     {  -3.6000  -3.6000   2.4000   2.4000   2.4000}  iseOPT:  true
+eOPTT:    {  -3.0000  -3.0000   3.0000   3.0000   3.0000}
+          {   0.0000   0.0000   6.0000   6.0000   6.0000}
+eOPI:     {  -3.6000   2.4000   2.4000   2.4000   8.4000}  iseOPI:  false
+eOPTI:    {  -3.6000  -3.6000   2.4000   2.4000   2.4000}  iseOPTI: false
+eOPTTI:   {  -3.0000  -3.0000   3.0000   3.0000   3.0000}
+          {   0.0000   0.0000   6.0000   6.0000   6.0000}
+layer:        0.00
+========================================================================
+FAILED: chord:eOPTI():iseOPTI() == true
+========================================================================
+
+It looks like the real culprit is this eV thing.
+
+2011-Oct-25
+
+Regarding eV, it's tricky because to start with a voicing and permute doesn't
+give the same permutations as starting with a chord and permuting. So the
+permutations have always to be in the same order. This may be my whole problem
+all along.
+
+I think eV may be the first permutation that is the closest to the unison
+diagonal.
+
+2011-Oct-27
+
+It's official:
+
+From:   5       0       0       0
+        {  -3.0000   0.0000   4.0000}
+fromChord: chord:       {  -3.0000   0.0000   4.0000}   true
+fromChord: op:          {  -3.0000   0.0000   4.0000}
+fromChord: optt:        {  -3.0000   0.0000   4.0000}
+fromChord: optt_t:      {  -3.0000   0.0000   4.0000}   0
+equals
+fromChord: optti:       {  -3.0000   0.0000   4.0000}   -3,1.6653345369377e-016,4
+fromChord: voicing:     {   0.0000   0.0000   0.0000}   0
+fromChord:              nil     0       0       0
+To:     nil     0       0       0
+c:\utah\opt\Csound\bin\luajit.exe: .\ChordSpace.lua:2477: attempt to perform arithmetic on local 'P' (a nil value)
+stack traceback:
+        .\ChordSpace.lua:2477: in function 'toChord'
+        ChordSpaceTest.lua:205: in main chunk
+        [C]: ?
+
+Hashing will need clamping. That might need a global g.
+
+TODO:
+
+--  Redo basic unit tests to ensure nothing has been broken.
+
+--  Compute and save a chord space group file if the requested group does not
+    exist; always load a chord space group from a file. This saves simply
+    oodles of time.
+
+--  Display the fundamental domains in the viewer much more clearly.
+
+--  Display various temperament systems to see how harmony might work with
+    voiceleading around the central diagonal. Alternatively, set up columns
+    or lattices of chords that are in interesting relations, and see how they
+    sound and work together.
+
+--  Implement Rachel Hall, "Linear Contextual Transformations," 2009,
+    which seems to further extend the Generalized Contextual Group using
+    affine transformations in chord space, and Maxx Cho, "The Voice-Leading
+    Automorphism and Riemannian Operators," 2009, which may show that tonality
+    arises from a voice-leading automorphism in the Riemannian group.
+
+--  Implement various scales found in 20th and 21st century harmony
+    along with 'splitting' and 'merging' operations.
+]]
+
+ChordSpace.help()
+
+-- Returns n!
+
+function ChordSpace.factorial (n)
+	if n == 0 then
+		return 1
+	else
+		return n * ChordSpace.factorial(n - 1)
+	end
+end
+
+-- For taking numerical errors into account.
+
+ChordSpace.EPSILON = 1
+local epsilonFactor = 1000
+
+while true do
+    ChordSpace.EPSILON = ChordSpace.EPSILON / 2
+    local nextEpsilon = ChordSpace.EPSILON / 2
+    local onePlusNextEpsilon = 1 + nextEpsilon
+    if onePlusNextEpsilon == 1 then
+        print(string.format('ChordSpace.EPSILON: %g', ChordSpace.EPSILON))
+        break
+    end
+end
+
+function ChordSpace.eq_epsilon(a, b, factor)
+    factor = factor or epsilonFactor
+    if (math.abs(a - b) < (ChordSpace.EPSILON * factor)) then
+        return true
+    end
+    return false
+end
+
+function ChordSpace.gt_epsilon(a, b, factor)
+    factor = factor or epsilonFactor
+    local eq = ChordSpace.eq_epsilon(a, b, factor)
+    if eq then
+        return false
+    end
+    if a > b then
+        return true
+    end
+    return false
+end
+
+function ChordSpace.lt_epsilon(a, b, factor)
+    factor = factor or epsilonFactor
+    local eq = ChordSpace.eq_epsilon(a, b, factor)
+    if eq then
+        return false
+    end
+    if a < b then
+        return true
+    end
+    return false
+end
+
+function ChordSpace.ge_epsilon(a, b, factor)
+    factor = factor or epsilonFactor
+    local eq = ChordSpace.eq_epsilon(a, b, factor)
+    if eq then
+        return true
+    end
+    if a > b then
+        return true
+    end
+    return false
+end
+
+function ChordSpace.le_epsilon(a, b, factor)
+    factor = factor or epsilonFactor
+    local eq = ChordSpace.eq_epsilon(a, b, factor)
+    if eq then
+        return true
+    end
+    if a < b then
+        return true
+    end
+    return false
+end
+
+-- The size of the octave, defined to be consistent with
+-- 12 tone equal temperament and MIDI.
+
+ChordSpace.OCTAVE = 12
+
+-- Middle C.
+
+ChordSpace.MIDDLE_C = 60
+ChordSpace.C4 = ChordSpace.MIDDLE_C
+
+-- Returns the pitch transposed by semitones, which may be any scalar.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+local function T(pitch, semitones)
+    return pitch + semitones
+end
+
+-- Returns the pitch reflected in the center, which may be any pitch.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+local function I(pitch, center)
+    center = center or 0
+    return center - pitch
+end
+
+-- Returns the Euclidean distance between chords a and b,
+-- which must have the same number of voices.
+
+function ChordSpace.euclidean(a, b)
+    local sumOfSquaredDifferences = 0
+    for voice = 1, #a do
+        sumOfSquaredDifferences = sumOfSquaredDifferences + math.pow((a[voice] - b[voice]), 2)
+    end
+    return math.sqrt(sumOfSquaredDifferences)
+end
+
+-- Chords represent simultaneously sounding pitches.
+-- The pitches are represented as semitones with 0 at the origin
+-- and middle C as 60.
+
+Chord = {}
+
+-- Returns a new chord object with no voices.
+
+function Chord:new(o)
+    o = o or {duration = {}, channel = {}, velocity = {}, pan = {}}
+    if not o.duration then
+        o.duration = {}
+    end
+    if not o.channel then
+        o.channel = {}
+    end
+    if not o.velocity then
+        o.velocity = {}
+    end
+    if not o.pan then
+        o.pan = {}
+    end
+    setmetatable(o, self)
+    self.__index = self
+    return o
+end
+
+-- Returns a string representation of the chord.
+-- Quadratic complexity, but short enough not to matter.
+
+function Chord:__tostring()
+    local buffer = '{'
+    for voice = 1, #self do
+        buffer = buffer .. string.format('%12.7f', self[voice])
+    end
+    buffer = buffer .. '}'
+    return buffer
+end
+
+-- Resizes a chord to the specified number of voices.
+-- Existing voices are not changed. Extra voices are removed.
+-- New voices are initialized to 0.
+
+function Chord:resize(voices)
+    while #self < voices do
+        table.insert(self, 0)
+        table.insert(self.duration, 0)
+        table.insert(self.channel, 0)
+        table.insert(self.velocity, 0)
+        table.insert(self.pan, 0)
+    end
+    while #self > voices do
+        table.remove(self)
+        table.remove(self.duration)
+        table.remove(self.channel)
+        table.remove(self.velocity)
+        table.remove(self.pan)
+    end
+end
+
+function Chord:setDuration(value)
+    for i = 1, #self do
+        self.duration[i] = value
+    end
+end
+
+function Chord:getDuration(voice)
+    voice = voice or 1
+    return self.duration[voice]
+end
+
+function Chord:setChannel(value)
+    for i = 1, #self do
+        self.channel[i] = value
+    end
+end
+
+function Chord:getChannel(voice)
+    voice = voice or 1
+    return self.channel[voice]
+end
+
+function Chord:setVelocity(value)
+    for i = 1, #self do
+        self.velocity[i] = value
+    end
+end
+
+function Chord:getVelocity(voice)
+    voice = voice or 1
+    return self.velocity[voice]
+end
+
+function Chord:setPan(value)
+    for i = 1, #self do
+        self.pan[i] = value
+    end
+end
+
+function Chord:getPan(voice)
+    voice = voice or 1
+    return self.pan[voice]
+end
+
+function Chord:count(pitch)
+    local n = 0
+    for voice = 1, #self do
+        if self[voice] == pitch then
+            n = n + 1
+        end
+    end
+    return n
+end
+
+-- Redefines the metamethod to implement value semantics
+-- for ==, for the pitches in this only.
+
+function Chord:__eq(other)
+    if not (#self == #other) then
+        return false
+    end
+    for voice = 1, #self do
+        --if not (self[voice] == other[voice]) then
+        if not (ChordSpace.eq_epsilon(self[voice], other[voice])) then
+            return false
+        end
+    end
+    return true
+end
+
+function Chord:__eq_epsilon(other)
+    if not (#self == #other) then
+        return false
+    end
+    for voice = 1, #self do
+        if not (ChordSpace.eq_epsilon(self[voice], other[voice])) then
+            return false
+        end
+    end
+    return true
+end
+
+-- This hash function is used to give chords value semantics for sets.
+
+function Chord:__hash()
+    local buffer = ''
+    local comma = ','
+    for voice = 1, #self do
+        local digit = tostring(self[voice])
+        if voice == 1 then
+            buffer = buffer .. digit
+        else
+            buffer = buffer .. comma .. digit
+        end
+    end
+    return buffer
+end
+
+-- Redefines the metamethod to implement value semantics
+-- for <, for the pitches in this only.
+
+function Chord:__lt(other)
+    local voices = math.min(#self, #other)
+    for voice = 1, voices do
+        if ChordSpace.lt_epsilon(self[voice], other[voice]) then
+            return true
+        end
+        if ChordSpace.gt_epsilon(self[voice], other[voice]) then
+            return false
+        end
+    end
+    if #self < #other then
+        return true
+    end
+    return false
+end
+
+function Chord:__le(other)
+    if self:__eq(other) then
+        return true
+    end
+    return self:__lt(other)
+end
+
+-- Returns whether or not the chord contains the pitch.
+
+function Chord:contains(pitch)
+    for voice, pitch_ in ipairs(self) do
+        if pitch_ == pitch then
+            return true
+        end
+    end
+    return false
+end
+
+-- Returns the lowest pitch in the chord,
+-- and also its voice index.
+
+function Chord:min()
+    local lowestVoice = 1
+    local lowestPitch = self[lowestVoice]
+    for voice = 2, #self do
+        if self[voice] < lowestPitch then
+            lowestPitch = self[voice]
+            lowestVoice = voice
+        end
+    end
+    return lowestPitch, lowestVoice
+end
+
+-- Returns the minimum interval in the chord.
+
+function Chord:minimumInterval()
+    local minimumInterval = math.abs(self[1] - self[2])
+    for v1 = 1, #self do
+        for v2 = 1, #self do
+            if t (v1 == v2) then
+                local interval = math.abs(self[v1] - self[v2])
+                if interval < minimumInterval then
+                    minimumInterval = interval
+                end
+            end
+        end
+    end
+    return minimumInterval
+end
+
+-- Returns the highest pitch in the chord,
+-- and also its voice index.
+
+function Chord:max()
+    local highestVoice = 1
+    local highestPitch = self[highestVoice]
+    for voice = 2, #self do
+        if self[voice] > highestPitch then
+            highestPitch = self[voice]
+            highestVoice = voice
+        end
+    end
+    return highestPitch, highestVoice
+end
+
+-- Returns the maximum interval in the chord.
+
+function Chord:maximumInterval()
+    return self:max() - self:min()
+end
+
+-- Returns a new chord whose pitches are the floors of this chord's pitches.
+
+function Chord:floor()
+    local chord = self:clone()
+    for voice = 1, #self do
+        chord[voice] = math.floor(self[voice])
+    end
+    return chord
+end
+
+-- Returns a new chord whose pitches are the ceilings of this chord's pitches.
+
+function Chord:ceil()
+    local chord = self:clone()
+    for voice = 1, #self do
+        chord[voice] = math.ceil(self[voice])
+    end
+    return chord
+end
+
+-- Returns a value copy of the chord.
+
+function Chord:clone()
+    local clone_ = Chord:new()
+    for voice, pitch in ipairs(self) do
+        clone_[voice] = pitch
+    end
+    for voice, value in ipairs(self.duration) do
+        clone_.duration[voice] = value
+    end
+    for voice, value in ipairs(self.channel) do
+        clone_.channel[voice] = value
+    end
+    for voice, value in ipairs(self.velocity) do
+        clone_.velocity[voice] = value
+    end
+    for voice, value in ipairs(self.pan) do
+        clone_.pan[voice] = value
+    end
+    return clone_
+end
+
+-- Returns the origin of the chord's space.
+
+function Chord:origin()
+    local clone_ = self:clone()
+    for voice = 1, #clone_ do
+        clone_[voice] = 0
+    end
+    return clone_
+end
+
+function Chord:distanceToOrigin()
+    local origin = self:origin()
+    return ChordSpace.euclidean(self, origin)
+end
+
+function Chord:distanceToUnisonDiagonal()
+    local unison = self:origin()
+    local pitch = self:layer() / #self
+    for voice = 1, #self do
+        unison[voice] = pitch
+    end
+    return ChordSpace.euclidean(self, unison)
+end
+
+-- Returns the maximally even chord in the chord's space,
+-- e.g. the augmented triad for 3 dimensions.
+
+function Chord:maximallyEven()
+    local clone_ = self:clone()
+    local g = ChordSpace.OCTAVE / #clone_
+    for i = 1, #clone_ do
+        clone_[i] = (i - 1) * g
+    end
+    return clone_
+end
+
+-- Returns the sum of the pitches in the chord.
+
+function Chord:layer()
+    local s = 0
+    for voice, pitch in ipairs(self) do
+        s = s + pitch
+    end
+    return s
+end
+
+-- Transposes the chord by the indicated interval (may be a fraction).
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:T(interval)
+    local clone_ = self:clone()
+    for voice = 1, #clone_ do
+        clone_[voice] = T(clone_[voice], interval)
+    end
+    return clone_
+end
+
+-- Inverts the chord by another chord that is on the unison diagonal, by
+-- default the origin. NOTE: Does NOT return the result under any equivalence
+-- class.
+
+function Chord:I(center)
+    center = center or 0
+    local inverse = self:clone()
+    for voice = 1, #inverse do
+        inverse[voice] = I(self[voice], center)
+    end
+    return inverse
+end
+
+-- Returns the equivalent of the pitch under pitch-class equivalence, i.e.
+-- the pitch is in the interval [0, OCTAVE).
+
+function ChordSpace.epc(pitch)
+    --while pitch < 0 do
+    while ChordSpace.lt_epsilon(pitch, 0) do
+        pitch = pitch + ChordSpace.OCTAVE
+    end
+    --while pitch >= ChordSpace.OCTAVE do
+    while ChordSpace.ge_epsilon(pitch, ChordSpace.OCTAVE) do
+        pitch = pitch - ChordSpace.OCTAVE
+    end
+    return pitch
+end
+
+-- Returns whether the chord is within the fundamental domain of
+-- pitch-class equivalence, i.e. is a pitch-class set.
+
+function Chord:isepcs()
+    for voice = 1, #chord do
+        --if not (self[voice] == ChordSpace.epc(chord[voice])) then
+        if not ChordSpace.eq_epsilon(self[voice], ChordSpace.epc(chord[voice])) then
+            return false
+        end
+    end
+    return true
+end
+
+-- Returns the equivalent of the chord under pitch-class equivalence,
+-- i.e. the pitch-class set of the chord.
+
+function Chord:epcs()
+    local chord = self:clone()
+    for voice = 1, #chord do
+        chord[voice] = ChordSpace.epc(chord[voice])
+    end
+    return chord
+end
+
+-- Returns whether the chord is within the fundamental domain of
+-- transposition to 0.
+
+function Chord:iset()
+    local et = self:et()
+    if not (et == self) then
+        return false
+    end
+    return true
+end
+
+-- Returns the equivalent of the chord within the fundamental domain of
+-- transposition to 0.
+
+function Chord:et()
+    local min_ = self:min()
+    return self:T(-min_)
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of the indicated range equivalence.
+
+function Chord:iseR(range)
+    --[[ GVLS:
+    local max_ = self:max()
+    local min_ = self:min()
+    if not (max_ <= (min_ + range)) then
+        return false
+    end
+    local layer_ = self:layer()
+    if not ((0 <= layer_) and (layer_ <= range)) then
+        return false
+    end
+    return true
+    --]]
+    --[[ GVLS modified:
+    local max_ = self:max()
+    local min_ = self:min()
+    if not ChordSpace.le_epsilon(max_, (min_ + range)) then
+        return false
+    end
+    local layer_ = self:layer()
+    if not (ChordSpace.le_epsilon(0, layer_) and ChordSpace.le_epsilon(layer_, range)) then
+        return false
+    end
+    return true
+    --]]
+    ----[[ MKG several equivalents of boundary points in domain:
+    local max_ = self:max()
+    local min_ = self:min()
+    if not ChordSpace.le_epsilon(max_, (min_ + range)) then
+        return false
+    end
+    local layer_ = self:layer()
+    if not (ChordSpace.le_epsilon(0, layer_) and ChordSpace.le_epsilon(layer_, range)) then
+        return false
+    end
+    return true
+    --]]
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of octave equivalence.
+
+function Chord:iseO()
+    return self:iseR(ChordSpace.OCTAVE)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of a range equivalence.
+
+function Chord:eR(range)
+    local chord = self:clone()
+    --if chord:iseR(range) then
+    --    return chord
+    --end
+    -- The clue here is that at least one voice must be >= 0,
+    -- but no voice can be > range.
+    -- First, move all pitches inside the interval [0, OCTAVE),
+    -- which is not the same as the fundamental domain.
+    chord = self:epcs()
+    -- Then, reflect voices that are outside of the fundamental domain
+    -- back into it, which will revoice the chord, i.e.
+    -- the sum of pitches is in [0, OCTAVE].
+    --while chord:layer() > range do
+    while ChordSpace.gt_epsilon(chord:layer(), range) do
+        local maximumPitch, maximumVoice = chord:max()
+        -- Because no voice is above the range,
+        -- any voices that need to be revoiced will now be negative.
+        chord[maximumVoice] = maximumPitch - ChordSpace.OCTAVE
+    end
+    return chord
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of octave equivalence.
+
+function Chord:eO()
+    return self:eR(ChordSpace.OCTAVE)
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of permutational equivalence.
+
+function Chord:iseP()
+    for voice = 2, #self do
+        --if not (self[voice - 1] <= self[voice]) then
+        if not ChordSpace.le_epsilon(self[voice - 1], self[voice]) then
+            return false
+        end
+    end
+    return true
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of permutational equivalence.
+
+function Chord:eP()
+    clone_ = self:clone()
+    table.sort(clone_)
+    return clone_
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of transpositional equivalence.
+
+function Chord:iseT()
+    ----[[ GVLS:
+    local layer_ = self:layer()
+    if not ChordSpace.eq_epsilon(layer_, 0) then
+        return false
+    end
+    return true
+    --]]
+    --[[ MKG:
+    g = g or 1
+    local ep = self:eP()
+    if not (ep == ep:eT(g):eP()) then
+        return false
+    end
+    return true
+    --]]
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of transpositonal equivalence.
+
+function Chord:eT()
+    ----[[ GVLS:
+    local layer_ = self:layer()
+    local sumPerVoice = layer_ / #self
+    return self:T(-sumPerVoice)
+    --]]
+    --[[ MKG:
+    g = g or 1
+    local iterator = self
+    -- Transpose down to layer 0 or just below.
+    while iterator:layer() > 0 do
+        iterator = iterator:T(-g)
+    end
+    -- Transpose up to layer 0 or just above.
+    while iterator:layer() < 0 do
+        iterator = iterator:T(g)
+    end
+    return iterator
+    --]]
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of transpositonal equivalence and the equal temperament generated
+-- by g. I.e., returns the chord transposed such that its layer is 0 or, under
+-- transposition, the positive layer closest to 0. NOTE: Does NOT return the
+-- result under any other equivalence class.
+
+function Chord:eTT(g)
+    g = g or 1
+    local et = self:eT()
+    local transposition = math.ceil(et[1]) - et[1]
+    local ett = et:T(transposition)
+    return ett
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of translational equivalence and the equal temperament generated by g.
+
+function Chord:iseTT(g)
+    g = g or 1
+    local ep = self:eP()
+    if not (ep == ep:eTT(g)) then
+        return false
+    end
+    return true
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of inversional equivalence.
+
+function Chord:iseI(inverse)
+    --[[ GLVS:
+    local chord = self:clone()
+    local lowerVoice = 2
+    local upperVoice = #chord
+    while lowerVoice < upperVoice do
+        -- GVLS: tests only 1 interval: x[2] - x[1] <= x[#x] - x[#x - 1]
+        local lowerInterval = chord[lowerVoice] - chord[lowerVoice - 1]
+        local upperInterval = chord[upperVoice] - chord[upperVoice - 1]
+        if lowerInterval < upperInterval then
+            return true
+        end
+        if lowerInterval > upperInterval then
+            return false
+        end
+        lowerVoice = lowerVoice + 1
+        upperVoice = upperVoice - 1
+    end
+    return true
+    --]]
+    ----[[ MKG:
+    inverse = inverse or self:I()
+    if not self:__le(inverse) then
+        return false
+    end
+    return true
+    --]]
+    --[[ MKG:
+    inverse = self:I()
+    if not self:__le(inverse) then
+        return false
+    end
+    return true
+    --]]
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of inversional equivalence.
+
+function Chord:eI()
+    if self:iseI() then
+        return self:clone()
+    end
+    return self:I()
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of range and permutational equivalence.
+
+function Chord:iseRP(range)
+    --[[ GVLS:
+    for voice = 2, #self do
+        if not (self[voice - 1] <= self[voice]) then
+            return false
+        end
+    end
+    if not (self[#self] <= (self[1] + range)) then
+        return false
+    end
+    local layer_ = self:layer()
+    if not ((0 <= layer_) and (layer_ <= range)) then
+        return false
+    end
+    return true
+    --]]
+    ----[[ MKG:
+    if not self:iseR(range) then
+        return false
+    end
+    if not self:iseP() then
+        return false
+    end
+    return true
+    --]]
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of octave and permutational equivalence.
+
+function Chord:iseOP()
+    return self:iseRP(ChordSpace.OCTAVE)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of range and permutational equivalence.
+
+function Chord:eRP(range)
+    return self:eR(range):eP()
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of octave and permutational equivalence.
+
+function Chord:eOP()
+    return self:eRP(ChordSpace.OCTAVE)
+end
+
+-- Returns a copy of the chord cyclically permuted by a stride, by default 1.
+-- The direction of rotation is the same as musicians' first inversion, second
+-- inversion, and so on.
+
+function Chord:cycle(stride)
+    stride = stride or 1
+    local clone_ = self:clone()
+    if stride < 0 then
+        for i = 1, stride do
+            local tail = table.remove(clone_)
+            table.insert(clone_, 1, tail)
+        end
+        return chord
+    end
+    if stride > 0 then
+        for i = 1, math.abs(stride) do
+            local head = table.remove(clone_, 1)
+            table.insert(clone_, head)
+        end
+    end
+    return clone_
+end
+
+-- Returns the permutations of the pitches in a chord. The permutations from
+-- each particular permutation are always returned in the same order.
+
+function Chord:permutations()
+    local chord = self:clone()
+    local permutations_ = {}
+    permutations_[1] = chord
+    for i = 2, #self do
+        chord = chord:cycle()
+        permutations_[i] = chord
+    end
+    table.sort(permutations_)
+    return permutations_
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of voicing equivalence.
+
+function Chord:iseV()
+    local eV = self:eV()
+    --print(string.format('chord: %s  eV: %s', tostring(self), tostring(eV)))
+    if not (self == eV) then
+        return false
+    end
+    return true
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of voicing equivalence.
+
+function Chord:eV()
+    ----[[
+    for index, voicing in ipairs(self:permutations()) do
+        local wraparound = voicing[1] + ChordSpace.OCTAVE - voicing[#voicing]
+        local iseV_ = true
+        for voice = 1, #voicing - 1 do
+            local inner = voicing[voice + 1] - voicing[voice]
+            if not ChordSpace.ge_epsilon(wraparound, inner) then
+            --if inner > wraparound then
+                iseV_ = false
+            end
+        end
+        if iseV_ then
+            return voicing
+        end
+    end
+    --]]
+    --[[
+    local voicings = self:permutations()
+    local distancesForIndexes = {}
+    for i = 1, #voicings do
+        distancesForIndexes[i] = voicings[i]:distanceToUnisonDiagonal()
+    end
+    local minimumDistanceToUnisonDiagonal = distancesForIndexes[1]
+    for i = 2, #voicings do
+        if distancesForIndexes[i] < minimumDistanceToUnisonDiagonal then
+            minimumDistanceToUnisonDiagonal = distancesForIndexes[i]
+        end
+    end
+    for i = 1, #voicings do
+         if distancesForIndexes[i] == minimumDistanceToUnisonDiagonal then
+            return voicings[i]
+        end
+    end
+    --]]
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of range, permutational, and transpositional equivalence.
+
+function Chord:iseRPT(range)
+    --[[ GVLS:
+    -- GVLS: if not (self[#self] <= self[1] + ChordSpace.OCTAVE) then
+    if not (ChordSpace.le_epsilon(self[#self], (self[1] + range))) then
+        return false
+    end
+    local layer_ = self:layer()
+    -- GVLS: if not (layer_ == 0) then
+    if not ChordSpace.eq_epsilon(layer_, 0) then
+        return false
+    end
+    if #self < 2 then
+        return true
+    end
+    local wraparound = self[1] + range - self[#self]
+    for voice = 1, #self - 1  do
+        local inner = self[voice + 1] - self[voice]
+        if not ChordSpace.le_epsilon(wraparound, inner) then
+            return false
+        end
+    end
+    return true
+    --]]
+    ----[[ MKG:
+    if not self:iseR(range) then
+        return false
+    end
+    if not self:iseP() then
+        return false
+    end
+    if not self:iseT() then
+        return false
+    end
+    if not self:iseV() then
+        return false
+    end
+    return true
+    --]]
+end
+
+function Chord:iseRPTT(range)
+    if not self:iseP() then
+        return false
+    end
+    if not self:iseR(range) then
+        return false
+    end
+    if not self:iseTT() then
+        return false
+    end
+    if not self:iseV() then
+        return false
+    end
+    return true
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of octave, permutational, and transpositional equivalence.
+
+function Chord:iseOPT()
+    return self:iseRPT(ChordSpace.OCTAVE)
+end
+
+function Chord:iseOPTT()
+    return self:iseRPTT(ChordSpace.OCTAVE)
+end
+
+-- Returns a copy of the chord 'inverted' in the musician's sense,
+-- i.e. revoiced by cyclically permuting the chord and
+-- adding (or subtracting) an octave to the highest (or lowest) voice.
+-- The revoicing will move the chord up or down in pitch.
+-- A positive direction is the same as a musician's first inversion,
+-- second inversion, etc.
+
+function Chord:v(direction)
+    direction = direction or 1
+    local chord = self:clone()
+    while direction > 0 do
+        chord = chord:cycle(1)
+        chord[#chord] = chord[#chord] + ChordSpace.OCTAVE
+        direction = direction - 1
+    end
+    while direction < 0 do
+        chord = chord:cycle(-1)
+        chord[1] = chord[1] - ChordSpace.OCTAVE
+        direction = direction + 1
+    end
+    return chord
+end
+
+-- Returns all the 'inversions' (in the musician's sense)
+-- or octavewise revoicings of the chord.
+
+function Chord:voicings()
+    local chord = self:clone()
+    local voicings = {}
+    voicings[1] = chord
+    for i = 2, #self do
+        chord = chord:v()
+        voicings[i] = chord
+    end
+    return voicings
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of range, permutational, and transpositional equivalence; the same
+-- as set-class type, or chord type.
+
+function Chord:eRPT(range)
+    --[[
+    local erp = self:eRP(range)
+    local voicings_ = erp:voicings()
+    for voice = 1, #voicings_ do
+        local voicing = voicings_[voice]:eT()
+        if voicing:iseV() then
+            return voicing
+        end
+    end
+    print('ERROR: Chord:eRPT() should not come here: ' .. tostring(self))
+    --]]
+    ----[[
+    local erp = self:eRP(range)
+    local voicings_ = erp:voicings()
+    for voice = 1, #voicings_ do
+        local voicing = voicings_[voice]
+        if voicing:iseV() then
+            return voicing:eT()
+        end
+    end
+    print('ERROR: Chord:eRPT() should not come here: ' .. tostring(self))
+    --]]
+end
+
+function Chord:eRPTT(range)
+    local erp = self:eRP(range)
+    local voicings_ = erp:voicings()
+    for voice = 1, #voicings_ do
+        local voicing = voicings_[voice]:eTT()
+        if voicing:iseV() then
+            return voicing
+        end
+    end
+    print('ERROR: Chord:eRPTT() should not come here: ' .. tostring(self))
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of octave, permutational, and transpositional equivalence.
+
+function Chord:eOPT()
+    return self:eRPT(ChordSpace.OCTAVE)
+end
+
+function Chord:eOPTT()
+    return self:eRPTT(ChordSpace.OCTAVE)
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of range, permutational, and inversional equivalence.
+
+function Chord:iseRPI(range)
+    if not self:iseRP(range) then
+        return false
+    end
+    local inverse = self:I():eRP(range)
+    assert(inverse, 'Inverse is nil.')
+    if not self:iseI(inverse) then
+        return false
+    end
+    return true
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of octave, permutational, and inversional equivalence.
+
+function Chord:iseOPI()
+    return self:iseRPI(ChordSpace.OCTAVE)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of range, permutational, and inversional equivalence.
+
+function Chord:eRPI(range)
+    local erp = self:eRP(range)
+    if erp:iseRPI(range) then
+        return erp
+    end
+    return erp:I():eRP(range)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of octave, permutational, and inversional equivalence.
+
+function Chord:eOPI()
+    return self:eRPI(ChordSpace.OCTAVE)
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of range, permutational, transpositional, and inversional equivalence.
+
+function Chord:iseRPTI(range)
+    --[[ GVLS:
+    -- GVLS: if not (self[#self] <= self[1] + ChordSpace.OCTAVE) then
+    if not ChordSpace.le_epsilon(self[#self], (self[1] + range)) then
+        return false
+    end
+    local layer_ = self:layer()
+    -- GVLS: if not (layer_ == 0) then
+    if not ChordSpace.eq_epsilon(layer_, 0) then
+        return false
+    end
+    if #self <= 2 then
+        return true
+    end
+    local wraparound = self[1] + range - self[#self]
+    for voice = 1, #self - 1  do
+        local inner = self[voice + 1] - self[voice]
+        if not ChordSpace.le_epsilon(wraparound, inner) then
+            return false
+        end
+    end
+    if not self:iseI() then
+        return false
+    end
+    return true
+    --]]
+    ----[[ MKG:
+    if not self:iseRPT(range) then
+        return false
+    end
+    if not self:iseI() then
+        return false
+    end
+    return true
+    --]]
+end
+
+function Chord:iseRPTTI(range)
+    if not self:iseRPTT(range) then
+        return false
+    end
+    if not self:iseI() then
+        return false
+    end
+    return true
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of octave, permutational, transpositional, and inversional equivalence.
+
+function Chord:iseOPTI()
+    return self:iseRPTI(ChordSpace.OCTAVE)
+end
+
+function Chord:iseOPTTI()
+    return self:iseRPTTI(ChordSpace.OCTAVE)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of range, permutational, transpositional, and inversional
+-- equivalence.
+
+function Chord:eRPTI(range)
+    local rpt = self:eRPT(range)
+    if rpt:iseI() then
+        return rpt
+    end
+    return rpt:I():eRPT(range)
+end
+
+function Chord:eRPTTI(range)
+    local rpt = self:eRPTT(range)
+    if rpt:iseRPTTI(range) then
+        return rpt
+    end
+    return rpt:I():eRPTT(range)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of range, permutational, transpositional, and inversional
+-- equivalence.
+
+function Chord:eOPTI()
+    return self:eRPTI(ChordSpace.OCTAVE)
+end
+
+function Chord:eOPTTI()
+    return self:eRPTTI(ChordSpace.OCTAVE)
+end
+
+function Chord:name()
+    local chordName = ChordSpace.namesForChords[self:__hash()]
+    if chordName == nil then
+        chordName = ''
+    end
+    return chordName
+end
+
+-- Returns a formatted string with information about the chord.
+
+function Chord:information()
+    local et = self:eT():et()
+    local evt = self:eV():et()
+    local eopt = self:eOPT():et()
+    local epcs = self:epcs():eP()
+    local eopti = self:eOPTI():et()
+    local eOP = self:eOP()
+    chordName = eOP:name()
+    return string.format([[pitches:  %s  %s
+I:        %s
+eO:       %s  iseO:    %s
+eP:       %s  iseP:    %s
+eT:       %s  iseT:    %s
+          %s
+eI:       %s  iseI:    %s
+eV:       %s  iseV:    %s
+          %s
+eOP:      %s  iseOP:   %s
+pcs:      %s
+eOPT:     %s  iseOPT:  %s
+eOPTT:    %s
+          %s
+eOPI:     %s  iseOPI:  %s
+eOPTI:    %s  iseOPTI: %s
+eOPTTI:   %s
+          %s
+layer:      %6.2f]],
+tostring(self), chordName,
+tostring(self:I()),
+tostring(self:eO()),    tostring(self:iseO()),
+tostring(self:eP()),    tostring(self:iseP()),
+tostring(self:eT()),    tostring(self:iseT()),
+tostring(et),
+tostring(self:eI()),    tostring(self:iseI()),
+tostring(self:eV()),    tostring(self:iseV()),
+tostring(evt),
+tostring(self:eOP()),   tostring(self:iseOP()),
+tostring(epcs),
+tostring(self:eOPT()),  tostring(self:iseOPT()),
+tostring(self:eOPTT()),
+tostring(eopt),
+tostring(self:eOPI()),  tostring(self:iseOPI()),
+tostring(self:eOPTI()), tostring(self:iseOPTI()),
+tostring(self:eOPTTI()),
+tostring(eopti),
+self:layer())
+end
+
+function ChordSpace.set(collection)
+    local set_ = {}
+    for key, value in pairs(collection) do
+        set_[value:__hash()] = value
+    end
+    return set_
+end
+
+function ChordSpace.sortedSet(collection)
+    local set_ = ChordSpace.set(collection)
+    local sortedSet_ = {}
+    for key, value in pairs(set_) do
+        table.insert(sortedSet_, value)
+    end
+    table.sort(sortedSet_)
+    return sortedSet_
+end
+
+function ChordSpace.zeroBasedSet(sortedSet)
+    local zeroBasedSet = {}
+    for index, value in pairs(sortedSet) do
+        zeroBasedSet[index - 1] = value
+    end
+    return zeroBasedSet
+end
+
+function ChordSpace.setContains(setA, x)
+    if setA[x:__hash()] == x then
+        return true
+    end
+    return false
+end
+
+function ChordSpace.setInsert(setA, x)
+    if not ChordSpace.setContains(setA, x) then
+        setA[x:__hash()] = x
+    end
+end
+
+function ChordSpace.sortedEquals(sortedA, sortedB)
+    if not (#sortedA == #sortedB) then
+        return false
+    end
+    for i = 1, #sortedA do
+        if not (sortedA[i] == sortedB[i]) then
+            return false
+        end
+    end
+    return true
+end
+
+function ChordSpace.setIntersection(A, setB)
+    local result = {}
+    for index, value in pairs(A) do
+        if ChordSpace.setContains(setB, value) then
+            ChordSpace.setInsert(result, value)
+        end
+    end
+    return result
+end
+
+function ChordSpace.union(A, B)
+    local result = {}
+    for index, value in pairs(A) do
+        ChordSpace.setInsert(result, value)
+    end
+    for index, value in pairs(B) do
+        ChordSpace.setInsert(result, value)
+    end
+    return result
+end
+
+ChordSpace.pitchClassesForNames = {}
+
+ChordSpace.pitchClassesForNames["C" ] =  0
+ChordSpace.pitchClassesForNames["C#"] =  1
+ChordSpace.pitchClassesForNames["Db"] =  1
+ChordSpace.pitchClassesForNames["D" ] =  2
+ChordSpace.pitchClassesForNames["D#"] =  3
+ChordSpace.pitchClassesForNames["Eb"] =  3
+ChordSpace.pitchClassesForNames["E" ] =  4
+ChordSpace.pitchClassesForNames["F" ] =  5
+ChordSpace.pitchClassesForNames["F#"] =  6
+ChordSpace.pitchClassesForNames["Gb"] =  6
+ChordSpace.pitchClassesForNames["G" ] =  7
+ChordSpace.pitchClassesForNames["G#"] =  8
+ChordSpace.pitchClassesForNames["Ab"] =  8
+ChordSpace.pitchClassesForNames["A" ] =  9
+ChordSpace.pitchClassesForNames["A#"] = 10
+ChordSpace.pitchClassesForNames["Bb"] = 10
+ChordSpace.pitchClassesForNames["B" ] = 11
+
+ChordSpace.chordsForNames = {}
+ChordSpace.namesForChords = {}
+
+local function fill(rootName, rootPitch, typeName, typePitches)
+    local chordName = rootName .. typeName
+    local chord = Chord:new()
+    local splitPitches = Silencio.split(typePitches)
+    chord:resize(#splitPitches)
+    for voice, pitchName in ipairs(splitPitches) do
+        local pitch = ChordSpace.pitchClassesForNames[pitchName]
+        chord[voice] = rootPitch + pitch
+    end
+    chord = chord:eOP()
+    ChordSpace.chordsForNames[chordName] = chord
+    ChordSpace.namesForChords[chord:__hash()] = chordName
+end
+
+for rootName, rootPitch in pairs(ChordSpace.pitchClassesForNames) do
+    fill(rootName, rootPitch, " minor second",     "C  C#                             ")
+    fill(rootName, rootPitch, " major second",     "C     D                           ")
+    fill(rootName, rootPitch, " minor third",      "C        Eb                       ")
+    fill(rootName, rootPitch, " major third",      "C           E                     ")
+    fill(rootName, rootPitch, " perfect fourth",   "C              F                  ")
+    fill(rootName, rootPitch, " tritone",          "C                 F#              ")
+    fill(rootName, rootPitch, " perfect fifth",    "C                    G            ")
+    fill(rootName, rootPitch, " augmented fifth",  "C                       G#        ")
+    fill(rootName, rootPitch, " sixth",            "C                          A      ")
+    fill(rootName, rootPitch, " minor seventh  ",  "C                             Bb  ")
+    fill(rootName, rootPitch, " major seventh",    "C                                B")
+    -- Scales.
+    fill(rootName, rootPitch, " major",            "C     D     E  F     G     A     B")
+    fill(rootName, rootPitch, " minor",            "C     D  Eb    F     G  Ab    Bb  ")
+    fill(rootName, rootPitch, " natural minor",    "C     D  Eb    F     G  Ab    Bb  ")
+    fill(rootName, rootPitch, " harmonic minor",   "C     D  Eb    F     G  Ab       B")
+    fill(rootName, rootPitch, " chromatic",        "C  C# D  D# E  F  F# G  G# A  A# B")
+    fill(rootName, rootPitch, " whole tone",       "C     D     E     F#    G#    A#  ")
+    fill(rootName, rootPitch, " diminished",       "C     D  D#    F  F#    G# A     B")
+    fill(rootName, rootPitch, " pentatonic",       "C     D     E        G     A      ")
+    fill(rootName, rootPitch, " pentatonic major", "C     D     E        G     A      ")
+    fill(rootName, rootPitch, " pentatonic minor", "C        Eb    F     G        Bb  ")
+    fill(rootName, rootPitch, " augmented",        "C        Eb E        G  Ab    Bb  ")
+    fill(rootName, rootPitch, " Lydian dominant",  "C     D     E     Gb G     A  Bb  ")
+    fill(rootName, rootPitch, " 3 semitone",       "C        D#       F#       A      ")
+    fill(rootName, rootPitch, " 4 semitone",       "C           E           G#        ")
+    fill(rootName, rootPitch, " blues",            "C     D  Eb    F  Gb G        Bb  ")
+    fill(rootName, rootPitch, " bebop",            "C     D     E  F     G     A  Bb B")
+    -- Major chords.
+    fill(rootName, rootPitch, "M",                 "C           E        G            ")
+    fill(rootName, rootPitch, "6",                 "C           E        G     A      ")
+    fill(rootName, rootPitch, "69",                "C     D     E        G     A      ")
+    fill(rootName, rootPitch, "69b5",              "C     D     E     Gb       A      ")
+    fill(rootName, rootPitch, "M7",                "C           E        G           B")
+    fill(rootName, rootPitch, "M9",                "C     D     E        G           B")
+    fill(rootName, rootPitch, "M11",               "C     D     E  F     G           B")
+    fill(rootName, rootPitch, "M#11",              "C     D     E  F#    G           B")
+    fill(rootName, rootPitch, "M13",               "C     D     E  F     G     A     B")
+    -- Minor chords.
+    fill(rootName, rootPitch, "m",                 "C        Eb          G            ")
+    fill(rootName, rootPitch, "m6",                "C        Eb          G     A      ")
+    fill(rootName, rootPitch, "m69",               "C     D  Eb          G     A      ")
+    fill(rootName, rootPitch, "m7",                "C        Eb          G        Bb  ")
+    fill(rootName, rootPitch, "m#7",               "C        Eb          G           B")
+    fill(rootName, rootPitch, "m7b5",              "C        Eb       Gb          Bb  ")
+    fill(rootName, rootPitch, "m9",                "C     D  Eb          G        Bb  ")
+    fill(rootName, rootPitch, "m9#7",              "C     D  Eb          G           B")
+    fill(rootName, rootPitch, "m11",               "C     D  Eb    F     G        Bb  ")
+    fill(rootName, rootPitch, "m13",               "C     D  Eb    F     G     A  Bb  ")
+    -- Augmented chords.
+    fill(rootName, rootPitch, "+",                 "C            E         G#         ")
+    fill(rootName, rootPitch, "7#5",               "C            E         G#     Bb  ")
+    fill(rootName, rootPitch, "7b9#5",             "C  Db        E         G#     Bb  ")
+    fill(rootName, rootPitch, "9#5",               "C     D      E         G#     Bb  ")
+    -- Diminished chords.
+    fill(rootName, rootPitch, "o",                 "C        Eb       Gb              ")
+    fill(rootName, rootPitch, "o7",                "C        Eb       Gb       A      ")
+    -- Suspended chords.
+    fill(rootName, rootPitch, "6sus",              "C              F     G     A      ")
+    fill(rootName, rootPitch, "69sus",             "C     D        F     G     A      ")
+    fill(rootName, rootPitch, "7sus",              "C              F     G        Bb  ")
+    fill(rootName, rootPitch, "9sus",              "C     D        F     G        Bb  ")
+    fill(rootName, rootPitch, "M7sus",             "C              F     G           B")
+    fill(rootName, rootPitch, "M9sus",             "C     D        F     G           B")
+    -- Dominant chords.
+    fill(rootName, rootPitch, "7",                 "C            E       G        Bb  ")
+    fill(rootName, rootPitch, "7b5",               "C            E    Gb          Bb  ")
+    fill(rootName, rootPitch, "7b9",               "C  Db        E       G        Bb  ")
+    fill(rootName, rootPitch, "7b9b5",             "C  Db        E    Gb          Bb  ")
+    fill(rootName, rootPitch, "9",                 "C     D      E       G        Bb  ")
+    fill(rootName, rootPitch, "9#11",              "C     D      E F#    G        Bb  ")
+    fill(rootName, rootPitch, "13",                "C     D      E F     G     A  Bb  ")
+    fill(rootName, rootPitch, "13#11",             "C     D      E F#    G     A  Bb  ")
+end
+
+table.sort(ChordSpace.chordsForNames)
+table.sort(ChordSpace.namesForChords)
+
+-- Increment a chord voicewise through chord space,
+-- from a low point on the unison diagonal through a high point
+-- on the unison diagonal. g is the generator of transposition.
+-- It may be necessary to set the chord to the low point to start.
+
+function ChordSpace.next(odometer, low, high, g)
+    local voices = #odometer
+    odometer[voices] = odometer[voices] + g
+     -- "Carry."
+    for voice = voices, 2, -1 do
+        if odometer[voice] > high then
+            odometer[voice] = low
+            odometer[voice - 1] = odometer[voice - 1] + g
+        end
+    end
+    if odometer[1] > high then
+        return false
+    end
+    return true
+end
+
+function ChordSpace.allOfEquivalenceClass(voices, equivalence, g)
+    g = g or 1
+    local equivalenceMapper = nil
+    if equivalence == 'OP' then
+        equivalenceMapper = Chord.iseOP
+    end
+    if equivalence == 'OPT' then
+        equivalenceMapper = Chord.iseOPT
+    end
+    if equivalence == 'OPTT' then
+        equivalenceMapper = Chord.iseOPT
+    end
+    if equivalence == 'OPI' then
+        equivalenceMapper = Chord.iseOPI
+    end
+    if equivalence == 'OPTI' then
+        equivalenceMapper = Chord.iseOPTI
+    end
+    if equivalence == 'OPTTI' then
+        equivalenceMapper = Chord.iseOPTTI
+    end
+    local equivalentChords = {}
+    -- Enumerate all chords in [-O, O].
+    local iterator = ChordSpace.iterator(voices, -13)
+    -- print('iterator:', tostring(iterator))
+    while ChordSpace.next(iterator, -13, 13, g) == true do
+        if iterator:iseP() == true then
+            local eP = iterator:clone()
+            if equivalenceMapper(eP) then
+                ChordSpace.setInsert(equivalentChords, eP)
+            end
+        end
+    end
+    local equivalentChords = ChordSpace.sortedSet(equivalentChords)
+    local zeroBasedChords = ChordSpace.zeroBasedSet(equivalentChords)
+    return zeroBasedChords, equivalentChords
+end
+
+-- Returns a chord with the specified number of voices all set to a first
+-- pitch, useful as an iterator.
+
+function ChordSpace.iterator(voices, first)
+    local odometer = Chord:new()
+    odometer:resize(voices)
+    for voice = 1, voices do
+        odometer[voice] = first
+    end
+    return odometer
+end
+
+-- Returns a collection of all chords for the specified number of voices in a
+-- range, by default the octave. g is the generator of transposition, by default the
+-- semitone.
+
+function ChordSpace.allChordsInRange(voices, first, last, g)
+    first = first or 0
+    last = last or ChordSpace.OCTAVE
+    g = g or 1
+    -- Enumerate all chords in the range.
+    local chordset = {}
+    local iterator = ChordSpace.iterator(voices, first)
+    while ChordSpace.next(iterator, first, last, g) do
+        local chord = iterator:clone()
+        chordset[chord:__hash()] = chord
+    end
+    return ChordSpace.sortedSet(chordset)
+end
+
+-- Move 1 voice of the chord,
+-- optionally under range equivalence
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:move(voice, interval)
+    local chord = self:clone()
+    chord[voice] = T(chord[voice], interval)
+    return chord
+end
+
+-- Performs the neo-Riemannian Lettonwechsel transformation.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:nrL()
+    local cv = self:eV()
+    local cvt = self:eV():et()
+    if cvt[2] == 4 then
+        cv[1] = cv[1] - 1
+    else
+        if cvt[2] == 3 then
+            cv[3] = cv[3] + 1
+        end
+    end
+    return cv
+end
+
+-- Performs the neo-Riemannian parallel transformation.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:nrP()
+    local cv = self:eV()
+    local cvt = self:eV():et()
+    if cvt[2] == 4 then
+        cv[2] = cv[2] - 1
+    else
+        if cvt[2] == 3 then
+            cv[2] = cv[2] + 1
+        end
+    end
+    return cv
+end
+
+-- Performs the neo-Riemannian relative transformation.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:nrR()
+    local cv = self:eV()
+    local cvt = self:eV():et()
+    if cvt[2] == 4 then
+        cv[3] = cv[3] + 2
+    else
+        if cvt[2] == 3 then
+            cv[1] = cv[1] - 2
+        end
+    end
+    return cv
+end
+
+-- Performs the neo-Riemannian dominant transformation.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:nrD()
+    return self:eep():T(-7)
+end
+
+-- Returns the chord inverted by the sum of its first two voices.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:K(range)
+    range = range or ChordSpace.OCTAVE
+    local chord = self:clone()
+    if #chord < 2 then
+        return chord
+    end
+    local ep = chord:eP()
+    local x = ep[1] + ep[2]
+    return self:I(x)
+end
+
+-- Returns whether the chord is a transpositional form of Y with interval size g.
+-- Only works in equal temperament.
+
+function Chord:Tform(Y, g)
+    local eopx = self:epcs()
+    local i = 0
+    while i < ChordSpace.OCTAVE do
+        local ty = Y:T(i)
+        local eopty = ty:epcs()
+        if eopx == eopty then
+            return true
+        end
+        i = i + g
+    end
+    return false
+end
+
+-- Returns whether the chord is an inversional form of Y with interval size g.
+-- Only works in equal temperament.
+
+function Chord:Iform(Y, g)
+    local eopx = self:epcs()
+    local i = 0
+    while i < ChordSpace.OCTAVE do
+        local iy = Y:I(i)
+        local eopiy = iy:epcs()
+        if eopx == eopiy then
+            return true
+        end
+        i = i + g
+    end
+    return false
+end
+
+-- Returns the contextual transposition of the chord by x with respect to m
+-- with minimum interval size g.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:Q(x, m, g)
+    g = g or 1
+    if self:Tform(m, g) then
+        return self:T(x)
+    end
+    if self:Iform(m, g) then
+        return self:T(-x)
+    end
+    return self:clone()
+end
+
+-- Returns the voice-leading between chords a and b,
+-- i.e. what you have to add to a to get b, as a
+-- chord of directed intervals.
+
+function ChordSpace.voiceleading(a, b)
+    local voiceleading = a:clone()
+    for voice = 1, #voiceleading do
+        voiceleading[voice] = b[voice] - a[voice]
+    end
+    return voiceleading
+end
+
+-- Returns whether the voiceleading
+-- between chords a and b contains a parallel fifth.
+
+function ChordSpace.parallelFifth(a, b)
+    local v = ChordSpace.voiceleading(a, b)
+    if v:count(7) > 1 then
+        return true
+    else
+        return false
+    end
+end
+
+-- Returns the smoothness of the voiceleading between
+-- chords a and b by L1 norm.
+
+function ChordSpace.voiceleadingSmoothness(a, b)
+    local L1 = 0
+    for voice = 1, #a do
+        L1 = L1 + math.abs(b[voice] - a[voice])
+    end
+    return L1
+end
+
+-- Returns which of the voiceleadings (source to d1, source to d2)
+-- is the smoother (shortest moves), optionally avoiding parallel fifths.
+
+function ChordSpace.voiceleadingSmoother(source, d1, d2, avoidParallels, range)
+    range = range or ChordSpace.OCTAVE
+    if avoidParallels then
+        if ChordSpace.parallelFifth(source, d1) then
+            return d2
+        end
+        if ChordSpace.parallelFifth(source, d2) then
+            return d1
+        end
+    end
+    local s1 = ChordSpace.voiceleadingSmoothness(source, d1)
+    local s2 = ChordSpace.voiceleadingSmoothness(source, d2)
+    if s1 <= s2 then
+        return d1
+    else
+        return d2
+    end
+end
+
+-- Returns which of the voiceleadings (source to d1, source to d2)
+-- is the simpler (fewest moves), optionally avoiding parallel fifths.
+
+function ChordSpace.voiceleadingSimpler(source, d1, d2, avoidParallels)
+    avoidParallels = avoidParallels or false
+    if avoidParallels then
+        if ChordSpace.parallelFifth(source, d1) then
+            return d2
+        end
+        if ChordSpace.parallelFifth(source, d2) then
+            return d1
+        end
+    end
+    local v1 = ChordSpace.voiceleading(source, d1):eP()
+    local v2 = ChordSpace.voiceleading(source, d2):eP()
+    for voice = #v1, 1, -1 do
+        if v1[voice] < v2[voice] then
+            return d1
+        end
+        if v2[voice] < v1[voice] then
+            return d2
+        end
+    end
+    return d1
+end
+
+-- Returns which of the voiceleadings (source to d1, source to d2)
+-- is the closer (first smoother, then simpler), optionally avoiding parallel fifths.
+
+function ChordSpace.voiceleadingCloser(source, d1, d2, avoidParallels)
+    avoidParallels = avoidParallels or false
+    if avoidParallels then
+        if ChordSpace.parallelFifth(source, d1) then
+            return d2
+        end
+        if ChordSpace.parallelFifth(source, d2) then
+            return d1
+        end
+    end
+    local s1 = ChordSpace.voiceleadingSmoothness(source, d1)
+    local s2 = ChordSpace.voiceleadingSmoothness(source, d2)
+    if s1 < s2 then
+        return d1
+    end
+    if s1 > s2 then
+        return d2
+    end
+    return ChordSpace.voiceleadingSimpler(source, d1, d2, avoidParallels)
+end
+
+-- Returns the voicing of the destination which has the closest voice-leading
+-- from the source within the range, optionally avoiding parallel fifths.
+
+function ChordSpace.voiceleadingClosestRange(source, destination, range, avoidParallels)
+    local destinationeOP = destination:eOP()
+    local d = destinationeOP:clone()
+    local odometer = source:origin()
+    while ChordSpace.next(odometer, 0, range, ChordSpace.OCTAVE) == true do
+        local revoicing = odometer:clone()
+        for voice = 1, #revoicing do
+            revoicing[voice] = revoicing[voice] + destinationeOP[voice]
+        end
+        d = ChordSpace.voiceleadingCloser(source, d, revoicing, avoidParallels)
+    end
+    return d
+end
+
+-- Creates a complete Silencio "note on" event for the
+-- indicated voice of the chord. The other parameters are used
+-- if the internal duration, channel, velocity, and pan of the
+-- chord are nil.
+
+function Chord:note(voice_, time_, duration_, channel_, velocity_, pan_)
+    local note_ = Event:new()
+    note_[TIME] = time_
+    note_[DURATION] = duration_ or self.duration[voice_]
+    note_[CHANNEL] = channel_ or self.channel[voice_]
+    note_[KEY] = self[voice_]
+    note_[VELOCITY] = velocity_ or self.velocity[voice_]
+    note_[PAN] = pan_ or self.pan[voice_]
+    return note_
+end
+
+-- Returns an individual note for each voice of the chord.
+-- The chord's duration, instrument, and loudness are used if present,
+-- if not the specified values are used.
+
+function Chord:notes(time_, duration_, channel_, velocity_, pan_)
+    local notes_ = Score:new()
+    for voice, key in ipairs(self) do
+        table.insert(notes_, self:note(voice, time_, duration_, channel_, velocity_, pan_))
+    end
+    return notes_
+end
+
+function Chord:toScore(score, time_, duration_, channel_, velocity_, pan_)
+    for voice, key in ipairs(self) do
+        score:append(self:note(voice, time_, duration_, channel_, velocity_, pan_))
+    end
+    return score
+end
+
+-- If the event is a note, moves its pitch
+-- to the closest pitch of the chord.
+-- If octaveEquivalence is true (the default),
+-- the pitch-class of the note is moved to the closest pitch-class
+-- of the chord; otherwise, the pitch of the note is moved to the closest
+-- absolute pitch of the chord.
+
+function conformToChord(event, chord, octaveEquivalence)
+    octaveEquivalence = octaveEquivalence or true
+    if event[STATUS] ~= 144 then
+        return
+    else
+        local pitch = event[KEY]
+        if octaveEquivalence then
+            local pitchClass = pitch % ChordSpace.OCTAVE
+            local octave = pitch - pitchClass
+            local chordPitchClass = chord[1] % ChordSpace.OCTAVE
+            local distance = math.abs(chordPitchClass - pitchClass)
+            local closestPitchClass = chordPitchClass
+            local minimumDistance = distance
+            for voice = 2, #chord do
+                chordPitchClass = chord[voice] % ChordSpace.OCTAVE
+                distance = math.abs(chordPitchClass - pitchClass)
+                if distance < minimumDistance then
+                    minimumDistance = distance
+                    closestPitchClass = chordPitchClass
+                end
+            end
+            event[KEY] = octave + closestPitchClass
+        else
+            local chordPitch = chord[1]
+            local distance = math.abs(chordPitch - pitch)
+            local closestPitch = chordPitch
+            local minimumDistance = distance
+            for voice = 2, #chord do
+                chordPitch = chord[voice]
+                distance = math.abs(chordPitch - pitch)
+                if distance < minimumDistance then
+                    minimumDistance = distance
+                    closestPitch = chordPitch
+                end
+            end
+            event[KEY] = closestPitch
+        end
+    end
+end
+
+-- Inserts the notes of the chord into the score at the specified time.
+-- The internal duration, instrument, and loudness are used if present,
+-- if not the specified values are used.
+
+function ChordSpace.insert(score, chord, time_, duration, channel, velocity, pan)
+    -- print(score, chord, time_, duration, channel, velocity, pan)
+    for voice = 1, #chord do
+        local event = chord:note(voice, time_, duration, channel, velocity, pan)
+        table.insert(score, event)
+    end
+end
+
+-- For all the notes in the score
+-- beginning at or later than the start time,
+-- and up to but not including the end time,
+-- moves the pitch of the note to belong to the chord, using the
+-- conformToChord function.
+
+function ChordSpace.apply(score, chord, start, end_, octaveEquivalence)
+    octaveEquivalence = octaveEquivalence or true
+    local slice = score:slice(start, end_)
+    for index, event in ipairs(slice) do
+        conformToChord(event, chord, octaveEquivalence)
+    end
+end
+
+-- Returns a chord containing all the pitches of the score
+-- beginning at or later than the start time,
+-- and up to but not including the end time.
+
+function gather(score, start, end_)
+    local chord = Chord:new()
+    local slice = score:slice(start, end_)
+    for index, event in ipairs(slice) do
+        local pitch = event[KEY]
+        if not chord:contains(pitch) then
+            table.insert(chord, pitch)
+        end
+    end
+    return chord
+end
+
+-- Orthogonal additive groups for unordered chords of given arity under range
+-- equivalence (RP): prime form or P, inversion or I, transposition or T, and
+-- voicing or V. P x I x T = OP, P x I x T x V = RP. Therefore, an
+-- operation on P, I, T, or V may be used to independently transform the
+-- respective symmetry of any chord. Some of these operations will reflect
+-- in RP.
+
+ChordSpaceGroup = {}
+
+-- N is the number of voices in the chord space, g is the generator of
+-- transposition, range is the size of chord space,
+-- optis is an ordered table of all OPTI chords for g,
+-- voicings is an ordered table of all octavewise permutations in RP.
+
+function ChordSpaceGroup:new(o)
+    local o = o or {optisForIndexes = {}, indexesForOptis = {}, voicingsForIndexes = {}, indexesForVoicings = {}}
+    setmetatable(o, self)
+    self.__index = self
+    return o
+end
+
+function ChordSpace.octavewiseRevoicings(chord, range)
+    range = range or ChordSpace.OCTAVE
+    local voices = #chord
+    local odometer = chord:origin()
+    -- Enumerate the permutations.
+    -- iterator[1] is the most significant voice, and
+    -- iterator[N] is the least significant voice.
+    local voicings = 0
+    while ChordSpace.next(odometer, 0, range, ChordSpace.OCTAVE) == true do
+        voicings = voicings + 1
+    end
+    return voicings
+end
+
+function ChordSpace.octavewiseRevoicing(chord, index, range)
+    local voices = #chord
+    local odometer = chord:origin()
+    local eop = chord:eOP()
+    -- Enumerate the permutations.
+    -- iterator[1] is the most significant voice, and
+    -- iterator[N] is the least significant voice.
+    local voicings = 0
+    for v = 1, index do
+        ChordSpace.next(odometer, 0, range, ChordSpace.OCTAVE)
+        -- Wrap around?
+        if odometer[1] > range then
+            odometer = chord:origin()
+        end
+        voicings = voicings + 1
+    end
+    for voice = 1, #chord do
+        odometer[voice] = odometer[voice] + eop[voice]
+    end
+    return odometer
+end
+
+-- Returns the ith arpeggiation, current voice, and corresponding revoicing
+-- of the chord. Positive arpeggiations start with the lowest voice of the
+-- chord and revoice up; negative arpeggiations start with the highest voice
+-- of the chord and revoice down.
+
+function Chord:a(arpeggiation)
+    local chord = self:v(arpeggiation)
+    if arpeggiation < 0 then
+        return chord[#chord], #chord, chord
+    end
+    return chord[1], 1, chord
+end
+
+function ChordSpaceGroup:initialize(voices, range, g)
+    self.voices = voices or 3
+    self.range = range or 60
+    self.g = g or 1
+    self.countP = 0
+    self.countI = 2
+    self.countT = ChordSpace.OCTAVE / self.g
+    local chord = Chord:new()
+    chord:resize(voices)
+    self.countV = ChordSpace.octavewiseRevoicings(chord, self.range)
+    self.indexesForOptis = {}
+    self.optisForIndexes = ChordSpace.allOfEquivalenceClass(voices, 'OPTTI')
+    for index, optti in pairs(self.optisForIndexes) do
+        self.indexesForOptis[optti:__hash()] = index
+        self.countP = self.countP + 1
+    end
+    self:list()
+end
+
+function ChordSpace.createFilename(voices, range, g, extension)
+    extension = extension or '.lua'
+    local gstring = string.format('g%.6f', g)
+    gstring = string.gsub(gstring, '%.', '_')
+    local filename = string.format('ChordSpaceGroup_V%d_R%d_%s%s', voices, range, gstring, extension)
+    return filename
+end
+
+-- Loads the group if found, creates and saves it otherwise.
+
+function ChordSpace.createChordSpaceGroup(voices, range, g)
+    local filename = ChordSpace.createFilename(voices, range, 1)
+    local file, message, error = io.open(filename, 'r')
+    if file == nil then
+        print(string.format('File "%s" not found, creating...', filename))
+        chordSpaceGroup = ChordSpaceGroup:new()
+        chordSpaceGroup:initialize(voices, range, g)
+        chordSpaceGroup:save()
+        return chordSpaceGroup
+    else
+        print(string.format('Loading ChordSpaceGroup from file "%s"...', filename))
+        return ChordSpace.load(voices, range, g)
+    end
+end
+
+function ChordSpace.load(voices, range, g)
+    local filename = ChordSpace.createFilename(voices, range, 1)
+    print('Loading:', filename)
+    local deserialized = ChordSpaceGroup.load(filename)
+    return deserialized
+end
+
+function ChordSpaceGroup:save(filename)
+    filename = filename or ChordSpace.createFilename(self.voices, self.range, self.g, '.lua')
+    local text = serialize(self)
+    local writer = io.open(filename, 'w+')
+    writer:write(text)
+    writer:close()
+end
+
+function ChordSpaceGroup.load(filename)
+    local reader = io.open(filename)
+    local text = reader:read("*all")
+    -- What's deserialized is a function, which needs to be called.
+    local object = loadstring(text)()
+    -- Fix up metatable.
+    local chordSpaceGroup = ChordSpaceGroup:new(object)
+    -- Fix up metatables of chords too.
+    for index, opti in pairs(chordSpaceGroup.optisForIndexes) do
+        chordSpaceGroup.optisForIndexes[index] = Chord:new(opti)
+    end
+    return chordSpaceGroup
+end
+
+-- Returns the chord for the indices of prime form, inversion,
+-- transposition, and voicing. The chord is not in RP; rather, each voice of
+-- the chord's OP may have zero or more octaves added to it.
+
+function ChordSpaceGroup:toChord(P, I, T, V, printme)
+    printme = printme or false
+    P = P % self.countP
+    I = I % 2
+    T = T % ChordSpace.OCTAVE
+    V = V % self.countV
+    if printme then
+        print('toChord:             ', P, I, T, V)
+    end
+    local optti = self.optisForIndexes[P]
+    if printme then
+        print('toChord:   optti:    ', optti, optti:__hash())
+    end
+    local optt = nil
+    if I == 0 then
+        optt = optti
+    else
+        optt = optti:I():eOPTT()
+    end
+    if printme then
+        print('toChord:   optt:     ', optt)
+    end
+    local optt_t = optt:T(T)
+    if printme then
+        print('toChord:   optt_t:   ', optt_t)
+    end
+    local op = optt_t:eOP()
+    if printme then
+        print('toChord:   op:       ', op)
+    end
+    V = V % self.countV
+    local revoicing = ChordSpace.octavewiseRevoicing(op, V, self.range)
+    if printme then
+        print('toChord:   revoicing:', revoicing)
+    end
+    return revoicing, opti, op
+end
+
+-- Returns the indices of prime form, inversion, transposition,
+-- and voicing for a chord.
+
+function ChordSpaceGroup:fromChord(chord, printme)
+    printme = printme or false
+    if printme then
+        print('fromChord: chord:    ', chord, chord:iseOP())
+    end
+    local op = nil
+    if chord:iseOP() then
+        op = chord:clone()
+    else
+        op = chord:eOP()
+    end
+    if printme then
+        print('fromChord: op:       ', op)
+    end
+    local optt = chord:eOPTT()
+    if printme then
+        print('fromChord: optt:     ', optt)
+    end
+    local T = 0
+    for t = 0, ChordSpace.OCTAVE - 1, self.g do
+        local optt_t = optt:T(t):eOP()
+        if printme then
+            print('fromChord: optt_t:   ', optt_t, t)
+        end
+        if optt_t:__eq_epsilon(op) == true then
+            if printme then
+                print('equals')
+            end
+            T = t
+            break
+        end
+    end
+    local optti = chord:eOPTTI()
+    if printme then
+        print('fromChord: optti:    ', optti, optti:__hash())
+    end
+    local P = self.indexesForOptis[optti:__hash()]
+    local I = 0
+    if optti ~= optt then
+        I = 1
+        local optt_i_optt = optt:I():eOPTT()
+        if optt_i_optt ~= optti then
+            print("Error: OPTT(I(OPTT)) must equal OPTTI.")
+            print('optt_i_optt:', optt_i_optt:information())
+            print('optti:      ', optti:information())
+            os.exit()
+        end
+    end
+    local voicing = ChordSpace.voiceleading(op, chord)
+    V = self.indexesForVoicings[voicing:__hash()]
+    if printme then
+        print('fromChord: voicing:  ', voicing, V)
+        print('fromChord:           ', P, I, T, V)
+    end
+    return P, I, T, V
+end
+
+function ChordSpaceGroup:list(listheader, listopttis, listvoicings)
+    listheader = listheader or true
+    listopttis = listopttis or false
+    listvoicings = listvoicings or false
+    if listheader then
+        print(string.format('ChordSpaceGroup.voices: %8d', self.voices))
+        print(string.format('ChordSpaceGroup.range : %8d', self.range))
+        print(string.format('ChordSpaceGroup.g     : %13.4f', self.g))
+        print(string.format('ChordSpaceGroup.countP: %8d', self.countP))
+        print(string.format('ChordSpaceGroup.countI: %8d', self.countI))
+        print(string.format('ChordSpaceGroup.countT: %8d', self.countT))
+        print(string.format('ChordSpaceGroup.countV: %8d', self.countV))
+    end
+    if listopttis then
+        for index, opti in pairs(self.optisForIndexes) do
+            print(string.format('index: %5d  opti: %s  index from opti: %s', index, tostring(opti), self.indexesForOptis[opti:__hash()]))
+        end
+        for index = 0, #self.optisForIndexes - 1 do
+            print(string.format('opti from index: %s  index:  %5d', tostring(self.optisForIndexes[index]), index))
+        end
+    end
+    if listvoicings then
+        for index, voicing in pairs(self.voicingsForIndexes) do
+            print(string.format('voicing index: %5d  voicing: %s  index from voicing: %5d', index, tostring(voicing), self.indexesForVoicings[voicing:__hash()]))
+        end
+    end
+end
+
+function ChordSpaceGroup:printChords()
+    for index, opti in pairs(self.optisForIndexes) do
+        print(string.format('index: %5d  opti: %s %s', index, tostring(opti), opti:name()))
+    end
+end
+
+function ChordSpaceGroup:printNamedChords()
+    for index, opti in pairs(self.optisForIndexes) do
+        local name = opti:name()
+        if name ~= '' then
+            print(string.format('index: %5d  opti: %s %s', index, tostring(opti), opti:name()))
+        end
+    end
+end
+
+return ChordSpace
diff --git a/frontends/CsoundAC/ChordSpace.hpp b/frontends/CsoundAC/ChordSpace.hpp
new file mode 100644
index 0000000..79836a0
--- /dev/null
+++ b/frontends/CsoundAC/ChordSpace.hpp
@@ -0,0 +1,2373 @@
+/*
+ * C S O U N D
+ *
+ * L I C E N S E
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+#ifndef SCORE_H
+#define SCORE_H
+#include "Platform.hpp"
+#ifdef SWIG
+%module CsoundAC
+% {
+#include <eigen3/Eigen/Dense>
+#include "Event.hpp"
+#include <iostream>
+#include <sstream>
+#include <vector>
+	%
+}
+%include "std_string.i"
+%include "std_vector.i"
+#else
+#include <eigen3/Eigen/Dense>
+#include "Event.hpp"
+#include <iostream>
+#include <sstream>
+#include <vector>
+#endif
+
+namespace csound {
+/**
+This class, part of CsoundAC, implements a geometric approach to some common
+operations on chords in neo-Riemannian music theory for use in score
+generating procedures:
+
+--  Identifying whether a chord belongs to some equivalence class of music
+  theory, or sending a chord to its equivalent within a representative
+  fundamental domain of some equivalence class. The equivalence classes are
+  octave (O), permutational (P), transpositional, (T), inversional (I), and
+  their compounds OP, OPT (set-class or chord type), and OPTI (prime form).
+
+--  Causing chord progressions to move strictly within an orbifold that
+  generates some equivalence class.
+
+--  Implementing chord progressions based on the L, P, R, D, K, and Q
+  operations of neo-Riemannian theory (thus implementing some aspects of
+  "harmony").
+
+--  Implementing chord progressions performed within a more abstract
+  equivalence class by means of the best-formed voice-leading within a less
+  abstract equivalence class (thus implementing some fundamentals of
+  "counterpoint").
+
+The associated ChordSpaceView package can display these chord spaces and
+operations for trichords in an interactive 3-dimensional view.
+
+DEFINITIONS
+
+Pitch is the perception of a distinct sound frequency. It is a logarithmic
+perception; octaves, which sound 'equivalent' in some sense, represent
+doublings or halvings of frequency.
+
+Pitches and intervals are represented as real numbers. Middle C is 60 and the
+octave is 12. Our usual system of 12-tone equal temperament, as well as MIDI
+key numbers, are completely represented by the whole numbers; any and all
+other pitches can be represented simply by using fractions.
+
+A voice is a distinct sound that is heard as having a pitch.
+
+A chord is simply a set of voices heard at the same time, represented here
+as a point in a chord space having one dimension of pitch for each voice
+in the chord.
+
+For the purposes of algorithmic composition in CsoundAC, a score is considered
+as a sequence of more or less fleeting chords.
+
+EQUIVALENCE CLASSES
+
+An equivalence class identifies elements of a set. Operations that send one
+equivalent point to another induce quotient spaces or orbifolds, where the
+equivalence operation identifies points on one face of the orbifold with
+points on an opposing face. The fundamental domain of the equivalence class
+is the space "within" the orbifold.
+
+Plain chord space has no equivalence classes. Ordered chords are represented
+as vectors in parentheses (p1, ..., pN). Unordered chords are represented as
+sorted vectors in braces {p1, ..., pN}. Unordering is itself an equivalence
+class.
+
+The following equivalence classes apply to pitches and chords, and exist in
+different orbifolds. Equivalence classes can be combined (Callendar, Quinn,
+and Tymoczko, "Generalized Voice-Leading Spaces," _Science_ 320, 2008), and
+the more equivalence classes are combined, the more abstract is the resulting
+orbifold compared to the parent space.
+
+In most cases, a chord space can be divided into a number, possibly
+infinite, of geometrically equivalent fundamental domains for the same
+equivalence class. Therefore, here we use the notion of 'representative'
+fundamental domain. For example, the representative fundamental domain of
+unordered sequences, out of all possible orderings, consists of all sequences
+in their ordinary sorted order. It is important, in the following, to identify
+representative fundamental domains that combine properly, e.g. such that the
+representative fundamental domain of OP / the representative fundamental
+domain of PI equals the representative fundamental domain of OPI. And this in
+turn may require accounting for duplicate elements of the representative
+fundamental domain caused by reflections or singularities in the orbifold.
+
+C       Cardinality equivalence, e.g. {1, 1, 2} == {1, 2}. _Not_ assuming
+      cardinality equivalence ensures that there is a proto-metric in plain
+      chord space that is inherited by all child chord spaces. Cardinality
+      equivalence is never assumed here, because we are working in chord
+      spaces of fixed dimensionality; e.g. we represent the note middle C
+      not as {60}, but as {60, 60, ..., 60}.
+
+O       Octave equivalence. The fundamental domain is defined by the pitches
+      in a chord spanning the range of an octave or less, and summing to
+      an octave or less.
+
+P       Permutational equivalence. The fundamental domain is defined by a
+      "wedge" of plain chord space in which the voices of a chord are always
+      sorted by pitch.
+
+T       Transpositional equivalence, e.g. {1, 2} == {7, 8}. The fundamental
+      domain is defined as a plane in chord space at right angles to the
+      diagonal of unison chords. Represented by the chord always having a
+      sum of pitches equal to 0.
+
+I       Inversional equivalence. Care is needed to distinguish the
+      mathematician's sense of 'invert', which means 'pitch-space inversion'
+      or 'reflect in a point', from the musician's sense of 'invert', which
+      varies according to context but in practice often means 'registral
+      inversion' or 'revoice by adding an octave to the lowest tone of a
+      chord.' Here, we use 'invert' and 'inversion' in the mathematician's
+      sense, and we use the terms 'revoice' and 'voicing' for the musician's
+      'invert' and 'inversion'. The inversion point for any inversion lies
+      on the unison diagonal. A fundamental domain is defined as any half of
+      chord space that is bounded by a plane containing the inversion point.
+      Represented as the chord having the first interval between voices be
+      smaller than or equal to the final interval (recursing for chords of
+      more than 3 voices).
+
+PI      Inversional equivalence with permutational equivalence. The
+      'inversion flat' of unordered chord space is a hyperplane consisting
+      of all those unordered chords that are invariant under inversion. A
+      fundamental domain is defined by any half space bounded by a
+      hyperplane containing the inversion flat. It is represented as that
+      half of the space on or lower than the hyperplane defined by the
+      inversion flat and the unison diagonal.
+
+OP      Octave equivalence with permutational equivalence. Tymoczko's orbifold
+      for chords; i.e. chords with a fixed number of voices in a harmonic
+      context. The fundamental domain is defined as a hyperprism one octave
+      long with as many sides as voices and the ends identified by octave
+      equivalence and one cyclical permutation of voices, modulo the
+      unordering. In OP for trichords in 12TET, the augmented triads run up
+      the middle of the prism, the major and minor triads are in 6
+      alternating columns around the augmented triads, the two-pitch chords
+      form the 3 sides, and the one-pitch chords form the 3 edges that join
+      the sides.
+
+OPT     The layer of the OP prism as close as possible to the origin, modulo
+      the number of voices. Chord type. Note that CM and Cm are different
+      OPT. Because the OP prism is canted down from the origin, at least one
+      pitch in each OPT chord (excepting the origin itself) is negative.
+
+OPI     The OP prism modulo inversion, i.e. 1/2 of the OP prism. The
+      representative fundamental consits of those chords less than or equal
+      to their inversions modulo OP.
+
+OPTI    The OPT layer modulo inversion, i.e. 1/2 of the OPT layer.
+      Set-class. Note that CM and Cm are the same OPTI.
+
+OPERATIONS
+
+Each of the above equivalence classes is, of course, an operation that sends
+chords outside the fundamental domain to chords inside the fundamental domain.
+And we define the following additional operations:
+
+T(p, x)         Translate p by x.
+
+I(p [, x])      Reflect p in x, by default the origin.
+
+P               Send a major triad to the minor triad with the same root,
+              or vice versa (Riemann's parallel transformation).
+
+L               Send a major triad to the minor triad one major third higher,
+              or vice versa (Riemann's Leittonwechsel or leading-tone
+              exchange transformation).
+
+R               Send a major triad to the minor triad one minor third lower,
+              or vice versa (Riemann's relative transformation).
+
+D               Send a triad to the next triad a perfect fifth lower
+              (dominant transformation).
+
+P, L, and R have been extended as follows, see Fiore and Satyendra,
+"Generalized Contextual Groups", _Music Theory Online_ 11, August 2008:
+
+K(c)            Interchange by inversion;
+              K(c) := I(c, c[1] + c[2]).
+              This is a generalized form of P; for major and minor triads,
+              it is exactly the same as P, but it also works with other
+              chord types.
+
+Q(c, n, m)      Contexual transposition;
+              Q(c, n, m) := T(c, n) if c is a T-form of m,
+              or T(c, -n) if c is an I-form of M. Not a generalized form
+              of L or R; but, like them, K and Q generate the T-I group.
+ */
+
+/**
+ * Returns n!
+ */
+double factorial(double n) {
+	if (n == 0) {
+		return 1;
+	} else {
+		return n * factorial(n = 1.0);
+	}
+}
+
+double EPSILON() {
+	static double epsilon = 1.0;
+	if (epsilon == 1.0) {
+		for (;;) {
+			epsilon = epsilon / 2.0;
+			double nextEpsilon = epsilon / 2.0;
+			double onePlusNextEpsilon = 1.0 + nextEpsilon;
+			if (onePlusNextEpsilon == 1.0) {
+				break;
+			}
+		}
+	}
+	return epsilon;
+}
+
+double &epsilonFactor() {
+	static double epsilonFactor = 1.0;
+	return epsilonFactor;
+}
+
+bool eq_epsilon(double a, double b) {
+	if (std::abs(a - b) < (EPSILON() * epsilonFactor())) {
+		return true;
+	} else {
+		return false;
+	}
+
+}
+
+double gt_epsilon(double a, double b) {
+	if (eq_epsilon(a, b)) {
+		return false;
+	} else {
+		return (a > b);
+	}
+}
+
+double lt_epsilon(double a, double b) {
+	if (eq_epsilon(a, b)) {
+		return false;
+	} else {
+		return (a < b);
+	}
+}
+
+double ge_epsilon(double a, double b) {
+	if (eq_epsilon(a, b)) {
+		return true;
+	} else {
+		return (a > b);
+	}
+}
+
+double le_epsilon(double a, double b) {
+	if (eq_epsilon(a, b)) {
+		return true;
+	} else {
+		return (a < b);
+	}
+}
+
+/**
+ * The size of the octave, defined to be consistent with
+ * 12 tone equal temperament and MIDI.
+ */
+double OCTAVE() {
+	return 12.0;
+}
+
+double MIDDLE_C() {
+	return 60.0;
+}
+
+double C4() {
+	return MIDDLE_C();
+}
+
+/**
+ * Returns the pitch transposed by semitones, which may be any scalar.
+ * NOTE: Does NOT return the result under any equivalence class.
+ */
+double T(double pitch, double semitones) {
+	return pitch + semitones;
+}
+
+/**
+ * Returns the pitch reflected in the center, which may be any pitch.
+ * NOTE: Does NOT return the result under any equivalence class.
+ */
+double I(double pitch, double center = 0.0) {
+	return center - pitch;
+}
+
+/**
+ * Chords represent simultaneously sounding pitches. The pitches are
+ * represented as semitones with 0 at the origin and middle C as 60.
+ * Each voice also has a duration, velocity, channel, and pan.
+ */
+class SILENCE_PUBLIC Chord : public Eigen::MatrixXd {
+public:
+	enum {
+		PITCH = 0,
+		DURATION = 1,
+		LOUDNESS = 2,
+		INSTRUMENT = 3,
+		PAN = 4,
+		COUNT = 5
+	};
+	Chord() {
+		resize(3);
+	}
+	virtual ~Chord() {
+	}
+	virtual size_t voices() const {
+		return rows();
+	}
+	virtual void resize(size_t voices) {
+		Eigen::MatrixXd::resize(voices, COUNT);
+	}
+	/**
+	 * Returns a string representation of the chord.
+	 * Quadratic complexity, but short enough not to matter.
+	 */
+	virtual std::string toString() const {
+		char buffer[0x100];
+		std::stringstream stream;
+		for (size_t i = 0, n = rows(); i < n; ++i) {
+			std::snprintf(buffer, 0x100, "%12.7f", getPitch(i));
+			if (i > 0) {
+				stream << " ";
+			}
+			stream << buffer;
+		}
+		return stream.str();
+	}
+	virtual double getPitch(int voice) const {
+		return coeff(voice, PITCH);
+	}
+	virtual void setPitch(double value, int voice) {
+		coeffRef(voice, PITCH) = value;
+	}
+	virtual double getDuration(int voice = 0) const {
+		return coeff(voice, DURATION);
+	}
+	virtual void setDuration(double value, int voice = -1) {
+		if (voice == -1) {
+			for (voice = 0; voice < rows(); ++voice) {
+				coeffRef(voice, DURATION) = value;
+			}
+		} else {
+			coeffRef(voice, DURATION) = value;
+		}
+	}
+	virtual double getLoudness(int voice = 0) const {
+		return coeff(voice, LOUDNESS);
+	}
+	virtual void setLoudness(double value, int voice = -1) {
+		if (voice == -1) {
+			for (voice = 0; voice < rows(); ++voice) {
+				coeffRef(voice, LOUDNESS) = value;
+			}
+		} else {
+			coeffRef(voice, LOUDNESS) = value;
+		}
+	}
+	virtual double getInstrument(int voice = 0) const {
+		return coeff(voice, INSTRUMENT);
+	}
+	virtual void setInstrument(double value, int voice = -1) {
+		if (voice == -1) {
+			for (voice = 0; voice < rows(); ++voice) {
+				coeffRef(voice, INSTRUMENT) = value;
+			}
+		} else {
+			coeffRef(voice, INSTRUMENT) = value;
+		}
+	}
+	virtual double getPan(int voice = 0) const {
+		return coeff(voice, PAN);
+	}
+	virtual void setPan(double value, int voice = -1) {
+		if (voice == -1) {
+			for (voice = 0; voice < rows(); ++voice) {
+				coeffRef(voice, PAN) = value;
+			}
+		} else {
+			coeffRef(voice, PAN) = value;
+		}
+	}
+	virtual size_t count(double pitch) const {
+		size_t n = 0;
+		for (size_t voice = 0; voice < voices(); ++voice) {
+			if (eq_epsilon(getPitch(voice), pitch)) {
+				n++;
+			}
+		}
+		return n;
+	}
+	virtual bool operator == (const Chord &other) {
+		if (rows() != other.voices()) {
+			return false;
+		}
+		for (size_t voice = 0; voice < rows(); ++voice) {
+			if (!eq_epsilon(getPitch(voice), other.getPitch(voice))) {
+				return false;
+			}
+		}
+		return true;
+	}
+	virtual bool operator < (const Chord &other) {
+		if (rows() != other.voices()) {
+			return false;
+		}
+		for (size_t voice = 0; voice < rows(); ++voice) {
+			if (!lt_epsilon(getPitch(voice), other.getPitch(voice))) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+};
+
+/**
+ * Returns the Euclidean distance between chords a and b,
+ * which must have the same number of voices.
+ */
+double euclidean(const Chord &a, const Chord &b) {
+	double sumOfSquaredDifferences = 0.0;
+	for (size_t voice = 0, voices = a.voices(); voice < voices; ++voice) {
+		sumOfSquaredDifferences += std::pow((a.getPitch(voice) - b.getPitch(voice)), 2.0);
+	}
+	return std::sqrt(sumOfSquaredDifferences);
+}
+
+}
+#endif
+/*
+
+
+function Chord:__le(other)
+    if self:__eq(other) then
+        return true
+    end
+    return self:__lt(other)
+end
+
+-- Returns whether or not the chord contains the pitch.
+
+function Chord:contains(pitch)
+    for voice, pitch_ in ipairs(self) do
+        if pitch_ == pitch then
+            return true
+        end
+    end
+    return false
+end
+
+-- Returns the lowest pitch in the chord,
+-- and also its voice index.
+
+function Chord:min()
+    local lowestVoice = 1
+    local lowestPitch = self[lowestVoice]
+    for voice = 2, #self do
+        if self[voice] < lowestPitch then
+            lowestPitch = self[voice]
+            lowestVoice = voice
+        end
+    end
+    return lowestPitch, lowestVoice
+end
+
+-- Returns the minimum interval in the chord.
+
+function Chord:minimumInterval()
+    local minimumInterval = math.abs(self[1] - self[2])
+    for v1 = 1, #self do
+        for v2 = 1, #self do
+            if t (v1 == v2) then
+                local interval = math.abs(self[v1] - self[v2])
+                if interval < minimumInterval then
+                    minimumInterval = interval
+                end
+            end
+        end
+    end
+    return minimumInterval
+end
+
+-- Returns the highest pitch in the chord,
+-- and also its voice index.
+
+function Chord:max()
+    local highestVoice = 1
+    local highestPitch = self[highestVoice]
+    for voice = 2, #self do
+        if self[voice] > highestPitch then
+            highestPitch = self[voice]
+            highestVoice = voice
+        end
+    end
+    return highestPitch, highestVoice
+end
+
+-- Returns the maximum interval in the chord.
+
+function Chord:maximumInterval()
+    return self:max() - self:min()
+end
+
+-- Returns a new chord whose pitches are the floors of this chord's pitches.
+
+function Chord:floor()
+    local chord = self:clone()
+    for voice = 1, #self do
+        chord[voice] = math.floor(self[voice])
+    end
+    return chord
+end
+
+-- Returns a new chord whose pitches are the ceilings of this chord's pitches.
+
+function Chord:ceil()
+    local chord = self:clone()
+    for voice = 1, #self do
+        chord[voice] = math.ceil(self[voice])
+    end
+    return chord
+end
+
+-- Returns a value copy of the chord.
+
+function Chord:clone()
+    local clone_ = Chord:new()
+    for voice, pitch in ipairs(self) do
+        clone_[voice] = pitch
+    end
+    for voice, value in ipairs(self.duration) do
+        clone_.duration[voice] = value
+    end
+    for voice, value in ipairs(self.channel) do
+        clone_.channel[voice] = value
+    end
+    for voice, value in ipairs(self.velocity) do
+        clone_.velocity[voice] = value
+    end
+    for voice, value in ipairs(self.pan) do
+        clone_.pan[voice] = value
+    end
+    return clone_
+end
+
+-- Returns the origin of the chord's space.
+
+function Chord:origin()
+    local clone_ = self:clone()
+    for voice = 1, #clone_ do
+        clone_[voice] = 0
+    end
+    return clone_
+end
+
+function Chord:distanceToOrigin()
+    local origin = self:origin()
+    return ChordSpace.euclidean(self, origin)
+end
+
+function Chord:distanceToUnisonDiagonal()
+    local unison = self:origin()
+    local pitch = self:layer() / #self
+    for voice = 1, #self do
+        unison[voice] = pitch
+    end
+    return ChordSpace.euclidean(self, unison)
+end
+
+-- Returns the maximally even chord in the chord's space,
+-- e.g. the augmented triad for 3 dimensions.
+
+function Chord:maximallyEven()
+    local clone_ = self:clone()
+    local g = ChordSpace.OCTAVE / #clone_
+    for i = 1, #clone_ do
+        clone_[i] = (i - 1) * g
+    end
+    return clone_
+end
+
+-- Returns the sum of the pitches in the chord.
+
+function Chord:layer()
+    local s = 0
+    for voice, pitch in ipairs(self) do
+        s = s + pitch
+    end
+    return s
+end
+
+-- Transposes the chord by the indicated interval (may be a fraction).
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:T(interval)
+    local clone_ = self:clone()
+    for voice = 1, #clone_ do
+        clone_[voice] = T(clone_[voice], interval)
+    end
+    return clone_
+end
+
+-- Inverts the chord by another chord that is on the unison diagonal, by
+-- default the origin. NOTE: Does NOT return the result under any equivalence
+-- class.
+
+function Chord:I(center)
+    center = center or 0
+    local inverse = self:clone()
+    for voice = 1, #inverse do
+        inverse[voice] = I(self[voice], center)
+    end
+    return inverse
+end
+
+-- Returns the equivalent of the pitch under pitch-class equivalence, i.e.
+-- the pitch is in the interval [0, OCTAVE).
+
+function ChordSpace.epc(pitch)
+    --while pitch < 0 do
+    while ChordSpace.lt_epsilon(pitch, 0) do
+        pitch = pitch + ChordSpace.OCTAVE
+    end
+    --while pitch >= ChordSpace.OCTAVE do
+    while ChordSpace.ge_epsilon(pitch, ChordSpace.OCTAVE) do
+        pitch = pitch - ChordSpace.OCTAVE
+    end
+    return pitch
+end
+
+-- Returns whether the chord is within the fundamental domain of
+-- pitch-class equivalence, i.e. is a pitch-class set.
+
+function Chord:isepcs()
+    for voice = 1, #chord do
+        --if not (self[voice] == ChordSpace.epc(chord[voice])) then
+        if not ChordSpace.eq_epsilon(self[voice], ChordSpace.epc(chord[voice])) then
+            return false
+        end
+    end
+    return true
+end
+
+-- Returns the equivalent of the chord under pitch-class equivalence,
+-- i.e. the pitch-class set of the chord.
+
+function Chord:epcs()
+    local chord = self:clone()
+    for voice = 1, #chord do
+        chord[voice] = ChordSpace.epc(chord[voice])
+    end
+    return chord
+end
+
+-- Returns whether the chord is within the fundamental domain of
+-- transposition to 0.
+
+function Chord:iset()
+    local et = self:et()
+    if not (et == self) then
+        return false
+    end
+    return true
+end
+
+-- Returns the equivalent of the chord within the fundamental domain of
+-- transposition to 0.
+
+function Chord:et()
+    local min_ = self:min()
+    return self:T(-min_)
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of the indicated range equivalence.
+
+function Chord:iseR(range)
+    --[[ GVLS:
+    local max_ = self:max()
+    local min_ = self:min()
+    if not (max_ <= (min_ + range)) then
+        return false
+    end
+    local layer_ = self:layer()
+    if not ((0 <= layer_) and (layer_ <= range)) then
+        return false
+    end
+    return true
+    --]]
+    --[[ GVLS modified:
+    local max_ = self:max()
+    local min_ = self:min()
+    if not ChordSpace.le_epsilon(max_, (min_ + range)) then
+        return false
+    end
+    local layer_ = self:layer()
+    if not (ChordSpace.le_epsilon(0, layer_) and ChordSpace.le_epsilon(layer_, range)) then
+        return false
+    end
+    return true
+    --]]
+    ----[[ MKG several equivalents of boundary points in domain:
+    local max_ = self:max()
+    local min_ = self:min()
+    if not ChordSpace.le_epsilon(max_, (min_ + range)) then
+        return false
+    end
+    local layer_ = self:layer()
+    if not (ChordSpace.le_epsilon(0, layer_) and ChordSpace.le_epsilon(layer_, range)) then
+        return false
+    end
+    return true
+    --]]
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of octave equivalence.
+
+function Chord:iseO()
+    return self:iseR(ChordSpace.OCTAVE)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of a range equivalence.
+
+function Chord:eR(range)
+    local chord = self:clone()
+    --if chord:iseR(range) then
+    --    return chord
+    --end
+    -- The clue here is that at least one voice must be >= 0,
+    -- but no voice can be > range.
+    -- First, move all pitches inside the interval [0, OCTAVE),
+    -- which is not the same as the fundamental domain.
+    chord = self:epcs()
+    -- Then, reflect voices that are outside of the fundamental domain
+    -- back into it, which will revoice the chord, i.e.
+    -- the sum of pitches is in [0, OCTAVE].
+    --while chord:layer() > range do
+    while ChordSpace.gt_epsilon(chord:layer(), range) do
+        local maximumPitch, maximumVoice = chord:max()
+        -- Because no voice is above the range,
+        -- any voices that need to be revoiced will now be negative.
+        chord[maximumVoice] = maximumPitch - ChordSpace.OCTAVE
+    end
+    return chord
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of octave equivalence.
+
+function Chord:eO()
+    return self:eR(ChordSpace.OCTAVE)
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of permutational equivalence.
+
+function Chord:iseP()
+    for voice = 2, #self do
+        --if not (self[voice - 1] <= self[voice]) then
+        if not ChordSpace.le_epsilon(self[voice - 1], self[voice]) then
+            return false
+        end
+    end
+    return true
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of permutational equivalence.
+
+function Chord:eP()
+    clone_ = self:clone()
+    table.sort(clone_)
+    return clone_
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of transpositional equivalence.
+
+function Chord:iseT()
+    ----[[ GVLS:
+    local layer_ = self:layer()
+    if not ChordSpace.eq_epsilon(layer_, 0) then
+        return false
+    end
+    return true
+    --]]
+    --[[ MKG:
+    g = g or 1
+    local ep = self:eP()
+    if not (ep == ep:eT(g):eP()) then
+        return false
+    end
+    return true
+    --]]
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of transpositonal equivalence.
+
+function Chord:eT()
+    ----[[ GVLS:
+    local layer_ = self:layer()
+    local sumPerVoice = layer_ / #self
+    return self:T(-sumPerVoice)
+    --]]
+    --[[ MKG:
+    g = g or 1
+    local iterator = self
+    -- Transpose down to layer 0 or just below.
+    while iterator:layer() > 0 do
+        iterator = iterator:T(-g)
+    end
+    -- Transpose up to layer 0 or just above.
+    while iterator:layer() < 0 do
+        iterator = iterator:T(g)
+    end
+    return iterator
+    --]]
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of transpositonal equivalence and the equal temperament generated
+-- by g. I.e., returns the chord transposed such that its layer is 0 or, under
+-- transposition, the positive layer closest to 0. NOTE: Does NOT return the
+-- result under any other equivalence class.
+
+function Chord:eTT(g)
+    g = g or 1
+    local et = self:eT()
+    local transposition = math.ceil(et[1]) - et[1]
+    local ett = et:T(transposition)
+    return ett
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of translational equivalence and the equal temperament generated by g.
+
+function Chord:iseTT(g)
+    g = g or 1
+    local ep = self:eP()
+    if not (ep == ep:eTT(g)) then
+        return false
+    end
+    return true
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of inversional equivalence.
+
+function Chord:iseI(inverse)
+    --[[ GLVS:
+    local chord = self:clone()
+    local lowerVoice = 2
+    local upperVoice = #chord
+    while lowerVoice < upperVoice do
+        -- GVLS: tests only 1 interval: x[2] - x[1] <= x[#x] - x[#x - 1]
+        local lowerInterval = chord[lowerVoice] - chord[lowerVoice - 1]
+        local upperInterval = chord[upperVoice] - chord[upperVoice - 1]
+        if lowerInterval < upperInterval then
+            return true
+        end
+        if lowerInterval > upperInterval then
+            return false
+        end
+        lowerVoice = lowerVoice + 1
+        upperVoice = upperVoice - 1
+    end
+    return true
+    --]]
+    ----[[ MKG:
+    inverse = inverse or self:I()
+    if not self:__le(inverse) then
+        return false
+    end
+    return true
+    --]]
+    --[[ MKG:
+    inverse = self:I()
+    if not self:__le(inverse) then
+        return false
+    end
+    return true
+    --]]
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of inversional equivalence.
+
+function Chord:eI()
+    if self:iseI() then
+        return self:clone()
+    end
+    return self:I()
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of range and permutational equivalence.
+
+function Chord:iseRP(range)
+    --[[ GVLS:
+    for voice = 2, #self do
+        if not (self[voice - 1] <= self[voice]) then
+            return false
+        end
+    end
+    if not (self[#self] <= (self[1] + range)) then
+        return false
+    end
+    local layer_ = self:layer()
+    if not ((0 <= layer_) and (layer_ <= range)) then
+        return false
+    end
+    return true
+    --]]
+    ----[[ MKG:
+    if not self:iseR(range) then
+        return false
+    end
+    if not self:iseP() then
+        return false
+    end
+    return true
+    --]]
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of octave and permutational equivalence.
+
+function Chord:iseOP()
+    return self:iseRP(ChordSpace.OCTAVE)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of range and permutational equivalence.
+
+function Chord:eRP(range)
+    return self:eR(range):eP()
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of octave and permutational equivalence.
+
+function Chord:eOP()
+    return self:eRP(ChordSpace.OCTAVE)
+end
+
+-- Returns a copy of the chord cyclically permuted by a stride, by default 1.
+-- The direction of rotation is the same as musicians' first inversion, second
+-- inversion, and so on.
+
+function Chord:cycle(stride)
+    stride = stride or 1
+    local clone_ = self:clone()
+    if stride < 0 then
+        for i = 1, stride do
+            local tail = table.remove(clone_)
+            table.insert(clone_, 1, tail)
+        end
+        return chord
+    end
+    if stride > 0 then
+        for i = 1, math.abs(stride) do
+            local head = table.remove(clone_, 1)
+            table.insert(clone_, head)
+        end
+    end
+    return clone_
+end
+
+-- Returns the permutations of the pitches in a chord. The permutations from
+-- each particular permutation are always returned in the same order.
+
+function Chord:permutations()
+    local chord = self:clone()
+    local permutations_ = {}
+    permutations_[1] = chord
+    for i = 2, #self do
+        chord = chord:cycle()
+        permutations_[i] = chord
+    end
+    table.sort(permutations_)
+    return permutations_
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of voicing equivalence.
+
+function Chord:iseV()
+    local eV = self:eV()
+    --print(string.format('chord: %s  eV: %s', tostring(self), tostring(eV)))
+    if not (self == eV) then
+        return false
+    end
+    return true
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of voicing equivalence.
+
+function Chord:eV()
+    ----[[
+    for index, voicing in ipairs(self:permutations()) do
+        local wraparound = voicing[1] + ChordSpace.OCTAVE - voicing[#voicing]
+        local iseV_ = true
+        for voice = 1, #voicing - 1 do
+            local inner = voicing[voice + 1] - voicing[voice]
+            if not ChordSpace.ge_epsilon(wraparound, inner) then
+            --if inner > wraparound then
+                iseV_ = false
+            end
+        end
+        if iseV_ then
+            return voicing
+        end
+    end
+    --]]
+    --[[
+    local voicings = self:permutations()
+    local distancesForIndexes = {}
+    for i = 1, #voicings do
+        distancesForIndexes[i] = voicings[i]:distanceToUnisonDiagonal()
+    end
+    local minimumDistanceToUnisonDiagonal = distancesForIndexes[1]
+    for i = 2, #voicings do
+        if distancesForIndexes[i] < minimumDistanceToUnisonDiagonal then
+            minimumDistanceToUnisonDiagonal = distancesForIndexes[i]
+        end
+    end
+    for i = 1, #voicings do
+         if distancesForIndexes[i] == minimumDistanceToUnisonDiagonal then
+            return voicings[i]
+        end
+    end
+    --]]
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of range, permutational, and transpositional equivalence.
+
+function Chord:iseRPT(range)
+    --[[ GVLS:
+    -- GVLS: if not (self[#self] <= self[1] + ChordSpace.OCTAVE) then
+    if not (ChordSpace.le_epsilon(self[#self], (self[1] + range))) then
+        return false
+    end
+    local layer_ = self:layer()
+    -- GVLS: if not (layer_ == 0) then
+    if not ChordSpace.eq_epsilon(layer_, 0) then
+        return false
+    end
+    if #self < 2 then
+        return true
+    end
+    local wraparound = self[1] + range - self[#self]
+    for voice = 1, #self - 1  do
+        local inner = self[voice + 1] - self[voice]
+        if not ChordSpace.le_epsilon(wraparound, inner) then
+            return false
+        end
+    end
+    return true
+    --]]
+    ----[[ MKG:
+    if not self:iseR(range) then
+        return false
+    end
+    if not self:iseP() then
+        return false
+    end
+    if not self:iseT() then
+        return false
+    end
+    if not self:iseV() then
+        return false
+    end
+    return true
+    --]]
+end
+
+function Chord:iseRPTT(range)
+    if not self:iseP() then
+        return false
+    end
+    if not self:iseR(range) then
+        return false
+    end
+    if not self:iseTT() then
+        return false
+    end
+    if not self:iseV() then
+        return false
+    end
+    return true
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of octave, permutational, and transpositional equivalence.
+
+function Chord:iseOPT()
+    return self:iseRPT(ChordSpace.OCTAVE)
+end
+
+function Chord:iseOPTT()
+    return self:iseRPTT(ChordSpace.OCTAVE)
+end
+
+-- Returns a copy of the chord 'inverted' in the musician's sense,
+-- i.e. revoiced by cyclically permuting the chord and
+-- adding (or subtracting) an octave to the highest (or lowest) voice.
+-- The revoicing will move the chord up or down in pitch.
+-- A positive direction is the same as a musician's first inversion,
+-- second inversion, etc.
+
+function Chord:v(direction)
+    direction = direction or 1
+    local chord = self:clone()
+    while direction > 0 do
+        chord = chord:cycle(1)
+        chord[#chord] = chord[#chord] + ChordSpace.OCTAVE
+        direction = direction - 1
+    end
+    while direction < 0 do
+        chord = chord:cycle(-1)
+        chord[1] = chord[1] - ChordSpace.OCTAVE
+        direction = direction + 1
+    end
+    return chord
+end
+
+-- Returns all the 'inversions' (in the musician's sense)
+-- or octavewise revoicings of the chord.
+
+function Chord:voicings()
+    local chord = self:clone()
+    local voicings = {}
+    voicings[1] = chord
+    for i = 2, #self do
+        chord = chord:v()
+        voicings[i] = chord
+    end
+    return voicings
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of range, permutational, and transpositional equivalence; the same
+-- as set-class type, or chord type.
+
+function Chord:eRPT(range)
+    --[[
+    local erp = self:eRP(range)
+    local voicings_ = erp:voicings()
+    for voice = 1, #voicings_ do
+        local voicing = voicings_[voice]:eT()
+        if voicing:iseV() then
+            return voicing
+        end
+    end
+    print('ERROR: Chord:eRPT() should not come here: ' .. tostring(self))
+    --]]
+    ----[[
+    local erp = self:eRP(range)
+    local voicings_ = erp:voicings()
+    for voice = 1, #voicings_ do
+        local voicing = voicings_[voice]
+        if voicing:iseV() then
+            return voicing:eT()
+        end
+    end
+    print('ERROR: Chord:eRPT() should not come here: ' .. tostring(self))
+    --]]
+end
+
+function Chord:eRPTT(range)
+    local erp = self:eRP(range)
+    local voicings_ = erp:voicings()
+    for voice = 1, #voicings_ do
+        local voicing = voicings_[voice]:eTT()
+        if voicing:iseV() then
+            return voicing
+        end
+    end
+    print('ERROR: Chord:eRPTT() should not come here: ' .. tostring(self))
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of octave, permutational, and transpositional equivalence.
+
+function Chord:eOPT()
+    return self:eRPT(ChordSpace.OCTAVE)
+end
+
+function Chord:eOPTT()
+    return self:eRPTT(ChordSpace.OCTAVE)
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of range, permutational, and inversional equivalence.
+
+function Chord:iseRPI(range)
+    if not self:iseRP(range) then
+        return false
+    end
+    local inverse = self:I():eRP(range)
+    assert(inverse, 'Inverse is nil.')
+    if not self:iseI(inverse) then
+        return false
+    end
+    return true
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of octave, permutational, and inversional equivalence.
+
+function Chord:iseOPI()
+    return self:iseRPI(ChordSpace.OCTAVE)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of range, permutational, and inversional equivalence.
+
+function Chord:eRPI(range)
+    local erp = self:eRP(range)
+    if erp:iseRPI(range) then
+        return erp
+    end
+    return erp:I():eRP(range)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of octave, permutational, and inversional equivalence.
+
+function Chord:eOPI()
+    return self:eRPI(ChordSpace.OCTAVE)
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of range, permutational, transpositional, and inversional equivalence.
+
+function Chord:iseRPTI(range)
+    --[[ GVLS:
+    -- GVLS: if not (self[#self] <= self[1] + ChordSpace.OCTAVE) then
+    if not ChordSpace.le_epsilon(self[#self], (self[1] + range)) then
+        return false
+    end
+    local layer_ = self:layer()
+    -- GVLS: if not (layer_ == 0) then
+    if not ChordSpace.eq_epsilon(layer_, 0) then
+        return false
+    end
+    if #self <= 2 then
+        return true
+    end
+    local wraparound = self[1] + range - self[#self]
+    for voice = 1, #self - 1  do
+        local inner = self[voice + 1] - self[voice]
+        if not ChordSpace.le_epsilon(wraparound, inner) then
+            return false
+        end
+    end
+    if not self:iseI() then
+        return false
+    end
+    return true
+    --]]
+    ----[[ MKG:
+    if not self:iseRPT(range) then
+        return false
+    end
+    if not self:iseI() then
+        return false
+    end
+    return true
+    --]]
+end
+
+function Chord:iseRPTTI(range)
+    if not self:iseRPTT(range) then
+        return false
+    end
+    if not self:iseI() then
+        return false
+    end
+    return true
+end
+
+-- Returns whether the chord is within the representative fundamental domain
+-- of octave, permutational, transpositional, and inversional equivalence.
+
+function Chord:iseOPTI()
+    return self:iseRPTI(ChordSpace.OCTAVE)
+end
+
+function Chord:iseOPTTI()
+    return self:iseRPTTI(ChordSpace.OCTAVE)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of range, permutational, transpositional, and inversional
+-- equivalence.
+
+function Chord:eRPTI(range)
+    local rpt = self:eRPT(range)
+    if rpt:iseI() then
+        return rpt
+    end
+    return rpt:I():eRPT(range)
+end
+
+function Chord:eRPTTI(range)
+    local rpt = self:eRPTT(range)
+    if rpt:iseRPTTI(range) then
+        return rpt
+    end
+    return rpt:I():eRPTT(range)
+end
+
+-- Returns the equivalent of the chord within the representative fundamental
+-- domain of range, permutational, transpositional, and inversional
+-- equivalence.
+
+function Chord:eOPTI()
+    return self:eRPTI(ChordSpace.OCTAVE)
+end
+
+function Chord:eOPTTI()
+    return self:eRPTTI(ChordSpace.OCTAVE)
+end
+
+function Chord:name()
+    local chordName = ChordSpace.namesForChords[self:__hash()]
+    if chordName == nil then
+        chordName = ''
+    end
+    return chordName
+end
+
+-- Returns a formatted string with information about the chord.
+
+function Chord:information()
+    local et = self:eT():et()
+    local evt = self:eV():et()
+    local eopt = self:eOPT():et()
+    local epcs = self:epcs():eP()
+    local eopti = self:eOPTI():et()
+    local eOP = self:eOP()
+    chordName = eOP:name()
+    return string.format([[pitches:  %s  %s
+I:        %s
+eO:       %s  iseO:    %s
+eP:       %s  iseP:    %s
+eT:       %s  iseT:    %s
+          %s
+eI:       %s  iseI:    %s
+eV:       %s  iseV:    %s
+          %s
+eOP:      %s  iseOP:   %s
+pcs:      %s
+eOPT:     %s  iseOPT:  %s
+eOPTT:    %s
+          %s
+eOPI:     %s  iseOPI:  %s
+eOPTI:    %s  iseOPTI: %s
+eOPTTI:   %s
+          %s
+layer:      %6.2f]],
+tostring(self), chordName,
+tostring(self:I()),
+tostring(self:eO()),    tostring(self:iseO()),
+tostring(self:eP()),    tostring(self:iseP()),
+tostring(self:eT()),    tostring(self:iseT()),
+tostring(et),
+tostring(self:eI()),    tostring(self:iseI()),
+tostring(self:eV()),    tostring(self:iseV()),
+tostring(evt),
+tostring(self:eOP()),   tostring(self:iseOP()),
+tostring(epcs),
+tostring(self:eOPT()),  tostring(self:iseOPT()),
+tostring(self:eOPTT()),
+tostring(eopt),
+tostring(self:eOPI()),  tostring(self:iseOPI()),
+tostring(self:eOPTI()), tostring(self:iseOPTI()),
+tostring(self:eOPTTI()),
+tostring(eopti),
+self:layer())
+end
+
+function ChordSpace.set(collection)
+    local set_ = {}
+    for key, value in pairs(collection) do
+        set_[value:__hash()] = value
+    end
+    return set_
+end
+
+function ChordSpace.sortedSet(collection)
+    local set_ = ChordSpace.set(collection)
+    local sortedSet_ = {}
+    for key, value in pairs(set_) do
+        table.insert(sortedSet_, value)
+    end
+    table.sort(sortedSet_)
+    return sortedSet_
+end
+
+function ChordSpace.zeroBasedSet(sortedSet)
+    local zeroBasedSet = {}
+    for index, value in pairs(sortedSet) do
+        zeroBasedSet[index - 1] = value
+    end
+    return zeroBasedSet
+end
+
+function ChordSpace.setContains(setA, x)
+    if setA[x:__hash()] == x then
+        return true
+    end
+    return false
+end
+
+function ChordSpace.setInsert(setA, x)
+    if not ChordSpace.setContains(setA, x) then
+        setA[x:__hash()] = x
+    end
+end
+
+function ChordSpace.sortedEquals(sortedA, sortedB)
+    if not (#sortedA == #sortedB) then
+        return false
+    end
+    for i = 1, #sortedA do
+        if not (sortedA[i] == sortedB[i]) then
+            return false
+        end
+    end
+    return true
+end
+
+function ChordSpace.setIntersection(A, setB)
+    local result = {}
+    for index, value in pairs(A) do
+        if ChordSpace.setContains(setB, value) then
+            ChordSpace.setInsert(result, value)
+        end
+    end
+    return result
+end
+
+function ChordSpace.union(A, B)
+    local result = {}
+    for index, value in pairs(A) do
+        ChordSpace.setInsert(result, value)
+    end
+    for index, value in pairs(B) do
+        ChordSpace.setInsert(result, value)
+    end
+    return result
+end
+
+ChordSpace.pitchClassesForNames = {}
+
+ChordSpace.pitchClassesForNames["C" ] =  0
+ChordSpace.pitchClassesForNames["C#"] =  1
+ChordSpace.pitchClassesForNames["Db"] =  1
+ChordSpace.pitchClassesForNames["D" ] =  2
+ChordSpace.pitchClassesForNames["D#"] =  3
+ChordSpace.pitchClassesForNames["Eb"] =  3
+ChordSpace.pitchClassesForNames["E" ] =  4
+ChordSpace.pitchClassesForNames["F" ] =  5
+ChordSpace.pitchClassesForNames["F#"] =  6
+ChordSpace.pitchClassesForNames["Gb"] =  6
+ChordSpace.pitchClassesForNames["G" ] =  7
+ChordSpace.pitchClassesForNames["G#"] =  8
+ChordSpace.pitchClassesForNames["Ab"] =  8
+ChordSpace.pitchClassesForNames["A" ] =  9
+ChordSpace.pitchClassesForNames["A#"] = 10
+ChordSpace.pitchClassesForNames["Bb"] = 10
+ChordSpace.pitchClassesForNames["B" ] = 11
+
+ChordSpace.chordsForNames = {}
+ChordSpace.namesForChords = {}
+
+local function fill(rootName, rootPitch, typeName, typePitches)
+    local chordName = rootName .. typeName
+    local chord = Chord:new()
+    local splitPitches = Silencio.split(typePitches)
+    chord:resize(#splitPitches)
+    for voice, pitchName in ipairs(splitPitches) do
+        local pitch = ChordSpace.pitchClassesForNames[pitchName]
+        chord[voice] = rootPitch + pitch
+    end
+    chord = chord:eOP()
+    ChordSpace.chordsForNames[chordName] = chord
+    ChordSpace.namesForChords[chord:__hash()] = chordName
+end
+
+for rootName, rootPitch in pairs(ChordSpace.pitchClassesForNames) do
+    fill(rootName, rootPitch, " minor second",     "C  C#                             ")
+    fill(rootName, rootPitch, " major second",     "C     D                           ")
+    fill(rootName, rootPitch, " minor third",      "C        Eb                       ")
+    fill(rootName, rootPitch, " major third",      "C           E                     ")
+    fill(rootName, rootPitch, " perfect fourth",   "C              F                  ")
+    fill(rootName, rootPitch, " tritone",          "C                 F#              ")
+    fill(rootName, rootPitch, " perfect fifth",    "C                    G            ")
+    fill(rootName, rootPitch, " augmented fifth",  "C                       G#        ")
+    fill(rootName, rootPitch, " sixth",            "C                          A      ")
+    fill(rootName, rootPitch, " minor seventh  ",  "C                             Bb  ")
+    fill(rootName, rootPitch, " major seventh",    "C                                B")
+    -- Scales.
+    fill(rootName, rootPitch, " major",            "C     D     E  F     G     A     B")
+    fill(rootName, rootPitch, " minor",            "C     D  Eb    F     G  Ab    Bb  ")
+    fill(rootName, rootPitch, " natural minor",    "C     D  Eb    F     G  Ab    Bb  ")
+    fill(rootName, rootPitch, " harmonic minor",   "C     D  Eb    F     G  Ab       B")
+    fill(rootName, rootPitch, " chromatic",        "C  C# D  D# E  F  F# G  G# A  A# B")
+    fill(rootName, rootPitch, " whole tone",       "C     D     E     F#    G#    A#  ")
+    fill(rootName, rootPitch, " diminished",       "C     D  D#    F  F#    G# A     B")
+    fill(rootName, rootPitch, " pentatonic",       "C     D     E        G     A      ")
+    fill(rootName, rootPitch, " pentatonic major", "C     D     E        G     A      ")
+    fill(rootName, rootPitch, " pentatonic minor", "C        Eb    F     G        Bb  ")
+    fill(rootName, rootPitch, " augmented",        "C        Eb E        G  Ab    Bb  ")
+    fill(rootName, rootPitch, " Lydian dominant",  "C     D     E     Gb G     A  Bb  ")
+    fill(rootName, rootPitch, " 3 semitone",       "C        D#       F#       A      ")
+    fill(rootName, rootPitch, " 4 semitone",       "C           E           G#        ")
+    fill(rootName, rootPitch, " blues",            "C     D  Eb    F  Gb G        Bb  ")
+    fill(rootName, rootPitch, " bebop",            "C     D     E  F     G     A  Bb B")
+    -- Major chords.
+    fill(rootName, rootPitch, "M",                 "C           E        G            ")
+    fill(rootName, rootPitch, "6",                 "C           E        G     A      ")
+    fill(rootName, rootPitch, "69",                "C     D     E        G     A      ")
+    fill(rootName, rootPitch, "69b5",              "C     D     E     Gb       A      ")
+    fill(rootName, rootPitch, "M7",                "C           E        G           B")
+    fill(rootName, rootPitch, "M9",                "C     D     E        G           B")
+    fill(rootName, rootPitch, "M11",               "C     D     E  F     G           B")
+    fill(rootName, rootPitch, "M#11",              "C     D     E  F#    G           B")
+    fill(rootName, rootPitch, "M13",               "C     D     E  F     G     A     B")
+    -- Minor chords.
+    fill(rootName, rootPitch, "m",                 "C        Eb          G            ")
+    fill(rootName, rootPitch, "m6",                "C        Eb          G     A      ")
+    fill(rootName, rootPitch, "m69",               "C     D  Eb          G     A      ")
+    fill(rootName, rootPitch, "m7",                "C        Eb          G        Bb  ")
+    fill(rootName, rootPitch, "m#7",               "C        Eb          G           B")
+    fill(rootName, rootPitch, "m7b5",              "C        Eb       Gb          Bb  ")
+    fill(rootName, rootPitch, "m9",                "C     D  Eb          G        Bb  ")
+    fill(rootName, rootPitch, "m9#7",              "C     D  Eb          G           B")
+    fill(rootName, rootPitch, "m11",               "C     D  Eb    F     G        Bb  ")
+    fill(rootName, rootPitch, "m13",               "C     D  Eb    F     G     A  Bb  ")
+    -- Augmented chords.
+    fill(rootName, rootPitch, "+",                 "C            E         G#         ")
+    fill(rootName, rootPitch, "7#5",               "C            E         G#     Bb  ")
+    fill(rootName, rootPitch, "7b9#5",             "C  Db        E         G#     Bb  ")
+    fill(rootName, rootPitch, "9#5",               "C     D      E         G#     Bb  ")
+    -- Diminished chords.
+    fill(rootName, rootPitch, "o",                 "C        Eb       Gb              ")
+    fill(rootName, rootPitch, "o7",                "C        Eb       Gb       A      ")
+    -- Suspended chords.
+    fill(rootName, rootPitch, "6sus",              "C              F     G     A      ")
+    fill(rootName, rootPitch, "69sus",             "C     D        F     G     A      ")
+    fill(rootName, rootPitch, "7sus",              "C              F     G        Bb  ")
+    fill(rootName, rootPitch, "9sus",              "C     D        F     G        Bb  ")
+    fill(rootName, rootPitch, "M7sus",             "C              F     G           B")
+    fill(rootName, rootPitch, "M9sus",             "C     D        F     G           B")
+    -- Dominant chords.
+    fill(rootName, rootPitch, "7",                 "C            E       G        Bb  ")
+    fill(rootName, rootPitch, "7b5",               "C            E    Gb          Bb  ")
+    fill(rootName, rootPitch, "7b9",               "C  Db        E       G        Bb  ")
+    fill(rootName, rootPitch, "7b9b5",             "C  Db        E    Gb          Bb  ")
+    fill(rootName, rootPitch, "9",                 "C     D      E       G        Bb  ")
+    fill(rootName, rootPitch, "9#11",              "C     D      E F#    G        Bb  ")
+    fill(rootName, rootPitch, "13",                "C     D      E F     G     A  Bb  ")
+    fill(rootName, rootPitch, "13#11",             "C     D      E F#    G     A  Bb  ")
+end
+
+table.sort(ChordSpace.chordsForNames)
+table.sort(ChordSpace.namesForChords)
+
+-- Increment a chord voicewise through chord space,
+-- from a low point on the unison diagonal through a high point
+-- on the unison diagonal. g is the generator of transposition.
+-- It may be necessary to set the chord to the low point to start.
+
+function ChordSpace.next(odometer, low, high, g)
+    local voices = #odometer
+    odometer[voices] = odometer[voices] + g
+     -- "Carry."
+    for voice = voices, 2, -1 do
+        if odometer[voice] > high then
+            odometer[voice] = low
+            odometer[voice - 1] = odometer[voice - 1] + g
+        end
+    end
+    if odometer[1] > high then
+        return false
+    end
+    return true
+end
+
+function ChordSpace.allOfEquivalenceClass(voices, equivalence, g)
+    g = g or 1
+    local equivalenceMapper = nil
+    if equivalence == 'OP' then
+        equivalenceMapper = Chord.iseOP
+    end
+    if equivalence == 'OPT' then
+        equivalenceMapper = Chord.iseOPT
+    end
+    if equivalence == 'OPTT' then
+        equivalenceMapper = Chord.iseOPT
+    end
+    if equivalence == 'OPI' then
+        equivalenceMapper = Chord.iseOPI
+    end
+    if equivalence == 'OPTI' then
+        equivalenceMapper = Chord.iseOPTI
+    end
+    if equivalence == 'OPTTI' then
+        equivalenceMapper = Chord.iseOPTTI
+    end
+    local equivalentChords = {}
+    -- Enumerate all chords in [-O, O].
+    local iterator = ChordSpace.iterator(voices, -13)
+    -- print('iterator:', tostring(iterator))
+    while ChordSpace.next(iterator, -13, 13, g) == true do
+        if iterator:iseP() == true then
+            local eP = iterator:clone()
+            if equivalenceMapper(eP) then
+                ChordSpace.setInsert(equivalentChords, eP)
+            end
+        end
+    end
+    local equivalentChords = ChordSpace.sortedSet(equivalentChords)
+    local zeroBasedChords = ChordSpace.zeroBasedSet(equivalentChords)
+    return zeroBasedChords, equivalentChords
+end
+
+-- Returns a chord with the specified number of voices all set to a first
+-- pitch, useful as an iterator.
+
+function ChordSpace.iterator(voices, first)
+    local odometer = Chord:new()
+    odometer:resize(voices)
+    for voice = 1, voices do
+        odometer[voice] = first
+    end
+    return odometer
+end
+
+-- Returns a collection of all chords for the specified number of voices in a
+-- range, by default the octave. g is the generator of transposition, by default the
+-- semitone.
+
+function ChordSpace.allChordsInRange(voices, first, last, g)
+    first = first or 0
+    last = last or ChordSpace.OCTAVE
+    g = g or 1
+    -- Enumerate all chords in the range.
+    local chordset = {}
+    local iterator = ChordSpace.iterator(voices, first)
+    while ChordSpace.next(iterator, first, last, g) do
+        local chord = iterator:clone()
+        chordset[chord:__hash()] = chord
+    end
+    return ChordSpace.sortedSet(chordset)
+end
+
+-- Move 1 voice of the chord,
+-- optionally under range equivalence
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:move(voice, interval)
+    local chord = self:clone()
+    chord[voice] = T(chord[voice], interval)
+    return chord
+end
+
+-- Performs the neo-Riemannian Lettonwechsel transformation.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:nrL()
+    local cv = self:eV()
+    local cvt = self:eV():et()
+    if cvt[2] == 4 then
+        cv[1] = cv[1] - 1
+    else
+        if cvt[2] == 3 then
+            cv[3] = cv[3] + 1
+        end
+    end
+    return cv
+end
+
+-- Performs the neo-Riemannian parallel transformation.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:nrP()
+    local cv = self:eV()
+    local cvt = self:eV():et()
+    if cvt[2] == 4 then
+        cv[2] = cv[2] - 1
+    else
+        if cvt[2] == 3 then
+            cv[2] = cv[2] + 1
+        end
+    end
+    return cv
+end
+
+-- Performs the neo-Riemannian relative transformation.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:nrR()
+    local cv = self:eV()
+    local cvt = self:eV():et()
+    if cvt[2] == 4 then
+        cv[3] = cv[3] + 2
+    else
+        if cvt[2] == 3 then
+            cv[1] = cv[1] - 2
+        end
+    end
+    return cv
+end
+
+-- Performs the neo-Riemannian dominant transformation.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:nrD()
+    return self:eep():T(-7)
+end
+
+-- Returns the chord inverted by the sum of its first two voices.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:K(range)
+    range = range or ChordSpace.OCTAVE
+    local chord = self:clone()
+    if #chord < 2 then
+        return chord
+    end
+    local ep = chord:eP()
+    local x = ep[1] + ep[2]
+    return self:I(x)
+end
+
+-- Returns whether the chord is a transpositional form of Y with interval size g.
+-- Only works in equal temperament.
+
+function Chord:Tform(Y, g)
+    local eopx = self:epcs()
+    local i = 0
+    while i < ChordSpace.OCTAVE do
+        local ty = Y:T(i)
+        local eopty = ty:epcs()
+        if eopx == eopty then
+            return true
+        end
+        i = i + g
+    end
+    return false
+end
+
+-- Returns whether the chord is an inversional form of Y with interval size g.
+-- Only works in equal temperament.
+
+function Chord:Iform(Y, g)
+    local eopx = self:epcs()
+    local i = 0
+    while i < ChordSpace.OCTAVE do
+        local iy = Y:I(i)
+        local eopiy = iy:epcs()
+        if eopx == eopiy then
+            return true
+        end
+        i = i + g
+    end
+    return false
+end
+
+-- Returns the contextual transposition of the chord by x with respect to m
+-- with minimum interval size g.
+-- NOTE: Does NOT return the result under any equivalence class.
+
+function Chord:Q(x, m, g)
+    g = g or 1
+    if self:Tform(m, g) then
+        return self:T(x)
+    end
+    if self:Iform(m, g) then
+        return self:T(-x)
+    end
+    return self:clone()
+end
+
+-- Returns the voice-leading between chords a and b,
+-- i.e. what you have to add to a to get b, as a
+-- chord of directed intervals.
+
+function ChordSpace.voiceleading(a, b)
+    local voiceleading = a:clone()
+    for voice = 1, #voiceleading do
+        voiceleading[voice] = b[voice] - a[voice]
+    end
+    return voiceleading
+end
+
+-- Returns whether the voiceleading
+-- between chords a and b contains a parallel fifth.
+
+function ChordSpace.parallelFifth(a, b)
+    local v = ChordSpace.voiceleading(a, b)
+    if v:count(7) > 1 then
+        return true
+    else
+        return false
+    end
+end
+
+-- Returns the smoothness of the voiceleading between
+-- chords a and b by L1 norm.
+
+function ChordSpace.voiceleadingSmoothness(a, b)
+    local L1 = 0
+    for voice = 1, #a do
+        L1 = L1 + math.abs(b[voice] - a[voice])
+    end
+    return L1
+end
+
+-- Returns which of the voiceleadings (source to d1, source to d2)
+-- is the smoother (shortest moves), optionally avoiding parallel fifths.
+
+function ChordSpace.voiceleadingSmoother(source, d1, d2, avoidParallels, range)
+    range = range or ChordSpace.OCTAVE
+    if avoidParallels then
+        if ChordSpace.parallelFifth(source, d1) then
+            return d2
+        end
+        if ChordSpace.parallelFifth(source, d2) then
+            return d1
+        end
+    end
+    local s1 = ChordSpace.voiceleadingSmoothness(source, d1)
+    local s2 = ChordSpace.voiceleadingSmoothness(source, d2)
+    if s1 <= s2 then
+        return d1
+    else
+        return d2
+    end
+end
+
+-- Returns which of the voiceleadings (source to d1, source to d2)
+-- is the simpler (fewest moves), optionally avoiding parallel fifths.
+
+function ChordSpace.voiceleadingSimpler(source, d1, d2, avoidParallels)
+    avoidParallels = avoidParallels or false
+    if avoidParallels then
+        if ChordSpace.parallelFifth(source, d1) then
+            return d2
+        end
+        if ChordSpace.parallelFifth(source, d2) then
+            return d1
+        end
+    end
+    local v1 = ChordSpace.voiceleading(source, d1):eP()
+    local v2 = ChordSpace.voiceleading(source, d2):eP()
+    for voice = #v1, 1, -1 do
+        if v1[voice] < v2[voice] then
+            return d1
+        end
+        if v2[voice] < v1[voice] then
+            return d2
+        end
+    end
+    return d1
+end
+
+-- Returns which of the voiceleadings (source to d1, source to d2)
+-- is the closer (first smoother, then simpler), optionally avoiding parallel fifths.
+
+function ChordSpace.voiceleadingCloser(source, d1, d2, avoidParallels)
+    avoidParallels = avoidParallels or false
+    if avoidParallels then
+        if ChordSpace.parallelFifth(source, d1) then
+            return d2
+        end
+        if ChordSpace.parallelFifth(source, d2) then
+            return d1
+        end
+    end
+    local s1 = ChordSpace.voiceleadingSmoothness(source, d1)
+    local s2 = ChordSpace.voiceleadingSmoothness(source, d2)
+    if s1 < s2 then
+        return d1
+    end
+    if s1 > s2 then
+        return d2
+    end
+    return ChordSpace.voiceleadingSimpler(source, d1, d2, avoidParallels)
+end
+
+-- Returns the voicing of the destination which has the closest voice-leading
+-- from the source within the range, optionally avoiding parallel fifths.
+
+function ChordSpace.voiceleadingClosestRange(source, destination, range, avoidParallels)
+    local destinationeOP = destination:eOP()
+    local d = destinationeOP:clone()
+    local odometer = source:origin()
+    while ChordSpace.next(odometer, 0, range, ChordSpace.OCTAVE) == true do
+        local revoicing = odometer:clone()
+        for voice = 1, #revoicing do
+            revoicing[voice] = revoicing[voice] + destinationeOP[voice]
+        end
+        d = ChordSpace.voiceleadingCloser(source, d, revoicing, avoidParallels)
+    end
+    return d
+end
+
+-- Creates a complete Silencio "note on" event for the
+-- indicated voice of the chord. The other parameters are used
+-- if the internal duration, channel, velocity, and pan of the
+-- chord are nil.
+
+function Chord:note(voice_, time_, duration_, channel_, velocity_, pan_)
+    local note_ = Event:new()
+    note_[TIME] = time_
+    note_[DURATION] = duration_ or self.duration[voice_]
+    note_[CHANNEL] = channel_ or self.channel[voice_]
+    note_[KEY] = self[voice_]
+    note_[VELOCITY] = velocity_ or self.velocity[voice_]
+    note_[PAN] = pan_ or self.pan[voice_]
+    return note_
+end
+
+-- Returns an individual note for each voice of the chord.
+-- The chord's duration, instrument, and loudness are used if present,
+-- if not the specified values are used.
+
+function Chord:notes(time_, duration_, channel_, velocity_, pan_)
+    local notes_ = Score:new()
+    for voice, key in ipairs(self) do
+        table.insert(notes_, self:note(voice, time_, duration_, channel_, velocity_, pan_))
+    end
+    return notes_
+end
+
+function Chord:toScore(score, time_, duration_, channel_, velocity_, pan_)
+    for voice, key in ipairs(self) do
+        score:append(self:note(voice, time_, duration_, channel_, velocity_, pan_))
+    end
+    return score
+end
+
+-- If the event is a note, moves its pitch
+-- to the closest pitch of the chord.
+-- If octaveEquivalence is true (the default),
+-- the pitch-class of the note is moved to the closest pitch-class
+-- of the chord; otherwise, the pitch of the note is moved to the closest
+-- absolute pitch of the chord.
+
+function conformToChord(event, chord, octaveEquivalence)
+    octaveEquivalence = octaveEquivalence or true
+    if event[STATUS] ~= 144 then
+        return
+    else
+        local pitch = event[KEY]
+        if octaveEquivalence then
+            local pitchClass = pitch % ChordSpace.OCTAVE
+            local octave = pitch - pitchClass
+            local chordPitchClass = chord[1] % ChordSpace.OCTAVE
+            local distance = math.abs(chordPitchClass - pitchClass)
+            local closestPitchClass = chordPitchClass
+            local minimumDistance = distance
+            for voice = 2, #chord do
+                chordPitchClass = chord[voice] % ChordSpace.OCTAVE
+                distance = math.abs(chordPitchClass - pitchClass)
+                if distance < minimumDistance then
+                    minimumDistance = distance
+                    closestPitchClass = chordPitchClass
+                end
+            end
+            event[KEY] = octave + closestPitchClass
+        else
+            local chordPitch = chord[1]
+            local distance = math.abs(chordPitch - pitch)
+            local closestPitch = chordPitch
+            local minimumDistance = distance
+            for voice = 2, #chord do
+                chordPitch = chord[voice]
+                distance = math.abs(chordPitch - pitch)
+                if distance < minimumDistance then
+                    minimumDistance = distance
+                    closestPitch = chordPitch
+                end
+            end
+            event[KEY] = closestPitch
+        end
+    end
+end
+
+-- Inserts the notes of the chord into the score at the specified time.
+-- The internal duration, instrument, and loudness are used if present,
+-- if not the specified values are used.
+
+function ChordSpace.insert(score, chord, time_, duration, channel, velocity, pan)
+    -- print(score, chord, time_, duration, channel, velocity, pan)
+    for voice = 1, #chord do
+        local event = chord:note(voice, time_, duration, channel, velocity, pan)
+        table.insert(score, event)
+    end
+end
+
+-- For all the notes in the score
+-- beginning at or later than the start time,
+-- and up to but not including the end time,
+-- moves the pitch of the note to belong to the chord, using the
+-- conformToChord function.
+
+function ChordSpace.apply(score, chord, start, end_, octaveEquivalence)
+    octaveEquivalence = octaveEquivalence or true
+    local slice = score:slice(start, end_)
+    for index, event in ipairs(slice) do
+        conformToChord(event, chord, octaveEquivalence)
+    end
+end
+
+-- Returns a chord containing all the pitches of the score
+-- beginning at or later than the start time,
+-- and up to but not including the end time.
+
+function gather(score, start, end_)
+    local chord = Chord:new()
+    local slice = score:slice(start, end_)
+    for index, event in ipairs(slice) do
+        local pitch = event[KEY]
+        if not chord:contains(pitch) then
+            table.insert(chord, pitch)
+        end
+    end
+    return chord
+end
+
+-- Orthogonal additive groups for unordered chords of given arity under range
+-- equivalence (RP): prime form or P, inversion or I, transposition or T, and
+-- voicing or V. P x I x T = OP, P x I x T x V = RP. Therefore, an
+-- operation on P, I, T, or V may be used to independently transform the
+-- respective symmetry of any chord. Some of these operations will reflect
+-- in RP.
+
+ChordSpaceGroup = {}
+
+-- N is the number of voices in the chord space, g is the generator of
+-- transposition, range is the size of chord space,
+-- optis is an ordered table of all OPTI chords for g,
+-- voicings is an ordered table of all octavewise permutations in RP.
+
+function ChordSpaceGroup:new(o)
+    local o = o or {optisForIndexes = {}, indexesForOptis = {}, voicingsForIndexes = {}, indexesForVoicings = {}}
+    setmetatable(o, self)
+    self.__index = self
+    return o
+end
+
+function ChordSpace.octavewiseRevoicings(chord, range)
+    range = range or ChordSpace.OCTAVE
+    local voices = #chord
+    local odometer = chord:origin()
+    -- Enumerate the permutations.
+    -- iterator[1] is the most significant voice, and
+    -- iterator[N] is the least significant voice.
+    local voicings = 0
+    while ChordSpace.next(odometer, 0, range, ChordSpace.OCTAVE) == true do
+        voicings = voicings + 1
+    end
+    return voicings
+end
+
+function ChordSpace.octavewiseRevoicing(chord, index, range)
+    local voices = #chord
+    local odometer = chord:origin()
+    local eop = chord:eOP()
+    -- Enumerate the permutations.
+    -- iterator[1] is the most significant voice, and
+    -- iterator[N] is the least significant voice.
+    local voicings = 0
+    for v = 1, index do
+        ChordSpace.next(odometer, 0, range, ChordSpace.OCTAVE)
+        -- Wrap around?
+        if odometer[1] > range then
+            odometer = chord:origin()
+        end
+        voicings = voicings + 1
+    end
+    for voice = 1, #chord do
+        odometer[voice] = odometer[voice] + eop[voice]
+    end
+    return odometer
+end
+
+-- Returns the ith arpeggiation, current voice, and corresponding revoicing
+-- of the chord. Positive arpeggiations start with the lowest voice of the
+-- chord and revoice up; negative arpeggiations start with the highest voice
+-- of the chord and revoice down.
+
+function Chord:a(arpeggiation)
+    local chord = self:v(arpeggiation)
+    if arpeggiation < 0 then
+        return chord[#chord], #chord, chord
+    end
+    return chord[1], 1, chord
+end
+
+function ChordSpaceGroup:initialize(voices, range, g)
+    self.voices = voices or 3
+    self.range = range or 60
+    self.g = g or 1
+    self.countP = 0
+    self.countI = 2
+    self.countT = ChordSpace.OCTAVE / self.g
+    local chord = Chord:new()
+    chord:resize(voices)
+    self.countV = ChordSpace.octavewiseRevoicings(chord, self.range)
+    self.indexesForOptis = {}
+    self.optisForIndexes = ChordSpace.allOfEquivalenceClass(voices, 'OPTTI')
+    for index, optti in pairs(self.optisForIndexes) do
+        self.indexesForOptis[optti:__hash()] = index
+        self.countP = self.countP + 1
+    end
+    self:list()
+end
+
+function ChordSpace.createFilename(voices, range, g, extension)
+    extension = extension or '.lua'
+    local gstring = string.format('g%.6f', g)
+    gstring = string.gsub(gstring, '%.', '_')
+    local filename = string.format('ChordSpaceGroup_V%d_R%d_%s%s', voices, range, gstring, extension)
+    return filename
+end
+
+-- Loads the group if found, creates and saves it otherwise.
+
+function ChordSpace.createChordSpaceGroup(voices, range, g)
+    local filename = ChordSpace.createFilename(voices, range, 1)
+    local file, message, error = io.open(filename, 'r')
+    if file == nil then
+        print(string.format('File "%s" not found, creating...', filename))
+        chordSpaceGroup = ChordSpaceGroup:new()
+        chordSpaceGroup:initialize(voices, range, g)
+        chordSpaceGroup:save()
+        return chordSpaceGroup
+    else
+        print(string.format('Loading ChordSpaceGroup from file "%s"...', filename))
+        return ChordSpace.load(voices, range, g)
+    end
+end
+
+function ChordSpace.load(voices, range, g)
+    local filename = ChordSpace.createFilename(voices, range, 1)
+    print('Loading:', filename)
+    local deserialized = ChordSpaceGroup.load(filename)
+    return deserialized
+end
+
+function ChordSpaceGroup:save(filename)
+    filename = filename or ChordSpace.createFilename(self.voices, self.range, self.g, '.lua')
+    local text = serialize(self)
+    local writer = io.open(filename, 'w+')
+    writer:write(text)
+    writer:close()
+end
+
+function ChordSpaceGroup.load(filename)
+    local reader = io.open(filename)
+    local text = reader:read("*all")
+    -- What's deserialized is a function, which needs to be called.
+    local object = loadstring(text)()
+    -- Fix up metatable.
+    local chordSpaceGroup = ChordSpaceGroup:new(object)
+    -- Fix up metatables of chords too.
+    for index, opti in pairs(chordSpaceGroup.optisForIndexes) do
+        chordSpaceGroup.optisForIndexes[index] = Chord:new(opti)
+    end
+    return chordSpaceGroup
+end
+
+-- Returns the chord for the indices of prime form, inversion,
+-- transposition, and voicing. The chord is not in RP; rather, each voice of
+-- the chord's OP may have zero or more octaves added to it.
+
+function ChordSpaceGroup:toChord(P, I, T, V, printme)
+    printme = printme or false
+    P = P % self.countP
+    I = I % 2
+    T = T % ChordSpace.OCTAVE
+    V = V % self.countV
+    if printme then
+        print('toChord:             ', P, I, T, V)
+    end
+    local optti = self.optisForIndexes[P]
+    if printme then
+        print('toChord:   optti:    ', optti, optti:__hash())
+    end
+    local optt = nil
+    if I == 0 then
+        optt = optti
+    else
+        optt = optti:I():eOPTT()
+    end
+    if printme then
+        print('toChord:   optt:     ', optt)
+    end
+    local optt_t = optt:T(T)
+    if printme then
+        print('toChord:   optt_t:   ', optt_t)
+    end
+    local op = optt_t:eOP()
+    if printme then
+        print('toChord:   op:       ', op)
+    end
+    V = V % self.countV
+    local revoicing = ChordSpace.octavewiseRevoicing(op, V, self.range)
+    if printme then
+        print('toChord:   revoicing:', revoicing)
+    end
+    return revoicing, opti, op
+end
+
+-- Returns the indices of prime form, inversion, transposition,
+-- and voicing for a chord.
+
+function ChordSpaceGroup:fromChord(chord, printme)
+    printme = printme or false
+    if printme then
+        print('fromChord: chord:    ', chord, chord:iseOP())
+    end
+    local op = nil
+    if chord:iseOP() then
+        op = chord:clone()
+    else
+        op = chord:eOP()
+    end
+    if printme then
+        print('fromChord: op:       ', op)
+    end
+    local optt = chord:eOPTT()
+    if printme then
+        print('fromChord: optt:     ', optt)
+    end
+    local T = 0
+    for t = 0, ChordSpace.OCTAVE - 1, self.g do
+        local optt_t = optt:T(t):eOP()
+        if printme then
+            print('fromChord: optt_t:   ', optt_t, t)
+        end
+        if optt_t:__eq_epsilon(op) == true then
+            if printme then
+                print('equals')
+            end
+            T = t
+            break
+        end
+    end
+    local optti = chord:eOPTTI()
+    if printme then
+        print('fromChord: optti:    ', optti, optti:__hash())
+    end
+    local P = self.indexesForOptis[optti:__hash()]
+    local I = 0
+    if optti ~= optt then
+        I = 1
+        local optt_i_optt = optt:I():eOPTT()
+        if optt_i_optt ~= optti then
+            print("Error: OPTT(I(OPTT)) must equal OPTTI.")
+            print('optt_i_optt:', optt_i_optt:information())
+            print('optti:      ', optti:information())
+            os.exit()
+        end
+    end
+    local voicing = ChordSpace.voiceleading(op, chord)
+    V = self.indexesForVoicings[voicing:__hash()]
+    if printme then
+        print('fromChord: voicing:  ', voicing, V)
+        print('fromChord:           ', P, I, T, V)
+    end
+    return P, I, T, V
+end
+
+function ChordSpaceGroup:list(listheader, listopttis, listvoicings)
+    listheader = listheader or true
+    listopttis = listopttis or false
+    listvoicings = listvoicings or false
+    if listheader then
+        print(string.format('ChordSpaceGroup.voices: %8d', self.voices))
+        print(string.format('ChordSpaceGroup.range : %8d', self.range))
+        print(string.format('ChordSpaceGroup.g     : %13.4f', self.g))
+        print(string.format('ChordSpaceGroup.countP: %8d', self.countP))
+        print(string.format('ChordSpaceGroup.countI: %8d', self.countI))
+        print(string.format('ChordSpaceGroup.countT: %8d', self.countT))
+        print(string.format('ChordSpaceGroup.countV: %8d', self.countV))
+    end
+    if listopttis then
+        for index, opti in pairs(self.optisForIndexes) do
+            print(string.format('index: %5d  opti: %s  index from opti: %s', index, tostring(opti), self.indexesForOptis[opti:__hash()]))
+        end
+        for index = 0, #self.optisForIndexes - 1 do
+            print(string.format('opti from index: %s  index:  %5d', tostring(self.optisForIndexes[index]), index))
+        end
+    end
+    if listvoicings then
+        for index, voicing in pairs(self.voicingsForIndexes) do
+            print(string.format('voicing index: %5d  voicing: %s  index from voicing: %5d', index, tostring(voicing), self.indexesForVoicings[voicing:__hash()]))
+        end
+    end
+end
+
+function ChordSpaceGroup:printChords()
+    for index, opti in pairs(self.optisForIndexes) do
+        print(string.format('index: %5d  opti: %s %s', index, tostring(opti), opti:name()))
+    end
+end
+
+function ChordSpaceGroup:printNamedChords()
+    for index, opti in pairs(self.optisForIndexes) do
+        local name = opti:name()
+        if name ~= '' then
+            print(string.format('index: %5d  opti: %s %s', index, tostring(opti), opti:name()))
+        end
+    end
+end
+
+return ChordSpace
+*/
diff --git a/frontends/CsoundAC/Composition.cpp b/frontends/CsoundAC/Composition.cpp
index 6e2ecfa..3cfe374 100644
--- a/frontends/CsoundAC/Composition.cpp
+++ b/frontends/CsoundAC/Composition.cpp
@@ -26,191 +26,208 @@
 
 namespace csound
 {
-Composition::Composition() :
+  Composition::Composition() :
     tonesPerOctave(12.0),
     conformPitches(false)
-{
-}
+  {
+  }
 
-Composition::~Composition()
-{
-}
+  Composition::~Composition()
+  {
+  }
 
-void Composition::render()
-{
+  int Composition::render()
+  {
     clear();
-    generate();
+    int errorStatus = generate();
     timestamp = makeTimestamp();
-    perform();
-}
+    if (errorStatus) {
+      return errorStatus;
+    }
+    errorStatus = perform();
+    return errorStatus;
+  }
 
-void Composition::renderAll()
-{
+  int Composition::renderAll()
+  {
     clear();
-    generate();
-    performAll();
-}
-
-void Composition::perform()
-{
-}
-
-void Composition::generate()
-{
-}
-
-void Composition::clear()
-{
+    int errorStatus = generate();
+    if (errorStatus) {
+      return errorStatus;
+    }
+    errorStatus = performAll();
+    return errorStatus;
+  }
+
+  int Composition::perform()
+  {
+    return 0;
+  }
+
+  int Composition::generate()
+  {
+    return 0;
+  }
+
+  void Composition::clear()
+  {
     score.clear();
-}
+  }
 
-Score &Composition::getScore()
-{
+  Score &Composition::getScore()
+  {
     return score;
-}
+  }
 
-void Composition::write(const char *text)
-{
+  void Composition::write(const char *text)
+  {
     System::message(text);
-}
+  }
 
-void Composition::setTonesPerOctave(double tonesPerOctave)
-{
+  void Composition::setTonesPerOctave(double tonesPerOctave)
+  {
     this->tonesPerOctave = tonesPerOctave;
-}
+  }
 
-double Composition::getTonesPerOctave() const
-{
+  double Composition::getTonesPerOctave() const
+  {
     return tonesPerOctave;
-}
+  }
 
-void Composition::setConformPitches(bool conformPitches)
-{
+  void Composition::setConformPitches(bool conformPitches)
+  {
     this->conformPitches = conformPitches;
-}
+  }
 
-bool Composition::getConformPitches() const
-{
+  bool Composition::getConformPitches() const
+  {
     return conformPitches;
-}
+  }
 
-std::string Composition::getFilename() const
-{
+  std::string Composition::getFilename() const
+  {
     return filename;
-}
+  }
 
-void Composition::setFilename(std::string filename)
-{
+  void Composition::setFilename(std::string filename)
+  {
     this->filename = filename;
-}
+  }
 
-std::string Composition::generateFilename()
-{
+  std::string Composition::generateFilename()
+  {
     char buffer[0x100];
     snprintf(buffer, 0x100, "silence.%s.py", makeTimestamp().c_str());
     return buffer;
-}
+  }
 
-std::string Composition::getMidiFilename()
-{
+  std::string Composition::getMidiFilename() const
+  {
     std::string name = getFilename();
     name.append(".mid");
     return name;
-}
-
-std::string Composition::getOutputSoundfileName()
-{
-    std::string name = getFilename();
-    name.append(".wav");
-    return name;
-}
-
-std::string Composition::getNormalizedSoundfileName()
-{
+  }
+
+  std::string Composition::getOutputSoundfileName() const
+  {
+    if (outputFilename.empty())
+      {
+        std::string name_ = getFilename();
+        name_.append(".wav");
+        return name_;
+      }
+    else
+      {
+        return outputFilename;
+      }
+  }
+
+  std::string Composition::getNormalizedSoundfileName() const
+  {
     std::string name = getFilename();
     name.append(".norm.wav");
     return name;
-}
+  }
 
-std::string Composition::getCdSoundfileName()
-{
+  std::string Composition::getCdSoundfileName() const
+  {
     std::string name = getFilename();
     name.append(".cd.wav");
     return name;
-}
+  }
 
-std::string Composition::getMp3SoundfileName()
-{
+  std::string Composition::getMp3SoundfileName() const
+  {
     std::string name = getFilename();
     name.append(".mp3");
     return name;
-}
+  }
 
-std::string Composition::getMusicXmlFilename()
-{
+  std::string Composition::getMusicXmlFilename() const
+  {
     std::string name = getFilename();
     name.append(".xml");
     return name;
-}
+  }
 
-std::string Composition::getFomusFilename()
-{
+  std::string Composition::getFomusFilename() const
+  {
     std::string name = getFilename();
     name.append(".fms");
     return name;
-}
+  }
 
-std::string Composition::getLilypondFilename()
-{
+  std::string Composition::getLilypondFilename() const
+  {
     std::string name = getFilename();
     name.append(".ly");
     return name;
-}
+  }
 
-std::string Composition::makeTimestamp()
-{
+  std::string Composition::makeTimestamp()
+  {
     time_t time_ = 0;
     time(&time_);
     struct tm* tm_ = gmtime(&time_);
     char buffer[0x100];
     strftime(buffer, 0x100, "%Y-%m-%d.%H-%M-%S", tm_);
     return buffer;
-}
+  }
 
-std::string Composition::getTimestamp() const
-{
+  std::string Composition::getTimestamp() const
+  {
     return timestamp;
-}
+  }
 
-void tagFile(Composition &composition, std::string filename)
-{
+  int Composition::tagFile(std::string filename) const
+  {
     std::string command = "bwfmetaedit";
-    command = command + " --OriginationDate=" + composition.getTimestamp().substr(0, 10);
-    command = command + " --ICRD=" + composition.getTimestamp().substr(0, 10);
-    if (composition.getTitle().length() > 1) {
-        command = command + " --Description=" + composition.getTitle();
-        command = command + " --INAM=" + composition.getTitle();
+    command = command + " --OriginationDate=" + getTimestamp().substr(0, 10);
+    command = command + " --ICRD=" + getTimestamp().substr(0, 10);
+    if (getTitle().length() > 1) {
+      command = command + " --Description=" + getTitle();
+      command = command + " --INAM=" + getTitle();
     }
-    if (composition.getCopyright().length() > 1) {
-        command = command + " --ICOP=" + composition.getCopyright();
+    if (getCopyright().length() > 1) {
+      command = command + " --ICOP=" + getCopyright();
     }
-    if (composition.getArtist().length() > 1) {
-        command = command + " --Originator=" + composition.getArtist();
-        command = command + " --IART=" + composition.getArtist();
+    if (getArtist().length() > 1) {
+      command = command + " --Originator=" + getArtist();
+      command = command + " --IART=" + getArtist();
     }
-    if (composition.getAlbum().length() > 1) {
-        command = command + " --IPRD=" + composition.getAlbum();
+    if (getAlbum().length() > 1) {
+      command = command + " --IPRD=" + getAlbum();
     }
-    if (composition.getLicense().length() > 1) {
-        command = command + " --ICMT=" + composition.getLicense();
+    if (getLicense().length() > 1) {
+      command = command + " --ICMT=" + getLicense();
     }
     command = command + " " + filename.c_str();
     System::inform("tagFile(): %s\n", command.c_str());
-    int result = std::system(command.c_str());
-}
+    return std::system(command.c_str());
+  }
 
-void Composition::performMaster()
-{
+  int Composition::performMaster()
+  {
     System::inform("BEGAN Composition::performMaster()...\n");
     timestamp = makeTimestamp();
     score.save(getMidiFilename());
@@ -218,122 +235,146 @@ void Composition::performMaster()
     //score.save(getMusicXmlFilename());
     // Would often take too long!...
     //translateToNotation();
-    perform();
+    int errorStatus = perform();
     System::inform("ENDED Composition::performMaster().\n");
-}
+    return errorStatus;
+  }
 
-void Composition::performAll()
-{
+  int Composition::performAll()
+  {
     System::inform("BEGAN Composition::performAll()...\n");
-    performMaster();
-    translateMaster();
+    int errorStatus = performMaster();
+    if (errorStatus) {
+      return errorStatus;
+    }
+    errorStatus = translateMaster();
     System::inform("ENDED Composition::performAll().\n");
-}
+    return errorStatus;
+  }
 
-void Composition::translateMaster()
-{
+  int Composition::translateMaster()
+  {
     System::inform("ENDED Composition::translateMaster().\n");
-    tagFile(*this, getOutputSoundfileName());
-    normalizeOutputSoundfile();
-    translateToCdAudio();
-    translateToMp3();
+    int errorStatus = tagFile(getOutputSoundfileName());
+    if (errorStatus) {
+      return errorStatus;
+    }
+    errorStatus = normalizeOutputSoundfile();
+    if (errorStatus) {
+      return errorStatus;
+    }
+    errorStatus = translateToCdAudio();
+    if (errorStatus) {
+      return errorStatus;
+    }
+    errorStatus = translateToMp3();
     System::inform("ENDED Composition::translateMaster().\n");
-}
+    return errorStatus;
+  }
 
-void Composition::normalizeOutputSoundfile(double levelDb)
-{
+  int Composition::normalizeOutputSoundfile(double levelDb)
+  {
     char buffer[0x100];
     std::snprintf(buffer,
-            0x100,
-            "sox %s -V3 -b 32 -e floating-point %s gain -n %f\n",
-            getOutputSoundfileName().c_str(),
-            getNormalizedSoundfileName().c_str(),
-            levelDb);
-    int result = std::system(buffer);
+                  0x100,
+                  "sox %s -V3 -b 32 -e floating-point %s gain -n %f\n",
+                  getOutputSoundfileName().c_str(),
+                  getNormalizedSoundfileName().c_str(),
+                  levelDb);
+    int errorStatus = std::system(buffer);
+    if (errorStatus) {
+      return errorStatus;
+    }
     System::inform("Composition::normalizeOutputSoundfile(): %s", buffer);
-    tagFile(*this, getNormalizedSoundfileName());
-}
+    errorStatus = tagFile(getNormalizedSoundfileName());
+    return errorStatus;
+  }
 
-void Composition::translateToCdAudio(double levelDb)
-{
+  int Composition::translateToCdAudio(double levelDb)
+  {
     char buffer[0x100];
     std::snprintf(buffer, 0x100, "sox %s -V3 -b 16 %s gain -n %f rate 44100\n",
-            getOutputSoundfileName().c_str(),
-            getCdSoundfileName().c_str(),
-            levelDb);
+                  getOutputSoundfileName().c_str(),
+                  getCdSoundfileName().c_str(),
+                  levelDb);
     System::inform("Composition::translateToCdAudio(): %s", buffer);
-    int result = std::system(buffer);
-    tagFile(*this, getCdSoundfileName());
-}
+    int errorStatus = std::system(buffer);
+    if (errorStatus) {
+      return errorStatus;
+    }
+    errorStatus = tagFile(getCdSoundfileName());
+    return errorStatus;
+  }
 
-void Composition::translateToMp3(double bitrate, double levelDb)
-{
+  int Composition::translateToMp3(double bitrate, double levelDb)
+  {
     char buffer[0x100];
     std::snprintf(buffer,
-            0x100,
-            "lame --verbose --disptime 2 --nohist --preset cd --tt %s --ta %s --tl %s --tc %s %s %s\n",
-            getTitle().c_str(),
-            getArtist().c_str(),
-            getAlbum().c_str(),
-            getCopyright().c_str(),
-            getCdSoundfileName().c_str(),
-            getMp3SoundfileName().c_str());
+                  0x100,
+                  "lame --verbose --disptime 2 --nohist --preset cd --tt %s --ta %s --tl %s --tc %s %s %s\n",
+                  getTitle().c_str(),
+                  getArtist().c_str(),
+                  getAlbum().c_str(),
+                  getCopyright().c_str(),
+                  getCdSoundfileName().c_str(),
+                  getMp3SoundfileName().c_str());
     System::inform("Composition::translateToMp3(): %s", buffer);
-    int result = std::system(buffer);
-}
+    int errorStatus = std::system(buffer);
+    return errorStatus;
+  }
 
-std::string Composition::getArtist() const
-{
+  std::string Composition::getArtist() const
+  {
     return artist;
-}
+  }
 
-void Composition::setArtist(std::string value)
-{
+  void Composition::setArtist(std::string value)
+  {
     artist = value;
-}
+  }
 
-std::string Composition::getTitle() const
-{
+  std::string Composition::getTitle() const
+  {
     return title;
-}
+  }
 
-void Composition::setTitle(std::string value)
-{
+  void Composition::setTitle(std::string value)
+  {
     title = value;
-}
+  }
 
-std::string Composition::getCopyright() const
-{
+  std::string Composition::getCopyright() const
+  {
     return copyright;
-}
+  }
 
-void Composition::setCopyright(std::string value)
-{
+  void Composition::setCopyright(std::string value)
+  {
     copyright = value;
-}
+  }
 
-std::string Composition::getAlbum() const
-{
+  std::string Composition::getAlbum() const
+  {
     return album;
-}
+  }
 
-void Composition::setAlbum(std::string value)
-{
+  void Composition::setAlbum(std::string value)
+  {
     album = value;
-}
+  }
 
-std::string Composition::getLicense() const
-{
+  std::string Composition::getLicense() const
+  {
     return license;
-}
+  }
 
-void Composition::setLicense(std::string value)
-{
+  void Composition::setLicense(std::string value)
+  {
     license = value;
-}
+  }
 
-void Composition::translateToNotation(const std::vector<std::string> partNames, std::string header)
-{
+  int Composition::translateToNotation(const std::vector<std::string> partNames, std::string header)
+  {
     std::string filename = getFomusFilename();
     std::ofstream stream;
     stream.open(filename.c_str(), std::ifstream::binary);
@@ -341,42 +382,71 @@ void Composition::translateToNotation(const std::vector<std::string> partNames,
     std::sprintf(buffer, "title = \"%s\"\n", getTitle().c_str());
     stream << buffer;
     if (getArtist().length() > 1) {
-        std::sprintf(buffer, "author = \"%s\"\n", getArtist().c_str());
-        stream << buffer;
+      std::sprintf(buffer, "author = \"%s\"\n", getArtist().c_str());
+      stream << buffer;
     }
     stream << "beat = 1/64" << std::endl;
     stream << "timesig (4 4)" << std::endl;
     stream << "lily-papersize = 11x17" << std::endl;
     if (header.size() > 1) {
-        stream << header.c_str();
+      stream << header.c_str();
     }
     if (partNames.size() > 0) {
-        for (size_t partI = 0, partN = partNames.size(); partI < partN; ++partI) {
-            std::sprintf(buffer, "part <id = %d name = %s>\n", partI, partNames[partI].c_str());
-            stream << buffer;
-        }
+      for (size_t partI = 0, partN = partNames.size(); partI < partN; ++partI) {
+        std::sprintf(buffer, "part <id = %d name = %s>\n", partI, partNames[partI].c_str());
+        stream << buffer;
+      }
     } else {
-        for (size_t partI = 0, partN = 100; partI < partN; ++partI) {
-            std::sprintf(buffer, "part <id = %d name = Part%d>\n", partI, partI);
-            stream << buffer;
-        }
+      for (size_t partI = 0, partN = 100; partI < partN; ++partI) {
+        std::sprintf(buffer, "part <id = %d name = Part%d>\n", partI, partI);
+        stream << buffer;
+      }
     }
     for (size_t eventI = 0, eventN = score.size(); eventI < eventN; ++eventI) {
-        const Event &event = score[eventI];
-        if (event.isNoteOn()) {
-            double duration = event.getDuration() * 32.0;
-            duration = Conversions::round(duration);
-            if (duration > 0) {
-                std::sprintf(buffer, "part %g time %g dur %g pitch %g;\n", event.getInstrument() + 1, event.getTime() * 32.0, duration, event.getKey());
-                stream << buffer;
-            }
+      const Event &event = score[eventI];
+      if (event.isNoteOn()) {
+        double duration = event.getDuration() * 32.0;
+        duration = Conversions::round(duration);
+        if (duration > 0) {
+          std::sprintf(buffer, "part %g time %g dur %g pitch %g;\n", event.getInstrument() + 1, event.getTime() * 32.0, duration, event.getKey());
+          stream << buffer;
         }
+      }
     }
     stream.close();
     std::sprintf(buffer, "fomus -i %s -o %s.ly", getFomusFilename().c_str(), getTitle().c_str());
-    int result;
-    result = std::system(buffer);
+    int errorStatus;
+    errorStatus = std::system(buffer);
+    if (errorStatus) {
+      return errorStatus;
+    }
     std::sprintf(buffer, "lilypond -fpdf %s.ly", getTitle().c_str());
-    result = std::system(buffer);
-}
+    errorStatus = std::system(buffer);
+    return errorStatus;
+  }
+
+  int Composition::processArgv(int argc, const char **argv)
+  {
+    std::vector<std::string> args;
+    for (int i = 0; i < argc; ++i)
+      {
+        args.push_back(argv[i]);
+      }
+    return processArgs(args);
+  }
+
+  int Composition::processArgs(const std::vector<std::string> &args)
+  {
+    return renderAll();
+  }
+
+  void Composition::setOutputSoundfileName(std::string name)
+  {
+    outputFilename = name;
+  }
+
+  void Composition::clearOutputSoundfileName()
+  {
+    outputFilename.clear();
+  }
 }
diff --git a/frontends/CsoundAC/Composition.hpp b/frontends/CsoundAC/Composition.hpp
index 804d9fd..2b07c9d 100644
--- a/frontends/CsoundAC/Composition.hpp
+++ b/frontends/CsoundAC/Composition.hpp
@@ -25,21 +25,21 @@
 %module CsoundAC
 %{
 #include "Score.hpp"
-%}
+  %}
 #else
 #include "Score.hpp"
 #endif
 
 namespace csound
 {
-/**
- * Base class for user-defined musical compositions.
- * Contains a Score object for collecting generated Events
- * such as notes and control messages.
- */
-class Composition
-{
-public:
+  /**
+   * Base class for user-defined musical compositions.
+   * Contains a Score object for collecting generated Events
+   * such as notes and control messages.
+   */
+  class SILENCE_PUBLIC Composition
+  {
+  public:
     Composition();
     virtual ~Composition();
     /**
@@ -66,57 +66,60 @@ public:
     virtual std::string getTimestamp() const;
     /**
      * Returns a soundfile name based on the filename
-     * of this, by appending ".wav" to the filename.
+     * of this, by appending ".wav" to the filename,
+     * which is the default, or a non-default ouput name
+     * which need not be a file but must be set using
+     * setOutputSoundfileName().
      */
-    virtual std::string getOutputSoundfileName();
+    virtual std::string getOutputSoundfileName() const;
     /**
      * Returns a soundfile name based on the filename
      * of this, by appending ".norm.wav" to the filename.
      */
-    virtual std::string getNormalizedSoundfileName();
+    virtual std::string getNormalizedSoundfileName() const;
     /**
      * Returns a soundfile name for a CD audio track based on the filename
      * of this, by appending ".cd.wav" to the filename.
      */
-    virtual std::string getCdSoundfileName();
+    virtual std::string getCdSoundfileName() const;
     /**
      * Returns a soundfile name for an MP3 file based on the filename
      * of this, by appending ".mp3" to the filename.
      */
-    virtual std::string getMp3SoundfileName();
+    virtual std::string getMp3SoundfileName() const;
     /**
      * Returns a MIDI filename based on the filename
      * of this, by appending ".mid" to the filename.
      */
-    virtual std::string getMidiFilename();
+    virtual std::string getMidiFilename() const;
     /**
      * Returns a MusicXML filename based on the filename
      * of this, by appending ".xml" to the filename.
      */
-    virtual std::string getMusicXmlFilename();
+    virtual std::string getMusicXmlFilename() const;
     /**
      * Returns a MusicXML filename based on the filename
      * of this, by appending ".fms" to the filename.
      */
-    virtual std::string getFomusFilename();
+    virtual std::string getFomusFilename() const;
     /**
      * Returns a MusicXML filename based on the filename
      * of this, by appending ".ly" to the filename.
      */
-    virtual std::string getLilypondFilename();
+    virtual std::string getLilypondFilename() const;
     /**
      * Generate performance events and store them in the score.
      * Must be overidden in derived classes.
      */
-    virtual void generate();
+    virtual int generate();
     /**
      * Convenience function that calls clear(), generate(), perform().
      */
-    virtual void render();
+    virtual int render();
     /**
      * Convenience function that calls clear(), generate(), performAll().
      */
-    virtual void renderAll();
+    virtual int renderAll();
     /**
      * Performs the current score to create an output soundfile,
      * which should be tagged with author, timestamp, copyright,
@@ -124,36 +127,36 @@ public:
      * The default implementation does nothing.
      * Must be overridden in derived classes.
      */
-    virtual void perform();
+    virtual int perform();
     /**
      * Convenience function that calls saveMidi(), saveMusicXML(), and perform().
      */
-    virtual void performMaster();
+    virtual int performMaster();
     /**
-     * Convenience function that calls rescaleOutputSoundfile(), 
+     * Convenience function that calls rescaleOutputSoundfile(),
      * translateToCdAudio(), and translateToMp3().
      */
-    virtual void translateMaster();
+    virtual int translateMaster();
     /**
      * Convenience function that calls performMaster(),
      * and translateMaster().
      */
-    virtual void performAll();
+    virtual int performAll();
     /**
      * Assuming the score has been rendered,
      * uses sox to translate the output soundfile to a normalized soundfile.
      */
-    virtual void normalizeOutputSoundfile(double levelDb = -3.0);
+    virtual int normalizeOutputSoundfile(double levelDb = -3.0);
     /**
      * Assuming the score has been rendered,
      * uses sox to translate the output soundfile to normalized CD-audio format.
      */
-    virtual void translateToCdAudio(double levelDb = -3.0);
+    virtual int translateToCdAudio(double levelDb = -3.0);
     /**
      * Assuming the score has been rendered,
      * uses sox and LAME to translate the output soundfile to normalized MP3 format.
      */
-    virtual void translateToMp3(double bitrate = 256.01, double levelDb = -3.0);
+    virtual int translateToMp3(double bitrate = 256.01, double levelDb = -3.0);
     /**
      * Clear all contents of this. Probably should be overridden
      * in derived classes.
@@ -193,12 +196,12 @@ public:
     virtual bool getConformPitches() const;
     /**
      * Saves the generated score in Fomus format
-     * and uses Fomus and Lilypond to translate that 
+     * and uses Fomus and Lilypond to translate that
      * to a PDF of music notation. A meter of 4/4
-     * and a tempo of MM 120 is assumed. 
+     * and a tempo of MM 120 is assumed.
      * A vector of part names may be supplied.
      */
-    virtual void translateToNotation(const std::vector<std::string> partNames = std::vector<std::string>(), std::string header = "");
+    virtual int translateToNotation(const std::vector<std::string> partNames = std::vector<std::string>(), std::string header = "");
     virtual std::string getArtist() const;
     virtual void setArtist(std::string value);
     virtual std::string getTitle() const;
@@ -209,7 +212,26 @@ public:
     virtual void setAlbum(std::string value);
     virtual std::string getLicense() const;
     virtual void setLicense(std::string value);
-    protected:
+    virtual int tagFile(std::string filename) const;
+    /**
+     * Pass the invoking program's command-line arguments to processArgs()
+     * and it will perform with possibly back-end-dependent options.
+     * Default implementation calls the std::string overload.
+     */
+    virtual int processArgv(int argc, const char **argv);
+    /**
+     * Pass the invoking program's command-line arguments to processArgs()
+     * and it will perform with possibly back-end-dependent options.
+     * Additional arguments can be added to the args before the call.
+     * Default implementation calls renderAll().
+     */
+    virtual int processArgs(const std::vector<std::string> &args);
+    /**
+     * Sets a non-default output name (could be an audio device not a file).
+     */
+    virtual void setOutputSoundfileName(std::string name);
+    virtual void clearOutputSoundfileName();
+  protected:
     Score score;
     double tonesPerOctave;
     bool conformPitches;
@@ -220,7 +242,7 @@ public:
     std::string copyright;
     std::string album;
     std::string license;
-};
+    std::string outputFilename;
+  };
 }
 #endif
-
diff --git a/frontends/CsoundAC/Conversions.hpp b/frontends/CsoundAC/Conversions.hpp
index 72c48a1..d11b88f 100644
--- a/frontends/CsoundAC/Conversions.hpp
+++ b/frontends/CsoundAC/Conversions.hpp
@@ -55,7 +55,7 @@ namespace csound
    * All loudness conversions are driven by sample word size, which must be set before use;
    * the default is 4 (float samples).
    */
-  class Conversions
+  class SILENCE_PUBLIC Conversions
   {
     static bool initialized_;
     static std::map<std::string, double> pitchClassSetsForNames;
@@ -115,19 +115,19 @@ namespace csound
     static int swapInt(int Source);
     static short swapShort(short Source);
     /**
-     * Translate the string value to a boolean value, 
+     * Translate the string value to a boolean value,
      * returning the default if the string value is empty.
      */
     static bool stringToBool(std::string value, bool default_=false);
     static std::string boolToString(bool value);
     /**
-     * Translate the string value to an integer value, 
+     * Translate the string value to an integer value,
      * returning the default if the string value is empty.
      */
     static int stringToInt(std::string value, int default_=0);
     static std::string intToString(int value);
     /**
-     * Translate the string value to a double-precision value, 
+     * Translate the string value to a double-precision value,
      * returning the default if the string value is empty.
      */
     static double stringToDouble(std::string value, double default_=0.0);
diff --git a/frontends/CsoundAC/Counterpoint.hpp b/frontends/CsoundAC/Counterpoint.hpp
index e8af5e8..4efab0c 100644
--- a/frontends/CsoundAC/Counterpoint.hpp
+++ b/frontends/CsoundAC/Counterpoint.hpp
@@ -73,7 +73,7 @@
 using namespace boost::numeric;
 #endif
 
-class Counterpoint
+class SILENCE_PUBLIC Counterpoint
 {
 public:
   void (*messageCallback)(CSOUND *csound, int attribute, const char *format, va_list valist);
diff --git a/frontends/CsoundAC/CounterpointNode.hpp b/frontends/CsoundAC/CounterpointNode.hpp
index d9f3d97..52c99c4 100644
--- a/frontends/CsoundAC/CounterpointNode.hpp
+++ b/frontends/CsoundAC/CounterpointNode.hpp
@@ -49,7 +49,7 @@ namespace csound
    * or (b) attempt to correct the voice leading for species 1, 2, or 3
    * counterpoint in notes generated by child nodes.
    */
-  class CounterpointNode :
+  class SILENCE_PUBLIC CounterpointNode :
     public Node,
     public Counterpoint
   {
diff --git a/frontends/CsoundAC/Event.cpp b/frontends/CsoundAC/Event.cpp
index 974fee4..553f2bb 100644
--- a/frontends/CsoundAC/Event.cpp
+++ b/frontends/CsoundAC/Event.cpp
@@ -248,8 +248,8 @@ namespace csound
         return (*this)[TIME] + (*this)[DURATION];
       }
   }
-  
-  void Event::setOffTime(double offTime) 
+
+  void Event::setOffTime(double offTime)
   {
     setDuration(offTime - getTime());
   }
diff --git a/frontends/CsoundAC/Event.hpp b/frontends/CsoundAC/Event.hpp
index 1f7b077..5a232f8 100644
--- a/frontends/CsoundAC/Event.hpp
+++ b/frontends/CsoundAC/Event.hpp
@@ -69,7 +69,7 @@ namespace csound
    * but they are always real-time score statements at time 0, suitable
    * for use with Csound's -L or line event option.
    */
-  class Event :
+  class SILENCE_PUBLIC Event :
     public ublas::vector<double>
   {
   public:
diff --git a/frontends/CsoundAC/Exception.hpp b/frontends/CsoundAC/Exception.hpp
index 02dfaf7..b96b9e8 100644
--- a/frontends/CsoundAC/Exception.hpp
+++ b/frontends/CsoundAC/Exception.hpp
@@ -34,7 +34,7 @@ namespace csound
   /**
    * Base class for C++ exceptions in the Silence system.
    */
-  class Exception
+  class SILENCE_PUBLIC Exception
   {
     std::string message;
   public:
diff --git a/frontends/CsoundAC/Hocket.hpp b/frontends/CsoundAC/Hocket.hpp
index dfd56b8..f746535 100644
--- a/frontends/CsoundAC/Hocket.hpp
+++ b/frontends/CsoundAC/Hocket.hpp
@@ -36,7 +36,7 @@ namespace csound
   /**
    * Simplifies constructing complex hocketted scores.
    */
-  class Hocket :
+  class SILENCE_PUBLIC Hocket :
     public ScoreNode
   {
   public:
diff --git a/frontends/CsoundAC/ImageToScore.hpp b/frontends/CsoundAC/ImageToScore.hpp
index 3c0fe74..775a399 100644
--- a/frontends/CsoundAC/ImageToScore.hpp
+++ b/frontends/CsoundAC/ImageToScore.hpp
@@ -39,7 +39,7 @@ namespace csound
         * Translates images in various RGB formats to scores.
         * Hue is mapped to instrument, value is mapped to loudness.
         */
-        class ImageToScore : public ScoreNode
+        class SILENCE_PUBLIC ImageToScore : public ScoreNode
         {
         protected:
                 std::string imageFilename;
diff --git a/frontends/CsoundAC/Lindenmayer.hpp b/frontends/CsoundAC/Lindenmayer.hpp
index 5069a1c..9bc65d3 100644
--- a/frontends/CsoundAC/Lindenmayer.hpp
+++ b/frontends/CsoundAC/Lindenmayer.hpp
@@ -86,7 +86,7 @@ namespace csound
    * <li>s = pitch-class set as Mason number</li>
    * </ol>
    */
-  class Lindenmayer :
+  class SILENCE_PUBLIC Lindenmayer :
     public ScoreNode
   {
   protected:
diff --git a/frontends/CsoundAC/MCRM.hpp b/frontends/CsoundAC/MCRM.hpp
index 78cb065..42b05e7 100644
--- a/frontends/CsoundAC/MCRM.hpp
+++ b/frontends/CsoundAC/MCRM.hpp
@@ -34,7 +34,7 @@
 
 namespace csound
 {
-  class MCRM :
+  class SILENCE_PUBLIC MCRM :
     public ScoreNode
   {
     // Hutchinson operator.
diff --git a/frontends/CsoundAC/Midifile.cpp b/frontends/CsoundAC/Midifile.cpp
index e0259cd..4af33c1 100644
--- a/frontends/CsoundAC/Midifile.cpp
+++ b/frontends/CsoundAC/Midifile.cpp
@@ -381,7 +381,7 @@ namespace csound
     }
     return false;
   }
-  
+
   bool MidiEvent::isNoteOff() const
   {
     if(getStatusNybble() == MidiFile::CHANNEL_NOTE_OFF) {
@@ -396,7 +396,7 @@ namespace csound
     }
     return false;
   }
-  
+
   bool MidiEvent::matchesNoteOffEvent(const MidiEvent &offEvent) const
   {
     if(!isNoteOn()) {
diff --git a/frontends/CsoundAC/Midifile.hpp b/frontends/CsoundAC/Midifile.hpp
index c822198..cb8b870 100644
--- a/frontends/CsoundAC/Midifile.hpp
+++ b/frontends/CsoundAC/Midifile.hpp
@@ -48,9 +48,9 @@ namespace csound
 {
   typedef unsigned char csound_u_char;
 
-  class MidiFile;
+  class SILENCE_PUBLIC MidiFile;
 
-  class Chunk
+  class SILENCE_PUBLIC Chunk
   {
   public:
     int id;
@@ -70,7 +70,7 @@ namespace csound
     virtual void markChunkEnd(std::ostream &stream);
   };
 
-  class MidiHeader : public Chunk
+  class SILENCE_PUBLIC MidiHeader : public Chunk
   {
   public:
     short type;
@@ -88,7 +88,7 @@ namespace csound
   /**
    * This class is used to store ALL Midi messages.
    */
-  class MidiEvent : public std::vector<csound_u_char>
+  class SILENCE_PUBLIC MidiEvent : public std::vector<csound_u_char>
   {
   public:
     int ticks;
@@ -116,7 +116,7 @@ namespace csound
     friend bool operator < (const MidiEvent &a, const MidiEvent &b);
   };
 
-  class MidiTrack : public Chunk, public std::vector<MidiEvent>
+  class SILENCE_PUBLIC MidiTrack : public Chunk, public std::vector<MidiEvent>
   {
   public:
     MidiTrack();
@@ -126,7 +126,7 @@ namespace csound
     MidiTrack &operator = (const MidiTrack &a);
   };
 
-  class TempoMap : public std::map<int, double>
+  class SILENCE_PUBLIC TempoMap : public std::map<int, double>
   {
   public:
     double getCurrentSecondsPerTick(int tick);
@@ -135,7 +135,7 @@ namespace csound
   /**
    * Reads and writes format 0 and format 1 standard MIDI files.
    */
-  class MidiFile
+  class SILENCE_PUBLIC MidiFile
   {
   public:
     typedef enum {
@@ -236,9 +236,9 @@ namespace csound
     virtual void dump(std::ostream &stream);
   };
 
-  bool operator < (const MidiEvent &a, const MidiEvent &b);
+  bool SILENCE_PUBLIC operator < (const MidiEvent &a, const MidiEvent &b);
 
-  struct MidiEventComparator
+  struct SILENCE_PUBLIC MidiEventComparator
   {
     bool operator()(const MidiEvent &a, const MidiEvent &b)
     {
diff --git a/frontends/CsoundAC/MusicModel.cpp b/frontends/CsoundAC/MusicModel.cpp
index d859f10..f6b28cf 100644
--- a/frontends/CsoundAC/MusicModel.cpp
+++ b/frontends/CsoundAC/MusicModel.cpp
@@ -21,6 +21,8 @@
 #include "Exception.hpp"
 #include "Composition.hpp"
 #include "System.hpp"
+#include <cstdio>
+#include <cstdlib>
 
 namespace csound
 {
@@ -38,20 +40,26 @@ namespace csound
   {
   }
 
-  void MusicModel::generate()
+  int MusicModel::generate()
   {
+    int errorStatus = 0;
     cppSound->removeScore();
     if (children.size()) {
       score.clear();
     }
     traverse(getLocalCoordinates(), score);
     System::message("Generated %d events.\n", score.size());
+    return errorStatus;
   }
 
-  void MusicModel::render()
+  int MusicModel::render()
   {
-    generate();
-    perform();
+    int errorStatus = generate();
+    if (errorStatus) {
+      return errorStatus;
+    }
+    errorStatus = perform();
+    return errorStatus;
   }
 
   void MusicModel::createCsoundScore(std::string addToScore, double extendSeconds)
@@ -65,15 +73,24 @@ namespace csound
     char buffer[0x100];
     std::sprintf(buffer, "\ns %9.3f", extendSeconds);
     cppSound->addScoreLine(buffer);
-    std::sprintf(buffer, "\ne %9.3f", extendSeconds);
-    cppSound->addScoreLine(buffer);
+    //std::sprintf(buffer, "\ne %9.3f", extendSeconds);
+    //cppSound->addScoreLine(buffer);
     cppSound->exportForPerformance();
   }
 
-  void MusicModel::perform()
+  int MusicModel::perform()
   {
+    int errorStatus = 0;
+    cppSound->setCommand(getCsoundCommand());
     createCsoundScore(csoundScoreHeader);
-    cppSound->perform();
+    errorStatus = cppSound->perform();
+    if (errorStatus == 1) {
+      errorStatus = 0;
+    }
+    // The Csound command is managed from MusicModel,
+    // not from CppSound. So we clear out what we set.
+    cppSound->setCommand("");
+    return errorStatus;
   }
 
   void MusicModel::clear()
@@ -126,16 +143,16 @@ namespace csound
   }
 
   void MusicModel::arrange(int oldInstrumentNumber,
-                            int newInstrumentNumber,
-                            double gain)
+                           int newInstrumentNumber,
+                           double gain)
   {
     score.arrange(oldInstrumentNumber, newInstrumentNumber, gain);
   }
 
   void MusicModel::arrange(int oldInstrumentNumber,
-                            int newInstrumentNumber,
-                            double gain,
-                            double pan)
+                           int newInstrumentNumber,
+                           double gain,
+                           double pan)
   {
     score.arrange(oldInstrumentNumber, newInstrumentNumber, gain, pan);
   }
@@ -150,7 +167,7 @@ namespace csound
   {
     int csoundInstrumentNumber = cppSound->getInstrumentNumber(csoundInstrumentName);
     arrange(silenceInstrumentNumber, csoundInstrumentNumber, gain);
-   }
+  }
 
   void MusicModel::arrange(int silenceInstrumentNumber, std::string csoundInstrumentName, double gain, double pan)
   {
@@ -170,7 +187,23 @@ namespace csound
 
   std::string MusicModel::getCsoundCommand() const
   {
-    return cppSound->getCommand();
+    std::string command_ = cppSound->getCommand();
+    if (command_.size() == 0)
+      {
+        const char *temp_path = std::getenv("TEMP");
+        if (temp_path == 0)
+          {
+            temp_path = "";
+          }
+        std::string orcname = std::tmpnam(0);
+        std::string sconame = std::tmpnam(0);
+        char buffer[0x200];
+        std::sprintf(buffer,
+                     "csound --midi-key=4 --midi-velocity=5 -m167 -RWdfo %s %s%s.orc %s%s.sco",
+                     getOutputSoundfileName().c_str(), temp_path, orcname.c_str(), temp_path, sconame.c_str());
+        command_ = buffer;
+      }
+    return command_;
   }
 
   long MusicModel::getThis()
@@ -183,5 +216,80 @@ namespace csound
     return (Node *)this;
   }
 
-}
+  int MusicModel::processArgs(const std::vector<std::string> &args)
+  {
+    System::inform("BEGAN MusicModel::processArgv()...\n");
+    std::map<std::string, std::string> argsmap;
+    std::string key;
+    for (size_t i = 0, n = args.size(); i < n; ++i)
+      {
+	const std::string token = args[i];
+	std::string value = "";
+	if (token.find("--") == 0) 
+	  {
+	    key = token;
+	  }
+	else
+	  {
+	    value = token;
+	  }
+	argsmap[key] = value;
+	System::inform("argument[%2d]: %s =  %s\n", i, key.c_str(), value.c_str());
+      }
+    char command[0x200];
+    int errorStatus = 0;
+    bool postPossible = false;
+    std::string playSoundfileName = getOutputSoundfileName();
+    if ((argsmap.find("--midi") != argsmap.end()) && !errorStatus)
+      {
+        errorStatus = generate();
+	if (errorStatus) {
+	  return errorStatus;
+	}
+        getScore().save(getMidiFilename().c_str());
+      }
+    if ((argsmap.find("--csound") != argsmap.end()) && !errorStatus)
+      {
+        postPossible = true;
+        errorStatus = render();
+      }
+    if ((argsmap.find("--pianoteq") != argsmap.end()) && !errorStatus)
+      {
+        std::sprintf(command, "Pianoteq --midi %s\n", getMidiFilename().c_str());
+	System::inform("Executing command: %s", command);
+        errorStatus = std::system(command);
+      }
+    if ((argsmap.find("--pianoteq-wav") != argsmap.end()) && !errorStatus)
+      {
+        postPossible = true;
+        std::sprintf(command, "Pianoteq --headless --midi %s --rate 48000 --wav %s\n", getMidiFilename().c_str(), getOutputSoundfileName().c_str());
+	System::inform("Executing command: %s", command);
+        errorStatus = std::system(command);
+      }
+    if ((argsmap.find("--playmidi") != argsmap.end()) && !errorStatus)
+      {
+        std::sprintf(command, "%s %s\n", argsmap["--playmidi"].c_str(), getMidiFilename().c_str());
+	System::inform("Executing command: %s", command);
+        errorStatus = std::system(command);
+      }
+    if ((argsmap.find("--post") != argsmap.end()) && !errorStatus && postPossible)
+      {
+        errorStatus = translateMaster();
+	playSoundfileName = getNormalizedSoundfileName();
+      }
+    if ((argsmap.find("--playwav") != argsmap.end()) && !errorStatus)
+      {
+        std::sprintf(command, "%s %s\n", argsmap["--playwav"].c_str(), playSoundfileName.c_str());
+	System::inform("Executing command: %s", command);
+        errorStatus = std::system(command);
+      }
+    System::inform("ENDED MusicModel::processArgv().\n");
+    return errorStatus;
+  }
 
+  void MusicModel::stop()
+  {
+    std::cout << "MusicModel::stop()..." << std::endl;
+    cppSound->stop();
+  }
+}
diff --git a/frontends/CsoundAC/MusicModel.hpp b/frontends/CsoundAC/MusicModel.hpp
index d020abf..abd8384 100644
--- a/frontends/CsoundAC/MusicModel.hpp
+++ b/frontends/CsoundAC/MusicModel.hpp
@@ -43,14 +43,14 @@ namespace csound
    * A ScoreModel that uses Csound to render generated scores,
    * via the CppSound class.
    */
-  class MusicModel :
+  class SILENCE_PUBLIC MusicModel :
     public ScoreModel
   {
   public:
     MusicModel();
     virtual ~MusicModel();
     virtual void initialize();
-    virtual void generate();
+    virtual int generate();
     virtual long getThis();
     virtual Node *getThisNode();
     /**
@@ -65,11 +65,12 @@ namespace csound
      * appends optional text to it,
      * invokes generate(), invokes createCsoundScore(), and invokes perform().
      */
-    virtual void render();
+    virtual int render();
+    virtual void stop();
     /**
      * Uses csound to perform the current score.
      */
-    virtual void perform();
+    virtual int perform();
     /**
      * Clear all contents of this.
      */
@@ -157,6 +158,22 @@ namespace csound
      * (convenience wrapper for CppSound::getCommand()).
      */
     virtual std::string getCsoundCommand() const;
+    /**
+     * Pass the invoking program's command-line arguments to processArgs()
+     * and it will perform the following commands:
+     *
+     * --csound        Render generated score using set Csound orchestra.
+     * --midi          Render generated score as MIDI file and play it (default).
+     * --pianoteq      Play generated MIDI sequence file with Pianoteq.
+     * --pianoteq-wav  Render score to soundfile using Pianoteq,
+     *                 post-process it, and play it.
+     * --playmidi      Play generated MIDI filev
+     *                 post-process it, and play it.
+     * --playwav       Play rendered or normalized output soundfile.
+     * --post          Post-process Csound output soundfile:
+     *                 normalize, CD, MP3, tag, and play it.
+     */
+    virtual int processArgs(const std::vector<std::string> &args);
   protected:
     /**
      * Self-contained Csound object.
diff --git a/frontends/CsoundAC/Node.hpp b/frontends/CsoundAC/Node.hpp
index 610cb3c..293df60 100644
--- a/frontends/CsoundAC/Node.hpp
+++ b/frontends/CsoundAC/Node.hpp
@@ -45,7 +45,7 @@ namespace csound
    * Nodes can transform silence::Events produced by child nodes.
    * Nodes can produce silence::Events.
    */
-  class Node
+  class SILENCE_PUBLIC Node
   {
   protected:
     ublas::matrix<double> localCoordinates;
@@ -69,8 +69,8 @@ namespace csound
                                            Score &score);
     /**
      * The default implementation does nothing.
-     * Derived nodes that produce notes from scratch should 
-     * transform them using the composite transformation of 
+     * Derived nodes that produce notes from scratch should
+     * transform them using the composite transformation of
      * coordinate system, which is passed in from the traverse() function.
      */
     virtual void produceOrTransform(Score &score,
@@ -84,19 +84,18 @@ namespace csound
     virtual void addChild(Node *node);
   };
   typedef Node* NodePtr;
-  
+
   /**
    * Removes all duplicate events produced by the child nodes of this.
    */
-  class RemoveDuplicates : public Node
+  class SILENCE_PUBLIC RemoveDuplicates : public Node
   {
     public:
     virtual void produceOrTransform(Score &score,
                                     size_t beginAt,
                                     size_t endAt,
                                     const ublas::matrix<double> &compositeCordinates);
-        
+
   };
 }
 #endif
-
diff --git a/frontends/CsoundAC/OrchestraNode.hpp b/frontends/CsoundAC/OrchestraNode.hpp
index 2af1aa0..bd2a53f 100644
--- a/frontends/CsoundAC/OrchestraNode.hpp
+++ b/frontends/CsoundAC/OrchestraNode.hpp
@@ -5,7 +5,7 @@ class Timebase;
 class Event;
 class Audio;
 
-class OrchestraNode
+class SILENCE_PUBLIC OrchestraNode
 {
 public:
   OrchestraNode();
diff --git a/frontends/CsoundAC/Random.cpp b/frontends/CsoundAC/Random.cpp
index aedf1de..e59d70c 100644
--- a/frontends/CsoundAC/Random.cpp
+++ b/frontends/CsoundAC/Random.cpp
@@ -126,9 +126,9 @@ namespace csound
       }
     return transformation;
   }
-  void Random::produceOrTransform(Score &score, 
-                                  size_t beginAt, 
-                                  size_t endAt, 
+  void Random::produceOrTransform(Score &score,
+                                  size_t beginAt,
+                                  size_t endAt,
                                   const ublas::matrix<double> &compositeCoordinates)
   {
     createDistribution(distribution);
@@ -149,7 +149,7 @@ namespace csound
               }
             score.push_back(transformedEvent);
           }
-        // Apply the global transformation of coordinate system 
+        // Apply the global transformation of coordinate system
         // to all child events produced by this node.
         size_t finalEndAt = score.size();
         for (size_t i = endAt; i < finalEndAt; i++) {
@@ -170,4 +170,3 @@ namespace csound
     mersenneTwister.seed((unsigned int) s);
   }
 }
-
diff --git a/frontends/CsoundAC/Random.hpp b/frontends/CsoundAC/Random.hpp
index 6cfa749..28ff3e3 100644
--- a/frontends/CsoundAC/Random.hpp
+++ b/frontends/CsoundAC/Random.hpp
@@ -47,7 +47,7 @@ namespace csound
    * for each of eventCount samples,
    * which will be transformed by the newly sampled local coordinates.
    */
-  class Random :
+  class SILENCE_PUBLIC Random :
     public Node
   {
   protected:
@@ -85,7 +85,7 @@ namespace csound
     virtual double sample() const;
     virtual ublas::matrix<double> getRandomCoordinates() const;
     virtual void createDistribution(std::string distribution);
-    virtual void produceOrTransform(Score &score, size_t beginAt, size_t endAt, 
+    virtual void produceOrTransform(Score &score, size_t beginAt, size_t endAt,
                                     const ublas::matrix<double> &compositeCoordinates);
     static void seed(int s);
   };
diff --git a/frontends/CsoundAC/Rescale.cpp b/frontends/CsoundAC/Rescale.cpp
index a54cab7..fa2fff0 100644
--- a/frontends/CsoundAC/Rescale.cpp
+++ b/frontends/CsoundAC/Rescale.cpp
@@ -57,13 +57,13 @@ namespace csound
   {
     for(int i = 0; i < Event::ELEMENT_COUNT; i++)
       {
-        score_.setScale(score_, 
-                        i, 
-                        score.rescaleMinima[i], 
-                        score.rescaleRanges[i], 
-                        beginAt, 
-                        endAt, 
-                        score.scaleTargetMinima[i], 
+        score_.setScale(score_,
+                        i,
+                        score.rescaleMinima[i],
+                        score.rescaleRanges[i],
+                        beginAt,
+                        endAt,
+                        score.scaleTargetMinima[i],
                         score.scaleTargetRanges[i]);
       }
   }
diff --git a/frontends/CsoundAC/Rescale.hpp b/frontends/CsoundAC/Rescale.hpp
index d609b1f..63a03f6 100644
--- a/frontends/CsoundAC/Rescale.hpp
+++ b/frontends/CsoundAC/Rescale.hpp
@@ -38,7 +38,7 @@ namespace csound
    * No, some, or all dimensions may be rescaled to fit the minimum alone,
    * the range alone, or both the minimum and the range.
    */
-  class Rescale :
+  class SILENCE_PUBLIC Rescale :
     public ScoreNode
   {
     static bool initialized;
diff --git a/frontends/CsoundAC/Score.cpp b/frontends/CsoundAC/Score.cpp
index e1a44f6..f7d873e 100644
--- a/frontends/CsoundAC/Score.cpp
+++ b/frontends/CsoundAC/Score.cpp
@@ -18,7 +18,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 #include "CppSound.hpp"
-#include "Midifile.hpp"
+// #include "Midifile.hpp"
 #include "Score.hpp"
 #include "System.hpp"
 #include "Conversions.hpp"
@@ -32,6 +32,8 @@
 #include <fstream>
 #include <sstream>
 
+#include <allegro.h>
+
 #if defined(HAVE_MUSICXML2)
 #if defined(EXP)
 #undef EXP
@@ -50,7 +52,7 @@ using namespace MusicXML2;
 namespace csound
 {
 
-void printChord(std::ostream &stream, std::string label, const std::vector<double> &chord)
+void SILENCE_PUBLIC printChord(std::ostream &stream, std::string label, const std::vector<double> &chord)
 {
     if (!( (System::getMessageLevel() & System::INFORMATION_LEVEL) == System::INFORMATION_LEVEL) ) {
         return;
@@ -65,7 +67,7 @@ void printChord(std::ostream &stream, std::string label, const std::vector<doubl
     stream << "]" << std::endl;
 }
 
-void printChord(std::string label, const std::vector<double> &chord)
+void SILENCE_PUBLIC printChord(std::string label, const std::vector<double> &chord)
 {
     if (!( (System::getMessageLevel() & System::INFORMATION_LEVEL) == System::INFORMATION_LEVEL) ) {
         return;
@@ -172,9 +174,25 @@ void Score::load(std::string filename)
 
 void Score::load(std::istream &stream)
 {
-    MidiFile midiFile;
-    midiFile.read(stream);
-    load(midiFile);
+  Alg_seq seq(stream, true);
+  seq.convert_to_seconds();
+  Alg_iterator iterator(&seq, false);
+  iterator.begin();
+  for(;;) {
+    Alg_event *event = iterator.next();
+    if (!event) {
+      break;
+    }
+    append(event->get_start_time(),
+	   event->get_duration(),
+	   double(144),
+	   double(event->chan),
+	   event->get_pitch(),
+	   event->get_loud());	     
+  }
+  // MidiFile midiFile;
+  // midiFile.read(stream);
+  // load(midiFile);
 }
 
 #if defined(HAVE_MUSICXML2)
@@ -299,7 +317,7 @@ void Score::save(std::string filename)
     System::inform("BEGAN Score::save(%s)...\n", filename.c_str());
     std::ofstream stream;
     //stream.open(filename.c_str(), std::ios_base::binary);
-    stream.open(filename.c_str(), std::ifstream::binary);
+    stream.open(filename.c_str(), std::ios::out | std::ios::binary);
     if (filename.find(".mid") != std::string::npos ||
             filename.find(".MID") != std::string::npos) {
         save(stream);
@@ -333,8 +351,32 @@ void Score::save(std::string filename)
 
 void Score::save(std::ostream &stream)
 {
-    save(midifile);
-    midifile.write(stream);
+    Alg_seq seq;
+    for (size_t i = 0, n = size(); i < n; ++i) {
+      const Event &event = at(i);
+      if (event.isNoteOn()) {
+	int channel = event.getChannel();
+	double time = event.getTime();
+	double duration = event.getDuration();
+	float pitch = event.getKey();
+	float loudness = event.getVelocity();
+	int identifier = i;
+	Alg_note *note = seq.create_note(time, 
+					 channel,  
+					 pitch, 
+					 pitch, 
+					 loudness,  
+					 duration);
+	// Does nothing if the track already exists.
+	seq.add_track(channel);
+	seq.add_event(note, channel);
+      }
+    }
+    // Write with time in seconds.
+    seq.write(std::cout, true);
+    seq.smf_write(stream);
+  // save(midifile);
+  // midifile.write(stream);
 }
 
 static double max(double a, double b)
@@ -470,7 +512,7 @@ void Score::rescale(Event &event)
         }
     }
 }
-
+/*
 void Score::load(MidiFile &midiFile)
 {
     std::vector<Event>::clear();
@@ -504,7 +546,9 @@ void Score::load(MidiFile &midiFile)
     findScale();
     sort();
 }
+*/
 
+/*
 void Score::save(MidiFile &midiFile)
 {
     findScale();
@@ -555,6 +599,7 @@ void Score::save(MidiFile &midiFile)
     }
     midiFile.midiHeader.trackCount = midiFile.midiTracks.size();
 }
+  */
 
 void Score::dump(std::ostream &stream)
 {
@@ -1279,4 +1324,38 @@ void Score::remove(size_t index)
 {
     erase(begin() + index);
 }
+void Score::tieOverlappingNotes(bool considerInstrumentNumber)
+{
+    sort();
+    for (int laterI = size() - 1; laterI > 1; --laterI) {
+        Event &laterEvent = (*this)[laterI];
+        for (int earlierI = laterI - 1; earlierI > 0; --earlierI) {
+            Event &earlierEvent = (*this)[earlierI];
+            if (earlierEvent.getKeyNumber() != laterEvent.getKeyNumber()) {
+              continue;
+            }
+            if (earlierEvent.getVelocity() <= 0.0 || laterEvent.getVelocity() <= 0.0) {
+              continue;
+            }
+            if (earlierEvent.getOffTime() < laterEvent.getTime()) {
+              continue;
+            }
+            if (considerInstrumentNumber && (earlierEvent.getChannel() != laterEvent.getChannel())) {
+                continue;
+            }
+            // Ok, must be tied.
+            earlierEvent.setOffTime(laterEvent.getOffTime());
+            erase(begin() + laterI);
+            break;
+        }
+    }
+}
+
+void Score::temper(double tonesPerOctave)
+{
+    for (size_t i = 0, n = size(); i < n; ++i) {
+        (*this)[i].temper(tonesPerOctave);
+    }
 }
+}
+
diff --git a/frontends/CsoundAC/Score.hpp b/frontends/CsoundAC/Score.hpp
index 2f43f92..23da8df 100644
--- a/frontends/CsoundAC/Score.hpp
+++ b/frontends/CsoundAC/Score.hpp
@@ -24,7 +24,7 @@
 %module CsoundAC
 %{
 #include "Event.hpp"
-#include "Midifile.hpp"
+  // #include "Midifile.hpp"
 #include <iostream>
 #include <vector>
   %}
@@ -32,7 +32,7 @@
 %include "std_vector.i"
 #else
 #include "Event.hpp"
-#include "Midifile.hpp"
+ // #include "Midifile.hpp"
 #include <iostream>
 #include <vector>
 #endif
@@ -46,7 +46,7 @@ namespace csound
    * The implementation is a std::vector of Events.
    * The elements of the vector are value objects, not references.
    */
-  class Score :
+  class SILENCE_PUBLIC Score :
     public std::vector<csound::Event>
   {
   protected:
@@ -75,10 +75,10 @@ namespace csound
      */
     virtual void load(std::string filename);
     virtual void load(std::istream &stream);
-    virtual void load(MidiFile &midiFile);
+    //virtual void load(MidiFile &midiFile);
     /**
      * Save as a MIDI file, format 1 (.mid) file,
-     * or as a partwise MusicXML (.xml) file, 
+     * or as a partwise MusicXML (.xml) file,
      * or as a Fomus music notation (.fms) file.
      * Only sounding data is saved.
      */
@@ -90,7 +90,7 @@ namespace csound
     /**
      * Save as a MIDI file, format 1.
      */
-    virtual void save(MidiFile &midiFile);
+    //virtual void save(MidiFile &midiFile);
     static void getScale(std::vector<Event> &score, int dimension, size_t beginAt, size_t endAt, double &minimum, double &range);
     static void setScale(std::vector<Event> &score, int dimension, bool rescaleMinimum, bool rescaleRange, size_t beginAt, size_t endAt, double targetMinimum, double targetRange);
     virtual void findScale();
@@ -294,24 +294,24 @@ namespace csound
      */
     virtual void setVoicing(size_t begin, size_t end, const std::vector<double> &voicing, double range, size_t divisionsPerOctave = 12);
     /**
-     * Find the non-unique pitch-class set of the prior segment; 
-     * invert the set such that the inversion's first two pitch-classes 
+     * Find the non-unique pitch-class set of the prior segment;
+     * invert the set such that the inversion's first two pitch-classes
      * are exchanged from the origina; conform the pitches of the
      * current segment to that inversion.
      */
     virtual void setK(size_t priorBegin, size_t begin, size_t end, double base, double range);
     /**
-     * Find the non-unique pitch-class set of the prior segment; 
-     * invert the set such that the inversion's first two pitch-classes 
-     * are exchanged from the original; conform the pitches of the 
+     * Find the non-unique pitch-class set of the prior segment;
+     * invert the set such that the inversion's first two pitch-classes
+     * are exchanged from the original; conform the pitches of the
      * current segment to that inversion, with voicing V.
      */
     virtual void setKV(size_t priorBegin, size_t begin, size_t end, double V, double base, double range);
     /**
-     * Find the non-unique pitch-class set of the prior segment; 
-     * invert the set such that the inversion's first two pitch-classes 
-     * are exchanged from the original; conform the pitches of the 
-     * current segment to that inversion, using the closest voice-leading 
+     * Find the non-unique pitch-class set of the prior segment;
+     * invert the set such that the inversion's first two pitch-classes
+     * are exchanged from the original; conform the pitches of the
+     * current segment to that inversion, using the closest voice-leading
      * from the pitches of the prior segment, optionally avoiding parallel fifths.
      */
     virtual void setKL(size_t priorBegin, size_t begin, size_t end, double base, double range, bool avoidParallels = true);
@@ -332,7 +332,7 @@ namespace csound
     /**
      * Find the non-unique pitch-class set of the prior segment; transpose the set up by Q
      * if the set is a T-form of the context, or down by Q if the set is an I-form of the context;
-     * then conform the pitches of the segment to that set, using the closest voice-leading 
+     * then conform the pitches of the segment to that set, using the closest voice-leading
      * from the pitches of the prior segment, optionally avoiding parallel fifths.
      * The context will be reduced or doubled as required to match the cardinality of the set.
      */
@@ -342,6 +342,17 @@ namespace csound
      * stretch or shrink musical time.
      */
     virtual void setDuration(double targetDuration);
+    /**
+     * If the score contains two notes of the same pitch
+     * and loudness greater than 0 that overlap in time,
+     * extend the earlier note and discard the later note.
+     */
+    virtual void tieOverlappingNotes(bool considerInstrumentNumber = false);
+    /**
+     * Confirm pitches in this score to the closest pitch in the indicated 
+     * system of equal temperament.
+     */
+    virtual void temper(double tonesPerOctave = 12.0);
   };
 }
 #endif
diff --git a/frontends/CsoundAC/ScoreModel.cpp b/frontends/CsoundAC/ScoreModel.cpp
index 430cc19..b7b07fd 100644
--- a/frontends/CsoundAC/ScoreModel.cpp
+++ b/frontends/CsoundAC/ScoreModel.cpp
@@ -37,13 +37,14 @@ namespace csound
   {
   }
 
-  void ScoreModel::generate()
+  int ScoreModel::generate()
   {
     if (children.size()) {
       score.clear();
     }
     traverse(getLocalCoordinates(), score);
     System::message("Generated %d events.\n", score.size());
+    return 0;
   }
 
   void ScoreModel::clear()
diff --git a/frontends/CsoundAC/ScoreModel.hpp b/frontends/CsoundAC/ScoreModel.hpp
index d9c964d..f49e9e2 100644
--- a/frontends/CsoundAC/ScoreModel.hpp
+++ b/frontends/CsoundAC/ScoreModel.hpp
@@ -49,7 +49,7 @@ namespace csound {
  * with the coordinate system of its parent to derive a new local coordinate system,
  * which is applied to all child events.
  */
-class ScoreModel :
+class SILENCE_PUBLIC ScoreModel :
                         public Composition,
                         public Node {
 public:
@@ -60,7 +60,7 @@ public:
          * Generates a score based on a music graph defined
          * by the child nodes of this.
          */
-        virtual void generate();
+        virtual int generate();
         /**
          * Clears the score.
          */
diff --git a/frontends/CsoundAC/ScoreNode.cpp b/frontends/CsoundAC/ScoreNode.cpp
index 58d522c..45ef7c1 100644
--- a/frontends/CsoundAC/ScoreNode.cpp
+++ b/frontends/CsoundAC/ScoreNode.cpp
@@ -29,9 +29,9 @@ namespace csound
   {
   }
 
-  void ScoreNode::produceOrTransform(Score &score_, 
-                                     size_t beginAt, 
-                                     size_t endAt, 
+  void ScoreNode::produceOrTransform(Score &score_,
+                                     size_t beginAt,
+                                     size_t endAt,
                                      const ublas::matrix<double> &compositeCoordinates)
   {
     if(importFilename.length() > 0)
@@ -44,7 +44,7 @@ namespace csound
         const Event &event = *it;
         score_.push_back(event);
       }
-    // Apply the global transformation of coordinate system 
+    // Apply the global transformation of coordinate system
     // to all child events produced by this node.
     size_t finalEndAt = score_.size();
     for (size_t i = endAt; i < finalEndAt; i++) {
diff --git a/frontends/CsoundAC/ScoreNode.hpp b/frontends/CsoundAC/ScoreNode.hpp
index dc264ba..4f45684 100644
--- a/frontends/CsoundAC/ScoreNode.hpp
+++ b/frontends/CsoundAC/ScoreNode.hpp
@@ -39,7 +39,7 @@ namespace csound
    * Node class that produces events from the contained score,
    * which can be built up programmatically or imported from a standard MIDI file.
    */
-  class ScoreNode :
+  class SILENCE_PUBLIC ScoreNode :
     public Node
   {
   protected:
diff --git a/frontends/CsoundAC/Sequence.hpp b/frontends/CsoundAC/Sequence.hpp
index 459aae9..fc01bea 100644
--- a/frontends/CsoundAC/Sequence.hpp
+++ b/frontends/CsoundAC/Sequence.hpp
@@ -36,7 +36,7 @@ namespace csound
   /**
    * Node that creates a temporal sequence of child nodes.
    */
-  class Sequence :
+  class SILENCE_PUBLIC Sequence :
     public Node
   {
   public:
diff --git a/frontends/CsoundAC/Shell.hpp b/frontends/CsoundAC/Shell.hpp
index 7bdde47..6bf54c5 100644
--- a/frontends/CsoundAC/Shell.hpp
+++ b/frontends/CsoundAC/Shell.hpp
@@ -54,7 +54,7 @@ namespace csound
    * so if Python is not present, this module
    * will still link and load, but not function.
    */
-  class Shell
+  class SILENCE_PUBLIC Shell
   {
   protected:
     static void *pythonLibrary;
diff --git a/frontends/CsoundAC/Silence.hpp b/frontends/CsoundAC/Silence.hpp
index f40f779..9566bf3 100644
--- a/frontends/CsoundAC/Silence.hpp
+++ b/frontends/CsoundAC/Silence.hpp
@@ -21,20 +21,20 @@
 #define SILENCE_H
 
 /** \namespace csound
- * The csound namespace contains classes for doing algorithmic composition, 
- * and for rendering audio from algorithmically generated scores, 
- * especially using Csound. 
+ * The csound namespace contains classes for doing algorithmic composition,
+ * and for rendering audio from algorithmically generated scores,
+ * especially using Csound.
  *
  * There should be one header file for each class declared in CsoundAC,
  * and that header file should be #included in Silence.hpp.
- * 
+ *
  * SWIG is run on Silence.hpp to generate wrappers for all CsoundAC classes
  * in other languages, especially scripting languages such as Python,
  * Therefore, all framework headers must be included in this header,
  * and all framework headers must use #ifdef SWIG to declare
  * the module and make other SWIG declarations (see Node.h for an extensive example).
  * The order of declaration is important to SWIG!
- * 
+ *
  * It is also expected that doxygen will be used to generate documentation
  * from comments in the framework header files.
  */
@@ -87,4 +87,3 @@
 #include "ChordLindenmayer.hpp"
 
 #endif
-
diff --git a/frontends/CsoundAC/Soundfile.hpp b/frontends/CsoundAC/Soundfile.hpp
index 0e024a3..e960d94 100644
--- a/frontends/CsoundAC/Soundfile.hpp
+++ b/frontends/CsoundAC/Soundfile.hpp
@@ -83,7 +83,7 @@ namespace csound
    * See http://www.mega-nerd.com/libsndfile for more information
    * on the underlying libsndfile library.
    */
-  class Soundfile
+  class SILENCE_PUBLIC Soundfile
   {
     SNDFILE *sndfile;
     SF_INFO sf_info;
diff --git a/frontends/CsoundAC/StrangeAttractor.hpp b/frontends/CsoundAC/StrangeAttractor.hpp
index 3ea6301..8c37465 100644
--- a/frontends/CsoundAC/StrangeAttractor.hpp
+++ b/frontends/CsoundAC/StrangeAttractor.hpp
@@ -52,7 +52,7 @@ namespace csound
    * as the order of iteration, or as a dimension of the attractor.
    * See Julien C. Sprott's book "Strange Attractors".
    */
-  class StrangeAttractor :
+  class SILENCE_PUBLIC StrangeAttractor :
     public ScoreNode
   {
   protected:
diff --git a/frontends/CsoundAC/System.hpp b/frontends/CsoundAC/System.hpp
index c06f0b8..5352277 100644
--- a/frontends/CsoundAC/System.hpp
+++ b/frontends/CsoundAC/System.hpp
@@ -40,7 +40,7 @@
 
 namespace csound
 {
-  class Logger
+  class SILENCE_PUBLIC Logger
   {
   public:
     Logger();
@@ -53,7 +53,7 @@ namespace csound
   /**
    * Abstraction layer for a minimal set of system services.
    */
-  class System
+  class SILENCE_PUBLIC System
   {
     static void *userdata_;
     static int messageLevel;
diff --git a/frontends/CsoundAC/Voicelead.cpp b/frontends/CsoundAC/Voicelead.cpp
index 5399fd9..93e5507 100644
--- a/frontends/CsoundAC/Voicelead.cpp
+++ b/frontends/CsoundAC/Voicelead.cpp
@@ -299,7 +299,7 @@ namespace csound
       double pc_ = pc(chord[i]);
       if (std::find(uniquepcs.begin(), uniquepcs.end(), pc_) == uniquepcs.end()) {
         uniquepcs.push_back(pc_);
-      } 
+      }
     }
     sort(uniquepcs);
     return uniquepcs;
@@ -770,10 +770,10 @@ namespace csound
     return result;
   }
 
-  bool Voicelead::addOctave(const std::vector<double> 
-                            &lowestVoicing, 
-                            std::vector<double> &newVoicing, 
-                            size_t maximumPitch, 
+  bool Voicelead::addOctave(const std::vector<double>
+                            &lowestVoicing,
+                            std::vector<double> &newVoicing,
+                            size_t maximumPitch,
                             size_t divisionsPerOctave)
   {
     for (size_t voice = 0, voices = lowestVoicing.size(); voice < voices; voice++) {
diff --git a/frontends/CsoundAC/Voicelead.hpp b/frontends/CsoundAC/Voicelead.hpp
index 320c2b5..c67a042 100644
--- a/frontends/CsoundAC/Voicelead.hpp
+++ b/frontends/CsoundAC/Voicelead.hpp
@@ -46,7 +46,7 @@ namespace csound
    *
    * See: http://ruccas.org/pub/Gogins/music_atoms.pdf
    */
-  class Voicelead
+  class SILENCE_PUBLIC Voicelead
   {
   public:
     /**
@@ -434,19 +434,19 @@ namespace csound
     static std::vector<double> K(const std::vector<double> &c);
 
     /**
-     * Return whether chord Y is a transposed form of chord X; g is the generator of 
+     * Return whether chord Y is a transposed form of chord X; g is the generator of
      * transpositions.
      */
     static bool Tform(const std::vector<double> &X, const std::vector<double> &Y, double g=1.0);
 
     /**
-     * Return whether chord Y is an inverted form of chord X; g is the generator of 
+     * Return whether chord Y is an inverted form of chord X; g is the generator of
      * inversions.
      */
     static bool Iform(const std::vector<double> &X, const std::vector<double> &Y, double g=1.0);
 
     /**
-     * Contextually transpose chord c with respect to chord s by n semitones; g is the generator of 
+     * Contextually transpose chord c with respect to chord s by n semitones; g is the generator of
      * transpositions.
      */
     static std::vector<double> Q(const std::vector<double> &c, double n, const std::vector<double> &s, double g=1.0);
@@ -458,4 +458,3 @@ namespace csound
   };
 }
 #endif
-
diff --git a/frontends/CsoundAC/VoiceleadingNode.cpp b/frontends/CsoundAC/VoiceleadingNode.cpp
index e26500b..a2c2ad3 100644
--- a/frontends/CsoundAC/VoiceleadingNode.cpp
+++ b/frontends/CsoundAC/VoiceleadingNode.cpp
@@ -28,9 +28,9 @@
 
 namespace csound
 {
-  extern void printChord(std::ostream &stream, std::string label, const std::vector<double> &chord);
+  extern void SILENCE_PUBLIC printChord(std::ostream &stream, std::string label, const std::vector<double> &chord);
 
-  extern void printChord(std::string label, const std::vector<double> &chord);
+  extern void SILENCE_PUBLIC printChord(std::string label, const std::vector<double> &chord);
 
   /**
    * Utility class for storing voice-leading operations.
@@ -153,7 +153,7 @@ namespace csound
                    modality,
                    base,
                    range);
-      } else if ((operation.V != DBL_MAX) && (!operation.L)) {  
+      } else if ((operation.V != DBL_MAX) && (!operation.L)) {
         System::inform("Operation: QV\n");
         score.setQV(priorOperation.begin,
                     operation.begin,
@@ -394,13 +394,13 @@ namespace csound
     operations[time].avoidParallels = avoidParallels;
   }
 
-  void VoiceleadingNode::produceOrTransform(Score &score, 
-                                            size_t beginAt, 
-                                            size_t endAt, 
+  void VoiceleadingNode::produceOrTransform(Score &score,
+                                            size_t beginAt,
+                                            size_t endAt,
                                             const ublas::matrix<double> &compositeCoordinates)
   {
     transform(score, rescaleTimes);
-    // Apply the global transformation of coordinate system 
+    // Apply the global transformation of coordinate system
     // to all child events produced by this node.
     size_t finalEndAt = score.size();
     for (size_t i = endAt; i < finalEndAt; i++) {
@@ -428,7 +428,7 @@ namespace csound
       }
       ops.push_back(&it->second);
     }
-    
+
     if (rescaleTimes_) {
       if (operationMaxTime > 0.0) {
         timeScale = scoreMaxTime / operationMaxTime;
diff --git a/frontends/CsoundAC/VoiceleadingNode.hpp b/frontends/CsoundAC/VoiceleadingNode.hpp
index 48a1052..d734202 100644
--- a/frontends/CsoundAC/VoiceleadingNode.hpp
+++ b/frontends/CsoundAC/VoiceleadingNode.hpp
@@ -41,7 +41,7 @@ namespace csound
    * Utility class for storing voice-leading operations
    * within a VoiceleadNode for future application.
    */
-  class VoiceleadingOperation
+  class SILENCE_PUBLIC VoiceleadingOperation
   {
   public:
     VoiceleadingOperation();
@@ -106,7 +106,7 @@ namespace csound
     bool avoidParallels;
   };
 
-  std::ostream &operator << (std::ostream &stream, const VoiceleadingOperation &operation);
+  std::ostream SILENCE_PUBLIC &operator << (std::ostream &stream, const VoiceleadingOperation &operation);
 
   /**
    * This node class imposes
@@ -118,7 +118,7 @@ namespace csound
    * prime chord (P),
    * transpose (T),
    * unordered pitch-class set (C, equivalent to PT),
-   * contextual inversion (K), 
+   * contextual inversion (K),
    * contextual transposition (Q),
    * voicing (V) within a specified range of pitches,
    * and voice-lead (L).
@@ -138,7 +138,7 @@ namespace csound
    * The consistent combinations of operations are thus:
    * PT, PTV, PTL, C, CV, CL, K, KV, KL, Q, QV, QL, V, and L.
    */
-  class VoiceleadingNode :
+  class SILENCE_PUBLIC VoiceleadingNode :
     public Node
   {
   public:
@@ -234,7 +234,7 @@ namespace csound
      * or the end of the score, whichever comes first,
      * conform notes produced by this node or its children
      * to the specified prime chord and transposition.
-     * Note that C (equivalent to PT) specifies what musicians normally 
+     * Note that C (equivalent to PT) specifies what musicians normally
      * call a chord.
      */
     virtual void C(double time, double C_);
@@ -265,14 +265,14 @@ namespace csound
     virtual void CL(double time, std::string C_, bool avoidParallels = true);
     /**
      * Find the C of the previous segment, and contextually invert it; apply
-     * the resulting C to the current segment. Contextual inversion is 
+     * the resulting C to the current segment. Contextual inversion is
      * that inversion of C in which the first two pitch-classes are exchanged.
      */
     virtual void K(double time);
     /**
      * Find the C of the previous segment, and contextually invert it; apply
-     * the resulting C to the current segment with voicing V. Contextual 
-     * inversion is that inversion of C in which the first two pitch-classes 
+     * the resulting C to the current segment with voicing V. Contextual
+     * inversion is that inversion of C in which the first two pitch-classes
      * are exchanged.
      */
     virtual void KV(double time, double V_);
@@ -280,28 +280,28 @@ namespace csound
      * Find the C of the previous segment, and contextually invert it; apply
      * the resulting C to the current segment, using the closest voiceleading
      * from the pitches of the previous segment.
-     * Contextual inversion is that inversion of C in which the first two 
+     * Contextual inversion is that inversion of C in which the first two
      * pitch-classes are exchanged.
      */
     virtual void KL(double time, bool avoidParallels = true);
     /**
-     * Find the C of the previous segment, and contextually transpose it; 
-     * apply the resulting C to the current segment. Contextual transposition 
+     * Find the C of the previous segment, and contextually transpose it;
+     * apply the resulting C to the current segment. Contextual transposition
      * transposes C up by Q if C is an I-form, and down by Q if C is a T-form.
      */
     virtual void Q(double time, double Q_);
     /**
-     * Find the C of the previous segment, and contextually transpose it; 
-     * apply the resulting C to the current segment with voicing V. 
-     * Contextual transposition transposes C up by Q if C is an I-form, 
+     * Find the C of the previous segment, and contextually transpose it;
+     * apply the resulting C to the current segment with voicing V.
+     * Contextual transposition transposes C up by Q if C is an I-form,
      * and down by Q if C is a T-form.
      */
     virtual void QV(double time, double Q_, double V_);
     /**
-     * Find the C of the previous segment, and contextually transpose it; 
-     * apply the resulting C to the current segment, using the closest 
+     * Find the C of the previous segment, and contextually transpose it;
+     * apply the resulting C to the current segment, using the closest
      * voiceleading from the pitches of the previous segment.
-     * Contextual transposition transposes C up by Q if C is an I-form, 
+     * Contextual transposition transposes C up by Q if C is an I-form,
      * and down by Q if C is a T-form.
      */
     virtual void QL(double time, double Q_, bool avoidParallels = true);
@@ -320,7 +320,7 @@ namespace csound
      * to the beginning of the next operation
      * or the end of the score, whichever comes first,
      * conform notes produced by this node or its children
-     * to the smoothest voice-leading from the pitches 
+     * to the smoothest voice-leading from the pitches
      * of the previous segment.
      * Optionally, parallel fifths can be avoided.
      * Note that L specifies what musicians normally call
@@ -338,4 +338,3 @@ namespace csound
   };
 }
 #endif
-
diff --git a/frontends/CsoundAC/algrd_internal.h b/frontends/CsoundAC/algrd_internal.h
new file mode 100644
index 0000000..8b58872
--- /dev/null
+++ b/frontends/CsoundAC/algrd_internal.h
@@ -0,0 +1,5 @@
+/* algread_internal.h -- interface between allegro.cpp and allegrord.cpp */
+
+Alg_error alg_read(std::istream &file, Alg_seq_ptr new_seq, 
+                   double *offset_ptr = NULL);
+
diff --git a/frontends/CsoundAC/algsmfrd_internal.h b/frontends/CsoundAC/algsmfrd_internal.h
new file mode 100644
index 0000000..75cc009
--- /dev/null
+++ b/frontends/CsoundAC/algsmfrd_internal.h
@@ -0,0 +1,3 @@
+/* algsmfrd_internal.h -- interface from allegrosmfrd.cpp to allegro.cpp */
+
+Alg_error alg_smf_read(std::istream &file, Alg_seq_ptr new_seq);
diff --git a/frontends/CsoundAC/allegro.cpp b/frontends/CsoundAC/allegro.cpp
new file mode 100644
index 0000000..3c5a2a5
--- /dev/null
+++ b/frontends/CsoundAC/allegro.cpp
@@ -0,0 +1,3518 @@
+// Allegro: music representation system, with
+//      extensible in-memory sequence structure
+//      upward compatible with MIDI
+//      implementations in C++ and Serpent
+//      external, text-based representation
+//      compatible with Aura
+//
+/* CHANGE LOG:
+04 apr 03 -- fixed bug in add_track that caused infinite loop
+*/
+
+#include "assert.h"
+#include "stdlib.h"
+#include "stdio.h"
+#include "string.h"
+#include "memory.h"
+#include <iostream>
+#include <fstream>
+using namespace std;
+#include "allegro.h"
+#include "algrd_internal.h"
+#include "algsmfrd_internal.h"
+// #include "trace.h" -- only needed for debugging
+#include "math.h"
+
+#define STREQL(x, y) (strcmp(x, y) == 0)
+#define MAX(x, y) ((x) > (y) ? (x) : (y))
+#define ROUND(x) ((int) ((x) + 0.5))
+
+// 4311 is type cast ponter to long warning
+// 4996 is warning against strcpy
+// 4267 is size_t to long warning
+#pragma warning(disable: 4311 4996 4267)
+Alg_atoms symbol_table;
+Serial_read_buffer Alg_track::ser_read_buf; // declare the static variables
+Serial_write_buffer Alg_track::ser_write_buf; 
+
+bool within(double d1, double d2, double epsilon)
+{
+    d1 -= d2;
+    return d1 < epsilon && d1 > -epsilon;
+}
+
+
+char *heapify(const char *s)
+{
+    char *h = new char[strlen(s) + 1];
+    strcpy(h, s);
+    return h;
+}
+
+
+void Alg_atoms::expand()
+{
+    maxlen = (maxlen + 5);   // extra growth for small sizes
+    maxlen += (maxlen >> 2); // add 25%
+    Alg_attribute *new_atoms = new Alg_attribute[maxlen];
+    // now do copy
+    memcpy(new_atoms, atoms, len * sizeof(Alg_attribute));
+    if (atoms) delete[] atoms;
+    atoms = new_atoms;
+}
+
+
+// insert_new -- insert an attribute name and type
+//
+// attributes are stored as a string consisting of the type
+// (a char) followed by the attribute name. This makes it
+// easy to retrieve the type or the name or both.
+//
+Alg_attribute Alg_atoms::insert_new(const char *name, char attr_type)
+{
+    if (len == maxlen) expand();
+    char *h = new char[strlen(name) + 2];
+    strcpy(h + 1, name);
+    *h = attr_type;
+    atoms[len++] = h;
+    return h;
+}
+
+
+Alg_attribute Alg_atoms::insert_attribute(Alg_attribute attr)
+{
+    // should use hash algorithm
+    for (int i = 0; i < len; i++) {
+        if (STREQL(attr, atoms[i])) {
+            return atoms[i];
+        }
+    }
+    return insert_new(attr + 1, attr[0]);
+}
+
+
+Alg_attribute Alg_atoms::insert_string(const char *name)
+{
+    char attr_type = name[strlen(name) - 1];
+    for (int i = 0; i < len; i++) {
+        if (attr_type == atoms[i][0] &&
+            STREQL(name, atoms[i] + 1)) {
+            return atoms[i];
+        }
+    }
+    return insert_new(name, attr_type);
+}
+
+
+void Alg_parameter::copy(Alg_parameter_ptr parm)
+{
+    *this = *parm; // copy all fields
+    // if the value is a string, copy the string
+    if (attr_type() == 's') {
+        s = heapify(s);
+    }
+}
+
+
+void Alg_parameter::show()
+{
+    switch (attr[0]) {
+    case 'r':
+        printf("%s:%g", attr_name(), r);
+        break;
+    case 's':
+        printf("%s:%s", attr_name(), s);
+        break;
+    case 'i':
+        printf("%s:%ld", attr_name(), i);
+        break;
+    case 'l':
+        printf("%s:%s", attr_name(), (l ? "t" : "f"));
+        break;
+    case 'a':
+        printf("%s:%s", attr_name(), a);
+        break;
+    }
+}
+
+
+Alg_parameter::~Alg_parameter()
+{
+    if (attr_type() == 's' && s) {
+        delete[] s;
+    }
+}
+
+
+void Alg_parameters::insert_real(Alg_parameters **list, const char *name, 
+                                 double r)
+{
+    Alg_parameters_ptr a = new Alg_parameters(*list);
+    *list = a;
+    a->parm.set_attr(symbol_table.insert_string(name));
+    a->parm.r = r;
+    assert(a->parm.attr_type() == 'r');
+}
+
+
+void Alg_parameters::insert_string(Alg_parameters **list, const char *name, 
+                                   const char *s)
+{
+    Alg_parameters_ptr a = new Alg_parameters(*list);
+    *list = a;
+    a->parm.set_attr(symbol_table.insert_string(name));
+    // string is deleted when parameter is deleted
+    a->parm.s = heapify(s);
+    assert(a->parm.attr_type() == 's');
+}
+
+
+void Alg_parameters::insert_integer(Alg_parameters **list, const char *name, 
+                                    long i)
+{
+    Alg_parameters_ptr a = new Alg_parameters(*list);
+    *list = a;
+    a->parm.set_attr(symbol_table.insert_string(name));
+    a->parm.i = i;
+    assert(a->parm.attr_type() == 'i');
+}
+
+
+void Alg_parameters::insert_logical(Alg_parameters **list, const char *name, 
+                                    bool l)
+{
+    Alg_parameters_ptr a = new Alg_parameters(*list);
+    *list = a;
+    a->parm.set_attr(symbol_table.insert_string(name));
+    a->parm.l = l;
+    assert(a->parm.attr_type() == 'l');
+}
+
+
+void Alg_parameters::insert_atom(Alg_parameters **list, const char *name, 
+                                 const char *s)
+{
+    Alg_parameters_ptr a = new Alg_parameters(*list);
+    *list = a;
+    a->parm.set_attr(symbol_table.insert_string(name));
+    a->parm.a = symbol_table.insert_string(s);
+    assert(a->parm.attr_type() == 'a');
+}
+
+
+Alg_parameters *Alg_parameters::remove_key(Alg_parameters **list, 
+                                           const char *name)
+{
+    while (*list) {
+        if (STREQL((*list)->parm.attr_name(), name)) {
+            Alg_parameters_ptr p = *list;
+            *list = p->next;
+            p->next = NULL;
+            return p; // caller should free this pointer
+        }
+        list = &((*list)->next);
+    }
+    return NULL;
+}
+
+
+Alg_parameter_ptr Alg_parameters::find(Alg_attribute attr)
+{
+    assert(attr);
+    Alg_parameters_ptr temp = this;
+    while (temp) {
+        if (temp->parm.attr == attr) {
+            return &(temp->parm);
+        }
+    }
+    return NULL;
+}
+
+
+int Alg_event::get_type_code()
+{
+    if (!is_note()) {
+        const char* attr = get_attribute();
+        if (STREQL(attr, "gater"))         // volume change
+            return ALG_GATE;
+        if (STREQL(attr, "bendr"))         // pitch bend     
+            return ALG_BEND;
+        if (strncmp(attr, "control", 7) == 0)      // control change
+            // note that midi control changes have attributes of the form
+            // "control<n>" where n is the decimal number (as a character string)
+            // of the midi controller, e.g. control2 is the breath controller.
+            // We don't check for decimal numbers in the range 0-127, so any
+            // attribute that begins with "control" is an ALG_CONTROL:
+            return ALG_CONTROL;
+        if (STREQL(attr, "programi"))      // program change
+            return ALG_PROGRAM;
+        if (STREQL(attr, "pressurer"))    // pressure change
+            return ALG_PRESSURE;
+        if (STREQL(attr, "keysigi"))       // key signature  
+            return ALG_KEYSIG;
+        if (STREQL(attr, "timesig_numi"))  // time signature numerator
+            return ALG_TIMESIG_NUM;
+        if (STREQL(attr, "timesig_deni"))  // time signature denominator
+            return ALG_TIMESIG_DEN;
+        return ALG_OTHER;
+    }
+    return ALG_NOTE; // it is a note
+}
+
+
+void Alg_event::set_parameter(Alg_parameter_ptr new_parameter)
+{
+    Alg_parameter_ptr parm;
+    if (is_note()) {
+        Alg_note_ptr note = (Alg_note_ptr) this;
+        parm = note->parameters->find(new_parameter->attr);
+        if (!parm) {
+            note->parameters = new Alg_parameters(note->parameters);
+            parm = &(note->parameters->parm);
+        }
+    } else { // update
+        Alg_update_ptr update = (Alg_update_ptr) this;
+        parm = &(update->parameter);
+    }
+    parm->copy(new_parameter); // copy entire parameter
+}
+
+
+void Alg_event::set_string_value(const char *a, const char *value)
+{
+    assert(a); // must be non-null
+    Alg_attribute attr = symbol_table.insert_string(a);
+    assert(attr[0] == 's');
+    Alg_parameter parm;
+    parm.set_attr(attr);
+    parm.s = value;
+    set_parameter(&parm);
+    parm.s = NULL; // do this to prevent string from being freed
+}
+
+
+void Alg_event::set_real_value(const char *a, double value)
+{
+    assert(a); // must be non-null
+    // attr is like a, but it has the type code prefixed for
+    // fast lookup, and it is a unique string in symbol_table
+    // e.g. a="attackr" -> attr="rattackr"
+    Alg_attribute attr = symbol_table.insert_string(a);
+    assert(attr[0] == 'r');
+    Alg_parameter parm;
+    parm.set_attr(attr);
+    parm.r = value;
+    set_parameter(&parm);
+    // since type is 'r' we don't have to NULL the string
+}
+
+
+void Alg_event::set_logical_value(const char *a, bool value)
+{
+    assert(a); // must be non-null
+    Alg_attribute attr = symbol_table.insert_string(a);
+    assert(attr[0] == 'l');
+    Alg_parameter parm;
+    parm.set_attr(attr);
+    parm.l = value;
+    set_parameter(&parm);
+    // since type is 'l' we don't have to NULL the string
+}
+
+
+void Alg_event::set_integer_value(const char *a, long value)
+{
+    assert(a); // must be non-null
+    Alg_attribute attr = symbol_table.insert_string(a);
+    assert(attr[0] == 'i');
+    Alg_parameter parm;
+    parm.set_attr(attr);
+    parm.i = value;
+    set_parameter(&parm);
+    // since tpye is 'i' we don't have to NULL the string
+}
+
+
+void Alg_event::set_atom_value(const char *a, const char *value)
+{
+    assert(a); // must be non-null
+    Alg_attribute attr = symbol_table.insert_string(a);
+    assert(attr[0] == 'a');
+    Alg_parameter parm;
+    parm.set_attr(attr);
+    parm.a = value;
+    set_parameter(&parm);
+    /* since type is 'a' we don't have to null the string */
+}
+
+
+float Alg_event::get_pitch()
+{
+    assert(is_note());
+    Alg_note* note = (Alg_note *) this;
+    return note->pitch;
+}
+
+
+float Alg_event::get_loud()
+{
+    assert(is_note());
+    Alg_note* note = (Alg_note *) this;
+    return note->loud;
+}
+
+
+double Alg_event::get_start_time()
+{
+    assert(is_note());
+    Alg_note* note = (Alg_note *) this;
+    return note->time;
+}
+
+
+double Alg_event::get_end_time()
+{
+    assert(is_note());
+    Alg_note* note = (Alg_note *) this;
+    return note->time + note->dur;
+}
+
+
+double Alg_event::get_duration()
+{
+    assert(is_note());
+    Alg_note* note = (Alg_note *) this;
+    return note->dur;
+}
+
+
+void Alg_event::set_pitch(float p)
+{
+    assert(is_note());
+    Alg_note* note = (Alg_note *) this;
+    note->pitch = p;
+}
+
+void Alg_event::set_loud(float l)
+{
+    assert(is_note());
+    Alg_note *note = (Alg_note *) this;
+    note->loud = l;
+}
+
+
+void Alg_event::set_duration(double d)
+{
+    assert(is_note());
+    Alg_note* note = (Alg_note *) this;
+    note->dur = d;
+}
+
+
+bool Alg_event::has_attribute(const char *a)
+{
+    assert(is_note());
+    assert(a); // must be non-null
+    Alg_note* note = (Alg_note *) this;
+    Alg_attribute attr = symbol_table.insert_string(a);
+    Alg_parameter_ptr parm = note->parameters->find(attr);
+    return parm != NULL;
+}
+
+
+char Alg_event::get_attribute_type(const char *a)
+{
+    assert(is_note());
+    assert(a);
+    return a[strlen(a) - 1];
+}
+
+
+const char *Alg_event::get_string_value(const char *a, const char *value)
+{
+    assert(is_note());
+    assert(a); // must be non-null
+    Alg_note* note = (Alg_note *) this;
+    Alg_attribute attr = symbol_table.insert_string(a);
+    assert(a[0] == 's'); // must be of type string
+    Alg_parameter_ptr parm = note->parameters->find(attr);
+    if (parm) return parm->s;
+    return value;
+}
+
+
+double Alg_event::get_real_value(const char *a, double value)
+{	
+    assert(is_note());
+    assert(a);
+    Alg_note* note = (Alg_note *) this;
+    Alg_attribute attr = symbol_table.insert_string(a);
+    assert(a[0] == 'r'); // must be of type real
+    Alg_parameter_ptr parm = note->parameters->find(attr);
+    if (parm) return parm->r;
+    return value;
+}
+
+
+bool Alg_event::get_logical_value(const char *a, bool value)
+{	
+    assert(is_note());
+    assert(a);
+    Alg_note* note = (Alg_note *) this;
+    Alg_attribute attr = symbol_table.insert_string(a);
+    assert(a[0] == 'l'); // must be of type logical
+    Alg_parameter_ptr parm = note->parameters->find(attr);
+    if (parm) return parm->l;
+    return value;
+}
+
+
+long Alg_event::get_integer_value(const char *a, long value)
+{	
+    assert(is_note());
+    assert(a);
+    Alg_note* note = (Alg_note *) this;
+    Alg_attribute attr = symbol_table.insert_string(a);
+    assert(a[0] == 'i'); // must be of type integer
+    Alg_parameter_ptr parm = note->parameters->find(attr);
+    if (parm) return parm->i;
+    return value;
+}
+
+
+const char *Alg_event::get_atom_value(const char *a, const char *value)
+{	
+    assert(is_note());
+    assert(a);
+    Alg_note* note = (Alg_note *) this;
+    Alg_attribute attr = symbol_table.insert_string(a);
+    assert(a[0] == 'a'); // must be of type atom
+    Alg_parameter_ptr parm = note->parameters->find(attr);
+    if (parm) return parm->a;
+    // if default is a string, convert to an atom (unique
+    // string in symbol table) and return it
+    return (value == NULL ? NULL :
+              symbol_table.insert_string(value));
+}
+
+
+void Alg_event::delete_attribute(const char *a)
+{
+    assert(is_note());
+    Alg_note* note = (Alg_note *) this;
+    Alg_parameters::remove_key(&(note->parameters), a);
+}
+
+
+const char *Alg_event::get_attribute()
+// Note: this returns a string, not an Alg_attribute
+{
+    assert(is_update());
+    Alg_update* update = (Alg_update *) this;
+    return update->parameter.attr_name();
+}
+
+
+char Alg_event::get_update_type()
+{
+    assert(is_update());
+    Alg_update* update = (Alg_update *) this;
+    return update->parameter.attr_type();
+}
+
+
+const char *Alg_event::get_string_value()
+{
+    assert(is_update());
+    Alg_update* update = (Alg_update *) this;
+    assert(get_update_type() == 's');
+    return update->parameter.s;
+}
+
+
+double Alg_event::get_real_value()
+{
+    assert(is_update());
+    Alg_update* update = (Alg_update *) this;
+    assert(get_update_type() == 'r');
+    return update->parameter.r;
+}
+
+
+bool Alg_event::get_logical_value()
+{
+    assert(is_update());
+    Alg_update* update = (Alg_update *) this;
+    assert(get_update_type() == 'l');
+    return update->parameter.l;
+}
+
+
+long Alg_event::get_integer_value()
+{
+    assert(is_update());
+    Alg_update* update = (Alg_update *) this;
+    assert(get_update_type() == 'i');
+    return update->parameter.i;
+}
+
+
+const char *Alg_event::get_atom_value()
+{
+    assert(is_update());
+    Alg_update* update = (Alg_update *) this;
+    assert(get_update_type() == 'a');
+    return update->parameter.a;
+}
+
+
+bool Alg_event::overlap(double t, double len, bool all)
+{
+    // event starts within region
+    if (time >= t && time <= t + len - ALG_EPS)
+        return true;
+    if (all && is_note()) {
+        double dur = ((Alg_note_ptr) this)->dur;
+        // note overlaps with region
+        if (time < t && time + dur - ALG_EPS > t)
+            return true;
+    }
+    // does not overlap
+    return false;
+}
+
+
+Alg_note::Alg_note(Alg_note_ptr note)
+{
+    *this = *note; // copy all fields
+    // parameters is now a shared pointer. We need to copy the 
+    // parameters
+    Alg_parameters_ptr next_param_ptr = parameters;
+    while (next_param_ptr) {
+        Alg_parameters_ptr new_params = new Alg_parameters(next_param_ptr->next);
+        new_params->parm.copy(&(next_param_ptr->parm)); // copy the attribute and value
+        next_param_ptr = new_params->next;
+    }
+}
+
+
+Alg_note::~Alg_note()
+{
+    while (parameters) {
+        Alg_parameters_ptr to_delete = parameters;
+        parameters = parameters->next;
+        delete to_delete;
+    }
+}
+
+
+void Alg_note::show()
+{
+    printf("Alg_note: time %g, chan %ld, dur %g, key %ld, "
+           "pitch %g, loud %g, attributes ",
+           time, chan, dur, key, pitch, loud);
+    Alg_parameters_ptr parms = parameters;
+    while (parms) {
+        parms->parm.show();
+        printf(" ");
+        parms = parms->next;
+    }
+    printf("\n");
+}
+
+
+Alg_update::Alg_update(Alg_update_ptr update)
+{
+    *this = *update; // copy all fields
+    // parameter requires careful copy to possibly duplicate string value:
+    this->parameter.copy(&(update->parameter));
+}
+
+
+void Alg_update::show()
+{
+    printf("Alg_update: ");
+    parameter.show();
+    printf("\n");
+}
+
+
+void Alg_events::expand()
+{
+    maxlen = (maxlen + 5);   // extra growth for small sizes
+    maxlen += (maxlen >> 2); // add 25%
+    Alg_event_ptr *new_events = new Alg_event_ptr[maxlen];
+    // now do copy
+    memcpy(new_events, events, len * sizeof(Alg_event_ptr));
+    if (events) delete[] events;
+    events = new_events;
+}
+
+
+void Alg_events::insert(Alg_event_ptr event)
+{
+    if (maxlen <= len) {
+        expand();
+    }
+    // Note: if the new event is the last one, the assignment
+    // events[i] = event; (below) will never execute, so just
+    // in case, we do the assignment here. events[len] will
+    // be replaced during the memmove() operation below if
+    // this is not the last event.
+    events[len] = event;
+    len++;
+    // find insertion point: (this could be a binary search)
+    for (int i = 0; i < len; i++) {
+        if (events[i]->time > event->time) {
+            // insert event at i
+            memmove(&events[i + 1], &events[i], 
+                    sizeof(Alg_event_ptr) * (len - i - 1));
+            events[i] = event;
+            return;
+        }
+    }
+}
+
+Alg_event_ptr Alg_events::uninsert(long index)
+{
+    assert(0 <= index && index < len);
+    Alg_event_ptr event = events[index];
+    //printf("memmove: %x from %x (%d)\n", events + index, events + index + 1,
+    //        sizeof(Alg_event_ptr) * (len - index - 1));
+    memmove(events + index, events + index + 1,
+            sizeof(Alg_event_ptr) * (len - index - 1));
+    len--;
+    return event;
+}
+
+
+void Alg_events::append(Alg_event_ptr event)
+{
+    if (maxlen <= len) {
+        expand();
+    }
+    events[len++] = event;
+    // keep track of last note_off time
+    if (event->is_note()) {
+        Alg_note_ptr note = (Alg_note_ptr) event;
+        double note_off = note->time + note->dur;
+        if (note_off > last_note_off)
+            last_note_off = note_off;
+    }
+}
+
+
+Alg_events::~Alg_events()
+{
+    assert(!in_use);
+    // individual events are not deleted, only the array
+    if (events) {
+        delete[] events;
+    }
+}
+
+
+Alg_event_list::Alg_event_list(Alg_track *owner)
+{
+        events_owner = owner;
+        sequence_number = owner->sequence_number; 
+        beat_dur = 0.0; real_dur = 0.0; type = 'e';
+}
+
+
+Alg_event_ptr &Alg_event_list::operator [](int i) 
+{
+    assert(i >= 0 && i < len);
+    return events[i];
+}
+
+
+Alg_event_list::~Alg_event_list()
+{
+    // note that the events contained in the list are not destroyed
+}
+
+
+void Alg_event_list::set_start_time(Alg_event *event, double t)
+{
+    // For Alg_event_list, find the owner and do the update there
+    // For Alg_track, change the time and move the event to the right place
+    // For Alg_seq, find the track and do the update there
+    
+    long index, i;
+    Alg_track_ptr track_ptr;
+    if (type == 'e') { // this is an Alg_event_list
+        // make sure the owner has not changed its event set
+        assert(events_owner && 
+               sequence_number == events_owner->sequence_number);
+        // do the update on the owner
+        events_owner->set_start_time(event, t);
+        return;
+    } else if (type == 't') { // this is an Alg_track
+        // find the event in the track
+        track_ptr = (Alg_track_ptr) this;
+        // this should be a binary search since events are in time order
+        // probably there should be member function to do the search
+        for (index = 0; index < length(); index++) {
+            if ((*track_ptr)[index] == event) goto found_event;
+        }
+    } else { // type == 's', an Alg_seq
+        Alg_seq_ptr seq = (Alg_seq_ptr) this;
+        for (i = 0; i < seq->tracks(); i++) {
+            track_ptr = seq->track(i);
+            // if you implemented binary search, you could call it
+            // instead of this loop too.
+            for (index = 0; index < track_ptr->length(); index++) {
+                if ((*track_ptr)[index] == event) goto found_event;
+            }
+        }
+    }
+    assert(false); // event not found seq or track!
+  found_event:
+    // at this point, track[index] == event
+    // we could be clever and figure out exactly what notes to move
+    // but it is simpler to just remove the event and reinsert it:
+    track_ptr->uninsert(index);
+    event->time = t;
+    track_ptr->insert(event);
+}
+
+
+void Alg_beats::expand()
+{
+    maxlen = (maxlen + 5);   // extra growth for small sizes
+    maxlen += (maxlen >> 2); // add 25%
+    Alg_beat_ptr new_beats = new Alg_beat[maxlen];
+    // now do copy
+    memcpy(new_beats, beats, len * sizeof(Alg_beat));
+    if (beats) delete[] beats;
+    beats = new_beats;
+}
+
+
+void Alg_beats::insert(long i, Alg_beat_ptr beat)
+{
+    assert(i >= 0 && i <= len);
+    if (maxlen <= len) {
+        expand();
+    }
+    memmove(&beats[i + 1], &beats[i], sizeof(Alg_beat) * (len - i));
+    memcpy(&beats[i], beat, sizeof(Alg_beat));
+    len++;
+}
+
+
+Alg_time_map::Alg_time_map(Alg_time_map *map)
+{
+    refcount = 0;
+    assert(map->beats[0].beat == 0 && map->beats[0].time == 0);
+    assert(map->beats.len > 0);
+    // new_beats[0] = map->beats[0]; 
+       // this is commented because
+       // both new_beats[0] and map->beats[0] should be (0, 0)
+    for (int i = 1; i < map->beats.len; i++) {
+        beats.insert(i, &map->beats[i]);
+    }
+    last_tempo = map->last_tempo;
+    last_tempo_flag = map->last_tempo_flag;
+}
+
+
+void Alg_time_map::show()
+{
+    printf("Alg_time_map: ");
+    for (int i = 0; i < beats.len; i++) {
+        Alg_beat &b = beats[i];
+        printf("(%g, %g) ", b.time, b.beat);
+    }
+    printf("last tempo: %g\n", last_tempo);
+}
+
+
+long Alg_time_map::locate_time(double time)
+{
+    int i = 0;
+    while ((i < beats.len) && (time > beats[i].time)) {
+        i++;
+    }
+    return i;
+}
+
+
+long Alg_time_map::locate_beat(double beat)
+{
+    int i = 0;
+    while ((i < beats.len) && (beat > beats[i].beat)) {
+        i++;
+    }
+    return i;
+}
+
+
+double Alg_time_map::beat_to_time(double beat)
+{
+    Alg_beat_ptr mbi;
+    Alg_beat_ptr mbi1;
+    if (beat <= 0) {
+        return beat;
+    }
+    int i = locate_beat(beat);
+    // case 1: beat is between two time/beat pairs
+    if (0 < i && i < beats.len) {
+        mbi = &beats[i - 1];
+        mbi1 = &beats[i];
+    // case 2: beat is beyond last time/beat pair
+    } else if (i == beats.len) {
+        if (last_tempo_flag) {
+            return beats[i - 1].time + 
+                   (beat - beats[i - 1].beat) / last_tempo;
+        } else if (i == 1) {
+            return beat * 60.0 / ALG_DEFAULT_BPM;
+                // so we use that as default allegro tempo too
+        } else {
+            mbi = &beats[i - 2];
+            mbi1 = &beats[i - 1];
+        }
+    // case 3: beat is at time 0
+    } else /* if (i == 0) */ {
+        return beats[0].time;
+    }
+    // whether we extrapolate or interpolate, the math is the same
+    double time_dif = mbi1->time - mbi->time;
+    double beat_dif = mbi1->beat - mbi->beat;
+    return mbi->time + (beat - mbi->beat) * time_dif / beat_dif;
+}
+
+
+double Alg_time_map::time_to_beat(double time)
+{
+    Alg_beat_ptr mbi;
+    Alg_beat_ptr mbi1;
+    if (time <= 0.0) return time;
+    int i = locate_time(time);
+    if (i == beats.len) {
+        if (last_tempo_flag) {
+            return beats[i - 1].beat + 
+                   (time - beats[i - 1].time) * last_tempo;
+        } else if (i == 1) {
+            return time * (ALG_DEFAULT_BPM / 60.0);
+        } else {
+            mbi = &beats[i - 2];
+            mbi1 = &beats[i - 1];
+        }
+    } else {
+        mbi = &beats[i - 1];
+        mbi1 = & beats[i];
+    }
+    double time_dif = mbi1->time - mbi->time;
+    double beat_dif = mbi1->beat - mbi->beat;
+    return mbi->beat + (time - mbi->time) * beat_dif / time_dif;
+}
+
+
+void Alg_time_map::insert_beat(double time, double beat)
+{
+    int i = locate_time(time); // i is insertion point
+    if (i < beats.len && within(beats[i].time, time, 0.000001)) {
+        // replace beat if time is already in the map
+        beats[i].beat = beat;
+    } else {
+        Alg_beat point;
+        point.beat = beat;
+        point.time = time;
+        beats.insert(i, &point);
+    }
+    // beats[i] contains new beat
+    // make sure we didn't generate a zero tempo.
+    // if so, space beats by one microbeat as necessary
+    long j = i;
+    if (j == 0) j = 1; // do not adjust beats[0]
+    while (j < beats.len &&
+        beats[j - 1].beat + 0.000001 >= beats[j].beat) {
+        beats[j].beat = beats[j - 1].beat + 0.000001;
+        j++;
+    }
+}
+
+
+bool Alg_time_map::insert_tempo(double tempo, double beat)
+{
+    tempo = tempo / 60.0; // convert to beats per second
+    // change the tempo at the given beat until the next beat event
+    if (beat < 0) return false;
+    double time = beat_to_time(beat);
+    long i = locate_time(time);
+    if (i >= beats.len || !within(beats[i].time, time, 0.000001)) {
+        insert_beat(time, beat);
+    }
+    // now i is index of beat where tempo will change
+    if (i == beats.len - 1) {
+        last_tempo = tempo;
+        // printf("last_tempo to %g\n", last_tempo);
+        last_tempo_flag = true;
+    } else { // adjust all future beats
+        // compute the difference in beats
+        double diff = beats[i + 1].beat - beats[i].beat;
+        // convert beat difference to seconds at new tempo
+        diff = diff / tempo;
+        // figure out old time difference:
+        double old_diff = beats[i + 1].time - time;
+        // compute difference too
+        diff = diff - old_diff;
+        // apply new_diff to score and beats
+        i++;
+        while (i < beats.len) {
+            beats[i].time = beats[i].time + diff;
+            i++;
+        }
+    }
+    return true;
+}
+
+
+double Alg_time_map::get_tempo(double beat)
+{
+    Alg_beat_ptr mbi;
+    Alg_beat_ptr mbi1;
+    // if beat < 0, there is probably an error; return something nice anyway
+    if (beat < 0) return ALG_DEFAULT_BPM / 60.0;
+    long i = locate_beat(beat);
+    // this code is similar to beat_to_time() so far, but we want to get
+    // beyond beat if possible because we want the tempo FOLLOWING beat
+    // (Consider the case beat == 0.0)
+    if (i < beats.len && beat >= beats[i].beat) i++;
+    // case 1: beat is between two time/beat pairs
+    if (i < beats.len) {
+        mbi = &beats[i - 1];
+        mbi1 = &beats[i];
+    // case 2: beat is beyond last time/beat pair
+    } else /* if (i == beats.len) */ {
+        if (last_tempo_flag) {
+            return last_tempo;
+        } else if (i == 1) {
+            return ALG_DEFAULT_BPM / 60.0;
+        } else {
+            mbi = &beats[i - 2];
+            mbi1 = &beats[i - 1];
+        }
+    }
+    double time_dif = mbi1->time - mbi->time;
+    double beat_dif = mbi1->beat - mbi->beat;
+    return beat_dif / time_dif;
+}
+
+
+bool Alg_time_map::set_tempo(double tempo, double start_beat, double end_beat)
+{
+    if (start_beat >= end_beat) return false;
+    // algorithm: insert a beat event if necessary at start_beat
+    // and at end_beat
+    // delete intervening map elements
+    // change the tempo
+    insert_beat(beat_to_time(start_beat), start_beat);
+    insert_beat(beat_to_time(end_beat), end_beat);
+    long start_x = locate_beat(start_beat) + 1;
+    long stop_x = locate_beat(end_beat);
+    while (stop_x < beats.len) {
+        beats[start_x] = beats[stop_x];
+        start_x++;
+        stop_x++;
+    }
+    beats.len = start_x; // truncate the map to new length
+    return insert_tempo(tempo, start_beat);
+}
+
+
+bool Alg_time_map::stretch_region(double b0, double b1, double dur)
+{
+    // find current duration
+    double t0 = beat_to_time(b0);
+    double t1 = beat_to_time(b1);
+    double old_dur = t1 - t0;
+    if (old_dur <= 0 || dur <= 0) return false;
+    double scale = dur / old_dur; // larger scale => slower
+    // insert a beat if necessary at b0 and b1
+    insert_beat(t0, b0);
+    insert_beat(t1, b1);
+    long start_x = locate_beat(b0);
+    long stop_x = locate_beat(b1);
+    double orig_time = beats[start_x].time;
+    double prev_time = orig_time;
+    for (int i = start_x + 1; i < beats.len; i++) {
+        double delta = beats[i].time - orig_time;
+        if (i <= stop_x) { // change tempo to next Alg_beat
+            delta *= scale;
+        }
+        orig_time = beats[i].time;
+        prev_time += delta;
+        beats[i].time = prev_time;
+    }
+    return true;
+}
+
+
+void Alg_time_map::trim(double start, double end, bool units_are_seconds)
+{
+    // extract the time map from start to end and shift to time zero
+    // start and end are time in seconds if units_are_seconds is true
+    int i = 0; // index into beats
+    int start_index; // index of first breakpoint after start
+    int count = 1;
+    double initial_beat = start;
+    double final_beat = end;
+    if (units_are_seconds) {
+        initial_beat = time_to_beat(start);
+        final_beat = time_to_beat(end);
+    } else {
+        start = beat_to_time(initial_beat);
+        end = beat_to_time(final_beat);
+    }
+    while (i < length() && beats[i].time < start) i++;
+    // now i is index into beats of the first breakpoint after start
+    // beats[0] is (0,0) and remains that way
+    // copy beats[start_index] to beats[1], etc.
+    // skip any beats at or near (start,initial_beat), using count
+    // to keep track of how many entries there are
+    start_index = i;
+    while (i < length() && beats[i].time < end) {
+        if (beats[i].time - start > ALG_EPS &&
+            beats[i].beat - initial_beat > ALG_EPS) {
+            beats[i].time = beats[i].time - start;
+            beats[i].beat = beats[i].beat - initial_beat;
+            beats[i - start_index + 1] = beats[i];
+            count = count + 1;
+        } else {
+            start_index = start_index + 1;
+        }
+        i = i + 1;
+    }
+    // set last tempo data
+    // we last examined beats[i-1] and copied it to
+    //   beats[i - start_index]. Next tempo should come
+    //   from beats[i] and store in beats[i - start_index + 1]
+    // case 1: there is at least one breakpoint beyond end
+    //         => interpolate to put a breakpoint at end
+    // case 2: no more breakpoints => set last tempo data
+    if (i < length()) {
+        // we know beats[i].time >= end, so case 1 applies
+        beats[i - start_index + 1].time = end - start;
+        beats[i - start_index + 1].beat = final_beat - initial_beat;
+        count = count + 1;
+    }
+    // else we'll just use stored last tempo (if any)
+    beats.len = count;
+}
+
+
+void Alg_time_map::cut(double start, double len, bool units_are_seconds)
+{
+    // remove portion of time map from start to start + len, 
+    // shifting the tail left by len. start and len are in whatever
+    // units the score is in. If you cut the time_map as well as cut 
+    // the tracks of the sequence, then sequences will preserve the
+    // association between tempo changes and events
+    double end = start + len;
+    double initial_beat = start;
+    double final_beat = end;
+    int i = 0;
+
+    if (units_are_seconds) {
+        initial_beat = time_to_beat(start);
+        final_beat = time_to_beat(end);
+    } else {
+        start = beat_to_time(initial_beat);
+        end = beat_to_time(final_beat);
+        len = end - start;
+    }
+    double beat_len = final_beat - initial_beat;
+
+    while (i < length() && beats[i].time < start - ALG_EPS) {
+        i = i + 1;
+    }
+
+    // if no beats exist at or after start, just return; nothing to cut
+    if (i == length()) return;
+
+    // now i is index into beats of the first breakpoint on or 
+    // after start, insert (start, initial_beat) in map
+    if (i < length() && within(beats[i].time, start, ALG_EPS)) {
+        // perterb time map slightly (within alg_eps) to place
+        // break point exactly at the start time
+        beats[i].time = start;
+        beats[i].beat = initial_beat;
+    } else {
+        Alg_beat point(start, initial_beat);
+        beats.insert(i, &point);
+    }
+    // now, we're correct up to beats[i] and beats[i] happens at start.
+    // find first beat after end so we can start shifting from there
+    i = i + 1;
+    int start_index = i;
+    while (i < length() && beats[i].time < end + ALG_EPS) i++;
+    // now beats[i] is the next point to be included in beats
+    // but from i onward, we must shift by (-len, -beat_len)
+    while (i < length()) {
+        Alg_beat &b = beats[i];
+        b.time = b.time - len;
+        b.beat = b.beat - beat_len;
+        beats[start_index] = b;
+        i = i + 1;
+        start_index = start_index + 1;
+    }
+    beats.len = start_index;
+}
+
+
+void Alg_time_map::paste(double beat, Alg_track *tr)
+{
+    // insert a given time map at a given time and dur (in beats)
+    Alg_time_map_ptr from_map = tr->get_time_map();
+    // printf("time map paste\nfrom map\n");
+    // from_map->show();
+    // printf("to map\n");
+    // show();
+    Alg_beats &from = from_map->beats;
+    double time = beat_to_time(beat);
+    // Locate the point at which dur occurs
+    double dur = tr->get_beat_dur();
+    double tr_end_time = from_map->beat_to_time(dur);
+    // add offset to make room for insert
+    int i = locate_beat(beat);
+    while (i < length()) {
+        beats[i].beat += dur;
+        beats[i].time += tr_end_time;
+        i++;
+    }
+    // printf("after opening up\n");
+    // show();
+    // insert point at beginning and end of paste
+    insert_beat(time, beat);
+    // printf("after beginning point insert\n");
+    // show();
+    // insert_beat(time + tr_end_time, beat + dur);
+    // printf("after ending point insert\n");
+    // show();
+    int j = from_map->locate_beat(dur);
+    for (i = 0; i < j; i++) {
+        insert_beat(from[i].time + time,  // shift by time
+                    from[i].beat + beat); // and beat
+    }
+    // printf("after inserts\n");
+    show();
+}
+
+
+void Alg_time_map::insert_time(double start, double len)
+{
+    // find time,beat pair that determines tempo at start
+    // compute beat offset = (delta beat / delta time) * len
+    // add len,beat offset to each following Alg_beat
+    // show();
+    int i = locate_time(start); // start <= beats[i].time
+    if (beats[i].time == start) i++; // start < beats[i].time
+    // case 1: between beats
+    if (i > 0 && i < length()) {
+        double beat_offset = len * (beats[i].beat - beats[i-1].beat) / 
+                                   (beats[i].time - beats[i-1].time);
+        while (i < length()) {
+            beats[i].beat += beat_offset;
+            beats[i].time += len;
+            i++;
+        }
+    } // otherwise, last tempo is in effect; nothing to do
+    // printf("time_map AFTER INSERT\n");
+    // show();
+}
+
+
+void Alg_time_map::insert_beats(double start, double len)
+{
+    int i = locate_beat(start); // start <= beats[i].beat
+    if (beats[i].beat == start) i++;
+    if (i > 0 && i < length()) {
+        double time_offset = len * (beats[i].time - beats[i-1].time) / 
+                                   (beats[i].beat - beats[i-1].beat);
+        while (i < length()) {
+            beats[i].time += time_offset;
+            beats[i].beat += len;
+            i++;
+        }
+    } // otherwise, last tempo is in effect; nothing to do
+    // printf("time_map AFTER INSERT\n");
+    // show();
+}
+
+
+Alg_track::Alg_track(Alg_time_map *map, bool seconds)
+{
+    type = 't';
+    time_map = NULL;
+    units_are_seconds = seconds;
+    set_time_map(map);
+}
+
+
+Alg_event_ptr Alg_track::copy_event(Alg_event_ptr event)
+{
+    Alg_event *new_event;
+    if (event->is_note()) {
+        new_event = new Alg_note((Alg_note_ptr) event);
+    } else { // update
+        new_event = new Alg_update((Alg_update_ptr) event);
+    }
+    return new_event;
+}
+
+
+Alg_track::Alg_track(Alg_track &track)
+{
+    type = 't';
+    time_map = NULL;
+    for (int i = 0; i < track.length(); i++) {
+      append(copy_event(track.events[i]));
+    }
+    set_time_map(track.time_map);
+    units_are_seconds = track.units_are_seconds;
+}
+
+
+Alg_track::Alg_track(Alg_event_list_ref event_list, Alg_time_map_ptr map,
+                     bool units_are_seconds)
+{
+    type = 't';
+    time_map = NULL;
+    for (int i = 0; i < event_list.length(); i++) {
+        append(copy_event(event_list[i]));
+    }
+    set_time_map(map);
+    this->units_are_seconds = units_are_seconds;
+}
+
+
+void Alg_track::serialize(void **buffer, long *bytes)
+{
+    // first determine whether this is a seq or a track.
+    // if it is a seq, then we will write the time map and a set of tracks
+    // if it is a track, we just write the track data and not the time map
+    //
+    // The code will align doubles on ALIGN boundaries, and longs and
+    // floats are aligned to multiples of 4 bytes.
+    //
+    // The format for a seq is:
+    //   'ALGS' -- indicates that this is a sequence
+    //   long length of all seq data in bytes starting with 'ALGS'
+    //   long channel_offset_per_track
+    //   long units_are_seconds
+    //   time_map:
+    //      double last_tempo
+    //      long last_tempo_flag
+    //      long len -- number of tempo changes
+    //      for each tempo change (Alg_beat):
+    //         double time
+    //         double beat
+    //   time_sigs:
+    //      long len -- number of time_sigs
+    //      long pad
+    //      for each time signature:
+    //         double beat
+    //         double num
+    //         double den
+    //   tracks:
+    //      long len -- number of tracks
+    //      long pad
+    //      for each track:
+    //         'ALGT' -- indicates this is a track
+    //         long length of all track data in bytes starting with 'ALGT'
+    //         long units_are_seconds
+    //         double beat_dur
+    //         double real_dur
+    //         long len -- number of events
+    //         for each event:
+    //            long selected
+    //            long type
+    //            long key
+    //            long channel
+    //            double time
+    //            if this is a note:
+    //               double pitch
+    //               double dur
+    //               double loud
+    //               long len -- number of parameters
+    //               for each parameter:
+    //                  char attribute[] with zero pad to ALIGN
+    //                  one of the following, depending on type:
+    //                     double r
+    //                     char s[] terminated by zero
+    //                     long i
+    //                     long l
+    //                     char a[] terminated by zero
+    //               zero pad to ALIGN
+    //            else if this is an update
+    //               (same representation as parameter above)
+    //               zero pad to ALIGN
+    //
+    // The format for a track is given within the Seq format above
+    assert(get_type() == 't');
+    ser_write_buf.init_for_write();
+    serialize_track();
+    *buffer = ser_write_buf.to_heap(bytes); 
+}
+
+
+void Alg_seq::serialize(void **buffer, long *bytes)
+{	
+    assert(get_type() == 's');
+    ser_write_buf.init_for_write();
+    serialize_seq();
+    *buffer = ser_write_buf.to_heap(bytes); 
+}
+
+
+void Serial_write_buffer::check_buffer(long needed)
+{
+    if (len < (ptr - buffer) + needed) { // do we need more space?
+        long new_len = len * 2; // exponential growth is important
+        // initially, length is zero, so bump new_len to a starting value
+        if (new_len == 0) new_len = 1024;
+         // make sure new_len is as big as needed
+        if (needed > new_len) new_len = needed;
+        char *new_buffer = new char[new_len]; // allocate space
+        ptr = new_buffer + (ptr - buffer); // relocate ptr to new buffer
+        if (len > 0) { // we had a buffer already
+            memcpy(new_buffer, buffer, len); // copy from old buffer
+            delete buffer; // free old buffer
+        }
+        buffer = new_buffer; // update buffer information
+        len = new_len;
+    }
+}
+
+
+void Alg_seq::serialize_seq()
+{
+    int i; // loop counters
+    // we can easily compute how much buffer space we need until we
+    // get to tracks, so expand at least that much
+    long needed = 64 + 16 * time_map->beats.len + 24 * time_sig.length();
+    ser_write_buf.check_buffer(needed);
+    ser_write_buf.set_char('A');
+    ser_write_buf.set_char('L');
+    ser_write_buf.set_char('G');
+    ser_write_buf.set_char('S');
+    long length_offset = ser_write_buf.get_posn();
+    ser_write_buf.set_int32(0); // leave room to come back and write length
+    ser_write_buf.set_int32(channel_offset_per_track);
+    ser_write_buf.set_int32(units_are_seconds);
+    ser_write_buf.set_double(beat_dur);
+    ser_write_buf.set_double(real_dur);
+    ser_write_buf.set_double(time_map->last_tempo);
+    ser_write_buf.set_int32(time_map->last_tempo_flag);
+    ser_write_buf.set_int32(time_map->beats.len);
+    for (i = 0; i < time_map->beats.len; i++) {
+        ser_write_buf.set_double(time_map->beats[i].time);
+        ser_write_buf.set_double(time_map->beats[i].beat);
+    }
+    ser_write_buf.set_int32(time_sig.length());
+    ser_write_buf.pad();
+    for (i = 0; i < time_sig.length(); i++) {
+        ser_write_buf.set_double(time_sig[i].beat);
+        ser_write_buf.set_double(time_sig[i].num);
+        ser_write_buf.set_double(time_sig[i].den);
+    }
+    ser_write_buf.set_int32(tracks());
+    ser_write_buf.pad(); 
+    for (i = 0; i < tracks(); i++) {
+        track(i)->serialize_track();
+    }
+    // do not include ALGS, include padding at end
+    ser_write_buf.store_long(length_offset, ser_write_buf.get_posn() - length_offset);
+}
+
+
+void Alg_track::serialize_track()
+{
+    // to simplify the code, copy from parameter addresses to locals
+    int j;
+    ser_write_buf.check_buffer(32);
+    ser_write_buf.set_char('A');
+    ser_write_buf.set_char('L');
+    ser_write_buf.set_char('G');
+    ser_write_buf.set_char('T');
+    long length_offset = ser_write_buf.get_posn(); // save location for track length
+    ser_write_buf.set_int32(0); // room to write track length
+    ser_write_buf.set_int32(units_are_seconds);
+    ser_write_buf.set_double(beat_dur);
+    ser_write_buf.set_double(real_dur);
+    ser_write_buf.set_int32(len);
+    for (j = 0; j < len; j++) {
+        ser_write_buf.check_buffer(24);
+        Alg_event *event = (*this)[j];
+        ser_write_buf.set_int32(event->get_selected());
+        ser_write_buf.set_int32(event->get_type());
+        ser_write_buf.set_int32(event->get_identifier());
+        ser_write_buf.set_int32(event->chan);
+        ser_write_buf.set_double(event->time);
+        if (event->is_note()) {
+            ser_write_buf.check_buffer(20);
+            Alg_note *note = (Alg_note *) event;
+            ser_write_buf.set_float(note->pitch);
+            ser_write_buf.set_float(note->loud);
+            ser_write_buf.set_double(note->dur);
+            long parm_num_offset = ser_write_buf.get_posn();
+            long parm_num = 0;
+            ser_write_buf.set_int32(0); // placeholder for no. parameters
+            Alg_parameters_ptr parms = note->parameters;
+            while (parms) {
+                serialize_parameter(&(parms->parm));
+                parms = parms->next;
+                parm_num++;
+            }
+            ser_write_buf.store_long(parm_num_offset, parm_num);
+        } else {
+            assert(event->is_update());
+            Alg_update *update = (Alg_update *) event;
+            serialize_parameter(&(update->parameter));
+        }
+        ser_write_buf.check_buffer(7); // maximum padding possible
+        ser_write_buf.pad();
+    }
+    // write length, not including ALGT, including padding at end
+    ser_write_buf.store_long(length_offset, ser_write_buf.get_posn() - length_offset);
+}
+
+
+void Alg_track::serialize_parameter(Alg_parameter *parm)
+{
+    // add eight to account for name + zero end-of-string and the
+    // possibility of adding 7 padding bytes
+    long len = strlen(parm->attr_name()) + 8;
+    ser_write_buf.check_buffer(len);
+    ser_write_buf.set_string(parm->attr_name());
+    ser_write_buf.pad();
+    switch (parm->attr_type()) {
+    case 'r':
+        ser_write_buf.check_buffer(8);
+        ser_write_buf.set_double(parm->r);
+        break;
+    case 's':
+        ser_write_buf.check_buffer(strlen(parm->s) + 1);
+        ser_write_buf.set_string(parm->s);
+        break;
+    case 'i':
+        ser_write_buf.check_buffer(4);
+        ser_write_buf.set_int32(parm->i);
+        break;
+    case 'l':
+        ser_write_buf.check_buffer(4);
+        ser_write_buf.set_int32(parm->l);
+        break;
+    case 'a':
+        ser_write_buf.check_buffer(strlen(parm->a) + 1);
+        ser_write_buf.set_string(parm->a);
+        break;
+    }
+}
+
+
+
+Alg_track *Alg_track::unserialize(void *buffer, long len)
+{
+    assert(len > 8);
+    ser_read_buf.init_for_read(buffer, len);
+    bool alg = ser_read_buf.get_char() == 'A' &&
+               ser_read_buf.get_char() == 'L' &&
+               ser_read_buf.get_char() == 'G';
+    assert(alg);
+    char c = ser_read_buf.get_char();
+    if (c == 'S') {
+        Alg_seq *seq = new Alg_seq;
+        ser_read_buf.unget_chars(4); // undo get_char() of A,L,G,S
+        seq->unserialize_seq();
+        return seq;
+    } else {
+        assert(c == 'T');
+        Alg_track *track = new Alg_track;
+        ser_read_buf.unget_chars(4); // undo get_char() of A,L,G,T
+        track->unserialize_track();
+        return track;
+    }
+}
+
+
+#pragma warning(disable: 4800) // long to bool performance warning
+
+/* Note: this Alg_seq must have a default initialized Alg_time_map.
+ * It will be filled in with data from the ser_read_buf buffer.
+ */
+void Alg_seq::unserialize_seq()
+{
+    ser_read_buf.check_input_buffer(48);
+    bool algs = (ser_read_buf.get_char() == 'A') &&
+                (ser_read_buf.get_char() == 'L') &&
+                (ser_read_buf.get_char() == 'G') &&
+                (ser_read_buf.get_char() == 'S');
+    assert(algs);
+    long len = ser_read_buf.get_int32();
+    assert(ser_read_buf.get_len() >= len);
+    channel_offset_per_track = ser_read_buf.get_int32();
+    units_are_seconds = ser_read_buf.get_int32() != 0;
+    beat_dur = ser_read_buf.get_double();
+    real_dur = ser_read_buf.get_double();
+    // no need to allocate an Alg_time_map since it's done during initialization
+    time_map->last_tempo = ser_read_buf.get_double();
+    time_map->last_tempo_flag = ser_read_buf.get_int32() != 0;
+    long beats = ser_read_buf.get_int32();
+    ser_read_buf.check_input_buffer(beats * 16 + 4);
+    int i;
+    for (i = 0; i < beats; i++) {
+        double time = ser_read_buf.get_double();
+        double beat = ser_read_buf.get_double();
+        time_map->insert_beat(time, beat);
+        // printf("time_map: %g, %g\n", time, beat);
+    }
+    long time_sig_len = ser_read_buf.get_int32();
+    ser_read_buf.get_pad();
+    ser_read_buf.check_input_buffer(time_sig_len * 24 + 8);
+    for (i = 0; i < time_sig_len; i++) {
+        double beat = ser_read_buf.get_double();
+        double num = ser_read_buf.get_double();
+        double den = ser_read_buf.get_double();
+        time_sig.insert(beat, num, den);
+    }
+    long tracks_num = ser_read_buf.get_int32();
+    ser_read_buf.get_pad();
+    add_track(tracks_num - 1); // create tracks_num tracks
+    for (i = 0; i < tracks_num; i++) {
+        track(i)->unserialize_track();
+    }
+    // assume seq started at beginning of buffer. len measures
+    // bytes after 'ALGS' header, so add 4 bytes and compare to
+    // current buffer position -- they should agree
+    assert(ser_read_buf.get_posn() == len + 4);
+}
+
+
+void Alg_track::unserialize_track()
+{
+    ser_read_buf.check_input_buffer(32);
+    bool algt = (ser_read_buf.get_char() == 'A') &&
+                (ser_read_buf.get_char() == 'L') &&
+                (ser_read_buf.get_char() == 'G') &&
+                (ser_read_buf.get_char() == 'T');
+    assert(algt);
+    long offset = ser_read_buf.get_posn(); // stored length does not include 'ALGT'
+    long bytes = ser_read_buf.get_int32();
+    assert(bytes <= ser_read_buf.get_len() - offset);
+    units_are_seconds = (bool) ser_read_buf.get_int32();
+    beat_dur = ser_read_buf.get_double();
+    real_dur = ser_read_buf.get_double();
+    int event_count = ser_read_buf.get_int32();
+    for (int i = 0; i < event_count; i++) {
+        ser_read_buf.check_input_buffer(24);
+        long selected = ser_read_buf.get_int32();
+        char type = (char) ser_read_buf.get_int32();
+        long key = ser_read_buf.get_int32();
+        long channel = ser_read_buf.get_int32();
+        double time = ser_read_buf.get_double();
+        if (type == 'n') {
+            ser_read_buf.check_input_buffer(20);
+            float pitch = ser_read_buf.get_float();
+            float loud = ser_read_buf.get_float();
+            double dur = ser_read_buf.get_double();
+            Alg_note *note = 
+                    create_note(time, channel, key, pitch, loud, dur);
+            note->set_selected(selected != 0);
+            long param_num = ser_read_buf.get_int32();
+            int j;
+            // this builds a list of parameters in the correct order
+            // (although order shouldn't matter)
+            Alg_parameters_ptr *list = &note->parameters;
+            for (j = 0; j < param_num; j++) {
+                *list = new Alg_parameters(NULL);
+                unserialize_parameter(&((*list)->parm));
+                list = &((*list)->next);
+            }
+            append(note);
+        } else {
+            assert(type == 'u');
+            Alg_update *update = create_update(time, channel, key);
+            update->set_selected(selected != 0);
+            unserialize_parameter(&(update->parameter));
+            append(update);
+        }
+        ser_read_buf.get_pad();
+    }
+    assert(offset + bytes == ser_read_buf.get_posn());
+}
+
+
+void Alg_track::unserialize_parameter(Alg_parameter_ptr parm_ptr)
+{
+    Alg_attribute attr = ser_read_buf.get_string();
+    parm_ptr->attr = symbol_table.insert_string(attr);
+    switch (parm_ptr->attr_type()) {
+    case 'r':
+        ser_read_buf.check_input_buffer(8);
+        parm_ptr->r = ser_read_buf.get_double();
+        break;
+    case 's':
+        parm_ptr->s = heapify(ser_read_buf.get_string());
+        break;
+    case 'i':
+        ser_read_buf.check_input_buffer(4);
+        parm_ptr->i = ser_read_buf.get_int32();
+        break;
+    case 'l':
+        ser_read_buf.check_input_buffer(4);
+        parm_ptr->l = ser_read_buf.get_int32() != 0;
+        break;
+    case 'a':
+        parm_ptr->a = symbol_table.insert_attribute(ser_read_buf.get_string());
+        break;
+    }
+}
+
+#pragma warning(default: 4800)
+
+void Alg_track::set_time_map(Alg_time_map *map)
+{
+    if (time_map) time_map->dereference();
+    if (map == NULL) {
+        time_map = new Alg_time_map(); // new default map
+        time_map->reference();
+    } else {
+        time_map = map;
+        time_map->reference();
+    }
+}
+
+
+void Alg_track::convert_to_beats()
+// modify all times and durations in notes to beats
+{
+    if (units_are_seconds) {
+        units_are_seconds = false;
+        long i;
+
+        for (i = 0; i < length(); i++) {
+            Alg_event_ptr e = events[i];
+            double beat = time_map->time_to_beat(e->time);
+            if (e->is_note()) {
+                Alg_note_ptr n = (Alg_note_ptr) e;
+                n->dur = time_map->time_to_beat(n->time + n->dur) - beat;
+            }
+            e->time = beat;
+        }
+    }
+}
+
+
+void Alg_track::convert_to_seconds()
+// modify all times and durations in notes to seconds
+{
+    if (!units_are_seconds) {
+        last_note_off = time_map->beat_to_time(last_note_off);
+        units_are_seconds = true;
+        long i;
+        for (i = 0; i < length(); i++) {
+            Alg_event_ptr e = events[i];
+            double time = time_map->beat_to_time(e->time);
+            if (e->is_note()) {
+                Alg_note_ptr n = (Alg_note_ptr) e;
+                n->dur = time_map->beat_to_time(n->time + n->dur) - time;
+            }
+            e->time = time;
+        }
+    }
+}
+
+
+void Alg_track::set_dur(double duration)
+{
+    // set beat_dur and real_dur
+    if (units_are_seconds) {
+        set_real_dur(duration);
+        set_beat_dur(time_map->time_to_beat(duration));
+    } else {
+        set_beat_dur(duration);
+        set_real_dur(time_map->beat_to_time(duration));
+    }
+}
+
+
+Alg_note *Alg_track::create_note(double time, int channel, int identifier, 
+                           float pitch, float loudness, double duration)
+{
+    Alg_note *note = new Alg_note();
+    note->time = time;
+    note->chan = channel;
+    note->set_identifier(identifier);
+    note->pitch = pitch;
+    note->loud = loudness;
+    note->dur = duration;
+    return note;
+}
+
+
+Alg_update *Alg_track::create_update(double time, int channel, int identifier)
+{
+    Alg_update *update = new Alg_update();
+    update->time = time;
+    update->chan = channel;
+    update->set_identifier(identifier);
+    return update;
+}
+
+
+Alg_track_ptr Alg_track::cut(double t, double len, bool all)
+{
+    // since we are translating notes in time, do not copy or use old timemap
+    Alg_track_ptr track = new Alg_track();
+    track->units_are_seconds = units_are_seconds;
+    if (units_are_seconds) {
+        track->set_real_dur(len);
+        track->set_beat_dur(time_map->time_to_beat(t + len) -
+                            time_map->time_to_beat(t));
+    } else {
+        track->set_beat_dur(len);
+        track->set_real_dur(time_map->beat_to_time(t + len) -
+                            time_map->beat_to_time(t));
+    }
+    int i;
+    int new_len = 0;
+    int change = 0;
+    for (i = 0; i < length(); i++) {
+        Alg_event_ptr event = events[i];
+        if (event->overlap(t, len, all)) {
+            event->time -= t;
+            track->append(event);
+            change = 1;
+        } else { // if we're not cutting this event, move it to 
+                 // eliminate the gaps in events left by cut events
+            events[new_len] = event;
+            // adjust times of events after t + len
+            if (event->time > t + len - ALG_EPS) {
+                event->time -= len;
+                change = 1;
+            }
+            new_len++;
+        }
+    }
+    // Alg_event_lists based on this track become invalid
+    sequence_number += change;
+    this->len = new_len; // adjust length since we removed events
+    return track;
+}
+
+
+Alg_track_ptr Alg_track::copy(double t, double len, bool all)
+{
+    // since we are translating notes in time, do not copy or use old timemap
+    Alg_track_ptr track = new Alg_track();
+    track->units_are_seconds = units_are_seconds;
+    if (units_are_seconds) {
+         track->set_real_dur(len);
+         track->set_beat_dur(time_map->time_to_beat(t + len) - 
+                             time_map->time_to_beat(t));
+    } else {
+        track->set_beat_dur(len);
+        track->set_real_dur(time_map->beat_to_time(t + len) -
+                            time_map->beat_to_time(t));
+    }
+    int i;
+    for (i = 0; i < length(); i++) {
+        Alg_event_ptr event = events[i];
+        if (event->overlap(t, len, all)) {
+            Alg_event_ptr new_event = copy_event(event);
+            new_event->time -= t;
+            track->append(new_event);
+        }
+    }
+    return track;
+}
+
+
+void Alg_track::paste(double t, Alg_event_list *seq)
+{
+    assert(get_type() == 't');
+    // seq can be an Alg_event_list, an Alg_track, or an Alg_seq
+    // if it is an Alg_event_list, units_are_seconds must match
+    bool prev_units_are_seconds;
+    if (seq->get_type() == 'e') {
+        assert(seq->get_owner()->get_units_are_seconds() == units_are_seconds);
+    } else { // make it match
+        Alg_track_ptr tr = (Alg_track_ptr) seq;
+        prev_units_are_seconds = tr->get_units_are_seconds();
+        if (units_are_seconds) tr->convert_to_seconds();
+        else tr->convert_to_beats();
+    }
+    double dur = (units_are_seconds ? seq->get_real_dur() : 
+                                      seq->get_beat_dur());
+
+    // Note: in the worst case, seq may contain notes
+    // that start almost anytime up to it's duration,
+    // so the simplest algorithm is simply a sequence
+    // of inserts. If this turns out to be too slow,
+    // we can do a merge sort in the case that seq
+    // is an Alg_track (if it's an Alg_event_list, we
+    // are not guaranteed that the events are in time
+    // order, but currently, only a true seq is allowed)
+
+    int i;
+    for (i = 0; i < length(); i++) {
+        if (events[i]->time > t - ALG_EPS) {
+            events[i]->time += dur;
+        }
+    }
+    for (i = 0; i < seq->length(); i++) {
+        Alg_event *new_event = copy_event((*seq)[i]);
+        new_event->time += t;
+        insert(new_event);
+    }
+    // restore track units to what they were before
+    if (seq->get_type() != 'e') {
+        Alg_track_ptr tr = (Alg_track_ptr) seq;
+        if (prev_units_are_seconds) tr->convert_to_seconds();
+        else tr->convert_to_beats();
+    }
+
+}
+
+
+void Alg_track::merge(double t, Alg_event_list_ptr seq)
+{
+    Alg_event_list_ref s = *seq;
+    for (int i = 0; i < s.length(); i++) {
+        Alg_event *new_event;
+        if (s[i]->is_note()) {
+            new_event = new Alg_note((Alg_note_ptr) s[i]);
+        } else {
+            new_event = new Alg_update((Alg_update_ptr) s[i]);
+        }
+        new_event->time += t;
+        insert(new_event);
+    }
+}
+
+
+void Alg_track::clear(double t, double len, bool all)
+{
+    int i;
+    int move_to = 0;
+    for (i = 0; i < length(); i++) {
+        Alg_event_ptr event = events[i];
+        if (event->overlap(t, len, all)) {
+            delete events[i];
+        } else { // if we're not clearing this event, move it to 
+                 // eliminate the gaps in events left by cleared events
+            events[move_to] = event;
+            // adjust times of events after t + len. This test is based
+            // on the one in Alg_event::overlap() for consistency.
+            if (event->time > t + len - ALG_EPS && event->time > t)
+                event->time -= len;
+            move_to++;
+        }
+    }
+    if (move_to != this->len) { // we cleared at least one note
+        sequence_number++; // Alg_event_lists based on this track become invalid
+    }
+    this->len = move_to; // adjust length since we removed events
+}
+
+
+void Alg_track::silence(double t, double len, bool all)
+{
+    int i;
+    int move_to = 0;
+    for (i = 0; i < length(); i++) {
+        Alg_event_ptr event = events[i];
+        if (event->overlap(t, len, all)) {
+            delete events[i];
+        } else { // if we're not clearing this event, move it to 
+                 // eliminate the gaps in events left by cleared events
+        events[move_to] = event;
+            move_to++;
+        }
+    }
+    if (move_to != this->len) { // we cleared at least one note
+        sequence_number++; // Alg_event_lists based on this track become invalid
+    }
+    this->len = move_to; // adjust length since we removed events
+}
+
+
+void Alg_track::insert_silence(double t, double len)
+{
+    int i;
+    for (i = 0; i < length(); i++) {
+        Alg_event_ptr event = events[i];
+        if (event->time > t - ALG_EPS) event->time += len;
+    }
+}
+
+
+Alg_event_list *Alg_track::find(double t, double len, bool all,
+                         long channel_mask, long event_type_mask)
+{
+    int i;
+    Alg_event_list *list = new Alg_event_list(this);
+    if (units_are_seconds) { // t and len are seconds
+        list->set_real_dur(len);
+        list->set_beat_dur(get_time_map()->time_to_beat(t + len) - 
+                           get_time_map()->time_to_beat(t));
+    } else { // t and len are beats
+        list->set_real_dur(get_time_map()->beat_to_time(t + len) -
+                           get_time_map()->beat_to_time(t));
+        list->set_beat_dur(len);
+    }
+    for (i = 0; i < length(); i++) {
+        Alg_event_ptr event = events[i];
+        if (event->overlap(t, len, all)) {
+            if ((channel_mask == 0 || 
+                 (event->chan < 32 && 
+                  (channel_mask & (1 << event->chan)))) &&
+                ((event_type_mask == 0 ||
+                  (event_type_mask & (1 << event->get_type_code()))))) {
+                list->append(event);
+            }
+        }
+    }
+    return list;
+}
+
+
+void Alg_time_sigs::expand()
+{
+    assert(maxlen >= len);
+    maxlen = (maxlen + 5);   // extra growth for small sizes
+    maxlen += (maxlen >> 2); // add 25%
+    Alg_time_sig_ptr new_time_sigs = new Alg_time_sig[maxlen];
+    // now do copy
+    memcpy(new_time_sigs, time_sigs, len * sizeof(Alg_time_sig));
+    if (time_sigs)
+       delete[] time_sigs;
+    time_sigs = new_time_sigs;
+}
+
+
+void Alg_time_sigs::insert(double beat, double num, double den, bool force)
+{
+    // find insertion point:
+    for (int i = 0; i < len; i++) {
+        if (within(time_sigs[i].beat, beat, ALG_EPS)) {
+            // overwrite location i with new info
+            time_sigs[i].beat = beat;
+            time_sigs[i].num = num;
+            time_sigs[i].den = den;
+            return;
+        } else if (time_sigs[i].beat > beat) {
+            if ((i > 0 && // check if redundant with prev. time sig
+                 time_sigs[i - 1].num == num &&
+                 time_sigs[i - 1].den == den &&
+                 within(fmod(beat - time_sigs[i - 1].beat,
+                             4 * time_sigs[i-1].num / time_sigs[i-1].den),
+                             0, ALG_EPS)) ||
+                // check if redundant with implied initial 4/4 time sig:
+                (i == 0 && num == 4 && den == 4 &&
+                 within(fmod(beat, 4), 0, ALG_EPS))) {
+                if (!force) return; // redundant inserts can be ignored here
+            }
+            // make room for new event
+            if (maxlen <= len) expand();
+            // insert new event at i
+            memmove(&time_sigs[i + 1], &time_sigs[i], 
+                    sizeof(Alg_time_sig) * (len - i));
+            time_sigs[i].beat = beat;
+            time_sigs[i].num = num;
+            time_sigs[i].den = den;
+            len++;
+            return;
+        }
+    }
+    // if we fall out of loop, then this goes at end
+    if (maxlen <= len) expand();
+    time_sigs[len].beat = beat;
+    time_sigs[len].num = num;
+    time_sigs[len].den = den;
+    len++;
+}
+
+
+void Alg_time_sigs::show()
+{
+    printf("Alg_time_sig: ");
+    for (int i = 0; i < len; i++) {
+        printf("(%g: %g/%g) ", time_sigs[i].beat, time_sigs[i].num, time_sigs[i].den);
+    }
+    printf("\n");
+}
+
+
+int Alg_time_sigs::find_beat(double beat)
+{
+    // index where you would insert a new time signature at beat
+    int i = 0;
+    while (i < len && time_sigs[i].beat < beat - ALG_EPS) i++;
+    return i;
+}
+
+
+double Alg_time_sigs::get_bar_len(double beat)
+{
+    int i = find_beat(beat);
+    double num = 4.0;
+    double den = 4.0;
+    if (i != 0) {
+        num = time_sigs[i - 1].num;
+        den = time_sigs[i - 1].den;
+    }
+    return 4 * num / den;
+}
+
+void Alg_time_sigs::cut(double start, double end, double dur)
+{
+    // remove time_sig's from start to end -- these must be
+    //   in beats (not seconds). 
+    // The duration of the whole sequence is dur (beats).
+
+    // If the first bar line after end comes before a time signature
+    // and does not fall on a bar line, insert a time signature at
+    // the time of the bar line to retain relative bar line positions
+
+    int i = find_beat(end);
+    // i is where you would insert a new time sig at beat, 
+    // Case 1: beat coincides with a time sig at i. Time signature
+    // at beat means that there is a barline at beat, so when beat
+    // is shifted to start, the relative barline positions are preserved
+    if (len > 0 &&
+        within(end, time_sigs[i].beat, ALG_EPS)) {
+        // beat coincides with time signature change, so end is on a barline
+        /* do nothing */ ;
+    // Case 2: there is no time signature before end
+    } else if (i == 0 && (len == 0 ||
+                          time_sigs[0].beat > end)) {
+        // If the next time signature does not fall on a barline,
+        // then end must not be on a barline, so there is a partial
+        // measure from end to the next barline. We need 
+        // a time signature there to preserve relative barline
+        // locations. It may be that the next bar after start is
+        // due to another time signature, in which case we do not
+        // need to insert anything.
+        double measures = end / 4.0;
+        double imeasures = ROUND(measures);
+        if (!within(measures, imeasures, ALG_EPS)) {
+            // start is not on a barline, maybe add one here:
+            double bar_loc = (int(measures) + 1) * 4.0;
+            if (bar_loc < dur - ALG_EPS &&
+                (len == 0 || time_sigs[0].beat > bar_loc + ALG_EPS)) {
+                insert(bar_loc, 4, 4, true); // forced insert
+            }
+        }
+    // This case should never be true because if i == 0, either there
+    // are no time signatures before beat (Case 2), 
+    // or there is one time signature at beat (Case 1)
+    } else if (i == 0) {
+        /* do nothing (might be good to assert(false)) */ ;
+    // Case 3: i-1 must be the effective time sig position
+    } else { 
+        // get the time signature in effect at end
+        Alg_time_sig &tsp = time_sigs[i - 1];
+        double beats_per_measure = (tsp.num * 4) / tsp.den;
+        double measures = (end - tsp.beat) / beats_per_measure;
+        int imeasures = ROUND(measures);
+        if (!within(measures, imeasures, ALG_EPS)) {
+            // end is not on a measure, so we need to insert a time sig
+            // to force a bar line at the first measure location after
+            // beat, if any
+            double bar_loc = tsp.beat + beats_per_measure * (int(measures) + 1);
+            // insert new time signature at bar_loc
+            // It will have the same time signature, but the position will
+            // force a barline to match the barline before the shift
+            // However, we should not insert a barline if there is a
+            // time signature earlier than the barline time
+            if (i < len /* time_sigs[i] is the last one */ &&
+                time_sigs[i].beat < bar_loc - ALG_EPS) {
+                /* do not insert because there's already a time signature */;
+            } else if (bar_loc < dur - ALG_EPS) {
+                insert(bar_loc, tsp.num, tsp.den, true); // forced insert
+            }
+        }
+        // else beat coincides with a barline, so no need for an extra
+        // time signature to force barline alignment
+    }
+
+    // Figure out if time signature at start matches
+    // the time signature at end. If not, we need to insert a
+    // time signature at end to force the correct time signature
+    // there. 
+    // Find time signature at start:
+    double start_num = 4.0; // default if no time signature specified
+    double start_den = 4.0;
+    i = find_beat(start);
+    // A time signature at start would go at index i, so the effective
+    // time signature prior to start is at i - 1. If i == 0, the default
+    // time signature is in effect prior to start.
+    if (i != 0) {
+        start_num = time_sigs[i - 1].num;
+        start_den = time_sigs[i - 1].den;
+    }
+    // Find the time signature at end:
+    double end_num = 4.0; // default if no time signature specified
+    double end_den = 4.0;
+    int j = find_beat(end);
+    if (j != 0) {
+        end_num = time_sigs[j - 1].num;
+        end_den = time_sigs[j - 1].den;
+    }
+    // compare: If meter changes and there is no time signature at end,
+    // insert a time signature at end
+    if (end < dur - ALG_EPS &&
+        (start_num != end_num || start_den != end_den) &&
+        (j >= len || !within(time_sigs[j].beat, end, ALG_EPS))) {
+        insert(end, end_num, end_den, true);
+    }
+
+    // Remove time signatures from start to end (not including one AT
+    // end, if there is one there. Be careful with ALG_EPS on that one.)
+
+    // since we may have inserted a time signature, find position again:
+    int i0 = find_beat(start);
+    int i1 = i0;
+    // scan to end of cut region
+    while (i1 < len && time_sigs[i1].beat < end - ALG_EPS) {
+        i1++;
+    }
+    // scan from end to len(time_sig)
+    while (i1 < len) {
+        Alg_time_sig &ts = time_sigs[i1];
+        ts.beat -= (end - start);
+        time_sigs[i0] = ts;
+        i0++;
+        i1++;
+    }
+    len = i1;
+}
+
+
+void Alg_time_sigs::trim(double start, double end)
+{
+    // remove time_sig's not in [start, end), but retain
+    // barline positions relative to the notes. This means that
+    // if the meter (time signature) changes between start and
+    // end that we need to insert a time signature at start.
+    // Also, if trim() would cause barlines to move, we need to
+    // insert a time signature on a barline (timesignatures
+    // imply the beginning of a bar even if the previous bar
+    // does not have enough beats. Note that bars do not need
+    // to have an integer number of beats).
+    //
+    // units must be in beats (not seconds)
+    //
+    // Uses Alg_time_sigs::cut() to avoid writing a special case
+    double dur = end + 1000;
+    if (len > 0) {
+        dur = time_sigs[len - 1].beat + 1000;
+    }
+    cut(end, dur, dur);
+    cut(0, start, dur);
+
+#ifdef IGNORE_THIS_OLD_CODE
+    // first, skip time signatures up to start
+    int i = find_beat(start);
+    // i is where you would insert a new time sig at beat, 
+    // Case 1: beat coincides with a time sig at i. Time signature
+    // at beat means that there is a barline at beat, so when beat
+    // is shifted to 0, the relative barline positions are preserved
+    if (len > 0 &&
+        within(start, time_sigs[i].beat, ALG_EPS)) {
+        // beat coincides with time signature change, so offset must
+        // be a multiple of beats
+        /* do nothing */ ;
+    // Case 2: there is no time signature before start
+    } else if (i == 0 && (len == 0 ||
+                             time_sigs[0].beat > start)) {
+        // If the next time signature does not fall on a barline,
+        // then start must not be on a barline, so there is a partial
+        // measure from start to the next barline. We need 
+        // a time signature there to preserve relative barline
+        // locations. It may be that the next bar after start is
+        // due to another time signature, in which case we do not
+        // need to insert anything.
+        double measures = start / 4.0;
+        double imeasures = ROUND(measures);
+        if (!within(measures, imeasures, ALG_EPS)) {
+            // start is not on a barline, maybe add one here:
+            double bar_loc = (int(measures) + 1) * 4.0;
+            if (len == 0 || time_sigs[1].beat > bar_loc + ALG_EPS) {
+                insert(bar_loc, 4, 4, true);
+            }
+        }
+    // This case should never be true because if i == 0, either there
+    // are no time signatures before beat (Case 2), 
+    // or there is one time signature at beat (Case 1)
+    } else if (i == 0) {
+        /* do nothing (might be good to assert(false)) */ ;
+    // Case 3: i-1 must be the effective time sig position
+    } else { 
+        i -= 1; // index the time signature in effect at start
+        Alg_time_sig &tsp = time_sigs[i];
+        double beats_per_measure = (tsp.num * 4) / tsp.den;
+        double measures = (start - tsp.beat) / beats_per_measure;
+        int imeasures = ROUND(measures);
+        if (!within(measures, imeasures, ALG_EPS)) {
+            // beat is not on a measure, so we need to insert a time sig
+            // to force a bar line at the first measure location after
+            // beat, if any
+            double bar_loc = tsp.beat + beats_per_measure * (int(measures) + 1);
+            // insert new time signature at bar_loc
+            // It will have the same time signature, but the position will
+            // force a barline to match the barline before the shift
+            insert(bar_loc, tsp.num, tsp.den, true);
+        } 
+        // else beat coincides with a barline, so no need for an extra
+        // time signature to force barline alignment
+    }
+    // since we may have inserted a time signature, find position again:
+    int i_in = find_beat(start);
+    int i_out = 0;
+       
+    // put time_sig at start if necessary
+    // if 0 < i_in < len, then the time sig at i_in is either
+    // at start or after start. 
+    //     If after start, then insert time sig at i_in-1 at 0. 
+    //     Otherwise, we'll pick up time sig at i_in below.
+    // If 0 == i_in < len, then the time sig at i_in is either
+    // at start or after start.
+    //     If after start, then time sig at 0 is 4/4, but that's the
+    //          default, so do nothing.
+    //     Otherwise, we'll pick up time sig at i_in below.
+    // If 0 < i_in == len, then insert time_sig at i_in-1 at start
+    // If 0 == i_in == len, then 4/4 default applies and we're done.
+    // 
+    // So the conditions for inserting time_sig[in_i-1] at 0 are:
+    //     (0 < i_in < len and time_sig[i] > start+ALG_EPS) OR
+    //     (0 < i_in == len)
+    // We can rewrite this to 
+    //     (0 < i_in) && ((i_in < len && time_sig[i_in].beat > start + ALG_EPS) ||
+    //                    (i_in == len)))
+    //     
+    if (0 < i_in && ((i_in < len && time_sigs[i_in].beat > start + ALG_EPS) ||
+                     (i_in == len))) {
+        time_sigs[0] = time_sigs[i_in - 1];
+        time_sigs[0].beat = 0.0;
+        i_out = 1;
+    }
+    // copy from i_in to i_out as we scan time_sig array to end of cut region
+    while (i_in < len && time_sigs[i_in].beat < end - ALG_EPS) {
+        Alg_time_sig &ts = time_sigs[i_in];
+        ts.beat = ts.beat - start;
+        time_sigs[i_out] = ts;
+        i_in++;
+        i_out++;
+    }
+    len = i_out;
+#endif
+}
+
+
+void Alg_time_sigs::paste(double start, Alg_seq *seq)
+{
+    // printf("time_sig::insert before paste\n");
+    // show();
+    Alg_time_sigs &from = seq->time_sig;
+    // printf("time_sig::insert from\n");
+    // from.show();
+    // insert time signatures from seq into this time_sigs at start
+    if (len == 0 && from.len == 0) {
+        return; // default applies
+    }
+    int i = find_beat(start);
+    // remember the time signature at the splice point
+    double num_after_splice = 4;
+    double den_after_splice = 4; // default
+    double num_before_splice = 4;
+    double den_before_splice = 4; // default
+    // this is computed for use in aligning beats after the inserted 
+    // time signatures and duration. It is the position of time signature
+    // in effect immediately after start (the time signature will be 
+    // before start or at start)
+    double beat_after_splice = 0.0; 
+    // three cases: 
+    //  1) time sig at splice is at i-1
+    //     for this, we must have len>0 & i>0
+    //     two sub-cases:
+    //       A) i < len && time_sig[i].beat > start
+    //       B) i == len
+    //  2) time_sig at splice is at i
+    //     for this, i < len && time_sig[i].beat ~= start
+    //  3) time_sig at splice is default 4/4
+    if (len > 0 && i > 0 &&
+        ((i < len && time_sigs[i].beat > start + ALG_EPS) ||
+         (i == len))) {
+        // no time_signature at i
+        num_after_splice = time_sigs[i-1].num;
+        den_after_splice = time_sigs[i-1].den;
+        beat_after_splice = time_sigs[i - 1].beat;
+        num_before_splice = num_after_splice;
+        den_before_splice = den_after_splice;
+    } else if (i < len && time_sigs[i].beat <= start + ALG_EPS) {
+        // time_signature at i is at "start" beats
+        num_after_splice = time_sigs[i].num;
+        den_after_splice = time_sigs[i].den;
+        beat_after_splice = start;
+        if (i > 0) { // time signature before start is at i - 1
+            num_before_splice = time_sigs[i-1].num;
+            den_before_splice = time_sigs[i-1].den;
+        }          
+    }
+    // i is where insert will go, time_sig[i].beat >= start
+    // begin by adding duration to time_sig's at i and above
+    // move time signatures forward by duration of seq
+    double dur = seq->get_beat_dur();
+    while (i < len) {
+        time_sigs[i].beat += dur;
+        i++;
+    }
+    //printf("time_sig::insert after making space\n");
+    //show();
+    // If time signature of "from" is not the effective time signature
+    // at start, insert a time_signature at start.  This may create
+    // an extra measure if seq does not begin on a measure boundary
+    double num_of_insert = 4.0;
+    double den_of_insert = 4.0;
+    double beat_of_insert = 0.0;
+    int first_from_index = 0; // where to start copying from
+    if (from.length() > 0 && from[0].beat < ALG_EPS) {
+        // there is an initial time signature in "from"
+        num_of_insert = from[0].num;
+        den_of_insert = from[0].den;
+        // since we are handling the first time signature in from,
+        // we can start copying at index == 1:
+        first_from_index = 1;
+    }
+    // compare time signatures to see if we need a change at start:
+    if (num_before_splice != num_of_insert ||
+        den_before_splice != den_of_insert) {
+        // note that this will overwrite an existing time signature if
+        // it is within ALG_EPS of start -- this is correct because the
+        // existing time signature will already be recorded as
+        // num_after_splice and den_after_splice
+        insert(start, num_of_insert, den_of_insert);
+    }
+    //printf("time_sig::insert after 4/4 at start\n");
+    //show();
+    // insert time signatures from seq offset by start
+    for (i = 0; i < from.length() && from[i].beat < dur - ALG_EPS; i++) {
+        num_of_insert = from[i].num; // keep latest time signature info
+        den_of_insert = from[i].den;
+        beat_of_insert = from[i].beat;
+        insert(start + beat_of_insert, num_of_insert, den_of_insert);
+    }
+    //printf("time_sig::insert after pasting in sigs\n");
+    //show();
+    // now insert time signature at end of splice if necessary
+    // if the time signature changes, we need to insert a time signature
+    // immediately:
+    if (num_of_insert != num_after_splice &&
+        den_of_insert != den_after_splice) {
+        insert(start + dur, num_after_splice, den_after_splice);
+        num_of_insert = num_after_splice;
+        den_of_insert = den_after_splice;
+        beat_of_insert = start + dur;
+    }
+    // if the insert had a partial number of measures, we might need an
+    // additional time signature to realign the barlines after the insert
+    // To decide, we compare the beat of the first barline on or after
+    // start before the splice to the beat of the first barline on or
+    // after start + dur after the splice. In a sense, this is the "same"
+    // barline, so it should be shifted exactly by dur.
+    // First, compute the beat of the first barline on or after start:
+    double beats_per_measure = (num_after_splice * 4) / den_after_splice;
+    double measures = (start - beat_after_splice) / beats_per_measure;
+    // Measures might be slightly negative due to rounding. Use max()
+    // to eliminate any negative rounding error:
+    int imeasures = int(max(measures, 0.0));
+    double old_bar_loc = beat_after_splice + (imeasures * beats_per_measure);
+    if (old_bar_loc < start) old_bar_loc += beats_per_measure;
+    // now old_bar_loc is the original first bar position after start
+    // Do similar calculation for position after end after the insertion:
+    // beats_per_measure already calculated because signatures match
+    measures = (start + dur - beat_of_insert) / beats_per_measure;
+    imeasures = int(max(measures, 0.0));
+    double new_bar_loc = beat_of_insert + (imeasures * beats_per_measure);
+    if (new_bar_loc < start + dur) new_bar_loc += beats_per_measure;
+    // old_bar_loc should be shifted by dur:
+    old_bar_loc += dur;
+    // now the two bar locations should be equal, but due to rounding,
+    // they could be off by one measure
+    double diff = (new_bar_loc - old_bar_loc) + beats_per_measure;
+    double diff_in_measures = diff / beats_per_measure;
+    // if diff_in_measures is not (approximately) integer, we need to
+    // force a barline (time signature) after start + dur to maintain
+    // the relationship between barliness and notes
+    if (!within(diff_in_measures, ROUND(diff_in_measures), ALG_EPS)) {
+        // recall that old_bar_loc is shifted by dur
+        insert(old_bar_loc, num_after_splice, den_after_splice);
+    }
+    //printf("time_sig::insert after sig at end of splice\n");
+    //show();
+}
+
+
+void Alg_time_sigs::insert_beats(double start, double dur)
+{
+    int i = find_beat(start);
+
+    // time_sigs[i] is after beat and needs to shift
+    // Compute the time of the first bar at or after beat so that
+    // a bar can be placed at bar_loc + dur
+    double tsnum = 4.0;
+    double tsden = 4.0;
+    double tsbeat = 0.0; // defaults
+    
+    // three cases: 
+    //  1) time sig at splice is at i-1
+    //     for this, we must have len>0 & i>0
+    //     two sub-cases:
+    //       A) i < len && time_sig[i].beat > start
+    //       B) i == len
+    //  2) time_sig at splice is at i
+    //     for this, i < len && time_sig[i].beat ~= start
+    //  3) time_sig at splice is default 4/4
+    if (len > 0 && i > 0 &&
+        ((i < len && time_sigs[i].beat > start + ALG_EPS) ||
+         (i == len))) {
+        // no time_signature at i
+        tsnum = time_sigs[i-1].num;
+        tsden = time_sigs[i-1].den;
+        tsbeat = time_sigs[i-1].beat;
+    } else if (i < len && time_sigs[i].beat <= start + ALG_EPS) {
+        // time_signature at i is at "start" beats
+        tsnum = time_sigs[i].num;
+        tsden = time_sigs[i].den;
+        tsbeat = start;
+        i++; // we want i to be index of next time signature after start
+    }
+    // invariant: i is index of next time signature after start
+
+    // increase beat times from i to len - 1 by dur
+    for (int j = i; j < len; j++) {
+        time_sigs[j].beat += dur;
+    }
+
+    // insert a time signature to maintain bar positions if necessary
+    double beats_per_measure = (tsnum * 4) / tsden;
+    double measures = dur / beats_per_measure; // shift distance
+    int imeasures = ROUND(measures);
+    if (!within(measures, imeasures, ALG_EPS)) {
+        // shift is not a whole number of measures, so we may need to insert
+        // time signature after silence
+        // compute measures from time signature to next bar after time
+        measures = (start - tsbeat) / beats_per_measure;
+        // round up and add to tsbeat to get time of next bar
+        double bar_loc = tsbeat + beats_per_measure * (int(measures) + 1);
+        // translate bar_loc by len:
+        bar_loc += dur; // this is where we want a bar to be, but maybe
+        // there is a time signature change before bar, in which case we
+        // should not insert a new time signature
+        // The next time signature after start is at i if i < len
+        if (i < len && time_sigs[i].beat < bar_loc) {
+            /* do not insert */;
+        } else {
+            insert(bar_loc, tsnum, tsden);
+        }
+    }
+}
+
+
+double Alg_time_sigs::nearest_beat(double beat)
+{
+    int i = find_beat(beat);
+    // i is where we would insert time signature at beat
+    // case 1: there is no time signature
+    if (i == 0 && len == 0) {
+        return ROUND(beat);
+    // case 2: beat falls approximately on time signature
+    } else if (i < len && within(time_sigs[i].beat, beat, ALG_EPS)) {
+        return time_sigs[i].beat;
+    // case 3: beat is after no time signature and before one
+    } else if (i == 0) {
+        double trial_beat = ROUND(beat);
+        // it is possible that we rounded up past a time signature
+        if (trial_beat > time_sigs[0].beat - ALG_EPS) {
+            return time_sigs[0].beat;
+        }
+        return trial_beat;
+    }
+    // case 4: beat is after some time signature
+    double trial_beat = time_sigs[i - 1].beat + 
+                        ROUND(beat - time_sigs[i - 1].beat);
+    // rounding may advance trial_beat past next time signature:
+    if (i < len && trial_beat > time_sigs[i].beat - ALG_EPS) {
+        return time_sigs[i].beat;
+    }      
+    return trial_beat;
+}
+
+
+Alg_tracks::~Alg_tracks()
+{
+    reset();
+}
+
+
+void Alg_tracks::expand_to(int new_max)
+{
+    maxlen = new_max;
+    Alg_track_ptr *new_tracks = new Alg_track_ptr[maxlen];
+    // now do copy
+    memcpy(new_tracks, tracks, len * sizeof(Alg_track_ptr));
+    if (tracks) {
+        delete[] tracks;
+    }
+    tracks = new_tracks;
+}	
+
+
+void Alg_tracks::expand()
+{
+    maxlen = (maxlen + 5);   // extra growth for small sizes
+    maxlen += (maxlen >> 2); // add 25%
+    expand_to(maxlen);
+}
+
+
+void Alg_tracks::append(Alg_track_ptr track)
+{
+    if (maxlen <= len) {
+        expand();
+    }
+    tracks[len] = track;
+    len++;
+}
+
+
+void Alg_tracks::add_track(int track_num, Alg_time_map_ptr time_map,
+                           bool seconds)
+    // Create a new track at index track_num.
+    // If track already exists, this call does nothing.
+    // If highest previous track is not at track_num-1, then
+    // create tracks at len, len+1, ..., track_num.
+{
+    assert(track_num >= 0);
+    if (track_num == maxlen) {
+        // use eponential growth to insert tracks sequentially
+        expand();
+    } else if (track_num > maxlen) {
+        // grow to exact size for random inserts
+        expand_to(track_num + 1);
+    }
+    if (track_num < len) return; // don't add if already there
+    while (len <= track_num) {
+        tracks[len] = new Alg_track(time_map, seconds);
+        //printf("allocated track at %d (%x, this %x) = %x\n", len, 
+        //       &(tracks[len]), this, tracks[len]);
+        len++;
+    }
+}
+
+
+void Alg_tracks::reset()
+{
+    // all track events are incorporated into the seq,
+    // so all we need to delete are the arrays of pointers
+    for (int i = 0; i < len; i++) {
+        // printf("deleting track at %d (%x, this %x) = %x\n", i, &(tracks[i]), 
+        //       this, tracks[i]);
+        delete tracks[i];
+    }
+    if (tracks) delete [] tracks;
+    tracks = NULL;
+    len = 0;
+    maxlen = 0;
+}
+
+
+void Alg_tracks::set_in_use(bool flag)
+{
+    for (int i = 0; i < len; i++) {
+        tracks[i]->in_use = flag;
+    }
+}
+
+
+void Alg_iterator::expand_to(int new_max)
+{
+    maxlen = new_max;
+    Alg_pending_event_ptr new_pending_events = new Alg_pending_event[maxlen];
+    // now do copy
+    memcpy(new_pending_events, pending_events, 
+           len * sizeof(Alg_pending_event));
+    if (pending_events) {
+        delete[] pending_events;
+    }
+    pending_events = new_pending_events;
+}	
+
+
+void Alg_iterator::expand()
+{
+    maxlen = (maxlen + 5);   // extra growth for small sizes
+    maxlen += (maxlen >> 2); // add 25%
+    expand_to(maxlen);
+}
+
+
+Alg_iterator::~Alg_iterator()
+{
+    if (pending_events) {
+        delete[] pending_events;
+    }
+}
+
+
+/* in the heap, the children of N are (N+1)*2 and (N+1)*2-1, so
+ * the parent of N is (N+1)/2-1. This would be easier if arrays
+ * were 1-based instead of 0-based
+ */
+#define HEAP_PARENT(loc) ((((loc) + 1) / 2) - 1)
+#define FIRST_CHILD(loc) (((loc) * 2) + 1)
+
+void Alg_iterator::show()
+{
+    for (int i = 0; i < len; i++) {
+        Alg_pending_event_ptr p = &(pending_events[i]);
+        printf("    %d: %p[%ld]@%g on %d\n", i, p->events, p->index, 
+               p->offset, p->note_on);
+    }
+}
+
+
+bool Alg_iterator::earlier(int i, int j)
+// see if event i is earlier than event j
+{
+    // note-offs are scheduled ALG_EPS early so that if a note-off is
+    // followed immediately with the same timestamp by a note-on (common
+    // in MIDI files), the note-off will be scheduled first
+
+    double t_i = pending_events[i].time;
+    double t_j = pending_events[j].time;
+
+    if (t_i < t_j) return true;
+    // not sure if this case really exists or this is the best rule, but
+    // we want to give precedence to note-off events
+    else if (t_i == t_j && pending_events[j].note_on) return true;
+    return false;
+}
+
+
+void Alg_iterator::insert(Alg_events_ptr events, long index, 
+                          bool note_on, void *cookie, double offset)
+{
+    if (len == maxlen) expand();
+    pending_events[len].events = events;
+    pending_events[len].index = index;
+    pending_events[len].note_on = note_on;
+    pending_events[len].cookie = cookie;
+    pending_events[len].offset = offset;
+    Alg_event_ptr event = (*events)[index];
+    pending_events[len].time = (note_on ?  event->time : 
+                                event->get_end_time() - ALG_EPS) + offset;
+    /* BEGIN DEBUG *
+        printf("insert %p=%p[%d] @ %g\n", event, events, index, 
+               pending_events[len].time);
+        printf("    is_note %d note_on %d time %g dur %g end_time %g offset %g\n",
+               event->is_note(), note_on, event->time, event->get_duration(), 
+               event->get_end_time(), offset);
+    }
+     * END DEBUG */
+    int loc = len;
+    int loc_parent = HEAP_PARENT(loc);
+    len++;
+    // sift up:
+    while (loc > 0 &&
+           earlier(loc, loc_parent)) {
+        // swap loc with loc_parent
+        Alg_pending_event temp = pending_events[loc];
+        pending_events[loc] = pending_events[loc_parent];
+        pending_events[loc_parent] = temp;
+        loc = loc_parent;
+        loc_parent = HEAP_PARENT(loc);
+    }
+}
+
+
+bool Alg_iterator::remove_next(Alg_events_ptr &events, long &index, 
+                               bool &note_on, void *&cookie, 
+                               double &offset, double &time)
+{
+    if (len == 0) return false; // empty!
+    events = pending_events[0].events;
+    index = pending_events[0].index;
+    note_on = pending_events[0].note_on;
+    offset = pending_events[0].offset;
+    cookie = pending_events[0].cookie;
+    offset = pending_events[0].offset;
+    time = pending_events[0].time;
+    len--;
+    pending_events[0] = pending_events[len];
+    // sift down
+    long loc = 0;
+    long loc_child = FIRST_CHILD(loc);
+    while (loc_child < len) {
+        if (loc_child + 1 < len) {
+            if (earlier(loc_child + 1, loc_child)) {
+                loc_child++;
+            }
+        }
+        if (earlier(loc_child, loc)) {
+            Alg_pending_event temp = pending_events[loc];
+            pending_events[loc] = pending_events[loc_child];
+            pending_events[loc_child] = temp;
+            loc = loc_child;
+            loc_child = FIRST_CHILD(loc);
+        } else {
+            loc_child = len;
+        }
+    }
+    //    printf("After remove:"); show();
+    return true;
+}
+
+
+Alg_seq::Alg_seq(const char *filename, bool smf, double *offset_ptr)
+{
+    basic_initialization();
+    ifstream inf(filename, smf ? ios::binary | ios::in : ios::in);
+    if (inf.fail()) {
+        error = alg_error_open;
+        return;
+    }
+    if (smf) {
+        error = alg_smf_read(inf, this);
+        if (offset_ptr) *offset_ptr = 0.0;
+    } else {
+        error = alg_read(inf, this, offset_ptr);
+    }
+    inf.close();
+}
+
+
+Alg_seq::Alg_seq(istream &file, bool smf, double *offset_ptr)
+{
+    basic_initialization();
+    if (smf) {
+        error = alg_smf_read(file, this);
+        if (offset_ptr) *offset_ptr = 0.0;
+    } else {
+        error = alg_read(file, this, offset_ptr);
+    }
+}
+
+void Alg_seq::seq_from_track(Alg_track_ref tr)
+{
+    type = 's';
+    // copy everything
+    set_beat_dur(tr.get_beat_dur());
+    set_real_dur(tr.get_real_dur());
+    // copy time_map
+    set_time_map(new Alg_time_map(tr.get_time_map()));
+    units_are_seconds = tr.get_units_are_seconds();
+
+    if (tr.get_type() == 's') {
+        Alg_seq_ref s = *(tr.to_alg_seq());
+        channel_offset_per_track = s.channel_offset_per_track;
+        add_track(s.tracks() - 1);
+        // copy each track
+        for (int i = 0; i < tracks(); i++) {
+            Alg_track_ref from_track = *(s.track(i));
+            Alg_track_ref to_track = *(track(i));
+            to_track.set_beat_dur(from_track.get_beat_dur());
+            to_track.set_real_dur(from_track.get_real_dur());
+            if (from_track.get_units_are_seconds()) 
+                to_track.convert_to_seconds();
+            for (int j = 0; j < from_track.length(); j++) {
+                Alg_event_ptr event = copy_event(from_track[j]);
+                to_track.append(event);
+            }
+        }
+    } else if (tr.get_type() == 't') {
+        add_track(0);
+        channel_offset_per_track = 0;
+        Alg_track_ptr to_track = track(0);
+        to_track->set_beat_dur(tr.get_beat_dur());
+        to_track->set_real_dur(tr.get_real_dur());
+        for (int j = 0; j < tr.length(); j++) {
+            Alg_event_ptr event = copy_event(tr[j]);
+            to_track->append(event);
+        }
+    } else {
+        assert(false); // expected track or sequence
+    }
+}
+
+
+int Alg_seq::tracks()
+{
+    return track_list.length();
+}
+
+
+Alg_track_ptr Alg_seq::track(int i)
+{
+    assert(0 <= i && i < track_list.length());
+    return &(track_list[i]);
+}
+
+#pragma warning(disable: 4715) // ok not to return a value here
+
+Alg_event_ptr &Alg_seq::operator[](int i) 
+{
+    int ntracks = track_list.length();
+    int tr = 0;
+    while (tr < ntracks) {
+        Alg_track *a_track = track(tr);
+        if (a_track && i < a_track->length()) {
+            return (*a_track)[i];
+        } else if (a_track) {
+            i -= a_track->length();
+        }
+        tr++;
+    }
+    assert(false); // out of bounds
+}
+#pragma warning(default: 4715)
+
+
+void Alg_seq::convert_to_beats()
+{
+    if (!units_are_seconds) return;
+    for (int i = 0; i < tracks(); i++) {
+        track(i)->convert_to_beats();
+    }
+    // note that the Alg_seq inherits units_are_seconds from an
+    // empty track. Each track also has a (redundant) field called
+    // units are seconds. These should always be consistent.
+    units_are_seconds = false;
+}
+
+
+void Alg_seq::convert_to_seconds()
+{
+    if (units_are_seconds) return;
+    //printf("convert_to_seconds, tracks %d\n", tracks());
+    //printf("last_tempo of seq: %g on map %x\n", 
+    //       get_time_map()->last_tempo, get_time_map());
+    for (int i = 0; i < tracks(); i++) {
+        //printf("last_tempo of track %d: %g on %x\n", i,
+        //       track(i)->get_time_map()->last_tempo, 
+        //       track(i)->get_time_map());
+        track(i)->convert_to_seconds();
+    }
+    // update our copy of last_note_off (which may or may not be valid)
+    last_note_off = time_map->beat_to_time(last_note_off);
+    // note that the Alg_seq inherits units_are_seconds from an
+    // empty track. Each track also has a (redundant) field called
+    // units are seconds. These should always be consistent.
+    units_are_seconds = true;
+}
+
+
+Alg_track_ptr Alg_seq::cut_from_track(int track_num, double start, 
+                                      double dur, bool all)
+{
+    assert(track_num >= 0 && track_num < tracks());
+    Alg_track_ptr tr = track(track_num);
+    return tr->cut(start, dur, all);
+}
+
+
+void Alg_seq::copy_time_sigs_to(Alg_seq *dest)
+{
+    // copy time signatures
+    for (int i = 0; i < time_sig.length(); i++) {
+        dest->time_sig.insert(time_sig[i].beat, time_sig[i].num, 
+                              time_sig[i].den);
+    }
+}
+
+
+void Alg_seq::set_time_map(Alg_time_map *map)
+{
+    Alg_track::set_time_map(map);
+    for (int i = 0; i < tracks(); i++) {
+        track(i)->set_time_map(map);
+    }
+}
+
+
+Alg_seq_ptr Alg_seq::cut(double start, double len, bool all)
+    // return sequence from start to start+len and modify this
+    // sequence by removing that time-span
+{
+    double dur = get_dur();
+    // fix parameters to fall within existing sequence
+    if (start > dur) return NULL; // nothing to cut
+    if (start < 0) start = 0; // can't start before sequence starts
+    if (start + len > dur) // can't cut after end:
+        len = dur - start; 
+
+    Alg_seq_ptr result = new Alg_seq();
+    Alg_time_map_ptr map = new Alg_time_map(get_time_map());
+    result->set_time_map(map);
+    copy_time_sigs_to(result);
+    result->units_are_seconds = units_are_seconds;
+    result->track_list.reset();
+
+    for (int i = 0; i < tracks(); i++) {
+        Alg_track_ptr cut_track = cut_from_track(i, start, len, all);
+        result->track_list.append(cut_track);
+        // initially, result->last_note_off is zero. We want to know the
+        // maximum over all cut_tracks, so compute that here:
+        result->last_note_off = MAX(result->last_note_off, 
+                                    cut_track->last_note_off);
+        // since we're moving to a new sequence, change the track's time_map
+        result->track_list[i].set_time_map(map);
+    }
+
+    // put units in beats to match time_sig's. Note that we need
+    // two different end times. For result, we want the time of the
+    // last note off, but for cutting out the time signatures in this,
+    // we use len.
+    double ts_start = start;
+    double ts_end = start + len;
+    double ts_dur = dur;
+    double ts_last_note_off = start + result->last_note_off;
+    if (units_are_seconds) {
+        ts_start = time_map->time_to_beat(ts_start);
+        ts_end = time_map->time_to_beat(ts_end);
+        ts_last_note_off = time_map->time_to_beat(ts_last_note_off);
+        ts_dur = time_map->time_to_beat(ts_dur);
+    }
+    // result is shifted from start to 0 and has length len, but
+    // time_sig and time_map are copies from this. Adjust time_sig,
+    // time_map, and duration fields in result. The time_sig and 
+    // time_map data is retained out to last_note_off so that we have
+    // information for the entire duration of all the notes, even though
+    // this might extend beyond the duration of the track. (Warning:
+    // no info is retained for notes with negative times.)
+    result->time_sig.trim(ts_start, ts_last_note_off);
+    result->time_map->trim(start, start + result->last_note_off, 
+                           result->units_are_seconds);
+    // even though there might be notes sticking out beyond len, the
+    // track duration is len, not last_note_off. (Warning: if all is
+    // true, there may also be notes at negative offsets. These times
+    // cannot be mapped between beat and time representations, so there
+    // may be subtle bugs or unexpected behaviors in that case.)
+    result->set_dur(len);
+
+    // we sliced out a portion of each track, so now we need to
+    // slice out the corresponding sections of time_sig and time_map
+    // as well as to adjust the duration.
+    time_sig.cut(ts_start, ts_end, ts_dur);
+    time_map->cut(start, len, units_are_seconds);
+    set_dur(dur - len);
+
+    return result;
+}
+
+
+void Alg_seq::insert_silence_in_track(int track_num, double t, double len)
+{
+    Alg_track_ptr tr = track(track_num);
+    tr->insert_silence(t, len);
+}
+
+
+void Alg_seq::insert_silence(double t, double len)
+{
+    for (int i = 0; i < tracks(); i++) {
+        insert_silence_in_track(i, t, len);
+    }
+    double t_beats = t;
+    double len_beats = len;
+    // insert into time_sig array; use time_sig_paste,
+    // which requires us to build a simple time_sig array
+    if (units_are_seconds) {
+        time_map->insert_time(t, len);
+        t_beats = time_map->time_to_beat(t);
+        len_beats = time_map->time_to_beat(t + len) - t_beats;
+    } else {
+        time_map->insert_beats(t_beats, len_beats);
+    }
+    time_sig.insert_beats(t_beats, len_beats);
+    // Final duration is defined to be t + len + whatever was
+    // in the sequence after t (if any). This translates to
+    // t + len + max(dur - t, 0)
+    set_dur(t + len + max(get_dur() - t, 0.0));
+}
+
+
+Alg_track_ptr Alg_seq::copy_track(int track_num, double t, double len, bool all)
+{
+    return track_list[track_num].copy(t, len, all);
+}
+
+
+Alg_seq *Alg_seq::copy(double start, double len, bool all)
+{
+    // fix parameters to fall within existing sequence
+    if (start > get_dur()) return NULL; // nothing to copy
+    if (start < 0) start = 0; // can't copy before sequence starts
+    if (start + len > get_dur()) // can't copy after end:
+        len = get_dur() - start; 
+
+    // return (new) sequence from start to start + len
+    Alg_seq_ptr result = new Alg_seq();
+    Alg_time_map_ptr map = new Alg_time_map(get_time_map());
+    result->set_time_map(map);
+    copy_time_sigs_to(result);
+    result->units_are_seconds = units_are_seconds;
+    result->track_list.reset();
+
+    for (int i = 0; i < tracks(); i++) {
+        Alg_track_ptr copy = copy_track(i, start, len, all);
+        result->track_list.append(copy);
+        result->last_note_off = MAX(result->last_note_off, 
+                                    copy->last_note_off);
+        // since we're copying to a new seq, change the track's time_map
+        result->track_list[i].set_time_map(map);
+    }
+
+    // put units in beats to match time_sig's. Note that we need
+    // two different end times. For result, we want the time of the
+    // last note off, but for cutting out the time signatures in this,
+    // we use len.
+    double ts_start = start;
+    double ts_end = start + len;
+    double ts_last_note_off = start + result->last_note_off;
+    if (units_are_seconds) {
+        ts_start = time_map->time_to_beat(ts_start);
+        ts_end = time_map->time_to_beat(ts_end);
+        ts_last_note_off = time_map->time_to_beat(ts_last_note_off);
+    }
+
+    result->time_sig.trim(ts_start, ts_last_note_off);
+    result->time_map->trim(start, start + result->last_note_off,
+                           units_are_seconds);
+    result->set_dur(len);
+    return result;
+}
+
+
+void Alg_seq::paste(double start, Alg_seq *seq)
+{
+    // Insert seq at time, opening up space for it.
+    // To manipulate time map, we need units as beats.
+    // Save original form so we can convert back if necessary.
+    bool units_should_be_seconds = units_are_seconds;
+    bool seq_units_should_be_seconds = seq->get_units_are_seconds();
+    if (units_are_seconds) {
+        start = time_map->time_to_beat(start);
+        convert_to_beats();
+    }
+    seq->convert_to_beats();
+
+    // do a paste on each track
+    int i;
+    for (i = 0; i < seq->tracks(); i++) {
+        if (i >= tracks()) {
+            add_track(i);
+        }
+        track(i)->paste(start, seq->track(i));
+    }
+    // make sure all tracks were opened up for an insert, even if
+    // there is nothing to insert
+    while (i < tracks()) {
+        track(i)->insert_silence(start, seq->get_dur());
+        i++;
+    }
+    // paste in tempo track
+    time_map->paste(start, seq);
+    // paste in time signatures
+    time_sig.paste(start, seq);
+    set_dur(get_beat_dur() + seq->get_dur());
+    assert(!seq->units_are_seconds && !units_are_seconds);
+    if (units_should_be_seconds) {
+        convert_to_seconds();
+    }
+    if (seq_units_should_be_seconds) {
+        seq->convert_to_seconds();
+    }
+}
+
+
+void Alg_seq::merge(double t, Alg_event_list_ptr seq)
+{
+    // seq must be an Alg_seq:
+    assert(seq->get_type() == 's');
+    Alg_seq_ptr s = (Alg_seq_ptr) seq;
+    for (int i = 0; i < s->tracks(); i++) {
+        if (tracks() <= i) add_track(i);
+        track(i)->merge(t, s->track(i));
+    }
+}
+
+
+void Alg_seq::silence_track(int track_num, double start, double len, bool all)
+{
+    // remove events in [time, time + len) and close gap
+    Alg_track_ptr tr = track(track_num);
+    tr->silence(start, len, all);
+}
+
+
+void Alg_seq::silence(double t, double len, bool all)
+{
+    for (int i = 0; i < tracks(); i++) {
+        silence_track(i, t, len, all);
+    }
+}
+
+
+void Alg_seq::clear_track(int track_num, double start, double len, bool all)
+{
+    // remove events in [time, time + len) and close gap
+    Alg_track_ptr tr = track(track_num);
+    tr->clear(start, len, all);
+}
+
+
+void Alg_seq::clear(double start, double len, bool all)
+{
+    // Fix parameters to fall within existing sequence
+    double dur = get_dur();
+    if (start > dur) return; // nothing to cut
+    if (start < 0) start = 0; // can't start before sequence starts
+    if (start + len > dur) // can't cut after end:
+        len = dur - start;
+
+    for (int i = 0; i < tracks(); i++)
+        clear_track(i, start, len, all);
+
+    // Put units in beats to match time_sig's.
+    double ts_start = start;
+    double ts_end = start + len;
+    double ts_dur = dur;
+    if (units_are_seconds) {
+        ts_start = time_map->time_to_beat(ts_start);
+        ts_end = time_map->time_to_beat(ts_end);
+        ts_dur = time_map->time_to_beat(ts_dur);
+    }
+
+    // we sliced out a portion of each track, so now we need to
+    // slice out the corresponding sections of time_sig and time_map
+    // as well as to adjust the duration.
+    time_sig.cut(ts_start, ts_end, ts_dur);
+    time_map->cut(start, len, units_are_seconds);
+    set_dur(dur - len);
+}
+
+
+Alg_event_list_ptr Alg_seq::find_in_track(int track_num, double t, double len,
+                                          bool all, long channel_mask, 
+                                          long event_type_mask)
+{
+    return track(track_num)->find(t, len, all, channel_mask, event_type_mask);
+}
+
+
+Alg_seq::~Alg_seq()
+{
+    int i, j;
+    // Tracks does not delete Alg_events elements
+    for (j = 0; j < track_list.length(); j++) {
+        Alg_track &notes = track_list[j];
+        // Alg_events does not delete notes 
+        for (i = 0; i < notes.length(); i++) {
+            Alg_event_ptr event = notes[i];
+            delete event;
+        }
+    }
+}
+
+
+long Alg_seq::seek_time(double time, int track_num)
+// find index of first score event after time
+{
+    long i;
+    Alg_events &notes = track_list[track_num];
+    for (i = 0; i < notes.length(); i++) {
+        if (notes[i]->time > time) {
+            break;
+        }
+    }
+    return i;
+}
+
+
+bool Alg_seq::insert_beat(double time, double beat)
+// insert a time,beat pair
+// return true or false (false indicates an error, no update)
+// it is an error to imply a negative tempo or to insert at
+// a negative time
+{
+    if (time < 0 || beat < 0) return false;
+    if (time == 0.0 && beat > 0)
+        time = 0.000001; // avoid infinite tempo, offset time by 1us
+    if (time == 0.0 && beat == 0.0)
+        return true; // (0,0) is already in the map!
+    convert_to_beats(); // beats are invariant when changing tempo
+    time_map->insert_beat(time, beat);
+    return true;
+}
+
+
+// input is time, return value is time
+double Alg_seq::nearest_beat_time(double time, double *beat)
+{
+    double b = time_map->time_to_beat(time);
+    b = time_sig.nearest_beat(b);
+    if (beat) *beat = b;
+    return time_map->beat_to_time(b);
+}
+
+
+bool Alg_seq::stretch_region(double b0, double b1, double dur)
+{
+    bool units_should_be_seconds = units_are_seconds;
+    convert_to_beats();
+    bool result = time_map->stretch_region(b0, b1, dur);
+    if (units_should_be_seconds) convert_to_seconds();
+    return result;
+}
+
+
+bool Alg_seq::insert_tempo(double bpm, double beat)
+{
+    double bps = bpm / 60.0; // convert to beats per second
+    // change the tempo at the given beat until the next beat event
+    if (beat < 0) return false;
+    convert_to_beats(); // beats are invariant when changing tempo
+    double time = time_map->beat_to_time(beat);
+    long i = time_map->locate_time(time);
+    if (i >= time_map->beats.len || !within(time_map->beats[i].time, time, 0.000001)) {
+        insert_beat(time, beat);
+    }
+    // now i is index of beat where tempo will change
+    if (i == time_map->beats.len - 1) {
+        time_map->last_tempo = bps;
+        time_map->last_tempo_flag = true;
+    } else { // adjust all future beats
+        // compute the difference in beats
+        double diff = time_map->beats[i + 1].beat - time_map->beats[i].beat;
+        // convert beat difference to seconds at new tempo
+        diff = diff / bps;
+        // figure out old time difference:
+        double old_diff = time_map->beats[i + 1].time - time;
+        // compute difference too
+        diff = diff - old_diff;
+        // apply new_diff to score and beats
+        while (i < time_map->beats.len) {
+            time_map->beats[i].time = time_map->beats[i].time + diff;
+            i++;
+        }
+    }
+    return true;
+}
+
+
+void Alg_seq::add_event(Alg_event_ptr event, int track_num)
+    // add_event puts an event in a given track (track_num). 
+    // The track must exist. The time and duration of the
+    // event are interpreted according to whether the Alg_seq 
+    // is currently in beats or seconds (see convert_to_beats())
+{
+    track_list[track_num].insert(event);
+/*
+    if (event->is_note()) {
+        Alg_note_ptr n = (Alg_note_ptr) event;
+        trace("note %d at %g for %g\n", n->get_identifier(), n->time, n->dur);
+    }
+ */
+}
+
+
+double Alg_seq::get_tempo(double beat)
+{
+    return time_map->get_tempo(beat);
+}
+
+
+bool Alg_seq::set_tempo(double bpm, double start_beat, double end_beat)
+// set tempo from start_beat to end_beat
+{
+    // this is an optimization, the test is repeated in Alg_time_seq::set_tempo()
+    if (start_beat >= end_beat) return false;
+    bool units_should_be_seconds = units_are_seconds;
+    convert_to_beats();
+    double dur = get_dur();
+    bool result = time_map->set_tempo(bpm, start_beat, end_beat);
+    // preserve sequence duration in beats when tempo changes
+    set_dur(dur);
+    if (units_should_be_seconds) convert_to_seconds();
+    return result;
+}
+
+
+double Alg_seq::get_bar_len(double beat)
+{
+    return time_sig.get_bar_len(beat);
+}
+
+
+void Alg_seq::set_time_sig(double beat, double num, double den)
+{
+    time_sig.insert(beat, num, den);
+}
+
+
+void Alg_seq::beat_to_measure(double beat, long *measure, double *m_beat,
+                          double *num, double *den)
+{
+    // return [measure, beat, num, den]
+    double m = 0; // measure number
+    double bpm;
+    int tsx;
+    bpm = 4;
+    // assume 4/4 if no time signature
+    double prev_beat = 0;
+    double prev_num = 4;
+    double prev_den = 4;
+
+    if (beat < 0) beat = 0; // negative measures treated as zero
+
+    for (tsx = 0; tsx < time_sig.length(); tsx++) {
+        if (time_sig[tsx].beat <= beat) {
+            // round m up to an integer (but allow for a small
+            // numerical inaccuracy)
+            m = m + (long) (0.99 + (time_sig[tsx].beat - prev_beat) / bpm);
+            bpm = time_sig[tsx].num * 4 / time_sig[tsx].den;
+            prev_beat = time_sig[tsx].beat;
+            prev_num = time_sig[tsx].num;
+            prev_den = time_sig[tsx].den;
+        } else {
+            m = m + (beat - prev_beat) / bpm;
+            *measure = (long) m;
+            *m_beat = (m - *measure) * bpm;
+            *num = prev_num;
+            *den = prev_den;
+            return;
+        }
+    }
+    // if we didn't return yet, compute after last time signature
+    Alg_time_sig initial(0, 4, 4);
+    Alg_time_sig &prev = initial;
+    if (tsx > 0) { // use last time signature
+        prev = time_sig[time_sig.length() - 1];
+    }
+    bpm = prev.num * 4 / prev.den;
+    m = m + (beat - prev.beat) / bpm;
+    *measure = (long) m;
+    *m_beat = (m - *measure) * bpm;
+    *num = prev.num;
+    *den = prev.den;
+}
+
+/*
+void Alg_seq::set_events(Alg_event_ptr *events, long len, long max)
+{
+    convert_to_seconds(); // because notes are in seconds
+    notes.set_events(events, len, max);
+}
+*/
+
+
+void Alg_iterator::begin_seq(Alg_seq_ptr s, void *cookie, double offset)
+{
+    // keep an array of indexes into tracks
+    // printf("new pending\n");
+    int i;
+    for (i = 0; i < s->track_list.length(); i++) {
+        if (s->track_list[i].length() > 0) {
+            insert(&(s->track_list[i]), 0, true, cookie, offset);
+        }
+    }    
+}
+
+
+Alg_event_ptr Alg_iterator::next(bool *note_on, void **cookie_ptr, 
+                                 double *offset_ptr, double end_time)
+    // return the next event in time from any track
+{
+    bool on;
+    double when;
+    if (!remove_next(events_ptr, index, on, cookie, offset, when)) {
+        return NULL;
+    }
+    if (note_on) *note_on = on;
+    Alg_event_ptr event = (*events_ptr)[index];
+    if (on) {
+        if (note_off_flag && event->is_note() &&
+            (end_time == 0 ||
+             (*events_ptr)[index]->get_end_time() + offset < end_time)) {
+            // this was a note-on, so insert pending note-off
+            insert(events_ptr, index, false, cookie, offset);
+        }
+        // for both note-ons and updates, insert next event (at index + 1)
+        // DO NOT INCREMENT index: it must be preserved for request_note_off()
+        if (index + 1 < events_ptr->length() &&
+            (end_time == 0 || // zero means ignore end time
+             // stop iterating when end time is reached
+             (*events_ptr)[index + 1]->time + offset < end_time)) {
+            insert(events_ptr, index + 1, true, cookie, offset);
+        }
+    }
+    if (cookie_ptr) *cookie_ptr = cookie;
+    if (offset_ptr) *offset_ptr = offset;
+    return event;
+}
+
+
+void Alg_iterator::request_note_off()
+{
+    assert(index >= 0 && index < events_ptr->length());
+    insert(events_ptr, index, false, cookie, offset);
+}
+
+
+void Alg_iterator::end()
+{
+}
+
+
+void Alg_seq::merge_tracks()
+{
+    long sum = 0;
+    long i;
+    for (i = 0; i < track_list.length(); i++) {
+        sum = sum + track(i)->length();
+    }
+    // preallocate array for efficiency:
+    Alg_event_ptr *notes = new Alg_event_ptr[sum];
+    Alg_iterator iterator(this, false);
+    iterator.begin();
+    long notes_index = 0;
+
+    Alg_event_ptr event;
+    while ((event = iterator.next())) {
+        notes[notes_index++] = event;
+    }
+    track_list.reset(); // don't need them any more
+    add_track(0);
+    track(0)->set_events(notes, sum, sum);
+    iterator.end();
+}
+
+
+void Alg_seq::set_in_use(bool flag)
+{
+    Alg_track::set_in_use(flag);
+    track_list.set_in_use(flag);
+}
+
+
+// sr_letter_to_type = {"i": 'Integer', "r": 'Real', "s": 'String',
+//                     "l": 'Logical', "a": 'Symbol'}
+
+
diff --git a/frontends/CsoundAC/allegro.h b/frontends/CsoundAC/allegro.h
new file mode 100644
index 0000000..7c99eb7
--- /dev/null
+++ b/frontends/CsoundAC/allegro.h
@@ -0,0 +1,1122 @@
+// Portsmf (also known as Allegro):
+// music representation system, with
+//      extensible in-memory sequence structure
+//      upward compatible with MIDI
+//      implementations in C++ and Serpent
+//      external, text-based representation
+//      compatible with Aura
+//
+// SERIALBUFFER CLASS
+// 
+// The Serial_buffer class is defined to support serialization and
+// unserialization. A Serial_buffer is just a block of memory with
+// a length and a read/write pointer. When writing, it can expand. 
+//
+// SERIALIZATION
+//
+// The Alg_track class has static members:
+//    ser_buf -- a Serial_buffer
+// When objects are serialized, they are first written to 
+// ser_buf, which is expanded whenever necessary. Then, when
+// the length is known, new memory is allocated and the data
+// is copied to a correctly-sized buffer and returned to caller.
+// The "external" (callable from outside the library) 
+// serialization functions are:
+//    Alg_track::serialize()
+//    Alg_seq::serialize()
+// The "internal" serialization functions to be called from within
+// the library are:
+//    Alg_track::serialize_track(bool text)
+//    Alg_seq::serialize_seq(bool text)
+//    Alg_track::serialize_parameter(
+//            Alg_parameter *parm, bool text)
+// These internal serialize functions append data to ser_buf The text 
+// flag says to write an ascii representation as opposed to binary.
+//  
+// UNSERIALIZATION:
+//
+// The Alg_track class has a static member: 
+//     unserialize(char *buffer, long len)
+// that will unserialize anything -- an Alg_track or an Alg_seq.
+// No other function should be called from outside the library.
+// Internal unserialize functions are:
+//     Alg_seq::unserialize_seq()
+//     Alg_track::unserialize_track()
+//     Alg_track::unserialize_parameter(Alg_parameter_ptr parm_ptr)
+// Just as serialization uses ser_buf for output, unserialization uses
+// unser_buf for reading. unser_buf is another static member of Alg_track.
+
+#ifndef ALLEGRO_H
+#define ALLEGRO_H
+#include <assert.h>
+#include <istream>
+#include <ostream>
+
+#define ALG_EPS 0.000001 // epsilon
+#define ALG_DEFAULT_BPM 100.0 // default tempo
+
+// are d1 and d2 within epsilon of each other?
+bool within(double d1, double d2, double epsilon);
+
+char *heapify(const char *s); // put a string on the heap
+
+
+// Alg_attribute is an atom in the symbol table
+// with the special addition that the last
+// character is prefixed to the string; thus,
+// the attribute 'tempor' (a real) is stored
+// as 'rtempor'. To get the string name, just
+// use attribute+1.
+typedef const char *Alg_attribute;
+#define alg_attr_name(a) ((a) + 1)
+#define alg_attr_type(a) (*(a))
+
+// Alg_atoms is a symbol table of Alg_attributes and other
+// unique strings
+class Alg_atoms {
+public:
+    Alg_atoms() {
+        maxlen = len = 0;
+        atoms = NULL;
+    }
+    // Note: the code is possibly more correct and faster without the 
+    // following destructor, which will only run after the program takes 
+    // a normal exit. Cleaning up after the program exit slows down the exit,
+    // and will cause problems if any other destructor tries to reference an
+    // Alg_atom (which will now be freed). The advantage of this code is
+    // that Alg_atoms will not be reported as memory leaks by automation
+    // that doesn't know better. -RBD
+    virtual ~Alg_atoms() {
+        for (int i = 0; i < len; i++) {
+            delete atoms[i];
+        }
+        if (atoms) delete [] atoms;
+    }
+    // insert/lookup an atttribute
+    Alg_attribute insert_attribute(Alg_attribute attr);
+    // insert/lookup attribute by name (without prefixed type)
+    Alg_attribute insert_string(const char *name);
+private:
+    long maxlen;
+    long len;
+    Alg_attribute *atoms;
+
+    // insert an Attriubute not in table after moving attr to heap
+    Alg_attribute insert_new(const char *name, char attr_type);
+    void expand(); // make more space
+};
+
+extern Alg_atoms symbol_table;
+
+
+// an attribute/value pair. Since Alg_attribute names imply type,
+// we try to keep attributes and values packaged together as
+// Alg_parameter class
+typedef class Alg_parameter {
+public:
+    // This constructor guarantees that an Alg_parameter can be
+    // deleted safely without further initialization. It does not
+    // do anything useful, so it is expected that the creator will
+    // set attr and store a value in the appropriate union field.
+    Alg_attribute attr;
+    union {
+        double r;// real
+        const char *s; // string
+        long i;  // integer
+        bool l;  // logical
+        const char *a; // symbol (atom)
+    }; // anonymous union
+
+    Alg_parameter() { attr = "i"; }
+    ~Alg_parameter();
+    void copy(Alg_parameter *); // copy from another parameter
+    const char attr_type() { return alg_attr_type(attr); }
+    const char *attr_name() { return alg_attr_name(attr); }
+    void set_attr(Alg_attribute a) { attr = a; }
+    void show();
+} *Alg_parameter_ptr;
+
+
+// a list of attribute/value pairs
+typedef class Alg_parameters {
+public:
+    class Alg_parameters *next;
+    Alg_parameter parm;
+
+    Alg_parameters(Alg_parameters *list) {
+        next = list;
+    }
+
+    //~Alg_parameters() { }
+
+    // each of these routines takes address of pointer to the list
+    // insertion is performed without checking whether or not a
+    // parameter already exists with this attribute. See find() and
+    // remove_key() to assist in checking for and removing existing 
+    // parameters.
+    // Note also that these insert_* methods convert name to an
+    // attribute. If you have already done the symbol table lookup/insert
+    // you can do these operations faster (in which case we should add
+    // another set of functions that take attributes as arguments.)
+    static void insert_real(Alg_parameters **list, const char *name, double r);
+    // insert string will copy string to heap
+    static void insert_string(Alg_parameters **list, const char *name, 
+                              const char *s);
+    static void insert_integer(Alg_parameters **list, const char *name, long i);
+    static void insert_logical(Alg_parameters **list, const char *name, bool l);
+    static void insert_atom(Alg_parameters **list, const char *name, 
+                            const char *s);
+    static Alg_parameters *remove_key(Alg_parameters **list, const char *name);
+    // find an attribute/value pair
+    Alg_parameter_ptr find(Alg_attribute attr);
+} *Alg_parameters_ptr;
+
+
+// these are type codes associated with certain attributes
+// see Alg_track::find() where these are bit positions in event_type_mask
+#define ALG_NOTE 0 // This is a note, not an update
+#define ALG_GATE 1 // "gate"
+#define ALG_BEND 2 // "bend"
+#define ALG_CONTROL 3 // "control"
+#define ALG_PROGRAM 4 // "program"
+#define ALG_PRESSURE 5 // "pressure"
+#define ALG_KEYSIG 6 // "keysig"
+#define ALG_TIMESIG_NUM 7 // "timesig_num"
+#define ALG_TIMESIG_DEN 8 // "timesig_den"
+#define ALG_OTHER 9 // any other value
+
+// abstract superclass of Alg_note and Alg_update:
+typedef class Alg_event {
+protected:
+    bool selected;
+    char type; // 'e' event, 'n' note, 'u' update
+    long key; // note identifier
+    static const char* description; // static buffer for debugging (in Alg_event)
+public:
+    double time;
+    long chan;
+    virtual void show() = 0;
+    // Note: there is no Alg_event() because Alg_event is an abstract class.
+    bool is_note() { return (type == 'n'); }   // tell whether an Alg_event is a note
+    bool is_update() { return (type == 'u'); } // tell whether an Alg_event is a parameter update
+    char get_type() { return type; }   // return 'n' for note, 'u' for update
+    int get_type_code();  // 1 = volume change,      2 = pitch bend,
+                          // 3 = control change,     4 = program change,
+                          // 5 = pressure change,    6 = key signature,
+                          // 7 = time sig numerator, 8 = time sig denominator
+    bool get_selected() { return selected; }         
+    void set_selected(bool b) { selected = b; }     
+    // Note: notes are identified by a (channel, identifier) pair. 
+    // For midi, the identifier is the key number (pitch). The identifier
+    // does not have to represent pitch; it's main purpose is to identify
+    // notes so that they can be named by subsequent update events.
+    long get_identifier() { return key; } // get MIDI key or note identifier of note or update
+    void set_identifier(long i) { key = i; } // set the identifier
+    // In all of these set_ methods, strings are owned by the caller and
+    // copied as necessary by the callee. For notes, an attribute/value
+    // pair is added to the parameters list. For updates, the single
+    // attribute/value parameter pair is overwritten. In all cases, the
+    // attribute (first argument) must agree in type with the second arg.
+    // The last letter of the attribute implies the type (see below).
+    void set_parameter(Alg_parameter_ptr new_parameter);
+    void set_string_value(const char *attr, const char *value);
+    void set_real_value(const char *attr, double value);
+    void set_logical_value(const char *attr, bool value);
+    void set_integer_value(const char *attr, long value);
+    void set_atom_value(const char *attr, const char *atom);
+
+    // Some note methods. These fail (via assert()) if this is not a note:
+    //
+    float get_pitch();// get pitch in steps -- use this even for MIDI
+    float get_loud(); // get loudness (MIDI velocity)
+    // times are in seconds or beats, depending upon the units_are_seconds 
+    // flag in the containing sequence
+    double get_start_time(); // get start time in seconds or beats
+    double get_end_time();   // get end time in seconds or beats
+    double get_duration();   // get duration in seconds or beats
+    void set_pitch(float);
+    void set_loud(float);
+    void set_duration(double);
+
+    // Notes have lists of attribute values. Attributes are converted
+    // to/from strings in this API to avoid explicit use of Alg_attribute
+    // types. Attribute names end with a type designation: 's', 'r', 'l',
+    // 'i', or 'a'.
+    //
+    bool has_attribute(const char *attr);      // test if note has attribute/value pair
+    char get_attribute_type(const char *attr); // get the associated type: 
+        // 's' = string, 
+        // 'r' = real (double), 'l' = logical (bool), 'i' = integer (long),
+        // 'a' = atom (char *), a unique string stored in Alg_seq
+    // get the string value
+    const char *get_string_value(const char *attr, const char *value = NULL);
+    // get the real value
+    double get_real_value(const char *attr, double value = 0.0);
+    // get the logical value
+    bool get_logical_value(const char *attr, bool value = false);
+    // get the integer value
+    long get_integer_value(const char *attr, long value = 0);
+    // get the atom value
+    const char *get_atom_value(const char *attr, const char *value = NULL);
+    void delete_attribute(const char *attr);   // delete an attribute/value pair
+        // (ignore if no matching attribute/value pair exists)
+
+    // Some attribute/value methods. These fail if this is not an update.
+    // Attributes are converted to/from strings to avoid explicit use
+    // of Alg_attribute types.
+    // 
+    const char *get_attribute();    // get the update's attribute (string)
+    char get_update_type();   // get the update's type: 's' = string, 
+        // 'r' = real (double), 'l' = logical (bool), 'i' = integer (long),
+        // 'a' = atom (char *), a unique string stored in Alg_seq
+    const char *get_string_value(); // get the update's string value
+        // Notes: Caller does not own the return value. Do not modify.
+        // Do not use after underlying Alg_seq is modified.
+    double get_real_value();  // get the update's real value
+    bool get_logical_value(); // get the update's logical value
+    long get_integer_value(); // get the update's integer value
+    const char *get_atom_value();   // get the update's atom value
+        // Notes: Caller does not own the return value. Do not modify.
+        // The return value's lifetime is forever.
+
+    // Auxiliary function to aid in editing tracks
+    // Returns true if the event overlaps the given region
+    bool overlap(double t, double len, bool all);
+
+    const char *GetDescription(); // computes a text description of this event
+    // the result is in a static buffer, not thread-safe, just for debugging.
+    Alg_event() { selected = false; }
+    virtual ~Alg_event() {}
+} *Alg_event_ptr;
+
+
+typedef class Alg_note : public Alg_event {
+public:
+    virtual ~Alg_note();
+    Alg_note(Alg_note *); // copy constructor
+    float pitch; // pitch in semitones (69 = A440)
+    float loud;  // dynamic corresponding to MIDI velocity
+    double dur;   // duration in seconds (normally to release point)
+    Alg_parameters_ptr parameters; // attribute/value pair list
+    Alg_note() { type = 'n'; parameters = NULL; }
+    void show();
+} *Alg_note_ptr;
+
+
+typedef class Alg_update : public Alg_event {
+public:
+    virtual ~Alg_update() {};
+    Alg_update(Alg_update *); // copy constructor
+    Alg_parameter parameter; // an update contains one attr/value pair
+
+
+    Alg_update() { type = 'u'; }
+    void show();
+} *Alg_update_ptr;
+
+
+// a sequence of Alg_event objects
+typedef class Alg_events {
+private:
+    long maxlen;
+    void expand();
+protected:
+    long len;
+    Alg_event_ptr *events; // events is array of pointers
+public:
+    // sometimes, it is nice to have the time of the last note-off.
+    // In the current implementation,
+    // this field is set by append to indicate the time of the 
+    // last note-off in the current unit, so it should be correct after 
+    // creating a new track and adding notes to it. It is *not*
+    // updated after uninsert(), so use it with care.
+    double last_note_off;
+    // initially false, in_use can be used to mark "do not delete". If an
+    // Alg_events instance is deleted while "in_use", an assertion will fail.
+    bool in_use;
+    virtual int length() { return len; }
+    Alg_event_ptr &operator[](int i) {
+        assert(i >= 0 && i < len);
+        return events[i];
+    }
+    Alg_events() {
+        maxlen = len = 0;
+        events = NULL;
+        last_note_off = 0;
+        in_use = false;
+    }
+    // destructor deletes the events array, but not the
+    // events themselves
+    virtual ~Alg_events();
+    void set_events(Alg_event_ptr *e, long l, long m) {
+        if (events) delete [] events;
+        events = e; len = l; maxlen = m; }
+    // for use by Alg_track and Alg_seq
+    void insert(Alg_event_ptr event);
+    void append(Alg_event_ptr event);
+    Alg_event_ptr uninsert(long index);
+} *Alg_events_ptr;
+
+class Alg_track;
+
+typedef class Alg_event_list : public Alg_events {
+protected:
+    char type; // 'e' Alg_event_list, 't' Alg_track, 's' Alg_seq
+    static const char *last_error_message;
+    Alg_track *events_owner; // if this is an Alg_event_list,
+        // the events are owned by an Alg_track or an Alg_seq
+    static int sequences;  // to keep track of sequence numbers
+    int sequence_number;   // this sequence number is incremented
+        // whenever an edit is performed on an Alg_track or Alg_seq.
+        // When an Alg_event_list is created to contain pointers to
+        // a subset of an Alg_track or Alg_seq (the events_owner), 
+        // the Alg_event_list gets a copy of the events_owner's 
+        // sequence_number. If the events_owner is edited, the pointers
+        // in this Alg_event_list will become invalid. This is detected
+        // (for debugging) as differing sequence_numbers.
+
+    // every event list, track, and seq has a duration.
+    // Usually the duration is set when the list is constructed, e.g.
+    // when you extract from 10 to 15 seconds, the duration is 5 secs.
+    // The duration does not tell you when is the last note-off.
+    // duration is recorded in both beats and seconds:
+    double beat_dur; 
+    double real_dur;
+public:
+    // the client should not create one of these, but these are
+    // returned from various track and seq operations. An
+    // Alg_event_list "knows" the Alg_track or Alg_seq that "owns"
+    // the events. All events in an Alg_event_list must belong
+    // to the same Alg_track or Alg_seq structure.
+    // When applied to an Alg_seq, events are enumerated track
+    // by track with increasing indices. This operation is not
+    // particularly fast on an Alg_seq.
+    virtual Alg_event_ptr &operator[](int i);
+    Alg_event_list() { sequence_number = 0; 
+        beat_dur = 0.0; real_dur = 0.0; events_owner = NULL; type = 'e'; }
+    Alg_event_list(Alg_track *owner);
+
+    char get_type() { return type; }
+    Alg_track *get_owner() { return events_owner; }
+
+    // The destructor does not free events because they are owned
+    // by a track or seq structure.
+    virtual ~Alg_event_list();
+
+    // Returns the duration of the sequence in beats or seconds
+    double get_beat_dur() { return beat_dur; }
+    void set_beat_dur(double d) { beat_dur = d; }
+    double get_real_dur() { return real_dur; }
+    void set_real_dur(double d) { real_dur = d; }
+
+    // Events are stored in time order, so when you change the time of
+    // an event, you must adjust the position. When you call set_start_time
+    // on an Alg_event_list, the Alg_event_list is not modified, but the
+    // Alg_track that "owns" the event is modified. If the owner is an 
+    // Alg_seq, this may require searching the seq for the track containing
+    // the event. This will mean a logN search of every track in the seq
+    // (but if this turns out to be a problem, we can store each event's
+    // track owner in the Alg_event_list.)
+    virtual void set_start_time(Alg_event *event, double);
+    // get text description of run-time errors detected, clear error
+    const char *get_last_error_message() { return last_error_message; }
+    // Implementation hint: keep a sequence number on each Alg_track that is 
+    // incremented anytime there is a structural change. (This behavior is
+    // inherited by Alg_seq as well.) Copy the sequence number to any
+    // Alg_event_list object when it is created. Whenever you access an 
+    // Alg_event_list, using operator[], assert that the Alg_event_list sequence
+    // number matches the Alg_seq sequence number. This will guarantee that you
+    // do not try to retain pointers to events beyond the point where the events
+    // may no longer exist.
+} *Alg_event_list_ptr, &Alg_event_list_ref;
+
+
+// Alg_beat is used to contruct a tempo map
+typedef class Alg_beat {
+public:
+    Alg_beat(double t, double b) {
+        time = t; beat = b; }
+    Alg_beat() {};
+    double time;
+    double beat;
+} *Alg_beat_ptr;
+
+
+// Alg_beats is a list of Alg_beat objects used in Alg_seq
+typedef class Alg_beats {
+private:
+    long maxlen;
+    void expand();
+public:
+    long len;
+    Alg_beat_ptr beats;
+    Alg_beat &operator[](int i) {
+        assert(i >= 0 && i < len);
+        return beats[i];
+    }
+    Alg_beats() {
+        maxlen = len = 0;
+        beats = NULL;
+        expand();
+        beats[0].time = 0;
+        beats[0].beat = 0;
+        len = 1;
+    }
+    ~Alg_beats() {
+        if (beats) delete[] beats;
+    }
+    void insert(long i, Alg_beat_ptr beat);
+} *Alg_beats_ptr;
+
+
+typedef class Alg_time_map {
+private:
+    int refcount;
+public:
+    Alg_beats beats; // array of Alg_beat
+    double last_tempo;
+    bool last_tempo_flag;
+    Alg_time_map() {
+        last_tempo = ALG_DEFAULT_BPM / 60.0; // note: this value ignored until
+                // last_tempo_flag is set; nevertheless, the default
+                // tempo is 100.
+        last_tempo_flag = true;
+        refcount = 0;
+    }
+    Alg_time_map(Alg_time_map *map); // copy constructor
+    long length() { return beats.len; }
+    void show();
+    long locate_time(double time);
+    long locate_beat(double beat);
+    double beat_to_time(double beat);
+    double time_to_beat(double time);
+    // Time map manipulations: it is prefered to call the corresponding
+    // methods in Alg_seq. If you manipulate an Alg_time_map directly,
+    // you should take care to convert all tracks that use the time map
+    // to beats or seconds as appropriate: Normally if you insert a beat
+    // you want tracks to be in time units and if you insert a tempo change
+    // you want tracks to be in beat units.
+    void insert_beat(double time, double beat);   // add a point to the map
+    bool insert_tempo(double tempo, double beat); // insert a tempo change
+    // get the tempo starting at beat
+    double get_tempo(double beat);
+    // set the tempo over a region
+    bool set_tempo(double tempo, double start_beat, double end_beat);
+    bool stretch_region(double b0, double b1, double dur);
+    void cut(double start, double len, bool units_are_seconds);
+    void trim(double start, double end, bool units_are_seconds);
+    void paste(double start, Alg_track *tr);
+    // insert a span of time. If start is at a tempo change, then
+    // the span of time runs at the changed tempo
+    void insert_time(double start, double len);
+    // insert a span of beats. If start is at a tempo change, the
+    // tempo change takes effect before the inserted beats
+    void insert_beats(double start, double len);
+    void dereference() {
+        if (--refcount <= 0) delete this;
+    }
+    void reference() {
+        refcount++;
+    }
+} *Alg_time_map_ptr;
+
+
+// Serial_buffer is an abstract class with common elements of
+//     Serial_read_buffer and Serial_write_buffer
+class Serial_buffer {
+  protected:
+    char *buffer;
+    char *ptr;
+    long len;
+  public:
+    Serial_buffer() {
+        buffer = NULL;
+        ptr = NULL;
+        len = 0;
+    }
+    virtual ~Serial_buffer() { }
+
+    long get_posn() { return (long) (ptr - buffer); }
+    long get_len() { return len; }
+};
+
+
+typedef class Serial_read_buffer : public Serial_buffer {
+public:
+    // note that a Serial_read_buffer is initialized for reading by
+    // setting buffer, but it is not the Serial_read_buffer's responsibility
+    // to delete the buffer (owner might want to reuse it), so the destructor
+    // does nothing.
+    virtual ~Serial_read_buffer() {  }
+#if defined(_WIN32)
+#pragma warning(disable: 546) // cast to int is OK, we only want low 7 bits
+#pragma warning(disable: 4311) // type cast pointer to long warning
+#endif
+    void get_pad() { while (((long) ptr) & 7) ptr++; }
+#if defined(_WIN32)
+#pragma warning(default: 4311 546)
+#endif
+    // Prepare to read n bytes from buf. The caller must manage buf: it is
+    // valid until reading is finished, and it is caller's responsibility
+    // to free buf when it is no longer needed.
+    void init_for_read(void *buf, long n) {
+        buffer = (char *) buf;
+        ptr = (char *) buf;
+        len = n;
+    }
+    char get_char() { return *ptr++; }
+    void unget_chars(int n) { ptr -= n; } // undo n get_char() calls
+    long get_int32() { long i = *((long *) ptr); ptr += 4; return i; }
+    float get_float() { float f = *((float *) ptr); ptr += 4; return f; }
+    double get_double() { double d = *((double *) ptr); ptr += sizeof(double); 
+                          return d; }
+    const char *get_string() { char *s = ptr; char *fence = buffer + len;
+                         assert(ptr < fence);
+                         while (*ptr++) assert(ptr < fence);
+                         get_pad();
+                         return s; }
+    void check_input_buffer(long needed) {
+        assert(get_posn() + needed <= len); }
+} *Serial_read_buffer_ptr;
+
+
+typedef class Serial_write_buffer: public Serial_buffer {
+  public:
+    // Note: allegro.cpp declares one static instance of Serial_buffer to 
+    // reduce large memory (re)allocations when serializing tracks for UNDO.
+    // This destructor will only run when the program exits, which will only
+    // add overhead to the exit process, but it will eliminate an incorrect
+    // report of memory leakage from automation that doesn't know better. -RBD
+    virtual ~Serial_write_buffer() {
+        if (buffer) delete [] buffer;
+    }
+    void init_for_write() { ptr = buffer; }
+    // store_long writes a long at a given offset
+    void store_long(long offset, long value) {
+        assert(offset <= get_posn() - 4);
+        long *loc = (long *) (buffer + offset);
+        *loc = value;
+    }
+    void check_buffer(long needed);
+    void set_string(const char *s) { 
+        char *fence = buffer + len;
+        assert(ptr < fence);
+        // two brackets surpress a g++ warning, because this is an
+        // assignment operator inside a test.
+        while ((*ptr++ = *s++)) assert(ptr < fence);
+        // 4311 is type cast pointer to long warning
+        // 4312 is type cast long to pointer warning
+#if defined(_WIN32)
+#pragma warning(disable: 4311 4312)
+#endif
+        assert((char *)(((long) (ptr + 7)) & ~7) <= fence);
+#if defined(_WIN32)
+#pragma warning(default: 4311 4312)
+#endif
+        pad(); }
+    void set_int32(long v) { *((long *) ptr) = v; ptr += 4; }
+    void set_double(double v) { *((double *) ptr) = v; ptr += 8; }
+    void set_float(float v) { *((float *) ptr) = v; ptr += 4; }
+    void set_char(char v) { *ptr++ = v; }
+#if defined(_WIN32)
+#pragma warning(disable: 546) // cast to int is OK, we only want low 7 bits
+#pragma warning(disable: 4311) // type cast pointer to long warning
+#endif
+    void pad() { while (((long) ptr) & 7) set_char(0); }
+#if defined(_WIN32)
+#pragma warning(default: 4311 546)
+#endif
+    void *to_heap(long *len) {
+        *len = get_posn();
+        char *newbuf = new char[*len];
+        memcpy(newbuf, buffer, *len);
+        return newbuf;
+    }
+} *Serial_write_buffer_ptr;
+
+typedef class Alg_seq *Alg_seq_ptr;
+
+typedef class Alg_track : public Alg_event_list {
+protected:
+    Alg_time_map *time_map;
+    bool units_are_seconds;
+    char *get_string(char **p, long *b);
+    long get_int32(char **p, long *b);
+    double get_double(char **p, long *b);
+    float get_float(char **p, long *b);
+    static Serial_read_buffer ser_read_buf;
+    static Serial_write_buffer ser_write_buf;
+    void serialize_parameter(Alg_parameter *parm);
+    // *buffer_ptr points to binary data, bytes_ptr points to how many
+    // bytes have been used so far, len is length of binary data
+    void unserialize_parameter(Alg_parameter_ptr parm_ptr);
+public:
+    void serialize_track();
+    void unserialize_track();
+    virtual Alg_event_ptr &operator[](int i) {
+        assert(i >= 0 && i < len);
+        return events[i];
+    }
+    Alg_track() { units_are_seconds = false; time_map = NULL; 
+                  set_time_map(NULL); type = 't'; }
+    // initialize empty track with a time map
+    Alg_track(Alg_time_map *map, bool seconds); 
+
+    Alg_event_ptr copy_event(Alg_event_ptr event); // make a complete copy
+    
+    Alg_track(Alg_track &track);  // copy constructor, does not copy time_map
+    // copy constructor: event_list is copied, map is installed and referenced
+    Alg_track(Alg_event_list_ref event_list, Alg_time_map_ptr map, 
+              bool units_are_seconds);
+    virtual ~Alg_track() { // note: do not call set_time_map(NULL)!
+        if (time_map) time_map->dereference(); time_map = NULL; }
+
+    // Returns a buffer containing a serialization of the
+    // file.  It will be an ASCII representation unless text is true.
+    // *buffer gets a newly allocated buffer pointer. The caller must free it.
+    // *len gets the length of the serialized track
+    virtual void serialize(void **buffer, long *bytes);
+
+    // Try to read from a memory buffer.  Automatically guess
+    // whether it's MIDI or text.
+    static Alg_track *unserialize(void *buffer, long len);
+
+    // If the track is really an Alg_seq and you need to access an
+    // Alg_seq method, coerce to an Alg_seq with this function:
+    Alg_seq_ptr to_alg_seq() {
+        return (get_type() == 's' ? (Alg_seq_ptr) this : NULL); }
+
+    // Are we using beats or seconds?
+    bool get_units_are_seconds() { return units_are_seconds; }
+    // Change units 
+    virtual void convert_to_beats();
+    virtual void convert_to_seconds();
+    void set_dur(double dur);
+    double get_dur() { return (units_are_seconds ? real_dur : beat_dur); }
+
+    // Every Alg_track may have an associated time_map. If no map is
+    // specified, or if you set_time_map(NULL), then the behavior 
+    // should be as if there is a constant tempo of 100 beats/minute
+    // (this constant is determined by ALG_DEFAULT_BPM).
+    // Recommendation: create a static global tempo map object. When
+    // any operation that needs a tempo map gets NULL, use the global
+    // tempo map. (Exception: any operation that would modify the
+    // tempo map should raise an error -- you don't want to change the
+    // default tempo map.)
+    virtual void set_time_map(Alg_time_map *map);
+    Alg_time_map *get_time_map() { return time_map; }
+
+    // Methods to create events. The returned event is owned by the caller.
+    // Use delete to get rid of it unless you call add() -- see below.
+    //
+    Alg_note *create_note(double time, int channel, int identifier, 
+                           float pitch, float loudness, double duration);
+    // Note: after create_update(), caller should use set_*_value() to
+    // initialize the attribute/value pair:
+    Alg_update *create_update(double time, int channel, int identifier);
+    // Adds a new event - it is automatically inserted into the
+    // correct order in the sequence based on its timestamp.
+    // The ownership passes from the caller to this Alg_seq. The
+    // event is not copied.
+    virtual void add(Alg_event *event) { insert(event); }
+
+    //
+    // Editing regions
+    //
+
+    // Deletes the notes that start within the given region
+    // and returns them in a new sequence.  The start times
+    // of the notes in the returned sequence are shifted
+    // by -t.  The notes after the region get shifted over
+    // to fill the gap. In an Alg_seq, the tempo track is edited
+    // in a similar way
+    // and the cut tempo information is retained in the new seq.
+    // ONLY NOTES THAT START WITHIN THE REGION ARE CUT unless
+    // "all" is true in which case all notes that intersect
+    // the region are copied. CUT NOTES
+    // MAY EXTEND BEYOND THE DURATION OF THE RESULTING SEQ.
+    // The return type is the same as this (may be Alg_seq).
+    // All times including len are interpreted according to 
+    // units_are_seconds in the track.
+    virtual Alg_track *cut(double t, double len, bool all);
+
+    // Like cut() but doesn't remove the notes from the original
+    // sequence. The Alg_events are copied, not shared. ONLY EVENTS
+    // THAT START WITHIN THE REGION ARE COPIED unless "all" is true
+    // in which case all notes that intersect the region are
+    // copied. COPIED NOTES MAY
+    // EXTEND BEYOND THE DURATION OF THE RESULTING SEQ.
+    // The return type is the same as this (may be Alg_seq).
+    virtual Alg_track *copy(double t, double len, bool all);
+
+    // Inserts a sequence in the middle, shifting some notes
+    // over by the duration of the seq, which is first converted
+    // to the same units (seconds or beats) as this. (This makes
+    // a differece because the pasted data may change the tempo,
+    // and notes that overlap the borders will then experience
+    // a tempo change.)
+    // THE SEQ PARAMETER IS NOT MODIFIED, AND Alg_event's ARE
+    // COPIED, NOT SHARED.
+    // The type of seq must be Alg_seq if seq is an Alg_seq, or
+    // Alg_track if seq is an Alg_track or an Alg_event_list.
+    virtual void paste(double t, Alg_event_list *seq); // Shifts notes
+
+    // Merges two sequences with a certain offset. The offset is
+    // interpreted as either beats or seconds according to the 
+    // current units of this, and seq is converted to the same
+    // units as this. Except for a possible conversion to beats
+    // or seconds, the tempo track of seq (if any) is ignored. 
+    // (There is no way to merge tempo tracks.)
+    // THE SEQ PARAMETER IS NOT MODIFIED, AND Alg_event's ARE
+    // COPIED, NOT SHARED.
+    // The type of seq must be Alg_seq if seq is an Alg_seq, or
+    // Alg_track if seq is an Alg_track or an Alg_event_list.
+    virtual void merge(double t, Alg_event_list_ptr seq);
+
+    // Deletes and shifts notes to fill the gap. The tempo track
+    // is also modified accordingly. ONLY EVENTS THAT START WITHIN
+    // THE REGION ARE DELETED unless "all" is true, in which case
+    // all notes that intersect the region are cleared.
+    // NOTES THAT EXTEND FROM BEFORE THE
+    // REGION INTO THE REGION RETAIN THEIR DURATION IN EITHER
+    // BEATS OR SECONDS ACCORDING TO THE CURRENT UNITS OF this.
+    virtual void clear(double t, double len, bool all);
+
+    // Deletes notes but doesn't shift.  If the "all" argument
+    // is true, deletes all notes that intersect the range at all,
+    // not just those that start within it. The tempo track is 
+    // not affected.
+    virtual void silence(double t, double len, bool all);
+
+    // Simply shifts notes past time t over by len, which is given
+    // in either beats or seconds according to the units of this.
+    // The resulting interveal (t, t+len) may in fact contain notes
+    // that begin before t. The durations of notes are not changed.
+    // If this is an Alg_seq, the tempo track is expanded at t also.
+    virtual void insert_silence(double t, double len);
+
+    //
+    // Accessing for screen display
+    //
+
+    // A useful generic function to retrieve only certain
+    // types of events.  The masks should be bit-masks defined
+    // somewhere else. Part of the mask allows us to search for 
+    // selected events. If this is an Alg_seq, search all tracks
+    // (otherwise, call track[i].find())
+    // If channel_mask == 0, accept ALL channels
+    virtual Alg_event_list *find(double t, double len, bool all,
+                                 long channel_mask, long event_type_mask);
+
+    virtual void set_in_use(bool flag) { in_use = flag; }
+    //
+    // MIDI playback
+    //
+    // See Alg_iterator
+} *Alg_track_ptr, &Alg_track_ref;
+
+
+// Alg_time_sig represents a single time signature;
+// although not recommended, time_signatures may have arbitrary
+// floating point values, e.g. 4.5 beats per measure
+typedef class Alg_time_sig {
+public:
+    double beat; // when does this take effect?
+    double num;  // what is the "numerator" (top number?)
+    double den;  // what is the "denominator" (bottom number?)
+    Alg_time_sig(double b, double n, double d) {
+        beat = b; num = n; den = d;
+    }
+    Alg_time_sig() {
+        beat = 0; num = 0; den = 0;
+    }
+    void beat_to_measure(double beat, double *measure, double *m_beat,
+                         double *num, double *den);
+
+} *Alg_time_sig_ptr;
+
+
+// Alg_time_sigs is a dynamic array of time signatures
+//
+// The default (empty) time_sigs has 4/4 time at beat 0.
+// Each time_sig object in time_sigs represents the beginning
+// of a measure. If there is a beat missing, e.g. in the first
+// measure, you can represent this by inserting another 
+// time_sig at the next measure beginning. Each time_sig implies
+// an infinite sequence of full measures until the next time_sig.
+// If you insert a time_sig and one already exist near the same
+// beat, the old one is replaced, thus re-barring every measure
+// until the next time_sig.
+class Alg_time_sigs {
+private:
+    long maxlen;
+    void expand(); // make more space
+    long len;
+    Alg_time_sig_ptr time_sigs;
+public:
+    Alg_time_sigs() {
+        maxlen = len = 0;
+        time_sigs = NULL;
+    }
+    Alg_time_sig &operator[](int i) { // fetch a time signature
+        assert(i >= 0 && i < len);
+        return time_sigs[i];
+    }
+    ~Alg_time_sigs() {
+        if (time_sigs) delete[] time_sigs;
+    }
+    void show();
+    long length() { return len; }
+    int find_beat(double beat);
+    // get the number of beats per measure starting at beat
+    double get_bar_len(double beat);
+    void insert(double beat, double num, double den, bool force = false);
+    void cut(double start, double end, double dur); // remove from start to end
+    void trim(double start, double end); // retain just start to end
+    void paste(double start, Alg_seq *seq);
+    void insert_beats(double beat, double len); // insert len beats at beat
+    // find the nearest beat (see Alg_seq::nearest_beat) to beat
+    double nearest_beat(double beat);
+};
+
+
+// a sequence of Alg_events objects
+typedef class Alg_tracks {
+private:
+    long maxlen;
+    void expand();
+    void expand_to(int new_max);
+    long len;
+public:
+    Alg_track_ptr *tracks; // tracks is array of pointers
+    Alg_track &operator[](int i) {
+        assert(i >= 0 && i < len);
+        return *tracks[i];
+    }
+    long length() { return len; }
+    Alg_tracks() {
+        maxlen = len = 0;
+        tracks = NULL;
+    }
+    ~Alg_tracks();
+    // Append a track to tracks. This Alg_tracks becomes the owner of track.
+    void append(Alg_track_ptr track);
+    void add_track(int track_num, Alg_time_map_ptr time_map, bool seconds);
+    void reset();
+    void set_in_use(bool flag); // handy to set in_use flag on all tracks
+} *Alg_tracks_ptr;
+
+
+typedef enum {
+    alg_no_error = 0,      // no error reading Allegro or MIDI file
+    alg_error_open = -800, // could not open Allegro or MIDI file
+    alg_error_syntax   // something found in the file that could not be parsed;
+    // generally you should ignore syntax errors or look at the printed error 
+    // messages because there are some things in standard midi files that we do
+    // not handle; (maybe we should only set alg_error_syntax when there is a
+    // real problem with the file as opposed to when there is some warning
+    // message for the user)
+} Alg_error;
+
+
+typedef struct Alg_pending_event {
+    void *cookie; // client-provided sequence identifier
+    Alg_events *events; // the array of events
+    long index; // offset of this event
+    bool note_on; // is this a note-on or a note-off (if applicable)?
+    double offset; // time offset for events
+    double time; // time for this event
+} *Alg_pending_event_ptr;
+
+
+typedef class Alg_iterator {
+private:
+    long maxlen;
+    void expand();
+    void expand_to(int new_max);
+    long len;
+    Alg_seq_ptr seq;
+    Alg_pending_event *pending_events;
+    // the next four fields are mainly for request_note_off()
+    Alg_events_ptr events_ptr; // remembers events containing current event
+    long index; // remembers index of current event
+    void *cookie; // remembers the cookie associated with next event
+    double offset;
+    void show();
+    bool earlier(int i, int j);
+    void insert(Alg_events_ptr events, long index, bool note_on, 
+                void *cookie, double offset);
+    // returns the info on the next pending event in the priority queue
+    bool remove_next(Alg_events_ptr &events, long &index, bool &note_on,
+                     void *&cookie, double &offset, double &time);
+public:
+    bool note_off_flag; // remembers if we are iterating over note-off
+                        // events as well as note-on and update events
+    long length() { return len; }
+    Alg_iterator(Alg_seq_ptr s, bool note_off) {
+        seq = s;
+        note_off_flag = note_off;
+        maxlen = len = 0;
+        pending_events = NULL;
+    }
+    // Normally, iteration is over the events in the one sequence used
+    // to instatiate the iterator (see above), but with this method, you
+    // can add more sequences to the iteration. Events are returned in
+    // time order, so effectively sequence events are merged.
+    // The optional offset is added to each event time of sequence s
+    // before merging/sorting. You should call begin_seq() for each
+    // sequence to be included in the iteration unless you call begin()
+    // (see below).
+    void begin_seq(Alg_seq_ptr s, void *cookie = NULL, double offset = 0.0);
+    ~Alg_iterator();
+    // Prepare to enumerate events in order. If note_off_flag is true, then
+    // iteration_next will merge note-off events into the sequence. If you
+    // call begin(), you should not normally call begin_seq(). See above.
+    void begin(void *cookie = NULL) { begin_seq(seq, cookie); }
+    // return next event (or NULL). If iteration_begin was called with
+    // note_off_flag = true, and if note_on is not NULL, then *note_on
+    // is set to true when the result value represents a note-on or update.
+    // (With note_off_flag, each Alg_note event is returned twice, once
+    // at the note-on time, with *note_on == true, and once at the note-off
+    // time, with *note_on == false. If a cookie_ptr is passed, then the
+    // cookie corresponding to the event is stored at that address
+    // If end_time is 0, iterate through the entire sequence, but if
+    // end_time is non_zero, stop iterating at the last event before end_time
+    Alg_event_ptr next(bool *note_on = NULL, void **cookie_ptr = NULL,
+                       double *offset_ptr = NULL, double end_time = 0); 
+    // Sometimes, the caller wants to receive note-off events for a subset
+    // of the notes, typically the notes that are played and need to be
+    // turned off. In this case, when a note is turned on, the client
+    // should call request_note_off(). This will insert a note-off into
+    // the queue for the most recent note returned by next(). 
+    void request_note_off();
+    void end();   // clean up after enumerating events
+} *Alg_iterator_ptr;
+
+
+// An Alg_seq is an array of Alg_events, each a sequence of Alg_event, 
+// with a tempo map and a sequence of time signatures
+//
+typedef class Alg_seq : public Alg_track {
+protected:
+    Alg_iterator_ptr pending; // iterator used internally by Alg_seq methods
+    void serialize_seq();
+    Alg_error error; // error code set by file readers
+    // an internal function used for writing Allegro track names
+    Alg_event_ptr write_track_name(std::ostream &file, int n, 
+                                   Alg_events &events);
+public:
+    int channel_offset_per_track; // used to encode track_num into channel
+    Alg_tracks track_list;       // array of Alg_events
+    Alg_time_sigs time_sig;
+    int beat_x;
+    void basic_initialization() {
+        error = alg_no_error;
+        units_are_seconds = true; type = 's';
+        channel_offset_per_track = 0;
+        add_track(0); // default is one empty track
+    }        
+    Alg_seq() {
+        basic_initialization();
+    }
+    // copy constructor -- if track is an Alg_seq, make a copy; if
+    //    track is just an Alg_track, the track becomes track 0
+    Alg_seq(Alg_track_ref track) { seq_from_track(track); }
+    Alg_seq(Alg_track_ptr track) { seq_from_track(*track); }
+    void seq_from_track(Alg_track_ref tr);
+    // create from file:
+    Alg_seq(std::istream &file, bool smf, double *offset_ptr = NULL);
+    // create from filename
+    Alg_seq(const char *filename, bool smf, double *offset_ptr = NULL);
+    virtual ~Alg_seq();
+    int get_read_error() { return error; }
+    void serialize(void **buffer, long *bytes);
+    void copy_time_sigs_to(Alg_seq *dest); // a utility function
+    void set_time_map(Alg_time_map *map);
+
+    // encode sequence structure into contiguous, moveable memory block
+    // address of newly allocated memory is assigned to *buffer, which must
+    // be freed by caller; the length of data is assigned to *len
+    void unserialize_seq();
+
+    // write an ascii representation to file
+    void write(std::ostream &file, bool in_secs, double offset = 0.0);
+    // returns true on success
+    bool write(const char *filename, double offset = 0.0);
+    void smf_write(std::ostream &file);
+    bool smf_write(const char *filename);
+
+    // Returns the number of tracks
+    int tracks();
+
+    // create a track
+    void add_track(int track_num) { 
+        track_list.add_track(track_num, get_time_map(), units_are_seconds); 
+    }
+
+    // Return a particular track. This Alg_seq owns the track, so the
+    // caller must not delete the result.
+    Alg_track_ptr track(int);
+
+    virtual Alg_event_ptr &operator[](int i);
+
+    virtual void convert_to_seconds();
+    virtual void convert_to_beats();
+
+    Alg_track_ptr cut_from_track(int track_num, double start, double dur, 
+                                 bool all);
+    Alg_seq *cut(double t, double len, bool all);
+    void insert_silence_in_track(int track_num, double t, double len);
+    void insert_silence(double t, double len);
+    Alg_track_ptr copy_track(int track_num, double t, double len, bool all);
+    Alg_seq *copy(double start, double len, bool all);
+    void paste(double start, Alg_seq *seq);
+    virtual void clear(double t, double len, bool all);
+    virtual void merge(double t, Alg_event_list_ptr seq);
+    virtual void silence(double t, double len, bool all);
+    void clear_track(int track_num, double start, double len, bool all);
+    void silence_track(int track_num, double start, double len, bool all);
+    Alg_event_list_ptr find_in_track(int track_num, double t, double len,
+                                     bool all, long channel_mask, 
+                                     long event_type_mask);
+
+    // find index of first score event after time
+    long seek_time(double time, int track_num);
+    bool insert_beat(double time, double beat);
+    // return the time of the beat nearest to time, also returns beat
+    // number through beat. This will correspond to an integer number
+    // of beats from the nearest previous time signature or 0.0, but
+    // since time signatures need not be on integer beat boundaries
+    // the beat location may not be on an integer beat (beat locations
+    // are measured from the beginning which is beat 0.
+    double nearest_beat_time(double time, double *beat);
+    // warning: insert_tempo may change representation from seconds to beats
+    bool insert_tempo(double bpm, double beat);
+    // change the duration from b0 to b1 (beats) to dur (seconds) by
+    // scaling the intervening tempos
+    bool stretch_region(double b0, double b1, double dur);
+    // add_event takes a pointer to an event on the heap. The event is not
+    // copied, and this Alg_seq becomes the owner and freer of the event.
+    void add_event(Alg_event_ptr event, int track_num);
+    void add(Alg_event_ptr event) { assert(false); } // call add_event instead
+    // get the tempo starting at beat
+    double get_tempo(double beat);
+    bool set_tempo(double bpm, double start_beat, double end_beat);
+
+    // get the bar length in beats starting at beat
+    double get_bar_len(double beat);
+    void set_time_sig(double beat, double num, double den);
+    void beat_to_measure(double beat, long *measure, double *m_beat,
+                         double *num, double *den);
+    // void set_events(Alg_event_ptr *events, long len, long max);
+    void merge_tracks();    // move all track data into one track
+    void set_in_use(bool flag); // set in_use flag on all tracks
+} *Alg_seq_ptr, &Alg_seq_ref;
+
+
+// see Alg_seq::Alg_seq() constructors that read from files
+// the following are for internal library implementation and are
+// moved to *_internal.h header files.
+//Alg_seq_ptr alg_read(std::istream &file, Alg_seq_ptr new_seq);
+//Alg_seq_ptr alg_smf_read(std::istream &file, Alg_seq_ptr new_seq);
+#endif
diff --git a/frontends/CsoundAC/allegrord.cpp b/frontends/CsoundAC/allegrord.cpp
new file mode 100644
index 0000000..87e1dcb
--- /dev/null
+++ b/frontends/CsoundAC/allegrord.cpp
@@ -0,0 +1,774 @@
+#include "assert.h"
+#include "stdlib.h"
+#include "string.h"
+#include "ctype.h"
+#include "trace.h"
+#include <string>
+#include <fstream>
+#include <algorithm>
+#include "strparse.h"
+#include "allegro.h"
+#include "algrd_internal.h"
+
+using namespace std;
+
+#define streql(s1, s2) (strcmp(s1, s2) == 0)
+#define field_max 80
+
+class Alg_reader {
+public:
+    istream *file;
+    string input_line;
+    int line_no;
+    String_parse line_parser;
+    bool line_parser_flag;
+    string field;
+    bool error_flag;
+    Alg_seq_ptr seq;
+    double tsnum;
+    double tsden;
+    double offset;
+    bool offset_found;
+
+    Alg_reader(istream *a_file, Alg_seq_ptr new_seq);
+    void readline();
+    Alg_parameters_ptr process_attributes(Alg_parameters_ptr attributes,
+                                          double time);
+    bool parse();
+    long parse_chan(string &field);
+    long parse_int(string &field);
+    int find_real_in(string &field, int n);
+    double parse_real(string &field);
+    void parse_error(string &field, long offset, char *message);
+    double parse_dur(string &field, double base);
+    double parse_after_dur(double dur, string &field, int n, double base);
+    double parse_loud(string &field);
+    long parse_key(string &field);
+    double parse_pitch(string &field);
+    long parse_after_key(int key, string &field, int n);
+    long find_int_in(string &field, int n);
+    bool parse_attribute(string &field, Alg_parameter_ptr parm);
+    bool parse_val(Alg_parameter_ptr param, string &s, int i);
+    bool check_type(char type_char, Alg_parameter_ptr param);
+};
+
+
+double Alg_reader::parse_pitch(string &field)
+{
+    if (isdigit(field[1])) {
+        int last = find_real_in(field, 1);
+        string real_string = field.substr(1, last - 1);
+        return atof(real_string.c_str());
+    } else {
+        return (double) parse_key(field);
+    }
+}
+
+
+// it is the responsibility of the caller to delete
+// the seq
+Alg_reader::Alg_reader(istream *a_file, Alg_seq_ptr new_seq)
+{
+    file = a_file; // save the file
+    line_parser_flag = false;
+    line_no = 0;
+    tsnum = 4; // default time signature
+    tsden = 4;
+    seq = new_seq;
+    offset = 0.0;
+    offset_found = false;
+}
+
+
+Alg_error alg_read(istream &file, Alg_seq_ptr new_seq, double *offset_ptr)
+    // read a sequence from allegro file
+{
+    assert(new_seq);
+    Alg_reader alg_reader(&file, new_seq);
+    bool err = alg_reader.parse();
+    if (!err && offset_ptr) {
+        *offset_ptr = alg_reader.offset;
+    }
+    return (err ? alg_error_syntax : alg_no_error);
+}
+
+
+void Alg_reader::readline()
+{
+    // a word about memory management: this Alg_reader has a
+    // member variable input_line that holds a line of input
+    // it is reused for each line. input_line is parsed by
+    // line_parser, which holds a reference to input_line
+    line_parser_flag = false;
+    if (getline(*file, input_line)) {
+        line_parser.init(&input_line);
+        line_parser_flag = true;
+        error_flag = false;
+    }
+}
+
+
+Alg_parameters_ptr Alg_reader::process_attributes(
+        Alg_parameters_ptr attributes, double time)
+{
+    // print "process_attributes:", attributes
+    bool ts_flag = false;
+    if (attributes) {
+        Alg_parameters_ptr a;
+        bool in_seconds = seq->get_units_are_seconds();
+        if (a = Alg_parameters::remove_key(&attributes, "tempor")) {
+            double tempo = a->parm.r;
+            seq->insert_tempo(tempo, seq->get_time_map()->time_to_beat(time));
+        }
+        if (a = Alg_parameters::remove_key(&attributes, "beatr")) {
+            double beat = a->parm.r;
+            seq->insert_beat(time, beat);
+        }
+        if (a = Alg_parameters::remove_key(&attributes, "timesig_numr")) {
+            tsnum = a->parm.r;
+            ts_flag = true;
+        }
+        if (a = Alg_parameters::remove_key(&attributes, "timesig_denr")) {
+            tsden = a->parm.r;
+            ts_flag = true;
+        }
+        if (ts_flag) {
+            seq->set_time_sig(seq->get_time_map()->time_to_beat(time),
+            tsnum, tsden);
+        }
+        if (in_seconds) seq->convert_to_seconds();
+    }
+    return attributes; // in case it was modified
+}
+
+
+bool Alg_reader::parse()
+{
+    int voice = 0;
+    int key = 60;
+    double loud = 100.0;
+    double pitch = 60.0;
+    double dur = 1.0;
+    double time = 0.0;
+    int track_num = 0;
+    seq->convert_to_seconds();
+    //seq->set_real_dur(0.0); // just in case it's not initialized already
+    readline();
+    bool valid = false; // ignore blank lines
+    while (line_parser_flag) {
+        bool time_flag = false;
+        bool next_flag = false;
+        double next;
+        bool voice_flag = false;
+        bool loud_flag = false;
+        bool dur_flag = false;
+        bool new_pitch_flag = false; // "P" syntax or "A"-"G" syntax
+        double new_pitch = 0.0;
+        bool new_key_flag = false;   // "K" syntax
+        int new_key = 0;
+        Alg_parameters_ptr attributes = NULL;
+        if (line_parser.peek() == '#') {
+            // look for #track
+            line_parser.get_nonspace_quoted(field);
+            if (streql(field.c_str(), "#track")) {
+                line_parser.get_nonspace_quoted(field); // number
+                field.insert(0, " "); // need char at beginning because
+                // parse_int ignores the first character of the argument
+                track_num = parse_int(field);
+                seq->add_track(track_num);
+
+                // maybe we have a sequence or track name
+                line_parser.get_remainder(field);
+                // if there is a non-space character after #track n then
+                // use it as sequence or track name. Note that because we
+                // skip over spaces, a sequence or track name cannot begin
+                // with leading blanks. Another decision is that the name
+                // must be at time zero
+                if (field.length() > 0) {
+                    // insert the field as sequence name or track name
+                    Alg_update_ptr update = new Alg_update;
+                    update->chan = -1;
+                    update->time = 0;
+                    update->set_identifier(-1);
+                    // sequence name is whatever is on track 0
+                    // other tracks have track names
+                    const char *attr =
+                            (track_num == 0 ? "seqnames" : "tracknames");
+                    update->parameter.set_attr(
+                            symbol_table.insert_string(attr));
+                    update->parameter.s = heapify(field.c_str());
+                    seq->add_event(update, track_num);
+                }
+            } else if (streql(field.c_str(), "#offset")) {
+                if (offset_found) {
+                    parse_error(field, 0, "#offset specified twice");
+                }
+                offset_found = true;
+                line_parser.get_nonspace_quoted(field); // number
+                field.insert(0, " "); // need char at beginning because
+                // parse_real ignores first character in the argument
+                offset = parse_real(field);
+            }
+        } else {
+            // we must have a track to insert into
+            if (seq->tracks() == 0) seq->add_track(0);
+            line_parser.get_nonspace_quoted(field);
+            char pk = line_parser.peek();
+            // attributes are parsed as two adjacent nonspace_quoted tokens
+            // so we have to conditionally call get_nonspace_quoted() again
+            if (pk && !isspace(pk)) {
+                string field2;
+                line_parser.get_nonspace_quoted(field2);
+                field.append(field2);
+            }
+            while (field[0]) {
+                char first = toupper(field[0]);
+                if (strchr("ABCDEFGKLPUSIQHW-", first)) {
+                    valid = true; // it's a note or event
+                }
+                if (first == 'V') {
+                    if (voice_flag) {
+                        parse_error(field, 0, "Voice specified twice");
+                    } else {
+                        voice = parse_chan(field);
+                    }
+                    voice_flag = true;
+                } else if (first == 'T') {
+                    if (time_flag) {
+                        parse_error(field, 0, "Time specified twice");
+                    } else {
+                        time = parse_dur(field, 0.0);
+                    }
+                    time_flag = true;
+                } else if (first == 'N') {
+                    if (next_flag) {
+                        parse_error(field, 0, "Next specified twice");
+                    } else {
+                        next = parse_dur(field, time);
+                    }
+                    next_flag = true;
+                } else if (first == 'K') {
+                    if (new_key_flag) {
+                        parse_error(field, 0, "Key specified twice");
+                    } else {
+                        new_key = parse_key(field);
+                        new_key_flag = true;
+                    }
+                } else if (first == 'L') {
+                    if (loud_flag) {
+                        parse_error(field, 0, "Loudness specified twice");
+                    } else {
+                        loud = parse_loud(field);
+                    }
+                    loud_flag = true;
+                } else if (first == 'P') {
+                    if (new_pitch_flag) {
+                        parse_error(field, 0, "Pitch specified twice");
+                    } else {
+                        new_pitch = parse_pitch(field);
+                        new_pitch_flag = true;
+                    }
+                } else if (first == 'U') {
+                    if (dur_flag) {
+                        parse_error(field, 0, "Dur specified twice");
+                    } else {
+                        dur = parse_dur(field, time);
+                        dur_flag = true;
+                    }
+                } else if (strchr("SIQHW", first)) {
+                    if (dur_flag) {
+                        parse_error(field, 0, "Dur specified twice");
+                    } else {
+                        // prepend 'U' to field, copy EOS too
+                        field.insert((unsigned int) 0, 1, 'U');
+                        dur = parse_dur(field, time);
+                        dur_flag = true;
+                    }
+                } else if (strchr("ABCDEFG", first)) {
+                    if (new_pitch_flag) {
+                        parse_error(field, 0, "Pitch specified twice");
+                    } else {
+                        // prepend 'P' to field
+                        field.insert((unsigned int) 0, 1, 'P');
+                        new_pitch = parse_pitch(field);
+                        new_pitch_flag = true;
+                    }
+                } else if (first == '-') {
+                    Alg_parameter parm;
+                    if (parse_attribute(field, &parm)) { // enter attribute-value pair
+                        attributes = new Alg_parameters(attributes);
+                        attributes->parm = parm;
+                        parm.s = NULL; // protect string from deletion by destructor
+                    }
+                } else {
+                    parse_error(field, 0, "Unknown field");
+                }
+
+                if (error_flag) {
+                    field[0] = 0; // exit the loop
+                } else {
+                    line_parser.get_nonspace_quoted(field);
+                    pk = line_parser.peek();
+                    // attributes are parsed as two adjacent nonspace_quoted 
+                    // tokens so we have to conditionally call 
+                    // get_nonspace_quoted() again
+                    if (pk && !isspace(pk)) {
+                        string field2;
+                        line_parser.get_nonspace_quoted(field2);
+                        field.append(field2);
+                    }
+                }
+            }
+            // a case analysis:
+            // Key < 128 implies pitch unless pitch is explicitly given
+            // Pitch implies Key unless key is explicitly given,
+            // Pitch is rounded to nearest integer to determine the Key
+            //    if necessary, so MIDI files will lose the pitch fraction
+            // A-G is a Pitch specification (therefore it implies Key)
+            //   K60 P60 -- both are specified, use 'em
+            //   K60 P60 C4 -- overconstrained, an error
+            //   K60 C4 -- OK, but K60 is already implied by C4
+            //   K60 -- OK, pitch is 60
+            //   C4 P60 -- over constrained
+            //   P60 -- OK, key is 60
+            //   P60.1 -- OK, key is 60
+            //   C4 -- OK, key is 60, pitch is 60
+            //   <nothing> -- OK, key and pitch from before
+            //   K200 P60 -- ok, pitch is 60
+            //   K200 with neither P60 nor C4 uses 
+            //       pitch from before
+
+            // figure out what the key/instance is:
+            if (new_key_flag) { // it was directly specified
+                key = new_key;
+            } else if (new_pitch_flag) {
+                // pitch was specified, but key was not; get key from pitch
+                key = (int) (new_pitch + 0.5); // round to integer key number
+            }
+            if (new_pitch_flag) {
+                pitch = new_pitch;
+            } else if (key < 128 && new_key_flag) {
+                // no explicit pitch, but key < 128, so it implies pitch
+                pitch = key;
+                new_pitch_flag = true;
+            }
+            // now we've acquired new parameters
+            // if (it is a note, then enter the note
+            if (valid) {
+                // change tempo or beat
+                attributes = process_attributes(attributes, time);
+                // if there's a duration or pitch, make a note:
+                if (new_pitch_flag || dur_flag) {
+                    Alg_note_ptr note_ptr = new Alg_note;
+                    note_ptr->chan = voice;
+                    note_ptr->time = time;
+                    note_ptr->dur = dur;
+                    note_ptr->set_identifier(key);
+                    note_ptr->pitch = (float) pitch;
+                    note_ptr->loud = (float) loud;
+                    note_ptr->parameters = attributes;
+                    seq->add_event(note_ptr, track_num); // sort later
+                    if (seq->get_real_dur() < (time + dur)) seq->set_real_dur(time + dur);
+                } else {
+                    int update_key = -1;
+                    // key must appear explicitly; otherwise
+                    //    update applies to channel
+                    if (new_key_flag) {
+                        update_key = key;
+                    }
+                    if (loud_flag) {
+                        Alg_update_ptr new_upd = new Alg_update;
+                        new_upd->chan = voice;
+                        new_upd->time = time;
+                        new_upd->set_identifier(update_key);
+                        new_upd->parameter.set_attr(symbol_table.insert_string("loudr"));
+                        new_upd->parameter.r = pitch;
+                        seq->add_event(new_upd, track_num);
+                        if (seq->get_real_dur() < time) seq->set_real_dur(time);
+                    }
+                    if (attributes) {
+                        while (attributes) {
+                            Alg_update_ptr new_upd = new Alg_update;
+                            new_upd->chan = voice;
+                            new_upd->time = time;
+                            new_upd->set_identifier(update_key);
+                            new_upd->parameter = attributes->parm;
+                            seq->add_event(new_upd, track_num);
+                            Alg_parameters_ptr p = attributes;
+                            attributes = attributes->next;
+                            p->parm.s = NULL; // so we don't delete the string
+                            delete p;
+                        }
+                    }
+                }
+                if (next_flag) {
+                    time = time + next;
+                } else if (dur_flag || new_pitch_flag) { // a note: incr by dur
+                    time = time + dur;
+                }
+            }
+        }
+        readline();
+    }
+    if (!error_flag) { // why not convert even if there was an error? -RBD
+        seq->convert_to_seconds(); // make sure format is correct
+    }
+    // real_dur is valid, translate to beat_dur
+    seq->set_beat_dur((seq->get_time_map())->time_to_beat(seq->get_real_dur()));
+    return error_flag;
+}
+
+
+long Alg_reader::parse_chan(string &field)
+{
+    const char *int_string = field.c_str() + 1;
+    char *msg = "Integer or - expected";
+    const char *p = int_string;
+    char c;
+    // check that all chars in int_string are digits or '-':
+    while (c = *p++) {
+        if (!isdigit(c) && c != '-') {
+            parse_error(field, p - field.c_str() - 1, msg);
+            return 0;
+        }
+    }
+    p--; // p now points to end-of-string character
+    if (p - int_string == 0) {
+        // bad: string length is zero
+        parse_error(field, 1, msg);
+        return 0;
+    }
+    if (p - int_string == 1 && int_string[0] == '-') {
+        // special case: entire string is "-", interpret as -1
+        return -1;
+    }
+    return atoi(int_string);
+}
+
+
+long Alg_reader::parse_int(string &field)
+{
+    const char *int_string = field.c_str() + 1;
+    char *msg = "Integer expected";
+    const char *p = int_string;
+    char c;
+    // check that all chars in int_string are digits:
+    while (c = *p++) {
+        if (!isdigit(c)) {
+            parse_error(field, p - field.c_str() - 1, msg);
+            return 0;
+        }
+    }
+    p--; // p now points to end-of-string character
+    if (p - int_string == 0) {
+        // bad: string length is zero
+        parse_error(field, 1, msg);
+        return 0;
+    }
+    return atoi(int_string);
+}
+
+
+int Alg_reader::find_real_in(string &field, int n)
+{
+    // scans from offset n to the end of a real constant
+    bool decimal = false;
+    int len = field.length();
+    if (n < len && field[n] == '-') n += 1; // parse one minus sign
+    for (int i = n; i < len; i++) {
+        char c = field[i];
+        if (!isdigit(c)) {
+            if (c == '.' && !decimal) {
+                decimal = true;
+            } else {
+                return i;
+            }
+        }
+    }
+    return len;
+}
+
+
+double Alg_reader::parse_real(string &field)
+{
+    char *msg = "Real expected";
+    int last = find_real_in(field, 1);
+    string real_string = field.substr(1, last - 1);
+    if (last <= 1 || last < (int) field.length()) {
+       parse_error(field, 1, msg);
+       return 0;
+    }
+    return atof(real_string.c_str());
+}
+
+
+void Alg_reader::parse_error(string &field, long offset, char *message)
+{
+    int position = line_parser.pos - field.length() + offset;
+    error_flag = true;
+    puts(line_parser.str->c_str());
+    for (int i = 0; i < position; i++) {
+        putc(' ', stdout);
+    }
+    putc('^', stdout);
+    printf("    %s\n", message);
+}
+
+
+double duration_lookup[] = { 0.25, 0.5, 1.0, 2.0, 4.0 };
+
+
+double Alg_reader::parse_dur(string &field, double base)
+{
+    char *msg = "Duration expected";
+    char *durs = "SIQHW";
+    char *p;
+    int last;
+    double dur;
+    if (field.length() < 2) {
+        // fall through to error message
+        return -1;
+    } else if (isdigit(field[1])) {
+        last = find_real_in(field, 1);
+        string real_string = field.substr(1, last - 1);
+        dur = atof(real_string.c_str());
+        // convert dur from seconds to beats
+        dur = seq->get_time_map()->time_to_beat(base + dur) - 
+              seq->get_time_map()->time_to_beat(base);
+    } else if (p = strchr(durs, toupper(field[1]))) {
+        dur = duration_lookup[p - durs];
+        last = 2;
+    } else {
+        parse_error(field, 1, msg);
+        return 0;
+    }
+    dur = parse_after_dur(dur, field, last, base);
+    dur = seq->get_time_map()->beat_to_time(
+              seq->get_time_map()->time_to_beat(base) + dur) - base;
+    return dur;
+}
+
+
+double Alg_reader::parse_after_dur(double dur, string &field, 
+                                   int n, double base)
+{
+    if ((int) field.length() == n) {
+        return dur;
+    }
+    if (toupper(field[n]) == 'T') {
+        return parse_after_dur(dur * 2/3, field, n + 1, base);
+    }
+    if (field[n] == '.') {
+        return parse_after_dur(dur * 1.5, field, n + 1, base);
+    }
+    if (isdigit(field[n])) {
+        int last = find_real_in(field, n);
+        string a_string = field.substr(n, last - n);
+        double f = atof(a_string.c_str());
+        return parse_after_dur(dur * f, field, last, base);
+    }
+    if (field[n] == '+') {
+        string a_string = field.substr(n + 1);
+        return dur + parse_dur(
+                a_string, seq->get_time_map()->beat_to_time(
+                        seq->get_time_map()->time_to_beat(base) + dur));
+    }
+    parse_error(field, n, "Unexpected character in duration");
+    return dur;
+}
+
+struct loud_lookup_struct {
+    char *str;
+    int val;
+} loud_lookup[] = { {"FFF", 127}, {"FF", 120}, {"F", 110}, {"MF", 100}, 
+                    {"MP", 90}, {"P", 80}, {"PP", 70}, {"PPP", 60}, 
+                    {NULL, 0} };
+
+
+double Alg_reader::parse_loud(string &field)
+{
+    char *msg = "Loudness expected";
+    if (isdigit(field[1])) {
+        return parse_int(field);
+    } else {
+        string dyn = field.substr(1);
+        transform(dyn.begin(), dyn.end(), dyn.begin(), ::toupper);
+        for (int i = 0; loud_lookup[i].str; i++) {
+            if (streql(loud_lookup[i].str, dyn.c_str())) {
+                return (double) loud_lookup[i].val;
+            }
+        }
+    }
+    parse_error(field, 1, msg);
+    return 100.0;
+}
+
+
+int key_lookup[] = {21, 23, 12, 14, 16, 17, 19};
+
+
+// the field can be K<number> or K[A-G]<number> or P[A-G]<number>
+// (this can be called from parse_pitch() to handle [A-G])
+// Notice that the routine ignores the first character: K or P
+//
+long Alg_reader::parse_key(string &field)
+{
+    char *msg = "Pitch expected";
+    char *pitches = "ABCDEFG";
+    char *p;
+    if (isdigit(field[1])) {
+        // This routine would not have been called if field = "P<number>"
+        // so it must be "K<number>" so <number> must be an integer.
+        return parse_int(field);
+    } else if (p = strchr(pitches, toupper(field[1]))) {
+        long key = key_lookup[p - pitches];
+        key = parse_after_key(key, field, 2);
+        return key;
+    }
+    parse_error(field, 1, msg);
+    return 0;
+}
+
+
+long Alg_reader::parse_after_key(int key, string &field, int n)
+{
+    if ((int) field.length() == n) {
+        return key;
+    }
+    char c = toupper(field[n]);
+    if (c == 'S') {
+        return parse_after_key(key + 1, field, n + 1);
+    }
+    if (c == 'F') {
+        return parse_after_key(key - 1, field, n + 1);
+    }
+    if (isdigit(field[n])) {
+        int last = find_int_in(field, n);
+        string octave = field.substr(n, last - n);
+        int oct = atoi(octave.c_str());
+        return parse_after_key(key + oct * 12, field, last);
+    }
+    parse_error(field, n, "Unexpected character in pitch");
+    return key;
+}
+
+
+long Alg_reader::find_int_in(string &field, int n)
+{
+    while ((int) field.length() > n && isdigit(field[n])) {
+        n = n + 1;
+    }
+    return n;
+}
+
+
+bool Alg_reader::parse_attribute(string &field, Alg_parameter_ptr param)
+{
+    int i = 1;
+    while (i < (int) field.length()) {
+        if (field[i] == ':') {
+            string attr = field.substr(1, i - 1);
+            char type_char = field[i - 1];
+            if (strchr("iarsl", type_char)) {
+                param->set_attr(symbol_table.insert_string(attr.c_str()));
+                parse_val(param, field, i + 1);
+            } else {
+                parse_error(field, 0, "attribute needs to end with typecode: i,a,r,s, or l");
+            }
+            return !error_flag;
+        }
+        i = i + 1;
+    }
+    return false;
+}
+
+
+bool Alg_reader::parse_val(Alg_parameter_ptr param, string &s, int i)
+{
+    int len = (int) s.length();
+    if (i >= len) {
+        return false;
+    }
+    if (s[i] == '"') {
+        if (!check_type('s', param)) {
+            return false;
+        }
+        // note: (len - i) includes 2 quote characters but no EOS character
+        // so total memory to allocate is (len - i) - 1
+        char *r = new char[(len - i) - 1];
+        strncpy(r, s.c_str() + i + 1, (len - i) - 2);
+        r[(len - i) - 2] = 0; // terminate the string
+        param->s = r;
+    } else if (s[i] == '\'') {
+        if (!check_type('a', param)) {
+            return false;
+        }
+        string r = s.substr(i + 1, len - i - 2);
+        param->a = symbol_table.insert_string(r.c_str());
+    } else if (param->attr_type() == 'l') {
+        if (streql(s.c_str() + i, "true") || 
+            streql(s.c_str() + i, "t")) {
+            param->l = true;
+        } else if (streql(s.c_str() + i, "false") || 
+                   streql(s.c_str() + i, "nil")) {
+            param->l = false;
+        } else return false;
+    } else if (isdigit(s[i]) || s[i] == '-' || s[i] == '.') {
+        int pos = i;
+        bool period = false;
+        int sign = 1;
+        if (s[pos] == '-') {
+            sign = -1;
+            pos++;
+        }
+        while (pos < len) {
+            if (isdigit(s[pos])) {
+                ;
+            } else if (!period && s[pos] == '.') {
+                period = true;
+            } else {
+                parse_error(s, pos, "Unexpected char in number");
+                return false;
+            }
+            pos = pos + 1;
+        }
+        string r = s.substr(i, len - i);
+        if (period) {
+            if (!check_type('r', param)) {
+                return false;
+            }
+            param->r = atof(r.c_str());
+        } else {
+            if (param->attr_type() == 'r') {
+                param->r = atoi(r.c_str());
+            } else if (!check_type('i', param)) {
+                return false;
+            } else {
+                param->i = atoi(r.c_str());
+            }
+        }
+    } else {
+        parse_error(s, i, "invalid value");
+        return false;
+    }
+    return true;
+}
+
+
+bool Alg_reader::check_type(char type_char, Alg_parameter_ptr param)
+{
+    return param->attr_type() == type_char;
+}
+
+
+//duration_lookup = {"S": 0.5, "I": 0.5, "Q": 1, "H": 2, "W": 4}
+//key_lookup = {"C": 12, "D": 14, "E": 16, "F": 17, "G": 19, "A": 21, "B": 23}
+
+/*
+def test():
+    reader = Alg_reader(open("data\\test.gro", "r"))
+    reader.parse()
+    score = reader->seq.notes
+    print "score:", score
+    reader = nil
+*/
diff --git a/frontends/CsoundAC/allegroserial.cpp b/frontends/CsoundAC/allegroserial.cpp
new file mode 100644
index 0000000..3d43577
--- /dev/null
+++ b/frontends/CsoundAC/allegroserial.cpp
@@ -0,0 +1,2 @@
+// allegroserial.cpp -- convert track to memory buffer and back to structure
+
diff --git a/frontends/CsoundAC/allegrosmfrd.cpp b/frontends/CsoundAC/allegrosmfrd.cpp
new file mode 100644
index 0000000..2010ede
--- /dev/null
+++ b/frontends/CsoundAC/allegrosmfrd.cpp
@@ -0,0 +1,455 @@
+// midifile reader
+
+#include "stdlib.h"
+#include "stdio.h"
+#include "string.h"
+#include "assert.h"
+#include <string>
+#include <fstream>
+#include "allegro.h"
+#include "algsmfrd_internal.h"
+#include "mfmidi.h"
+#include "trace.h"
+
+using namespace std;
+
+typedef class Alg_note_list {
+public:
+    Alg_note_ptr note;
+    class Alg_note_list *next;
+    Alg_note_list(Alg_note_ptr n, class Alg_note_list *list) { 
+        note = n; next = list; }
+} *Alg_note_list_ptr;
+
+
+class Alg_midifile_reader: public Midifile_reader {
+public:
+    istream *file;
+    Alg_seq_ptr seq;
+    int divisions;
+    Alg_note_list_ptr note_list;
+    Alg_track_ptr track;
+    int track_number; // the number of the (current) track
+    // chan is actual_channel + channel_offset_per_track * track_num +
+    //                          channel_offset_per_track * port 
+    long channel_offset_per_track; // used to encode track number into channel
+        // default is 0, set this to 0 to merge all tracks to 16 channels
+    long channel_offset_per_port; // used to encode port number into channel
+        // default is 16, set to 0 to ignore port prefix meta events
+    // while reading, this is channel_offset_per_track * track_num
+    int channel_offset;
+
+    Alg_midifile_reader(istream &f, Alg_seq_ptr new_seq) {
+        file = &f;
+        note_list = NULL;
+        seq = new_seq;
+        channel_offset_per_track = 0;
+        channel_offset_per_port = 16;
+        track_number = -1; // no tracks started yet, 1st will be #0
+        meta_channel = -1;
+        port = 0;
+    }
+    // delete destroys the seq member as well, so set it to NULL if you
+    // copied the pointer elsewhere
+    ~Alg_midifile_reader();
+    // the following is used to load the Alg_seq from the file:
+    bool parse();
+
+    void set_nomerge(bool flag) { Mf_nomerge = flag; }
+    void set_skipinit(bool flag) { Mf_skipinit = flag; }
+    long get_currtime() { return Mf_currtime; }
+
+protected:
+    int meta_channel; // the channel for meta events, set by MIDI chan prefix
+    int port; // value from the portprefix meta event
+
+    double get_time();
+    void update(int chan, int key, Alg_parameter_ptr param);
+    void *Mf_malloc(size_t size) { return malloc(size); }
+    void Mf_free(void *obj, size_t size) { free(obj); }
+    /* Methods to be called while processing the MIDI file. */
+    void Mf_starttrack();
+    void Mf_endtrack();
+    int Mf_getc();
+    void Mf_chanprefix(int chan);
+    void Mf_portprefix(int port);
+    void Mf_eot();
+    void Mf_error(char *);
+    void Mf_header(int,int,int);
+    void Mf_on(int,int,int);
+    void Mf_off(int,int,int);
+    void Mf_pressure(int,int,int);
+    void Mf_controller(int,int,int);
+    void Mf_pitchbend(int,int,int);
+    void Mf_program(int,int);
+    void Mf_chanpressure(int,int);
+    void binary_msg(int len, unsigned char *msg, const char *attr_string);
+    void Mf_sysex(int,unsigned char*);
+    void Mf_arbitrary(int,unsigned char*);
+    void Mf_metamisc(int,int,unsigned char*);
+    void Mf_seqnum(int);
+    void Mf_smpte(int,int,int,int,int);
+    void Mf_timesig(int,int,int,int);
+    void Mf_tempo(int);
+    void Mf_keysig(int,int);
+    void Mf_sqspecific(int,unsigned char*);
+    void Mf_text(int,int,unsigned char*);
+};
+
+
+Alg_midifile_reader::~Alg_midifile_reader()
+{
+    while (note_list) {
+        Alg_note_list_ptr to_be_freed = note_list;
+        note_list = note_list->next;
+        delete to_be_freed;
+    }
+    finalize(); // free Mf reader memory
+}
+
+
+bool Alg_midifile_reader::parse()
+{
+    channel_offset = 0;
+    seq->convert_to_beats();
+    midifile();
+    seq->set_real_dur(seq->get_time_map()->beat_to_time(seq->get_beat_dur()));
+    return midifile_error != 0;
+}
+
+
+void Alg_midifile_reader::Mf_starttrack()
+{
+    // printf("starting new track\n");
+    // create a new track that will share the sequence time map
+    // since time is in beats, the seconds parameter is false
+    track_number++;
+    seq->add_track(track_number); // make sure track exists
+    track = seq->track(track_number); // keep pointer to current track
+    meta_channel = -1;
+    port = 0;
+}
+
+
+void Alg_midifile_reader::Mf_endtrack()
+{
+    // note: track is already part of seq, so do not add it here
+    // printf("finished track, length %d number %d\n", track->len, track_num / 100);
+    channel_offset += seq->channel_offset_per_track;
+    track = NULL;
+    double now = get_time();
+    if (seq->get_beat_dur() < now) seq->set_beat_dur(now);
+    meta_channel = -1;
+    port = 0;
+}
+
+
+int Alg_midifile_reader::Mf_getc()
+{
+    return file->get();
+}
+
+
+void Alg_midifile_reader::Mf_chanprefix(int chan)
+{
+    meta_channel = chan;
+}
+
+
+void Alg_midifile_reader::Mf_portprefix(int p)
+{
+    port = p;
+}
+
+
+void Alg_midifile_reader::Mf_eot()
+{
+    meta_channel = -1;
+    port = 0;
+}
+
+
+void Alg_midifile_reader::Mf_error(char *msg)
+{
+    fprintf(stdout, "Midifile reader error: %s\n", msg);
+}
+
+
+void Alg_midifile_reader::Mf_header(int format, int ntrks, int division)
+{
+    if (format > 1) {
+        char msg[80];
+#pragma warning(disable: 4996) // msg is long enough
+        sprintf(msg, "file format %d not implemented", format);
+#pragma warning(default: 4996)
+        Mf_error(msg);
+    }
+    divisions = division;
+}
+
+
+double Alg_midifile_reader::get_time()
+{
+    double beat = ((double) get_currtime()) / divisions;
+    return beat;
+}
+
+
+void Alg_midifile_reader::Mf_on(int chan, int key, int vel)
+{
+    assert(!seq->get_units_are_seconds());
+    if (vel == 0) {
+        Mf_off(chan, key, vel);
+        return;
+    }
+    Alg_note_ptr note = new Alg_note();
+    note_list = new Alg_note_list(note, note_list);
+    /*    trace("on: %d at %g\n", key, get_time()); */
+    note->time = get_time();
+    note->chan = chan + channel_offset + port * channel_offset_per_port;
+    note->dur = 0;
+    note->set_identifier(key);
+    note->pitch = (float) key;
+    note->loud = (float) vel;
+    track->append(note);
+    meta_channel = -1;
+}
+
+
+void Alg_midifile_reader::Mf_off(int chan, int key, int vel)
+{
+    double time = get_time();
+    Alg_note_list_ptr *p = &note_list;
+    while (*p) {
+        if ((*p)->note->get_identifier() == key &&
+            (*p)->note->chan == 
+                    chan + channel_offset + port * channel_offset_per_port) {
+            (*p)->note->dur = time - (*p)->note->time;
+            // trace("updated %d dur %g\n", (*p)->note->key, (*p)->note->dur);
+            Alg_note_list_ptr to_be_freed = *p;
+            *p = to_be_freed->next;
+            delete to_be_freed;
+        } else {
+            p = &((*p)->next);
+        }
+    }
+    meta_channel = -1;
+}
+
+
+void Alg_midifile_reader::update(int chan, int key, Alg_parameter_ptr param)
+{
+    Alg_update_ptr update = new Alg_update;
+    update->time = get_time();
+    update->chan = chan;
+    if (chan != -1) {
+        update->chan = chan + channel_offset + port * channel_offset_per_port;
+    }
+    update->set_identifier(key);
+    update->parameter = *param;
+    // prevent the destructor from destroying the string twice!
+    // the new Update takes the string from param
+    if (param->attr_type() == 's') param->s = NULL;
+    track->append(update);
+}
+
+
+void Alg_midifile_reader::Mf_pressure(int chan, int key, int val)
+{
+    Alg_parameter parameter;
+    parameter.set_attr(symbol_table.insert_string("pressurer"));
+    parameter.r = val / 127.0;
+    update(chan, key, &parameter);
+    meta_channel = -1;
+}
+
+
+void Alg_midifile_reader::Mf_controller(int chan, int control, int val)
+{
+    Alg_parameter parameter;
+    char name[32];
+#pragma warning(disable: 4996) // name is long enough
+    sprintf(name, "control%dr", control);
+#pragma warning(default: 4996)
+    parameter.set_attr(symbol_table.insert_string(name));
+    parameter.r = val / 127.0;
+    update(chan, -1, &parameter);
+    meta_channel = -1;
+}
+
+
+void Alg_midifile_reader::Mf_pitchbend(int chan, int c1, int c2)
+{
+    Alg_parameter parameter;
+    parameter.set_attr(symbol_table.insert_string("bendr"));
+    parameter.r = ((c2 << 7) + c1) / 8192.0 - 1.0;
+    update(chan, -1, &parameter);
+    meta_channel = -1;
+}
+
+
+void Alg_midifile_reader::Mf_program(int chan, int program)
+{
+    Alg_parameter parameter;
+    parameter.set_attr(symbol_table.insert_string("programi"));
+    parameter.i = program;
+    update(chan, -1, &parameter);
+    meta_channel = -1;
+}
+
+
+void Alg_midifile_reader::Mf_chanpressure(int chan, int val)
+{
+    Alg_parameter parameter;
+    parameter.set_attr(symbol_table.insert_string("pressurer"));
+    parameter.r = val / 127.0;
+    update(chan, -1, &parameter);
+    meta_channel = -1;
+}
+
+
+void Alg_midifile_reader::binary_msg(int len, unsigned char *msg, 
+                                     const char *attr_string)
+{
+    Alg_parameter parameter;
+    char *hexstr = new char[len * 2 + 1];
+    for (int i = 0; i < len; i++) {
+#pragma warning(disable: 4996) // hexstr is long enough
+        sprintf(hexstr + 2 * i, "%02x", (0xFF & msg[i]));
+#pragma warning(default: 4996)
+    }
+    parameter.s = hexstr;
+    parameter.set_attr(symbol_table.insert_string(attr_string));
+    update(meta_channel, -1, &parameter);
+}
+
+
+void Alg_midifile_reader::Mf_sysex(int len, unsigned char *msg)
+{
+    // sysex messages become updates with attribute sysexs and a hex string
+    binary_msg(len, msg, "sysexs");
+}
+
+
+void Alg_midifile_reader::Mf_arbitrary(int len, unsigned char *msg)
+{
+    Mf_error("arbitrary data ignored");
+}
+
+
+void Alg_midifile_reader::Mf_metamisc(int type, int len, unsigned char *msg)
+{
+    char text[128];
+#pragma warning(disable: 4996) // text is long enough
+    sprintf(text, "metamsic data, type 0x%x, ignored", type);
+#pragma warning(default: 4996)
+    Mf_error(text);
+}
+
+
+void Alg_midifile_reader::Mf_seqnum(int n)
+{
+    Mf_error("seqnum data ignored");
+}
+
+
+static char *fpsstr[4] = {"24", "25", "29.97", "30"};
+
+void Alg_midifile_reader::Mf_smpte(int hours, int mins, int secs,
+                                   int frames, int subframes)
+{
+    // string will look like "24fps:01h:27m:07s:19.00f"
+    // 30fps (drop frame) is notated as "29.97fps"
+    char text[32];
+    int fps = (hours >> 6) & 3;
+    hours &= 0x1F;
+#pragma warning(disable: 4996) // text is long enough
+    sprintf(text, "%sfps:%02dh:%02dm:%02ds:%02d.%02df", 
+            fpsstr[fps], hours, mins, secs, frames, subframes);
+#pragma warning(default: 4996)
+    Alg_parameter smpteoffset;
+    smpteoffset.s = heapify(text);
+    smpteoffset.set_attr(symbol_table.insert_string("smpteoffsets"));
+    update(meta_channel, -1, &smpteoffset);
+    // Mf_error("SMPTE data ignored");
+}
+
+
+void Alg_midifile_reader::Mf_timesig(int i1, int i2, int i3, int i4)
+{
+    seq->set_time_sig(double(get_currtime()) / divisions, i1, 1 << i2);
+}
+
+
+void Alg_midifile_reader::Mf_tempo(int tempo)
+{
+    double beat = get_currtime();
+    beat = beat / divisions; // convert to quarters
+    // 6000000 us/min / n us/beat => beat / min
+    double bpm = 60000000.0 / tempo;
+    seq->insert_tempo(bpm, beat);
+}
+
+
+void Alg_midifile_reader::Mf_keysig(int key, int mode)
+{
+    Alg_parameter key_parm;
+    key_parm.set_attr(symbol_table.insert_string("keysigi"));
+    // use 0 for C major, 1 for G, -1 for F, etc., that is,
+    // the number of sharps, where flats are negative sharps
+    key_parm.i = key; //<<<---- fix this
+    // use -1 to mean "all channels"
+    update(meta_channel, -1, &key_parm);
+    Alg_parameter mode_parm;
+    mode_parm.set_attr(symbol_table.insert_string("modea"));
+    mode_parm.a = (mode == 0 ? symbol_table.insert_string("major") :
+                               symbol_table.insert_string("minor"));
+    update(meta_channel, -1, &mode_parm);
+}
+
+
+void Alg_midifile_reader::Mf_sqspecific(int len, unsigned char *msg)
+{
+    // sequencer specific messages become updates with attribute sqspecifics
+    // and a hex string for the value
+    binary_msg(len, msg, "sqspecifics");
+}
+
+
+char *heapify2(int len, unsigned char *s)
+{
+    char *h = new char[len + 1];
+    memcpy(h, s, len);
+    h[len] = 0;
+    return h;
+}
+
+
+void Alg_midifile_reader::Mf_text(int type, int len, unsigned char *msg)
+{
+    Alg_parameter text;
+    text.s = heapify2(len, msg);
+    const char *attr = "miscs";
+    if (type == 1) attr = "texts";
+    else if (type == 2) attr = "copyrights";
+    else if (type == 3) 
+        attr = (track_number == 0 ? "seqnames" : "tracknames");
+    else if (type == 4) attr = "instruments";
+    else if (type == 5) attr = "lyrics";
+    else if (type == 6) attr = "markers";
+    else if (type == 7) attr = "cues";
+    text.set_attr(symbol_table.insert_string(attr));
+    update(meta_channel, -1, &text);
+}
+
+
+// parse file into a seq. 
+Alg_error alg_smf_read(istream &file, Alg_seq_ptr new_seq)
+{
+    assert(new_seq);
+    Alg_midifile_reader ar(file, new_seq);
+    bool err = ar.parse();
+    ar.seq->set_real_dur(ar.seq->get_time_map()->
+                         beat_to_time(ar.seq->get_beat_dur()));
+    return (err ? alg_error_syntax : alg_no_error);
+}
diff --git a/frontends/CsoundAC/allegrosmfwr.cpp b/frontends/CsoundAC/allegrosmfwr.cpp
new file mode 100644
index 0000000..cd06251
--- /dev/null
+++ b/frontends/CsoundAC/allegrosmfwr.cpp
@@ -0,0 +1,647 @@
+// allegrosmfwr.cpp -- Allegro Standard Midi File Write
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <errno.h>
+#include <string>
+#include <iostream>
+#include <fstream>
+using namespace std;
+#include "allegro.h"
+
+// event_queue is a list element that keeps track of pending
+// things to write to a track, including note-ons, note-offs,
+// updates, tempo changes, and time signatures
+//
+class event_queue{
+public:
+  char type;//'n' for note, 'o' for off, 's' for time signature,
+            // 'c' for tempo changes
+  double time;
+  long index; //of the event in mSeq->notes
+  class event_queue *next;
+  event_queue(char t, double when, long x, class event_queue *n) {
+        type = t; time = when; index = x; next = n; }
+};
+
+
+class Alg_smf_write {
+public:
+    Alg_smf_write(Alg_seq_ptr seq);
+    ~Alg_smf_write();
+    long channels_per_track; // used to encode track number into chan field
+    // chan is actual_channel + channels_per_track * track_number
+    // default is 100, set this to 0 to merge all tracks to 16 channels
+
+    void write(ostream &file /* , midiFileFormat = 1 */);
+
+private:
+    long previous_divs; // time in ticks of most recently written event
+
+    void write_track(int i);
+    void write_tempo(int divs, int tempo);
+    void write_tempo_change(int i);
+    void write_time_signature(int i);
+    void write_note(Alg_note_ptr note, bool on);
+    void write_update(Alg_update_ptr update);
+    void write_text(Alg_update_ptr update, char type);
+    void write_binary(int type_byte, const char *msg);
+    void write_midi_channel_prefix(Alg_update_ptr update);
+    void write_smpteoffset(Alg_update_ptr update, char *s);
+    void write_data(int data);
+    int to_midi_channel(int channel);
+    int to_track(int channel);
+
+    ostream *out_file;
+
+    Alg_seq_ptr seq;
+
+    int num_tracks; // number of tracks not counting tempo track
+    int division; // divisions per quarter note, default = 120
+    int initial_tempo;
+
+    int timesig_num; // numerator of time signature
+    int timesig_den; // denominator of time signature
+    double timesig_when; // time of time signature
+
+    int keysig;          // number of sharps (+) or flats (-), -99 for undefined
+    char keysig_mode; // 'M' or 'm' for major/minor
+    double keysig_when;    // time of key signature
+
+    void write_delta(double event_time);
+    void write_varinum(int num);
+    void write_16bit(int num);
+    void write_24bit(int num);
+    void write_32bit(int num);
+};
+
+#define ROUND(x) (int) ((x)+0.5)
+
+Alg_smf_write::Alg_smf_write(Alg_seq_ptr a_seq)
+{
+    out_file = NULL;
+
+    // at 100bpm (a nominal tempo value), we would like a division
+    // to represent 1ms of time. So
+    // d ticks/beat * 100 beats/min = 60,000 ms/min * 1 tick/ms
+    // solving for d, d = 600
+    division = 600;         // divisions per quarter note
+    timesig_num = timesig_den = 0; // initially undefined
+    keysig = -99;
+    keysig_mode = 0;
+    initial_tempo = 500000;
+
+    seq = a_seq;
+
+    previous_divs = 0; // used to compute deltas for midifile
+}
+
+
+Alg_smf_write::~Alg_smf_write()
+{
+}
+
+
+// sorting is quite subtle due to rounding
+// For example, suppose times from a MIDI file are exact, but in
+// decimal round to TW0.4167 Q0.3333. Since the time in whole notes
+// rounded up, this note will start late. Even though the duration
+// rounded down, the amount is 1/4 as much because units are quarter
+// notes. Therefore, the total roundup is 0.0001 beats. This is 
+// enough to cause the note to sort later in the queue, perhaps
+// coming after a new note-on on the same pitch, and resulting in 
+// a turning on-off, on-off into on, on, off, off if data is moved
+// to Allegro (ascii) format with rounding and then back to SMF.
+//
+// The solution here is to consider things that round to the same
+// tick to be simultaneous. Then, be sure to deal with note-offs
+// before note-ons. We're going to do that by using event_queue
+// times that are rounded to the nearest tick time. Except note-offs
+// are going to go in with times that are 1/4 tick earlier so they
+// get scheduled first, but still end up on the same tick.
+//
+event_queue* push(event_queue *queue, event_queue *event)
+{
+    // printf("push: %.6g, %c, %d\n", event->time, event->type, event->index);
+    if (queue == NULL) {
+        event->next = NULL;
+        return event;
+    }
+   
+    event_queue *marker1 = NULL;
+    event_queue *marker2 = queue;
+    while (marker2 != NULL && marker2->time <= event->time) {
+        marker1 = marker2;
+        marker2 = marker2->next;
+    }
+    event->next = marker2;
+    if (marker1 != NULL) {
+        marker1->next=event;
+        return queue;
+    } else return event;
+}
+
+
+void print_queue(event_queue *q)
+{
+    printf("Printing queue. . .\n");
+    event_queue *q2=q;
+    while (q2) {
+        printf("%c at %f ;", q2->type, q2->time);
+        q2 = q2->next;
+    }
+    printf("\nDone printing.\n");
+}
+
+
+void Alg_smf_write::write_note(Alg_note_ptr note, bool on)
+{
+    double event_time = (on ? note->time : note->time + note->dur);
+    write_delta(event_time);
+
+    //printf("deltaDivisions: %d, beats elapsed: %g, on? %c\n", deltaDivisions, note->time, on);
+
+    char chan = char(note->chan & 15);
+    int pitch = int(note->pitch + 0.5);
+    if (pitch < 0) {
+          pitch = pitch % 12;
+    } else if (pitch > 127) {
+        pitch = (pitch % 12) + 120; // put pitch in 10th octave
+        if (pitch > 127) pitch -= 12; // or 9th octave
+    }
+    out_file->put(0x90 + chan);
+    out_file->put(pitch);
+    if (on) {
+        int vel = (int) note->loud;
+        if (vel <= 0) vel = 1;
+        write_data(vel);
+    } else out_file->put(0); // note-off indicated by velocty zero
+}
+
+
+void Alg_smf_write::write_midi_channel_prefix(Alg_update_ptr update)
+{
+   if (update->chan >= 0) { // write MIDI Channel Prefix
+        write_delta(update->time);
+        out_file->put('\xFF'); // Meta Event
+        out_file->put('\x20'); // Type code for MIDI Channel Prefix
+        out_file->put(1); // length
+        out_file->put(to_midi_channel(update->chan));
+        // one thing odd about the Std MIDI File spec is that once
+        // you turn on MIDI Channel Prefix, there seems to be no
+        // way to cancel it unless a non-Meta event shows up. We
+        // don't do any analysis to avoid assigning channels to
+        // meta events.
+    }
+}
+
+
+void Alg_smf_write::write_text(Alg_update_ptr update, char type)
+{
+    write_midi_channel_prefix(update);
+    write_delta(update->time);
+    out_file->put('\xFF');
+    out_file->put(type);
+    out_file->put((char) strlen(update->parameter.s));
+    *out_file << update->parameter.s;
+}
+
+
+void Alg_smf_write::write_smpteoffset(Alg_update_ptr update, char *s)
+{
+    write_midi_channel_prefix(update);
+    write_delta(update->time);
+    out_file->put('\xFF'); // meta event
+    out_file->put('\x54'); // smpte offset type code
+    out_file->put(5); // length
+    for (int i = 0; i < 5; i++) *out_file << s[i];
+}
+
+
+// write_data - limit data to the range of [0...127] and write it
+void Alg_smf_write::write_data(int data)
+{
+    if (data < 0) data = 0;
+    else if (data > 0x7F) data = 0x7F;
+
+    out_file->put(data);
+}
+
+
+int Alg_smf_write::to_midi_channel(int channel)
+{
+    // allegro track number is stored as multiple of 100
+    // also mask off all but 4 channel bits just in case
+    if (channels_per_track > 0) channel %= channels_per_track;
+    return channel & 0xF;
+}
+
+
+int Alg_smf_write::to_track(int channel)
+{
+    if (channel == -1) return 0;
+    return channel / channels_per_track;
+}
+
+
+static char hex_to_nibble(char c)
+{
+    if (isalpha(c)) {
+        return 10 + (toupper(c) - 'A');
+    } else {
+        return c - '0';
+    }
+}
+
+
+static char hex_to_char(const char *s)
+{
+    return (hex_to_nibble(s[0]) << 4) + hex_to_nibble(s[1]);
+}
+
+
+void Alg_smf_write::write_binary(int type_byte, const char *msg)
+{
+    int len = strlen(msg) / 2;
+    out_file->put(type_byte);
+    write_varinum(len);
+    for (int i = 0; i < len; i++) {
+        out_file->put(hex_to_char(msg));
+        msg += 2;
+    }
+}
+
+
+void Alg_smf_write::write_update(Alg_update_ptr update)
+{
+    const char *name = update->parameter.attr_name();
+
+    /****Non-Meta Events****/
+    if (!strcmp(name, "pressurer")) {
+        write_delta(update->time);
+        if (update->get_identifier() < 0) { // channel pressure message
+            out_file->put(0xD0 + to_midi_channel(update->chan));
+            write_data((int)(update->parameter.r * 127));
+        } else { // just 1 key -- poly pressure
+            out_file->put(0xA0 + to_midi_channel(update->chan));
+            write_data(update->get_identifier());
+            write_data((int)(update->parameter.r * 127));
+        }
+    } else if (!strcmp(name, "programi")) {
+        write_delta(update->time);
+        out_file->put(0xC0 + to_midi_channel(update->chan));
+        write_data(update->parameter.i);
+    } else if (!strcmp(name, "bendr")) {
+        int temp = ROUND(0x2000 * (update->parameter.r + 1));
+        if (temp > 0x3fff) temp = 0x3fff; // 14 bits maximum
+        if (temp < 0) temp = 0;
+        int c1 = temp & 0x7F; // low 7 bits
+        int c2 = temp >> 7;   // high 7 bits
+        write_delta(update->time);
+        out_file->put(0xE0 + to_midi_channel(update->chan));
+        write_data(c1);
+        write_data(c2);
+    } else if (!strncmp(name, "control", 7) && 
+               update->parameter.attr_type() == 'r') {
+      int ctrlnum = atoi(name + 7);
+      int val = ROUND(update->parameter.r * 127);
+      write_delta(update->time);
+      out_file->put(0xB0 + to_midi_channel(update->chan));
+      write_data(ctrlnum);
+      write_data(val);
+    } else if (!strcmp(name, "sysexs") &&
+               update->parameter.attr_type() == 's') {
+        const char *s = update->parameter.s;
+        if (s[0] && s[1] && toupper(s[0]) == 'F' && s[1] == '0') {
+            s += 2; // skip the initial "F0" byte in message: it is implied
+        }
+        write_delta(update->time);
+        write_binary(0xF0, s);
+    } else if (!strcmp(name, "sqspecifics") &&
+               update->parameter.attr_type() == 's') {
+        const char *s = update->parameter.s;
+        write_delta(update->time);
+        out_file->put('\xFF');
+        write_binary(0x7F, s);
+
+    /****Text Events****/
+    } else if (!strcmp(name, "texts")) {
+        write_text(update, 0x01);
+    } else if (!strcmp(name, "copyrights")) {
+        write_text(update, 0x02);
+    } else if (!strcmp(name, "seqnames") || !strcmp(name, "tracknames")) {
+        write_text(update, 0x03);
+    } else if (!strcmp(name, "instruments")) {
+        write_text(update, 0x04);
+    } else if (!strcmp(name, "lyrics")) {
+        write_text(update, 0x05);
+    } else if (!strcmp(name, "markers")) {
+        write_text(update, 0x06);
+    } else if (!strcmp(name, "cues")) {
+        write_text(update, 0x07);
+    } else if (!strcmp(name, "miscs")) {
+        write_text(update, 0x08);
+
+    /****Other Events****/
+    } else if (!strcmp(name, "smpteoffsets")) {
+#define decimal(p) (((p)[0] - '0') * 10 + ((p)[1] - '0'))
+        // smpteoffset is specified as "24fps:00h:10m:00s:11.00f"
+        // the following simple parser does not reject all badly
+        // formatted strings, but it should parse good strings ok
+        const char *s = update->parameter.s;
+        int len = strlen(s);
+        char smpteoffset[5];
+        if (len < 24) return; // not long enough, must be bad format
+        int fps;
+        if (s[0] == '2') {
+            if (s[1] == '4') fps = 0;
+            else if (s[1] == '5') fps = 1;
+            else if (s[1] == '9') {
+                fps = 2;
+                if (len != 27) return; // not right length
+                s += 3; // cancel effect of longer string
+            }
+        } else fps = 3;
+        s += 6;   int hours = decimal(s);
+        s += 4;   int mins = decimal(s);
+        s += 4;   int secs = decimal(s);
+        s += 4;   int frames = decimal(s);
+        s += 3;   int subframes = decimal(s);
+        smpteoffset[0] = (fps << 6) + hours;
+        smpteoffset[1] = mins;
+        smpteoffset[2] = secs;
+        smpteoffset[3] = frames;
+        smpteoffset[4] = subframes;
+        write_smpteoffset(update, smpteoffset);
+
+    // key signature is special because it takes two events in the Alg_seq
+    // structure to make one midi file event. When we encounter one or 
+    // the other event, we'll just record it in the Alg_smf_write object.
+    // After both events are seen, we write the data. (See below.)
+    } else if (!strcmp(name, "keysigi")) {
+        keysig = update->parameter.i;
+        keysig_when = update->time;
+    } else if (!strcmp(name, "modea")) {
+        if (!strcmp(alg_attr_name(update->parameter.a), "major"))
+            keysig_mode = 'M';
+        else keysig_mode = 'm';
+        keysig_when = update->time;
+    }
+    if (keysig != -99 && keysig_mode) { // write when both are defined
+        write_delta(keysig_when);
+        out_file->put('\xFF');
+        out_file->put('\x59');
+        out_file->put(2);
+        // mask off high bits so that this value appears to be positive
+        // i.e. -1 -> 0xFF (otherwise, write_data will clip -1 to 0)
+        out_file->put(keysig & 0xFF);
+        out_file->put(keysig_mode == 'm');
+        keysig = -99;
+        keysig_mode = false;
+    }
+    //printf("Update: %s, key: %g\n", update->parameter.attr_name(), update->key);
+}
+
+
+// see notes on event_queue::push, TICK_TIME converts from beat to
+// the number of the nearest tick. The second parameter is an offset in
+// quarter ticks. By scheduling with -1, note-offs should get dispatched
+// first. Note that TICK_TIME only determines the order of events, so
+// it is ok to change units from beats to ticks, saving a divide.
+#define TICK_TIME(t, o) (ROUND((t) * division) + 0.25 * (o))
+
+void Alg_smf_write::write_track(int i)
+{
+    int j = 0; // note index
+    Alg_events &notes = seq->track_list[i];
+    event_queue *pending = NULL;
+    if (notes.length() > 0) {
+        pending = new event_queue('n', TICK_TIME(notes[j]->time, 0), 0, NULL);
+    }
+    if (i == 0) { // track 0 may have tempo and timesig info
+        if (seq->get_time_map()->last_tempo_flag || seq->get_time_map()->beats.len > 0) {
+            pending = push(pending, new event_queue('c', 0.0, 0, NULL));
+        }
+        if (seq->time_sig.length() > 0) {
+            pending = push(pending, new event_queue('s', 
+                           TICK_TIME(seq->time_sig[0].beat, 0), 0, NULL));
+        }
+    }
+    while (pending) {
+        event_queue *current = pending;
+        pending = pending->next;
+        if (current->type == 'n') {
+            Alg_note_ptr n = (Alg_note_ptr) notes[current->index];
+            if (n->is_note()) {
+                write_note(n, true);
+                pending = push(pending, new event_queue('o',
+                      TICK_TIME(n->time + n->dur, -1), current->index, NULL));
+            } else if (n->is_update()) {
+                Alg_update_ptr u = (Alg_update_ptr) n;
+                write_update(u);
+            }
+            int next = current->index + 1;
+            if (next < notes.length()) {
+                current->time = TICK_TIME(notes[next]->time, 0);
+                current->index = next;
+                pending = push(pending, current);
+            }
+        } else if (current->type == 'o') { //note-off
+            Alg_note_ptr n = (Alg_note_ptr) notes[current->index];
+            write_note(n, false);
+            delete current;
+        } else if (current->type == 'c') { // tempo change
+            write_tempo_change(current->index);
+            current->index++; // -R
+            if (current->index < seq->get_time_map()->beats.len) {
+                current->time = 
+                    TICK_TIME(seq->get_time_map()->
+                              beats[current->index].beat, 0);
+                pending = push(pending, current);
+            } else {
+                delete current;
+            }
+        } else if (current->type == 's') { // time sig
+            write_time_signature(current->index);
+            current->index++;
+            if (current->index < seq->time_sig.length()) {
+                current->time = 
+                    TICK_TIME(seq->time_sig[current->index].beat, 0);
+                pending = push(pending, current);
+            } else {
+                delete current;
+            }
+        }
+    }
+}
+
+
+void Alg_smf_write::write_tempo(int divs, int tempo)
+{
+    //    printf("Inserting tempo %f after %f clocks.\n", tempo, delta);
+    write_varinum(divs - previous_divs);
+    previous_divs = divs;
+    out_file->put('\xFF');
+    out_file->put('\x51');
+    out_file->put('\x03');
+    write_24bit((int)tempo);
+}
+
+
+void Alg_smf_write::write_tempo_change(int i)
+    //  i is index of tempo map
+{
+    // extract tempo map
+    Alg_beats &b = seq->get_time_map()->beats;
+    double tempo;
+    long divs;
+    if (i < seq->get_time_map()->beats.len - 1) {
+        tempo = 1000000 * ((b[i+1].time - b[i].time) / 
+                           (b[i+1].beat - b[i].beat));
+        divs = ROUND(b[i].beat * division);
+        write_tempo(divs, ROUND(tempo));
+    } else if (seq->get_time_map()->last_tempo_flag) { // write the final tempo
+        divs = ROUND(division * b[i].beat);
+        tempo = (1000000.0 / seq->get_time_map()->last_tempo);
+        write_tempo(divs, ROUND(tempo));
+    }    
+}
+
+
+void Alg_smf_write::write_time_signature(int i)
+{
+    Alg_time_sigs &ts = seq->time_sig;
+    write_delta(ts[i].beat);
+    // write the time signature
+    out_file->put('\xFF');
+    out_file->put('\x58');  // time signature
+    out_file->put('\x04');     // length of message
+    out_file->put(ROUND(ts[i].num));
+    int den = ROUND(ts[i].den);
+    int den_byte = 0;
+    while (den > 1) { // compute the log2 of denominator
+        den_byte++;
+        den >>= 1;
+    }
+    out_file->put(den_byte);
+    out_file->put(24); // clocks per quarter
+    out_file->put(8);  // 32nd notes per 24 clocks
+}
+
+
+
+void Alg_smf_write::write(ostream &file)
+{
+    int track_len_offset;
+    int track_end_offset;
+    int track_len;
+
+    out_file = &file;
+
+    // Header
+    file << "MThd";
+
+    write_32bit(6); // chunk length
+
+    write_16bit(1); // format 1 MIDI file
+
+    write_16bit(seq->tracks()); // number of tracks
+    write_16bit(division); // divisions per quarter note
+
+
+    // write_ all tracks
+    seq->convert_to_beats();
+    int i;
+    for (i = 0; i < seq->tracks(); i++) {
+        previous_divs = 0;
+        *out_file << "MTrk";
+        track_len_offset = out_file->tellp();
+        write_32bit(0); // track len placeholder
+        
+        write_track(i);
+
+        // End of track event
+        write_varinum(0);           // delta time
+        out_file->put('\xFF');
+        out_file->put('\x2F');
+        out_file->put('\x00');
+
+        // Go back and write in the length of the track
+        track_end_offset = out_file->tellp();
+        track_len = track_end_offset - track_len_offset - 4;
+        out_file->seekp(track_len_offset);
+        write_32bit(track_len);
+        out_file->seekp(track_end_offset);
+    }
+}
+
+
+void Alg_smf_write::write_16bit(int num)
+{
+    out_file->put((num & 0xFF00) >> 8);
+    out_file->put(num & 0xFF);
+}
+
+void Alg_smf_write::write_24bit(int num)
+{
+    out_file->put((num & 0xFF0000) >> 16);
+    out_file->put((num & 0xFF00) >> 8);
+    out_file->put((num & 0xFF));
+}
+
+void Alg_smf_write::write_32bit(int num)
+{
+    out_file->put((num & 0xFF000000) >> 24);
+    out_file->put((num & 0xFF0000) >> 16);
+    out_file->put((num & 0xFF00) >> 8);
+    out_file->put((num & 0xFF));
+}
+
+
+void Alg_smf_write::write_delta(double event_time)
+{
+    // divisions is ideal absolute time in divisions
+    long divisions = ROUND(division * event_time);
+    long delta_divs = divisions - previous_divs;
+    write_varinum(delta_divs);
+    previous_divs = divisions;    
+}
+
+
+void Alg_smf_write::write_varinum(int value)
+{
+  if(value<0) value=0;//this line should not have to be here!
+  int buffer;
+
+  buffer = value & 0x7f;
+  while ((value >>= 7) > 0) {
+    buffer <<= 8;
+    buffer |= 0x80;
+    buffer += (value & 0x7f);
+  }
+
+  for(;;) {
+    out_file->put(buffer);
+    if (buffer & 0x80)
+      buffer >>= 8;
+    else
+      break;
+  }
+}
+
+
+void Alg_seq::smf_write(ostream &file)
+{
+    Alg_smf_write writer(this);
+    writer.write(file);
+}
+
+bool Alg_seq::smf_write(const char *filename)
+{
+    ofstream outf(filename, ios::binary | ios::out);
+    if (outf.fail()) return false;
+    smf_write(outf);
+    outf.close();
+    return true;
+}
diff --git a/frontends/CsoundAC/allegrowr.cpp b/frontends/CsoundAC/allegrowr.cpp
new file mode 100644
index 0000000..54bf601
--- /dev/null
+++ b/frontends/CsoundAC/allegrowr.cpp
@@ -0,0 +1,183 @@
+// allegrowr.cpp -- write sequence to an Allegro file (text)
+
+#include "assert.h"
+#include "stdlib.h"
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+#include <errno.h>
+#include <string>
+#include "memory.h"
+using namespace std;
+#include "strparse.h"
+#include "allegro.h"
+
+// Note about precision: %g prints 6 significant digits. For 1ms precision, 
+// the maximum magnitude is 999.999, i.e. 1000s < 17minutes. For anything
+// over 1000s, time in seconds will be printed with 10ms precision, which
+// is not good. Therefore, times and durations are printed as %.4d, which 
+// gives 100us precision.
+// The following define allows you to change this decision:
+/* #define TIMFMT "%.4d" */
+#define TIMPREC 4
+#define TIMFMT fixed << setprecision(TIMPREC)
+#define GFMT resetiosflags(ios::floatfield) << setprecision(6)
+
+void parameter_print(ostream &file, Alg_parameter_ptr p)
+{
+    file << " -" << p->attr_name() << ":";
+    switch (p->attr_type()) {
+    case 'a':
+        file << "'" << alg_attr_name(p->a) << "'";
+        break;
+    case 'i':
+        file << p->i;
+        break;
+    case 'l':
+        file << (p->l ? "true" : "false");
+        break;
+    case 'r':
+        file << p->r;
+        break;
+    case 's': {
+        string str;
+        string_escape(str, p->s, "\"");
+        file << str;
+        break;
+    }
+    }
+}
+
+Alg_event_ptr Alg_seq::write_track_name(ostream &file, int n, 
+                                        Alg_events &events)
+// write #track <n> <trackname-or-sequencename>
+// if we write the name on the "#track" line, then we do *not* want
+// to write again as an update: "-seqnames:"Jordu", so if we do
+// find a name and write it, return a pointer to it so the track
+// writer knows what update (if any) to skip
+{
+    Alg_event_ptr e = NULL; // e is the result, default is NULL
+    file << "#track " << n;
+    const char *attr = symbol_table.insert_string(
+                               n == 0 ? "seqnames" : "tracknames");
+    // search for name in events with timestamp of 0
+    for (int i = 0; i < events.length(); i++) {
+        Alg_event_ptr ue = events[i];
+        if (ue->time > 0) break;
+        if (ue->is_update()) {
+            Alg_update_ptr u = (Alg_update_ptr) ue;
+            if (u->parameter.attr == attr) {
+                file << " " << u->parameter.s;
+                e = ue; // return the update event we found
+                break;
+            }
+        }
+    }
+    file << endl; // end of line containing #track [<name>]
+    return e; // return parameter event with name if one was found
+}
+
+
+void Alg_seq::write(ostream &file, bool in_secs, double offset)
+{
+    int i, j;
+    if (in_secs) convert_to_seconds();
+    else convert_to_beats();
+    file << "#offset " << offset << endl;
+    Alg_event_ptr update_to_skip = write_track_name(file, 0, track_list[0]);
+    Alg_beats &beats = time_map->beats;
+    for (i = 0; i < beats.len - 1; i++) {
+        Alg_beat_ptr b = &(beats[i]);
+        if (in_secs) {
+            file << "T" << TIMFMT << b->time;
+        } else {
+            file << "TW" << TIMFMT << b->beat / 4;
+        }
+        double tempo = (beats[i + 1].beat - b->beat) /
+                       (beats[i + 1].time - beats[i].time);
+        file << " -tempor:" << GFMT << tempo * 60 << "\n";
+    }
+    if (time_map->last_tempo_flag) { // we have final tempo:
+        Alg_beat_ptr b = &(beats[beats.len - 1]);
+        if (in_secs) {
+            file << "T" << TIMFMT << b->time;
+        } else {
+            file << "TW" << TIMFMT << b->beat / 4;
+        }
+        file << " -tempor:" << GFMT << time_map->last_tempo * 60.0 << "\n";
+    }
+
+    // write the time signatures
+    for (i = 0; i < time_sig.length(); i++) {
+        Alg_time_sig &ts = time_sig[i];
+        double time = ts.beat;
+        if (in_secs) {
+            file << "T" << TIMFMT << time << " V- -timesig_numr:" << 
+                    GFMT << ts.num << "\n";
+            file << "T" << TIMFMT << time << " V- -timesig_denr:" << 
+                    GFMT << ts.den << "\n";
+        } else {
+            double wholes = ts.beat / 4;
+            file << "TW" << TIMFMT << wholes << " V- -timesig_numr:" <<
+                    GFMT << ts.num << "\n";
+            file << "TW" << TIMFMT << wholes << " V- -timesig_denr:" <<
+                    GFMT << ts.den << "\n";
+        }
+    }
+
+    for (j = 0; j < track_list.length(); j++) {
+        Alg_events &notes = track_list[j];
+        if (j != 0) update_to_skip = write_track_name(file, j, notes);
+        // now write the notes at beat positions
+        for (i = 0; i < notes.length(); i++) {
+            Alg_event_ptr e = notes[i];
+            // if we already wrote this event as a track or sequence name,
+            // do not write it again
+            if (e == update_to_skip) continue;
+            double start = e->time;
+            if (in_secs) {
+                file << "T" << TIMFMT << start;
+            } else {
+                file << "TW" << TIMFMT << start / 4;
+            }
+            // write the channel as Vn or V-
+            if (e->chan == -1) file << " V-";
+            else file << " V" << e->chan;
+            // write the note or update data
+            if (e->is_note()) {
+                Alg_note_ptr n = (Alg_note_ptr) e;
+                double dur = n->dur;
+                file << " K" << n->get_identifier() << 
+                        " P" << GFMT << n->pitch;
+                if (in_secs) {
+                    file << " U" << TIMFMT << dur;
+                } else {
+                    file << " Q" << TIMFMT << dur;
+                }
+                file << " L" << GFMT << n->loud; 
+                Alg_parameters_ptr p = n->parameters;
+                while (p) {
+                    parameter_print(file, &(p->parm));
+                    p = p->next;
+                }
+            } else { // an update
+                assert(e->is_update());
+                Alg_update_ptr u = (Alg_update_ptr) e;
+                if (u->get_identifier() != -1) {
+                    file << " K" << u->get_identifier();
+                }
+                parameter_print(file, &(u->parameter));
+            }
+            file << "\n";
+        }
+    }
+}
+
+bool Alg_seq::write(const char *filename, double offset)
+{
+    ofstream file(filename);
+    if (file.fail()) return false;
+    write(file, units_are_seconds, offset);
+    file.close();
+    return true;
+}
diff --git a/frontends/CsoundAC/mfmidi.cpp b/frontends/CsoundAC/mfmidi.cpp
new file mode 100644
index 0000000..6aa2529
--- /dev/null
+++ b/frontends/CsoundAC/mfmidi.cpp
@@ -0,0 +1,486 @@
+/*
+ * Read a Standard MIDI File.  Externally-assigned function pointers are
+ * called upon recognizing things in the file.  See midifile(3).
+ */
+
+/*****************************************************************************
+*       Change Log
+*       Date    | who : Change
+*-----------+-----------------------------------------------------------------
+*  2-Mar-92 | GWL : created changelog; MIDIFILE_ERROR to satisfy compiler
+*****************************************************************************/
+
+#include "stdio.h"
+#include "mfmidi.h"
+#include "string.h"
+#include "assert.h"
+
+#define MIDIFILE_ERROR -1
+
+/* public stuff */
+extern int abort_flag;
+
+
+void Midifile_reader::midifile()
+{
+    int ntrks;
+    midifile_error = 0;
+
+    ntrks = readheader();
+    if (midifile_error) return;
+    if (ntrks <= 0) {
+        mferror("No tracks!");
+        /* no need to return since midifile_error is set */
+    }
+    while (ntrks-- > 0 && !midifile_error) readtrack();
+}
+
+int Midifile_reader::readmt(char *s, int skip)
+    /* read through the "MThd" or "MTrk" header string */
+    /* if skip == 1, we attempt to skip initial garbage. */
+{
+    assert(strlen(s) == 4); // must be "MThd" or "MTrk"
+    int nread = 0;
+    char b[4];
+    char buff[32];
+    int c;
+    char *errmsg = "expecting ";
+
+    retry:
+    while ( nread<4 ) {
+        c = Mf_getc();
+        if ( c == EOF ) {
+            errmsg = "EOF while expecting ";
+            goto err;
+        }
+        b[nread++] = c;
+    }
+    /* See if we found the 4 characters we're looking for */
+    if ( s[0]==b[0] && s[1]==b[1] && s[2]==b[2] && s[3]==b[3] )
+        return(0);
+    if ( skip ) {
+        /* If we are supposed to skip initial garbage, */
+        /* try again with the next character. */
+        b[0]=b[1];
+        b[1]=b[2];
+        b[2]=b[3];
+        nread = 3;
+        goto retry;
+    }
+    err:
+#pragma warning(disable: 4996) // strcpy is safe since strings have known lengths
+    (void) strcpy(buff,errmsg);
+    (void) strcat(buff,s);
+#pragma warning(default: 4996) // turn it back on
+    mferror(buff);
+    return(0);
+}
+
+int Midifile_reader::egetc()
+    /* read a single character and abort on EOF */
+{
+    int c = Mf_getc();
+
+    if ( c == EOF ) {
+        mferror("premature EOF");
+        return EOF;
+    }
+    Mf_toberead--;
+    return(c);
+}
+
+int Midifile_reader::readheader()
+    /* read a header chunk */
+{
+    int format, ntrks, division;
+
+    if ( readmt("MThd",Mf_skipinit) == EOF )
+        return(0);
+
+    Mf_toberead = read32bit();
+    if (midifile_error) return MIDIFILE_ERROR;
+    format = read16bit();
+    if (midifile_error) return MIDIFILE_ERROR;
+    ntrks = read16bit();
+    if (midifile_error) return MIDIFILE_ERROR;
+    division = read16bit();
+    if (midifile_error) return MIDIFILE_ERROR;
+
+    Mf_header(format,ntrks,division);
+
+    /* flush any extra stuff, in case the length of header is not 6 */
+    while ( Mf_toberead > 0 && !midifile_error)
+        (void) egetc();
+    return(ntrks);
+}
+
+void Midifile_reader::readtrack()
+    /* read a track chunk */
+{
+    /* This array is indexed by the high half of a status byte.  It's */
+    /* value is either the number of bytes needed (1 or 2) for a channel */
+    /* message, or 0 (meaning it's not  a channel message). */
+    static int chantype[] = {
+        0, 0, 0, 0, 0, 0, 0, 0,       /* 0x00 through 0x70 */
+        2, 2, 2, 2, 1, 1, 2, 0        /* 0x80 through 0xf0 */
+    };
+    long lookfor, lng;
+    int c, c1, type;
+    int sysexcontinue = 0;  /* 1 if last message was an unfinished sysex */
+    int running = 0;        /* 1 when running status used */
+    int status = 0;         /* (possibly running) status byte */
+    int needed;
+
+    if ( readmt("MTrk",0) == EOF )
+        return;
+
+    Mf_toberead = read32bit();
+
+    if (midifile_error) return;
+
+    Mf_currtime = 0L;
+
+    Mf_starttrack();
+
+    while ( Mf_toberead > 0 ) {
+
+        Mf_currtime += readvarinum();   /* delta time */
+        if (midifile_error) return;
+
+        c = egetc();
+       if (midifile_error) return;
+
+        if ( sysexcontinue && c != 0xf7 ) {
+            mferror("didn't find expected continuation of a sysex");
+            return;
+        }
+        if ( (c & 0x80) == 0 ) {        /* running status? */
+            if ( status == 0 ) {
+                mferror("unexpected running status");
+                return;
+            }
+            running = 1;
+       } else {
+            status = c;
+            running = 0;
+        }
+
+        needed = chantype[ (status>>4) & 0xf ];
+
+        if ( needed ) {        /* ie. is it a channel message? */
+
+            if ( running )
+                c1 = c;
+            else {
+                c1 = egetc();
+                if (midifile_error) return;
+            }
+            chanmessage( status, c1, (needed>1) ? egetc() : 0 );
+            if (midifile_error) return;
+            continue;;
+        }
+
+        switch ( c ) {
+
+        case 0xff:                  /* meta event */
+
+            type = egetc();
+            if (midifile_error) return;
+            /* watch out - Don't combine the next 2 statements */
+            lng = readvarinum();
+            if (midifile_error) return;
+            lookfor = Mf_toberead - lng;
+            msginit();
+
+            while ( Mf_toberead > lookfor ) {
+                unsigned char c = egetc();
+                if (midifile_error) return;
+                msgadd(c);
+            }
+            metaevent(type);
+            break;
+
+        case 0xf0:            /* start of system exclusive */
+
+            /* watch out - Don't combine the next 2 statements */
+            lng = readvarinum();
+            if (midifile_error) return;
+            lookfor = Mf_toberead - lng;
+            msginit();
+            msgadd(0xf0);
+
+            while ( Mf_toberead > lookfor ) {
+                c = egetc();
+                if (midifile_error) return;
+                msgadd(c);
+            }
+            if ( c==0xf7 || Mf_nomerge==0 )
+                sysex();
+            else
+                sysexcontinue = 1;  /* merge into next msg */
+            break;
+
+        case 0xf7:     /* sysex continuation or arbitrary stuff */
+
+            /* watch out - Don't combine the next 2 statements */
+            lng = readvarinum();
+            if (midifile_error) return;
+            lookfor = Mf_toberead - lng;
+
+            if ( ! sysexcontinue )
+                msginit();
+
+            while ( Mf_toberead > lookfor ) {
+                c = egetc();
+                if (midifile_error) return;
+                msgadd(c);
+            }
+            if ( ! sysexcontinue ) {
+                    Mf_arbitrary(msgleng(), msg());
+            }
+            else if ( c == 0xf7 ) {
+                sysex();
+                sysexcontinue = 0;
+            }
+            break;
+        default:
+
+            badbyte(c);
+
+            break;
+        }
+    }
+        Mf_endtrack();
+    return;
+}
+
+void Midifile_reader::badbyte(int c)
+{
+    char buff[32];
+#pragma warning(disable: 4996) // safe in this case
+    (void) sprintf(buff,"unexpected byte: 0x%02x",c);
+#pragma warning(default: 4996)
+    mferror(buff);
+}
+
+void Midifile_reader::metaevent(int type)
+{
+    int leng = msgleng();
+    // made this unsigned to avoid sign extend
+    unsigned char *m = msg();
+
+    switch ( type ) {
+    case 0x00:
+        Mf_seqnum(to16bit(m[0],m[1]));
+        break;
+    case 0x01:     /* Text event */
+    case 0x02:     /* Copyright notice */
+    case 0x03:     /* Sequence/Track name */
+    case 0x04:     /* Instrument name */
+    case 0x05:     /* Lyric */
+    case 0x06:     /* Marker */
+    case 0x07:     /* Cue point */
+    case 0x08:
+    case 0x09:
+    case 0x0a:
+    case 0x0b:
+    case 0x0c:
+    case 0x0d:
+    case 0x0e:
+    case 0x0f:
+        /* These are all text events */
+        Mf_text(type,leng,m);
+        break;
+    case 0x20:
+        Mf_chanprefix(m[0]);
+        break;
+    case 0x21:
+        Mf_portprefix(m[0]);
+        break;
+    case 0x2f:     /* End of Track */
+        Mf_eot();
+        break;
+    case 0x51:     /* Set tempo */
+        Mf_tempo(to32bit(0,m[0],m[1],m[2]));
+        break;
+    case 0x54:
+        Mf_smpte(m[0],m[1],m[2],m[3],m[4]);
+        break;
+    case 0x58:
+        Mf_timesig(m[0],m[1],m[2],m[3]);
+        break;
+    case 0x59:
+        Mf_keysig(m[0],m[1]);
+        break;
+    case 0x7f:
+        Mf_sqspecific(leng,m);
+        break;
+    default:
+        Mf_metamisc(type,leng,m);
+    }
+}
+
+
+void Midifile_reader::sysex()
+{
+    Mf_sysex(msgleng(), msg());
+}
+
+
+void Midifile_reader::chanmessage(int status, int c1, int c2)
+{
+    int chan = status & 0xf;
+
+    switch ( status & 0xf0 ) {
+    case NOTEOFF:
+        Mf_off(chan,c1,c2);
+        break;
+    case NOTEON:
+        Mf_on(chan,c1,c2);
+        break;
+    case PRESSURE:
+        Mf_pressure(chan,c1,c2);
+        break;
+    case CONTROLLER:
+        Mf_controller(chan,c1,c2);
+        break;
+    case PITCHBEND:
+        Mf_pitchbend(chan,c1,c2);
+        break;
+    case PROGRAM:
+        Mf_program(chan,c1);
+        break;
+    case CHANPRESSURE:
+        Mf_chanpressure(chan,c1);
+        break;
+    }
+}
+
+/* readvarinum - read a varying-length number, and return the */
+/* number of characters it took. */
+
+long Midifile_reader::readvarinum()
+{
+    long value;
+    int c;
+
+    c = egetc();
+    if (midifile_error) return 0;
+
+    value = (long) c;
+    if ( c & 0x80 ) {
+        value &= 0x7f;
+        do {
+            c = egetc();
+            if (midifile_error) return 0;
+            value = (value << 7) + (c & 0x7f);
+        } while (c & 0x80);
+    }
+    return (value);
+}
+
+long Midifile_reader::to32bit(int c1, int c2, int c3, int c4)
+{
+    long value = 0L;
+
+    value = (c1 & 0xff);
+    value = (value<<8) + (c2 & 0xff);
+    value = (value<<8) + (c3 & 0xff);
+    value = (value<<8) + (c4 & 0xff);
+    return (value);
+}
+
+int Midifile_reader::to16bit(int c1, int c2)
+{
+    return ((c1 & 0xff ) << 8) + (c2 & 0xff);
+}
+
+long Midifile_reader::read32bit()
+{
+    int c1, c2, c3, c4;
+
+    c1 = egetc(); if (midifile_error) return 0;
+    c2 = egetc(); if (midifile_error) return 0;
+    c3 = egetc(); if (midifile_error) return 0;
+    c4 = egetc(); if (midifile_error) return 0;
+    return to32bit(c1,c2,c3,c4);
+}
+
+int Midifile_reader::read16bit()
+{
+    int c1, c2;
+    c1 = egetc(); if (midifile_error) return 0;
+    c2 = egetc(); if (midifile_error) return 0;
+    return to16bit(c1,c2);
+}
+
+void Midifile_reader::mferror(char *s)
+{
+    Mf_error(s);
+    midifile_error = 1;
+}
+
+/* The code below allows collection of a system exclusive message of */
+/* arbitrary length.  The Msgbuff is expanded as necessary.  The only */
+/* visible data/routines are msginit(), msgadd(), msg(), msgleng(). */
+
+#define MSGINCREMENT 128
+
+Midifile_reader::Midifile_reader()
+{
+    Mf_nomerge = 0;
+    Mf_currtime = 0L;
+    Mf_skipinit = 0;
+    Mf_toberead = 0;
+
+    Msgbuff = 0;      /* message buffer */
+    Msgsize = 0;        /* Size of currently allocated Msg */
+    Msgindex = 0;       /* index of next available location in Msg */
+}
+
+void Midifile_reader::finalize()
+{
+    if (Msgbuff) Mf_free(Msgbuff, Msgsize);
+    Msgbuff = NULL;
+}
+
+
+void Midifile_reader::msginit()
+{
+    Msgindex = 0;
+}
+
+unsigned char *Midifile_reader::msg()
+{
+    return(Msgbuff);
+}
+
+int Midifile_reader::msgleng()
+{
+    return(Msgindex);
+}
+
+void Midifile_reader::msgadd(int c)
+{
+    /* If necessary, allocate larger message buffer. */
+    if ( Msgindex >= Msgsize )
+        msgenlarge();
+    Msgbuff[Msgindex++] = c;
+}
+
+void Midifile_reader::msgenlarge()
+{
+    unsigned char *newmess;
+    unsigned char *oldmess = Msgbuff;
+    int oldleng = Msgsize;
+
+    Msgsize += MSGINCREMENT;
+    newmess = (unsigned char *) Mf_malloc((sizeof(unsigned char) * Msgsize) );
+
+    /* copy old message into larger new one */
+    if ( oldmess != 0 ) {
+        memcpy(newmess, oldmess, oldleng);
+        Mf_free(oldmess, oldleng);
+    }
+    Msgbuff = newmess;
+}
diff --git a/frontends/CsoundAC/mfmidi.h b/frontends/CsoundAC/mfmidi.h
new file mode 100644
index 0000000..a7f5c50
--- /dev/null
+++ b/frontends/CsoundAC/mfmidi.h
@@ -0,0 +1,98 @@
+#define NOTEOFF 0x80
+#define NOTEON 0x90
+#define PRESSURE 0xa0
+#define CONTROLLER 0xb0
+#define PITCHBEND 0xe0
+#define PROGRAM 0xc0
+#define CHANPRESSURE 0xd0
+
+/* These are the strings used in keynote to identify Standard MIDI File */
+/* meta text messages. */
+
+#define METATEXT                "Text Event"
+#define METACOPYRIGHT           "Copyright Notice"
+#define METASEQUENCE            "Sequence/Track Name"
+#define METAINSTRUMENT          "Instrument Name"
+#define METALYRIC               "Lyric"
+#define METAMARKER              "Marker"
+#define METACUE                 "Cue Point"
+#define METAUNRECOGNIZED        "Unrecognized"
+
+
+class Midifile_reader {
+public:
+    void midifile();
+    int Mf_nomerge; /* 1 => continue'ed system exclusives are */
+				        /* not collapsed. */
+    long Mf_currtime; /* current time in delta-time units */
+    int Mf_skipinit;   /* 1 if initial garbage should be skipped */
+    Midifile_reader();
+	// call finalize() when done or you may leak memory.
+	void finalize();  /* clean up before deletion */
+	// Note: rather than finalize, we should have ~Midifile_reader(),
+	// but at least VC++ complains that there is no Mf_free(), even
+	// though Mf_free is declared as virtual and this is an abstract
+	// class. I don't understand this, so finalize() is a workaround. -RBD
+
+protected:
+    int midifile_error;
+
+    virtual void *Mf_malloc(size_t size) = 0; /* malloc() */
+    virtual void Mf_free(void *obj, size_t size) = 0; /* free() */
+    /* Methods to be called while processing the MIDI file. */
+    virtual void Mf_starttrack() = 0;
+    virtual void Mf_endtrack() = 0;
+    virtual int Mf_getc() = 0;
+    virtual void Mf_chanprefix(int) = 0;
+    virtual void Mf_portprefix(int) = 0;
+    virtual void Mf_eot() = 0;
+    virtual void Mf_error(char *) = 0;
+    virtual void Mf_header(int,int,int) = 0;
+    virtual void Mf_on(int,int,int) = 0;
+    virtual void Mf_off(int,int,int) = 0;
+    virtual void Mf_pressure(int,int,int) = 0;
+    virtual void Mf_controller(int,int,int) = 0;
+    virtual void Mf_pitchbend(int,int,int) = 0;
+    virtual void Mf_program(int,int) = 0;
+    virtual void Mf_chanpressure(int,int) = 0;
+    virtual void Mf_sysex(int,unsigned char*) = 0;
+    virtual void Mf_arbitrary(int,unsigned char*) = 0;
+    virtual void Mf_metamisc(int,int,unsigned char*) = 0;
+    virtual void Mf_seqnum(int) = 0;
+    virtual void Mf_smpte(int,int,int,int,int) = 0;
+    virtual void Mf_timesig(int,int,int,int) = 0;
+    virtual void Mf_tempo(int) = 0;
+    virtual void Mf_keysig(int,int) = 0;
+    virtual void Mf_sqspecific(int,unsigned char*) = 0;
+    virtual void Mf_text(int,int,unsigned char*) = 0;
+
+private:
+    long Mf_toberead;
+
+    long readvarinum();
+    long read32bit();
+    int read16bit();
+    void msgenlarge();
+    unsigned char *msg();
+    int readheader();
+    void readtrack();
+    void sysex();
+    void msginit();
+    int egetc();
+    int msgleng();
+
+    int readmt(char*,int);
+    long to32bit(int,int,int,int);
+    int to16bit(int,int);
+    void mferror(char *);
+    void badbyte(int);
+    void metaevent(int);
+    void msgadd(int);
+    void chanmessage(int,int,int);
+
+    unsigned char *Msgbuff;
+    long Msgsize;
+    long Msgindex;
+};
+
+
diff --git a/frontends/CsoundAC/strparse.cpp b/frontends/CsoundAC/strparse.cpp
new file mode 100644
index 0000000..547424e
--- /dev/null
+++ b/frontends/CsoundAC/strparse.cpp
@@ -0,0 +1,87 @@
+#include <string>
+#include <cstring>
+// #include <iostream>  -- for debugging (cout)
+#include "ctype.h"
+using namespace std;
+#include "strparse.h"
+
+void String_parse::skip_space()
+{
+    while ((*str)[pos] && isspace((*str)[pos])) {
+        pos = pos + 1;
+    }
+}
+
+
+char String_parse::peek()
+{
+    return (*str)[pos];
+}
+
+
+void String_parse::get_nonspace_quoted(string &field)
+{
+    field.clear();
+    skip_space();
+    bool quoted = false;
+    if ((*str)[pos] == '"') {
+        quoted = true;
+        field.append(1, '"');
+        pos = pos + 1;
+    }
+    while ((*str)[pos] && (quoted || !isspace((*str)[pos]))) {
+        if ((*str)[pos] == '"') {
+            if (quoted) {
+                field.append(1, '"');
+                pos = pos + 1;
+            }
+            return;
+        }
+        if ((*str)[pos] == '\\') {
+            pos = pos + 1;
+        }
+        if ((*str)[pos]) {
+            field.append(1, (*str)[pos]);
+            pos = pos + 1;    
+        }
+    }
+}
+
+
+static const char *const escape_chars[] = {"\\n", "\\t", "\\\\", "\\r", "\\\""};
+
+
+void string_escape(string &result, const char *str, const char *quote)
+{
+    int length = (int) strlen(str);
+    if (quote[0]) {
+        result.append(1, quote[0]);
+    }
+    for (int i = 0; i < length; i++) {
+        if (!isalnum((unsigned char) str[i])) {
+            const char *const chars = "\n\t\\\r\"";
+            const char *const special = strchr(chars, str[i]);
+            if (special) {
+                result.append(escape_chars[special - chars]);
+            } else {
+                result.append(1, str[i]);
+            }
+        } else {
+            result.append(1, str[i]);
+        }
+    }
+    result.append(1, quote[0]);
+}
+
+void String_parse::get_remainder(std::string &field)
+{
+    field.clear();
+    skip_space();
+    int len = str->length() - pos;
+    if ((len > 0) && ((*str)[len - 1] == '\n')) { // if str ends in newline, 
+        len--; // reduce length to ignore newline
+    }
+    field.insert(0, *str, pos, len);
+}
+
+    
diff --git a/frontends/CsoundAC/strparse.h b/frontends/CsoundAC/strparse.h
new file mode 100644
index 0000000..046b1dd
--- /dev/null
+++ b/frontends/CsoundAC/strparse.h
@@ -0,0 +1,18 @@
+// strparse.h -- header for String_parse class
+
+class String_parse {
+public:
+    int pos;
+    std::string *str;
+    void init(std::string *s) {
+        str = s;
+        pos = 0;
+    }
+    void skip_space();
+    char peek();
+    void get_nonspace_quoted(std::string &field);
+    // get the remaining characters, skipping initial spaces and final return
+    void get_remainder(std::string &field);
+};
+
+void string_escape(std::string &result, const char *s, const char *quote);
diff --git a/frontends/CsoundAC/trace.cpp b/frontends/CsoundAC/trace.cpp
new file mode 100644
index 0000000..0a735f4
--- /dev/null
+++ b/frontends/CsoundAC/trace.cpp
@@ -0,0 +1,31 @@
+// trace.cpp -- debugging print function
+//
+// (I think this was created to provide a generic print function
+// for use in non-command-line Windows applications where printf
+// does not work. Currently, it is not used, but kept around for
+// possible debugging needs. -RBD)
+
+#include "stdarg.h"
+#include "stdio.h"
+#if defined(MSVC)
+#include "crtdbg.h"
+#endif
+
+
+void trace(char *format, ...)
+{
+    char msg[256];
+    va_list args;
+    va_start(args, format);
+#if defined(MSVC)
+    _vsnprintf_s(msg, 256, _TRUNCATE, format, args);
+#else
+    vsnprintf(msg, 256, format, args);
+#endif
+    va_end(args);
+#if (defined(MSVC) && defined(_DEBUG))
+    _CrtDbgReport(_CRT_WARN, NULL, NULL, NULL, msg);
+#else
+    printf(msg);
+#endif
+}
diff --git a/frontends/CsoundAC/trace.h b/frontends/CsoundAC/trace.h
new file mode 100644
index 0000000..52a23a6
--- /dev/null
+++ b/frontends/CsoundAC/trace.h
@@ -0,0 +1,2 @@
+void trace(char *format, ...);
+
diff --git a/frontends/CsoundVST/CsoundVST.cpp b/frontends/CsoundVST/CsoundVST.cpp
index 6e0bafa..98b2537 100644
--- a/frontends/CsoundVST/CsoundVST.cpp
+++ b/frontends/CsoundVST/CsoundVST.cpp
@@ -227,6 +227,18 @@ uintptr_t CsoundVST::performanceThreadRoutine()
   //*fltkFlags = 274;
   //*fltkFlags = 286;
   *fltkFlags = 256 + 16 + 8 + 4 + 2;
+  // It used to be possible to compile with an empty orc and sco without
+  // crashing, but not any longer. So we test for a valid orc (contains
+  // "instr" and "endin").
+  const std::string &testorc = getOrchestra();
+  if ((testorc.find("instr") == std::string::npos) ||
+      (testorc.find("endin") == std::string::npos))
+    {
+      Message("Csound orchestra missing or invalid.\n");
+      reset();
+      stop();
+      return 0;
+    }
   if(getIsVst())
     {
       Message("Compiling for VST performance.\n");
@@ -452,7 +464,7 @@ void CsoundVST::process(float **hostInput, float **hostOutput, VstInt32 hostFram
             {
               csoundFrameI = 0;
               performKsmps(true);
-           }
+            }
         }
     }
   else
@@ -471,31 +483,31 @@ void CsoundVST::processReplacing(float **hostInput, float **hostOutput, VstInt32
 {
   if(getIsGo())
     {
-    synchronizeScore();
-    MYFLT *csoundInput = GetSpin();
-    MYFLT *csoundOutput = GetSpout();
-    size_t csoundLastFrame = GetKsmps() - 1;
-    size_t channelN = GetNchnls();
-    size_t channelI;
-    for(VstInt32 hostFrameI = 0; hostFrameI < hostFrameN; hostFrameI++)
-      {
-        for(channelI = 0; channelI < channelN; channelI++)
-          {
-            csoundInput[(csoundFrameI * channelN) + channelI] = hostInput[channelI][hostFrameI];
-          }
-        for(channelI = 0; channelI < channelN; channelI++)
-          {
-            hostOutput[channelI][hostFrameI] = csoundOutput[(csoundFrameI * channelN) + channelI] *  outputScale;
-            csoundOutput[(csoundFrameI * channelN) + channelI] = 0.0;
-          }
-        csoundFrameI++;
-        if(csoundFrameI > csoundLastFrame)
-          {
-            csoundFrameI = 0;
-            performKsmps(true);
-          }
-      }
-  }
+      synchronizeScore();
+      MYFLT *csoundInput = GetSpin();
+      MYFLT *csoundOutput = GetSpout();
+      size_t csoundLastFrame = GetKsmps() - 1;
+      size_t channelN = GetNchnls();
+      size_t channelI;
+      for(VstInt32 hostFrameI = 0; hostFrameI < hostFrameN; hostFrameI++)
+        {
+          for(channelI = 0; channelI < channelN; channelI++)
+            {
+              csoundInput[(csoundFrameI * channelN) + channelI] = hostInput[channelI][hostFrameI];
+            }
+          for(channelI = 0; channelI < channelN; channelI++)
+            {
+              hostOutput[channelI][hostFrameI] = csoundOutput[(csoundFrameI * channelN) + channelI] *  outputScale;
+              csoundOutput[(csoundFrameI * channelN) + channelI] = 0.0;
+            }
+          csoundFrameI++;
+          if(csoundFrameI > csoundLastFrame)
+            {
+              csoundFrameI = 0;
+              performKsmps(true);
+            }
+        }
+    }
   else
     {
       for (VstInt32 hostFrameI = 0; hostFrameI < hostFrameN; hostFrameI++)
@@ -798,4 +810,3 @@ extern "C"
     csoundVST->fltkrun();
   }
 }
-
diff --git a/frontends/beats/Makefile b/frontends/beats/Makefile
deleted file mode 100644
index e282568..0000000
--- a/frontends/beats/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-SRC = beats.tab.c lex.yy.c main.c
-OBJ = beats.tab.o lex.yy.o main.o
-
-all:	csbeats
-
-csbeats:	$(OBJ)
-	gcc -g -o csbeats $(OBJ) -lm
-
-lex.yy.c:	beats.l beats.tab.h
-	flex beats.l
-
-lex.yy.o:	lex.yy.c beats.tab.h
-	gcc -g -c lex.yy.c
-
-beats.tab.c:	beats.y
-	bison -d beats.y
-
-beats.tab.o:	beats.tab.c
-	gcc -g -c beats.tab.c
-
-main.o:	main.c
-	gcc -g -c main.c
-
-clean:
-	rm -rf main.o beats.tab.o beats.tab.c beats.tab.h lex.yy.o lex.yy.c \
-	beats makefile
-
-dist:
-	zip beats.zip  beats.l  beats.y main.c Makefile test.xs
-
-makefile: Makefile $(SRC)
-	gcc -M $(SRC) | cat Makefile - > makefile
diff --git a/frontends/beats/beats.h b/frontends/beats/beats.h
new file mode 100644
index 0000000..315b092
--- /dev/null
+++ b/frontends/beats/beats.h
@@ -0,0 +1,41 @@
+/*
+    csbeats.h:
+
+    Copyright (C) 2012 John ffitch,
+
+    This file is part of Csound.
+
+    The Csound Library is free software; you can redistribute it
+    and/or modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    Csound is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with Csound; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+*/
+
+
+    typedef struct {
+      int n;                    /* self referencial */
+      int largest;
+      double *p;
+    } INSTR;
+
+extern INSTR *instr;
+extern int maxinstr;
+extern int yyline;
+extern int last_note;
+extern int last_integer;
+extern double last_duration;
+extern double bpm;
+extern int permeasure;
+extern int yydebug;
+extern int yyparse(void);
+extern void print_instr_structure(void);
diff --git a/frontends/beats/beats.l b/frontends/beats/beats.l
index 7c6d4ce..4d329db 100644
--- a/frontends/beats/beats.l
+++ b/frontends/beats/beats.l
@@ -35,6 +35,7 @@ int yyline = 0;
  extern double bpm;
  int next_instr=0;
  extern int instrument;
+ extern int pnum;
 %}
 
 INTGR           [0-9]+
@@ -97,19 +98,51 @@ BAR             [Bb][Aa][Rr]
 "R"             { last_note = -3; return T_NOTE;}
 "Z"             { last_note = -3; return T_NOTE;}
 
+"e"		{ last_duration = 0.5; return T_DURATION;}
+"e."            { last_duration = 0.75; return T_DURATION;}
+"e.."           { last_duration = 0.875; return T_DURATION;}
 "ed"            { last_duration = 0.75; return T_DURATION;}
+"edd"           { last_duration = 0.875; return T_DURATION;}
+"eq"		{ last_duration = (4.0/5.0)*0.5; return T_DURATION;}
+"es"		{ last_duration = (8.0/7.0)*0.5; return T_DURATION;}
 "et"		{ last_duration = (1.0 / 3.0); return T_DURATION;}
-"e"		{ last_duration = 0.5; return T_DURATION;}
+"et."		{ last_duration = (1.0 / 3.0)*1.5; return T_DURATION;}
+"h"		{ last_duration = 2.0; return T_DURATION;}
+"h."		{ last_duration = 3.0; return T_DURATION;}
+"h.."		{ last_duration = 3.5; return T_DURATION;}
 "hd"		{ last_duration = 3.0; return T_DURATION;}
+"hdd"		{ last_duration = 3.5; return T_DURATION;}
+"hq"		{ last_duration = (4.0/5.0)*2.0; return T_DURATION;}
+"hs"		{ last_duration = (8.0/7.0)*2.0; return T_DURATION;}
 "ht"		{ last_duration = (4.0/3.0); return T_DURATION;}
-"h"		{ last_duration = 2.0; return T_DURATION;}
+"ht."		{ last_duration = (4.0/3.0)*1.5; return T_DURATION;}
+"q"		{ last_duration = 1.0; return T_DURATION;}
+"q."		{ last_duration = 1.5; return T_DURATION;}
+"q.."		{ last_duration = 1.75; return T_DURATION;}
 "qd"		{ last_duration = 1.5; return T_DURATION;}
+"qdd"		{ last_duration = 1.75; return T_DURATION;}
+"qq"		{ last_duration = (4.0/5.0); return T_DURATION;}
+"qs"		{ last_duration = (8.0/7.0); return T_DURATION;}
 "qt"		{ last_duration = (2.0/3.0); return T_DURATION;}
-"q"		{ last_duration = 1.0; return T_DURATION;}
+"qt."		{ last_duration = (2.0/3.0)*1.5; return T_DURATION;}
+"s"		{ last_duration = 0.25; return T_DURATION;}
+"s."		{ last_duration = 0.375; return T_DURATION;}
+"s.."		{ last_duration = 0.4375; return T_DURATION;}
 "sd"		{ last_duration = 0.375; return T_DURATION;}
+"sdd"		{ last_duration = 0.4375; return T_DURATION;}
+"sq"		{ last_duration = (4.0/5.0)*0.25; return T_DURATION;}
+"ss"		{ last_duration = (8.0/7.0)*0.25; return T_DURATION;}
 "st"		{ last_duration = (1.0 / 6.0); return T_DURATION;}
-"s"		{ last_duration = 0.25; return T_DURATION;}
+"st."		{ last_duration = (1.0 / 6.0)*1.5; return T_DURATION;}
 "th"		{ last_duration = 0.125; return T_DURATION;}
+"th."		{ last_duration = 1.5*0.125; return T_DURATION;}
+"th.."		{ last_duration = 1.75*0.125; return T_DURATION;}
+"thd"		{ last_duration = 1.5*0.125; return T_DURATION;}
+"thdd"		{ last_duration = 1.75*0.125; return T_DURATION;}
+"thq"		{ last_duration = (4.0/5.0)*0.125; return T_DURATION;}
+"ths"		{ last_duration = (8.0/7.0)*0.125; return T_DURATION;}
+"tht"		{ last_duration = (2.0 / 3.0)*0.125; return T_DURATION;}
+"tht."		{ last_duration = (2.0 / 3.0)*0.125*1.5; return T_DURATION;}
 "w"		{ last_duration = 4.0; return T_DURATION;}
 
 "fff"           { last_integer =  0; return T_DYN; }
@@ -117,16 +150,23 @@ BAR             [Bb][Aa][Rr]
 "f"             { last_integer = -2; return T_DYN; }
 "mf"            { last_integer = -3; return T_DYN; }
 "mp"            { last_integer = -4; return T_DYN; }
-"p"             { last_integer = -5; return T_DYN; }
+p[0-9]*       { if (yyleng==1) { last_integer = -5; return T_DYN; }
+                  else { pnum = atoi(&yytext[1]); return T_PARA; }
+                }
 "pp"            { last_integer = -6; return T_DYN; }
 "ppp"           { last_integer = -7; return T_DYN; }
+"pppp"          { last_integer = -8; return T_DYN; }
+
+P[1-9][0-9]*    { pnum = atoi(&yytext[1]); return T_PARA; }
 
 "m"             { return T_m;}
 "b"             { return T_b;}
 
 "i"|"I"         { next_instr = 1; return T_INSTR;}
 
-{INTGR}         { last_integer = atoi(yytext); if (next_instr) { instrument = last_integer; next_instr = 0;} return T_INTEGER;}
+{INTGR}         { last_integer = atoi(yytext); 
+                  if (next_instr) { instrument = last_integer; next_instr = 0;}
+                  return T_INTEGER;}
 {FLOAT}         { last_float = atof(yytext); return T_FLOAT;}
 .               { fprintf(stderr, "Unknown character %c(%.2x)\n",
                           yytext[0], yytext[0]);}
diff --git a/frontends/beats/beats.y b/frontends/beats/beats.y
index 566783f..6ee873e 100644
--- a/frontends/beats/beats.y
+++ b/frontends/beats/beats.y
@@ -22,6 +22,10 @@
     02111-1307 USA
 */
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "beats.h"
+
     int last_note;
     int last_integer;
     double last_float;
@@ -37,6 +41,8 @@
     double base_time = 0;
     double last_base_time = 0;
     double bpm;
+    int pnum;
+
     int permeasure;
     int instrument;
     double pitch = -1.0;
@@ -47,6 +53,9 @@
     extern int yyline;
     extern FILE* myout;
     extern int debug;
+    extern int yylex(void);
+    extern void yyerror (char *);
+    static void extend_instruments(void);
 %}
 %token  S_NL
 %token  S_EQ
@@ -63,6 +72,7 @@
 %token  T_b
 %token  T_QUIT
 %token  T_BAR
+%token  T_PARA
 
 %%
 
@@ -71,28 +81,37 @@ goal	: goal statement {}
         ;
 
 statement : S_NL                                { }
-        | T_QUIT                                { fprintf(myout ,"e\n"); return; }
-        | T_BEATS S_EQ T_INTEGER S_NL		{ base_time = last_base_time; bpm = (double)last_integer; printf(";;;setting bpm=%f\n", bpm);}
-        | T_PERMEASURE S_EQ T_INTEGER S_NL 	{ permeasure = last_integer; printf(";;;setting permeasure=%d\n", permeasure);}
+        | T_QUIT                                { fprintf(myout ,"e\n"); return 0; }
+        | T_BEATS S_EQ T_INTEGER S_NL		{ base_time = last_base_time; bpm = (double)last_integer; 
+                                                  fprintf(myout, ";;;setting bpm=%f\n", bpm);}
+        | T_PERMEASURE S_EQ T_INTEGER S_NL 	{ permeasure = last_integer; fprintf(myout,";;;setting permeasure=%d\n", permeasure);}
         | T_BAR S_NL                            { onset0 += permeasure; }
         | T_BAR T_INTEGER S_NL                  { onset0 = permeasure*(last_integer-1); }
         | T_INSTR T_INTEGER attributes S_NL {
+            int i;
             if (debug) {
               fprintf(stderr, "instr=%d onset0,onset1,last0,last1=%f,%f,%f,%f\n",
                       instrument, onset0, onset1, last_onset0, last_onset1);
               fprintf(stderr, "length,last=%f,%f pitch,last=%f,%f amp,last=%d,%d\n",
                       length,last_length, pitch, last_pitch, ampl, last_ampl);
             }
+            //print_instr_structure();
+            if (instrument>maxinstr) extend_instruments();
             if (onset0<0) onset0 = last_onset0;
             if (onset1<0) onset1 = last_onset1;
             if (length==0) length = last_length;
             if (pitch<0 && pitch != -99) pitch = last_pitch;
             if (ampl>0) ampl = last_ampl;
-            if (pitch>=0) fprintf(myout,"i%d %f %f %f %d\n",
-                                  instrument, base_time+60.0*(onset0+onset1)/bpm,
-                                  60.0*length/bpm, pitch, ampl);
-            else fprintf(myout, ";;rest at %f for %f\n",
+            if (pitch>=0) {
+              fprintf(myout,"i%d %f %f %f %d",
+                      instrument, base_time+60.0*(onset0+onset1)/bpm,
+                      60.0*length/bpm, pitch, ampl);
+              for (i=6; i<=instr[instrument].largest; i++)
+                fprintf(myout, " %f", instr[instrument].p[i]);
+            }
+            else fprintf(myout, ";;rest at %f for %f",
                          base_time+60.0*(onset0+onset1)/bpm,60.0*length/bpm);
+            fprintf(myout, "\n");
             last_base_time = base_time+60.0*(onset0+onset1+length)/bpm;
             last_onset0 = onset0;
             last_onset1 = onset1 + length;
@@ -136,6 +155,42 @@ attribute: T_NOTE T_INTEGER { if (last_note>=-2) {
                              onset1 += 1; };
         | T_DYN            { ampl = last_integer; }
 //        | S_PLS            { onset0 = last_onset1; onset1 += last_length; }
+        | T_PARA S_EQ T_FLOAT { 
+            if (instrument>maxinstr) extend_instruments();
+            //print_instr_structure();
+            if (pnum<6)
+              fprintf(stderr, "p field %d ignored as less than 6\n", pnum);
+            else {
+              if (pnum>instr[instrument].largest) {
+                int i;
+                instr[instrument].p =
+                  (double*)realloc(instr[instrument].p, sizeof(double)*(pnum+1));
+                for (i=instr[instrument].largest+1; i<=pnum; i++)
+                  instr[instrument].p[i]=0.0;
+                instr[instrument].largest = pnum;
+              }
+              instr[instrument].p[pnum] = last_float;
+            }
+            //print_instr_structure();
+          }
+        | T_PARA S_EQ T_INTEGER { 
+            if (instrument>maxinstr) extend_instruments();
+            //print_instr_structure();
+            if (pnum<6)
+              fprintf(stderr, "p field %d ignored as less than 6\n", pnum);
+            else {
+              if (pnum>instr[instrument].largest) {
+                int i;
+                instr[instrument].p =
+                  (double*)realloc(instr[instrument].p, sizeof(double)*(pnum+1));
+                for (i=instr[instrument].largest+1; i<=pnum; i++)
+                  instr[instrument].p[i]=0.0;
+                instr[instrument].largest = pnum;
+              }
+              instr[instrument].p[pnum] = (double)last_integer;
+            }
+            //print_instr_structure();
+          }
         ;
 
 %%
@@ -152,3 +207,16 @@ double int2pow(int n)
     }
     return ans;
 }
+
+static void extend_instruments(void)
+{
+    int i;
+    int tmp = maxinstr+1;
+    instr = (INSTR*)realloc(instr, tmp*sizeof(INSTR));
+    maxinstr = instrument;
+    for (i=tmp; i<=maxinstr; i++) {
+      instr[i].p = (double*) calloc(6, sizeof(double));
+      instr[i].largest = 5;
+      instr[i].n = i;
+    }
+}
diff --git a/frontends/beats/main.c b/frontends/beats/main.c
index dda8ca0..9c6c75b 100644
--- a/frontends/beats/main.c
+++ b/frontends/beats/main.c
@@ -21,14 +21,10 @@
     02111-1307 USA
 */
 #include <stdio.h>
+#include <stdlib.h>
 #include <time.h>
-extern int yyline;
-extern int last_note;
-extern int last_integer;
-extern double last_duration;
-extern double bpm;
-extern int permeasure;
-extern int yydebug;
+#include "beats.h"
+
 FILE *myout;
 FILE *yyin;
 int debug = 0;
@@ -39,11 +35,16 @@ double pt[13] = { 8.1757989156,  8.6619572180,  9.1770239974,  9.7227182413,
                  16.3516084259
 };
 
+INSTR *instr;
+int maxinstr;
+
 int main(int argc, char **argv)
 {
+    int i;
     char buf[80];
     time_t timep;
     struct tm tm;
+    instr = NULL;
     bpm = 60;
     permeasure = 4;
     yydebug = 0;
@@ -57,14 +58,46 @@ int main(int argc, char **argv)
       myout = fopen(argv[3], "w");
     }
     else if (argc==2) {
-      debug = 1;
+      yydebug = debug = 1;
       myout = stdout;
     } else
       myout = stdout;
     time(&timep);
+    
+#ifndef LINUX
+    {
+      struct tm *date_ptr = localtime(&timep);
+      memcpy(&tm, date_ptr, sizeof(struct tm));
+    }
+#else
     localtime_r(&timep, &tm);
+#endif
+    
     strftime(buf, 80, "%a %Y %b %d %H:%M:%S", &tm);
     fprintf(myout, ";;; Generated by beats on %s\n\n", buf);
+    maxinstr=10;
+    instr = (INSTR*) calloc(maxinstr+1, sizeof(INSTR));
+    for (i=1; i<=maxinstr; i++) {
+      instr[i].p = (double*) calloc(6, sizeof(double));
+      instr[i].largest = 5;
+      instr[i].n = i;
+    }
     yyparse();
     return 0;
 }
+
+void print_instr_structure(void)
+{
+    int i;
+    fprintf(stderr, "Intruments 1-%d\n", maxinstr);
+    for (i=1; i<=maxinstr; i++) {
+      fprintf(stderr, "%d: last p is %d, array is at %p\n", i, instr[i].largest, instr[i].p);
+      if (instr[i].largest>5) {
+        int j;
+        for (j=6; j<=instr[i].largest; j++)
+          fprintf(stderr, " %d->%lf", j, instr[i].p[j]);
+        fprintf(stderr, "\n");
+      }
+    }
+    fprintf(stderr, "\n end \n");
+}
diff --git a/frontends/beats/tchai.csd b/frontends/beats/tchai.csd
index d9c3ca5..6381d6d 100644
--- a/frontends/beats/tchai.csd
+++ b/frontends/beats/tchai.csd
@@ -18,7 +18,7 @@ instr 101,102,103
 endin
  
 </CsInstruments>
-<CsScore bin="beats">
+<CsScore bin="csbeats">
 ; by Brian Baughn 3-14-05
 ; bbaughn at berklee.net
 
diff --git a/frontends/csoundapi_tilde/csoundapi_tilde.c b/frontends/csoundapi_tilde/csoundapi_tilde.c
index 6591c3d..e6d3e2d 100644
--- a/frontends/csoundapi_tilde/csoundapi_tilde.c
+++ b/frontends/csoundapi_tilde/csoundapi_tilde.c
@@ -507,14 +507,14 @@ static void csoundapi_tabset(t_csoundapi *x, t_symbol *tab, t_float f)
   if(cstabsize != -1) {
     pdarray =  (t_garray *) pd_findbyclass(tab, garray_class);
     if( pdarray != NULL) {
-    garray_getfloatwords(pdarray, &pdarraysize, &pdarray_vec);  
+    garray_getfloatwords(pdarray, &pdarraysize, &pdarray_vec);
     size = cstabsize <= pdarraysize ? cstabsize : pdarraysize;
     for(i = 0; i < size; i++) {
       cstable[i] = (MYFLT) pdarray_vec[i].w_float;
     }
     }
     else {
-      post ("csoundapi~: could not find array\n"); 
+      post ("csoundapi~: could not find array\n");
       return;
     }
   } else post("csoundapi~: csound table %d not found \n", (int) f);
@@ -533,12 +533,12 @@ static void csoundapi_tabget(t_csoundapi *x,  t_symbol *tab, t_float f)
     if( pdarray != NULL) {
     garray_getfloatwords(pdarray, &pdarraysize, &pdarray_vec);
     size = cstabsize <= pdarraysize ? cstabsize : pdarraysize;
-    for(i = 0; i < size; i++) 
+    for(i = 0; i < size; i++)
       pdarray_vec[i].w_float = (t_float) cstable[i];
       garray_redraw(pdarray);
     }
     else {
-      post ("csoundapi~: could not find array\n"); 
+      post ("csoundapi~: could not find array\n");
       return;
     }
   } else post("csoundapi~: csound table %d not found \n", (int) f);
@@ -866,4 +866,3 @@ static void csoundapi_bend(t_csoundapi *x, t_floatarg bend, t_floatarg chan)
 
   MIDI_FINISH;
 }
-
diff --git a/frontends/fltk_gui/CsoundPerformanceSettingsPanel.cpp b/frontends/fltk_gui/CsoundPerformanceSettingsPanel.cpp
index 31048fc..89dc84a 100644
--- a/frontends/fltk_gui/CsoundPerformanceSettingsPanel.cpp
+++ b/frontends/fltk_gui/CsoundPerformanceSettingsPanel.cpp
@@ -53,6 +53,7 @@ static char *csoundMessages;
 static char startText[180];
 static char endText[180];
 static bool relevantText;
+static int  errors = 0;
 
 static void getCsoundMessages(CSOUND *csound, int attr,
                                      const char *format, va_list valist)
@@ -506,8 +507,10 @@ void CsoundPerformanceSettingsPanel::querySoundDevices()
       c.Reset();
       strcpy(csoundMessagesIn, csoundMessages);
       strcpy(csoundMessages, "\0");
-      (void)system("rm ________temp.csd");
-
+      if (system("rm ________temp.csd")<0) {
+        errors++;
+        fprintf(stderr, "Failed to remove temp file\n");
+      }
       /* Set output device names */
       char *tmp;
       char *tmp2 = (char *) calloc (80, sizeof(char));
@@ -703,7 +706,10 @@ void CsoundPerformanceSettingsPanel::queryMidiDevices()
         }
       }
       fclose(f);
-      (void)system("amidi -l > _csound5guitmpfile.txt");
+      if (system("amidi -l > _csound5guitmpfile.txt")<0) {
+        errors++;
+        fprintf(stderr, "amidi failed\n");
+      }
       f = fopen("_csound5guitmpfile.txt", "r");
       line = (char *) calloc (128, sizeof(char));
       if (f)  {
@@ -760,7 +766,10 @@ void CsoundPerformanceSettingsPanel::queryMidiDevices()
         }
       }
       fclose(f);
-      (void)system("rm _csound5guitmpfile.txt");
+      if (system("rm _csound5guitmpfile.txt")<0) {
+        errors++;
+        fprintf(stderr, "failed to remove txt file\n");
+      }
     }
     else
 #endif //LINUX
@@ -817,7 +826,10 @@ void CsoundPerformanceSettingsPanel::queryMidiDevices()
       c.Reset();
       strcpy(csoundMessagesIn, csoundMessages);
       strcpy(csoundMessages, "\0");
-      (void)system("rm ________temp.csd");
+      if (system("rm ________temp.csd")<0) {
+        errors++;
+        fprintf(stderr, "Failed to remobve temp file\n");
+      }
 
       /* Set output device names */
       char *tmp;
diff --git a/head-mingw-build.sh b/head-mingw-build.sh
index 4614059..5d3d64d 100755
--- a/head-mingw-build.sh
+++ b/head-mingw-build.sh
@@ -1,5 +1,5 @@
 #!/bin/sh
 
-python c:/utah/opt/Python27/Scripts/scons.py custom=custom-mingw.py buildLuaWrapper=1 buildPythonWrapper=1 usePortMIDI=1 useJack=0 buildCsoundVST=1 buildvst4cs=1 buildInterfaces=1 buildCsoundAC=1 buildJavaWrapper=1 useOSC=1 buildPythonOpcodes=1 buildLuaOpcodes=1 buildLoris=0 buildStkOpcodes=1 buildWinsound=1 noFLTKThreads=0 buildPDClass=1 buildVirtual=1 buildTclcsound=1 tclversion=85 buildLua=1 useDouble=1 dynamicCsoundLibrary=1 buildCSEditor=1 gcc4opt=core2 buildRelease=1 bufferoverflowu=0 noDebug=0 useOpenMP=1 buildMultiCore=1 install=1 $1 $2 $3 $4
+python c:/utah/opt/Python27/Scripts/scons.py custom=custom-mingw.py useLrint=1 buildLuaWrapper=1 buildPythonWrapper=1 usePortMIDI=1 useJack=0 buildCsoundVST=1 buildvst4cs=1 buildInterfaces=1 buildCsoundAC=1 buildJavaWrapper=1 useOSC=1 buildPythonOpcodes=1 buildLuaOpcodes=1 buildLoris=0 buildStkOpcodes=1 buildWinsound=1 noFLTKThreads=0 buildPDClass=1 buildVirtual=1 buildTclcsound=1 tclversion=85 buildLua=1 useDouble=1 dynamicCsoundLibrary=1 buildCSEditor=1 gcc4opt=core2 buildRelease=1 bufferoverflowu=0 noDebug=0 useOpenMP=1 buildMultiCore=1 install=1 $1 $2 $3 $4
 
 # doxygen
diff --git a/head-mingw-env.sh b/head-mingw-env.sh
index 44b97b2..0d4be08 100755
--- a/head-mingw-env.sh
+++ b/head-mingw-env.sh
@@ -26,6 +26,7 @@ export PATH=${PATH}:/c/utah/opt/musicxml-v2/win32/codeblocks
 export PATH=${PATH}:/c/utah/opt/gtk/bin
 export PATH=${PATH}:/c/utah/opt/MinGW/msys/1.0/bin
 export PATH=${PATH}:/c/utah/opt/scite
+export PATH=${PATH}:/c/utah/opt/emacs-23.2/bin
 export PATH=${PATH}:/c/utah/opt/Qt/QtCreator/bin
 export PATH=${PATH}:/c/utah/opt/qcs-build-desktop/bin
 export PATH=/c/utah/opt/PythonQt-build-desktop/lib:${PATH}
@@ -34,5 +35,7 @@ export RAWWAVE_PATH=D:/utah/home/mkg/csound/csound5/Opcodes/stk/rawwaves
 export OPCODEDIR64=D:/utah/home/mkg/csound/csound5
 export PYTHONPATH=D:/utah/home/mkg/csound/csound5
 export PATH=/c/utah/opt/MinGW/bin:${PATH}
+export LUA_PATH=${LUA_PATH}";D:/utah/home/mkg/csound/csound5/?.lua"
+export LUA_CPATH=${LUA_CPATH}";D:/utah/home/mkg/csound/csound5/?.dll;D:/utah/home/mkg/csound/csound5/lua?.dll"
 echo $PATH
 
diff --git a/iOS/.gitignore b/iOS/.gitignore
new file mode 100644
index 0000000..24850a5
--- /dev/null
+++ b/iOS/.gitignore
@@ -0,0 +1,5 @@
+cs5iOS
+*DS_Store
+libcsound.a
+libsndfile.a
+csound-iOS-*
diff --git a/iOS/Csound iOS Examples/.gitignore b/iOS/Csound iOS Examples/.gitignore
new file mode 100644
index 0000000..9a01cdb
--- /dev/null
+++ b/iOS/Csound iOS Examples/.gitignore	
@@ -0,0 +1,4 @@
+/build*
+*DS_Store
+Csound iOS Examples.xcodeproj/xcuserdata*
+Csound iOS Examples.xcodeproj/project.xcworkspace/xcuserdata*
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples.xcodeproj/project.pbxproj b/iOS/Csound iOS Examples/Csound iOS Examples.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..39bf5ec
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples.xcodeproj/project.pbxproj	
@@ -0,0 +1,894 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		F6B6465E14D348E5005F786B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B6465D14D348E5005F786B /* UIKit.framework */; };
+		F6B6466014D348E5005F786B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B6465F14D348E5005F786B /* Foundation.framework */; };
+		F6B6466214D348E5005F786B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B6466114D348E5005F786B /* CoreGraphics.framework */; };
+		F6B6466814D348E5005F786B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F6B6466614D348E5005F786B /* InfoPlist.strings */; };
+		F6B6466A14D348E5005F786B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6466914D348E5005F786B /* main.m */; };
+		F6B6466E14D348E5005F786B /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6466D14D348E5005F786B /* AppDelegate.m */; };
+		F6B6467114D348E5005F786B /* MasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6467014D348E5005F786B /* MasterViewController.m */; };
+		F6B6467414D348E5005F786B /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6467314D348E5005F786B /* DetailViewController.m */; };
+		F6B6467714D348E5005F786B /* MasterViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6467514D348E5005F786B /* MasterViewController_iPhone.xib */; };
+		F6B6467A14D348E5005F786B /* MasterViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6467814D348E5005F786B /* MasterViewController_iPad.xib */; };
+		F6B6467D14D348E5005F786B /* DetailViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6467B14D348E5005F786B /* DetailViewController_iPhone.xib */; };
+		F6B6468014D348E5005F786B /* DetailViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6467E14D348E5005F786B /* DetailViewController_iPad.xib */; };
+		F6B646E514D34C82005F786B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B646E414D34C82005F786B /* QuartzCore.framework */; };
+		F6B646E714D34C8C005F786B /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B646E614D34C8C005F786B /* AVFoundation.framework */; };
+		F6B646EA14D34CA3005F786B /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B646E814D34CA3005F786B /* AudioToolbox.framework */; };
+		F6B646EB14D34CA3005F786B /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B646E914D34CA3005F786B /* CoreAudio.framework */; };
+		F6B646EE14D34CB4005F786B /* CoreMIDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B646EC14D34CB4005F786B /* CoreMIDI.framework */; };
+		F6B646EF14D34CB4005F786B /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B646ED14D34CB4005F786B /* CoreMotion.framework */; };
+		F6B6474814D353A7005F786B /* AudioFileTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B646F314D353A7005F786B /* AudioFileTestViewController.m */; };
+		F6B6474914D353A7005F786B /* AudioFileTestViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B646F414D353A7005F786B /* AudioFileTestViewController.xib */; };
+		F6B6474A14D353A7005F786B /* audiofiletest.aif in Resources */ = {isa = PBXBuildFile; fileRef = F6B646F614D353A7005F786B /* audiofiletest.aif */; };
+		F6B6474B14D353A7005F786B /* audiofiletest.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B646F714D353A7005F786B /* audiofiletest.csd */; };
+		F6B6474C14D353A7005F786B /* audioInTest.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B646F814D353A7005F786B /* audioInTest.csd */; };
+		F6B6474D14D353A7005F786B /* AudioInTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B646FA14D353A7005F786B /* AudioInTestViewController.m */; };
+		F6B6474E14D353A7005F786B /* AudioInTestViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B646FB14D353A7005F786B /* AudioInTestViewController.xib */; };
+		F6B6474F14D353A7005F786B /* consoleoutput.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B646FC14D353A7005F786B /* consoleoutput.csd */; };
+		F6B6475014D353A7005F786B /* ConsoleOutputViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B646FE14D353A7005F786B /* ConsoleOutputViewController.m */; };
+		F6B6475114D353A7005F786B /* ConsoleOutputViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B646FF14D353A7005F786B /* ConsoleOutputViewController.xib */; };
+		F6B6475214D353A7005F786B /* LevelMeterView.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6470114D353A7005F786B /* LevelMeterView.m */; };
+		F6B6475314D353A7005F786B /* pitchshifter.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6470214D353A7005F786B /* pitchshifter.csd */; };
+		F6B6475414D353A7005F786B /* recordTest.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6470314D353A7005F786B /* recordTest.csd */; };
+		F6B6475514D353A7005F786B /* UIControlXY.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6470514D353A7005F786B /* UIControlXY.m */; };
+		F6B6475614D353A7005F786B /* UIKnob.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6470714D353A7005F786B /* UIKnob.m */; };
+		F6B6475714D353A7005F786B /* BaseCsoundViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6470914D353A7005F786B /* BaseCsoundViewController.m */; };
+		F6B6475814D353A7005F786B /* buttonTest.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6470B14D353A7005F786B /* buttonTest.csd */; };
+		F6B6475914D353A7005F786B /* ButtonTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6470D14D353A7005F786B /* ButtonTestViewController.m */; };
+		F6B6475A14D353A7005F786B /* ButtonTestViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6470E14D353A7005F786B /* ButtonTestViewController.xib */; };
+		F6B6475B14D353A7005F786B /* CsoundHaiku4ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6471114D353A7005F786B /* CsoundHaiku4ViewController.m */; };
+		F6B6475C14D353A7005F786B /* CsoundHaiku4ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6471214D353A7005F786B /* CsoundHaiku4ViewController.xib */; };
+		F6B6475D14D353A7005F786B /* IV.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6471314D353A7005F786B /* IV.csd */; };
+		F6B6475E14D353A7005F786B /* hardwareTest.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6471514D353A7005F786B /* hardwareTest.csd */; };
+		F6B6475F14D353A7005F786B /* HardwareTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6471714D353A7005F786B /* HardwareTestViewController.m */; };
+		F6B6476014D353A7005F786B /* HardwareTestViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6471814D353A7005F786B /* HardwareTestViewController.xib */; };
+		F6B6476114D353A7005F786B /* harmonizer.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6471A14D353A7005F786B /* harmonizer.csd */; };
+		F6B6476214D353A7005F786B /* HarmonizerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6471C14D353A7005F786B /* HarmonizerTest.m */; };
+		F6B6476314D353A7005F786B /* HarmonizerTest.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6471D14D353A7005F786B /* HarmonizerTest.xib */; };
+		F6B6476414D353A7005F786B /* IntroductionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6472014D353A7005F786B /* IntroductionViewController.m */; };
+		F6B6476514D353A7005F786B /* IntroductionViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6472114D353A7005F786B /* IntroductionViewController.xib */; };
+		F6B6476614D353A7005F786B /* CsoundVirtualKeyboard.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6472414D353A7005F786B /* CsoundVirtualKeyboard.m */; };
+		F6B6476714D353A7005F786B /* midiTest.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6472514D353A7005F786B /* midiTest.csd */; };
+		F6B6476814D353A7005F786B /* MidiTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6472714D353A7005F786B /* MidiTestViewController.m */; };
+		F6B6476914D353A7005F786B /* MidiTestViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6472814D353A7005F786B /* MidiTestViewController.xib */; };
+		F6B6476A14D353A7005F786B /* MidiTestViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6472914D353A7005F786B /* MidiTestViewController_iPad.xib */; };
+		F6B6476B14D353A7005F786B /* multiTouchXY.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6472B14D353A7005F786B /* multiTouchXY.csd */; };
+		F6B6476C14D353A7005F786B /* MultiTouchXYViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6472D14D353A7005F786B /* MultiTouchXYViewController.m */; };
+		F6B6476D14D353A7005F786B /* MultiTouchXYViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6472E14D353A7005F786B /* MultiTouchXYViewController.xib */; };
+		F6B6476E14D353A7005F786B /* PitchShifterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6473114D353A7005F786B /* PitchShifterViewController.m */; };
+		F6B6476F14D353A7005F786B /* PitchShifterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6473214D353A7005F786B /* PitchShifterViewController.xib */; };
+		F6B6477014D353A7005F786B /* RecordTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6473514D353A7005F786B /* RecordTestViewController.m */; };
+		F6B6477114D353A7005F786B /* RecordTestViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6473614D353A7005F786B /* RecordTestViewController.xib */; };
+		F6B6477214D353A7005F786B /* SimpleTest1ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6473914D353A7005F786B /* SimpleTest1ViewController.m */; };
+		F6B6477314D353A7005F786B /* SimpleTest1ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6473A14D353A7005F786B /* SimpleTest1ViewController.xib */; };
+		F6B6477414D353A7005F786B /* test.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6473B14D353A7005F786B /* test.csd */; };
+		F6B6477514D353A7005F786B /* SimpleTest2ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6473E14D353A7005F786B /* SimpleTest2ViewController.m */; };
+		F6B6477614D353A7005F786B /* SimpleTest2ViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6473F14D353A7005F786B /* SimpleTest2ViewController.xib */; };
+		F6B6477714D353A7005F786B /* test2.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6474014D353A7005F786B /* test2.csd */; };
+		F6B6477814D353A7005F786B /* Waveview.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6474314D353A7005F786B /* Waveview.m */; };
+		F6B6477914D353A7005F786B /* Waveviewtest.csd in Resources */ = {isa = PBXBuildFile; fileRef = F6B6474414D353A7005F786B /* Waveviewtest.csd */; };
+		F6B6477A14D353A7005F786B /* WaveviewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6474614D353A7005F786B /* WaveviewViewController.m */; };
+		F6B6477B14D353A7005F786B /* WaveviewViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = F6B6474714D353A7005F786B /* WaveviewViewController.xib */; };
+		F6B647BA14D353D2005F786B /* CsoundObj.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6477F14D353D2005F786B /* CsoundObj.m */; };
+		F6B647BB14D353D2005F786B /* CsoundMIDI.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6478214D353D2005F786B /* CsoundMIDI.m */; };
+		F6B647BC14D353D2005F786B /* MidiWidgetsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6478414D353D2005F786B /* MidiWidgetsManager.m */; };
+		F6B647BD14D353D2005F786B /* SliderMidiWidgetWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6478714D353D2005F786B /* SliderMidiWidgetWrapper.m */; };
+		F6B647BE14D353D2005F786B /* BaseValueCacheable.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6478A14D353D2005F786B /* BaseValueCacheable.m */; };
+		F6B647BF14D353D2005F786B /* CachedAccelerometer.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6478C14D353D2005F786B /* CachedAccelerometer.m */; };
+		F6B647C014D353D2005F786B /* CachedAttitude.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6478E14D353D2005F786B /* CachedAttitude.m */; };
+		F6B647C114D353D2005F786B /* CachedButton.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6479014D353D2005F786B /* CachedButton.m */; };
+		F6B647C214D353D2005F786B /* CachedGyroscope.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6479214D353D2005F786B /* CachedGyroscope.m */; };
+		F6B647C314D353D2005F786B /* CachedSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6479414D353D2005F786B /* CachedSlider.m */; };
+		F6B647C414D353D2005F786B /* CachedSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = F6B6479614D353D2005F786B /* CachedSwitch.m */; };
+		F6B647CF14D353D2005F786B /* libcsound.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B647B814D353D2005F786B /* libcsound.a */; };
+		F6B647D014D353D2005F786B /* libsndfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F6B647B914D353D2005F786B /* libsndfile.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		F6B6465914D348E5005F786B /* Csound iOS Examples.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Csound iOS Examples.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		F6B6465D14D348E5005F786B /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
+		F6B6465F14D348E5005F786B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+		F6B6466114D348E5005F786B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+		F6B6466514D348E5005F786B /* Csound iOS Examples-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Csound iOS Examples-Info.plist"; sourceTree = "<group>"; };
+		F6B6466714D348E5005F786B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		F6B6466914D348E5005F786B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+		F6B6466B14D348E5005F786B /* Csound iOS Examples-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Csound iOS Examples-Prefix.pch"; sourceTree = "<group>"; };
+		F6B6466C14D348E5005F786B /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+		F6B6466D14D348E5005F786B /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+		F6B6466F14D348E5005F786B /* MasterViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MasterViewController.h; sourceTree = "<group>"; };
+		F6B6467014D348E5005F786B /* MasterViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MasterViewController.m; sourceTree = "<group>"; };
+		F6B6467214D348E5005F786B /* DetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = "<group>"; };
+		F6B6467314D348E5005F786B /* DetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = "<group>"; };
+		F6B6467614D348E5005F786B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MasterViewController_iPhone.xib; sourceTree = "<group>"; };
+		F6B6467914D348E5005F786B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MasterViewController_iPad.xib; sourceTree = "<group>"; };
+		F6B6467C14D348E5005F786B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/DetailViewController_iPhone.xib; sourceTree = "<group>"; };
+		F6B6467F14D348E5005F786B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/DetailViewController_iPad.xib; sourceTree = "<group>"; };
+		F6B646E414D34C82005F786B /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+		F6B646E614D34C8C005F786B /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
+		F6B646E814D34CA3005F786B /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
+		F6B646E914D34CA3005F786B /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
+		F6B646EC14D34CB4005F786B /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = System/Library/Frameworks/CoreMIDI.framework; sourceTree = SDKROOT; };
+		F6B646ED14D34CB4005F786B /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; };
+		F6B646F214D353A7005F786B /* AudioFileTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioFileTestViewController.h; sourceTree = "<group>"; };
+		F6B646F314D353A7005F786B /* AudioFileTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioFileTestViewController.m; sourceTree = "<group>"; };
+		F6B646F414D353A7005F786B /* AudioFileTestViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AudioFileTestViewController.xib; sourceTree = "<group>"; };
+		F6B646F614D353A7005F786B /* audiofiletest.aif */ = {isa = PBXFileReference; lastKnownFileType = file; path = audiofiletest.aif; sourceTree = "<group>"; };
+		F6B646F714D353A7005F786B /* audiofiletest.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = audiofiletest.csd; sourceTree = "<group>"; };
+		F6B646F814D353A7005F786B /* audioInTest.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = audioInTest.csd; sourceTree = "<group>"; };
+		F6B646F914D353A7005F786B /* AudioInTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioInTestViewController.h; sourceTree = "<group>"; };
+		F6B646FA14D353A7005F786B /* AudioInTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AudioInTestViewController.m; sourceTree = "<group>"; };
+		F6B646FB14D353A7005F786B /* AudioInTestViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AudioInTestViewController.xib; sourceTree = "<group>"; };
+		F6B646FC14D353A7005F786B /* consoleoutput.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = consoleoutput.csd; sourceTree = "<group>"; };
+		F6B646FD14D353A7005F786B /* ConsoleOutputViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConsoleOutputViewController.h; sourceTree = "<group>"; };
+		F6B646FE14D353A7005F786B /* ConsoleOutputViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConsoleOutputViewController.m; sourceTree = "<group>"; };
+		F6B646FF14D353A7005F786B /* ConsoleOutputViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ConsoleOutputViewController.xib; sourceTree = "<group>"; };
+		F6B6470014D353A7005F786B /* LevelMeterView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LevelMeterView.h; sourceTree = "<group>"; };
+		F6B6470114D353A7005F786B /* LevelMeterView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LevelMeterView.m; sourceTree = "<group>"; };
+		F6B6470214D353A7005F786B /* pitchshifter.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pitchshifter.csd; sourceTree = "<group>"; };
+		F6B6470314D353A7005F786B /* recordTest.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = recordTest.csd; sourceTree = "<group>"; };
+		F6B6470414D353A7005F786B /* UIControlXY.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIControlXY.h; sourceTree = "<group>"; };
+		F6B6470514D353A7005F786B /* UIControlXY.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIControlXY.m; sourceTree = "<group>"; };
+		F6B6470614D353A7005F786B /* UIKnob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIKnob.h; sourceTree = "<group>"; };
+		F6B6470714D353A7005F786B /* UIKnob.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIKnob.m; sourceTree = "<group>"; };
+		F6B6470814D353A7005F786B /* BaseCsoundViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseCsoundViewController.h; sourceTree = "<group>"; };
+		F6B6470914D353A7005F786B /* BaseCsoundViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseCsoundViewController.m; sourceTree = "<group>"; };
+		F6B6470B14D353A7005F786B /* buttonTest.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = buttonTest.csd; sourceTree = "<group>"; };
+		F6B6470C14D353A7005F786B /* ButtonTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ButtonTestViewController.h; sourceTree = "<group>"; };
+		F6B6470D14D353A7005F786B /* ButtonTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ButtonTestViewController.m; sourceTree = "<group>"; };
+		F6B6470E14D353A7005F786B /* ButtonTestViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ButtonTestViewController.xib; sourceTree = "<group>"; };
+		F6B6471014D353A7005F786B /* CsoundHaiku4ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsoundHaiku4ViewController.h; sourceTree = "<group>"; };
+		F6B6471114D353A7005F786B /* CsoundHaiku4ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CsoundHaiku4ViewController.m; sourceTree = "<group>"; };
+		F6B6471214D353A7005F786B /* CsoundHaiku4ViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CsoundHaiku4ViewController.xib; sourceTree = "<group>"; };
+		F6B6471314D353A7005F786B /* IV.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = IV.csd; sourceTree = "<group>"; };
+		F6B6471514D353A7005F786B /* hardwareTest.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hardwareTest.csd; sourceTree = "<group>"; };
+		F6B6471614D353A7005F786B /* HardwareTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HardwareTestViewController.h; sourceTree = "<group>"; };
+		F6B6471714D353A7005F786B /* HardwareTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HardwareTestViewController.m; sourceTree = "<group>"; };
+		F6B6471814D353A7005F786B /* HardwareTestViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HardwareTestViewController.xib; sourceTree = "<group>"; };
+		F6B6471A14D353A7005F786B /* harmonizer.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = harmonizer.csd; sourceTree = "<group>"; };
+		F6B6471B14D353A7005F786B /* HarmonizerTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HarmonizerTest.h; sourceTree = "<group>"; };
+		F6B6471C14D353A7005F786B /* HarmonizerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HarmonizerTest.m; sourceTree = "<group>"; };
+		F6B6471D14D353A7005F786B /* HarmonizerTest.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HarmonizerTest.xib; sourceTree = "<group>"; };
+		F6B6471F14D353A7005F786B /* IntroductionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntroductionViewController.h; sourceTree = "<group>"; };
+		F6B6472014D353A7005F786B /* IntroductionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IntroductionViewController.m; sourceTree = "<group>"; };
+		F6B6472114D353A7005F786B /* IntroductionViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IntroductionViewController.xib; sourceTree = "<group>"; };
+		F6B6472314D353A7005F786B /* CsoundVirtualKeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsoundVirtualKeyboard.h; sourceTree = "<group>"; };
+		F6B6472414D353A7005F786B /* CsoundVirtualKeyboard.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CsoundVirtualKeyboard.m; sourceTree = "<group>"; };
+		F6B6472514D353A7005F786B /* midiTest.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = midiTest.csd; sourceTree = "<group>"; };
+		F6B6472614D353A7005F786B /* MidiTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MidiTestViewController.h; sourceTree = "<group>"; };
+		F6B6472714D353A7005F786B /* MidiTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MidiTestViewController.m; sourceTree = "<group>"; };
+		F6B6472814D353A7005F786B /* MidiTestViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MidiTestViewController.xib; sourceTree = "<group>"; };
+		F6B6472914D353A7005F786B /* MidiTestViewController_iPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MidiTestViewController_iPad.xib; sourceTree = "<group>"; };
+		F6B6472B14D353A7005F786B /* multiTouchXY.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = multiTouchXY.csd; sourceTree = "<group>"; };
+		F6B6472C14D353A7005F786B /* MultiTouchXYViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiTouchXYViewController.h; sourceTree = "<group>"; };
+		F6B6472D14D353A7005F786B /* MultiTouchXYViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiTouchXYViewController.m; sourceTree = "<group>"; };
+		F6B6472E14D353A7005F786B /* MultiTouchXYViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MultiTouchXYViewController.xib; sourceTree = "<group>"; };
+		F6B6473014D353A7005F786B /* PitchShifterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PitchShifterViewController.h; sourceTree = "<group>"; };
+		F6B6473114D353A7005F786B /* PitchShifterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PitchShifterViewController.m; sourceTree = "<group>"; };
+		F6B6473214D353A7005F786B /* PitchShifterViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PitchShifterViewController.xib; sourceTree = "<group>"; };
+		F6B6473414D353A7005F786B /* RecordTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RecordTestViewController.h; sourceTree = "<group>"; };
+		F6B6473514D353A7005F786B /* RecordTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RecordTestViewController.m; sourceTree = "<group>"; };
+		F6B6473614D353A7005F786B /* RecordTestViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RecordTestViewController.xib; sourceTree = "<group>"; };
+		F6B6473814D353A7005F786B /* SimpleTest1ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleTest1ViewController.h; sourceTree = "<group>"; };
+		F6B6473914D353A7005F786B /* SimpleTest1ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleTest1ViewController.m; sourceTree = "<group>"; };
+		F6B6473A14D353A7005F786B /* SimpleTest1ViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SimpleTest1ViewController.xib; sourceTree = "<group>"; };
+		F6B6473B14D353A7005F786B /* test.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test.csd; sourceTree = "<group>"; };
+		F6B6473D14D353A7005F786B /* SimpleTest2ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleTest2ViewController.h; sourceTree = "<group>"; };
+		F6B6473E14D353A7005F786B /* SimpleTest2ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimpleTest2ViewController.m; sourceTree = "<group>"; };
+		F6B6473F14D353A7005F786B /* SimpleTest2ViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SimpleTest2ViewController.xib; sourceTree = "<group>"; };
+		F6B6474014D353A7005F786B /* test2.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = test2.csd; sourceTree = "<group>"; };
+		F6B6474214D353A7005F786B /* Waveview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Waveview.h; sourceTree = "<group>"; };
+		F6B6474314D353A7005F786B /* Waveview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Waveview.m; sourceTree = "<group>"; };
+		F6B6474414D353A7005F786B /* Waveviewtest.csd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Waveviewtest.csd; sourceTree = "<group>"; };
+		F6B6474514D353A7005F786B /* WaveviewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaveviewViewController.h; sourceTree = "<group>"; };
+		F6B6474614D353A7005F786B /* WaveviewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WaveviewViewController.m; sourceTree = "<group>"; };
+		F6B6474714D353A7005F786B /* WaveviewViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = WaveviewViewController.xib; sourceTree = "<group>"; };
+		F6B6477E14D353D2005F786B /* CsoundObj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsoundObj.h; sourceTree = "<group>"; };
+		F6B6477F14D353D2005F786B /* CsoundObj.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CsoundObj.m; sourceTree = "<group>"; };
+		F6B6478114D353D2005F786B /* CsoundMIDI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsoundMIDI.h; sourceTree = "<group>"; };
+		F6B6478214D353D2005F786B /* CsoundMIDI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CsoundMIDI.m; sourceTree = "<group>"; };
+		F6B6478314D353D2005F786B /* MidiWidgetsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MidiWidgetsManager.h; sourceTree = "<group>"; };
+		F6B6478414D353D2005F786B /* MidiWidgetsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MidiWidgetsManager.m; sourceTree = "<group>"; };
+		F6B6478514D353D2005F786B /* MidiWidgetWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MidiWidgetWrapper.h; sourceTree = "<group>"; };
+		F6B6478614D353D2005F786B /* SliderMidiWidgetWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SliderMidiWidgetWrapper.h; sourceTree = "<group>"; };
+		F6B6478714D353D2005F786B /* SliderMidiWidgetWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SliderMidiWidgetWrapper.m; sourceTree = "<group>"; };
+		F6B6478914D353D2005F786B /* BaseValueCacheable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseValueCacheable.h; sourceTree = "<group>"; };
+		F6B6478A14D353D2005F786B /* BaseValueCacheable.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BaseValueCacheable.m; sourceTree = "<group>"; };
+		F6B6478B14D353D2005F786B /* CachedAccelerometer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedAccelerometer.h; sourceTree = "<group>"; };
+		F6B6478C14D353D2005F786B /* CachedAccelerometer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CachedAccelerometer.m; sourceTree = "<group>"; };
+		F6B6478D14D353D2005F786B /* CachedAttitude.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedAttitude.h; sourceTree = "<group>"; };
+		F6B6478E14D353D2005F786B /* CachedAttitude.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CachedAttitude.m; sourceTree = "<group>"; };
+		F6B6478F14D353D2005F786B /* CachedButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedButton.h; sourceTree = "<group>"; };
+		F6B6479014D353D2005F786B /* CachedButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CachedButton.m; sourceTree = "<group>"; };
+		F6B6479114D353D2005F786B /* CachedGyroscope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedGyroscope.h; sourceTree = "<group>"; };
+		F6B6479214D353D2005F786B /* CachedGyroscope.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CachedGyroscope.m; sourceTree = "<group>"; };
+		F6B6479314D353D2005F786B /* CachedSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedSlider.h; sourceTree = "<group>"; };
+		F6B6479414D353D2005F786B /* CachedSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CachedSlider.m; sourceTree = "<group>"; };
+		F6B6479514D353D2005F786B /* CachedSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedSwitch.h; sourceTree = "<group>"; };
+		F6B6479614D353D2005F786B /* CachedSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CachedSwitch.m; sourceTree = "<group>"; };
+		F6B6479714D353D2005F786B /* CsoundValueCacheable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CsoundValueCacheable.h; sourceTree = "<group>"; };
+		F6B647A414D353D2005F786B /* cfgvar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfgvar.h; sourceTree = "<group>"; };
+		F6B647A514D353D2005F786B /* CppSound.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CppSound.hpp; sourceTree = "<group>"; };
+		F6B647A614D353D2005F786B /* cscore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cscore.h; sourceTree = "<group>"; };
+		F6B647A714D353D2005F786B /* csdl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = csdl.h; sourceTree = "<group>"; };
+		F6B647A814D353D2005F786B /* csound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = csound.h; sourceTree = "<group>"; };
+		F6B647A914D353D2005F786B /* csound.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = csound.hpp; sourceTree = "<group>"; };
+		F6B647AA14D353D2005F786B /* csoundCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = csoundCore.h; sourceTree = "<group>"; };
+		F6B647AB14D353D2005F786B /* CsoundFile.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CsoundFile.hpp; sourceTree = "<group>"; };
+		F6B647AC14D353D2005F786B /* cwindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cwindow.h; sourceTree = "<group>"; };
+		F6B647AD14D353D2005F786B /* filebuilding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filebuilding.h; sourceTree = "<group>"; };
+		F6B647AE14D353D2005F786B /* float-version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "float-version.h"; sourceTree = "<group>"; };
+		F6B647AF14D353D2005F786B /* msg_attr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msg_attr.h; sourceTree = "<group>"; };
+		F6B647B014D353D2005F786B /* OpcodeBase.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = OpcodeBase.hpp; sourceTree = "<group>"; };
+		F6B647B114D353D2005F786B /* pstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pstream.h; sourceTree = "<group>"; };
+		F6B647B214D353D2005F786B /* pvfileio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pvfileio.h; sourceTree = "<group>"; };
+		F6B647B314D353D2005F786B /* soundio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = soundio.h; sourceTree = "<group>"; };
+		F6B647B414D353D2005F786B /* sysdep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sysdep.h; sourceTree = "<group>"; };
+		F6B647B514D353D2005F786B /* text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = "<group>"; };
+		F6B647B614D353D2005F786B /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
+		F6B647B814D353D2005F786B /* libcsound.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libcsound.a; sourceTree = "<group>"; };
+		F6B647B914D353D2005F786B /* libsndfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libsndfile.a; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		F6B6465614D348E5005F786B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F6B646EE14D34CB4005F786B /* CoreMIDI.framework in Frameworks */,
+				F6B646EF14D34CB4005F786B /* CoreMotion.framework in Frameworks */,
+				F6B646EA14D34CA3005F786B /* AudioToolbox.framework in Frameworks */,
+				F6B646EB14D34CA3005F786B /* CoreAudio.framework in Frameworks */,
+				F6B646E714D34C8C005F786B /* AVFoundation.framework in Frameworks */,
+				F6B646E514D34C82005F786B /* QuartzCore.framework in Frameworks */,
+				F6B6465E14D348E5005F786B /* UIKit.framework in Frameworks */,
+				F6B6466014D348E5005F786B /* Foundation.framework in Frameworks */,
+				F6B6466214D348E5005F786B /* CoreGraphics.framework in Frameworks */,
+				F6B647CF14D353D2005F786B /* libcsound.a in Frameworks */,
+				F6B647D014D353D2005F786B /* libsndfile.a in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		F6B6464E14D348E4005F786B = {
+			isa = PBXGroup;
+			children = (
+				F6B6477C14D353D2005F786B /* csound-iOS */,
+				F6B6466314D348E5005F786B /* Csound iOS Examples */,
+				F6B6465C14D348E5005F786B /* Frameworks */,
+				F6B6465A14D348E5005F786B /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		F6B6465A14D348E5005F786B /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6465914D348E5005F786B /* Csound iOS Examples.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		F6B6465C14D348E5005F786B /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				F6B646EC14D34CB4005F786B /* CoreMIDI.framework */,
+				F6B646ED14D34CB4005F786B /* CoreMotion.framework */,
+				F6B646E814D34CA3005F786B /* AudioToolbox.framework */,
+				F6B646E914D34CA3005F786B /* CoreAudio.framework */,
+				F6B646E614D34C8C005F786B /* AVFoundation.framework */,
+				F6B646E414D34C82005F786B /* QuartzCore.framework */,
+				F6B6465D14D348E5005F786B /* UIKit.framework */,
+				F6B6465F14D348E5005F786B /* Foundation.framework */,
+				F6B6466114D348E5005F786B /* CoreGraphics.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		F6B6466314D348E5005F786B /* Csound iOS Examples */ = {
+			isa = PBXGroup;
+			children = (
+				F6B646F014D353A7005F786B /* ViewControllers */,
+				F6B6466C14D348E5005F786B /* AppDelegate.h */,
+				F6B6466D14D348E5005F786B /* AppDelegate.m */,
+				F6B6466F14D348E5005F786B /* MasterViewController.h */,
+				F6B6467014D348E5005F786B /* MasterViewController.m */,
+				F6B6467214D348E5005F786B /* DetailViewController.h */,
+				F6B6467314D348E5005F786B /* DetailViewController.m */,
+				F6B6467514D348E5005F786B /* MasterViewController_iPhone.xib */,
+				F6B6467814D348E5005F786B /* MasterViewController_iPad.xib */,
+				F6B6467B14D348E5005F786B /* DetailViewController_iPhone.xib */,
+				F6B6467E14D348E5005F786B /* DetailViewController_iPad.xib */,
+				F6B6466414D348E5005F786B /* Supporting Files */,
+			);
+			path = "Csound iOS Examples";
+			sourceTree = "<group>";
+		};
+		F6B6466414D348E5005F786B /* Supporting Files */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6466514D348E5005F786B /* Csound iOS Examples-Info.plist */,
+				F6B6466614D348E5005F786B /* InfoPlist.strings */,
+				F6B6466914D348E5005F786B /* main.m */,
+				F6B6466B14D348E5005F786B /* Csound iOS Examples-Prefix.pch */,
+			);
+			name = "Supporting Files";
+			sourceTree = "<group>";
+		};
+		F6B646F014D353A7005F786B /* ViewControllers */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6470814D353A7005F786B /* BaseCsoundViewController.h */,
+				F6B6470914D353A7005F786B /* BaseCsoundViewController.m */,
+				F6B646F114D353A7005F786B /* AudioFileTest */,
+				F6B646F514D353A7005F786B /* AudioInTest */,
+				F6B6470A14D353A7005F786B /* ButtonTest */,
+				F6B6470F14D353A7005F786B /* CsoundHaiku4 */,
+				F6B6471414D353A7005F786B /* HardwareTest */,
+				F6B6471914D353A7005F786B /* Harmonizer */,
+				F6B6471E14D353A7005F786B /* Introduction */,
+				F6B6472214D353A7005F786B /* MidiTest */,
+				F6B6472A14D353A7005F786B /* MultiTouchXY */,
+				F6B6472F14D353A7005F786B /* PitchShifter */,
+				F6B6473314D353A7005F786B /* RecordTest */,
+				F6B6473714D353A7005F786B /* SimpleTest1 */,
+				F6B6473C14D353A7005F786B /* SimpleTest2 */,
+				F6B6474114D353A7005F786B /* Waveview */,
+			);
+			path = ViewControllers;
+			sourceTree = "<group>";
+		};
+		F6B646F114D353A7005F786B /* AudioFileTest */ = {
+			isa = PBXGroup;
+			children = (
+				F6B646F214D353A7005F786B /* AudioFileTestViewController.h */,
+				F6B646F314D353A7005F786B /* AudioFileTestViewController.m */,
+				F6B646F414D353A7005F786B /* AudioFileTestViewController.xib */,
+			);
+			path = AudioFileTest;
+			sourceTree = "<group>";
+		};
+		F6B646F514D353A7005F786B /* AudioInTest */ = {
+			isa = PBXGroup;
+			children = (
+				F6B646F614D353A7005F786B /* audiofiletest.aif */,
+				F6B646F714D353A7005F786B /* audiofiletest.csd */,
+				F6B646F814D353A7005F786B /* audioInTest.csd */,
+				F6B646F914D353A7005F786B /* AudioInTestViewController.h */,
+				F6B646FA14D353A7005F786B /* AudioInTestViewController.m */,
+				F6B646FB14D353A7005F786B /* AudioInTestViewController.xib */,
+				F6B646FC14D353A7005F786B /* consoleoutput.csd */,
+				F6B646FD14D353A7005F786B /* ConsoleOutputViewController.h */,
+				F6B646FE14D353A7005F786B /* ConsoleOutputViewController.m */,
+				F6B646FF14D353A7005F786B /* ConsoleOutputViewController.xib */,
+				F6B6470014D353A7005F786B /* LevelMeterView.h */,
+				F6B6470114D353A7005F786B /* LevelMeterView.m */,
+				F6B6470214D353A7005F786B /* pitchshifter.csd */,
+				F6B6470314D353A7005F786B /* recordTest.csd */,
+				F6B6470414D353A7005F786B /* UIControlXY.h */,
+				F6B6470514D353A7005F786B /* UIControlXY.m */,
+				F6B6470614D353A7005F786B /* UIKnob.h */,
+				F6B6470714D353A7005F786B /* UIKnob.m */,
+			);
+			path = AudioInTest;
+			sourceTree = "<group>";
+		};
+		F6B6470A14D353A7005F786B /* ButtonTest */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6470B14D353A7005F786B /* buttonTest.csd */,
+				F6B6470C14D353A7005F786B /* ButtonTestViewController.h */,
+				F6B6470D14D353A7005F786B /* ButtonTestViewController.m */,
+				F6B6470E14D353A7005F786B /* ButtonTestViewController.xib */,
+			);
+			path = ButtonTest;
+			sourceTree = "<group>";
+		};
+		F6B6470F14D353A7005F786B /* CsoundHaiku4 */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6471014D353A7005F786B /* CsoundHaiku4ViewController.h */,
+				F6B6471114D353A7005F786B /* CsoundHaiku4ViewController.m */,
+				F6B6471214D353A7005F786B /* CsoundHaiku4ViewController.xib */,
+				F6B6471314D353A7005F786B /* IV.csd */,
+			);
+			path = CsoundHaiku4;
+			sourceTree = "<group>";
+		};
+		F6B6471414D353A7005F786B /* HardwareTest */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6471514D353A7005F786B /* hardwareTest.csd */,
+				F6B6471614D353A7005F786B /* HardwareTestViewController.h */,
+				F6B6471714D353A7005F786B /* HardwareTestViewController.m */,
+				F6B6471814D353A7005F786B /* HardwareTestViewController.xib */,
+			);
+			path = HardwareTest;
+			sourceTree = "<group>";
+		};
+		F6B6471914D353A7005F786B /* Harmonizer */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6471A14D353A7005F786B /* harmonizer.csd */,
+				F6B6471B14D353A7005F786B /* HarmonizerTest.h */,
+				F6B6471C14D353A7005F786B /* HarmonizerTest.m */,
+				F6B6471D14D353A7005F786B /* HarmonizerTest.xib */,
+			);
+			path = Harmonizer;
+			sourceTree = "<group>";
+		};
+		F6B6471E14D353A7005F786B /* Introduction */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6471F14D353A7005F786B /* IntroductionViewController.h */,
+				F6B6472014D353A7005F786B /* IntroductionViewController.m */,
+				F6B6472114D353A7005F786B /* IntroductionViewController.xib */,
+			);
+			path = Introduction;
+			sourceTree = "<group>";
+		};
+		F6B6472214D353A7005F786B /* MidiTest */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6472314D353A7005F786B /* CsoundVirtualKeyboard.h */,
+				F6B6472414D353A7005F786B /* CsoundVirtualKeyboard.m */,
+				F6B6472514D353A7005F786B /* midiTest.csd */,
+				F6B6472614D353A7005F786B /* MidiTestViewController.h */,
+				F6B6472714D353A7005F786B /* MidiTestViewController.m */,
+				F6B6472814D353A7005F786B /* MidiTestViewController.xib */,
+				F6B6472914D353A7005F786B /* MidiTestViewController_iPad.xib */,
+			);
+			path = MidiTest;
+			sourceTree = "<group>";
+		};
+		F6B6472A14D353A7005F786B /* MultiTouchXY */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6472B14D353A7005F786B /* multiTouchXY.csd */,
+				F6B6472C14D353A7005F786B /* MultiTouchXYViewController.h */,
+				F6B6472D14D353A7005F786B /* MultiTouchXYViewController.m */,
+				F6B6472E14D353A7005F786B /* MultiTouchXYViewController.xib */,
+			);
+			path = MultiTouchXY;
+			sourceTree = "<group>";
+		};
+		F6B6472F14D353A7005F786B /* PitchShifter */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6473014D353A7005F786B /* PitchShifterViewController.h */,
+				F6B6473114D353A7005F786B /* PitchShifterViewController.m */,
+				F6B6473214D353A7005F786B /* PitchShifterViewController.xib */,
+			);
+			path = PitchShifter;
+			sourceTree = "<group>";
+		};
+		F6B6473314D353A7005F786B /* RecordTest */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6473414D353A7005F786B /* RecordTestViewController.h */,
+				F6B6473514D353A7005F786B /* RecordTestViewController.m */,
+				F6B6473614D353A7005F786B /* RecordTestViewController.xib */,
+			);
+			path = RecordTest;
+			sourceTree = "<group>";
+		};
+		F6B6473714D353A7005F786B /* SimpleTest1 */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6473814D353A7005F786B /* SimpleTest1ViewController.h */,
+				F6B6473914D353A7005F786B /* SimpleTest1ViewController.m */,
+				F6B6473A14D353A7005F786B /* SimpleTest1ViewController.xib */,
+				F6B6473B14D353A7005F786B /* test.csd */,
+			);
+			path = SimpleTest1;
+			sourceTree = "<group>";
+		};
+		F6B6473C14D353A7005F786B /* SimpleTest2 */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6473D14D353A7005F786B /* SimpleTest2ViewController.h */,
+				F6B6473E14D353A7005F786B /* SimpleTest2ViewController.m */,
+				F6B6473F14D353A7005F786B /* SimpleTest2ViewController.xib */,
+				F6B6474014D353A7005F786B /* test2.csd */,
+			);
+			path = SimpleTest2;
+			sourceTree = "<group>";
+		};
+		F6B6474114D353A7005F786B /* Waveview */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6474214D353A7005F786B /* Waveview.h */,
+				F6B6474314D353A7005F786B /* Waveview.m */,
+				F6B6474414D353A7005F786B /* Waveviewtest.csd */,
+				F6B6474514D353A7005F786B /* WaveviewViewController.h */,
+				F6B6474614D353A7005F786B /* WaveviewViewController.m */,
+				F6B6474714D353A7005F786B /* WaveviewViewController.xib */,
+			);
+			path = Waveview;
+			sourceTree = "<group>";
+		};
+		F6B6477C14D353D2005F786B /* csound-iOS */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6477D14D353D2005F786B /* classes */,
+				F6B647A314D353D2005F786B /* headers */,
+				F6B647B714D353D2005F786B /* libs */,
+			);
+			path = "csound-iOS";
+			sourceTree = "<group>";
+		};
+		F6B6477D14D353D2005F786B /* classes */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6477E14D353D2005F786B /* CsoundObj.h */,
+				F6B6477F14D353D2005F786B /* CsoundObj.m */,
+				F6B6478014D353D2005F786B /* midi */,
+				F6B6478814D353D2005F786B /* valueCacheable */,
+			);
+			path = classes;
+			sourceTree = "<group>";
+		};
+		F6B6478014D353D2005F786B /* midi */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6478114D353D2005F786B /* CsoundMIDI.h */,
+				F6B6478214D353D2005F786B /* CsoundMIDI.m */,
+				F6B6478314D353D2005F786B /* MidiWidgetsManager.h */,
+				F6B6478414D353D2005F786B /* MidiWidgetsManager.m */,
+				F6B6478514D353D2005F786B /* MidiWidgetWrapper.h */,
+				F6B6478614D353D2005F786B /* SliderMidiWidgetWrapper.h */,
+				F6B6478714D353D2005F786B /* SliderMidiWidgetWrapper.m */,
+			);
+			path = midi;
+			sourceTree = "<group>";
+		};
+		F6B6478814D353D2005F786B /* valueCacheable */ = {
+			isa = PBXGroup;
+			children = (
+				F6B6478914D353D2005F786B /* BaseValueCacheable.h */,
+				F6B6478A14D353D2005F786B /* BaseValueCacheable.m */,
+				F6B6478B14D353D2005F786B /* CachedAccelerometer.h */,
+				F6B6478C14D353D2005F786B /* CachedAccelerometer.m */,
+				F6B6478D14D353D2005F786B /* CachedAttitude.h */,
+				F6B6478E14D353D2005F786B /* CachedAttitude.m */,
+				F6B6478F14D353D2005F786B /* CachedButton.h */,
+				F6B6479014D353D2005F786B /* CachedButton.m */,
+				F6B6479114D353D2005F786B /* CachedGyroscope.h */,
+				F6B6479214D353D2005F786B /* CachedGyroscope.m */,
+				F6B6479314D353D2005F786B /* CachedSlider.h */,
+				F6B6479414D353D2005F786B /* CachedSlider.m */,
+				F6B6479514D353D2005F786B /* CachedSwitch.h */,
+				F6B6479614D353D2005F786B /* CachedSwitch.m */,
+				F6B6479714D353D2005F786B /* CsoundValueCacheable.h */,
+			);
+			path = valueCacheable;
+			sourceTree = "<group>";
+		};
+		F6B647A314D353D2005F786B /* headers */ = {
+			isa = PBXGroup;
+			children = (
+				F6B647A414D353D2005F786B /* cfgvar.h */,
+				F6B647A514D353D2005F786B /* CppSound.hpp */,
+				F6B647A614D353D2005F786B /* cscore.h */,
+				F6B647A714D353D2005F786B /* csdl.h */,
+				F6B647A814D353D2005F786B /* csound.h */,
+				F6B647A914D353D2005F786B /* csound.hpp */,
+				F6B647AA14D353D2005F786B /* csoundCore.h */,
+				F6B647AB14D353D2005F786B /* CsoundFile.hpp */,
+				F6B647AC14D353D2005F786B /* cwindow.h */,
+				F6B647AD14D353D2005F786B /* filebuilding.h */,
+				F6B647AE14D353D2005F786B /* float-version.h */,
+				F6B647AF14D353D2005F786B /* msg_attr.h */,
+				F6B647B014D353D2005F786B /* OpcodeBase.hpp */,
+				F6B647B114D353D2005F786B /* pstream.h */,
+				F6B647B214D353D2005F786B /* pvfileio.h */,
+				F6B647B314D353D2005F786B /* soundio.h */,
+				F6B647B414D353D2005F786B /* sysdep.h */,
+				F6B647B514D353D2005F786B /* text.h */,
+				F6B647B614D353D2005F786B /* version.h */,
+			);
+			path = headers;
+			sourceTree = "<group>";
+		};
+		F6B647B714D353D2005F786B /* libs */ = {
+			isa = PBXGroup;
+			children = (
+				F6B647B814D353D2005F786B /* libcsound.a */,
+				F6B647B914D353D2005F786B /* libsndfile.a */,
+			);
+			path = libs;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		F6B6465814D348E5005F786B /* Csound iOS Examples */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = F6B6468314D348E5005F786B /* Build configuration list for PBXNativeTarget "Csound iOS Examples" */;
+			buildPhases = (
+				F6B6465514D348E5005F786B /* Sources */,
+				F6B6465614D348E5005F786B /* Frameworks */,
+				F6B6465714D348E5005F786B /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "Csound iOS Examples";
+			productName = "Csound iOS Examples";
+			productReference = F6B6465914D348E5005F786B /* Csound iOS Examples.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		F6B6465014D348E4005F786B /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0420;
+			};
+			buildConfigurationList = F6B6465314D348E4005F786B /* Build configuration list for PBXProject "Csound iOS Examples" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = F6B6464E14D348E4005F786B;
+			productRefGroup = F6B6465A14D348E5005F786B /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				F6B6465814D348E5005F786B /* Csound iOS Examples */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		F6B6465714D348E5005F786B /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F6B6466814D348E5005F786B /* InfoPlist.strings in Resources */,
+				F6B6467714D348E5005F786B /* MasterViewController_iPhone.xib in Resources */,
+				F6B6467A14D348E5005F786B /* MasterViewController_iPad.xib in Resources */,
+				F6B6467D14D348E5005F786B /* DetailViewController_iPhone.xib in Resources */,
+				F6B6468014D348E5005F786B /* DetailViewController_iPad.xib in Resources */,
+				F6B6474914D353A7005F786B /* AudioFileTestViewController.xib in Resources */,
+				F6B6474A14D353A7005F786B /* audiofiletest.aif in Resources */,
+				F6B6474B14D353A7005F786B /* audiofiletest.csd in Resources */,
+				F6B6474C14D353A7005F786B /* audioInTest.csd in Resources */,
+				F6B6474E14D353A7005F786B /* AudioInTestViewController.xib in Resources */,
+				F6B6474F14D353A7005F786B /* consoleoutput.csd in Resources */,
+				F6B6475114D353A7005F786B /* ConsoleOutputViewController.xib in Resources */,
+				F6B6475314D353A7005F786B /* pitchshifter.csd in Resources */,
+				F6B6475414D353A7005F786B /* recordTest.csd in Resources */,
+				F6B6475814D353A7005F786B /* buttonTest.csd in Resources */,
+				F6B6475A14D353A7005F786B /* ButtonTestViewController.xib in Resources */,
+				F6B6475C14D353A7005F786B /* CsoundHaiku4ViewController.xib in Resources */,
+				F6B6475D14D353A7005F786B /* IV.csd in Resources */,
+				F6B6475E14D353A7005F786B /* hardwareTest.csd in Resources */,
+				F6B6476014D353A7005F786B /* HardwareTestViewController.xib in Resources */,
+				F6B6476114D353A7005F786B /* harmonizer.csd in Resources */,
+				F6B6476314D353A7005F786B /* HarmonizerTest.xib in Resources */,
+				F6B6476514D353A7005F786B /* IntroductionViewController.xib in Resources */,
+				F6B6476714D353A7005F786B /* midiTest.csd in Resources */,
+				F6B6476914D353A7005F786B /* MidiTestViewController.xib in Resources */,
+				F6B6476A14D353A7005F786B /* MidiTestViewController_iPad.xib in Resources */,
+				F6B6476B14D353A7005F786B /* multiTouchXY.csd in Resources */,
+				F6B6476D14D353A7005F786B /* MultiTouchXYViewController.xib in Resources */,
+				F6B6476F14D353A7005F786B /* PitchShifterViewController.xib in Resources */,
+				F6B6477114D353A7005F786B /* RecordTestViewController.xib in Resources */,
+				F6B6477314D353A7005F786B /* SimpleTest1ViewController.xib in Resources */,
+				F6B6477414D353A7005F786B /* test.csd in Resources */,
+				F6B6477614D353A7005F786B /* SimpleTest2ViewController.xib in Resources */,
+				F6B6477714D353A7005F786B /* test2.csd in Resources */,
+				F6B6477914D353A7005F786B /* Waveviewtest.csd in Resources */,
+				F6B6477B14D353A7005F786B /* WaveviewViewController.xib in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		F6B6465514D348E5005F786B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				F6B6466A14D348E5005F786B /* main.m in Sources */,
+				F6B6466E14D348E5005F786B /* AppDelegate.m in Sources */,
+				F6B6467114D348E5005F786B /* MasterViewController.m in Sources */,
+				F6B6467414D348E5005F786B /* DetailViewController.m in Sources */,
+				F6B6474814D353A7005F786B /* AudioFileTestViewController.m in Sources */,
+				F6B6474D14D353A7005F786B /* AudioInTestViewController.m in Sources */,
+				F6B6475014D353A7005F786B /* ConsoleOutputViewController.m in Sources */,
+				F6B6475214D353A7005F786B /* LevelMeterView.m in Sources */,
+				F6B6475514D353A7005F786B /* UIControlXY.m in Sources */,
+				F6B6475614D353A7005F786B /* UIKnob.m in Sources */,
+				F6B6475714D353A7005F786B /* BaseCsoundViewController.m in Sources */,
+				F6B6475914D353A7005F786B /* ButtonTestViewController.m in Sources */,
+				F6B6475B14D353A7005F786B /* CsoundHaiku4ViewController.m in Sources */,
+				F6B6475F14D353A7005F786B /* HardwareTestViewController.m in Sources */,
+				F6B6476214D353A7005F786B /* HarmonizerTest.m in Sources */,
+				F6B6476414D353A7005F786B /* IntroductionViewController.m in Sources */,
+				F6B6476614D353A7005F786B /* CsoundVirtualKeyboard.m in Sources */,
+				F6B6476814D353A7005F786B /* MidiTestViewController.m in Sources */,
+				F6B6476C14D353A7005F786B /* MultiTouchXYViewController.m in Sources */,
+				F6B6476E14D353A7005F786B /* PitchShifterViewController.m in Sources */,
+				F6B6477014D353A7005F786B /* RecordTestViewController.m in Sources */,
+				F6B6477214D353A7005F786B /* SimpleTest1ViewController.m in Sources */,
+				F6B6477514D353A7005F786B /* SimpleTest2ViewController.m in Sources */,
+				F6B6477814D353A7005F786B /* Waveview.m in Sources */,
+				F6B6477A14D353A7005F786B /* WaveviewViewController.m in Sources */,
+				F6B647BA14D353D2005F786B /* CsoundObj.m in Sources */,
+				F6B647BB14D353D2005F786B /* CsoundMIDI.m in Sources */,
+				F6B647BC14D353D2005F786B /* MidiWidgetsManager.m in Sources */,
+				F6B647BD14D353D2005F786B /* SliderMidiWidgetWrapper.m in Sources */,
+				F6B647BE14D353D2005F786B /* BaseValueCacheable.m in Sources */,
+				F6B647BF14D353D2005F786B /* CachedAccelerometer.m in Sources */,
+				F6B647C014D353D2005F786B /* CachedAttitude.m in Sources */,
+				F6B647C114D353D2005F786B /* CachedButton.m in Sources */,
+				F6B647C214D353D2005F786B /* CachedGyroscope.m in Sources */,
+				F6B647C314D353D2005F786B /* CachedSlider.m in Sources */,
+				F6B647C414D353D2005F786B /* CachedSwitch.m in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+		F6B6466614D348E5005F786B /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F6B6466714D348E5005F786B /* en */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+		F6B6467514D348E5005F786B /* MasterViewController_iPhone.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F6B6467614D348E5005F786B /* en */,
+			);
+			name = MasterViewController_iPhone.xib;
+			sourceTree = "<group>";
+		};
+		F6B6467814D348E5005F786B /* MasterViewController_iPad.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F6B6467914D348E5005F786B /* en */,
+			);
+			name = MasterViewController_iPad.xib;
+			sourceTree = "<group>";
+		};
+		F6B6467B14D348E5005F786B /* DetailViewController_iPhone.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F6B6467C14D348E5005F786B /* en */,
+			);
+			name = DetailViewController_iPhone.xib;
+			sourceTree = "<group>";
+		};
+		F6B6467E14D348E5005F786B /* DetailViewController_iPad.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				F6B6467F14D348E5005F786B /* en */,
+			);
+			name = DetailViewController_iPad.xib;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		F6B6468114D348E5005F786B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = NO;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		F6B6468214D348E5005F786B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+				COPY_PHASE_STRIP = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 5.0;
+				OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+				SDKROOT = iphoneos;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		F6B6468414D348E5005F786B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "Csound iOS Examples/Csound iOS Examples-Prefix.pch";
+				INFOPLIST_FILE = "Csound iOS Examples/Csound iOS Examples-Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/csound-iOS/libs\"",
+					"\"$(SRCROOT)/../cs5iOS\"",
+				);
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		F6B6468514D348E5005F786B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				GCC_PRECOMPILE_PREFIX_HEADER = YES;
+				GCC_PREFIX_HEADER = "Csound iOS Examples/Csound iOS Examples-Prefix.pch";
+				INFOPLIST_FILE = "Csound iOS Examples/Csound iOS Examples-Info.plist";
+				IPHONEOS_DEPLOYMENT_TARGET = 4.3;
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/csound-iOS/libs\"",
+					"\"$(SRCROOT)/../cs5iOS\"",
+				);
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		F6B6465314D348E4005F786B /* Build configuration list for PBXProject "Csound iOS Examples" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F6B6468114D348E5005F786B /* Debug */,
+				F6B6468214D348E5005F786B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		F6B6468314D348E5005F786B /* Build configuration list for PBXNativeTarget "Csound iOS Examples" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				F6B6468414D348E5005F786B /* Debug */,
+				F6B6468514D348E5005F786B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = F6B6465014D348E4005F786B /* Project object */;
+}
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/iOS/Csound iOS Examples/Csound iOS Examples.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..5e3a46d
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples.xcodeproj/project.xcworkspace/contents.xcworkspacedata	
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "self:Csound iOS Examples.xcodeproj">
+   </FileRef>
+</Workspace>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/AppDelegate.h b/iOS/Csound iOS Examples/Csound iOS Examples/AppDelegate.h
new file mode 100644
index 0000000..5cc321a
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/AppDelegate.h	
@@ -0,0 +1,35 @@
+/* 
+ 
+ AppDelegate.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+#import <UIKit/UIKit.h>
+
+ at interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+ at property (strong, nonatomic) UIWindow *window;
+
+ at property (strong, nonatomic) UINavigationController *navigationController;
+
+ at property (strong, nonatomic) UISplitViewController *splitViewController;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/AppDelegate.m b/iOS/Csound iOS Examples/Csound iOS Examples/AppDelegate.m
new file mode 100644
index 0000000..d6fa40d
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/AppDelegate.m	
@@ -0,0 +1,111 @@
+/* 
+ 
+ AppDelegate.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "AppDelegate.h"
+
+#import "MasterViewController.h"
+
+#import "DetailViewController.h"
+#import "SimpleTest1ViewController.h"
+
+ at implementation AppDelegate
+
+ at synthesize window = _window;
+ at synthesize navigationController = _navigationController;
+ at synthesize splitViewController = _splitViewController;
+
+- (void)dealloc
+{
+    [_window release];
+    [_navigationController release];
+    [_splitViewController release];
+    [super dealloc];
+}
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
+    // Override point for customization after application launch.
+    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
+        MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController_iPhone" bundle:nil] autorelease];
+        self.navigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];
+        self.window.rootViewController = self.navigationController;
+    } else {
+        MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil] autorelease];
+        UINavigationController *masterNavigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];
+        
+        SimpleTest1ViewController *detailViewController = [[[SimpleTest1ViewController alloc] initWithNibName:@"SimpleTest1ViewController" bundle:nil] autorelease];
+        UINavigationController *detailNavigationController = [[[UINavigationController alloc] initWithRootViewController:detailViewController] autorelease];
+    	
+        self.splitViewController = [[[UISplitViewController alloc] init] autorelease];
+        self.splitViewController.delegate = detailViewController;
+        self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil];
+        
+        self.window.rootViewController = self.splitViewController;
+    }
+    [self.window makeKeyAndVisible];
+    return YES;
+}
+
+- (void)applicationWillResignActive:(UIApplication *)application
+{
+    /*
+     Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
+     */
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application
+{
+    /*
+     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
+     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+     */
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application
+{
+    /*
+     Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
+     */
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application
+{
+    /*
+     Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+     */
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application
+{
+    /*
+     Called when the application is about to terminate.
+     Save data if appropriate.
+     See also applicationDidEnterBackground:.
+     */
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/Csound iOS Examples-Info.plist b/iOS/Csound iOS Examples/Csound iOS Examples/Csound iOS Examples-Info.plist
new file mode 100644
index 0000000..bc0ec22
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/Csound iOS Examples-Info.plist	
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleDisplayName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundleExecutable</key>
+	<string>${EXECUTABLE_NAME}</string>
+	<key>CFBundleIconFiles</key>
+	<array/>
+	<key>CFBundleIdentifier</key>
+	<string>com.csounds.${PRODUCT_NAME:rfc1034identifier}</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>${PRODUCT_NAME}</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UISupportedInterfaceOrientations~ipad</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationPortraitUpsideDown</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+</dict>
+</plist>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/Csound iOS Examples-Prefix.pch b/iOS/Csound iOS Examples/Csound iOS Examples/Csound iOS Examples-Prefix.pch
new file mode 100644
index 0000000..f3277f5
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/Csound iOS Examples-Prefix.pch	
@@ -0,0 +1,14 @@
+//
+// Prefix header for all source files of the 'Csound iOS Examples' target in the 'Csound iOS Examples' project
+//
+
+#import <Availability.h>
+
+#ifndef __IPHONE_4_0
+#warning "This project uses features only available in iOS SDK 4.0 and later."
+#endif
+
+#ifdef __OBJC__
+    #import <UIKit/UIKit.h>
+    #import <Foundation/Foundation.h>
+#endif
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/DetailViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/DetailViewController.h
new file mode 100644
index 0000000..4a3bc6a
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/DetailViewController.h	
@@ -0,0 +1,34 @@
+/* 
+ 
+ DetailViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+
+ at interface DetailViewController : UIViewController <UISplitViewControllerDelegate>
+
+ at property (strong, nonatomic) id detailItem;
+
+ at property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/DetailViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/DetailViewController.m
new file mode 100644
index 0000000..1b92394
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/DetailViewController.m	
@@ -0,0 +1,150 @@
+/* 
+ 
+ DetailViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "DetailViewController.h"
+
+ at interface DetailViewController ()
+ at property (strong, nonatomic) UIPopoverController *masterPopoverController;
+- (void)configureView;
+ at end
+
+ at implementation DetailViewController
+
+ at synthesize detailItem = _detailItem;
+ at synthesize detailDescriptionLabel = _detailDescriptionLabel;
+ at synthesize masterPopoverController = _masterPopoverController;
+
+- (void)dealloc
+{
+    [_detailItem release];
+    [_detailDescriptionLabel release];
+    [_masterPopoverController release];
+    [super dealloc];
+}
+
+#pragma mark - Managing the detail item
+
+- (void)setDetailItem:(id)newDetailItem
+{
+    if (_detailItem != newDetailItem) {
+        [_detailItem release]; 
+        _detailItem = [newDetailItem retain]; 
+
+        // Update the view.
+        [self configureView];
+    }
+
+    if (self.masterPopoverController != nil) {
+        [self.masterPopoverController dismissPopoverAnimated:YES];
+    }        
+}
+
+- (void)configureView
+{
+    // Update the user interface for the detail item.
+
+    if (self.detailItem) {
+        self.detailDescriptionLabel.text = [self.detailItem description];
+    }
+}
+
+- (void)didReceiveMemoryWarning
+{
+    [super didReceiveMemoryWarning];
+    // Release any cached data, images, etc that aren't in use.
+}
+
+#pragma mark - View lifecycle
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+	// Do any additional setup after loading the view, typically from a nib.
+    [self configureView];
+}
+
+- (void)viewDidUnload
+{
+    [super viewDidUnload];
+    // Release any retained subviews of the main view.
+    // e.g. self.myOutlet = nil;
+}
+
+- (void)viewWillAppear:(BOOL)animated
+{
+    [super viewWillAppear:animated];
+}
+
+- (void)viewDidAppear:(BOOL)animated
+{
+    [super viewDidAppear:animated];
+}
+
+- (void)viewWillDisappear:(BOOL)animated
+{
+	[super viewWillDisappear:animated];
+}
+
+- (void)viewDidDisappear:(BOOL)animated
+{
+	[super viewDidDisappear:animated];
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+    // Return YES for supported orientations
+    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
+        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
+    } else {
+        return YES;
+    }
+}
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+    if (self) {
+        self.title = NSLocalizedString(@"Detail", @"Detail");
+    }
+    return self;
+}
+							
+#pragma mark - Split view
+
+- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
+{
+    barButtonItem.title = NSLocalizedString(@"Master", @"Master");
+    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
+    self.masterPopoverController = popoverController;
+}
+
+- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
+{
+    // Called when the view is shown again in the split view, invalidating the button and popover controller.
+    [self.navigationItem setLeftBarButtonItem:nil animated:YES];
+    self.masterPopoverController = nil;
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/MasterViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/MasterViewController.h
new file mode 100644
index 0000000..bce2863
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/MasterViewController.h	
@@ -0,0 +1,36 @@
+/* 
+ 
+ MasterViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+
+ at class DetailViewController;
+
+ at interface MasterViewController : UITableViewController {
+    NSMutableArray* testNames;
+}
+
+ at property (strong, nonatomic) DetailViewController *detailViewController;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/MasterViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/MasterViewController.m
new file mode 100644
index 0000000..b83b666
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/MasterViewController.m	
@@ -0,0 +1,287 @@
+/* 
+ 
+ MasterViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "MasterViewController.h"
+#import "DetailViewController.h"
+#import "SimpleTest1ViewController.h"
+#import "SimpleTest2ViewController.h"
+#import "ButtonTestViewController.h"
+#import "MidiTestViewController.h"
+#import "AppDelegate.h"
+#import "BaseCsoundViewController.h"
+#import "AudioInTestViewController.h"
+#import "HarmonizerTest.h"
+#import "HardwareTestViewController.h"
+#import "CsoundHaiku4ViewController.h"
+#import "RecordTestViewController.h"
+#import "MultiTouchXYViewController.h"
+#import "WaveviewViewController.h"
+#import "AudioFileTestViewController.h"
+#import "ConsoleOutputViewController.h"
+#import "PitchShifterViewController.h"
+
+ at implementation MasterViewController
+
+ at synthesize detailViewController = _detailViewController;
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+    if (self) {
+        self.title = @"Csound for iOS";
+        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
+            self.clearsSelectionOnViewWillAppear = NO;
+            self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);
+        }
+        testNames = [[NSMutableArray arrayWithObjects:@"Simple Test 1", @"Simple Test 2", 
+                      @"Button Test", @"MIDI Test", @"Ping Pong Delay", @"Harmonizer", @"Hardware Test", @"Csound Haiku 4", @"Record Test", @"Multitouch XY", @"Waveview", @"Audio File Test", @"Console Output", @"Pitch Shifter", nil] retain];
+    }
+    return self;
+}
+							
+- (void)dealloc
+{
+    [_detailViewController release];
+    [super dealloc];
+}
+
+- (void)didReceiveMemoryWarning
+{
+    [super didReceiveMemoryWarning];
+    // Release any cached data, images, etc that aren't in use.
+}
+
+#pragma mark - View lifecycle
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+	// Do any additional setup after loading the view, typically from a nib.
+    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
+        [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
+    }
+}
+
+- (void)viewDidUnload
+{
+    [super viewDidUnload];
+    // Release any retained subviews of the main view.
+    // e.g. self.myOutlet = nil;
+}
+
+- (void)viewWillAppear:(BOOL)animated
+{
+    [super viewWillAppear:animated];
+}
+
+- (void)viewDidAppear:(BOOL)animated
+{
+    [super viewDidAppear:animated];
+}
+
+- (void)viewWillDisappear:(BOOL)animated
+{
+	[super viewWillDisappear:animated];
+}
+
+- (void)viewDidDisappear:(BOOL)animated
+{
+	[super viewDidDisappear:animated];
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+    // Return YES for supported orientations
+    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
+        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
+    } else {
+        return YES;
+    }
+}
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
+{
+    return 1;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
+{
+    return testNames.count;
+}
+
+// Customize the appearance of table view cells.
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    static NSString *CellIdentifier = @"Cell";
+    
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
+    if (cell == nil) {
+        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
+        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
+            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
+        }
+    }
+
+    // Configure the cell.
+    cell.textLabel.text = [testNames objectAtIndex:indexPath.row];
+    return cell;
+}
+
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source.
+        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
+    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
+    }   
+}
+*/
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
+{
+}
+*/
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    
+    BaseCsoundViewController* controller;
+	
+	//should probably enum this someday
+    
+    switch (indexPath.row) {
+        case 0:
+            controller = [[SimpleTest1ViewController alloc] initWithNibName:@"SimpleTest1ViewController" bundle:nil];
+            break;
+        case 1:
+            controller = [[SimpleTest2ViewController alloc] initWithNibName:@"SimpleTest2ViewController" bundle:nil];
+            break;
+        case 2:
+            controller = [[ButtonTestViewController alloc] initWithNibName:@"ButtonTestViewController" bundle:nil];
+            break;
+        case 3:
+		{
+			if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
+				controller = [[MidiTestViewController alloc] initWithNibName:@"MidiTestViewController" bundle:nil];
+			} else {
+				controller = [[MidiTestViewController alloc] initWithNibName:@"MidiTestViewController_iPad" bundle:nil];
+			}
+			
+		}
+            
+            break;
+        case 4:
+            controller = [[AudioInTestViewController alloc] initWithNibName:@"AudioInTestViewController" bundle:nil];
+            break;
+        case 5:
+            controller = [[HarmonizerTest alloc] initWithNibName:@"HarmonizerTest" bundle:nil];
+            break;            
+        case 6:
+            controller = [[HardwareTestViewController alloc] initWithNibName:@"HardwareTestViewController" bundle:nil];
+            break;
+		case 7:
+			controller = [[CsoundHaiku4ViewController alloc] initWithNibName:@"CsoundHaiku4ViewController" bundle:nil];
+			break;
+        case 8:
+			controller = [[RecordTestViewController alloc] initWithNibName:@"RecordTestViewController" bundle:nil];
+			break;
+		case 9:
+			controller = [[MultiTouchXYViewController alloc] initWithNibName:@"MultiTouchXYViewController" bundle:nil];
+			break;
+		case 10:
+			controller = [[WaveviewViewController alloc] initWithNibName:@"WaveviewViewController" bundle:nil];
+			break;	
+		case 11:
+			controller = [[AudioFileTestViewController alloc] initWithNibName:@"AudioFileTestViewController" bundle:nil];
+			break;
+		case 12:
+			controller = [[ConsoleOutputViewController alloc] initWithNibName:@"ConsoleOutputViewController" bundle:nil];
+			break;
+		case 13:
+			controller = [[PitchShifterViewController alloc] initWithNibName:@"PitchShifterViewController" bundle:nil];
+			break;
+		default:
+            break;
+    }
+
+    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
+//	    if (!self.detailViewController) {
+//	        self.detailViewController = [[[DetailViewController alloc] initWithNibName:@"DetailViewController_iPhone" bundle:nil] autorelease];
+//	    }
+//        [self.navigationController pushViewController:self.detailViewController animated:YES];
+        [self.navigationController pushViewController:controller animated:YES];
+        [(UITableView*)self.view deselectRowAtIndexPath:indexPath animated:YES];
+        
+    } else {
+        
+        AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
+        UISplitViewController* splitViewController = appDelegate.splitViewController;
+        
+        BaseCsoundViewController* currentDetail = (BaseCsoundViewController*)splitViewController.delegate;
+        
+        if(currentDetail.navigationItem.leftBarButtonItem != nil) {
+            controller.navigationItem.leftBarButtonItem = currentDetail.navigationItem.leftBarButtonItem;
+            controller.masterPopoverController = currentDetail.masterPopoverController;
+        }
+        
+        UINavigationController *detailNavigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
+        
+        NSArray *viewControllers = [[NSArray alloc] initWithObjects:[splitViewController.viewControllers objectAtIndex:0], detailNavigationController, nil];
+        splitViewController.viewControllers = viewControllers;
+        splitViewController.delegate = controller;
+        [viewControllers release];
+        
+    }
+
+    
+    [controller release];
+    
+
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioFileTest/AudioFileTestViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioFileTest/AudioFileTestViewController.h
new file mode 100644
index 0000000..d5a2c58
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioFileTest/AudioFileTestViewController.h	
@@ -0,0 +1,40 @@
+/* 
+ 
+ AudioFileTestViewController.h:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+#import "UIKnob.h"
+
+ at interface AudioFileTestViewController : BaseCsoundViewController <CsoundObjCompletionListener>
+{
+	IBOutlet UIButton *mPlayButton;
+	IBOutlet UIKnob	  *mPitchKnob;
+	IBOutlet UILabel *mPitchLabel;
+}
+
+- (IBAction)play:(UIButton *)sender;
+- (IBAction)changePitch:(UIKnob *)sender;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioFileTest/AudioFileTestViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioFileTest/AudioFileTestViewController.m
new file mode 100644
index 0000000..a59edb0
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioFileTest/AudioFileTestViewController.m	
@@ -0,0 +1,76 @@
+/* 
+ 
+ AudioFileTestViewController.m:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "AudioFileTestViewController.h"
+
+ at implementation AudioFileTestViewController
+
+- (IBAction)play:(UIButton *)sender
+{
+	NSString *audioFilePath = [[NSBundle mainBundle] pathForResource:@"audiofiletest"
+															  ofType:@"aif"];
+	NSString *score = [NSString stringWithFormat:@"i1 0 1 \"%@\"", audioFilePath];
+    [self.csound sendScore:score];
+}
+
+- (IBAction)changePitch:(UIKnob *)sender
+{
+	[mPitchLabel setText:[NSString stringWithFormat:@"%.2f", [sender value]]];
+}
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+- (void)csoundObjComplete:(CsoundObj *)csoundObj {
+}
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+	self.csound = [[CsoundObj alloc] init];
+	[self.csound addCompletionListener:self];
+	NSString *csdPath = [[NSBundle mainBundle] pathForResource:@"audiofiletest" ofType:@"csd"];
+	[mPitchKnob setMinimumValue:0.5f];
+	[mPitchKnob setMaximumValue:2.0f];
+	[mPitchKnob setValue:1.0f];
+	[self.csound addValueCacheable:mPitchKnob];
+	[self.csound startCsound:csdPath];
+}
+
+- (void)viewDidUnload
+{
+    [super viewDidUnload];
+    [self.csound stopCsound];
+}
+
+- (void)dealloc
+{
+	[mPitchKnob release];
+	[mPlayButton release];
+	[mPitchLabel release];
+	[super dealloc];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioFileTest/AudioFileTestViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioFileTest/AudioFileTestViewController.xib
new file mode 100644
index 0000000..017a0be
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioFileTest/AudioFileTestViewController.xib	
@@ -0,0 +1,362 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">10K549</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1038.36</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUIButton</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUIButton" id="181424797">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{124, 20}, {72, 37}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<int key="IBUIButtonType">1</int>
+						<string key="IBUINormalTitle">Play</string>
+						<object class="NSColor" key="IBUIHighlightedTitleColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MQA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleShadowColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MC41AA</bytes>
+						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">2</int>
+							<double key="pointSize">15</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">15</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUILabel" id="510891871">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{139, 164}, {42, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="194183019"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Pitch</string>
+						<object class="NSColor" key="IBUITextColor" id="12012877">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">1</int>
+							<double key="pointSize">17</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">17</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUILabel" id="194183019">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{139, 274}, {42, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">1.0</string>
+						<reference key="IBUITextColor" ref="12012877"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">1</int>
+							<double key="pointSize">14</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">14</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUIView" id="503583173">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{120, 193}, {80, 80}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="510891871"/>
+						<object class="NSColor" key="IBUIBackgroundColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+						</object>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="181424797"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<bool key="IBUIAutoresizesSubviews">NO</bool>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mPlayButton</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="181424797"/>
+					</object>
+					<int key="connectionID">4</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">6</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mPitchLabel</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="194183019"/>
+					</object>
+					<int key="connectionID">11</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mPitchKnob</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="503583173"/>
+					</object>
+					<int key="connectionID">15</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">play:</string>
+						<reference key="source" ref="181424797"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">7</int>
+					</object>
+					<int key="connectionID">5</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">changePitch:</string>
+						<reference key="source" ref="503583173"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">16</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="510891871"/>
+							<reference ref="194183019"/>
+							<reference ref="503583173"/>
+							<reference ref="181424797"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">3</int>
+						<reference key="object" ref="181424797"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="510891871"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">9</int>
+						<reference key="object" ref="194183019"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">14</int>
+						<reference key="object" ref="503583173"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">AudioFileTestViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="14.CustomClassName">UIKnob</string>
+				<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="3.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">16</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">AudioFileTestViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="changePitch:">UIKnob</string>
+						<string key="play:">UIButton</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="changePitch:">
+							<string key="name">changePitch:</string>
+							<string key="candidateClassName">UIKnob</string>
+						</object>
+						<object class="IBActionInfo" key="play:">
+							<string key="name">play:</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="mPitchKnob">UIKnob</string>
+						<string key="mPitchLabel">UILabel</string>
+						<string key="mPlayButton">UIButton</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="mPitchKnob">
+							<string key="name">mPitchKnob</string>
+							<string key="candidateClassName">UIKnob</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mPitchLabel">
+							<string key="name">mPitchLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mPlayButton">
+							<string key="name">mPlayButton</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/AudioFileTestViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">UIKnob</string>
+					<string key="superclassName">UIControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/UIKnob.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/AudioInTestViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/AudioInTestViewController.h
new file mode 100644
index 0000000..57836ee
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/AudioInTestViewController.h	
@@ -0,0 +1,41 @@
+/* 
+ 
+ AudioInTestViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi, Victor Lazzarini
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+
+ at interface AudioInTestViewController  : BaseCsoundViewController<CsoundObjCompletionListener> {
+
+    IBOutlet UISlider* mLeftDelayTimeSlider;
+    IBOutlet UISlider* mLeftFeedbackSlider;
+    IBOutlet UISlider* mRightDelayTimeSlider;
+    IBOutlet UISlider* mRightFeedbackSlider;
+    
+    IBOutlet UISwitch* mSwitch;
+}
+
+-(IBAction) toggleOnOff:(id)component;
+
+ at end
\ No newline at end of file
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/AudioInTestViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/AudioInTestViewController.m
new file mode 100644
index 0000000..2e7cda1
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/AudioInTestViewController.m	
@@ -0,0 +1,76 @@
+/* 
+ 
+ AudioInTestViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi, Victor Lazzarini
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "AudioInTestViewController.h"
+
+ at implementation AudioInTestViewController
+
+-(void)viewDidLoad {
+    self.title = @"Ping Pong Delay";
+    [super viewDidLoad];
+}
+
+-(IBAction) toggleOnOff:(id)component {
+	UISwitch* uiswitch = (UISwitch*)component;
+	NSLog(@"Status: %d", [uiswitch isOn]);
+    
+	if(uiswitch.on) {
+        
+        NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"audioInTest" ofType:@"csd"];  
+        NSLog(@"FILE PATH: %@", tempFile);
+        
+		[self.csound stopCsound];
+        
+        self.csound = [[CsoundObj alloc] init];
+        [self.csound addCompletionListener:self];
+    
+        
+        [self.csound addSlider:mLeftDelayTimeSlider forChannelName:@"leftDelayTime"];
+        [self.csound addSlider:mLeftFeedbackSlider forChannelName:@"leftFeedback"];
+        [self.csound addSlider:mRightDelayTimeSlider forChannelName:@"rightDelayTime"];
+        [self.csound addSlider:mRightFeedbackSlider forChannelName:@"rightFeedback"];
+        
+        [self.csound startCsound:tempFile];
+        
+	} else {
+        [self.csound stopCsound];
+    }
+}
+
+- (void)dealloc {
+	[mSwitch release];
+    [super dealloc];
+}
+
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+	[mSwitch setOn:NO animated:YES];
+}
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/AudioInTestViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/AudioInTestViewController.xib
new file mode 100644
index 0000000..8f83fe2
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/AudioInTestViewController.xib	
@@ -0,0 +1,506 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">10K549</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1038.36</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUISlider</string>
+			<string>IBUISwitch</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUISwitch" id="229881997">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{0, 20}, {94, 27}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="89959310"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+					</object>
+					<object class="IBUILabel" id="89959310">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{20, 112}, {225, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="541565698"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Delay</string>
+						<object class="NSColor" key="IBUITextColor" id="421135468">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="171859871">
+							<int key="type">1</int>
+							<double key="pointSize">17</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="756937122">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">17</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUILabel" id="1016317106">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{106, 83}, {98, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Left Channel</string>
+						<reference key="IBUITextColor" ref="421135468"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<reference key="IBUIFontDescription" ref="171859871"/>
+						<reference key="IBUIFont" ref="756937122"/>
+					</object>
+					<object class="IBUILabel" id="243487067">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{101, 255}, {108, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Right Channel</string>
+						<reference key="IBUITextColor" ref="421135468"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<reference key="IBUIFontDescription" ref="171859871"/>
+						<reference key="IBUIFont" ref="756937122"/>
+					</object>
+					<object class="IBUISlider" id="541565698">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{13, 141}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="228710165"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">300</float>
+						<float key="IBUIMinValue">50</float>
+						<float key="IBUIMaxValue">3000</float>
+					</object>
+					<object class="IBUISlider" id="228710165">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{13, 207}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="257615955"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.5</float>
+						<float key="IBUIMaxValue">0.80000001192092896</float>
+					</object>
+					<object class="IBUILabel" id="257615955">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{15, 271}, {236, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="404009755"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText"> Delay</string>
+						<reference key="IBUITextColor" ref="421135468"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<reference key="IBUIFontDescription" ref="171859871"/>
+						<reference key="IBUIFont" ref="756937122"/>
+					</object>
+					<object class="IBUILabel" id="808866986">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{20, 330}, {236, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Feedback</string>
+						<reference key="IBUITextColor" ref="421135468"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<reference key="IBUIFontDescription" ref="171859871"/>
+						<reference key="IBUIFont" ref="756937122"/>
+					</object>
+					<object class="IBUILabel" id="289072558">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{20, 178}, {236, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Feedback</string>
+						<reference key="IBUITextColor" ref="421135468"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<reference key="IBUIFontDescription" ref="171859871"/>
+						<reference key="IBUIFont" ref="756937122"/>
+					</object>
+					<object class="IBUISlider" id="404009755">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{13, 300}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="966160988"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">300</float>
+						<float key="IBUIMinValue">50</float>
+						<float key="IBUIMaxValue">3000</float>
+					</object>
+					<object class="IBUISlider" id="966160988">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{13, 359}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.5</float>
+						<float key="IBUIMaxValue">0.80000001192092896</float>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="229881997"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSwitch</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="229881997"/>
+					</object>
+					<int key="connectionID">5</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mLeftDelayTimeSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="541565698"/>
+					</object>
+					<int key="connectionID">13</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mLeftFeedbackSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="228710165"/>
+					</object>
+					<int key="connectionID">14</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mRightDelayTimeSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="404009755"/>
+					</object>
+					<int key="connectionID">15</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mRightFeedbackSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="966160988"/>
+					</object>
+					<int key="connectionID">16</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">toggleOnOff:</string>
+						<reference key="source" ref="229881997"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">6</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="229881997"/>
+							<reference ref="541565698"/>
+							<reference ref="228710165"/>
+							<reference ref="257615955"/>
+							<reference ref="808866986"/>
+							<reference ref="289072558"/>
+							<reference ref="89959310"/>
+							<reference ref="966160988"/>
+							<reference ref="404009755"/>
+							<reference ref="243487067"/>
+							<reference ref="1016317106"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="229881997"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">7</int>
+						<reference key="object" ref="89959310"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="541565698"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">9</int>
+						<reference key="object" ref="228710165"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">10</int>
+						<reference key="object" ref="257615955"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="404009755"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="966160988"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">17</int>
+						<reference key="object" ref="808866986"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">18</int>
+						<reference key="object" ref="289072558"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">19</int>
+						<reference key="object" ref="1016317106"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">20</int>
+						<reference key="object" ref="243487067"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">AudioInTestViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="17.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="18.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="19.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">20</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">AudioInTestViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">toggleOnOff:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="mLeftDelayTimeSlider">UISlider</string>
+						<string key="mLeftFeedbackSlider">UISlider</string>
+						<string key="mRightDelayTimeSlider">UISlider</string>
+						<string key="mRightFeedbackSlider">UISlider</string>
+						<string key="mSwitch">UISwitch</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="mLeftDelayTimeSlider">
+							<string key="name">mLeftDelayTimeSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mLeftFeedbackSlider">
+							<string key="name">mLeftFeedbackSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mRightDelayTimeSlider">
+							<string key="name">mRightDelayTimeSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mRightFeedbackSlider">
+							<string key="name">mRightFeedbackSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSwitch">
+							<string key="name">mSwitch</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/AudioInTestViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/ConsoleOutputViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/ConsoleOutputViewController.h
new file mode 100644
index 0000000..8e1f747
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/ConsoleOutputViewController.h	
@@ -0,0 +1,37 @@
+/* 
+ 
+ ConsoleOutputViewController.h:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "BaseCsoundViewController.h"
+
+ at interface ConsoleOutputViewController : BaseCsoundViewController <CsoundObjCompletionListener>
+{
+	IBOutlet UITextView *mTextView;
+}
+
+ at property (nonatomic, retain) NSString *currentMessage;
+
+- (IBAction)run:(UIButton *)sender;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/ConsoleOutputViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/ConsoleOutputViewController.m
new file mode 100644
index 0000000..f682261
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/ConsoleOutputViewController.m	
@@ -0,0 +1,108 @@
+/* 
+ 
+ ConsoleOutputViewController.m:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "ConsoleOutputViewController.h"
+
+ at implementation ConsoleOutputViewController
+
+ at synthesize currentMessage = mCurrentMessage;
+
+- (IBAction)run:(UIButton *)sender
+{
+	mTextView.text = @"";
+	
+	[self.csound stopCsound];
+	self.csound = [[CsoundObj alloc] init];
+	[self.csound addCompletionListener:self];
+	
+	[self.csound setMessageCallback:@selector(messageCallback:) withListener:self];
+	
+	NSString *csdPath = nil;
+	csdPath = [[NSBundle mainBundle] pathForResource:@"consoleoutput" ofType:@"csd"];
+	[self.csound startCsound:csdPath];
+}
+
+- (void)updateUIWithNewMessage:(NSString *)newMessage
+{
+	NSString *oldText = mTextView.text;
+	NSString *fullText = [oldText stringByAppendingString:newMessage];
+	mTextView.text = fullText;
+}
+
+- (void)messageCallback:(NSValue *)infoObj
+{
+	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+	Message info;
+	[infoObj getValue:&info];
+	char message[1024];
+	vsnprintf(message, 1024, info.format, info.valist);
+	NSString *messageStr = [NSString stringWithFormat:@"%s", message];
+	[self performSelectorOnMainThread:@selector(updateUIWithNewMessage:)
+						   withObject:messageStr
+						waitUntilDone:NO];
+	[pool drain];
+}
+
+#pragma mark - CsoundObj Listener
+
+- (void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+
+- (void)csoundObjComplete:(CsoundObj *)csoundObj {
+}
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+    if (self) {
+        self.title = @"Console Output";
+    }
+    return self;
+}
+
+#pragma mark - View lifecycle
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+}
+
+- (void)viewDidUnload
+{
+    [super viewDidUnload];
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+    return (interfaceOrientation == UIInterfaceOrientationPortrait);
+}
+
+- (void)dealloc
+{
+	[mTextView release];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/ConsoleOutputViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/ConsoleOutputViewController.xib
new file mode 100644
index 0000000..ce2943d
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/ConsoleOutputViewController.xib	
@@ -0,0 +1,262 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">10K549</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1038.36</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUITextView</string>
+			<string>IBUIButton</string>
+			<string>IBUIView</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUITextView" id="849761267">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">274</int>
+						<string key="NSFrame">{{0, 65}, {320, 351}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView"/>
+						<object class="NSColor" key="IBUIBackgroundColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MSAxIDEAA</bytes>
+						</object>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<bool key="IBUIMultipleTouchEnabled">YES</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<bool key="IBUIEditable">NO</bool>
+						<string key="IBUIText"/>
+						<object class="IBUITextInputTraits" key="IBUITextInputTraits">
+							<int key="IBUIAutocapitalizationType">2</int>
+							<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">1</int>
+							<double key="pointSize">12</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">12</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUIButton" id="129643204">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{94, 20}, {133, 37}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="849761267"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<int key="IBUIButtonType">1</int>
+						<string key="IBUINormalTitle">Render</string>
+						<object class="NSColor" key="IBUIHighlightedTitleColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MQA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleShadowColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MC41AA</bytes>
+						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">2</int>
+							<double key="pointSize">15</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">15</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 64}, {320, 416}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="129643204"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">1</int>
+					<bytes key="NSRGB">MC43NjIwOTY3NzQyIDAuNzk0MzU0ODM4NyAwLjgzNDY3NzQxOTQAA</bytes>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<object class="IBUISimulatedNavigationBarMetrics" key="IBUISimulatedTopBarMetrics">
+					<bool key="IBUIPrompted">NO</bool>
+				</object>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mTextView</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="849761267"/>
+					</object>
+					<int key="connectionID">8</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">run:</string>
+						<reference key="source" ref="129643204"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">7</int>
+					</object>
+					<int key="connectionID">10</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="849761267"/>
+							<reference ref="129643204"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="849761267"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">9</int>
+						<reference key="object" ref="129643204"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">ConsoleOutputViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">17</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">ConsoleOutputViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">run:</string>
+						<string key="NS.object.0">UIButton</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">run:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">run:</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">mTextView</string>
+						<string key="NS.object.0">UITextView</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">mTextView</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">mTextView</string>
+							<string key="candidateClassName">UITextView</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/ConsoleOutputViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/LevelMeterView.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/LevelMeterView.h
new file mode 100644
index 0000000..4f58d13
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/LevelMeterView.h	
@@ -0,0 +1,46 @@
+/* 
+ 
+ LevelMeterView.h:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import <QuartzCore/QuartzCore.h>
+#import "CsoundObj.h"
+#import "CsoundValueCacheable.h"
+
+ at interface LevelMeterView : UIView <CsoundValueCacheable>
+{
+	BOOL mCacheDirty;
+	float cachedValue;
+    float* channelPtr;
+    NSString* mChannelName;
+	CGFloat lastY;
+	NSInteger ksmps, sr;
+}
+
+ at property (assign) BOOL cacheDirty;
+ at property (nonatomic, retain) NSString *channelName;
+
+- (void)addToCsoundObj:(CsoundObj *)csoundObj forChannelName:(NSString *)channelName;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/LevelMeterView.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/LevelMeterView.m
new file mode 100644
index 0000000..ce5464a
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/LevelMeterView.m	
@@ -0,0 +1,182 @@
+/* 
+ 
+ LevelMeterView.m:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "LevelMeterView.h"
+
+ at implementation LevelMeterView
+
+ at synthesize channelName = mChannelName;
+ at synthesize cacheDirty = mCacheDirty;
+
+- (id)initWithFrame:(CGRect)frame
+{
+	self = [super initWithFrame:frame];
+	if (self) {
+		cachedValue = 0.0f;
+	}
+	return self;
+}
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+	self = [super initWithCoder:aDecoder];
+	if (self) {
+		cachedValue = 0.0f;
+		lastY = -100;
+	}
+	return self;
+}
+
+- (void)addToCsoundObj:(CsoundObj *)csoundObj forChannelName:(NSString *)channelName_
+{
+	[csoundObj addValueCacheable:self];
+	self.channelName = channelName_;
+}
+
+- (void)drawRect:(CGRect)rect
+{	
+	// Round the corners
+	UIBezierPath *clipPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds
+                                                   byRoundingCorners:UIRectCornerAllCorners 
+                                                         cornerRadii:CGSizeMake(10.0, 10.0)];
+    [clipPath addClip];
+	
+	// Get the context
+	CGContextRef context = UIGraphicsGetCurrentContext();
+	CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+	
+	// Flip coordinate system
+	CGContextTranslateCTM(context, 0, rect.size.height);
+	CGContextScaleCTM(context, 1.0, -1.0);
+	
+	// Draw background
+	CGFloat grayComponents[] = {0.7f, 0.7f, 0.7f, 1.0f};
+	CGColorRef grayColor = CGColorCreate(colorSpace, grayComponents);
+	CGContextSetFillColorWithColor(context, grayColor);
+	CGContextFillRect(context, self.bounds);
+	CGColorRelease(grayColor);
+	
+	// Draw rects
+	CGFloat width = CGRectGetMaxX(rect);
+	CGFloat height = CGRectGetMaxY(rect);
+	CGFloat squareWidth = width - 10;
+	CGFloat squareHeight = height/30.0f;;
+	
+	CGFloat greenComponents[] = {0.0f, 1.0f, 0.0f, 1.0f};
+	CGFloat yellowComponents[] = {221.0f/250.0f, 223.0f/250.0f, 14.0f/250.0f, 1.0f};
+	CGFloat redComponents[] = {1.0f, 0.0f, 0.0f, 1.0f};
+	CGColorRef greenColor = CGColorCreate(colorSpace, greenComponents);
+	CGColorRef yellowColor = CGColorCreate(colorSpace, yellowComponents);
+	CGColorRef redColor = CGColorCreate(colorSpace, redComponents);
+	
+	CGFloat x = 12.0f;
+	
+	// Draw the peak rect.
+	if (lastY < (height * 0.7f)) {
+		CGContextSetFillColorWithColor(context, greenColor);
+	} else if (lastY < (height * 0.9f)) {
+		CGContextSetFillColorWithColor(context, yellowColor);
+	} else {
+		CGContextSetFillColorWithColor(context, redColor);
+	}
+	CGContextMoveToPoint(context, x, lastY);
+	CGContextAddLineToPoint(context, x, lastY + squareHeight);
+	CGContextAddLineToPoint(context, x + squareWidth - 12.0f, lastY + squareHeight);
+	CGContextAddLineToPoint(context, x + squareWidth - 12.0f, lastY);
+	CGContextFillPath(context);
+	
+	// Draw the rest of the rects.
+	for (int y = 12.0f; y < height * cachedValue - 12.0f; y += squareHeight + 5.0f) {
+		if (y < (height * 0.7f)) {
+			CGContextSetFillColorWithColor(context, greenColor);
+		} else if ((y < height * 0.9f)) {
+			CGContextSetFillColorWithColor(context, yellowColor);
+		} else {
+			CGContextSetFillColorWithColor(context, redColor);
+		}
+		CGContextMoveToPoint(context, x, y);
+		CGContextAddLineToPoint(context, x, y + squareHeight);
+		CGContextAddLineToPoint(context, x + squareWidth - 12.0f, y + squareHeight);
+		CGContextAddLineToPoint(context, x + squareWidth - 12.0f, y);
+		CGContextFillPath(context);
+		if (y > lastY) {
+			lastY = y;
+		}
+	}
+	CGColorRelease(greenColor);
+	CGColorRelease(yellowColor);
+	CGColorRelease(redColor);
+	CGColorSpaceRelease(colorSpace);
+	
+	// Reset lastY periodically.
+	static NSInteger count = 0;
+	if (count % 100 == 0) {
+		lastY = -squareHeight;
+	}
+	count++;
+}
+
+#pragma mark - ValueCachable
+
+-(void)setup:(CsoundObj*)csoundObj
+{
+	channelPtr = [csoundObj getOutputChannelPtr:self.channelName];
+	CSOUND *cs = [csoundObj getCsound];
+	sr = csoundGetSr(cs);
+	ksmps = csoundGetKsmps(cs);
+}
+
+-(void)updateValuesToCsound
+{
+	//...
+}
+
+-(void)updateValuesFromCsound
+{
+	cachedValue = fabs(*channelPtr);
+	
+	static NSInteger count = 0;
+	if (count % ((sr/ksmps)/20) == 0) {
+		[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
+	}
+	count++;
+	if (count > INT_MAX) {
+		count -= INT_MAX;
+	}
+}
+
+- (void)cleanup
+{
+	cachedValue = 0;
+	lastY = -100;
+	[self setNeedsDisplay];
+}
+
+- (void)dealloc
+{
+	[mChannelName release];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIControlXY.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIControlXY.h
new file mode 100644
index 0000000..b76c76a
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIControlXY.h	
@@ -0,0 +1,47 @@
+/* 
+ 
+ UIControlXY.h:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "CsoundObj.h"
+#import "CsoundValueCacheable.h"
+
+ at interface UIControlXY : UIControl <CsoundValueCacheable>
+{
+    Float32 xValue, yValue;
+    CGRect circleRect;
+    CGFloat circleDiameter;
+	
+	// Value Cacheable
+	BOOL mCacheDirty;
+	float cachedValueX, cachedValueY;
+    float *channelPtrX, *channelPtrY;
+}
+
+ at property (assign) BOOL cacheDirty;
+ at property (nonatomic, readwrite, setter = setXValue:) Float32 xValue;
+ at property (nonatomic, readwrite, setter = setYValue:) Float32 yValue;
+ at property (nonatomic, readwrite, setter = setCircleDiameter:) CGFloat circleDiameter;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIControlXY.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIControlXY.m
new file mode 100644
index 0000000..effe2f5
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIControlXY.m	
@@ -0,0 +1,265 @@
+/* 
+ 
+ UIControlXY.m:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+
+#import "UIControlXY.h"
+
+ at interface UIControlXY ()
+{
+    CGFloat borderWidth;
+    BOOL shouldTrack;
+}
+ at end
+
+ at implementation UIControlXY
+
+ at synthesize cacheDirty = mCacheDirty;
+ at synthesize xValue;
+ at synthesize yValue;
+ at synthesize circleDiameter;
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self setBackgroundColor:[UIColor clearColor]];
+        borderWidth = 10.0f;
+        circleRect = CGRectMake(borderWidth, 
+                                frame.size.height - 30.0f - borderWidth, 
+                                30.0f, 
+                                30.0f);
+        xValue = 0.0f;
+        yValue = 0.0f;
+        shouldTrack = NO;
+    }
+    return self;
+}
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super initWithCoder:aDecoder];
+    if (self) {
+        [self setBackgroundColor:[UIColor clearColor]];
+        borderWidth = 10.0f;
+        circleRect = CGRectMake(borderWidth, 
+                                self.frame.size.height - 30.0f - borderWidth, 
+                                30.0f, 
+                                30.0f);
+        xValue = 0.0f;
+        yValue = 0.0f;
+    }
+    return self;
+}
+
+- (void)setXValue:(Float32)xValue_
+{
+    xValue = xValue_;
+        
+    // Limit it
+    CGFloat minX = borderWidth;
+    CGFloat maxX = self.frame.size.width - borderWidth - circleRect.size.width;
+    
+    // Redraw
+    CGFloat xPosition = xValue * (maxX - minX);
+    circleRect.origin.x = xPosition + borderWidth;
+    
+    [self setNeedsDisplay];
+    [self sendActionsForControlEvents:UIControlEventValueChanged];
+}
+
+- (void)setYValue:(Float32)yValue_
+{
+    yValue = yValue_;
+    
+    CGFloat minY = borderWidth;
+    CGFloat maxY = self.frame.size.height - borderWidth - circleRect.size.height;
+    
+    CGFloat yPosition = yValue * (maxY - minY);
+    yPosition = maxY - yPosition;
+    circleRect.origin.y = yPosition;
+    
+    [self setNeedsDisplay];
+    [self sendActionsForControlEvents:UIControlEventValueChanged];
+}
+
+- (void)setCircleDiameter:(CGFloat)circleDiameter_
+{
+    circleRect = CGRectMake(borderWidth, 
+                            self.frame.size.height - circleDiameter_ - borderWidth, 
+                            circleDiameter_, 
+                            circleDiameter_);
+    [self setNeedsDisplay];
+}
+
+#pragma mark - UIControl Overrides
+
+- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
+{
+    CGPoint location = [touch locationInView:self];
+    //if (CGRectContainsPoint(circleRect, location)) {
+        
+        // Reposition the touch (origin is top left)
+        location.x -= circleRect.size.width/2.0f;
+        location.y -= circleRect.size.height/2.0f;
+        
+        // Limit it
+        CGFloat minX = borderWidth;
+        CGFloat minY = borderWidth;
+        CGFloat maxX = self.frame.size.width - borderWidth - circleRect.size.width;
+        CGFloat maxY = self.frame.size.height - borderWidth - circleRect.size.height;
+        location.x = location.x < minX ? minX : location.x;
+        location.y = location.y < minY ? minY : location.y;
+        location.x = location.x > maxX ? maxX : location.x;
+        location.y = location.y > maxY ? maxY : location.y;
+        
+        // Redraw
+        circleRect.origin.x = location.x;
+        circleRect.origin.y = location.y;
+        
+        // Update values
+        xValue = location.x / maxX;
+        yValue = 1.0f - location.y / maxY;
+        
+        shouldTrack = YES;
+    //}
+    
+    [self setNeedsDisplay];
+    [self sendActionsForControlEvents:UIControlEventValueChanged];
+    return YES;
+}
+
+- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
+{
+    CGPoint location = [touch locationInView:self];
+    if (shouldTrack) {
+        
+        // Reposition the touch (origin is top left)
+        location.x -= circleRect.size.width/2.0f;
+        location.y -= circleRect.size.height/2.0f;
+        
+        // Limit it
+        CGFloat minX = borderWidth;
+        CGFloat minY = borderWidth;
+        CGFloat maxX = self.frame.size.width - borderWidth - circleRect.size.width;
+        CGFloat maxY = self.frame.size.height - borderWidth - circleRect.size.height;
+        location.x = location.x < minX ? minX : location.x;
+        location.y = location.y < minY ? minY : location.y;
+        location.x = location.x > maxX ? maxX : location.x;
+        location.y = location.y > maxY ? maxY : location.y;
+        
+        // Redraw
+        circleRect.origin.x = location.x;
+        circleRect.origin.y = location.y;
+        
+        // Update values
+        xValue = location.x / maxX;
+        yValue = 1.0f - location.y / maxY;
+    }
+    
+    [self setNeedsDisplay];
+    [self sendActionsForControlEvents:UIControlEventValueChanged];
+    return YES;
+}
+
+- (void)cancelTrackingWithEvent:(UIEvent *)event
+{
+    
+}
+
+- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
+{
+    shouldTrack = NO;
+}
+
+- (void)drawRect:(CGRect)rect
+{
+    UIBezierPath *clipPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(10.0, 10.0)];
+    [clipPath addClip];
+    
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+    
+    // Draw border lines.
+    [[UIColor blackColor] set];
+    CGContextSetLineWidth(context, borderWidth * 2.0f);
+    CGContextSetLineJoin(context, kCGLineJoinRound);
+    CGContextSetLineWidth(context, borderWidth * 2.0f);
+    
+    // Line 1
+    CGMutablePathRef borderPath = CGPathCreateMutable();
+    CGPathMoveToPoint(borderPath, NULL, 0.0f, 0.0f);
+    CGPathAddLineToPoint(borderPath, NULL, 0.0f, rect.size.height);
+    CGPathAddLineToPoint(borderPath, NULL, rect.size.width, rect.size.height);
+    CGPathAddLineToPoint(borderPath, NULL, rect.size.width, 0.0f);
+    CGPathAddLineToPoint(borderPath, NULL, 0.0f, 0.0f);
+    CGContextAddPath(context, borderPath);
+    CGPathRelease(borderPath);
+    CGContextDrawPath(context, kCGPathStroke);
+	
+	CGContextAddEllipseInRect(context, circleRect);
+	CGContextFillEllipseInRect(context, circleRect);
+    
+    CGColorSpaceRelease(colorSpace);
+}
+
+#pragma mark - Value Cacheable
+
+- (void)setup:(CsoundObj *)csoundObj
+{
+	channelPtrX = [csoundObj getInputChannelPtr:@"mix"];
+	channelPtrY = [csoundObj getInputChannelPtr:@"pitch"];
+    cachedValueX = xValue;
+	cachedValueY = yValue;
+    self.cacheDirty = YES;
+    [self addTarget:self action:@selector(updateValueCache:) forControlEvents:UIControlEventValueChanged];
+}
+
+- (void)updateValueCache:(id)sender
+{
+	cachedValueX = ((UIControlXY*)sender).xValue;
+	cachedValueY = ((UIControlXY*)sender).yValue;
+    self.cacheDirty = YES;
+}
+
+- (void)updateValuesToCsound
+{
+	if (self.cacheDirty) {
+        *channelPtrX = cachedValueX;
+		*channelPtrY = cachedValueY;
+        self.cacheDirty = NO;
+    }
+}
+
+- (void)updateValuesFromCsound
+{
+	
+}
+
+- (void)cleanup
+{
+	[self removeTarget:self action:@selector(updateValueCache:) forControlEvents:UIControlEventValueChanged];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIKnob.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIKnob.h
new file mode 100644
index 0000000..20184bd
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIKnob.h	
@@ -0,0 +1,50 @@
+/* 
+ 
+ UIKnob.h:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import <QuartzCore/QuartzCore.h>
+#import <CoreGraphics/CoreGraphics.h>
+#import "CsoundValueCacheable.h"
+
+ at interface UIKnob : UIControl <CsoundValueCacheable>
+{
+    Float32 value;
+    Float32 defaultValue;
+    Float32 minimumValue;
+    Float32 maximumValue;
+	
+	// Value Cacheable
+	BOOL mCacheDirty;
+	float cachedValue;
+    float* channelPtr;
+}
+
+ at property (assign) BOOL cacheDirty;
+ at property (nonatomic, readwrite, setter = setValue:) Float32 value;
+ at property (nonatomic, readwrite) Float32 defaultValue;
+ at property (nonatomic, readwrite) Float32 minimumValue;
+ at property (nonatomic, readwrite) Float32 maximumValue;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIKnob.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIKnob.m
new file mode 100644
index 0000000..932e503
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/UIKnob.m	
@@ -0,0 +1,186 @@
+/* 
+ 
+ UIKnob.m:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "UIKnob.h"
+#import "CsoundObj.h"
+
+ at interface UIKnob ()
+{
+	CGFloat angle;
+    CGPoint lastTouchPoint;
+}
+ at end
+
+ at implementation UIKnob
+
+ at synthesize cacheDirty = mCacheDirty;
+ at synthesize value;
+ at synthesize defaultValue;
+ at synthesize minimumValue;
+ at synthesize maximumValue;
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        [self setBackgroundColor:[UIColor clearColor]];
+        defaultValue = value = 0.0f;
+        minimumValue = 0.0f;
+        maximumValue = 1.0f;
+        angle = 0;
+    }
+    return self;
+}
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super initWithCoder:aDecoder];
+    if (self) {
+        [self setBackgroundColor:[UIColor clearColor]];
+        defaultValue = value = 0.0f;
+        minimumValue = 0.0f;
+        maximumValue = 1.0f;
+        angle = 0;
+    }
+    return self;
+}
+
+/* This method is inaccurate */
+- (void)setValue:(Float32)value_
+{
+    value = value_;
+    angle = (value/maximumValue) * 270.0f;
+    [self setNeedsDisplay];
+}
+
+#pragma mark - UIControl Overrides
+
+- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
+{
+    CGPoint touchPoint = [touch locationInView:[self superview]];
+    if (touchPoint.y < lastTouchPoint.y) {
+        angle += angle < 270 ? 5 : 0;
+    } else {
+        angle -= angle > 0 ? 5 : 0;
+    }
+    value = minimumValue + angle/270.0f * (maximumValue - minimumValue);
+    lastTouchPoint = touchPoint;
+    [self setNeedsDisplay];
+    [self sendActionsForControlEvents:UIControlEventValueChanged];
+    return YES;
+}
+
+- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
+{
+    CGPoint touchPoint = [touch locationInView:[self superview]];
+    if (touchPoint.y < lastTouchPoint.y) {
+        angle += angle < 270 ? 5 : 0;
+    } else {
+        angle -= angle > 0 ? 5 : 0;
+    }
+    value = minimumValue + angle/270.0f * (maximumValue - minimumValue);
+    lastTouchPoint = touchPoint;
+    [self setNeedsDisplay];
+    [self sendActionsForControlEvents:UIControlEventValueChanged];
+    return YES;
+}
+
+- (void)cancelTrackingWithEvent:(UIEvent *)event
+{
+    
+}
+
+#pragma mark - Drawing
+
+- (void)drawRect:(CGRect)rect
+{    
+    self.transform = CGAffineTransformMakeRotation(angle*M_PI/180.0f);
+    if (angle >= 360) {
+        angle -= 360.0f;
+    }
+    
+    // Get the context
+	CGContextRef context = UIGraphicsGetCurrentContext();
+	CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+	
+	// Flip coordinate system
+	CGContextTranslateCTM(context, 0, rect.size.height);
+	CGContextScaleCTM(context, 1.0, -1.0);
+	
+    // Draw circle
+    CGFloat redComponents[] = {1.0f, 0.1f, 0.0f, 1.0f};
+	CGColorRef redColor = CGColorCreate(colorSpace, redComponents);
+	CGContextSetFillColorWithColor(context, redColor);
+    CGContextAddEllipseInRect(context, rect);
+    CGContextFillEllipseInRect(context, rect);
+    CGColorRelease(redColor);
+        
+    // Draw line
+    CGContextMoveToPoint(context, rect.size.width/4.0f, rect.size.height/4.0f);
+    CGContextAddLineToPoint(context, rect.size.width/2.0f, rect.size.height/2.0f);
+    CGFloat blackComponents[] = {0.0f, 0.0f, 0.0f, 1.0f};
+	CGColorRef blackColor = CGColorCreate(colorSpace, blackComponents);
+	CGContextSetStrokeColorWithColor(context, blackColor);
+    CGContextStrokePath(context);
+    CGColorRelease(blackColor);
+    
+    CGColorSpaceRelease(colorSpace);
+}
+
+#pragma mark - Value Cacheable
+
+- (void)setup:(CsoundObj *)csoundObj
+{
+	channelPtr = [csoundObj getInputChannelPtr:@"pitch"];
+    cachedValue = value;
+    self.cacheDirty = YES;
+    [self addTarget:self action:@selector(updateValueCache:) forControlEvents:UIControlEventValueChanged];
+}
+
+- (void)updateValueCache:(id)sender
+{
+	cachedValue = ((UIKnob*)sender).value;
+    self.cacheDirty = YES;
+}
+
+- (void)updateValuesToCsound
+{
+	if (self.cacheDirty) {
+        *channelPtr = cachedValue;
+        self.cacheDirty = NO;
+    }
+}
+
+- (void)updateValuesFromCsound
+{
+	
+}
+
+- (void)cleanup
+{
+	[self removeTarget:self action:@selector(updateValueCache:) forControlEvents:UIControlEventValueChanged];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/audioInTest.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/audioInTest.csd
new file mode 100644
index 0000000..dd719f9
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/audioInTest.csd	
@@ -0,0 +1,34 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0 -i adc
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+instr 1
+
+kldelay     chnget "leftDelayTime"
+klfeedback  chnget "leftFeedback"
+krdelay     chnget "rightDelayTime"
+krfeedback  chnget "rightFeedback"
+
+asig,asig1 ins
+a1 init 0
+a2 init 0
+a1 vdelay3 asig+a2*klfeedback, kldelay, 3000
+a2 vdelay3 asig+a1*krfeedback, krdelay, 3000
+outs a2,a1
+
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i1 0 360000
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/audiofiletest.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/audiofiletest.csd
new file mode 100644
index 0000000..4f48639
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/audiofiletest.csd	
@@ -0,0 +1,34 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0 -i adc
+</CsOptions>
+<CsInstruments>
+sr        = 44100
+ksmps     = 256
+nchnls    = 2
+0dbfs	  = 1
+
+	instr 1
+S_file = p4
+ilen filelen S_file
+S_score sprintfk {{ i 2 0 %f "%s" }}, ilen, S_file
+scoreline S_score, 1
+turnoff
+	endin
+
+	instr 2
+kpitch chnget "pitch"
+aL, aR diskin2 p4, kpitch
+aL = aL
+aR = aR
+outs aL, aR
+	endin
+
+
+</CsInstruments>
+<CsScore>
+
+f0 100000
+
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/consoleoutput.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/consoleoutput.csd
new file mode 100644
index 0000000..85463f6
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/consoleoutput.csd	
@@ -0,0 +1,31 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0 -i adc
+</CsOptions>
+<CsInstruments>
+
+sr		= 44100
+ksmps	= 512
+nchnls	= 2
+0dbfs	= 1
+
+gicount init 5
+
+	instr 1
+printf_i "countdown: %d\n", 1.0, gicount
+gicount = gicount - 1
+	endin
+
+</CsInstruments>
+<CsScore>
+
+i1 0 1
+i1 1 1
+i1 2 1
+i1 3 1
+i1 4 1
+i1 5 1
+e
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/pitchshifter.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/pitchshifter.csd
new file mode 100644
index 0000000..aec536e
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/pitchshifter.csd	
@@ -0,0 +1,68 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0 -i adc
+</CsOptions>
+<CsInstruments>
+sr        = 44100
+ksmps     = 64
+nchnls    = 2
+0dbfs	  = 1
+
+giWet		ftgen	0,0,1024,-7,0,512,1,512,1
+giDry		ftgen	0,0,1024,-7,1,512,1,512,0
+
+turnon 1
+
+    opcode PitchShifter, aa, aakkk
+    
+aL, aR, kpitch, kfine, kfeedback xin 
+
+		setksmps 64
+
+ifftsize    = 1024
+ihopsize    = 256
+kscal       = octave((int(kpitch)/12)+kfine)
+
+aOutL       init 0		
+aOutR       init 0
+
+fsig1L      pvsanal aL+(aOutL*kfeedback), ifftsize, ihopsize, ifftsize, 0
+fsig1R      pvsanal aR+(aOutR*kfeedback), ifftsize, ihopsize, ifftsize*2, 0
+fsig2L      pvscale fsig1L, kscal
+fsig2R      pvscale fsig1R, kscal
+aOutL       pvsynth fsig2L
+aOutR       pvsynth fsig2R
+
+            xout aOutL, aOutR
+    endop
+
+    instr 1 ;PITCH SHIFTER
+
+a1, a2	ins
+
+kmix        chnget "mix"
+kpitch      chnget "pitch"
+kpitch      scale kpitch, 12, -12
+kfine       = 0      ;chnget "pitchshifter_fine"
+kfine       scale kfine, 0.083333, -0.083333
+kfeedback   = 0      ;chnget "pitchshifter_feedback"
+
+kWet		table	kmix, giWet, 100
+kDry       	table	kmix, giDry, 100	
+
+aOutL, aOutR PitchShifter a1, a2, kpitch, kfine, kfeedback
+
+aOutL		= (aOutL * kmix) + (a1 * (1.0 - kmix))
+aOutR		= (aOutR * kmix) + (a2 * (1.0 - kmix))
+
+		outs aOutL, aOutR
+    
+    endin
+
+
+</CsInstruments>
+<CsScore>
+f0 36000
+
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/recordTest.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/recordTest.csd
new file mode 100644
index 0000000..4112b07
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/AudioInTest/recordTest.csd	
@@ -0,0 +1,26 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0 -i adc
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+instr 1
+kgain chnget "gain"
+asig1,asig2 ins
+chnset asig1, "meter"
+asig1 = asig1 * kgain
+asig2 = asig2 * kgain
+outs asig1, asig2
+endin
+
+</CsInstruments>
+<CsScore>
+
+i1 0 360000
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/BaseCsoundViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/BaseCsoundViewController.h
new file mode 100644
index 0000000..7d9c257
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/BaseCsoundViewController.h	
@@ -0,0 +1,41 @@
+/* 
+ 
+ BaseCsoundViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "CsoundObj.h"
+
+ at interface BaseCsoundViewController : UIViewController <UISplitViewControllerDelegate> {
+    CsoundObj* mCsound;
+}
+
+ at property (nonatomic, retain) CsoundObj* csound;
+
+ at property (strong, nonatomic) id detailItem;
+
+ at property (strong, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
+
+ at property (strong, nonatomic) UIPopoverController *masterPopoverController;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/BaseCsoundViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/BaseCsoundViewController.m
new file mode 100644
index 0000000..24d79e3
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/BaseCsoundViewController.m	
@@ -0,0 +1,119 @@
+/* 
+ 
+ BaseCsoundViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+#import "BaseCsoundViewController.h"
+
+ at interface BaseCsoundViewController ()
+- (void)configureView;
+ at end
+
+ at implementation BaseCsoundViewController
+
+ at synthesize csound = mCsound;
+
+ at synthesize detailItem = _detailItem;
+ at synthesize detailDescriptionLabel = _detailDescriptionLabel;
+ at synthesize masterPopoverController = _masterPopoverController;
+
+- (void)dealloc
+{
+    [_detailItem release];
+    [_detailDescriptionLabel release];
+    [_masterPopoverController release];
+    
+    [mCsound release];
+
+    [super dealloc];
+}
+
+#pragma mark - Managing the detail item
+
+- (void)setDetailItem:(id)newDetailItem
+{
+    if (_detailItem != newDetailItem) {
+        [_detailItem release]; 
+        _detailItem = [newDetailItem retain]; 
+        
+        // Update the view.
+        [self configureView];
+    }
+    
+    if (self.masterPopoverController != nil) {
+        [self.masterPopoverController dismissPopoverAnimated:YES];
+    }        
+}
+
+- (void)configureView
+{
+    // Update the user interface for the detail item.
+    
+    if (self.detailItem) {
+        self.detailDescriptionLabel.text = [self.detailItem description];
+    }
+}
+
+
+-(void)viewWillDisappear:(BOOL)animated {
+    
+    [super viewWillDisappear:animated];
+    
+    [mCsound stopCsound];
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+    // Return YES for supported orientations
+    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
+        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
+    } else {
+        return YES;
+    }
+}
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+    if (self) {
+        self.title = NSLocalizedString(@"Detail", @"Detail");
+    }
+    return self;
+}
+
+#pragma mark - Split view
+
+- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
+{
+    barButtonItem.title = @"Csound for iOS";
+    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
+    self.masterPopoverController = popoverController;
+}
+
+- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
+{
+    // Called when the view is shown again in the split view, invalidating the button and popover controller.
+    [self.navigationItem setLeftBarButtonItem:nil animated:YES];
+    self.masterPopoverController = nil;
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/ButtonTestViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/ButtonTestViewController.h
new file mode 100644
index 0000000..7d80492
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/ButtonTestViewController.h	
@@ -0,0 +1,45 @@
+/* 
+ 
+ ButtonTestViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+
+ at interface ButtonTestViewController : BaseCsoundViewController<CsoundObjCompletionListener> {
+    IBOutlet UIButton* mValueButton;
+    IBOutlet UIButton* mEventButton;
+    
+    IBOutlet UISlider* mDurationSlider;
+
+    IBOutlet UISlider* mAttackSlider;
+    IBOutlet UISlider* mDecaySlider;
+    IBOutlet UISlider* mSustainSlider;
+    IBOutlet UISlider* mReleaseSlider;
+    IBOutlet UISwitch* mSwitch;
+}
+
+-(IBAction) toggleOnOff:(id)component;
+-(IBAction) eventButtonHit:(id)sender;
+
+ at end
\ No newline at end of file
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/ButtonTestViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/ButtonTestViewController.m
new file mode 100644
index 0000000..154eced
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/ButtonTestViewController.m	
@@ -0,0 +1,92 @@
+/* 
+ 
+ ButtonTestViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+#import "ButtonTestViewController.h"
+
+ at implementation ButtonTestViewController
+
+-(void)viewDidLoad {
+    self.title = @"Button Test";
+    [super viewDidLoad];
+}
+
+-(IBAction) eventButtonHit:(id)sender {
+    NSString* score = [NSString stringWithFormat:@"i2 0 %f", [mDurationSlider value]];
+
+    [mCsound sendScore:score];
+}
+
+-(IBAction) toggleOnOff:(id)component {
+	UISwitch* uiswitch = (UISwitch*)component;
+	NSLog(@"Status: %d", [uiswitch isOn]);
+    
+	if(uiswitch.on) {
+        
+        NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"buttonTest" ofType:@"csd"];  
+        NSLog(@"FILE PATH: %@", tempFile);
+        
+		[self.csound stopCsound];
+        
+        self.csound = [[CsoundObj alloc] init];
+        [self.csound addCompletionListener:self];
+        
+        [self.csound addButton:mValueButton forChannelName:@"button1"];
+        
+        [self.csound addSlider:mDurationSlider forChannelName:@"duration"];        
+        [self.csound addSlider:mAttackSlider forChannelName:@"attack"];
+        [self.csound addSlider:mDecaySlider forChannelName:@"decay"];
+        [self.csound addSlider:mSustainSlider forChannelName:@"sustain"];
+        [self.csound addSlider:mReleaseSlider forChannelName:@"release"];
+        
+        [self.csound startCsound:tempFile];
+        
+	} else {
+        [self.csound stopCsound];
+    }
+}
+
+- (void)dealloc {
+	[mValueButton release];
+	[mEventButton release];    
+    [mDurationSlider release];
+    
+    [mAttackSlider release];
+    [mDecaySlider release];
+    [mSustainSlider release];
+    [mReleaseSlider release];
+	[mSwitch release];
+    [super dealloc];
+}
+
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+	[mSwitch setOn:NO animated:YES];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/ButtonTestViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/ButtonTestViewController.xib
new file mode 100644
index 0000000..e663ba2
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/ButtonTestViewController.xib	
@@ -0,0 +1,546 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C74</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1138.23</string>
+		<string key="IBDocument.HIToolboxVersion">567.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUISlider</string>
+			<string>IBUISwitch</string>
+			<string>IBUIButton</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUISwitch" id="375382083">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{5, 14}, {94, 27}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="1015645258"/>
+						<string key="NSReuseIdentifierKey">_NS:606</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+					</object>
+					<object class="IBUISlider" id="574670266">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 263}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="845795843"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.05000000074505806</float>
+						<float key="IBUIMaxValue">2</float>
+					</object>
+					<object class="IBUILabel" id="339806979">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{26, 233}, {274, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="574670266"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">ADSR</string>
+						<object class="NSColor" key="IBUITextColor" id="865829491">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="558207043">
+							<int key="type">1</int>
+							<double key="pointSize">17</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="458450847">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">17</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUISlider" id="845795843">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 293}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="274509394"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.05000000074505806</float>
+						<float key="IBUIMinValue">0.05000000074505806</float>
+						<float key="IBUIMaxValue">2</float>
+					</object>
+					<object class="IBUISlider" id="274509394">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 323}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="865834981"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.69999998807907104</float>
+					</object>
+					<object class="IBUISlider" id="865834981">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 353}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">2</float>
+						<float key="IBUIMaxValue">4</float>
+					</object>
+					<object class="IBUISlider" id="835343324">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{109, 174}, {193, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="339806979"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">1.5</float>
+						<float key="IBUIMinValue">0.5</float>
+						<float key="IBUIMaxValue">4</float>
+					</object>
+					<object class="IBUILabel" id="40039947">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{26, 173}, {77, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="835343324"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Duration</string>
+						<reference key="IBUITextColor" ref="865829491"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<reference key="IBUIFontDescription" ref="558207043"/>
+						<reference key="IBUIFont" ref="458450847"/>
+					</object>
+					<object class="IBUIButton" id="1015645258">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 54}, {282, 37}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="530662897"/>
+						<string key="NSReuseIdentifierKey">_NS:225</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<int key="IBUIButtonType">1</int>
+						<string key="IBUINormalTitle">Value Button</string>
+						<object class="NSColor" key="IBUIHighlightedTitleColor" id="979888996">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MQA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleShadowColor" id="259750481">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MC41AA</bytes>
+						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="527474570">
+							<int key="type">2</int>
+							<double key="pointSize">15</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="38301923">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">15</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUIButton" id="530662897">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 99}, {282, 37}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="40039947"/>
+						<string key="NSReuseIdentifierKey">_NS:225</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<int key="IBUIButtonType">1</int>
+						<string key="IBUINormalTitle">Event Button</string>
+						<reference key="IBUIHighlightedTitleColor" ref="979888996"/>
+						<object class="NSColor" key="IBUINormalTitleColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
+						</object>
+						<reference key="IBUINormalTitleShadowColor" ref="259750481"/>
+						<reference key="IBUIFontDescription" ref="527474570"/>
+						<reference key="IBUIFont" ref="38301923"/>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="375382083"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSwitch</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="375382083"/>
+					</object>
+					<int key="connectionID">17</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mDurationSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="835343324"/>
+					</object>
+					<int key="connectionID">20</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mAttackSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="574670266"/>
+					</object>
+					<int key="connectionID">21</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mDecaySlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="845795843"/>
+					</object>
+					<int key="connectionID">22</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSustainSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="274509394"/>
+					</object>
+					<int key="connectionID">23</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mReleaseSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="865834981"/>
+					</object>
+					<int key="connectionID">24</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mValueButton</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="1015645258"/>
+					</object>
+					<int key="connectionID">25</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mEventButton</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="530662897"/>
+					</object>
+					<int key="connectionID">26</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">toggleOnOff:</string>
+						<reference key="source" ref="375382083"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">27</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">eventButtonHit:</string>
+						<reference key="source" ref="530662897"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">1</int>
+					</object>
+					<int key="connectionID">28</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="375382083"/>
+							<reference ref="574670266"/>
+							<reference ref="339806979"/>
+							<reference ref="845795843"/>
+							<reference ref="274509394"/>
+							<reference ref="865834981"/>
+							<reference ref="835343324"/>
+							<reference ref="40039947"/>
+							<reference ref="1015645258"/>
+							<reference ref="530662897"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="375382083"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="574670266"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">9</int>
+						<reference key="object" ref="339806979"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">10</int>
+						<reference key="object" ref="845795843"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="274509394"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="865834981"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">13</int>
+						<reference key="object" ref="835343324"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">14</int>
+						<reference key="object" ref="40039947"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">15</int>
+						<reference key="object" ref="1015645258"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">16</int>
+						<reference key="object" ref="530662897"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">ButtonTestViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="13.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="14.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="15.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="16.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">28</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">ButtonTestViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="eventButtonHit:">id</string>
+						<string key="toggleOnOff:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="eventButtonHit:">
+							<string key="name">eventButtonHit:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="toggleOnOff:">
+							<string key="name">toggleOnOff:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="mAttackSlider">UISlider</string>
+						<string key="mDecaySlider">UISlider</string>
+						<string key="mDurationSlider">UISlider</string>
+						<string key="mEventButton">UIButton</string>
+						<string key="mReleaseSlider">UISlider</string>
+						<string key="mSustainSlider">UISlider</string>
+						<string key="mSwitch">UISwitch</string>
+						<string key="mValueButton">UIButton</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="mAttackSlider">
+							<string key="name">mAttackSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mDecaySlider">
+							<string key="name">mDecaySlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mDurationSlider">
+							<string key="name">mDurationSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mEventButton">
+							<string key="name">mEventButton</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mReleaseSlider">
+							<string key="name">mReleaseSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSustainSlider">
+							<string key="name">mSustainSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSwitch">
+							<string key="name">mSwitch</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mValueButton">
+							<string key="name">mValueButton</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/ButtonTestViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/buttonTest.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/buttonTest.csd
new file mode 100644
index 0000000..d1e77ef
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/ButtonTest/buttonTest.csd	
@@ -0,0 +1,56 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtaudio=null -d -+msg_color=0 -m0
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+seed 0
+
+instr 1
+
+ktrigger chnget "button1" 
+knotedur chnget "duration" 
+
+if(ktrigger > 0) then
+    event "i", 2, 0, knotedur
+endif
+
+endin
+
+instr 2
+
+print p3
+
+iattack chnget "attack" 
+idecay chnget "decay" 
+isustain chnget "sustain" 
+irelease chnget "release" 
+
+
+;ipchMul rnd31 .5, -0.5
+;ipchMul = ipchMul + .5
+;ipch = 100 + (1000 * ipchMul)
+ipch = 100 + rnd(1000)
+
+;print iattack
+;print idecay
+;print isustain
+;print irelease
+
+a2 linsegr 0, iattack, 1, idecay, isustain, irelease, 0
+a1 oscili a2 * .25, ipch, 1
+outs a1,a1
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i1 0 3600
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/CsoundHaiku4ViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/CsoundHaiku4ViewController.h
new file mode 100644
index 0000000..2f280b6
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/CsoundHaiku4ViewController.h	
@@ -0,0 +1,31 @@
+/* 
+ 
+ CsoundHaiku4ViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+
+ at interface CsoundHaiku4ViewController : BaseCsoundViewController<CsoundObjCompletionListener>
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/CsoundHaiku4ViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/CsoundHaiku4ViewController.m
new file mode 100644
index 0000000..bacce69
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/CsoundHaiku4ViewController.m	
@@ -0,0 +1,60 @@
+/* 
+ 
+ CsoundHaiku4ViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+#import "CsoundHaiku4ViewController.h"
+
+ at implementation CsoundHaiku4ViewController
+
+-(void)viewDidLoad {
+    self.title = @"Csound Haiku 4";
+    [super viewDidLoad];
+}
+
+-(void)viewDidAppear:(BOOL)animated {
+	[super viewDidAppear:animated];
+	
+	NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"IV" ofType:@"csd"];  
+	NSLog(@"FILE PATH: %@", tempFile);
+	
+	[self.csound stopCsound];
+	
+	self.csound = [[CsoundObj alloc] init];
+	[self.csound addCompletionListener:self];
+	
+	[self.csound startCsound:tempFile];
+}
+
+- (void)dealloc {
+    [super dealloc];
+}
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+}
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/CsoundHaiku4ViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/CsoundHaiku4ViewController.xib
new file mode 100644
index 0000000..92f9297
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/CsoundHaiku4ViewController.xib	
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C74</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1138.23</string>
+		<string key="IBDocument.HIToolboxVersion">567.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUILabel" id="573013420">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{20, 20}, {280, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="754867717"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Csound Haiku</string>
+						<object class="NSColor" key="IBUITextColor" id="371229472">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="365495412">
+							<int key="type">1</int>
+							<double key="pointSize">17</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="774004822">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">17</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUILabel" id="754867717">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{20, 49}, {280, 82}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="793544056"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">IV</string>
+						<reference key="IBUITextColor" ref="371229472"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<bool key="IBUIAdjustsFontSizeToFit">NO</bool>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">2</int>
+							<double key="pointSize">48</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">48</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUILabel" id="793544056">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{20, 139}, {280, 33}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="1055471790"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Iain McCurdy</string>
+						<reference key="IBUITextColor" ref="371229472"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUINumberOfLines">0</int>
+						<int key="IBUITextAlignment">1</int>
+						<reference key="IBUIFontDescription" ref="365495412"/>
+						<reference key="IBUIFont" ref="774004822"/>
+					</object>
+					<object class="IBUILabel" id="1055471790">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{20, 180}, {280, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">http://iainmccurdy.org/csoundhaiku.html</string>
+						<reference key="IBUITextColor" ref="371229472"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<reference key="IBUIFontDescription" ref="365495412"/>
+						<reference key="IBUIFont" ref="774004822"/>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="573013420"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="573013420"/>
+							<reference ref="754867717"/>
+							<reference ref="793544056"/>
+							<reference ref="1055471790"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="573013420"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="754867717"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="793544056"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">7</int>
+						<reference key="object" ref="1055471790"/>
+						<array class="NSMutableArray" key="children"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">CsoundHaiku4ViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">10</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">CsoundHaiku4ViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/CsoundHaiku4ViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/IV.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/IV.csd
new file mode 100644
index 0000000..f9c429f
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/CsoundHaiku4/IV.csd	
@@ -0,0 +1,87 @@
+Csound Haiku - IV
+Iain McCurdy, 2011.
+
+<CsoundSynthesizer>
+
+<CsOptions>
+-odac -dm0 -+rtmidi=null -+rtaudio=null -+msg_color=0
+</CsOptions>
+
+<CsInstruments>
+sr 		= 		44100
+ksmps 		= 		32
+nchnls 		= 		2
+0dbfs 		= 		1
+
+gisine		ftgen		0, 0, 4096, 10, 1
+gioctfn		ftgen		0, 0, 4096, -19, 1, 0.5, 270, 0.5
+gasendL		init		0
+gasendR		init		0
+ginotes		ftgen		0, 0, -100, -17, 0, 8.00, 10, 8.03, 15, 8.04, 25, 8.05, 50, 8.07, 60, 8.08, 73, 8.09, 82, 8.11
+		seed		0
+;		alwayson	"trigger_notes"
+;		alwayson	"reverb"
+
+		instr		trigger_notes
+krate		rspline		0.04, 0.15, 0.05, 0.1
+ktrig		metro		krate
+gktrans		init		0
+gktrans		trandom		ktrig,-1, 1
+gktrans		=		semitone(gktrans)
+idur		=		15
+		schedkwhen	ktrig, 0, 0, "hboscil_note", rnd(2), idur
+		schedkwhen	ktrig, 0, 0, "hboscil_note", rnd(2), idur
+		schedkwhen	ktrig, 0, 0, "hboscil_note", rnd(2), idur
+		schedkwhen	ktrig, 0, 0, "hboscil_note", rnd(2), idur
+		endin
+
+		instr		hboscil_note
+ipch		table		int(rnd(100)),ginotes
+icps		=		cpspch(ipch)*i(gktrans)*semitone(rnd(0.5)-0.25)
+kamp		expseg		0.001,0.02,0.2,p3-0.01,0.001
+ktonemoddep	jspline		0.01,0.05,0.2
+ktonemodrte	jspline		6,0.1,0.2
+ktone		oscil		ktonemoddep,ktonemodrte,gisine
+kbrite		rspline		-2,3,0.0002,3
+ibasfreq	init		icps
+ioctcnt		init		2
+iphs		init		0
+a1 		hsboscil 	kamp, ktone, kbrite, ibasfreq, gisine, gioctfn, ioctcnt, iphs	
+amod		oscil		1, ibasfreq*3.47, gisine
+arm		=		a1*amod
+kmix		expseg		0.001, 0.01, rnd(1), rnd(3)+0.3, 0.001
+a1		ntrpol		a1, arm, kmix
+a1 		pareq 		a1/10, 400, 15, .707
+a1		tone		a1, 500
+kpanrte		jspline		5, 0.05, 0.1
+kpandep		jspline		0.9, 0.2, 0.4
+kpan		oscil		kpandep, kpanrte, gisine
+a1,a2		pan2		a1, kpan
+a1		delay		a1, rnd(0.1)
+a2		delay		a2, rnd(0.1)
+kenv		linsegr		1, 1, 0
+a1		=		a1*kenv
+a2		=		a2*kenv
+		outs		a1, a2
+gasendL		=		gasendL+a1/5
+gasendR		=		gasendR+a2/5
+		endin
+
+		instr		reverb
+aL, aR		reverbsc	gasendL, gasendR, 0.9, 10000
+		outs		aL, aR
+		clear		gasendL, gasendR
+		endin
+
+</CsInstruments>
+
+<CsScore>
+f 0 3600
+i "trigger_notes" 0 3600
+i "reverb" 0 3600
+
+
+e
+</CsScore>
+
+</CsoundSynthesizer>
\ No newline at end of file
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/HardwareTestViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/HardwareTestViewController.h
new file mode 100644
index 0000000..27303c4
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/HardwareTestViewController.h	
@@ -0,0 +1,36 @@
+/* 
+ 
+ HardwareTestViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+
+ at interface HardwareTestViewController : BaseCsoundViewController<CsoundObjCompletionListener> {
+    
+    IBOutlet UISwitch* mSwitch;
+}
+
+-(IBAction) toggleOnOff:(id)component;
+
+ at end
\ No newline at end of file
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/HardwareTestViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/HardwareTestViewController.m
new file mode 100644
index 0000000..98e56eb
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/HardwareTestViewController.m	
@@ -0,0 +1,75 @@
+/* 
+ 
+ HardwareTestViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "HardwareTestViewController.h"
+
+ at implementation HardwareTestViewController
+
+-(void)viewDidLoad {
+    self.title = @"Hardware Test";
+    [super viewDidLoad];
+}
+
+-(IBAction) toggleOnOff:(id)component {
+	UISwitch* uiswitch = (UISwitch*)component;
+	NSLog(@"Status: %d", [uiswitch isOn]);
+    
+	if(uiswitch.on) {
+        
+        NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"hardwareTest" ofType:@"csd"];  
+        NSLog(@"FILE PATH: %@", tempFile);
+        
+		[self.csound stopCsound];
+        
+        self.csound = [[CsoundObj alloc] init];
+        [self.csound addCompletionListener:self];
+        
+        [self.csound enableAccelerometer];
+        [self.csound enableAttitude];
+        [self.csound enableGyroscope];
+        
+        [self.csound startCsound:tempFile];
+        
+	} else {
+        [self.csound stopCsound];
+    }
+}
+
+- (void)dealloc {
+	[mSwitch release];
+    [super dealloc];
+}
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+	[mSwitch setOn:NO animated:YES];
+}
+
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/HardwareTestViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/HardwareTestViewController.xib
new file mode 100644
index 0000000..e34977d
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/HardwareTestViewController.xib	
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C74</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1138.23</string>
+		<string key="IBDocument.HIToolboxVersion">567.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIView</string>
+			<string>IBUISwitch</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUISwitch" id="929637141">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{5, 20}, {94, 27}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSwitch</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="929637141"/>
+					</object>
+					<int key="connectionID">5</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">toggleOnOff:</string>
+						<reference key="source" ref="929637141"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">6</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="929637141"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="929637141"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">HardwareTestViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">6</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">HardwareTestViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">toggleOnOff:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">mSwitch</string>
+						<string key="NS.object.0">UISwitch</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">mSwitch</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">mSwitch</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/HardwareTestViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/hardwareTest.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/hardwareTest.csd
new file mode 100644
index 0000000..f307f38
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/HardwareTest/hardwareTest.csd	
@@ -0,0 +1,48 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+instr 1
+
+kaccelX chnget "accelerometerX" 
+kaccelY chnget "accelerometerY" 
+kaccelZ chnget "accelerometerZ" 
+
+kgyroX chnget "gyroX" 
+kgyroY chnget "gyroY" 
+kgyroZ chnget "gyroZ" 
+
+kattRoll chnget "attitudeRoll" 
+kattPitch chnget "attitudePitch" 
+kattYaw chnget "attitudeYaw" 
+
+
+kcutoff = 5000 + (4000 * kaccelX)
+kresonance = .3 + (.3  * kaccelY)
+kpch = 880 + kaccelX * 220
+
+a1 vco2 (kaccelZ + .5)  * .2, kpch
+
+a1 moogladder a1, kcutoff, kresonance
+
+aL, aR reverbsc a1, a1, .72, 5000
+
+outs aL, aR
+
+
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i1 0 360000
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/HarmonizerTest.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/HarmonizerTest.h
new file mode 100644
index 0000000..5eb7624
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/HarmonizerTest.h	
@@ -0,0 +1,40 @@
+/* 
+ 
+ HarmonizerTest.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+
+ at interface HarmonizerTest : BaseCsoundViewController<CsoundObjCompletionListener> {
+    
+    IBOutlet UISlider* mHarmPitchSlider;
+    IBOutlet UISlider* mGainSlider;    
+    
+    IBOutlet UISwitch* mSwitch;
+}
+
+-(IBAction) toggleOnOff:(id)component;
+
+ at end
\ No newline at end of file
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/HarmonizerTest.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/HarmonizerTest.m
new file mode 100644
index 0000000..739eb06
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/HarmonizerTest.m	
@@ -0,0 +1,76 @@
+/* 
+ 
+ HarmonizerTest.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+
+#import "HarmonizerTest.h"
+
+ at implementation HarmonizerTest
+
+-(void)viewDidLoad {
+    self.title = @"Harmonizer";
+    [super viewDidLoad];
+}
+
+-(IBAction) toggleOnOff:(id)component {
+	UISwitch* uiswitch = (UISwitch*)component;
+	NSLog(@"Status: %d", [uiswitch isOn]);
+    
+	if(uiswitch.on) {
+        
+        NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"harmonizer" ofType:@"csd"];  
+        NSLog(@"FILE PATH: %@", tempFile);
+        
+		[self.csound stopCsound];
+        
+        self.csound = [[CsoundObj alloc] init];
+        [self.csound addCompletionListener:self];
+        
+        [self.csound addSlider:mHarmPitchSlider forChannelName:@"slider"];
+        [self.csound addSlider:mGainSlider forChannelName:@"gain"];
+        [self.csound startCsound:tempFile];
+        
+	} else {
+        [self.csound stopCsound];
+    }
+}
+
+- (void)dealloc {
+	[mSwitch release];
+    [mHarmPitchSlider release];
+    [mGainSlider release];
+    [super dealloc];
+}
+
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+	[mSwitch setOn:NO animated:YES];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/HarmonizerTest.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/HarmonizerTest.xib
new file mode 100644
index 0000000..b560d99
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/HarmonizerTest.xib	
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C74</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1138.23</string>
+		<string key="IBDocument.HIToolboxVersion">567.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUISlider</string>
+			<string>IBUISwitch</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUISwitch" id="759137530">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{5, 20}, {94, 27}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="85186336"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+					</object>
+					<object class="IBUILabel" id="85186336">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{25, 112}, {225, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="1028275453"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Harmony Pitch</string>
+						<object class="NSColor" key="IBUITextColor" id="660075865">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="884805176">
+							<int key="type">1</int>
+							<double key="pointSize">17</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="259816424">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">17</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUISlider" id="1028275453">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 142}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="386176544"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.5</float>
+					</object>
+					<object class="IBUILabel" id="386176544">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{25, 172}, {225, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="361144300"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Gain</string>
+						<reference key="IBUITextColor" ref="660075865"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<reference key="IBUIFontDescription" ref="884805176"/>
+						<reference key="IBUIFont" ref="259816424"/>
+					</object>
+					<object class="IBUISlider" id="361144300">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 203}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">1.5</float>
+						<float key="IBUIMinValue">0.5</float>
+						<float key="IBUIMaxValue">3</float>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="759137530"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSwitch</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="759137530"/>
+					</object>
+					<int key="connectionID">7</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mHarmPitchSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="1028275453"/>
+					</object>
+					<int key="connectionID">9</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mGainSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="361144300"/>
+					</object>
+					<int key="connectionID">12</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">toggleOnOff:</string>
+						<reference key="source" ref="759137530"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">8</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="759137530"/>
+							<reference ref="85186336"/>
+							<reference ref="1028275453"/>
+							<reference ref="386176544"/>
+							<reference ref="361144300"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="759137530"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="85186336"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="1028275453"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">10</int>
+						<reference key="object" ref="386176544"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="361144300"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">HarmonizerTest</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">12</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">HarmonizerTest</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">toggleOnOff:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="mGainSlider">UISlider</string>
+						<string key="mHarmPitchSlider">UISlider</string>
+						<string key="mSwitch">UISwitch</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="mGainSlider">
+							<string key="name">mGainSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mHarmPitchSlider">
+							<string key="name">mHarmPitchSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSwitch">
+							<string key="name">mSwitch</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/HarmonizerTest.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/harmonizer.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/harmonizer.csd
new file mode 100644
index 0000000..7ce72cf
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Harmonizer/harmonizer.csd	
@@ -0,0 +1,34 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtaudio=null -dm0 -i adc
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+instr 3
+
+asig,asig1 ins
+
+ksl chnget "slider"
+kgain chnget "gain"
+fsig1 pvsanal asig,2048,256,2048,1
+fsig2 pvscale fsig1,0.75+ksl,1
+fsig3 pvscale fsig1,(0.75+ksl)*1.25,1
+fsig4 pvsmix fsig2, fsig3
+a1 pvsynth fsig4 
+
+a1 = a1 * kgain
+   outs a1, a1
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i3 0.1 10000
+
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Introduction/IntroductionViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Introduction/IntroductionViewController.h
new file mode 100644
index 0000000..8752bab
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Introduction/IntroductionViewController.h	
@@ -0,0 +1,30 @@
+/* 
+ 
+ IntroductionViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+
+ at interface IntroductionViewController : UIViewController
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Introduction/IntroductionViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Introduction/IntroductionViewController.m
new file mode 100644
index 0000000..4c85a9d
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Introduction/IntroductionViewController.m	
@@ -0,0 +1,67 @@
+/* 
+ 
+ IntroductionViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+#import "IntroductionViewController.h"
+
+ at implementation IntroductionViewController
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+    if (self) {
+        // Custom initialization
+    }
+    return self;
+}
+
+- (void)didReceiveMemoryWarning
+{
+    // Releases the view if it doesn't have a superview.
+    [super didReceiveMemoryWarning];
+    
+    // Release any cached data, images, etc that aren't in use.
+}
+
+#pragma mark - View lifecycle
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    // Do any additional setup after loading the view from its nib.
+}
+
+- (void)viewDidUnload
+{
+    [super viewDidUnload];
+    // Release any retained subviews of the main view.
+    // e.g. self.myOutlet = nil;
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+    // Return YES for supported orientations
+    return (interfaceOrientation == UIInterfaceOrientationPortrait);
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Introduction/IntroductionViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Introduction/IntroductionViewController.xib
new file mode 100644
index 0000000..3b23fcd
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Introduction/IntroductionViewController.xib	
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C25</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1919</string>
+		<string key="IBDocument.AppKitVersion">1138.11</string>
+		<string key="IBDocument.HIToolboxVersion">566.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">916</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIView</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">IntroductionViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">3</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">IntroductionViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/IntroductionViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">916</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/CsoundVirtualKeyboard.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/CsoundVirtualKeyboard.h
new file mode 100644
index 0000000..82ed337
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/CsoundVirtualKeyboard.h	
@@ -0,0 +1,50 @@
+/* 
+ 
+ CsoundVirtualKeyboard.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+
+
+ at protocol CsoundVirtualKeyboardDelegate;
+
+ at interface CsoundVirtualKeyboard : UIView {
+
+	BOOL keyDown[25];
+	NSMutableSet* currentTouches;
+	CGRect keyRects[25];
+	CGFloat lastWidth;
+	id<CsoundVirtualKeyboardDelegate> mKeyboardDelegate;
+}
+
+ at property(nonatomic,retain) IBOutlet id<CsoundVirtualKeyboardDelegate> keyboardDelegate;
+
+ at end
+
+
+ at protocol CsoundVirtualKeyboardDelegate <NSObject> 
+
+-(void)keyUp:(CsoundVirtualKeyboard*)keybd keyNum:(int)keyNum;
+-(void)keyDown:(CsoundVirtualKeyboard*)keybd keyNum:(int)keyNum;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/CsoundVirtualKeyboard.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/CsoundVirtualKeyboard.m
new file mode 100644
index 0000000..465a042
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/CsoundVirtualKeyboard.m	
@@ -0,0 +1,290 @@
+/* 
+ 
+ CsoundVirtualKeyboard.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "CsoundVirtualKeyboard.h"
+
+static const int kTotalNumKeys = 25;
+
+ at interface CsoundVirtualKeyboard()
+
+- (BOOL)isWhiteKey:(int)key;
+
+ at end
+
+ at implementation CsoundVirtualKeyboard
+
+ at synthesize keyboardDelegate = mKeyboardDelegate;
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+		
+		for (int i = 1; i < kTotalNumKeys; i++) {
+			keyDown[i] = NO;
+		}
+		
+		lastWidth = -1.0f;
+		currentTouches = [[NSMutableSet alloc] init];
+		self.multipleTouchEnabled = YES;
+    }
+    return self;
+}
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+	self = [super initWithCoder:aDecoder];
+	if (self) {
+		for (int i = 1; i < kTotalNumKeys; i++) {
+			keyDown[i] = NO;
+		}
+		
+		lastWidth = -1.0f;
+		currentTouches = [[NSMutableSet alloc] init];
+		self.multipleTouchEnabled = YES;
+	}
+	return self;
+}
+
+- (BOOL)isWhiteKey:(int)key {
+	switch (key % 12) {
+		case 0:
+		case 2:
+		case 4:
+		case 5:
+		case 7:
+		case 9:
+		case 11:
+			return YES;
+	}
+	
+	return NO;
+}
+
+-(void)updateKeyRects {
+	
+	if (lastWidth == self.bounds.size.width) {
+		return;
+	}
+	
+	lastWidth = self.bounds.size.width;
+	
+	CGFloat whiteKeyHeight = self.bounds.size.height;
+	CGFloat blackKeyHeight = whiteKeyHeight * .625;
+	
+	CGFloat whiteKeyWidth = self.bounds.size.width / 15.0f;
+	CGFloat blackKeyWidth = whiteKeyWidth * .8333333f;
+	
+	CGFloat leftKeyBound = whiteKeyWidth - (blackKeyWidth / 2.0f);
+	
+	int lastWhiteKey = 0;
+	
+	keyRects[0] = CGRectMake(0, 0, whiteKeyWidth, whiteKeyHeight);
+	
+	for (int i = 1; i < kTotalNumKeys; i++) {
+		
+		if (![self isWhiteKey:i]) {				
+			keyRects[i] = CGRectMake((lastWhiteKey * whiteKeyWidth) + leftKeyBound, 0, blackKeyWidth, blackKeyHeight);
+		} else {
+			lastWhiteKey++;
+			keyRects[i] = CGRectMake(lastWhiteKey * whiteKeyWidth, 0, whiteKeyWidth, whiteKeyHeight);
+		}
+		
+	}
+	
+}
+
+-(int)getKeyboardKey:(CGPoint)point {
+	
+	int keyNum = -1;
+	
+	for(int i = 0; i < kTotalNumKeys; i++) {
+		if (CGRectContainsPoint(keyRects[i], point)) {
+			keyNum = i;
+			if (![self isWhiteKey:i]) {
+				break;
+			}
+		}
+	}
+	
+	return keyNum;
+}
+
+- (void)updateKeyStates {
+	
+	[self updateKeyRects];
+		
+	NSArray* touches = [currentTouches allObjects];
+	int count = [touches count];
+
+	int currentKeyState[kTotalNumKeys];
+	
+	for (int i = 0; i < kTotalNumKeys; i++) {
+		currentKeyState[i] = NO;
+	}
+	
+	for (int i = 0; i < count; i++) {
+		UITouch* touch = [touches objectAtIndex:i];
+		CGPoint point = [touch locationInView:self];
+		int index = [self getKeyboardKey:point];
+		
+		if(index != -1) {
+			currentKeyState[index] = YES; 
+		}
+	}
+	
+	BOOL keysUpdated = NO;
+	
+	for (int i = 0; i < kTotalNumKeys; i++) {
+		if (keyDown[i] != currentKeyState[i]) {
+			keysUpdated = YES;
+			BOOL keyDownState = currentKeyState[i];
+			
+			keyDown[i] = keyDownState;
+			
+			if (mKeyboardDelegate != nil) {
+				if (keyDownState) {
+					[mKeyboardDelegate keyDown:self keyNum:i];
+				} else {
+					[mKeyboardDelegate keyUp:self keyNum:i];
+				}
+			}
+		}
+	}
+	
+	if (keysUpdated) {
+				[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
+	}
+}
+
+#pragma mark Touch Handling Code
+
+- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
+	for (UITouch* touch in touches) {
+		[currentTouches addObject:touch];
+	}
+	[self updateKeyStates];
+}
+
+- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
+	[self updateKeyStates];
+}
+
+- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
+	for (UITouch* touch in touches) {
+		[currentTouches removeObject:touch];
+	}
+	[self updateKeyStates];	
+}
+
+- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
+	for (UITouch* touch in touches) {
+		[currentTouches removeObject:touch];
+	}
+	[self updateKeyStates];
+	
+}
+
+
+#pragma mark Drawing Code
+
+
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect
+{
+	
+	// Get the context
+	CGContextRef context = UIGraphicsGetCurrentContext();
+	
+	CGFloat whiteKeyHeight = rect.size.height;
+	CGFloat blackKeyHeight = (int)(rect.size.height * .625);
+	//CGFloat whiteKeyWidth = rect.size.width / 52.0f;
+	CGFloat whiteKeyWidth = rect.size.width / 15.0f;
+	CGFloat blackKeyWidth = whiteKeyWidth * .8333333;
+	CGFloat blackKeyOffset = blackKeyWidth / 2;
+	
+	float runningX = 0;
+	int yval = 0;
+	
+	
+	CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
+	CGContextFillRect(context, self.bounds);
+	
+	CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
+	CGContextStrokeRect(context, self.bounds);
+	
+	int lineHeight = whiteKeyHeight - 1;
+
+	// Draw White Keys
+	for (int i = 0; i < kTotalNumKeys; i++) {
+		if ([self isWhiteKey:i]) {
+			int newX = (int) (runningX + 0.5);
+			
+			if (keyDown[i]) {
+				int newW = (int) ((runningX + whiteKeyWidth + 0.5) - newX);
+				
+				CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
+				CGContextFillRect(context, CGRectMake(newX, yval, newW, whiteKeyHeight - 1));
+
+			}
+			
+			runningX += whiteKeyWidth;
+			
+			CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
+			CGContextStrokeRect(context, CGRectMake(newX, yval, newX, lineHeight));
+		}
+	}
+	
+	runningX = 0.0f;
+	
+	// Draw Black Keys
+	for (int i = 0; i < kTotalNumKeys; i++) {
+		if ([self isWhiteKey:i]) {
+			runningX += whiteKeyWidth;
+		} else {
+			if (keyDown[i]) {
+				CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
+			} else {
+				CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
+			}			
+			
+			CGContextFillRect(context, CGRectMake((int)(runningX - blackKeyOffset), yval, (int)blackKeyWidth, blackKeyHeight));
+											
+			CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
+			CGContextStrokeRect(context, CGRectMake((int) (runningX - blackKeyOffset), yval, (int)blackKeyWidth, blackKeyHeight));
+		}
+	}
+	
+}
+
+-(void)dealloc {
+	[currentTouches release];
+	[mKeyboardDelegate release];
+	[super dealloc];
+}
+
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController.h
new file mode 100644
index 0000000..010d3e5
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController.h	
@@ -0,0 +1,50 @@
+/* 
+ 
+ MidiTestViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+#import "MIDIWidgetsManager.h"
+#import "CsoundVirtualKeyboard.h"
+
+ at interface MidiTestViewController  : BaseCsoundViewController <CsoundObjCompletionListener,
+		CsoundVirtualKeyboardDelegate> {
+			
+    IBOutlet UISlider* mAttackSlider;
+    IBOutlet UISlider* mDecaySlider;
+    IBOutlet UISlider* mSustainSlider;
+    IBOutlet UISlider* mReleaseSlider;
+    
+    IBOutlet UISlider* mCutoffSlider;
+    IBOutlet UISlider* mResonanceSlider;
+    
+    IBOutlet UISwitch* mSwitch;
+    MidiWidgetsManager* widgetsManager;
+			
+}
+
+-(IBAction) toggleOnOff:(id)component;
+-(IBAction) midiPanic:(id)component;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController.m
new file mode 100644
index 0000000..0eabd99
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController.m	
@@ -0,0 +1,128 @@
+/* 
+ 
+ MidiTestViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+#import "MidiTestViewController.h"
+
+ at implementation MidiTestViewController
+
+-(void)viewDidLoad {
+    self.title = @"MIDI Test";
+    
+    widgetsManager = [[MidiWidgetsManager alloc] init];
+    
+    [widgetsManager addSlider:mAttackSlider forControllerNumber:11];
+    [widgetsManager addSlider:mDecaySlider forControllerNumber:12];
+    [widgetsManager addSlider:mSustainSlider forControllerNumber:13];
+    [widgetsManager addSlider:mReleaseSlider forControllerNumber:14];
+    
+    [widgetsManager addSlider:mCutoffSlider forControllerNumber:15];
+    [widgetsManager addSlider:mResonanceSlider forControllerNumber:16];
+    
+    [widgetsManager openMidiIn];
+    
+    [super viewDidLoad];
+}
+
+-(void)viewWillDisappear:(BOOL)animated {
+    
+    [widgetsManager closeMidiIn];
+    
+    [super viewWillDisappear:animated];
+}
+
+-(IBAction) toggleOnOff:(id)component {
+	UISwitch* uiswitch = (UISwitch*)component;
+	NSLog(@"Status: %d", [uiswitch isOn]);
+    
+	if(uiswitch.on) {
+        
+        NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"midiTest" ofType:@"csd"];  
+        NSLog(@"FILE PATH: %@", tempFile);
+        
+		[self.csound stopCsound];
+        
+        self.csound = [[CsoundObj alloc] init];
+        [self.csound addCompletionListener:self];
+                
+        [self.csound addSlider:mCutoffSlider forChannelName:@"cutoff"];        
+        [self.csound addSlider:mResonanceSlider forChannelName:@"resonance"];                
+        
+        [self.csound addSlider:mAttackSlider forChannelName:@"attack"];
+        [self.csound addSlider:mDecaySlider forChannelName:@"decay"];
+        [self.csound addSlider:mSustainSlider forChannelName:@"sustain"];
+        [self.csound addSlider:mReleaseSlider forChannelName:@"release"];
+        
+        [self.csound setMidiInEnabled:YES];
+        
+        [self.csound startCsound:tempFile];
+        
+	} else {
+        [self.csound stopCsound];
+    }
+}
+
+-(IBAction) midiPanic:(id)component {
+    [mCsound sendScore:@"i\"allNotesOff\" 0 1"];
+}
+
+- (void)dealloc {
+
+    [mCutoffSlider release];
+    [mResonanceSlider release];
+    
+    [mAttackSlider release];
+    [mDecaySlider release];
+    [mSustainSlider release];
+    [mReleaseSlider release];
+	[mSwitch release];
+    
+    [widgetsManager release];
+    
+    [super dealloc];
+}
+
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+	[mSwitch setOn:NO animated:YES];
+}
+
+#pragma mark CsoundVirtualKeyboardDelegate
+
+-(void)keyUp:(CsoundVirtualKeyboard*)keybd keyNum:(int)keyNum {
+	int midikey = 60 + keyNum;
+	[mCsound sendScore:[NSString stringWithFormat:@"i-1.%003d 0 0", midikey]];	
+}
+
+-(void)keyDown:(CsoundVirtualKeyboard*)keybd keyNum:(int)keyNum {
+	int midikey = 60 + keyNum;
+	[mCsound sendScore:[NSString stringWithFormat:@"i1.%003d 0 -2 %d 0", midikey, midikey]];
+}
+
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController.xib
new file mode 100644
index 0000000..4485426
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController.xib	
@@ -0,0 +1,536 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C74</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1138.23</string>
+		<string key="IBDocument.HIToolboxVersion">567.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUISlider</string>
+			<string>IBUISwitch</string>
+			<string>IBUIButton</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUISwitch" id="44568477">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{5, 20}, {94, 27}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="818203941"/>
+						<string key="NSReuseIdentifierKey">_NS:606</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+					</object>
+					<object class="IBUISlider" id="553465627">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 86}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="736066656"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.05000000074505806</float>
+						<float key="IBUIMaxValue">2</float>
+					</object>
+					<object class="IBUILabel" id="818203941">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{26, 55}, {274, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="448479517"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">ADSR</string>
+						<object class="NSColor" key="IBUITextColor" id="712377432">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="173872946">
+							<int key="type">1</int>
+							<double key="pointSize">17</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="791548061">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">17</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUISlider" id="736066656">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 116}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="940014542"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.05000000074505806</float>
+						<float key="IBUIMinValue">0.05000000074505806</float>
+						<float key="IBUIMaxValue">2</float>
+					</object>
+					<object class="IBUISlider" id="940014542">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 146}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="1061873834"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.69999998807907104</float>
+					</object>
+					<object class="IBUISlider" id="1061873834">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 176}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="1065532757"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">2</float>
+						<float key="IBUIMaxValue">4</float>
+					</object>
+					<object class="IBUISlider" id="390919607">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{21, 236}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="38006678"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">3000</float>
+						<float key="IBUIMinValue">60</float>
+						<float key="IBUIMaxValue">10000</float>
+					</object>
+					<object class="IBUISlider" id="38006678">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{21, 266}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.20000000298023224</float>
+						<float key="IBUIMaxValue">0.99900001287460327</float>
+					</object>
+					<object class="IBUILabel" id="1065532757">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{29, 206}, {274, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="390919607"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Cutoff/Resonance</string>
+						<reference key="IBUITextColor" ref="712377432"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<reference key="IBUIFontDescription" ref="173872946"/>
+						<reference key="IBUIFont" ref="791548061"/>
+					</object>
+					<object class="IBUIButton" id="448479517">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{203, 20}, {97, 37}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="553465627"/>
+						<string key="NSReuseIdentifierKey">_NS:225</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<int key="IBUIButtonType">1</int>
+						<string key="IBUINormalTitle">Panic</string>
+						<object class="NSColor" key="IBUIHighlightedTitleColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MQA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleShadowColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MC41AA</bytes>
+						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">2</int>
+							<double key="pointSize">15</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">15</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="44568477"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mAttackSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="553465627"/>
+					</object>
+					<int key="connectionID">15</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mDecaySlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="736066656"/>
+					</object>
+					<int key="connectionID">16</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSustainSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="940014542"/>
+					</object>
+					<int key="connectionID">17</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mReleaseSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="1061873834"/>
+					</object>
+					<int key="connectionID">18</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mCutoffSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="390919607"/>
+					</object>
+					<int key="connectionID">21</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mResonanceSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="38006678"/>
+					</object>
+					<int key="connectionID">22</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSwitch</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="44568477"/>
+					</object>
+					<int key="connectionID">27</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">toggleOnOff:</string>
+						<reference key="source" ref="44568477"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">14</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">midiPanic:</string>
+						<reference key="source" ref="448479517"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">1</int>
+					</object>
+					<int key="connectionID">24</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="44568477"/>
+							<reference ref="553465627"/>
+							<reference ref="818203941"/>
+							<reference ref="736066656"/>
+							<reference ref="940014542"/>
+							<reference ref="1061873834"/>
+							<reference ref="390919607"/>
+							<reference ref="1065532757"/>
+							<reference ref="38006678"/>
+							<reference ref="448479517"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="44568477"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="553465627"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="818203941"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">7</int>
+						<reference key="object" ref="736066656"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="940014542"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">9</int>
+						<reference key="object" ref="1061873834"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">10</int>
+						<reference key="object" ref="390919607"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="38006678"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="1065532757"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">23</int>
+						<reference key="object" ref="448479517"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">MidiTestViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="23.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">27</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">MidiTestViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="midiPanic:">id</string>
+						<string key="toggleOnOff:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="midiPanic:">
+							<string key="name">midiPanic:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="toggleOnOff:">
+							<string key="name">toggleOnOff:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="mAttackSlider">UISlider</string>
+						<string key="mCutoffSlider">UISlider</string>
+						<string key="mDecaySlider">UISlider</string>
+						<string key="mReleaseSlider">UISlider</string>
+						<string key="mResonanceSlider">UISlider</string>
+						<string key="mSustainSlider">UISlider</string>
+						<string key="mSwitch">UISwitch</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="mAttackSlider">
+							<string key="name">mAttackSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mCutoffSlider">
+							<string key="name">mCutoffSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mDecaySlider">
+							<string key="name">mDecaySlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mReleaseSlider">
+							<string key="name">mReleaseSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mResonanceSlider">
+							<string key="name">mResonanceSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSustainSlider">
+							<string key="name">mSustainSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSwitch">
+							<string key="name">mSwitch</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/MidiTestViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController_iPad.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController_iPad.xib
new file mode 100644
index 0000000..68ee998
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/MidiTestViewController_iPad.xib	
@@ -0,0 +1,4977 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C74</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1138.23</string>
+		<string key="IBDocument.HIToolboxVersion">567.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUISlider</string>
+			<string>IBUISwitch</string>
+			<string>IBUIButton</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUISwitch" id="791723916">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{5, 20}, {94, 27}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="653891293"/>
+						<string key="NSReuseIdentifierKey">_NS:606</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+					</object>
+					<object class="IBUISlider" id="915148677">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 87}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="705581788"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.05000000074505806</float>
+						<float key="IBUIMaxValue">2</float>
+					</object>
+					<object class="IBUILabel" id="653891293">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{26, 55}, {274, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="893555418"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<string key="IBUIText">ADSR</string>
+						<object class="NSColor" key="IBUITextColor" id="381750506">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="47971282">
+							<int key="type">1</int>
+							<double key="pointSize">17</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="299687924">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">17</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUISlider" id="705581788">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 117}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="1016158309"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.05000000074505806</float>
+						<float key="IBUIMinValue">0.05000000074505806</float>
+						<float key="IBUIMaxValue">2</float>
+					</object>
+					<object class="IBUISlider" id="1016158309">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 147}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="1029971717"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.69999998807907104</float>
+					</object>
+					<object class="IBUISlider" id="1029971717">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 177}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="106348874"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">2</float>
+						<float key="IBUIMaxValue">4</float>
+					</object>
+					<object class="IBUISlider" id="517761514">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{21, 237}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="650292805"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">3000</float>
+						<float key="IBUIMinValue">60</float>
+						<float key="IBUIMaxValue">10000</float>
+					</object>
+					<object class="IBUISlider" id="650292805">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{21, 267}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.20000000298023224</float>
+						<float key="IBUIMaxValue">0.99900001287460327</float>
+					</object>
+					<object class="IBUILabel" id="106348874">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{29, 206}, {274, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="517761514"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<string key="IBUIText">Cutoff/Resonance</string>
+						<reference key="IBUITextColor" ref="381750506"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<reference key="IBUIFontDescription" ref="47971282"/>
+						<reference key="IBUIFont" ref="299687924"/>
+					</object>
+					<object class="IBUIButton" id="893555418">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{203, 20}, {97, 37}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="915148677"/>
+						<string key="NSReuseIdentifierKey">_NS:225</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<int key="IBUIButtonType">1</int>
+						<string key="IBUINormalTitle">Panic</string>
+						<object class="NSColor" key="IBUIHighlightedTitleColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MQA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleShadowColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MC41AA</bytes>
+						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">2</int>
+							<double key="pointSize">15</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">15</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUIView" id="905132773">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{29, 354}, {617, 215}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<string key="NSReuseIdentifierKey">_NS:212</string>
+						<object class="NSColor" key="IBUIBackgroundColor">
+							<int key="NSColorSpace">10</int>
+							<object class="NSImage" key="NSImage">
+								<int key="NSImageFlags">549453824</int>
+								<string key="NSSize">{256, 256}</string>
+								<array class="NSMutableArray" key="NSReps">
+									<array>
+										<integer value="0"/>
+										<object class="NSBitmapImageRep">
+											<object class="NSData" key="NSTIFFRepresentation">
+												<bytes key="NS.bytes">TU0AKgAEAAh1eIH/cHJ5/3Bzff9vcXX/bnB3/3Byef9vcXX/bG51/2xudf9ucHf/cHN9/2dqdP9ucXv/
+cHJ5/3Bzff9qbHP/b3F1/3N1fP9sbnX/am13/2ptd/9sbnX/am13/3l7gf91d33/bG95/2xudf9sb3n/
+bG95/2dqdP9qbXf/c3V8/3Bzff93eoP/bG51/3Bzff9sbnX/dXd9/2dqdP9qbHP/bG51/2psc/9sb3n/
+am13/2ptd/9sb3n/bG51/3V3ff97fYP/YmVu/25xe/9sb3n/c3Z//2psc/9zdXz/cHN9/2dqcf9qbHP/
+YmVu/2dqdP9nanH/am13/2xvef91eIH/Z2p0/25xe/91d33/bG51/25wd/92eHz/dXd9/29xdf9ucHf/
+eHl9/2xudf9ucHf/bG95/3Bzff9sb3n/bnF7/3l7gf9zdn//c3Z//3N2f/91eIH/c3V8/3Byef9nanT/
+bnB3/3Byef91d33/dHZ8/2psc/9sbnX/Z2p0/3N1fP9qbXf/cXN6/2psdf9wcnv/dnd9/25xe/9ucHf/
+bnB3/2ptd/92eH//a254/3Fzev9sb3n/cHJ5/25wd/9ucHf/cHN9/25wd/9wcnn/dnh8/2xudf93eX//
+dXd9/2dqdP9ucXv/dXd9/3N2f/9zdXz/Z2px/2xudf9ucXv/am13/3Bzff9zdXz/cHN9/2psc/9qbXf/
+bG51/2Jlbv9qbXf/aGp0/2hqcP9rbnX/cnV//29yfP9ucXv/bnF7/25xe/9zdn//bXB1/2xvef9qbXb/
+Zmly/2Jlbv9kZ3H/Zmhu/2Rncf9kZ3H/Zmlz/2Zpc/9kZ3H/bnB3/2Jlbv9nanT/ZGdx/2Zobv9zdXz/
+ZGdx/2xvef9maXP/foCG/2xvef9ucXv/bG95/25wd/9wc33/b3F1/3l8hv91eIH/cHN9/3N1fP9sb3n/
+d3qD/25wd/9zdn//cHJ5/3Bzff9wcnn/cHN9/3Bzff9ucXv/d3l//2ptd/9ucXv/c3Z//3N2f/9wcnn/
+bnF7/3N2f/9ucHf/cHJ5/3Bzff9sb3n/cHJ5/25xe/9wc33/bnF7/3Byef9zdXz/bnB3/25xe/9zdXz/
+d3l//3N2f/9sb3n/bnB3/3Bzff9sb3n/bnF7/25wd/9wcnn/cHJ5/3Byef9sbnX/c3V8/2psc/9zdXz/
+dnh8/3Byef9kZ3H/am13/25xe/9sb3n/bnF7/25xe/9zdn//Z2p0/2xudf95e4H/Z2p0/2xvef9ucXv/
+bG51/2psc/9ucXv/cHJ5/2psc/9qbXf/Z2px/2ptd/9qbHP/cHN9/2ptd/9sbnX/bG51/3V3ff9wcnn/
+c3V8/3Byef9wc33/d3l//29xdf9zdXz/bnB3/2ptd/9qbXf/Z2px/2Zpc/9kZ3H/am13/2xvef9nanH/
+cHJ5/29xdf9wcnn/Z2px/2xudf9zdXz/b3F1/25wd/9ucHf/bnB3/25wd/9+gIb/eHl9/3N1fP9wcnn/
+cHJ5/3Byef9qbHP/bG51/3Z4fP9wcnn/dXiB/2xudf9ucXv/bG51/3Byef9nanH/ZGdx/2Zpc/9nanH/
+Z2px/2Zobv9iZW7/Zmhu/2Zobv9qbXf/c3Z//1lcZf9maXP/Z2p0/3Byef9kZ3H/bG95/2xvef9qbHP/
+am13/2Zpc/9qbXf/bG51/2xvef9wc33/dXd9/2dqdP9sb3n/dXd9/2dqdP9ucHf/c3V8/3V3ff9qbXf/
+bnF7/3d5f/9ucHf/bG51/2xudf9wc33/bG51/2xudf91d33/bnB3/3Byef9wcnn/cHJ5/29xdf9ucHf/
+Z2p0/3Byef9wc33/eXuB/3d5f/9sb3n/bnF7/2psc/9zdXz/b3F5/29yev9qbHX/bnB4/3d5f/9wcnn/
+bnB3/2xudf9ucHf/dHZ7/25wd/9ucXn/bW92/3Byef9ucHf/bG51/3N1fP9ucXv/cHN9/3V3ff9qbHP/
+dnh8/3V3ff9nanH/bnB3/3V3ff9ucHf/cHJ5/2Zpc/9qbXf/bG95/2xudf9sb3n/dXd9/3Z4fP9vcXX/
+bnF7/25wd/9nanH/c3Z//3Bzff9wcnn/bnB3/3R2ff9ucXr/bnF7/3Bzff9sb3n/dXd9/25xev90dnz/
+dXiA/3V4gP9wcnn/c3Z//3Bzff9ucXv/cHN9/3N2f/9zdn//bG95/3d6g/9sb3n/c3Z//3Bzff9ucHf/
+d3l//2dqcf9qbXf/Z2p0/3d6g/9sbnX/am13/2Zpc/9nanT/am13/2Zobv9zdXz/bnB3/2dqdP9kZ3H/
+ZGZs/3Byef9gY2z/Z2px/2Rncf9maG7/YGNs/2Zobv9kZ3H/Zmhu/2ptd/9gY2z/ZGdx/2Rncf9nanT/
+ZGdx/2psc/9maXP/ZGdx/2Zobv9maG7/YmVu/2Zpc/9qbHP/am13/2psc/9ucXv/cHN9/2xudf9nanT/
+bnF7/3V3ff9wcnn/bnB3/29xdf9zdXz/bG95/3Bzff9sb3n/c3Z//3N2f/91eIH/bnF7/3V4gf9ucXv/
+dXiB/3l7gf9zdn//am13/3Byef9zdn//cHN9/3N2f/91eIH/e36H/3Bzff9wc33/foCG/3V4gf93eoP/
+eXuB/3N2f/9ucXv/dXiB/3V3ff9vcXX/c3V8/25wd/91d33/c3V8/3d5f/9wc33/cHJ5/25wd/93eX//
+c3Z//3Bzff9ucXv/cHN9/3V3ff9vcXX/c3V8/25wd/9vcXX/bnB3/2xvef9nanT/Zmhu/2ptd/9sb3n/
+Zmlz/3Byef9tb3P/bnF7/2xudf9ucHf/dXd9/2xvef9sb3n/bG95/25xe/9ucXv/e36H/3l7gf9zdn//
+c3Z//3V4gf93eoP/c3Z//3N2f/9+gYr/eXyG/4GDiv9wc33/d3qD/3N1fP93eX//cHJ5/3Bzff9wc33/
+bnF7/25xe/9ucHf/b3F1/3Byef9ucXv/eXuB/36Ahv9nanT/c3Z//3Byef93eX//bW9z/3Z4fP91d33/
+bnB3/25xe/9nanT/bG95/25wd/9ucXv/dXiB/3l8hv9ucHf/c3Z//3V4gf9ucHf/dXiB/3N2f/91d33/
+am13/29xdf91d33/bnB3/2xvef9ucXv/d3qD/25xe/9wcnn/c3Z//25wd/9ucHf/cHJ5/3V3ff9vcXX/
+cHJ5/2xudf9vcXX/bG51/3Byef9ucXj/aGty/21vc/9nanT/cHN9/25wd/9vcnr/a212/21wev91d33/
+am13/2xudf9maXP/am13/3R2e/9tb3b/bnF6/2xudf9wcnn/am13/2xudf9ucXv/bG95/25xe/9wc33/
+ZGdx/3Byef9ucHf/YmVu/2psc/9wc33/bnF7/2ptd/9maG7/bW9z/25wd/9sbnX/c3V8/3d5f/91d33/
+b3F1/25xe/9ucXv/Z2p0/3V3ff9wc33/bnF7/21vdv9zdnz/cHJ5/25weP9zdXz/bnF7/3l7gf9xc3r/
+d3mA/3d5f/9zdX3/b3F1/3N1fP9sbnX/bG51/25wd/9sbnX/cHJ5/2psc/92eHz/amxz/3Bzff9ucHf/
+bW9z/3h5ff9nanH/bG51/2Jlbv91eIH/amxz/2Zpc/9iZW7/YmVu/2dqdP9maG7/c3Z//3N1fP9qbXf/
+Z2p0/2dqdP91eIH/ZGdx/2xudf9nanT/am13/2ptd/9ucXv/bnF7/21vc/91eIH/Zmlz/25wd/9wcnn/
+bnB3/25wd/9vcXX/cHJ5/21vc/9sbnX/bG95/2dqdP9sbnX/bG51/2xvef9sbnX/bnF7/25xe/9nanT/
+bnF7/3Bzff91d33/cHN9/2ptd/9qbHP/bnF7/2Zpc/9qbXf/YmVu/2ptd/9qbHP/bG95/2Rncf9ucXv/
+ZGdx/25xe/9zdXz/bG95/2Rncf9tb3P/bG95/25wd/91d33/dXiB/3t9g/9ucHf/c3V8/3t9g/9ucXv/
+dXiB/3d5f/9wcnn/bnF7/3N2f/95e4H/cHN9/3V4gf9ucXv/d3qD/3V4gf93eX//c3Z//3N1fP9zdXz/
+d3l//3Bzff9ucXv/bnF7/3N1fP9zdXz/bG51/2xvef9nanH/Z2px/2dqdP9qbHP/YmVu/2BjbP9sbnX/
+bG51/2Rncf9sb3n/bG51/2ptd/9maXP/Z2px/25xe/9qbHP/Zmlz/2Zpc/9qbHP/Z2p0/3V4gf91d33/
+cHN9/25wd/9sb3n/am13/2Zpc/9sb3n/dXd9/3Bzff91eIH/bW9z/25xe/9sbnX/c3V8/21vc/9sbnX/
+cHN9/2ptd/9qbXf/bnF7/2ptd/9sbnX/bG51/3Byef93eX//ZGdx/2xvef9ucXv/dXd9/2xudf92eHz/
+dXd9/25wd/9sbnX/amxz/2xvef9vcXX/bnB3/3Bzff93eoP/bG95/3Bzff9zdn//bG95/3N2f/9wc33/
+dXiB/25xe/9zdXz/e32D/3Bzff9ucHf/bnF7/3V3ff9vcXX/b3F1/3N1fP9tb3P/bG51/3Byef9zdXz/
+bW9z/3Byef9nanH/amxz/2psc/9ucHf/bnB3/2psc/9sbnX/amxz/3V3fP9ucHj/bW93/2psdf9vcnr/
+dXd8/25wd/9qbXf/Z2p0/25xe/9zdoD/bXB6/3J0fP9wcnf/c3V8/29xdf9ucHf/bnF7/3Byef9zdXz/
+cHN9/2ptd/91d33/eHl9/2psc/9zdXz/dnh8/3N1fP9ucXv/Zmhu/29xdf9ucHf/bnB3/25wd/92eHz/
+cHJ5/2xudf9wcnn/bG95/2Rncf9wc33/bnF7/2ttdP9maXP/bnF5/2lsdf9laHL/am13/2ptd/9zdXz/
+bm92/3R3fv91d33/bnB3/21vc/9zdXz/bW9z/3Byef9ucHf/bnB3/3N1fP9nanH/d3l//25wd/97fYP/
+c3Z//3Bzff97fYP/bnF7/21vc/9maG7/eXuB/2ptd/9qbXf/ZGdx/2Zobv9nanT/Z2px/3N2f/9wcnn/
+am13/2ptd/9qbXf/d3qD/2Rncf9qbXf/Z2p0/2xvef9qbXf/Z2p0/2ptd/9maXP/d3l//2Rncf9qbXf/
+bnB3/2ptd/9qbXf/bG51/25xe/9tb3P/bnB3/25wd/9qbHP/bG51/2xudf9qbXf/bG51/3N1fP9zdXz/
+bG51/3N1fP91d33/dXd9/25xe/9sbnX/bW9z/3Bzff9maXP/bG51/2Rncf9nanT/Z2px/2ptd/9nanT/
+bnF7/2dqdP9wc33/cHJ5/2psc/9dYGr/bG51/2ptd/9sb3n/c3V8/2ptd/91eIH/bG51/2ptd/9zdn//
+am13/25xe/9sb3n/Z2p0/2psc/9nanT/bG95/2xudf9ucXv/amxz/2xvef9sb3n/cHN9/2dqcf9maXP/
+Zmlz/25xe/9sb3n/am13/2ptd/9nanT/d3l//25xe/9zdn//bnB3/25xe/9wc33/cHN9/25xe/9qbXf/
+cHJ5/3Bzff9sb3n/cHN9/25wd/9wcnn/bnB3/29xdf94eX3/cHN9/25wd/9wc33/bnB3/25xe/97fYP/
+dXiB/3V3ff9sb3n/c3V8/3Byef9sbnX/c3V8/3V3ff9ucXv/c3V8/2psc/9ucXv/am13/3N1fP9sbnX/
+bG51/3V3ff9ucHf/cHJ5/3Byef9sb3n/bnB3/25wd/92eHz/gIKG/25wd/91d33/c3V8/3d5f/9ucHf/
+dnh8/3Z4fP9ucHf/bG51/2xudf9sbnX/bG51/2ptd/9sb3n/dXiB/2Zpc/9sb3n/Zmlz/2Jlbv9qbXf/
+Z2p0/2dqdP9iZW7/YGNs/2xvef9kZ3H/YGNs/2Zpc/9kZ3H/Zmhu/2Jlbv9qbXf/ZGdx/2Zpc/9qbXf/
+bnF7/2xudf9sb3n/Zmlz/2ptd/9sbnX/am13/21wef9laHH/am13/2dqdP9zdXz/bW92/25weP9rbnj/
+b3F6/3N2fv9ucXX/bG51/2dqcf9sb3n/b3J8/2xud/9ucXr/bW9z/25xe/9ucHf/bnB3/3Byef9ucHf/
+dXd9/3N1fP9sbnX/cHJ5/3V3ff9kZ3H/am13/3N1fP9wcnn/bG95/2Jlbv9nanT/am13/2ptd/9qbXf/
+d3l//25xe/9qbXf/bnF7/2ptd/9iZW7/am13/2ptd/9nanL/Z2ly/29xef9ucHf/amxz/3N1fP9wcnn/
+cHN9/3Byef9ydX7/dXd9/29xdv9rbnj/cHJ5/25wd/9wc33/bnB3/25wd/9zdXz/amxz/3d5f/9wcnn/
+d3l//29xdf9wcnn/eXuB/2xvef9vcXX/Z2px/3t9g/9sb3n/cHN9/2xvef9ucHf/cHJ5/25xe/9+f4P/
+dXd9/3Byef9qbXf/bG51/35/g/9qbHP/cHJ5/2xvef91d33/bnB3/25xe/9zdn//bG95/3l7gf9maG7/
+bnB3/2xvef9qbXf/am13/2psc/9qbXf/bG51/2psc/9sbnX/Zmlz/2Zpc/9nanH/Z2px/2Rncf9qbXf/
+Zmlz/2Jlbv9nanT/bG95/2xvef9kZ3H/Zmhu/2Jlbv9nanT/YGNs/2Rncf9dYGr/ZGdx/2Rncf9qbXf/
+ZGdx/2xvef9iZW7/Z2p0/2ptd/9maG7/XWBq/2psc/9nanT/am13/3N1fP9ucXv/eXyG/2ptd/9nanT/
+dXd9/25wd/9zdXz/cHJ5/3Byef9vcXX/bnF7/3Bzff9wcnn/eXuB/3N1fP91eIH/dXiB/3l8hv9zdXz/
+cHJ5/25xe/95e4H/d3qD/3N2f/9zdn//cHN9/3l7gf9zdXz/bnF7/25wd/9wc33/cHN9/3N2f/9sb3n/
+bG95/3Byef9wc33/bG95/25xe/9ucXv/cHJ5/25wd/9ucHf/eXuB/3N2f/9ucHf/bG95/25wd/9wc33/
+d3qD/3d5f/91d33/bG51/3Byef9sbnX/amxz/3N1fP94eX3/dXd9/3V4gf9ucHf/cHJ5/3Byef92eHz/
+bG95/3Bzff93eoP/c3Z//3N2f/9zdXz/bnB3/25wd/9zdXz/eHl9/3+Bh/9ucHf/dnh8/3Byef93eX//
+bnB3/3d6g/95e4H/bnB3/3Byef9sbnX/bnB3/2psc/9qbXf/am13/3l8hv9maXP/bnF7/2psc/9kZ3H/
+bnF7/2xvef9ucXv/amxz/2ptd/91d33/bG51/2psc/9wc33/cHN9/2xudf9maXP/cHN9/2dqcf9nanT/
+amxz/2dqdP9sbnX/am13/2Zpc/9sb3n/bG51/2xvef9sbnj/ZWhy/2dqdP9nanH/bnF7/2ttdf9rbnb/
+a252/29xeP90dnz/am13/2ptd/9nanH/cHJ5/3N1fP9tcHj/bnF6/2dqdP9qbHP/Zmhu/2psc/9nanT/
+amxz/2dqdP9qbXf/YGNs/2dqdP91d33/YmVu/2xudf9sb3n/am13/2xudf9iZW7/am13/2xvef9ucXv/
+bG51/3d5f/9ucXv/am13/3Byef9ucHf/ZGdx/25xe/9sb3n/am13/2lsdP9wcnv/b3J7/21vd/9zdXz/
+bnB3/3Bzff9rbXT/a254/25xe/9rbXX/bW9z/25wd/9tb3P/b3F1/2xvef9wcnn/c3V8/2ptd/93eX//
+bnB3/3V4gf9ucXv/cHJ5/3d6g/9qbXf/bG51/2Jlbv91eIH/am13/25xe/9maXP/amxz/2ptd/9qbXf/
+e32D/3N1fP9qbXf/bG51/2psc/91eIH/YGNs/2Zpc/9kZ3H/Z2p0/2Zpc/9nanH/bG95/2Rncf9zdXz/
+YGNs/2Zpc/9nanT/amxz/2Zpc/9qbHP/bG95/2xudf9qbHP/bG51/2Zpc/9nanT/amxz/2ptd/9maXP/
+cHN9/25xe/9maXP/am13/3Bzff91d33/bG95/2xvef9tb3P/dXd9/25wd/9ucHf/Zmlz/25wd/9tb3P/
+c3V8/21vc/92eHz/bnB3/3h5ff94eX3/bG51/2dqcf9sb3n/bnF7/25xe/9zdXz/cHJ5/36Ahv9wc33/
+c3V8/3l7gf9zdXz/bnF7/25xe/9sbnX/bG51/3N1fP9zdXz/b3F1/3N1fP9ucHf/c3V8/3Byef91d33/
+b3F1/2xudf9sb3n/dnh8/3Z4fP9zdXz/cHN9/3Bzff94eX3/b3F1/3Bzff9qbHP/bnB3/2xvef9wc33/
+ZGdx/2dqdP9nanT/am13/2ptd/9ucHf/cHJ5/3Byef9sbnX/bG51/3V3ff92eHz/amxz/25xe/9ucHf/
+cHN9/3d5f/93eX//c3V8/21vc/9zdXz/bW9z/2xudf9zdn//d3qD/3V4gf95e4H/bnF7/3N2f/91eIH/
+e32D/3Byef91eIH/eXuB/3d6g/93eoP/d3qD/3Bzff9wc33/bnF7/3V4gf+Bg4r/bG95/3V3ff9wc33/
+eXuB/25xe/97fof/eXuB/3N1fP9zdn//bG95/3V4gf9wcnn/d3qD/3V4gf9/gYf/cHJ5/3d6g/9wc33/
+bG95/3V4gf9zdn//dXiB/3N1fP9zdXz/eXyG/3V4gf9zdn//e32D/3l7gf9zdn//c3V8/3d6g/9ucHf/
+bnF7/2xvef9wc33/bG95/25xe/9qbXf/cHJ5/25wd/9wcnn/cnR6/21vdv9sb3n/bnB3/3Bzff9tcHr/
+cXN7/25wd/9vcXr/bnB6/2xudf9sbnX/Z2px/3V3ff9ydX7/b3J8/2tueP9rbXT/am13/2xudf9sbnX/
+bG51/3Byef9zdXz/cHJ5/2RmbP9ucHf/dXd9/2Rncf9qbXf/bG95/2dqdP9sbnX/YmVu/2ptd/9qbXf/
+bG95/2xudf91d33/bG95/2xudf9zdXz/bG51/2Zobv9wcnn/cHJ5/2xvef9rbnf/c3V+/3F0fv9sb3n/
+c3V8/3N1fP9zdXz/bnB0/29xeP90dnz/bW94/3Byef9wc33/b3F1/25wd/9tb3P/cHJ5/3Byef9qbHP/
+dXd9/2ptd/91d33/amxz/2xudf9zdXz/YmVu/25wd/9nanH/eXuB/25wd/9ucHf/bnB3/25wd/9wcnn/
+b3F1/36Ahv91d33/bnB3/2xudf9tb3P/fn+D/2psc/9sbnX/bnB3/25xe/9sbnX/amxz/25xe/9nanT/
+d3l//2Rncf9sbnX/bnB3/21vc/9nanH/b3F1/3Bzff9ucHf/bnB3/25xe/9sb3n/c3V8/3Byef91d33/
+b3F1/3h5ff9zdXz/bG51/3Byef91d33/dXiB/3V4gf9wc33/cHN9/3N2f/9sb3n/bnF7/2dqdP9wcnn/
+bW9z/3N1fP9sbnX/cHN9/2ptd/91d33/dXd9/2xudf9iZW7/am13/2ptd/9qbXf/bnF7/3Byef9zdn//
+bnF7/25xe/9zdn//cHN9/25xe/9ucXv/bG51/2ptd/9sb3n/bnF7/2ptd/9sb3n/bnB3/25wd/9wcnn/
+dXd9/2xudf9maXP/Z2p0/3Z4fP9zdXz/dXd9/3N1fP9ucHf/dnh8/2ptd/9ucXv/ZGdx/2psc/9maXP/
+am13/2Jlbv9kZ3H/ZGdx/2Rncf9iZW7/Zmlz/2Zpc/9qbXf/ZGdx/2dqcf9sb3n/bnF7/2Rncf9qbXf/
+amxz/25xe/9zdXz/dXd9/2xvef9sbnX/cHN9/21vc/9qbHP/dXd9/3V3ff91d33/eHl9/25wd/9vcXX/
+bnB3/3Z4fP9ucHf/c3Z//3Z4fP91d33/cHJ5/3N1fP9ucHf/bnB3/25wd/91d33/f4KM/3Byef9zdn//
+bnF7/3d5f/9sb3n/e32D/3h5ff9ucHf/cHN9/2ptd/9zdn//bG95/3Bzff9wcnn/e36H/25wd/9wc33/
+bG95/2ptd/9zdn//dXiB/3V3ff9sb3n/bnB3/3d6g/9ucXv/bnB3/3N2f/9zdn//bnB3/2xudf9wcnn/
+bW9z/29xdf9ucHf/bnB3/2xvef9wcnn/cHN9/3Bzff9wcnn/c3Z//3N2f/9xc3r/cHJ5/3N2f/93eoP/
+cHN9/3h6gP9zdXr/d3l//3h7hP9zdn//cHN9/2dqdP93eoL/dnmB/3N2fv9wcnr/bnB3/25wd/9vcXX/
+cHJ5/25wd/91d33/dXd9/3N1fP9maG7/bnB3/3l7gf9maG7/bG51/2ptd/9sbnX/amxz/2Jlbv9sbnX/
+cHN9/2ptd/9nanH/c3V8/2dqdP9nanH/Zmlz/2Zobv9ZXGX/ZGdx/2Zpc/9iZW7/YmVt/2xud/9sb3f/
+a210/29yef9wcnn/dnh8/29xdf9tcHr/bnF7/2Zpcv9naXD/Z2pz/2Jlbv9kZmz/Zmhu/2dqdP9nanT/
+ZGdx/25wd/9maXP/c3V8/2psc/9maXP/cHJ5/2Jlbv9wcnn/bnF7/3+Bh/9zdn//dXiB/3N1fP9wc33/
+cHN9/2xvef97fYP/cHN9/2xvef9sb3n/cHJ5/3+Bh/9sb3n/cHN9/3Byef9zdn//c3V8/3Byef9zdn//
+bG95/3t+h/9sb3n/dXiB/3d6g/9wcnn/am13/3Byef9wc33/cHJ5/25xe/9zdn//cHJ5/3l7gf91eIH/
+eXyG/3d6g/95fIb/d3qD/3Bzff91eIH/d3l//3l8hv91d33/cHN9/2xvef9wc33/am13/3Byef9sbnX/
+cHJ5/29xdf91d33/bG95/3Bzff9ucHf/d3qD/3h5ff9sbnX/Zmlz/2xvef9wcnn/cHJ5/3Byef91d33/
+dXiB/3d5f/9wc33/e36H/3l7gf9wc33/c3Z//25wd/9wc33/d3qD/3Bzff9wcnn/cHN9/25xe/9wc33/
+c3V8/3h5ff9vcXX/amxz/2psc/92eHz/cHJ5/3Bzff9ucXv/bG51/3V4gf9ucXv/c3V8/2dqcf9sbnX/
+cHJ5/3N1fP9qbHP/bG51/29xdf9zdXz/bW9z/2xudf9wcnn/cHJ5/2xudf9sb3n/c3V8/3Z4fP9sb3n/
+cHN9/25xe/9zdn//dXd9/3d5f/9wc33/bG95/3N2f/9ucXv/bnB3/3d5f/95e4H/d3l//3d5f/9sb3n/
+cHJ5/29xdf92eHz/bnB3/3N1fP92eHz/dXd9/3N1fP9wcnn/b3F1/2xudf9wc33/dXd9/4CChv9tb3P/
+bnF7/2xudf91d33/bW9z/3d5f/92eHz/bW9z/2xudf9nanH/cHN9/2xvef9wcnn/bnB3/3d5f/9ucHf/
+cHN9/2xvef9sb3n/dXd9/3N2f/91d33/bnB3/25wd/95e4H/bG95/25wd/9wc33/dnh8/2xudf9qbHP/
+bnB3/21vc/9sbnX/bG95/2ptd/9ucHf/bnB3/25wd/9wcnn/bW9z/3N1fP9xc3r/a253/2psc/9nanT/
+bnF7/2dqdP9vcnz/aWx2/29xev9sb3n/amxz/2xudf9iZW7/cHN9/3R2fP9xdH3/bW93/2hrcv9sb3n/
+bG51/2xvef9sbnX/dXd9/3V3ff9wcnn/amxz/2xudf93eX//Z2px/2ptd/9qbXf/am13/2xvef9maG7/
+bW9z/25wd/9wcnn/b3F1/3N1fP9sbnX/bG51/2xvef9wcnn/Zmhu/2xvef9qbXf/Zmlz/2Vocv9sb3n/
+cXR7/2xvef9zdXz/c3V8/3V3ff9ucHT/bnB1/3R2fP9sb3j/b3F2/21vdf9tb3P/bG51/25wd/9zdXz/
+c3V8/2psc/93eX//am13/3d5f/9sbnX/am13/3d5f/9sbnX/bG51/2ptd/97fYP/dXd9/3Byef9vcXX/
+cHJ5/2xvef9ucHf/eXuB/2xvef9qbXf/am13/2xudf9+gIb/amxz/3Byef9ucHf/cHJ5/25wd/9ucHf/
+bnB3/2Zpc/91d33/Z2px/3N2f/9wcnn/bnB3/2psc/9sb3n/cHN9/3N1fP9zdn//dXiB/3Byef95fIb/
+dXiB/3d6g/93eoP/e36H/3l8hv9wc33/dXiB/3l7gf9+gYr/foCG/3d6g/93eoP/d3qD/3V3ff93eoP/
+cHN9/3d6g/91eIH/e32D/3Bzff9zdn//bnB3/3l7gf94eX3/c3Z//2dqdP9zdn//c3Z//3N2f/9ucHf/
+d3l//3l7gf97fYP/d3qD/3+CjP97fof/eXuB/3l7gf91d33/dXiB/3l7gf93eoP/cHJ5/3Bzff9ucXv/
+c3Z//25xe/97fYP/c3V8/2xvef9sb3n/d3l//3N2f/9wc33/cHJ5/2xvef9ucXv/am13/3Byef9sbnX/
+bW9z/25xe/9ucXv/ZGdx/2dqdP9qbHP/cHJ5/2dqcf9maG7/bG95/2dqdP9kZ3H/ZGdx/2ptd/9wc33/
+Z2p0/2ptd/9nanH/bG95/3N1fP9wc33/bG95/2xudf9zdXz/am13/2dqdP9ucXv/c3V8/3V3ff91d33/
+bG51/25xe/9sbnX/bG95/2ptd/9ucXv/bnF7/3V3ff92eHz/cHJ5/2xudf9tb3P/c3V8/3d5f/+Agob/
+bW9z/2xvef9sb3n/eHl9/2xudf93eoP/dXd9/2ptd/9qbXf/Zmlz/3N1fP9wcnn/c3Z//3Bzff97fof/
+cHJ5/3N2f/9sb3n/bG51/3V3ff9zdXz/c3V8/25wd/9ucHf/dXiB/25xe/9sb3n/cHN9/3N2f/9tb3P/
+bG51/3N1fP9sb3n/cHN9/3Bzff9sb3n/bnB3/25xe/9ucHf/cHJ5/21vc/91d33/c3V6/21wef9ucHf/
+bnB3/3N1fP9ucHf/cXN7/2xud/9wcnn/dHZ9/25wd/9ucHf/Z2px/3V3ff90dnv/cXR7/25wd/9lZ3D/
+amxz/2xudf9qbXf/am13/3Bzff9ucXv/bnF7/2Zpc/9sbnX/c3V8/2Rncf9maXP/Zmlz/2dqcf9maXP/
+XWBq/2dqcf9nanT/Z2p0/2Zpc/9sb3n/Z2px/2dqcf9qbXf/am13/2Jlbv9qbXf/bG51/2Vocf9oa3T/
+b3J5/3J1f/9tcHr/dHeA/3V4gf97fYP/dXd9/3Z4f/95e4H/bG93/21vdv9tb3b/bG51/2ptd/9tb3P/
+dXd9/3Byef9sbnX/d3l//2xudf92eHz/bG51/2xudf93eX//bG51/2xvef9sb3n/d3qD/3N2f/9ucXv/
+bG95/3Byef9ucHf/bnB3/3d5f/9ucHf/bG51/2ptd/9ucHf/gYOK/2ptd/9zdn//cHJ5/3N2f/9wcnn/
+bnB3/2xvef9qbXf/eXuB/2dqcf95e4H/dXiB/3N2f/9wc33/dXd9/3l7gf91d33/dXd9/3d6g/91d33/
+fX6B/3t9g/9/gYf/foCG/36Ahv97fYP/eHl9/3l7gf9+f4P/gYOK/36Ahv95e4H/d3qD/3N2f/91d33/
+d3qD/3Bzff9wc33/cHN9/3l7gf9zdn//dXiB/3N1fP9/gYf/e36H/3V4gf9sb3n/c3Z//3Bzff9wc33/
+bnF7/3Z4fP9zdXz/dXd9/25xe/93eX//dnh8/3V3ff94eX3/bnB3/25wd/91d33/cHJ5/25wd/9ucHf/
+bnB3/3N1fP9wcnn/dnh8/29xdf9qbHP/bG51/3Z4fP9wcnn/c3V8/25wd/9qbXf/bnF7/25wd/9zdn//
+am13/25wd/9zdXz/dXd9/2ptd/9vcXX/bG51/3N1fP9sbnX/am13/3N1fP9ucXv/bG51/2xudf9wcnn/
+eHl9/2ptd/9zdXz/c3V8/3V4gf93eoP/eXuB/3l7gf9zdXz/e32D/3V4gf9zdXz/d3qD/3t9g/9+gIb/
+foGK/3N2f/97fYP/dXiB/3d6g/9wc33/dXiB/3N2f/91eIH/c3Z//3Bzff9ucHf/bnB3/3N1fP92eHz/
+gIKG/2xvef9ucHf/bnB3/3Z4fP9qbXf/c3Z//3N1fP9qbHP/am13/2BjbP9ucXv/Z2p0/25xe/9wc33/
+dXiB/2xudf9sb3n/bG95/2ptd/9wc33/cHN9/3N1fP9tb3P/am13/3V3ff9qbXf/Z2px/2xvef9ucXv/
+amxz/2Zpc/9sb3n/bG95/25xe/9sb3n/bG51/2xudf9qbXf/Zmlz/2Zpc/9maG7/am13/2tueP9nanT/
+Zmlz/2Zpc/9nanT/Z2lv/2ptd/9maXL/a252/2xvef9qbHP/am13/2Rncf9sb3n/b3J8/3Bze/9sbnT/
+Z2lw/2xudf9wcnn/bnB3/3N1fP92eHz/cHJ5/3Byef9qbHP/bG95/3l7gf9qbXf/cHJ5/3d6g/9zdn//
+c3Z//2ptd/9wc33/dXiB/3d6g/9wcnn/d3qD/3Bzff9wcnn/c3Z//3Bzff9maXP/bnF7/25xe/9sb3n/
+bG95/3N2f/9xdH7/am12/25wd/9ucXv/dXd9/2xudf9tb3b/cnV8/21veP9vcXj/bnB3/25wd/9wcnn/
+bW9z/3N1fP9zdXz/bG51/3d5f/9tb3P/dXd9/21vc/9sbnX/dXd9/2dqdP9maXP/Z2p0/3d5f/9zdXz/
+bnB3/2xudf91d33/bG95/2ptd/93eoP/c3Z//25xe/9sb3n/bnB3/4GDiv9qbXf/bG95/25wd/9ucXv/
+cHJ5/25xe/9ucHf/Z2px/3Z4fP9lZmr/c3V8/25wd/9tb3P/Z2p0/2dqcf9sb3n/amxz/2psc/9maXP/
+YmVu/2xvef9qbXf/bG95/2xvef91d33/bnF7/2xudf9sbnX/c3V8/3V3ff91d33/bG95/2xvef9qbXf/
+am13/2xvef9qbHP/cHJ5/2xudf91d33/bG51/3N1fP9vcXX/e32D/3d6g/9wc33/Z2p0/3Bzff91d33/
+c3V8/25wd/9zdn//d3l//3d5f/91d33/dXiB/3d5f/93eX//eXuB/25xe/9wc33/dXiB/3V4gf9zdn//
+d3qD/35/g/97fYP/dXiB/3t+h/9zdn//bnF7/3Byef93eX//cHN9/3N2f/9wc33/bnB3/3Bzff9qbXf/
+c3V8/2dqcf9ucHf/c3V8/3N1fP9sbnX/bG51/2xudf9wc33/bG95/2ptd/9zdXz/c3V8/2psc/9sbnX/
+bnF7/3Z4fP9sbnX/bG51/2psc/9ucXv/c3V8/3N1fP9wcnn/bG51/3V3ff9sbnX/Z2p0/3Byef9wc33/
+dnh8/3d5f/9ucHf/c3Z//2xvef9zdXz/bG95/25xe/9ucHf/c3Z//3N2f/9wc33/bnB3/25wd/9zdn//
+eXuB/4GDiv9ucHf/bnF7/3Bzff95e4H/cHN9/3d6g/93eoP/cHJ5/3N2f/9maXP/dXd9/3Bzff91d33/
+c3Z//3l8hv9ucHf/cHJ5/25xe/9ucHf/dXd9/3V3ff92eHz/b3F1/25wd/91d33/bG95/2xvef91eIH/
+dXiB/25xe/9sb3n/c3Z//3Bzff9wc33/cHN9/2xvef9zdXz/cHJ5/25wd/9wcnn/b3F1/3N1fP9zdXr/
+bW92/2xudf9tb3P/cHJ5/2xudv9tb3f/aWx1/25xef9ucXv/Zmhu/2dqdP9kZ3H/bG95/2xvef9vcXr/
+a252/2Vobv9sbnX/cHJ5/2xudf9zdXz/dXd9/2xvef9sb3n/Zmlz/2ptd/9zdXz/YmVu/2psc/91d33/
+cHN9/25wd/9nanH/bnB3/25xe/91eIH/bG95/3V3ff9sb3n/bnB3/3V4gf9ucXv/am13/25wd/9ucHf/
+bG95/29xeP9zdn7/dHd//21vdv9wcnn/cHJ5/3V3ff9qbXf/cHJ6/3d6g/9wc33/bnF6/3F0fv9ucXv/
+bnF7/2xudf9zdXz/cHJ5/2ptd/9zdXz/bG51/3V3ff9sbnX/b3F1/3d5f/9sbnX/amxz/29xdf92eHz/
+cHJ5/3Byef9ucHf/dXd9/2ptd/9maXP/c3Z//25xe/9sb3n/Zmlz/2psc/9/gYf/am13/2ptd/9qbHP/
+am13/21vc/9sbnX/bG51/2psc/93eX//Zmlz/3Bzff9ucXv/bnB3/2xudf9sbnX/bnB3/2xudf9sb3n/
+bnB3/2psc/9zdXz/bnB3/3N1fP9ucHf/eHl9/3Bzff9wcnn/cHN9/3d6g/95fIb/e32D/3V4gf93eoP/
+cHN9/2xvef9wc33/bG95/3V3ff9ucHf/dXd9/25wd/91eIH/bnB3/3l8hv93eX//c3V8/2psc/9zdXz/
+cHJ5/3N1fP9ucHf/c3V8/3N1fP92eHz/cHN9/3V3ff91d33/dXd9/3d5f/9qbHP/bnB3/3V3ff9zdXz/
+b3F1/25wd/91d33/cHJ5/25xe/93eX//bG51/2psc/9sbnX/eHl9/3Byef91d33/bnF7/2xudf91eIH/
+cHN9/3V4gf9kZ3H/bnB3/25xe/93eoP/c3V8/3N1fP9zdXz/eXuB/3N2f/9wcnn/eXuB/3t9g/9ucXv/
+cHJ5/3V4gf93eX//bnB3/3Byef9wcnn/d3l//3Bzff9zdn//c3V8/3Byef91d33/cHJ5/25wd/9zdXz/
+cHN9/3N1fP91d33/bG95/3N1fP9ucHf/c3V8/25wd/9wcnn/bnB3/3N2f/91eIH/c3Z//2xvef9ucXv/
+c3Z//3V4gf+DhYz/dXd9/3V3ff97fYP/f4GH/3t9g/9/gYf/hYeN/3t9g/95fIb/c3Z//36Biv9+gIb/
+foCG/31+gf+Bg4r/dnh8/3l7gf97fYP/dnh8/3t9g/97fYP/eXuB/3Bzff9ucXv/d3l//25wd/9qbHP/
+cHN9/3Bzff9qbHP/ZGdx/2ptd/9qbXf/Z2p0/2dqdP9nanH/Z2p0/2Zpc/9kZ3H/Z2p0/2psc/9nanT/
+bG95/2Nmbv9gY2z/Zmhu/2ptd/9oa3P/bG52/2lsdv9sb3j/bnF7/21vc/9tb3P/Z2px/3Byef9xdHv/
+b3F4/3Byef9oanD/b3F1/3N1fP9ucHf/dXd9/3V3ff9ucHf/bnB3/2psc/9wcnn/dnh8/2Zobv9sbnX/
+dXd9/3N1fP9wcnn/Zmhu/2xudf9sb3n/dXd9/2ptd/9wcnn/b3F1/21vc/9wc33/bG51/2Rncf9qbHP/
+Z2p0/2BjbP9kZ3H/aGt1/2tud/9nanP/bnB4/21vdv91d33/bG51/21vc/9zdn3/a254/21vd/9tcHr/
+am13/2ptd/9sbnX/cHJ5/2xvef9nanT/c3V8/2psc/91d33/bG51/2xvef93eX//Z2p0/25xe/9wc33/
+e32D/3d6g/9zdn//cHN9/3d6g/9zdXz/bnF7/3l8hv9zdn//cHN9/2ptd/9ucHf/f4KM/2xvef9zdn//
+cHN9/3Bzff9zdXz/c3Z//25xe/9nanT/eHl9/2dqcf9zdXz/cHJ5/25wd/9sbnX/bG51/29xdf9vcXX/
+cHJ5/3Byef9sbnX/c3V8/3Byef9sb3n/cHN9/3V3ff9wc33/bW9z/2ptd/9ucXv/dXd9/3Z4fP9wcnn/
+cHN9/2ptd/9nanT/cHN9/2psc/9wc33/am13/3Bzff9qbXf/bG95/2xudf93eoP/dXd9/2xvef9qbHP/
+bG95/2xvef9wc33/bG51/2ptd/9ucXv/bnF7/3Bzff9zdXz/dXd9/2xvef93eX//Zmlz/2ptd/9wc33/
+bG95/2ptd/9sbnX/cHN9/3Byef9zdXz/eXuB/3N2f/9qbXf/bnB3/3l7gf9wc33/dnh8/3N1fP9ucHf/
+bnF7/25wd/9zdXz/ZGdx/25wd/9zdXz/c3Z//25xe/9ucXv/cHN9/3d6g/95fIb/c3Z//36Ahv97fof/
+cHN9/3V4gf95e4H/e36H/3V3ff93eX//c3Z//3l8hv9zdn//d3qD/3d6g/9zdn//d3qD/3N2f/9sb3n/
+c3Z//3N2f/91eIH/d3qD/3Bzff9wc33/cHN9/25xe/9ucXv/cHN9/3Bzff91eIH/c3Z//3N2f/9ucHf/
+bW9z/3N1fP91d33/fn+D/25wd/9sb3n/dXiB/3d5f/9ucXv/d3l//3d6g/9zdn//bnF7/2psc/9wc33/
+cHJ5/3V3ff9zdXz/eXuB/2xudf9wcnn/bG95/2xudf91d33/dXd9/25xe/9ucHf/bG95/3V3ff9ucHf/
+Z2p0/3Bzff91d33/bW9z/2dqcf9wcnn/bG95/2ptd/9sbnX/bG51/25xe/9sbnX/am13/2xvef9qbHP/
+bG95/21veP9pa3L/YmVu/2Zobv9sb3n/bG51/2lsdP9oa3X/am12/2hrdf9maG7/Zmhu/1lcZf9maXP/
+bXB6/21wef9tb3f/Z2p0/25xdf9ucXv/bnB3/3N2f/93eX//bnF7/3Bzff9qbXf/c3Z//3d5f/9nanT/
+cHJ5/3N2f/93eX//cHJ5/2psc/9sbnX/bG95/3V3ff9sbnX/bG95/2ptd/9nanT/cHN9/2xvef9maXP/
+bG51/25xe/9kZmz/bG51/2xudv9ucHj/aWx0/25xe/9sb3n/cHN9/2dqdP9qbXf/cHJ4/25wdf9sbnb/
+c3V9/25wd/9wcnn/bG51/3Byef9ucHf/bG51/3V3ff9sbnX/dXd9/2xudf9sbnX/d3l//2dqdP9qbHP/
+b3F1/3Z4fP9zdn//bG95/25wd/91d33/bG95/2xvef97fof/dXiB/3N2f/9ucHf/cHJ5/3+CjP9qbXf/
+bnF7/25wd/9ucXv/cHN9/3N2f/9wc33/am13/3d5f/9nanH/cHJ5/3Byef9sbnX/Z2p0/2dqdP9sbnX/
+amxz/2xudf9nanT/Zmlz/2xvef9qbXf/am13/2xvef9zdXz/cHJ5/21vc/9wcnn/cHJ5/3Z4fP91d33/
+am13/3N1fP9ucXv/bG51/3V3ff9qbHP/cHN9/2ptd/9zdXz/bnB3/3Bzff9sb3n/foCG/3d5f/9ucXv/
+bW9z/3N1fP9zdXz/dnh8/3Byef9sbnX/bG95/3Bzff9wc33/cHN9/3V3ff9wcnn/dXiB/2Rncf9nanT/
+cHN9/2ptd/9qbXf/am13/2dqdP9qbXf/bG95/3N2f/9qbHP/Zmlz/2psc/91d33/bnF7/3Bzff9qbXf/
+Zmlz/2dqdP9sbnX/bnF7/2Zpc/9sbnX/bW9z/3N1fP9wcnn/bnB3/3Byef93eX//c3Z//25wd/91d33/
+eXuB/3Byef9wcnn/dXiB/3t9g/9ucHf/cHJ5/3Byef9zdn//cHN9/3d6g/97fYP/dXiB/3t+h/9zdn//
+c3Z//3t9g/95e4H/d3qD/3t9g/9wc33/dXiB/3l7gf9wc33/dXiB/3V4gf9zdXz/d3qD/3l7gf91eIH/
+bnB3/3Byef9wc33/cHN9/3t9g/9vcXX/bnB3/3d5f/9zdn//bnF7/3d5f/91eIH/bnF7/25xe/9qbXf/
+cHN9/25xe/91eIH/cHN9/3l8hv9wcnn/cHN9/3N2f/9ucHf/dXiB/3d5f/9zdn//c3Z//3V4gf95e4H/
+cHN9/3Byef93eX//dXd9/2xvef9qbXf/cHN9/25xe/9wcnn/bnF7/25wd/91d33/bnB3/3Byef9zdn//
+bnB3/3Bzff9vcnv/b3F1/2dqdP9ucHf/cHN9/25xe/9vcnv/bXB6/29xev9ydX7/bnB3/25wd/9maG7/
+b3F1/3J0ev9tcHr/bW93/2Zpc/9sbnX/am13/2dqdP9ucXv/c3V8/2psc/9sb3n/amxz/2xvef9ucXv/
+ZGdx/2dqdP9ucXv/cHN9/2ptd/9iZW7/Zmlz/2xudf9ucXv/Z2p0/25xe/9sbnX/bG51/3N1fP9wcnn/
+Z2px/2xudf9ucXv/ZGZs/25wd/9vcXj/b3F4/25wd/9wcnn/cHJ5/3h5ff9nanT/bG51/29xeP9sbnX/
+bnB3/3F0fv9sb3n/bG51/2ptd/9ucHf/cHJ5/29xdf9zdXz/bG51/3l7gf9ucHf/bnB3/3d6g/9ucHf/
+bG51/2ptd/9zdn//c3Z//3Bzff9sb3n/c3Z//2dqdP9nanT/eXuB/3N2f/9wc33/am13/29xdf+Agob/
+bG51/25wd/9sbnX/cHJ5/2xvef9ucXv/b3F1/2xudf92eHz/Zmhu/3N1fP9sbnX/Z2p0/2Zpc/9nanT/
+bG51/2psc/9nanH/bG51/2Zpc/9wc33/am13/2ptd/9ucXv/cHN9/2xvef9tb3P/bnF7/25xe/9zdXz/
+dXd9/3Bzff9wc33/bnF7/2Zpc/93eX//bnB3/3V3ff9ucHf/bnF7/2xvef9zdn//cHN9/3+Bh/95e4H/
+c3Z//3Byef9zdn//dXiB/3d5f/9zdn//cHN9/25wd/9zdn//dXd9/3N1fP93eX//cHJ5/3d5f/9maXP/
+am13/3N1fP9sb3n/Z2px/2psc/9qbXf/Zmlz/2dqdP9wcnn/Zmlz/2BjbP9nanH/bG95/2ptd/9sb3n/
+bG95/2Jlbv9qbXf/amxz/2ptd/9iZW7/Zmlz/2Zobv9sb3n/am13/2ptd/9tb3P/dXd9/3N1fP9ucHf/
+dXd9/3Z4fP9tb3P/bW9z/3N1fP91d33/am13/2xudf9sbnX/bnF7/2ptd/9wc33/dXd9/3Byef93eX//
+c3V8/2psc/94eX3/dnh8/3Z4fP91d33/bG51/25xe/9wc33/bG51/25xe/9sb3n/bG51/25xe/91d33/
+bG51/25wd/9vcXX/c3V8/3Byef97fYP/bnB3/21vc/9zdXz/c3V8/25wd/91d33/dXd9/3Byef9wcnn/
+amxz/2xudf9sb3n/cHN9/3Bzff91d33/bG51/2xvef9sbnX/bnB3/3N1fP9zdn//c3V8/25wd/9zdXz/
+dXd9/25xe/9sb3n/dXiB/3N2f/9sb3n/bG95/25xe/9wcnn/c3V8/2xudf9sbnX/dnh8/29xdf9ucHf/
+cHN9/3Byef9zdn//c3Z//3F0fv9sb3n/bG95/3V3ff9ucHj/b3F4/2ptdf9rbnf/cXR+/2ptd/9qbXf/
+YmVu/2xvef9wcnn/b3F6/3Bye/91eID/Z2px/3N1fP9vcXX/Z2px/2psc/97fYP/cHJ5/2psc/9zdXz/
+bG95/25xe/9wc33/c3V8/25xe/9ucXv/c3V8/25xe/9nanT/cHN9/2xudf9qbXf/bG51/2xvef9gY2z/
+c3V8/2xvef9qbHP/dXd9/2Zpc/9nanH/Zmly/2dqdP9pbHT/bG95/3J1fv93eX//bG95/3Byef9ucXv/
+bG50/21wev9kZ3D/Z2lz/2dqdP9gY2z/ZGdx/2Zobv9iZW7/Zmhu/2Jlbv9maXP/Zmhu/2Rncf9sbnX/
+bG95/2Zobv9qbXf/bnF7/2xvef9ucXv/amxz/25xe/9kZ3H/ZGdx/3V3ff9sb3n/bnF7/2Zpc/9tb3P/
+foCG/2psc/9sbnX/bG51/3Bzff9qbXf/bG95/2xudf9maXP/bG95/11gav9sb3n/amxz/2Rncf9kZ3H/
+Z2p0/2xudf9sbnX/bG51/2ptd/9maXP/c3V8/2ptd/9sb3n/bnF7/25xe/9sb3n/bG51/2xvef9ucXv/
+dnh8/3h5ff9zdn//dnh8/3V3ff9qbXf/eXuB/3Byef93eX//bG95/2xvef9ucHf/c3Z//25xe/9+gIb/
+eHl9/3N1fP9wcnn/c3Z//3V4gf93eX//cHN9/25xe/9sb3n/dXiB/3l7gf9ucXv/dXiB/25wd/93eoP/
+Zmlz/25wd/93eX//bnF7/2ptd/9sbnX/cHJ5/3Byef9ucXv/dXd9/3N1fP9nanH/bW9z/3N1fP9wc33/
+c3V8/25xe/9nanT/bnB3/25xe/9zdn//bG95/25wd/9sb3n/cHN9/25wd/9ucHf/am13/3h5ff9zdn//
+bnF7/3l8hv95e4H/bnB3/25wd/93eX//eXuB/3Byef9ucHf/c3V8/3V4gf93eoP/d3qD/3V4gf91eIH/
+d3qD/3V4gf9wc33/e36H/3t9g/97fof/eXyG/3Bzff95e4H/d3qD/25wd/9wc33/bnF7/3Byef91eIH/
+d3qD/3Bzff9ucHf/bnB3/3Bzff9wc33/e32D/2xvef9tb3P/dXd9/3V3ff9wcnn/eXuB/3h5ff9wcnn/
+bnF7/2ptd/9ucHf/bnB3/3V4gf93eoP/e32D/3N1fP9zdn//c3Z//2ptd/9wc33/cHN9/3N2f/9ucXv/
+c3Z//3V3ff9sb3n/bnB3/3N2f/91d33/bnB3/2psc/9sbnX/cHJ5/2ptd/9sbnX/Zmlz/3Bzff9qbHP/
+Z2px/2dqcf9maXP/am13/2lrdP9oa3L/Z2p0/2psc/9wc33/bW9z/21vdv9sbnT/aWxz/3N1fv9ucXv/
+bG95/2dqdP9ydX//dHd//3Byef9wc3r/dnh+/2Zobv9wc33/cHJ5/2dqdP9nanT/d3qD/2xvef9qbXf/
+dnh8/25xe/9zdn//cHN9/3V3ff9wcnn/cHJ5/3N1fP9wcnn/amxz/3Bzff9qbXf/bnB3/25wd/91d33/
+Zmhu/3N1fP9zdXz/am13/3d6g/9nanT/Z2p0/2hrdP9oa3L/a212/2tueP9tcHn/dXd9/2xudf9vcXX/
+bnB3/25wdv90dn3/am12/2ptd/9wc33/bG51/2xudf9sbnX/bG51/2ptd/9qbHP/cHJ5/25wd/9ucHf/
+bG95/3Bzff9gY2z/bG51/25wd/9ucXv/bnF7/2ptd/9ucXv/am13/2Rncf91d33/c3V8/3N1fP9nanH/
+b3F1/36Ahv9ucHf/bG95/29xdf9zdXz/bnB3/2xudf9ucHf/bW9z/3N1fP9maG7/bnF7/25xe/9maXP/
+ZGdx/2xudf9sbnX/b3F1/3Byef9ucXv/bG51/3N1fP9wc33/cHN9/3Bzff9wc33/bnB3/2ptd/9ucXv/
+c3Z//3l7gf93eX//d3l//3V3ff91eIH/bG95/3l7gf9zdXz/d3qD/2ptd/9wc33/c3V8/3V4gf9wc33/
+f4GH/3d5f/9wc33/cHJ5/3Bzff9zdn//dXd9/25wd/9tb3P/am13/25xe/9zdXz/am13/3V3ff9ucHf/
+d3qD/2psc/9sb3n/eHl9/3Byef9ucHf/bnB3/3V3ff9wcnn/c3V8/3V3ff9wcnn/amxz/25wd/9wcnn/
+c3V8/3N1fP91d33/bG51/3Bzff9zdn//dXiB/2ptd/9zdXz/cHN9/3V4gf9zdn//c3Z//3Bzff97fYP/
+c3Z//2xvef95fIb/d3l//2xvef9wcnn/d3l//3d6g/9zdXz/c3V8/3N1fP9zdn//cHN9/3Bzff93eoP/
+dXiB/3t+h/95e4H/bnF7/3l8hv93eX//eXuB/3l7gf9ucHf/d3l//3d6g/9zdXz/eXuB/3d6g/9zdn//
+eXyG/3d6g/91eIH/c3V8/3N1fP9zdn//dXiB/3l8hv9wc33/bG95/3V3ff91d33/cHJ5/3d5f/94eX3/
+cHJ5/25wd/9nanT/bG95/25xe/91d33/dnh8/3V3ff9sbnX/am13/25wd/9nanH/cHJ5/3Byef9wc33/
+bnF7/3Bzff91eIH/cHN9/2xvef9zdn//dXd9/25xe/9qbXf/bnF7/3N2f/9sb3n/bnB3/2dqdP91d33/
+b3F1/25wd/9ucHf/amxz/25wd/9ucHj/a254/2ptd/9tb3P/cHJ5/2ptd/9qbXf/Z2pz/2Vocf9sb3n/
+Zmhu/2dqdP9gY2z/Z2p0/2hrdf9oanD/aWx2/3BzfP9iZW7/bnF7/2ptd/9maXP/Zmlz/3V4gf9qbXf/
+Z2p0/25xe/9qbXf/bnF7/25xe/9ucXv/bnF7/25xe/91d33/cHJ5/2psc/9ucXv/Z2p0/2dqdP9sbnX/
+bnF7/2Jlbv9ucXv/am13/2psc/9zdXz/Zmlz/2Rncf9nanT/aGty/2xvd/9sbnb/c3V8/3V3ff9sbnX/
+bnB3/2tud/9tb3b/cXN6/21vdv9wcnn/dXd9/2xvef9sb3n/bG95/2xvef9sb3n/bG95/3N2f/9wcnn/
+cHJ5/3Bzff91eIH/Zmhu/25wd/9vcXX/c3V8/3N1fP9wcnn/c3V8/2psc/9qbHP/d3l//3V4gf9wc33/
+cHJ5/3Byef9/gYf/bG95/25wd/9vcXX/c3V8/2xudf9tb3P/am13/2ptd/9wc33/ZGdx/2xvef9ucXv/
+YmVu/2Zpc/9sbnX/Z2p0/21vc/9sbnX/am13/2dqdP9ucXv/bnF7/3Bzff9sb3n/bG95/2ptd/9nanT/
+bG95/2ptd/9zdXz/dnh8/3Z4fP9zdXz/cHJ5/2psc/93eX//am13/3N1fP9sbnX/b3F1/29xdf9wcnn/
+dXd9/36Ahv91d33/c3V8/21vc/9ucXv/cHN9/3N1fP9sb3n/Z2p0/2ptd/9sb3n/dnh8/29xdf94eX3/
+bnB3/3V3ff9nanH/bnB3/3h5ff9wcnn/bnB3/2xvef9zdXz/c3V8/3Byef92eHz/cHJ5/2psc/9sbnX/
+cHN9/3V4gf91eIH/dXiB/2ptd/9ucXv/bG95/3Bzff9qbXf/cHJ5/2xvef9zdXz/bG95/3Byef9ucHf/
+eHl9/3V3ff9qbXf/foCG/3V4gf9tb3P/bW9z/3V3ff91eIH/bW9z/2xudf9nanT/bnB3/2ptd/9sbnX/
+cHJ5/2xudf92eHz/dXd9/2dqdP91d33/bnF7/3N1fP9ucXv/Z2p0/3Bzff9wc33/bG51/2xvef9qbHP/
+Z2px/2dqdP9nanT/am13/2psc/9nanH/bG95/2dqdP9zdn//Zmlz/2Rncf9nanT/bG95/2psc/9wcnn/
+cHJ5/2Zpc/9sbnX/Z2p0/2psc/9qbXf/cHN9/3Bzff93eX//bG51/2ptd/9sbnX/amxz/3N1fP9ucHf/
+cHJ5/3Byef91eIH/dXiB/3V4gf9ucXv/eXuB/3V4gf9ucHf/ZGdx/2xvef9wc33/bnB3/21vc/9nanH/
+dXd9/21vc/9qbXf/am13/2dqdP9sb3n/bW94/2xudv9maXP/amxz/2ptd/9kZ3H/Zmlz/2Nmbv9jZm//
+bG94/2dqcf9nanT/YGNs/2xvef9sb3n/amx0/2hrdf9oa3T/Wl1m/2dqdP9nanH/XWBq/2Rncf93eX//
+am13/2ptd/9zdXz/bnB3/3Byef9zdXz/c3V8/3Byef9wcnn/dXd9/3Byef9ucHX/c3V8/25wd/9wc33/
+b3F7/3V3ff9naXP/d3l//3N2f/9sb3n/dnh//25wd/9vcXX/bW92/2xudf9sbnX/bnB3/29ye/9wc33/
+Z2px/2psc/9sbnX/amxz/29xev9sbnX/bW92/3V3ff9qbXf/am13/21vef9nanT/bW9z/2Rncf9ucHj/
+bG51/2tud/9rbnf/c3V7/2Zpc/9qbXf/bnB3/3V3ff9ucXv/c3Z//3N1fP9qbHP/Z2p0/3V3ff92eHz/
+cHJ5/25wd/9vcXX/fX6B/2ptd/9qbXf/bG95/3Bzff9sbnX/bG51/2dqdP9qbXf/bnF7/2Jlbv9sb3n/
+bG95/2Rncf9iZW7/amxz/2dqcf9qbXf/amxz/2ptd/9maXP/bnF7/2xvef9sb3n/bG95/3Bzff9sb3n/
+bG51/25wd/9sb3n/dXiB/3l7gf95e4H/c3Z//3V4gf9zdXz/eXyG/3V4gf97fYP/c3Z//3V4gf9wc33/
+e32D/3t9g/+Bg4r/fn+D/35/g/9zdn//e32D/3t9g/97fYP/c3Z//3Byef9wc33/dXiB/3N2f/9ucHf/
+d3l//3Bzff93eoP/am13/25wd/93eX//bG95/3Byef9wcnn/dXiB/3V4gf9ucXv/d3l//3N1fP9qbHP/
+bG51/3N1fP9zdXz/dXd9/3V3ff9qbXf/am13/2ptd/91d33/amxz/29xdf9ucHf/c3V8/2xudf9wcnn/
+bW9z/3V3ff91d33/bG51/3t9g/93eX//bG51/2xudf9zdXz/d3l//3Byef9sbnX/bG51/25wd/9wcnn/
+bnB3/3N1fP9vcXX/dXd9/3V3ff9nanH/d3l//25xe/92eHz/cHJ5/25wd/92eHz/c3V8/2xvef9ucXv/
+bG95/2psc/9ucXv/bnF7/2xudf9vcXX/bnB3/3N2f/9ucHf/e32D/3N1fP9ucHf/dXd9/3N2f/9ucXv/
+dXiB/3V3ff9wc33/bnB3/25wd/9vcXX/bG51/3Byef91d33/eHl9/25wd/9wc33/bnF7/2xvef91eIH/
+cHN9/3V4gf9ucHf/cHJ5/3Byef9wcnn/bG51/3N1fP9ucXv/am13/2Rncf9sb3n/cHN9/21vc/9tb3P/
+amxz/3Z4fP9ucHf/bG95/3Bzff9sb3n/bnF7/25weP9wc33/bG51/2xudf9wcnn/am13/2ttdf9ucHX/
+bG52/3J0e/9sb3n/cHJ5/2Zpc/91eID/bnF7/3BzfP9vcnv/dXd9/2dqcf9zdXz/b3F4/2ttdP9sbnX/
+dXd9/21wd/9rbXX/c3V8/2ptd/9vcnz/bXB6/21wev9tcHr/aWx2/21wev9wcnr/a21y/3Fzev9tb3T/
+cHJ5/3Byef91d33/a210/3d5gv9wc3z/bnF6/3V3ff9ucHf/bW92/25wd/9tb3T/bnB1/21wef9vcnv/
+bnF7/2dqdP9sbnX/amx0/2ttdP9wcnv/cHJ7/29xev96fIL/cHJ6/29xeP93eoL/b3J8/29xef9pbHb/
+b3J8/2ptdv9tcHr/bXB6/29ye/9iZW7/Z2p0/2xudf9sb3n/bG95/2xvef9sb3n/Zmlz/2ptd/9wc33/
+dXd9/2xvef9qbXf/Zmlz/3d6g/9sb3n/Z2p0/2ptd/91d33/bG51/2xvef9nanH/bnB3/3N2f/9qbHP/
+c3V8/3Bzff9qbXf/bnB3/25xe/9sb3n/bnF7/3Bzff9ucHf/bnB3/3Bzff91d33/c3V8/3V4gf9zdn//
+cHN9/3Byef9ucXv/bnF7/3N2f/91eIH/e32D/3Bzff9zdn//bnB3/3d5f/9ucXv/dXd9/2ptd/9qbXf/
+bG51/3Byef91d33/d3l//3Bzff9ucHf/bnB3/3N1fP9wcnn/cHJ5/2xvef9qbXf/bG51/2xvef9sb3n/
+Zmlz/3Bzff9qbXf/dXd9/2Jlbv9nanT/d3l//2ptd/9tb3P/bG51/3Byef9zdXz/bG51/3Z4fP9wcnn/
+bG51/2psc/9sb3n/bG95/3V3ff91d33/am13/2ptd/9qbHP/am13/2Zpc/9sbnX/am13/2xvef9qbHP/
+cHJ5/29xdf95e4H/dnh8/2xudf95fIb/e32D/29xdf9sbnX/c3V8/3d5f/9wcnn/bnB3/25wd/9vcXX/
+c3V8/2psc/9ucHf/bW9z/3V3ff91d33/Z2p0/3V4gf9ucXv/c3V8/2dqdP9maXP/bnB3/2ptd/9nanT/
+Z2p0/2Zpc/9kZmz/Zmhu/2dqdP9maG7/ZGdx/2Zobv9maXP/ZGdx/3Bzff9maXP/ZGdx/2xvef9sb3n/
+amxz/3V3ff9wc33/bnF7/2ptd/9qbXf/amxz/2xudf9sb3n/dXd9/3N1fP9tb3P/b3F1/3Byef9qbXf/
+cHN9/25wd/91d33/bW9z/25wd/9sb3n/am13/2xudf92eHz/cHJ5/25wd/9qbHP/bnB3/3N1fP9tb3P/
+bG95/25wd/97fYP/cHN9/3d6g/9ucXv/bG95/3Byef9vcXj/cHJ5/2dqcf9sbnX/bnB3/25wd/9vcXj/
+bnB1/2xvdv9ydHv/bW9z/3Byef9nanH/cHJ5/21vdv9ydHv/b3F6/3V3ff9jZnD/a254/2ptd/9maXL/
+Z2ly/3F0e/9oa3X/Zmlz/25xev9pbHT/bG95/25xe/9pbHX/amx1/2hrc/9sb3f/am13/2Zobv9pbHb/
+Z2pz/2hrdf9tcHj/am12/2Nlbv9wc3r/aGt0/2xudP9sb3n/aGtz/2ZocP9sb3f/amxy/2tud/9ucHb/
+c3V8/3N1fP9qbXf/bnB3/3Byef9ucHf/cHJ5/3J0ev9vcXj/dnh+/3Bze/9rbXb/cXR+/25wd/9ucHf/
+am12/3BzfP9sb3f/cXN6/3Fzev9wcnn/Zmlz/2ptd/9qbXf/bG95/2Zpc/9maXP/Z2p0/2Rncf9iZW7/
+ZGdx/25wd/9kZ3H/Z2px/2Jlbv9zdXz/Zmhu/11gav9kZmz/bG95/2Rncf9maXP/XWBq/2Zobv9qbXf/
+XWBq/2dqdP9kZ3H/XWBq/2Jlbv9kZ3H/Z2px/2dqdP9sb3n/Z2p0/2psc/9ucXv/cHN9/25xe/9sb3n/
+bG95/25wd/9sbnX/bnB3/29xdf92eHz/cHN9/3d5f/9zdn//eXuB/25xe/95fIb/c3Z//3V4gf9ucXv/
+c3V8/3N1fP91eIH/eXuB/3l8hv9zdn//bnF7/25xe/91eIH/cHN9/3N2f/9wc33/bnB3/3N2f/91eIH/
+c3Z//3Byef95e4H/c3Z//3l8hv9ucHf/b3F1/3d5f/9vcXX/bnB3/3Byef9zdn//cHN9/25xe/93eX//
+c3Z//2xvef9ucHf/bnF7/3Byef92eHz/eHl9/25wd/93eoP/c3Z//3l7gf9ucXv/cHJ5/3Byef9wc33/
+bG95/3Bzff9sb3n/d3qD/3V3ff9ucHf/fn+D/3l7gf9vcXX/bG95/3V3ff91eIH/cHN9/29xdf9qbHP/
+bG95/25xe/9qbHP/bnB3/25wd/91d33/dXd9/2xvef93eoP/dXiB/3t9g/9zdn//bG95/3V4gf9zdn//
+c3Z//3N2f/91eIH/bG95/3Bzff91d33/bnB3/29xdf9wcnn/c3V8/2xudf97fYP/bnB3/2ptd/91d33/
+dXd9/21vc/91d33/bnF7/2xvef9maXP/ZGdx/2Zobv9qbHP/Z2p0/25wd/9qbXf/ZGZs/2Zobv9maXP/
+YmVu/2dqdP9nanH/Z2p0/2psc/9nanT/am13/2ptd/9nanT/dXd9/2xvef9nanT/Zmlz/25xe/9wcnn/
+bW9z/25wd/9sbnX/d3l//25wd/9wcnn/bnB3/2xudf9vcXX/cHJ5/3Bzff9qbHP/b3F1/3N1fP9ucHf/
+cHJ5/25wd/9tb3b/b3F4/25wd/9ucXv/Z2p0/3Bzff9vcXj/cnV+/29xef95e4H/Zmlz/3J1fv9qbXf/
+b3J8/25wd/9xdH7/cnR9/25xef93eYD/cHJ6/3R2fv90dn7/bG95/3F0ff9ucXr/bnB5/29yfP9nanL/
+bXB6/21wdv9tb3f/dnh9/3J1fv9tb3b/d3l+/29yfP9xdHv/cHN7/2ptd/9maXP/dHZ8/2xudP9ucHf/
+bnB0/3N1fP9zdXz/Z2p0/2xudf9sb3n/Zmlz/2tud/9xc3r/aGt1/3V3ff9ucHf/ZWhy/3Fze/9qbXf/
+bG94/21wd/9zdX3/amx0/21wev9ydHr/a254/2Zpc/9ucXv/bG95/3Byef9ucHf/bnB3/25wd/9sbnX/
+am13/2xvef92eHz/bnB3/25wd/9ucHf/e32D/3V3ff9sbnX/bG95/3V3ff9sbnX/bG95/2Zpc/9qbXf/
+cHN9/2Rncf9qbHP/bnF7/2psc/9ucHf/c3V8/25wd/9sbnX/c3V8/25wd/9ucHf/cHN9/3d5f/9ucXv/
+dXd9/3V3ff9wcnn/bG51/25wd/9tb3P/dXd9/3Bzff95e4H/c3Z//3N2f/9sb3n/eXyG/3l7gf9zdn//
+bnB3/3N1fP9zdXz/c3Z//3t9g/9+gYr/dXiB/3N2f/9ucXv/bnF7/25xe/9ucXv/bG95/2xvef91eIH/
+c3Z//3N2f/9wcnn/eXyG/3d6g/9+gIb/c3V8/3N1fP95fIb/cHN9/3Bzff9zdXz/dXiB/3N2f/9ucXv/
+eXuB/3V4gf9ucHf/cHN9/3V4gf91eIH/e32D/36Ahv91d33/c3V8/25wd/91d33/bnB3/25wd/9ucHf/
+bnB3/2xudf9wc33/am13/3V3ff9wc33/Z2px/3d6g/9zdn//amxz/2xudf9zdXz/dXd9/3Bzff9qbXf/
+Z2p0/2xudf9wc33/Z2p0/2xudf9sbnX/c3V8/3Bzff9maXP/dXd9/2dqdP9wc33/bnF7/2dqdP9zdXz/
+bnF7/2xvef9ucXv/bnF7/2ptd/9sbnX/bnF7/2dqcf9maG7/Z2px/2dqdP9kZ3H/dXd9/2psc/9nanH/
+bnB3/2xvef9maG7/bnF7/2ptd/9ucXv/Zmlz/2psc/9qbHP/bG95/2xvef9wcnn/cHJ5/2dqdP9qbHP/
+Z2p0/2Zpc/9wc33/bG51/2ptd/9qbXf/am13/2xudf9sb3n/bG51/3Z4fP91d33/bnB3/2Zpc/9wcnn/
+cHJ5/21vc/9sbnX/b3F1/3h5ff9ucHf/cHJ5/2xudf9sbnX/bG95/25xe/9ucXv/Zmhu/21vc/9zdXz/
+bnB3/3N1fP9ucHf/b3F2/2ptd/9sbnX/bnB3/2Zobv9zdXz/bnB3/3N1fP9xc3r/eXuC/2hrcv9ydXz/
+a211/3R2ff9ucHf/cnV//3V3ff9vcXj/dnh9/3Bzff9xdH7/eHqD/3F0fv9wc3z/cHN8/3Byef90d4D/
+aWxz/3N2f/9ucXv/bXB6/3d5f/90d3//bG95/3V3ff9sb3n/c3Z//29yfP9wcnn/Z2pz/3h6gP9vcXX/
+cHJ5/25wd/92eHz/c3V8/21vc/9sbnX/bnF7/2psc/9sbnX/cnR8/2Zpc/9wcnn/Zmlz/2Nmb/90dn3/
+am13/25xev9vcnz/dnh+/21vc/90dnz/dHZ8/25wd/9maXP/bnF7/2ptd/9ucXv/bnF7/2xvef9ucHf/
+bG51/2psc/9sbnX/dnh8/25wd/9wcnn/bG51/3l8hv9zdn//Z2p0/2xvef9zdn//bnB3/3Byef9sb3n/
+bG95/25xe/9qbHP/bG95/3Bzff9sb3n/bnB3/3N2f/93eoP/dXiB/3d6g/9wc33/dXd9/3t9g/9+gIb/
+dXiB/3d6g/97fYP/c3V8/3Bzff9wc33/bnB3/3N2f/9zdn//eXuB/3Bzff9wcnn/am13/3V4gf91d33/
+cHJ5/25wd/9sb3n/cHJ5/2xvef91d33/d3l//2xvef9sb3n/am13/2xvef9sbnX/bnB3/25wd/9sb3n/
+d3qD/3d6g/9zdn//bnF7/3t+h/95e4H/foGK/3N2f/9wc33/eXyG/3N1fP91eIH/d3l//3d6g/97fYP/
+eXyG/3t9g/95e4H/c3V8/3Bzff91eIH/bnF7/3Bzff93eX//bnB3/3N1fP9wcnn/dXd9/2xudf9tb3P/
+bG51/2ptd/9nanT/cHN9/2ptd/93eX//d3l//2dqcf95e4H/dXd9/2Zpc/9maG7/bG95/2ptd/9nanT/
+Zmhu/2Jlbv9nanH/am13/2Jlbv9kZ3H/Zmhu/2ptd/9nanT/ZGdx/25wd/9maXP/Z2p0/2dqdP9kZ3H/
+bnB3/2Rncf9maG7/Z2p0/2ptd/9kZ3H/ZGdx/2dqdP9nanT/Z2px/2dqcf9nanT/YmVu/3Byef9qbHP/
+amxz/3N1fP9ucXv/bG51/3Z4fP9ucXv/bG95/2Zpc/9qbHP/amxz/25xe/9sb3n/dnh8/3V3ff9sb3n/
+am13/2xudf9nanT/bnF7/2psc/9wc33/bG95/2xvef9qbXf/am13/2dqdP91d33/bnF7/2xudf9sbnX/
+cHJ5/3Byef9sbnX/b3F1/29xdf94eX3/bnB3/3Byef9ucHf/amxz/2ptd/9wc33/c3Z//2ptd/9zdXz/
+dXiB/3N1fP93eoP/c3V8/3Bzff9zdn//cHN9/3V4gf9ucXv/dXiB/2xvef9wc33/cHN9/3d6g/9nanT/
+c3Z+/2xvef94eoD/cHN9/3N2f/94eoD/cHJ5/3V3ff9wc33/bnF7/3d5f/9ucXv/bG95/3N1fP9sbnX/
+dXd9/2RmbP9ucHf/am13/2psc/94eX3/dXd9/29xdf94eX3/b3F1/3N1fP9sb3n/bW9z/2Zobv94eX3/
+b3F1/3Byef9wcnn/eHl9/3V3ff9tb3P/bnB3/3N1fP9sbnX/bG95/3N1fP9sbnX/dXd9/3Byef9qbHP/
+d3l//2ptd/9ucXv/cHN9/3V3ff9nanH/c3V8/25wd/9nanH/YGNs/2dqdP9maXP/am13/25xe/9sb3n/
+bG51/2psc/9nanT/amxz/3N1fP9qbXf/bG51/2psc/93eoP/bnF7/2Rncf9sbnX/cHN9/2xvef9sb3n/
+am13/2dqdP9qbXf/Z2p0/2ptd/9sb3n/bG51/25wd/9ucHf/dXd9/2xudf9zdXz/b3F1/2xudf9ucHf/
+dXd9/2ptd/9zdXz/dXd9/2xudf9qbXf/bG95/2xudf9wc33/cHJ5/3l7gf9sb3n/cHN9/25wd/95e4H/
+dXiB/25xe/9vcXX/b3F1/25wd/9sbnX/c3Z//3t+h/9ucXv/bnF7/3Bzff9sb3n/bG95/2xudf9wcnn/
+bnB3/3N2f/9zdn//bnF7/2ptd/91eIH/cHN9/3l7gf9wcnn/bW9z/3V3ff9tb3P/bG95/25wd/9vcXX/
+dXd9/3N1fP9zdXz/c3V8/25wd/9ucHf/c3V8/29xdf9zdXz/d3l//25wd/9wcnn/cHJ5/3Byef9qbXf/
+bG51/2xudf9sb3n/am13/3N1fP9qbXf/eHl9/3d5f/9vcXX/f4GH/3d5f/9wcnn/b3F1/3Z4fP92eHz/
+c3V8/2xudf9nanT/bG51/3N1fP9nanT/am13/2xvef9zdXz/cHJ5/29xdf93eX//dXd9/3N1fP9wcnn/
+b3F1/3Z4fP9wcnn/bnB3/3Byef9wc33/bnB3/25wd/9zdXz/c3V8/21vc/9sbnX/bG95/2dqdP9zdXz/
+bG51/2xvef91d33/cHJ5/25wd/93eX//cHJ5/3N1fP9qbHP/bnB3/2xvef91d33/c3Z//3d5f/91d33/
+c3Z//2xvef9ucHf/bG51/3N1fP9tb3P/dXd9/25wd/9sb3n/cHN9/3Bzff9ucHf/eXuB/3N2f/9zdXz/
+bnB3/3N1fP9ucHf/bG51/2xudf9sbnX/d3l//2ptd/9sb3n/bG95/2dqdP9sbnX/bnB3/3Byef9nanH/
+b3F1/3N2f/9wcnn/cHN9/2xvef9vcXX/bnF7/29xdf9wcnn/Zmhu/3N1fP9ucHf/dXd9/3V3ff93eX//
+Z2p0/3N1fP9qbXf/dXiB/2xvef9sb3n/dnh8/21vc/91d33/bG95/2xvef9wc33/bG51/2psc/9ucXv/
+Zmlz/25xe/9dYGr/Zmlz/3Byef9qbXf/d3l//3Bzff9ucHf/d3l//25wd/9ucXv/bG95/2xvef9nanT/
+eHl9/25wd/9ucHf/cHJ5/3Z4fP91d33/bnB3/29xdf9zdXz/am13/2xudf9wc33/amxz/3V3ff9sbnX/
+amxz/3N1fP9qbXf/bG95/3N1fP93eoP/bG51/3V3ff92eHz/bG51/2Zpc/9wc33/cHN9/2xvef9sb3n/
+bnF7/2ptd/9qbHP/Zmlz/2dqcf91d33/Z2p0/2xvef9maXP/dXiB/25xe/9maXP/bG95/3N1fP9sb3n/
+bnF7/2psc/9maXP/am13/2psc/9nanT/cHJ5/2dqdP9qbXf/cHJ5/3Z4fP9wc33/dXd9/29xdf9sb3n/
+cHN9/3l7gf9wc33/c3Z//3V3ff9sb3n/bG95/25xe/9sb3n/dXd9/3N1fP97fof/bnF7/3Bzff9sb3n/
+eXuB/3N2f/9ucXv/bnB3/3N1fP9ucXv/bnF7/3N1fP93eoP/bG95/25wd/9ucXv/am13/2ptd/9ucHf/
+bnB3/2xudf9wc33/cHJ5/25wd/9qbHP/dXd9/3Byef91eIH/am13/2psc/9ucXv/bG51/2psc/9qbHP/
+Zmlz/25xe/9maXP/bnF7/3N1fP9qbXf/bG51/3Byef9tb3P/c3V8/3l7gf9ucHf/c3Z//3N2f/9wc33/
+bnB3/3Byef9wcnn/c3Z//3Byef93eX//bG95/3Z4fP95e4H/bG51/3+Bh/91d33/bG51/2ptd/91d33/
+cHN9/3Bzff9sb3n/Z2p0/2xudf9wc33/bG51/3Byef9qbXf/cHJ5/3Byef9qbXf/dXiB/3Bzff9zdXz/
+bG95/2xudf9zdXz/cHJ5/3Byef9wcnn/dXd9/3Byef9ucHf/bnB3/2xvef9sb3n/am13/2dqdP9nanT/
+cHN9/2xudf9qbHP/c3Z//2xvef9nanT/bnF7/2ptd/9ucXv/Z2px/21vc/9sbnX/eHl9/3Bzff9zdn//
+d3l//3Bzff9ucHf/bG95/25wd/9wc33/bG95/3Bzff9ucHf/cHN9/3N2f/9ucXv/bG51/3d5f/9wcnn/
+bW9z/21vc/9zdXz/bnB3/2xvef9sbnX/bG51/3V3ff9maXP/Zmlz/2Zpc/9dYGr/amxz/2ptd/9sb3n/
+Zmlz/2xudf9wcnn/bG51/25wd/9tb3P/am13/2xvef9qbXf/bnF7/2Rncf9wc33/bG51/3N1fP9zdXz/
+dnh8/2dqcf9zdXz/b3F1/3V3ff9sb3n/bG95/3V3ff9ucHf/dXiB/3Byef9wcnn/c3Z//25xe/9ucHf/
+c3V8/2ptd/9wc33/Z2p0/3V4gf9zdXz/am13/3t9g/91eIH/dXiB/3t9g/9zdXz/dXiB/3Byef9ucXv/
+c3V8/36Bif9zdn//dXiB/3N2f/95fIb/eXuB/3N1fP9ucHf/dXd9/2xvef9zdn//d3qD/3Bzff95e4H/
+bnF7/2xudf93eX//bG95/3N1fP93eX//e32D/29xdf92eHz/dnh8/3Byef9sbnX/dnh8/3N2f/9ucXv/
+c3V8/3V3ff9wc33/c3Z//3Byef9wcnn/eXyG/3Bzff9wc33/am13/3t9g/9wc33/Z2p0/25xe/91d33/
+bnF7/3N2f/9ucHf/bG51/25wd/9vcXX/bG51/3N1fP9nanT/Zmlz/2xvef9wc33/bG95/2ptd/9kZ3H/
+amxz/2psc/9ucHf/Z2px/25xe/9wc33/amxz/21vc/9ucHf/cHJ5/25wd/9zdn//d3qD/2xvef9wc33/
+bG95/3l7gf91eIH/c3Z//3Byef9wc33/d3qD/3V4gf95fIb/foGK/3V4gf9zdn//dXiB/3V4gf91eIH/
+c3Z//3V4gf9zdXz/eXuB/3N2f/9ucHf/bG51/3V3ff9zdXz/eXuB/2xudf9vcXX/dXd9/2xvef9sb3n/
+bG95/2xvef92eHz/bnF7/3d5f/97fYP/bnF7/2xvef9wc33/b3F1/25xe/93eoP/bG95/3Byef9wcnn/
+cHJ5/2xudf9ucHf/bW9z/3Byef9ucHf/dnh8/3Byef93eX//e36H/25xe/+Bg4r/d3l//25wd/9wcnn/
+c3V8/3Z4fP91d33/c3Z//2xvef9wcnn/c3Z//2xvef9zdn//bnF7/3V4gf9zdn//cHJ5/3+Bh/93eoP/
+eXuB/3N2f/9wc33/dXiB/3N2f/9zdn//e32D/3d6g/95e4H/dXiB/3N2f/91eIH/c3Z//2xvef9ucXv/
+bG95/3l7gf9wc33/c3Z//3l8hv9wc33/b3F1/3Bzff9sb3n/c3V8/2Zpc/9tb3P/cHJ5/3Z4fP92eHz/
+dXiB/3h5ff9zdXz/bG95/25wd/9vcXX/cHJ5/3Byef91eIH/c3V8/3Bzff9zdn//cHN9/2ptd/91eIH/
+c3Z//2xvef9wcnn/cHN9/2xvef9ucXv/bG95/2xvef93eX//bnB3/3Byef9zdXz/Zmhu/2psc/9qbXf/
+bnF7/2Zpc/9qbHP/am13/2Zobv9sbnX/Z2px/2Zpc/9nanT/bG51/2xudf9iZW7/dXd9/25wd/92eHz/
+c3V8/3V3ff9nanT/bnF7/3Byef90d4H/c3Z//3N2f/94eoD/cnR7/36Ahv90d4D/dHeA/3p8gv92eYL/
+c3Z+/3Z5gv9vcnz/eXuC/21wev91eIH/bG51/2Jlbv9vcnz/a211/2lrcv9xdHv/aWxz/29yfP9qbHP/
+aWx2/2Zpcv91d33/aWx2/2xveP9qbXf/d3l//3Byef9ucHf/b3F1/3V3ff9sbnX/bnF7/3N1fP9sbnX/
+dXd9/2xudf9sbnX/d3h9/3Byef9wcnj/dHd7/3h6gP9sbnX/cHN9/3N1fP9tb3b/bG51/3V3ff9zdXz/
+bnB3/3N1fP9sb3n/am13/2xudf9nanT/bG51/3Z4fP9sbnX/bnF7/2dqdP93eoP/bnF7/2Zpc/9sbnX/
+dnh8/2xudf91d33/b3F1/2xvef9ucXv/bnB3/29xdf9wcnn/bG51/2psc/9zdXz/dXd9/3Byef9zdXz/
+bG51/2xudf9qbXf/c3V8/2xvef9zdXz/dnh8/25wd/9ucHf/cHJ5/3Byef9ucXv/dXd9/3t+h/9sb3n/
+cHJ5/2ptd/93eX//c3Z//3Bzff9ucHf/bG95/25xe/9wc33/c3Z//3l8hv9zdn//cHN9/3Bzff9wc33/
+cHN9/3Byef9wcnn/bnB3/3N2f/9ucXv/cHN9/2dqdP91eIH/dXd9/3d5f/9sbnX/bG51/3Bzff9sb3n/
+am13/2xudf9ucHf/dXd9/3Byef9zdn//d3l//2xudf9vcXX/c3V8/29xdf9ucHf/eHl9/3Byef9ucXv/
+bnF7/2ptd/9nanT/bG95/2xudf9wcnn/bnB3/3V3ff9sbnX/dXd9/3l7gf9vcXX/gYSN/3d5f/9sb3n/
+cHJ5/3Z4fP91d33/dnh8/3Byef9maG7/bnB3/3Bzff9wcnn/dXiB/3Byef9wc33/c3Z//3N1fP9/gYf/
+bnF7/3l7gf9wc33/c3V8/3l8hv93eoP/cHN9/3d6g/9wc33/c3Z//25xe/9ucXv/cHN9/3Bzff9ucXv/
+cHN9/3Byef93eoP/cHN9/3Bzff93eoP/dXiB/3Bzff91eIH/dXiB/3V4gf9qbXf/cHN9/3Bzff95e4H/
+c3Z//3l7gf95e4H/d3qD/3Bzff9wc33/dXiB/3d6g/9zdn//d3qD/3N2f/91eIH/c3Z//3Byef9ucHf/
+d3l//3N2f/9sb3n/bG95/25xe/9sbnX/c3V8/2xudf9ucHf/d3l//2dqdP9zdn//c3Z//2Zpc/9vcXX/
+bnB3/2xvef9kZ3H/bG51/3N1fP9vcXX/bnB3/25wd/9zdn//cHN9/25xe/9wc33/Zmlz/3d5f/9sb3n/
+dHeA/3h6gf93eX//am13/3BzfP9sb3n/cnV+/3J0e/91d33/dXh9/29xdv94eoH/bXB3/25weP9xdH3/
+bnF7/25wd/9wcnr/aWx2/29ye/9laG//aWx1/3J0ff9rbnj/cnV+/21weP9sb3n/dnh//2xvef9ydHv/
+cXN6/2psdP9naXD/cXN5/2psdP9sbnX/bG95/3d6hP9tcHr/cHN9/2xvef9wc33/bG95/25xe/9ydX7/
+bXB6/3h6gP9vcXj/bG51/3Z3ff9ydHv/b3F4/3N1e/90dn3/bnB0/3N1e/90dn3/bnF6/25wd/92eHz/
+c3Z//3Byef9wcnn/c3V8/2xudf9zdXz/bnB3/2xudf94eX3/am13/3Bzff9maXP/c3Z//3Bzff9maXP/
+bG51/3N1fP9sbnX/dXd9/2xudf9ucHf/bnF7/25wd/9ucHf/cHN9/2xvef9sbnX/c3V8/3h5ff9wcnn/
+c3V8/21vc/9vcXX/bG51/3l7gf9wc33/d3l//3V4gf9wcnn/bnF7/3Bzff9ucXv/bG95/3h5ff93eX//
+bW9z/2xudf9nanT/d3l//25xe/9sb3n/amxz/2psc/9qbXf/bG95/2xvef9zdXz/cHJ5/2xudf9sb3n/
+am13/2xudf9sbnX/am13/2dqdP9ucXv/bG95/2xudf9maXP/dXd9/25xe/95e4H/bG51/25wd/9zdXz/
+cHJ5/2xvef9qbXf/bG51/3Z4fP9ucHf/dXd9/3d5f/9sbnX/b3F1/3Bzff9tb3P/bnB3/3V3ff9ucXv/
+cHJ5/25xe/9sbnX/bW9z/2xvef9qbXf/amxz/2ptd/9zdXz/am13/3Z4fP91eIH/bG51/3+Bh/91d33/
+bW9z/2xudf9wc33/bnF7/3N1fP9wcnn/ZGdx/21vc/9zdXz/bW9z/3Z4fP9sbnX/cHJ5/25wd/9sbnX/
+eXuB/2ptd/91d33/bG51/2dqcf93eX//am13/2xvef9ucXv/am13/25xe/9qbHP/bG51/2ptd/9sb3n/
+cHJ5/25wd/9sbnX/dXd9/2xvef9ucHf/d3qD/3Bzff9ucXv/c3Z//25xe/9ucXv/Z2p0/2xvef9ucXv/
+eXuB/3V4gf93eoP/dnh8/3N1fP9sbnX/bW9z/2xudf9ucHf/bW9z/2xvef9sbnX/bG95/2xudf9maXP/
+YmVu/2xvef9nanT/Zmlz/2xudf9sb3n/am13/25xe/9qbHP/bG51/3V3ff9qbHP/bG95/3Bzff9maXP/
+am13/21vef9tcHr/amxz/2psc/9zdXz/bG51/2xudf9vcXX/c3V8/3V3ff9sb3n/bnF7/2dqdP91eIH/
+bG95/3R2e/92eHz/dHZ9/2ptdv9ucHn/bG93/3Bze/9ucXn/c3Z+/3Fzev9sbnb/dnmC/3Byev9ydX7/
+dnh+/3N1fv91d33/d3l//25wef91eID/a212/3Bzff9vcnz/bW94/3V3f/9xdHz/bnF7/3V3gP9wcnv/
+cXN6/3R2fP9tcHr/bnB5/3N1fv9tb3j/bnB5/3J0ef93eoH/bW94/3V3ff9sbnX/cHJ5/25wd/9wcnn/
+dHZ8/21wef93eX7/bnF5/2tueP9xdHz/b3J6/21vdv9ucXn/c3V9/2xvdv9tcHj/bnF7/29yev9sb3n/
+dXd9/3V3ff9ucXv/dXiB/3V4gf9sb3n/cHN9/2xvef9qbXf/dXd9/3N1fP91d33/Zmhu/3V3ff9ucXv/
+ZGdx/2psc/9wc33/bG51/25wd/9nanH/Z2p0/2psc/9maG7/Zmhu/2xvef9nanT/Zmlz/3Byef92eHz/
+c3V8/3Byef9sb3n/bnB3/25wd/95fIb/cHN9/3l7gf91eIH/cHJ5/3N2f/91eIH/eXyG/3V4gf9+gIb/
+foGK/3N1fP9wc33/cHN9/36Biv97fYP/c3Z//3Bzff9zdn//c3Z//3N2f/9zdXz/dnh8/25wd/9ucHf/
+cHJ5/21vc/9vcXX/b3F1/2xvef9sb3n/cHN9/3Bzff9ucHf/Z2p0/3d6g/91eIH/foGK/2ptd/9ucXv/
+dnh8/3V3ff9sb3n/bG95/3Byef91eIH/bnF7/3V4gf93eoP/bG95/3Bzff91eIH/bnF7/25xe/94eX3/
+cHJ5/3N2f/9wc33/cHJ5/3Byef9wc33/bnB3/3Byef9ucXv/eXuB/25wd/91eIH/dXiB/2xvef9/gYf/
+eHl9/29xdf9sbnX/cHN9/25xe/91d33/bnF7/2BjbP9qbHP/am13/2Zobv9qbXf/Zmhu/2Zpc/9nanH/
+Z2px/3V3ff9qbHP/bG95/2xudf9nanH/cHJ5/2xvef9sb3n/bG95/2xudf9ucHf/b3F1/29xdf9ucXv/
+bnF7/3V4gf9ucXv/bnB3/25xe/9wc33/cHJ5/3l7gf9wc33/c3Z//3V4gf9zdn//bnF7/2xvef9zdn//
+d3qD/3t9g/93eoP/eXyG/3l7gf93eoP/dXiB/3N1fP9wcnn/c3Z//3Bzff91eIH/cHN9/3l7gf9wc33/
+c3V8/25xe/97fYP/eXuB/3Bzff9wc33/cHN9/25xe/9sb3n/am13/29xdf92eHz/am13/25xe/9zdn//
+Zmlz/2xvef9vcnz/b3J7/2dqdP9qbXf/c3Z//25xe/9sb3n/bnF7/3V4gf91eIH/cHN9/3N2f/9sb3n/
+eXuB/29ye/93eYD/eXuB/3l7gf9wc3v/dHd+/3V3fv92eH//c3aA/3t9hP90dn3/bnF6/3V3gP9vcnz/
+dnmD/3d6hP90d3z/d3mA/3x9gv91eH//e3yA/25xe/91d4D/dHd//29yfP92eYL/cnV+/29yef93eoL/
+dXiB/3F0ff93eX//bG94/2xueP9vcXj/bG94/21wef9ydHv/dnh8/29xef9wcnn/bG51/3N1fP9qbHP/
+b3F3/3J0e/9rbnj/eHp//3Byef9sb3n/dXiB/3V4gf9ydHv/b3F5/29yfP9ucHj/cXN6/29yef9ydX3/
+bnB3/3d5f/91eIH/bnF7/3V3ff91d33/bnB3/3N1fP9ucHf/bG51/3V3ff9zdXz/dnh8/2dqcf92eHz/
+dXd9/2dqdP9sb3n/dXd9/21vc/91d33/am13/2xudf9tb3P/bW9z/2xudf9wcnn/bG51/2psc/9zdXz/
+c3V8/3N1fP9wcnn/bG51/2xudf9vcXX/eXyG/25xe/91eIH/bnF7/2xvef9ucXv/bnF7/25xe/9wcnn/
+dXd9/3V4gf9sb3n/cHJ5/2psc/91d33/c3V8/2xudf9ucHf/bG95/2ptd/94eX3/bnB3/3V3ff9ucHf/
+cHJ5/3Byef9qbXf/am13/2xudf9qbHP/bG51/2xvef9ucXv/bG51/2dqdP91d33/bG95/3V4gf9maXP/
+bG95/3V3ff9zdXz/bG51/2psc/9sbnX/bnF7/2ptd/9wc33/d3l//2xudf9wcnn/dXd9/25wd/9ucXv/
+dXd9/3V4gf91eIH/c3Z//3Byef9sb3n/bnB3/25wd/9sbnX/bG51/3V3ff9ucHf/d3qD/3V4gf9ucHf/
+f4GH/3V4gf9tb3P/b3F1/3V3ff9ucXv/dXiB/3Bzff9nanT/bG95/25xe/9ucHf/dXd9/21vc/91d33/
+bnB3/25wd/93eoP/bnB3/3N1fP9ucHf/bW9z/3Z4fP9ucHf/cHJ5/3Byef9ucHf/c3V8/25wd/9ucHf/
+bnB3/29xdf91d33/bnB3/21vc/9sbnX/am13/2psc/9wc33/bG95/2ptd/9ucXv/Z2p0/2psc/9iZW7/
+Zmlz/2ptd/9nanT/Zmhu/2ptd/9maXP/Zmlz/2dqcf9maG7/ZGdx/2Rncf9kZ3H/Zmlz/2Jlbv9nanT/
+YmVu/2BjbP9kZ3H/bG95/2xvef9gY2z/Zmhu/2RmbP9nanT/ZGdx/11gav9kZ3H/Z2p0/2Zpc/9nanT/
+am13/11gav9maXP/bG95/2xveP9oa3T/Zmlz/2ptd/9qbXf/bG51/21vdv9wc3z/bG95/2ptd/9qbXf/
+Zmlz/3N1fP9sbnb/cXN5/3F0ff90d3//bnB1/25wd/9vcXn/bXB6/25weP9wc33/bW92/2psc/9vcnv/
+am13/29yfP9ucXv/bG51/25wd/9ydHv/bnF6/3d6gv9ydHv/c3Z//3V4gf91eIH/e32D/3V4gf90dn3/
+e32D/3d6g/9xdH7/e32G/3d5ff91eIH/dnh9/3V4gf90dn3/eXuA/3x/h/94eoH/enyC/3l7gf99foH/
+c3Z//3N2f/94eoD/cXN5/3p7gP9xc3f/bG95/3V3ff91d33/bW92/21vdv9tb3f/aGt1/2ttdP9oa3X/
+bG95/2xvef91d33/c3Z//3Byef9wc33/dXd9/2ptd/9wc33/bG51/2xudf91d33/cHJ5/3Z4fP9nanH/
+dnh8/3N2f/9sbnX/bW9z/3N1fP9ucHf/d3l//25wd/9ucHf/b3F1/21vc/9sbnX/c3V8/21vc/9qbXf/
+cHN9/3V3ff9zdXz/c3V8/21vc/9sbnX/bG51/3N2f/9qbXf/bnF7/2dqdP9maXP/Z2px/2dqcf9maXP/
+ZGdx/2xvef9wcnn/amxz/2psc/9maXP/c3V8/25xe/9sbnX/am13/2psc/9sbnX/c3V8/2xudf9sb3n/
+bG51/2ptd/9qbXf/am13/2xvef9sbnX/bG51/2xudf9ucXv/cHN9/2ptd/9ucHf/d3l//25wd/93eX//
+amxz/25wd/92eHz/dXd9/2xudf9qbXf/bG51/3V3ff9sb3n/bG95/3d5f/9qbXf/bG95/3Bzff9sbnX/
+cHJ5/3V3ff9zdn//c3Z//3Bzff9ucHf/bG95/25wd/9sb3n/bnB3/2xvef91d33/bnB3/3l8hv93eX//
+bW9z/35/g/93eX//bnB3/2xudf9zdXz/bnB3/3V3ff9wcnn/Zmlz/29xdf9zdXz/bnB3/3Z4fP9tb3P/
+c3V8/3N1fP9vcXX/e32D/25wd/9wcnn/bnF7/2xudf9zdXz/am13/2xvef9qbXf/am13/2ptd/9tb3P/
+bG51/2xudf9vcXX/c3Z//25xe/9ucHf/bG95/2xvef9ucHf/dnh8/3Byef9ucHf/cHJ5/25wd/9ucHf/
+amxz/3Byef9zdn//dXiB/3Bzff97fYP/c3Z//3V4gf9sb3n/bnB3/29xdf9ucHf/bG51/3Byef9qbXf/
+c3V8/2dqdP9nanT/Z2p0/3Bzff9sb3n/ZGdx/2ptd/9sbnX/c3V8/2xudf9kZ3H/bG51/25xe/9nanT/
+bG95/2xvef9iZW7/am13/25xef9vcnr/am13/2dqdP9ucHf/bG51/21vc/9tb3T/cnV8/25xev9qbXf/
+bnB3/25wd/93eH3/bW92/3Byef9vcXr/bG95/2dqc/9naXP/Zmlz/2Nmb/9nanH/aGp0/2Vocf9maXP/
+bG95/2psc/9ucXv/bG95/2Rncf9qbXf/bG95/2ptd/9wc33/bW9z/2ptd/9ucXv/am13/25xe/9sb3n/
+bG51/3V3ff9sb3n/bG95/3N1fP9nanT/bG95/2ptd/9ucHf/bnB3/29xef91d33/bG50/2xveP9qbXf/
+cHN9/2psc/9sbnb/bG95/2xud/92eH7/bG95/2xudf9zdXz/bnF7/2ptd/9tb3P/bnB3/2xvef9sb3n/
+bnB3/3d5f/9sbnX/dXd9/3Byef9ucHf/c3V8/3V3ff9ucHf/dXd9/2xvef9qbXf/c3Z//25xe/91d33/
+am13/3l7gf93eX//cHJ5/3N1fP91eIH/cHJ5/3t+h/9wcnn/bG95/29xdf9ucHf/bG51/3V3ff9tb3P/
+bG51/3V3ff92eHz/c3V8/3Byef9sbnX/amxz/2xudf95e4H/bG51/3Z4fP9ucHf/bG51/3Byef9ucHf/
+cHJ5/25wd/91d33/eHl9/29xdf9sb3n/bG95/3V4gf93eX//bnF7/3d6g/9zdn//c3Z//3l7gf9zdn//
+dXiB/3V3ff95e4H/e32D/3Z4fP95e4H/dXd9/3N2f/91eIH/dXiB/3d6g/9zdXz/bnF7/36Ahv93eoP/
+foGK/3V3ff9zdn//d3qD/3t9g/9wc33/bnB3/2xvef9zdXz/cHN9/3Bzff91eIH/bnB3/25wd/9zdXz/
+bG51/2xudf9zdXz/dXd9/3Bzff91eIH/cHJ5/25xe/9wcnn/bnB3/2xvef9ucHf/dnh8/25wd/95e4H/
+d3l//3Byef9+f4P/dXd9/25wd/9sbnX/c3V8/2xudf91d33/bG95/2Rncf9qbHP/am13/2dqcf9ucXv/
+am13/2ptd/9qbXf/Z2px/3N2f/9sbnX/bnF7/25xe/9sbnX/c3V8/2xvef9sb3n/bG51/29xdf9sb3n/
+bnB3/2xvef9ucXv/bnB3/3N2f/9sb3n/bnB3/25wd/9wcnn/b3F1/3Z4fP9ucXv/bG95/25xe/9wc33/
+bnF7/2xvef9zdn//c3Z//3V4gf9wc33/eXuB/3N2f/9zdn//bnB3/25wd/9tb3P/bnB3/25wd/9zdXz/
+bG51/3N1fP9qbXf/Z2px/25wd/92eHz/bnF7/2dqdP9sbnX/bnB3/3Bzff9ucHf/Z2px/21vc/9sb3n/
+Z2p0/2ptd/9sb3n/ZGZs/2xudf9ucXv/b3J6/2ptd/9qbXf/bG95/2xvef9qbHP/bW9z/3J1fP9wcnz/
+am13/25wd/9ucHf/dXd8/2xudf9vcnj/bnF7/29yfP9nanT/ZGdx/2ptd/9kZ3H/amxz/2ptd/9sbnX/
+am13/2xvef9sbnX/cHJ5/3N1fP9qbHP/bG51/25wd/9ucHf/dXd9/2xudf9sb3n/cHN9/2ptd/9wc33/
+bG95/2xudf9wc33/bnB3/3Byef91d33/bG51/3N1fP9ucHf/bnB3/2xudf9ydHv/dnh+/25wd/9vcXn/
+bnB3/3Z4fP9sbnX/bnB3/29xef9tb3X/dnh9/3Byef9vcXX/dnh8/3N1fP9ucHf/b3F1/2xudf9tb3P/
+bG51/2xudf9wc33/b3F1/3Z4fP91d33/bG51/25xe/9wc33/bG51/3V3ff9sbnX/amxz/3N1fP9ucHf/
+c3V8/2Zobv9wc33/cHN9/2ptd/9vcXX/c3V8/29xdf92eHz/bW9z/2ptd/9sbnX/bG95/2dqdP9wc33/
+bG51/2xudf9zdXz/dXd9/3Bzff9wcnn/bG51/21vc/9qbHP/c3Z//2xudf9zdXz/bnB3/2xudf9zdXz/
+bW9z/2ptd/9tb3P/bnF7/3Z4fP9ucHf/bnB3/2xvef91eIH/dXd9/2xvef9zdn//bnB3/2xvef91d33/
+bG95/25wd/9ucHf/c3Z//3N2f/9ucXv/cHJ5/25xe/9ucHf/bnF7/3N2f/9zdn//bnB3/2dqdP91eIH/
+bnF7/3d5f/9sb3n/b3F1/3Bzff93eX//b3F1/25wd/9qbXf/c3V8/3Byef9ucHf/eHl9/25wd/9wcnn/
+cHJ5/2xvef9wcnn/c3Z//3d5f/9qbHP/Z2p0/2dqcf9sbnX/Z2px/2dqdP9nanT/bG51/3N1fP9qbXf/
+dXiB/3V3ff9sb3n/e32D/3V3ff9qbXf/am13/3Bzff9qbXf/dnh8/2ptd/9kZ3H/bG51/3Z4fP9ucHf/
+dnh8/3Byef9wc33/dXiB/25xe/97fof/bnF7/3Bzff9wc33/bnF7/3d5f/9ucXv/cHJ5/25wd/9wcnn/
+bnF7/25wd/9ucHf/cHN9/25xe/9zdn//cHN9/3N1fP9ucXv/bG95/25wd/93eX//bG95/3Byef9qbXf/
+bG51/25xe/9tb3P/dXd9/25wd/9ucXv/bnB3/3h5ff9wcnn/dXd9/2xudf9qbXf/bG51/2ptd/9qbHP/
+bG95/2Rncf9ucXv/ZGdx/2Jlbv9kZ3H/c3V8/25xe/9qbXf/bG51/25wd/9zdXz/c3V8/2Zobv9tb3P/
+bnB3/2xudf9ucHf/bG95/2RmbP9qbXf/bW93/25xef9rbnf/am13/25wd/9zdXz/bnB3/25wd/91d3z/
+dXd7/25wd/9tb3P/bW9z/3N1e/9sb3n/cnR6/3J0e/9xc3r/bG51/2psc/9ucHf/bG95/3Bzff91d33/
+bnB3/25wd/9wcnn/bG51/3Byef9ucHf/bnB3/2xvef9zdn//bnF7/3V4gf9ucXv/cHN9/3V4gf9zdXz/
+dXiB/3Bzff9zdXz/dXiB/3Bzff93eoP/dXiB/25xe/9wc33/bnB3/2xvef9tb3n/dHZ8/3h6g/9tb3j/
+cHN8/25wd/94eX3/Z2px/25weP9sbnb/cHJ5/3h6gf91eIH/cHN9/3t9g/91eIH/c3V8/3Byef9ucXv/
+cHJ5/25xe/9ucHf/d3qD/3Byef91d33/cHN9/3Byef9wc33/dXd9/2xvef91d33/cHJ5/2dqdP93eX//
+bnF7/3h5ff9nanH/dXd9/3V3ff9wcnn/b3F1/3N1fP9ucHf/d3l//21vc/9sbnX/bG51/25wd/9nanT/
+bnF7/2xudf9qbHP/dXd9/3V3ff9wc33/bnF7/2xudf9qbXf/am13/3V3ff9wcnn/dXd9/25wd/9qbXf/
+cHN9/25wd/9ucHf/bW9z/25xe/95e4H/bnB3/25xe/9ucHf/eXuB/3V4gf9ucXv/dXd9/25wd/9ucHf/
+c3Z//25wd/9ucHf/bG95/3Byef9ucXv/Z2px/25wd/9vcXX/b3F1/29xdf91d33/bnF7/2ptd/9kZmz/
+bnF7/2xudf91d33/Z2p0/2psc/9ucXv/c3V8/2dqdP9nanT/Z2p0/3Bzff9sb3n/bG51/3N1fP9maXP/
+bnF7/3Bzff9sbnX/amxz/2xvef9wc33/bnB3/3Byef9sb3n/c3Z//2xvef9sb3n/bG95/2xvef9zdn//
+b3F1/3l7gf93eX//c3V8/36Ahv93eX//bG95/2xvef95e4H/bnF7/3V4gf9ucHf/Z2px/25xe/93eX//
+bnF7/3d5f/9ucXv/c3V8/3Byef9tb3P/eXuB/2xudf9ucHf/cHJ5/25wd/9zdXz/bnB3/25wd/9sbnX/
+am13/2psc/9nanT/amxz/2ptd/9sbnX/c3V8/21vc/9qbHP/am13/2xvef9qbXf/d3l//2xudf9sb3n/
+am13/2ptd/9wc33/am13/3N1fP9wcnn/bnB3/25wd/9zdXz/bG95/3V3ff9vcXX/b3F1/21vc/9tb3P/
+am13/25xe/9maXP/bG95/2Zpc/9kZ3H/Z2p0/3N1fP9sb3n/Zmlz/2xvef9qbXf/c3V8/2xvef9maXP/
+bG51/25xe/9vcXX/bnB3/29xdf9nanH/bW9z/2ttdP9sb3n/bG92/2xudf9tb3P/c3V8/2xudf9ucHf/
+dHZ9/29xef9tb3P/bG51/2psc/9zdXz/a254/29xev9ydHv/b3J7/21vc/9nanH/bG51/2dqdP9qbXf/
+bnF7/2psc/9nanT/bG95/2psc/9qbXf/bG95/2Jlbv9qbHP/am13/2psc/9sb3n/bG51/2xvef9wc33/
+am13/3Z4fP9vcXX/bG51/3Byef9ucHf/c3V8/3Byef9sbnX/c3Z//25wd/9qbXf/Z2p0/29yfP94eoP/
+b3F4/3V3ff9ucHf/dXd9/2Zpc/9sb3n/am13/2xud/90dn3/cHJ6/2xudf94eX3/cHJ5/2xudf9qbXf/
+am13/2xudf9sbnX/am13/3N1fP9sbnX/dXd9/25wd/9tb3P/cHJ5/25xe/9qbHP/c3V8/21vc/9qbHP/
+dnh8/3Bzff91eIH/Z2px/25xe/9zdn//bnB3/25wd/9wc33/bG95/3d5f/9vcXX/bnF7/3N1fP9zdn//
+am13/3N2f/9zdn//bnB3/3d5f/93eoP/dXiB/3Bzff9wc33/bG95/2xvef91eIH/cHJ5/3N2f/9ucXv/
+b3F1/3V3ff9sb3n/cHJ5/29xdf9wcnn/d3l//25wd/9vcXX/bG51/3V4gf91eIH/cHJ5/3V4gf9wcnn/
+cHN9/3d5f/9ucHf/cHJ5/25wd/9sb3n/cHJ5/2psc/9ucHf/cHJ5/29xdf9sbnX/dnh8/25wd/9sbnX/
+Zmhu/25wd/9tb3P/dXd9/2ptd/9sbnX/bnF7/2xvef9kZ3H/Z2p0/2Zpc/9sb3n/Z2p0/2dqdP9wc33/
+Z2p0/3Bzff9wc33/am13/2xudf9ucXv/c3V8/25xe/9zdXz/bG51/3Byef9ucHf/bnB3/25wd/9vcXX/
+dXd9/2xudf94eX3/dXd9/3Byef93eoP/c3V8/2xudf9sbnX/eHl9/3Byef91d33/amxz/2Jkav9sbnX/
+bnF7/2psc/9wcnn/Z2px/2Zpc/9maXP/ZGdx/3Bzff9qbHP/amxz/2xvef9qbXf/am13/2ptd/9qbXf/
+bG51/2psc/9sbnX/bG51/2dqdP9qbXf/am13/25xe/9qbHP/bG51/2ptd/9wc33/am13/3N2f/9qbXf/
+cHN9/2ptd/9ucHf/dXd9/25wd/91d33/bnB3/3Byef9wcnn/cHJ5/21vc/9ucXv/bG51/25wd/9qbXf/
+am13/2ptd/9wc33/Z2p0/25xe/9qbHP/Z2px/2xvef93eX//c3Z//2xvef9ucXv/bnB3/3Z4fP9wcnn/
+amxz/2xudf9zdn//bnB3/2xvef9ucXv/Zmlz/25xe/9rbXT/b3J6/29xdv9ucHf/bnB3/3Bzff9sb3n/
+bnB3/3Z4fv9ucXr/b3F1/25wd/9tb3P/dnh+/2xvdv9tcHr/c3V7/29yfP9qbHP/YmVu/2xudf9qbXf/
+bG95/3N1fP9sbnX/bG51/25xe/9ucXv/bnF7/3N1fP9qbHP/cHJ5/25xe/9wcnn/d3l//29xdf91eIH/
+dXiB/3V4gf95e4H/c3V8/25wd/91eIH/bnF7/3N2f/93eoP/cHN9/3V4gf9ucXv/bG95/2ptd/9wc3z/
+dnh//3Byef91eIH/c3Z//3t+h/9wc33/d3mC/3Z4f/9ydHn/dHZ+/3BzfP9sbnb/cHN9/3Byef9tb3P/
+bG95/2xudf9vcXX/bnB3/2xvef9zdn//d3l//3l7gf93eoP/cHN9/3d6g/93eoP/bnB3/3d5f/9zdXz/
+cHN9/3t9g/9zdn//dXiB/2Zobv9ucHf/dXd9/2xvef9ucHf/c3Z//2xvef93eX//b3F1/25wd/9tb3P/
+cHJ5/2dqcf9ucXv/c3V8/2xvef91d33/eXyG/3d6g/91eIH/c3Z//25wd/9qbXf/eXuB/3Bzff9zdn//
+dXiB/3Bzff95fIb/dXd9/3l7gf91d33/eXuB/3+Bh/9zdn//dXiB/3Z4fP+Bg4r/f4GH/3d5f/99foH/
+dXd9/3d5f/9+f4P/eHl9/3h5ff93eX//d3l//3l8hv9ucXv/dXiB/3d6g/9zdXz/c3V8/3t9g/93eoP/
+c3Z//2xvef9zdn//dXiB/3l8hv9wc33/cHN9/25xe/93eX//bnB3/25wd/9sbnX/cHN9/25wd/9sb3n/
+cHN9/2xudf91d33/dXd9/3N1fP9vcXX/cHJ5/3h5ff9wcnn/dXd9/25xe/9zdn//cHN9/25wd/9wcnn/
+c3V8/3V4gf9zdn//e36H/3t+h/95fIb/f4GH/3t+h/9wc33/dXd9/3+Bh/97fYP/foGK/3d6g/9ucXv/
+dXiB/3l8hv9zdXz/eXuB/3Bzff9ucXv/bG95/25wd/95fIb/bnF7/25xe/9wc33/bnF7/3Bzff9wcnn/
+bnF7/3N1fP9wcnn/bnF7/2xvef9ucHf/bW9z/25wd/9zdXz/bnB3/2xvef9ucXv/d3l//25xe/93eoP/
+bnF7/3N2f/9wc33/bG95/3V3ff9sb3n/dnh8/25wd/9zdXz/bnB3/25xe/9ucHf/cHN9/2xudf9sbnX/
+bW9z/2ptd/9tb3P/cHN9/2ptd/9ucHf/Z2p0/2Zpc/9nanH/dXd9/3Byef9nanH/bG95/2xudf9wc33/
+am13/2dqdP9sbnX/bnF7/2ptd/9sb3n/bG95/2BjbP9nanT/amxz/2xvef9rbXX/bG51/2dqcf9nanT/
+ZGdx/2Zobv9qbXf/Zmlz/2Jlbv9nanH/ZGdx/25wd/9sb3j/bW92/3N1ef9tb3b/bnB3/2dqdP9ucHf/
+bnB3/25xe/9zdn//bnB3/2xvef9ucXv/bnF7/25xe/9zdn//am13/3Bzff9zdXz/cHN9/3l7gf9wcnn/
+c3Z//3Z4fP9zdXz/eHl9/2xudf9sbnX/cHJ5/25wd/9wcnn/c3V8/2psc/9wcnn/am13/2dqdP9qbHP/
+bnB3/3R3fv9rbnX/bnB3/21vdf91eIH/Z2p0/2xvef9sb3n/bG92/3R2ff9wc33/bG95/3Bzff9zdn//
+cHJ5/3N2f/9wc33/cHN9/3V4gf9zdXz/eXuB/2xudf9zdn//c3Z//2xvef9zdXz/dXd9/2xvef95e4H/
+cHJ5/25wd/91eIH/bnF7/3d6g/9maG7/bG95/3V3ff9sb3n/bnF7/3d6g/9wc33/eXuB/25wd/9ucHf/
+bW9z/3N1fP9qbHP/bnF7/2xvef9nanT/c3V8/3V3ff9qbXf/bG51/2xvef9qbHP/ZGdx/3N1fP9qbXf/
+cHJ5/25wd/9tb3P/cHJ5/2xudf9qbXf/amxz/2xvef93eX//Z2px/21vc/9sbnX/d3l//3N1fP9ucHf/
+dnh8/2xvef9ucHf/eHl9/29xdf9qbXf/amxz/25wd/9wcnn/bnB3/29xdf9tb3P/am13/2xudf9zdXz/
+bnF7/2ptd/9nanH/cHN9/2psc/9wc33/bG51/2xudf9sb3n/c3V8/2Rncf9nanH/YmVu/25xe/9nanT/
+bG51/3Bzff9qbXf/bG95/3Bzff9sb3n/bG51/25xe/93eX//cHN9/3d5f/9ucXv/c3Z//3Bzff9ucHf/
+bnB3/2xvef91d33/b3F1/3Z4fP94eX3/c3V8/3l7gf91d33/bG51/2dqdP93eX//bnB3/3l7gf9wcnn/
+Z2px/29xdf94eX3/bnB3/3l7gf9ucHf/bG95/3Bzff9ucXv/d3qD/3N2f/93eoP/e32D/3d5f/9+f4P/
+d3l//3d5f/97fYP/ent//3t+h/95e4H/eXuB/3l7gf97fYP/e32D/3V4gf93eX//fX6B/3+Bh/93eX//
+f4KM/3d6g/93eoP/cHN9/2xvef91d33/bnB3/3V3ff9qbXf/bG95/2ptd/9ucXv/amxz/2xvef9qbHP/
+amxz/2dqcf9nanH/Zmhu/2dqdP9nanH/bG51/2Rncf9dYGr/XWBq/2xvef9nanT/YGNs/2Zpc/9sb3n/
+bnF7/25xe/9qbXf/bG51/2xudf9ucHf/dXd9/3V3ff9maG7/bG51/3N1fP90dn7/cXN5/25wd/9vcXX/
+bnF7/2xvef9vcXX/dXd9/25xe/9qbXf/bG95/25wd/93eH3/c3V8/3N1e/93eX//c3Z//25xe/9nanT/
+bnB3/2xudf9ucHf/dnh8/25wd/9qbXf/bnF7/25xe/9wc33/bnF7/2xvef9ucXv/c3V8/25wd/9zdXz/
+bnB3/3V3ff92eHz/cHJ5/3V3ff9qbXf/bnB3/2xvef9ucHf/cHJ5/3Byef9nanT/cHJ5/25xe/9qbXf/
+bG51/25xe/90d37/cHN6/3V3gP9wc33/foGK/3N1fP91eIH/cXR9/21wev9ydX3/cHN8/2ptd/9sb3n/
+bG95/2xudf9nanT/Z2px/2Zpc/9maXP/Z2p0/25xe/9zdn//dXiB/3l7gf9wc33/c3Z//3d5f/9qbHP/
+d3l//29xdf9qbHP/c3V8/29xdf93eX//Z2px/25wd/94eX3/bnB3/3Byef91d33/cHJ5/3d5f/9sb3n/
+bG95/25wd/9ucHf/Z2p0/3Bzff9sb3n/bW9z/3N1fP91d33/bG95/2ptd/9ucXv/bW9z/2Zpc/91d33/
+bG95/3Bzff9qbXf/bG51/2xvef9qbHP/bG51/2psc/9qbXf/dXd9/2Rncf9qbHP/Zmlz/3Bzff9zdXz/
+Zmlz/3V3ff9qbHP/amxz/3V3ff9sbnX/am13/2dqdP9sb3n/bG95/2ptd/9qbXf/bW9z/29xdf9ucHf/
+eXuB/3Bzff9sb3n/am13/3Bzff9ucHf/eHl9/25xe/9wc33/d3qD/3t9g/9ucHf/bnB3/2ptd/93eoP/
+c3Z//3N1fP95e4H/c3V8/3N2f/91eIH/eXuB/3N1fP9zdn//d3qD/2ptd/9wc33/bG51/2ptd/9nanT/
+Zmlz/2Zpc/9iZW7/bG95/2psc/9wc33/dXd9/2xvef93eoP/bnF7/2ptd/9sbnX/dXd9/2ptd/95e4H/
+bnF7/2dqdP9sb3n/eHl9/29xdf93eX//bnB3/25xe/9ucXv/bnB3/3l7gf9ucXv/c3Z//3V4gf9zdXz/
+dXiB/3Bzff9wcnn/bnB3/3Byef91eIH/cHJ5/25wd/9sb3n/bG95/3Bzff9ucHf/bW9z/3V3ff94eX3/
+cHJ5/3l7gf9wcnn/bG95/25xe/9qbHP/c3V8/2ptd/9wc33/bW9z/3Byef9ucHf/c3V8/29xdf91d33/
+bG95/25xe/9ucHf/bG95/3Byef9wc33/bnB3/25xe/9zdXz/bG95/3N2f/97fof/e32D/25xe/93eoP/
+eXyG/3V4gf93eoP/cHJ5/25xe/9zdXz/c3V8/3Bzff9zdn//ZGdx/25wd/9tb3T/cXN6/3Fzev9ucXr/
+bnB3/2xvef9sb3n/b3F1/3d5f/9ucHf/bW9z/25wd/9ucHf/d3l//3J0ff9xdHv/cnR7/29xeP9ucHf/
+Z2px/25wd/9sbnX/bnB3/3N1fP9tb3P/Zmlz/2xvef9qbXf/cHJ5/3Byef9ucHf/bG51/21vc/9sbnX/
+bnF7/2xudf9wc33/c3V8/2xvef92eHz/bG51/2ptd/9sbnX/bnB3/3N1fP9ucHf/Z2p0/2xvef9ucHf/
+bG51/2psc/9vcXn/c3V7/25wdf9xc3r/bW9z/3d5f/9qbXf/am13/2ttdP9oa3X/c3Z9/3V3ff9sb3n/
+bnF7/3N1fP9sb3n/bnF7/2xvef9wcnn/c3V8/25wd/91eIH/am13/2xvef9sb3n/Z2px/2Zpc/9qbXf/
+XWBq/3Byef9maXP/XWBq/2xvef9maG7/c3V8/2Jlbv9qbXf/dXd9/2dqdP9ucXv/c3V8/2xudf9zdXz/
+bG51/2xudf9vcXX/cHJ5/29xdf9zdn//c3Z//3Bzff91eIH/eXyG/3V4gf9wc33/cHN9/25wd/9qbXf/
+d3l//25xe/9wcnn/bnB3/21vc/9zdXz/bG51/2ptd/9qbHP/bG95/3V3ff9iZW7/bG51/2Rncf9sb3n/
+cHJ5/2Jlbv9qbXf/Z2px/2Zobv9ucHf/Zmlz/2Rncf9kZ3H/Z2p0/2xudf9qbHP/bG51/2dqdP9sbnX/
+am13/3V3ff9ucXv/bnB3/2xvef9zdn//bG95/3h5ff9ucHf/cHJ5/3V3ff94eX3/bG51/2xudf9nanT/
+cHN9/25wd/9tb3P/bnF7/2ptd/9sb3n/bnF7/3Bzff9qbXf/bnF7/3d5f/9ucHf/c3Z//25wd/9ucXv/
+bnB3/2xvef9ucHf/am13/3d6g/9zdXz/eXuB/3t9g/91eIH/eXyG/3N2f/9ucHf/bG95/3l7gf9wcnn/
+d3qD/25xe/9nanT/bnB3/3l7gf9wcnn/eXyG/3Byef9ucXv/cHN9/25wd/93eoP/bnB3/25wd/9wc33/
+bnB3/3Z4fP9vcXX/bnB3/2xvef9ucHf/cHN9/2xvef9sb3n/bnB3/25wd/9zdXz/b3F1/29xdf91d33/
+dXd9/25wd/95e4H/cHJ5/2xvef9ucXv/Z2p0/3N1fP9qbXf/bG95/2psc/9sb3n/bG51/3Bzff9qbHP/
+cHN9/2ptd/9sb3n/amxz/2dqcf9qbHP/Z2p0/2Zobv9nanH/Z2px/2Rncf9maXP/c3V8/25xe/9maG7/
+c3V8/25wd/9sbnX/dnh8/2ptd/9sb3n/bnB3/25wd/9zdXz/dXd9/2dqcf9wcnn/bW9z/29xeP9sb3n/
+bXB6/2xvef9sb3n/bnB3/3Byef93eX//cHJ5/2xudf9ucHf/am13/3N1fP9sb3n/cXN6/3N1ff9vcXv/
+c3V8/2ptd/9ucHf/bnB3/25xe/9zdn//bnB3/2xudf9wcnn/cHN9/3N2f/9wc33/bnB3/25xe/9ucXv/
+cHJ5/3N2f/9wcnn/d3l//3V4gf9wc33/d3l//2ptd/9ucXv/bnB3/3Bzff9wc33/cHJ5/25wd/9wc33/
+cHJ5/2xudf9ucHf/b3F4/3N1ev9pbHP/a253/2Vocv9wcnn/ZGdx/2Vocv9laHL/YmVv/3J0fP9zdoD/
+am13/3Bzff9zdn//bnB3/25wd/9ucHf/cHJ5/3N1fP9ucHf/c3V8/2xvef9wc33/c3V8/21vc/91d33/
+dXd9/2psc/91eIH/bnB3/2Zobv91d33/bnB3/3d5f/9maXP/cHJ5/3h5ff9sbnX/c3V8/3Z4fP9sb3n/
+eHl9/25wd/9tb3P/bW9z/3Byef9qbHP/cHJ5/25wd/9sbnX/bG95/3N1fP9ucXv/bG95/2ptd/9sbnX/
+Z2p0/3d5f/9qbXf/cHJ5/3Byef9ucHf/c3V8/2ptd/9wcnn/b3F1/25wd/92eHz/Z2px/29xdf9sbnX/
+cHJ5/3Z4fP9sbnX/dXiB/25xe/9zdn//e36H/3Byef9wc33/c3V8/25xe/9ucXv/cHJ5/25xe/9sb3n/
+bnB3/2xvef93eX//c3V8/25xe/9wcnn/dXiB/2xvef93eX//bnB3/25xe/9ucXv/d3qD/25wd/9qbXf/
+am13/3N2f/9ucHf/bnB3/3Bzff9sb3n/c3Z//3N2f/93eX//bG95/3N1fP91eIH/bnF7/3V4gf9ucXv/
+cHN9/25xe/9wcnn/cHJ5/2ptd/9zdn//bnB3/3N2f/92eHz/cHN9/3t9g/9wcnn/bnB3/25wd/94eX3/
+bnB3/3d5f/9wcnn/Zmhu/25wd/92eHz/bnB3/3l8hv9wcnn/cHN9/3Bzff9zdXz/d3qD/3N2f/91eIH/
+dXiB/25wd/94eX3/bnB3/29xdf9sbnX/bnB3/3Byef9vcXX/bG51/21vc/9sbnX/cHJ5/2xudf9tb3P/
+cHN9/3Bzff9sbnX/bnB3/2ptd/9qbXf/bG95/2Rncf9qbXf/ZGdx/2xvef9qbXf/cHN9/2ptd/91d33/
+am13/3N1fP9ucXv/cHJ5/25wd/9ucHf/cHJ5/25xe/9qbXf/bnB3/25wd/9sb3n/bnB3/3V3ff91d33/
+Z2px/3N1fP9ucXv/bG95/3V4gf9wcnn/bnF7/2ptd/9ucXv/cHN9/3N2f/9nanT/cHN9/2hrcv9qbXf/
+bG52/3Fzev9sbnX/bnB3/21vc/9tb3P/eHqA/2xudf9sbnX/bnB3/25wd/92eHz/bXB6/3Byef9ydHr/
+cXN5/3N1fP9sb3n/cHJ5/25xe/9zdn//bnF7/2xvef9sb3n/cHN9/3Byef9wc33/c3Z//25xe/9ucHf/
+bnF7/3Bzff93eoP/c3V8/3t9g/97fYP/dXiB/3l7gf9zdn//d3qD/3V4gf93eoP/c3Z//3Bzff9wcnn/
+d3qD/3d6g/9wc33/c3V8/3N1fP93eoP/b3J6/3J0fP9rbnj/d3l//25wd/9wcnn/bW90/2xudf90dn3/
+dHd//2dqdP9sb3n/c3Z//2xvef9sb3n/bG95/25xe/9wc33/cHJ5/25xe/9ucXv/c3Z//3h5ff9ucHf/
+c3V8/3N1fP9qbXf/dXiB/3Byef9nanH/cHJ5/21vc/94eX3/Zmhu/25wd/94eX3/bG51/3N1fP91d33/
+am13/3d5f/9sbnX/bG51/2xudf9wcnn/bG51/3N1fP9wcnn/cHJ5/3Byef94eX3/c3V8/2xvef9sb3n/
+bW9z/2Zobv91d33/cHJ5/2xudf9ucHf/am13/3Byef9nanT/am13/2xudf9wcnn/eHl9/2psc/9tb3P/
+amxz/2xvef91d33/am13/3d5f/9qbXf/am13/3d5f/9sbnX/Z2p0/2xudf9ucHf/bG51/21vc/9nanT/
+Z2p0/2xudf9tb3P/dnh8/3Byef9ucHf/bW9z/25xe/9tb3P/c3V8/2xudf9ucHf/bnB3/3d6g/9ucHf/
+bG51/25wd/9zdn//bnB3/25wd/9wc33/bnF7/3N1fP91d33/d3l//3V4gf9zdn//eXuB/3N2f/93eoP/
+c3Z//3N2f/9sb3n/bnB3/25wd/9nanT/c3V8/21vc/9zdXz/c3V8/2xvef93eoP/bnF7/2ptd/9sbnX/
+c3V8/2dqdP91d33/Z2p0/11gav9kZ3H/bG95/2Zobv9wcnn/Zmhu/2ptd/9nanT/Z2px/3Byef9qbXf/
+am13/25xe/9sbnX/bnF7/2ptd/9qbXf/Zmlz/2xudf9wc33/bnB3/2xvef9vcXX/b3F1/3N1fP9ucHf/
+b3F1/3V3ff9ucHf/am13/3V3ff9wcnn/bG51/25xe/9qbXf/am13/2Zpc/9sb3n/bG95/25xe/9qbXf/
+cHN9/2xvef9wc33/bG95/2ptd/9nanH/amxz/2psc/9qbHP/Zmlz/2psc/9sbnX/amxz/2dqdP9ucXv/
+cHN9/2Zpc/9ucHf/bG95/2xudf93eX//bnB3/25xe/9sbnX/cHJ5/3N1fP9wc33/Z2p0/3Bzff9ydX7/
+cnV+/3F0fv9ydX7/cHN9/3Bzff9wcnn/cHJ5/3p9hv9wcnn/cHJ5/3V4gf9zdn//d3l//3J1fv9ydHz/
+dXZ8/3Fzef9zdXz/amxz/2ptd/9sbnX/am13/2ptd/9sbnX/ZGdx/2xudf9nanT/bG51/2xudf9sbnX/
+Z2p0/2xudf9sbnX/cHJ5/2psc/9zdXz/cHN9/2ptd/93eX//Z2p0/3Byef9ucHf/cHJ5/25xe/9qbXf/
+bnB3/3N1fP9zdn//Z2p0/29xdf9vcXb/dnh//3Bze/96fIL/cHN9/36Biv93eX//e32D/3J1fv9vcnv/
+c3aA/3N2gP9nanT/bG51/3Bzff9nanT/am13/2ptd/9sb3n/am13/2psc/9nanH/bnF7/3N2f/93eX//
+bnF7/3Bzff91eIH/bnF7/3d5f/9ucHf/amxz/3Byef9tb3P/d3l//2Zobv9ucXv/dXd9/25wd/91eIH/
+dXd9/2xvef93eoP/cHN9/2ptd/9vcXX/cHN9/25wd/91d33/cHJ5/25wd/9sb3n/eHl9/3N1fP9ucHf/
+bnB3/2xudf9iZW7/dXd9/2xvef9qbXf/bnB3/2xudf9ucXv/amxz/2xudf9tb3P/bnB3/3V3ff9kZ3H/
+bG51/2Zpc/9qbXf/cHN9/2dqdP93eX//bG51/2ptd/91d33/ZGdx/2Jlbv9maG7/amxz/2xudf9qbHP/
+Zmlz/2Zobv9maXP/ZGdx/2xvef9maXP/Zmlz/2dqcf9maXP/amxz/2xvef9sbnX/bG51/2xudf91d33/
+am13/2Zpc/9nanT/cHN9/2xudf9sbnX/bnB3/3Byef9zdXz/dnh8/3V4gf9wc33/c3Z//3t9g/9wc33/
+dXd9/3N1fP9wcnn/bnB3/25wd/9zdXz/bG95/3V3ff9wcnn/d3l//3V4gf9zdn//e36H/3d6g/9wcnn/
+c3V8/3d5f/9sb3n/dXiB/3Byef9nanH/bnB3/3d5f/9wcnn/d3qD/25wd/9wc33/bG95/25wd/92eHz/
+cHJ5/25wd/9ucHf/bG51/3Byef9ucHf/cHJ5/2dqdP9sb3n/c3Z//29xdf9ucHf/bW9z/2xvef9zdn//
+cHN9/3Byef91eIH/bnB3/21vc/94eX3/dXd9/25wd/9zdXz/b3F1/25wd/9qbHP/c3V8/3Byef9zdn//
+bnF7/3N1fP9wcnn/dXd9/3N1fP9sb3n/amxz/2xudf9qbXf/Z2px/2Zpc/9maXP/Z2px/2xudf9maXP/
+bG95/25xe/9nanT/bnF7/2xvef9tb3P/c3V8/2ptd/9qbXf/ZGdx/2xvef9nanT/bG95/2Jlbv9nanT/
+b3F4/25weP9vcXr/bG94/2tud/9qbXf/amxz/2Rncf9zdn//Z2p0/2ptd/9ucHf/bnB3/3Byef9ucHf/
+b3J3/21wev9oa3X/ZGdx/11gav9gY2z/Zmhu/2Rncf9maXP/ZGZs/1xfaP9maXP/YmVu/2Rncf9kZ3H/
+Zmlz/2psc/9qbHP/bG95/2ptd/9maXP/cHN9/3Bzff9qbXf/dXd9/2Zpc/9ucXv/bG95/3N1fP9zdXz/
+bnB3/2xvef9wc33/c3Z//2xudf9sbnX/bW9z/3J0e/9ucXn/cnR7/29xeP95e4H/bnB3/2xudf9qbXf/
+aWt0/25wef9zdn//bG95/3Bzff91eIH/cHN9/3Bzff9zdn//c3V8/21vc/9ucHf/bG51/2xvef9wc33/
+dXd9/2xudf9zdXz/bnF7/2Zpc/9zdXz/Z2p0/2Jlbv9ucXv/bG51/3V3ff9iZW7/cHN9/3d5f/9qbXf/
+bnF7/25xe/9sbnX/c3V8/2Zpc/9gY2z/Zmhu/2Zpc/9maXP/bG95/2psc/9nanH/Z2px/2xvef9sb3n/
+Z2px/2psc/9maXP/YGNs/3V3ff9qbXf/bG51/2ptd/9nanH/am13/2Jlbv9qbHP/Z2px/2ptd/9ucXv/
+Zmlz/2psc/9kZ3H/bnF7/3V3ff9nanT/dXd9/2xudf9wcnn/d3l//2Zpc/9nanH/bW9z/21vc/9sbnX/
+bnB3/25wd/9ucHf/c3V8/25wd/94eX3/bnF7/25xe/9sb3n/c3V8/21vc/94eX3/bG95/25wd/9ucHf/
+d3l//2ptd/9maXP/amxz/3N1fP9sbnX/b3F1/3Byef9vcXX/c3V8/3Z4fP91d33/bnB3/3Byef94eX3/
+bnF7/3V3ff91d33/bnF7/25wd/9sb3n/bG95/2xvef93eX//cHN9/3t9g/91eIH/cHN9/3V4gf9wc33/
+am13/3Byef9zdn//am13/3d5f/9zdn//Z2p0/29xdf95e4H/bnB3/3d5f/9ucHf/c3V8/2xudf9vcXX/
+dnh8/3V3ff9wc33/bnF7/3V4gf9wc33/bnB3/3Bzff9qbXf/cHJ5/3V4gf9zdn//c3Z//3N1fP91d33/
+eXuB/3d5f/9zdn//e32D/3V4gf9zdXz/eXuB/3N2f/9zdn//eXyG/3V3ff93eX//dnh8/3t9g/97fYP/
+dXiB/3Bzff91eIH/c3Z//3d6g/9zdn//cHN9/3N1fP9zdn//c3Z//3N1fP9sb3n/bnB3/25wd/9ucXv/
+am13/3Bzff9wc33/Z2p0/3N1fP9zdXz/b3F1/3V3ff9sbnX/cHJ5/2dqdP91d33/bnF7/3N2f/9qbXf/
+c3Z//25xe/9tcHn/b3J8/29ye/9ucXv/bnF7/25xe/9ucXv/fH+I/3J1fv9zdn//d3l//3t9g/96fIL/
+d3qA/3Z4ff92eX7/cnN6/2xudf9sbnX/Zmlz/2psc/9nanT/am13/2xudf9maXP/bnF7/2dqdP9tb3P/
+cHJ5/2xudf9sbnX/bG51/2xudf9wcnn/amxz/3N1fP9zdXz/bG51/3Byef9iZW7/am13/2ptd/9sb3n/
+Z2p0/2xudf9nanT/bnF7/25xe/9maXP/Z2p0/2xudf9wc33/bnF7/3N2ff9ydHz/gYOK/3V4gf91eIH/
+b3J8/25xev9zdX7/cnV//2hrdf9sb3n/bnB3/25wd/9wcnn/cHJ5/3N1fP9sbnX/am13/2ptd/9wcnn/
+dnh8/3d5f/9sb3n/cHN9/25xe/9ucHf/dnh8/2xvef9kZ3H/c3V8/2xudf94eX3/Z2px/3N2f/93eoP/
+bG95/3N2f/95e4H/bG95/3V4gf9ucXv/am13/25xe/9wc33/bnB3/25xe/9sb3n/bG95/25wd/92eHz/
+dXd9/29xdf9tb3P/Z2px/2dqcf91d33/am13/21vc/9wcnn/am13/2xvef9kZ3H/Z2p0/2Zobv9maXP/
+am13/2Rncf9maG7/XWBq/2Rncf9wcnn/YmVu/3Byef9maXP/Zmlz/3Byef9iZW7/YmVu/2psc/9nanT/
+bG51/2xudf9qbHP/bG51/25xe/9sb3n/dXd9/3Byef9ucHf/bG51/3N2f/9vcXX/eHl9/25wd/9vcXX/
+bnB3/3d5f/9ucHf/bnB3/25wd/91d33/bnB3/29xdf9wcnn/bG51/3Byef9zdn//d3l//3Bzff9wc33/
+d3l//2xvef9zdXz/dnh8/25xe/9ucHf/bnB3/29xdf9ucHf/dnh8/3Byef94eX3/dnh8/3N1fP92eHz/
+bnB3/2xudf9vcXX/c3V8/2psc/91d33/dXd9/2psc/9vcXX/d3l//3Byef93eX//bnF7/3N2f/9ucHf/
+b3F1/3h5ff9wc33/c3V8/25xe/9wc33/c3Z//25wd/9ucHf/bG95/25wd/9zdn//c3V8/25xe/9wc33/
+cHN9/3l8hv9zdn//cHN9/3d6g/9ucXv/bnB3/3t9g/93eoP/dXiB/3d6g/9wc33/c3Z//3N1fP9wc33/
+bnF7/3Bzff9wcnn/c3Z//3N2f/95e4H/c3Z//25xe/9vcXX/bnB3/2xvef9vcXX/am13/2xudf9vcXX/
+bnB3/2xudf9zdn//cHJ5/2xudf9wc33/bnF7/29xdf93eX//bnB3/3V4gf9ucXv/eXuB/3V4gf95e4H/
+Z2p0/2xvef9wc3z/dHeA/3Z5gv9ydX//b3F4/25wd/9ucHf/am13/3d5f/9ucHf/bnB3/2xudf9wcnn/
+bnF7/2xvef9tcHr/dXd+/3V4gP9wc33/cHJ5/2xvef9wc33/c3Z//3d6g/91eIH/cHN9/3d6g/9wc33/
+bnF7/3V4gf9zdn//cHN9/3Bzff9zdn//d3qD/3Bzff95fIb/e36H/3N2f/97fYP/cHN9/3t9g/9zdn//
+c3Z//3N2f/9sb3n/bG95/3N2f/9wc33/bG95/2xudf9ucHf/c3V8/2xud/9ucXr/a210/3d6g/9qbXf/
+bG51/2psc/9sbnX/b3J8/3BzfP9rbXT/bG51/25wd/9ucHf/bG95/3V4gf9zdn//cHN9/3N1fP9ucHf/
+bG95/3V3ff92eHz/bG51/3N1fP9ucHf/b3F1/3V3ff9sbnX/bG51/2xvef9qbXf/c3V8/2Rncf9zdXz/
+dnh8/2xudf9ucHf/dnh8/2xudf91d33/am13/2Rncf9qbHP/bnB3/2xudf9wc33/bG51/2xudf9qbXf/
+cHN9/3Byef9sbnX/bW9z/2psc/9qbHP/dXd9/2xvef9ucHf/c3V8/2xudf9ucHf/Zmhu/3Byef9tb3P/
+bnB3/25wd/9nanT/am13/2dqdP9ucXv/c3V8/2ptd/93eX//bnB3/25xe/94eX3/Zmhu/2dqdP9ucHf/
+bnB3/2xvef9ucHf/bnB3/25wd/9zdn//c3Z//3l7gf9ucXv/bnF7/3Bzff93eX//cHN9/3l7gf9zdXz/
+bnB3/3N2f/97fYP/cHJ5/25wd/9ucHf/c3Z//2xvef9wcnn/c3Z//2xvef9wcnn/c3V8/3Z4fP9ucXv/
+bG95/3d5f/9wc33/c3Z//3d5f/9ucXv/bnB3/3Byef9ucHf/bnB3/3d5f/9zdn//eXuB/3l7gf93eoP/
+d3l//25xe/9sbnX/b3F1/3N1fP9qbHP/c3V8/3N1fP9qbHP/bG51/3N1fP9tb3P/dXd9/2psc/9ucXv/
+bW9z/2xudf92eHz/c3V8/25wd/9wcnn/cHJ5/3N1fP9ucHf/bnB3/25wd/9vcXX/bnF7/2xvef9sb3n/
+bnF7/25xe/9zdn//c3Z//3Bzff95e4H/c3Z//3Bzff99foH/eXuB/36Ahv97fYP/d3l//3V3ff91d33/
+dXiB/3d6g/93eoP/c3Z//3d6g/93eoP/e36H/3l8hv93eoP/cHN9/3N1fP9zdn//cHN9/3Byef9sb3n/
+b3F1/25xe/9ucHf/bnF7/3Byef9qbHP/cHJ5/2xudf9tb3P/dnh8/2xudf9wc33/bG95/3N2f/9zdn//
+c3Z//2dqdP9sb3n/cHJ5/29yfP92eYD/cnV+/29xeP9tb3P/b3F1/2xudf93eX//bG51/2xudf9ucHf/
+c3V8/3V3ff9wc33/cnR8/3V3ff9xdH3/cHJ5/2xvef9qbXf/cHN8/25xe/9ucXv/c3V8/2ptd/9zdn//
+bnB3/2xudf90dn3/bnF7/2xudf9sbnX/cHJ5/25xe/9sbnX/cHJ5/3V3ff9tb3T/dHd9/2dqdP9zdXz/
+am13/2xvef9sb3n/am13/2Vocf9sb3n/am13/2Nmb/9qbHP/am13/3J0e/9ucHf/cXN6/2tud/93eoP/
+cHJ5/2xudf9sbnX/aGt0/21veP9xdH3/Z2p0/2ptd/9qbXf/am13/2ptd/9ucXv/dXd9/3Byef9vcXX/
+b3F1/25xe/9wc33/dXd9/2xudf9nanT/am13/2psc/91d33/bG51/2psc/9sbnX/Z2p0/3Byef9kZ3H/
+bG95/25xe/9sbnX/am13/3N1fP9qbHP/dXd9/2xvef9gY2z/Zmlz/2dqdP9nanH/bG95/2psc/9qbHP/
+Z2p0/2ptd/9qbXf/Z2px/2dqdP9kZ3H/ZGdx/3Byef9nanH/Z2px/2xvef9nanT/amxz/2BjbP9qbXf/
+amxz/2dqdP9qbXf/ZGdx/2dqcf9kZ3H/am13/25xe/9maXP/cHJ5/2ptd/9sb3n/dXd9/2Rncf9maXP/
+amxz/2xudf9sbnX/bG51/2ptd/9tb3P/bnF7/25xe/9zdXz/cHJ5/3Byef9sb3n/dXd9/2xudf9zdXz/
+am13/2ptd/9sbnX/cHJ5/2dqcf9kZ3H/Zmlz/2xvef9nanT/amxz/3N1fP9sbnX/bnB3/3V3ff94eX3/
+cHN9/29xdf94eX3/bG95/3N1fP91d33/bnB3/2xudf9tb3P/am13/2ptd/9zdXz/cHJ5/3N1fP91d33/
+c3V8/3h5ff9ucHf/bG95/21vc/9zdXz/Z2p0/3N1fP9zdXz/Zmlz/2dqdP9sb3n/bG51/3V3ff9vcXX/
+dXd9/2xudf9qbHP/dXd9/3N1fP9wcnn/cHN9/2xvef9ucXv/bnB3/25wd/9vcXX/bG51/2xudf9sbnX/
+b3F1/2xvef9ucXv/cHN9/25xe/9wcnn/dXiB/3N2f/9zdXz/dXiB/3N2f/93eoP/dXiB/3Bzff9wc33/
+cHJ5/3Bzff9zdn//c3Z//2xvef9ucXv/cHN9/3d5f/9zdn//bnF7/3N1fP9zdXz/c3Z//3N1fP9ucHf/
+cHJ5/3Bzff9zdn//cHN9/3V4gf9zdn//cHJ5/3Bzff9wcnn/cHJ5/3d6g/9ucHf/dXiB/3Byef95e4H/
+eXyG/36Ahv9zdn//c3Z//3Bzff9ydX//dnmA/3J1fv9zdn//bnB3/25wd/9sb3n/dXiB/2xvef9sbnX/
+cHJ5/3Z4fP92eHz/c3V7/3J0ff91d33/bnB3/21vd/9pbHb/Zmhx/2ttdf9sb3n/cXN6/3Fzev9tb3P/
+cHJ7/2ttdf9rbXT/cHN9/25xe/9tb3b/a254/25xev9ucXv/bG95/21wev9xdH7/b3F2/3Z4fv9qbXT/
+dXd9/3Bzff9xc3r/dXd9/3R2fv9sbnb/b3F5/29yfP9sb3b/bG52/2xudv9ydX//cXN7/3Z4fv9wcnn/
+foGK/3d6g/9ucHf/bnB3/25wdf9wc3v/dXd9/2ptdv9rbnf/bnB3/25wd/9ydHv/dHZ8/3N1fP9tcHn/
+bXB3/2tueP9ucXv/dXd9/3V3ff9sb3n/bnF7/25xe/9ucHf/eXuB/25xe/9vcXX/bG51/3N1fP92eHz/
+amxz/3V3ff91d33/bG51/2xudf94eX3/bnB3/3h5ff9zdXz/Z2p0/2xudf9ucHf/bW9z/3Byef9ucHf/
+bnB3/2xudf9zdXz/am13/2ptd/9qbXf/Z2p0/2Zpc/91d33/am13/2psc/9wcnn/amxz/2xudf9maG7/
+c3Z//2ptd/9ucXv/c3Z//2xvef9ucHf/b3F1/3V3ff92eHz/b3F1/3V3ff9ucHf/bnB3/3Z4fP9nanT/
+bnB3/3Byef9zdXz/bnB3/3Byef9ucHf/bnB3/3Byef9ucHf/c3V8/3Byef9ucXv/bG95/3V3ff9sbnX/
+bG95/2Zpc/9qbHP/am13/3N1fP9sbnX/amxz/2psc/9ucXv/bG51/2psc/9ucXv/am13/2psc/9ucXv/
+c3V8/2xvef9qbXf/dXd9/2xudf9ucXv/cHN9/2xvef9qbXf/bG51/2xudf9qbXf/cHN9/2xudf9zdXz/
+dXd9/3N2f/9zdn//bG95/3Byef9ucXv/c3V8/25wd/9zdn//d3l//2xvef9ucXv/cHN9/3Byef95e4H/
+cHN9/3l7gf9wc33/bG95/3l7gf9zdn//dXiB/3N2f/9wc33/c3V8/25wd/9wcnn/cHJ5/3Byef9wc33/
+cHJ5/2xvef9wc33/bnF7/3Byef9ucHf/bW9z/3Byef9wcnn/bG51/3N1fP9sbnX/bnF7/3Bzff9tb3P/
+b3F1/25wd/9ucHf/c3V8/3V3ff9sb3n/cHJ5/2xvef91d33/c3Z//3Byef9ucHf/c3Z//3V4gf93eX//
+dXd9/3h5ff95e4H/dnh8/3l7gf9/gYf/eXyG/3l7gf97fof/eXuB/3d5f/9/gYf/dXd9/3t9g/91d33/
+foCG/3t9g/97fof/c3Z//3N2f/9xc3r/cHN6/3J1fP9xc3v/cHJ5/2ptd/9nanT/Z2p0/3V3ff9qbHP/
+Z2px/2ptd/9ucXv/cHJ5/2lsdv9rbnj/b3J5/2xudf9rbnb/a252/2hqcv9naXH/a211/25xef9tcHr/
+a21z/3J0fP9tcHj/bG93/3F0fv9ydX3/b3F5/29xev9ydX3/dHd//3Byef9xdHz/eHqC/3V3ff94e4H/
+cXN6/3l8gv91d3//dnmB/3l7g/96fIP/c3V+/3d4fv92eID/dXd+/3F0fv9xc3v/d3qC/3h6gP99f4b/
+dnh//4OFjP9+f4P/ent//3d5f/94eoD/enyC/3p8gP9ydHv/cHN9/25xe/9vcnv/cnV+/3Z4gP92eH//
+cnV+/29yev9wc3v/cHJ5/3V3ff92eHz/bnB3/25xe/9wc33/bnF7/3l7gf9wc33/cHJ5/25xe/9wc33/
+c3Z//2dqdP91d33/dXd9/25xe/9wc33/e32D/3Byef97fof/d3qD/3N1fP9wc33/d3qD/3N2f/9zdn//
+c3Z//3N2f/9ucXv/bnF7/25xe/9ucHf/bnF7/2xvef9qbXf/d3qD/3N1fP9wc33/cHN9/25xe/9ucHf/
+Zmlz/3V3ff9sbnX/c3V8/3N1fP9ucHf/bnB3/29xdf9wcnn/dnh8/29xdf95e4H/b3F1/25wd/92eHz/
+Z2p0/2dqdP9ucHf/bnB3/21vc/9sbnX/bG51/2xudf9ucHf/bnB3/2xvef9sb3n/bG95/2ptd/92eHz/
+am13/25xe/9maXP/am13/2xudf9wc33/bG51/2Rncf9qbHP/am13/2psc/9qbHP/bG95/2ptd/9nanT/
+bG95/3N1fP9ucXv/am13/3N1fP91eIH/eXyG/3t9g/9zdn//c3Z//3Bzff9zdXz/bnB3/3N2f/9wcnn/
+dXiB/3l7gf91eIH/dXiB/3Bzff9wcnn/cHN9/3N1fP9vcXX/cHN9/3V3ff9qbXf/bG51/3N2f/9wcnn/
+d3l//2xudf9zdXz/bW9z/2xudf94eX3/c3Z//3V3ff9sb3n/bG95/25xe/9vcXX/bG51/29xdf9vcXX/
+bW9z/21vc/9vcXX/c3V8/2xudf9sb3n/bW9z/25wd/9wc33/cHJ5/29xdf94eX3/bnB3/3N2f/91d33/
+bW9z/2xudf9qbXf/bG51/25xe/9ucXv/bW9z/2xudf9ucHf/dXd9/25xe/9ucHf/amxz/2xudf9sbnX/
+bnB3/2xvef9ucHf/b3F1/2xudf9qbXf/c3Z//3N1fP91d33/dXiB/3N1fP91eIH/foGK/3N1fP93eoP/
+c3Z//3t+h/93eoP/e36H/3N1fP9zdn//cXN7/3N2gP96fIP/eXuB/3p8gv91d33/c3V8/3V3ff97fof/
+dXiB/3Bzff9wc33/dXd9/3V3ff90dnz/dXd+/3J1ff9ucXv/bXB5/3Bze/9pa3P/aWx2/3FzfP90d37/
+c3Z//3F0fP92eH//cnR9/3Bze/90d4H/dHeA/29yfP9xdHz/bXB4/29yfP9vcXv/bG95/21weP9tb3b/
+cHJ5/2ttc/92eHz/bnF6/25wef9ydX3/bXB6/25wd/9tcHn/bW92/29xd/9tb3b/bG54/3Fzd/90dnz/
+dHZ8/2xvef95fIb/cHN9/2xvef9wcnn/bnF7/3R2fP90dn3/cHJ6/21veP9tb3j/bG95/25xe/91d33/
+dHeA/3F0fP9zdn3/bnF6/3Bzff91eIH/d3l//25wd/9ucXv/bnB3/25wd/92eHz/bnB3/2ptd/9qbXf/
+bG51/25wd/9nanH/cHN9/3Bzff9qbXf/bnF7/3V3ff9tb3P/d3l//2xvef9nanT/Zmlz/2xvef9qbXf/
+bG95/2xudf9ucHf/bnB3/3Byef9ucXv/bnB3/25xe/9ucHf/am13/3N2f/9ucHf/bnF7/25wd/9qbXf/
+bG95/2psc/91d33/bG51/3N1fP9wcnn/bnB3/2xudf9sbnX/c3V8/3Bzff9qbHP/dXiB/2psc/9qbHP/
+c3V8/2Jlbv9dYGr/Z2px/2Rncf9maG7/Z2px/2dqcf9qbHP/bG95/2xudf9ucXv/bnB3/3V3ff9sb3n/
+d3l//25xe/9zdn//am13/25xe/9wc33/eXuB/3V4gf9sb3n/c3V8/3V4gf9zdn//d3l//36Ahv95e4H/
+dnh8/3l8hv9+gYr/e32D/3N2f/97fYP/bnB3/3N2f/93eX//cHN9/3N2f/9zdn//c3V8/3N1fP91eIH/
+c3Z//3l8hv97fYP/e32D/3Bzff9ucXv/cHJ5/3Bzff9zdn//c3V8/3V4gf95e4H/cHJ5/2dqdP9zdn//
+cHN9/3l7gf9sb3n/dXiB/25xe/9sbnX/dnh8/3Byef91d33/bG51/29xdf9ucHf/b3F1/2psc/9sbnX/
+bG51/21vc/9sbnX/bW9z/3Bzff9wcnn/cHJ5/3Byef9wcnn/dXiB/25xe/9sb3n/eXuB/25xe/9zdn//
+bnF7/25wd/9wcnn/bnF7/25wd/9ucXv/cHN9/25wd/9wcnn/cHJ5/3Z4fP9zdXz/cHJ5/2psc/9vcXX/
+bnB3/2xudf9ucHf/am13/2ptd/9qbHP/amxz/3Byef9sbnX/bG51/2xudf9tb3P/bG51/3Z4fP9sbnX/
+bnB3/21vc/9zdXz/bnF7/3Z4fP9tb3P/bG51/25xeP9ydX//dXd9/3V4gf91d33/bnB3/2ptd/9sb3n/
+dXiB/29xdf9sb3n/bnF7/3V3ff9zdXz/cHJ5/3Z4fP9xc3n/cHJ5/25wd/9ucXr/Zmlz/2psc/9wcnn/
+dXd7/25wd/9tb3P/dHd9/2tueP9sb3n/a210/21wef9sbnX/amxz/2hrdf9qbXT/am13/2psc/9ydX//
+cnV+/3N2f/9vcnz/eXuA/3J1f/91eIH/enyD/3x/hf95e4H/dnh+/3d5f/96fIH/cnV//3J1fv91eIH/
+eHuF/3p8g/91d33/foGK/3V4gf9wc33/cHN9/3N2f/91eIH/eXuB/3V4fv9wc33/c3Z//25xe/9zdn//
+eHqB/3V4gf9ydX7/dHZ8/25wd/9ucXv/cHN9/3N2f/9vcXX/bG95/25wd/9zdXz/dXd9/2xudf9sbnX/
+cHJ5/29xdf9ucXv/am13/3Bzff93eX//bnF7/3V3ff92eHz/b3F1/3d5f/9wcnn/bG51/2xudf9wcnn/
+cHJ5/2ptd/9tb3P/bnF7/2xvef9ucHf/b3F1/25wd/9wcnn/bG95/2xudf9ucHf/am13/25xe/9sbnX/
+am13/2ptd/9nanH/c3V8/2xudf9zdXz/bnF7/2xvef9sbnX/am13/3N1fP94eX3/bG95/3d5f/9ucHf/
+bnB3/3V4gf9sb3n/Z2p0/3V4gf9zdn//cHJ5/3N2f/9zdn//dXiB/3V4gf91eIH/e32D/3d6g/95e4H/
+c3Z//3l8hv91eIH/eXyG/3Bzff91eIH/dXiB/3t9g/93eoP/bnF7/3V4gf95fIb/bnF7/3Byef9ucXv/
+cHJ5/25wd/9zdn//dXiB/3V4gf9wcnn/c3Z//2xvef9qbXf/c3V8/2xvef9nanT/Z2px/2Zpc/9maG7/
+Zmlz/2Zobv9maXP/am13/2xvef9qbHP/bG51/2Zpc/9nanT/bG51/2psc/9ucXv/cHN9/2psc/9nanH/
+bG95/2ptd/9zdn//Z2p0/25xe/9sb3n/am13/3N1fP9ucXv/cHN9/2ptd/9qbXf/bG95/29xdf9sbnX/
+bG51/2xudf9tb3P/bG51/25wd/9wcnn/bW9z/2xvef9qbXf/cHJ5/3N1fP9sb3n/am13/3N1fP9sb3n/
+c3V8/2xudf9ucHf/bnB3/2xvef9ucHf/bnF7/3N2f/9ucHf/cHJ5/3Byef9zdXz/cHJ5/25xe/9sb3n/
+bG95/25wd/9sb3n/bG95/2xvef9sbnX/bG51/2xudf9wc33/bnB3/3Byef9ucHf/bnB3/25xe/94eX3/
+bnB3/3Byef9ucHf/dXd9/3N2f/93eX//b3F1/29xdf9ucHf/dHZ9/3N1fP91d33/eHl9/3Byef9sbnX/
+bnB3/3d5f/9vcXX/bnB3/3Byef92eHz/bnB3/3Byef9wc33/am13/2xvef9qbXf/am13/2dqdP9maXP/
+amxz/3N1fP9nanT/Z2px/2xvef9kZ3H/Zmhu/2RmbP9nanT/Zmhu/2dqcf9kZ3H/Zmhu/2Zobv9kZ3H/
+d3qD/3V4gf93eoP/dXd9/31+gf93eoP/dXiB/3l7gf91eIH/cHN9/3N2f/91eIH/eXyG/3d5f/91d33/
+d3l//3+Bh/97fYP/c3V8/3+Bh/91eIH/c3V8/3N1fP9wc33/d3l//3l8hv97fYP/c3Z//3N2f/9sb3n/
+bnF7/3Bzff9wc33/cHN9/3V3ff9ucXv/bnF7/3Byef9zdXz/bnB3/25wd/9tb3P/cHJ5/25xe/9ucHf/
+bnF7/2xvef9ucXv/cHN9/3N1fP91eIH/d3l//2xvef9zdn//dXiB/25xe/97fYP/dXiB/3V3ff9zdn//
+d3l//3l7gf95e4H/dnh8/3d6g/91d33/eXuB/3h5ff96e3//e32D/3d5f/91d33/fn+D/3V3ff97fYP/
+d3l//3d5f/91d33/cHN9/3d6g/9zdn//eXyG/3N2f/9wcnn/c3V8/3N1fP95e4H/e32D/3N1fP97fof/
+cHN9/3Bzff97fof/am13/2Zpc/9ucHf/bG95/29xdf9sbnX/bW9z/2ptd/9sbnX/bnB3/3N1fP91d33/
+eHl9/25wd/93eX//bnB3/25xe/9nanH/bG51/25wd/9zdXz/c3V8/2dqcf9ucHf/c3V8/2psc/9vcXX/
+bnB3/25wd/9qbXf/cHN9/3d5f/9zdXz/bnB3/25wd/9wcnn/cHN9/3h5ff91d33/b3F1/29xdf9ucHf/
+b3F1/3Byef9sbnX/cHJ5/3Byef91d33/bG51/3Byef9qbHP/bnB3/3Byef9vcXX/dXiB/3V4gf9wcnn/
+bnB3/3N2f/9sb3n/eXuB/25wd/9wc33/cHJ5/2xvef93eX//c3Z//3d5f/9ucXv/bG95/3Bzff9ucXv/
+bG95/25xe/9wcnn/c3V8/3V3ff9zdn//d3qD/3N1fP9wcnn/bnF7/3V4gf9+gIb/dXiB/3Bzff93eoP/
+c3Z//3l8hv9zdn//bG95/2xvef9ucXv/cHJ5/3Bzff91eIH/bnF7/25xe/9wcnn/c3Z//3Bzff9wcnn/
+Z2p0/25wd/9vcXX/bnB3/25wd/9ucHf/bG51/25wd/9qbXf/cHN9/29xdf9vcXX/bnF7/3Bzff9zdn//
+eXuB/3N1fP91eIH/bnB3/3V4gf91d33/d3l//3Byef9wcnn/bG95/3N2f/9wc33/c3Z//3Z4fP9wcnn/
+bG51/2xudf92eHz/bG51/2ptd/9sb3n/cHN9/2xvef9nanT/Z2p0/2xvef9qbXf/Zmlz/2Zpc/9maXP/
+Zmlz/2xudf91d33/bnB3/3Byef9zdXz/bG95/3Bzff9sb3n/cHN9/3Byef9zdn//c3V8/3Bzff9zdXz/
+cHN9/3Byef9sbnX/bG95/2xudf9wcnn/bnB3/25wd/9zdXz/cHJ5/25xe/9qbXf/bG51/2ptd/9qbHP/
+am13/2psc/9zdn//bnF7/2psc/93eoP/bG95/2dqdP9sbnX/bG95/3N1fP91eIH/dnh8/3Byef9zdXz/
+b3F1/21vc/9ucXv/cHN9/25xe/92eHz/cHJ5/3Byef9wcnn/c3V8/2xudf9wcnn/bW9z/3Bzff9qbXf/
+amxz/2xvef9ucHf/bnB3/2xudf9tb3P/c3V8/3V3ff9sbnX/bG95/25xe/9sbnX/c3V8/2xvef9qbXf/
+Z2p0/2xudf9qbXf/am13/2xudf9sbnX/bG51/25wd/9ucHf/bG95/25xe/9sb3n/bnB3/3N1fP9tb3P/
+cHJ5/25wd/9sbnX/bW9z/2dqcf9ucXv/Z2p0/2ptd/9sbnX/amxz/2xudf9ucHf/eHl9/3d5f/9vcXX/
+dXd9/25wd/9ucHf/eXyG/2ptd/9qbHP/bG95/2xvef9wcnn/bnF7/3Byef9sb3n/bnB3/3Bzff9zdn//
+d3qD/3t9g/9zdn//d3qD/3N1fP9zdXz/am13/3Bzff9ucXv/cHN9/3N2f/9nanT/cHN9/25xe/9nanH/
+amxz/2xudf9qbXf/bG51/25xe/93eX//c3V8/29xdf9ucXv/bnB3/3N1fP92eHz/c3V8/2xudf9sb3n/
+bG95/25xe/91eIH/c3Z//3N2f/9wc33/dXd9/2xudf9zdXz/amxz/21vc/9ucHf/b3F1/3V3ff9zdXz/
+b3F1/25wd/91d33/cHJ5/3l7gf9sbnX/dXd9/3Byef9ucHf/c3V8/25xe/9wc33/bG95/2xudf9wc33/
+bG51/2Rncf9qbXf/am13/2dqdP9maXP/am13/3Byef9sbnX/bW9z/25wd/9ucXv/dXd9/2xvef9sb3n/
+c3V8/29xdf92eHz/bnB3/2xudf9qbXf/bnB3/29xdf9vcXX/cHJ5/29xdf91d33/cHJ5/3V3ff9wc33/
+bnF7/3Byef9zdn//cHJ5/3N1fP9wcnn/bnB3/2ptd/9sb3n/am13/3N1fP9vcXX/bW9z/25wd/9ucXv/
+bnF7/3l7gf9vcXX/c3V8/21vc/93eX//c3V8/3V3ff9vcXX/bnB3/2xudf9wcnn/bnF7/3N1fP9ucXv/
+cHJ5/2dqdP9sbnX/eHl9/29xdf9zdXz/dXd9/3Z4fP9zdXz/bnB3/2xvef9sb3n/cHJ5/3Byef9ucHf/
+bnB3/2psc/9sbnX/d3l//25wd/9ucXv/bG95/2xvef9zdXz/bnB3/3Byef9sbnX/bnB3/2xudf9sbnX/
+bG51/2ptd/9ucHf/bnB3/3Byef9ucHf/cHN9/3Byef9zdXz/c3Z//3V4gf91eIH/c3Z//3N2f/91eIH/
+c3V8/3N2f/9zdXz/e36H/3N2f/9ucXv/eXyG/3Bzff9sb3n/bG95/3Bzff9zdn//e36H/3t9g/9zdn//
+c3Z//25wd/9ucXv/cHN9/3Z4fP91d33/d3l//3V3ff9ucHf/cHN9/3V4gf9ucXv/c3Z//2xvef9zdn//
+bnF7/25wd/9ucXv/bnB3/3N1fP9ucHf/b3F1/2xvef9zdXz/amxz/2xvef9wc33/am13/25xe/9wcnn/
+bG51/2dqcf9ucHf/bG51/25wd/9qbXf/cHJ5/25wd/9wcnn/bG51/25wd/9zdXz/bnB3/25wd/9zdXz/
+amxz/25wd/9sbnX/bG51/21vc/9maG7/bG95/2dqdP9qbHP/bG51/2dqcf9nanH/Zmhu/3Byef9wcnn/
+Z2px/25wd/9gY2z/ZGZs/3Byef9iZW7/XWBq/2BjbP9maG7/ZGdx/2Zobv9maG7/ZGdx/2Zpc/9nanT/
+bnF7/3Bzff9zdXz/bG95/3V3ff9qbXf/bG51/2dqdP9qbHP/am13/2xvef9wcnn/amxz/3Byef9ucXv/
+Z2p0/2ptd/9ucHf/bnB3/21vc/9sb3n/c3V8/3V3ff9sbnX/bG51/2dqdP9nanT/cHJ5/25xe/9qbXf/
+bnB3/2Zpc/9maXP/am13/2xvef9ucXv/bnF7/3Bzff9ucHf/bnF7/2ptd/9sbnX/bnB3/21vc/9ucXv/
+bnF7/2xudf9nanT/dXd9/2ptd/9zdn//amxz/2ptd/9nanT/amxz/2xvef9ucXv/bG95/25wd/9sbnX/
+bnB3/2xudf9qbHP/bnB3/29xdf9ucHf/am13/25wd/9ucXv/bG95/2xvef9wc33/bnF7/3l7gf9wc33/
+cHJ5/3V4gf9wc33/eXuB/3Bzff9sb3n/cHJ5/25wd/9ucHf/bW9z/3Byef9tb3P/cHJ5/25wd/9zdXz/
+bG51/25wd/9nanT/bG51/2psc/9sbnX/bnB3/21vc/9sbnX/bnB3/25wd/9zdXz/bnB3/29xdf9vcXX/
+cHJ5/3Bzff91eIH/bnB3/3Bzff9wcnn/e36H/3d6g/95e4H/cHN9/3N1fP9ydHz/enyC/3p8gv99f4X/
+fn+D/3t9g/92eHz/d3qD/3t+h/9wc33/d3qD/3t9g/97fYP/d3qD/3d6g/94e4X/dXiB/3Z5gv9ydX7/
+dHeA/3Fzev9rbnj/bnB3/3d4ff9vcnz/cnV+/25xe/9vcXn/bnB3/21vdv9tb3b/bG51/25wd/9ucHT/
+bnB4/21wef9sb3n/bnB3/2ttdP9pa3X/aGty/2tueP9pa3X/a210/2tueP9sb3b/c3V7/25wd/9tb3b/
+cHJ5/21vdv9ucHf/bG51/3h6gP9ucHf/am13/3N2f/9qbHP/YmVu/2Jlbv9maXP/Z2p0/3N1fP9tcHr/
+bG95/2ptd/9oanT/am13/2xvef9xc33/cHN8/3R2fP9sb3n/amxz/2dqdP9ucXv/bG95/3V3ff9tb3P/
+cHN9/2ptd/9sb3n/am13/2xudf9wcnn/bnB3/21vc/9wcnn/dXd9/2ptd/9ucXv/cHN9/2xudf9wcnn/
+c3V8/2xudf9kZ3H/am13/25wd/9wcnn/bG51/2xvef9sbnX/am13/2Zpc/9maXP/bG95/2ptd/9qbXf/
+am13/2dqdP9nanT/Zmlz/2Zpc/9nanT/YmVu/2xvef9maXP/Z2px/2xudf9qbHP/Z2p0/2psc/9zdXz/
+cHN9/2dqdP9wcnn/amxz/2psc/91d33/Z2p0/2Rncf9maXP/bG95/2dqdP9sbnX/Z2px/2dqcf9nanT/
+Z2p0/3Bzff9wc33/cHJ5/2dqdP9wcnn/Z2p0/2dqcf9maXP/Zmlz/2ptd/9nanT/am13/2Rncf9sbnX/
+bG95/2Jlbv9nanT/bG51/2xvef9nanH/Z2p0/25xe/9ucXv/amxz/2dqcf9sbnX/bG95/3d5f/9wcnn/
+bnB3/3Byef9sbnX/bG51/3V3ff9ucHf/bnB3/3Byef9ucXv/bG95/3Byef9qbXf/bG51/2xvef9sbnX/
+c3V8/3Byef9vcXX/bG51/3Z4fP9zdXz/eHl9/25wd/9wcnn/bnB3/2xudf9wcnn/cHN9/3Byef9ucHf/
+bnB3/3Byef9sbnX/ZGdx/2xudf9sbnX/Z2p0/2dqdP9sbnX/bnB3/25wd/9vcXX/cHN9/3Byef94eX3/
+cHJ5/2xvef9wc33/cHN9/3d5f/9sb3n/bG95/25xe/9sb3n/bnB3/29xdf9wcnn/bG51/25wd/9wcnn/
+c3Z//25xe/9wc33/bnB3/3N1fP9zdXz/dXiB/2ptd/9ucHf/bG51/2xudf9sbnX/bnF7/2ptd/9sbnX/
+bG51/2xvef9wc33/dXd9/21vc/9zdXz/bnB3/3h5ff9wc33/eXuB/25xe/9qbXf/b3F4/3Bzff9ydHz/
+dHZ9/3V3ff9qbXf/bG51/3N1fP94eX3/bnB3/3N2f/92eHz/dXd9/3Byef9ucXv/cXR9/29xeP9xc3r/
+bnB3/25wev9pa3T/Z2p0/2ttdf9xc3v/bXB6/2xveP9rbnj/am12/2ZpcP9oanH/amxz/2dqcv9kZ3H/
+ZWhy/2Zpc/9maXD/Z2lv/3Bzff9tb3f/b3F6/21vdv9vcnv/bnB3/25wd/9vcXj/cXN6/3J0ev9ucHj/
+bXB6/29yfP9vcXb/bG95/2ttdf90d3//bG52/2xudv91d33/am13/2Rncf9nanT/bG95/21wev90d4D/
+cnR8/3Bzff9rbnj/am13/21wev9vcnz/cXR+/29yfP9zdX3/bXB6/2ptd/9nanT/bG95/2ptd/9ucXv/
+amxz/25xe/9qbXf/bG51/2ptd/9qbXf/bG95/2xvef9qbHP/bnF7/3V3ff9qbHP/bG95/3N1fP9sb3n/
+bG95/3Byef9vcXX/Zmlz/25wd/9zdXz/c3Z//3Byef9zdn//cHN9/25xe/9qbXf/bnB3/3N2f/9wc33/
+bG95/3Byef9sbnX/cHN9/25wd/9wcnn/bG95/2dqdP9wcnn/am13/3Byef9wc33/bG95/2xvef9vcXX/
+d3l//3d5f/9zdXz/c3V8/2ptd/9sb3n/d3l//2xudf9sbnX/Z2p0/3Byef9ucHf/bG51/2xudf9tb3P/
+bG95/2ptd/9zdXz/cHN9/3N1fP9sb3n/bnF7/2Zpc/9nanH/ZGdx/2dqdP9sb3n/am13/3Byef9nanH/
+bG51/3N1fP9kZmz/amxz/25wd/9wcnn/bG51/3Bzff9wc33/d3l//2xvef9qbXf/Z2px/2ptd/9zdXz/
+Z2p0/2dqcf9qbXf/Zmlz/2psc/9qbXf/ZGdx/2Zobv9maXP/am13/2dqcf9nanT/amxz/2ptd/9ucXv/
+bG51/3Byef9ucHf/b3F1/2psc/92eHz/cHJ5/3Z4fP9ucHf/cHJ5/3Byef9ucHf/c3V8/3V4gf9wc33/
+c3V8/2xvef9wc33/bnB3/2dqdP9vcXX/b3F1/25wd/9sbnX/bG95/25wd/9sbnX/am13/25xe/9qbXf/
+dnh8/2xudf9tb3P/cHJ5/3Byef91d33/bG51/2dqdP9sb3n/am13/2dqdP9sbnX/bnF7/25wd/9wcnn/
+am13/3Bzff9ucHf/cHJ5/2xvef9ucHf/bG95/3Bzff9qbXf/cHJ5/2xvef9ucHf/bG95/3N2f/9sb3n/
+bG95/25wd/9wc33/dXiB/3l8hv9ucHf/dXiB/25xe/93eoP/c3Z//3d6g/9ucXv/am13/21weP9xc3v/
+b3F5/3R3fP90dnz/bnF7/21vc/9ucHf/dXd9/2ptd/9sb3n/bnF7/3N1fP9sbnX/bnB4/25xev9ucHj/
+bnF5/25wd/9tcHr/Z2p0/2xvd/9tcHj/cnV9/3Bze/9ydHv/cHN9/3BzfP9vcnz/dHZ8/3N1e/9xc3r/
+bnB5/3J0e/9wcnv/bnF5/21weP9ydHv/bG51/3Fze/9rbXb/bXB6/3Byef9sb3n/bG95/2xvef9rbXb/
+aWx0/21weP9pbHb/b3F6/2lsdv9rbnb/bnF6/2ptdv9qbXf/c3V8/2xvef9kZ3H/Zmlz/2xvef9qbXf/
+cHN7/2xvef9ucHn/am12/2tudv9tb3b/bW92/29yfP9ucHn/dXh//3Fzev91d33/dXd9/3V4gf9wc33/
+c3Z//3Byef91d33/bnB3/29xdf9wc33/bnF7/3N2f/9zdn//bnB3/3d5f/95e4H/cHJ5/3Bzff95e4H/
+dXiB/3d6g/9wc33/cHJ5/25xe/9wc33/dXiB/3l7gf9zdXz/c3Z//25xe/9wc33/bnB3/3Byef93eX//
+cHN9/25wd/9ucHf/Z2px/3Byef9ucHf/bW9z/2dqdP9iZW7/am13/2Rncf9sbnX/c3V8/3N1fP9sbnX/
+b3F1/3h5ff93eX//dXiB/3N2f/9sb3n/cHN9/3l7gf9ucHf/cHN9/3V3ff97fYP/eXuB/3l7gf93eX//
+dnh8/3t9g/95e4H/foGK/36Biv9/goz/f4GH/35/g/92eHz/dXiB/3Z4fP92eHz/e32D/3l7gf95fIb/
+c3Z//3V4gf93eoP/Zmlz/2ptd/9zdXz/cHJ5/2dqdP9ucXv/bnF7/3V3ff9sb3n/amxz/25wd/9wcnn/
+d3qD/3Bzff9ucXv/c3Z//2ptd/9ucHf/dXd9/25wd/9sb3n/cHJ5/3Bzff9wc33/c3Z//25wd/9sb3n/
+cHN9/25xe/91eIH/c3Z//25xe/9sb3n/e32D/3l8hv95fIb/c3Z//3V4gf9ucXv/bnF7/3V4gf95fIb/
+d3qD/3V4gf9zdn//d3qD/3Bzff9ucXv/bnB3/2xvef9sb3n/bG95/3N2f/91eIH/cHJ5/2xvef91d33/
+cHN9/3d5f/9ucHf/am13/3Byef9wcnn/dnh8/25wd/9sb3n/c3V8/29xdf9qbXf/bG95/3N1fP9wcnn/
+c3Z//3N2f/93eoP/cHN9/3V4gf9wc33/bnF7/25wd/9zdn//bG95/3Byef9ucHf/bG95/2xvef9zdn//
+bG95/25wd/9ucHf/c3V8/3Byef91d33/amxz/25xe/9qbHP/c3V8/2xvef9ucHf/Zmlz/2Rncf9sb3f/
+b3J8/2ttdP9ucXr/cnR7/2xvef9tb3P/bnB3/3V3ff9sbnX/cHN9/3N2f/91d33/cHN9/29yfP9zdXz/
+bnF7/3F0fv90dn3/cXN7/2hrdf9vcXn/b3F5/3N2gP9wcnn/cXN8/3Bzff9ydHv/cnV+/3Z5gv92eYH/
+c3Z+/25xe/9zdn7/cnR9/3J1ff9tcHn/cXR9/3Fzev90d4D/bXB6/3N2gP9wc3z/b3J8/3F0ff9vcnz/
+b3F6/21wd/9ydX3/cHJ7/3J0e/9tb3f/a252/3N1fv9tcHj/cHJ5/3Z4f/9zdXz/Z2px/2psc/9wcnr/
+bW92/3J0e/9ucHn/bnF5/2xvd/9ucHT/cHJ5/21vdv9xc3r/b3F4/3N1e/9vcXn/bG95/25xe/91d33/
+c3V8/3N1fP9qbXf/c3V8/2xudf9sbnX/am13/2xudf9wcnn/cHJ5/21vc/92eHz/d3l//2ptd/9ucXv/
+dnh8/3Byef9wcnn/cHJ5/2xudf9maG7/bG51/3N1fP9wc33/bG51/2ptd/9sbnX/amxz/2ptd/9vcXX/
+dnh8/25xe/9ucHf/bG51/2dqdP9ucXv/cHJ5/25wd/9sbnX/Zmlz/3Bzff9nanT/bnF7/3N2f/9wc33/
+am13/25xe/93eoP/e32D/3V4gf95e4H/cHJ5/3Bzff97fYP/bnB3/3Byef9ucHf/cHN9/25xe/9wc33/
+bnB3/25wd/9ucHf/bW9z/3V3ff9wc33/dXiB/2xvef9wc33/bG51/3Byef9sb3n/bnB3/3N2f/9wcnn/
+c3V8/2psc/9zdXz/c3V8/2dqcf9sbnX/cHJ5/2xudf9sbnX/c3V8/3Byef91d33/dXd9/3Byef9wcnn/
+c3Z//3d6g/9ucXv/bnB3/3N2f/9ucHf/cHJ5/3d6g/9zdn//dXiB/3l8hv97fYP/fX6B/3t9g/91d33/
+d3qD/3l8hv93eX//fn+D/3t9g/97fYP/cHJ5/31+gf97fYP/fn+D/3l7gf9+gIb/d3l//3l7gf9zdn//
+d3qD/3t9g/91eIH/dXiB/3N2f/9zdXz/c3V8/3N1fP9wc33/bG95/3N1fP93eoP/c3Z//3N1fP9sb3n/
+cHN9/3Bzff93eX//cHJ5/2ptd/9wcnn/bG95/3V3ff9sbnX/bnB3/3V3ff9ucHf/amxz/25wd/9zdXz/
+bG95/25wd/9sbnX/cHJ5/25wd/91d33/bnB3/25wd/9ucHf/dXd9/2xudf9sbnX/bW9z/2ptd/9qbXf/
+cHN9/2xudf9wcnn/bG51/2ptd/9qbXf/dXd9/2psc/9sb3n/Z2px/3N1fP9qbXf/bnB3/2Zpc/9dYGr/
+a210/29yfP9sbnX/bW92/3Fzev9sb3n/amxz/2xvef9ucXv/bG51/2xvef9zdXz/bnF7/2ptd/9rbnf/
+b3F4/21wev90dnv/dHd7/29xef9maW//bW93/3J0e/9zdXz/bnB4/3Byef9wc3z/dHd//3R3f/94eoP/
+dnmC/3V3gP9rbnf/c3V9/29yfP9vcnz/bnB2/21vdv9qbHL/b3J5/2xveP9sb3n/bXB6/21weP9tb3b/
+bG53/21weP9pa3P/cHJ6/29yev9ydHn/bnB3/25wdf91d33/bnF7/3J0fP93eX//c3V8/2Zobv9sbnX/
+c3V8/3BzfP91dnv/cnR5/3N1e/9xc3j/bW91/21veP9sbnT/bW92/29yev91d3//cHJ5/3Bzff91d33/
+d3l//3N1fP91d33/bG95/3l7gf9ucXv/bnB3/25xe/9sb3n/dXiB/3V4gf9ucXv/dXd9/3N2f/9nanT/
+bnF7/3l7gf9wc33/c3Z//3N2f/9sb3n/Z2p0/29xdf91eIH/c3Z//25wd/9ucHf/cHJ5/2xudf9ucHf/
+bG51/3Z4fP9wc33/cHJ5/3N2f/9nanT/cHN9/3Bzff9wcnn/bnF7/2ptd/95e4H/bG95/3N1fP95fIb/
+e32D/3N1fP9zdn//foGK/3l7gf91eIH/dXiB/3Byef9wc33/e36H/3V3ff91d33/dnh8/3t9g/95e4H/
+dXiB/3N2f/9zdXz/c3Z//3N1fP93eX//c3Z//3t+h/93eoP/eXuB/3N1fP9ucXv/bG95/2xvef9zdn//
+cHN9/3Bzff9sb3n/cHN9/3N1fP9qbHP/bG51/3Byef9sbnX/amxz/3Bzff9wcnn/dXiB/3V3ff9wc33/
+bW9z/2xvef9ucXv/bnF7/2xudf9zdXz/bG51/2xudf9ucXv/am13/25wd/9wcnn/bG95/3N2f/9zdXz/
+bnB3/2xvef9wcnn/b3F1/3Z4fP9wcnn/cHJ5/2Zobv9ucXv/bnF7/3N1fP9qbXf/bnF7/21vc/9ucXv/
+bG51/2xvef9ucXv/bG51/2psc/9qbXf/ZGdx/2Zpc/9nanH/bG51/2Jlbv9nanT/bG95/2ptd/9qbHP/
+Z2p0/2xvef9ucXv/dXd9/3Byef9ucHf/cHN9/3Bzff97fYP/cHN9/25wd/93eoP/cHN9/2xvef91d33/
+eXyG/3N2f/93eoP/c3Z//3d6g/9wc33/e32D/3d5f/95e4H/dXd9/3t+h/9zdn//dXd9/3Bzff9wc33/
+bnB3/3V4gf9ucHf/bnF7/2xvef9wcnn/c3Z//3d6g/9ucHf/dXd9/25wd/95fIb/c3Z//3t9g/91eIH/
+am13/25xe/91eIH/b3J7/3F0fP92eH7/c3V8/25wd/9wc33/dXiB/3Byef9wc33/c3Z//3V4gf9zdn//
+b3J8/3R2ff9xdH7/cnV+/3h6gP9wc3z/aGt0/21wd/90d3//c3Z//3Byef9vcXb/b3F4/25xe/9xdHz/
+cnR8/3N0ev9wcnv/bG95/3J0fP9vcnr/bnB5/21vdf9xdHv/b3F4/3N2fv9tb3j/cnR9/25xev9vcnv/
+bnB3/3R2fP9ydHv/bG52/21vd/9vcnz/b3F4/25xe/9tcHn/d3l//21wd/9ydHz/dnh8/3Byef9kZmz/
+Z2p0/3Byef9ucXv/dHd9/3N1fP9wc3z/dHd+/2xvef9sb3n/cHJ5/3Bzff90dn3/dnmD/3R2f/91eIH/
+eXyG/36Ahv95fIb/foCG/3V4gf95e4H/cHN9/3Byef9ucXv/c3V8/3V3ff9zdn//bnF7/3Z4fP9wc33/
+ZGdx/2ptd/9zdXz/Z2p0/2xvef9sb3n/Zmlz/2Jlbv9qbXf/c3V8/3N1fP9nanT/bG95/2xvef9qbXf/
+bG51/21vc/9zdXz/bnF7/2xudf9qbXf/YmVu/2xvef9sbnX/bG51/2Zpc/9kZ3H/cHN9/2Zpc/9ucHf/
+c3V8/3Byef9nanH/b3F1/3Z4fP9zdn//cHN9/3Bzff9ucHf/bnB3/3l7gf9wcnn/bnF7/25wd/9wc33/
+c3Z//3Bzff9ucXv/bG95/25xe/9ucHf/dXiB/3d6g/9+gYr/c3Z//3N2f/9vcXX/bnB3/25wd/9tb3P/
+cHN9/2ptd/9sb3n/Z2p0/25xe/9qbXf/ZGdx/2Zpc/9ucXv/am13/2Zpc/9wc33/cHJ5/3V3ff91d33/
+cHJ5/2psc/9qbXf/dXd9/3Bzff9tb3P/cHJ5/2xudf9qbHP/bG95/2psc/9qbXf/bG95/2xudf9wc33/
+bnF7/2ptd/9sb3n/bG95/2ptd/91d33/c3V8/25wd/9kZ3H/bG95/3V3ff91d33/bnB3/3Byef9sbnX/
+bG95/2psc/9qbXf/bG95/2xudf9nanT/bnF7/2dqdP9qbXf/bG51/2ptd/9maXP/am13/2xvef9sb3n/
+am13/2ptd/9zdXz/cHJ5/3Z4fP9wcnn/bnB3/2xvef9sb3n/c3V8/3Byef9sbnX/c3V8/2psc/9nanH/
+bG51/25wd/9tb3P/cHN9/2psc/9sbnX/bG51/3V3ff9ucHf/cHJ5/21vc/92eHz/am13/2dqdP9qbHP/
+bG51/2psc/9zdXz/am13/2xvef9qbXf/bG51/2xvef91d33/bnB3/3Z4fP9tb3P/eXuB/3N1fP93eX//
+cHN9/2dqdP9ucHf/dXiB/29yfP9xdHz/dXh//25weP9sbnX/cHJ5/3N1fP9qbXf/bnF7/25xe/9sb3n/
+cHN8/3Byef9ydHv/bnB4/25xev9xc3r/am13/2dqdP9sb3j/bG95/3Bye/9rbnj/am12/2tueP9rbnj/
+bG95/29xeP9rbnf/bnF6/21wev9xdH3/cXR+/3F0ff9vcnv/cnR7/2hrdf9sbnb/bG94/25weP9sbnb/
+b3F5/2xvef9wc33/dHZ8/2ptd/9xc33/dnh8/21wev9ydX7/dHZ8/31+gv9ucHf/c3Z//3l7gf93eoP/
+Z2p0/2xvef9zdn//c3Z//3Z4fv92eH7/cHN9/3J1fv9sb3n/b3J8/2xvef9sb3n/dHd7/3Z4fv9tcHr/
+c3V8/3N1fP91d33/c3V8/3Z4fP9ucHf/dnh8/3N1fP9vcXX/bnB3/25xe/93eoP/c3Z//3Bzff95e4H/
+dXiB/2ptd/9zdn//d3qD/25xe/9zdn//dXd9/29xdf9maGz/b3F1/3V3ff91d33/bnB3/3Byef9ucHf/
+bG51/2xudf9sbnX/dXd9/25xe/9qbXf/bG51/1xfaP9qbHP/amxz/2psc/9iZW7/YmVu/2xvef9iZW7/
+Z2p0/25xe/9sb3n/am13/2psc/91d33/bnF7/3Byef9zdXz/bG95/3Byef91d33/bnB3/2xvef9ucHf/
+bnF7/3Byef9zdXz/cHJ5/25wd/9zdXz/bnB3/3Bzff9wc33/e36H/3Bzff91d33/bG95/3Bzff9wcnn/
+cHJ5/3N2f/9wc33/cHN9/25wd/91d33/bnB3/2dqcf9qbHP/c3V8/3Byef9nanH/bnF7/3N1fP93eX//
+dXd9/25xe/9tb3P/cHJ5/3V3ff9zdn//bG95/25xe/9vcXX/b3F1/3N1fP9sbnX/bW9z/2xudf9ucHf/
+c3Z//3V4gf9ucHf/bnF7/25xe/9wcnn/d3qD/3V4gf9zdn//bG95/3N2f/93eoP/eXuB/3Bzff91eIH/
+cHN9/25xe/9ucHf/bnF7/3Bzff9ucXv/bnB3/3d5f/9sb3n/bnF7/3Bzff9wc33/bG95/3Byef9zdn//
+cHN9/3Bzff9zdXz/d3qD/3V4gf97fYP/cHJ5/3N2f/9wc33/c3Z//3d5f/9zdn//cHJ5/3V4gf9wc33/
+cHN9/3N2f/93eoP/dXiB/3t9g/9zdXz/cHN9/3Bzff91d33/c3Z//3N2f/9sb3n/c3Z//2xudf9ucHf/
+bnB3/25wd/9qbHP/c3Z//3Bzff9zdn//bG95/3Byef9sbnX/d3l//2ptd/92eHz/bW9z/3d5f/9zdXz/
+d3l//3Bzff9maXP/bG95/3Bzff9sbnX/bnF7/3F0fv9xdH3/bnF7/3N2f/93eX//bG95/3Bzff91d33/
+dXd9/3Byef9ucHf/cXN6/21veP9sb3f/bXB4/2tudv9oa3X/am1z/2xud/9zdn3/am13/2tudv9oa3X/
+Zmlz/2hrdf9pbHP/aGt0/2hqcP9naW//Zmhu/2hrdf9oa3L/Z2p0/3N1fP9sbnX/bW9z/25wd/9sb3n/
+bG95/25xe/9sb3n/cHN9/3N2f/9qbXf/bnF7/3N2f/9ucHf/dXiB/3Z4fP99foH/b3F1/3N1fP94eX3/
+c3V8/2dqcf9qbHP/cHJ5/3N1fP91d33/dnh8/3Byef9zdn//bG51/3Byef9ucHf/bW9z/3V3ff91d33/
+bG51/3Byef9ucXv/c3V8/2xvef9zdXz/bG95/3d5f/9ucXv/bG51/3N1fP9ucHf/dnh8/3Byef9ucXv/
+d3l//3Bzff9nanT/c3Z//3d5f/9ucHf/cHJ5/3Z4fP9vcXX/ZWZq/29xdf9zdXz/dnh8/2ptd/9wc33/
+cHN9/25xe/9ucHf/bnB3/3N2f/9wc33/bnB3/3Byef9maG7/bG51/2xudf9qbXf/Zmlz/2Zpc/9sb3n/
+YmVu/2psc/9sb3n/am13/2dqdP9sbnX/bnF7/2xvef9ucXv/bnF7/2xudf9qbXf/bnF7/2xudf9qbXf/
+amxz/2xvef9sb3n/bnF7/2xudf9nanH/c3V8/2xudf9ucHf/bnF7/3d6g/9wcnn/dnh8/25wd/9wcnn/
+b3F1/29xdf9zdXz/bG95/3N1fP9sbnX/c3V8/2xvef9maXP/ZGdx/25xe/9qbXf/Zmlz/3Byef9zdXz/
+eHl9/3Z4fP9wcnn/bnB3/3Bzff91eIH/c3V8/29xdf9ucHf/bW9z/21vc/9wcnn/bG51/2xvef9sbnX/
+bG51/3Bzff9sb3n/ZGdx/2dqcf9maG7/Zmlz/2xvef9wc33/bnF7/2dqdP9ucHf/c3V8/3V3ff9sbnX/
+c3V8/2ptd/9ucXv/am13/2xvef9ucXv/bnB3/2xudf91d33/amxz/2xudf9ucHf/b3F1/2dqcf9ucHf/
+bnB3/25xe/9ucHf/bG95/3N1fP92eHz/dXd9/2xvef9wc33/cHJ5/25xe/9zdn//cHN9/3Byef91eIH/
+bnF7/25xe/9sb3n/dXiB/3V4gf9+gIb/dXd9/3V4gf91eIH/e32D/3N2f/93eoP/bnB3/3V3ff9sb3n/
+bnB3/25wd/9sb3n/bG51/3N2f/9wc33/dnh8/25wd/9zdXz/bG95/3d5f/9qbXf/dXd9/21vc/93eX//
+cHN9/3Bzff9sb3n/ZGZs/3Byef9wc33/am13/29yfP9zdoD/c3Z+/3Byef93eoP/eXuB/3Byef93eoP/
+e32D/3l7gf91eID/dnmB/3t9gP92eIH/c3Z+/3R3f/9ydH3/cnV+/3J0ff9wcnn/eHqE/3N1fv9sb3n/
+bG95/25wd/9zdXz/bW9z/2xudf9ucHf/bG95/29xdf9zdXz/cHJ5/25xe/9qbXf/ZGdx/2psc/9qbXf/
+amxz/21vc/9wcnn/b3F1/3Byef9wc33/Z2p0/25xe/91eIH/bnB3/3d6g/95e4H/f4GH/3N1fP93eoP/
+e36H/3d6g/9wc33/bnF7/3t9g/95e4H/eXuB/36Ahv93eoP/eXuB/25xe/91eIH/c3Z//2xvef91d33/
+dXd9/2xudf9ucHf/cHJ5/3N1fP9zdXz/eHl9/3Bzff91eIH/cHN9/25xe/9zdXz/c3Z//3d5f/93eoP/
+dXiB/3d5f/9wc33/amxz/3Bzff93eX//bG95/3V4gf95e4H/cHJ5/2dqdP9ucHf/d3l//3l7gf9ucXv/
+cHN9/25xe/9sbnX/bG51/21vc/9ucXv/cHJ5/2xudf9ucXv/Zmlz/2ptd/9sbnX/am13/2dqdP9nanH/
+bnF7/2Zobv9ucHf/bnF7/25wd/9qbHP/am13/3Bzff9ucXv/bnB3/3Bzff9sbnX/bW9z/3N1fP9wcnn/
+bnB3/29xdf9ucHf/bG51/3Byef9qbXf/Zmlz/25xe/9nanH/bG95/25xe/91eIH/am13/3Bzff9nanT/
+am13/2Zpc/9nanT/cHN9/21vc/9zdXz/bW9z/3V3ff9ucXv/Zmlz/2dqdP91d33/bnF7/2ptd/9wc33/
+bG95/3V3ff93eX//cHN9/2psc/9qbHP/am13/2xvef9qbHP/bnF7/2dqcf9qbHP/bG95/2psc/9ucXv/
+bG51/21vc/91d33/cHJ5/2ptd/9sbnX/bG51/2psc/9ucHf/cHJ5/3Byef9qbHP/cHJ5/3N1fP94eX3/
+bnF7/3Bzff9ucXv/cHJ5/25wd/9wcnn/cHN9/25wd/9ucHf/dnh8/2dqdP9qbXf/bG51/21vc/9kZmz/
+b3F1/25wd/9zdXz/bnB3/25wd/9ucHf/c3V8/3V3ff9ucHf/c3Z//25wd/9ucHf/c3V8/3Bzff9wcnn/
+c3Z//2xvef9nanT/am13/3N2f/9ucXv/d3l//3Bzff9wc33/c3Z//3l7gf9wc33/c3Z//2xvef92eHz/
+bnB3/29xdf9ucHf/bnF7/2xvef91d33/c3Z//3V3ff9sb3n/cHJ5/29xdf91d33/bG51/3Z4fP9tb3P/
+d3l//3V3ff9wc33/cHN9/2Rncf91eIH/c3Z//2xveP9vcnz/c3aA/3V4gP9sb3n/dXiB/3V3ff9sbnX/
+c3V8/3Z4fP91d33/c3V8/29xdf9xc3n/cHJ5/3Fzev9vcXb/bG95/3Bzff9ucHf/bnB3/3V3ff9wcnn/
+bG95/2xudf9nanT/cHN9/2psc/9maXP/amxz/2psc/9qbHP/bG95/25xe/9sb3n/dXiB/3N1fP9wc33/
+d3qD/3N1fP9wc33/dXiB/3l7gf95e4H/d3qD/25xe/95e4H/d3qD/3N1fP91eIH/dXd9/3l8hv9sb3n/
+c3V8/3V3ff9wcnn/Z2p0/2Zpc/92eHz/dXd9/3V3ff91d33/bnB3/3Bzff9nanH/bnB3/2xvef9qbXf/
+bnF7/3Bzff9sbnX/cHJ5/3N1fP9wc33/c3Z//3t9g/91eIH/foGK/3d6g/93eoP/c3Z//3l7gf97fof/
+eXuB/3d6g/97fof/eXuB/3V3ff95fIb/e36H/3V4gf95e4H/eXyG/3Bzff9qbXf/cHJ5/3N2f/93eX//
+bG51/3Byef9ucHf/bG51/25wd/9ucHf/c3V8/3V3ff9sbnX/bnF7/2Rncf9qbXf/Z2p0/2dqcf9nanH/
+YmVu/2xvef9iZGr/bG51/25xe/9sb3n/Z2p0/2xudf9wc33/bG95/2xvef9zdXz/bG51/2xudf9wc33/
+bG95/2dqdP9maXP/am13/2ptd/9sb3n/amxz/2Zpc/9zdXz/am13/2ptd/9ucXv/dXd9/2dqdP9qbXf/
+YmVu/2dqdP9iZW7/Z2px/2ptd/9maXP/bG95/2Zobv9qbXf/Zmlz/2BjbP9gY2z/bnF7/2ptd/9maXP/
+am13/2psc/9wc33/bnF7/2dqdP9ucXv/c3Z//3Bzff9wc33/bG95/3N2f/9ucHf/bG95/25xe/9sb3n/
+c3V8/25xe/9tb3P/dXd9/25wd/9ucHf/b3F1/25wd/9qbXf/am13/25wd/9sb3n/Zmlz/2ptd/9ucXv/
+c3V8/2ptd/9ucXv/bG51/2xvef9sb3n/bG95/2xvef9ucHf/am13/3Bzff9nanT/am13/2ptd/9sbnX/
+YmVu/2psc/9nanT/bG95/2psc/9qbHP/am13/25xe/9sb3n/amxz/25xe/9qbXf/bG51/25xe/9sb3n/
+bG51/2xudf9kZ3H/Z2p0/2Rncf9sb3n/cHJ5/3N1fP9sb3n/bW9z/25wd/91d33/c3V8/3V3ff9ucHf/
+eXuB/25wd/9wcnn/am13/2xvef9qbXf/c3Z//3V3ff91d33/b3F1/3Byef9ucXv/d3l//25xe/93eoP/
+cHJ5/3d6g/9ucXv/c3Z//3V4gf9maG7/dHeA/29ye/9rbnf/cHN8/3R2fP9vcnz/bG51/3Bzff91d33/
+bG51/3N1fP9zdXz/c3V8/3N1fP9tb3P/bnB3/3N1fP9ucXv/am13/2psc/9sb3n/am13/2psc/9zdXz/
+Z2p0/2xvef9nanH/amxz/3N1fP9sbnX/bG51/2xudf9tb3P/b3F1/3Byef91d33/cHJ5/3V4gP9zdXz/
+c3Z//3R3gP9ucXv/bnB3/2xvef9ucXv/cHJ5/3J0e/9rbXP/dHZ9/3V3ff9vcXj/cnR7/3R2fP91eIH/
+bW90/25xe/9zdXz/am13/2dqcf9maG7/dXd9/3Byef92eHz/dXiB/25xev90d4D/aGt1/3N2f/9xdH7/
+b3F4/3V4gf92eYH/c3V8/3d6g/95fIb/d3qD/3l8hv9+gYr/eXyG/4GDiv91eIH/dXiB/3V4gf91eIH/
+eXyG/3t9g/9ucXv/d3l//25xe/9ucHf/c3V8/3h5ff9ucXv/d3l//3V3ff9ucHf/Zmlz/29xdf92eHz/
+dnh8/2psc/9tb3P/cHJ5/2ptd/9sb3n/bG95/3N2f/91eIH/c3Z//3V4gf9qbXf/bnF7/25wd/9ucHf/
+bnF7/2Zpc/9zdn//Zmhu/29xdf9wc33/bG95/2dqdP9ucHf/d3qD/25xe/9wc33/cHN9/25wd/9ucHf/
+eHl9/3N1fP9ucHf/bnB3/25wd/9ucHf/bnF7/2xudf9qbHP/dXd9/2xudf9sb3n/cHN9/3V3ff9ucHf/
+cHJ5/2Zpc/9qbXf/Z2p0/21vc/9ucXv/am13/25wd/9vcXX/dnh8/25wd/9kZ3H/Zmlz/3V3ff9tb3P/
+bW9z/3Bzff9ucHf/dXiB/3l7gf9zdn//bG51/3N1fP9ucXv/cHN9/25wd/92eHz/bnB3/25xe/9wcnn/
+bnB3/3Bzff9ucHf/bnB3/3N1fP9wcnn/bG51/2xudf9qbXf/am13/2ptd/9qbXf/bnF7/2dqcf9sb3n/
+bnF7/3Bzff9sb3n/bG95/2xudf9sb3n/Zmlz/2dqdP9nanT/amxz/2dqcf9wc33/Zmlz/2ptd/9qbXf/
+am13/2Jlbv9sbnX/bG95/3V3ff9ucHf/bnB3/3N2f/93eoP/c3Z//3Byef91eIH/c3Z//3N1fP95fIb/
+dXiB/3V3ff91eIH/c3V8/3N2f/9ucXv/eXyG/31+gf9+gIb/dXiB/3V3ff91eIH/e32D/3d6g/93eoP/
+bnF7/3t9g/9sb3n/bG95/2dqdP9wcnn/am13/3V4gf93eX//dXd9/25wd/9wc33/cHN9/3d6g/9wc33/
+eXyG/25wd/94eX3/c3V8/3N1fP9zdXz/Zmhs/3V4f/9zdoD/bnB5/3R3gf92eH7/c3Z//25xe/93eoP/
+dXd9/29xdf9zdn//dXd9/3V3ff9wcnn/bG51/25xe/9zdXz/bnF7/21vc/9tb3P/cHJ5/2xvef9sbnX/
+dXd9/2xvef9wcnn/bG95/2dqdP91d33/bnB0/21vdv9tb3b/am13/2xudP9tcHr/c3V9/2xvef90d4D/
+b3J5/29xef9zdn3/cXN4/29xdv9tb3f/bXB6/2xvef9xdH3/Z2pz/3N1ff91d33/b3J5/3Fzev90dnv/
+dXd+/25wdf9wc33/dXd9/25xe/9qbXf/bnF7/3l7gf9zdn//eXuC/3Z5g/90d4D/d3mA/2xueP91d3//
+dHeB/3N1e/95e4L/eXuB/3J0fP91eIH/cHN9/3Bzff9wc33/eXuB/3Bzff95fIb/cHN9/3N1fP9ucXv/
+bG95/3Byef9ucXv/Z2p0/25xe/9qbXf/Z2p0/2ptd/9zdXz/am13/3V3ff9zdXz/bG51/2Rncf9sbnX/
+dXd9/3Z4fP9nanT/bG51/25xe/9qbXf/am13/2ptd/9sb3n/cHN9/2xvef9ucXv/Zmlz/2ptd/9ucHf/
+bnB3/2xudf9kZmz/dnh8/2Zobv9ucHf/c3Z//2xvef9qbHP/bnB3/3d6g/9zdn//cHN9/3N2f/9wc33/
+cHN9/3l7gf9ucXv/bG95/2xvef9ucXv/cHN9/3N2f/9wcnn/bG95/3V3ff9ucHf/bnB3/3V3ff92eHz/
+am13/25xe/9kZ3H/bG51/2psc/9qbHP/bG95/2dqdP9qbXf/amxz/25xe/9qbXf/Zmhu/2Zobv9zdXz/
+bW9z/2psc/9ucXv/ZGdx/3N1fP91d33/c3V8/3Byef91d33/dXd9/3V3ff9ucHf/dXd9/25wd/9ucXv/
+bnF7/25wd/91d33/dXiB/25xe/91eIH/cHN9/2xvef9ucHf/cHN9/2xvef9ucXv/bnF7/3Bzff9ucHf/
+c3Z//3d6g/9zdn//cHN9/3Byef9tb3P/c3V8/25wd/9sb3n/am13/2psc/9qbHP/bG95/2Zpc/9nanT/
+am13/2ptd/9kZ3H/amxz/2ptd/91d33/bG51/21vc/9wcnn/c3V8/3Bzff9nanH/bnF7/2xudf9tb3P/
+cHJ5/2xudf9qbXf/bG51/25wd/9sbnX/Zmlz/25xe/91d33/c3V8/2xudf9sbnX/bnB3/3N1fP9zdXz/
+dXd9/2xudf91d33/Zmlz/2ptd/9maXP/am13/2psc/9wc33/cHN9/3Bzff9qbHP/bG95/2ptd/9sb3n/
+Zmlz/3V3ff9nanH/cHN9/2ptd/9ucXv/am13/2RmbP90dXv/cnR9/2ttdv9ucXn/cnV+/3N1fP9ucHf/
+c3Z//3V4gf9zdXz/dXiB/3N2f/95e4H/dXiB/3Bzff95fIb/eXyG/3t9g/9zdn//c3V8/3l8hv94e4H/
+dXd9/31/hf96fIL/eHuE/3Z5gf9zdXz/en2F/3R3f/9xc3r/cnR7/29xeP9wcnn/cXR8/3d5fv9wc3v/
+c3Z+/3Fzev9vcXj/cnR7/3J0ef9xc3r/b3F2/25wef9vcnr/cnR5/2ptc/9ydHz/dXd//3R2fP9vcnv/
+cHJ5/3R3gf9vcXj/c3Z//3p8gv9wcnn/Z2p0/2dqdP93eX//dnmC/3V3fv9ydX3/bXB6/29yeP9maXP/
+Z2py/2ptdf9nanT/bnF5/3J1ff9sb3b/cHN9/3Bzff9ucXv/cHN9/3l8hv91eIH/d3qD/3N2f/9zdn//
+c3V8/3Bzff91eIH/cHN9/3N2f/93eX//c3Z//25wd/9wc33/c3Z//25wd/93eX//d3l//21vc/9iZW7/
+am13/3N1fP93eX//am13/2xudf9wcnn/bW9z/2xudf9sbnX/bG95/3N1fP9ucXv/cHN9/2dqdP9wc33/
+c3V8/3Bzff9ucHf/bG95/3d6g/9sb3n/cHN9/3l7gf9wc33/bnF7/3N2f/9+gIb/eXyG/3N2f/91eIH/
+c3Z//3Bzff91d33/cHJ5/25xe/9sb3n/bG95/25wd/9sb3n/Z2p0/2Rncf9ucXv/Zmlz/2dqdP9sb3n/
+c3V8/2psc/9wc33/am13/2xvef9qbHP/am13/25xe/9nanT/bG51/21vc/9zdXz/bG95/2Rncf9kZ3H/
+cHN9/2ptd/9nanT/bnF7/2dqdP9zdXz/dXd9/3V3ff9ucXv/cHN9/25xe/9wc33/amxz/2ptd/9nanT/
+amxz/2dqdP9qbHP/bnF7/2ptd/9qbHP/Zmlz/2Rncf9iZW7/Zmhu/2Rncf9iZW7/ZGdx/2Zobv9maXP/
+YmVu/2Rncf9maXP/Zmlz/2Zobv9kZ3H/Zmhu/2dqdP9maXP/Zmlz/2dqcf9kZ3H/Z2px/25xe/9qbXf/
+am13/2xvef9sb3n/Zmlz/2ptd/9ucHf/dXd9/3Byef9ucHf/bnF7/3N2f/9zdXz/bnB3/3Bzff9ucXv/
+bnB3/3V3ff9ucHf/bnB3/25wd/9ucHf/am13/2Zobv9zdXz/c3V8/3Byef9sbnX/bW9z/21vc/9wcnn/
+cHJ5/3Bzff9sbnX/dXd9/2dqdP9sbnX/Zmlz/2dqdP9nanT/bnF7/3N1fP91d33/bnB3/3V3ff9ucXv/
+cHJ5/25wd/92eHz/b3F1/3N1fP9zdXz/dnh8/25wd/9kZmz/bnB1/25xe/9tb3f/cHN9/3l7gf91eIH/
+c3Z//3t9g/9wc33/bnB3/3Bzff9zdn//d3l//3V3ff9sb3n/bnF7/3Byef90dn3/bXB3/2ptdv9vcnv/
+cnV+/21wdf9zdXz/bG93/25xev9tcHn/aGpz/3J0ev9wc3v/b3F6/3Bye/9pbHX/bnF5/2xvd/9xdH7/
+a254/2ptd/9zdXv/bG95/29yev9zdXv/bnB2/25wdv9vcXX/b3F4/25wdf9sb3b/cHJ5/3V3fP93eX//
+bnB3/3ByeP91eIH/bW94/3V3fv93eX//bW95/2Zpc/9nanT/dXd9/3R2ff9wcnn/cHN7/2xvef9rbnT/
+Zmlz/2RncP9oa3P/Y2Zv/2Vocf9qbXb/a212/25xe/9qbXf/Z2p0/2dqdP9zdXz/bG95/3Byef9ucHf/
+bG95/2ptd/9wc33/c3V8/2ptd/9sb3n/cHN9/2xvef9qbXf/am13/3Bzff9tb3P/dnh8/3l8hv9vcXX/
+Zmhu/2xudf92eHz/d3qD/2xvef9ucXv/c3Z//3N1fP9wcnn/bG95/3Bzff93eX//c3Z//3V4gf9qbXf/
+c3Z//25wd/9wcnn/cHJ5/2ptd/95e4H/am13/3Byef9zdn//c3V8/2ptd/9zdn//foCG/3l8hv93eoP/
+eXuB/3V4gf95fIb/eXyG/3l7gf93eX//cHN9/3d6g/91eIH/d3qD/3N1fP9ucXv/e32D/3N1fP9zdn//
+dXiB/3l7gf9wc33/cHN9/25wd/9wc33/cHJ5/25wd/91d33/amxz/2xudf9ucHf/dnh8/25wd/9kZ3H/
+ZGdx/3N1fP9qbXf/bG51/3Bzff9nanT/bnF7/3V3ff9zdXz/bG95/3Bzff9qbHP/bG95/2dqdP9sb3n/
+Z2p0/2xudf9qbHP/am13/3Bzff9ucXv/bG51/25wd/9qbXf/Z2p0/2xudf9qbXf/amxz/2ptd/9nanT/
+Z2p0/2Zpc/9qbXf/bG95/25xe/9ucXv/bG95/2xudf9ucXv/Z2p0/2xudf9qbHP/am13/2xudf9wcnn/
+bG51/2xudf9wcnn/bG95/2Rncf9sbnX/bnB3/3V3ff9wcnn/b3F1/25xe/91eIH/c3Z//25wd/9wc33/
+cHN9/3Byef9zdn//bnF7/2ptd/9ucXv/bG95/25wd/9kZ3H/bnF7/25xe/9sb3n/Z2p0/2ptd/9sbnX/
+bnF7/2xvef9qbXf/Z2p0/3N1fP9kZ3H/Z2px/2BjbP9iZW7/ZGdx/3N1fP9ucXv/am13/2xudf9wc33/
+bG95/2xvef9qbXf/dXd9/21vc/91d33/bnF7/3h5ff9ucHf/ZGZs/3Bydv9ucXv/bG95/25xe/9zdn//
+d3qD/25xe/93eX//c3Z//25wd/9zdn//c3Z//3l7gf95e4H/cHJ5/3Bzff9vcnz/dXd+/3Byef9rbnj/
+cHN7/3Fze/9sbnb/cHJ4/2tueP9sb3j/bG95/2psc/9ydXz/cXN7/2lsdv9ydX7/aWtx/3Bye/9oa3T/
+bXB5/2RncP9laHL/bW93/2ptd/9sb3n/bnF6/2ptd/9qbXf/am13/2xvef9qbHT/a210/21vc/90dnz/
+dHZ8/25wd/9vcXb/c3Z//2xvd/9xdH3/cXR+/2tueP9maG7/Zmhu/3V3ff9zdX3/bnF7/3R3fv93eX7/
+c3V8/3J1fv9ucXr/bnF6/2tud/9vcXj/dXiA/3R2fv9wc33/bnF7/25xe/9sbnX/dXd9/3V3ff91eIH/
+dnh8/3N1fP9wcnn/bnF7/3d5f/9ucHf/cHJ5/3N1fP9zdXz/bnB3/3Byef9zdXz/b3F1/3Z4fP93eX//
+bnB3/2dqcf9ucXv/dXd9/3l7gf9vcXX/bG95/3V4gf9zdXz/bnF7/2ptd/9wc33/d3l//3Bzff9zdn//
+am13/3N2f/9wcnn/c3V8/25wd/9maXP/d3l//2dqcf9ucHf/bnB3/25xe/9nanT/cHJ5/3V3ff9wc33/
+cHN9/3N2f/91d33/cHJ5/3Byef9ucHf/bnB3/2dqcf9zdXz/bnB3/3Bzff9sb3n/Z2p0/3V3ff9ucHf/
+bnB3/3N2f/95e4H/cHN9/3N2f/9sb3n/cHJ5/2xudf9ucHf/dXd9/2xudf9ucHf/bnB3/3Z4fP9ucHf/
+Z2px/2ZobP9zdn//bnF7/25wd/9zdXz/amxz/3Byef91d33/bG95/2xvef9wc33/bG51/25xe/9ucXv/
+c3V8/2xudf9sbnX/Z2p0/2xudf9ucXv/bG95/2dqdP9sb3n/amxz/2Rncf9qbHP/bnF7/2dqcf9sb3n/
+am13/2ptd/9qbXf/bG95/25xe/9ucXv/bnF7/2xvef9qbHP/bnF7/25xe/9qbXf/Z2p0/21vc/9sbnX/
+bnF7/21vc/9ucHf/cHN9/3Byef9maG7/bnB3/3Byef9zdn//c3Z//2xvef9sb3n/cHN9/3N2f/9ucHf/
+cHN9/3N1fP9ucHf/dXiB/3Bzff9qbXf/cHN9/25wd/9ucHf/Zmlz/3V4gf93eoP/cHN9/2xvef9wcnn/
+bG95/25xe/91d33/bnF7/25xe/93eX//amxz/2xudf9qbHP/Zmlz/21vc/92eHz/dXd9/3Byef9tb3P/
+d3l//2xvef9ucXv/amxz/3N1fP9nanT/bG95/2dqdP9sb3n/Zmlz/2Jlbv9sbnX/am13/2psc/9sbnX/
+bnB3/3V3ff9sbnX/dXd9/3Byef9qbHP/bG51/2xvef9zdXz/c3V8/2ptd/9xdH3/bG54/25xe/9ucHf/
+am11/25wd/9tb3b/bG52/2tudP9rbnf/aGt0/2Zpc/9naW//cXN6/3R2fP9qbXf/cnR8/2Zob/9kZ3H/
+ZWhy/25wd/9laHH/aGt1/3Bzff9ucXv/cHN9/3Bzff9ucHf/amxz/29xdv9wcnr/b3F4/21vdv9ucHX/
+dnh8/3V3ff9xc3v/cHN4/3N1fP9ydHz/dHeA/3h6gP9wcnn/Zmlz/2Zobv9wc33/cXN5/3Fzev9ydHr/
+c3V8/29xef9tcHj/b3F3/2xudv9pa3T/bnF5/3N1fP9xc3n/c3V8/29xdf9ucXv/bG95/3d5f/91eIH/
+d3qD/3N2f/9zdn//cHN9/3N2f/95e4H/c3Z//3N2f/9zdn//cHN9/2xvef9ucHf/c3Z//25wd/93eX//
+d3l//3N2f/9maXP/cHN9/3N2f/93eX//bnB3/3Byef91d33/b3F1/29xdf9sbnX/dXd9/3N1fP9ucHf/
+cHJ5/2Zobv9ucHf/am13/2ptd/9tb3P/Zmhu/3V3ff9iZW7/am13/2xvef9sbnX/Zmlz/2ptd/9zdXz/
+c3V8/3N1fP91d33/bnF7/2xvef9zdXz/bnB3/25wd/9nanT/dXiB/25xe/9zdn//bnB3/2dqdP9zdn//
+am13/25xe/9zdn//dXiB/25wd/9zdn//am13/25xe/9vcXX/bnF7/3N1fP9sbnX/bnB3/3Byef92eHz/
+bnB3/2Zpc/9kZmz/cHJ5/2xvef9nanT/bnF7/2Zpc/9sb3n/c3Z//2xvef93eoP/dXiB/25wd/9zdn//
+c3Z//3V3ff9ucHf/bnB3/2ptd/9ucHf/cHN9/3V4gf9wcnn/c3Z//25xe/9ucHf/bG95/3Bzff9wcnn/
+dXiB/25xe/9ucXv/bnB3/3Byef9wc33/cHN9/25xe/9ucXv/bnB3/3N2f/9sb3n/b3F1/2xvef9vcXX/
+bnB3/3N2f/9ucHf/bnB3/3Bzff9wc33/Zmlz/3Byef9zdXz/dXiB/3V4gf9ucHf/bG95/3N2f/91d33/
+bG95/3N2f/91eIH/bnF7/3d5f/9ucXv/am13/3Bzff9ucHf/bnB3/2ptd/93eX//dXiB/3N2f/9sb3n/
+cHJ5/2xudf9ucXv/c3Z//3N1fP9zdXz/dXiB/2xvef9wcnn/am13/2dqdP9ucHf/dXd9/3h5ff9zdXz/
+bnB3/3h5ff9zdXz/c3V8/29xdf92eHz/bnB3/25xe/9qbXf/bnF7/2xvef9kZ3H/amxz/2dqdP9iZW7/
+Z2p0/2xvef9ucXv/amxz/3N1fP9sb3n/ZGdx/2psc/9nanT/bG95/2xvef9oanH/cHN8/2tudv9sb3n/
+bW92/21vd/9vcXj/b3F2/3J0e/9vcXj/dHZ8/2ptd/9oa3L/bW9z/3d5f/94eoD/cHJ5/3p8gv9ucHf/
+cnR7/25wdP90dn3/bG52/3Bzev92eH//bnF7/3N2ff9xc3r/bnB4/2hrcv9tcHf/bXB6/2xudf9sbnX/
+am10/2xvef9ydHr/am10/2ttcv9ucXn/aWx0/3J0fP9vcnn/a213/2Rncf9kZmz/bnF7/3Byef9sb3n/
+dHZ8/3Bze/9sb3f/a212/2xvd/9rbnb/aGt1/25wef9sb3n/bG93/3Bzff9maXP/Z2p0/2psc/9ucXv/
+bG95/3N1fP9maXP/ZGdx/2Rncf9nanT/bG95/2Zpc/9kZ3H/Zmlz/2Zpc/9kZ3H/Zmlz/2Zpc/9iZW7/
+bG51/2xvef9kZ3H/XWBq/2Zpc/9sb3n/cHJ5/2Rncf9nanT/dXd9/2xudf9sbnX/am13/25xe/91d33/
+bG95/3N1fP9nanH/dXd9/25wd/9ucXv/bnB3/2dqcf94eX3/Zmlz/2xvef9ucXv/b3F1/2xudf9sbnX/
+c3V8/3N1fP91d33/dnh8/3N1fP9ucHf/cHJ5/2xudf9ucHf/Z2px/3N1fP9wcnn/bG95/2dqdP9iZW7/
+bnF7/2Zpc/9sb3n/cHN9/3d5f/9qbHP/c3V8/2psc/9wcnn/b3F1/3Bzff9zdXz/bnB3/2xudf9wcnn/
+c3V8/29xdf9qbHP/Zmhu/3Byef9ucHf/bnB3/3V4gf9wcnn/dXiB/3l8hv91eIH/c3Z//3V4gf9sb3n/
+d3qD/3V4gf95e4H/cHJ5/3N1fP9sb3n/bG95/3N2f/9wc33/cHJ5/3V3ff9ucHf/bnB3/25wd/9zdXz/
+bG51/3N1fP9sbnX/bnF7/21vc/9ucHf/c3V8/25xe/9sb3n/am13/2ptd/9sb3n/amxz/2psc/9nanT/
+Z2px/2xudf9ucXv/amxz/2Zpc/9sb3n/bG95/2BjbP9nanT/bW9z/25wd/9ucHf/amxz/2xudf9sb3n/
+c3V8/2ptd/9ucXv/dnh8/3Byef93eX//cHN9/2ptd/9zdXz/bG51/2xudf9qbHP/dXd9/3N1fP9zdXz/
+amxz/25wd/9ucHf/bnB3/3V3ff9wcnn/dXd9/3d5f/9ucHf/b3F1/2ptd/9nanT/bnB3/3V3ff92eHz/
+c3V8/2xudf92eHz/dXd9/3V3ff9wcnn/dnh8/3Byef9wc33/cHJ5/3Byef9zdXz/Zmhu/21vc/9qbXf/
+Zmlz/21vdv9xdH7/dXd9/21vc/9zdXz/bnF7/2Rncf9sbnX/bnF7/25xe/9ucXv/aWxz/3Bze/9ydHr/
+c3aA/3J1fv9ydXv/c3V8/3F0ff92eH//dnmC/3V4gf9sb3n/bXB6/29xef95e4H/eXuE/29yfP93eoT/
+bnF4/3J1f/9zdXz/cnV+/29xdv9zdXz/c3Z+/29yev92eH7/b3F4/2xvef9rbXT/cHJ5/29xeP9xc3f/
+bW9z/29xeP9xc3r/c3V9/3Bye/9zdXv/dXh//3Byef9xc3r/c3V8/29xdf9nanH/Zmhu/25wd/9sb3n/
+bG95/3R2fP9ucXr/bG94/2hrdf9ucXv/aGt1/2dqc/9rbnf/bG94/2lsc/9nanT/XWBq/2Zobv9maG7/
+bG95/2xvef9ucHf/Zmlz/2Zobv9maG7/Zmlz/2ptd/9maXP/ZGdx/2dqdP9nanT/Zmhu/2dqdP9nanT/
+YGNs/2xudf9ucHf/Zmhu/11gav9maXP/am13/3Byef9maXP/Z2p0/25wd/9maG7/Z2px/2Rncf9sb3n/
+bnF7/25xe/9wc33/Zmhu/3Bzff9nanT/bG95/2psc/9maXP/c3V8/2Jlbv9sbnX/bnB3/2xudf9maXP/
+Zmlz/3Bzff9ucXv/bG95/25xe/9ucXv/bnF7/2xvef9sbnX/bnF7/2dqdP9zdXz/c3V8/3Byef9tb3P/
+ZGZs/3Byef9sbnX/cHJ5/3V3ff93eX//b3F1/25wd/9nanH/bnF7/3Byef91eIH/dXiB/3N1fP9zdXz/
+c3Z//3d6g/9wc33/bnF7/2xvef9zdn//c3Z//3N1fP91eIH/bG95/25xe/91eIH/c3Z//2xvef9zdXz/
+amxz/3N1fP9qbXf/cHN9/2psc/9qbHP/amxz/2dqdP9ucXv/Z2p0/2psc/9sb3n/Z2p0/2Zpc/9qbXf/
+bnF7/2ptd/9sb3n/am13/2xvef9vcXX/cHJ5/3Z4fP9zdXz/c3V8/3Byef9wcnn/dnh8/25xe/9sb3n/
+bG95/2xvef9sb3n/dXiB/3N1fP9wcnn/dXiB/3Bzff9qbXf/bnF7/25wd/9sb3n/bnB3/29xdf9sbnX/
+c3V8/3V3ff9sbnX/cHN9/3N1fP9ucHf/c3V8/2xudf9nanH/bG95/29xdf9ucHf/ZGdx/3N1fP9sb3n/
+bG95/2Zpc/9sb3n/Zmlz/25wd/9wc33/bnF7/25xe/9zdXz/Z2p0/25wd/9qbHP/Z2px/2ptd/9zdXz/
+dXd9/2xvef9sbnX/dXd9/2xvef9ucXv/Zmhu/2ptd/9nanH/bG95/2psc/9qbXf/Zmlz/11gav9laHL/
+Z2lv/1xfaP9naW//am12/2xvef9sbnX/Z2p0/2Zpc/9iZW7/amxz/25xe/9ucXv/c3V8/2tud/9ydHv/
+cHJ4/25xev9tb3b/bG51/21wef9ucHf/cXN6/3R2fP9wcnj/bG51/21vdv9rbXb/dHZ+/3J1fP9rbnb/
+dHZ9/2xudf9tb3b/cXN5/2xvd/9ucHf/cHJ7/3Bzev9wcnn/c3V8/2xvef9ucHf/bG94/3J0ff9xc3v/
+dHZ+/29yev9xdHz/bXB5/3BzfP9ucHr/dXeA/3h6gP9ydX7/cHN9/3N2f/9ucHf/am13/2dqdP9wc33/
+cHN9/3N2f/95fIX/cXN9/25xe/9oa3X/c3V8/25wd/9sb3n/cHN9/3V3ff9wcnn/cHN9/2xvef9wc33/
+bG95/3V3ff91d33/d3l//3N1fP9ucHf/b3F1/3V3ff94eX3/dXd9/3Byef9zdXz/cHJ5/2dqdP9sb3n/
+bnF7/2xudf91d33/cHN9/2psc/9iZW7/am13/3Bzff9ucXv/amxz/2ptd/9zdXz/Z2px/2psc/9maXP/
+Z2p0/2dqdP9maXP/Z2p0/2BjbP9ucXv/Z2p0/2xvef9sbnX/amxz/3Z4fP9maG7/bnB3/2xvef9sb3n/
+bG95/2ptd/91d33/c3V8/3N1fP9zdXz/cHJ5/3N1fP9wc33/bnB3/3Bzff9qbXf/dXiB/3d5f/91d33/
+bnB3/2RmbP9ucHf/am13/2ptd/9ucXv/dXd9/2xudf9qbXf/YmVu/2xudf9sbnX/bG95/2xvef9sbnX/
+am13/3Bzff9zdXz/bG51/2Zpc/9kZ3H/bnF7/2xvef9qbHP/bG95/2psc/9sb3n/d3l//25xe/9kZ3H/
+Z2p0/2BjbP9kZ3H/Zmhu/2ptd/9kZ3H/Z2px/2Zobv9nanH/am13/2dqdP9qbXf/c3V8/25xe/9qbXf/
+bG51/25xe/9qbXf/cHJ5/29xdf9zdXz/b3F1/25xe/91d33/c3V8/3N1fP9ucXv/bnF7/3V3ff9wcnn/
+bnB3/25wd/9ucHf/bnB3/3Bzff9vcXX/b3F1/25wd/9sbnX/Zmhu/21vc/9tb3P/bG51/2xudf9qbXf/
+amxz/3Bzff9zdXz/bG51/3Bzff9wc33/bnF7/3Bzff9tb3P/bG51/3N1fP9vcXX/bnB3/2Zobv92eHz/
+cHJ5/3N1fP9nanH/cHJ5/25wd/9zdXz/dXd9/3Byef9wc33/d3l//25xe/91eIH/bG95/3N1fP9zdXz/
+dXiB/3l7gf9ucXv/cHJ5/3V4gf9zdXz/c3Z//25wd/9zdXz/bnF7/3V4gf9wc33/cHN9/3Bzff9qbHP/
+bW93/29ye/9pbHX/b3F6/29yfP9xdH7/bnF7/3Byef9wc33/bG95/2xvef9zdn//bnF7/3Bzff9sb3n/
+dHZ8/25xe/9xc3v/bnF7/21vdv9xc3r/cXN4/29yev9zdX3/cXN6/3F0fP9xdHz/b3J6/3d5gv9xdHv/
+bW93/3R2fv9qbXb/a254/3R2f/9tcHr/cHN8/21wev9tcHn/bnF4/3Bye/9vcnz/bnB3/2tueP9tcHr/
+bG51/25xev9qbXf/cHJ8/2xudf9qbXf/am13/3J0e/9ucXv/am13/2psc/9nanT/Z2px/2Jlbv9gY2z/
+am13/2dqdP9qbXf/c3Z//2ptd/9qbXf/ZGdx/25xe/9sb3n/bG51/3Byef9ucXv/cHJ5/3Byef9tb3P/
+cHJ5/25wd/93eX//d3qD/3d6g/91eIH/c3Z//25xe/93eoP/d3qD/3d6g/9zdn//dXiB/3d6g/9sb3n/
+cHN9/3Bzff9zdn//e32D/3l7gf9wc33/bG95/3N2f/95e4H/foCG/3N2f/93eoP/eXyG/3Bzff9wc33/
+dXd9/3d6g/95e4H/eXuB/3V4gf9wc33/e32D/3N1fP91eIH/c3Z//3Bzff95e4H/bG95/25wd/9ucXv/
+cHJ5/2ptd/9sb3n/cHN9/3V4gf9zdXz/cHJ5/3Byef9wcnn/c3V8/29xdf9ucHf/Z2p0/3Bzff91d33/
+cHN9/21vc/9kZ3H/bG95/2dqdP9sb3n/cHN9/3V3ff9qbXf/am13/2Rncf9nanT/amxz/2ptd/9nanT/
+Z2px/2Zpc/9ucXv/bnF7/2dqcf9ZXGX/XF9o/2Zpc/9maXP/Zmhu/2Rncf9kZ3H/Z2p0/2xvef9maXP/
+Z2p0/2xvef9maXP/bnF7/2xudf9wc33/amxz/2xvef9sbnX/bG51/3V3ff9ucHf/bnB3/3l7gf9ucXv/
+bnB3/25wd/9zdXz/am13/3V4gf9wcnn/cHJ5/3Byef9zdn//d3qD/3N2f/9zdn//cHJ5/3Bzff95e4H/
+cHN9/3Bzff9ucXv/cHN9/25xe/9wc33/bnB3/25wd/9wcnn/bW9z/2dqcf9vcXX/bnB3/25wd/9sbnX/
+am13/2xudf91d33/c3V8/2ptd/9wc33/cHJ5/3Byef9zdn//bG51/2xudf9zdn//am13/25wd/9kZ3H/
+c3Z//3N2f/9zdn//am13/3N2f/9wcnn/dXiB/36Ahv95fIb/eXyG/3t9g/9zdn//d3qD/25xe/9wcnn/
+cHJ5/3N2f/95fIb/cHN9/25xe/93eX//bnF7/3Byef9vcXX/c3V8/25xe/91eIH/cHN9/25xe/9sb3n/
+bG51/29xef9xdHz/aGtz/3Byef9ydHr/dHZ8/25xe/9ucXv/cHN9/25wd/9wcnn/dXiB/3Bzff9zdn//
+bnF7/3Z4fv9xc3r/c3Z//21wev9tb3j/dHZ7/3J1ff9tcHr/cnV//29xef90dn//bXB6/3ByeP93eX//
+cHF4/25wd/9zdXz/amxz/25wd/92eH7/bnB3/3N1fP9vcXj/aGt1/25wdP9vcXv/bnF7/2xudf9sb3n/
+cHN9/2xudf9zdXz/bG51/3N1fP9sbnX/amxz/2ptd/91d33/bnF7/2xvef9qbXf/bG95/2psc/9kZ3H/
+YGNs/2dqdP9nanH/Z2p0/3V3ff9qbXf/Z2p0/2BjbP9qbXf/Zmlz/2Zobv9nanT/Zmlz/2Zpc/9qbXf/
+Zmhu/2dqdP9maG7/dXd9/3V3ff9zdXz/bG95/3Bzff9qbXf/cHN9/3d5f/9wc33/cHJ5/3N1fP91d33/
+bG51/3Byef9wc33/c3Z//3d6g/93eoP/c3V8/25xe/9ucXv/dXd9/3V3ff9sb3n/bG95/3d5f/9sbnX/
+bW9z/2xudf9sbnX/bG95/2ptd/9qbXf/Zmlz/25xe/9nanT/bG95/2xvef9iZW7/am13/2BjbP9iZW7/
+Z2px/2Rncf9kZ3H/Zmlz/2ptd/9sb3n/bG95/2xudf9sb3n/bnF7/2xvef9sbnX/bnF7/2dqdP9ucXv/
+dXd9/3N2f/9ucHf/Z2p0/25wd/9ucHf/cHJ5/3N1fP92eHz/bG51/2xudf9kZ3H/am13/25wd/9sbnX/
+bG95/2xudf9nanT/cHN9/3Bzff9sbnX/YmVu/2Jlbv9ucXv/am13/2xudf9qbXf/Z2px/2xvef9wcnn/
+bG95/25wd/9sb3n/Z2p0/2xvef9qbXf/c3V8/2xudf9wcnn/bG95/3N1fP97fYP/cHN9/3Byef95fIb/
+dXiB/3Byef9zdXz/d3qD/25xe/97fYP/dXd9/3l7gf91eIH/eXyG/3l8hv91eIH/dXiB/3N2f/9wc33/
+d3qD/3Bzff9ucHf/Z2p0/25wd/9wcnn/cHJ5/25wd/9vcXX/cHN9/29xdf9nanH/bG51/2xudf9qbHP/
+am13/2dqdP9nanT/bnF7/2xvef9qbHP/am13/25xe/9qbXf/c3V8/2ptd/9nanT/bnF7/2dqdP9sbnX/
+ZGZs/3Byef9ucXv/bG95/2Rncf9sb3n/Z2px/25xe/9wc33/am13/2xvef9wc33/am13/2xvef9kZ3H/
+Z2p0/2psc/9qbXf/cHJ5/2dqcf9maXP/cHJ5/2psc/9sb3n/Z2px/2ptd/9nanT/Z2p0/2ptd/9nanH/
+amxz/2dqdP9sb3j/cnV8/2Zpc/9vcXf/a253/25xe/9qbHP/Z2p0/2dqdP9kZ3H/bG51/2xvef9qbXf/
+am13/2xudf9sb3n/aGt1/3V3ff9ucXj/bW92/3Z4fP91d33/bG92/3N1fP9sbnb/c3V8/25wd/9vcXX/
+eHl9/3N1fP9sbnX/bnB3/2psc/9sb3n/dXiB/25xe/9wcnn/bnF7/2ptd/9qbXf/c3V8/25xe/9qbHP/
+bG51/3N1fP9ucHf/cHJ5/25wd/9zdXz/bG51/21vc/9qbXf/d3l//2xvef9qbXf/am13/2psc/9qbXf/
+ZGdx/2BjbP9qbXf/amxz/2xvef91d33/bG95/3N1fP9naW//c3V8/3Byef9sb3n/cHN9/3V4gf9wc33/
+cHN9/25wd/9ucXv/bnF7/3d6g/91eIH/d3l//3V4gf9zdn//cHJ5/3N1fP93eX//c3V8/25wd/91d33/
+c3V8/21vc/9qbXf/bnB3/2xvef9ucXv/am13/2Zobv9maG7/Zmlz/3Bzff9zdXz/bG51/2ptd/91d33/
+bG51/21vc/9tb3P/bnB3/2xvef9sb3n/bG95/2Zpc/9ucXv/am13/3N1fP9ucHf/Z2px/3Z4fP9nanH/
+bnB3/25wd/9vcXX/bG95/2xvef9zdn//c3Z//3N2f/9ucHf/c3V8/3Bzff9ucXv/bG95/3N1fP9nanT/
+c3Z//3l7gf93eX//c3V8/3N1fP91eIH/cHJ5/3d6g/97fYP/f4GH/3d5f/9zdn//bnF7/3N2f/9zdn//
+cHN9/3Bzff9ucHf/am13/3V3ff92eHz/bG95/2psc/9maXP/cHN9/25wd/9zdXz/cHJ5/2xvef9zdXz/
+dXd9/3N1fP9ucXv/bnB3/2xudf91d33/bnF7/3V3ff9wcnn/bnB3/2ptd/9sbnX/dXd9/2xudf9sbnX/
+eHl9/3N1fP9qbHP/bnB3/3V3ff9nanH/cHJ5/25wd/9ucHf/bG95/3N1fP9wcnn/cHJ5/3N2f/9ucXv/
+c3V8/3V4gf9ucXv/bnF7/25wd/9wc33/c3Z//3N2f/9wcnn/c3V8/3V4gf9wcnn/Zmlz/25xe/9ucHf/
+b3F1/25wd/9sb3n/cHN9/3V4gf9wc33/bnF7/25xe/9zdn//b3F1/3Z4fP9tb3P/amxz/3Byef9qbHP/
+bnB3/2dqcf9zdn//cHN9/25xe/9nanH/c3V8/2xudf9ucXv/eXuB/3V4gf9zdn//c3Z//2xudf9ucHf/
+bG51/25wd/9vcXX/c3V8/3d5f/9ucHf/cHJ5/3d5f/9ucHf/c3Z//3Byef9wcnn/c3V8/3Byef92eHz/
+bG51/2xudf9nanT/bG95/2xvef9maXP/a210/2Vocv9ucXv/am13/2xudf9sbnX/Z2p0/2ptd/9ucXv/
+bnB3/25xe/9qbXf/bG95/2Zpc/9zdXz/am13/2dqcf9wcnn/bnF7/2psc/9ucXv/am13/25xe/9qbXf/
+am13/3Bzff9sb3n/Z2p0/2ptd/9kZ3H/bG51/3V3ff9ucHf/c3V8/2xvef9sbnX/bG51/3Bzff9ucXv/
+Zmlz/2ptd/92eHz/bnB3/3N1fP9sb3n/dXiB/3Bzff9zdXz/c3V8/3h7hf91eIH/dXiB/3N2f/9zdn//
+c3V8/2ptd/9ucXv/dXd9/3d6g/93eoP/fYCJ/3d6g/93eYD/bXB5/3N2f/9ucXv/bXB6/21wev9ydX7/
+c3V8/3V3ff9sbnX/cHJ5/3Byef93eoP/d3l//3h5ff9zdXz/bnF7/2psc/9sb3n/dXd9/2xvef9nanT/
+cHJ5/2ptd/9qbHP/am13/2xvef9sb3n/cHN9/25xe/9sbnX/bG51/2ptd/91d33/dXd9/2ptd/9qbXf/
+c3Z//2dqcf9nanT/amxz/2xudf9sbnX/am13/2xvef9maXP/bG95/2psc/9ucXv/bG51/2Jlbv9wcnn/
+YGNs/2Rncf9maXP/Z2px/2Zpc/9maXP/bG95/2dqdP9qbXf/Zmlz/2ptd/9qbXf/am13/2psc/9sb3n/
+ZGdx/2ptd/9zdXz/cHJ5/2dqcf9iZW7/bG95/2dqcf9sb3n/am13/3N1fP9qbHP/am13/2Zpc/9qbHP/
+am13/2xudf9ucHf/b3F1/2psc/9zdXz/dXd9/2psc/9maG7/Zmhu/3Z4fP9wcnn/cHJ5/25wd/9tb3P/
+c3V8/3V3ff9zdn//bG51/2xvef9qbXf/bnF7/2ptd/91d33/c3V8/29xdf9wcnn/b3F1/3V4gf9ucXv/
+bnB3/3l7gf9wc33/bG95/25xe/93eX//am13/3Bzff9wcnn/cHN9/3Bzff9wc33/bG95/2xvef92eHz/
+bnB3/29xdf9ucHf/bG95/2ptd/9maXP/bnF7/2ptd/9qbXf/Z2px/2Rncf9nanT/Zmhu/2BjbP9nanT/
+Zmlz/2Zpc/9qbHP/ZGdx/2ptd/9qbXf/Z2p0/2xvef9qbXf/cHN9/2xudf92eHz/b3F1/2psc/9wc33/
+cHJ5/3N2f/9maXP/cHN9/3Bzff9wc33/am13/3N2f/9ucHf/c3Z//3V4gf9ucXv/c3Z//3N2f/9ucXv/
+dXiB/3N2f/9zdXz/cHN9/3d6g/9+gYr/c3Z//3d6g/95fIb/c3V8/3l7gf9zdXz/d3qD/3d6g/93eoP/
+eXuB/3N2f/9zdn//c3V8/3l7gf91eIH/bG95/25xe/9qbXf/c3Z//3V3ff9ucHf/bG95/2dqdP9sb3n/
+cHN9/25xe/9zdn//bnB3/3Bzff9ucHf/d3qD/3Bzff9ucHf/dXiB/3V4gf9wcnn/c3Z//3Bzff9zdn//
+bnF7/3Byef97fYP/d3qD/2xvef9zdn//Z2p0/25xe/91eIH/bnF7/3V3ff91eIH/cHN9/3V3ff97fYP/
+d3qD/3N1fP9ucXv/dnmC/3Bzff90d4D/bnB3/3R3gP9wc3z/cHJ5/3ByeP90d33/bnF7/3R3gP9vcXj/
+b3F3/3Byef9maXP/Z2px/21vc/9tb3P/bnB3/3V3fP9xc3v/cHN7/2lsdP9sbnb/bW92/2lrdP9tb3f/
+b3F4/3Byev9wc33/bnB3/3Byef9wc33/eXyG/3d6g/93eX//c3Z//3N2f/9ucHf/cHN9/3V4gf9zdn//
+bnF7/3d5f/91eIH/bnB3/25xe/9ucXv/bnB3/3V3ff9zdXz/bnB3/29xdf9wcnn/dnh8/3l7gf9wcnn/
+cHJ5/3V4gf9qbXf/bnB3/21vc/9ucHf/am13/25wd/9sbnX/ZGZs/25wd/9tb3P/c3V8/2xudf9qbHP/
+dXd9/2dqdP9sbnX/cHJ5/21vc/9ucHf/bG95/25xe/91eIH/c3Z//25xe/9zdn//cHN9/25xe/9vcXX/
+cHN9/2dqdP9sb3n/dXd9/3Z4fP9tb3P/Z2px/3Byef9sbnX/bnF7/2ptd/91d33/bnB3/25wd/9nanH/
+bW9z/2xudf9sb3n/bG95/2psc/9kZ3H/cHN9/25xe/9maXP/YmVu/2Rncf9sb3n/am13/2xudf9qbHP/
+bG51/3Byef9zdXz/bnF7/3Byef9wcnn/b3F1/3Bzff9ucXv/d3l//3Bzff9ucHf/bnF7/25wd/95e4H/
+bG95/29xdf93eX//bnF7/2xvef9ucXv/c3Z//2dqdP9zdn//bnF7/3Bzff9wc33/cHN9/3V4gf91eIH/
+e32D/3N2f/9wc33/cHN9/25xe/9zdn//cHN9/3d6g/93eoP/dXiB/3N1fP9wc33/c3Z//2xvef9maXP/
+cHN9/25wd/9zdXz/c3Z//2xvef9sb3n/cHJ5/25xe/9wc33/bnB3/3Bzff9ucHf/eHl9/29xdf9qbHP/
+bnF7/29xdf9zdXz/Zmlz/3Bzff9zdXz/cHJ5/2xvef93eoP/cHJ5/3Bzff91eIH/c3Z//3Bzff9wc33/
+am13/25xe/9ucHf/bnB3/25wd/9wc33/dXd9/2xvef9zdXz/eHl9/29xdf92eHz/bG51/2ptd/9qbXf/
+bnF7/25xe/9qbXf/Z2px/2Zobv9sb3n/bnF7/2Jlbv9maXP/Zmlz/25xe/9ucXv/bG51/2xudf9qbHP/
+amxz/25xe/9zdn//c3Z//3Byef9zdn//bnF7/3l8hv9zdn//c3V8/3d6g/97fYP/dXiB/3Z5g/93eoP/
+dnmC/3V3gP9wc33/fYCJ/3p8g/9wc33/d3qD/2ptd/9wc33/dnh+/3Byef90dnz/a254/2tueP9oa3X/
+c3V8/29yfP9pbHX/am13/3N1fv9sb3n/bG95/2xudf9xc3r/bnB0/3Byd/9sbnT/cXN5/25wd/9vcnv/
+cHJ2/25wdf9vcXX/amxz/2dqcf9tb3P/bG51/25wd/9zdXz/cXN6/25wef9sbnb/bnB3/21vdv9tb3X/
+cnR7/3Fzev9ucXn/bG95/2ptd/9sb3n/bG51/3d5f/93eX//c3V8/3Bzff9sb3n/am13/2xvef91d33/
+dXd9/2xudf91d33/dXd9/2xvef9ucXv/cHN9/3N1fP9zdXz/bnB3/25wd/9vcXX/bnB3/3V3ff93eX//
+cHN9/25xe/93eoP/Z2p0/2xvef9sbnX/cHJ5/25wd/9sb3n/bnB3/2RmbP9ucHf/bG95/3N2f/9ucXv/
+bG51/3d5f/9ucHf/bnB3/3Bzff9wcnn/bnB3/2xvef9ucXv/dXiB/3d6g/91eIH/d3qD/3N2f/9wc33/
+cHJ5/3Bzff9sb3n/bnF7/3N2f/91d33/cHJ5/2ptd/9zdn//bG51/3Byef9wcnn/bnF7/2ptd/9sb3n/
+Z2p0/21vc/9ucHf/bG95/3Byef9ucHf/amxz/3V3ff92eHz/bnB3/2dqcf9qbHP/dXd9/3Byef9sbnX/
+b3F1/29xdf9ucHf/c3V8/3N1fP9sbnX/am13/2psc/9sb3n/Z2px/25xe/9nanT/amxz/2dqcf9nanH/
+dXd9/2psc/9sbnX/dXd9/2xudf9maXP/amxz/25xe/9nanT/bG95/2xvef9qbXf/bnB3/2xudf9qbXf/
+am13/3N1fP9tb3P/bG51/2xvef9sb3n/am13/2Zpc/9ucXv/am13/2psc/9kZ3H/Z2px/2ptd/9nanT/
+Zmlz/2ptd/9sbnX/bG51/21vc/9sbnX/bnB3/2xvef9wcnn/c3V8/2xvef93eX//cHN9/3d5f/9sb3n/
+am13/25xe/9wcnn/c3Z//2ptd/93eoP/c3Z//3N2f/9ucHf/c3Z//25wd/9wcnn/cHJ5/25wd/9wcnn/
+c3V8/2xudf9wcnn/bG51/2xudf9sbnX/am13/3Bzff9sbnX/cHJ5/3h5ff9tb3P/dXd9/3Byef9zdXz/
+c3V8/3V3ff92eHz/cHJ5/25wd/9ucHf/cHN9/3N2f/9sb3n/cHN9/3Bzff93eoP/eXuB/3V4gf91eIH/
+bG95/3N1fP95e4H/fn+D/3t9g/95e4H/fX6B/3Bzff99gIr/cnV+/3J0e/90d4D/d3mA/3R3gP90dn//
+dHeA/3V4gf90dn7/b3F4/3l8hP94eoD/bG95/3BzfP9pa3L/b3F6/3V3ff9ucXr/dHZ9/2ptdv9rbXb/
+a212/3R2fP9wc33/bG52/25weP90dnv/bnB3/21weP9pbHb/am11/2lsc/9sb3f/bG5z/21veP9vcXj/
+bG95/29xef9ucHf/bW90/2Zobv9nanH/bG51/2xudf9sbnX/dHZ7/25weP9rbnj/Zmly/2Zpc/9nanL/
+Y2Zw/2ptd/9qbXX/am13/2xvef9qbXf/bG95/2xudf9zdn//c3V8/3Bzff9wc33/am13/2psc/9nanT/
+dXd9/3N1fP9qbXf/dXd9/3Bzff9sbnX/bG95/25xe/9wcnn/dnh8/3N1fP9ucHf/bW9z/2xudf93eX//
+dXiB/25xe/9ucHf/eXuB/2xudf9wcnn/bG51/2xvef9ucHf/bG51/2ptd/9kZ3H/am13/2dqdP9qbXf/
+am13/2Zpc/9zdXz/bG51/2dqdP9sb3n/Z2px/2dqcf9qbHP/bG51/25xe/9ucXv/bG95/2xvef9qbXf/
+bG51/2dqdP9qbXf/Zmlz/2xudf9sb3n/cHJ5/2psc/9kZ3H/Z2p0/2dqdP9sbnX/bG95/2ptd/9qbHP/
+bG51/2BjbP9qbHP/Z2px/2psc/9qbXf/bG51/2Zpc/9qbXf/bnF7/2dqdP9gY2z/YmVu/2ptd/9nanT/
+Z2p0/2dqcf9qbHP/am13/2xvef9ucXv/bnB3/25wd/9ucHf/c3Z//25wd/9zdn//cHN9/2xvef9sb3n/
+bW9z/3l7gf9vcXX/bnB3/3V3ff9ucXv/bG95/25wd/9wc33/bG51/3Byef9ucHf/bnB3/3N1fP9ucHf/
+bnB3/29xdf91d33/b3F1/21vc/9sbnX/bnB3/25wd/9ucHf/c3V8/25wd/9ucHf/bnB3/29xdf91d33/
+b3F1/2Zobv9wcnn/am13/2dqdP9qbHP/Zmlz/2xudf9sb3n/bG95/2ptd/9qbHP/cHJ5/2Zpc/9sb3n/
+Zmhu/11gav9iZW7/Zmhu/2Zpc/9dYGr/am13/2dqdP9maG7/YmVu/2dqdP9kZ3H/Zmhu/2Rncf9kZ3H/
+am13/2dqdP9iZW7/Z2px/2BjbP9iZW7/Zmhu/2Zpc/9nanT/ZGdx/2Zpc/9ucXv/Zmlz/3Byef9nanT/
+Z2p0/2xvef9ucXv/bG95/25xe/9sbnX/bG51/3J0e/9xdHv/aGt1/2tueP9pbHb/bG95/2xvef9sbnX/
+bnB3/2Zobv9maXP/am13/3Bzff9ucXv/am13/25xe/9qbXb/dHeA/25xe/9rbnb/bnF6/3Bzff9ucXr/
+bXB5/3Fzev9xc3v/b3F5/29xef91d3//d3l//3F0fP92eID/cHJ5/3R2fP93eYH/cHJ6/3d5gf95fIX/
+eHqC/3d5fv98foT/fH6F/3N1fP90dnz/eXuA/3d5gP9ydHz/c3V9/3Z4fv90dnz/dnh8/3F0ev9zdXv/
+dXd9/3h6gP90dn3/dHZ+/3Bzff9sb3n/bG95/3N1fP9wc33/c3Z//3d6hP90dn3/c3Z//2lsdv9tcHr/
+bW93/21vd/9zdXz/am13/29xeP9wc33/am13/3Byef9ucHf/eHl9/3Z4fP91d33/dXd9/25wd/9sb3n/
+bnB3/3V3ff91d33/bnB3/3V3ff92eHz/b3F1/3Byef9wcnn/dXd9/3V3ff9ucHf/am13/2xudf9qbXf/
+dXd9/3l7gf9ucHf/bG95/3V4gf9maXP/am13/2dqcf9qbHP/amxz/2dqdP9nanH/XWBq/2Zpc/9maG7/
+am13/2xvef9nanT/c3V8/2dqcf9qbHP/bG95/2dqdP9qbHP/bG51/2xudf9wc33/am13/25xe/9qbXf/
+am13/2ptd/9qbXf/bG95/2ptd/9qbHP/cHN9/3d5f/9sb3n/bnB3/3Byef9tb3P/bW9z/25wd/9zdXz/
+b3F1/2xudf9sbnX/bG95/2xudf9ucHf/bG95/2ptd/9qbXf/bnF7/3d5f/9nanT/amxz/2psc/9ucXv/
+bnF7/3N2f/9wcnn/bnF7/2xvef9zdXz/dnh8/3Byef9ucHf/am13/25xe/9tb3P/dXd9/3Bzff9sbnX/
+amxz/2xudf9zdn//am13/2xudf91d33/bG95/2ptd/9qbHP/bG95/2Rncf9nanT/Z2p0/2psc/9ucXv/
+amxz/2dqdP9sb3n/bnF7/2xudf9qbHP/am13/2ptd/9sbnX/am13/3Byef9sb3n/bnB3/25wd/9wcnn/
+dXd9/25wd/9maXP/dXiB/25wd/9ucHf/cHJ5/25wd/9zdXz/cHN9/3N2f/9wc33/cHN9/3d6g/9wc33/
+eXuB/3N2f/9ucXv/cHJ5/25wd/9ucXv/Z2p0/3V3ff9sbnX/bnB3/25wd/94eX3/bnB3/25wd/9sb3n/
+bG95/3N1fP9qbXf/Z2p0/2ptd/9sbnX/bW9z/25wd/9zdXz/dXd9/25wd/9zdn//d3l//2xvef93eX//
+c3Z//3Bzff91eIH/d3l//3l7gf9zdn//c3Z//3V3ff93eoT/enyD/3V3ff94e4P/eHqB/3V4gv90d4D/
+bnF7/3V4gf9qbXf/Z2p0/2xvef9wc33/c3V8/25wd/9ydHz/bnF6/3R3f/9ucHn/bG93/29yfP9ydHv/
+b3F4/25wdf9wcnf/bW92/25wdP9vcnr/cnR8/3V3fv9ucHf/dXh//2xud/9ydHz/dHd//25xef9zdn//
+c3V8/3J0ef9wc3z/c3V9/3R3gP9sb3f/bXB6/3V4gv9ucXv/b3J8/2xvef9vcXj/bnB4/3Bzev9vcXj/
+cXN6/25wd/9ydXz/cHJ4/21wef9tb3P/Zmhu/2dqcf9sbnX/bW9z/2ptd/91d33/bnB0/25xe/9maXP/
+bnB3/21vc/9tb3P/c3V8/2ptd/9qbXf/bnF7/2xudf9sb3n/amxz/3V3ff9zdXz/bnF7/3Bzff9nanT/
+amxz/2Zpc/9wcnn/bG95/2xudf9qbXf/bG95/2Zobv9maXP/Zmlz/2Zpc/9qbXf/Z2p0/2dqcf9maG7/
+amxz/25wd/9zdn//am13/2ptd/9zdn//am13/2xvef9qbXf/am13/2ptd/9zdXz/bnB3/2dqcf91d33/
+b3F1/3N2f/93eoP/c3V8/3t9g/9zdXz/c3V8/3Bzff9sb3n/bnB3/25xe/9sb3n/c3Z//25wd/9zdXz/
+bnB3/2xudf9sbnX/amxz/2xudf9qbXf/bG51/2xvef91eIH/am13/2dqcf9nanH/Zmhu/2Rncf9maXP/
+am13/2Zobv9qbHP/Zmlz/2psc/9nanH/amxz/2xudf9qbHP/amxz/2xvef93eX//am13/2dqdP9nanH/
+bnF7/25xe/9wc33/b3F1/29xdf9ucHf/cHJ5/3Z4fP91d33/bG51/21vc/9ucHf/bW9z/3N1fP9wc33/
+am13/3Byef9ucHf/d3l//3Byef9sbnX/dXd9/2xvef9nanT/Z2p0/2xvef9maXP/amxz/2ptd/9sbnX/
+c3V8/2xudf9nanT/bG95/25xe/9qbXf/bG51/2ptd/9qbHP/bG51/2ptd/9sb3n/bG51/2ptd/9sbnX/
+cHJ5/3V3ff9wcnn/Z2px/3N2f/9nanT/bnB3/25wd/9ucHf/cHJ5/3Byef9wc33/cHN9/3Byef93eoP/
+c3Z//3V4gf9sb3n/bG95/25wd/9vcXX/cHJ5/2dqcf9zdXz/bG95/2ptd/9maXP/d3l//2dqcf9qbXf/
+amxz/2Zpc/9qbXf/Zmhu/2Jlbv9maG7/Zmlz/2Rncf9nanH/am13/2xvef9maXP/am13/3V3ff9qbXf/
+dXd9/3N1fP9ucHf/dXd9/3N1fP93eX//cHN9/25wd/9sb3n/bG95/25xef9qbXX/b3J8/3N1e/9xc3z/
+c3Z//25xe/9zdn//am13/3Byef9wc33/d3qD/3l8hv90d4D/dHeB/29xev90d4H/cXN7/21wef9tcHr/
+dHZ8/29yev9wc3r/dXh//3N1fv9wc3v/cnV9/3Z4gf94en//c3V8/3p8gf9rbnf/b3F7/3V3ff9ucXv/
+dHeA/3V4gf9ydX//cnR7/3h7hP98foX/cnV+/3d6hP99gIr/dnmB/3R3gP9zdXz/dnmB/3R3gP9wc33/
+bnF7/3J1fv9tcHr/dnh8/21vdv9wc33/bnB3/2dqdP9qbXf/bnF7/25wd/9wcnn/d3l//3N1fP91eIH/
+cHN9/3V4gf9wc33/c3Z//36Ahv93eoP/c3Z//3V4gf9wcnn/bnF7/3Byef95e4H/dXiB/3l7gf95e4H/
+c3Z//25xe/9ucXv/d3qD/3Bzff9ucHf/bnF7/3V4gf9wcnn/cHJ5/25wd/9ucHf/c3V8/3Byef9vcXX/
+bG51/3N1fP92eHz/dnh8/25wd/9wcnn/dXd9/2xudf9ucHf/bnB3/29xdf9ucXv/c3Z//3N2f/9maXP/
+c3Z//3Byef9wc33/c3Z//2xvef91d33/cHJ5/25wd/9ucXv/am13/25wd/9wc33/cHJ5/3V3ff9ucHf/
+c3V8/25wd/9ucHf/cHJ5/29xdf9tb3P/bnB3/2ptd/9sb3n/d3l//25wd/9tb3P/bG95/25wd/9tb3P/
+cHJ5/3Byef9sbnX/bG51/2xudf9tb3P/am13/2xudf9ucHf/bG51/21vc/9zdXz/dXiB/2xvef9sb3n/
+am13/25xe/9wc33/c3Z//2xvef9vcXX/bG95/25xe/9zdn//dXiB/25xe/9ucHf/bnF7/2xvef9zdn//
+dXd9/25wd/9ucHf/bnB3/3d5f/9zdXz/bnB3/3N1fP9sbnX/Zmlz/2psc/9qbXf/ZGdx/2dqcf9qbXf/
+Zmhu/2xvef9nanH/ZGdx/2dqdP9sb3n/amxz/2xudf9sb3n/bG51/2ptd/9sbnX/cHJ5/25xe/9sb3n/
+bnF7/25xe/93eX//cHN9/2ptd/93eoP/cHN9/3Byef9wcnn/dXd9/3V3ff94eX3/e32D/3l7gf93eX//
+f4KM/3l8hv97fYP/d3qD/3N1fP91d33/c3Z//3V4gf9wc33/eXuB/3V4gf9wcnn/bnB3/3l8hv9ucHf/
+c3Z//3Bzff9wcnn/cHN9/3Byef9wcnn/cHJ5/25wd/9sbnX/bG95/3Bzff9ucXv/bnB3/25xe/93eX//
+bnB3/3V3ff9zdXz/bnB3/3V3ff9zdXz/d3l//3Bzff9ucHf/bG95/3R3gP91dnz/bnB3/3J0fP92eHz/
+b3F4/3J0e/9ucHf/c3V8/2psc/9qbXf/bG51/3Bzff9ucXv/c3V8/3J0e/9rbnT/c3V8/21wef9ucHf/
+bW92/3V3fP9tb3b/a212/21wev9qbXf/b3F4/2ttdf92eH//cnR7/25xeP91d33/Z2py/2xvef91d33/
+bnB3/3N2fv9vcnv/a254/2hrdf90d33/cHN9/2dqcv9nanT/dXiB/2dqdP9maG7/ZGdx/2Zpc/9qbHP/
+ZGdx/2BjbP9maXP/XWBq/25wd/9gY2z/Zmlz/2Zobv9maXP/Z2p0/2xudf9sbnX/bnB3/3N1fP9vcXX/
+cHJ5/2Zobv9sbnX/bG51/25wd/9wcnn/bnB3/25wd/91d33/cHN9/25wd/9ucHf/dXd9/3V3ff91d33/
+c3Z//3N1fP9ucHf/cHJ5/3V3ff9qbXf/bG51/25wd/9wc33/am13/2xvef9sbnX/cHJ5/3Byef9ucHf/
+bG51/25wd/9zdXz/c3V8/3V3ff9ucXv/bnF7/3V3ff9qbXf/bG51/21vc/9sbnX/am13/3N1fP9wcnn/
+Zmlz/3N2f/9ucHf/cHN9/3V3ff9wcnn/cHN9/29xdf9sb3n/bG95/2ptd/9sb3n/bnF7/2xvef91eIH/
+cHN9/3N2f/9ucXv/bnF7/3N2f/9wcnn/bnF7/2xvef9ucHf/cHJ5/3Z4fP9ucHf/bW9z/2ptd/9sb3n/
+bG51/3Byef9ucHf/am13/2xudf9qbXf/am13/25wd/9tb3P/bG51/2dqdP9qbHP/bG95/3V3ff9qbXf/
+Zmlz/2xudf9ucHf/dXd9/3V3ff9ucXv/cHJ5/3Bzff9ucXv/c3Z//3Z4fP9sbnX/b3F1/2xvef9ucHf/
+d3l//3V4gf9ucHf/bnF7/2xvef93eoP/cHJ5/25wd/9wcnn/bnB3/2dqdP9sbnX/am13/2Zpc/9qbXf/
+am13/2dqdP9wc33/Z2p0/2dqdP9zdXz/bnF7/2psc/9sbnX/bG51/2xudf9sbnX/bG51/2ptd/9sbnX/
+Z2p0/2xvef9qbXf/dXd9/2xudf9nanH/cHJ5/2psc/9sbnX/bG51/2xudf9sbnX/bnB3/3Byef9ucHf/
+bnB3/3l7gf91d33/c3Z//3Byef9sbnX/am13/2xudf9sb3n/ZGdx/25xe/9qbXf/am13/2xudf95e4H/
+bnB3/2xudf9sbnX/bW9z/3Byef9sbnX/bnB3/25wd/9qbXf/bG51/25wd/91d33/cHJ5/2xudf9wcnn/
+d3l//2xvef93eoP/dXiB/3N2f/91eIH/c3Z//3l8hv91eIH/cHJ5/3N1fP9ydHz/cXN5/3Byef90d3//
+dXd9/3BzfP9wc3z/bG95/3Bzff9nanT/bnB3/3Bzff9zdn//cHN9/3V4gf90d4D/aGt1/3Z5g/9ucXr/
+dHeA/3BzfP94e4T/cHN9/3BzfP9wc33/dXiA/3N1fv9sb3n/eXuB/3N2f/9wcnn/d3qD/2ptd/93eoP/
+eXyG/3V4gf95fIb/eXuB/3Byef9sb3n/e32D/3d5f/9ucHf/bnB3/3t9g/9ucHf/b3F1/2xudf9ucHf/
+bW9z/2dqcf9kZ3H/am13/2psc/91d33/amxz/25wd/9tb3P/bG51/29xdf9wcnn/b3F1/3N1fP91d33/
+bnB3/2xvef9kZ3H/bG95/3Bzff9ucXv/d3qD/3V4gf9wc33/d3qD/3V4gf9wc33/dnh8/35/g/9+gIb/
+fX6B/36Ahv97fYP/dXiB/3d6g/95e4H/c3Z//3Bzff91eIH/e32D/3d6g/93eoP/c3Z//3d6g/93eoP/
+dXiB/3N2f/9wc33/dXd9/3d5f/95e4H/dXiB/3V3ff94eX3/bnB3/25wd/9sbnX/bG51/2xudf9ucHf/
+bnF7/2ptd/9wc33/bnB3/25xe/9zdn//bG95/3Bzff9ucHf/cHJ5/25xe/9sbnX/bG51/3Byef9wcnn/
+dXd9/2xudf9zdXz/bG51/25wd/9zdXz/bnB3/25wd/9ucHf/bG95/3N1fP92eHz/bG51/21vc/9wcnn/
+c3V8/2xudf91d33/bG95/2xudf9sbnX/amxz/2ptd/9sb3n/am13/2psc/9qbHP/bG51/2xudf94eX3/
+am13/2dqdP9ucHf/bnF7/3V3ff92eHz/bnB3/29xdf9zdXz/cHJ5/25wd/9zdXz/bG51/2ptd/9qbXf/
+amxz/25xe/9wcnn/Z2p0/2xudf9ucHf/d3qD/2ptd/9ucXv/bnF7/2xudf9qbXf/am13/2xvef9maXP/
+bG51/2ptd/9sbnX/cHN9/2dqdP9maXP/c3V8/3Bzff9sbnX/bG51/2xudf9sbnX/bW9z/2ptd/9qbXf/
+amxz/2dqdP9sb3n/bG51/3N1fP9qbHP/ZGdx/2dqdP9maXP/amxz/2ptd/9nanH/am13/2dqdP9sb3n/
+bG51/25wd/95e4H/dnh8/3V3ff9zdXz/bnB3/25wd/9ucHf/bG95/2Zpc/9zdn//bnF7/2xvef9wcnn/
+foGK/3N1fP9wc33/c3Z//3Bzff9ucXv/am13/2xvef9vcXX/bG51/21vc/9vcXX/dXd9/3Bzff9nanT/
+bnF7/3V3ff9nanT/dXd9/3Byef9sb3n/dXd9/25wd/91d33/bG95/2dqdP9qbHP/c3Z//3N1ff9rbXT/
+cHJ5/25wd/9rbnj/bnF7/2ptd/9wc33/bG51/21vc/9ucHf/bnF7/2xvef9wc33/am13/2Vocv9zdn//
+bG51/25xe/9maXP/bnB3/2dqcf9nanH/amxz/2ptd/9maXP/YmVu/25wd/9kZ3H/YmVu/2Zpc/9cX2j/
+Z2p0/2xvef9maXP/Z2p0/3V3ff9sb3n/bG95/3l7gf91eIH/bnB3/3Bzff9+gIb/bnF7/29xdf9sb3n/
+bnF7/25wd/9sb3n/Z2p0/25xe/9qbXf/d3l//2dqdP9ucXv/bnB3/2ptd/9ucHf/bnF7/2xvef9zdXz/
+dXd9/25wd/9sb3n/aGp0/2xvef9tb3f/bnB3/3J1fv9tcHr/bnF6/3V4gf9wc33/c3V8/25wd/9zdn//
+c3Z//3N2f/9ucXv/dXiB/3Byef9wc33/c3Z//3Byef9ucHf/cHN9/3d5f/9wc33/cHN9/25wd/91eIH/
+c3Z//3Bzff9vcXX/bnB3/3d5f/91eIH/dnh8/3V3ff91d33/d3l//3Byef9ucXv/bG95/2xvef9ucHf/
+c3V8/3N1fP9sbnX/c3V8/29xdf9wcnn/dXd9/25wd/9zdXz/am13/2xudf9sb3n/Z2p0/2xvef9sb3n/
+amxz/25xe/9sbnX/cHN9/2psc/9sb3n/bnF7/2psc/9nanH/Zmlz/2Zpc/9nanT/bnB3/2Zobv9qbHP/
+Z2p0/25xe/9nanT/bnF7/2xudf9sbnX/cHJ5/21vc/9ucHf/bG95/2xvef9ucXv/am13/25wd/9ucHf/
+dnh8/2xudf9nanH/b3F1/25xe/91d33/c3Z//2xvef9wcnn/c3Z//3Byef9ucHf/dXiB/3Bzff9ucXv/
+bnF7/3N2f/91eIH/c3Z//2xvef9wc33/c3V8/36Ahv9ucHf/dXd9/3V3ff9tb3P/Z2p0/2xudf9qbXf/
+Z2p0/2xudf9vcXX/b3F1/3V3ff9ucHf/bnB3/3V3ff91eIH/bnB3/2xvef9ucXv/cHN9/25xe/9zdn//
+d3qD/3d5f/9zdXz/e32D/3l7gf9+f4P/e32D/3l7gf9+gYr/d3qD/3l7gf9+gIb/d3l//3V3ff91d33/
+eXuB/3V3ff93eX//gYOK/36Biv97fYP/d3qD/3Byef9ucHf/bnF7/25wd/9maG7/cHN9/2xvef9kZ3H/
+Z2p0/3V4gf9nanH/Z2px/2psc/9nanH/Z2px/2Jlbv9kZ3H/Zmlz/2Zpc/9maG7/ZGdx/2Rncf9maXP/
+YGNs/2dqdP9wcnn/ZGdx/3V3ff9sb3n/bG51/3N1fP9sbnX/d3l//3Byef9vcXX/bG51/3V4f/90d37/
+bW90/3N1fP9ucHf/bnB3/3N2f/9sb3n/cHJ5/2dqdP9ucHf/cHN9/3Bzff9ucHf/c3V8/3Byef9maG7/
+d3qD/2xudf9wcnn/am13/3N1fP9sb3n/bW9z/25wd/9ucHf/bnB3/2xudf91d33/cHJ5/2xudf9wc33/
+ZGdx/2xvef9wcnn/bG95/2xudf91d33/c3V8/2xudf94eX3/d3qD/25wd/9ucXv/foCG/3Bzff9wcnn/
+bnF7/25xe/9ucHf/am13/2psc/9rbnj/a254/3d6hP9wcnn/dXiB/3N1fP9ucXv/cHN9/3Bzff9wc33/
+eXuB/3Z5gv91eIH/cHJ8/2lrdP9rbnj/bW93/29xef9xdH3/bnF7/21wev9zdn//c3Z//3Bzff9ucXv/
+d3qD/3N2f/91d33/bnB3/3N1fP9vcXX/bnB3/3Byef9ucHf/b3F1/3Byef92eHz/bnB3/3Byef9ucHf/
+dXd9/3Byef9wc33/bG95/3Bzff91d33/d3l//3N1fP9sb3n/bnF7/3Z4fP9tb3P/am13/2xudf9qbHP/
+am13/25wd/9sb3n/Z2p0/3Bzff9sbnX/bnF7/3Bzff9nanT/bnF7/2ptd/9qbHP/am13/2Zpc/9qbXf/
+bG95/2xudf9wc33/bG51/25xe/9qbXf/bnF7/3Bzff9qbXf/bG51/2dqdP9qbXf/bnF7/3N1fP9sbnX/
+am13/25wd/92eHz/bnB3/3N2f/9sb3n/bG95/3Bzff9ucHf/bG51/29xdf9wcnn/bnF7/3Byef9wc33/
+bG95/3d6g/9sb3n/bnF7/3N1fP9zdn//dXiB/3d6g/9ucXv/cHJ5/3d6g/91eIH/cHN9/3N1fP9qbXf/
+bW9z/25wd/9ucHf/cHN9/3Byef9nanT/bG95/3Byef93eoP/bG95/3N1fP9wcnn/bG51/2psc/9qbXf/
+bG51/2Zpc/9sbnX/amxz/2dqdP9ucXv/bG51/2dqdP9ucXv/bG95/2psc/9nanH/Z2px/2xudf9sbnX/
+am13/2psc/9maG7/YGNs/2Rncf9kZ3H/bG95/2Zpc/9maXP/Z2p0/2Zpc/9kZ3H/bG95/2psc/9nanT/
+Zmlz/2xvef9sb3n/Zmlz/3d5f/91d33/dXd9/3Byef9ucHf/bnB3/3Byef9wcnn/am13/3d6g/9zdXz/
+bG95/3Byef95fIb/bG95/25wd/9sb3n/bG95/2xvef9qbHP/bG51/2xudf9qbHP/bG51/2psc/9sb3n/
+am13/2Zpc/9sb3n/dXd9/2Rncf9sb3n/Zmlz/2dqcf9maXP/Zmlz/3N1fP9qbXf/Z2px/2dqdP9xdH3/
+c3V8/2psc/9ucXv/amxz/2psc/9sb3n/am13/2xvef9qbXf/bG51/3Bzff9ucXv/bG95/3N1fP9wcnn/
+amxz/36Ahv9zdXz/cHJ5/2xudf93eX//bG95/21vc/9ucHf/bG95/2xvef9nanT/dXd9/2xvef9qbXf/
+cHN9/2Rncf9ucXv/bG95/2ptd/9sbnX/b3J7/29ye/9oa3X/c3V8/3J0fP9nanT/bG52/3h6gP9rbXT/
+bG51/21vdv9sbnX/bG51/21vdf9pa3L/bG92/2hrdf9zdn3/bXB6/2xvef9tb3b/Z2px/21vc/9sbnX/
+bG51/3Z4fP90dnz/cHJ7/2xvef9pbHP/bW92/2ttdv9sb3f/dHZ8/25wef9sbnf/cHJ5/25wd/9qbXf/
+am13/3N1fP9ucXv/c3V8/2xudf9ucXv/amxz/2ptd/9qbXf/bG51/2psc/9qbXf/am13/2psc/9qbHP/
+bG51/2xvef9sb3n/am13/2ptd/9sb3n/c3V8/3N2f/9wc33/cHN9/3V3ff94eX3/bnB3/3Bzff9zdXz/
+bnF7/25xe/9zdn//c3Z//2xvef97fYP/c3Z//3t9g/97fYP/c3V8/36Ahv91eIH/c3Z//3d5f/94eX3/
+d3qD/3l8hv91eIH/e32D/3N2f/9zdn//cHJ5/3d6g/91d33/bG95/25wd/9sb3n/bnB3/3V4gf91d33/
+bnB3/2xvef9ucXv/dXiB/3Byef91eIH/bG95/25wd/9wcnn/bW9z/2psc/9vcXX/cHJ5/2xvef9sb3n/
+bnF7/25xe/91eIH/am13/2xvef9zdXz/bnF7/3V3ff91d33/b3F1/29xdf91d33/bnB3/2xudf9zdXz/
+bnB3/25wd/9zdXz/cHN9/3N2f/9zdXz/bG95/25xe/9wc33/eXuB/3N1fP91eIH/dXiB/3Byef9sb3n/
+bnF7/25xe/9ucHf/bnF7/25xe/9wcnn/c3Z//25xe/9sb3n/cHN9/3Bzff9vcXX/bG95/2xvef9vcXX/
+bnB3/3Bzff9wcnn/b3F1/25wd/9zdXz/bnB3/3d5f/9ucHf/bG95/3N2f/9ucHf/cHJ5/3Bzff9zdXz/
+bnB3/25wd/9wc33/cHN9/2dqdP93eX//dnh8/3Z4fP9zdXz/bG51/2xudf9ucHf/bW9z/2dqcf9zdXz/
+bW9z/2xudf9sbnX/eXyG/2xudf9nanT/Z2px/2Zpc/9sbnX/Zmlz/2Zpc/9nanH/ZGdx/2xudf9qbHP/
+bnF7/2xudf9kZ3H/bG95/3V3ff9maXP/c3V8/25wd/9sb3n/c3Z//25xe/93eoP/dXd9/25wd/9ucXv/
+b3J6/3J0fP9ucHf/dXd9/29xdf9ucHf/cHN9/25xe/9zdn//bG95/2xvef9wc33/cHN9/25wd/9zdn//
+bnF7/2ptd/94e4X/dHZ8/3J0fP9sbnX/dHZ8/29xeP9sbnX/b3F4/29xeP9tcHr/bnB0/3V3e/9wcnn/
+aGt1/21wev9jZm//cHJ5/25xev9tb3P/bW92/3Z4fP9ydHv/cHJ3/3V3fP9ydHv/aGtz/21vdv96fIP/
+bW93/2xvef9tb3f/aWx2/2xudf9rbXb/aWx1/2hrcv9pa3T/dnh+/25wd/9tb3f/a254/2dqcf9tb3P/
+bG51/25wd/91d33/cnV+/3F0ff9vcXr/aWxy/21vd/9tb3b/b3F5/3BzfP9rbnj/bnB4/25wd/9wcnn/
+bG51/25wd/94eX3/cHJ5/3N2f/9wcnn/c3Z//3Byef9zdXz/d3qD/3N1fP9wcnn/cHN9/3N2f/9sb3n/
+bG95/3Byef9zdXz/c3V8/29xdf9ucHf/bnF7/3l7gf93eX//dXd9/3N1fP91d33/dXd9/25wd/9ucHf/
+b3F1/25wd/9ucHf/bnF7/2ptd/9kZ3H/dXd9/2ptd/9zdXz/dnh8/25wd/94eX3/cHJ5/29xdf9wcnn/
+bG51/3Bzff9ucXv/bG51/3N1fP9tb3P/c3V8/2xudf9zdXz/cHN9/2psc/9qbXf/Z2p0/2ptd/91d33/
+dXd9/25wd/9ucHf/bG51/3Bzff9sbnX/bG95/2ptd/9sbnX/cHN9/21vc/9qbHP/am13/2xvef9tb3P/
+bG51/21vc/9qbHP/c3Z//2dqcf9sbnX/bW9z/21vc/9zdXz/c3V8/2xudf9tb3P/cHN9/25wd/9ucHf/
+Zmlz/2Zobv9maG7/am13/2Zpc/9qbXf/bG95/2psc/9qbXf/am13/3N2f/9qbXf/cHN9/3Bzff9nanH/
+ZGdx/2dqdP9qbXf/am13/2xudf9sbnX/bG51/25xe/9sbnX/am13/3Byef9zdXz/b3F1/2xudf9sbnX/
+bG51/2xvef9ucXv/am13/21vc/9sbnX/dXd9/2xudf93eoP/cHN9/21vc/9wcnn/bG51/2dqdP9sbnX/
+amxz/2dqcf9maXP/Z2p0/2ptd/9maXP/c3Z//3d5f/9wcnn/Z2p0/2Rncf9kZ3H/bG51/2ptd/9maXP/
+bG95/2xudf9maXP/Z2p0/3d6g/9qbHP/bG51/2psc/9maXP/bG51/2Zpc/9kZ3H/bG51/2dqdP9qbHP/
+amxz/2ptd/9nanT/YGNs/2ptd/9zdXz/YmVu/25xe/9sbnX/Z2px/2ptd/9qbXf/dXd9/25xe/9maXP/
+am13/25xe/9xc3r/a254/3ByeP9sbnX/a210/2ptd/9sbnX/am13/2dqdP9qbHP/Zmlz/2dqdP9maXP/
+am13/2hrcv9iZW7/cnR6/25xev9ucXr/a253/3R2ev9ucHn/bG51/21veP9rbnj/bnF7/21weP9vcnz/
+b3J6/2tueP9vcnz/ZWhx/3F0fP9wcnn/am11/2ptd/90d4D/cnV9/21weP9xc3v/cXN6/2psc/9qbXX/
+dXd//2ttdP9tcHr/a254/2lsdP9tb3T/aWx1/2hrdP9tbnX/aGt0/3d4ff9xc3j/bXB6/21vdv9maXP/
+amxz/2dqdP9qbXf/bnF7/3N1fP9vcnv/bXB6/2Vocv9qbXf/am13/3N1ff9xc3v/bW92/25xev9sb3n/
+bG95/2dqdP9sbnX/c3V8/2ptd/9qbXf/Z2px/2Zpc/9nanH/Z2px/2ptd/9nanH/Zmhu/2Zpc/9qbXf/
+YmVu/2Jlbv9maG7/Zmlz/2ptd/9sbnX/YmVu/2Zpc/9sb3n/c3V8/3Bzff9zdXz/cHN9/3d5f/9qbXf/
+bW9z/2xudf9ucHf/bnB3/3V3ff9sbnX/Z2px/3V3ff9wcnn/dXd9/3V3ff9sbnX/c3Z//3Bzff9tb3P/
+b3F1/29xdf92eHz/c3V8/2xudf91d33/am13/2ptd/9nanT/bnF7/2ptd/9iZW7/Z2px/2Jlbv9iZW7/
+Z2p0/2dqdP9nanH/Z2p0/2psc/9zdXz/bG51/3Byef9sbnX/bnB3/3N1fP9sbnX/YmVu/2psc/9qbXf/
+bG51/2dqdP9qbHP/Z2p0/3d5f/9nanH/bG51/21vc/9sbnX/c3V8/3V3ff9wcnn/bW9z/3Bzff9sbnX/
+amxz/25xe/9sb3n/b3F1/3d5f/9sb3n/cHN9/3Bzff9ucHf/bnF7/2xvef97fof/bnF7/3d6g/95e4H/
+c3V8/2xvef91eIH/c3V8/25wd/9ucXv/bnF7/25wd/9wc33/cHJ5/2xvef9zdn//cHJ5/2xudf9sbnX/
+am13/2ptd/9ucXv/cHN9/25wd/9ucHf/Z2p0/3V3ff9ucHf/eXuB/3N1fP9vcXX/cHJ5/25wd/9vcXX/
+c3V8/2xudf9sbnX/bnB3/3Byef9sbnX/bG51/3l7gf93eX//d3l//3Byef9sb3n/am13/25xe/9ucXv/
+am13/3N2f/9vcXX/amxz/2ptd/9+f4P/bnF7/3Byef9ucHf/bnB3/25wd/9sb3n/am13/3Bzff9wcnn/
+cHJ5/3N1fP93eoP/c3Z//25xe/95e4H/e36H/2dqdP91eIH/d3qD/3N2f/93eoP/d3qD/3t+h/97fYP/
+c3Z//3V4gf9sb3j/bnB2/25xef9ydXz/cXR9/3Bzff9vcXj/bG95/25wd/9sb3n/bG95/3Byef9sb3n/
+bG51/3J1fP9ucHf/Z2px/3J1fv9zdXr/cHJ5/2tueP9ydHr/cHJ6/29xd/9wc33/b3J8/3F0ff9xc3z/
+cXR9/3N2fv9ucHn/c3Z+/2hrdP9zdn7/dXh//29xeP9ucHf/dXiA/3F0ff9tcHr/dHZ7/3R2e/9pbHT/
+bnF4/3V4f/9sbnb/bnB3/2xudf9sbnX/bW90/2hrc/9rbXT/a254/2dqdP9wc33/bnB0/21wef9tb3P/
+amxz/21vc/9nanT/bG51/2xvef9sb3n/am13/3Byef9nanT/Zmlz/2dqdP9ucXv/cHN9/2ptd/9ucHf/
+bG51/25wd/9qbXf/am13/3V3ff9wcnn/cHJ5/2xudf9ucHf/bG51/2xudf9ucXv/Z2p0/2psc/9qbXf/
+bnF7/2psc/9qbXf/bG95/3Bzff9sb3n/am13/2dqdP9ucXv/cHN9/3d5f/94eX3/dnh8/3V3ff93eX//
+bG51/2xudf9sb3n/bG95/2xudf9wcnn/cHJ5/2xudf92eHz/bnB3/3N1fP91d33/am13/2xvef9sb3n/
+bG51/21vc/9sbnX/dXd9/3N1fP9ucHf/cHN9/2ptd/9qbXf/Z2p0/3V3ff9wcnn/Z2p0/2ptd/9nanT/
+bG51/3Bzff9ucXv/bnB3/2xudf9tb3P/dnh8/29xdf9ucXv/cHN9/25xe/91d33/bG51/2dqcf9tb3P/
+cHJ5/2xudf9tb3P/bW9z/2ptd/93eX//Z2p0/2psc/9sbnX/am13/3V3ff92eHz/cHN9/29xdf91d33/
+bnB3/25wd/9qbXf/ZGdx/2psc/9ucXv/am13/2psc/9nanT/Z2px/2xudf9qbXf/dXiB/2xudf9wc33/
+dXd9/2xudf9nanT/bnF7/21vc/9sbnX/bG51/2ptd/9nanT/am13/2dqcf9nanT/bnF7/2ptd/9qbXf/
+am13/2ptd/9qbXf/bG95/25xe/9sb3n/Zmlz/2BjbP9qbXf/Zmhu/25wd/9qbXf/Z2px/2dqdP9maXP/
+Zmhu/2dqdP9kZ3H/Zmlz/2Zpc/9sb3n/am13/2dqdP93eoP/c3V8/3V3ff9nanT/ZGdx/2Jlbv9nanH/
+Z2px/2dqdP9sb3n/Z2p0/2Jlbv9nanT/eXuB/2ptd/9qbXf/bG51/2xudf9ucHf/b3F1/2dqdP9ucHf/
+bG51/21vc/9sbnX/c3V8/2xudf9qbHP/dnh8/3V3ff9maG7/c3Z//3N2f/9sb3n/c3V8/3N1fP94eX3/
+dXd9/3Byef9zdXz/c3Z8/3J0e/9ucXv/cnV7/29xef9vcXj/bW93/3Byef9ucHf/b3F1/29xdf9sbnX/
+bW9z/25wd/9wcnn/bG95/2hqcf91d37/cnV6/21wef9tb3b/dXd9/3R2fv9ucHf/b3F6/3F0ff9ucXv/
+cXN6/3J0ff9zdn7/cnR7/3Z5gf9rbnf/c3Z//3R3f/9vcXb/b3F2/3N2f/9wc33/bnB3/3R3gP90dnv/
+am10/3J0e/90dn3/bG51/29xef9sbnX/am12/2xvc/9gY2z/Zmlz/2dqdP9kZ3H/bG95/2dqcf9qbXf/
+amxz/2ptd/9qbXf/bG51/2xudf9wcnn/bnB3/21vc/9ucXv/Z2p0/2Zpc/9nanT/bG95/25xe/9wcnn/
+cHJ5/25wd/9ucHf/bW9z/25wd/9zdXz/dXd9/3Bzff9ucHf/bG95/2xvef9sb3n/dXd9/29xdf9ucHf/
+bnF7/3Bzff9vcXX/bG95/3V4gf91eIH/bnF7/3N1fP9wc33/d3qD/3d6g/95fIb/e36H/36Ahv9+f4P/
+e36H/3Bzff9wc33/dXiB/3N2f/9wc33/cHN9/25xe/9qbXf/eHl9/3N2f/91d33/dXd9/2xvef9wcnn/
+cHJ5/29xdf9sb3n/bnB3/3N1fP9zdXz/cHJ5/25xe/9qbXf/am13/2dqdP91d33/c3V8/2xudf9sb3n/
+cHJ5/3Byef9zdn//dXiB/3V4gf9zdn//cHJ5/3t9g/9wc33/dXiB/3d6g/95fIb/e32D/3d6g/9wc33/
+dXd9/3N2f/9zdn//cHN9/3N1fP9zdXz/d3qD/2ptd/9sb3n/cHJ5/25wd/91d33/dnh8/3V3ff9ucHf/
+dXd9/25wd/9tb3P/bG95/2ptd/9wcnn/c3Z//3Bzff9ucXv/dXd9/2xudf9ucHf/bnB3/3t9g/9vcXX/
+c3V8/3Z4fP9ucHf/amxz/25xe/9qbXf/am13/2xudf9qbXf/bG51/2psc/9nanH/bG51/25xe/9qbXf/
+am13/2xudf9qbXf/ZGdx/2xvef9ucXv/bG95/2Zobv9kZ3H/am13/2dqdP9zdXz/am13/2dqdP9zdXz/
+bG51/2xudf9zdXz/b3F1/2xvef9sb3n/c3Z//25xe/9vcXX/e32D/3d5f/93eX//bnB3/2xudf9nanT/
+bnB3/25wd/9sb3n/dXiB/25wd/9ucHf/bnB3/31+gf9ucHf/bG95/2xudf9nanT/Z2p0/21vc/9nanT/
+bG51/2psc/9sbnX/Zmlz/2xvef9nanT/Z2p0/3Bzff9zdXz/ZGdx/3N1fP9ucXv/bG51/3N1fP9ucXv/
+cHN9/3Bzff9sb3n/bG95/3Fze/9ydHv/b3J5/3R2fP9vcXb/bW95/2hrdf9oa3X/am13/2psc/9qbHP/
+bG95/2Zpc/9maXP/Z2p0/2dqc/9gY2z/cXR9/29xef9sb3j/bG52/3J0e/9vcnv/b3F1/25weP9wcnn/
+cHJ2/25weP9wcnn/bnB3/25weP9ydX7/Z2p0/3N2f/9xc33/bnB3/3Bzff9wc33/bnF7/21vc/9zdXz/
+dnh8/2xudf9zdn//d3qD/29xdf9wcnn/bG95/2xvef9sb3n/Zmhu/25wd/9ucHf/amxz/3V3ff9sb3n/
+cHJ5/29xdf9sbnX/bnB3/2xudf9tb3P/c3V8/2xudf9sbnX/bnF7/2Zpc/9qbXf/Z2p0/2ptd/9wc33/
+bG95/3Bzff9sb3n/bG51/25wd/9ucHf/c3V8/3N2f/9zdXz/b3F1/25wd/9ucHf/bG51/3V3ff9vcXX/
+bG51/25wd/9wcnn/bG95/25wd/91eIH/e32D/3Bzff9wc33/c3V8/3N2f/91eIH/eXuB/3d5f/9zdn//
+dnh8/3d5f/9nanT/b3F1/25xe/9wc33/cHN9/3Bzff9ucXv/bnB3/3V4gf9wc33/c3Z//3V4gf9ucHf/
+cHN9/25xe/9ucHf/bG95/2xvef91d33/c3Z//25xe/9wc33/bnB3/25wd/9nanT/c3V8/3N2f/9qbXf/
+bG95/25wd/9sb3n/c3Z//3Bzff9zdn//c3Z//3Bzff95fIb/cHJ5/25xe/9zdn//cHN9/3Bzff9wc33/
+Z2p0/25wd/9zdn//bnF7/3Byef9wcnn/cHJ5/3d6g/9ucHf/cHJ5/3Bzff9sb3n/d3l//3Z4fP91d33/
+bnB3/3N2f/9ucHf/bnB3/25wd/9ucHf/cHJ5/3d5f/91eIH/c3Z//3l7gf9ucXv/bnF7/3N2f/9+gYr/
+c3V8/3d6g/97fYP/cHN9/3Byef9ucXv/bG95/2xvef9sb3n/bG95/3Bzff9ucXv/bnB3/3Bzff97fYP/
+dXiB/3Bzff9ucXv/cHN9/25xe/93eoP/e32D/3l7gf9zdn//cHJ5/3N2f/9wcnn/eXuB/3Bzff9ucHf/
+d3qD/3N1fP9zdXz/eXyG/3V3ff91d33/c3V8/3d6g/91eIH/c3V8/3l8hv93eoP/d3l//3Bzff9sb3n/
+Zmlz/25wd/9sbnX/b3F1/3Byef9ucHf/bnB3/2xvef97fYP/bnF7/25xe/9ucHf/bG51/2ptd/9qbHP/
+amxz/2xudf9ucHf/bnB3/2dqdP91eIH/am13/2xvef93eoP/c3Z//2Zpc/91d33/c3Z//3Bzff93eX//
+c3Z//3V3ff9wc33/bnF7/25wd/91d3v/dXd7/3Byef91d3z/bnB0/3Byef9qbXf/bG95/25wd/9tb3P/
+bG51/25xe/9maXP/YmVu/2dqdP9kZ3H/YGNs/3J1fv9sb3n/Zmhu/2RmbP9sb3n/Z2py/2dqcf9oa3L/
+Z2lz/2dpb/9laHH/bG95/2ptd/9sbnX/bG95/2Rncf9wc33/bG95/2xudf9qbXf/c3Z//3V4gf9vcXX/
+cHJ5/3V3ff9sbnX/dXd9/3d5f/9tb3P/bnB3/2xudf9ucHf/bnF7/2Zobv9sbnX/bnB3/2dqcf91d33/
+bG51/25wd/9ucHf/b3F1/25wd/9ucHf/am13/3Bzff9sbnX/am13/2xvef9maXP/Z2p0/2Vocv9tb3T/
+c3V8/25wd/9ydHv/c3Z//2xvef9ucHf/bG95/3Bzff9zdXz/c3V8/25wd/9ucHf/b3F1/21vc/9wcnn/
+bW9z/25wd/9ucXv/c3Z//3Bzff9wcnn/dXiB/3d5f/9sb3n/bG95/29xdf9ucHf/cHJ5/3Z4fP9ucXv/
+c3V8/3Bzff9zdXz/ZGdx/2psc/9qbXf/am13/2ptd/9sb3n/bnB3/2dqdP9zdXz/bnF7/25xe/9wc33/
+bG51/2xvef9sb3n/am13/2psc/9sbnX/c3V8/3Bzff9ucHf/cHJ5/2xudf9tb3P/Z2px/2xvef9wc33/
+bG51/25wd/9ucHf/b3F1/3N1fP9zdXz/bnB3/25xe/9tb3P/dXd9/2xudf9sb3n/bnF7/25xe/9ucXv/
+am13/2Zpc/9sbnX/c3V8/25wd/9sbnX/bW9z/2xudf94eX3/bnB3/25wd/9ucXv/bnB3/3Z4fP91d33/
+eHl9/25wd/9zdXz/bG51/29xdf9ucHf/bnB3/3Byef91eIH/c3Z//3Bzff93eoP/bnF7/3Bzff9ucXv/
+eXyG/25wd/9zdXz/dnh8/25wd/9ucHf/bnF7/3Byef9qbXf/bnB3/25wd/9ucXv/bnB3/25wd/9sbnX/
+dnh8/25wd/9tb3P/bnB3/25wd/9qbXf/cHN9/3V3ff92eHz/cHJ5/2xudf9wc33/cHJ5/3l7gf9wc33/
+bnF7/3V3ff9tb3P/bnB3/3Byef9ucHf/b3F1/25wd/9zdXz/cHJ5/29xdf95e4H/dXiB/3l7gf9ucHf/
+bnB3/2RmbP9sbnX/Z2p0/2psc/9sbnX/am13/2Zpc/9qbHP/c3Z//2ptd/9qbXf/am13/2dqdP9maXP/
+am13/2Zpc/9qbXf/bG51/2xvef9nanT/bG95/2Rncf9maXP/bG95/2ptd/9iZW7/bnF7/2xvef9sbnX/
+cHN9/25xe/9zdXz/bnF7/2xvef9qbHP/cHN9/3Byef9sb3n/dnh8/21vc/9ucHf/bG51/25wd/9qbXf/
+bG51/21vc/92eHz/bnB3/2dqcf9zdXz/bnB3/2dqdP97fof/c3Z//25xe/9ucXv/eXuB/2xvef9ucHf/
+bG95/25xe/9ucHf/bnB3/25xe/9qbXf/bG51/2xvef9kZ3H/c3V8/25xe/9qbXf/bG51/3N2f/93eoP/
+cHJ5/3Bzff91d33/bG51/3V3ff95e4H/bG51/3Byef9ucHf/b3F1/3Byef9maG//Z2p0/2dqc/9hZG3/
+cHN9/2ttdP9oa3X/a21z/2psc/9qbXf/bG51/2ptd/9wc33/bG95/25xe/9tcHr/Z2p0/2dqdP9oa3P/
+bXB3/3J1fv9ucXv/bG95/3Byef9qbHP/amxz/2psc/9sb3n/bG95/2xvef9sbnX/bnF7/2psc/9sbnX/
+bnF7/2psc/9maXP/Zmlz/2ptd/9maXP/Z2px/25xe/9ucXv/amxz/2Zobv9kZ3H/Zmlz/2dqdP9wcnn/
+bG95/25xe/9wc33/c3V8/2Rncf9sbnX/am13/2psc/9nanT/bG95/2dqcf9qbHP/c3V8/25xe/9ucXv/
+cHN9/2psc/9qbXf/bnF7/25wd/9tb3P/b3F1/3V3ff9zdXz/c3V8/3N1fP9sbnX/bnB3/2psc/9ucHf/
+eHl9/25wd/9sbnX/bG51/2xvef9zdn//bnF7/2xudf9ucHf/bnB3/3V4gf9ucHf/cHJ5/3N1fP9ucXv/
+bnF7/3N1fP9qbHP/amxz/3V3ff9ucHf/bnB3/25wd/9ucHf/dnh8/21vc/9ucHf/c3V8/25wd/92eHz/
+dXd9/3Z4fP9ucXv/dXiB/25xe/9zdXz/am13/2Zpc/9qbHP/cHN9/2xvef9sbnX/cHN9/2ptd/9sbnX/
+bnB3/3l7gf9wcnn/c3Z//3V4gf9ucXv/bnB3/25xe/9ucHf/am13/25wd/9sb3n/bnF7/25wd/9ucHf/
+bG51/3d5f/9wcnn/b3F1/2xudf9ucHf/Z2px/2xvef9wc33/bnF7/2xvef9qbHP/bG95/2Zobv9sb3n/
+Z2px/2dqcf9qbXf/Z2p0/2Zpc/9sb3n/am13/2ptd/9qbXf/bG51/3V3ff9sb3n/eXyG/3l7gf95e4H/
+cHN9/25wd/9qbXf/c3Z//3N1fP9zdXz/dXiB/3V3ff91eIH/d3l//4OFjP97fYP/eXuB/3V4gf9zdn//
+cHN9/3N2f/9wc33/d3qD/3V3ff91eIH/cHN9/3l7gf9zdXz/bnF7/3V4gf9wc33/am13/3d6g/91eIH/
+cHN9/3N2f/93eoP/e32D/3N2f/9wcnn/b3F1/3V3ff91eIH/bnF7/3l7gf9ucHf/c3V8/29xdf9ucHf/
+bW9z/21vc/9vcXX/dXd9/25wd/9sb3n/bnF7/2dqdP9nanT/e32D/3V3ff9wcnn/bnB3/3Z4fP9tb3P/
+b3F1/25wd/9ucHf/bG51/2psc/9zdn//bnF7/25wd/9zdXz/Zmhu/3Z4fP9ucXv/b3F1/21vc/99f4X/
+e32D/3V3ff93eoP/fX6C/3V3ff98foX/f4GI/3N2f/92eYL/cnR7/29yfP9zdn//aGt1/25wd/9qbHP/
+ZWhy/29ye/9sbnX/bW92/21vdv9nanH/am13/2dqcf9maXP/bnB3/2Zpc/9nanT/bG92/2hrdP9lZ3D/
+ZWhw/2xudP9ucXr/a212/2hqc/9qbXf/bG51/2xudf9qbXf/bnF7/3Byef9wcnn/b3F1/3N1fP9wcnn/
+bG51/3N1fP9vcXX/bnB3/3Byef9zdXz/bnB3/3Byef9wc33/dXd9/25xe/9sb3n/bnB3/25xe/9zdXz/
+eHl9/3N1fP9zdXz/cHN9/3Z4fP9nanH/bG51/3Bzff9sbnX/bnB3/3V3ff9tb3P/bG51/3Z4fP9wcnn/
+cHJ5/3N1fP9sbnX/bG51/2xvef9zdXz/bG51/2xudf9wcnn/c3V8/3Bzff9zdXz/bnB3/25wd/9sb3n/
+bG95/3d5f/9ucHf/cHJ5/2xvef9vcXX/c3Z//3Bzff9sb3n/bG95/25xe/91eIH/bnB3/3N2f/9zdn//
+c3Z//3N2f/93eX//bnB3/2xvef9wc33/bG95/2xudf9sbnX/bG51/3Z4fP9qbXf/am13/3Byef9sbnX/
+c3V8/3N1fP9ucXv/bG95/3N1fP9qbHP/bW9z/21vc/9sbnX/bnB3/3V3ff9wc33/bG95/3N2f/9ucHf/
+bnF7/25xe/93eoP/cHN9/3N2f/95fIb/d3qD/3V3ff91eIH/dXd9/3N2f/9zdn//c3V8/3V4gf9wcnn/
+cHJ5/3Bzff91eIH/cHN9/25xe/9ucHf/cHJ5/2psc/9zdn//eXuB/3N2f/9ucXv/bG95/3N1fP9vcXX/
+c3V8/2xudf9sbnX/dXd9/25xe/9ucHf/cHN9/3Byef9wcnn/bnF7/3N1fP91eIH/bnF7/3l8hv95e4H/
+eXuB/25xe/9qbXf/Zmlz/3Byef9ucHf/am13/3Bzff9sb3n/cHN9/25wd/93eoP/c3Z//3Byef9ucHf/
+b3F1/2psc/9vcXX/bG51/3Byef9vcXX/am13/2xudf9zdXz/bG51/2xudf9wc33/bG95/2Zobv9wcnn/
+cHJ5/25xe/9sb3n/c3V8/3V3ff9ucXv/bG95/21vc/91d33/eXuB/25wd/91eIH/bG51/3Byef9tb3P/
+bnB3/2xvef9ucXv/cHJ5/3V4gf9wcnn/bG95/25xe/9qbXf/Zmlz/3Z5gv9zdn//cHN9/21vef92eH7/
+bnB3/29xdf9sb3n/bnB3/29xdf9vcXb/dHZ9/3Byef9ucHf/bG94/2Nmb/91d3z/bG95/2lsc/9nanT/
+bnF7/3V4gf9xc3v/c3Z//3N2fv9tcHr/dXd+/3J1f/9rbnj/bnF7/2xveP9tb3j/cXN6/29xeP9tb3P/
+aWty/2ptdP9wc3v/b3F4/3Bze/9ucXr/Z2p0/2xvef9qbHP/Zmlz/25wd/9nanL/aGt0/25xef9sbnb/
+aGt1/21wef9ydX7/dHeB/29xef9sb3j/bnF7/2xudf9qbHP/amxz/25xe/9sb3n/bG95/21vc/9ucXv/
+bnF7/2xvef92eHz/bnB3/3Byef9zdXz/cHJ5/21vc/9qbHP/bnF7/3N1fP9sbnX/bG51/2dqdP9sb3n/
+bG95/3Bzff9sb3n/c3V8/25xe/9wc33/Z2p0/2ptd/9ucXv/amxz/2dqdP9sb3n/Zmlz/2dqcf9sb3n/
+am13/2xvef9zdXz/amxz/2xudf9qbXf/bnF7/2ptd/9tb3P/bnF7/3V3ff9zdn//cHN9/25wd/9ucHf/
+bnB3/25wd/91eIH/bnB3/3Byef9ucHf/cHJ5/3N2f/91eIH/c3V8/3Bzff9wc33/e32D/25wd/9wc33/
+dXiB/3l7gf91eIH/d3l//2xvef9qbXf/bnF7/25wd/9qbHP/bnB3/2xudf94eX3/bnB3/2xudf9sb3n/
+am13/3Byef9zdXz/c3V8/2ptd/9zdXz/amxz/2xvef9ucHf/am13/21vc/92eHz/c3V8/25wd/91d33/
+b3F1/29xdf9vcXX/dnh8/25wd/9ucHf/bnB3/25xe/9qbXf/bG95/2psc/9sbnX/bG51/2xudf9qbXf/
+Z2p0/2dqdP9nanH/dXd9/2dqdP9nanH/ZGdx/2Zpc/9dYGr/Z2p0/3N1fP9sb3n/bG51/2ptd/9qbXf/
+amxz/2xvef9sbnX/am13/25xe/9wcnn/amxz/25xe/9qbHP/Z2p0/2xudf9sbnX/c3V8/2ptd/93eoP/
+cHN9/3Bzff9sb3n/am13/2psc/9ucHf/bW9z/2xudf9ucHf/bG51/3Byef9tb3P/d3l//3Bzff9sb3n/
+cHJ5/2xudf9maXP/bG51/2dqdP9wc33/am13/2xudf9ucHf/c3Z//25wd/9ucHf/dXiB/3V4gf9kZ3H/
+dXd9/25wd/91d33/bG51/3Bzff95fIb/c3Z//2xvef9sb3n/cnV+/3Z5gv9sbnX/enyC/29ydv9vcnz/
+bnB3/3Bzff9wc33/bG95/2xvef9wcnn/b3F1/2dqcf9ucHf/bG92/2hrdf91eIH/dXd+/3R2fv9ydHv/
+dXd8/29yd/9wcnf/b3F3/3J0e/9ucHj/b3J5/3V3ff9wcnj/cHJ3/3Fzev9sbnX/dHZ8/29xd/9tcHn/
+bG51/25xef9ydX7/bnB5/2xvef9vcXj/bG93/29yev9wcnj/aWx1/3Bze/9tcHr/a254/3Byef9tcHr/
+bW92/2dqdP9rbnb/dHZ9/3R2ff9zdX3/c3V8/29yef92eYL/dXd9/3Z4fP9+gYr/cXR+/3N2f/92eID/
+bW93/2hrdP9sb3n/b3J8/3V3ff9oa3X/YmVu/35/g/93eX//c3V8/3N1fP93eoP/c3Z//3N2f/9ucXv/
+cHN9/3V4gf9zdn//eXyG/3N2f/9wc33/cHN9/3Bzff9ucHf/am13/3Bzff91d33/bnF7/3Byef9sbnX/
+cHJ5/25wd/9zdXz/cHJ5/3V3ff9zdXz/cHN9/2ptd/9ucHf/d3qD/3Bzff9wc33/cHN9/2xvef9ucHf/
+dXiB/3Bzff91eIH/e32D/3V3ff93eoP/eXuB/3t9g/93eX//d3l//3l8hv97fof/e32D/36Ahv97fYP/
+eXuB/3V3ff91d33/gYOK/3Z4fP93eX//eHl9/3h5ff97fYP/d3qD/3N1fP95fIb/d3qD/3t+h/9wcnn/
+c3Z//3d6g/91eIH/dXiB/3l7gf9zdXz/c3V8/3V4gf9zdXz/Z2p0/2xvef9nanT/d3l//25wd/9qbXf/
+bnB3/2ptd/9ucXv/dXd9/3Z4fP9wcnn/c3V8/2xudf9vcXX/YmVu/2Jlbv9maG7/bnB3/2dqdP9iZW7/
+ZGdx/2BjbP9kZ3H/ZGdx/25wd/9kZ3H/Zmhu/2Zpc/9maXP/Zmlz/2Zobv9dYGr/YGNs/2Zobv9maG7/
+Z2p0/2Zpc/9nanT/Zmlz/3V4gf9sb3n/am13/2psc/9qbXf/Zmhu/25wd/91d33/c3V8/3N1fP9sb3n/
+bnF7/3Byef91eIH/c3Z//3N2f/91eIH/d3qD/3N1fP93eoP/cHN9/3Byef9wc33/c3V8/3d5f/9ucXv/
+eXyG/3l7gf91eIH/c3Z//25wd/9qbXf/c3V8/3Bzff9wc33/c3Z//25wd/9ucXv/bG95/3l7gf91d33/
+bnB3/3Byef9ucHf/bnB3/25xe/9wcnn/cHN9/2xvef9sb3n/bG95/3Bzff9ucHf/bnB3/3N1fP9zdXz/
+Zmhu/3Bzff9qbXf/bnF7/2ptd/9sb3n/dXiB/3Bzff9ucHf/bG51/3V2e/92eYD/bG52/3R2fP9sbnX/
+cXN6/21vd/9vcXn/cHJ5/3Byef9ucHf/bnB3/25wd/9qbHP/bG51/2psdP9pbHT/cHJ4/25weP9sb3f/
+bnB5/21vd/9ucHf/aGt1/2hrdP9qbXf/aGt0/2xvd/9sb3n/aWx0/21weP9nanT/ZWhv/25xev9vcnr/
+a254/25xeP9ydHz/dHZ9/29xe/9vcnz/b3J8/3N1ev9xdH3/cnR9/3F0ff92eYH/dXiA/25xev9zdXz/
+c3Z//3Byef9rbnj/b3J8/3h6gP90dn//cnR7/29xef9pbHb/cHJ5/21vc/9vcXX/d3l//29xdf90dnz/
+dnh8/2tud/9maXP/c3V8/3N1fP93eX//bG51/2psc/9zdXz/b3F1/25wd/9sbnX/bnF7/2ptd/9qbXf/
+amxz/2xvef9ucXv/bG51/3d5f/9vcXX/bnF7/3N1fP91d33/bnB3/2ptd/9zdn//c3Z//25xe/9wc33/
+am13/3Bzff9wc33/dXd9/3N1fP91d33/bnB3/25wd/9sbnX/bG95/3N2f/9ucXv/c3Z//3V4gf9zdXz/
+cHJ5/3d5f/91d33/cHJ5/3V3ff9tb3P/bG95/2xvef9wc33/am13/25xe/9ucXv/c3V8/3Byef91d33/
+bnB3/25wd/9ucHf/cHJ5/3l8hv9sb3n/bnB3/25wd/9ucHf/cHJ5/25wd/9qbXf/cHJ5/3Byef94eX3/
+bnB3/25wd/9zdXz/bnF7/3V4gf91d33/am13/29xdf9wcnn/bW9z/2Zpc/9qbXf/Zmlz/3Bzff9sbnX/
+Z2p0/2xvef9qbHP/Z2p0/2xvef9ucHf/Z2px/2dqdP9iZW7/ZGZs/25wd/9sb3n/bnF7/3d5f/91d33/
+bG95/3V3ff9qbXf/bG95/29xdf93eX//cHJ5/25xe/9wcnn/bnF7/2psc/9sbnX/Zmlz/2ptd/9sbnX/
+bG95/2xudf9tb3P/bnB3/25wd/97fof/c3Z//3V4gf9zdXz/dXiB/25xe/91eIH/e36H/3V4gf93eoP/
+d3qD/3d6g/93eX//eXyG/3l8hv95fIb/eXuB/3t9g/9zdn//d3qD/3N2f/9wcnn/bnB3/2xvef92eHz/
+b3F1/3l7gf93eX//c3V8/3N2f/9ucHf/Z2px/21vc/9sbnX/bG51/2xvef9qbHP/am13/2dqcf9zdn//
+bG95/2psc/9sb3n/bG51/2ptd/9qbXf/bG51/25xe/9sb3n/bG51/2xudf9ucHf/bG51/2dqdP9sb3n/
+bG95/11gav9qbXf/am13/3Bzff9sbnX/bnF7/3V4gf9ucXv/bG51/2xudf9ydHz/dHZ8/29xef9ucXv/
+bG50/25xef9nanT/am13/2dqdP9nanT/Z2px/2Zpc/9nanH/Zmlz/2ttdP9oa3T/bnB4/3V3ff9ydX//
+c3aA/3J1fv9tcHn/cnV+/29ye/9tb3f/cXR+/3J1fv92eH7/c3aA/25xev91d33/cXR9/21wd/9vcnz/
+c3Z//3J1ff90dnz/cnR8/3N1fP9wcnj/bnB3/3Byef91d3v/cHJ5/25wd/9tcHf/c3V8/3J0fP9sbnX/
+bW9z/3N2f/9wcnn/amxz/25xe/93eX//dHeA/3J0fP9vcnv/a211/29yef9ucHf/bW9z/3d5f/9vcXb/
+c3V9/3V3fv9sb3j/Z2p0/3N2f/91d33/d3l//25wd/9sbnX/c3V8/2psc/9nanT/bG51/2ptd/9sbnX/
+bG51/2ptd/9sbnX/cHJ5/2xudf94eX3/bG95/25xe/9zdn//cHN9/2xvef9nanT/dXd9/3N2f/9sb3n/
+dXd9/2xvef9wc33/dXiB/3d5f/9zdXz/dXd9/25wd/9zdXz/amxz/2xudf9wcnn/am13/3Byef9sb3n/
+amxz/2Zpc/9wcnn/am13/2dqdP9wc33/amxz/2xvef9sb3n/bnF7/2xudf9zdXz/cHJ5/3Byef9wc33/
+bnF7/2ptd/9sbnX/bG51/2xudf93eX//bW9z/2xudf9sbnX/bG51/3Byef9wcnn/b3F1/2xvef9ucXv/
+dXiB/2xvef9ucHf/dXd9/3N1fP9zdn//dXd9/2xvef9ucHf/c3Z//25xe/9qbXf/cHN9/2ptd/95e4H/
+dXiB/3Bzff93eoP/c3Z//3t9g/9+f4P/eXyG/3d6g/91eIH/c3V8/3N2f/9qbXf/bW9z/25wd/93eX//
+dXd9/3Byef93eX//cHJ5/3Byef9wcnn/e32D/3V4gf9wc33/bnF7/3Bzff9nanT/bG95/2ptd/9sbnX/
+bW9z/25wd/9ucHf/bG51/2dqdP9qbHP/dXiB/2xvef9ucXv/bG51/2ptd/9kZ3H/Z2p0/3Byef9maG7/
+am13/2dqdP9qbXf/Z2p0/2dqdP9sb3n/am13/3Bzff9ucXv/bG51/2xvef9sb3n/bG51/2dqdP9qbXf/
+dXd9/25wd/93eoP/dXiB/3V3ff91d33/b3F1/2Zobv9ucHf/bW9z/2xudf9ucXv/bG51/3Byef9tb3P/
+dXiB/3Bzff9qbHP/am13/2dqdP9sbnX/bG51/2ptd/9sb3n/bG95/2psc/9sbnX/Z2p0/2Zpc/9maXP/
+amxz/2xvef9iZW7/bG95/25xe/9wc33/amxz/2ptd/91eIH/bnF7/25wd/9sb3n/b3F4/3R2ff9wcnn/
+cXN4/21vc/9ydHv/bG51/25xev9wc33/cHN9/25wd/9wc33/cHN9/3Byef9wc33/bG94/25xef9xc3v/
+c3V8/29xeP91d33/bG95/3R3gP9ucXv/amx0/2xvef9ucXv/cHN8/3Bzff9wcnn/c3V8/3Byef9vcXj/
+cHN9/3Bzff9zdn//c3Z//3Bzff9wcnn/dXd9/3Byef9ucHf/d3l//25wd/9wcnn/bnB3/3V3ff91d33/
+bnF7/3Byef91eIH/bnF7/2ptd/9sb3n/c3Z//3Z4fP9xc3r/c3V8/21vdv93eoT/dXiB/3V3ff9/goz/
+cHJ8/3h6gf91d37/aWx2/2Vocv9ucXv/c3V8/3N1fP9qbXf/am13/3t9g/9wcnn/bnB3/3N1fP9ucXv/
+bG95/2xvef9wc33/bnF7/3N2f/9sb3n/d3l//2xvef9ucXv/bnF7/3V4gf9zdXz/Z2p0/3N2f/91d33/
+bG51/3V3ff9ucHf/cHJ5/3N2f/9zdn//c3Z//3N2f/9ucXv/c3Z//2ptd/9wcnn/cHN9/3Byef9wc33/
+c3V8/29xdf9ucHf/dnh8/3N1fP9wcnn/c3V8/21vc/9zdXz/bnB3/2xvef9ucHf/bnF7/2ptd/9ucHf/
+bnF7/25xe/9sbnX/bG51/2xudf9tb3P/dXiB/2psc/9qbHP/bG51/2dqdP9sb3n/bnF7/2ptd/9qbXf/
+am13/3V3ff9maXP/Zmhu/2ptd/9sb3n/bnF7/2xvef9maXP/Zmhu/2ptd/9maG7/XWBq/2Rncf9gY2z/
+bG95/2dqdP9qbHP/Z2p0/2psc/9qbXf/cHN9/3N1fP9ucXv/bnF7/2xudf9sbnX/am13/21vc/9ucHf/
+eXuB/3N1fP9wcnn/cHJ5/2xudf9qbHP/am13/3Bzff9sb3n/bG95/25wd/9wcnn/amxz/21vc/9sbnX/
+am13/2dqdP9qbXf/bG51/2xudf9sbnX/am13/3d5f/9sb3n/bnF7/2xvef9sb3n/bG51/3Byef92eHz/
+bG51/3N1fP9wc33/c3Z//3Bzff9zdXz/c3V8/3N1fP9wcnn/dXd9/2xudf9wcnn/bnB3/2ptd/9sbnX/
+am13/3Bzff9qbHP/d3l//3d5f/9zdXz/dXd9/25wd/9kZmz/bG95/2xvef9wc33/c3Z//29xdf9wc33/
+bnB3/3d6g/91eIH/bnF7/25xe/9sb3n/cHJ5/3Byef9wcnn/c3Z//3N1fP9wcnn/cHN9/3N2f/9wcnn/
+cHJ5/25xe/9zdn//Zmlz/3V4gf9wc33/d3l//2xudf9ucHf/d3l//25xe/9sb3n/bG95/3p8g/97fYP/
+dnmC/3V3ff91d3z/dHeA/3F0fP9zdXz/cXN6/3V3ff9ucHf/cHJ5/3Byef9sbnX/bnB0/29xeP9ucXr/
+b3F4/3N1fP9zdXz/bnB3/21vc/95e4H/dnh8/21vc/9sb3n/bnF7/3Bzff9wc33/c3V8/25xe/9ucXv/
+bG95/2xvef9sb3n/cHN9/3Bzff9ucXv/cHN9/25xe/9qbHP/bG51/3N1fP9nanT/amxz/2psc/9ucXv/
+cHJ5/2Zobv9kZ3H/Zmlz/2Zpc/9dYGr/Zmlz/2dqdP9sb3n/ZWhx/2Zpc/9jZnD/a254/2xudf9maXP/
+dXd9/2lrc/9wcnn/bXB4/2dpcP9laHL/am13/2xvef9zdXz/bG95/2xudf94eX3/bG95/25wd/9sb3n/
+bnF7/25xe/9ucXv/bnB3/3Byef9zdXz/bnB3/3h5ff9vcXX/bnF7/25wd/9zdn//cHJ5/2Zpc/9zdn//
+cHN9/25xe/93eX//cHJ5/25xe/9zdn//c3Z//3Byef9zdXz/c3V8/3Byef9nanH/bG51/3Byef9sbnX/
+cHN9/3N1fP9ucHf/bG51/3V3ff9wc33/amxz/3V3ff9qbXf/bnB3/3Byef9ucHf/bG95/2ptd/9sbnX/
+bG95/25xe/9zdXz/am13/2xudf9qbXf/bG51/3V4gf9qbXf/bG51/25wd/9tb3P/bnF7/2xvef9sbnX/
+cHJ5/25wd/95e4H/bG51/2xudf9qbXf/bG95/2xvef9sb3n/Z2p0/2Zpc/9ucXv/am13/2Zpc/9sb3n/
+Zmlz/3N1fP9ucXv/bG51/2xvef9qbXf/dXd9/3Z4fP94eX3/c3V8/3Byef9sbnX/am13/3V3ff9zdn//
+dXiB/3t+h/91eIH/cHN9/3N2f/9sb3n/bG51/25wd/95e4H/bG95/2xudf9sb3n/am13/2Rncf9nanH/
+YGNs/2Rncf9maXP/bG51/2ptd/9qbXf/am13/2ptd/91d33/bG95/3Bzff9sb3n/cHJ5/2xudf9sb3n/
+dXd9/2ptd/9sb3n/cHN9/3Bzff9ucXv/bG95/3Bzff9zdXz/bnF7/3N1fP9ucHf/dXd9/3Byef9tb3P/
+b3F1/2xudf9zdn//bnB3/3d5f/93eX//cHN9/3d6g/9ucXv/Zmlz/3Byef9ucHf/cHN9/3N2f/9sb3n/
+c3Z//25xe/91eIH/dXiB/3Bzff9zdn//cHJ5/25wd/9vcXX/bG51/3Byef9sbnX/am13/2xudf9sbnX/
+amxz/2psc/9qbHP/am13/2Jlbv9ucXv/bnF7/3N1fP9nanT/bnB3/3Z4fP9wcnn/bG51/2xudf95e4H/
+c3Z//25xe/9ucHf/bG95/25xev9vcXj/bXB6/21vef92eHz/cHJ5/25xe/9sb3n/bnB3/3Bydv9rbnf/
+bG94/29xeP9wcnn/dXiB/3Bzff9wcnn/eXyG/3l8hv9zdXz/bnF7/3V3ff9zdn//c3Z//3d5f/9wc33/
+cHN9/25xe/9wc33/cHN9/3h5ff91d33/c3V8/3N1fP9wcnn/am13/2psc/91d33/am13/2xudf9maXP/
+bG95/3N1fP9nanH/Z2px/2ptd/9qbXf/Zmlz/2xudf9zdXz/dnh8/3Byev9zdXz/cXR9/3R3gP9wc33/
+bnF7/3+CjP9zdn//dnmD/3h7hP9xc3r/c3V8/3t9g/9+gIb/e32D/3d6g/9wc33/e32D/3Bzff9zdXz/
+cHN9/25xe/9zdn//bnF7/2xvef9ucXv/dXd9/29xdf91eIH/bnB3/2xvef9ucHf/dXd9/2xvef9kZ3H/
+cHN9/3N2f/9ucXv/d3l//2xvef9ucXv/dXiB/3V4gf9zdn//c3Z//3V4gf9wc33/am13/2xvef91eIH/
+bnF7/3V4gf91eIH/bnF7/2xvef93eX//cHN9/3Byef91eIH/bnB3/25xe/9wc33/c3Z//3Bzff9wc33/
+cHN9/25xe/9wc33/dXd9/25wd/9ucHf/bG95/25wd/93eoP/bnB3/25xe/9wc33/cHJ5/3Bzff9vcXX/
+bnB3/3Byef9tb3P/d3l//2ptd/9sbnX/am13/25xe/9wcnn/cHJ5/2xudf9qbHP/cHJ5/2xvef9qbHP/
+cHN9/2dqdP91eIH/d3qD/3Bzff9zdn//cHJ5/3d6g/95e4H/e36H/3V4gf93eoP/cHN9/3V4gf9sb3n/
+bG95/3Byef91eIH/c3Z//25xe/9wcnn/bG51/2dqcf9ucHf/dnh8/21vc/9qbXf/bG95/3Byef9sbnX/
+b3F1/2RmbP9sbnX/bG51/2ptd/9sb3n/Z2p0/2dqdP9sbnX/dXd9/2xudf9ucXv/bnF7/2xvef9nanT/
+bG51/3N1fP9sbnX/cHJ5/3Bzff9ucXv/bnF7/25xe/9wc33/cHN9/2xvef91d33/bnB3/3V3ff9zdXz/
+b3F1/2xvef9sb3n/c3Z//3Byef93eoP/d3qD/3N2f/91eIH/cHN9/2dqdP9ucHf/bnF7/3N2f/9wc33/
+bnB3/3N2f/9wcnn/eHl9/3V3ff9sbnX/bG95/2xudf9sbnX/bG51/2Zpc/9sbnX/amxz/2Zpc/9maXP/
+Zmhu/2Zobv9maG7/amxz/2xvef9gY2z/Z2p0/2xvef9ucXv/Zmlz/2xudf91d33/bG95/2xudf9ucHf/
+bnF7/25xe/9ucHf/bG51/2xudf9sb3n/am13/3J0e/9zdn//d3l//3Bzff9wc33/cHN9/25xe/9xc33/
+bnB2/25weP9wcnn/cHJ5/3N1fP9sb3n/bG51/3d5f/91d33/am13/2xudf9ucXv/bG95/25xe/9wc33/
+bG51/2xvef9sbnX/Z2p0/2xvef9wcnn/bG95/2dqdP9wc33/bG95/2xvef9qbXf/dXd9/2ptd/9qbXf/
+am13/3Z4fP92eHz/bnB3/25xe/95e4H/cHN9/3Byef9zdn//d3qD/3l7gf93eoP/dXh//29yfP9vcnv/
+b3F1/2xudf93eoP/b3F4/3d5f/97fYb/dHZ//3V3ff97fYP/foCG/3t9g/9zdn//cHJ5/3l8hv9wc33/
+c3V8/3N2f/91eIH/d3qD/3d6g/9ucXv/cHN9/3N2f/9wcnn/d3qD/3N1fP9zdn//c3V8/3N2f/9sb3n/
+Zmlz/3N2f/91d33/bG95/3l7gf9sb3n/bnB3/25wd/9zdXz/bnB3/25wd/91d33/bnB3/2xudf9qbHP/
+cHJ5/21vc/92eHz/cHJ5/2xudf9sb3n/eHl9/3V3ff9wcnn/d3qD/25wd/9wc33/bnF7/3V4gf9wc33/
+bnF7/2xvef9sb3n/c3Z//3N2f/9wcnn/bG95/2xvef9sb3n/d3l//25wd/9vcXX/b3F1/29xdf9zdXz/
+bnB3/25wd/9ucHf/b3F1/3d5f/9qbXf/bG51/25wd/9wcnn/bnF7/3Byef9sbnX/amxz/3Byef9wcnn/
+amxz/3Byef9qbHP/cHN9/25xe/9tb3P/bnB3/21vc/91d33/dXiB/3V4gf9zdn//cHN9/25wd/9ucHf/
+c3V8/3Bzff91eIH/foGK/3t9g/93eoP/d3qD/3Byef9ucXv/dXiB/3d5f/9sb3n/bnB3/3Bzff9wc33/
+Z2p0/25wd/9maG7/bG51/2xudf9tb3P/bG51/2psc/9sb3n/bnB3/3l8hv9wc33/c3Z//3Bzff9wc33/
+am13/2xvef93eoP/cHJ5/3N1fP91d33/dXd9/3V3ff9zdXz/dXd9/3V3ff9wcnn/dXd9/29xdf91d33/
+dXd9/3Byef9sb3n/b3F1/3Byef9tb3P/dXd9/3d5f/9ucHf/cHJ5/3Byef9kZ3H/am13/2Zpc/9sb3n/
+bnF7/2ptd/9zdXz/bG51/3V3ff9zdXz/bnB3/3N1fP9sb3n/bG95/25wd/9ucHf/bG95/25wd/9wcnn/
+c3V8/29xdf9ucHf/bG51/29xdf9zdXz/Z2px/2xvef9zdn//eXuB/3Byef9wcnn/eXuB/25xe/9sb3n/
+bnB3/3Byef9ucHf/bnB3/29xdf9sbnX/bnB3/2xvd/9vcXn/am13/3Bzff9qbXf/am13/2psc/9ucHf/
+am13/2xudf9sbnb/bW92/3Byef9ucXv/bG95/2ptd/93eX//dXd9/3Byef9ucHf/c3V8/3N1fP91d33/
+c3V8/25wd/9wcnn/bnB3/3Bzff9zdn//eXuB/3N2f/9wc33/eXuB/3Bzff9wc33/cHJ5/3Z4fP9zdXz/
+bG51/2xvef91d33/c3V8/2xudf9qbHP/bG95/2ptd/9qbHP/bG95/2xvef9wcnn/am13/2tueP9maXD/
+Z2p0/2dqcf9iZW7/cHJ5/2hqcf9xc3r/bnB5/2xudf9qbXf/cHN9/3Z4fP9wcnn/bnB3/2xudf93eX//
+Zmlz/2ptd/9ucHf/am13/25xe/9ucXv/bW9z/25wd/9sb3n/am13/3V3ff9qbXf/bG95/2ptd/9sb3n/
+ZGdx/11gav9qbXf/am13/2xvef9zdXz/Z2p0/2xudf9wcnn/bnB3/2xudf9ucHf/cHN9/25wd/9sbnX/
+am13/25xe/9sb3n/d3l//3Bzff9ucXv/bnF7/3l7gf91eIH/cHN9/3l8hv9zdXz/d3qD/25xe/91d33/
+c3V8/3N1fP9vcXX/bG51/3N1fP9wcnn/b3F1/21vc/9tb3P/bG51/3d5f/9sb3n/amxz/2xudf9sbnX/
+c3V8/2xudf9ucHf/bnB3/25wd/93eX//bnB3/2xudf9wcnn/c3V8/25xe/9wc33/bG95/25wd/91eIH/
+d3qD/3Bzff93eoP/cHN9/3l7gf91eIH/dXd9/3l7gf95e4H/e32D/4GDiv9/gYf/foCG/36Ahv9wc33/
+cHN9/2ptd/9sbnX/bG95/3N1fP9wc33/bnF7/25xe/9qbXf/Z2p0/25xe/9wc33/am13/2Zpc/9nanT/
+Z2p0/2Rncf9maXP/ZGdx/2dqdP9qbXf/amxz/2xudf9kZ3H/am13/2xudf97fYP/cHN9/3N1fP9ucXv/
+dXiB/2xvef9ucHf/d3l//25wd/9zdn//d3l//3V4gf91d33/cHN9/3l7gf95e4H/dXiB/3l8hv9wcnn/
+eXuB/3V4gf9wc33/cHN9/3N2f/91eIH/bnF7/3d5f/93eX//bnF7/3N1fP9tb3P/Z2px/25wd/9sbnX/
+dXd9/25wd/9qbXf/c3V8/2xudf9wc33/c3V8/2ptd/9wcnn/bG51/2xvef9tb3P/b3F1/2xvef9sb3n/
+bG95/25xe/9ucHf/bnF7/3N2f/9wcnn/d3l//2xvef9wc33/eXyG/3t+h/9zdn//d3qD/36Ahv93eoP/
+d3qD/3V4gf9ucXv/bnF7/25xe/9vcXX/amxz/3R2ff9wcnr/c3V6/25wd/92eHz/c3Z//25xe/9ucXv/
+bG95/29ye/9tb3f/bnB3/25wdP9sb3n/c3V8/25wd/9qbXf/dXd9/3V4gf9wc33/bG95/3N2f/91eIH/
+d3l//3N2f/9zdXz/dXiB/3V4gf95fIb/dXiB/3t+h/93eoP/dXiB/3t+h/9zdn//dXiB/25xe/97fYP/
+c3Z//2xvef9wc33/c3Z//3d5f/9vcXX/b3F1/3Bzff9wc33/bnB3/3Bzff9zdn//c3V8/29xeP9ucXn/
+bW90/2xveP9qbXf/Z2px/3d5f/9tb3T/c3V8/3N2fv9ucHj/cHJ5/3V4gf93eoP/c3Z//3N2f/9zdn//
+c3Z//2Rncf9maXP/Z2p0/2Zobv9qbXf/bG95/2psc/9nanT/am13/2dqcf9ucHf/ZGdx/2Zobv9maG7/
+Z2p0/2Rncf9gY2z/Z2p0/2dqdP9qbXf/cHN9/2dqdP9sbnX/bnF7/2xvef9qbXf/bG95/25xe/9sbnX/
+bG51/25wd/9wcnn/b3F1/3l7gf93eoP/c3Z//3N1fP95e4H/eXuB/25xe/93eX//bnB3/25xe/9sb3n/
+dXd9/3Byef9zdXz/bG51/2xudf9wc33/bG95/2xudf9sbnX/bG51/2ptd/91eIH/bnF7/2dqdP9nanH/
+Z2px/2Zpc/9maG7/Zmhu/2dqcf9qbHP/c3V8/2Zpc/9kZ3H/am13/25xe/9qbXf/bG95/2dqdP9qbXf/
+cHN9/3Bzff9nanH/cHN9/2ptd/9zdn//cHJ5/29xdf9wcnn/cHJ5/3N1fP91d33/dXd9/3Bzff9ucXv/
+bW9z/21vc/9ucHf/bnF7/3N2f/93eX//d3l//3d6g/9zdn//c3Z//3Bzff93eoP/foCG/3l8hv91d33/
+dXiB/3N2f/9ucXv/cHJ5/2xvef9zdXz/bnB3/25wd/9sb3n/amxz/29xdf9wcnn/e36H/3V4gf9zdn//
+cHN9/3N2f/9ucHf/bnB3/3Z4fP9tb3P/c3V8/3Z4fP9wc33/cHN9/25xe/93eX//d3l//3Bzff95fIb/
+bnF7/3d5f/91eIH/cHN9/3N1fP9wcnn/bnF7/2xvef92eHz/dXiB/25xe/9ucXv/bG95/2ptd/9qbXf/
+bG95/3V3ff9wcnn/b3F1/3Z4fP9ucHf/c3V8/3V3ff9ucHf/c3V8/2ptd/9sbnX/bW9z/21vc/9ucHf/
+bG95/2xudf9ucHf/bW9z/21vc/9ucXv/am13/3V3ff9maG7/am13/2xvef92eHz/bnB3/29xdf91d33/
+am13/3Bzff91d33/d3l//3t9g/93eX//d3l//3d5f/98fYL/dniA/3Z4gP9xc3r/d3l//3Bzff9ucXv/
+bnF7/3Bzff9tcHr/b3J8/3F0ff9zdXz/cHN9/3l7gf9wc33/bnF7/3V3ff91eIH/bnF7/25xe/91d33/
+bnF7/3N1fP9ucXv/am13/3Byef9ucHf/dnh8/29xdf94eX3/bnB3/25wd/93eX//cHJ5/3Byef9ucHf/
+eHl9/3Byef9ucHf/dXd9/3N1fP95e4H/b3F1/21vc/9wcnn/bG95/2xudf9ucXv/cHJ5/3J0e/9sbnb/
+bG52/2Vocv9maXP/Zmhu/2Rncf9zdn//Z2px/21wd/9rbXb/Zmhv/2Nmb/9qbXf/cHJ5/2xvef9ucXv/
+bG95/3V4gf9qbHP/bG95/25xe/9ucXv/dXd9/3N1fP9vcXX/cHJ5/3N1fP9sbnX/c3V8/2ptd/9qbXf/
+bG51/25wd/9nanT/Zmlz/2ptd/9sbnX/am13/3V3ff9qbXf/am13/3Bzff9qbXf/bG51/2ptd/9qbXf/
+amxz/2Zpc/9kZ3H/bG95/2psc/9zdXz/cHN9/2xvef9qbHP/bG95/3N1fP9qbXf/dnh8/2ptd/9ucHf/
+bG95/3N2f/9ucXv/dXd9/25wd/9wcnn/c3Z//3Bzff9wcnn/bnB3/3Byef9wc33/f4GH/3V4gf9zdn//
+bnF7/3Bzff9zdn//cHJ5/3Byef9wc33/cHN9/3l7gf9sb3n/bG95/2xvef92eHz/bnB3/25wd/9ucHf/
+b3F1/3Z4fP9wcnn/Zmlz/25xe/9qbHP/bG95/2xvef9qbXf/cHJ5/25wd/9wc33/dnh8/3Z4fP9zdn//
+c3Z//25wd/9sb3n/Z2p0/2ptd/9ucXv/c3V8/3N1fP9wcnn/bW9z/2psc/9maG7/bG51/3V3ff9sb3n/
+bG51/3Byef9ucHf/bG51/3Byef9sbnX/bnB3/25wd/9tb3P/cHJ5/2Rncf9sbnX/bG95/3V4gf9ucXv/
+bG95/25xe/92eHz/bnB3/25wd/92eHz/bG51/3N1fP92eHz/dXd9/3Bzff9ucXv/c3Z//3Z4fP9vcXX/
+d3l//25wd/9zdXz/cHJ5/3Byef9ucHf/cHJ5/3Bzff9ucXv/eXuB/3l8hv91eIH/cHN9/25xe/9qbXf/
+bnF7/25xe/97fYP/dXiB/3N1fP95e4H/bG95/25xe/9wc33/bnB3/3N2f/9sb3n/cHJ5/3Byef9zdXz/
+dXiB/3N2f/9zdXz/c3Z//3N1fP9zdXz/d3qD/3N2f/97fof/bnF7/3Bzff9wc33/eXuB/25wd/9ucXv/
+dXiB/3Bzff95e4H/e32D/3V4gf91eIH/cHN9/3Byef9qbXf/dnh8/3Fzev9zdXz/cHJ5/3N2f/9zdn//
+bnF7/2xvef9wc33/bG51/2xudv9rbXb/aWxz/2dpb/9ucXv/am13/2Rncf9qbXf/am13/2Zpc/9nanH/
+am13/2dqdP9sb3n/cHN9/2ptd/9ucXv/bW9z/3Byef9ucHf/eHl9/25wd/9sbnX/dnh8/3N1fP9wcnn/
+cHJ5/3d5f/9wcnn/bnB3/3N2f/9wcnn/d3qD/25wd/9sb3n/bnF7/25wd/9vcXX/c3V8/3Byef9vcnz/
+b3F4/3N1ff9ucXv/dHeA/3N1fP9zdXz/foCG/25wd/91d33/c3V9/21vdP9sb3b/c3V8/3V3ff9wc33/
+bG95/3Byef91d33/Z2px/2xvef9ucXv/cHN9/3N2f/9zdn//bG95/25xe/9wc33/bnF7/3V4gf9ucXv/
+bnB3/2xudf9zdXz/bnB3/2psc/9ucHf/bG51/3N1fP92eHz/bnB3/2xvef91d33/bnB3/25wd/9wcnn/
+cHJ5/2xudf9sbnX/bnB3/3V3ff9tb3P/eHl9/2xvef9ucXv/amxz/2xvef9zdXz/bG51/3N1fP9sbnX/
+c3V8/2xudf9zdXz/cHJ5/25xe/9ucHf/bG95/3Bzff9wc33/b3F1/25wd/9vcXX/cHJ5/3t9g/9ucHf/
+c3V8/2xudf9ucHf/bnF7/25wd/9ucHf/cHJ5/3Bzff93eX//bnB3/2xvef9ucHf/c3V8/25wd/9sbnX/
+am13/2ptd/9wc33/bnF7/2Rncf9qbXf/Z2p0/2ptd/9qbXf/amxz/25wd/9sbnX/bG95/3V3ff9wc33/
+cHN9/25xe/9sbnX/amxz/25wd/9wc33/cHN9/3d5f/91eIH/d3qD/3N2f/92eHz/bnB3/36Ahv9/gYf/
+eXuB/3p7f/9+gIb/e36H/3d6g/97fof/d3l//3l7gf92eHz/c3Z//31+gf9zdXz/eHl9/3t9g/9/goz/
+e32D/3d6g/9zdn//eXuB/2xvef9vcXX/dnh8/2ptd/9ucXv/c3V8/3Bzff9qbXf/am13/25xe/9ucXv/
+Z2px/3Byef9maXP/bG95/2ptd/9sb3n/Zmlz/2Rncf9kZmz/Zmhu/25wd/9wcnn/Zmlz/2xudf9qbXf/
+Zmlz/2dqdP9sbnX/dXd9/3Byef9ucHf/eHl9/25wd/9sbnX/c3V8/2xudf91d33/bG51/29xdf9wcnn/
+bG95/3V3ff9ucXv/bG95/3Bzff9sb3n/b3F1/3Byef9ucHf/dnh8/2Rncf9ucHf/bG51/3d5f/9qbXf/
+am13/3N1fP9sbnX/dnh8/3Z4fP9tb3P/bG95/25xe/9ucHf/amxz/3R2fP9tb3f/c3V6/2xudf9wcnn/
+cHJ5/25xe/9qbXf/c3V8/29xeP9xdH7/cXR+/3F0ff9wc33/dXd9/25xe/9sb3n/eHl9/3d5f/9ucHf/
+bnB3/3V4gf9sb3n/c3Z//3V3ff9vcXX/c3V8/25wd/9zdXz/bG51/3l7gf9ucHf/bnB3/3Z4fP9ucXv/
+bnF7/2ptd/91d33/bG95/2psc/92eHz/cHJ5/3h5ff9vcXX/b3F1/3Byef9sbnX/bG51/25xe/9sbnX/
+cHJ5/25wd/9xc3r/bnB0/29xeP9ucHf/bG51/3t9g/9ucHX/dHd+/3N1e/9vcXX/b3F1/3N1fP91d33/
+cHN9/25xe/9wc33/d3l//2Rncf9sbnX/cHJ5/2xvef9wc33/am13/2xudf9ucHf/bnF7/25xe/9wc33/
+am13/2xvef9nanT/bG95/2psc/9kZ3H/am13/2xudf9ucXv/c3V8/2dqdP9qbHP/bG95/2ptd/9sb3n/
+bG95/2ptd/9sbnX/am13/2ptd/9wc33/bG95/3V3ff9wc33/bnF7/2xudf9zdXz/dnh8/25wd/93eoP/
+bG95/3V3ff9ucXv/c3Z//3Byef91d33/cHJ5/25xe/91eIH/dXiB/25wd/9ucXv/cHJ5/3V4gf97fof/
+c3Z//3V4gf9zdn//bnF7/3N2f/9wc33/cHJ5/3Byef9ucXv/d3qD/3Byef9sb3n/cHN9/3V4gf9wc33/
+bnF7/25wd/9sbnX/dnh8/3Byef9sbnX/cHJ5/2xudf9qbXf/bG51/2psc/9sb3n/bW9z/3Byef92eHz/
+dXd9/3V3ff9wcnn/bG95/25xe/9ucHf/dXd9/3Bzff93eX//dnh8/3N2f/9wcnn/bG95/2Rncf9zdn//
+dnh8/25xe/9qbXf/cHN9/25xe/9ucHf/cHN9/2dqdP9wcnn/bG95/25wd/91d33/Z2p0/2xvef9wc33/
+eXyG/3Z4fP9wc33/c3V8/3d5f/9sb3n/bnB3/3Z4fP9sb3n/c3Z//3d6g/91eIH/cHN9/3N2f/95e4H/
+d3l//25wd/95e4H/bnF7/3V3ff9zdn//c3Z//3Bzff9wcnn/cHN9/25xe/93eX//d3l//3N2f/9ucXv/
+bnF7/2dqdP9sb3n/bnB3/3Z4fP9ucHf/bG95/3V4gf9ucHf/b3F1/3Bzff9ucHf/eXuB/2ptd/9ucHf/
+bnB3/29xdf91d33/cHJ5/25wd/9zdXz/bnB3/29xdf9wcnn/b3F1/3Z4fP9kZ3H/am13/2xvef91eIH/
+am13/2xudf9ucXv/Zmlz/3Bzff9zdXz/c3V8/3V4gf91eIH/bnF7/2ptd/9vcnz/bG95/3N1fP9naXD/
+Z2p0/2ptd/9sb3n/am13/25xe/9tb3b/cXN7/3F0fP9vcnv/cHN9/3V3ff9wc33/b3F1/3V3ff91eIH/
+bnF7/25wd/91d33/bG95/25xe/91eIH/bnB3/3N2f/9sb3n/c3V8/2xudf95e4H/bnB3/3N1fP93eX//
+dXd9/3Byef9wcnn/dnh8/2xvef9qbXf/cHN9/2xvef91d33/am13/2Zpc/9nanT/bG51/2psc/9sb3n/
+bG51/2xvef9qbXb/am13/2lsdf9rbnj/am13/2dqdP91eIH/a211/3N1ff9sb3n/am12/2xudf9wcnn/
+dXd9/3N1fP9zdXz/dXd9/3Byef9dYGr/YmVu/2Zpc/9nanT/am13/2Rncf9maG7/ZGdx/2Zpc/9maXP/
+Z2p0/2Zobv9nanT/ZGdx/2Rncf9iZW7/XF9o/2Zobv9maG7/am13/25wd/9kZ3H/Zmlz/25xe/9sb3n/
+bnF7/2ptd/9sb3n/bnF7/2ptd/9tb3P/dXd9/3Byef95e4H/cHN9/3Bzff9vcXX/dXd9/3V3ff9ucXv/
+dXiB/25wd/92eHz/bnB3/3Z4fP9wcnn/c3Z//25wd/9ucHf/cHJ5/3Byef9tb3P/bG51/21vc/9zdXz/
+d3l//2xvef9sb3n/bG95/2xudf9qbXf/am13/2ptd/9nanT/bG51/3V3ff9ucHf/bnB3/25wd/9zdn//
+cHJ5/25wd/9sbnX/bnB3/3N1fP9zdXz/bG51/3Byef9sbnX/bG51/25xe/9wcnn/cHN9/3Bzff9zdn//
+e36H/3l7gf91eIH/cHN9/3Byef9ucXv/bG95/3Bzff91d33/d3qD/3d5f/93eoP/cHN9/25xe/9qbHP/
+eXuB/36Ahv95fIb/dXd9/3d6g/91eIH/c3Z//3V4gf9wc33/d3qD/3Bzff9zdn//eXyG/2xvef9ucHf/
+cHJ5/3l7gf9zdXz/cHJ5/3Byef92eHz/bnB3/3Byef9wc33/bG95/3N2f/91eIH/c3V8/2xvef9wcnn/
+e32D/3l7gf9sb3n/dXiB/3Byef9zdn//cHN9/3N2f/9zdn//bnB3/3V4gf9wc33/d3l//3V4gf91eIH/
+c3V8/3Bzff9qbXf/b3F1/21vc/91d33/bG95/2xudf91d33/am13/2xudf9qbXf/bG51/3V3ff9qbXf/
+bW9z/2xudf9tb3P/dXd9/2ptd/9tb3P/cHJ5/2ptd/9sbnX/bG95/2xudf91d33/Zmhu/25wd/9sbnX/
+dXd9/2xudf9vcXX/dnh8/2xudf92eHz/cHN9/21vc/9wcnn/c3V8/3Byef9nanT/bnF7/29ye/9wc33/
+bG51/2xvef9qbXf/am13/2xvef9zdXz/bnB0/3J0ev9xdHv/bnB6/25xe/91eIH/cHN9/25wd/95fIb/
+d3qD/3Bzff9wc33/d3qD/25xe/9wc33/eHl9/2xudf9ucHf/bG95/25wd/9qbHP/d3qD/2ptd/9sb3n/
+d3l//25xe/9qbXf/bnB3/3V3ff9ucHf/amxz/3Bzff9sbnX/dnh8/2xvef9qbXf/am13/2xudf9qbXf/
+c3V8/2xudf9wcnn/bW92/3ByeP9vcXX/bnB3/2dqcf9nanH/d3l//25xdf90dnz/bW94/2tueP9nanT/
+bnF7/3V3ff9sb3n/cHN9/25xe/92eHz/YmVu/29xdf9zdn//d3l//3V4gf9wc33/bG95/25xe/9zdn//
+dXiB/3d6g/9ucXv/eXuB/3N2f/97fYP/cHN9/2xvef9zdn//cHJ5/3N2f/97fof/c3Z//3Bzff93eoP/
+c3Z//3d6g/9wc33/cHN9/3Bzff9sb3n/bnB3/3V4gf9zdn//foGK/3N2f/9wc33/bnB3/3V3ff9zdn//
+bnB3/3V4gf9sbnX/dnh8/25wd/92eHz/cHN9/3Z4fP9ucHf/bG95/25xe/91d33/b3F1/3Byef9wc33/
+d3qD/36Biv91eIH/dXiB/25xe/9ucHf/cHN9/2xvef9ucXv/bG95/25wd/9wc33/bG95/2xvef9wcnn/
+dXd9/3Byef9tb3P/bW9z/2dqdP9wc33/bG95/2dqdP9sb3n/ZGdx/2Zpc/9sb3n/Zmlz/2dqcf9maXP/
+bG51/3V3ff9sb3n/c3V8/25wd/9ucHf/bG51/2tueP9vcnz/dXeA/3h7hf9ydX7/dXd9/25wd/9ucHf/
+Zmds/3Byef9wcnn/c3V8/2dqdP9wcnn/cHJ5/2xudf9qbXf/Zmlz/2psc/9maXP/aGty/25xe/9nanT/
+a210/2hrdf91eIH/bnF7/2xvef9qbXf/c3V8/2dqdP9qbXf/am13/2xudf9ydHv/dHZ8/2ptd/9sb3n/
+bW92/3N1fP9ydHv/am12/3d4ff9wcnn/dXiA/3J1fv91eIH/cnR8/2xudf9wcnn/cHJ5/3V3ff9wcnn/
+cHJ5/21vc/9ucHf/Z2px/25wd/9ucHf/dHZ8/29xeP9sb3b/dnh//29xdf9sb3n/bnF7/29xdf94eX3/
+amxz/29xdf9tb3P/cHJ2/3V3ff9wcnn/b3F4/3R2fv9ucXj/bW93/3Fze/9vcXX/dXd+/2dpb/9sbnX/
+bnB6/3d5f/9sb3b/a254/3V3e/9sbnT/dHZ6/3Bzff92eHz/e32D/36Ahv99foH/d3l//3l7gf91d3z/
+c3Z+/2tudf9sb3n/am13/2Zpc/9nanT/bnF6/2ptdv9zdX7/c3V9/3V4gP9wc33/e32D/3V4gf9ucXv/
+e36H/3d5f/9ucXv/bG95/3Bzff9vcXX/bnF7/3Z4fP9sbnX/am13/25wd/9wcnn/bG51/3l7gf9ucHf/
+c3V8/3h5ff9zdn//bG51/25wd/94eX3/bnB3/2psc/9zdXz/bnB3/3Z4fP9ucHf/bnB3/21vc/9tb3P/
+bG95/3Bzff9sbnX/cHJ5/25xeP9ucHn/bG52/2tudv9nanT/am12/3F0fv9pbHX/bXB6/2psdP9nanH/
+Y2Zv/2Zpc/9ucHf/am13/25xe/9ucXv/b3J7/2Zpcv9rbnf/bW94/29yfP9ucXr/b3J6/21vdv9vcXj/
+bG93/2lsdP9rbXb/bXB4/21wev9nanP/aGt0/2Fkbf9gY2z/amxz/2dqcf9oa3X/cnV8/2Zocf9qbXb/
+a212/2xudf9sbnf/bW92/3Byef9ucHn/b3F4/2psdf9ucXv/bnF6/29ye/9sb3n/bW94/25wdf9xc3r/
+bnF3/3F0e/9vcnv/bXB4/3J0fP9ucHf/cHJ5/21wev9ucXv/amx1/2ptc/9tcHj/b3F4/3J0ef9tb3b/
+bXB4/3Bze/91d33/dHZ+/3Bze/9wcnn/b3F4/3h6gv93eH3/dHZ7/3Z4f/92eYL/d3qB/3d5gv90d3//
+eXyF/3t+h/99f4f/e32G/31/hf98foX/fYCI/3p9hv9+gIb/e32E/3V3fv95e4P/enyD/3d5f/95e4H/
+enyE/3l8g/97fYL/dnh//3V3fv92eYL/cnV9/3Fze/9sb3j/bnF5/3F0ff9zdXv/bXB5/3R2ff9rbXX/
+amx1/2Rmbf9pbHX/aWx2/25wev9fYmz/Zmlz/2dqdP9kZ3H/Zmlz/2BjbP9maG7/XmFr/2Vocv9qbXf/
+Y2Zw/2Zpc/9oa3T/b3F5/2dqdP9maXP/ZGdx/25wd/9kZ3H/Zmlz/2Zpc/9oa3T/cXN6/3N1fP9rbnj/
+bnF6/2xvef90dn3/cHN7/2ttdf90dn3/b3J6/3V3ff9vcnv/dHd//3Byef9ucHf/cnV+/25xe/93eX//
+cHJ5/3N1fP9ucHf/cHJ5/2dqcf9ucHf/bnB3/3R2ev9sbnb/a211/3N1fP9tb3T/bG51/25wd/9ucHf/
+dXd9/2dqdP9sbnX/bW95/25weP9xdHz/bnF5/2xveP9xc3z/bnB3/2xudf9xdHz/bnB3/3F0ff9sbnf/
+bnB5/29xeP92eH7/b3F4/3J0eP9xc3r/bG93/3Fzev9vcXr/am13/3N1fP9sb3n/cHN9/2xudf9zdX3/
+dHZ9/3V4gP9ucXv/c3Z//3N2f/9sb3n/cHJ5/3R2fP9vcXr/dnh+/3FzfP9vcnz/bnF7/3N2f/9sb3n/
+bG51/3d5f/92eHz/bnB3/2ptd/9qbXf/amxz/25xe/93eX//amxz/2ptd/9sbnX/Z2p0/2Jlbv9wc33/
+ZGdx/2ptd/9ucHf/am13/2psc/9qbHP/bnF7/2psc/9kZ3H/bG95/2xudf9wc33/am13/2Zpc/9sb3n/
+am13/25wd/9zdn//bnB3/25xe/9ucHj/b3F5/2hrc/9qbHT/Zmlz/2lsdv9rbnf/Z2py/25weP9xdHz/
+bW90/2hrdf9sb3n/cHN9/2xvef9zdXz/c3V8/3Bzff9rbnf/b3J8/29yfP9ydX//dXd+/3R2ff9tb3b/
+cnR6/2xveP9tcHr/bnB4/3J1ff9vcnz/bG52/3Fzff9oa3X/ZGdx/21vc/9tb3P/c3Z//3Z4f/9vcnr/
+cXN7/3F0ff9wcnz/bnF6/3Bzff9ydX7/c3Z//3N2f/9sb3n/c3Z9/3J1fv9ydX//dnmC/3N2f/92eYH/
+dXiB/3J1fv98foX/dHeB/3F0ff9ydX7/cHN8/3R3f/91d33/cHN8/29xef9vcXX/cHJ5/3Fzd/91d33/
+bnB3/25xe/9ucXv/cnR6/3F0fP9xc3j/bG52/21wef90dn3/dXh+/21vd/90d3z/bnF4/29xef9wc3z/
+bG95/3Bzff9xdH7/cnV+/25xev9wc3z/cnV+/3N2f/9wc3z/d3qE/3BzfP9rbnf/bnF6/3Byef9vcXn/
+cnR7/29xef9ydHv/bW92/2hrcv9qbXf/am13/2xudf9tb3P/cnR8/3N1fP90dn7/c3V6/3N1fP91eH//
+bXB4/3F0e/9rbXP/bXB6/2xvd/90dnz/aGt0/3J0e/9zdXz/bnB3/3N1fP9ucHf/bnB3/2ttdP9wc3n/
+c3V7/3ByeP9wcnj/cXN5/3V3gP9ydHv/cHJ5/3Byef95e4H/bG51/2tud/9rbXb/bG95/25xe/9xc3r/
+bG53/29xeP9zdXn/dHd+/3Fzef9sbnT/cnR9/3F0ff9ydHz/bW94/3V4f/9ucXn/bG94/21wev9wc33/
+d3l//3Byef9wcnn/bW9z/25wd/9maG7/bG51/21veP90dnv/b3F6/21wev94eoH/cnV//3Fzev9sb3n/
+cHJ5/3Z4fP9sbnX/bW92/25xe/9wc33/dnmA/3FzfP9wc3z/dnmD/3R2fv9vcnr/dniB/3Z4gf92eH3/
+cnV+/3R3gf9ydHz/fH6E/3d5gP94eoD/c3Z+/2xveP9ucXr/bnF4/2Zpc/9sb3n/am13/25xe/9kZ3H/
+cXN9/25xev91eID/bnF7/2xvef9zdXz/bW92/3Byef91d37/cXR9/3t9h/90d3//cXR9/3N2f/95e4H/
+c3Z//3V3ff9/goz/foCG/3d6g/9zdn//d3qD/3Bzff95fIb/f4GH/3d5f/93eoP/c3Z//3d6g/91d33/
+foGK/3Bzff91eIH/d3qD/3N2f/9ucHf/bG95/3N2f/9zdn//am13/25xe/9ucXv/c3Z//3Bzff9qbXf/
+c3V8/3Bzff9ucXv/dXd9/29xdf9ucHf/bXB3/3V3ff9tb3j/bnF6/25xe/90dn3/cXN7/29yfP9vcnz/
+cHN9/3Fzev9ucHf/cHJ5/3V3ff91d33/d3l//3Z4fP9tcHn/aWx2/2xvef9rbXT/am13/21wef9vcnz/
+am13/29yfP9nanT/bG95/2tueP9vcnv/bnF5/2tudv9ydHv/bG51/2Zpc/9vcXX/bnB3/3Bzff91eIH/
+bG95/25xe/9ucXv/bG95/21vdv9ucHf/c3Z//3N2f/90d4D/bnF7/21wev9zdn//b3F4/3N2f/9ucXv/
+c3V8/3N2f/9zdXz/eXuF/3Bzff9zdn//c3Z//3N2fv9zdn//eHqA/25xe/9tcHr/cnR8/3Byef9wcnn/
+cHN8/3Byef9ucHf/bnB3/21vdv9wcnn/b3F1/2dqcf9qbXf/cHN9/3Bzff9qbXf/dHZ8/25wd/9ucHf/
+cHJ5/21vd/9zdXz/bG95/3V4gf9ucXv/cHN8/3N2f/9ucXv/bnF7/3h7hf95fIX/dnh8/3x9gP99f4b/
+foCG/3x9gf9+gIf/foCG/3d6g/93eoP/eXyG/3t9g/95e4H/dnh8/25wd/9ucXj/b3J7/3Fzev9ydHv/
+eXt//3R2ff90dnz/bG94/3Byef9wcnr/dHd//3J0ff98foT/fX+F/3V3ff97fYP/dnh8/3Z4fv91dnv/
+d3l+/3F0fP90d37/cHJ6/3V4f/90d4H/cHN7/3Byef9zdXz/dXiB/2ptd/9tb3b/bW92/29yev9xdH7/
+b3F4/2lsdv9tb3f/c3V7/3N2f/9tcHr/bW92/3F0fv9ydX3/c3Z8/2xudf9ydX7/a210/2hrdf9maXP/
+bXB5/3N1fP9wc33/am13/2xudf9sbnX/Z2px/2xudf9vcXX/cHJ4/2ttdv9ucXr/dHd+/29yd/9sbnb/
+b3F1/3Bzff93eX//bnB4/2xvef9ucXr/cXN6/3Fzev9vcXj/bnB3/3h6gP9ydHv/bG51/29xeP9ydHv/
+bW92/2tudf9ucHf/amxz/3N1fP9ydHv/bnF6/2dqdP9nanT/aGt1/2xvef9nanT/bG95/2ptd/9ucXv/
+ZGdx/29xe/9xc3n/cnR9/2xvef9ucHf/c3V8/2xvef9tcHn/dHZ+/25xeP9zdn//a254/2ptdv9nanT/
+bG95/2Zpc/9kZ3H/dXd9/3Byef9qbXf/bG51/2xudf9qbHP/cHN9/3N2f/9qbHP/Z2p0/2dqcf9nanT/
+Zmlz/3V3ff9qbXf/bnF7/2xvef9sb3n/bG51/2xudf9sb3n/c3V8/2dqcf9ucHf/bnB3/25xe/9ucHf/
+Z2px/2xudf9ucHf/c3V8/3Z4fP9vcXX/cHJ5/25wd/91d33/aWx1/2xudf9sb3n/cHN8/2tueP9ucHf/
+bXB5/3J0fP9ucXb/b3F1/2xvef9zdXz/c3V8/3d5f/92eHz/cHN9/2ptd/9qbXf/Z2p0/2ptd/9sb3n/
+bnF7/2Zpc/9qbXf/YmVu/2dqdP9laHL/aGt0/2lsdf9oanH/bW95/2dqdP9iZW7/bG51/2ptd/9rbnj/
+bnF4/2Zpc/9naW//ZGdx/2Rncf9kZ3H/Zmhu/2ptd/9kZ3H/ZGdx/2BjbP9maG7/Z2p0/2Zpc/9nanT/
+Z2p0/2dqdP9ucXv/bG51/3d6g/9qbXf/am13/2xudf9sbnX/cHJ5/3V3ff9ucHf/bnB3/25xe/9wcnn/
+cHN9/3d6g/9zdXz/cHN9/3Byef9wc33/c3Z//3N1fP9sb3n/cHJ5/3d6g/91eIH/bnB3/3d5f/9ucXv/
+bnB3/25xe/9ucXv/cHN9/3N2f/93eoP/dXiB/3d6g/9wc33/cHN9/2xvef94eX3/c3V8/25wd/91d33/
+c3V8/3N2f/91eIH/c3Z//3Bzff9qbXf/Z2p0/2xvef9ucXv/bG95/25wd/9qbXf/bG51/2tud/9rbXT/
+bG95/3V3ff9wc33/dHZ8/2tueP9sbnb/Z2p0/2ttdf9oanP/amxz/2ptd/9maG7/bG95/2dqdP9sbnX/
+amx0/21weP9rbXb/bnF6/2xvef9zdXz/b3J8/25xe/9zdn//eXuB/36Biv9wcnn/cHN9/3F0fP9ydX3/
+bnF6/2ptd/9laHL/bW92/3N1fP9xdH3/b3F4/3Bydv9tcHr/dXd9/3h5ff9vcXj/eHqB/25xev9ucHf/
+am11/3Fzev91d33/cHJ5/29xdf9ucHf/bnF7/2dqdP9rbnj/b3F4/3Bze/9rbnf/b3J8/3Z5gv9xc3v/
+a253/25wd/9ucHf/d3qD/29xd/9sb3n/bXB6/3J0e/9tcHr/am13/2ptd/95e4H/cHJ5/2psc/9ucXv/
+cHJ5/25wd/9sbnX/bnB3/2dqcf9zdXz/c3V8/25xe/9qbXf/am13/2Zpc/9ucXv/YmVu/2Zpc/9kZ3H/
+am13/11gaP9rbnj/bG93/21wd/9tcHr/am13/2xvef9sbnX/a253/3R2fP9tb3P/dXd+/2lsdv9pbHX/
+Z2p0/25wd/9qbHP/Zmlz/3N1fP91d33/am13/25wd/9qbXf/bG51/2xvef9zdn//amxz/2xudf9qbHP/
+bnB3/21vc/93eX//am13/3N1fP9wc33/bG95/2ptd/9qbXf/bG95/25xe/9maXP/bG51/2xudf9ucXv/
+bG95/2psc/9sbnX/bnB3/3Byef91d33/bnB3/29xd/9zdXz/cnR7/2tudv9sb3n/bnF7/25xe/9qbXf/
+c3V8/3J0e/9wc3v/b3F4/3N1fP9wc33/e32D/3t9g/9+gYr/eXuB/3N1fP9sbnX/bnB3/2xudf9wcnn/
+bnF7/3Bzff9qbXf/bG95/2Zpc/9sb3n/bnF7/3R2e/9ucXn/bG51/3Fzev9ucHf/Z2p0/25xe/9zdn//
+b3J8/3Byev9rbXT/aGtx/2dqcf9kZ3H/ZGdx/2Zobv9nanT/am13/2Zpc/9kZ3H/Zmhu/2xvef9nanT/
+bG51/2Zpc/9qbXf/bnF7/2ptd/93eoP/bnF7/2xudf9ucHf/c3V8/3N1fP9zdXz/bnF7/3N2f/9zdn//
+c3Z//3N1fP93eoP/bnF7/25xe/9sb3n/bnF7/2xvef9sb3n/Z2px/2xudf9zdXz/cHJ5/2xudf9zdXz/
+bG51/2ptd/9sb3n/bG51/2ptd/9qbXf/am13/2dqdP9sb3n/ZGdx/2dqcf9nanH/bnB3/2ptd/9maXP/
+bG95/2ptd/9qbXf/bnF7/2ptd/9qbXf/Z2p0/2Zpc/9qbXf/bG95/2xudf9sb3n/bnB3/25wd/9ucXv/
+bnB3/3V3ff91eIH/dXd9/3Z4fP9ucHf/bG92/2hrcv9xc3r/a252/25wdv9ydX7/cHJ5/3Bzff9sb3n/
+b3J5/2tudv9xc3r/bG51/3V3e/9ydHv/c3V8/3N1fP9ucHf/bW92/3V3ff91eIH/amxz/2xudf9tb3b/
+b3F2/25weP9tb3b/amxz/29xdf91d33/c3V8/2xvef9wcnn/bnF7/3l7gf95e4H/cHJ5/3d5f/9ucHf/
+bnB1/2lsdf9ucHr/bG95/25xe/9qbXf/am13/3N1fP9sbnX/bW93/2xvef9vcXj/ZWhy/2ptd/90dnz/
+bnB1/2psc/9sbnX/bG51/3d5f/9tb3T/bW92/21vdv9rbnf/a254/2xudf9sbnX/eXyG/3Byef9sbnX/
+bnB3/25wd/9sbnX/bG95/2xvef9nanH/dXd9/3Z4fP91d33/cHJ5/3Byef9ucHf/c3Z//2psc/9zdXz/
+cHJ5/3N1fP9maG7/cHJ5/3Byev9wcnr/b3J7/2xudf9wcnn/bG51/2tud/9ydHv/bG52/3d5f/9tcHj/
+cHN8/3N2fv91d33/bnB3/2xvef93eX//dXiB/25wd/9sbnX/bG51/25wd/9zdXz/d3l//2ptd/9qbXf/
+bnB3/3Byef9vcXX/dnh8/21vc/9zdXz/cHN9/2xvef9qbXf/bG51/2xudf9qbXf/Zmlz/2xudf9qbXf/
+bG95/2xudf9maXP/bG51/2ptd/9ucHf/d3l//2ptd/9tb3b/cHN9/3F0fP9xc3r/cnV+/3d6g/9zdn//
+cHN9/3R3gP90dn7/b3J6/25wd/9ucXv/cHJ5/3l7gf93eX//e36H/3d5f/91d33/bG51/25wd/9sb3n/
+cHN9/3N1fP9zdXz/bnB3/3V3ff9sbnX/cHJ5/3Byef9wc3r/aWx2/2VocP9kZ3H/ZGdx/11gav9kZ3H/
+Zmlz/2dqc/9rbXb/ZWhy/2ZpcP9nanH/bG95/2ptd/9sbnX/c3V8/3Byef9zdXz/bG51/2psc/9qbXf/
+Z2px/2psc/9maXP/Z2p0/2xvef9sbnX/eXuB/3Byef9ucHf/bG51/3Byef9wcnn/bnB3/2xudf9ucHf/
+bG95/2xudf9nanH/bG95/2dqcf9nanT/ZGdx/2Zpc/9sbnX/bG51/2Rncf9nanT/bnF7/2xvef9qbHP/
+dXd9/2ptd/9nanH/bG95/2dqcf9ucXv/bG95/25xe/9wcnn/bnF7/2xvef9qbXf/bnF7/3V3ff91d33/
+b3F1/3Byef9wcnn/bnB3/25xe/9sbnX/am13/2psc/9qbHP/bnB3/25wd/9sbnX/bG51/3N1fP9sbnX/
+bG95/21vc/9zdXz/dXd9/25xe/9wc33/am13/2dqdP9dYGn/aWx1/2ptdf9sbnP/b3F4/2xudf9ucXv/
+bG51/29xeP9rbXX/bnF5/21wef9ydHv/dHZ8/3R2ff9wcnn/bW92/2xvef9wc33/d3qD/2xudf9rbXX/
+a253/3Fzev9vcnv/b3F4/2xvef9vcXX/c3V8/3Byef9ucHf/bW9z/2xudf91d33/c3V8/21vc/94eX3/
+b3F1/25wdf9qbHL/cnR7/3N1fP9zdn//bnF7/25wd/9zdn//bG95/3Byef9vcnr/cXN5/21vdv9ydHv/
+dniB/3J0e/9wc3z/cHN9/3N1fP99gIn/b3F4/21wef9ucHf/bnB3/25wd/9nanT/bG51/3l7gf9ucXv/
+bG51/25wd/9ucHf/Z2p0/2ptd/9qbXf/ZGdx/2xvef9ucXv/Zmlz/2Zpc/9nanT/Zmlz/2xvef9qbXf/
+c3Z//3V3ff91d33/amxz/3Fze/93eX7/dXiC/3N2f/9wc33/eXuB/3J0e/9vcnz/cXR+/2ttd/91eH7/
+bG92/3Byef90dnz/dXd9/2xvef9nanT/cHJ5/3V3ff9sb3n/am13/2ptd/9wcnn/cHJ5/3l7gf9wcnn/
+bG51/21vc/9sb3n/b3F1/3h5ff9sbnX/c3V8/3V3ff9wcnn/bnB3/25wd/9ucHf/bnB3/2xudf9tb3P/
+bG51/25wd/9sbnX/Z2p0/2xudf9qbHP/am13/3N1fP9qbXf/aGty/2hrdf9tb3b/Z2py/2lrcv9sb3n/
+Z2p0/2Zobv9rbnj/bG95/2dqdP9jZm//ZWhy/2Rncf9sb3n/Zmlz/3Bzff9zdXz/dXiB/3Byef93eoP/
+cHN9/3l8hv97fYP/e32D/3V3ff99foH/dXd9/3l8hv95fIb/e3yB/3l8g/9ydH3/b3J7/25wd/9qbXf/
+bnB3/3Fzev92eH7/eXp//3p8gv92eH7/dXd9/3d6g/93eoP/dXd9/3d6g/9zdn//d3qD/3N1fP9wcnn/
+c3Z//3N1fP9zdn//c3V8/3Bzff91eIH/bnB3/3d6g/9wc33/bnF7/3Byef9wc33/dXd9/2ptd/9sb3n/
+bW9z/25wd/9ucHf/bnB3/3h5ff9ucHf/dXd9/2xvef9ucHf/bW9z/25wd/9nanH/bG51/3Z4fP91d33/
+b3F1/3Z4fP9vcXX/bW9z/3N1fP9qbXf/cHN9/2xvef9wcnn/dXd9/3Byef9sb3n/amxz/25xe/9wc33/
+bnF7/2psc/9qbXf/Z2p0/2Zobv9maXP/ZGdx/2dqcf9kZ3H/Zmlz/2psc/9qbXf/amxz/2psc/9zdXz/
+bnB3/2xudf9sbnX/bnF7/3N1fP9zdXz/dXd9/3N1fP9sbnX/ZWdt/2psdv9rbnj/a252/29yfP9sb3n/
+cHN9/2xvef9wcnn/aWxz/3Byef9tcHn/dHZ8/3R2fP9zdXz/cXN5/21wef9vcnv/dXiB/3t+h/9zdXz/
+b3F4/21wef9xc3r/am12/2hrdf9maXP/am13/25xe/9sb3n/bG51/2ptd/9qbHP/cHN9/3Bzff9sbnX/
+c3V8/21vdv9wcXf/c3V8/3t9g/97fYP/fX6B/3l7gf92eHz/foCG/3h5ff91d37/dHZ8/3Fzd/9ucHj/
+cXN6/3d6gv9vcnv/bG95/3Bzff9wc33/en2G/3N1fP9xdH3/cXN5/25xeP9xc3n/bG51/29xdf91eIH/
+bnF7/2dqdP9sbnX/bnB3/2psc/9sb3n/bnF7/2Zpc/9sb3n/c3V8/2xvef9wcnn/dXd9/2xudf9zdXz/
+Z2p0/3N2f/9wc33/cHN9/2ptd/9wc33/dHd//3N0e/9tcHT/bnB3/3N1fP9qbHP/bG95/3N1fv9rbXf/
+dXd9/21vdf9zdXz/dXd8/3N1fP9sb3n/Z2p0/3V3ff91d33/bnB3/2xvef9sbnX/bnB3/25wd/91d33/
+bW9z/2xudf9tb3P/bW9z/2ptd/91d33/bG51/3N1fP91d33/bnB3/25wd/9ucHf/bnF7/3Bzff9ucHf/
+bnB3/2xvef9wc33/bnB3/2dqdP9sb3n/bnB3/3N1fP91d33/bnB3/21vdP9wcnr/cXN5/21vdf9ucHf/
+c3Z//3N1fP9sb3n/cnR7/3N1e/9rbXT/aWx2/2xudf9nanT/c3V8/2xvef91d33/dXd9/2Rncf9kZ3H/
+Zmlz/2Jlbv9nanT/Z2p0/2Zpc/9kZ3H/Zmlz/2Rncf9qbXf/bG95/25wev9xdHz/bW93/29xef9sbnX/
+am13/25wd/9vcXn/cnR7/3ByeP9ydHv/bnB3/2xvef9zdn//bG95/25wd/9wcnn/cHJ5/3Bzff9qbXf/
+bW9z/25wd/9tb3P/bnB3/25wd/9sbnX/cHJ5/21vc/91eIH/cHN9/3N2f/93eoP/d3qD/3d5f/9wc33/
+cHJ5/21vc/9ucHf/cHJ5/21vc/91d33/b3F1/3V3ff9sbnX/bnB3/29xdf9sbnX/Zmhu/2xudf91d33/
+c3V8/29xdf93eX//b3F1/2xudf9ucXv/Z2p0/3Bzff9sb3n/bG95/25xe/9ucXv/bG95/2psc/9wc33/
+cHN9/3N1fP9sbnX/cHJ5/3N1fP9sb3n/bnF7/25wd/9ucHf/bnB3/2xudf9vcXX/bnB3/2xvef9sbnX/
+d3qD/3Bzff9zdn//c3Z//3d6g/95e4H/dXiB/3l7gf91eIH/am13/2ptd/9xc3r/bnB2/2xudf9ucHf/
+bW9z/3V3ff9ucHf/cHJ5/2lsc/9ucXv/b3F6/3V3ff90dnz/b3J7/3Byev9vcXj/b3F4/3V3ff93eX//
+bG51/2hrdf9rbnj/bXB4/2Zpc/9rbXT/ZGdx/2dqdP9wcnn/am13/2dqcf9nanT/ZGdx/2Zpc/9maXP/
+Zmhu/2dqdP9jZm//aGpx/2hqcv9wcnr/cHJ5/3Byef9ucHf/bnB3/2xvef9ucHf/bW91/25xe/9qbXb/
+Zmlz/2lrdP9wcnr/bXB0/2dqcf9sbnX/bW9z/3Z5gv9tb3b/a254/21vd/9tb3b/c3V8/2xudf9vcXX/
+d3qD/3V3ff9ucHf/cHJ5/3Bzff9qbXf/bnF7/25wd/9qbHP/c3V8/3Z4fP9ucHf/cHN9/3Z4fP9ucHf/
+bnB3/2BjbP9qbXf/Z2p0/2ptd/9iZW7/am13/21wev9xdHr/bnB4/25wd/91d33/bXB3/29xef9ydX7/
+a213/3h6fv9vcXf/cnV9/3h6gP93eoP/c3Z//25xe/9+gIb/foGK/3l7gf97fYP/d3l//3t9g/93eoP/
+foGK/3V4gf93eoP/c3Z//3V4gf9zdn//eXyG/3N2f/95e4H/e32D/3N1fP9wcnn/cHJ5/25xe/9zdn//
+c3V8/25wd/9ucHf/c3Z//3Byef9qbXf/b3F1/29xdf9wc33/dXiB/3Bzff9wcnn/bXB6/3Fze/9ucXr/
+bnB3/3N2f/9ucXv/bG95/3BzfP9xdH3/bnF5/2xvef9ucHf/cHJ5/3h5ff9wcnn/foCG/3t9g/9qbXf/
+am13/3Bzff9qbHP/bG95/2xvef9nanT/amxz/2xvef9maXP/bnF7/3Bzff9wc3z/cXR+/25xeP9vcnz/
+c3V8/2ptd/9qbXf/b3F5/3J0ev9vcXf/am13/2dpc/9nanT/cHN9/2xudf9sbnX/cHN9/25xe/9wc33/
+Zmlz/2xudf9qbXf/amxz/2dqcf9kZ3H/Zmhu/2dqcf9qbHP/cHJ5/2ptd/9qbHP/am13/2Zpc/9sb3n/
+amxz/2ptd/9nanT/amxz/25xe/9qbXf/c3V8/2psc/9sb3n/Zmlz/2psc/9qbHP/amxz/2Jlbv9maXP/
+bnF7/2xvef9sbnX/dXd9/2psc/9sbnX/cHJ5/2xudf91d33/bnB3/2xvef92eHz/bnB3/25wd/9tb3P/
+eHl9/3N1fP9zdXz/cHJ5/3N1fP9zdXz/bnF7/25xe/9sb3n/bW9z/2xudf9ucHf/bG95/25wd/9wcnn/
+b3F1/3Byef9qbXf/bG95/2ptd/9wc33/cHN9/2xvef9wc33/bG95/2Jlbv9hZG3/bG51/21wef9qbXf/
+bnB6/3Byef91eIH/bnB3/2xvef9naXP/cHJ5/29xef91d37/dHZ9/25xev9vcXr/bnF4/3Byef91d33/
+d3l//25wd/9vcXj/cHJ5/3F0e/9ucHf/b3F4/25wd/9wcnn/dXd9/25wd/9qbHP/bnF7/3Byef9sb3n/
+bnF7/2xudf9wc33/b3F1/21vdv9sb3b/dXd9/25wd/9zdXz/bnB3/2xudf9sbnX/bW9z/2hrdP9wc3v/
+bXB6/2ptdP9qbXT/c3V8/21vdf9iZW7/ZGdx/2dqcf9ydX7/a211/2tueP9rbnj/bXB3/3N1fP9sbnX/
+bnB3/3t9g/91d33/bnB3/25xe/9zdn//am13/3Bzff9sb3n/bG95/3Bzff91d33/cHJ5/3N1fP91d33/
+bG51/3Byef9qbXf/dXiB/3N1fP9zdn//bnB3/3N2f/9xdH7/dnh+/3F0fv9wcnn/dXd9/2xudf9vcXf/
+dHZ8/21veP91d37/bW92/21wev90dnz/c3V8/21vc/9ucHf/dXd9/3d5f/9ucHf/bnB3/2xudf9sb3n/
+bnB3/3V4gf9qbXf/bnF7/25wd/9sbnX/bnB3/3V3ff9vcXX/dXd9/3V3ff9ucHf/bnB3/2xvef9wc33/
+cHN9/3Byef9wcnn/cHN9/3V4gf9zdn//bnF7/3N2f/91d33/eXyG/36Biv91eIH/dHeA/3Fze/9wc3v/
+a252/2hrcv9maXP/YmVu/2Zobv9nanP/bG94/2xudv9pbHb/cHJ5/2ptd/91d33/bG95/36Ahv97fYP/
+am13/2xudf91d33/amxz/3V3ff9wc33/bG95/2xudf9zdn//Z2p0/3N2f/91d33/cnR7/3Byef9ucHf/
+cHJ5/2xvef9maXP/amxz/29xef9vcXj/cHJ3/25wev9qbXf/Zmlz/3Bzff9sbnX/am13/3Bzff9ucXv/
+cHN9/2ptd/9sbnX/bG51/2psc/9qbHP/Zmlz/2dqcf9nanH/bG51/3V3ff9wc33/bG51/3N1fP9sb3n/
+c3V8/2xudf9wcnn/am13/21vc/9zdn//cHN9/3d5f/9vcXX/dXd9/2psc/9ucXv/bnF7/25xe/9nanH/
+bG95/3V4gf97fYP/c3V8/3l8hv9wcnn/cHN9/3N2f/9ucHf/dXiB/3N2f/9wc33/eXuB/3Bzff9ucXv/
+bG95/3Z4fP9wcnn/c3V8/3Byef91d33/cHJ5/25wd/9qbXf/am13/21vc/9qbXf/am13/2xvef9sbnX/
+cHJ5/25wd/9wcnn/cHJ5/25wd/9wc33/dXd9/3l7gf91d33/dXd9/3Bzff9sb3n/am13/3Bydv9tb3b/
+am13/2ptd/9sbnX/dXd9/25wd/9wcnn/Z2px/3Byef9ucHn/dHd//3d4ff9vcXj/cXN5/2tud/9sb3n/
+c3V8/3V3ff9sbnX/aGt1/21wev9tb3j/Zmlz/2hrdf9maXP/cHN9/3Bzff9qbXf/Z2p0/2xvef9ucXv/
+bG51/25xe/9qbHP/bG95/2xudf9ucXr/aWx0/3J0e/9sbnX/cHN9/25xe/9nanT/bG95/2xudf9sbnX/
+c3V9/3R2fv9tcHr/cHJ3/3R2fP9wcnn/am13/2dqdP9ucHf/dnmC/25xe/9ucXv/bnF7/25xe/91d33/
+bnB3/29xdf93eX//cHN9/2ptd/9qbXf/cHN9/2Rncf9sbnX/Z2p0/2Rncf9nanT/bG95/2Zpc/9maXP/
+bG95/2dqcf9qbXf/YGNs/2xvef9sb3n/bG95/2psc/9sbnX/a212/3N1e/9zdXz/b3F1/3d5f/9tcHr/
+cXR8/3Z4gP9ucXr/dnh//25wdf9ucHf/dXd9/2xvef9qbXf/bG51/3V3ff93eX//bG95/3Byef9ucHf/
+bG95/25wd/97fYP/b3F1/3Byef9wcnn/bG51/2xudf93eX//am13/3Bzff9wc33/bW9z/2ptd/9nanT/
+am13/2xvef9sbnX/Z2p0/2xudf9nanT/amxz/11gav9sbnX/Z2px/2ptd/9zdXz/bG95/2xvef9sbnb/
+cHJ6/21wev9sb3n/bnF7/2xvef9ucXv/dHeA/3Z4f/9xdH3/am13/3Bzff9zdXz/e32D/3V4gf+Fh43/
+f4KM/25xe/9sb3n/d3l//2xvef93eX//cHN9/3Bzff9zdXz/dXiB/2xvef94eoH/dnh+/25xev9ucXr/
+aGp0/2dqcf9nanT/XWBq/2Rncf9qbXb/bG93/21vd/9ucXj/bG51/2psc/9zdXz/Z2p0/2xvef9sb3n/
+bnB3/25wd/9qbXf/am13/2psc/9sb3n/bG51/2ptd/9sbnX/am13/2xudf93eX//eHl9/3Byef91eIH/
+c3Z//3d5f/9ucHf/c3Z//25wd/9ucHf/c3Z//25wd/93eX//bnB3/3Z4fP9nanH/bnB3/29xdf9ucHf/
+Z2px/2psc/91d33/c3V8/2psc/91d33/amxz/2psc/9sb3n/ZGdx/2dqdP9maXP/Zmlz/25wd/9qbXf/
+Z2p0/2ptd/91d33/bnF7/25xe/9tb3P/dXd9/3Bzff9ucXv/cHJ5/25xe/9ucHf/bnB3/3Byef9zdn//
+c3Z//3V4gf9wcnn/eXuB/3l8hv91eIH/e32D/3t+h/97fof/eXuB/3l7gf93eoP/bnF7/2ptd/9xc3r/
+cnR7/2xvd/9tb3f/bnB3/3N1fP9sb3n/cHN9/2dqdP9wc3v/cXN8/3V3ff92eHz/bnB6/3Bye/9tcHj/
+bnB3/3V3ff94eX3/b3F1/21vdv9tcHr/bnF5/2tueP9qbXf/Z2p0/3N1fP9sb3n/amxz/2dqdP9sb3n/
+bG95/2psc/9nanT/Z2px/2xvef9maG7/Zmly/2Rncf9ucXr/bG51/3Bzff9ucXv/Z2p0/25xe/9sbnX/
+Z2p0/2hrdf9oa3X/ZWhv/2Rmbv9maXP/a254/2dqdP9iZW7/Z2px/29xeP9maXP/aWx0/2ptd/9rbnj/
+cHN9/2ptd/9qbXf/d3qD/3N1fP9sbnX/bnB3/3Byef9sb3n/bnF7/3Byef9ucHf/bG95/3V3ff9sb3n/
+bnB3/3Z4fP9vcXX/dXd9/2BjbP9sb3n/cHN9/2xvef9tb3P/b3F4/21wev9xdH3/bnF7/2xvef93eX//
+bG95/2xud/90dnz/bG94/3Bzff9rbnb/bG95/3V3fP9ucHf/bnB3/2psc/92eHz/dXd9/25xe/9ucXv/
+bnF7/3Byef9ucXv/f4GH/3Byef9wc33/c3Z//25xe/9ucXv/d3qD/2xvef9wc33/cHN9/25wd/9ucXv/
+bnF7/3V4gf91eIH/bnF7/25wd/9ucHf/cHJ5/21vc/9iZW7/amxz/2psc/9qbXf/cHN9/2dqdP9ucXv/
+bG51/29xev9rbnj/cnV+/3Bzff9ucXv/bG95/3J1fv91dnv/cHN6/2hrdf9oa3X/Z2p0/3V3ff9ucHf/
+fX6B/3d5f/9wcnn/bnF7/3Z4fP9ucHf/dnh8/2xvef9ucXv/Z2p0/2ptd/9kZ3H/bnF7/3Byef9pa3T/
+bG95/2dqc/9sbnX/am13/2dqcf9qbHP/bnB3/21weP9tb3f/cnR7/25wd/9nanT/cHN9/2Zpc/9qbHP/
+amxz/2ptd/9ucXv/Z2p0/2xvef9qbXf/bG95/2xudf9nanT/Z2p0/2xudf9maXP/bnB3/2xvef9maG7/
+am13/2xvef9ucXv/Zmlz/2dqdP9maG7/Zmhu/2ptd/9nanH/c3V8/2psc/9zdXz/ZGdx/2ptd/9qbHP/
+amxz/2Jlbv9maXP/bnF7/3N1fP9nanH/cHN9/2psc/9sbnX/bG95/2psc/9sb3n/am13/2xvef92eHz/
+cHJ5/3Byef9ucHf/dXd9/25wd/9wcnn/bG51/3N1fP9wcnn/cHJ5/29xdf9vcXX/bG51/25wd/9sb3n/
+bnF7/2xvef9ucHf/bG51/25wd/9zdXz/bG51/3Bzff93eX//d3l//3V4gf9wc33/c3Z//2dqdP9nanT/
+b3J7/21wef9sb3f/bW91/25wd/9zdXz/bG95/3N1fP9qbHP/cHJ5/3Bzff91d37/eHl+/3V3ff9ydHn/
+bnF6/3Byef91eIH/eXuB/3N1fP9xc3r/cnV+/25wef9ucHf/bG51/2xudf9wc33/dXd9/25wd/9sbnX/
+c3V8/3V3ff9tb3P/bnB3/21vc/9ucXv/am13/21vdf9qbHH/cXN6/21vc/92eHz/c3V8/29xdf9ucXv/
+am13/2xvef9xdHv/cHN8/21vdv9tb3j/b3J8/3R3gP9qbXf/am13/25wd/91d3v/cXN3/3Byd/9tb3j/
+bG95/3h5ff9ucHf/bnB3/3l7gf9zdXz/amxz/2ptd/9wc33/Z2p0/2ptd/9qbXf/Zmlz/2xudf9wc33/
+bG51/2psc/9wc33/amxz/25xe/9sb3n/dXiB/3t9g/91eIH/dXd9/3h6gP91eH//dnh+/25xev9qbXf/
+cHN9/2hrc/9sb3f/dnh9/21wev90doD/cnV9/3V4gf96fIL/d3qD/3Bzff9wcnn/eXyG/3t+h/9wc33/
+bnF7/25wd/9wc33/cHN9/3l8hv9vcXX/c3V8/25wd/9tb3P/bG51/3V3ff9sbnX/cHN9/3N2f/9ucHf/
+bnF7/2ptd/9wc33/cHN9/3Bzff9sb3n/bnF7/3Bzff9vcXX/ZGZs/29xdf9ucHf/cHJ5/3V3ff9ucHf/
+dHZ9/21vdv9xc3r/cXN7/3Byef9wc33/cHN9/29ye/9ydX7/cnR7/21vdv9sbnX/cHJ5/2dqcf94eX3/
+bG95/3t9g/91d33/cHJ5/25wd/92eH7/bnB3/3h5ff9wc33/cnV+/21wd/9rbnj/bG95/29yfP91d33/
+bnB4/21wef9rbXf/bG51/2ptd/9kZ3H/Z2p0/2xveP9tcHj/a253/3Fze/9sbnX/Z2px/3R2fP9qbHP/
+bG51/25wd/9wc33/cHN9/2xudf9wc33/bG51/2ptd/9sbnX/Z2px/2xudf9qbXf/bnB3/3Z4fP9wc33/
+bG95/3V3ff9zdn//c3Z//25wd/9ucXv/bnB3/25wd/9zdn//bG95/3V4gf9ucHf/dXd9/2ptd/9zdn//
+bnB3/3Byef9nanT/bnB3/3V4gf93eoP/bG95/3V3ff9tb3P/bG51/3Byef9tb3P/bnF7/25xe/9ucHf/
+dnh8/3N1fP9qbXf/amxz/3Bzff9ucXv/c3V8/2xudf9zdXz/bG95/2xudf9qbHP/am13/2ptd/9qbXf/
+am13/25wd/9ucHf/c3V8/2xvef9sbnX/dXd9/25xe/91eIH/eXyG/3l8hv93eoP/c3Z//3V4gf9ucXv/
+bnF7/3V4gf9wcnr/cHJ3/3BzeP9vcXX/dXd9/25wd/9wcnn/bG51/25weP91d3//dnmA/3h7hf9zdoD/
+dnh+/29yfP9ucXv/c3Z//3d5f/9wcnn/bnB0/3Fze/9ucHj/bnB4/29xdf9vcXX/c3V8/3N1fP9ucHf/
+amxz/3N2f/91d33/bG51/3Byef9sb3n/bG95/2xudf9sbnX/ZGdv/3Fzff9qbHP/dXd9/25xe/9nanT/
+bG95/2ptd/9qbXf/bXB4/21wef9sb3j/am1z/25wd/9wc33/ZGdx/2dqcf9ucHf/dnd8/29xef9ucHn/
+bG94/25wd/94eX3/bnB3/3Bzff97fof/dXd9/2psc/9sbnX/dXd9/2xudf9sbnX/bnB3/2xudf9sbnX/
+dnh8/25wd/9ucHf/dXd9/25wd/9zdXz/YGNs/2xudf9sb3n/amxz/2psc/9rbnj/bG51/3Fzef9wcnn/
+bG95/3l7gf9ucHf/bnB5/3d5gf9vcXj/c3Z//2xvdP9pbHX/am13/2dqdP9maG7/Zmlz/3Byef9zdXz/
+bG95/2xvef9tb3P/am13/2ptd/9zdn//am13/2xvef9sb3n/bG51/21vc/91d33/am13/2xvef9zdXz/
+bG51/2xvef9maXP/bnF7/25xe/9ucXv/am13/2xudf9nanT/Zmhu/2BjbP9qbHP/am13/2ptd/9ucXv/
+bnB3/3V3ff9tb3b/b3F5/25weP9vcXj/bnB3/3ByeP9ucHb/cHJ5/29yfP9vcnz/bG54/29ye/9qbXf/
+dXiB/3N2f/9/gYf/eXyG/3h6gP93eX//fH6E/3J0e/95fIX/c3Z//3R3f/9wcnj/bXB5/25wd/9zdn//
+dHeB/3F0fP9xdH7/bnB3/3Byef9zdXz/bG95/2xvef90dn//cnV//29yfP91d33/cHJ5/21vdv91d33/
+bnB3/3Byef9vcXv/dnh9/3V3ff9ucXr/dnl//3N1fP9ydX//bG95/2xveP9vcXj/cXR9/29ye/94eoH/
+d3qD/3N2f/96fIL/enyC/3t9g/91d3z/dnh//3Z4fv9zdn//enyC/3V3e/9+gIb/enyC/31+gv9zdXz/
+eXuB/3h5ff91d33/cHJ5/3d4ff96fIP/gIKJ/3V4gf94eoH/d3mC/3V3ff93eYL/cHJ5/3Z5gv91eID/
+cHN9/3p8gv91eID/cHN9/3N1fP93eoP/c3Z+/3Bzff9sb3n/c3Z//3Bzff9vcXX/bG51/25wd/9qbXf/
+Z2pz/2xudf9wcnn/bnB3/3N1fP9sbnX/bG51/3V3ff9sbnX/cHJ5/3V3ff93eX//c3Z//25xe/9wc33/
+bG95/2xudf9wcnn/b3F2/2xudf9rbnj/bG51/25xe/9qbXf/bG51/2Jlbv9pa3X/b3J6/3J1ev91d37/
+cnV+/3Byef9sb3n/bG92/3Bzff91d33/Z2p0/2lsdf9tcHr/bG93/21wef9ucHf/b3F1/3V3ff91d33/
+cHN9/2xvef91eIH/dXd9/25wd/9wcnn/cHJ5/3Byef9ucHf/cHJ5/2lrc/92eYD/bG95/3l7gf91d33/
+bnB3/25xe/9sb3n/bG95/3J0e/9xc3j/bnF5/2lsdP9sbnX/bnF7/2Jlbv9maXP/bG51/3J0e/9sbnf/
+a252/25wd/9ucHf/dnh8/2xudf9ucHf/dXiB/3Bzff9nanT/bnB3/3Z4fP9sbnX/bG51/25wd/9qbXf/
+am13/3Bzff9qbXf/am13/3V4gf9tb3P/cHJ5/2dqdP9sb3n/c3V8/3Byef9ucHf/dHeA/3Bzff91d3//
+dHeB/2xvef95fIb/cHJ5/25xev93eYD/bW92/3R3f/9vcXj/bW92/3N1fP9wcnn/bnB3/2xvef91d33/
+dnh8/3V3ff9wcnn/bG95/3Bzff9zdn//eXyG/3Byef9ucHf/bnB3/25wd/9vcXX/dnh8/25wd/9zdXz/
+cHJ5/2xudf9wcnn/amxz/3Bzff9zdn//dXd9/25wd/9ucHf/cHJ5/2psc/9kZ3H/bG51/2xvef9nanT/
+cHN9/2dqdP9sb3n/aGt1/25weP9tcHf/cHN7/21vdv9ydXz/cHN7/3ByeP9ydHz/am12/2dqdP9rbXT/
+ZGdx/2xvef9qbXf/c3Z//3N1fP9xdHz/b3F4/3Z4fv9ucHf/dnh9/29xeP9wcnv/bG51/2lsdP9sbnT/
+bG93/3Byev9tb3b/cnR7/2xudf9ucHf/bG51/2dqcf9maG//bXB3/25wd/9tb3X/cnR6/29xev9rbnb/
+cnR5/3J0ev9wcnv/cHN8/3N1fP92eID/cHN9/3J1fP9ucHj/cXR9/29xeP9vcXj/bnB4/29yef9ucHj/
+d3h9/3BzfP9xc3r/dXd+/3J1fv91eID/bnF6/3N2gP9ucHf/b3F5/3J0e/9sbnb/dHZ7/2xvef9zdXz/
+am12/3F0ff9sb3j/bG94/2Zobf9rbXT/cXN6/3l7gf9vcXb/cnV+/3Bze/9tcHn/cXN9/25wd/9wcnz/
+cHJ5/2xvdv91d37/cHJ8/21vc/9ucHf/dHZ8/3J0e/9xdH3/bnB3/3J1fv9ydX3/bnB3/25wd/9ucHj/
+bW93/2ttdP9sbnX/bG95/2xudf9pbHb/Zmlz/25xe/95e4H/c3V8/3V4gf97fof/e36H/3d5f/9wc33/
+c3Z//25wd/9qbXf/dXd9/29xeP9sb3f/b3F3/25wd/91d33/bnF7/25xe/9sb3n/b3J7/3J1f/90d37/
+dnh//3N2f/9ydH3/b3J7/25wd/9wc33/dXiB/25wd/9tcHr/dXd+/25xef9sb3n/bnB3/25wd/93eX//
+dnh8/2xvef9qbXf/dXd9/3N1fP9ucHf/c3Z//3Bzff9wc33/cnV+/3N2f/9pbHT/dniA/25wd/91d33/
+bnF7/21vc/9tb3P/bG51/2tueP9xdH7/cXN8/3Bze/9rbnj/a254/3N1fP9nanH/bG51/21vc/9zdnz/
+b3J6/29xdv9ucHT/bnB3/3d5f/9vcXX/cHJ5/3V4gf9wc33/bG95/2xvef91d33/bG95/3Byef9wcnn/
+bnB3/29xdf91d33/b3F1/25wd/97fYP/bnB3/3Byef9ucXv/c3Z//3d6g/9zdn//cHN9/3N2f/9wcnv/
+cXR8/25xe/9kZ3H/dXiB/2psc/9laHL/c3V8/2hrdP90dn3/bnF5/2xvef9vcnz/bnF7/25wd/9sbnX/
+bnF7/25xe/9zdXz/cHJ5/25wd/9wcnn/bnB3/3t+h/9sb3n/bnF7/3V4gf9sb3n/bnB3/3d5f/9ucHf/
+dXiB/3N2f/9ucXv/cHN9/2ptd/9ucXv/c3V8/3V3ff9ucHf/cHJ5/25wd/9ucHf/bG51/2ptd/9ucXv/
+cHJ5/3V3ff9sb3n/bW95/2hrdf9ucHf/bG52/21vd/9qbHP/bnB2/3J0e/9oanL/bG53/2hrcv9iZW7/
+a210/2BjbP9nanT/am13/3V3ff9zdXz/cHN9/21vd/9wc33/a254/3h6gP9rbnf/bW95/2hrdf9iZW//
+aWxz/2lsdP9tb3X/aWx2/25xe/9qbXf/bG51/2Zpc/9iZW7/YmVu/2ptd/9ucHf/bW94/29xeP9tcHr/
+bnF7/25xef91d33/cnR7/3F0e/9wc3z/dHeB/3R3gP9ydHr/bnB2/3R2fP91d33/cXN7/3Fze/9zdn7/
+b3J6/3J1fP9ydX3/dHZ9/3V3ff9xdH7/cnV//21weP9ydHz/bW92/29xeP9sb3f/bG51/25xef9sb3f/
+cHN7/2ptdv9ucHn/a252/29xeP9kZ3H/aGt1/25xe/91eH//bG51/21wev9tb3b/bG53/29yfP9pbHb/
+aWx2/2xud/9rbXX/cXR7/21wev9oa3P/a212/29yfP9vcXr/c3aA/25xe/9xdH7/bnB5/2xvdv9wcnr/
+bnB4/2xvef9ucHj/bnB1/3Byef9vcXX/bnB4/2lsdf9wcnn/c3V8/2ptd/9sb3n/dXd9/3V3ff92eHz/
+dXd9/25xe/9ucHf/bG95/3V4gf9zdXz/bW94/25xe/9ucHX/c3V8/25wd/9sb3n/Zmlz/21wdP9zdn3/
+c3V7/3Z3fP9zdXz/cXN5/25wdv9sb3n/cHJ5/3V3ff9ucHf/b3F4/3R2e/9tb3b/a253/2hqdP9sbnX/
+bnF7/2ptd/9nanH/ZGdx/25xe/9maXP/YmVu/2Rncf9nanH/Zmlz/2ptd/9oanT/Y2Zu/29ye/9nanT/
+cHJ5/2dqdP9kZ3H/Zmhu/2Zobv9jZm//bG95/25xe/9sb3n/amxz/2ttdP9sb3n/ZGdx/2Zpc/9sbnX/
+dHZ8/3Fzd/9tb3f/b3F2/29xdf95e4H/b3F1/3N1fP94eX3/c3V8/25wd/9ucHf/dXd9/2xudf9ucXv/
+bnF7/25wd/9sb3n/c3V8/2xvef9wcnn/foCG/2xvef9wc3z/Zmhu/2xudf9wcnn/cHJ5/25wd/9wcnn/
+bnB3/3J0ev9ydHv/Z2px/3l7gf9ucHf/Z2p0/3l7gf9wcnn/eXuB/3J0ef9ydHv/cHJ5/25wd/9vcXX/
+bnB3/3Bzff9wc33/c3Z//3N2f/9ucXv/c3Z//3N2f/9+gYr/c3Z//3N2f/93eoP/d3l//3V3ff9/gYf/
+dXd9/36Ahv99foH/dXiB/36Ahv9ucXv/d3qD/3l7gf95e4H/dXiB/3d6g/9zdn//dXiB/25xe/9wc33/
+dXiB/3V4gf9zdn//bG95/3N1fP9ucHj/cnV9/25xev9vcnv/a253/3Byef93eX//aGpu/3BzfP9tb3b/
+aGt1/25wd/9nanT/cHN9/3N2f/91eIH/d3l//3R2fP9vcXj/d3mC/21wev93eoP/cnV+/25xe/9ydHv/
+aGt0/3J1fv9wc33/dXiB/3V3ff97fYP/dnh8/3V4gf91d33/cHN9/2xvef9zdn//c3Z//3R3gf90dn//
+eHqA/3p8gP92eH3/foCH/3x9gf90d4D/c3Z//3Z4gP93eoT/dHZ8/25wd/93eX//eHqA/3V4gP9zdn7/
+dXeA/25wev9ucXr/cXR9/3R2ff9vcXr/bnF6/3J1ff9tb3b/cXN6/25wdv9ydHr/bnB3/21vdv9vcXf/
+aWx1/3R2fP9vcnz/dHd+/3J0ff91eID/bXB6/3Fzev90d4D/eHuE/29yfP9vcnv/cHN9/3R3fv93eoL/
+d3qC/3V4gP94eoD/d3l+/3l7gf93eX//cnV+/3N2gP93eYD/d3l+/3+Bh/93eYH/eHqA/3h6gv94e4L/
+dXh//3l8g/91eH//dnh//3Fze/9ydHr/b3J6/3F0fv9wcnr/d3qD/3t9g/91eIH/d3qD/3t+h/97fof/
+d3qD/3d6g/9wc33/bnF7/2xvef91d33/bG95/21wef9tcHr/bG51/3J1fP9ucHf/c3V8/25wd/9tb3f/
+bXB6/29yev9xdH3/a253/21weP9tb3b/bG95/3N1fP93eX//bnB3/29xeP9ydHv/bW92/2tud/9qbXf/
+bG95/3d5f/9wc33/am13/2Zpc/91d33/cHN9/2ptd/9ucXv/bG95/3Byef9ydHz/c3V7/2hqcv92eH//
+am13/3V3ff9zdXz/bnB3/25wd/9ucXv/bW92/3Fze/9ydX3/cnR8/2xudv9vcXj/cHJ5/2dqcf9qbHP/
+bG51/3N2f/90dnz/dHeA/3R2ff9ucXv/d3l//25wd/9zdXz/d3l//2xudf9qbXf/Z2p0/25xe/9nanT/
+am13/2dqdP9qbHP/Z2p0/25xe/9qbXf/am13/3l7gf9tb3P/cHJ5/2BjbP9sbnX/cHJ5/2xudf9ucHf/
+cHJ5/21wev9ydHv/dHeA/2Zpc/93eX//bnB3/2ptd/92eHz/bnB3/3p7gP9ydHr/cnV//25xe/9vcXX/
+b3F1/2ptd/9wcnn/cHJ5/3V3ff91d33/b3F1/2xudf9qbXf/d3qD/2ptd/9sb3n/bnF7/21vc/9sbnX/
+bnF7/2psc/9sb3n/bnF7/2xudf9wc33/XWBq/2xvef9ucXv/bnF7/2Zpc/9qbXf/bG51/2xvef9kZ3H/
+amxz/2ptd/9sb3n/bnF7/25wd/90dn3/bG92/25xe/9sb3n/aGt0/2Rncf9qbHT/c3V8/2RmbP9wc33/
+cHN6/21wev9zdn//cHN9/3l8hv93eoP/f4KM/3+Bh/94eX3/bG95/3N2f/9wcnn/eXyG/3N2f/9wcnn/
+bnB3/2ptd/9ucXv/c3Z//3Bzff9zdXz/d3qD/3Byef9ucXv/bnF7/25xe/9sb3n/c3Z//3N2f/91eIH/
+bnF7/3N2f/96fIL/c3Z//32Aif95e4H/c3Z+/3Bzff9zdn//fYCJ/3d5f/92eH7/en2G/3p9hv92eYL/
+dXiB/3V4gf90d4H/c3Z//3V4gf96fIL/b3F4/3Bzff9ydX7/cHJ5/3Bzff9wcnn/dHeA/25weP9ucHf/
+bW92/2hrcf9xc3n/cHJ5/3Z4fP9ucXr/cHN8/2ptdv9qbXf/c3V8/3d5f/9qbXf/aGt1/2xudf9sb3n/
+bG95/21wev9tb3b/a254/2hqcf9maXP/a210/2Vocf9nanT/a210/2hrcv9ucXv/a210/2Nmb/9naXP/
+aGt0/2dqdP9maXL/Z2lw/2hrdf9kZ3D/ZGdw/2Zpc/9iZW//ZWhw/25xe/9wc33/bnB3/25wd/91d33/
+d3l//3N2f/91d33/bnF7/2xvef9sb3n/dXd9/25wd/9ucHj/cHJ7/2xveP90dnz/bnF7/2dqdP9zdXz/
+bG51/29xeP9ydH3/dHeA/3N1fv9maXP/a211/2xudv9qbXf/am13/3Bzff9vcnv/bXB6/2lsdP9sbnX/
+bW92/2ptd/91d33/bnF7/2dqdP9nanT/cHN9/3N1fP9qbHP/bG95/2ptd/9qbXf/bnF6/25xe/9laHL/
+bnF6/2Nmb/9qbXf/bG51/2Rncf9maXP/bG51/2xvef9qbXb/bG51/2ptdP9oa3P/c3V8/3Bzff91d33/
+ZGdx/2psc/9tb3X/cXN5/29xef9sb3n/bG51/3d5f/9sbnX/cHN9/3d5f/9qbXf/Z2p0/2Zpc/9zdXz/
+bW9z/29xdf9ucHf/amxz/21vc/9zdXz/cHJ5/3N1fP9+gIb/bnB3/3Bzff9kZ3H/bnB3/3N2f/9sb3n/
+bnB3/29xeP9wcnn/cXN7/2xudf92eHz/cHJ5/2xudf9ucHf/eHl9/21vc/91d37/b3F4/29xeP9ucHf/
+bnB3/3Byef9sb3n/dXiB/3N2f/93eoP/eXuB/3Bzff91eIH/c3Z//3+Bh/9zdn//d3qD/31+gf9zdn//
+c3Z//3l8hv9zdn//e32D/3V4gf9zdXz/eXuB/2Zpc/93eX//c3Z//3Z4fP9ucHf/bnB3/25wd/9wcnn/
+am13/25wd/9wcnn/bG51/25xe/9qbXf/bXB6/2ttdP9oa3P/aGty/2ttdf9nanT/c3V8/2dqdP9rbnj/
+cXN7/2ttdP9kZ2//bW91/2dqdP9sb3n/cHJ5/3d5f/93eX//bG51/2xudf9wcnn/dXd9/2xudf9sbnX/
+c3V8/25wd/9wcnn/bnF7/3Bzff9ucXv/bnB3/2ptd/9ucHf/bnB3/3Bzff9ucXv/eXyG/3V3ff93eX//
+c3Z//3N2f/9wcnn/dXiB/3l7gf91eIH/cHJ5/3t9g/97fYP/foCG/3t9g/9ucXv/c3Z//3l7gf9wcnn/
+eXuB/3Bzff9wc33/bG95/2Zpc/91d33/cHN9/2psc/9ucHf/bG95/3N1fP9vcXX/cHJ5/25wd/9zdXz/
+am13/3V3ff9wcnn/bG95/2ptd/9kZ3H/bG51/25wd/9tb3P/cHJ5/25xe/9zdn//cHJ5/25xe/9zdXz/
+c3V8/3d6g/9wc33/d3qD/3t9g/93eoP/d3qD/3t+h/97fYP/eHuF/31/hf96fIP/c3Z//3J1f/95e4H/
+am13/3N1fP9wcnn/bG95/3R2fP9ydHv/dXd7/2dqcf9ucHX/bnB3/21vd/9ucXv/dnh8/2xudf9ucHf/
+dXd9/3d5f/9zdXz/bnF7/2ptd/9qbXf/bG51/3N1fP9qbXf/bG95/2xvef9qbXf/dHZ8/2xvef9maXP/
+dXd9/2ptd/9sb3j/cnR7/3F0ff9xdHz/Z2lx/21vdv9wcnn/bnB3/3N1fP92eHz/cHJ5/3Byef9sbnP/
+am13/21vdv9wc33/dXd9/25xe/9qbXf/b3F1/3Z4fP9zdn//b3F1/3Byef9wc33/bnF7/3Bzff90dnz/
+bG93/3R3gP9nanT/bnF7/25xe/9sb3n/bG95/3V4gf92eYL/c3V9/3N2fv9vcnr/b3F4/3d5f/91d33/
+d3qD/2xvef9ucHf/b3F4/3J0ev9ucXv/cHN8/2xvef93eoP/bW9z/3Byef92eHz/am13/2dqdP9qbXf/
+cHN9/2xudf9ucHf/bG95/2xudf9ucHf/dXd9/3Byef91d33/fn+D/25wd/9ydHz/Z2p0/25wd/9wc33/
+bnB3/2xvef9sb3j/cXN5/21wev9nanT/bnF7/2psc/9nanT/bG51/3h5ff9vcXX/eXuB/3Byef9vcXn/
+bnB3/2ptd/9qbXf/Zmlz/2xvef9ucXv/am13/3N1fP9qbHP/Z2p0/2dqcf91eIH/am13/2ptd/9wcnn/
+bW9z/21vc/9wcnn/bW9z/3Byef9sbnX/bG51/3N1fP9iZW7/c3V8/25xe/9zdXz/bG51/2xvef9sbnX/
+cHJ5/2xudf9ucHf/c3V8/25wd/9wcnn/cHJ5/3N1fP9tb3P/bW92/2ptd/9sbnX/Z2p0/3N1fP9nanH/
+b3F5/3F0ff9sb3f/Zmhv/29xeP9sbnX/cHJ5/3V3ff97fYP/eHl9/21vc/9sb3n/c3Z//3N2f/9sb3n/
+bnB3/25xe/9ucHf/bnB3/3N1fP91d33/bnF7/25wd/9ucHf/bG95/25wd/9ucXv/bnB3/3l7gf9zdXz/
+eHl9/3N1fP9wc33/bG95/3N1fP9wcnn/cHJ5/2xudf9zdXz/dXd9/3V3ff9zdXz/Z2px/29xdf91d33/
+b3F1/3V3ff9ucHf/c3V8/21vc/9maG7/cHN9/2xudf9nanT/Z2p0/2xudf9sb3n/am13/2dqdP9nanH/
+am13/2Zobv9ucHf/Zmlz/2Zobv9gY2z/XWBq/2dqcf9nanT/YmVu/2Zpc/9kZ3H/ZGdx/2Jlbv9iZW7/
+ZGdx/2Jlbv9maXP/Z2px/2dqdP9wcnn/Z2p0/2Rncf9qbXf/Z2p0/2Zpc/9maXP/Z2p0/2Zobv9qbHP/
+am13/2Jlbv9maG7/ZGdx/2dqcf9sb3n/bG95/2xvef9nanT/bG95/2psc/9sbnX/bnF7/3N1fP9qbHP/
+am13/25xe/91d33/bG95/2ptd/9nanH/amxz/2Rncf9qbXf/amxz/2tueP9rbnj/am11/3V3e/9wcnn/
+amxz/3d5f/9sb3n/bnF6/3F0fv9xdH3/dHZ8/2dqcv9tb3b/cHJ5/2xudf9zdXz/dXd9/21wev9tcHr/
+aWx2/2xvef9tb3n/dXiB/3d6g/9wcnn/bnB3/21vc/91d33/dXd9/2psc/9sb3n/bG95/3Byef9qbXf/
+bnF6/2xudf9ydH3/am13/25wd/9ucHf/bG95/3Byef9zdn//dHeA/3J0fP9tcHj/bG53/3J0e/94eoH/
+c3Z//3t+h/9sb3n/bG95/25xe/90dn3/bnB4/25wd/9tb3P/dXiB/2dqdP9nanT/cHN9/2xudf9nanT/
+ZGdx/2xvef9qbHP/ZGdx/2dqcf9kZ3H/Z2p0/2xvef9sb3n/bG95/3t9g/9qbXf/c3V8/2Zpc/9sb3n/
+cHN9/25wd/9wc33/bnB3/3ByeP9zdXr/bG95/3N2f/9wcnn/bG95/2xvef91d37/b3F2/3l7f/9xc3n/
+bnB3/3N2f/9vcXX/bW9z/2psc/9wcnn/c3V8/3Byef92eHz/bnB3/2ptd/9sbnX/c3Z//2ptd/9sb3n/
+bnF7/2ptd/9qbHP/c3V8/21vc/9zdXz/bnB3/3Bzff91d33/Zmhu/3Bzff9wc33/eHl9/25wd/9wcnn/
+b3F1/3Byef9sbnX/bnB3/3Byef9ucHf/bnF7/25xe/94eoD/cXN7/29xef9vcnf/bG95/2xveP9ydX7/
+Z2p0/25xev9xdH3/a254/2RncP9rbnj/Z2p0/2xvef9wc33/c3Z//3N1fP9sb3n/cHJ5/3Fzff9ydX7/
+b3J8/3Byef9ydX7/cHJ5/3Bzff90d4D/cHN9/3V3ff9vcXX/bG51/2xudf9tb3P/bnB3/2xudf95e4H/
+cHN9/3R2fP91d3v/c3V8/2ptd/9sb3n/bG51/2xudf9qbXf/cnV8/3N1fP9wcnn/am13/2Fkbf9qbHP/
+c3V8/2xudf9ydXz/am13/25xe/9sbnX/ZWhx/3N1fP9sbnX/bG51/2xudf9sbnX/bG95/2ptd/9ucHf/
+b3F1/3N1fP9tb3P/dnh8/25xe/9sbnX/amxz/2Jlbv9qbHP/bG95/2Zpc/9qbXf/am13/2xudf9qbXf/
+am13/2xudf9qbXf/cHN9/2xvef9ucXv/d3l//3V3ff92eHz/dnh8/3Byef9sb3n/bnF7/3Bzff9sbnX/
+bW9z/3V3ff9qbHP/bnB3/2xudf9tb3P/c3V8/3Bzff9sb3n/Z2p0/2xvef9qbHP/bW9z/3N1fP92eHz/
+cHJ5/25wd/91d33/c3V8/25xe/9wcnn/am13/25xe/9qbXf/cHN9/2xvef9tcHr/bXB4/21veP9zdoD/
+bnF7/2xudf93eX//bG51/2tueP9wc3v/cnR7/3R2ev9naXD/bnB2/3N1fP9ucHf/dXd9/3V3ff9vcXj/
+b3F5/2xuc/9ucHf/cHJ2/3N2f/93eX//cHN9/2xvef9sb3n/dXiB/3h5ff9ucHf/c3V8/3N1fP9wcnn/
+bG95/3J1ff9sb3f/cnN5/2Vocv9qbHP/Z2p0/2BjbP9kZ3H/Zmlz/2dqc/9rbnT/aWtz/2Zob/9pa3L/
+cHN9/2xvef91eIH/Z2lz/2xudf9sb3f/cXR7/2ptd/9sbnX/am13/3V4gf9kZ3H/am13/3Byef9maG7/
+ZGdx/11gav9nanT/Zmhu/2Rncf9maG7/Zmhu/2Rncf9qbXf/ZGdx/2dqdP91eIH/YmVu/2dpc/9nanH/
+cHN9/3V4gf9wcnn/bnF7/25xev9wcnn/c3V8/2ptd/9ucXv/am13/2dqdP9sbnP/dnd8/2tueP90d37/
+cXN5/25xev9wc33/b3F1/25wd/9qbXf/c3V8/3V3ff9wcnn/eHl9/25wd/9ucHf/bW9z/3V4gf9ucXv/
+cHJ5/3N2f/9wcnn/c3V8/3V4gf9wcnn/c3Z//25xe/9wc33/dnh8/2ZobP9zdXz/c3V8/3Z4fP9vcXX/
+c3V8/2xudf9ucHf/bW9z/2xudf9wcnn/bG51/2xvef9qbXf/c3V8/2dqcP9sb3n/bW92/2xveP9sb3n/
+dXd+/2ptd/9wc33/cnV+/2xvef9maHL/bXB6/2dqdP9ucXv/bnF7/3V3ff94eX3/cHJ5/21vdv90dnz/
+bnF7/3F0fv9ydX7/cnV+/29xeP9vcnv/c3Z9/3N2gP91eIH/cHN9/3N1fP9zdn//d3qD/3d5f/91d33/
+gIKJ/3p8gv92eYP/dXiB/3d6g/9zdX3/eHqB/3h7hP91d37/dHZ9/3p7gP97fYH/enyC/3R3f/9ucXr/
+cnV+/3p8gv9ydHv/cnV9/3Byef90d4D/cnV9/29ye/94eoD/bnB3/29xeP9ucHf/bW92/21wev9rbnj/
+bnB6/2tueP9xdHv/b3F4/3d4ff9vcXj/bnB3/2xuc/9iZW//bW92/2xvef9rbnj/dHeA/3J1fv9xdH7/
+bW93/2xveP9ucHf/b3F4/3J1fv9vcnz/c3Z//3h7hf96fIL/eXyG/31+gv96fIL/enyC/3p8gv94e4X/
+d3qC/3V3ff97fYP/d3l//3Z4f/92eHz/d3l//31+gv99foL/enyD/3d5f/96fIP/dXd9/3N2f/91d33/
+eHl9/3Byef9wcnn/dXd9/3N1fP9wcnn/bnB3/2psc/9ucXv/bG51/2xvef9sb3n/aGt1/2lsdP9qbXX/
+cnV+/25wd/9nanT/d3l//2xveP9rbnj/cnV9/2xvef9ucHf/X2Jr/2ttc/9tcHr/bnB3/3N2f/92eH//
+bnF7/21wev9qbHX/bXB3/2ttdP9ucXv/d3l//2ptd/9maXP/bG51/3V4gf93eX//bG51/3N1fP9wcnn/
+c3V8/2xvef9zdXz/am13/3J1ff9nanT/bG51/25xe/9kZmz/bG51/2xudf9ucHf/b3F1/21wd/9qbXX/
+a253/3V3ff9ucXv/d3l//25wdP9tcHf/c3V9/3R3f/9wc33/b3F1/2xudf97fYP/bG51/25wd/92eHz/
+b3F1/25wd/9qbHP/eHl9/3Byef9tb3P/b3F1/29xdf9sbnX/dXd9/3N1fP92eHz/f4GH/2dqdP9sb3n/
+am13/3Bzff95e4H/dXd9/3V4gf9vcnz/c3V+/3V3ff9tcHr/bnF7/21wef9sb3j/cHJ5/3d6gP9xc3v/
+dHd+/3R3gP9zdn//dnmC/3Bzff9zdn//c3V8/3N2f/91eIH/bnB3/3d5f/9sb3n/bnB3/25wd/93eX//
+bG95/25wd/9wc33/bnB3/25wd/9wc33/bnB3/3Bzff9ucXv/dXiB/3V4gf9nanH/cHN9/3N2f/95e4H/
+cHJ5/3N2f/9wcnn/cHN9/3N1fP9wcnn/dXiB/25xe/93eoP/bnF7/3V4gP9ucHf/cHN8/29xeP9ucXn/
+a254/3V3ff9pbHb/cXR8/29yfP9wc3z/bG95/2xvef9qbXf/cHN9/3Byef91eIH/d3l//3Fze/9ucHj/
+dHd+/2ptd/92eYD/cHJ6/3V3f/9tcHr/cXR8/3V3fv92eYD/dXiB/29xeP9tcHn/bnF7/3Bzff9wc33/
+cHN9/3l8hf9ydX7/dHV7/3J0fP9ydX//cXN6/3Fzev9ydX3/b3J6/3Fzef9ydHz/dXiB/3Z4f/9vcnr/
+bW94/25xef92eHz/b3F2/3Bze/9wc3v/c3Z//25xe/9vcXr/d3l//21vdv9xc3r/b3J6/21weP9vcXv/
+bW94/25wef9rbnj/b3J8/21wef90dn3/cXN7/3Bze/9tb3X/ZWdu/2Zpc/9pa3P/Zmly/2tueP9rbnb/
+bG92/2Vocf9sbnX/aWxz/2dpb/9oanT/a210/21veP90dn3/b3J5/3R2fP9zdXr/bnF4/29ye/9ucXv/
+b3J8/3BzfP9xc3r/cXR9/3Bye/9ydHv/cXN9/3J1ff93eX//e32D/3R3f/9xdH3/c3Z//3F0ff9vcnz/
+dXd9/3d5f/9ucHf/cHJ5/3Byef9wcnn/cHJ5/3V3ff9sbnX/cHJ5/21vc/9ucXv/bnF7/2xvef9sb3j/
+bXB4/3V3fv9sb3n/Z2p0/3d5f/9sbnX/a210/29xd/9tcHr/cnR6/2Rmbv9sbnT/am13/2dqdP9ucXv/
+c3V8/2xudP9tcHr/a252/2xvef9ucXv/cHN9/3d5f/9ucXv/bG95/25xe/97fof/d3qD/25wd/91d33/
+cHJ5/3Byef9ucHf/cnR7/21vdv9ydXz/aGty/2xudf9ucXv/ZGZs/25wd/9ucHf/bW93/25weP9ucHf/
+bnB2/2xveP9zdXz/c3V8/3V4gf9sbnX/bG51/21wev9zdXz/am13/2xudf9qbXf/dXiB/2psc/9sbnX/
+dXd9/2xudf9tb3P/amxz/3Z4fP9vcXX/bnB3/2xvef9ucHf/am13/3d5f/91d33/c3V8/4GDiv9qbXf/
+cHN9/2dqcf9vcXX/c3V8/2ptd/9ucHf/bW92/3Bye/9ydX7/cnR7/3V4gf91d4D/cHJ7/3d5gP96fYf/
+eHqB/3R2fv9ydX3/bXB5/2xvef9sbnX/bG51/2ptd/9ucHf/c3V8/2xvef91d33/bnB3/3Byef9sb3n/
+dXiB/2xvef9sb3n/bnF7/25xe/9ucHf/cHJ5/25wd/9ucXv/bnF7/3V3ff93eoP/ZGdx/3N2f/93eoP/
+d3qD/25wd/9zdn//bnF7/25xe/9wcnn/bnB3/3Bzff9sbnX/c3V8/25wd/91d33/bG95/3F0ff9ydH3/
+dHd//3Bzff95e4H/c3Z+/3d6gP9wc3z/b3F5/2xudf9sbnX/Zmlz/2xvef9sb3n/dXd9/3N1fP9rbnj/
+bG52/3Z4f/9qbXb/dnh9/3Byd/9zdn3/bW93/25weP9ucXv/dHd//3V3f/90dnz/d3l//3d5f/9+gIb/
+d3l//3R3gP96fYb/dXd+/25xe/9wc33/c3V9/29yfP9xc3r/dHZ+/29yef9zdX3/c3V9/3N2f/9xdH7/
+bG95/3Bzev9ucHX/dHZ+/21vdv9qbXf/bG92/3Bze/9sb3f/bG94/3R2fP9tb3P/cnR5/3F0e/9ucHf/
+bG95/2xvef9ucHn/bnB3/3Bye/9vcXr/c3V9/3V3f/9xdHz/b3F4/2ttc/9rbXT/bnF5/2ptdf9sbnX/
+bG50/3F0fP9qbHP/bW92/2xvef9tb3b/cHJ3/2lsdv9wc3v/dXh//2tudv90dnv/cXN6/25xef9wcnn/
+dHZ+/25xe/9tcHr/bnB5/3F0ff9vcnv/bW94/3Byev9sb3j/a252/3J1fP9vcXn/a210/21wev9vcnz/
+bnB3/3N2f/93eoP/cHN9/3N2f/9zdn//c3Z//3V4gf91eIH/cHJ5/3d6g/9wc33/d3qD/3l8hv93eoP/
+dnmB/3Bzff90d4D/dXiB/3N2f/97fYP/d3l//21wev94e4P/dXd//3V4gv9vcnz/a251/3N1fP9vcXX/
+Z2px/2psc/97fYP/cXR7/2xudf9vcXj/bnF7/3N1fP93eX//bnF7/2dqdP9ucXv/d3qD/3d6g/9ucXv/
+cHN9/3V3ff9wc33/bnF7/3Z4fv9kZ3H/dniA/2xvef9qbHP/dXd9/2Zpc/9nanH/ZGdx/2Rncf9pbHL/
+a213/21wev9laHL/ZGdx/2Rncf9qbXf/Z2lv/2tud/9qbXb/c3V8/25wdf9sb3n/bnF7/3V4gf9qbXf/
+bnF7/3l7gf9sb3n/bG95/2dqdP91d33/bG95/2xvef9ucXv/bnF7/2dqdP93eX//c3Z//3N2f/+Bg4r/
+bG51/3Byef9maXP/bnB3/3Byef9sbnX/bnB3/25weP9ucHf/amxz/25wd/9vcXX/d3h9/3N1ev9tcHj/
+dXd7/3V3ff9wc3z/c3V9/3Byev9sb3n/bG51/2ptd/9maXP/am13/2xvef9ucXv/cHJ5/2dqcf9nanT/
+Z2px/3Byef9kZ3H/YGNs/2Zobv9kZ3H/Zmhu/2Zpc/9maG7/Zmlz/2Zobv9sb3n/c3V8/1lcZf9maXP/
+Zmlz/25wd/9kZ3H/am13/2dqcf9nanH/YmVu/2Jlbv9nanT/Zmhu/2Zpc/9kZ3H/cHJ5/2dqdP9qbXX/
+bnB4/29yfP9sbnX/c3V8/25xe/9xdHv/bXB5/3J1ff9pbHX/bW90/2ptd/9sb3n/am13/3Bzff9ucXv/
+cnR8/3J0e/94e4X/bG95/3l7gf9ucHf/dXiB/3Byef9ucXv/b3J8/3N1e/9wc33/cHJ6/2ttdP9zdXz/
+c3V8/21vc/9vcnz/bnF6/25xef9ucHf/cnR7/3R2fP9ydHv/bW92/3R3ff9vcXj/c3Z//25xe/9vcnz/
+c3V+/3F0ff94eoD/cHJ3/3R2e/9vcXX/a21z/25wd/90dnv/b3F5/3Fzev9xc3r/b3F1/3V3ff9ydX7/
+bnB1/2xudv9ucHf/bXB1/2tueP9tb3f/bG51/21wev9vcnz/b3J7/29ye/9qbXf/aWxz/29xef9nanH/
+bG92/2xveP91eIH/a21z/2lsdv9vcXX/b3F4/25wd/9tb3b/dHZ7/3N2ff9pbHb/d3mA/3J0e/91d33/
+cXR+/3R3gP9zdn7/dHeA/3R3gP97fof/d3qD/3d5gP91eH//cHN8/21wev9wc3z/dnmC/3N2f/9wc3v/
+eXuC/3V4gf9zdXz/dXd9/25wd/91d33/cHJ5/3Byef9wcnn/cHJ5/21vc/9wc33/am13/2xvef9qbXf/
+bnF7/2xueP9rbnX/bG52/29xef9ucHf/dXd9/3N1fP9rbnj/cXN6/3Byef9zdXr/bW5z/2hqcf9wc3z/
+cHJ5/2dqdP9nanT/d3qD/25xe/9sb3n/bnF6/25xe/9zdn//d3qD/25xe/9qbXf/bnF7/3l7gf95e4H/
+bW9z/3N1fP9zdXz/bG51/2xudf9zdXz/Zmhu/3R2fv9ydHv/am13/3d6g/9nanT/Z2p0/2dqdP9nanH/
+a254/21wef90dn3/bG51/2ptd/9qbXf/bnF7/2xvef9ydHv/am13/3Fze/9sbnb/am13/2xudf91d33/
+amxz/21vc/91d33/bnB3/25wd/9sbnX/cHN9/2xvef9ucHf/bG95/25wd/9qbHP/dnh8/3Bzff9wc33/
+f4KM/25wd/9wc33/am13/2xvef91d33/bG51/3N1fP9tb3n/bG51/2dqcf9nanT/bW92/3V3ff9zdX3/
+cXR8/3d6hP91eIH/cXR7/3J1ff9zdXz/am13/3Byef9wcnn/Z2p0/2xvef9wc33/c3V8/3V4gf9tb3P/
+bnB3/21vc/92eHz/bW9z/29xdf9sbnX/bnB3/25wd/9qbXf/am13/2ptd/9nanT/c3V8/3d6g/9kZ3H/
+bG95/2xvef93eoP/Z2p0/25xe/9qbXf/am13/2xudf9sbnX/cHJ5/29xdf9wc33/bnF7/3l8hv9ucXv/
+cHN9/3R3gP94eoD/cHN9/3l7gf9zdn//dHeA/3Bzff9xc3r/am13/25wd/9vcXX/cHJ5/25wd/9zdXz/
+c3V8/2ptd/9qbXf/d3l//25wd/94eX3/bnB3/3N1fP9qbXf/b3J8/29yfP90d37/d3mC/3Z4gf9zdn//
+e32D/3l8hv9zdXz/dXd9/25xev9sb3j/aGt0/25xe/91d33/c3V8/2xudf9zdXz/bnB3/3V3ff9sbnX/
+bG95/25xe/9vcXj/dXd9/21vdv9zdXz/a213/2dqdP9rbnj/cXR9/3Byef9wcnn/dXd9/21vdv91d3z/
+c3Z//25wd/9sb3n/cHJ5/2xudv9sbnb/bnF4/25wd/9zdXz/c3V8/3Fzev9wc33/bG51/2dqdP9sb3n/
+Y2Zu/2ptd/9wcnn/enyC/2xvef9sbnX/bW92/2tud/9ucHf/aGt1/3V3ff92eHz/aGt1/3Z4f/9wcnn/
+bnB3/25xeP9zdn//bnB3/3Bzff9ucXv/eXuC/3Z5gv9ydHv/dnh//25xe/9sb3n/bG95/3Bzff9vcnv/
+Zmly/3J1fv9vcnv/dXd9/3d5f/9wcnn/c3V8/3Byef9zdXz/cHJ5/3V3ff9tb3P/dXd9/25wd/9wcnn/
+c3V8/25xe/9qbXf/a210/2tueP9qbXf/bG51/3d5f/9ucXv/bG51/29ye/9ucHf/cXR8/2ttdP9laG//
+bnF6/2ptd/9maXP/Zmlz/3R3gf9tcHn/bG93/2xvdv9wcnn/c3V8/3d6g/9sbnX/amxz/25wd/93eX//
+d3l//25wd/91d33/dXd9/25wd/9ucXv/dnh//2hrdP91d4D/a253/2psc/9zdXz/Zmlz/2Rncf9maXP/
+Z2px/21wev9sb3n/c3V8/25xe/9wcnn/cHJ5/3Z4fP9wcnn/dHZ6/2xudf92eH7/bW91/29xdf9ucHf/
+eHl9/2psc/9sbnX/dXd9/2xudf9qbXf/amxz/25xe/9sbnX/b3F1/29xdf9vcXX/Z2px/3V3ff91d33/
+c3V8/3+Bh/9nanT/bnB3/2dqdP9ucXv/cHN9/2ptd/91eIH/bG95/21veP9qbHP/ZWhy/2xudf9xdH3/
+cXN5/21vdv90dnz/c3V8/21wef9wcnr/bnB6/21wd/9ucHf/cHJ5/2psc/9sbnX/cHN9/3Bzff9zdn//
+bG51/25xe/9nanH/cHN9/2Zpc/9nanH/Z2px/2xudf9sb3n/am13/2xudf9ucHf/bG51/3V3ff99foH/
+Zmhu/3N1fP9wcnn/eXuB/2ptd/91d33/bnF7/2ptd/9qbXf/am13/25xe/9ucHf/c3V8/3V3ff95e4H/
+bnB3/3Fze/9wc3v/dHeA/3N2f/93eX//c3Z//3Z5gv9zdn7/cHJ4/2hrdP9qbXf/bG51/3N1fP9ucHf/
+c3V8/3V3ff9qbXf/Z2p0/3d5f/9sbnX/eHl9/25wd/91d33/b3F1/3Byef9wcnr/cXR8/3R3f/91eIH/
+cHJ5/3N2f/9zdn//bnB3/3Z4f/9ucXr/bnB4/21vc/9wcnn/dXd9/3h5ff9ucHf/dXd9/25wd/92eHz/
+bG51/3Byef9zdXz/am13/3V3ff9sbnX/dnh8/29xdf9qbHP/bG95/3Bzff9ucXv/am13/3Bzff9qbXf/
+dXd9/3V3ff9ucHf/bnB3/3Byef9vcXX/bnB3/25xe/9ucHf/c3Z//3V4gf9zdn//c3Z//2xvef9qbXf/
+c3V8/2dqcf9sbnX/bnB3/3d5f/9ucHf/am13/3Byef9wcnn/bnB3/2ptd/91eIH/eXuB/2dqdP93eX//
+bW9z/2xudf9sbnX/bG95/2ptd/9qbXf/bG95/3N1fP9ucXv/aGty/3Z4fP9qbHP/Z2px/2xudf9ucXv/
+cHN9/2Zpc/9zdn//b3F1/2xvef9sb3n/Zmlz/2ptd/9nanT/bnF7/2ptd/9qbXf/bG51/3Bzff9sbnX/
+bG95/2xvef9ucXv/b3F4/21vdv9sbnf/bG51/2dqcf9wcnn/am13/2hrcv9ucHr/bW91/3BzfP9oanP/
+X2Jq/2hrdf9nanH/XWBq/2Rncf93eX//bnF6/29xev9sb3j/c3Z+/3d6g/95fIb/cHJ5/2xvef9wc33/
+eXyG/3t+h/9wc33/e32D/3t9g/91d33/cHN9/3p8gv9pbHb/e32E/3N2f/9sb3n/d3l//25wd/9vcXX/
+bG51/2xudf9vcXj/cHJ6/3R2fv9ucXv/bG95/3N1fP91d33/bnB3/3J0e/9tcHn/dniB/25xe/9ucHf/
+bnB3/3Z4fP9sbnX/cHJ5/3h5ff9sbnX/bG95/2ptd/9ucXv/am13/2xudf9qbXf/bG51/2Zpc/9wc33/
+cHN9/3N1fP9/gYf/am13/25xe/9sbnX/bnB3/3Bzff9nanT/bnF7/3Byef9wc3v/a253/2dqc/9wcnn/
+cXR9/25xeP9pbHX/Z2pz/2dqdP9laHD/bnB2/2ptd/9rbXX/bG95/2xvef9nanT/am13/3N1fP9wc33/
+d3qD/2xudf9wc33/bG51/3V3ff9nanT/amxz/2xudf9qbHP/bG95/2ptd/9qbXf/bG95/2xudf91d33/
+e32D/2Jlbv9ucXv/bG95/3N2f/9qbHP/c3V8/3Bzff9nanH/amxz/2Jlbv9nanT/Z2px/2ptd/9sb3n/
+dHeA/2lsdP9sb3j/b3F3/3Byef9wcnn/cHJ5/3Byef91d3v/b3J7/3Z4fv9ucHf/bnB3/2xvef9wc33/
+bG95/25xe/95e4H/cHJ5/2ptd/91eIH/bnB3/3d5f/9ucHf/dXd9/2xvef9ucXv/cnR7/3Bze/9xdHv/
+cHN9/2tueP9zdXz/dXd9/29xdf92eH//bXB6/21vd/9rbXf/bnB3/3V3ff94eX3/bG95/3l7gf9zdXz/
+e32D/3Bzff91eIH/eXuB/3N2f/97fof/c3Z//3t9g/9wc33/c3Z//3d5f/95fIb/d3qD/3N2f/93eoP/
+c3Z//3t9g/91eIH/c3V8/2xvef9sb3n/bG95/25wd/9wcnn/bW9z/3Byef91d33/c3Z//3V3ff9ucHf/
+bG51/25xe/9iZW7/bG51/2xvef9zdn//Zmlz/2Rncf9nanH/Z2p0/2dqdP9kZ3H/bnF7/3N1fP9nanT/
+d3l//2ptd/9nanT/bG51/3Byef9sbnX/am13/2xvef9ucXv/am13/2Zpc/9wc33/Z2p0/2BjbP9nanT/
+cHN9/2xvef9iZGr/bnF7/2xudf91d33/dnh8/3N1fP9wcnn/bG95/25xe/9ucXv/am13/2psc/9ucXv/
+am13/2psc/9qbXf/cHN9/29yfP9rbXb/bG93/2tueP9sbnX/dXd9/3Byef9tb3P/cXN6/21wef9ydHz/
+a251/2dqcv9ydHv/cHJ5/2psc/9sbnX/dnh//3Byef9sbnX/aWx1/2xvef9ucXv/dXd9/2Zpc/9gY2z/
+Z2px/3Byef9wcnn/Z2px/25xe/9sb3n/amxz/2Zobv9rbnj/Y2Zu/3Z5gv9vcnv/bG95/3d5f/9ucHf/
+bnB3/2xudf9tb3P/bnB3/3Fzev90dnz/c3Z+/25xe/9wc33/d3qD/3J0fP9ydHr/a254/3N2f/9tb3b/
+am13/2xudf92eHz/bnB3/3Byef9zdXz/bW9z/21vc/9tb3P/bnB3/3Byef9ucHf/bnB3/29xdf9nanH/
+c3V8/3N2f/9zdn//f4GH/2xudf9xc3r/ZGdx/2ptd/9sb3n/Z2px/3Byef9vcXb/b3F4/2xudf9nanT/
+cHN9/3V4gP90dnz/dHZ9/3N1fP91d33/bnB3/3N0eP9ydHr/cHJ5/3Byef9wcnn/amxz/2xudf92eHz/
+cHJ5/3V4gf9sbnX/bnF7/2xudf9wcnn/Z2px/2Rncf9maXP/Z2px/2dqcf9maG7/YmVu/2Zobv9maG7/
+am13/3N2f/9ZXGX/Zmlz/2dqdP9wcnn/ZGdx/2xvef9sb3n/amxz/2ptd/9maXP/am13/2xudf9sb3n/
+cHN9/3R2ff9oa3X/bG95/3F0ff9vcnz/dXd9/3N1fP9wcnn/dHZ8/3N2f/91d37/b3J5/2xudv9sbnX/
+cHN9/2xudf9sbnX/dXd9/2xvef9qbXf/e32D/3N1fP93eoP/bG95/3Z4fP9qbXf/c3Z//3J0e/9ucHn/
+cXN6/3R2fP9tb3P/c3V8/3Bzff9ucHf/c3V8/29yfP9ucXv/bnB3/3Byef93eX//e32D/3Byef97fYP/
+cHJ5/3t9g/9ucXv/cHN9/3V3ff9wc33/eXuB/3Byef9zdn//bG95/2ptd/9sb3n/c3V8/3N1fP9ucHf/
+bnB3/25wd/9zdXz/bG95/2ptd/9qbHP/am13/2Rncf9nanH/am13/2dqcf9nanT/am13/25xe/9wc33/
+amxz/2xudf9zdXz/amxz/25wd/9wc33/eXyG/2xvef9ucHf/cHJ5/3N1fP9ucXv/bG95/3N2f/97fYP/
+c3Z//36Biv91eIH/c3Z//3Bzff93eoP/c3Z//3l8hv93eoP/e32D/3l7gf9wc33/d3qD/25wd/9maG7/
+bG51/25wd/9sbnX/ZWZq/3N1fP9zdXz/c3Z//3V4gf9wc33/dXd9/3V3ff91d33/cHN9/3Bzff9wc33/
+dnh8/3Bzff9wc33/c3Z//3Z5gv91eIH/bXB5/3Bze/9sb3n/bG51/3V3ff9sb3n/bG51/3F0ff9tcHn/
+c3Z+/21vd/9naXP/am13/2xvef9iZW7/ZGdx/3V3ff9qbXX/Z2p0/2hrdf9xc3r/cnV8/3Z4f/9sbnX/
+amxz/2tudf91eIH/dHZ8/25wdf9ydX7/cnV+/2xvef9ucHf/cXR9/2dqdP90dn7/Zmlz/2Zpb/9sb3n/
+YmVu/2Zobv9kZ3H/Zmhu/2lsc/9sbnj/dHZ9/2xvef9sbnX/bG95/3V4gf9tcHn/cHN7/2tud/92eYH/
+b3J7/25wd/9vcXX/d3l9/3Byef9wc33/dHZ8/25wd/9sb3n/b3F1/25wd/9ucHf/bW9z/2xudf9ucHf/
+aGt1/25xev92eH7/dXeA/36Ahv9ucHf/dXiB/2Zobv9qbXf/bG95/2Zpc/9wcnn/bW90/2tueP9sbnX/
+Z2pz/2xvef9vcnv/cHJ7/3N1e/92eYH/c3Z//29yfP9zdX3/cnV9/3J1fv91eIH/d3qD/3N2f/9zdn//
+foGK/3l8hv+Bg4r/cHN9/3d6g/9zdXz/d3l//3Byef9wc33/cHN9/25xe/9ucXv/bnB3/29xdf9wcnn/
+bnF7/3l7gf9+gIb/Z2p0/3N2f/9wcnn/d3l//21vc/92eHz/dXd9/25wd/9ucXv/Z2p0/2xvef9ucHf/
+bnF7/3V4gf94e4X/bnB3/3Fze/90d4D/cHN8/3V3ff9wc33/bnF7/3N1fP9ydHr/cnR6/21wd/9sb3n/
+bnF7/3d6g/9ucXv/cHJ5/3N2f/9ucHf/amxz/3V3ff9vcXX/dXd9/2xvef9zdn//bXB6/3V3fv9ydX7/
+cHN9/3N2f/90dnz/bnB3/3N2f/9wc33/bG95/3Fze/9ucXv/bXB6/2xveP9ucXv/dHeA/3p8gv9ucHf/
+dHd9/2xudf92eHz/cHJ5/3Byef9zdXz/bG95/3N1fP9sbnX/bnF7/2dqdP9nanT/bG51/2xvef9sb3n/
+amxz/2xudf9sbnX/dXd9/3N1fP9ucHf/bW9z/2xvef9maXP/am13/2xvef9sbnX/c3V8/3N1fP9zdXz/
+c3V8/29xdf9vcXX/cHN9/2ptd/9wcnn/c3V8/3d6g/9sbnX/bnB3/29xdf9vcXX/bG51/2psc/9ucXv/
+cHN9/2ptd/93eX//am13/2psc/9qbXf/bnF7/2xudf9ucXv/am13/3Bzff9ucXv/ZGdx/25xe/9nanH/
+YGNs/2Rncf9qbXf/bG51/2RmbP9ucXv/bnF7/3Bzff91eIH/c3Z+/3R2fP9zdXz/c3V8/3Fzef9ucHf/
+cHJ5/3Z4fP9wcnn/bnB4/29xeP9ydHz/cnR7/2xudv9wc3r/dXiB/3N1fP91d33/bnF7/29xdf91d33/
+bnF6/3F0fv9zdXz/aGt1/25xe/9ucXv/am13/25wd/95fIX/cnR6/2xvef9rbnj/cnV8/3V3ff93eX//
+bnB3/21vdv9wcnb/d3l9/3d5gP9tcHX/cnR7/3N1fP9sb3n/bG94/3R2ff9qbHP/eHl+/25xe/9tb3P/
+dnh8/2Zpc/9qbXf/bG51/21vc/9sbnX/cHJ5/3V3ff9ucHf/bW9z/25wd/97fYP/cXN6/3FzfP9rbnf/
+dHeA/25xev9qbXb/bG92/3N2f/9tb3b/cnR7/21wev9sb3n/bG95/21wdf9tb3b/bnB4/2xudf9rbXP/
+bnB3/2lsdf9sbnj/dXd+/3J0e/97fYL/bG90/3ByeP9gY2z/bG51/2xudf9kZ3H/bG95/2xudv9sb3j/
+bG95/2ptdv9wcnn/dHZ9/25weP9ucHj/bnB5/3N1fP9tb3b/cXN7/29ye/9ucHf/bG95/2ptd/9maXP/
+bG95/3V3ff9wc33/dXiB/21vc/9ucXv/bG51/3N1fP9tb3P/bG51/3Bzff9qbXf/am13/25xe/9qbXf/
+bG51/2xudf9wcnn/d3l//2Rncf9sb3n/bnF7/3V3ff9sbnX/dnh8/3V3ff9ucHf/bG51/2psc/9sb3n/
+b3F1/25wd/9wc33/dnmC/2tud/9sb3j/bXB6/2hrdf9xc3r/a254/21wef9vcnz/cnR9/3R2fP9vcnz/
+bnB3/25xe/91d33/b3F1/29xdf9zdXz/ZWhx/2Zpcv9wcnr/bW92/3d5gP9rbnj/cXR+/21wd/90dn3/
+c3Z9/3J1ff91eIH/enyC/3Byef9zdn//c3V8/2xvef9vcnv/cnR7/21wev9sb3j/bnB3/3BzfP92eH7/
+bXB6/3R2fP9rbXT/eHl9/25weP9ucHf/cnR7/3Fzev92eH3/bG94/3N1fP9ucXv/bG51/25wdf9vcXj/
+b3F4/21vdP9sbnb/bW92/3R3gP9ucXv/bG52/2xudf9wcnn/Z2p0/2xudf9tb3P/bG51/3Bzff9zdXz/
+dXh8/3Z5f/9ucHf/a254/25xe/9qbXf/b3J8/29yfP94eoD/bG95/25wd/9ucXv/bnF7/2ptd/9oa3T/
+c3Z//3V4gf9wcnn/eXuB/25xe/9sb3n/bnB3/3V4gf9ucXv/d3l//25wd/92eHz/c3V8/2ptdP9zdXz/
+am13/2Zobv9sbnX/bnB3/2ptd/9gY2z/cHN9/25xe/9vcnz/cHJ8/3J1fv9ydX7/cHN8/3Byef91d33/
+b3F4/25weP90d37/cHJ5/3Byev9xc3v/c3V8/3J0e/9wc3v/cHN8/3N2f/9wcnn/d3qD/3N2f/9ucHf/
+d3l//25xe/91d4D/dHeA/2ptd/9wc33/cHN9/25xe/9wcnn/en2G/3N2fv9vcnz/b3J6/29yfP92eH7/
+dnh//3BzfP9ydHv/cnR5/3p8gv94e4T/cHJ4/3J1fv9ucXv/cHN8/3Bze/92eH7/am13/3h6gP9ucXv/
+c3V8/3l7gf9sb3n/bnB3/3Byef9ucHf/b3F1/3Byef91d33/cHJ5/29xdf9ucHf/eXyG/25xe/9vcnv/
+am13/3J0ev9vcXr/aGt1/2tudv9ydHz/a252/21vdv9tb3f/bW92/2xudf9rbXT/bG51/25xef9rbXT/
+aWx2/2xvef9qbXf/amx0/3F0ev9tb3b/cnR6/2hrcf9sbnf/am13/3Byef9wc33/bG95/3Bzff9tb3X/
+a252/2dqc/9fYWv/ZGZt/2xveP9qbXb/bG95/3F0e/91d3//b3F3/3J1ff9zdXz/bG95/3N1fP9wcnn/
+bG51/3N1fP91d33/bnF7/3N1fP9qbHP/bnF7/2ptd/9zdXz/bG51/2xudf91d33/bnB3/3Byef9wcnn/
+bG95/25wd/9ucHf/dnh8/4CChv9ucHf/dXd9/3N1fP93eX//bnB3/3Z4fP92eHz/bnB3/2xudf9sbnX/
+bG51/2xudf9qbXf/bG95/3V4gP9nanT/bW95/3F0ff9vcnn/dXd9/3N1e/90dnz/c3V7/21vdv9sb3j/
+Zmlz/2FkbP9maXP/ZGdx/2Zobv9iZW7/am13/2lsdv9rbnb/dHZ7/3Byef9zdXv/bG51/2xvef9qbXf/
+bnF5/21wev9rbnf/b3J8/2xvef9nanH/bnF7/2xvef9oa3T/a253/25xef9tb3j/bG51/21vdv9tb3f/
+cHN6/2lsdv9qbXf/ZGdw/3N1fP9nanT/Zmlz/2ptdv9ucHf/b3J8/21vdv9vcnz/bXB6/2hrdf9tb3f/
+bG95/29yfP9qbHP/aGtz/2ttdP9zdX7/bnB5/21vdv9sbnX/b3J8/2hrdf9sbnX/bnB3/21vdv9xc3r/
+dHZ8/3V3fv91d37/bnB3/2ptd/9vcnv/am13/25wd/90dnz/dXd+/2xudf9tb3b/a254/29xeP9nanL/
+aWt1/2ptd/9sb3n/amx0/25xe/9qbHP/Y2Zv/2hrdf9ucXv/bG94/29yfP9nanH/b3F4/2tueP9oa3X/
+cnR7/2ptd/9jZm//Zmlz/2ptd/9qbXf/YGNs/25xe/9qbXf/bW94/25xe/9ydX//cnV//3N2gP91eIL/
+dXd//29xeP9xc3v/dHd//29ye/9tcHn/cnR6/21wev9ucHn/a253/21wev9rbnj/amxz/3V3ff9wcnn/
+bG51/3V3ff9qbXf/b3J8/3J1fv9maXP/bnB3/21vc/9qbXf/Z2p0/3R2ff9sbnX/bW91/3Fzev9rbnj/
+dHZ9/3F0ff9vcnz/dXd9/3F0fP90d3//dXiB/21vdv90d3//b3J7/3R3f/9wcnv/cXR9/2dqdP94eX3/
+cHJ5/29xdf94eX3/amxz/21vc/9tb3P/am13/2xudf9ucHf/dXd9/2xvef9sbnX/am13/3d6g/9nanT/
+a253/2VocP9rbnT/bG93/2RncP9laHD/bG93/2hqcP9pbHP/ZGdx/2hqcP9maXP/amx0/2lsc/9rbnf/
+a210/2ttdP9tcHr/bXB5/2hqc/9ucXn/bW95/3Fzef9rbXT/cHJ5/2xvef9wcnn/cHN9/2xvef9ucXv/
+bnF6/3Byd/9ucHf/bnB3/3Byef94eX3/c3V8/3Byev9ydHv/dXd9/3Byd/9ydXr/dHZ9/2xudv9wcnn/
+bG51/2psc/9zdXz/eHl9/3V3ff91eIH/bnB3/3Byef9wcnn/dnh8/2xvef9wc33/d3qD/3N2f/9zdn//
+c3V8/25wd/9ucHf/c3V8/3h5ff9/gYf/bnB3/3Z4fP9wcnn/d3l//25wd/93eoP/eXuB/25wd/9wcnn/
+bG51/25wd/9qbHP/am13/2ptd/94e4X/Z2pz/25xef9ydHv/a254/3Bzff9rbnj/dHd+/3J0ff9tb3f/
+cnR8/21vd/9qbHP/cHN9/3Bzff9sbnX/Zmlz/3Bzff9nanT/am13/21vef9tcHr/bXB6/2ptdf9tb3f/
+b3F5/3Byev9sb3n/cXN6/3J0fP91d33/bG51/3N1fP9wc33/bG51/25wd/9xdHv/cnR6/25wd/9wcnr/
+a252/29xef9sb3n/bnB5/2ttdv91eH//a253/2ptd/9rbnb/b3F4/29yfP9wcnn/bnB5/21vdv9rbnX/
+cnR6/29xev9ydXz/b3F4/21vdv9ydHv/c3V9/2ptd/9vcXj/bW92/25wd/9tb3b/bW92/25wd/9xc3r/
+cHN6/3R2fP93eX7/dXd//3Bzff9tcHr/dHZ8/25wd/9vcXj/b3F6/3R1fP9xc3r/cnR6/3Bzff9wc3z/
+aWx0/2xvdv9tb3X/cHJ6/25wdv93eH3/b3F3/2ttdP9tb3f/c3V7/3R3fP90d37/b3F4/3Z3ff91d33/
+cXN6/3Z4f/9xdH3/bXB6/3Byev9vcnz/cXR+/2hrdf9ydX//cXR9/2lsdv9sb3n/cXN8/25wd/9sb3j/
+bnB6/21wef9nanT/am12/3N1fP9vcXn/c3V7/3N1ev9qbXf/a210/21vdv9vcXj/bnB3/29xdf9zdXz/
+cHJ5/25wd/9wcnn/bG51/3N2f/90d4D/am13/21vc/9ucHf/b3F1/2xvef93eX//b3F4/2xudf9wc33/
+bG94/3R2ff9xc3r/bW92/3V3fP90d33/dHZ9/3Z4fv9wcnb/b3F4/3Fzev9xc3r/c3V8/3N2f/9oa3H/
+eHl9/3Byef9sb3n/d3qD/25xe/9wcnn/bnB3/25wd/9wcnn/cHN9/3d6g/9zdn//cHN9/3N2f/9/gYf/
+cHN9/3N2f/9qbXf/cHJ2/3R2ff9ucHf/cHJ5/3N2f/9ucXv/b3F4/21wev9sb3n/bG95/29xeP9vcnb/
+cHJ5/2xudv9tb3P/dXd7/3R2fP9sbnX/cXR9/25xe/9tcHr/b3F1/25wd/9nanT/Z2p0/2ptd/9qbXf/
+bnB3/3Byef9vcXj/bG51/29xdf9ucHf/dXd9/3Byef9wcnn/cHJ5/3N1fP9ydHr/c3V6/3J0fP9tb3T/
+c3V8/21vc/9sbnX/c3Z//3d6g/91eIH/eXuB/25xe/9zdn//dXiB/3t9g/9wcnn/dXiB/3l7gf93eoP/
+d3qD/3d6g/9wc33/cHN9/25xe/91eIH/gYOK/2xvef91d33/cHN9/3l7gf9ucXv/e36H/3l7gf9zdXz/
+c3Z//2xvef91eIH/cHJ5/3d6g/91eIH/foCG/25xeP9zdn//dnh//25wd/9xc3n/a253/3Z4fv9zdXz/
+b3F4/3Z5gf91eIH/c3V+/3t9g/95e4H/c3Z//3N1fP93eoP/bnB3/3F0ff9wcnn/cnV+/3d6gv9ydX7/
+cHN9/3d5f/95fIL/dXiB/3h6gP95e4H/foCG/3V3ff97fYP/e32D/3N2f/92eYL/eHqA/3d5gP9ydX7/
+dHeA/2ttd/9ucXr/cHJ8/3Fzev9xc3v/eXuC/3J0e/9ucHj/b3F5/3R2fP9xc3r/dHZ8/21veP9sbnX/
+aGt1/3N2f/9sb3n/cXN7/2lsdv9qbXT/cnR7/25xe/9rbnj/b3J7/2xueP9tb3f/bXB6/29xev9tcHj/
+cXN6/3J0e/9zdXz/dHZ9/3BzfP9xc3r/aGt0/21wef9qbHT/a210/2hrdf9sbnf/bG52/25xev9tcHr/
+bW94/2hqc/9ucHf/aGty/2hrdf9pbHP/b3F6/2psdf9oanP/am13/25xe/9sb3f/bW94/2dqdP9ucXn/
+bXB3/3FzeP9vcnj/bnF7/2hrdf9sbnX/bnB4/3F0e/9laG//bnB4/2xvef9sbnX/bG51/3N1fP9sbnX/
+bG95/25xe/9wcnn/bW9z/2xudf9zdXz/bnF7/25xe/9wcnn/a253/2tud/9tb3P/c3V8/29xdf9sbnX/
+bG95/3Bzff9sbnX/bnB3/2psc/9zdn//eXuB/25wd/9ucHf/cHN9/25xe/9ucHf/eXuB/2xvef9qbXf/
+c3Z//25xe/91d33/cHN9/2xvef92eHz/c3Z//3Byef91d33/b3F1/3Byef91d33/cHJ5/25xe/9ucXv/
+Zmhu/3N1fP9qbXf/bG51/3V3ff9nanT/Z2p0/2psc/9qbHP/amxz/3Bzff93eX//am13/25wd/9qbXf/
+eXuB/2ptd/9wc33/am13/2xudf9ucXv/Z2p0/2dqcf9qbXf/amxz/2psc/9iZW7/bG51/2dqdP9sbnX/
+bG51/25xe/9qbXf/am13/3Bzff9zdXz/Zmlz/2xvef9ucXv/amxz/2xudf9sbnX/ZGdx/2Rncf9kZ3H/
+YmVu/2Zpc/9oanP/bG53/2ptd/9vcXj/c3Z//3N2f/9wc33/bnF7/25xe/9zdn//b3J7/3Fze/9tcHr/
+bW91/3Bzff9tb3P/amxz/3V3ff91d33/dXd9/3h5ff9ucHf/b3F1/25wd/92eHz/bnB3/3N2f/92eHz/
+dXd9/3Byef9zdXz/bnB3/25wd/9ucHf/dXd9/3+CjP9wcnn/c3Z//25xe/93eX//bG95/3t9g/94eX3/
+bnB3/3Bzff9qbXf/c3Z//2xvef9wc33/cHJ5/3t+h/9ucHf/cHN7/3R3gP9ucHf/dXiB/25xe/95fIb/
+cnV+/29ye/91eIH/cHN9/25wd/9zdn//c3Z//25wd/9sbnX/cHJ5/2xvef9ucHf/bG51/3Byef91d33/
+bnB3/29xdf9zdXz/c3V8/2xvef91d33/cHN9/3Bzff9qbXf/cHJ5/3N1fP9ucHf/cHJ5/3Byef9zdn//
+c3Z//3N2f/9qbXf/bXB5/3N2f/9wc33/cnV+/3d6g/90d4D/c3V8/3N2f/96fIL/enyC/31/hf90d4D/
+cnV+/29yfP95fIX/dHeA/3h6gP9ydX7/cnV+/3Z4fv9tcHn/am13/3R2fP9ucHf/b3F1/3J1fv9zdX7/
+bG95/3J1fv90dnz/d3l9/3h5ff9xc3r/dHZ9/2xudf9wcnr/bnB3/21wev9rbnj/b3F5/3Bzev9zdX7/
+dnmC/3J1f/9sb3n/dnh+/3Byev91eIH/b3J8/3R3f/9ucXv/b3F5/3F0fv91eIH/cXN5/3J1fv9wcnr/
+cXR9/3J0e/90d4D/cXN7/3V3ff9wc3v/cHJ5/3N1ff92eH//am11/3N1ff9ydHz/bG51/2xudf91d33/
+bnB3/3Byef9ucXv/c3Z//25wd/9sb3n/dnh8/25xe/9wcnn/c3V8/2xudf9nanT/bW9z/3Byef9vcXX/
+b3F1/3Bzff91d33/bnB3/25xe/9qbXf/c3Z//3h5ff9sbnX/bG51/2ptd/9sb3n/am13/3N1fP9sbnX/
+Zmlz/2xvef9qbXf/bG95/2dqdP9kZ3H/bnB3/2ptd/9maXP/Z2p0/2Rncf9maXP/Z2p0/2Zpc/9nanT/
+ZGdx/1xfaP9kZ3H/ZGdx/2Rncf9ucHf/YmVu/2Jlbv9maG7/ZGdx/2psc/9nanT/bnB3/2Zobv9kZ3H/
+Z2px/3d6g/9nanT/cHN9/2psc/9qbXf/dXd9/2xudf9nanH/bG95/2xudf9tb3P/Z2px/25wd/9ucHf/
+bG95/25wd/9zdn//c3V8/3Bzff93eoP/eXuB/25xe/93eoP/d3qD/3Byef9wc33/cHN9/2xudf9vcXX/
+c3V8/21vc/9sbnX/cHJ5/29xeP9tb3b/cHJ5/3V4gf91eIH/c3Z//3N2f/9ucXv/d3l//3Bye/90dnz/
+cXN9/2xvef9zdn//bnF7/25wd/93eX//eXuB/3d5f/93eX//bG95/3Byef9vcXX/dnh8/25wd/9zdXz/
+dnh8/3V3ff9zdXz/cHJ5/29xdf9sbnX/cHN9/3V3ff+Agob/bW9z/25xe/9sbnX/dXd9/21vc/93eX//
+dnh8/21vc/9sbnX/Z2px/3Bzff9sb3n/cHJ5/25wd/93eX//bW92/29yfP9xc3v/aGt1/2xvef9kZ3H/
+dXd9/2xvef9pbHP/cXR7/25xe/9ucHf/cHN9/3Z4fP9sbnX/amxz/25wd/9ucHf/bG51/2psc/9ucHf/
+c3V8/2xudf9qbXf/c3V8/3V3ff9sb3n/c3V8/3Bzff91d33/bG51/3V3ff9zdXz/b3F1/3N1fP9ucHf/
+c3V8/3N1fP9zdXz/Zmlz/2ptd/9ucHf/bG95/3Bzff93eX//bnF7/29xdf9sbnX/c3V8/3V3ff91d33/
+bnB3/25wd/9ucHf/dXd9/25wd/92eHz/bnB3/2xvef91d33/bW9z/2xudf92eHz/bG51/2xvef9ucXv/
+am13/2ptd/9ucXv/c3V8/3V3ff94eX3/c3V8/3d5f/9vcXX/cHJ5/25wd/9sb3n/am13/2ptd/9wcnn/
+cHN9/3J1fv9wc33/am13/3R2fP9vcXX/cHJ5/2xudf9ydHz/bnB3/2xvef9vcnz/dnmC/25xe/9zdn//
+bnF6/3N2fv9qbXf/dnh8/21vdv90dnz/b3F4/2tueP9ucXr/cHN9/2Vocv9tcHr/cnR8/2Jlbv9nanH/
+bnF7/2ptd/9qbXf/amxz/2Zpc/9maG7/Zmhu/2dqdP9maG7/Z2p0/2xvef9maXP/ZGdx/2Rncf9qbXf/
+Z2p0/2dqdP9ucXv/cHN9/2ptd/9sb3n/Z2p0/3Bzff92eHz/bG51/29xdf9ucHf/bnB3/3Byef97fYP/
+c3Z//25xe/91eIH/c3Z//3V4gf9zdn//bG95/3N2f/9wc33/bnF7/3N1fP9tb3P/bnB3/25wd/9sb3n/
+bnF7/2xvef9nanT/bnF7/2xvef9sbnX/dXd9/2Rncf9maG7/ZGdx/2Rncf9maG7/am13/25wd/9nanH/
+Z2p0/2ptd/95e4H/bG95/3N1fP9sbnX/amxz/3V3ff9sbnX/bG51/3Bzff9ucHf/bnB3/2ptd/9ucHf/
+b3F1/29xdf9ucHf/c3V8/25wd/9tb3P/dXd9/3N1fP9nanT/dXd9/3N1fP9qbXf/am13/2psc/9nanT/
+amxz/3Byef9nanH/Zmhv/2tueP9nanT/ZWhy/2ttdf9qbXf/am13/2ptd/9nanT/Z2px/3Bzff9sb3j/
+b3J8/2xvef9sbnX/c3V8/2ptd/9nanT/bnF7/3N1fP91d33/dXd9/2xudf9ucXv/bG51/2xvef9qbXf/
+bnF7/25xe/91d33/dnh8/3Byef9sbnX/bW9z/3N1fP93eX//gIKG/21vc/9sb3n/bG95/3h5ff9sbnX/
+d3qD/3V3ff9qbXf/am13/2Zpc/9zdXz/cHJ5/3N2f/9wc33/en2G/21vd/9vcnz/cnV8/2hqdP9nanT/
+ZGdx/3Byef9ucXv/aWxz/3F0fv9vcnz/bG95/3Bzff9zdn//bW9z/2xudf9zdXz/cHJ5/25wd/9qbXf/
+cHN9/3l7gf9ucHf/bnB3/3l7gf97fof/c3Z//3t+h/97fYP/e32D/3N2f/95e4H/eXyG/3N2f/95fIb/
+eXuB/36Ahv97fYP/foCG/3V3ff91d33/cHN9/3Bzff91eIH/eXyG/25xe/9qbXf/bnB3/3N2f/93eX//
+dXiB/2ptd/9sb3n/bG95/3l7gf9wc33/eXuB/3Bzff9ucXv/dXd9/29xdf9sbnX/dnh8/2xudf9wcnn/
+cHN9/25xe/9wc33/c3Z//3V3ff91eIH/eXuB/3V4gf93eX//bnB3/25xe/9ucHf/bnB3/2xudf9nanH/
+bG51/3N1fP9wc33/c3V8/2psc/9zdXz/bG51/2xudf9qbXf/cHN9/3Byef9nanT/bG95/3l7gf9sbnX/
+bW9z/2xudf9sb3n/Zmlz/3Bzff9qbHP/cHN9/2ptd/9sb3n/bnF7/3Bzff9kZ3H/bG95/2xvef9nanT/
+bnF7/3N2f/9wcnn/bnF7/3Bzff9ucXv/cHJ5/3Byef91eIH/cHJ5/3N2f/91d33/cHN9/2xvef9sb3n/
+dXiB/3Byef9wcnn/c3Z//3Bzff9ucHf/bG51/2xudf91d33/c3V8/2psc/9qbHP/am13/2xudf9nanH/
+c3V8/2psc/9maXP/bG95/2xudf9wc33/cHJ5/2xudf9wcnn/c3V8/2xudf9wc33/amxz/2xvef9sb3n/
+bG51/3N1fP9wcnn/Z2p0/3Bzff9zdXz/bnB3/3d5f/9qbXf/bnB3/25wd/9sbnX/bG51/3V3ff94eX3/
+b3F1/25wd/9zdXz/f4GH/2xvef9zdXz/bG95/2xudf92eHz/am13/2ptd/9ucXv/bG95/2psc/9maXP/
+bG51/2dqcf9kZ3H/Zmlz/2xvef9maXP/Z2p0/25xe/9zdXz/Z2p0/3N1fP9ucXv/am13/2ptd/9vcXX/
+b3F1/2xudf9zdXz/bG51/2tud/9ydHv/bXB6/29ye/9wc3z/d3qD/3l8hv95fIb/d3qD/3Bzff97fYP/
+dHeA/3h7gv95e4H/dHZ9/3t9g/91eIH/c3V8/3d6g/97fYP/foCG/36Biv9zdn//e32D/3V4gf93eoP/
+cHN9/3V4gf9zdn//dXiB/3N2f/9wc33/bnB3/25wd/9zdXz/dnh8/4CChv9sb3n/bnB3/25wd/92eHz/
+am13/3N2f/9zdXz/amxz/2ptd/9gY2z/bnF7/2dqdP9ucXv/cHN9/3V4gf9rbXX/bnF7/3R3gP9ydHv/
+c3Z//2ptd/93eX//cnV+/25weP9ydHz/bXB5/2dqcv9sb3n/bnF7/2psc/9maXP/bG95/2xvef9sb3n/
+am13/25wd/91d33/bG95/2xvef91eIH/d3qD/3Bzff93eX//dXiB/3Bzff9ucHf/c3V8/3N1fP9sbnX/
+bG95/2xvef9wc33/cHN9/3N1fP9qbHP/bW9z/2xudf9sbnX/c3V8/3d5f/9ucHf/am13/2xvef9zdn//
+eXuB/3d6g/9ucXv/bnF7/3Byef95fIb/c3Z//3l8hv9wc33/dXiB/3l8hv91eIH/dXd9/3t+h/9ucXv/
+dXiB/3V4gf9wc33/bnF7/3N1fP91d33/d3qD/3d5f/9wcnn/dXd9/2dqdP9nanT/amxz/2Zpc/9iZW7/
+YmVu/2xudf9qbXf/cHN9/25xe/9nanT/cHN9/2ptd/9sbnX/am13/3N1fP9ucHf/Z2p0/25xe/93eoP/
+bG51/2ptd/9qbXf/bG95/2ptd/91d33/Z2p0/3Bzff9sb3n/cHJ5/3Byef91d33/Zmhu/3V3ff9zdXz/
+am13/25xe/9zdn//dXiB/3Bzff9ucHf/cHN9/25xe/9sb3n/dXd9/25wd/9wcnn/dnh8/3Byef9ucHf/
+bG95/3d5f/9wc33/cHJ5/25xe/91eIH/bnF7/3N1fP9sb3n/eXuB/3l7gf9wc33/dXd9/3l7gf93eX//
+dXiB/36Ahv9zdXz/bnF7/3N2f/9wc33/eXyG/3l8hv92eHz/eXuB/35/g/95e4H/fX6B/3Bzff91eIH/
+dXiB/3Bzff93eoP/c3Z//25wd/93eoP/d3qD/3Bzff95e4H/am13/2xvef9ucHf/bG95/2xvef9zdn//
+dXd9/2xvef9ucHf/c3V8/3+Bh/9sbnX/dXd9/2xudf9qbXf/eHl9/25wd/9sb3n/dXiB/3V4gf9zdXz/
+bnB3/2xvef9ucHf/cHJ5/25wd/9zdn//c3Z//3N1fP9+gIb/e36H/3V3ff9+f4P/fX6B/3Z4fP91eIH/
+c3Z//2xudf9sbnX/cHN9/2xvef9rbnj/dHZ8/3R2fP9ydHr/enyC/36Ahv97fYP/eXuB/3V4gf9wc33/
+enyD/3N2fv90dn7/cXN6/21vdv91d33/bG51/2dqdP9wcnn/cHN9/3Z4fP93eX//bnB3/3N2f/9sb3n/
+c3V8/2xvef9ucXv/bnB3/3N2f/9zdn//cHN9/25wd/9ucHf/c3Z//3l7gf+Bg4r/bnB3/25xe/9wc33/
+eXuB/3Bzff93eoP/d3qD/3Byef9zdn//Zmlz/3V3ff9wc33/dXd9/3N2f/95fIX/bG51/29xeP90d37/
+am13/3Bzff9sb3n/eHl9/3N1e/9rbnf/cXN7/25xe/9sb3n/dXiB/3V4gf9ucXv/bG95/3N2f/9ucXv/
+c3V8/2ptd/9sb3n/dXd9/25wd/9ucXv/dXiB/3l8hv9wc33/dXd9/3Bzff9zdXz/bnB3/3V3ff9wcnn/
+bG51/25wd/9ucHf/cHN9/3Bzff91d33/bW9z/2xudf9nanT/am13/25xe/9ucHf/Z2p0/2Rncf9qbHP/
+ZGdx/2dqdP9maG7/YmVu/2dqcf9maXP/cHJ5/2dqcf9sb3n/Z2px/2psc/9sb3n/amxz/2dqdP9zdXz/
+Z2p0/25xe/9zdXz/bG95/2xudf9ucHf/c3V8/3V3ff93eX//c3V8/3Z4fP9ucHf/cHJ5/3Byef9vcXX/
+am13/25wd/9ucHf/cHJ5/3Z4fP9wcnn/bG51/3N1fP9ucHf/bnB3/25wd/9zdn//bnF7/2psc/9ucXv/
+eXuB/29xdf9ucXv/bnB3/2xvef9qbXf/d3l//2xvef9zdn//dXiB/3Bzff9sb3n/cHN9/2Zpc/9zdn//
+dXiB/2ptd/9wc33/dXiB/3N2f/9zdn//cHN9/3V4gf9zdn//c3Z//3t9g/95e4H/e32D/3t9g/95e4H/
+c3V8/3N1fP95e4H/cHJ5/2xvef9ucHf/cHN9/25wd/9sb3n/amxz/3N2f/9zdn//b3F1/25wd/9wcnn/
+bG95/25wd/9wc33/bG51/2psc/9ucXv/am13/3Bzff9ucXv/bG51/25wd/9zdXz/bnF7/3d6g/9zdXz/
+c3Z//3V4gf91eIH/e32D/3V4gf9zdXz/e32D/3d6g/9wc33/e36H/3Z4fP91eIH/dXd9/3V4gf9zdXz/
+eXuB/3t+h/9wc33/cHN9/3N2f/+Bg4r/bnB3/3V3ff9ucHf/bG51/3h5ff9vcXX/bG95/3V3ff91d33/
+bG51/2xudf9sbnX/Z2p0/2psc/9maXP/bG95/2dqcf9maXP/cHN9/3d5f/9nanT/cHN9/3N1fP9qbXf/
+bG51/2xudf9zdXz/c3V8/3l7gf9zdn//cHJ5/3Z4f/9wc3r/aGt1/2ptd/9wc33/amxz/2ptd/9qbXf/
+am13/3N1fP9rbnX/cHN8/3Fzev9wcnn/dXd9/3Byef9ucHf/c3V8/3Bzff9zdXz/dXd9/2xvef9zdXz/
+bnB3/3N1fP9ucHf/cHJ5/25wd/9zdn//dXiB/3N2f/9sb3n/bnF7/3N2f/91eIH/g4WM/3V3ff91d33/
+e32D/3+Bh/97fYP/f4GH/4WHjf97fYP/eXyG/3N2f/9+gYr/foCG/36Ahv99foH/gIKJ/3N1ev9zdX3/
+dXd+/2lrdf9ucXv/am13/3N1fP91d33/a254/3N1fP9xc3n/amxz/3Bzff9wc33/amxz/2Rncf9qbXf/
+bG51/2ptd/9qbHP/bnB3/3V3ff9sbnX/amxz/3V3ff93eX//cHJ5/3V3ff9ucXv/cHN9/2xudf9qbXf/
+bG95/2dqdP9sb3n/bG51/25xe/9wc33/cHN9/2dqdP9qbHP/am13/25wd/91d33/dXd9/3N1fP9ucHf/
+bG95/3Bzff9zdn//bnF7/2xvef9sb3n/bG95/3d5f/9sb3n/dXd9/25xe/9wc33/c3Z//29xdf9ucHf/
+dnh8/2psc/91d33/dXd9/25wd/9qbXf/bnB3/2xvef9wc33/bnF7/2dqdP9qbXf/Zmhu/2ptd/9sb3n/
+bG51/2dqdP9qbXf/bW9z/25wd/92eHz/cHJ5/2Zpc/9wc33/bG95/2xudf9nanT/bnF7/25wd/9qbHP/
+bnB3/3d5f/9tb3P/cHJ5/25wd/9ucHf/am13/3V3ff9qbXf/cHN9/3Bzff9ucHf/bnB3/3Bzff9maXP/
+c3Z//3N1fP9sbnX/cHJ5/3N2f/9wcnn/bnB3/25wd/9wcnn/cHJ5/3Byef91d33/bnB3/25wd/92eHz/
+c3V8/2xudf9qbXf/cHN9/2xudf9sbnX/bnB3/3Byef9qbXf/Z2p0/2Zpc/9ucXv/am13/2Zpc/9maXP/
+Zmlz/2Jlbv9nanH/Z2p0/2Rncf9maXP/bG95/2psc/9ucXv/bG95/2Rncf9qbXf/bG95/2ptd/9wc33/
+bW9z/2ptd/9ucXv/am13/25xe/9sb3n/bG51/3V3ff9sb3n/bG95/3N1fP9nanT/bG95/2ptd/9ucHf/
+bnB3/3Byef91d33/bW9z/21vc/9wcnn/f4GH/21vc/9wc33/am13/25wd/91d33/bG95/2xudf9zdXz/
+bnF7/2ptd/9tb3P/bnB3/2xvef9sb3n/bnB3/3d5f/9wcnn/bnB3/3h5ff93eX//bG51/3V3ff93eX//
+bnB3/25wd/9ucHf/bnF7/3Bzff93eoP/eXyG/3N2f/97fYP/cnV//21wev9wc33/c3Z//2xvef9ucXv/
+bnB3/25wd/91d33/cHJ3/3V4gP91eIH/c3Z//3d6g/9zdn//bG95/3N2f/9zdn//dXiB/3d6g/9wc33/
+cHN9/3Bzff9ucXv/bnF7/3Bzff9wc33/dXiB/3N2f/9zdn//bnB3/21vc/9zdXz/dXd9/35/g/9ucHf/
+bG95/3V4gf93eX//bnF7/3d5f/93eoP/c3Z//25xe/9qbHP/cHN9/3Byef91d33/c3V8/3l7gf9sbnb/
+cXR8/3V4gv9wcnz/eXyG/3V3ff99foH/fH6F/3J1f/92eID/cXN6/2hrdf9wc33/dXd9/21vc/9nanH/
+cHJ5/3l7gf93eX//dXd9/3V4gf95e4H/c3V8/25xe/91eIH/eXyG/3N2f/95fIb/c3Z//3d6g/9wc33/
+cHN9/25xe/9sb3n/bG95/2xvef9zdn//c3Z//3d5f/9vcXX/bnB3/25wd/9wcnn/dXd9/3N1fP9ucXv/
+b3F1/2xvef9wc33/d3l//3N2f/9wcnn/cHJ5/2xvef91d33/bnF7/3d5f/9wcnn/d3qD/3d6g/9zdn//
+c3Z//35/g/91d33/fX6B/31+gf91eIH/dXiB/3l7gf9+gIb/f4GH/36Ahv97fYP/fX6B/3d5f/95e4H/
+foCG/3d5f/93eX//dnh8/3N2f/91eIH/foCG/3t9g/9ucXv/d3qD/3N2f/9zdn//cHJ5/3V4gf9zdn//
+cHN9/3V4gf95fIb/cHN9/25xe/9sb3n/bnF7/2ptd/92eHz/Z2p0/3Byef9ucXv/bG95/2xudf9zdXz/
+amxz/3V3ff9zdXz/am13/25xe/91eIH/c3Z//25xe/9ucXv/cHJ5/25xe/9ucXv/dXd9/2xvef9sb3n/
+c3V8/25wd/9sbnX/bG51/3Bzff9sbnX/bnB3/2psc/9wcnn/bW9z/2ptd/9nanT/cHN9/25xe/9nanT/
+ZGdx/2ptd/9kZ3H/amxz/2ptd/9sbnX/am13/2xvef9sbnX/cHJ5/3N1fP9qbHP/bG51/25wd/9ucHf/
+dXd9/2xudf9sb3n/cHN9/2ptd/9wc33/bG95/2xudf9wc33/bnB3/3Byef91d33/bG51/3N1fP9ucHf/
+bnB3/2xudf9zdXz/d3l//2psc/9qbXf/cHJ5/3+Bh/9sbnX/bnF7/2ptd/9vcXX/dnh8/3Byef9vcXX/
+dnh8/3N1fP9ucHf/b3F1/2xudf9tb3P/bG51/2xudf9wc33/bG51/21vc/94eX3/d3l//21vc/9zdXz/
+c3V8/2ptd/9sbnX/bG51/25wd/9wcnn/d3l//3N2f/9ucHf/c3V7/3N1fP9vcXj/bG95/3N2f/9ucXv/
+c3Z//2xvef9ucXv/c3Z//21wev92eYD/eHqB/3V3gP97fof/c3Z//3N2f/97fYP/eXuB/3d6g/97fYP/
+cHN9/3V4gf95e4H/cHN9/3V4gf91eIH/c3V8/3d6g/95e4H/dXiB/25wd/9wcnn/cHN9/3Bzff97fYP/
+b3F1/25wd/93eX//c3Z//25xe/93eX//dXiB/25xe/9ucXv/am13/3Bzff9ucXv/dXiB/3Bzff94e4X/
+b3F4/25xev91d33/aGt0/2xvef9sbnX/c3V8/3N1fP9tcHr/dXd9/3J0ff9wcnn/d3l//3V3ff9sb3n/
+am13/3Bzff9ucHf/bnF7/2xvef9ucXv/d3l//3Byef9sb3n/c3Z//3l8hv9wc33/eXyG/2xvef9wc33/
+bG95/3Bzff9ucXv/bG51/2xvef9sbnX/c3V8/3N1fP93eX//b3F1/29xdf9sbnX/bG95/3V3ff9zdXz/
+am13/2psc/9sbnX/bG95/25xe/9qbXf/Z2p0/2psc/9nanT/dXd9/2ptd/9zdXz/bG51/2xvef9qbXf/
+bG51/2xudf9zdXz/Z2p0/25xe/9qbXf/amxz/2Zpc/9qbXf/am13/25xe/9sb3n/am13/25xe/9sb3n/
+bG95/3Bzff9sbnX/bG51/2xudf9sbnX/bG95/3Bzff9sb3n/amxz/3Bzff9sbnX/bG51/2psc/9wc33/
+cHJ5/25wd/9ucXv/d3qD/3Byef91eIH/bG95/25xe/9qbXf/dXd9/2xvef9wc33/cHJ5/3N1fP9ucXv/
+cHN9/2xvef91eIH/dXiB/2psc/9sbnX/c3V8/2xvef9ucHf/cHJ5/25wd/9wcnn/bnB3/3V3ff9wcnn/
+bnF7/3N1fP9zdXz/am13/2xudf9wc33/am13/2psc/9maXP/bnF7/21vc/9ucHf/bnB3/3V3ff9wcnn/
+bG51/2psc/9ucHf/bG95/3Bzff91d33/bnB3/25wd/9wcnn/bG51/3Byef9ucHf/bnB3/2xvef9zdn//
+bnF7/3V4gf9ucXv/cHN9/3V4gf9zdXz/dXiB/3Bzff9zdXz/dXiB/3Bzff93eoP/dXiB/25xe/9wc33/
+bnB3/2xvef9sb3n/dXd9/3l8hv9ucHf/bnB3/3N2f/+BhI3/c3V8/3N2f/9sb3n/c3V8/3l7gf91eIH/
+cHN9/3t9g/91eIH/c3V8/3Byef9ucXv/cHJ5/25xe/9ucHf/d3qD/3N2f/9wc33/e36H/36Biv9zdn//
+eXyG/3l7gf9wc33/c3Z//25xe/9qbXf/bW9z/3V3ff9zdXz/bnB4/3N1fP9xc3j/bnB2/25wd/91d33/
+cHJ5/25xe/9ucHf/bnF7/25xe/9tb3f/cXR9/3N1fP9vcXn/d3l//3N1fP9qbHP/eHl9/3Z4fP92eHz/
+dXd9/2xudf9ucXv/cHN9/2xudf9ucXv/bG95/2xudf9ucXv/dXd9/2xudf9ucHf/b3F1/3N1fP9wcnn/
+e32D/25wd/9tb3P/c3V8/3N1fP9ucHf/dXd9/3V3ff9wcnn/cHJ5/2psc/9sbnX/bG95/3Bzff9wc33/
+dXd9/2xudf9tcHr/c3V8/2xvef9zdXz/b3F1/3Byef90dnz/bnB3/3J0ev9wc3v/bG95/3V4gf9zdn//
+bG95/2xvef9ucXv/c3Z//25xe/9nanT/cHJ5/3d5f/9vcXX/Z2px/3V3ff94eX3/bnB3/3l7gf9sbnX/
+bG51/21vc/9zdXz/bnF7/25wd/9ucHf/bG95/3Byef9wcnn/dXd9/25wd/9vcXX/b3F1/25wd/91d33/
+bnF7/25xe/9sbnX/am13/25xe/9wc33/bG95/2dqdP9sbnX/amxz/3Z4fP9ucHf/bnF7/25wd/9wc33/
+bnB3/25wd/9vcXX/dnh8/25wd/92eHz/cHJ5/21vc/9ucHf/bnB3/3Byef9zdn//dXiB/3N2f/93eoP/
+cHN9/3Bzff9wc33/bG95/2xudf9sbnX/bG51/25wd/9wc33/bnF7/2Zpc/9sb3n/amxz/2dqdP9kZ3H/
+bG95/2ptd/9maXP/bnB3/3V3ff9sbnX/bG95/2xudf9ucXv/Z2p0/3N1fP9nanT/bG95/2xvef9ucXv/
+am13/2xvef9nanH/dXd9/3Byef9maXP/am13/25xe/9ucHf/am13/2xudf9tb3P/bG95/2psc/9ucXv/
+bnF7/2ptd/9wc33/cHN9/2Zpc/9sbnX/cHN9/2ptd/9qbXf/Zmlz/2ptd/9sbnX/Z2p0/2ptd/91d33/
+bnF7/21vc/9nanH/bG51/2dqdP9qbXf/bnF7/2psc/9nanT/bG95/2psc/9qbXf/bG95/2Jlbv9qbHP/
+am13/2psc/9sb3n/bG51/2xvef9wc33/am13/3Z4fP9vcXX/bG51/3Byef9ucHf/c3V8/3Byef9sbnX/
+c3Z//25wd/9qbXf/Z2p0/3Bzff95fIb/cHJ5/3N1fP9zdn//g4WM/3N1fP9wc33/am13/25wd/9zdXz/
+cHJ5/2xudf94eX3/cHJ5/2xudf9qbXf/am13/2xudf9sbnX/am13/3N1fP9ucXv/b3F1/3d5f/91d33/
+am13/3N1fP9wc33/Z2p0/2xvef9sbnX/bnB3/2ptd/94eX3/c3Z//25xe/92eYP/c3V8/21vdv9ucHf/
+cHN9/2xvef9sbnX/bG51/2xvef9rbnj/bXB6/3J1fv9ydX7/dHeA/3d6g/91eIH/cHN9/3t+h/97fYP/
+e36H/3l8hv9wc33/eXuB/3d6g/9ucHf/cHN9/25xe/9wcnn/dXiB/3d6g/9wc33/bnB3/25wd/9wc33/
+cHN9/3t9g/9sb3n/bW9z/3V3ff91d33/cHJ5/3l7gf94eX3/cHJ5/25xe/9qbXf/bnB3/25wd/91eIH/
+d3qD/3p8gv9xc3v/cHN9/3R3fv9ucHf/bnF7/25wd/9zdn//c3Z//25xe/9zdXv/bnF7/25wd/9zdn//
+dXd9/25wd/9qbHP/bG51/3N2f/9sb3n/am13/2xvef93eX//bnB3/2ptd/9zdn//eXuB/3Byef95fIb/
+bnF7/25xe/9wcnn/c3Z//3Bzff9ucHf/bnB3/3Bzff9wcnn/cHJ5/3V4gf9ucXv/bnB3/29xdf9ucXv/
+dXd9/3N2f/9zdn//bnB3/2xvef9zdXz/dnh8/3V3ff9ucHf/cHJ5/25wd/92eHz/b3F1/3Byef9sbnX/
+am13/2ptd/9sbnX/am13/3N1fP9nanT/cHJ5/2psc/9nanT/Z2p0/2dqdP9qbXf/bG95/25xe/9qbHP/
+am13/2ptd/9nanT/Z2p0/2Zobv9kZ3H/Z2p0/2xudf9qbXf/cHN9/3N1fP9sbnX/bnB3/2xudf9ucHf/
+Z2p0/3N2f/91eIH/bnB3/3Byef93eX//bnB3/3Byef9sbnX/cHJ5/2ptd/93eX//bG95/2xvef91eIH/
+c3Z//29xdf9wcnn/amxz/3V3ff9ucXv/amxz/25wd/9ucXv/am13/3Byef9tb3P/bG51/2xvef9qbHP/
+bnF7/25xe/9sbnX/dXd9/3Bzff9nanT/bG51/25xe/9sbnX/amxz/2Rncf9nanT/Z2p0/2Zpc/9maXP/
+dXd9/25xe/9qbHP/YmVu/2xudf9qbXf/bG95/3N1fP9sbnX/bG51/25xe/9ucXv/bnF7/3N1fP9qbHP/
+cHJ5/25xe/9wcnn/d3l//29xdf91eIH/dXiB/3V4gf95e4H/c3V8/25wd/91eIH/bnF7/3N2f/93eoP/
+cHN9/3V4gf9ucXv/bG95/2ptd/9wc33/d3l//2xudf9ucHf/c3V8/35/g/9ucHf/bnB3/2dqdP9sbnX/
+cHJ5/25xe/9sbnX/cHN9/3Byef9tb3P/bG95/2xudf9vcXX/bnB3/2xvef9zdn//bnF7/2xvef95fIb/
+eXuB/25xe/95e4H/eXuB/3N1fP91eIH/d3qD/3N2f/9wc33/e32D/3N2f/9tcHn/d3qD/3N1ff9tcHr/
+cHN9/3d6g/9zdn//bG95/25wd/9ucHf/c3V8/3Byev9xdH7/dnmC/3R3gP97fof/eXuB/25xe/95fIb/
+d3l//3l7gf95e4H/bnB3/3d5f/93eoP/c3V8/3l7gf93eoP/c3Z//3l8hv93eoP/dXiB/3N1fP9zdXz/
+c3Z//3V4gf95fIb/cHN9/2xvef91d33/dXd9/3Byef93eX//eHl9/3Byef9ucHf/Z2p0/2xvef9ucXv/
+dXd9/3Z4fP91d33/a211/2ttdv9zdXv/a210/25xe/9tb3P/bnF7/25xe/9tb3f/cXR9/3J0ff9sb3n/
+c3Z//3V3ff9ucXv/am13/25xe/9sb3n/amxz/2Zpc/9sb3n/dXd9/2ptd/9kZ3H/bG95/3Byef9nanH/
+c3V8/2Zobv9sbnX/bG51/2ptd/9nanT/ZGdx/2Zpc/9maXP/ZGdx/2Zpc/9wcnn/Z2p0/2Jlbv9maXP/
+Z2p0/3Bzff9sb3n/bnF7/2psc/9qbXf/bnF7/3V3ff9wc33/am13/25wd/9qbHP/dnh8/25wd/9wcnn/
+bnF7/3Bzff9zdXz/cHN9/3N1fP95e4H/bnB3/3V3ff9ucXv/bG95/2xvef9ucXv/bG51/25wd/91d33/
+bnB3/25xe/9ucXv/am13/25xe/9sbnX/Z2p0/2xudf9nanT/Z2p0/2dqdP9sb3n/YmVu/2dqcf9nanH/
+ZGdx/2Jlbv9ucXv/Z2p0/2Zpc/9sbnX/c3V8/2xudf9sb3n/bG51/2xvef9kZ3H/c3V8/2xudf9sb3n/
+c3Z//2xvef9vcXX/bnB3/2psc/91d33/bnB3/2xudf9qbXf/cHJ5/2ptd/9wc33/bG51/2xudf9ucHf/
+bG51/25xe/9ucXv/am13/3N1fP9wc33/Zmlz/2dqcf9qbXf/Z2p0/2psc/9maXP/am13/2ptd/9sbnX/
+bG51/3Z4fP9sbnX/bnB3/2dqdP9ucHf/bnB3/25xe/9zdn//bnB3/2xvef9ucXv/bnF7/25xe/9zdn//
+am13/3Bzff9zdXz/cHN9/3l7gf9wcnn/c3Z//3Z4fP9zdXz/eHl9/2xudf9sbnX/cHJ5/25wd/9wcnn/
+c3V8/2psc/9wcnn/am13/2dqdP9qbHP/bnB3/3d5f/9tb3P/bG51/3V3ff9+f4P/bnB3/3Byef9ucHf/
+b3F1/3V3ff9wc33/bG95/3Bzff9zdn//cHJ5/3N2f/9wc33/cHN9/3V4gf9zdXz/eXuB/3l7gf95e4H/
+g4WM/36Ahv97fYP/foCG/36Ahv9zdn//dXiB/3V4gf9wcnn/bnB3/3h5ff91d33/a254/3x+hf9ydX7/
+b3J6/3R3gP95e4H/cHN9/2xvef9vcXX/bnF7/3N2f/9tcHr/b3F4/3Fzev9sbnX/dnh8/3V3ff9nanT/
+dXd9/25xe/9zdXz/bnF7/2dqdP9wc33/cHN9/2xudf9sb3n/amxz/2dqcf9nanT/Z2p0/2ptd/9qbHP/
+Z2px/2xvef9nanT/c3Z//2Zpc/9kZ3H/Z2p0/2xvef9qbHP/cHJ5/3Byef9maXP/bG51/2dqdP9qbHP/
+am13/3Bzff9wc33/dnh//2ttdf9qbXX/cXN6/2ptd/9ucXv/Z2px/2ptd/9rbXf/bnF4/3J1fv91eID/
+bnF6/3l7gf91eIH/bnB3/2Rncf9sb3n/cHJ5/29xdf9qbHP/cHJ5/3Z4fP9nanT/Z2p0/2ptd/91d33/
+b3F1/3d5f/9tb3P/bG51/2xvef9wcnn/bnB3/2ptd/9sb3n/am13/2ptd/9nanT/cHJ5/2dqdP9nanT/
+Z2p0/25xe/91d33/bG95/2xvef9nanH/bG51/2xvef9zdXz/bnF7/2psc/9qbXf/Zmlz/3Bzff9qbXf/
+am13/2xvef9nanT/Z2px/2xudf9nanH/bG95/2dqdP91d33/bG51/2Zpc/9maXP/am13/2Zpc/9qbXf/
+cHJ5/2dqdP9sb3n/cHN9/2dqdP9qbXf/Z2px/2dqdP9qbXf/Zmlz/2dqdP9nanT/am13/2Rncf9qbHP/
+amxz/2psc/9kZ3H/cHN9/2ptd/9qbHP/am13/3Byef9qbHP/am13/2psc/9maXP/YGNs/25xe/9nanH/
+am13/3Bzff9sbnX/am13/2psc/9nanT/bnF7/2ptd/9zdn//c3Z//3l8hv93eX//fn+D/3N2f/9zdn//
+eXyG/3V3ff93eoP/d3qD/25xe/95e4H/c3Z//2ptd/9ucHf/dXiB/3N2f/9wc33/bG95/25xe/9sb3n/
+bnB3/3Byef97fYP/c3Z//25xe/9nanT/bnB3/2xudf9ucHf/dnh8/25wd/9qbXf/bnF7/25xe/9wc33/
+bnF7/2xvef9ucXv/c3V8/25wd/9zdXz/bnB3/3V3ff92eHz/cHJ5/3V3ff9qbXf/bnB3/2xvef9ucHf/
+cHJ5/3Byef9nanT/cHJ5/25xe/9qbXf/bG51/25xe/91d33/bW9z/2xudf9wcnn/fX6B/2xvef9qbXf/
+Z2p0/2dqdP9ucXv/bnF7/2ptd/9sb3n/bG95/2xudf9nanT/Z2px/2Zpc/9maXP/Z2p0/25xe/9qbXf/
+Z2p0/3Byef9wcnn/ZGdx/25wd/9sb3n/Zmhu/2xvef9maXP/cHJ5/21vc/91d33/dXd9/2xudf93eYD/
+b3J5/2ptd/9sb3n/bnF7/2xvef9tb3P/bW9z/25wd/9zdXz/bnB3/3Bze/9zdn3/b3F1/3V3ff91d33/
+Z2px/3d5f/9ucXv/dnh8/3Byef9ucHf/dnh8/3N1fP9sb3n/bnF7/2xvef9qbHP/bnF7/25xe/9sbnX/
+b3F1/25wd/9zdn//bnB3/3t9g/9zdXz/bnB3/3V3ff9zdn//bnF7/3V4gf91d33/cHN9/25wd/9ucHf/
+b3F1/2xudf9wcnn/dXd9/3h5ff9ucHf/bnF6/3V2fP9tb3T/cHN9/25wd/9wc33/cHJ5/29xeP9xdHz/
+cnR6/2xudf9zdXz/bnF7/2ptd/9kZ3H/bG95/25xe/9ucHf/bG95/3Bzff95e4H/bnF7/25wd/9sb3n/
+dnh8/2xudf93eX//bG51/2xudf9qbXf/am13/2xudf9maXP/am13/2ptd/9qbXf/am13/3N1fP9qbXf/
+Zmlz/2psc/91d33/dnh8/3N1fP91d33/bG51/2dqcf9ucXv/cHN9/3Byef9sbnX/bnB3/2ptd/91d33/
+bnB3/3V3ff9sb3n/cHN9/25wd/9ucHf/am13/25wd/9ucHf/d3l//29xdf9sbnX/bG51/2ptd/9wc33/
+cHN9/3Bzff9sb3n/bG51/3Bzff9qbXf/bG95/2xudf9nanT/bG95/2xudf9nanH/Z2p0/2ptd/9nanT/
+Z2p0/2dqdP9sbnX/Z2p0/25xe/9qbXf/amxz/3Bzff93eX//bnB3/3Byef9sb3n/c3Z//2ptd/9zdn//
+cHJ5/3Bzff97fYP/c3Z//3d6g/9zdn//dXd9/3d6g/9zdn//bnB3/3Byef9ucHf/cHJ5/3N1fP9ucHf/
+b3F1/3N1fP9tb3P/cHJ5/3N1fP9sbnX/bnF7/3N1fP9qbXf/bnB3/3V3ff9zdXz/c3V8/25wd/9vcXX/
+cHJ5/2xudf9qbXf/c3V8/25wd/9ucHf/Z2px/25wd/9sbnX/bnB3/3N1fP9tb3P/Zmlz/2xvef9qbXf/
+cHJ5/3Byef9ucHf/bG51/21vc/9sbnX/bnF7/2xudf9wc33/c3V8/2xvef92eHz/bG51/2ptd/9sbnX/
+bnB3/3N1fP9ucHf/Z2p0/2xvef9ucHf/bG51/2psc/9wcnn/dnh8/21vc/9sbnX/cHJ5/3l8hv9ucHf/
+dXd9/25wd/9sb3n/dXd9/3V3ff9sb3n/bnF7/3N1fP9sb3n/bnF7/2xvef9wcnn/c3V8/25wd/91eIH/
+d3qD/3V4gf93eoP/d3qD/3V4gf93eoP/eXuB/3Byef91eIH/c3Z//3Byef9vcXX/eXuB/3Z4fP9tb3b/
+d3qD/3N1fP9ucHf/bnF7/3N1fP9zdXz/b3F1/29xdf9vcXX/cHJ5/25wd/9tb3j/b3J5/21vc/91d33/
+dXd9/2dqdP91eIH/bnF7/3N1fP9nanT/Zmlz/25wd/9qbXf/Z2p0/2dqdP9maXP/ZGZs/2Zobv9nanT/
+Zmhu/2Rncf9maG7/Zmlz/2Rncf9wc33/Zmlz/2Rncf9sb3n/bG95/2psc/91d33/cHN9/25xe/9qbXf/
+am13/2psc/9sbnX/bG95/3V3ff9ydHz/bG5z/21vdP9wc3z/amx0/2xvef9qbXf/am13/2ptd/9rbXT/
+a252/21wef9sbnX/dnh8/3Byef9ucHf/amxz/25wd/9ucXv/bnB3/2xudf9ucHf/c3V8/2Zpc/9nanH/
+bG51/3N1fP9ucHf/d3l//2xudf9vcXX/bG51/2xvef9wc33/bnF7/3l7gf93eoP/cHN9/25xe/94eX3/
+bnB3/2xudf9qbHP/dXd9/3Z4fP91d33/eHl9/25wd/9vcXX/c3V8/3Byef9zdXz/bnB3/25wd/9sbnX/
+eHl9/29xdf91d33/bG95/2ptd/9qbXf/bG51/2dqdP9sb3n/ZGdx/3d5f/9qbXf/ZGdx/2Rncf9sb3n/
+cHJ5/3Byef9wcnn/cHJ5/25xe/9zdn//bnF7/3Bzff9ucHf/b3F1/3N1fP9sbnX/bG51/2xvef9zdXz/
+b3F1/3Byef9sbnX/b3F1/2xudf9zdXz/bnF7/3Bzff91eIH/e32D/3N2f/9zdn//c3V8/3d6g/9qbXf/
+cHN9/25wd/9ucHf/eHl9/3N1fP9ucHf/bnB3/25wd/9sb3n/cHJ5/2ptd/9sb3n/bG95/3Byef9zdXz/
+am13/2xudf9wcnn/bW9z/25wd/9sb3n/amxz/3V3ff9zdXz/bG51/2xudf9zdXz/cHJ5/2xvef9tb3P/
+am13/3N1fP9ucHf/bnB3/3V4gf9ucXv/c3V8/2ptd/9ucHf/bnB3/25xe/9zdn//bnB3/2xudf9wcnn/
+cHN9/3N2f/9wc33/bnB3/25xe/9ucXv/cHJ5/3N2f/9wcnn/d3l//3V4gf9wc33/d3l//2ptd/9ucXv/
+bnB3/3Bzff9wc33/cHJ5/25wd/9wc33/cHJ5/2xudf9ucHf/cHJ5/3h5ff9vcXX/bnB3/3Bzff97fof/
+c3Z//3V4gf9ucHf/bnF7/3l7gf91eIH/am13/3Bzff9zdn//bnB3/25wd/9ucHf/cHJ5/3N1fP9ucHf/
+c3V8/3N1fP9zdXz/dnh8/3Z4fP9zdXz/dXd9/3N1fP9sbnX/bnF7/2ptd/9wc33/bG95/3d6g/91d33/
+bnB3/3l6gP9wc3v/bW91/3Bzff9ucXv/bnF7/2dqdP9sb3n/am13/3Byef9ucHj/bW94/3Byef9ucHf/
+dXd9/3V3ff9sb3n/d3qD/3V4gf97fYP/c3Z//2xvef91eIH/c3Z//3N2f/9zdn//dXiB/2xvef9wc33/
+dXd9/25wd/9vcXX/cHJ5/3N1fP9sbnX/e32D/25wd/9qbXf/dXd9/3V3ff9tb3P/dXd9/25xe/9sb3n/
+Zmlz/2Rncf9maG7/amxz/2dqdP9ucHf/am13/2Zobv9pa3H/cHN5/21vdP9zdXz/bG51/3Byef9wcnn/
+a211/2tudv9ucHn/aGt0/3V3ff9sb3n/Z2p0/2Zpc/9ucXv/am13/2xudf9maXP/bG95/3Bzff9kZ3H/
+YmVu/2xudf9zdXz/bG51/3V3ff9ucHf/bnB3/25xe/9ucHf/bnB3/2psc/92eHz/cHJ5/25wd/9sb3n/
+d3l//3Byef9sbnX/bG51/3Byef92eHz/c3V8/3h5ff9ucXv/bnB3/3V4gf91eIH/dXiB/3Bzff9zdn//
+cHJ5/3d5f/9sb3n/dXd9/3Bzff9wcnn/cHJ5/21vc/9ucHf/cHN9/2ptd/93eoP/bnB3/2psc/9nanH/
+b3F1/3N1fP9ucHf/cHJ5/3Byef9ucHf/dXd9/25xe/9ucXv/amxz/21vc/9wc33/bG51/29xdf9wcnn/
+cHJ5/25wd/9ucHf/bnB3/21vc/9qbXf/bG95/25wd/9ucHf/c3V8/3h5ff9sbnX/c3V8/2dqdP91d33/
+ZGdx/25xe/9qbXf/bnB3/3h5ff9wcnn/bG51/21vc/9qbXf/am13/2xudf9sbnX/bG95/2xvef9ucXv/
+c3V8/2dqdP9sbnX/am13/2dqcf9nanT/Z2p0/2Zobv9qbXf/am13/2Rncf9qbHP/am13/2xvef9sb3n/
+Z2px/2Zpc/9wc33/am13/2xudf91d33/cHJ5/3N1fP9sb3n/cHJ5/25xe/9zdn//bnF7/2xvef9sb3n/
+cHN9/3Byef9wc33/c3Z//25xe/9ucHf/bnF7/3Bzff93eoP/c3V8/3t9g/97fYP/dXiB/3l7gf9zdn//
+d3qD/3V4gf93eoP/c3Z//3Bzff9wcnn/d3qD/3d6g/9wc33/c3V8/3N1fP95fIb/cHN9/3Bzff9zdn//
+e36H/3Bzff9zdn//bG95/2xudf91d33/c3Z//2dqdP9sb3n/c3Z//2xvef9sb3n/bG95/25xe/9wc33/
+cHJ5/25xe/9zdn//dXiB/3d5f/95e4H/d3qD/3d6g/93eX//cHJ5/3N2f/93eoP/cHN9/2ptd/91d33/
+cHN9/2hrcv91eID/b3J7/2xueP9zdn7/cHN9/3Byef9ucHf/bnF7/2xvef9ucXv/cHJ6/21wef9tb3f/
+bG51/3N1fP9wc33/Zmlz/3V3ff9nanT/cHN9/25xe/9nanT/c3V8/25xe/9sb3n/bnF7/25xe/9qbXf/
+bG51/25xe/9nanH/Zmhu/2dqcf9nanT/ZGdx/3V3ff9qbHP/Z2px/25wd/9sb3n/Zmhu/25xe/9qbXf/
+bnF7/2Zpc/9qbHP/amxz/2xvef9sb3n/cHJ5/3Byef9oa3X/bG51/29ye/9tcHr/c3Z//25wd/9ucXv/
+dHZ9/21vd/9tb3b/b3F6/2xudf92eHz/dXd9/25wd/9maXP/cHJ5/2ptd/9sbnX/bG51/25wd/9zdXz/
+am13/2RmbP9tb3P/dXd9/2xudf92eHz/bW9z/2xudf9zdXz/bG51/2xudf9qbHP/dXd9/2xudf9ucHf/
+bnF7/3V4gf9wc33/am13/2dqdP9zdn//dXd9/3Bzff92eHz/bnF7/2ptd/9zdn//c3V8/3Byef9sbnX/
+cHJ5/2xudf91d33/am13/3Bzff9zdXz/cHJ5/3Byef9sbnX/amxz/25wd/9nanT/dXd9/2dqdP9kZ3H/
+ZGdx/2dqcf9qbXf/amxz/25xe/9qbHP/am13/3N1fP9sb3n/bnF7/21vc/9sbnX/bnF7/2xudf9sbnX/
+bG95/2xvef9qbXf/bG51/2xudf9vcXX/b3F1/25wd/9ucXv/bnF7/3V4gf95e4H/bnF7/3d5f/9wcnn/
+d3l//2dqdP9zdn//cHJ5/3Byef93eX//bnF7/2xvef9qbXf/b3F1/29xdf9vcXX/bG51/29xdf9sbnX/
+c3Z//3N2f/9ucXv/bnB3/3Bzff9zdn//c3Z//3N2f/9ucXv/dXiB/3V4gf9sb3n/bnB3/3Bzff9wc33/
+cHN9/3Byef9wcnn/d3qD/25xe/9sb3n/eHl9/3Byef9zdXz/amxz/2ptd/9sbnX/am13/2ptd/9sbnX/
+ZGdx/2xudf9nanT/bG51/2xudf9sbnX/Z2p0/2xudf9sbnX/cHJ5/2psc/9zdXz/cHN9/2ptd/93eX//
+Z2p0/3Byef9ucHf/cHJ5/25xe/9qbXf/bnB3/3N1fP9zdn//Z2p0/29xdf9vcXX/dXd9/2xudf9ucHf/
+dXd9/3t9g/9ucHf/cHJ5/2ptd/9nanT/bnF7/3Bzff9maXP/bG51/3Bzff9nanT/am13/2ptd/9sb3n/
+am13/2psc/9nanH/am13/2xvef9wc33/cHJ5/2xvef9wc33/bnF7/2psc/9sb3n/bG95/3Bzff9qbXf/
+d3l//3d5f/9oa3L/d3l//3N1e/9sb3n/b3J8/3d6g/91eIH/cHN9/3d6g/9zdn//dnmC/3J1fP9rbnf/
+aWx2/2dpb/9qbXf/Z2p0/2Rncf9ucHf/Zmlz/2dqdP9nanT/ZGdx/25wd/9kZ3H/Zmhu/2dqdP9qbXf/
+ZGdx/2Rncf9nanT/Z2p0/2dqcf9nanH/Z2p0/2Jlbv9wcnn/amxz/2psc/9zdXz/bnF7/2xudf92eHz/
+bnF7/2xvef9maXP/amxz/2psc/9ucXv/bG95/3Z4fP91d33/bG95/2xveP9ydH3/cXN7/3V4gf9wcnn/
+c3Z//3R3gP9ucHf/bG93/21wef9oa3X/dXd9/25xe/9sbnX/bG51/3Byef9sb3n/bnF7/3N1fP9wc33/
+c3Z//2xvef9nanH/bnB3/3d5f/9sb3n/d3qD/2xvef9wc33/dXiB/25wd/9sb3n/bG51/3V3ff9ucHf/
+bG51/2xvef91d33/bnF7/2ptd/9maXP/c3V8/3N1fP9wcnn/dnh8/2xudf9sbnX/c3V8/25xe/9wc33/
+bnF7/3Bzff9zdXz/dXiB/25xe/91eIH/dXiB/3Bzff91eIH/dXiB/3Bzff97fYP/c3Z//36Biv91d33/
+am13/2xvef9ucXv/cHN9/2xvef9zdXz/bnB3/3Bzff91d33/cHJ5/3Bzff9qbHP/amxz/25xe/9qbHP/
+Z2px/2xvef9sb3n/bG51/2xudf9nanT/bG51/2psc/9sb3n/am13/2xvef91d33/dnh8/2ptd/9zdXz/
+bG51/25xe/9kZ3H/bG95/2xudf9sbnX/dXd9/2xvef9qbXf/am13/29xdf9ucHf/b3F1/2xudf9ucHf/
+b3F1/3N1fP9zdXz/cHJ5/3N1fP92eHz/cHJ5/3Byef9zdXz/bG51/3V3ff9zdXz/amxz/21vc/9ucXv/
+bG95/2xvef9nanT/Z2px/2ptd/9nanH/Z2px/25xe/9nanT/ZGdx/11gav9gY2z/Zmhu/2Rncf9maXP/
+ZGZs/1xfaP9maXP/YmVu/2Rncf9kZ3H/Zmlz/2psc/9qbHP/bG95/2ptd/9maXP/cHN9/3Bzff9qbXf/
+dXd9/2Zpc/9ucXv/bG95/3N1fP9zdXz/bnB3/2xvef9wc33/c3Z//2xudf9sbnX/bW9z/3N1fP9qbXf/
+bG51/3V3ff97fYP/b3F1/3N1fP9sbnX/bG51/25wd/9zdn//bG95/3Bzff91eIH/cHN9/3Bzff9zdn//
+c3V8/21vc/9ucHf/bG51/3Byef9zdXz/dnh8/3Z4fP9zdXz/dnh8/3N1fP9ucHf/c3V8/3Byef9zdXz/
+am13/3h5ff93eX//b3F1/3p9g/9vcnr/bW92/25xe/9zdXz/cHN9/2xudf9sb3n/am13/2xudf9qbXb/
+a254/2tud/9sb3n/c3V8/3Byef9vcXX/d3l//3V3ff9zdXz/cHJ5/29xdf92eHz/cHJ5/25wd/9wcnn/
+cHN9/25wd/9ucHf/c3V8/3N1fP9tb3P/bG51/2xvef9nanT/c3V8/2xudf9sb3n/dXd9/3Byef9ucHf/
+d3l//3Byef9zdXz/amxz/25wd/9sb3n/dXd9/3N2f/93eX//dXd9/3J1fv9sb3j/bW94/2psc/9wc33/
+amxz/2ptd/9sb3n/aGtz/2ttdf9vcnz/bW92/3h6gP9zdn//c3V8/25wd/9zdXz/Zmlz/2Rncf9gY2z/
+Zmhu/2Zpc/9gY2z/XWBq/2Rncf9sb3n/ZGdx/3Byef9kZ3H/am13/2dqdP9iZW7/Zmhu/2Jlbv9nanT/
+amxz/2psc/9sbnX/c3V8/25xe/9qbXf/Z2p0/2xvef9ucXv/c3V8/3V3ff9sbnX/bnB3/3N1fP9sb3n/
+cHN9/25xe/9wc33/cHJ5/3V4gf9zdXz/c3Z//3V4gf9zdXz/c3Z//3N2f/9ucXv/d3qD/25wd/95e4H/
+am13/2ptd/9qbXf/bnF7/25xe/9sb3n/c3Z//3N2f/91eIH/eXyG/3N2f/91eIH/bnB3/25wd/92eHz/
+bnB3/29xdf91d33/c3Z//25xe/9wcnn/am13/2xvef9ucHf/bG95/2xvef9ucXv/dXd9/3Z4fP9vcXX/
+dnh8/2ptd/9ucXv/YGJo/2psc/9qbXf/bG51/3d5f/9tb3P/bW9z/2xudf9vcXX/bG51/2xudf9ucHf/
+bG51/29xdf91d33/dXd9/3N1fP9sbnX/dXd9/25xe/9qbXf/cHN9/2psc/9sb3n/Z2p0/2Rncf9maG7/
+ZGdx/2Zpc/9nanT/Zmhu/2dqcf9sb3n/am13/21vc/92eHz/cHJ5/2xudf9sbnX/Zmlz/2psc/9nanT/
+am13/2xudf9maXP/bnF7/2dqdP9tb3P/cHJ5/2xudf9sbnX/bG51/2xudf9wcnn/amxz/3N1fP9zdXz/
+bG51/3Byef9iZW7/am13/2ptd/9sb3n/Z2p0/2xudf9nanT/bnF7/25xe/9maXP/Z2p0/2xudf9wc33/
+Z2p0/2Zpc/9sb3n/c3Z//2ptd/9ucXv/am13/2psc/9ucXv/cHN9/2dqdP9sb3n/bnB3/25wd/9wcnn/
+cHJ5/3N1fP9sbnX/am13/2ptd/9ucXv/c3V8/3h5ff9zdXz/cHJ5/3Bzff9ucXv/bnB3/3N1fP9ucXv/
+d3l//2xvef92eHz/eXuB/2xudf96fIP/bnF5/2xudf9sb3n/c3V8/25xe/9nanT/Z2p0/2xudf9sbnX/
+bW93/21veP9vcXn/am13/3Byef9wcnn/am13/3V4gf9wc33/c3V8/2xvef9sbnX/c3V8/3Byef9wcnn/
+cHJ5/3V3ff9wcnn/bnB3/25wd/9sb3n/bG95/2ptd/9nanT/Z2p0/3Bzff9sbnX/amxz/3N2f/9sb3n/
+Z2p0/25xe/9qbXf/bnF7/2dqcf9tb3P/bG51/3h5ff9wc33/c3Z//3d5f/9ucXv/a251/2lsdv9nanT/
+bnF7/2psc/9qbXf/bnF7/21vd/9ucXv/cHN8/2xudf93eX//cHJ5/21vc/9tb3P/c3V8/3N1fP9wcnn/
+bG95/2xvef9zdn//am13/2dqdP9wc33/eXuB/3Bzff97fYP/c3V8/3N2f/9zdn//bG95/2xvef9sbnX/
+c3V8/25wd/9ucHf/bG51/3V3ff9ucXv/bG51/2psc/9wc33/cHN9/3N1fP93eoP/bnB3/29xdf9wc33/
+bG95/2ptd/9qbHP/amxz/2Zpc/9sb3n/bG51/2xvef9ucXv/am13/2xvef9qbXf/bG51/3V3ff9sbnX/
+d3l//2ptd/9maXP/Zmlz/2ptd/9qbXf/Zmlz/2psc/9maG7/Z2p0/3Byef9qbHP/bG95/2dqcf9nanT/
+bG95/2Jlbv9gY2z/Zmlz/2Zpc/9maG7/Zmhu/2dqdP9kZ3H/Z2px/2dqcf9qbXf/am13/3Bzff9wc33/
+bG51/3N1fP9sbnX/c3V8/2Vmav9ucHf/bG51/2xudf95e4H/b3F1/29xdf9qbHP/bW9z/21vc/9ucXv/
+bnB3/3Byef9ucHf/d3l//3V4gf95e4H/dXiB/3l7gf9wc33/dXiB/3d6g/9wc33/eXuB/3l7gf9ucXv/
+cHJ5/3Bzff9ucXv/cHN9/25wd/9ucHf/c3Z//25xe/9ucXv/eXuB/3V4gf9wc33/cHJ5/2xvef9wc33/
+c3Z//3d6g/91eIH/cHN9/3d6g/9wc33/bnF7/3V4gf9zdn//cHN9/3Bzff9zdn//d3qD/3Bzff95fIb/
+e36H/3N2f/97fYP/cHN9/3t9g/9zdn//c3Z//3N2f/9sb3n/bG95/3N2f/9wc33/bG95/2xudf9ucHf/
+dXd9/2xudf9ucHf/cHN9/3t9g/9ucXv/cHN9/25wd/9sbnX/bnF7/25xe/9qbHP/bG51/25wd/9ucHf/
+bG95/3V4gf9zdn//cHN9/3N1fP9ucHf/cHN9/3N2f/93eoP/c3Z//3V4gf91eIH/cHN9/25xe/9wc33/
+cHJ5/3Z4fP9wcnn/d3l//3t+h/9ucXv/fX+G/3Fze/9rbnf/cHJ5/3N1fP9zdXz/bG95/2ptd/9qbHP/
+aGpx/2ptdP9sb3n/cnV+/21wev91eIH/c3Z//3Byef9/gYf/d3qD/3l7gf9zdn//cHN9/3V4gf9zdn//
+c3Z//3t9g/93eoP/eXuB/3V4gf9zdn//dXiB/3N2f/9sb3n/bnF7/2xvef95e4H/cHN9/3N2f/95fIb/
+cHN9/29xdf9wc33/bG95/3N1fP9maXP/bW9z/3Byef92eHz/dnh8/3V4gf94eX3/cnR7/21veP9vcXj/
+a21z/3Z4fP9sbnX/bnF7/2xvef9rbnX/b3J6/3F0ff9qbXf/dXiB/3N2f/9sb3n/cHJ5/3Bzff9zdn//
+cHN9/2xvef9ucHf/dXd9/2psc/9qbHP/cHJ5/3N1fP9vcXX/dnh8/25wd/9wcnn/c3V8/2ptd/9wcnn/
+cHJ5/3d6g/9wc33/bnF7/2xvef91d33/c3V8/21vc/9tb3P/dXd9/3Bzff9zdXz/c3Z//2xudf9nanT/
+bnF7/2ptd/9qbXf/Z2p0/2psc/9qbHP/bG95/2xudf9wc33/bnF7/2ptd/9ucXv/bG51/2dqdP9ucXv/
+Zmlz/3V4gf9qbXf/Zmlz/2psc/9tb3P/bG51/2psc/9sbnX/am13/25xe/91d33/b3F1/3Byef9vcXX/
+cHJ5/3Z4fP9ucHf/am13/3Byef9wcnn/bG51/2ptd/9sbnX/am13/2ptd/9nanT/cHN9/25wd/91d33/
+dXd9/2xudf91d33/bG51/3V3ff9nanH/cHJ5/2xvef9sb3n/eXuB/25wd/9ucHf/Z2px/21vc/9tb3P/
+c3V8/2psc/9tb3P/bG51/3V3ff9wcnn/dnh8/3Bzff92eHz/cHJ5/25xe/91eIH/bnF7/3V4gf9wc33/
+am13/25wd/9wc33/bnF7/3Bzff9vcXX/bnB3/3V4gf9ucXv/cHN9/3d5f/9wc33/cHJ5/2xvef9qbXf/
+cHN9/25xe/9ucXv/c3V8/2ptd/9zdn//bnB3/2xudf91d33/bnF7/2xudf9sbnX/cHJ5/25xe/9sbnX/
+cHJ5/3V3ff9tb3P/dXd9/2dqdP9zdXz/am13/2xvef9sb3n/am13/2Rncf9sb3n/am13/2Jlbv9qbHP/
+am13/3N1fP9qbHP/bG51/3Byef9+gIb/cHJ5/3Byef9sbnX/bG51/25wd/9wc33/Zmlz/2ptd/9qbXf/
+am13/2ptd/9ucXv/dXd9/3Byef9vcXX/b3F1/3N1fP9zdXz/eXuB/25wd/9zdXz/cHJ5/2xvef9sb3n/
+cHJ5/2ptd/91d33/bG51/3V3ff95e4H/b3F1/36Bif9ydHv/bG52/3N1fP9zdXz/dnh8/3V3ff9ucHf/
+bG51/25wd/9rbnj/cXN6/3V3gP9wcnn/cHN9/3N2f/9zdXz/f4GH/25xe/95e4H/cHN9/3N1fP95fIb/
+d3qD/3Bzff93eoP/cHN9/3N2f/9ucXv/bnF7/3Bzff9wc33/bnF7/3Bzff9wcnn/d3qD/3Bzff9wc33/
+d3qD/3V4gf9wc33/dXiB/3V4gf91eIH/am13/3Bzff9wc33/eXuB/3N2f/95e4H/eXuB/3Z4gf9vcnz/
+b3J4/21wev91d33/bnB3/3Bzff91eIH/b3J5/3Bzff9xc3r/bnB3/3d5f/9zdn//bG95/2xvef9ucXv/
+dXd9/3Byef9qbXf/bW9z/3V3ff9nanH/bG51/25xe/9ucXv/bW9z/3Z4fP9sbnX/bG95/25xe/9nanT/
+bG51/2ptd/9wc33/bG51/25wd/9ucHf/cHJ5/25xe/9sbnX/bG51/3V3ff9zdXz/dXd9/3l7gf9wcnn/
+bnB3/3V4gf9wc33/cHN9/2xvef9ucHf/am13/25xe/9sb3n/c3Z//3N2f/9sb3n/bnB3/25wd/9sbnX/
+c3V8/2xudf97fYP/bnB3/2xudf9qbXf/am13/25wd/9nanT/am13/2dqdP9sb3n/dXd9/2psc/9qbXf/
+Z2p0/2xudf91d33/bG51/2dqdP9wcnn/cHN9/2xudf9qbHP/am13/2ptd/9sb3n/Z2p0/2xvef9nanT/
+bG95/2xvef9maXP/am13/2psc/9ucXv/YmVu/2xudf9nanT/am13/3V3ff9qbXf/am13/2Rncf9sbnX/
+am13/2ptd/9ucHf/bnB3/2ptd/91d33/c3Z//3V3ff9wc33/dXd9/3Bzff9wc33/c3Z//25xe/91eIH/
+cHN9/2xudf9ucHf/bnB3/25wd/9wcnn/bG51/2xudf9wcnn/bG51/3Byef94eX3/bG51/2xudf9nanT/
+ZGdx/2xudf9sb3n/cHJ5/3Byef9tb3P/bnF7/2psc/9qbHP/cHN9/25xe/9sbnX/am13/25xe/9ucXv/
+am13/2xvef9wc33/bW9z/3V3ff9nanH/c3V8/25xe/9wcnn/c3V8/3N1fP9qbHP/bnB3/25xe/9qbHP/
+amxz/2psc/9ucXv/Zmlz/2psc/9sb3n/dXiB/2ptd/9ucXv/am13/2xudf9sbnX/c3V8/2Zpc/9qbXf/
+bnB3/25wd/9zdXz/c3V8/3N1fP9sb3n/bG51/2ptd/9wcnn/cHJ5/3l7gf9ucHf/dXd9/25wd/9zdXz/
+bG51/25xe/9sbnX/c3V8/2ptd/92eHz/dXiB/2xudf97fYT/cXN6/2dqc/9qbXf/am13/3Bzff91d33/
+bnB3/2xvef9sb3n/bG94/21wd/91d3z/bG51/3Byef9ucHf/bG51/3l7gf9qbXf/dXd9/2xudf9nanH/
+d3l//2ptd/9sb3n/bnF7/2ptd/9ucXv/amxz/2xudf9qbXf/bG95/3Byef9ucHf/bG51/3V3ff9sb3n/
+bnB3/3d6g/9wc33/bnF7/3N2f/9ucXv/bnF7/2dqdP9sb3n/bnF7/3l7gf91eIH/d3qD/3Z4fP9ydHv/
+a252/2xudP9qbHP/c3V8/21vc/9wcnn/cHJ5/25wd/9sbnX/a212/2Nmb/9sb3n/Z2p0/2Zpc/9sbnX/
+bG95/3V3ff9ucXv/bG95/29xdf93eX//Zmlz/25wd/9wcnn/c3V8/3Byef97fYP/c3V8/3Bzff91eIH/
+bG95/25xe/9wcnn/dXiB/3Bzff9wcnn/bnB3/25xe/91d33/bnB3/2xudf91d33/dXd9/3N1fP94eX3/
+bnB3/29xdf92eHz/cHJ5/3Byef9qbHP/b3F1/2psc/9ucHf/bnB3/3N2f/91eIH/cHN9/3Bzff9ucHf/
+cHJ5/3Bzff9sb3n/dXiB/25wd/9ucHf/b3F1/25wd/9wcnn/bG51/3Byef9sbnX/bnB3/3Z4fP9tb3P/
+bG51/2psc/9qbXf/d3l//2xudf9kZ3H/am13/25xe/9qbXf/Z2px/2dqcf9maXP/bG95/2dqdP9ucXv/
+bnF7/25xe/9wc33/bG51/25xe/9tb3P/dnh8/2Zpc/9ucXv/am13/2ptd/93eX//bG95/2xvef9qbHP/
+bnB3/29xdf9zdXz/bG51/2ptd/9qbXf/cHN9/25wd/9wc33/bnF7/3N1fP9wcnn/bnB3/25xe/9qbXf/
+bG95/25xe/9nanT/am13/2ptd/9qbHP/Z2p0/2psc/9nanT/bG95/2Zpc/9sb3n/dnh8/21vc/9sbnX/
+bG51/2xudf9ucHf/bnB3/3Byef9wc33/bnB3/3V3ff9ucHf/bnB3/3V4gf91eIH/cHN9/25xe/91eIH/
+d3qD/3Byef91eIH/c3Z//25wd/92eHz/amxz/3Z4fP9wcnn/c3V8/3N1fP9zdXz/amxz/25wd/9wcnn/
+bG51/2ptd/9sbnX/c3V8/2psc/9vcXX/cHJ5/3V3ff9wcnn/cHJ5/25wd/9ucHf/bnB3/3V3ff9nanH/
+bG95/2xvef9qbXf/c3Z//3N2f/95e4H/dXiB/3Bzff9zdn//dXiB/3d6g/+Bg4r/d3l//35/g/97fYP/
+fn+D/3V3ff95fIb/c3Z//3l7gf9ucHf/dXiB/3V4gf9tcHr/fYCH/3V3fv9wc3v/dXeA/3Bzff97fYP/
+e32D/25xe/9ucHf/cnR7/21wev9tb3f/a254/2Zobv9maXP/Z2px/2dqcf91d33/amxz/2xvef9sbnX/
+Z2px/3Byef9sb3n/bG95/2xvef9sbnX/bnB3/29xdf9vcXX/bnF7/25xe/91eIH/bnF7/25wd/9ucXv/
+cHN9/3Byef95e4H/cHN9/3N2f/91eIH/c3Z//25xe/9sb3n/c3Z//3d6g/97fYP/d3qD/3l8hv95e4H/
+dXiB/3F0fv9ucHf/aGt0/2xvef9sbnX/bG95/2hrdf9rbXf/a254/3F0fP9ucXv/en2D/3l7gf9wc33/
+cHN9/3Bzff9wc33/bnB3/29xdf9vcXX/dXd9/2Zobv9tb3P/bnF7/25xe/9sbnX/dXd9/25wd/9wcnn/
+cHJ5/2dqdP9qbXf/bW9z/3Z4fP9sbnX/amxz/2dqdP9qbXf/bnF7/2Zpc/9maXP/cHN9/3N1fP9sb3n/
+dXd9/2psc/9maXP/bG95/2xudf9qbHP/Zmlz/2dqdP9maXP/bG51/2dqdP9ucXv/bnF7/2ptd/9qbXf/
+Zmlz/2dqcf9qbXf/Zmlz/3N1fP9nanT/amxz/2psc/9sbnX/am13/2dqdP9maXP/Zmlz/2psc/9zdXz/
+bG51/2xudf9iZW7/Z2p0/3N1fP9qbXf/Zmlz/2ptd/9sb3n/am13/2dqcf9kZ3H/Zmlz/25xe/9nanT/
+am13/2xvef9qbXf/cHN9/2Zpc/9nanT/Z2p0/25xe/9gY2z/Zmlz/2Rncf9iZW7/cHJ5/2xvef9nanT/
+Z2px/2ptd/9qbHP/am13/21vc/9sbnX/Zmlz/3Bzff9nanT/bnF7/2xvef9ucXv/bG95/2ptd/9ucXv/
+bG51/2xvef9sb3n/Zmlz/2dqdP9qbXf/Zmlz/2dqdP9maG7/Zmlz/2ptd/9nanH/am13/3Byef9kZ3H/
+Z2px/2Zobv9iZW7/Zmlz/2xudf9qbXf/am13/2xudf9ucXv/amxz/2psc/9ucXv/bG95/2dqdP9nanH/
+bG95/3Bzff9sbnX/Z2p0/2xvef9qbHP/c3V8/2dqdP91d33/bnB3/3Z4fP92eHz/bnF7/2psc/9sbnX/
+cHJ5/21vc/9wcnn/cHJ5/3V3ff9ucHf/bW9z/3V3ff93eX//bnF7/25xe/9sbnX/bG51/3Byef9wc33/
+Zmhu/25wd/9ucHf/Z2p0/2ptd/9wcnn/c3V8/2xudf9vcXX/bnB3/3Byef9zdXz/eXuB/2xudf91d33/
+dXd9/3V3ff9ucHf/c3V8/25wd/91d33/bnB3/3d6g/91eIH/bnB3/3t9hP9wc33/a212/3Bzff9wc33/
+dXiB/3l7gf9wc33/cHJ5/3N2f/9ucXv/b3F6/3V3ff9tb3P/dXd9/25wd/9ucHf/d3qD/25wd/9zdXz/
+bnB3/21vc/92eHz/bnB3/3Byef9wcnn/bnB3/3N1fP9ucHf/bnB3/25wd/9vcXX/dXd9/25wd/9tb3P/
+bG51/2ptd/9qbHP/cHN9/2xvef9qbXf/bnF7/2dqdP9qbHP/YmVu/2Zpc/9qbXf/Z2p0/2Zobv9qbXf/
+Z2pz/2dqc/9pbHP/a21y/2ttdP90dnz/bnB3/2xvef9tcHr/bnF7/2ptd/9maXH/ZWhy/2xvef9sb3n/
+YGNs/2Zobv9kZmz/d3l//3N2f/9ucXv/c3V8/3t+h/9sb3n/c3V8/3V4gf95fIb/eHl9/31+gf9zdXz/
+dXiB/3d6g/9ucXv/cHN9/3Bzff93eX//bnB3/2xvef9ucHf/bG95/3Z4fP9qbXf/bG95/3V3ff94eX3/
+cHJ5/3V3ff9wcnn/am13/3N1fP9tb3P/am13/2Zpc/9nanT/am13/21vc/9sbnX/c3V8/3V3ff9zdn//
+c3Z//3Byef9zdXz/eXuB/3Bzff95fIb/c3V8/3N2f/9wc33/c3Z//3V4gf92eHz/e32D/3V3ff9zdn//
+eXyG/3N2f/9zdn//bnF7/3V4gf93eoP/bnF7/2ptd/9zdXz/c3V8/3Byef9vcXX/bG51/2xvef91d33/
+bG51/3Byef9ucXv/am13/25xe/9qbHP/am13/2dqdP9ucXv/XWBq/2ptd/9nanT/Zmlz/3N1fP9sb3n/
+am13/2dqdP9sb3n/bG51/25wd/9tb3P/bW9z/2dqcf92eHz/cHJ5/3V3ff9zdXz/cHJ5/3Bzff9wc33/
+c3Z//3Bzff9zdn//c3Z//2xvef9qbHP/bnB3/25wd/9zdXz/bW9z/2xudf9zdXz/b3F1/3N1fP94eX3/
+bnB3/2xudf9vcXX/Z2px/2psc/9wcnn/bnB3/25wd/9ucHf/cHN9/2dqdP9sbnX/cHN9/3N1fP9sb3n/
+amxz/25xe/9ucXv/bG51/2ptd/9ucXv/bG51/3Z4fP9qbHP/dnh8/25xe/9zdn//c3Z//3Bzff9qbHP/
+bnB3/3N1fP9tb3P/bnF7/2ptd/91d33/bnB3/25wd/9wcnn/dnh8/3N1fP9wcnn/bnB3/25wd/9wc33/
+dXiB/2dqdP9wcnn/c3V8/2xvef9wc33/cHN9/3N2f/9ucHf/b3F1/29xdf9zdXz/cHJ5/3l8hv9sb3n/
+dXiB/3N1fP92eHz/bW9z/3Byef9ucHf/dXd9/25wd/95fIb/d3l//21vc/96e4H/b3F5/2Zpcv9sbnX/
+am13/3Byef94eX3/bnB3/25wd/9zdXz/cHJ3/3Fzev91d3v/bW9z/3N1fP9zdXz/b3F1/3t9g/9ucHf/
+cHJ5/25xe/9sbnX/c3V8/2ptd/9sb3n/am13/2ptd/9qbXf/bW9z/2xudf9sbnX/b3F1/3N2f/9ucXv/
+bnB3/2xvef9sb3n/bnB3/3Z4fP9wcnn/bnB3/3Byef9ucHf/bnB3/2psc/9wcnn/c3Z//3V4gf9wc33/
+e32D/3N2f/90d4D/bnF7/25xef9rbnf/c3Z//3Byef9wcnn/bnF7/3N2fv9xdHv/bG95/2hrdf9wc33/
+bG95/2Rncf9qbXf/bG51/3h5ff9zdXz/cHJ5/25wd/93eoP/am13/25xe/9ucXv/cHN9/2xvef9zdn//
+bG95/25xe/9zdXz/bG51/25wd/9wcnn/d3l//2dqdP9iZW7/Zmlz/2ptd/9zdXz/am13/2xudf9wcnn/
+d3l//25wd/91d33/bnB3/2ptd/91d33/b3F1/2psc/9nanH/b3F1/2xudf9vcXX/b3F1/3Byef91d33/
+bnB3/25wd/9sbnX/bW9z/3N1fP9nanT/d3l//2xudf9qbXf/amxz/2psc/9nanH/Zmhu/2dqdP9kZ3H/
+YmVu/2xudf9gY2z/Zmhu/2BjbP9maXP/bG51/2Rncf9iZW7/Zmlz/2Rncf9maXP/Zmhu/2Rncf9nanT/
+bnF7/2dqdP9sb3n/bnF7/2xvef9ucXv/Z2p0/25xe/9ucXv/c3V8/2Zobv9wcnn/bnB3/2Zpc/91d33/
+bnF7/25wd/9qbHP/bnB3/2ptd/9sb3n/amxz/2dqdP9iZW7/bnF7/2dqdP9zdXz/bnF7/2xvef9wc33/
+bG95/2xvef9sbnX/am13/2ptd/9maXP/YmVu/2xvef9ucHf/c3V8/21vc/9sbnX/cHJ5/2ptd/9wc33/
+dXd9/25wd/9wcnn/bW9z/2Zobv9qbXf/dXiB/25xe/9sb3n/bG95/3N2f/9wcnn/cHN9/3V3ff91d33/
+bnF7/2xvef91d33/bnF7/2xudf9qbXf/am13/2xudf91d33/am13/3N1fP9ucXv/bG95/2xvef9qbXf/
+ZGdx/2dqcf9maXP/Z2p0/2xvef9qbXf/Z2p0/2dqcf9qbHP/bG95/3N1fP9wc33/bG95/2ptd/9tb3P/
+bnB3/3Bzff9maG7/bG51/2xudf9sbnX/bnF7/25xe/91eIH/cHJ5/3N1fP9ucHf/dXiB/3N2f/95e4H/
+c3Z//3d6g/9wc33/eXuB/25xe/9wcnn/c3Z//3Z4fP9ucHf/eXuB/3d5f/9wcnn/fH2C/3F0fP9wcnz/
+c3Z//3N2f/93eoP/eXyG/3Bzff91d33/eHuF/3N1e/9ydHn/cHN9/2tud/9qbXf/am13/2dqcf9zdn//
+bG51/25xe/9ucXv/bG51/3N1fP9sb3n/bG95/2xudf9vcXX/bG95/25wd/9sb3n/bnF7/25wd/9zdn//
+bG95/25wd/9ucHf/cHJ5/29xdf92eHz/bnF7/2xvef9ucXv/cHN9/25xe/9sb3n/c3Z//3N2f/91eIH/
+cHN9/3l7gf9zdn//c3Z//25weP9ucXn/bG51/3Byef9vcXX/bG95/25wd/9zdXz/cXN6/2lsdP9ucHf/
+dnh8/25xe/9nanT/bG51/25wd/92eHz/c3V8/3N1fP9sbnX/dnh8/2xudf9ucHf/bnF7/3N1fP9ucHf/
+dXd9/25wd/9wc33/dXiB/25xe/9sb3n/cHN9/3d6g/9ucHf/bG95/3Byef9wc33/eXuB/25xe/9wcnn/
+cHN9/3V4gf9ucHf/dXd9/25wd/9wcnn/dXiB/25xe/9sb3n/Z2p0/2xvef9qbXf/bnB3/29xdf9ucHf/
+dXd9/25wd/9ucHf/bnB3/25wd/9wc33/am13/3d5f/9ucHf/bnB3/25wd/9sb3n/cHJ5/3N1fP9wc33/
+bnB3/25wd/93eX//bnB3/25wd/9ucHf/dXd9/3h5ff9zdXz/bG51/3Byef9wcnn/cHN9/3Byef9ucHf/
+bnB3/3N1fP9sbnX/am13/2xvef9qbXf/c3V8/2Zpc/9ucXv/am13/2xvef9iZW7/am13/2dqdP9kZ3H/
+cHN9/2xvef9sbnX/amxz/3Bzff9sbnX/am13/3N2f/9zdXz/bnF7/3l8hv9zdn//eXyG/3V4gf9zdn//
+c3Z//25xe/9wc33/bnB3/3Byef9zdXz/bG51/2dqcf9wcnn/c3V8/3N1fP9sbnX/bG51/2xvef9qbXf/
+c3V8/3V3ff9sb3n/bG95/2ptd/9iZW7/Zmlz/25xe/9qbXf/am13/2Zpc/9sb3n/amxz/2psc/9ucXv/
+bnF7/2dqdP9maXP/bG95/2Zpc/9maG7/ZGdx/2dqcf9kZ3H/bG95/2Jlbv9qbXf/am13/2Zpc/9nanT/
+Zmlz/2BjbP9kZmz/ZGdx/2Rncf9qbXf/Z2px/2Zpc/9kZ3H/Zmhu/2ptd/9wc33/c3V8/2xudf9nanT/
+bG51/3Bzff9sb3n/Zmhu/25wd/9ucHf/bG51/25xe/9wc33/dXd9/29xdf9ucHf/bnB3/3N2f/9ucHf/
+eHl9/3Byef91d33/b3F1/3V3ff9ucHf/bnB3/25wd/9zdXz/am13/3V4gf91d33/bG94/3d5gP9tcHj/
+aGt1/2ptd/9qbXf/bG95/3N1fP9sbnX/am13/25xe/9vcXf/cHJ5/3V3e/9wcnn/cHN9/3V4gf9ucXv/
+e36H/25xe/9wc33/cHN9/25xe/93eX//bnF7/3Byef9ucHf/cHJ5/25xe/9ucHf/bnB3/3Bzff9ucXv/
+c3Z//3Bzff9zdXz/bnF7/2xvef9ucHf/d3l//2xvef9wcnn/am13/2xudf9ucXv/bW9z/3V3ff9ucHf/
+bnF7/25wd/94eX3/cHJ5/3N1fP9qbXX/aGt1/2hrdP9ucXv/bG51/2ptd/9qbXf/bnF7/2tueP9kZ3D/
+ZWhx/3J1fP9ucXv/am13/2xudf9ucHf/c3V8/3N1fP9ucXv/bG95/3Z4fP9qbHP/cHJ5/25wd/9zdXz/
+bnB3/3d5f/9wcnn/bnF7/3Bzff9nanT/bnF7/25xe/93eoP/bnB3/2xvef9nanT/bnB3/3N1fP9qbHP/
+amxz/2ptd/91d33/bG95/25xe/9sbnX/bG51/25xe/9nanH/Z2px/2Zpc/9maXP/YmVu/2dqdP9qbHP/
+bG95/3N1fP9qbHP/am13/2dqdP9maXP/cHN9/2dqdP9zdXz/bG51/2xudf9wc33/bnB3/21vc/9tb3P/
+c3V8/2xvef9sb3n/e36H/25wd/9zdXz/bnB3/3V4gf97fYP/cHN9/3Byef9zdn//c3Z//3d6g/9wcnn/
+bnB3/3Byef95e4H/cHJ5/3V4gf95e4H/c3Z//3l7gf9zdXz/eXyG/3d6g/95fIb/bG95/3V4gf9zdXz/
+cHN9/3l8hv95e4H/dnh8/3N2f/9+gIb/dXiB/3V4gf9tb3P/bW9z/2dqcf92eHz/bnB3/3d6g/9zdXz/
+am13/2xvef9qbXf/Zmlz/2dqcf9nanH/am13/2dqdP9nanT/bG95/3Bzff9ucHf/bW9z/25wd/9tb3P/
+am13/3N1fP91d33/bG95/2ptd/9ucXv/ZWZq/2dqcf9wcnn/bnB3/25wd/9vcXX/c3V8/25wd/9ucXv/
+d3l//3V3ff9ucXv/bG95/3V3ff9wcnn/bnF7/2xvef9ucXv/cHJ5/3V3ff9sb3n/d3l//3d5f/91eIH/
+eXuB/3d6g/9ucXv/c3Z//3t9g/97fYP/fX6B/3Bzff9zdn//c3V8/3Bzff93eoP/dXiB/3V4gf9sb3n/
+Z2p0/25wd/9ucXv/cHJ5/2dqdP9ucXv/bnB3/25wd/9wcnn/cHN9/3Z4fP9sbnX/bG51/21vc/9wc33/
+bG95/3N1fP9ucXv/dXd9/2xudf92eHz/bnF7/3Byef91eIH/c3Z//29xdf95e4H/d3l//3N1fP97foX/
+dXd9/3J0e/9zdn//dXd9/31+gf97fof/dXiB/3V4gf91eIH/dHZ9/3J1f/92eH//bnF7/3N1fP9wcnn/
+bW9z/3l7gf9sbnX/bnB3/3Byef9ucHf/c3V8/25wd/9ucHf/bG51/2ptd/9qbHP/Z2p0/2psc/9qbXf/
+bG51/3N1fP9tb3P/amxz/2ptd/9sb3n/am13/3d5f/9sbnX/bG95/2ptd/9qbXf/cHN9/2ptd/9zdXz/
+cHJ5/25wd/9ucHf/c3V8/2xvef91d37/cHN4/3R2ff9ydX3/eHqA/3V4gf9zdn//b3J8/29yfP9vcnj/
+aGpy/2hrdP9zdXz/bG95/2Zpc/9sb3n/am13/3V3ff9wc33/cHN9/25xe/94eX3/am13/3Bzff91eIH/
+c3Z//2xvef91d33/b3F1/2xvef9ucXv/Z2p0/25xe/9wc33/eXyG/3Byef9ucHf/am13/3N2f/93eoP/
+bnF7/25wd/9wcnn/dnh8/25wd/9ucXv/bW9z/2xudf9zdXz/bG51/2psc/9qbXf/bG95/2ptd/9ucHf/
+bG51/25wd/93eX//am13/25wd/9sbnX/am13/25xe/9nanT/c3V8/2ptd/9sbnX/cHJ5/2xudf9sbnX/
+bG51/3N1fP9tb3P/bnB3/3V3ff9sbnX/am13/2dqdP9ucXv/dXd9/2xvef9nanT/am13/2xudf9wc33/
+amxz/2psc/9nanT/c3V8/2xudf9zdXz/dXd9/3Byef9zdn//bG95/3N2f/9ucXv/cHN9/2dqdP9ucXv/
+bnB3/2dqdP9wc33/bG95/25wd/9ucHf/d3l//3Byef9wcnn/Z2px/2xudf9iZW7/bnF7/2psc/91eIH/
+bG95/2psc/9maXP/Z2p0/2Zobv9maG7/ZGdx/2Zobv9iZW7/YGNs/2Rncf9nanT/ZGdx/2Rncf9kZ3H/
+YGNs/2Rncf9sb3n/bG95/2dqdP9maXP/Z2p0/11fZf9iZW7/bG95/2xvef9qbXf/bG51/2xvef9qbXf/
+bnF7/3Z4fP94eX3/cHJ5/2xudf9zdn//cHN9/3N1fP9ucHf/bnF7/3Bzff93eX//bnB3/3Z4fP92eHz/
+c3V8/3V3ff9wc33/b3F1/29xdf9zdXz/bnB3/3N1fP9tb3P/bG51/2xudf9sbnX/cHN9/2ptd/91d33/
+Z2p0/2Rncf9sbnX/bG95/2xvef9nanT/bG51/2xudf9sbnX/bnB3/3Bzff91d33/b3F1/25wd/9ucHf/
+c3V8/3Byef92eHz/cHJ5/3V3ff9qbHP/c3Z//3Bzff9wcnn/dXiB/3V3ff9sbnX/eHl9/3V3ff9wcnn/
+dXiB/3Byef9sb3j/b3F1/2xvef9zdn//eHl9/2xvef9wcnn/cHN8/21wev9tb3j/cHJ5/2dqcv9maXP/
+Zmlz/2Rncf9wc33/amxz/2psc/9sb3n/am13/2ptd/9qbXf/am13/2xudf9qbHP/bG51/2xudf9nanT/
+am13/2ptd/9ucXv/amxz/2xudf9qbXf/cHN9/2ptd/9zdn//am13/3Bzff9qbXf/bnB3/3V3ff9ucHf/
+dXd9/25wd/9wcnn/cHJ5/3Byef9tb3P/bnF7/21vd/9ucXn/bW93/3R2ff9sb3n/am13/2ptd/9ucXv/
+b3F4/2hrc/9sb3n/d3l//3N2f/9sb3n/bnF7/25wd/9ucXv/Z2p0/2dqdP9qbXf/bnF7/2Zpc/9nanT/
+Z2p0/2ptd/9nanT/bnF7/2xudf9qbXf/bG51/2psc/9tb3P/bnF7/3l7gf9tb3P/amxz/2psc/9ucXv/
+cHN9/25xe/9ucXv/c3Z//3l7gf9zdn//dXiB/25xe/9wc33/d3qD/3N1fP9zdXz/bnB3/25xe/9ucXv/
+c3Z//3N1fP9wc33/eXyG/3N2f/9wc33/c3V8/3N2f/93eoP/c3Z//3t9g/9zdn//cHJ5/3t9g/9zdn//
+d3l//3V3ff93eoP/c3Z//3d6g/97fof/c3Z//3N1fP9zdn//eXuB/3l8hv9zdn//bG95/3N2f/9wcnn/
+d3l//3Byef9ucHf/bnB3/3h5ff9sbnX/cHJ5/3Z4fP9wcnn/bnB3/2ptd/9ucXv/bG51/2xvef9nanH/
+bnF7/2xudf9nanT/bnF7/2ptd/9qbXf/Z2p0/3N1fP9sbnX/Z2p0/2xudf9qbXf/Zmlz/3N1fP9qbXf/
+fn+D/3Z4fP9wcnn/c3V8/3N2f/9sb3n/bnF7/25wd/9wcnn/bnB3/2xvef9wc33/d3l//25xe/9wcnn/
+cHN9/25wd/9ucHf/d3l//3N2f/91d33/bnB3/3N1fP9lZmr/Zmlz/25xe/9sb3n/am13/2dqcf9qbXf/
+amxz/2dqdP9ucHf/cHJ5/2dqdP9kZ3H/bnF7/2ptd/9nanT/amxz/2ptd/9qbXf/cHJ5/2psc/9zdXz/
+c3V8/25wd/9zdXz/dXd9/29xdf9ucXv/dXiB/3Bzff91d33/bG95/25xe/9wcnn/bnF7/3Bzff9wcnn/
+eXuB/25wd/9qbXf/bnF7/3V4gf9wc33/bnF7/3V4gf9ucXv/cHN9/3Bzff93eoP/eXyG/3N2f/9zdn//
+cHN9/3d6g/9zdn//e32D/3d6g/95fIb/cHN9/3l7gf91eIH/c3V8/3d6g/91eIH/c3Z//3t+h/97fob/
+d3qE/3p8g/90dn7/bXB6/25wd/9sb3n/cHN9/3d5f/9ucXv/bnB3/25xe/9xdH7/c3V9/3d5gP9wc33/
+bnF7/2xvef9ucHf/eXyG/25xe/9ucXv/cHN9/25xe/9wc33/cHJ5/25xe/9zdXz/cHJ5/25xe/9sb3n/
+bnB3/21vc/9ucHf/c3V8/25wd/9sb3n/bnF7/3d5f/9ucXv/d3qD/25xe/9zdn//cHN9/2xvef91d33/
+bG95/3Z4fP9ucHf/c3V8/25wd/9ucXv/bnB3/3Bzff9tb3f/bnB3/21vc/9ydHz/bnB3/25wd/9wcnn/
+cHJ5/3Fzef9oa3P/aGtx/3V3ff9wcnn/Z2px/2xvef9sbnX/dnh8/3N1fP91eIH/c3Z//3V4gf9sb3n/
+bG95/3Bzff9ucXv/bG95/3N2f/9sb3n/cHN9/25wd/9sb3n/bnB3/25xe/93eoP/bnB3/2xudf9qbHP/
+c3V8/3N1fP9ucHf/bnB3/3V3ff92eHz/c3V8/2xvef9qbXf/bnB3/3N1fP9sbnX/am13/2xudf9sbnX/
+amxz/25wd/9tb3P/bnB3/3V3ff9ucHf/bG95/2ptd/9tb3P/bnB3/2psc/9zdXz/bnB3/2ptd/91eIH/
+bnB3/25wd/9ucHf/bnF7/25wd/9zdXz/dXiB/25wd/9sb3n/bnB3/3N1fP91d33/bnB3/2psc/9tb3P/
+bG51/3V3ff9sbnX/bG51/25wd/91d33/bG51/3Byef9zdXz/am13/2ptd/9nanT/bG95/2psc/9qbXf/
+ZGdx/2ptd/9qbHP/Zmlz/2ptd/9qbXf/am13/2psc/9zdXz/bG51/2xudf9wcnn/bnF7/25xe/91eIH/
+cHN9/3+Bh/93eX//bG95/3Bzff9zdn//bG95/25xe/9ucHf/cHJ5/25wd/9qbXf/bnF7/3V4gf9ucXv/
+cHJ5/25xe/9ucHf/cHN9/3d5f/91eIH/c3V8/3Byef9ucXv/ZGdx/25wd/9wcnn/cHN9/2xvef9wcnn/
+bnF7/2xvef9wc33/d3l//3d5f/9zdXz/bG51/3Z4fP9zdXz/cHJ5/25wd/9wcnn/bG51/3V3ff9qbXf/
+cHN9/3N1fP9sb3n/bG95/2xvef9qbHP/Z2p0/25xe/9nanT/c3V8/2dqdP9qbXf/Z2px/2psc/9sb3n/
+amxz/3Byef9maG7/YmVu/2ptd/9sb3n/amxz/2Zpc/9ucHf/Z2px/2xudf9tb3P/bnB3/3Bzff9ucHf/
+dXiB/25wd/9zdXz/bnB3/3V3ff9zdXz/dXd9/2xudf91d33/bG95/25wd/9zdn//dXd9/29xdf92eHz/
+eHl9/3J0e/92eH7/bXB4/2hrdP9qbHP/Zmlz/3Byef91d33/am13/21vc/9sb3n/bm92/21weP92eH//
+bnB3/2xvef9wc33/bnF7/3d6g/9zdn//d3qD/3t9g/93eX//fn+D/3d5f/93eX//e32D/3p7f/97fof/
+eXuB/3l7gf95e4H/e32D/3t9g/91eIH/d3l//31+gf9/gYf/d3l//3+CjP93eoP/d3qD/3Bzff9sb3n/
+dXd9/25wd/91d33/am13/2xvef9qbXf/bnF7/2psc/9rbnj/aGty/2hqc/9maG//am13/2dqcf9qbXf/
+bnF7/2xveP9tcHj/YmVu/19ibP9sb3n/Z2p0/2BjbP9maXP/bG95/3h5ff9wc33/c3Z//25wd/91d33/
+bG95/2xvef9sb3n/bnB3/25wd/92eHz/cHJ5/3Byef9sb3n/bnB3/25wd/9ucHf/dXd9/2xudf9qbHP/
+Z2px/3Byef9ucHf/am13/2xvef9wc33/c3V8/25xe/9ucXv/bG51/25xe/9wc33/bG51/25wd/9ucHf/
+bnB3/2ptd/9wcnn/b3F1/25wd/93eX//cHJ5/25wd/9vcXX/bG51/25wd/9sbnX/cHN9/2xvef9ucXv/
+eXuB/3Bzff9zdn//cHN9/3V4gf9ucXv/dXiB/3d6g/9ucHf/bG51/2xvef91d33/eHl9/3Bzff9sb3n/
+bnB3/25wd/95e4H/bG51/2xvef9ucHf/d3l//25xe/9wc33/dXd9/2xvef9zdXz/bnB3/25xe/9ucXv/
+bnF7/2dqdP9sb3n/bG95/2xudf9wc33/cHJ5/25wd/9sb3n/dXd9/25wd/9sb3n/bG51/2ptd/9nanT/
+bnF7/2xudf99foH/dXd9/21vc/9wcnn/c3Z//25wd/9ucHf/b3F1/2xudf9sbnX/Z2px/3N1fP9zdXz/
+bG51/21vc/9sb3n/am13/2xvef9zdXz/bG95/3Bzff91d33/cHJ5/2Rncf9ucHf/bnB3/3Bzff9ucHf/
+bnF7/25xe/9wcnn/cHN9/3d6g/93eoP/c3Z//2xvef91eIH/c3Z//3N2f/9ucXv/cHN9/3N1fP93eoP/
+bnF7/3d6g/91eIH/cHN9/3N2f/9wc33/bG95/2xvef91eIH/bnF7/3V3ff9sbnX/bG51/2xudf9sb3n/
+bnF7/2ptd/93eX//bW9z/2psc/9zdn//cHJ5/25wd/9sbnX/cHJ5/2psc/9vcXX/bnB3/25wd/9zdXz/
+bG51/3Byef9ucHf/dXd9/2xudf9zdXz/bnB3/3h5ff9sbnX/eHl9/25xe/9wcnn/c3Z//2xvef9qbHP/
+cHN9/3V3ff9sb3j/dHeB/25wef9sb3n/bnF7/25wd/9zdn//dXiB/2xvef9ucHf/bnF7/3R2fP9vcnn/
+dnh//25wd/9ucXv/bnF7/25wd/95e4H/bnF7/3N2f/91eIH/c3V8/3V4gf9wc33/cHJ5/25wd/9wcnn/
+dXiB/3Byef9ucHf/bG95/2xvef9wc33/bnB3/21vc/91d33/eHl9/3Byef95e4H/cHJ5/2xvef9ucXv/
+amxz/3N1fP9qbXf/cHN9/21vc/9wcnn/bnB3/3N1fP9vcXX/dHZ9/21wef9xc3z/bnB3/3N2f/9ucXv/
+c3Z//3V4gf9wc33/dXd+/2xvef9ydX7/e36H/3t9g/9ucXv/d3qD/3l8hv94eX3/cHJ5/3V3ff9tb3P/
+cHJ5/2xudf9ucHf/bG51/2ptd/9sbnX/dnh8/25wd/9qbXf/Z2p0/2dqdP9sbnX/bnF7/3V3ff9sbnX/
+bG51/2Zpc/9sb3n/am13/2ptd/9sb3n/c3V8/3Bzff9wc33/bG95/2ptd/9ucXv/cHN9/3Byef9ucHf/
+bG51/2xvef9nanT/bnB3/29xdf9zdXz/dnh8/25wd/9qbXf/amxz/2xudf9qbXf/Z2p0/2xvef9qbHP/
+Zmlz/3Bzff9sbnX/bG95/2ptd/9zdXz/bG51/25xe/91d33/bG51/2psc/9ucHf/dXd9/3h5ff9wcnn/
+Zmlz/2dqdP9sbnX/dnh8/2xudf9ucHf/b3F1/3d5f/9sbnX/cHJ5/3V3ff9qbXf/bG95/2xudf9sb3n/
+bnB3/3N1fP9qbHP/bnB3/2xudf9nanT/am13/2xvef9sbnX/bW9z/3N1fP9sbnX/bG95/2psc/9sb3n/
+Z2p0/25xe/9qbXf/eXuB/3d5f/9sbnX/bG51/3Bzff9sbnX/bW9z/2xudf9sbnX/bG51/2Zpc/9zdn//
+cHN9/2xvef9vcXX/cHJ5/29xdf9wcnn/c3V8/25xe/92eHz/dnh8/3Byef9maG7/bnB3/3N1fP9zdXz/
+bnB3/3Byef9wc33/dXiB/3V4gf97fof/eXyG/3d6g/9qbXf/dXiB/3Bzff9wc33/bnB3/29xdf9sbnX/
+dXd9/25xe/9wc33/c3Z//3Byef9ucHf/bG51/25wd/9qbHP/dXd9/3Byef93eX//amxz/21vc/9sbnX/
+bnF7/2xvef9ucHf/dXd9/21vc/9ucHf/c3V8/3Byef9ucHf/bG51/3Byef9sbnX/bG51/2ptd/9sbnX/
+bnB3/2xudf9zdXz/bG51/3V3ff9qbXf/dXd9/25xe/91d33/Z2p0/3h5ff9ucHf/b3F1/3Byef93eoP/
+c3V8/3l7gf96fIP/c3Z//3Z5g/9ucXr/bG51/2xudf9qbXf/bnF7/3d5f/9tb3P/bW9z/2xudf9ucHf/
+b3F2/3d5gv9wcnn/bnF7/3Bzff9ucHf/d3qD/25wd/9ucHf/cHN9/25wd/92eHz/b3F1/25wd/9sb3n/
+bnB3/3Bzff9sb3n/bG95/25wd/9ucHf/c3V8/29xdf9vcXX/dXd9/3V3ff9ucHf/eXuB/3Byef9sb3n/
+bnF7/2dqdP9zdXz/am13/2xvef9qbHP/bG95/2xudf9wc33/amxz/3Bzff9qbXb/bG53/2hqdP9vcnz/
+am13/3Byef9wcnj/cXN6/3JzeP9oanP/Z2pz/3N1fP9ucXv/Zmhu/3N1fP9ucHf/dnh8/3Byef94eX3/
+bnB3/3V3ff9sbnX/bG51/25wd/9sbnX/bG51/3N1fP9wc33/am13/2dqdP9maXP/amxz/2ptd/9zdXz/
+Z2px/2Zpc/9iZW7/Zmlz/2RmbP9iZW7/Zmhu/2Zpc/9nanT/ZGdx/2Rncf9iZW7/Z2p0/2Zpc/9maG7/
+Zmlz/2Zpc/9qbXf/Zmlz/2xvef9sbnX/bnF7/3N1fP9qbXf/amxz/2psc/9qbXf/am13/2xudf91d33/
+b3F1/2xvef91d33/bG95/3Byef9sbnX/dXd9/2ptd/9wc33/dXd9/21vc/9nanH/cHJ5/3Z4fP92eHz/
+c3V8/2dqcf9sb3n/cHJ5/3t9g/9wc33/c3V8/25wd/93eoP/bnB3/3N1fP91d33/bG51/3Byef9sbnX/
+cHJ5/3Byef91d33/b3F1/3Byef9sbnX/bnB3/3N1fP9ucHf/bW9z/29xdf9zdXz/b3F1/2xvef9ucHf/
+cHN9/25wd/9wc33/bG95/3+Bh/93eX//bnB3/25xe/91eIH/cHN9/3N2f/9zdn//cHJ5/2ptd/9kZ3H/
+dXiB/3Bzff9sb3n/cHJ5/3Bzff9wcnn/c3Z//3l7gf9zdn//c3Z//3l7gf9wc33/Z2p0/25wd/91eIH/
+c3Z//3Byef9vcXX/bnB3/3Bzff9zdn//d3l//3h5ff9zdn//bG95/3d6g/9zdn//cHN9/25wd/9vcXX/
+cHJ5/3N1fP9ucHf/dXd9/3N1fP9ucHf/bnB3/3Byef9sbnX/Zmlz/25xe/9ucXv/d3l//2ptd/9qbHP/
+amxz/2ptd/9qbXf/am13/3N1fP9sbnX/Z2p0/2ptd/9sb3n/Z2px/2Zpc/9nanT/ZGdx/2Zpc/9kZ3H/
+amxz/2ptd/9nanT/cHN9/2xudf9wcnn/bG51/3Z4fP91d33/dXd9/2xvef95e4H/bnB3/25wd/9wcnn/
+c3Z//25wd/9zdn//dnh8/29yfP94eoH/bnB5/25wd/9ucXv/bnB3/3Byef93eX//bW9z/21vc/9sb3n/
+a252/2xudf92eYL/cHJ5/3Bzff9wc33/c3V8/3d6g/9zdn//dXiB/3V4gf9ucHf/eHl9/25wd/9vcXX/
+bG51/25wd/9wcnn/b3F1/2xudf9tb3P/bG51/3Byef9sbnX/bW9z/3Bzff9wc33/bG51/25wd/9qbXf/
+am13/2xvef9kZ3H/am13/2Rncf9sb3n/am13/3Bzff9qbXf/dXd9/2ptd/9xc3v/bG53/2ttc/9lZ3D/
+Z2p0/2Zpc/9maXP/ZGdx/2dqdP9tb3j/am13/21vdv90dn3/dXd9/2dqcf9zdXz/bnF7/3N1fP9qbXf/
+dXd9/2xvef9ucXv/bW9z/3Byef9wcnn/b3F1/2xvef9ucXv/dXd9/25wd/9ucHf/bG95/25xe/9zdXz/
+e32D/3Byef9vcXX/bnB3/25xe/9wcnn/b3F1/2xudf9wcnn/cHJ5/3Byef9wcnn/bG51/3Byef9ucXv/
+am13/2ptd/9sbnX/bnF7/2dqdP9qbXf/am13/2xvef91d33/cHJ5/29xdf9vcXX/bG95/3Byef9ucHf/
+c3V8/25wd/9sbnX/dnh8/3Byef9ucHf/bW9z/3V3ff9sb3n/d3l//3d6g/9zdXz/bG95/3d6g/97fYP/
+d3l//3Bzff9sb3n/cHJ5/2xvef92eHz/am13/2xvef9ucHf/eXyG/25xe/93eX//cHN9/25xe/9wcnn/
+bG95/2xvef9wc33/dXiB/25wd/9ucXv/am13/25wd/9wc33/bnF7/2xvef9sb3n/cHN9/25wd/9sb3n/
+Z2p0/25xe/9nanT/bnF7/21vc/+Agob/d3l//25wd/9ucHf/dXiB/3Bzff9zdn//c3Z//25xe/9ucXv/
+Zmlz/3N2f/9ucXv/bnB3/25wd/9ucXv/bW9z/25wd/91d33/bnB3/25xe/9zdXz/am13/2Rncf9qbXf/
+bG95/2ptd/9nanT/Z2px/2Zpc/9nanT/Z2p0/3Byef9ucHf/bnB3/2dqcf9zdXz/bG95/2ptd/9qbHP/
+bG51/2xvef9sb3n/bG51/3Bzff9ucXv/am13/2xudf9ucXv/bnB3/2dqdP91d33/c3V8/3d5f/9sbnX/
+b3F1/3Byef9wcnn/bG95/2ptd/91d33/bG51/2ptd/9sb3n/cHN9/2Zpc/9qbHP/bG95/2xudf9sb3n/
+Z2p0/2ptd/9qbXf/Z2p0/2ptd/9nanH/am13/2Zpc/9wcnn/c3V8/3V3ff9qbXf/cHN9/2dqdP9maXP/
+am13/3N1fP9tb3P/c3V8/3N1fP9sb3n/d3qC/25wef9ucHX/bnB3/25wd/9ucXv/d3qD/3Byef9ucHf/
+b3J8/29xef9sbnT/cHJ6/2dpb/9qbXf/Z2p0/2dqcf9wcnn/am13/2ptd/9ucXv/bG51/25xe/9qbXf/
+am13/2Zpc/9sbnX/cHN9/25wd/9sb3n/b3F1/29xdf9zdXz/bnB3/29xdf91d33/bnB3/2ptd/91d33/
+cHJ5/2xudf9ucXv/am13/2ptd/9maXP/bG95/2xvef9ucXv/am13/3Bzff9sb3n/cHN9/21wev9tcHr/
+bG95/3h6gP91eIH/foCG/3Z5gv93eoP/dXiA/25weP9pbHb/bnF7/3Bzff9maXP/bnB3/2xvef95fIb/
+dXiB/3t+h/93eoP/dXiB/3Byef9zdn//bG95/25xe/9sb3n/cHN9/3V4gf9wc33/bnB3/25wd/9wc33/
+c3Z//36Ahv91eIH/c3V8/25wd/9wc33/bnB3/2xudf9ucHf/c3V8/3V3ff9zdn//bnF7/2xvef9zdn//
+cHN9/3Bzff9ucXv/c3V8/3Bzff9sbnX/bG95/25wd/9zdXz/dXd9/3Byef9sbnX/b3F1/2ptd/9ucHf/
+bG51/3N1fP9qbXf/bG51/3V3ff9ucXv/bnB3/2xudf9zdXz/bW9z/3Byef91d33/bG51/2ptd/9qbXf/
+cHN9/2xvef9qbXf/Zmlz/2xudf9qbXf/c3V8/2Zpc/9maXP/Z2px/3Bzff9nanH/bnF7/2xvef9qbHP/
+am13/2Zpc/9nanH/Zmhu/2Zpc/9kZ3H/Zmlz/2dqcf9kZ3H/Z2p0/2Zpc/9nanT/bG51/2xvef9sbnX/
+am13/2dqcf9sb3n/Zmlz/25xe/9sbnX/f4GH/3V3ff9sbnX/bG95/3Bzff9sbnX/bnF7/2xvef9qbHP/
+amxz/2RmbP9wc33/am13/2xudf9wcnn/cHJ5/2xudf9ucHf/c3V8/2ptd/9sb3n/bnF7/2xudf9iZW7/
+Z2p0/2xvef9sb3n/Z2p0/2ptd/9qbXf/bG95/3Bzff91d33/dXd9/3V3ff9vcXX/d3l//3V3ff9zdXz/
+bG51/2xudf9sb3n/bnF7/21vc/9zdXz/dXd9/25wd/9ucHf/bnB3/21vc/9nanH/c3V8/2xvef91d33/
+Z2p0/21vc/9zdXz/bnB3/2xudf9wcnn/d3l//2ptd/9nanT/am13/3V3ff9sbnX/bG51/2xvef9sbnX/
+am13/2Zpc/9sbnX/bG51/2xudf9ucHf/bW9z/3Byef9sb3n/dXd9/3V3ff93eX//bW9z/3V3ff9sbnX/
+bG51/2xudf91d33/cHJ5/3d5f/91eIH/cXR+/3Z5gv9wc3r/aGt1/25wd/9ucHf/bnF7/3d5f/9sbnX/
+bG95/2xvef9ydHv/bnF5/3V4gf9ucHf/cHN9/2xvef9ucHf/dnh8/3Byef9ucHf/bnB3/2xudf9wcnn/
+bnB3/3Byef9nanT/bG95/3N2f/9vcXX/bnB3/21vc/9sb3n/c3Z//3Bzff9wcnn/dXiB/25wd/9tb3P/
+eHl9/3V3ff9ucHf/c3V8/29xdf9ucHf/amxz/3N1fP9wcnn/c3Z//25xe/9zdXz/cHJ5/3V3ff9zdX3/
+bnF7/29xeP90d4D/cHN9/3Bzff9sb3n/cXN7/3Bze/9tb3f/aGp0/2xvef9ucXv/Z2p0/25xe/9sb3n/
+c3V8/25wd/94eX3/bnB3/3Bzff9wcnn/cHN9/25xe/9zdn//cHJ5/3N2f/91eIH/cHN9/3Byef9sb3n/
+c3V8/3N1fP97fYP/c3V8/29xdf9vcXX/dXd9/21vc/9ucHf/cHJ5/3Byef9wcnn/dXd9/2xvef9nanT/
+bG95/2ptd/9qbXf/amxz/2Zpc/9qbXf/Zmlz/2dqdP9sbnX/bG95/3N1fP9wc33/am13/2psc/9sbnX/
+bnF7/2xudf9zdXz/bG95/25wd/91d33/cHN9/25xe/9ucHf/dXd9/29xdf9zdXz/c3V8/25wd/9ucHf/
+bnF7/3V3ff9ucXv/d3qD/2xvef9ucHf/bG95/3d5f/9sb3n/bnB3/3Byef95fIb/bnB3/3N1fP9wcnn/
+bW9z/25wd/9wcnn/bG51/21vc/9wcnn/bG51/25wd/9ucHf/bG51/2xvef9sb3n/amxz/25wd/9ucXv/
+bW9z/2xudf9sb3n/bnF7/2xvef91eIH/bG95/4GDiv91d33/bW9z/3Byef9wc33/am13/25xe/9sb3n/
+amxz/2xudf9maXP/dnh8/2xvef9ucHf/cHJ5/25wd/9sbnX/b3F1/3Z4fP9zdXz/c3V8/3N1fP9ucHf/
+amxz/2xudf9wcnn/bnB3/29xdf9ucHf/bnB3/25xe/91eIH/d3l//3d6g/93eX//bG95/3d5f/9zdXz/
+cHN9/2psc/9ucHf/cHN9/3Bzff9ucXv/c3Z//3N2f/9wcnn/cHJ5/3Bzff9wcnn/cHJ5/3d6g/95fIb/
+eXyG/25xe/9zdn//c3Z//25xe/91eIH/e32D/3l8hv91eIH/c3V8/3d6g/97fYP/bnF7/25wd/9ucXv/
+cHJ5/3Bzff9sb3n/cHN9/3Byef9sb3n/cHJ5/25wd/9wc33/bnB3/25xe/9wcnn/eHl9/29xdf91d33/
+cHJ5/2xudf9vcXX/d3l//3Bzff97fYP/dXiB/29yfP91eIH/cHN9/21wev9wc33/cHJ5/2xvef93eX//
+bnB3/2xvef9wcnn/cXR9/21weP91d33/bnB3/3N1fP9sbnX/b3F1/3Z4fP91d33/cHN9/25xe/91eIH/
+cHN9/25wd/9wc33/am13/3Byef91eIH/c3Z//3N2f/9zdXz/dXd9/3l7gf93eX//c3Z//3t9g/91eIH/
+c3V8/3l7gf9zdn//c3Z//3l8hv91d33/d3l//3Z4fP97fYP/e32D/3V4gf9wc33/dXiB/3N2f/92eYL/
+c3Z+/3Bye/9vcXj/c3V8/25wd/9ucXv/bG95/2xvef9xdHz/bG95/2ptd/9wc33/cHN9/2dqdP9zdXz/
+c3V8/25xe/9sb3n/c3V8/2xvef9qbXf/bG51/3V3ff9ucHf/c3V8/29xdf9wcnn/cHN9/2xvef9qbXf/
+bG51/3N1fP92eHz/eXuB/3N1fP9sbnX/bW9z/3Z4fP9sbnX/am13/2xvef9sb3n/cHJ5/3Byef9ucHf/
+amxz/3N1fP9ucXv/bG95/2ptd/9maXP/bnB3/2xudf9sb3n/bG51/2xvef9wc33/c3V8/2xvef9tb3P/
+bW9z/3Byef9qbHP/c3V8/25wd/9sb3n/dXd9/3V3ff9ucHf/bW9z/3Byef9ucHf/cHJ5/3Byef9sbnX/
+bG51/25xe/9wc33/am13/3Bzff9qbXf/bnB3/25wd/91d33/bG51/2psc/9ucHf/d3qD/2xvef9wc33/
+cHJ5/25wd/9ucXv/c3Z//25wd/9wcnn/cHN9/25wd/9wc33/bnF7/3Byef9zdn//d3qD/3Byef9zdn//
+dXiB/25xe/9wc33/bnF7/3Bzff9wcnn/dXiB/2ptd/+BhI3/eXuB/25xe/91eIH/c3Z//2xvef9wc33/
+bnF7/2xudf9nanT/Z2p0/3V3ff9ucHf/bG95/3Byef9ucHf/bG51/25wd/91d33/c3V8/3V3ff9ucXv/
+cHJ5/2xvef9wcnn/c3Z//3N2f/9wc33/cHJ5/25xe/9ucXv/dXd9/3Z4fP93eX//eHl9/25wd/94eX3/
+cHJ5/3V3ff9qbHP/bW9z/25wd/9ucHf/bnB3/3N1fP9ucXv/bG51/2psc/9nanH/Z2px/2dqdP9sb3n/
+am13/3N1fP9maXP/amxz/2ptd/9qbXf/am13/3Bzff9zdXz/am13/2ptd/9zdXz/dnh8/2dqdP9wcnn/
+cHN9/2xvef9ucXv/Z2p0/25xe/9vcXX/amxz/3V3ff9vcXX/c3V8/2ptd/9wc33/cHN9/3l7gf9ucHf/
+c3Z//2xvef9sb3n/cHJ5/3Z4fP9wcnn/eHl9/3Z4fP9ydHv/dXd8/25wd/9qbHP/bG51/2xudf9sbnX/
+dnh8/2xudf9sbnX/bnB3/29xeP9tcHj/dHZ9/25xe/9zdn//bnB3/29xdf94eX3/cHN9/3N1fP9ucXv/
+cHN9/3N2f/9ucHf/bnB3/2xvef9ucHf/c3Z//3N1fP9ucXv/cHN9/3Bzff95fIb/c3Z//3Bzff93eoP/
+bnF7/25wd/97fYP/d3qD/3V4gf93eoP/cHN9/3N2f/9zdXz/cHN9/25xe/9wc33/cHJ5/3N2f/9zdn//
+eHqA/3N2fv9vcnr/bnB3/3R2ff9wcnn/c3V8/3V3ff90dnz/c3Z9/29xef9tb3f/c3Z//3Byef9sbnX/
+cHN9/25xe/9zdn//cHN9/3d5f/9ucXv/cHJ5/29xdf9wcnn/cHJ5/3V4gf9ucHf/c3Z//3V3ff91d33/
+amxz/25wd/9wcnn/dnh8/3l7gf9zdXz/bW9z/2xudf9zdXz/bG51/2xudf9zdXz/bG95/3Byef9wcnn/
+c3V8/25wd/9zdXz/cHJ5/3N1fP9ucHf/Z2p0/2xvef9sbnX/bnB3/21vc/9ucHf/cHJ5/3V3ff9qbXf/
+bnB3/2ptd/9ucXv/Zmlz/3N1fP9vcXX/bnB3/3V3ff9wcnn/am13/2xudf9ucXv/am13/3Bzff9ucXv/
+bG51/21vc/9ucXv/cHN9/2xudf91d33/bW9z/2xudf9sbnX/dXd9/2psc/9qbHP/bW9z/3V3ff9tb3P/
+bG95/2xudf9qbXf/bG51/3V3ff9ucHf/bnB3/3Bzff9vcXX/bG95/2xvef9vcXX/cHN9/3V3ff9sb3n/
+dXd9/25wd/9ucXv/c3Z//2ptd/9sb3n/bG51/3N1fP9nanT/gIKG/3Z4fP9vcXX/dXiB/25xe/9qbXf/
+c3Z//3Bzff9sbnX/bG51/25wd/91eIH/c3V8/25xe/9sb3n/bnF7/2xvef9zdn//c3Z//3V4gf93eoP/
+cHN9/3Byef9ucHf/cHN9/3d6g/9wc33/cHN9/3N1fP9ucXv/bnF7/3l7gf93eX//eXuB/3l7gf9ucXv/
+dnh8/3Byef9zdXz/bnB3/25wd/9wcnn/bnF7/2xvef9wc33/bnF7/2xudf9ucHf/bnB3/25wd/9vcXX/
+cHJ5/3V3ff95e4H/bnB3/25wd/9wc33/bnF7/3Bzff95e4H/foCG/3d5f/92eHz/fn+D/36Ahv9zdXz/
+e32D/3+Bh/95fIb/e36H/3N2f/9+gIb/eHl9/3V3ff97fYP/d3l//3l7gf94eX3/e32D/3d6g/9+gIb/
+c3V8/3d6g/9ucXv/Z2p0/29xdf93eX//c3Z//3l7gf94eoD/dXiB/3R2fv9qbXf/aGty/2dqcf9qbHP/
+ZGdx/25wd/9nanH/Z2p0/2xvef9qbXT/aWty/3Fzev9qbHP/bnF7/21vc/9sbnX/dnh8/3N1fP9ucHf/
+cHJ5/3Byef9zdXz/bnB3/25wd/9ucHf/b3F1/25xe/9sb3n/bG95/25xe/9ucXv/c3Z//3N2f/9wc33/
+eXuB/3N2f/9wc33/fX6B/3l7gf9+gIb/e32D/3d5f/91d33/dXd9/3V4gf93eoP/d3qD/3N2f/93eoP/
+d3qD/3t+h/97fof/eHuC/3R3gP93eoL/eXuB/3l7gf93eX//dXh+/3R2fP9ucXv/bnB3/25xe/9wcnn/
+amxz/3Byef9sbnX/c3Z//3V4gf93eX//c3Z//3N2f/9ucXv/cHN9/25xe/93eX//bG95/3Byef9zdn//
+dXiB/25xe/9wc33/dXiB/3t9g/9/gYf/d3qD/3Bzff91eIH/d3qD/3Bzff91eIH/d3qD/25xe/9sb3n/
+cHN9/3Bzff9ucHf/cHN9/3N2f/91eIH/c3Z//3N1fP9zdn//cHJ5/3Bzff9sb3n/bnB3/3N1fP9zdXz/
+b3F1/3Byef9wcnn/c3V8/2xudf91d33/cHJ5/25wd/93eX//c3V8/29xdf9ucHf/cHN9/2xvef91d33/
+c3V8/2ptd/9sbnX/bnF7/3V3ff9sbnX/bnF7/2xudf9qbXf/bG51/3N1fP9kZ3H/am13/2xudf93eX//
+amxz/2xvef9qbXf/ZGdx/2xudf9sb3n/Z2p0/2psc/9qbXf/amxz/2ptd/9sbnX/amxz/2xvef9zdXz/
+amxz/25xe/9qbXf/am13/2xvef9wcnn/bnF7/25xe/93eX//cHJ5/4GEjf97fYP/d3qD/3l7gf91eIH/
+bG95/3l8hv97fYP/cHN9/25xe/9sb3n/d3qD/3N1fP9ucXv/dXiB/3N2f/9wc33/c3Z//3V4gf93eoP/
+eXuB/3Bzff9ucXv/bG95/2ptd/91d33/bnB3/3N1fP9ucHf/bG95/25xe/91eIH/d3l//3d5f/93eX//
+bnF7/3d5f/9wc33/dXiB/2xvef9ucXv/dXiB/3N2f/91eIH/eXuB/3N2f/9ucXv/bnF7/3Bzff9zdXz/
+cHJ5/3N2f/95e4H/d3qD/25wd/9ucHf/bnF7/3Bzff9wc33/dXd9/3d5f/9wcnn/bnB3/25xe/9zdn//
+bG95/2xvef9wc33/bG95/3Byef9nanT/bnF7/25wd/9sb3n/dXd9/3Bzff9wcnn/am13/3Bzff9zdXz/
+dnh8/29xdf9zdXz/am13/2Zpc/9qbXf/c3V8/3Byef9zdXz/dXd9/3J0e/92eH3/bW90/2xudv9tb3P/
+bG95/2xvef93eX//c3Z//3d6g/90d4D/bXB6/25wef90dn3/b3F2/3V3ff9sbnX/amxz/3V3ff9zdXz/
+cHJ5/3Bzff9sb3n/bnF7/25wd/9ucHf/b3F1/2xudf9sbnX/bG51/29xdf9sb3n/bnF7/3Bzff9ucXv/
+cHJ5/3V4gf9zdn//c3V8/3V4gf9zdn//d3qD/3V4gf9wc33/cHN9/3Byef9wc33/c3Z//3N2f/9sb3n/
+bnF7/3Bzff92eH7/c3Z//29yfP9ucXr/c3Z//3N2f/91d33/c3Z//3R2fP9zdoD/cHN9/3Bzff91eIH/
+c3Z//3Byef9wc33/cHJ5/3N1fP9wc33/c3V8/3V3ff9wcnn/bnB3/3Byef9ucHf/dXd9/2ptd/9ucXv/
+bG95/25xe/9maXP/amxz/2xvef9wc33/dXiB/2ptd/9sbnX/bG95/2xvef9sbnX/c3V8/3N1fP9sbnX/
+am13/2xvef9sbnX/Z2p0/25xe/9wc33/dXd9/25wd/9vcXX/bnB3/2xvef9ucXv/cHN9/25xe/9zdn//
+dXiB/25wd/9wc33/cHN9/3N2f/9sb3n/d3qD/3Bzff9sb3n/eXyG/3Bzff9vcXX/b3F1/3N1fP9qbHP/
+cHN9/3Bzff9nanT/am13/2ptd/9wc33/amxz/2ptd/9nanH/Zmlz/2dqcf9maXP/YGNs/2Rncf9nanH/
+c3V8/2xudf9sb3n/amxz/2Zpc/9qbXf/bnF7/2xudf9tb3P/cHJ5/25wd/9ucXv/bnF7/3Byef9ucHf/
+cHN9/25wd/91eIH/bnF7/25xe/91eIH/dnh8/3N2f/91eIH/fn+D/3h5ff+Ji5H/fn+D/3l7gf9+f4P/
+e32D/3N1fP9+f4P/foCG/3d5f/91d33/cHN9/3l7gf91d33/cHN9/3N2f/9wc33/bnF7/3V4gf9zdn//
+dXiB/3V4gf9zdn//c3Z//3Byef9ucXv/c3Z//25xe/9ucXv/bnB3/25wd/9qbXf/dXd9/3d5f/91d33/
+d3l//25wd/91d33/bnB3/3Z4fP9sbnX/c3V8/3V3ff9wcnn/cHJ5/3Z4fP9zdXz/b3F1/25wd/9wcnn/
+b3F1/21vc/9zdXz/dXd9/3d5f/9qbXf/bG51/25xe/9sbnX/dXd9/3V3ff93eX//am13/2psc/9ucXv/
+am13/2Jlbv9qbHP/am13/2dqcf9maXP/XWBq/2dqcf9kZ3H/Z2p0/3Bzff9qbXf/Z2px/2Rncf9sb3n/
+bG95/3Bzff9qbHP/c3V8/2xudf9maXP/Z2p0/3Bzff9sbnX/c3V8/3V3ff9xdH3/cnV+/2xudv9tb3b/
+bG51/2ptd/9ucHf/dnh8/25wd/9wcnn/bnB3/29xef9wcnn/dXh+/3Bzff95e4H/cHN9/2xvef95e4H/
+c3Z//3V4gf9zdn//cHN9/3N1fP9ucHf/cHJ5/3Byef9wcnn/cHN9/3Byef9sb3n/cHN9/25xe/9wcnn/
+bnB3/21vc/9wcnn/cHJ5/2xudf9zdXz/bG51/25xe/9wc33/bW9z/29xdf9ucHf/bnB3/3N1fP91d33/
+bG95/3Byef9sb3n/dHZ9/3R3f/9ucXn/bnB3/25xe/91d33/dXd9/3N2f/91eID/eHqA/3J0e/93eYD/
+foCG/3l8hv95e4H/e36H/3l7gf9zdn//c3Z//3V3ff93eX//bnF7/25xe/9wc33/dXiB/3V4gf9vcXX/
+cHN9/3Bzff9zdn//bG51/29xdf9wcnn/dnh8/3l7gf9wcnn/bnF7/3N2f/91eIH/cHJ5/3V4gf93eoP/
+bnF7/3N2f/9zdn//c3Z//3Bzff93eoP/eXyG/31+gf95e4H/c3Z//3V4gf9zdXz/c3Z//3N2f/9zdXz/
+dXiB/3t9g/92eHz/eXuB/3d5f/95e4H/dXd9/3t9g/93eoP/c3Z//36Biv91eIH/bnF7/3Byef93eoP/
+cHN9/3l7gf93eoP/bG95/2xvef9wc33/dXd9/2xvef9zdn//bG95/2xvef9zdXz/cHJ5/2dqcf9qbHP/
+bW9z/3V3ff9qbXf/c3V8/25wd/9sb3n/cHN9/3V4gf9sb3n/bnF7/2xvef9ucXv/bnF7/3Byef9ucXv/
+c3Z//3l7gf93eoP/eXyG/3d5f/93eX//fX6B/2ptd/9sbnX/am13/3Bzff9maXP/e32D/3Bzff9tb3P/
+c3V8/2xvef9nanT/bnF7/25xe/9qbHP/bW9z/2psc/9ucXv/bG51/2Zpc/9sb3n/am13/2Rncf9qbXf/
+am13/2dqdP9nanT/Z2px/2dqcf9nanH/ZGdx/2dqdP9maXP/Zmhu/2Jlbv9iZW7/ZGZs/25wd/9zdXz/
+cHN9/3N1fP9nanH/bnF7/2dqcf9wc33/Z2p0/2ptd/93eX//bnF7/3Byef91d33/bnB3/25wd/9vcXX/
+cHJ5/21vc/9ucHf/cHJ5/3Z4fP95e4H/bG51/25wd/9zdn//bG51/3h5ff91d33/d3l//3Byef9qbHP/
+c3V8/25xe/9kZ3H/am13/2xvef9nanH/Z2p0/2BjbP9nanH/YmVu/2Jlbv9nanT/am13/2dqcf9kZ3H/
+bnF7/3Byef94eX3/bW9z/3V3ff9ucHf/Zmlz/2Zpc/9zdn//cHJ5/3V4gf94eoD/c3Z//3J1f/9tcHj/
+bW92/2xudf9sbnX/bG51/3N1fP9wcnn/cHJ5/25wd/9vcnz/bnB3/3N1fP9sbnX/c3V8/21vc/9sbnX/
+eHl9/3N2f/91d33/bG95/2xvef9ucXv/b3F1/2xudf9vcXX/b3F1/21vc/9tb3P/b3F1/3N1fP9sbnX/
+bG95/21vc/9ucHf/cHN9/3Byef9vcXX/eHl9/25wd/9zdn//dXd9/21vc/9sbnX/am13/2xudf9ucXv/
+bnF7/21vc/9sbnX/bnB3/3V3ff9wc3v/bnB3/25wdP9sb3n/c3Z//3V4gf9ucXv/dHZ8/3V2ev9ucHf/
+a253/3N2f/9zdXz/dXd9/3V4gf9zdXz/c3Z//3d5f/91eIH/d3l//3N1fP9ucHf/cHJ5/3Bzff9sb3n/
+amxz/2ptd/9wcnn/bnF7/2Rncf9sbnX/bnF7/3Bzff91eIH/bG95/25xe/9wc33/bnF7/2ptd/9wc33/
+cHN9/2ptd/9sb3n/am13/2xudf9maXP/cHN9/25xe/9wc33/bG95/2xudf9sbnX/amxz/2xudf9sbnX/
+amxz/2ptd/9ucXv/Z2p0/2xudf9nanT/amxz/2BjbP9ucXv/am13/2xudf91d33/bnF7/2xudf9sbnX/
+cHN9/2xudf9zdXz/c3V8/25wd/9ucHf/dXd9/3Z4fP9wcnn/c3Z//2xvef9sb3n/cHN9/25xe/9sb3n/
+cHJ5/3N1fP97fYP/cHN9/3V4gf9wcnn/bG95/25xe/9zdXz/amxz/21vc/9ucHf/bnB3/2xudf9sbnX/
+bnF7/2xudf9wc33/bG95/3Byef9sbnX/cHJ5/3V3ff9ucHf/cHJ5/25xe/91d33/am13/3+Bh/91d33/
+bnB3/3Z4fP9ucHf/amxz/2xvef9wc33/Zmlz/2psc/9maXP/am13/2dqdP9nanT/am13/2Zobv9iZW7/
+Z2px/2ptd/9maXP/ZGdx/2Zobv9kZ3H/Zmhu/2Zobv9maXP/ZGZs/2Rncf9iZW7/ZGdx/2Zobv9ucHf/
+cHJ5/2Zpc/9wc33/Zmhu/25xe/9kZ3H/am13/2BjbP9kZ3H/bnB3/2ptd/9sb3n/bnF7/2ptd/9qbXf/
+am13/2xvef9qbHP/bG51/21vc/91d33/dXd9/25wd/9vcXX/c3Z//2xvef91eIH/d3qD/3l8hv9wc33/
+bnF7/3l7gf91eIH/bnF7/3N2f/97fYP/c3V8/3V4gf9sb3n/bnF7/2ptd/9ucHf/dXiB/3V4gf9ucXv/
+am13/3V4gf95e4H/e32D/3Bzff93eX//cHJ5/25wd/9ucHf/dXiB/3N2f/95fIb/e32D/3l7gf9ydX//
+bnF7/25wd/9sb3n/bnB3/2xvef9wc33/bnF7/3Byef9vcXn/c3V9/29yev91eH7/bG95/3V4gf9ucXv/
+bG51/3Z4fP9wcnn/dXd9/2xudf9vcXX/bnB3/29xdf9qbHP/bG51/2xudf9tb3P/bG51/21vc/9wc33/
+cHJ5/3Byef9wcnn/cHJ5/3V4gf9ucXv/bG95/3l7gf9ucXv/c3Z//25xe/9ucHf/cHJ5/25xe/9ucHf/
+bnF7/3Bzff9ucHf/cHJ5/3Byef92eHz/c3V8/25wd/9sbnP/cHJ5/3Bzff9ucXv/am13/29yfP9xdHv/
+a211/2psdP9wcnn/bG51/2xudf9sbnX/bW9z/3Z4fP92eHz/bnB3/3Z4fP9wcnn/am13/25xe/9zdXz/
+bnF7/2xudf9qbXf/bnF7/3N1fP9nanH/cHJ5/3Byef91d33/e32D/3Byef91d33/c3V8/3Byef9tb3P/
+cHJ5/3N1fP9ucHf/bnB3/25wd/9vcXX/amxz/3Bzff9wc33/cHN9/2ptd/9sbnX/bG95/2dqcf9wcnn/
+bnB3/25xe/9wcnn/dXd9/2xudf9ucHf/c3Z//2xvef9sb3n/cHN9/25xe/9sb3n/d3qD/3Byef9ucHf/
+bW9z/3Byef9sbnX/c3V8/3Bzff9ucHf/bnF7/3V4gf95e4H/c3Z//3d6g/9ucXv/b3F1/3N1fP9ucHf/
+Zmhu/2ptd/9qbXf/d3l//2xudf9ucXv/bG51/2psc/9wcnn/c3V8/25wd/9ucHf/bG95/3Bzff9wcnn/
+bG95/3N1fP9ucHf/dXd9/25wd/9wcnn/am13/2xudf91d33/d3l//3t9g/9+f4P/fn+D/3l7gf+IipD/
+foGK/3l7gf9+gYr/foCG/3N1fP97fYP/e32D/3V3ff93eX//eHl9/3l7gf91d33/dXd9/3d6g/9zdXz/
+bG95/25wd/91d33/cHJ5/2xvef9sb3n/Z2p0/2psc/9qbHP/am13/2dqcf9qbXf/Zmlz/2Rncf9maG7/
+cHJ5/3V3ff9qbXf/c3V8/2Zobv9kZ3H/ZGdx/25wd/9kZ3H/Z2p0/3Bzff9ucXv/cHN9/3Bzff9ucHf/
+amxz/29xdf9wcnn/bnB3/2xudf9tb3P/dnh8/3V3ff9wcnn/b3F1/3Byef9wcnn/c3Z//3N1fP91eIH/
+bG95/2ptd/91d33/dXd9/2xudf9ucHf/dnh8/2xudf9wcnn/bG51/2xudf9maXP/am13/3N1fP9zdXz/
+bG51/2dqcf9wcnn/c3V8/3Z4fP9qbXf/dXd9/2ptd/9maXP/bG51/2Zpc/9maG7/Zmlz/2ptd/9sb3j/
+bW92/21vdv9tb3f/bnB3/2ptd/9nanT/cHN9/3Bzff9sb3n/b3F4/29yfP9rbnj/cXR9/2hrdf9ucXv/
+bG95/2ptd/9zdXz/bnF7/3Bzff9qbXf/am13/2xvef9vcXX/bG51/2xudf9sbnX/bW9z/2xudf9ucHf/
+cHJ5/21vc/9sb3n/am13/3Byef9zdXz/bG95/2ptd/9zdXz/bG95/3N1fP9sbnX/bnB3/25wd/9sb3n/
+bnB3/25xe/9zdn//bnB3/3Byef9wcnn/c3V8/3Fzev9ucXn/bG95/3Bzff9zdn//cHN9/25wd/9wc33/
+cXN6/2xud/9sbnX/cHN9/25wd/9wcnn/bnB3/25wd/91d33/c3V8/2xvef9zdXz/bnF7/25xe/9qbXf/
+bnF7/25xe/9qbHP/bG51/2ptd/9qbXf/Zmlz/2xvef9sb3n/bG95/3N2f/9sb3n/bnF7/25xe/9sb3n/
+bG95/25xe/9wc33/bG95/25xe/9sbnX/bG51/2dqdP9zdXz/dnh8/3Z4fP9wc33/bnB3/3Bzff9sb3n/
+bG95/29xdf9wcnn/dXiB/3d5f/9ucXv/c3V8/3N2f/9ucXv/bG95/3V4gf9zdn//cHN9/3l8hv91eIH/
+cHN9/3Byef93eoP/bnF7/3V4gf9zdn//cHJ5/3Byef91eIH/eXuB/3N2f/91eIH/c3Z//3Bzff92eHz/
+dXd9/2Zobv9ucHf/cHJ5/3V3ff9sbnX/bnF7/2xudf9nanT/cHJ5/3N1fP9sbnX/bnB3/25wd/9zdXz/
+bnB3/3Bzff9wc33/bnB3/3V4gf9wc33/dXiB/3N1fP91eIH/e32D/3l7gf95e4H/e32D/3t9g/91d33/
+g4WM/3d6g/9wcnn/dXiB/3V4gf9nanT/dXiB/3d6g/9wc33/c3V8/3N1fP9zdn//bG95/25wd/9ucXv/
+bG95/29xdf9sbnX/dXd9/3Bzff9sb3n/bnB3/25wd/9ucHf/b3F1/3N1fP9ucHf/dXd9/2ptd/9nanH/
+bW9z/3d5f/95e4H/cHJ5/3t9g/9ucHf/c3V8/21vc/91d33/bG51/3Byef93eX//bnF7/3N1fP9wcnn/
+bnB3/2dqcf9sbnX/bG95/2psc/9sbnX/Z2px/2xvef9zdXz/Z2px/2Zobv9qbXf/ZGdx/2xvef9sb3n/
+dXd9/2ptd/9qbHP/bnF7/25xe/9maXP/bG51/3N1fP9qbHP/cHJ5/2psc/9qbHP/ZGdx/2psc/9wc33/
+cHN9/2ptd/9nanT/bG95/25xe/91d33/bG51/3d5f/9ucHf/bG51/2psc/9wcnn/bG51/3Byef9wcnn/
+dHZ8/21vdv9tcHn/bG51/25wd/9sbnX/Zmlz/2xvef9sb3n/am13/25xe/9vcnn/bXB3/3V3fv9ucHf/
+cHN9/3Byef9sb3n/d3l//3N2f/93eX//bnF7/2xvef9wc33/bnF7/2xvef9ucXv/cHJ5/3N1fP91d33/
+c3Z//3d6g/9zdXz/cHJ5/25xe/91eIH/foCG/3V4gf9wc33/d3qD/3N2f/95fIb/c3Z//2xvef9sb3n/
+bnF7/3Byef9wc33/dXiB/25xe/9ucXv/cHJ5/3N2f/9ydX7/cHJ5/2xvef9ucXv/c3Z//3Bzff9wc33/
+cnV+/3J0ev9ucHn/a254/3Bzff9vcXX/b3F1/25xe/9wc33/dnh8/3N1fP9ucHf/d3l//3Byef92eHz/
+bnF7/3N2f/95e4H/cHJ5/25xe/9zdn//cHN9/25xe/91eIH/d3qD/3d6g/97fof/dXiB/3t9g/99foH/
+e32D/3d6g/93eoP/eXuB/3V4gf91eIH/dXiB/3V3ff92eHz/eXuB/3t9g/9+f4P/eXuB/3Bzff95e4H/
+cHN9/3Bzff9wcnn/bnF7/3V4gf95e4H/cHN9/3Bzff93eoP/bnB3/2ptd/9ucXv/bnB3/2xvef91eIH/
+cHN9/2xvef9vcXX/c3V8/25wd/9ucHf/c3V8/2xudf9sbnX/dXd9/3V3ff9wc33/dXiB/3V4gf9zdn//
+eXuB/3N2f/9maXP/bnB3/3Bzff95e4H/dXiB/3l7gf9zdn//c3Z//3t9g/97fYP/c3V8/3Z4fP93eoP/
+eXyG/3d5f/97fYP/foCG/3h5ff9+f4P/e32D/35/g/91d33/eXuB/36Ahv9sb3n/am13/3Bzff92eHz/
+bnB3/3l8hv9wc33/bnB3/25xe/9ucXv/Zmlz/3V4gf97fYP/c3V8/3Byef9zdXz/d3qD/3V3ff93eX//
+foCG/3Z4fP91d33/c3Z//3t9g/97fYP/d3qD/3V4gf91d33/dXd9/3N2f/95e4H/d3qD/3d6g/9sb3n/
+bG95/3Byef95e4H/e36H/3Bzff95fIb/cHJ5/3V4gf9zdXz/c3Z//29xdf9zdXz/dXiB/3Bzff93eX//
+cHJ5/2xvef9qbHP/bnB3/25wd/9tb3P/bW9z/25wd/9zdXz/dXiB/2xvef9ucHf/c3Z//3Byef91d33/
+c3V8/3d5f/9wcnn/bW9z/3N1fP9zdXz/bG51/25wd/91d33/bW9z/3Bzff9sb3n/bnB3/2psc/9ucHf/
+dnh8/3N2f/9vcXX/amxz/2xvef9wc33/c3V8/2xudf93eX//bG51/2xudf9qbHP/dXiB/3N2f/9zdn//
+cHN8/3N1fP9tb3b/cXN6/25wd/9ucHf/b3F1/25wd/9ucXv/c3Z//3Bzff92eYL/dHZ+/3Fzev93eX//
+bW92/3V3ff9wcnn/bnB3/3N1fP9ucXv/cHN9/2xvef9sbnX/cHN9/2xudf9kZ3H/am13/2ptd/9nanT/
+Zmlz/2ptd/9wcnn/bG51/21vc/9ucHf/bnF7/3V3ff9sb3n/bG95/3N1fP9vcXX/dnh8/25wd/9sbnX/
+am13/25wd/9vcXX/b3F1/3Byef9vcXX/dXd9/3Byef90dn3/cXN9/25wd/9tcHn/bXB6/25xe/9ucHf/
+bnB3/3Byef9wc3r/bW94/2ptd/9zdXz/b3F1/21vc/9ucHf/bnF7/3V3ff9sb3n/bnB3/3V3ff9sb3n/
+c3V8/3Byef9zdXz/c3Z//25wd/9ucXv/bG95/25wd/9wcnn/cHN9/3N1fP9ucXv/d3l//25xe/9wc33/
+dXd9/3N2f/9wcnn/d3qD/3d5f/9zdn//c3Z//3Byef9wcnn/bnB3/25xe/9wc33/dXd9/2xudf9tb3P/
+c3V8/2dqdP9sbnX/bG51/21vc/9wcnn/c3V8/2Rncf9qbXf/bnF7/2xudf9tb3P/am13/2xudf9qbHP/
+dXd9/25xe/9qbXf/bG95/25xe/9sbnX/cHJ5/3V3ff9ucHf/cHJ5/3d5f/93eX//c3Z//3V4gf91eIH/
+bG95/3V3ff91d33/Zmhu/25wd/91d33/dnh8/3Byef9wcnn/b3F1/2xudf9wcnn/cHJ5/2Rncf9nanT/
+am13/2ptd/9nanT/bG51/2Zpc/9maG7/bG95/2dqdP9qbXf/Z2px/2dqcf9qbXf/c3V8/3Byef9wcnn/
+dnh8/2xudf93eoP/am13/21vc/9qbXf/bG51/2psc/9zdXz/d3l//25wd/9ucHf/b3F1/25wd/9qbXf/
+bG51/3V3ff9qbHP/amxz/29xdf9wcnn/c3V8/2xvef9ucHf/bG51/2ptd/9sbnX/c3V8/3N1fP9wcnn/
+amxz/2xudf9qbXf/c3V8/3V3ff9qbXf/d3l//2xudf9ucHf/bG51/2xvef9sbnX/cHJ5/3Z4fP9zdXz/
+c3V8/2ptd/9sbnX/amxz/2xudf9sbnX/bW9z/21vc/9sbnX/cHJ5/3V3ff9sbnX/bG51/3Z4fP9sb3n/
+dXd9/3Byef93eX//bnF7/29xdf91d33/cHN9/2xvef9wcnn/eHl9/3Byef95e4H/c3Z//25wd/9qbXf/
+bnB3/3d5f/91eIH/bnF7/25wd/9wc33/dXiB/3d5f/9ucHf/dXiB/25wd/9sb3n/Z2p0/2ptd/9sb3n/
+bnF7/25xe/9wc3z/bnB3/29yev9ucHf/b3F1/2xudf9qbXf/bnF7/3N2f/9wc33/bXB6/3F0ff9sbnf/
+cXR9/2ttdP9qbXf/Z2p0/2psc/9sb3n/bnF7/2xvef9ucHf/bG51/25wd/9sbnX/amxz/25wd/9vcXX/
+bnB3/2ptd/9ucHf/bnF7/2xvef9sb3n/cHN9/25xe/95e4H/cHN9/3Byef91eIH/cHN9/3l7gf9wc33/
+bG95/3Byef9ucHf/bnB3/21vc/9wcnn/bW9z/3Byef9ucHf/c3V8/2xudv9sbnX/a211/25xev9ucXv/
+bnB3/3Byef9ydHv/b3J7/25wef9ucHf/c3V8/25wd/9vcXX/b3F1/3Byef9zdXz/bG51/3N1fP94eX3/
+bnB3/3V3ff9ucHf/bnB3/3d5f/9wcnn/c3Z//3V4gf91eIH/bG95/3N2f/9wcnn/bnB3/3d5f/9sbnX/
+cHJ5/3V3ff91d33/b3F1/3N1fP92eHz/c3V8/3Byef9ucHf/bnB3/21vc/9sbnX/c3V8/3d5f/9ucHf/
+am13/25xe/9kZ3H/bG51/2ptd/9sbnX/bG95/3N1fP9maXP/bG51/2xvef9sb3n/bW9z/2xudf9ucHf/
+bnB3/3V4gf9ucXv/bnB3/25xe/9wcnn/bnB3/3Byef91d33/bG51/2xudf92eHz/d3l//3N1fP9zdXz/
+c3V8/25wd/91d33/c3Z//2dqcf9ucHf/dXiB/3t9g/91eIH/d3qD/3Bzff9ucHf/c3Z//3N2f/9sb3n/
+bnB3/3N1fP9ucHf/bnB3/3Bzff9ucXv/bnF7/3Z4fP91d33/c3V8/25wd/9tb3P/cHJ5/25wd/9sb3n/
+bnF7/3Z4fP9vcXX/e32D/25wd/9qbXf/am13/25wd/9nanH/cHJ5/3d6g/9sb3n/cHJ5/3Byef9wc33/
+bnB3/25xe/91eIH/am13/2xvef9ucHf/bnF7/3Bzff9sb3n/bnF7/29xdf9ucHf/bW9z/3N1fP9wcnn/
+c3V8/2xudf9ucHf/am13/3N1fP92eHz/am13/3V3ff9qbHP/am13/2xudf9qbXf/amxz/2xvef91d33/
+cHN9/3V3ff9sb3n/bG51/2dqdP9qbHP/bG51/2xudf9sbnX/bG51/2ptd/9wc33/amxz/2Rncf9ucXv/
+Z2p0/25xe/9sb3n/dXd9/2ptd/9qbXf/cHN9/25xe/9nanT/bG95/3V3ff9sbnX/cHN9/2ptd/9nanT/
+ZGdx/2xudf9zdXz/cHN9/25wd/9vcXX/bG95/3V3ff94eX3/bnB3/3l7gf9ucXv/bnB3/2dqdP91d33/
+bnB3/25wd/9wcnn/bnF7/21veP9wcnn/b3J8/3Byef9ucXv/am13/3Bzff9zdn//bG95/3Byef9ydH3/
+cHJ7/3V2e/9vcXf/cHJ5/25wd/9sbnX/cHJ5/3Bzff9wcnn/bnB3/25wd/9wcnn/bG51/2Rncf9sbnX/
+bG51/2dqdP9nanT/bG51/25wd/9ucHf/b3F1/3Bzff9wcnn/eHl9/3Byef9sb3n/cHN9/3Bzff93eX//
+bG95/2xvef9ucXv/bG95/25wd/9vcXX/cHJ5/2xudf9ucHf/cHJ5/3N2f/9vcnz/b3J8/25xev9wc33/
+cHN9/3Byef9ucHf/bnB3/3Fzev9tb3b/bW91/25xe/9qbXf/bG51/2xudf9sb3n/c3V8/2ptd/9zdXz/
+dXd9/25wd/91d33/b3F1/25xe/93eX//bnB3/3Bzff9ucXv/c3Z//2xvef91eIH/bnF7/3Bzff95fIb/
+d3qD/3l8hv97fof/e32D/3V3ff95fIb/e32D/3N2f/9zdn//bnF7/3Bzff9wcnn/bG95/25xe/91eIH/
+bnB3/3Byef91d33/bG95/3Byef9sb3n/bnB3/3Bzff91d33/amxz/25wd/9wcnn/bnB3/25wd/9ucXv/
+bnF7/2ptd/95e4H/bnF7/25xe/9zdn//cHN9/3Byef9wc33/d3l//3N1fP9wcnn/dXd9/3V4gf9wcnn/
+cHN9/25xe/9ucXv/dXd9/3V4gf9maXP/am13/3Bzff94eX3/c3V8/3N1fP9vcXX/b3F1/3Byef91d33/
+bnB3/2ptd/9wcnn/cHJ5/21vc/9zdXz/bG95/2ptd/91d33/c3V8/3V3ff9qbXf/am13/2xudf91eIH/
+d3qD/3l8hv9+gIb/c3Z//4GDiv9zdn//c3Z//3Bzff9ucXv/am13/3N1fP95fIb/bnB3/25wd/9ucHf/
+cHJ5/2xudf9sbnX/c3V8/2dqcf9sbnX/bG95/25xe/9zdn//bG95/2xvef9ucHf/bnB3/25wd/9wc33/
+cHN9/3N2f/9ucHf/amxz/29xdf91d33/eHl9/2xudf92eHz/bW9z/25wd/9ucHf/bnF7/25wd/91d33/
+dXiB/3V3ff92eHz/bnB3/2xudf9nanH/bnB3/2xudf9vcXX/bG51/2xudf9qbXf/bnF7/2ptd/9qbXf/
+c3V8/2psc/92eHz/c3V8/3V3ff9wcnn/bnB3/3N2f/9wc33/am13/2xvef95e4H/bnB3/3Z4fP9ucHf/
+bG51/2psc/9vcXX/dXd9/3N1fP9sb3n/cHJ5/25xe/95e4H/eXuB/3Byef93eX//bnB3/29xdf9nanH/
+am13/2Rncf9maG7/Zmlz/2tueP9oa3P/am11/2ptd/9qbXf/bG51/2Rncf9qbXf/c3V8/2xudf9qbHP/
+b3F6/2xud/9zdXr/bnB3/3Byef9wcnn/bnB3/3N1fP91eIH/cHN9/3N1fP9sb3n/cHN9/25wd/9nanT/
+b3F1/29xdf9ucHf/bG51/2xvef9ucHf/bG51/2ptd/9ucXv/am13/3Z4fP9sbnX/bW9z/3Byef9wcnn/
+dXd9/2xudf9nanT/bG95/2ptd/9nanT/bG51/25xe/9ucHf/cHJ5/2ptd/9vcnz/bW92/2xvd/9sb3n/
+bG95/2dqdP9nanT/Z2p0/2ttdP9sb3n/bXB4/2xveP9zdn//bG95/2xvef9ucHf/cHN9/3N1fP9qbXf/
+dXd9/3d5f/9qbXf/c3V8/2xudf9tb3P/d3l//2ptd/9ucXv/bG95/3Bzff9qbXf/bnF7/2psc/9maXP/
+cHJ5/2ptd/9qbXf/cHN9/25xe/9sbnX/cHJ5/3N1fP9ucHf/bnB3/2xvef9wcnn/bG51/2xvef9wc33/
+dXiB/2xvef9ucXv/d3l//2xvef9ucXv/bnB3/3Bzff9zdn//dXiB/2xvef9wc33/c3Z//25wd/9ucHf/
+cHJ5/25wd/9nanH/dXd9/25wd/9tb3P/bG51/25wd/9tb3P/bG51/2xvef9sbnX/bW9z/3h5ff91d33/
+cHJ5/3N1fP9wcnn/cHJ5/3Z4fP9wcnn/Z2px/2xudf9zdn//dXd9/25xe/9zdn//cHN9/3Bzff91eIH/
+eXuB/3N1fP9ucXv/d3qD/3t9g/92eHz/fn+D/3l7gf97fYP/fX6B/3t9g/97fYP/c3V8/3Bzff91eIH/
+c3V8/3Byef9zdXz/dXd9/25wd/9+gYr/d3qD/3N1fP9zdXz/cHN9/2xvef95e4H/f4GH/3Bzff9zdXz/
+cHN9/3Bzff9ucHf/bG95/3N2f/9nanT/bnB3/3Byef91eIH/dXiB/3N2f/9zdn//c3V8/3Bzff9zdXz/
+c3Z//25xe/9zdn//bnB3/2xvef9ucXv/dnh8/3Z4fP9wcnn/dnh8/21vc/9zdXz/bG51/2xvef9tb3P/
+c3V8/3V3ff9ucXv/cHN9/2ptd/9nanT/XF9o/2Zpc/9qbXf/amxz/2dqcf9sbnX/bG51/3Bzff9nanH/
+Zmlz/25xe/9qbXf/c3V8/3V3ff91d33/bG51/2psc/9wc33/am13/2dqdP9qbXf/dXiB/25wd/92eHz/
+bnF7/25wd/9sb3n/b3F1/3N1fP9wcnn/bnB3/21vc/9sbnX/dXd9/3N1fP9tb3P/eHl9/29xdf9vcXX/
+Zmhu/3V3ff9ucHf/bG95/3Byef9xdH3/bnF7/3Fze/9ucHf/bnB3/29xdf9sbnX/c3V8/3N1fP9ucHf/
+b3F1/3J0ev9zdn//dnmD/3N2f/91eIH/bnF7/25xe/91eIH/eXyG/3d6g/91eIH/c3Z//3d6g/9wc33/
+bnF7/25wd/9sb3n/bG95/2xvef9zdn//dXiB/3Byef9sb3n/dXd9/3Bzff93eX//bnB3/2ptd/9wcnn/
+cHJ5/3Z4fP9ucHf/bG95/3N1fP9vcXX/am13/2xvef9zdXz/cHJ5/3N2f/9zdn//d3qD/3Bzff9xdH7/
+c3Z9/3J1fP9zdXz/bnB3/2xudf9sb3n/bnF6/21veP9tb3j/c3Z//2xvef9ucHf/bnB3/3N1fP94eX3/
+b3F1/3V3ff93eX//bnB3/3V3ff9ucHf/cHJ5/3V3ff9ucHf/bnF7/2xudf9ucXv/Z2p0/3Bzff9qbXf/
+am13/25xe/9sb3n/Z2p0/2xvef9qbXf/YmVu/2Rncf9maXP/Zmhu/2Zobv9maG7/Z2p0/2Rncf9maG7/
+Zmlz/25wd/9maG7/Zmhu/2xvef9gY2z/Zmlz/2Rncf9nanH/Zmlz/2Rncf9cX2j/Zmlz/2Zpc/9kZ3H/
+YmVu/2Zpc/9nanT/YmVu/3N1fP9nanH/Zmhu/2Zpc/9qbHP/Z2px/2xudf9sb3n/am13/2xudf9wc33/
+c3V8/25xe/9sb3n/am13/2ptd/9zdXz/bnB3/2Zobv9nanT/bnF7/3Bzff9sb3n/bG95/2ptd/9sbnX/
+bG95/2xvef9sbnX/Zmlz/2ptd/9ucXv/am13/3N1fP9sbnX/cHJ5/3Byef9zdXz/dXd9/2xudf9vcXX/
+c3V8/25xe/9wc33/bnF7/3Bzff9sbnX/e32D/3V3ff9ucHf/cHJ5/2xvef9nanT/dXd9/3l8hv9sb3n/
+b3F1/25wd/9ucHf/bnB3/25wd/9zdn//am13/25wd/9wcnn/c3Z//3N2f/9ucHf/cHN9/3Byef9wc33/
+bnF7/3V4gf9ucXv/dXd9/25wd/9qbHP/bnB3/3V3ff91d33/bnB3/3Z4fP9sbnX/c3V8/25wd/9sbnX/
+bG51/25xe/9zdXz/c3V8/3V3ff9zdXz/bG51/2RmbP9nanT/am13/2dqdP9sbnX/bG95/25wd/9ucXv/
+bG51/2dqdP9zdXz/bG95/3V3ff91d33/dXd9/2xudf9sbnX/dXd9/25wd/9vcXX/c3V8/3l7gf9sbnX/
+c3V8/2dqdP9nanT/Zmlz/2ptd/9ucXv/bG95/2xudf9qbXf/amxz/3Bzff9wc33/bG51/3N1fP9sbnX/
+bG51/2Jlbv93eoP/c3Z//3V4gf94e4X/eXuC/3V3ff9ydX3/a254/3Byef9tb3P/bnB3/3Byef9zdXz/
+bW9z/21vc/9xcnj/dHZ+/3l6f/94eoH/foCG/3d5f/95e4H/c3Z//3d6g/97fYP/dXiB/3V4gf9zdn//
+c3V8/3N1fP9zdXz/cHN9/2xvef9zdXz/d3qD/3N2f/9zdXz/bG95/3Bzff9wc33/d3l//3Byef9qbXf/
+cHJ5/2xvef91d33/bG51/25wd/91d33/bnB3/2psc/9ucHf/c3V8/2xvef9ucHf/bG51/3Byef9ucHf/
+cnR6/3N1e/9wcnn/dXd9/2ptd/9sb3n/am13/2tudv9qbXf/am13/3Bzff9sbnX/cHJ5/2xudf9qbXf/
+dnh8/21vc/9sb3n/c3V8/2xudf9wcnn/bW9z/3Byef93eX//bnB3/2xvef9sbnX/cHN9/2xudf94eX3/
+bnB3/25wd/93eX//dXd9/25xe/91eIH/dnh8/25wd/9wc33/dXd9/3N1fP9ucHf/bnF7/3l7gf9wcnn/
+bnF7/3N2f/93eoP/bnF7/25xe/93eX//cHJ5/25xe/9ucHf/bnF7/2xvef9ucXv/bG51/2xvef9wc33/
+b3F1/25wd/9wc33/bnB3/2psc/94eX3/bnB3/29xdf9ucHf/bG51/25wd/9ucXv/cHN9/3Byef9ucXv/
+dXiB/3l7gf95e4H/cHN9/3Bzff9ucXv/eHl9/3V3ff9nanH/bG51/3Byef91d33/b3F1/25wd/9tb3P/
+bG51/25wd/9ucHf/bG51/2dqdP9sb3n/am13/2Rncf9qbXf/bG51/3Bzff9qbXf/bG95/2xvef9kZ3H/
+Z2p0/3Bzff9zdXz/c3V8/3N1fP91d33/bnB3/3t9g/9zdn//cHJ5/3N1fP9wcnn/am13/3d6g/95fIb/
+cHN9/3Bzff9zdn//cHN9/3Byef9wcnn/d3qD/2xvef9zdXz/cHJ5/3V4gf95e4H/c3V8/3Bzff91d33/
+d3qD/3d6g/91eIH/d3qD/3d6g/91eIH/dXd9/3t9g/97fYP/e32D/3l8hv97fof/cHN9/3d6g/9wc33/
+c3Z//3N2f/93eoP/eXuB/3V4gf95e4H/dXiB/2ptd/9qbXf/cHJ5/25wd/9sbnX/bG51/2xudf9ucHf/
+c3V8/21vc/9nanT/cHN9/25xe/93eX//dXd9/3Bzff9qbXf/bG51/3N1fP9sb3n/bG51/25xe/91eIH/
+am13/25xe/9kZ3H/amxz/2Rncf9nanT/cHJ5/2ptd/9nanH/Z2p0/2Rncf9maXP/Zmlz/2Zobv9nanT/
+YmVu/2Zobv9cX2j/bnF7/2ptd/9ucHf/b3F4/2tueP9tb3f/am12/2dpb/9maXP/Zmlz/2Rncf9maXP/
+Z2p0/2dqcf9sbnT/a254/2tueP9wc3r/a253/25xe/9tb3P/bnF7/2xudf9sb3n/bnF7/2xudf9qbHP/
+am13/2Rncf9maXP/Z2px/2xudf9iZW7/Z2p0/2xvef9qbXf/amxz/2dqdP9sb3n/bnF7/3V3ff9wcnn/
+bnB3/3Bzff9wc33/e32D/3Bzff9ucHf/d3qD/3Bzff9sb3n/dXd9/3l8hv9zdn//d3qD/3N2f/93eoP/
+cXR9/3Z4fv9ydHv/dHZ9/3Z4fP9ucHf/cHJ5/3Bydv9wcnr/b3F4/25wd/91eIH/bnB3/25xe/9sb3n/
+cHJ5/3Z4fP9tb3P/am13/3N1fP9qbXf/bnF7/2dqcf9ucXv/dXd9/2xvef9ucXv/bG51/2xvef9qbHP/
+dXd9/2ptd/9sbnX/dnh8/3N1fP9sb3n/dXd9/25xe/9nanT/Z2p0/25xe/9sb3n/amxz/2psc/9wc33/
+am13/2xudf9wc33/dXd9/2psc/9qbHP/bnF7/2dqcf9sbnX/bW9z/25wd/9sbnX/bnB3/2xudf9qbXf/
+bnF7/21vc/9vcXX/dXd9/21vc/9qbHP/eXuB/25xe/9wc33/cHN9/2xvef9ucHf/cHJ5/2xvef9ucHf/
+bG95/25xe/91d33/dnh8/25xe/9sbnX/am13/3N1fP9ucXv/YmVu/2ptd/9sb3n/bnF7/2psc/9qbHP/
+Z2px/2dqcf9nanH/Z2px/2dqdP9maXP/am13/2dqdP9kZ3H/bG95/2psc/9wc33/bG95/3Bzff9zdXz/
+Z2px/21vc/9zdn//cHN9/3Z4fP91d33/c3Z//25xe/95fIb/c3Z//25wd/9ucHf/bnB3/2ptd/9zdn//
+e32D/25wd/9vcXX/cHN9/25xe/9ucHf/cHJ5/3V4gf9nanT/bnB3/25wd/93eoP/c3Z//2xvef9ucHf/
+bG95/3Bzff9wcnn/cHN9/2xvef9ucXv/bG51/2xudf9ucHf/bnF7/3N1fP9zdXz/dXd9/25wd/9wcnn/
+am13/2xvef9qbXf/cHN9/3Bzff9sb3n/cHN9/2xvef9iZW7/YGNs/2psc/9sb3n/Zmlz/2xudf9sbnX/
+bW9z/3N1fP9tb3P/amxz/3N1fP9ucHf/d3l//3V3ff9ucXv/am13/2ptd/9wc33/am13/2ptd/9ucHf/
+e32D/3Byef91d33/bG51/25wd/9ucHf/cHJ5/3V3ff9ucHf/amxz/25xe/9wcnn/bG95/25xe/9sbnX/
+cHN9/29xdf9sbnX/Z2px/2xvef9qbHP/am13/2xvef9tb3b/b3F5/29yev9tb3P/cHJ5/2xvef9sbnX/
+bG51/3N1fP9vcXX/a211/2xudv9vcXn/cnR7/25wd/9wcnn/bG51/2xvef9qbHP/am13/2xvef9sbnX/
+Z2p0/25xe/9nanT/am13/2xudf9qbXf/Zmlz/2ptd/9sb3n/bG95/2ptd/9qbXf/c3V8/3Byef92eHz/
+cHJ5/25wd/9sb3n/bG95/3N1fP9wcnn/bG51/3N1fP9qbHP/Z2px/2xudf9ucHf/bW9z/3Bzff9qbHP/
+bG51/25weP9xdHv/cXR8/25xe/91d33/b3F1/3N1fP9ucHX/bnB3/21vdf9rbXP/c3V8/2ptd/9sb3n/
+am13/2xudf91d33/bG51/2xvef91d33/bnB3/3Byef9sbnX/cHN9/3V4gf9wcnn/bG95/2ptd/9wcnn/
+b3F1/3h5ff9tb3P/bG51/3N1fP91d33/bnB3/3l7gf9zdn//bnF7/3Byef93eX//d3l//25xe/9wcnn/
+d3l//2xvef9sb3n/cHN9/3V3ff9ucHf/bnB3/3V3ff9ucHf/bG95/2xudf9wcnn/bnB3/3Byef9ucHf/
+bnB3/25xe/9qbXf/bW9z/3Bzff9qbHP/ZGdx/3N1fP9qbHP/am13/2xvef9nanT/amxz/2xudf9qbXf/
+bG51/2xudf9sb3n/dXd9/2xvef9ucXv/bG95/2xudf9zdXz/bG95/2BjbP9maXP/bG95/3Bzff9nanT/
+am13/2dqdP9qbHP/am13/2ptd/9qbXf/Z2p0/25xe/9sb3n/Zmlz/2xvef9sbnX/cHN9/2ptd/9zdXz/
+c3V8/2Rncf9sbnX/dXd9/3N2f/91d33/dXd9/3V4gf9ucXv/dXiB/3Bzff9ucHf/cHJ5/25wd/9sb3n/
+c3Z//3t9g/9sb3n/b3F1/25wd/9ucHf/b3F1/29xdf9zdXz/Zmhu/25wd/9sbnX/c3V8/3Bzff9qbXf/
+bnB3/2psc/9wcnn/am13/3Byef9sbnX/cHJ5/2xudf9tb3P/bG51/3Byef91d33/bnF7/3d5f/9ucHf/
+cHJ5/3Byef9ucHf/cHN9/3V3ff95e4H/dXd9/3V3ff9wc33/bG95/2ptd/9vcXX/bnB3/2ptd/9sb3n/
+bnB3/21vc/9zdXz/bW9z/2psc/91d33/am13/3V4gf94eX3/cHJ5/25wd/9ucHf/cHJ5/2xudf9qbXf/
+bG95/3N2f/9qbXf/bG95/2Rncf9nanT/Zmlz/3Bzff9wc33/am13/2dqdP9sb3n/bnF7/2xudf9ucXv/
+amxz/2xvef9sbnX/bnF7/2Rncf9zdXz/bG51/21vc/9sbnX/b3F4/3FzfP9vcnv/bnB3/3N2f/9zdn//
+bnF7/3Byef9wc33/bnB3/25xe/9xc3v/cXR9/3d5gP9wc33/dXiB/3Bzff9ucXv/bnB3/25xe/9wc33/
+bnF7/25wd/93eX//bG95/25xe/9wc33/cHN9/2xvef9wcnn/c3Z//3Bzff9wc33/c3V8/3d6g/91eIH/
+e32D/3Byef9zdn//cHN9/3N2f/93eX//c3Z//3Byef91eIH/cHN9/3Bzff9zdn//d3qD/3V4gf97fYP/
+c3V8/3Bzff9xdH3/cnR7/3F0fv9wc3r/cHJ5/2xudf9wc33/am13/25xev9tb3b/a210/3N1fv9wc33/
+c3Z//2xvef9wcnn/dXd9/2xudf9zdXz/eHl9/3Bzff9zdXz/bnB3/3V3ff93eoP/c3Z//3N2f/91d33/
+eXuB/3N1fP97fof/c3Z//3N2f/9+gIb/e32D/3l8hv9/gYf/d3qD/3N1fP9zdXz/foCG/3t9g/93eoP/
+dXiB/36Ahv91d33/c3V8/3t9g/9+gIb/dXd9/3N1fP93eX//bG95/25wd/9vcXX/c3Z//25xe/91eIH/
+bnB3/3Byef9zdXz/bnF7/3Byef91eIH/cHN9/3V3ff95fIb/cHN9/3V4gf95fIb/dXd9/3N1fP9zdn//
+cHN9/3Byef9ucXv/cHN9/3d6g/91eIH/c3Z//3V4gf9ucXv/dXiB/3V4gf9nanT/bG51/3N2f/93eX//
+cHN9/25wd/9sbnX/bG51/25wd/9sbnX/c3V8/2xudf91d33/bnB3/2psc/9zdXz/bG51/3V3ff9ucHf/
+c3Z//3h5ff9qbHP/bnB3/3N2f/9wc33/c3V8/3N1fP9zdXz/cHN9/3h5ff9ucHf/bnB3/25wd/9nanT/
+bG95/3V4gf9/gYf/cHN9/3Byef9ucXv/cHN9/3Byef9zdXz/dXiB/2dqdP9wc33/bnB3/3Bzff93eoP/
+c3V8/3N2f/9ucXv/dXiB/3Bzff91eIH/c3V8/3t9g/91eIH/c3Z//3d6g/91eIH/e32D/3l8hv9+gYr/
+eXuB/3l7gf95fIb/dXiB/3t9g/97fof/e36H/3l7gf95e4H/d3qD/25xe/9qbXf/cHJ5/3N1fP9sb3n/
+bnF7/3Byef9wcnn/dXd9/29xdf9qbHP/dnh8/3N1fP93eX//dnh8/2xvef9qbXf/bG95/25xe/9sbnX/
+bG95/2xvef93eX//bG95/25xe/9qbXf/am13/2dqdP9zdXz/bG95/2psc/9nanT/bG95/2xvef9qbHP/
+Z2p0/2dqcf9sb3n/Zmhu/2Rncf9dYGr/cHJ5/2xudf9sb3n/a210/2ttdf9rbnj/aGpx/2Rncf9maXP/
+Zmlz/2Zobv9iZW7/ZGdx/2Jlbv9maXP/aGpw/2xvd/9xc3r/bG51/3N1fP9qbXf/bnF7/2ptd/9sb3n/
+bnF7/25wd/9sbnX/dXd9/2psc/9sbnX/bnB3/29xdf9nanH/bnB3/25wd/9ucXv/bnB3/2xvef9zdXz/
+dnh8/3V3ff9sb3n/cHN9/3Byef9ucXv/c3Z//3Bzff9wcnn/dXiB/25xe/9ucXv/bG95/3V4gf91eIH/
+foCG/3V3ff91eIH/dHeA/3R3fv90d4D/dHeA/3Bzff9ucXv/cHJ5/2xudf9vcXj/bW94/21vdv9zdn7/
+cHN9/3Z4fP9ucHf/c3V8/3V3ff9ucHf/dXiB/3d5f/91d33/cHJ5/2xudf9sb3n/dXd9/25xe/9sb3n/
+Zmlz/25xe/9qbHP/bnF7/2ptd/9qbHP/cHN9/2xvef9ucXv/dXiB/2xvef9tb3P/am13/3N1fP9ucXv/
+Z2p0/2psc/9wcnn/Zmlz/2Zpc/9sb3n/bnF7/2dqdP9sbnX/c3V8/2ptd/9qbXf/amxz/25xe/9sb3n/
+bG95/2dqdP9sbnX/bnB3/25wd/9tb3P/cHJ5/2xudf9qbXf/dXd9/3Byef9ucHf/bnB3/25wd/9ucHf/
+bnF7/3Bzff9ucHf/bnF7/2xvef95fIb/bnF7/25xe/9wc33/bG95/3V4gf9zdXz/ZGdx/2Zpc/9wc33/
+bnF7/2ptd/9sb3n/am13/2xvef9qbXf/amxz/2ptd/9maXP/bnF7/2Zpc/9gY2z/am13/2psc/91d33/
+bG95/2xvef91d33/ZGdx/2psc/9ucXv/dXiB/3Z4fP91eIH/d3l//3d6g/97fYP/d3qD/3N2f/9zdn//
+cHN9/3V3ff97fYP/g4WM/3Bzff9ucXv/cHN9/3Byef9ucHf/cHJ5/3V4gf9qbHP/dXiB/25wd/9ucXv/
+dXiB/25wd/9wcnn/am13/3Bzff9ucXv/cHJ5/21vc/9zdXz/bnB3/21vc/9zdXz/bnB3/3h5ff9ucHf/
+dXd9/25wd/9ucHf/c3V8/2xudf9wc33/d3l//3d5f/91eIH/cHN9/3N2f/9nanT/Z2p0/25xe/9sb3n/
+bG95/2xvef9ucHf/bnF7/3V4gf9wcnn/Zmlz/3V3ff9wc33/d3l//3h5ff91d33/b3F1/25wd/9zdXz/
+bnB3/3Byef9ucHf/d3l//25xe/9sb3n/bG51/2xudf9sbnX/cHN9/3V3ff9ucHf/bG51/3N1fP91d33/
+bW9z/25wd/9tb3P/bnF7/2ptd/9sbnX/Zmhu/2xvef9qbHP/bnF7/2xudf9vcXb/cXN7/29xev9sb3n/
+c3Z//25xe/9ucHf/bG95/2xvef9ucHf/cHJ5/21vdv9wcnj/dXd7/29xe/9wc33/bnF7/3Byef9ucHf/
+cHJ5/3Bzff9ucHf/bnB3/3Z4fP9nanT/am13/2xudf9tb3P/ZGZs/29xdf9ucHf/c3V8/25wd/9ucHf/
+bnB3/3N1fP91d33/bnB3/3N2f/9ucHf/bnB3/3N1fP9wc33/cHJ5/3N2f/9sb3n/Z2p0/2ptd/9zdn//
+bnF7/3d5f/9wc33/cXN9/3R3f/91eH//dXiB/3V4gf9wc33/bnF7/3Bzff9ucXr/cnR9/3Bzff9ucXv/
+dHZ9/3N2f/91d33/bG95/3Byef91d33/bG95/3Bzff91eIH/c3V8/2xvef9ucHf/c3V8/3V3ff9wcnn/
+bnB3/25wd/92eHz/bG95/3d5f/9ucXv/bnB3/3l7gf9zdXz/c3V8/3l7gf9ucHf/bW9z/2xudf92eHz/
+cHJ5/3Byef9sbnX/dnh8/2ptd/9qbXf/dXd9/3Z4fP9sbnX/bnB3/3d5f/9ucHf/amxz/2xudf9zdXz/
+bnF7/3Bzff9qbXf/bG51/21vc/9wcnn/bnB3/3N2f/9ucHf/bG51/3Bzff9ucHf/bnB3/3Bzff9ucHf/
+b3F1/29xdf9wc33/cHJ5/3N2f/91eIH/foGK/3V4gf95fIb/eXyG/3N2f/9+gYr/d3qD/3Bzff9wc33/
+e32D/3d6g/91eIH/eXyG/3N2f/95fIb/dXiB/3V4gf95fIb/cHN9/3t9g/95fIb/cHN9/3V4gf9wcnn/
+d3l//3V3ff92eHz/eXuB/2dqdP9ucHf/dXiB/2ptd/9ucXv/bG95/3Bzff9sb3n/dXd9/2xudf9qbXf/
+am13/2dqdP9nanT/bnF7/3l7gf9sbnX/bG51/25wd/9sbnX/am13/2xudf9ucXv/ZGZs/2ptd/9maXP/
+bG95/3N1fP9nanT/amxz/2Zpc/9qbXf/bG51/25wd/9tb3P/dXd9/3Byef9sbnX/dXd9/3Byef92eHz/
+c3V8/3h5ff9ucHf/bG51/3V3ff9ucXv/dXiB/3l8hv95fIb/d3qD/3N2f/91eIH/bnF7/25xe/91eIH/
+cHJ5/3Byef9zdn//bnB3/25wd/9wc33/bnF7/2dqdP91eIH/dXiB/3l7gf95fIb/dXiB/3N1fP9wc33/
+c3Z//2xvef9zdn//bnF7/3l7gf9zdn//bnF7/25wd/9vcXX/b3F1/3N1fP9zdXz/bnB3/2psc/9zdn//
+dXd9/2xudf9wcnn/bG95/2xvef9sbnX/bG51/1xfaP9ucXv/bG95/3N1fP9tcHr/bW91/3ByeP9tb3j/
+aGp0/2xvef9qbXf/bG95/2dqdP9sbnX/bnB3/29xef9oa3X/bG93/3Byev9rbnj/bnF7/2xudf9sb3n/
+bG95/2xvef9sb3n/bnB3/2ptd/9wc33/Z2p0/2ptd/9qbXf/bG51/2Jlbv9qbHP/Z2p0/2xvef9qbHP/
+amxz/2ptd/9ucXv/bG95/2psc/9ucXv/am13/2xudf9ucXv/bG95/2xudf9sbnX/ZGdx/2dqdP9kZ3H/
+bG95/3Byef9zdXz/bG95/21vdP9ucHf/cnR6/3Fzev9vcXj/bG95/2xudf9ucHf/bG51/2ptd/9rbnj/
+a254/3J1fv91d33/dXd9/29xdf9wcnn/c3Z//25xe/91eIH/d3qD/3N2f/9ucHf/bnB3/3N1fP93eX//
+bnF7/25xe/9qbXf/c3Z//3Bzff91d33/bnF7/2xudf94eX3/cHJ5/3V3ff91eIH/bnF7/25wd/9sb3n/
+dXd9/25wd/91d33/bG51/3Z4fP9qbHP/Z2p0/3Bzff92eHz/bG51/3Byef92eHz/bW9z/2xudf9vcXX/
+dnh8/3N1fP9zdXz/bnB3/29xdf9ucHf/cHJ5/29xdf91d33/bG51/2ptd/9ucXv/am13/2psc/9wc33/
+Zmlz/2ptd/9maXP/am13/2dqcf9maXP/Z2px/25wd/9kZ3H/Zmhu/2Zpc/9nanH/cHJ5/2Zpc/9gY2z/
+YmVu/2Zpc/9qbXf/Zmhu/2dqdP9iZW7/Z2p0/2Zobv9maG7/am13/2Rncf9maXP/Zmhu/2BjbP9maXP/
+ZGdx/2ptd/9nanT/bG95/3Byef9kZ3H/ZGdx/2ptd/91d33/dXd9/3V3ff94eX3/cHJ5/3N2f/9ucXv/
+c3V8/3V4gf9zdXz/bnB3/3N2f/9+gIb/bnB3/29xdf9ucHf/bG51/2xudf9ucHf/dXd9/2ZobP9ucHf/
+bG51/25wd/92eHz/bG51/2xudf9qbHP/bnB3/29xdf9ucHf/bG51/3Bzff9qbXf/bG51/25xe/9wc33/
+bG95/3Bzff9zdXz/am13/2xudf91d33/bG51/3Byef91d33/d3l//3N2f/9ucXv/cHN9/2xvef9sbnX/
+cHJ5/29xdf9sbnX/bG95/2ptd/9vcXX/c3V8/3Byef9maG7/c3V8/3N1fP92eHz/d3l//3V4gf9ucHf/
+cHN9/3Bzff9wcnn/d3qD/3Bzff95e4H/cHN9/2xvef9sb3n/bnB3/29xdf91d33/dXd9/3Bzff9sb3n/
+dXiB/3V3ff9ucHf/cHJ5/3Byef9wcnn/bnB3/3Byef9maG7/cHJ5/25wd/9wc33/bnB3/25weP9wcnn/
+bXB5/25wd/9wcnn/b3F1/3N1fP9sbnX/bnB3/3Byef9vcXj/bG52/2xvef9vcnv/bXB5/2xvef9sbnX/
+bG95/2Zpc/9nanT/Z2p0/2psc/9nanH/cHN9/2Zpc/9qbXf/am13/2ptd/9iZW7/bG51/2xvef91d33/
+bnB3/25wd/9zdn//d3qD/3N2f/9wcnn/dXiB/3N2f/9zdXz/eXyG/3V4gf91d33/dXiB/3N1fP9zdn//
+bnF7/3l8hv99foH/foCG/3V4gf91d33/dXiB/3V3fv90d4D/cXR+/25xe/9wcnn/c3Z//3Byef9wcnr/
+cHJ5/2tueP90d4D/d3l//3V3ff9ucHf/cHN9/3V3ff9wc33/c3Z//3d6g/91d33/bG95/2xvef9zdn//
+eXyG/25xe/9ucHf/bnB3/3Z4fP9wcnn/c3V8/2xudf9nanH/cHN9/2ptd/9ucXv/d3l//21vc/9tb3P/
+b3F1/3Z4fP9ucHf/cHJ5/2ptd/94eX3/bnB3/2dqcf9ucHf/c3V8/2psc/9wcnn/dnh8/29xdf9qbHP/
+bW9z/3N1fP9zdXz/cHJ5/2xudf9qbXf/am13/2xvef9qbHP/am13/2dqcf9kZ3H/am13/2psc/9maG7/
+Z2p0/1xfaP9gY2z/YmVu/2dqdP9kZ3H/ZGdx/2Zobv9ucHf/Zmlz/2Rncf9nanT/Z2px/25xe/9qbXf/
+ZGdx/2Zpc/9wc33/c3V8/2xudf9zdXz/bG51/2xvef9qbXf/am13/3N1fP9ucHf/cHJ5/25xe/9maXP/
+cHN9/25wd/92eHz/cHJ5/25xe/9zdXz/amxz/2xudf91d33/dXd9/3N1fP92eHz/d3l//3N1fP91d33/
+bG95/29xdf9wcnn/amxz/2xudf9wcnn/eXuB/3Byef9tb3P/bG51/2Zpc/9nanT/am13/3N1fP9gY2z/
+am13/2dqdP9qbXf/bnF7/2dqcf9ucHf/bnB3/29xdf9ucHf/cHJ5/29xdf91d33/cHJ5/21vc/9wcnn/
+dXd9/3Byef92eHz/dnh8/25xe/9ucXv/eXuB/3N1fP91eIH/e36H/3t+h/93eX//cHN9/3N2f/9ucHf/
+am13/3V3ff9ucHf/bG95/3Byef9sb3n/bnF7/3N2f/9ucXv/am13/3N1fP9ucXv/dXd9/3d5f/91eIH/
+bG95/25wd/9ucXv/bnB3/3N2f/9sb3n/d3l//3Bzff9ucXv/bG95/25wd/9ucHf/d3l//3Z4fP9sb3n/
+am13/3V3ff9zdXz/bnB3/3N2f/9wc33/cHN9/3N2f/91eIH/Z2p0/25xe/9ucHf/dXd9/3R3gP9wcnv/
+cnR8/3Bzff9ucXv/c3Z//25xe/9zdn//bG95/3Bzff9zdn//bnF7/3F0ff9zdn//cXR+/3F0ff9wcnn/
+bW9z/3N1fP9ucHf/bG95/2ptd/9qbHP/amxz/2xvef9maXP/Z2p0/2ptd/9qbXf/ZGdx/2psc/9qbXf/
+dXd9/2xudf9tb3P/cHJ5/3N1fP9wc33/Z2px/25xe/9sbnX/bW9z/3Byef9sbnX/am13/2xudf9ucHf/
+bG51/2Zpc/9ucXv/dXd9/3N1fP9sbnX/bG92/29xef9wc3v/dHd//3F0ff9wcnn/cHJ5/3Byef9ydHz/
+bnB4/21weP9tb3f/cHN9/3Bzff9wc33/amxz/2xvef95e4H/dXiB/3N2f/9+gYr/eXyG/3d5f/93eX//
+foCG/4OFjP97fYP/dXiB/25xe/95fIb/c3Z//3t9g/9wc33/cHN9/3d5f/9wc33/c3Z//3d6g/9ucXv/
+cHN9/29xdf93eX//bnB3/3N1fP9ucHf/eHl9/2psc/9maXP/bG95/25xe/9maXP/bG51/3N1fP9sbnX/
+Zmlz/2xudf9zdXz/cHN9/25xe/9qbXf/am13/2Zpc/9ucXv/amxz/2dqdP9maXP/Zmlz/25xe/9qbHP/
+Z2px/2dqdP9iZW7/Zmhu/2Jlbv9nanT/Zmhu/2Zpc/9maG7/bnB3/2dqdP9kZ3H/Z2p0/2Rncf9nanT/
+ZGdx/11gav9gY2z/am13/2ptd/9maG7/am13/2dqcf9ucXv/bnF7/2ptd/9zdXz/am13/2ptd/9qbXf/
+Z2px/3N1fP9ucHf/eHl9/3Bzff9wc33/d3l//2xudf9ucHf/c3Z//3l7gf91eIH/eXuB/3l8hv91eIH/
+dXiB/3V4gf9wc33/dXiB/25xe/9ucHf/bnF7/3l8hv9zdn//cHJ5/3Bzff9ucXv/cHN9/3V4gf9+gIb/
+bG95/3V4gf9zdXz/dXiB/3d6g/9qbXf/cHJ5/2xvef9wcnn/bG95/2xvef9sb3n/c3V8/3N1fP9ucHf/
+c3V8/3N1fP9wc33/dXd9/3d5f/9sb3n/cHJ5/3N1fP9qbXf/bG95/3V3ff91d33/dnh8/3V3ff9ucXv/
+bnB3/2xvef91eIH/c3V8/2xvef9wc33/am13/3Byef93eoP/cHN9/2dqdP9wc33/cHN9/3V3ff94eX3/
+dXd9/2xudf9vcXX/bnB3/2dqcf9wcnn/bG51/3V3ff9wcnn/bG51/2ptd/9nanT/bG51/25xe/9qbXf/
+Z2px/2Rncf9ucXv/Zmlz/2Jlbv9kZ3H/Z2px/2Zpc/9qbXf/Z2p0/11gav9nanT/amxz/25xe/9qbXf/
+a211/2lrdP9oa3X/aWtz/2xvef9sb3n/cHN9/2psc/9wcnn/bnB3/2xuc/9sb3n/amx1/2hrdP9oam//
+ZGdx/2Zobv9nanT/Zmlz/2Zpc/9nanH/ZGdx/2dqcf9ucXv/am13/2ptd/9sb3n/bG95/2Zpc/9qbXf/
+bnB3/3V3ff9wcnn/bnB3/25xe/9zdn//c3V8/25wd/9wc33/bnF7/25wd/91d33/bnB3/25wd/9ucHf/
+bnB3/2ptd/9maG7/c3V8/3N1fP9wcnn/bG51/21vc/9ucHT/bnB3/3Byef9wcnr/bG95/2xvef9ucHf/
+cnR7/2xudv9rbXb/aWx2/25xe/9zdXz/dXd9/25wd/91d33/c3V8/2xvef9qbXf/d3l//2xvef9qbHP/
+bG51/25xe/91eIH/bnF7/25wd/9kZ3H/dXd9/2ptd/9ucXv/am13/2xvef9sb3n/bG51/2xvef91d33/
+am13/2ptd/9sbnX/dXd9/25wd/91d33/bG51/3Z4fP9nanT/am13/25wd/9zdXz/bG51/29xdf9zdXz/
+b3F1/2psc/9ucHf/dXd9/3N1fP9ucXv/am13/2ptd/9qbXf/cHN9/2xudf9ucXv/bG51/25wd/92eHz/
+bG51/21vc/9zdXz/bG51/29xdf9qbXf/cHN9/25xe/9zdXz/bnB3/3h5ff9zdXz/bnB3/25wd/9vcXX/
+c3Z//25xe/9sb3n/bG95/3d5f/9zdn//cHN9/3d6g/9wcnn/dXiB/3V4gf9wcnn/e32D/3Bzff9zdn//
+cHN9/2ptd/9ucXv/bG95/3d5f/9wc33/c3Z//3d6g/9sb3n/cHN9/3l7gf95e4H/cHN9/3V4gf91eIH/
+c3V8/25wd/9wc33/bG95/3V4gf9qbXf/cHJ5/25xe/93eoP/cHN9/29xdf9zdXz/bnB3/21vc/9qbXf/
+cHN9/2Rncf9ucXv/Z2p0/25wd/91d33/amxz/21vc/9tb3P/am13/25wd/9ucXv/bG95/3d5f/91eIH/
+dXiB/3V4gf9zdn//dXiB/3V4gf95e4H/c3Z//3d6g/97fYP/dXiB/3d6g/97fof/e36H/3d6g/93eoP/
+cHN9/25xe/9sb3n/dXd9/2xvef9ucXv/cHN9/2xudf9sb3n/bnF7/2dqdP9gY2z/Z2p0/2ptd/9wcnn/
+cHN9/2ptd/9nanT/bG51/2xvef9kZ3H/bnF7/2ptd/93eX//bnB3/21vc/9qbXf/am13/2xvef93eX//
+cHN9/2ptd/9maXP/dXd9/3Bzff9qbXf/bnF7/2xvef9wcnn/c3V8/3V3ff9maG7/amxz/2ptd/9wc33/
+bnF7/25wd/9ucHb/bW93/3J0e/9zdn//cHN9/3V4gf9sb3n/dXiB/25xe/9sb3n/b3J8/21wev9tcHr/
+b3J7/2xvef9sbnX/bnF7/2dqdP9sbnX/amxz/2ptd/9sbnX/cHJ5/2xudf9sbnX/cHJ5/2xvef9kZ3H/
+bG51/25wd/91d33/cHJ5/29xdf9ucXv/dXiB/3N2f/9ucHf/cHN9/3Bzff9wcnn/c3Z//25xe/9qbXf/
+bnF7/2xvef9ucHf/ZGdx/25xe/9ucXv/bG95/2dqdP9qbXf/bW92/2tudv9sb3n/bG95/2dqdP9maXP/
+Zmlz/2xudf9laHH/Y2Zw/2Zpc/9ydHv/bnF7/2ptd/9sbnX/cHN9/25xe/9qbXf/am13/3Byef9qbXf/
+Z2p0/2xudf9zdXz/d3l//3V3ff9ucHf/amxz/3l7gf9wc33/cHN9/25wd/9ucHf/cHN9/3Byef91eIH/
+eXuB/3Byef9wc33/bnB3/3d6g/9wc33/dXiB/3N1fP95fIb/dXd9/3N1fP9zdn//c3Z//3Bzff9zdn//
+d3qD/3Bzff9sb3n/c3Z//3l8hv97fYP/dXiB/3N2f/9zdn//c3V8/3t9g/9zdn//dXiB/25wd/9wcnn/
+c3Z//25wd/9ucHf/dXd9/2psc/9ucHf/Z2p0/3Bzff9ucXv/cHN9/2xvef93eX//c3Z//3Bzff9wc33/
+bnB3/3N2f/9wc33/cHJ5/2xvef95e4H/cHN9/3Byef93eX//cHJ5/3V4gf9zdn//bG95/3d5f/9zdXz/
+cHN9/2xvef9sb3n/bnB3/3Byef93eX//c3V8/25xe/95e4H/bG95/2xvef95e4H/dnh8/25wd/93eX//
+d3l//25xe/9sb3n/cHN9/25wd/9zdn//bG95/25wd/9ucXv/eXyG/3N1fP9tb3P/c3V8/25wd/9vcXX/
+bG51/3Byef9maG7/cHJ5/25wd/9wc33/dXd9/2xudf9ucHf/bnB3/2xudf9ucHf/cHJ5/3Byef92eHz/
+cHJ5/3N1fP9wc33/bnF7/2xvef9sb3n/bnF7/2ptd/9ucXv/cHN9/25wd/9ucHf/dXd9/3d5f/9zdn//
+dXd9/25xe/9sb3n/bG95/3V3ff9ucHf/bnB3/3N1fP9sbnX/bnB3/3Z4fP9ucHf/Z2px/2xvef91eIH/
+d3qD/3d6g/91eIH/am13/2xvef9ucXv/bnB3/3Byef9sbnX/dXd9/2xvef9sbnX/bG51/2xudf9qbXf/
+dXd9/25xe/9nanT/Z2p0/3Bzff9zdXz/amxz/2xvef9qbXf/am13/25xe/9wc33/YmVu/2dqdP9sbnX/
+bnF7/2xvef9pbHb/a254/2xuc/9rbnX/cHJ5/25wd/91d33/am13/3Bzff9wcnn/cHJ5/29xef9ucHn/
+bnF5/29ye/9sb3n/amxz/25xe/9ucXv/am13/2dqdP9tb3P/bG51/25xe/9tb3P/bnB3/3Bzff9wcnn/
+Zmhu/25wd/9wcnn/c3Z//3N2f/9sb3n/bG95/3Bzff9zdn//bnB3/3Bzff9zdXz/bnB3/3V4gf9wc33/
+am13/3Bzff9ucHf/bnB3/2Zpc/91eIH/d3qD/3Bzff9sb3n/cHJ5/2xvef9rbnj/cHJ3/2xudv9qbXf/
+Zmlz/2xudf9qbXf/aGp0/2dqdP9tb3X/dXd8/3V3ff9wcnn/bW9z/3d5f/9zdXz/bnF7/25wd/91d33/
+c3V8/2xudf9vcXX/d3l//3l7gf92eHz/bnB3/2dqdP93eX//cHN9/25xe/9wcnn/cHJ5/3N2f/9wcnn/
+d3qD/3l8hv9zdXz/cHN9/2xvef93eX//cHJ5/3N1fP9ucHf/dXd9/2xudf9tb3P/b3F1/25wd/9maG7/
+bG51/3Byef9qbHP/YmVu/25wd/93eX//dXd9/25wd/9sbnX/cHJ5/29xdf91d33/b3F1/3Byef9ucHf/
+b3F1/3N2f/9ucHf/bnB3/3V4gf9qbXf/c3Z//3Bzff95e4H/eXuB/3d6g/9zdn//foCG/31+gf97fYP/
+d3l//3h5ff97fYP/d3qD/3N2f/9wc33/e32D/3d6g/9wc33/e32D/3N2f/95fIb/d3qD/25xe/95e4H/
+dXiB/3V4gf9ucXv/bG95/25wd/9wcnn/d3qD/25xe/9wcnn/dnh8/2xudf9sbnX/dXd9/3N1fP9wcnn/
+eHl9/3Z4fP9ucHf/am13/2xvef9nanT/bG95/2dqdP9sbnX/bG51/3N2f/9wc33/amxz/2ptd/9nanT/
+am13/2xvef9sb3n/ZGdx/3Bzff9ucHf/c3V8/3N1fP9nanH/bG51/2ptd/9qbXf/am13/3N1fP9ucHf/
+dXd9/3N1fP91d33/c3V8/25wd/9wcnn/bG95/2ptd/9nanT/bnF7/3Z4fP9sbnX/bnB3/3V3ff93eX//
+c3V8/25xe/9qbXf/am13/2xudf9zdXz/am13/2xvef9ucXv/Zmlz/2xudf9zdXz/bnB3/2Vmav9ucHf/
+c3V8/3l7gf9wc33/c3Z//2dqdP9wcnn/bG51/2psc/9zdXz/bG51/3V3ff9wcnn/bW9z/2ptd/9sbnX/
+cHN9/3V3ff9ucXv/am13/29xdf92eHz/c3Z//29xdf9wcnn/cHN9/25xe/9wc33/dXd9/2dqcf9qbXf/
+bnB3/3Bzff90d4D/cnR7/29yfP9sb3n/bnF7/3N2f/9zdn//eXuB/3N1fP91eIH/dXiB/3V4gP9ucXv/
+b3J8/3BzfP9vcnv/bnF7/25wd/9zdn//bG95/29xdf9sb3n/b3F1/25wd/9zdn//bnB3/25wd/9wc33/
+cHN9/2Zpc/9wcnn/c3V8/3V4gf91eIH/bnB3/2xvef9zdn//dXd9/2xvef9zdn//dXiB/25xe/93eX//
+bnF7/2ptd/9wc33/bnB3/25wd/9qbXf/d3l//3V4gf9zdn//bG95/3Byef9tb3b/bW94/29ye/9wcnn/
+bnB3/2xvef9sb3n/c3V8/2xvef9qbXf/b3F5/3V3ff94eX3/c3V8/25wd/94eX3/d3l//3V3ff9ucHf/
+d3l//3V3ff9tb3P/bW9z/3V3ff95e4H/cHJ5/2ptd/9maXP/c3V8/2dqdP9nanT/Z2p0/2dqdP9qbXf/
+Zmlz/2xvef91d33/Z2p0/2xudf9nanT/dXd9/2ptd/9ucXv/am13/3d5f/9ucHf/bnB3/3Byef9ucXv/
+ZGdx/2xvef9wc33/bnB3/2psc/9wcnn/e32D/3V3ff9ucHf/bG95/25wd/9ucHf/eXuB/25wd/9ucXv/
+bG95/2xvef93eX//bnB3/25xe/91eIH/bG95/3Byef9sbnX/dXd9/3Byef9ucHf/bG51/3Z4fP9zdXz/
+am13/2xudf9sbnX/bnB3/25xe/9qbHP/Zmlz/3V3ff9ucXv/bG51/3V3ff9tb3P/am13/2ptd/9kZ3H/
+dXd9/2xvef9ucHf/am13/2ptd/9qbXf/bG51/3V4gf9sb3n/bnB3/3V3ff9sbnX/bG95/3V3ff9zdn//
+bnF7/3d5f/95e4H/cHN9/3Bzff91eIH/bnB3/3Bzff9ucHf/bnF7/29xdf95e4H/c3Z//2xvef9wcnn/
+bG51/2xvef9ucXv/bnF7/2Zpc/9zdn//bnB3/3N1fP9zdXz/Zmhu/29xdf9ucHf/cHJ5/29xdf94eX3/
+c3V8/3N1fP9ucXv/bnF7/3Bzff9sb3n/bnF7/2xvef9sb3n/Z2px/25xe/9zdXz/amxz/2ptd/9ucXv/
+dXd9/2xvef9qbXf/Z2px/2psc/9kZ3H/am13/2psc/9qbXf/bG95/2Rncf9sbnX/cHJ5/2xudf9lZmr/
+bnB3/3V3ff93eoP/cHN9/3d5f/9qbXf/cHJ5/29xdf9qbHP/dXd9/2psc/93eX//cHN9/2xvef9sb3n/
+bG95/3V4gf93eoP/cHJ5/25wd/9tb3P/dXd9/3V3ff9qbHP/bG95/2xvef9wcnn/am13/25xe/9maG7/
+bG95/2xvef9zdn//b3J8/3Fzev9vcnr/a253/2xudf9ucXv/am13/3N1fP9sbnX/cHN9/25xe/9qbXf/
+bnF6/25xef9tcHr/bXB6/2ptd/9qbXf/bG95/2psc/9qbHP/Z2p0/2dqcf9sbnX/bnF7/2psc/9maXP/
+bG95/2xvef9gY2z/Z2p0/21vc/9ucHf/bnB3/2psc/9sbnX/bG95/3N1fP9qbXf/bnF7/3Z4fP9wcnn/
+d3l//3Bzff9qbXf/c3V8/2xudf9sbnX/amxz/3V3ff9zdXz/c3V8/2psc/9ucHf/b3F4/25wd/9xc3n/
+bnB3/2ptd/9sbnX/bnB3/2xvef9qbXf/aWx2/29xeP91d33/dnh8/3N1fP9sbnX/dnh8/3d5f/9zdXz/
+bnB3/3V3ff9zdXz/bW9z/2xudf92eHz/d3l//3Bzff9sb3n/Z2p0/3Bzff9ucXv/bG95/2ptd/9qbXf/
+am13/21vc/91d33/eHl9/29xdf9ucHf/bG51/3Z4fP9sbnX/dXd9/2xudf93eX//bnB3/21vc/9tb3P/
+c3V8/2Rncf9wcnn/dXiB/3Bzff9ucXv/dXiB/4GDiv91eIH/bnF7/25wd/9ucHf/bG95/3Z4fP9ucHf/
+bG95/25wd/9qbXf/d3l//25wd/9sb3n/c3Z//25wd/9wc33/Zmlz/3N2f/9zdn//bnF7/2xvef93eX//
+dXd9/3Bzff9ucHf/am13/3Bzff9wc33/bnB3/2ptd/92eHz/cHN9/29xdf91d33/bnF7/25xe/9wcnn/
+Z2p0/3d6g/9zdn//c3Z//3Bzff9ucXv/cHJ5/3Byef91eIH/bnF7/2xvef91d33/bnB3/3N2f/95e4H/
+bnB3/2xvef91d33/cHN9/2ptd/9nanT/bG95/2Zpc/9nanT/Zmhu/2dqcf9kZ3H/c3V8/25xe/9maXP/
+am13/2Zpc/9qbHP/am13/2ptd/9kZ3H/cHN9/2dqdP9wcnn/bG95/2BjbP9qbHP/amxz/2ptd/9sbnX/
+cHN9/25xe/9wc33/bnF7/25xe/9ucXv/am13/3N1fP9zdXz/c3V8/2xudf9zdXz/dnh8/3Byef9ucHf/
+dXd9/3N1fP9ucXv/cHJ5/2ptd/9ucXv/am13/3Bzff9sb3n/bG95/25wd/9ucHf/bG95/3Bzff9ucXv/
+Z2p0/3Bzff9wc33/eXuB/3V3ff92eHz/Z2px/2xvef9wcnn/Z2p0/3N2f/9nanT/d3l//3Bzff9tb3P/
+bnB3/29xdf9zdn//d3l//3Bzff9sb3n/bG95/3V4gf94eX3/bnB3/3N1fP9zdXz/cHJ5/2xvef9zdn//
+amxz/2psc/9nanT/bnF7/2hqdP9ucHb/bXB4/2xvdv9ucHf/dXd9/29xdf92eHz/b3F1/3Z4fP9zdXz/
+bnB3/3Byef9wcnn/cXN6/3N1fP9wcnn/cHJ5/3Z4fP9ucXv/bG95/2xvef9sb3n/bG95/3V4gf9zdXz/
+cHJ5/3V4gf9wc33/am13/25xe/9ucHf/bG95/25wd/9vcXX/bG51/3N1fP91d33/bG51/3Bzff9zdXz/
+bnB3/3N1fP9sbnX/Z2px/2xvef9vcXX/bnB3/2Rncf9zdXz/bG95/2xvef9maXP/bG95/2hrdf9wcnn/
+cHJ7/3J0fP9ucHf/Z2p0/25xe/9zdXz/b3J7/2ptdf9sb3n/c3V8/3V3ff9sb3n/bG51/3V3ff91eIH/
+bnF7/3Byef92eHz/dXd9/2xudf9sbnX/dnh8/3d6g/91d33/cHN9/2ptd/91eIH/d3qD/3d6g/9ucHf/
+bG95/25wd/9ucHf/dXiB/3l7gf9wc33/c3V8/3N2f/9+gYr/eXuB/35/g/92eHz/f4GH/3V3ff91eIH/
+dXd9/35/g/9wcnn/eHl9/31+gf93eX//eHl9/3d5f/+Fh43/fn+D/3l7gf92eHz/dXd9/3Bzff9+gYr/
+c3Z//3Bzff9sb3n/cHN9/3l7gf9wcnn/c3V8/3V4gf9zdXz/dXiB/2dqdP9zdn//c3Z//3Bzff9sb3n/
+dXd9/3Z4fP9wc33/bG51/2Zpc/9wc33/cHJ5/29xdf9ucHf/dXd9/3Byef9ucHf/eHl9/2xvef9ucHf/
+cHJ5/25wd/93eX//dXd9/3Byef9ucHf/bnB3/2xudf9vcXX/dXd9/2xudf9sbnX/c3V8/2ptd/9wcnn/
+eHl9/3Bzff91eIH/dXiB/3V3ff9wcnn/bnB3/3V3ff9qbHP/cHN9/3Byef9ucXv/bG95/3V4gf93eX//
+Z2p0/25xe/9sb3n/bnB3/3N1fP9ucHf/bG51/3Bzff9nanT/am13/25xe/9maXP/am13/2xudf9sbnX/
+bG51/3V3ff9ucHf/cHJ5/3N1fP9ucXv/c3V8/25wd/9ucHf/cHJ5/3N1fP9vcXX/dXd9/3h5ff9wcnn/
+cHJ5/3V3ff9zdXz/cHJ5/25wd/9qbHP/bnF7/2xudf9sb3n/bG95/2dqdP9nanT/Zmhu/2Rncf9nanT/
+Z2px/1xfaP9maG7/ZGdx/3Byef9maXP/bnB3/1lcZf9iZW7/Zmhu/2Jlbv9nanT/XWBq/2xvef9nanT/
+amxz/2xudf9qbHP/bnF7/3d5f/9qbXf/Zmlz/2xudf91eIH/d3l//2xudf9zdXz/cHJ5/3N1fP9sb3n/
+dXd9/2Zpc/9maG7/Z2px/2ptd/9oanT/bnB5/29xeP9ucHj/bG51/3Z4fP9vcXX/dnh8/29xdf91d33/
+bnF7/3Bzff91eIH/dHZ+/3N1ff9zdn3/bnF7/25xe/91d33/cHJ5/25wd/9ucHf/bnB3/25wd/9wc33/
+b3F1/29xdf9ucHf/bG51/2Zobv9tb3P/bW9z/2xudf9sbnX/am13/2psc/9wc33/c3V8/2xudf9wc33/
+cHN9/25xe/9wc33/bW9z/2xudf9zdXz/b3F1/25wd/9maG7/dnh8/3Byef9zdXz/Z2px/3Byef9ucHj/
+cHJ6/25xef9tb3b/bG51/2RmbP9sbnX/bnF4/25wd/9sb3j/dHZ+/3V4gf95e4H/bnF7/3Byef91eIH/
+dnh8/3Byef9ucXv/c3V8/3N1fP9ucHf/b3F1/3d5f/97fYP/dXd9/3Bzff9sb3n/d3l//3Z4fP9zdXz/
+amxz/2xudf9qbXf/am13/2xvef9zdXz/amxz/2psc/9kZ3H/c3V8/2Zpc/9qbXf/ZGdx/3Byef9iZW7/
+ZGZs/2Rncf9maXP/XV9l/2Rncf9nanT/ZGZs/2BjbP9iZW7/cHN9/2ptd/9maG7/YmVu/2Jlbv9iZW7/
+cHJ5/2dqcf9kZ3H/YGNs/2Rncf9kZ3H/YmVu/2dqcf9qbXf/bG51/2ptd/9iZW7/bnF7/25xe/9qbXf/
+bG51/3N1fP91d33/c3V8/25wd/9qbHP/cHN9/3Bzff9wcnn/cHJ5/3d6g/91eIH/cHJ5/3t9g/9wc33/
+c3Z//3N2f/9wcnn/eXyG/3l7gf9ucXv/cHJ5/2xvef9wcnn/bnB3/3d6g/9ucXv/cHJ5/3t9g/9wc33/
+d3qD/3d6g/9wc33/d3qD/3t9g/9zdn//cHN9/3Byef91d33/Z2p0/2xvef9ucHf/c3Z//25xe/93eoP/
+eXuB/2xvef9zdn//cHJ5/25xe/9wc33/b3F1/2xudf9zdXz/am13/25wd/9wcnn/Zmlz/2ptd/9sbnX/
+bG95/2ptd/9zdXz/bW9z/25xe/9zdXz/c3V8/3Bzff9sbnX/bnB3/3Bzff9sb3n/bG51/3V3ff93eX//
+bnB3/3Byef9wcnn/cHJ5/3Byef91d33/bG51/3Byef9tb3P/bnF7/25xe/9sb3n/am13/2xudf9nanT/
+am13/2dqdP9iZW7/am13/25xe/9zdn//bG95/3V3ff9kZmz/bW9z/21vc/9ucHf/dXd9/2dqdP95e4H/
+cHN9/2xvef9sb3n/bnF7/3Bzff93eX//bnF7/2xvef9ucXv/e36H/3d6g/9ucHf/dXd9/3Byef9wcnn/
+bnB3/3N1fP9qbHP/bG51/2xudf91d33/bW93/29xeP9tcHj/aGt1/2Vocf9ucXv/amxz/3d5f/9sbnX/
+bnF7/3Byef9wcnn/cXN6/3F0ev9wc33/c3Z//3Byef9wc33/eXuB/3Bzff9wc33/bnF7/3Bzff9ucXv/
+cHN9/25wd/9ucHf/cHJ5/21vc/9nanH/b3F1/25wd/9ucHf/bG51/2ptd/9sbnX/dXd9/3N1fP9qbXf/
+cHN9/3Byef9wcnn/c3Z//2xudf9sbnX/c3Z//2ptd/9ucHf/ZGdx/3N2f/9zdn//c3Z//2ptd/9zdn//
+cXN7/3N2gP91eIH/cnV//3N1fP9qbXf/cHJ5/29xeP9ucHj/bW94/3J0e/90d3//eXyG/3Bzff9ucXv/
+d3l//3d5f/9ucXv/c3V8/25xe/9wcnn/bnB3/25wd/91d33/e36H/3Z4fP9wcnn/bnB3/3V4gf91d33/
+dnh8/25wd/9wcnn/c3V8/3Byef9zdn//e32D/2xvef9sb3n/Z2p0/3d6g/9zdn//dXiB/25wd/93eX//
+Z2p0/2xvef9ucHf/c3V8/2ZobP9sbnX/c3V8/2psc/9nanT/amxz/3l7gf9ucXv/Zmlz/2Zobv9sbnX/
+ZGdx/3Bzff9maG7/amxz/2Zpc/9qbHP/bnB3/2xudf9ucHf/cHJ5/2xvef9wc33/Z2p0/3Bzff9wc33/
+dXiB/3N2f/93eoP/d3qD/3l7gf91d33/c3Z//3V4gf95fIb/cHN9/3N1fP95fIb/d3qD/3V3ff95fIb/
+cHN9/3V4gf9wc33/bnB3/3d5f/91d33/bnB3/2xudf9sbnX/bW9z/25wd/94eX3/bG95/2xvef93eX//
+bnB3/3N1fP9zdn//bnF7/3d6g/93eX//cHN9/3Bzff9zdn//dXd9/2psc/9ucHf/bW9z/2xvef9qbXf/
+c3V8/3V3ff9kZ3H/bG51/2dqcf9maG7/Z2p0/2Rncf9kZ3H/bG95/2dqcf9qbHP/Z2p0/2Rncf9qbHP/
+Z2px/2psc/9qbHP/cHN9/2ptd/9zdXz/c3V8/3N1fP91d33/cHN9/3Bzff91eIH/bnF7/25wd/9zdn//
+d3qD/3Bzff9zdn//c3Z//3N2f/91eIH/dXiB/3Byef93eoP/cHN9/3d6g/95fIb/d3qD/3d6g/9wc33/
+c3Z//3V4gf9wc33/am13/3N1fP93eoP/e32D/3l7gf95fIb/am13/3N2f/9zdXz/c3V8/3l7gf9sb3n/
+eXuB/3V4gf9ucHf/bnB3/25xe/9zdXz/d3l//25xe/9nanT/bnF7/3d6g/93eoP/bnF7/3Bzff91d33/
+cHN9/25xe/93eX//Zmlz/2xvef9zdXz/e32D/3Bzff9zdXv/dHZ//3F0fv9sb3n/d3qD/3N1fP93eoP/
+cHJ5/3N2f/9zdn//c3Z//3Bzff9zdX3/dHeA/3V4gf9zdn//cHN9/3d6g/9wc33/bnB3/2dqdP9ucHf/
+cHJ5/3Byef9ucHf/b3F1/3Bzff9vcXX/Z2px/2xudf9sbnX/amxz/2ptd/9nanT/Z2p0/25xe/9sb3n/
+amxz/2ptd/9ucXv/am13/3N1fP9qbXf/Z2p0/25xe/9nanT/bG51/2RmbP9wcnn/bnF7/2xvef9kZ3H/
+bG95/2lsc/9ucXr/b3F5/2xvef9ucHf/Z2p0/2xvef9ucHf/bG52/2dqdP9tcHf/bG94/3Byef9nanH/
+Zmlz/3Byef94eX3/bnB3/3N1fP9wcnn/c3V8/2xudf9ucHf/c3V8/3l7gf9zdXz/bG95/21vc/92eHz/
+c3V8/3Bzff9sbnX/bG51/21vc/9sbnX/bnB3/3V3ff9tb3P/bG51/2dqdP91eIH/c3V8/3Byef9tb3P/
+eHl9/2ptd/9sb3n/bnF7/3Bzff9kZ3H/am13/3V3ff9ucHf/bG51/25wd/9+gIb/cHN9/3Byef9tb3P/
+bG51/2psc/97fYP/bG51/2ptd/9qbXf/b3F1/3N1fP9ucHf/bG51/3N1fP9ucHf/cHN9/2Zpc/9qbXf/
+am13/2ptd/9qbHP/cHN9/2xvef9wc33/bG51/2Rncf9qbHP/am13/2ptd/9sbnX/c3V8/2ptd/9nanT/
+d3l//2xudf9sb3n/bG51/2xudf94eX3/dXd9/3Byef9vcXX/bG95/25wd/9sb3n/eXuB/3Bzff9wcnn/
+eXuB/3Byef9zdn//eXuB/3Bzff9ucXv/dXd9/3V3ff9wc33/c3Z//3N2f/9sb3n/cHJ5/3Byef9wc33/
+cHJ5/3d5f/97fYP/cHJ5/25xe/9ucHf/b3F1/3Byef9sbnX/am13/3N1fP9tb3P/am13/25xe/9kZ3H/
+am13/2ptd/9ucXv/bG51/3N1fP9ucHf/c3V8/3N1fP9ucHf/dXd9/25xe/9qbXf/cHN9/2xudf9sbnX/
+c3V8/3V3ff9ucHf/dXd9/3Byef9wcnn/cHJ5/3Byef9tb3P/cHN9/2ptd/9sb3n/am13/25xe/9sb3n/
+am13/2dqdP9qbXf/am13/2BjbP9qbHP/cHN9/3V3ff91d33/dnh8/2Vmav9ucHf/bnB3/2xvef91eIH/
+Z2p0/3N2f/9zdn//bnF7/2xvef9ucXv/c3Z//3d6g/9ucXv/am13/25xe/95e4H/eXuB/21vc/9zdXz/
+c3V8/2xudf9sbnX/c3V8/2Zobv9qbXf/bG51/3V3ff9rbXX/bG52/25vdf9sb3j/Zmlz/3Bzff9sbnX/
+d3l//21vc/9sbnX/c3V8/3V3ff9vcnv/bnB3/29xef9zdn//bnF7/3N1fP91eIH/bnF7/25xe/9ucHf/
+cHN9/3N2f/9zdn//cHJ5/3N1fP91eIH/cHJ5/2Zpc/9ucXv/bnB3/29xdf9ucHf/bG95/3Bzff91eIH/
+cHN9/25xe/9ucXv/c3Z//29xdf92eHz/bW9z/2psc/9wcnn/amxz/25wd/9nanH/c3Z//3Bzff9ucXv/
+Z2px/3N1fP9ucHf/cHJ7/3R2f/9xdH7/cHJ5/2dqdP9sb3n/cHJ5/29xeP9tb3j/cnR6/3R2ff93eX//
+bnB3/3Byef93eX//dnh8/2ptd/9wcnn/cHJ5/3Byef9qbHP/cHJ5/3h5ff93eX//dXd9/25xe/9vcXX/
+eHl9/3d5f/91eIH/c3V8/3N1fP9wc33/cHJ5/2xvef9zdn//bG95/2xvef9sb3n/d3qD/25xe/9wc33/
+bG95/3d5f/9sbnX/b3F1/25wd/9ucHf/ZGZs/2Zpc/9wc33/amxz/2dqdP9sbnX/d3l//2dqdP9sb3n/
+Z2px/2Zobv9gY2z/eXuB/2Zpc/9sbnX/amxz/2xudf9zdXz/bW9z/2xvef91d33/bG95/3V4gf9sb3n/
+c3Z//3d6g/91eIH/cHN9/3l7gf93eoP/foCG/3N2f/9ucXv/c3V8/3N2f/91eIH/dXd9/36Ahv9zdn//
+c3V8/36Biv9zdXz/cHN9/29xdf9vcXX/dnh8/3V3ff9wcnn/bW9z/25wd/9ucHf/am13/3d5f/9ucXv/
+am13/3h5ff9sb3n/c3Z//3t+h/9sbnX/bG95/3N1fP9ucXv/cHN9/25xe/9ucXv/Z2p0/2ptd/9sbnX/
+cHJ5/25wd/9zdn//dXd9/2xvef9vcXX/bW9z/2xudf9ucXv/am13/21vc/91d33/bnB3/25wd/91d33/
+Z2px/25wd/9wcnn/c3Z//25wd/95e4H/d3qD/3d6g/93eX//cHN9/3Z4fP9wcnn/bnB3/3N1fP9sbnX/
+bnB3/3V3ff93eX//cHJ5/3N1fP9wcnn/c3V8/3Byef91d33/bW9z/3V3ff9ucHf/cHJ5/3N1fP9ucXv/
+am13/2xudf9qbXf/bG95/2xudf9iZW7/am13/3N1fP9zdXz/c3V8/3d5f/9lZmr/bW9z/2xudf9ucHf/
+c3Z//2dqdP9wc33/c3Z//3Byef9sbnX/cHJ5/3N1fP93eoP/bG51/2psc/9ucHf/d3l//3d5f/9ucHf/
+dXd9/3V3ff9ucHf/bnF7/3d5f/9qbXf/cHJ5/29xdf91eIH/bnF7/3Fze/9ydHz/bnF7/2ptd/91d33/
+bnB3/3V3ff9vcXX/bnF7/3N2f/93eoP/cnV8/25wd/9tb3j/dnh8/25wd/9vcXX/bnB3/2xvef9qbXf/
+Zmlz/25xe/9qbXf/am13/2dqcf9kZ3H/Z2p0/2Zobv9gY2z/Z2p0/2Zpc/9maXP/amxz/2Rncf9qbXf/
+am13/2dqdP9sb3n/am13/3Bzff9sbnX/dnh8/29xdf9qbHP/cHN9/3Byef9zdn//Zmlz/3Bzff9wc33/
+cHN9/2ptd/9zdn//bnB3/3FzfP9wcnr/a211/25wd/9sbnX/bG95/25weP9xc3r/cHN7/3J1fv94eoP/
+fYCJ/3N2f/93eoP/eXyG/3d6g/9zdXz/dXiB/3d6g/9wc33/am13/25wd/93eoP/eXuB/3d5f/9zdn//
+bnF7/3t9g/95e4H/c3Z//3Byef9wcnn/cHN9/2xvef9ucHf/dXd9/3Byef9qbHP/b3F1/3d6g/9wc33/
+c3Z//2xvef91d33/am13/25wd/9sb3n/bnF7/2dqcf9sbnX/dnh8/29xdf9qbXf/bG51/3t9g/9qbXf/
+bnF7/2xudf9sbnX/Z2px/3t9g/9qbHP/bnB3/2xudf9tb3P/bnF7/25wd/9ucHf/dXd9/3Byef91d33/
+amxz/25wd/91d33/dXd9/25wd/9zdXz/bG51/3N1fP9sbnX/ZGZs/2dqdP9qbXf/am13/2dqdP9sb3n/
+amxz/2Rncf9zdXz/Zmlz/2dqdP9kZ3H/ZGZs/2ptd/9sb3n/Z2p0/2Jlbv9kZmz/XWBq/2BjbP9qbXf/
+Zmlz/2Jlbv9sb3n/am13/2xvef9zdXz/Z2p0/2xudf9ucXv/bnF7/3Byef9zdXz/c3V8/2psc/9ucHf/
+bG95/2xvef9tb3P/c3V8/3h5ff9sbnX/bnB3/25wd/9wc33/cHN9/2xvef9ucHf/dXd9/3Bzff9ucHf/
+cHN9/2dqdP9sb3n/c3Z//3Z4fP9qbXf/c3V8/2ptd/9sbnX/cHN9/2xvef9zdXz/bnF7/2xudf9sb3n/
+amxz/2psc/9sb3n/bG95/2Zpc/9qbXf/Z2p0/25xe/9qbXf/am13/2xudf9wc33/bG51/2xvef9sb3n/
+bnF7/3Byef9ucHf/bnB3/3N1fP9tb3P/Zmhu/29xdf91d33/dXd9/3d5f/93eoP/amxz/25wd/9ucXv/
+c3Z//3d5f/9sb3n/c3Z//3l7gf9zdXz/am13/3N2f/93eoP/eXyG/3Byef9sb3n/cHN9/3l8hv97fof/
+cHN9/3t9g/97fYP/dXd9/3Bzff97fYP/am13/25xe/9ucHf/eXuB/21wef90dnz/dXd//3R3gP9zdXz/
+eXuB/3Bzff95fIb/c3Z//3Bzff91eIH/eXuB/3Z5gv9ydHz/c3aA/3p9g/9zdn//cHN9/3Bzff9ucXv/
+c3Z//3Bzff93eoP/d3qD/3V4gf9zdXz/cHN9/3N2f/9sb3n/Zmlz/3Bzff9ucHf/c3V8/3N2f/9sb3n/
+bG95/3Byef9ucXv/cHN9/25wd/9wc33/bnB3/3h5ff9vcXX/amxz/25xe/9vcXX/c3V8/2Zpc/9wc33/
+c3V8/3Byef9sb3n/d3qD/3Byef9vcnv/cHJ6/29xef9ucHf/amxz/21vc/9sbnX/b3F1/25wd/9wcnr/
+cXR9/3V3ff9sb3n/c3V8/3h5ff93eoP/cHN9/25xe/9zdn//cHN9/2dqdP9wc33/e32D/3l8hv93eoP/
+c3Z//3Bzff93eX//dXd9/3Byef9ucHf/b3F1/3Bzff9ucXv/bnF7/3N2f/9ucHf/Z2p0/2ptd/93eX//
+bnB3/25wd/9qbHP/dXd9/2xudf9vcXX/bnB3/2xvef9maXP/bG95/3Z4fP9vcXX/bG51/25xe/9/goz/
+dXiB/3N2f/9ucHf/b3F1/2psc/9+f4P/bG51/29xdf9ucHf/b3F1/3Byef9sbnX/bnB3/3V3ff9wc33/
+c3Z//2psc/9vcXX/dXd9/3N1fP9qbXf/bnF7/2xudf9wc33/amxz/2BjbP9kZ3H/amxz/2ptd/9maXP/
+cHN9/2xudf9maXP/d3l//2xudf91d33/bG51/2ptd/91d33/bnF7/2ptd/9nanH/Zmlz/2Rncf9kZ3H/
+cHN9/2xvef9nanT/dXd9/25xe/9ucXv/c3V8/25wd/9sb3n/dnh8/3Byef9ucXv/c3V8/3Bzff9maXP/
+bnB3/3Byef9wcnn/bnB3/3N2f/95e4H/cHN9/3Byef9wc33/dXiB/3N2f/9wc33/cHN9/3t9g/93eoP/
+dXiB/3t9g/9zdn//d3qD/3l8hv95fIb/cHN9/3l8hv9zdn//cHN9/3l7gf9ucXv/c3Z//3V3ff9vcXX/
+c3V8/25wd/9wcnn/dXd9/3Z4fP9zdXz/cHJ5/2xvef9ucXv/bnF7/2ptd/9qbHP/bnF7/2ptd/9qbHP/
+am13/3Bzff9wc33/am13/2xudf9ucXv/bG51/2Rncf9sbnX/c3V8/3V3ff9zdXz/c3V8/2BjbP9maXP/
+am13/2xudf9wc33/Zmlz/25xe/91d33/bG51/2Zpc/9sb3n/bnF7/3V3ff9maXP/YGNs/2dqcf9wcnn/
+cHJ5/2dqcf9ucXv/bG95/2psc/9maG7/am13/2BjbP9nanH/Z2px/3V3ff9qbHP/bnB3/29xd/9sbnX/
+amxz/2xvef9maXP/cHJ5/2psc/9nanH/bG95/3Bzff9ucXr/aGtz/2ptd/9zdXz/bW9z/2xudf9sb3n/
+bG95/2ptd/9maXP/bnF7/2ptd/9qbHP/ZGdx/2dqcf9qbXf/Z2p0/2Zpc/9qbXf/bG51/2xudf9tb3P/
+bG51/25wd/9sb3n/cHJ5/3N1fP9sb3n/d3l//3Bzff93eX//bG95/2ptd/9ucXv/cHJ5/3N2f/9qbXf/
+d3qD/3N2f/9zdn//bnB3/3N2f/9ucHf/bnB4/2ptdv9rbnf/bG51/2Rncf9sbnX/am13/2psc/9pbHT/
+bXB4/2xueP9wc33/bG51/3Byef94eX3/cHN9/3Bzff9sb3n/c3Z//25xe/9nanT/bnF7/3d5f/91eIH/
+c3Z//25xe/9zdn//eXuB/3Z4fP91d33/bG51/21vc/9ucHf/bG51/2xudf9zdXz/bG51/2Rncf9maXP/
+cHJ5/2dqcf9maXP/YmVu/25xe/9nanT/bG51/2xudf9qbXf/Zmhu/21vc/9zdXz/bW9z/2ptd/9sb3n/
+f4GH/25xe/9sb3n/bG51/2xudf9qbHP/fX6B/2psc/9sbnX/b3F1/29xdf9zdXz/bG95/2xvef9wc33/
+cHN9/3Bzff9qbHP/cHJ5/3V3ff9zdn//bnF7/3V3ff9ucHf/dXiB/3Byef9nanH/bnF7/3Bzff93eoP/
+bG95/3l7gf93eoP/d3l//3+Bh/9zdXz/d3qD/3Bzff9wc33/eXyG/3d6g/9ucXv/bnB3/2xvef9sbnX/
+am13/3V3ff9wc33/Z2p0/3h5ff9zdXz/c3V8/3d5f/9sb3n/bG95/3h5ff9ucHf/c3V8/3V3ff91d33/
+Z2px/25wd/9wc33/bG95/2xudf9sbnX/c3V8/2ptd/9maXP/amxz/2ptd/9ucXv/am13/2ptd/9zdXz/
+cHN9/2ptd/9ucXv/ZGdx/2ptd/9nanT/cHJ5/2Rncf9zdXz/am13/2ptd/9ucXv/am13/3Bzff9wc33/
+bG95/3V3ff9qbXf/bnB3/3N2f/91eIH/cHN9/3V3ff91d33/dXd9/3Bzff9wc33/cHN9/3Z4fP9wc33/
+cHN9/3N2f/93eoP/d3qD/25xe/9zdXz/dXiB/3Byef9sb3n/cHN9/3l7gf91eIH/dXd9/3d5f/9kZ3H/
+bnB3/2xudf9zdXz/eHl9/25wd/91d33/dnh8/2ptd/9maXP/c3V8/3N1fP93eX//bG51/2psc/9sbnX/
+dXiB/3V3ff9vcXX/c3Z//3N2f/9sb3n/bnB3/3N2f/9sb3n/bG95/21vc/95e4H/b3F2/3J0ev90dn7/
+dnmC/3V3ff95fIb/dXd9/3t+h/9wc33/c3V8/3V4gf93eoP/dnmB/3Fzev9vcXf/dXh+/29xdf9tb3P/
+bG51/25wd/9ucHf/bnB3/3N1fP9ucHf/bnB3/25wd/9vcXX/dXd9/29xdf9maG7/cHJ5/2ptd/9nanT/
+amxz/2Zpc/9sbnX/bG95/2xvef9qbXf/amxz/3Byef9maXP/bG95/2Zobv9dYGr/YmVu/2Zobv9maXP/
+XWBq/2ptd/9nanT/Zmhu/2Jlbv9nanT/Zmhy/2hqcf9oa3P/aWtz/2ptd/9qbHP/bG51/25wd/9rbXL/
+aGty/2ttc/9pbHX/Z2p0/2Vocv9maXP/bnF7/3Bzff9ucHf/bG51/3N1fP9sbnX/Zmlz/2xvef9zdXz/
+c3V8/3N1fP9qbHP/bnF7/3N1fP9wc33/bnF7/2Zpc/9nanH/Zmlz/2Rncf9sbnX/cHN9/2psc/9kZ3H/
+ZGdx/25wd/9iZW7/ZGdx/11gav9nanT/ZGdx/2Zobv9qbHP/Z2px/2Jlbv9nanT/cHN9/2dqdP9qbXf/
+bG95/36Biv9ucXv/bG95/21vc/9tb3P/b3F1/4CChv9ucHf/cHJ5/3Byef9zdXz/c3Z//3Byef9wc33/
+cHN9/3N2f/9wc33/am13/25wd/9wc33/dXd9/25wd/9ucHf/bG51/3Bzff9nanT/YmRq/2dqdP9qbXf/
+bG95/2Zpc/9ucXv/Z2p0/2Jlbv9ucHf/YmVu/2dqdP9nanH/Z2px/3Byef9zdXz/amxz/2dqcf9nanT/
+Zmlz/2dqdP9sb3n/am13/2Zpc/91d33/bG95/3Byef93eX//dXiB/3V4gf97fof/d3qD/3t9g/93eoP/
+c3Z//2Zpc/9zdXz/c3V8/3V4gf9sb3n/cHJ5/3d5f/9ucXv/bG51/25xe/9wc33/dXiB/3N1fP91d33/
+eXuB/3t9g/91eIH/foCG/3V3ff93eoP/dXiB/3V4gf9sb3n/d3qD/3N2f/9wcnn/dXiB/3V4gf95e4H/
+dXiB/3Bzff93eX//c3Z//3Byef9wc33/dXiB/3N2f/91d33/c3V8/3N1fP9wcnn/bnB3/3Byef92eHz/
+cHJ5/25wd/9ucHf/c3V8/3N1fP9sbnX/bW9z/3N2f/9wcnn/amxz/25xe/93eX//dXiB/3N2f/9zdn//
+Z2p0/2ptd/9ucXv/cHN9/3V4gf9wcnn/c3Z//3d5f/9sb3n/Z2p0/3N2f/91d33/d3l//25wd/9sbnX/
+b3F1/3h5ff95e4H/b3F1/3N1fP91d33/bG95/2ptd/91d33/amxz/2ttdP9sbnX/c3Z//2ptd/9vcXj/
+cHJ3/25wd/9tb3P/cHJ5/2xudf93eX//am13/21vc/9zdXz/dXd9/3J0e/9sb3n/bXB6/3Bzff9sbnb/
+amxz/2ptd/9rbnj/bG51/2tud/9wcnn/bG95/25wd/9ucHf/cHJ5/3V3ff9ucHf/Zmlz/3R3gP9tcHf/
+bnB3/3Fzef9ucHf/cnR7/3Bzff9ydX7/cHJ8/3Bzff93eoP/cHN9/3h6gP9zdn7/bnF7/3Byef9vcXj/
+bnF7/2hrdf91d33/bW92/25wd/9vcXj/eHl9/29xef9wcnn/cHN8/3Z3fP95e4H/dXd9/3d5f/96fIP/
+cnV+/3F0e/91d37/dniA/3V3ff9wcnn/c3Z//3Z4f/93eoP/dXiB/3Bzff91eIH/bnF7/2ptd/91eIH/
+e32D/3d5f/93eX//c3V8/3d6g/9zdn//dnh8/3N1fP9ucHf/bnF7/25xe/9vcXX/bG95/3V3ff9vcXX/
+amxz/2xudf92eHz/bnB3/3Byef9nanT/cHN9/2ptd/9ucHf/c3Z//3Byef9qbHP/b3F1/3Z4fP9qbHP/
+bG51/25wd/9/gYf/cHJ5/2ptd/9tb3P/bnB3/2ptd/9/gYf/bnB3/29xdf9ucHf/bG95/3Byef9tb3P/
+am13/2ptd/9wc33/bnF7/2dqdP9sbnX/c3V8/3h5ff9wcnn/bnF7/2xvef9wcnn/am13/2Vmav9sbnX/
+bnF7/3Byef9sbnX/dnh8/3Bzff9ucHf/eXuB/3V3ff93eoP/cHN9/3N2f/97fof/e36H/3V4gf91d33/
+dXd9/25xe/9zdXz/dXiB/3V4gf9wc33/e32D/3d6g/95fIb/e36H/2xvef9ucXv/d3l//25xe/9zdn//
+c3Z//3N2f/9maG7/bnB3/3N1fP9wcnn/b3F1/21vc/9zdXz/bG51/2dqcf9wcnn/bnF7/3N1fP9ucHf/
+bG95/3V3ff9zdXz/bG51/3Byef9ucHf/c3V8/25wd/91d33/am13/3V4gf9ucXv/amxz/2xvef9ucXv/
+cHN9/3Bzff9wcnn/c3V8/3Byef9wcnn/cHN9/3Bzff9zdn//c3Z//3Bzff9wcnn/dXd9/3Byef9ucHf/
+d3l//25wd/9wcnn/bnB3/3V3ff91d33/bnF7/3Byef91eIH/bnF7/2ptd/9sb3n/c3Z//3Z4fP9wcnn/
+c3V8/2Zobv9nanT/bnF7/2xvef91d33/bG51/2ptd/9zdXz/Z2p0/2Rncf9ucXv/c3V8/3N1fP9qbXf/
+am13/2psc/93eX//d3qD/2xudf9ucXv/bG95/2ptd/9qbXf/c3V8/2ptd/9xc3r/bnB3/3d5f/9ucHf/
+cHJ5/29xd/9ucXv/amxz/25wd/9ucHf/d3l//25wd/9vcXX/dXd9/3d5f/9wcnn/bG52/25xe/9xdHz/
+am13/2ttdf9qbXf/bG51/2xudf9rbnf/bXB6/2xudf9qbXf/bG51/3Byef90dnz/cHJ5/2hrc/9ydX7/
+aGt1/25wd/9wcnn/bnB4/25weP9ydHv/b3J7/29ye/9vcXj/dXiB/3F0ff9zdn//bG95/2xvef9ucHf/
+cXN3/3Byef9oa3P/cnR8/2xveP9qbXf/aWx1/3R2ff9pbHP/am13/2dqc/9pbHb/bG51/2Rncf9maG7/
+bG95/2psc/9maXP/bG94/29xef9sb3f/am12/2ttdv9ydHr/c3V8/3Bzff9vcXX/cHJ5/2xvef9qbXf/
+cHN9/3d5f/93eX//d3l//3Byef91eIH/c3Z//3d6g/93eoP/cHN9/3N2f/9wc33/bG95/29xdf91d33/
+b3F1/2psc/9sbnX/dnh8/25wd/9sbnX/bG51/25wd/9qbHP/bG51/2xvef9wcnn/amxz/2xudf92eHz/
+Z2px/25wd/9ucHf/f4GH/3Z4fP9zdXz/cHJ5/25wd/9qbXf/gYOK/2xvef9ucXv/bnB3/3V4gf9zdn//
+c3Z//3N2f/91eIH/e32D/3t9g/92eHz/eXuB/31+gf9/gYf/eXuB/3V4gf9zdn//dXiB/3Bzff9qbXf/
+c3V8/3d6g/93eoP/c3Z//3t9g/93eoP/bnF7/3t9g/9ucXv/dXiB/25xe/9vcXX/eXuB/3d6g/9sb3n/
+bnB3/25wd/9nanH/bW9z/25wd/9sbnX/Z2px/3N2f/9ucXv/c3Z//3V3ff91d33/d3qD/36Ahv91eIH/
+eXuB/3d6g/93eoP/bG95/3t9g/97fYP/d3qD/3V3ff91d33/dXiB/3V4gf9ucXv/d3qD/3V4gf9zdn//
+bnB3/3Byef95e4H/dXiB/3Byef9zdn//bnB3/3N1fP9zdXz/bnB3/21vc/95e4H/dnh8/21vc/9sb3n/
+bnF7/3Bzff9wc33/c3V8/25xe/9ucXv/bG95/2xvef9sb3n/cHN9/3Bzff9ucXv/cHN9/25xe/9qbHP/
+bG51/3N1fP9nanT/amxz/2psc/9ucXv/cHJ5/2Zobv9kZ3H/Zmlz/2Zpc/9dYGr/Zmlz/2dqdP9sb3n/
+ZGdx/2dqdP9cX2j/YGNs/2Zpc/9maXP/bG95/2Rncf9kZ3H/cHJ5/2Zobv9kZ3H/am13/2xvef9zdXz/
+bG95/2xudf9sbnX/d3l//3l8hv9sbnX/c3V8/3N1fP9zdXz/b3F1/3V3ff9sb3n/cnR6/3Fzev90dn7/
+bnF5/3J0e/9wcnf/cHJ5/2xudf9ucHf/bnB3/3d5f/9sbnX/b3F1/3V3ff91d33/cnR7/2xudv9sbnb/
+cXN7/2ttc/9qbHX/bG93/3Fzef9rbXb/bG53/29yev9tcHj/a254/2xvef9ucXn/c3V7/29yev9rbXb/
+cnV//25xef9wcnn/c3V8/3V3ff9ydHn/eXuA/3V3fv90dn3/c3V9/3h7hf91eID/dXd+/3N1fP90dnz/
+cHJ5/3R2fv9xdH3/b3J8/3J1fP9wc3v/a252/29xeP9ydX//bW94/2xveP9nanT/a253/2xudf9qbXf/
+bW9z/3Bzff9qbXf/aGt0/2xvef9zdn3/am11/21veP9sbnb/bW94/2xvef9qbXf/am13/3Bzff9sbnX/
+Z2p0/2xvef9ucXv/c3V8/2xvef9sbnX/c3V8/3N1fP9zdXz/cHJ5/21vc/9qbXf/bnF7/21vc/9ucHf/
+dnh8/21vc/9qbHP/cHJ5/3l7gf9wcnn/bG95/2xvef9ucXv/bnB3/2xvef9zdn//cHN9/2xvef9qbXf/
+eHl9/2dqdP9nanT/bG51/3t9g/9sb3n/cHN9/2xvef9qbXf/Z2p0/3t9g/9qbHP/Z2px/2dqcf9maXP/
+Z2px/2dqcf9qbHP/am13/25xe/9qbXf/Z2p0/2xudf9wc33/c3V8/2xvef9qbXf/bW9z/25wd/9ucHf/
+Zmhu/2xudf9sbnX/c3V8/2dqdP9zdn//c3Z//25wd/95e4H/am13/3V4gf9zdn//cHJ5/3l7gf97fYP/
+cHJ5/3N2f/9wcnn/bG95/3Byef9zdn//dXiB/2xvef91eIH/c3Z//3d6g/91eIH/c3V8/3N2f/97fYP/
+bnF7/3N2f/9zdn//c3Z//2dqdP95e4H/c3Z//25xe/9ucHf/bG95/25xe/9zdXz/Zmlz/3N1fP9zdXz/
+c3V8/25wd/9wcnn/dnh8/3Z4fP9ucHf/cHN9/25wd/9wcnn/dXiB/3Bzff9wcnn/eXyG/3l8hv9zdXz/
+bnF7/3V3ff9zdn//c3Z//3d5f/9wc33/cHN9/25xe/9wc33/cHN9/3h5ff91d33/c3V8/3N1fP9wcnn/
+am13/2psc/91d33/am13/2xudf9maXP/bG95/3N1fP9nanH/Z2px/2ptd/9qbXf/Zmlz/2xudf9zdXz/
+dnh8/3Byef9zdXz/Zmlz/2xvef9wc33/dXiB/3d5f/9wc33/cHN9/36Biv9wcnn/c3V8/3t9g/9+gIb/
+e32D/3d6g/9wc33/cHN9/3l8hv+Bg4r/dXiB/3t9g/93eoP/eXuB/3N2f/91d33/b3F1/3R2fP9vcXn/
+cnR8/21vdv90dnv/bnB3/3Byef9qbXf/bG95/2xvef93eX//bG51/25wd/93eX//e36H/3Z5gv9tcHr/
+b3J7/3Z3ff9rbnf/bG94/2xveP90dn//bW92/3J1ff9wc33/bW92/21wev9ydX//cHN9/3F0ff9tcHn/
+aWty/21vdv9qbHP/bG94/3V3fv9tcHn/a210/3Z4fv9tb3b/bW92/21veP9ucXr/b3F6/21wef9tb3b/
+cXN6/2xudP9ydHv/b3F5/2xvd/9ydHz/bW93/2tueP90dnz/cXN6/29xeP9sbnX/amxz/2xudf9qbHP/
+bG51/2xudf9wc33/bG51/2ptd/9wc3z/c3V8/21vdv9zdXz/bnB3/25xev9ucHf/cHJ5/25xe/9zdn//
+cHJ5/2ptd/9zdXz/cHN9/3V3ff93eX//cHJ5/3V4gf9zdn//dXd9/3Bzff9ucHf/c3V8/3Bzff9zdXz/
+cHN9/3l7gf9wc33/am13/3Byef93eX//am13/2xvef9sb3n/bG95/2ptd/9sbnX/dXd9/3Byef9qbXf/
+Z2p0/3V3ff9nanT/bG51/29xdf9+gIb/dXd9/3V3ff9ucHf/bnB3/25wd/+Bg4r/bnB3/29xdf9vcXX/
+bG51/2xudf9ucHf/bnB3/21vc/91d33/bnB3/25wd/9vcXX/dnh8/3l7gf9zdn//cHN9/25wd/9ucXv/
+bnB3/2dqcf9vcXX/bG51/3N1fP9qbXf/dXiB/3N2f/9ucHf/d3l//2dqdP91eIH/c3Z//3N1fP9zdn//
+eXyG/3N1fP93eoP/cHN9/3Bzff9zdXz/bnF7/3V4gf9wc33/eXyG/3V4gf95e4H/d3qD/2xudf9sbnX/
+dnh8/3Byef9zdXz/bnB3/25xe/9gY2z/bnF7/25xe/9ucHf/bG51/2xudf9sb3n/bG95/2dqcf9zdXz/
+bG95/3N2f/9ucHf/bnB3/3N1fP92eHz/b3F1/3Byef9ucHf/cHJ5/3N1fP9sb3n/bG51/3d5f/91d33/
+am13/2xudf9ucXv/bG95/25xe/9wc33/bG51/2xvef9sbnX/Z2p0/2xvef9wcnn/bG95/2dqdP9wc33/
+bG95/2xvef9qbXf/dXd9/2ptd/9qbXf/am13/3Z4fP92eHz/bnB3/25xe/95e4H/cHN9/3Byef9zdn//
+d3qD/3l7gf93eoP/e32D/3Bzff9zdn//d3qD/36Ahv97fof/dXiB/3d5f/+DhYz/dXiB/3V3ff97fYP/
+foCG/3t9g/9zdn//cHJ5/3N1fP93eX//d3qD/2xvef93eX//c3Z//3N2f/9ucXv/dXd9/25wd/94eoD/
+dHeA/3N2f/9ucXv/dnh//2xvef9wcnn/bG51/2xudf9qbHP/eHl9/2xvef9sb3n/d3l//3d6g/91d33/
+bnF7/3Bzff96fIP/bnB3/29xdf9ucXr/d3h8/2xudf9ydHv/bnB3/2ptd/9vcXj/bnF7/2xudf9wcnn/
+b3F4/2Zpc/9rbnX/am13/29yfP93eoD/b3J8/2xvef95e4H/b3F1/2xvef9ucXv/b3J8/3F0ff9vcnv/
+bnF7/3Z4fv9wcnn/dnh+/3J0fP9ydHv/dXd9/2xudv9nanT/dnh+/25xe/9ucXv/am13/2ptdP9qbHP/
+bW9z/2xudf9qbHP/cHN9/2xudf9sb3n/dXd9/3d5f/9wc33/eHqA/3N2f/9sb3n/c3Z//3d6g/91eIH/
+e32D/3N2f/9wc33/e32D/3l8hv9+gIb/e32D/3Bzff95e4H/d3l//3d5f/9ucXv/bnB3/25wd/9ucXv/
+bG95/2xudf9wc33/amxz/2BjbP9nanH/bG95/2Zpc/9nanH/Zmlz/2ptd/9nanT/am13/3V3ff9ucXv/
+am13/2ptd/9zdXz/bG51/2xudf9qbXf/e32D/25xe/9wc33/am13/2ptd/9qbXf/f4GH/2ptd/9qbXf/
+bG95/2ptd/9wcnn/bnB3/25wd/9sbnX/dnh8/25wd/9sb3n/bG95/3V3ff93eX//cHN9/3N2f/9wcnn/
+cHN9/3Byef9nanT/cHJ5/3Byef9wc33/am13/3N2f/9zdn//cHJ5/3l8hv9ucXv/dXiB/3Bzff9vcXX/
+bnB3/3h5ff9tb3P/bG95/2psc/9qbHP/Z2p0/2ptd/9ucXv/Zmlz/2xvef9sbnX/am13/25xe/9sbnX/
+bW9z/3h5ff9wc33/c3V8/3N1fP9wc33/amxz/3Byef9ucHf/bnB3/29xdf9sbnX/bnB3/3Byef9maXP/
+bnF7/2xudf9ucXv/am13/2xvef9zdXz/cHN9/2xudf9wcnn/bG51/3Byef9ucXv/bG95/2ptd/93eX//
+dXd9/3Byef9ucHf/c3V8/3N1fP91d33/c3V8/25wd/9wcnn/bnB3/3Bzff9zdn//eXuB/3N2f/9wc33/
+eXuB/3Bzff9wc33/cHJ5/3Z4fP9zdXz/bG51/2xvef91d33/c3V8/2xudf9qbHP/bG95/2ptd/9qbHP/
+bG95/2xvef9wcnn/am13/3Bzff9nanT/Z2p0/25xe/9zdXz/dXd9/2xudf9sbnX/c3V8/2xudf9qbXf/
+cHN9/3Z4fP9wcnn/bnB3/2xudf9tb3P/dXd9/3V4gf9sbnX/dXd9/3V3ff91d33/c3V8/3Z4fP9vcXX/
+c3Z//3V3ff9sbnX/Z2p0/3V3ff9qbXf/bnF7/2dqdP9qbHP/Z2p0/3V3ff9ucHf/bnB3/3N1fP92eHz/
+dXd9/3Byef9wcnn/eXuB/25wd/9sb3n/c3V8/3Z4fP9ucHf/cHJ5/21vc/9sbnX/cHJ5/3N2f/9wcnn/
+c3Z//3N2f/9qbXf/c3V8/3N1fP93eoP/eXyG/25xe/9qbXf/fX6B/21vc/9nanT/bnF7/2xvef9sb3n/
+bG95/2xvef9wc33/amxz/2xvef9sb3n/bG95/25xe/9nanT/ZGdx/3V3ff9wcnn/bnB3/21vc/9vcXX/
+am13/29xdf9ucHf/bG95/3N2f/9sb3n/bG95/3N2f/93eX//bnF7/3d5f/9wc33/cHJ5/3N2f/91eIH/
+c3Z//3l7gf9sb3n/bnB3/3N1fP91d33/dXd9/3N1fP9sbnX/dnh8/3Z4fP91d33/bnB3/21vc/9qbHP/
+am13/2xudf9tb3P/cHJ5/2xudf9kZmz/bnB3/3V3ff9sbnX/b3F1/2psc/9wcnn/bG51/2xvef91d33/
+c3Z//3Byef9ucHf/e32D/3N1fP9zdXz/c3V8/4OFjP91eIH/fX6B/3d5f/97fYP/dXd9/4mLkf93eX//
+dXiB/3d6g/9zdn//dXiB/3Bzff9zdn//dXd9/3t+h/97fYP/dXd9/3Bzff95e4H/f4GH/3d6g/9ucXv/
+bnB3/3Byef9wcnn/Z2p0/25wd/9vcXX/cHJ5/2psc/9ucHf/bnB3/2xudf93eX//am13/3N2f/9sb3n/
+bnB3/25xe/91eIH/am13/3Bzff9ucHf/bG95/3Byef9wcnn/c3V8/2xudf9wcnn/bnB3/25wd/9zdXz/
+cHN9/3N1fP91eIH/c3Z//3N2f/95e4H/dXiB/25wd/9ucXv/bnF7/25xe/9vcXX/amxz/3V3ff9zdXz/
+amxz/3N1fP9tb3P/cHN9/2ptd/9ucHf/c3V8/3d5f/9qbXf/cHJ5/21vc/9sb3n/c3V8/25wd/9qbXf/
+dXd9/3V4gf9wc33/bG95/3N2f/91eIH/d3l//3N2f/9zdXz/dXiB/3V4gf95fIb/dXiB/3t+h/93eoP/
+dXiB/3t+h/9zdn//dXiB/25xe/97fYP/c3Z//2xvef9wc33/c3Z//3d5f/9vcXX/b3F1/3Bzff9wc33/
+bnB3/3Bzff9zdn//c3V8/3Byef91d33/bG51/21vc/91d33/dXd9/3d5f/9sb3n/bnF7/3l7gf9wcnn/
+cHJ5/3V4gf93eoP/c3Z//3N2f/9zdn//cHJ5/3d5f/95fIb/bnB3/3N2f/91d33/dXd9/25xe/95e4H/
+am13/3V4gf9wc33/bnB3/25wd/94eX3/b3F1/3V3ff9vcXX/b3F1/2xudf9ucXv/bG51/25wd/91d33/
+dnh8/3N1fP9sb3n/bnB3/3Z4fP9tb3P/bG51/25xe/91d33/amxz/2xvef9qbXf/bW9z/3Byef91d33/
+bW9z/25xe/9ucXv/Z2px/21vc/9sbnX/c3Z//36Ahv9sb3n/ZGdx/3d6g/9kZ3H/YGNs/2Zpc/9kZ3H/
+ZGdx/2Zpc/9nanT/bG95/2psc/9qbXf/bnF7/25xe/9ucXv/Z2p0/2Zpc/91d33/cHN9/25xe/9sbnX/
+amxz/2psc/9ucHf/bnB3/2xudf91eIH/bnF7/3Bzff93eoP/eXuB/3Bzff91eIH/cHN9/2ptd/9ucXv/
+cHN9/25wd/91d33/bW9z/2xudf9ucHf/cHN9/3N1fP9wc33/bG95/3V3ff9ucXv/cHN9/2ptd/9nanH/
+ZGdx/2Zpc/9iZW7/ZGdx/2Zpc/9nanH/XWBq/2psc/9ucXv/ZGdx/2xudf9kZ3H/bG95/2Zpc/9qbXf/
+cHN9/3Bzff9sbnX/bW9z/3N2f/9sb3n/bnB3/29xdf9+gIb/cHJ5/3Byef9ucHf/cHJ5/21vc/9+gIb/
+bG95/2xudf9wcnn/bG51/25xe/9qbHP/amxz/2dqdP93eX//cHN9/2ptd/9sbnX/c3V8/3N2f/9ucXv/
+Z2px/2dqcf9nanT/Z2px/2BjbP9nanT/bG51/2xvef9qbHP/am13/2ptd/9qbXf/dXiB/2psc/9ucXv/
+bW9z/2xvef9ucXv/d3qD/25wd/9wcnn/bnB3/2ptd/9wcnn/c3Z//3V3ff9sb3n/cHN9/3N1fP9wc33/
+eXuB/3d5f/91d33/e32D/3t9g/97fYP/f4GH/36Ahv9zdXz/d3l//3t9g/93eX//d3l//3d5f/9+f4P/
+e32D/3Bzff93eoP/c3Z//36Ahv9zdn//dXiB/3t9g/97fof/c3Z//3V4gf9zdXz/cHN9/3l7gf9wc33/
+bnF7/3V3ff91eIH/bnF7/25xe/91d33/bnF7/3N1fP9ucXv/am13/3Byef9ucHf/dnh8/29xdf94eX3/
+bnB3/25wd/93eX//cHJ5/3Byef9ucHf/eHl9/3Byef9ucHf/dXd9/3N1fP95e4H/b3F1/21vc/9wcnn/
+bG95/2xudf9ucXv/cHJ5/3N1fP9ucHf/c3V8/2dqdP9maXP/bnF7/25xe/9ucXv/ZGdx/2dqcf9ucHf/
+Zmhu/2Jlbv9qbXf/cHJ5/2xvef9ucXv/bG95/2dqdP9wc33/c3Z//2xudf9wc33/cHN9/3Byef9sbnX/
+cHN9/2dqdP9qbXf/bG95/2xvef9qbXf/c3V8/2xudf9wc33/am13/2ptd/9qbXf/cHJ5/25wd/9ucHf/
+dXd9/3V3ff9zdXz/bnB3/25wd/92eHz/bG95/2dqdP91d33/dXd9/2xudf9qbXf/bG51/2xudf9qbXf/
+c3V8/25wd/9sb3n/cHN9/2ptd/9wcnn/bnB3/3Bzff9+gIb/bnB3/2psc/9/gYf/b3F1/2psc/9zdXz/
+bnB3/3Byef9wcnn/bnF7/3Z4fP9wcnn/c3V8/3Byef91d33/cHJ5/2xudf9maG7/d3l//3l7gf9zdn//
+bnB3/2xudf9nanT/bnB3/25wd/9qbXf/c3Z//2ptd/9sb3n/c3Z//3d5f/9ucXv/dHeA/3N2f/9rbnf/
+bnF7/25xe/9ucHf/eXuB/2xvef9sb3n/cHN9/3d5f/95e4H/dXd9/3Bzff91d33/cHN9/3Z4fP9ucHf/
+bG51/29xdf9ucHf/bnB3/2xvef9zdn//c3Z//2Zpc/9zdn//d3qD/25wd/9wc33/am13/3V4gf9wc33/
+dXiB/36Ahv9+f4P/dXd9/3V3ff97fYP/c3Z//3N1fP9wc33/foGK/3V4gf91eIH/eXuB/3t9g/91d33/
+g4WM/3t9g/9zdn//eXuB/3Bzff91eIH/cHJ5/25xe/9ucHf/eXyG/3l7gf9wc33/cHN9/3N2f/93eX//
+c3Z//25wd/9sb3n/bnF7/25wd/9nanT/b3F1/25wd/9wcnn/bW9z/2xudf9ucHf/am13/3l7gf9nanT/
+bnF7/25xe/9wc33/cHN9/3t+h/9qbXf/bnF7/3Byef9ucHf/bnF7/3V4gf91eIH/dXd9/3l8hv91d33/
+d3l//36Ahv95e4H/d3l//3l8hv95e4H/d3l//36Ahv97fYP/cHN9/3V4gf91eIH/cHN9/3Byef9qbXf/
+dnh8/3Byef9nanT/bnF7/2psc/9zdXz/bG51/2ptd/9ucXv/c3V8/2dqdP9qbXf/Z2px/2Zobv9ucXv/
+am13/2Rncf9qbXf/am13/2Zpc/9nanH/am13/2dqdP9sb3n/cHN9/2ptd/9ucXv/bW9z/3Byef9ucHf/
+eHl9/25wd/9sbnX/dnh8/3N1fP9wcnn/cHJ5/3d5f/9wcnn/bnB3/3N2f/9wcnn/d3qD/25wd/9sb3n/
+bnF7/25wd/9vcXX/c3V8/3Byef9ucXv/bnB3/3N1fP9qbXf/Z2p0/3Bzff92eHz/dXd9/2psc/9wcnn/
+dXd9/21vc/9sbnX/c3V8/3V3ff9wc33/bG95/3Byef9sb3n/c3V8/3l7gf9sb3n/cHN9/3V3ff9zdXz/
+cHN9/3V4gf9sb3n/bnB3/29yfP9wc33/bG95/3d5ff9sb3n/dXd9/2ptd/9sb3n/am13/25xe/9wcnn/
+c3Z//3V4gf95e4H/d3l//25xe/9ucXv/d3l//25xev9qbXf/cHJ5/3J0e/9sbnX/bG52/2xudf9sbnX/
+bnB3/3N1fP9tb3P/a254/2tueP9oa3T/a253/2xudf9vcXn/eXuC/29xeP9qbHP/fH6F/25wdf9nanL/
+cnR7/29xeP9xc3r/cHJ5/21vd/9zdXz/b3F4/25xev9ucXv/b3J8/25xe/9sbnX/Zmlz/3N2fP9xdH7/
+cnR7/21vc/9nanT/ZGdx/2xudf9sbnX/amxz/25xe/9qbXf/am13/25xev90dnz/a211/2ptd/9sb3n/
+Z2pz/2xvef9sbnX/amxz/3N1fP9nanT/Z2p0/2xvef9zdXz/c3V8/3Bzff9sb3n/cHN9/2xvef9zdXz/
+bG95/2xudf9qbXf/bG95/2xudf9qbXf/cHJ5/25wd/9nanH/cHN9/3N2f/9sb3n/cHJ5/2Zpc/9wcnn/
+bG51/3Bzff93eX//d3qD/3Byef9qbXf/dXiB/25xe/9zdXz/cHN9/36Biv9zdn//c3Z//25xe/9zdn//
+c3Z//4GDiv9zdn//cHJ5/3l7gf9wcnn/c3Z//3N1fP9wc33/bG95/3d6g/91eIH/b3F1/29xdf9zdXz/
+eHl9/3h5ff9tb3P/bG51/2xudf9qbHP/Z2p0/21vc/9wcnn/cHJ5/25wd/9wcnn/cHJ5/25wd/95fIb/
+Z2p0/25xe/9wc33/bnF7/25xe/97fof/c3Z//3d5f/91d33/eHl9/3d5f/95e4H/e32D/3l7gf9+gYr/
+eXyG/3l8hv+Agob/cHJ5/25wd/9wc33/bG95/2xvef92eHz/dXd9/2xudf9tb3P/bG95/25xe/9ucHf/
+amxz/3V3ff9wcnn/bnB3/3Byef9vcXX/d3l//25xe/9zdn//eXuB/3l8hv9zdn//dXiB/3Bzff9wc33/
+dXd9/25xe/9sb3n/eHl9/3d5f/9ucHf/bnB3/3V4gf9sb3n/c3Z//3V3ff9vcXX/c3V8/25wd/9zdXz/
+bG51/3l7gf9ucHf/bnB3/3Z4fP9ucXv/bnF7/2ptd/91d33/bG95/2psc/92eHz/cHJ5/3h5ff9vcXX/
+b3F1/3Byef9sbnX/bG51/25xe/9sbnX/cHJ5/25wd/9zdXz/bW9z/2psc/9wc33/dXd9/3N1fP9nanT/
+bnF7/3Z4fP9vcXX/b3F1/3N1fP91d33/cHN9/25xe/9wc33/bG95/3Bzff93eoP/bG51/3Byef9ucXv/
+bnF7/3Byef91d33/bG51/21vd/9tcHr/c3V9/2xvdv92eH3/b3F4/3Byef9sbnX/bG51/2xudf9qbXf/
+bW9z/3N1fP91d33/dXiB/3V3ff9ucHf/bXB6/3J1fv9vcXj/a212/25xe/9ucXv/bnB4/29yd/9ucXr/
+cnR7/3F0ff92eH7/b3F4/3N1fv9xdH3/bnB2/3BzfP9vcXj/cnV8/3x+hP9tb3b/a210/3p8gv9vcXb/
+aGp0/2xveP9vcXf/bnF5/25xef9tb3b/bXB6/25weP9tb3f/bnB4/3Bzev9ucHj/bW91/2dqc/9ydXr/
+eHl//3N1fP9tb3b/bnB3/2xudf9vcXX/b3F1/2xudf9wcnn/bG51/2xudf9xc3r/d3mA/29xd/9ucXv/
+c3V+/3BzfP9sb3n/amxz/2psc/9ucHf/YmVu/2Zpc/9nanT/Z2p0/2dqdP9maXP/Zmlz/25wd/9maXP/
+Z2p0/2Zobv9kZ3H/YmVu/2Rncf9kZ3H/Zmhu/2ptd/9sbnX/ZGdx/2xudf9wc33/am13/2ptd/9iZW7/
+bG51/2Zpc/9ucXv/dXd9/3N1fP9ucHf/bnB3/3N2f/9sb3n/bnB3/25wd/95e4H/bnB3/2xvef9qbXf/
+bnB3/2xudf99foH/cHJ5/25wd/9zdXz/bnB3/3Byef9ucHf/cHN9/3Byef97fof/eXuB/25xe/9wcnn/
+eHl9/3Z4fP94eX3/bW9z/2xudf9sbnX/b3F1/25wd/9vcXX/cHJ5/3Byef9sbnX/cHJ5/25wd/9tb3P/
+d3l//2dqcf9ucHf/c3V8/2ptd/9sbnX/dXd9/2ptd/9sb3n/bG51/2dqdP9qbXf/am13/2ptd/9maXP/
+bnF7/2xudf9sbnX/cHJ5/25xe/9sb3n/c3V8/25wd/9ucXv/eXuB/3V4gf9ucXv/c3V8/3V4gf91eIH/
+bnF7/2ptd/9wc33/cHN9/3Byef9wc33/bnB3/3d5f/9wcnn/cHN9/3d6g/95e4H/c3Z//3V4gf9ucXv/
+cHN9/3V3ff9wc33/b3F1/3V3ff91eIH/bnF7/25wd/91d33/bG95/25xe/91eIH/bnB3/3N2f/9sb3n/
+c3V8/2xudf95e4H/bnB3/3N1fP93eX//dXd9/3Byef9wcnn/dnh8/2xvef9qbXf/cHN9/2xvef91d33/
+am13/2Zpc/9nanT/bG51/2psc/9sb3n/bG51/2xvef9qbXf/bG95/2dqcf9maXP/bnF7/3Byef9sb3n/
+Zmlz/2ptd/9ucXv/am13/2xudf9wcnn/dXd9/3N1fP9zdXz/dXd9/25xe/9zdn//e36H/2xvef9zdXz/
+cHJ5/3V3ff91d33/dXd9/25wd/9sbnf/b3J6/3N2f/9sb3f/dniA/3F0ff90dnz/bnB3/21vc/9sbnX/
+am13/2psc/9ucXv/bnF7/3V3ff9wc33/Z2p0/3Byef9ucXv/a252/2lsdv9sb3n/a254/2tueP9tcHj/
+bG95/2hrdf9maXP/bnF5/2lrcf9tcHj/am13/2dqcv9pbHb/aWt0/2psdP9wcnv/ZWhy/2Zpc/9vcnr/
+a252/2dqc/9nanT/cXR8/25wef9ucHj/ZWhx/2Vocv9kZ3H/Zmlx/2dpcP9nanT/aWx0/2Vocf9gY2z/
+Z2p0/3N1ff9qbXf/Zmly/2Zocf9jZm7/ZWhy/2dqcf9kZ3H/Z2p0/2Rncf9nanP/b3J7/3R3f/9rbnb/
+a211/3R2fP9ydHv/bnF7/21vc/9ucHf/d3l//2psc/9ucHf/cHN9/3N1fP9zdXz/c3Z//2xvef91eIH/
+c3V8/3Z4fP9zdXz/cHJ5/25wd/9ucXv/b3F1/25wd/9ucHf/bnB3/2xudf9sbnX/c3V8/2xudf9sbnX/
+Zmlz/2psc/9qbXf/bnF7/3N1fP9wc33/am13/2ptd/9ucXv/bG51/25wd/9ucHf/foCG/25xe/9wcnn/
+b3F1/2xudf9zdXz/e32D/3N1fP9ucHf/c3V8/25wd/9zdXz/bnF7/3N2f/9wcnn/eXyG/3d6g/9zdn//
+c3Z//3d5f/93eX//eXuB/25xe/9ucXv/bnB3/2xvef9sb3n/bnB3/25xe/9zdn//bnB3/2xvef9ucXv/
+cHJ5/3d5f/9kZ3H/bnF7/3Bzff9sb3n/bnF7/3V4gf9ucHf/bG95/25xe/9ucHf/cHN9/25wd/9ucXv/
+bG95/3N1fP9ucHf/bnB3/25xe/91eIH/dXiB/3N2f/9sb3n/bnB3/3h5ff9ucHf/bG51/21vc/9wcnn/
+c3V8/3Byef9nanT/bnF7/3N2f/9sb3n/cHJ5/2xvef95e4H/cHN9/3Bzff91eIH/dXiB/3Z4fP9zdn//
+bG95/25xe/91eIH/cHN9/25wd/95fIb/d3qD/3Bzff9wc33/d3qD/25xe/9wc33/eHl9/2xudf9ucHf/
+bG95/25wd/9qbHP/d3qD/2ptd/9sb3n/d3l//25xe/9qbXf/bnB3/3V3ff9ucHf/amxz/3Bzff9sbnX/
+dnh8/2xvef9qbXf/am13/2xudf9qbXf/c3V8/2xudf9wcnn/bnB3/3N1fP9vcXX/bG51/3V3ff91d33/
+dXd9/2ptd/9sb3n/am13/2ptd/9maXP/bnF7/3V3ff9sb3n/cHN9/25xe/9qbXf/cHN9/3V4gf9sbnX/
+cHJ5/2xudf92eHz/cHN9/3d5f/9wc33/bnB4/29xef95e4L/bnB2/3N2fv9ucXr/c3V+/2xvef9ucHf/
+cHJ5/25xe/9ucHf/dXd9/3Byef91d33/c3V8/21vc/9ydHz/b3F6/2ttdv9rbXX/am13/2Zpc/9rbnf/
+bG94/2tueP9naXD/Zmlz/2xveP9oa3X/cnR7/2ptd/9oa3T/cnR7/2xudf9sb3b/dHZ+/3Bydv9sb3n/
+cHN8/3J1ff9tcHn/b3F1/3l7gf92eH7/dXd9/25wd/9tb3f/aGt1/25wd/9ucHf/bG95/3R2f/9ucHf/
+bW92/25wd/97fIH/cHJ5/21wef9ucHf/am13/21wev9ucXv/bnB3/3N2f/9ucHf/b3F4/3F0fv90d4H/
+a254/2lsdv9xdH7/c3V8/3N2f/9wc33/d3qD/3t+h/9ucXv/cHN9/3d6g/91eIH/dXiB/25xe/9ucHf/
+e36H/3Bzff95fIb/d3qD/3Bzff9nanT/bnB3/2xvef9sb3n/c3V8/2ptd/9nanH/cHJ5/3Byef9vcXX/
+bG95/2xudf9ucHf/bG95/3Bzff94eX3/dXd9/3Byef9wcnn/eXuB/3N2f/9zdXz/c3Z//3l8hv9ucXv/
+bnF7/25wd/9ucXv/cHN9/3l8hv9wc33/bG95/3V3ff9wcnn/cHJ5/3Byef9wcnn/bG51/3N1fP9sb3n/
+bG51/2xudf9wc33/bG95/25wd/9qbHP/Z2px/2dqcf9kZ3H/Z2p0/2xudf9sb3n/bnB3/2xudf9vcXX/
+bnB3/25xe/93eX//ZGdx/25xe/9wc33/c3Z//3N2f/95fIb/cHJ5/3V4gf93eoP/c3Z//3t9g/91d33/
+dXiB/3Bzff93eoP/c3Z//3N2f/93eoP/eXuB/3l7gf93eoP/dXiB/3d5f/9/gYf/foCG/3d5f/92eHz/
+e32D/36Ahv99foH/d3l//3t9g/9+f4P/eXuB/3d6g/9wc33/foGK/3N2f/9zdn//eXyG/3l8hv97fYP/
+d3qD/3V4gf9wc33/e32D/3V4gf9ucXv/e36H/3d5f/9ucXv/bG95/3Bzff9vcXX/bnF7/3Z4fP9sbnX/
+am13/25wd/9wcnn/bG51/3l7gf9ucHf/c3V8/3h5ff9zdn//bG51/25wd/94eX3/bnB3/2psc/9zdXz/
+bnB3/3Z4fP9ucHf/bnB3/21vc/9tb3P/bG95/3Bzff9sbnX/cHJ5/3Byef9ucHf/am13/2psc/91d33/
+dXd9/3Byef9maXP/am13/2dqdP9nanH/YmVu/2Zpc/9ucHf/am13/25xe/9ucXv/am13/25xe/91d33/
+amxz/25xe/9qbXf/bnF7/25wd/9zdXz/am13/25xe/9zdn//fH+I/3Byev90d4D/b3J6/3Bzff9nanT/
+bG51/2ptd/9qbXf/bnB3/3N1fP9wcnn/dXd9/3N1fP9sbnb/dXd+/3R3f/9vcnr/bnF6/3Bzff9vcXv/
+dnmC/3p8gv94eoD/cnV//3Byef9zdn//cHJ5/3h6gP9wc33/bnB3/3Z5gv9zdXz/c3V8/3l8hv91d33/
+dHZ8/3R2ff92eYL/dHeA/3N1fP95fIX/d3qD/3Z4f/9wc33/bG95/2dpc/9ucHf/bG51/29xdf9wcnn/
+bnB3/25wd/9sb3n/e32D/29ye/9ucXr/bnB3/21vdv9tcHr/bnB3/29xdf9ucXv/cHJ5/25wd/9tcHr/
+dnmC/2tueP9sb3n/d3qD/3N2f/9ucXv/bnB3/25xe/93eX//bG95/25wd/9wc33/cHN9/3N2f/9wc33/
+bnB3/3t+h/9ucHf/dXiB/3N1fP9wcnn/Z2px/3Byef9sbnX/bnB3/25xe/9ucXv/bnF7/3N2f/9wc33/
+c3V8/2ptd/9sb3n/cHJ5/3N1fP93eoP/eXyG/36Ahv91d33/dnh8/36Ahv95fIb/cHN9/3N1fP9/gYf/
+c3Z//3V4gf93eoP/d3l//3d5f/+Cg4f/e32D/3Z4fP95fIb/c3Z//3V4gf9zdn//c3Z//25wd/95e4H/
+d3qD/3N2f/9zdn//d3qD/3N2f/93eX//bnB3/2xvef9sb3n/bG95/25wd/9ucHf/dnh8/3Byef9vcXX/
+bG51/25wd/9wcnn/dXd9/2Zobv9sb3n/bnF7/3Bzff91eIH/e32D/25wd/9ucXv/bG95/3Byef9zdn//
+bnB3/3V4gf9wc33/eXyG/3V3ff93eX//e32D/2Zpc/9nanT/Z2p0/2xudf9sbnX/c3V8/2ptd/9sbnX/
+am13/3N1fP9sb3n/cHN9/2xudf9zdXz/dXd9/25wd/9wcnn/bnF7/36Biv9zdXz/c3V8/3t9g/95fIb/
+d3l//3Bzff9ucXv/bnF7/3N2f/9sb3n/bG51/3d5f/92eHz/bnB3/2ptd/9qbXf/amxz/25xe/93eX//
+amxz/2ptd/9sbnX/Z2p0/2Jlbv9wc33/ZGdx/2ptd/9ucHf/am13/2psc/9qbHP/bnF7/2psc/9kZ3H/
+bG95/2xudf9wc33/am13/2Zpc/9sb3n/am13/25wd/9zdn//bnB3/25xe/9wcnn/c3V8/25wd/9ucHf/
+d3l//3Z4fP92eHz/am13/25xe/9wcnn/bW9z/2dqdP9sb3n/cHN9/2xvef9zdXz/c3V8/2xvef9wc33/
+dXd9/2xudf9sb3n/bG51/2xvef9qbXf/bnF7/2ptd/9wc33/bnF7/3h7hf9sb3b/cHJ7/25wdv9ucXv/
+am13/2xudf9sbnX/bG95/2xudf9ucXv/dXiB/3V4gf9zdXz/b3F1/3R2fP9xc3v/bnB1/25wd/9ucHf/
+am13/3Bzff91d33/dnh8/3Byef9sbnX/cHN9/3Byef95e4H/cHN9/25xe/91d33/bW9z/25wd/9wcnn/
+bnB3/29xdf9ucHf/c3V8/3Byef9vcXX/eXuB/3V4gf95e4H/bnB3/25wd/9kZmz/bG51/2dqdP9qbHP/
+bG51/2ptd/9maXP/amxz/3N2f/9qbXf/am13/2ttdv9rbnX/cHJ6/2xvef9wcnn/cHN9/3Byef9vcnn/
+bXB6/3N2gP9oa3X/Z2p0/2xvef9qbXf/dXiB/3N1fP93eoP/eXyG/3N2f/93eX//fn+D/3l8hv95fIb/
+dXiB/3d6g/9+gYr/cHN9/3d6g/91eIH/bnF7/2dqdP9sb3n/bnF7/25wd/9wc33/bG95/2ptd/9wc33/
+bnF7/3Byef9sb3n/bnF7/2xvef9sb3n/c3V8/3V3ff9zdXz/bnB3/25wd/93eX//bnF7/3Byef9ucHf/
+e32D/25wd/9wc33/c3V8/25xe/9ucHf/eXyG/3N1fP9ucHf/dnh8/21vc/9sb3n/cHJ5/25xe/9sbnX/
+dXd9/3V3ff9ucXv/bG51/3N1fP9ucXv/dnh8/2xudf9qbXf/bG51/21vc/9tb3P/bW9z/3N1fP9sbnX/
+amxz/2dqdP9sbnX/bnF7/3N1fP9kZ3H/bG51/2xvef9nanT/am13/2xvef9maG7/bG51/2xudf9qbHP/
+Z2p0/2Rncf9maXP/Zmhu/2Zpc/9iZW7/ZGdx/2dqdP9qbXf/am13/2xvef9qbXf/amxz/3N1fP9maXP/
+Z2px/2Zpc/9sb3n/am13/25xe/9kZ3H/cHN9/25xe/9sbnX/bG95/2xvef91eIH/bnB3/29xdf93eX//
+eXyG/3d6g/9wc33/cHN9/3N2f/95e4H/c3Z//3V3ff9/goz/foCG/3d6g/9zdn//d3qD/3Bzff95fIb/
+f4GH/3d5f/93eoP/c3Z//3d6g/91d33/foGK/3Bzff91eIH/d3qD/3N2f/9ucHf/bG95/3N2f/9zdn//
+am13/25xe/9ucXv/c3Z//3Bzff9qbXf/c3V8/3Bzff9ucXv/dXd9/29xdf9ucHf/bnB3/3V3ff9ucHf/
+am13/3V4gf95e4H/eXuB/2xvef9wc33/cHN9/3N1fP9ucHf/cHJ5/3V3ff91d33/d3l//3Z4fP9sbnX/
+cHN9/3d5f/9qbXf/bnB3/21vc/9wcnn/bnF7/3V3ff9ucXv/bG51/25wd/94eoH/bnB4/3J0fP9vcXn/
+dHZ9/2xudf9qbXf/Z2p0/2ptd/9nanP/bG95/2xvef93eX//bnF7/2psc/9tcHn/bnB5/21vdP9rbXT/
+bnB3/2dqcf9sb3n/cHN9/25xe/9sb3n/amxz/2xvef9maG7/bG95/2dqcf9nanH/am13/2dqdP9maXP/
+bG95/2ptd/9qbXf/am13/2xudf91d33/bG95/3l8hv95e4H/eXuB/3Bzff9ucHf/am13/3N2f/9zdXz/
+c3V8/3V4gf91d33/dXiB/3d5f/+DhYz/e32D/3h6gP9zdn7/b3F5/2xvef9rbnj/Z2px/2dqdP9qbHP/
+a210/2xvef93eX//c3V8/25xev91eIH/cHN9/2xudf9sbnX/cHJ5/3Bzff9kZ3H/bnF7/3N1fP9sb3n/
+bG95/2xvef9ucXv/dXiB/2xvef91d33/bnF7/3N1fP9sbnX/bnB3/2xudf9ucHf/bG51/25wd/9qbXf/
+c3Z//25wd/9sb3n/bnF7/2ptd/9sb3n/bnB3/3Bzff93eoP/c3Z//25xe/9sb3n/dXiB/25xe/9wc33/
+cHJ5/3t+h/9ucXv/bG95/29xdf9sbnX/cHJ5/3t9g/9ucXv/amxz/3V3ff9qbHP/am13/2ptd/9sb3n/
+Z2p0/3V3ff9sb3n/am13/2psc/9zdXz/cHJ5/3d5f/9tb3P/bW9z/2xudf9nanH/bG51/2xudf91d33/
+bG51/21vc/9sbnX/bG51/3Z4fP92eHz/Z2p0/2xvef91d33/c3V8/25xe/9zdXz/b3F1/25wd/9ucHf/
+bnB3/25wd/9nanT/bG95/2ptd/9ucXv/am13/2xudf9sbnX/bG95/25wd/9wcnn/bG95/2xudf9zdXz/
+Z2p0/2dqcf9nanT/bG95/2ptd/9ucXv/ZGdx/25xe/9zdXz/bG51/2xvef9qbXf/cHJ5/2dqcf9nanH/
+bG95/3Bzff9ucXv/Z2p0/2dqdP9nanT/bG95/2Zpc/9kZ3H/dXd9/3Byef9qbXf/bG51/2xudf9qbHP/
+cHN9/3N2f/9qbHP/Z2p0/2dqcf9nanT/Zmlz/3V3ff9qbXf/bnF7/2xvef9sb3n/bG51/2xudf9sb3n/
+c3V8/2dqcf9ucHf/bnB3/25xe/9ucHf/Z2px/2xudf9ucHf/c3V8/3Z4fP9vcXX/cHJ5/25wd/91d33/
+bnB3/2xvef91eIH/dnh8/3V3ff9ucHf/cHN9/3N1fP9vcXX/b3F1/2xvef9zdXz/c3V8/3d5f/92eHz/
+bnB3/3Z4fP93eX//bG51/3N1fP9sbnX/cHJ5/3V3ff93eX//c3Z//25xe/9ucXv/d3qD/29yfP9zdn//
+c3V9/3l7gf9qbXf/bnF7/3Byef9zdn//a254/3N2f/91eIH/e32D/3d6g/9wcnn/cXR+/3J1fv9ucXn/
+bnB3/3Byef9qbHT/c3Z//3h6gP9zdn//bnF7/2xvef9zdXz/b3F1/3N1e/9sbnX/bG51/3R2fP9ucXv/
+bnB3/3F0ff9vcXj/b3F4/25xe/9zdXz/dXiB/25xe/95fIb/eXuB/3l7gf9ucXv/am13/2Zpc/9wcnn/
+bnB3/2ptd/9wc33/bG95/3Bzff9ucHf/d3qD/3N2f/9wcnn/bnB3/29xdv9ucHf/cHJ5/25wd/9ucXv/
+bG95/25wd/9sb3j/dXd8/29xd/9sbnX/cHN9/2xvef9ucHf/bG95/3d5f/91eIH/Zmlz/3V4gf95e4H/
+cHN9/3N1fP91eIH/d3qD/4GDiv95e4H/eXyG/3V4gf93eoP/bnF7/3N1fP9ucXv/bG95/2xvef9ucHf/
+bnB3/3N2f/9wcnn/bnB3/2ptd/9ucHf/bG51/25wd/9ucXv/d3l//25xe/9ucHf/amxz/3d5f/9ucXv/
+am13/2ptd/91d33/bG51/3Byef9ucHf/cHN9/3V4gf9+gYr/d3qD/3Bzff97fof/cHN9/3N2f/93eoP/
+dXiB/3N2f/97fof/e32D/3d6g/91d33/e32D/3d6g/9+gYr/cHN9/3N1fP9zdXz/cHJ5/2xvef9ucHf/
+dXd9/25wd/9tb3P/bnB3/25wd/9zdn//dXd9/25wd/9tb3P/c3V8/2xvef9sb3n/cHN9/2dqcf9qbHP/
+amxz/2ptd/9qbXf/Z2p0/2ptd/9sb3n/cHN9/2xudf9nanT/am13/2dqdP9maXP/Z2p0/2dqdP9kZ3H/
+am13/2Rncf9maG7/YmVu/2Zpc/9kZ3H/am13/1xfaP9qbXf/bG95/2BjbP9kZ3H/Z2px/2xvef9maG7/
+Zmhu/25wd/9zdXz/bnF7/2dqdP9maXP/Z2p0/25wd/9qbHP/Zmlz/3N1fP91d33/am13/25wd/9qbXf/
+bG51/2xvef9zdn//amxz/2xudf9qbHP/bnB3/21vc/93eX//am13/3N1fP9wc33/bG95/2ptd/9qbXf/
+bG95/25xe/9maXP/bG51/2xudf9ucXv/bG95/2psc/9sbnX/bnB3/3Byef91d33/bnB3/25wd/9zdXz/
+cHJ5/29xdf9sbnX/dXd9/3V4gf95e4H/cHN9/3V4gf9zdn//cHJ5/3N1fP9wc33/e32D/3t9g/9+gYr/
+eXuB/3Bzff95e4H/eXuB/25wd/9zdn//bG95/3N2f/91eIH/eXyG/3d5f/9wcnb/b3F2/3Z4ff9vcXj/
+cHN7/21veP90dn3/am13/3Byef9wcnn/cHN8/2psc/9ucHf/bnB3/3V3ff9wcnn/bW9z/29xeP9sb3n/
+amxy/2Zpcv9oa3T/X2Js/2hrdf9xc3v/bG95/2xudf9pbHb/bXB6/2ttdf9rbnf/a252/2lsdv9tb3j/
+bW93/2psdP9vcnz/amx0/2dqdP9tb3b/bG51/3N1fP9qbXf/d3qD/3Bzff9wc33/bG95/2ptd/9qbHP/
+bnB3/21vc/9sbnX/bnB3/2xudf9wcnn/bW9z/3d5f/9wc33/bG95/29xef9sbnX/aWx2/2ptd/9nanT/
+am13/2xudf9nanT/a210/3N1ff9vcXn/bW93/3V4gf91eIH/am13/2ptd/9wc33/cHN9/2Jlbv9ucXv/
+dXd9/25wd/9sbnX/bG51/25wd/91d33/cHJ5/3V3ff9sbnX/cHN9/2dqdP9vcXX/bG51/2xudf9qbXf/
+am13/2xudf9zdXz/bnB3/29xdf9maXP/bG95/2xvef9sb3n/c3Z//3V4gf9wcnn/c3V8/2psc/91d33/
+cHN9/25xe/9sb3n/d3l//2xvef9ucXv/bnB3/2xudf9zdXz/foCG/3N2f/9sb3n/d3qD/2xvef9sb3n/
+c3Z//3N1fP9ucHf/dnh8/3Byef9ucHf/bG95/3V3ff9wcnn/e32D/29xdf9tb3P/bG51/29xdf9ucHf/
+b3F1/3Z4fP9ucHf/bnB3/3Byef9zdXz/dXd9/3V3ff9nanH/bG51/3d5f/9sb3n/am13/2xvef9sbnX/
+bnF7/2xvef9nanT/am13/2Rncf9maXP/Zmlz/2dqdP9iZW7/XF9o/2Rncf9ucXv/am13/3Byef9zdXz/
+bG51/3V3ff9ucHf/bG51/2psc/9zdXz/cHJ5/3N1fP9maG7/cHJ5/3N1fP9nanT/dXd9/2xudf92eHz/
+b3F1/2xvef91eIH/d3qD/3V4gf9sb3n/bnF7/3N2f/91d33/bnB3/2xvef93eX//dXiB/25wd/9sbnX/
+bG51/25wd/9zdXz/d3l//2ptd/9qbXf/bnB3/3Byef9vcXX/dnh8/21vc/9zdXz/cHN9/2xvef9qbXf/
+bG51/2xudf9qbXf/Zmlz/2xudf9qbXf/bG95/2xudf9maXP/bG51/2ptd/9ucHf/d3l//2ptd/9sbnX/
+bnF7/2ptd/9sbnX/am13/3d5f/93eX//eHl9/25wd/91d33/cHN9/25wd/9ucXv/cHJ5/3l7gf93eX//
+e36H/3d5f/9ucHf/dXiB/3d5f/9wcnn/c3Z//2xvef9ucXv/c3Z//3l7gf92eHz/Z2pz/2Zpcv9ucHj/
+Zmlz/2hrc/9pbHb/bXB6/2dqdP9maXP/Zmlz/2dqdP9hZGz/Z2px/2dqcf9zdXz/am13/2dqdP9oa3X/
+a254/2hrdP9oa3P/am13/2hqcf9tcHj/cHJ5/3Byef90dnz/bnB5/3V4gf9ydHz/cXR+/29ye/9vcnv/
+b3J8/3N2f/9xc3r/eXyF/29ye/9tb3f/cnR+/3N1fP93eX//bnF7/3l8hv95e4H/dXiB/3N2f/9ucHf/
+am13/3N1fP9wc33/cHN9/3N2f/9ucHf/bnF7/2xvef95e4H/dXd9/25wd/9wc3r/cHN6/29ye/9ydX7/
+c3Z//3V4gf9zdXz/c3Z//3J1fv94eoL/cXN6/25weP9zdXz/c3V8/3V4gf91d33/foCG/3t9g/9wc33/
+d3qD/3l7gf93eoP/c3Z//3N2f/9zdn//d3qD/3N2f/93eX//bnB3/3V4gf9nanT/cHJ5/3Byef9wcnn/
+cHJ5/2xvef9wcnn/d3qD/3N2f/91d33/am13/3N1fP9wc33/cHN9/3l8hv97fYP/d3qD/3N2f/9ucHf/
+eXuB/3N2f/9ucXv/cHN9/3l7gf9wc33/c3Z//25wd/9wcnn/dXiB/36Ahv9zdn//bnB3/3d6g/9vcXX/
+bnB3/3N1fP9wcnn/bG51/3h5ff9wcnn/cHJ5/2xudf9zdXz/cHJ5/3d5f/9tb3P/bG51/2dqdP9ucHf/
+bnB3/3Byef93eX//bnF7/25wd/9ucXv/c3Z//3V3ff91d33/Z2p0/25xe/95e4H/c3Z//3N2f/9wc33/
+bnB3/3N2f/9ucHf/bnB3/3V3ff9sbnX/cHJ5/3V3ff91d33/b3F1/2dqcf9wcnn/c3Z//3Byef9zdn//
+dXiB/3Bzff95e4H/c3Z//25xe/9qbXf/c3Z//3V3ff91d33/amxz/3Byef94eX3/bG95/3N2f/9ucXv/
+dXd9/25wd/9ucXv/d3qD/3V4gf93eoP/b3F1/3Byef91d33/dXd9/2xvef9nanT/cHJ5/3V3ff9sb3n/
+am13/2ptd/9wcnn/cHJ5/3l7gf9wcnn/bG51/21vc/9sb3n/b3F1/3h5ff9sbnX/c3V8/3V3ff9wcnn/
+bnB3/25wd/9ucHf/bnB3/2xudf9tb3P/bG51/25wd/9sbnX/Z2p0/2xudf9qbHP/am13/3N1fP9qbXf/
+Z2px/2dqdP9qbHP/Zmlz/2Jlbv9qbXf/am13/2xvef9maG7/Z2p0/2Rncf9gY2z/ZGdx/2Rncf9sb3n/
+Zmlz/3Bzff9zdXz/amxz/2ptd/9zdXz/bG51/25xe/9qbXf/am13/2xvef91d33/c3V8/21wev9vcXb/
+dHZ8/25wd/9vcnz/bXB5/3N2f/9sbnX/bG51/25wd/9ucXv/Zmlz/21vc/9sbnX/dXd9/25wd/9ucHf/
+cXN6/29xeP9ucHj/bnF6/3Bzff9vcnz/dHeA/3J1f/9wc33/dnmC/3J0fP93eYD/dHZ9/29xeP9wcnr/
+bnB4/3Byef9ydHv/b3F5/3h7gv9vcnz/bG93/3Fzev9sb3n/dnh8/29xdf95e4H/d3l//3N1fP9zdn//
+bnB3/2dqcf9tb3P/bG51/2xudf9sb3n/amxz/2ptd/9nanH/c3Z//2xvef9qbHP/bG94/21vdv9rbnb/
+bG95/2ptd/9qbXf/Z2p0/2xudf9sbnX/cnR7/29xeP9oa3T/bG95/2xvef9ucXv/bG95/3V4gf9zdn//
+amxz/25xe/91d33/bnB3/21vc/9qbXf/cHJ5/3d5f/9wcnn/d3l//2xvef91d33/Z2p0/25xe/9sb3n/
+bG95/3Byef9tb3P/bW9z/3Bzff9sbnX/Z2p0/2BjbP9nanT/Z2p0/2Zpc/9sb3n/bnF7/2dqdP9nanT/
+YmVu/25wd/9maXP/ZGZs/2Rncf9sb3n/Zmhu/2ptd/9kZ3H/YmVu/2Zpc/9ucHf/Z2p0/2BjbP9sb3n/
+YmVu/2Rncf9qbXf/Zmlz/2psc/9qbXf/Zmlz/2Rncf9iZW7/am13/2dqdP9zdn//amxz/2psc/9nanT/
+am13/2xudf9nanH/dXd9/2xudf9tb3P/bnB3/3Byef94eX3/d3l//2ptd/9ucXv/eXuB/3V4gf93eoP/
+dXiB/3N1fP95e4H/cHN9/3Bzff93eoP/cHJ5/3V4gf91eIH/c3Z//25wd/9qbXf/cHN9/3V3ff9vcXX/
+c3Z//3V4gf9ucHf/c3Z//25wd/9wc33/Z2p0/3N2f/9wc33/cHN9/2ptd/9wc33/dXiB/2ptd/9wc33/
+bnF7/3Z4fP9wcnn/cHJ5/3l7gf93eX//e32D/29xdf91d33/dXd9/3N1fP9sb3n/Z2p0/3V3ff91d33/
+bnB3/2xvef9sbnX/bnB3/25wd/91d33/bW9z/2xudf9tb3P/bW9z/2ptd/91d33/bG51/3N1fP91d33/
+bnB3/25wd/9ucHf/bnF7/3Bzff9ucHf/bnB3/2xvef9wc33/bnB3/2dqdP9sb3n/bnB3/3N1fP91d33/
+bnB3/21vc/9wcnn/bG51/2xvef9qbXf/dnh8/3h5ff91d33/bG51/25wd/9ucHf/am13/2xudf9nanT/
+c3V8/2xvef91d33/dXd9/2xudf9sb3n/c3V8/2dqdP9ucXv/Zmlz/2xvef9wcnn/d3l//3Bzff9wc3v/
+bXB5/3J1fv9qbXf/bnF7/2ptd/9zdXz/bG51/25wd/9zdXz/bnF7/2ptd/9ucXv/cHJ5/3d5f/9ucXv/
+cHN9/3V4gf9ucXv/bnF7/25wd/9vcnz/bXB6/21wev9oa3X/bXB6/3R2fP9ucHX/eHqA/29xef9sb3n/
+bG95/2dqdP9qbXf/Z2p0/2Zpc/9ydHz/bXB4/2lsc/9tb3j/a253/3V3ff9ucHf/d3qD/3V4gf91d33/
+dXd9/29xdf9maG7/bnB3/21vc/9sbnX/bnF7/2xudf9wcnn/bW9z/3V4gf9wc33/amxz/2ptd/9qbXb/
+bnB3/29xeP9qbXf/bnB3/2dqcf9sbnX/bG51/21wev9rbnf/Z2p0/2psc/9sb3n/cHJ5/2psc/91d33/
+dXd9/2psc/9sb3n/c3V8/3Byef9sb3n/bnB3/3V3ff94eX3/bnF7/3l8hv9zdXz/e32D/2xvef9zdn//
+d3qD/3N2f/93eoP/dXd9/3N2f/9+gIb/cHN9/3N1fP9sb3n/cHN9/3N2f/9zdn//d3qD/3t9g/95fIb/
+d3qD/3Bzff97fof/eXyG/3V4gf9zdXz/dXiB/25wd/9wcnn/bnB3/3Byef91d33/d3qD/3d5f/9sb3n/
+d3l//25wd/9ucXv/d3qD/3V4gf91eIH/d3qD/3V4gf91eIH/dXd9/3t9g/93eoP/foGK/3Byef9ucXv/
+bnB3/25xe/9wcnn/c3V8/3t+h/9wc33/cHJ5/25xe/9wc33/d3l//3h5ff9qbXf/cHJ5/3d6g/9wcnn/
+dnh8/3N1fP9sbnX/dnh8/29xdf9ucHf/cHJ5/21vc/9zdXz/c3V8/3N1fP9tb3P/bG51/3N2f/9ucXv/
+bG51/2xvef9wc33/Zmlz/2xvef9nanH/Zmlz/2BjbP9qbXf/Z2p0/2ptd/9iZW7/am13/25xe/9qbXf/
+bnF7/25wd/91d33/bnF7/2xvef93eoP/eXuB/36Ahv9wcnn/c3Z//3l7gf93eoP/c3Z//25xe/9+gIb/
+foGK/3l7gf97fYP/d3l//3t9g/93eoP/foGK/3V4gf93eoP/c3Z//3V4gf9zdn//eXyG/3N2f/95e4H/
+e32D/3N1fP9wcnn/cHJ5/25xe/9zdn//c3V8/25wd/9ucHf/c3Z//3Byef9qbXf/b3F1/29xdf9wc33/
+dXiB/3Bzff9wcnn/bG95/25wd/9zdXz/bG51/3V3ff92eHz/dXd9/25wd/9sb3n/bnF7/2xvef9ucHf/
+cHJ5/3h5ff9wcnn/foCG/3t9g/9tb3P/cHJ5/3Z4fP9ucHf/dXd9/2ptd/9ucHf/c3Z//3V4gf92eHz/
+c3V7/21wd/9wcnr/am13/3N1fP9sbnX/bnF7/2ptd/9sbnX/cHN9/25xe/9qbHP/bnB3/29xdf91d33/
+bG95/25xe/9wcnn/bG95/21vc/9ucHf/bG95/25wd/91d33/amxz/25xe/9zdn//c3V8/36Biv93eoP/
+c3Z//3d6g/91d33/cHN9/3d6g/91d33/foCJ/2Zpcv9jZnD/bnB3/2ptdv9vcnz/amxz/3d5f/93eX//
+c3V8/3V3ff9ucHf/ZGZs/2xvef9sb3n/cHN9/3N2f/9vcXX/cHN9/25wd/93eoP/dXiB/25xe/9ucXv/
+bXB6/3Byef9vcXr/bnB3/2xvef9nanT/cHJ5/25weP90d37/c3V6/25weP9ucXr/c3Z//25xe/9maXP/
+c3V8/3V3ff9nanH/bnB3/3N1fP9zdXz/bnB3/21vc/9zdXz/d3l//25xe/9zdn//bG51/3Bzff9kZmz/
+bG51/2xvef9sbnX/c3V8/29xdf9sb3n/c3Z//25wd/9qbXf/Z2p0/3Byef9ucHf/bG51/3Bzff9zdn//
+cHN9/2xvef9sb3n/dXd9/3V4gf9zdn//cHJ5/3V4gf9ucXv/cHN9/3Bzff9ucHf/c3Z//3d5f/91d33/
+Z2px/3Z4fP9sbnX/bG51/3Bzff9ucHf/bW9z/25wd/9sbnX/bnF7/2xudf9wc33/cHJ5/3V3ff9nanT/
+bG51/2dqdP9nanT/am13/2xudf93eoP/bG51/2xudf9wcnn/cHJ5/3d6g/93eX//bnB3/25wd/93eoP/
+cHN9/3d5f/9zdn//am13/3V3ff9ucHf/c3V8/3V3ff9tb3P/cHJ5/3N1fP91d33/bG51/2xudf9ucHf/
+dnh8/2xvef91eIH/cHN9/25wd/9zdXz/bnB3/2xvef9qbXf/dXiB/3N1fP9zdn//bnB3/3N2f/9zdn//
+cHJ5/3V4gf93eoP/c3Z//3N2f/9zdn//e36H/3l7gf9/gYf/bnB3/25xe/91d33/c3V8/21vc/9ucHf/
+dXd9/3d5f/9ucHf/bnB3/2xudf9sb3n/bnB3/3V4gf9qbXf/bnF7/25wd/9sbnX/bnB3/3V3ff9vcXX/
+dXd9/3V3ff9ucHf/bnB3/2xvef9wc33/cHN9/3Byef9wcnn/cHN9/3V4gf9zdn//bnF7/3N2f/91d33/
+eXyG/36Biv91eIH/dXiB/3N1fP9wc33/dXiB/25xe/9zdn//dXd9/3Bzff9ucHf/cHJ5/3Byef9qbXf/
+cHJ5/2ptd/91d33/bG95/36Ahv97fYP/bW9z/3Byef91d33/b3F1/3Bzff9sb3n/bG95/3V4gf95e4H/
+d3l//3d5gv9ucXv/cHN9/25wd/9zdn//c3V8/3Bzff9sb3n/bnB3/3Z4fP9zdn//am13/25xe/9ucHf/
+dXiB/25wd/9wc33/cHN9/3Byef9vcXX/bG51/25wd/9zdXz/dXd9/2psc/9wcnn/bnF7/2xudf91d33/
+c3V8/25wd/9ucXv/am13/2psc/9sbnX/bW9z/3V3ff9ucHf/aWxz/3Fzef9sbnX/c3V+/25wd/93eX//
+d3l//3Bzff93eoP/bnF7/2Zpc/9wcnn/bnB3/3Bzff9zdn//bG95/3N2f/9ucXv/dXiB/3V4gf9wc33/
+cnV+/25weP9rbXX/bXB4/2hqcf9maXP/YGNs/2ptd/9qbXf/b3J7/25wd/9pa3P/amxz/2ptd/9wc33/
+Zmlz/3V3ff91d33/amxz/3Byef9zdXz/cHN9/3N2f/9wc33/eXyG/3l8hv91eIH/d3qD/25xe/9zdn//
+ZGdx/25wd/9ucXv/bW9z/3Byef9sbnX/bG51/3N1fP9qbHP/Zmlz/2dqdP9sbnX/amxz/2Rncf9ucXv/
+am13/2xvef9nanH/YmVu/2ptd/9qbXf/Z2px/2Zpc/9nanT/amxz/2psc/9sb3n/Z2p0/25xe/9wc33/
+cHN9/2Zpc/93eX//Z2p0/2xudf9zdn//c3Z//2ptd/9wcnn/b3F1/3Byef9vcXX/cHJ5/25wd/91d33/
+Z2p0/2ptd/9qbHP/bG51/2xvef9sbnX/d3qD/2dqdP9sbnX/bnF7/2xvef93eX//bnF7/2xudf9nanT/
+c3V8/2ptd/9qbXf/bG95/2Zpc/9wcnn/am13/2xvef9wc33/amxz/2ptd/9sb3n/cHN9/2ptd/9tb3P/
+bG95/3Z4fP9ucHf/c3V8/25xe/9qbHP/bnF7/2xudf9sbnX/YGNs/2xvef9sb3n/bG95/2psc/9sbnX/
+am13/2xudf9zdXz/cHJ5/3Byef9wcnn/am13/3N1fP9wc33/eXyG/21vc/9ucHf/dXd9/2xvef9qbXf/
+bG51/3V3ff93eX//bG95/3Byef9ucHf/bG95/25wd/97fYP/b3F1/3Byef9wcnn/bG51/2xudf93eX//
+am13/3Bzff9wc33/bW9z/2ptd/9nanT/am13/2xvef9sbnX/Z2p0/2xudf9nanT/amxz/11gav9sbnX/
+Z2px/2ptd/9zdXz/bG95/2xvef9qbHP/bG51/25xe/9nanT/dnh8/3N1fP9wc33/bnF7/3N2f/9zdn//
+am13/3Bzff9zdXz/e32D/3V4gf+Fh43/f4KM/3N2f/93eoP/foCG/3N1fP95fIb/dnh8/3l7gf9+gIb/
+e36H/36Ahv95fIb/c3Z//3N2f/9sb3n/dXiB/2xvef9ucXv/bG95/3Byef91eIH/eXuB/2ptd/9ucXv/
+bnB3/3Bzff9wcnn/c3Z//3V4gf9sb3n/bG95/2xudf9sbnX/cHJ5/3V3ff9nanH/bnF7/3Bzff9ucXv/
+d3qD/3N2f/9ucXv/dXiB/3Byef9qbXf/b3F4/25wd/92eHz/cXR9/25wd/9vcnv/bG95/3N2f/9wcnn/
+d3qD/3d6g/9zdn//dXiB/3Bzff9nanT/bnB3/25xe/9zdn//cHN9/25wd/9zdn//cHJ5/3h5ff91d33/
+bG51/2xvef9tb3f/bnB4/29xev9rbnj/bnB3/2psc/9ucHf/b3F5/3J0ev9ucHb/Zmhv/2ptdP9sb3n/
+cHJ5/2dqcf93eX//c3V8/2dqcf9qbXf/cHJ5/25xe/9ucXv/cHN9/3t9g/95fIb/c3Z//3d6g/9zdn//
+d3qD/2ptd/9zdXz/dXiB/3Bzff95fIb/dXd9/3V4gf9+gIb/cHN9/25xe/9qbXf/cHJ5/25wd/9sbnX/
+c3Z//3Bzff9wc33/bW9z/2ptd/9ucXv/bG95/2psc/9nanH/Z2px/2psc/9sbnX/bG95/2xudf9zdXz/
+dXd9/3N1fP9qbXf/dXiB/2dqdP9wcnn/c3V8/3N1fP9sbnX/am13/2xudf9sb3n/am13/2xvef9sb3n/
+dXd9/2ptd/9qbXf/Z2p0/2xudf9wcnn/b3F1/31+gf9vcXX/bW9z/3N2f/9wc33/dXiB/3N1fP9ucHf/
+cHN9/3d6g/9zdn//c3Z//3N2f/9sb3n/eXuB/25wd/9zdn//dXd9/25wd/9ucXv/dXiB/3l7gf9sb3n/
+bnB3/3N1fP9wcnn/Z2p0/2xvef9sb3n/bG51/25xe/9qbXf/bG95/2BjbP9sb3n/cHN9/2xvef9tb3P/
+bnB3/2xvef9qbXf/cHN9/25xe/9ucXv/bG95/25xe/91d33/c3V8/3t9g/9qbXf/bG95/3Z4fP9ucHf/
+bnB3/2psc/92eHz/dXd9/25xe/9ucXv/bnF7/3Byef9ucXv/f4GH/3Byef9wc33/c3Z//25xe/9ucXv/
+d3qD/2xvef9wc33/cHN9/25wd/9ucXv/bnF7/3V4gf91eIH/bnF7/25wd/9ucHf/cHJ5/21vc/9iZW7/
+amxz/2psc/9qbXf/cHN9/2dqdP9ucXv/amxz/2ptd/9qbXf/Z2p0/3Bzff9ucHf/cHJ5/21vc/9ucHf/
+bnB3/2Zpc/9nanT/Z2p0/3V3ff9ucHf/fX6B/3d5f/9sbnX/bG95/3h5ff9ucHf/cHN9/2xvef9ucHf/
+dnh8/3V3ff91d33/dXd9/29xdf9ucHf/bG51/3Byef9sbnX/bG95/2ptd/9sbnX/cHN9/3V3ff9maXP/
+bG95/2xudf9qbXf/amxz/2ptd/9sb3n/Zmhu/2psc/9maXP/amx0/2ptd/9sb3n/YmVu/2xvef9tcHn/
+bW92/3V3ff9xdH3/bXB6/3V3ff9vcXj/bXB5/3Fzev9ydHr/dXh//3J0fP9vcXn/b3J7/29xdv9wcnn/
+bW9z/3V3ff93eX//bnB3/3Byef9wcnn/ZGdx/2ptd/9maXP/bG95/25xe/9qbXf/c3V8/2xudf91d33/
+c3V8/25wd/9zdXz/bXB6/21wev9ucXn/bG95/2xvef9sbnX/bnB3/25xe/92eH3/c3V8/2ptdf9vcXb/
+c3V8/3N2f/9maXP/e36H/3N2f/9sb3n/bG95/25xe/9zdn//cHN9/3N2f/93eX//eXuB/3Bzff93eoP/
+cHN9/3d6g/9nanT/bnB3/3N2f/9wcnn/c3Z//25wd/9ucXv/d3l//25wd/9sbnX/Z2p0/3Byef9ucHf/
+am13/3V4gf91eIH/c3Z//25wd/9sb3n/c3V8/3N2f/9ucHf/bnB3/25xe/9ucHf/bnB3/3V4gf9wc33/
+c3Z//3V3ff91d33/bnB3/3l7gf9nanT/bnF7/3Bzff9zdXz/bG51/2xudf9sbnX/bnB3/2xudf9sbnX/
+bG95/3Z4fP9qbXf/bG95/2xvef9wcnn/d3qD/3N1fP9+gIb/c3V8/3N1fP93eoP/dXiB/3t+h/93eoP/
+c3Z//3N2f/9+gYr/eXyG/3N2f/91eIH/bG95/3V4gf9ucHf/dXd9/3V3ff9wcnn/bG95/3N1fP9wc33/
+Zmlz/2dqcf9qbXf/eHl9/2xvef9wc33/c3Z//25xe/9zdn//cHN9/3V4gf9sb3n/dXiB/3t9g/91eIH/
+dXd9/3l7gf95e4H/d3l//35/g/95e4H/d3qD/3d6g/95e4H/eXyG/3d6g/+DhYz/dXiB/3d6g/97fYP/
+d3qD/3Bzff9wcnn/eXyG/3t+h/9wc33/bnF7/25wd/9wc33/cHN9/3l8hv9vcXX/c3V8/25wd/9tb3P/
+bG51/3V3ff9sbnX/cHN9/3N2f/9ucHf/bnF7/2ptd/9wc33/cHN9/3Bzff9sb3n/bnF7/3Bzff9vcXX/
+ZGZs/29xdf9ucHf/cHJ5/3V3ff9ucHf/dXd9/2xudf9ucHf/bG95/2xudf9zdXz/bnF7/3Byef9sbnX/
+bG51/21vc/9sbnX/cHJ5/2dqcf94eX3/bG95/3t9g/91d33/am13/25xe/91d33/am13/2ptd/9sbnX/
+bW9z/3V3ff94eX3/dXd9/29yfP9ucHf/bnB3/2ptd/9ydHz/b3F1/3V3ff9ucHf/bnB3/3V3ff9zdXz/
+Z2px/3Byef9ucXv/dXiB/3Byef9zdn//dXiB/3Byef9sb3n/a254/3Byd/9vcXn/cHJ5/2ttc/9tb3j/
+bnF7/25xev91d37/cHN8/25weP90dn//cXN5/29yev9ydH3/bnB3/3V3fv9ydX7/b3J8/3F0fv9zdn//
+dXiB/25xe/93eX//d3l//25xe/9zdXz/bW9z/2dqcf9ucHf/bG51/3V3ff9ucHf/am13/3N1fP9sbnX/
+cHN9/3N1fP9qbXf/cHJ5/2xudf9rbnf/amx0/2ttc/9kZ3H/Zmlz/2psc/9qbXf/bnF6/3F0fP9rbnf/
+bXB4/3R2fP9wc33/YGNs/3d6g/9ucXv/Zmlz/2psc/9qbHP/Z2p0/2dqdP9nanT/c3V8/25wd/9sb3n/
+cHJ5/2dqcf9wc33/Zmlz/2xudf9qbXf/amxz/2ptd/9qbXf/bG95/3N1fP9sbnX/bG51/2Zpc/9qbXf/
+bG51/2psc/91d33/cHN9/25xe/9qbXf/am13/3Bzff9zdXz/amxz/2psc/9nanH/Z2px/2Zpc/9ucXv/
+am13/3Bzff9zdXz/cHJ5/2psc/91d33/bnB3/25xe/91d33/dXd9/2xvef9sb3n/bG95/25xe/9qbXf/
+cHN9/3N2f/95e4H/bG95/3N2f/9wcnn/cHJ5/3d6g/9wc33/foCG/25wd/9vcXX/c3V8/2xudf92eHz/
+cHJ5/29xdf9sbnX/dXd9/25wd/9wcnn/bG95/2Zpc/9zdXz/bW9z/3Z4fP91d33/bW9z/25wd/91d33/
+dXd9/2xudf9ucHf/cHJ5/25wd/9qbHP/bG95/25xe/9sbnX/bnF7/2dqcf9nanT/YGNs/2xudf9sb3n/
+amxz/2psc/9qbXf/amxz/2psc/9sb3n/am13/2xvef9qbHP/cHN9/3N1fP9sb3n/eXuB/2dqcf9nanT/
+am13/2dqdP9maG7/Zmlz/3Byef9zdXz/bG95/2xvef9tb3P/am13/2ptd/9zdn//am13/2xvef9sb3n/
+bG51/21vc/91d33/am13/2xvef9zdXz/bG51/2xvef9maXP/bnF7/25xe/9ucXv/am13/2xudf9nanT/
+Zmhu/2BjbP9qbHP/am13/2ptd/9ucXv/bnB3/3V3ff9sbnX/bG51/25wd/9qbXf/c3V8/25wd/9ucXv/
+am13/2xvef9sb3n/am13/25xe/9qbXf/dXiB/3N2f/9/gYf/eXyG/3Bzff91eIH/d3l//25wd/9zdXz/
+bnB3/29xdf9zdXz/dnh8/3V3ff9wcnr/b3F4/3J0ev9tb3f/cXN6/2ttdP9ucXv/bG51/25wd/94eX3/
+cHJ5/2dqcf9zdXz/c3V8/3N1fP9ucHf/bnB3/3Z4fP9vcXb/bXB6/2xvef9wc3z/cXN7/3Fze/9xdHv/
+cHJ5/3R2fv92eH7/dHeB/3R3f/9xdHz/eXuA/3d5f/9ydX3/eXyF/3BzfP93eYD/dHd//3Bzff90dn3/
+cHJ5/25xe/9tcHn/dnh8/3V3gP9ucXr/bnF6/2xvef9rbnj/aWx2/2tueP90dnz/b3F4/25wdP90dnv/
+bW93/3J0fP9zdXz/bW92/3J0fP9qbXf/bG51/25wdf9ucHb/bG51/2psc/9sbnX/am13/2ptd/9ydHr/
+Z2pz/2ptd/9xc3n/bG95/2Jlbv99foH/c3V8/2xudf9tb3P/bG51/25wd/9ucHf/bnB3/3V3ff91d33/
+cHN9/3Byef9maG7/bG95/2Rncf9iZW7/Z2p0/2xudf9qbXf/Z2p0/2xudf9ucXv/amxz/2dqdP9nanT/
+am13/2dqcf9nanH/cHJ5/25xe/9sb3n/am13/2xudf9ucXv/c3V8/2xvef9qbXf/bnB3/29xdf9ucHf/
+c3V8/3Byef91d33/bG95/2xvef9nanT/dXd9/29xdf9wcnn/dXd9/3Bzff9qbXf/bG51/2xudf9sb3n/
+Zmlz/2ptd/9qbXf/cHJ5/2Rncf9qbHP/Z2p0/2ptd/9sb3n/bG95/3d6g/9nanH/Z2px/25xe/9qbHP/
+d3l//2xvef9qbHP/bG51/3N1fP9sb3n/bG95/25xe/9maXP/bG95/2dqcf9ucXv/bG95/2dqcf9nanT/
+bnF7/25xe/9maXP/bG51/2ptd/95e4H/cHJ5/3V4gf93eoP/cHJ5/3l7gf9wc33/bnF7/2dqdP9sb3n/
+c3V8/3Byef9ucHf/c3Z//25xe/9ucXv/cHN9/25xe/9ucXv/bG95/3h5ff94eX3/cHJ5/4CChv9sbnX/
+bG51/3N1fP9wcnn/bnB3/2xvef91d33/dnh8/3V3ff9wcnn/bG95/3Bzff9zdn//eXyG/3Byef9ucHf/
+bnB3/25wd/9vcXX/dnh8/25wd/9zdXz/cHJ5/2xudf9wcnn/amxz/3Bzff9zdn//dXd9/25wd/9ucHf/
+cHJ5/2psc/9kZ3H/bG51/2xvef9nanT/cHN9/2dqdP9sb3n/Z2p0/2xudf9qbHP/Z2p0/25xe/9qbXf/
+bnF7/2dqcf9qbXf/am13/2Zpc/9qbHP/ZGdx/2xvef9qbXf/c3Z//3N1fP9qbXf/am13/3N1fP9qbXf/
+bnF7/2ptd/9sbnX/bnF7/3Bzff9ucXv/am11/2xudf9xc3j/a211/3Fzev9tb3T/cHN9/2Zpc/9ucHf/
+dnh8/3Byef9rbXT/dHZ7/3Bzff90d4D/cHN9/2xvef9zdn//bnB3/25wd/9tcHr/cnV8/29xef9wcnr/
+cnR6/21vdv9wc3v/c3V7/3V3ff9wc33/bXB6/3N2fv90dnr/bnB1/3V3ff9tb3b/cXN6/3Byef9vcXn/
+cHJ5/3Byef9xc33/cHN8/3d5f/93eoL/cnV+/3BzfP9ucXr/bXB5/2tueP9tcHn/dnh+/3J0ff9vcnn/
+dHZ+/21wef9vcXr/b3J8/21vdv9ydX7/bG95/25wd/9tcHn/bW92/2dqdP9nanT/bnB3/25wd/9ucXv/
+dXd9/2ptdv9rbnf/bnF5/2xvef9iZW7/d3qD/2ptd/9qbXf/am13/2ptd/9qbXf/bG95/2ptd/9wcnn/
+bG95/2xvef9ucHf/Zmhu/2xvef9iZW7/ZGdx/2psc/9nanH/Zmlz/2Rncf9qbHP/bG95/2psc/9qbHP/
+Zmlz/2ptd/9qbHP/amxz/3Byef9qbHP/Z2p0/2psc/9iZW7/bG95/3Bzff9qbHP/amxz/2ptd/9sbnX/
+amxz/25xe/9ucHf/dXd9/29xdf9wcnn/Zmlz/3V3ff9sbnX/bnB3/3N1fP91d33/bnB3/3Byef9vcXX/
+bnB3/2psc/9sb3n/bnB3/3V4gf9qbHP/bG51/29xdf9sb3n/cHJ5/3Byef+Agob/bG51/2xudf9zdXz/
+bW9z/3Z4fP9zdXz/bnB3/25wd/94eX3/dXd9/3Byef9zdXz/bnB3/3V3ff9ucHf/dXd9/3Z4fP9vcXX/
+bG95/3V4gf93eoP/bnF7/2xvef91eIH/eXyG/25xe/93eoP/d3qD/3N1fP97fof/dXiB/3V4gf9ucXv/
+c3Z//3d6g/9zdn//cHN9/3N2f/9ucXv/bnF7/25xe/9sb3n/cHN9/25wd/94eX3/eHl9/3V3ff9/gYf/
+bG95/2xvef9wc33/bnF7/25wd/9sbnX/bnF7/25xe/9zdXz/cHJ5/25wd/9wcnn/bnB3/3t+h/9sb3n/
+bnF7/3V4gf9sb3n/bnB3/3d5f/9ucHf/dXiB/3N2f/9ucXv/cHN9/2ptd/9ucXv/c3V8/3V3ff9ucHf/
+cHJ5/25wd/9ucHf/bG51/2ptd/9ucXv/cHJ5/3V3ff9sb3n/bG95/2dqdP9qbHP/Zmhu/2Rncf9nanT/
+amxz/2Zpc/9cX2j/ZGZs/2Zobv9gY2z/amxz/2BjbP9nanT/am13/3V3ff9zdXz/am13/2xudf9sb3n/
+bG51/2xvef9sbnX/am13/3N1fP9zdXz/c3V8/3Byef94eoD/eHuC/3N1fP93eX7/cnR5/3R2ff9sbnX/
+dXd9/3d6g/9zdXz/bnB2/3N1ff91d33/dXd9/3N1fP9sbnX/cHJ5/21wev9wc33/b3J7/3R3fv9ucXr/
+b3J3/3N1ef9rbnf/bnF7/3J0fP9ydX7/bnF6/2tueP9wc3z/b3F6/2lsdP9wcnn/aWx2/21veP9rbnj/
+bG95/21veP9pa3T/amxz/25wdv9ucHf/b3F2/2hqc/9tb3b/bG92/29xef9nanT/bnB3/3J1ff9vcXr/
+b3F4/3J0fP9ydHv/c3V7/3N1fP9tb3T/dHZ8/2ttdv9tb3X/a253/2xudf9laHL/ZGdx/2xudf9qbXf/
+bG95/3V3ff9qbHP/a213/2xudP9ucXv/ZGdx/3t9g/9ucXv/Z2p0/2xudf9qbHP/bnF7/2ptd/9ucXv/
+d3l//3N1fP91d33/dnh8/2xudf9wcnn/Zmlz/2dqdP9sbnX/bnB3/3Byef9vcXX/cHJ5/3Z4fP9vcXX/
+bnB3/2xudf9ucHf/am13/2ptd/9zdXz/bG51/2ptd/9qbXf/Z2p0/3Byef94eX3/b3F1/2xudf9sbnX/
+bW9z/2xudf9wcnn/bnF7/3V3ff9sb3n/cHJ5/2psc/93eX//bW9z/25wd/9wcnn/dXd9/25wd/9wc33/
+bnF7/25xe/9qbXf/c3V8/3N2f/95fIb/bG95/3Bzff9zdXz/bnF7/3N2f/9zdn//gYSN/3N1fP9ucHf/
+c3Z//25wd/91eIH/cHN9/25xe/9ucHf/d3l//3d6g/93eoP/eXuB/3Byef9zdn//c3V8/3l7gf95e4H/
+c3Z//3Bzff95e4H/eXuB/25wd/9ucXv/d3l//3t+h/9zdXz/e32D/3N2f/9sb3n/dnh8/25wd/9zdXz/
+Zmhu/2xudf9wcnn/cHJ5/25wd/9wcnn/bG51/2xudf9qbXf/bG51/3Byef9ucHf/dXd9/3V3ff9zdXz/
+f4GH/29xdf9zdXz/cHJ5/25wd/9vcXX/bnB3/3Bzff9wc33/c3Z//3N2f/9ucXv/c3Z//3N2f/9+gYr/
+c3Z//3N2f/93eoP/d3l//3V3ff9/gYf/dXd9/36Ahv99foH/dXiB/36Ahv9ucXv/d3qD/3l7gf95e4H/
+dXiB/3d6g/9zdn//dXiB/25xe/9wc33/dXiB/3V4gf9zdn//bG95/3N1fP9ucHf/bnF7/2xvef9ucHf/
+cHJ5/2xudf9wcnn/Z2px/25wd/9tb3P/Z2p0/25wd/9nanT/cHN9/3N2f/91eIH/d3l//25xe/9sb3n/
+c3Z//25xe/91d33/bG51/29xdf91d33/dXd9/3N1fP9oa3T/cXR8/3N1ev9tcHn/b3J8/29xd/9zdXz/
+am13/3V3ff91d33/cHJ5/2xudv9ydHv/cXN6/3J0e/9wcnn/am13/25xe/9rbXP/bW92/21veP9vcnr/
+bXB6/21weP9ucHX/bG93/3Fze/9zdn7/dnmA/3N2f/9xdH7/d3l//3FzfP9tb3b/c3V6/25wef9xc3j/
+b3J3/25xef9zdn3/bG94/29xef91d3z/cXN4/3Bydv9qbXb/bXB6/21vd/9ydHv/Z2p0/2ttdP9ucHb/
+bG51/2hrc/9qbXb/a253/3J1ff9wc33/a210/3R2ff9nanT/aGty/2psc/9sbnX/ZGdx/2Zpc/9sbnX/
+Z2p0/2xvef9wc33/Zmlz/2xvef9qbXf/bnF7/2Jlbv93eoP/bnF7/2Zpc/9nanH/amxz/3Bzff9sbnX/
+bnF7/3V3ff9ucXv/bG95/3Byef9qbHP/am13/2Zpc/9kZ3H/Z2px/2dqcf9qbHP/bG51/2dqdP9ucXv/
+Z2px/2dqcf9maXP/Z2p0/2psc/9nanT/c3V8/2dqdP9qbXf/am13/2Zpc/9qbHP/am13/2dqcf9nanT/
+Z2p0/2Zobv9maXP/Z2p0/2ptd/9wc33/am13/2xudf9iZW7/c3V8/2Zpc/9ucXv/bnF7/3Bzff9sbnX/
+cHJ5/2xvef9qbXf/am13/2xudf9sbnX/d3l//2dqdP9sbnX/bG51/2dqdP9qbXf/am13/3t9g/9kZ3H/
+Zmlz/3Byef9qbHP/c3Z//2xvef9ucHf/bG51/3Z4fP9zdXz/dXd9/3V3ff9vcXX/cHJ5/2xvef9zdn//
+c3Z//2xvef9qbXf/dXiB/3d5f/9ucHf/cHJ5/3l7gf91eIH/amxz/2xvef9sb3n/amxz/3Bzff9qbHP/
+bG95/2BjbP9sbnX/cHJ5/2xudf9ucHf/cHJ5/2ptd/9qbHP/am13/2ptd/9ucHf/bnB3/3N1fP9wc33/
+cHN9/4GDiv9ucHf/c3Z//25xe/9vcXX/b3F1/2ptd/9wcnn/cHJ5/3V3ff91d33/b3F1/2xudf9qbXf/
+d3qD/2ptd/9sb3n/bnF7/21vc/9sbnX/bnF7/2psc/9sb3n/bnF7/2xudf9wc33/XWBq/2xvef9ucXv/
+bnF7/2Zpc/9qbXf/bG51/2xvef9kZ3H/amxz/2ptd/9sb3n/bnF7/25wd/91d33/bnB3/25xe/9wc33/
+bnB3/3Bzff9zdn//d3qD/2xvef95fIb/dXd9/25xe/9zdn//cHN9/3l8hv93eoP/f4KM/3+Bh/97fYP/
+dXiB/3l8hv93eoP/eXyG/3N2f/9wcnn/dXiB/3l7gf9wc33/bnB3/3R2fv93eYH/c3V+/3R2fv9vcnn/
+cHN9/2ptd/91eIH/d3qD/3V4gf9wcnn/b3J8/29yfP9wcnn/cHJ5/21vc/9zdXz/b3F1/2xvef9tb3n/
+cHN7/3J0ff9wc3z/Z2p0/29xef9zdn//bnF7/3d4ff9zdn//cHJ5/3Z4fv9xc3f/am10/2xvef9ucHf/
+a254/21wev9wcnb/dXd9/25xev9vcnz/dnh//3Fzev9zdX3/Z2p0/25xe/9sb3n/dnh+/2hrdP9ucHf/
+bXB5/25xe/9sb3n/cHN9/3N2f/94e4X/c3Z//29xdf91d33/c3V8/2xudf9qbXf/bG95/2Zpc/9maXP/
+bG51/25wd/9wcnn/dXd9/2psc/9ucHf/bG95/3V3ff9maXP/f4GH/3V4gf9wcnn/cHN9/3Bzff93eX//
+c3Z//3V4gf97fof/eXuB/3t9g/97fYP/d3qD/3l8hv9zdn//cHN9/3N1fP9zdXz/bnF7/25xe/9ucXv/
+dnh8/25wd/9wcnn/bG95/3N1fP9sbnX/Z2p0/3N1fP9kZ3H/Z2p0/2psc/9kZ3H/am13/2xvef9sbnX/
+bnF7/3Bzff9sbnX/Z2p0/2ptd/9ucXv/c3V8/25wd/9qbXf/ZGdx/3N1fP9nanT/bG95/25xe/9wc33/
+bG95/25xe/9qbXf/bnF7/2ptd/9ucHf/b3F1/3d5f/9maG7/b3F1/2xudf9nanT/bnB3/2xvef9/gYf/
+bG95/25xe/93eoP/cHJ5/3t+h/9wc33/cHN9/25wd/91eIH/dXd9/3N2f/9wc33/cHJ5/3V4gf9zdn//
+d3l//3V3ff9vcXX/bG51/3V3ff9zdXz/bG51/2psc/9wc33/foGK/3N1fP93eoP/c3Z//25wd/91d33/
+bnB3/25wd/9kZ3H/bnB3/3N2f/9sb3n/bnB3/3Byef9ucHf/bG95/25wd/9sb3n/bnB3/25wd/9sb3n/
+cHN9/2xvef9/gYf/cHJ5/3Byef9ucHf/bnB3/3Byef9sb3n/dXiB/3N2f/93eoP/eXuB/3Bzff91eIH/
+c3Z//3+Bh/9zdn//d3qD/31+gf9zdn//c3Z//3l8hv9zdn//e32D/3V4gf9zdXz/eXuB/2Zpc/93eX//
+c3Z//3Z4fP9ucHf/bnB3/25wd/9wcnn/am13/25wd/9wcnn/bG51/25xe/9qbXf/bnF7/2xudf9qbXf/
+amxz/2Zpc/9sb3n/am13/25xe/9maXP/bG95/2xudf9iZW7/bG51/2dqdP9sb3n/cHJ5/3d5f/93eX//
+am13/2ptd/9qbXf/am13/25xe/9sbnX/Z2p0/25xe/9wc33/cHN9/25vdf9qbHX/bG51/2ptdv9rbnj/
+Z2pz/2dqdP9kZ3H/am13/3N1fP9sb3n/Zmlz/2psc/9maXP/am13/2Zpc/9qbHP/am13/2psc/9sbnX/
+Z2p0/21vdv9tcHr/bG95/15ha/9nanH/a210/2ttdP9wcnn/dHZ9/2ptd/9sb3n/aGty/2dqdP9oa3T/
+amxz/2ptd/9wcnn/bW9z/3Z4fP9qbXf/bnB3/3Z4fP9sbnX/am13/2Rncf9qbXf/am13/3d5f/9nanH/
+bG51/2xudf9ucHf/bG95/25wd/9ucHf/dXiB/25xe/9sbnX/dXd9/25xe/9tb3P/cHJ5/25wd/9nanH/
+amxz/29xdf9ucHf/cHJ5/3N1fP9qbXf/am13/2ptd/9sb3n/YmVu/36Ahv9sb3n/Z2p0/2dqdP9qbXf/
+cHN9/2ptd/9sb3n/dXd9/3V3ff9wcnn/c3V8/3Byef9ucXv/bG95/2ptd/9ucHf/bG95/25xe/9sb3n/
+bG95/3V3ff9ucHf/bG95/25wd/93eX//bnB3/25wd/97fYP/amxz/25wd/9ucHf/bG51/25wd/9sb3n/
+bW9z/2xvef9ucXv/Z2p0/2Jlbv9nanH/am13/3Bzff9qbXf/am13/2Rncf9wc33/amxz/2xudf9ucHf/
+c3V8/2xvef9ucXv/am13/3Bzff9nanT/bG51/21vc/92eHz/Zmhu/2xudf9tb3P/bG51/29xdf9zdXz/
+f4KM/25xe/9nanT/d3qD/2xvef93eX//cHJ5/2xvef9ucHf/dXiB/3h5ff9zdn//c3Z//3Byef9zdn//
+dXiB/3t9g/95fIb/cHJ5/3Bzff97fYP/fn+D/3Z4fP9wc33/e32D/3t+h/9wc33/dXiB/3Bzff9ucXv/
+dXiB/25wd/9wc33/Z2p0/25wd/9wc33/bnB3/2xvef9sb3n/bnB3/2ptd/9qbXf/bnF7/25wd/9sbnX/
+bG51/3N1fP9wcnn/f4GH/3Byef9wcnn/bnB3/2ptd/9qbXf/Zmlz/2xvef9ucXv/am13/3N1fP9qbHP/
+Z2p0/2dqcf91eIH/am13/2ptd/9wcnn/bW9z/21vc/9wcnn/bW9z/3Byef9sbnX/bG51/3N1fP9iZW7/
+c3V8/25xe/9zdXz/bG51/2xvef9sbnX/cHJ5/2xudf9ucHf/c3V8/25wd/9wcnn/cHJ5/3N1fP9tb3P/
+bnB3/2ptd/9qbXf/c3V8/25xe/9ucXv/am13/2xvef9ucHf/ZGZs/25wd/9sbnX/cHJ5/3V3ff97fYP/
+eHl9/25wd/9ucHf/bnB3/3Byef9wc33/bW9z/2psc/9zdXz/dXd9/3N1fP9ydHr/Zmlz/2ptd/9oa3X/
+b3J8/2xvef9ucHf/bnB3/3V3ff93eX//dXd9/25wd/9ucHf/bnF7/3N2f/9ucXv/bnF7/3N2f/9ucHf/
+bG95/2xvef9vcXX/dXd9/3Byef9kZmz/bW9z/25wd/9ucXv/d3l//3d6g/9wc33/dXiB/3N1fP9wcnn/
+bG95/3Byef9sbnX/cHJ5/25wd/9zdn//bnB3/25xe/95e4H/bG95/25wd/9qbXf/b3F1/29xdf94eX3/
+bnB3/25wd/9ucHf/b3F1/3Byef9sb3n/cHJ5/3d5f/9zdXz/bG51/3N1fP9ucXv/bG51/3N1fP9sbnX/
+Z2p0/2dqdP9sb3n/bnB3/25xe/9wc33/amxz/29xdf9wcnn/c3V8/2Jlbv9/gYf/bnB3/21vc/9sbnX/
+bG95/3d5f/9wc33/dXiB/3l7gf93eX//c3Z//3V4gf9ucXv/bnF7/25wd/9maXP/bnB3/25xe/9ucXv/
+cHJ5/2xvef91d33/b3F1/2xudf9ucHf/dnh8/25wd/9sbnX/dXiB/2psc/9sb3n/bG51/2dqdP9qbXf/
+am13/2psc/9sb3n/bnF7/2ptd/9qbXf/bnF7/25xe/91d33/am13/2ptd/9kZ3H/c3V8/2ptd/9qbHP/
+am13/25xe/9qbXf/am13/2psc/9sb3n/ZGdx/2xudf9nanT/cHN9/2Rncf9nanT/bG51/2dqdP9qbXf/
+bnF7/36Ahv9qbXf/Z2p0/3N2f/9sbnX/dXd9/2xvef9qbXf/bW9z/3d5f/93eX//dXd9/3Byef9ucHf/
+cHN9/3N2f/93eX//dXd9/2xvef9qbXf/dXd9/3V3ff9sb3n/b3F1/3Z4fP93eX//bnB3/3N2f/9ucXv/
+bnB3/3Bzff9sb3n/bnF7/2Zpc/9sb3n/cHN9/25wd/9wc33/bnB3/2xudf9ucHf/bnB3/3V3ff9wcnn/
+bW9z/25wd/9zdXz/c3V8/3+Bh/91d33/cHJ5/3N2f/9vcXX/bW9z/2psc/9wcnn/c3V8/3Byef92eHz/
+bnB3/2ptd/9sbnX/c3Z//2ptd/9sb3n/bnF7/2ptd/9qbHP/c3V8/21vc/9zdXz/bnB3/3Bzff91d33/
+Zmhu/3Bzff9wc33/eHl9/25wd/9wcnn/b3F1/3Byef9sbnX/bnB3/3Byef9ucHf/bnF7/25xe/95e4H/
+c3V8/3Bzff9wc33/Z2p0/3Bzff9zdXz/cHJ5/2xudf9wcnn/am13/2Jlbv9qbXf/Z2p0/2xvef9wc33/
+c3Z//3N1fP9sbnX/bG95/21vc/9ucXv/bnF7/2dqdP9kZ3H/bnF7/3Bzff9ucXv/cnR7/2Rncf9qbHP/
+am13/3Bzff9sb3n/bnB3/2psc/9zdXz/dXd9/3N1fP9qbXf/bG51/25wd/92eHz/cHJ5/3Byef9zdXz/
+b3F1/25wd/9nanT/bW9z/25wd/9sb3n/ZGdx/2ptd/9qbXf/am13/25xe/93eX//cHJ5/3N1fP9wcnn/
+bW9z/21vc/9ucHf/bG51/2Zpc/9nanH/bG95/2dqcf9maXP/bnF7/2psc/9maXP/am13/2xudf9sbnX/
+c3V8/2psc/9nanT/a253/2xudf9wc33/a254/3Byef91eID/bG95/2xvef91d33/cHJ5/2ptd/9ucXv/
+bG95/2hrdf9qbXf/bG51/2xudf9qbXf/Z2p0/2Rncf9nanH/a254/2xvef9gY2z/gIKG/2xudf9tb3P/
+bG51/29xdf91d33/cHJ5/3V3ff91d33/c3Z//3Bzff91d33/cHN9/3Bzff9wcnn/am13/25wd/9zdn//
+cHN9/3V4gf93eoP/d3l//2ptd/9ucHf/bnB3/3Z4fP9qbHP/bW9z/3Z4fP9sbnX/bnB3/3Byef9qbHP/
+bnB3/2ptd/9sbnX/bnB3/3N1fP9ucHf/bG51/3N1fP9wcnn/dnh8/3Byef9ucHf/bG51/3N1fP9ucHf/
+bnB3/25xe/9zdn//c3Z//3Bzff9wc33/d3qD/25xe/91eIH/cHN9/3l8hv9zdXz/dXd9/3l7gf92eHz/
+eXuB/3t9g/+FiJH/d3qD/3Bzff9/gYf/dXiB/3t+h/91eIH/d3qD/3V4gf9+gYr/e32D/3d6g/9zdn//
+c3V8/3N2f/9zdn//dnh8/3V4gf9sb3n/bG95/3Z4fP91d33/bG51/21vc/9wcnn/d3l//25xe/91d33/
+cHJ5/25wd/9ucXv/bnB3/3Byef9nanH/cHN9/3V4gf9wcnn/bnF7/25xe/9ucHf/cHJ5/25xe/91eIH/
+cHN9/3Byef9ucXv/c3Z//3N2f/9+gIb/dnh8/3Bzff9wc33/b3F1/25wd/9qbXf/c3V8/3V3ff9wcnn/
+eHl9/25wd/9ucHf/bW9z/3V4gf9ucXv/cHJ5/3N2f/9wcnn/c3V8/3V4gf9wcnn/c3Z//25xe/9wc33/
+dnh8/2ZobP9zdXz/c3V8/3Z4fP9vcXX/c3V8/2xudf9ucHf/bW9z/2xudf9wcnn/bG51/2xvef9qbXf/
+c3V8/2Zobv9sb3n/bG51/2Zpc/9qbXf/am13/2ptd/9nanT/am13/2xvef9kZ3H/bG95/2dqdP9ucXv/
+bnF7/3V3ff94eX3/bG95/3N2f/9sb3n/cHN9/3Bzff9ucHf/Z2p0/3V3ff91d33/dXd9/3h5ff9sbnX/
+bnB3/2xvef91d33/c3Z//2xvef9qbXf/c3Z//3l7gf91eIH/bnB3/3Byef9wc33/d3l//3Byef9wcnn/
+cHJ5/21vc/9sbnX/amxz/2xudf9sbnX/bG51/2Zobv9wcnn/bG51/25xe/9ucXv/c3V8/3J0e/9sb3n/
+bnB3/2xudf9ucHT/bG51/2Zpc/9vcXj/bG51/21vdv9tb3b/bW93/3R2ff9rbnf/aGt1/2dqdP9sbnX/
+am13/3Fzev9qbHP/a253/2xveP9qbHP/bG95/2xveP9wcnj/dHZ7/21vdf9ydXz/dXd9/3J0ff9sb3n/
+b3J8/3N1fP9vcXj/b3F4/21vc/9qbXf/bG95/3Byef9ucHf/b3F1/29xeP9zdXz/Z2px/4GDiv9sb3n/
+bnF7/3Byef9wcnn/dXiB/3N2f/93eoP/e32D/3V4gf9wc33/c3Z//3V3ff9ucHf/b3F1/2psc/9ucHf/
+bnF7/25wd/9zdn//c3V8/3Z4fP9qbHP/bG51/21vc/92eHz/bG51/29xdf92eHz/amxz/2xudf9wc33/
+Zmlz/3Byef9qbXf/bnB3/25wd/92eHz/b3F1/25wd/9zdXz/c3V8/3V3ff9wc33/am13/2dqcf9wcnn/
+bW9z/29xdf9sbnX/cHJ5/2xvef9wcnn/bG51/2xvef9maXP/cHJ5/25wd/94eX3/Zmhu/2xudf9sb3n/
+Z2p0/2ptd/9sb3n/foCG/25xe/9sbnX/eXuB/2xvef93eX//bG51/25wd/9tb3P/dXd9/3N1fP91d33/
+bG51/2psc/9zdXz/c3V8/3N1fP9sb3n/amxz/2ptd/92eHz/c3V8/29xdf9ucHf/cHN9/3d6g/9ucXv/
+d3l//3Bzff9zdXz/cHN9/3Byef9wc33/am13/3Bzff95e4H/dXd9/3V4gf9wc33/cHN9/3V3ff91eIH/
+eXuB/3N1fP9zdXz/cHN9/3d6g/95e4H/g4WM/3l8hv91eIH/d3qD/3Bzff9zdn//c3V8/3N2f/91eIH/
+bnB3/3d5f/9sb3n/bnB3/25wd/93eX//bG95/25wd/9wc33/bnB3/25wd/9wc33/bnB3/3Bzff9ucXv/
+dXiB/3V4gf9nanH/cHN9/3N2f/95e4H/cHJ5/3N2f/9wcnn/cHN9/3N1fP9wcnn/dXiB/25xe/93eoP/
+bnF7/3V4gf9ucHf/c3Z//3Bzff9qbXf/c3V8/3Bzff91eIH/bG95/2xvef9zdn//bG95/2xvef9qbXf/
+cHN9/3Byef91eIH/d3l//2xvef9zdn//bnB3/3N2f/9wc33/cHJ5/2ptd/9zdXz/cHJ5/3V3ff92eHz/
+Z2p0/2ptd/9qbXf/cHN9/2ptd/9sbnX/amxz/3Byef91d33/c3V8/2dqdP9tb3P/bnF7/3V4gf9wc33/
+cHN9/3d6g/9zdXz/bnF7/25xe/9xc3r/dXiA/3N1fP9tcHr/c3Z//3Z4fv94e4T/enyC/31/hv94eoD/
+dHeA/3Bzff9ucXv/cHN6/29xef9tcHn/cnR7/25wd/9vcXX/aWx1/2ttdv9wcnn/b3F3/21vdv9sbnb/
+bW92/21wdv9xc3n/bG50/21vdP9wcnj/bW91/25xef9xdHz/cXR9/3Fzev9vcXj/b3F4/3Z4gP9wc3v/
+bG95/29yfP9ydHz/cXN7/21wev9ucHf/bnF7/3Byef9wc33/bnB3/25wd/9xc3r/cHJ5/2Zobv+Agob/
+bG51/2xudf9sbnX/bG51/3N1fP9wcnn/eHl9/3V3ff91d33/c3V8/3Bzff9zdXz/amxz/2psc/9nanT/
+Z2px/2xudf9sbnX/cHN9/2xudf9wc33/Z2p0/2psc/9sbnX/dXd9/2ptd/9qbHP/c3V8/2ptd/9qbXf/
+cHN9/2dqdP9ucXv/bnB3/3N1fP9ucHf/dXd9/25wd/9sb3n/c3Z//3N2f/93eX//dXiB/25xe/9sb3n/
+c3Z//25wd/9wcnn/c3V8/3N2f/9ucXv/c3Z//2xvef9zdXz/Z2px/3Byef9sbnX/cHN9/2Rncf9qbHP/
+bnF7/2dqcf9qbXf/am13/3V4gf9maXP/ZGdx/3N1fP9nanT/cHJ5/2psc/9nanT/Z2px/3V3ff9zdXz/
+bnF7/2ptd/9qbXf/cHN9/3N1fP9zdXz/c3V8/25wd/9ucHf/d3qD/3N2f/9ucHf/bG95/3Bzff95e4H/
+bG95/3V3ff9sb3n/bnB3/25xe/9sb3n/bnB3/2dqcf9vcXX/c3V8/2ptd/9ucHf/bG51/2ptd/9nanT/
+bG51/3N1fP9sbnX/bW9z/2xudf9zdXz/dXd9/31+gf9zdXz/bG95/2xvef9sbnX/bG51/2ptd/9ucHf/
+c3V8/2xvef91d33/bnB3/3Byef9sb3n/dXiB/2xvef9sb3n/bnF7/25xe/9ucHf/cHJ5/25wd/9ucXv/
+bnF7/3V3ff93eoP/ZGdx/3N2f/93eoP/d3qD/25wd/9zdn//bnF7/25xe/9wcnn/bnB3/3Bzff9sbnX/
+c3V8/25wd/91d33/am13/3Bzff9sbnX/amxz/25wd/9sb3n/bnF7/2ptd/9qbXf/dXd9/2xudf9sbnX/
+Zmlz/2xvef9sb3n/dXd9/3N1fP9qbXf/bnF7/21vc/9zdXz/cHJ5/25xe/9sb3n/c3Z//3Bzff93eX//
+eHqA/2hrdf9ucHf/a254/3N2f/9ucHf/bnB3/25wd/9wcnn/eXuB/3V3ff9sbnX/bG51/21vdv91d3z/
+am13/2psc/9ucXv/amxz/2dqcf9nanT/Z2pz/2dqc/9maHL/YmRt/2Zobv9pbHb/bG53/25wef9wcnr/
+cHJ5/2tueP9tb3f/bG51/3Fzev9sb3f/bG95/21wev9vcnr/bG53/2xudf9rbnX/b3J6/25wef9ucXn/
+am13/2tueP9ydHv/cHJ6/25wd/9ucXn/dHZ9/29xdv9wcnr/dHZ9/3BzeP9ucHf/bnB4/29xef93eYD/
+bnF2/25wd/9xc3v/cXN4/3N1e/9xc3r/cXN6/3N2f/9wc33/d3qD/3Byef9wcnn/cXR9/3Bzff9nanT/
+f4KM/3Bzff9ucHf/b3F1/21vc/9zdXz/bnB3/3V3ff93eX//cHN9/25xe/9wc33/dXd9/29xdf9ucHf/
+bnB3/25wd/9vcXX/cHN9/3N2f/9ucXv/dXiB/2xvef9ucXv/bnF7/3l7gf91d33/d3l//35/g/94eX3/
+eXuB/36Ahv96e3//f4GH/3l8hv9+gYr/eXyG/4CChv97fYP/dXd9/3l8hv99foH/fn+D/35/g/93eX//
+cHN9/3t9g/9wc33/c3V8/3Byef9wc33/b3F1/3Z4fP9qbXf/bG95/2Jlbv9qbXf/am13/2ptd/9gY2z/
+Zmlz/2xvef9kZ3H/Zmlz/2xvef93eoP/am13/2Rncf9wc33/ZGdx/2ptd/9maG7/Z2px/2Zobv9zdXz/
+d3qD/3Bzff9sb3n/amxz/3Byef9zdXz/dnh8/3N1fP9sbnX/bG51/3h5ff9wcnn/bnB3/25wd/9zdXz/
+d3l//25wd/91d33/bnB3/21vc/9wcnn/bnB3/2xvef9maXP/bnB3/3Byef9sbnX/bnB3/25wd/9wcnn/
+amxz/25wd/92eHz/bnB3/29xdf9wcnn/cHJ5/3Z4fP9+gIb/c3V8/3Byef9sb3n/bG51/2ptd/9maXP/
+am13/2xvef9ucXv/cHJ5/2dqcf9nanT/Z2px/3Byef9kZ3H/YGNs/2Zobv9kZ3H/Zmhu/2Zpc/9maG7/
+Zmlz/2Zobv9sb3n/c3V8/1lcZf9maXP/Zmlz/25wd/9kZ3H/am13/2dqcf9nanH/YmVu/2Jlbv9nanT/
+Zmhu/2Zpc/9kZ3H/cHJ5/2Zpc/9qbXf/am13/2Rncf9maXP/Z2p0/2xvef9maXP/bG51/3Bzff9maXP/
+bW9z/2ptd/9sb3n/am13/3Bzff9ucXv/amxz/25xe/9sbnX/cHJ5/2xvef9qbXf/ZGdx/2ptd/9qbXf/
+c3V8/3F0e/9laHH/bG51/2dqc/9tcHr/amxz/2ptd/9nanT/cHJ5/3l7gf91d33/amxz/2xudf9vcXj/
+d3h8/3Byef9vcXX/dXd9/21vc/9sbnX/bG95/29yfP9wc3v/bW92/2ptd/9sb3j/c3V7/3V4f/90dnr/
+c3V8/3Byev9xc3v/c3Z9/29xeP91d4D/bnB4/21wev91d37/dnh//3Fze/9tb3b/bW93/3J0e/9zdn3/
+cnV+/25xe/9vcnn/cnV//25xe/9wcnr/cHN8/3Z4gf9wcnn/cHJ6/3d6hP9zdXz/cXN9/3Bzff9zdXz/
+fYCJ/25wd/9sb3n/bG95/29xeP90dnv/b3J7/25wd/9ucHf/bW92/3N1fP9ucHf/bnB3/29yef9wcnn/
+Z2px/35/g/9ucHf/bG51/21vc/9qbXf/bnF7/2xvef93eX//d3l//3N1fP9ucXv/bnF7/25xe/9nanT/
+amxz/2Zpc/9nanT/ZGdx/2dqdP9nanT/ZGdx/3Byef9kZ3H/bG51/2xudf9sb3n/Zmlz/2psc/9wc33/
+amxz/2xudf9zdXz/amxz/2xvef9qbXf/bnF7/2ptd/9sb3n/am13/2xudf9ucXv/cHN9/3Bzff9wc33/
+am13/2ptd/91d33/bnB3/2xudf9sbnX/bnB3/2xudf92eHz/bG51/25wd/9kZ3H/bG95/3N1fP9sb3n/
+ZGZs/2ptd/9ucXv/bG51/2ptd/9zdXz/fn+D/2xvef9sb3n/foCG/25xe/91eIH/bnF7/25wd/9vcXX/
+dXd9/3d5f/9wc33/c3Z//25wd/9zdn//bnF7/3V3ff9ucXv/bG51/29xdf94eX3/c3Z//25wd/9ucXv/
+c3Z//3l7gf9wcnn/d3l//25xe/9wcnn/cHN9/3N2f/9zdXz/am13/2xvef91d33/bG51/3N1fP9sb3n/
+bG51/2dqcf9sb3n/dXd9/2psc/9qbXf/bG95/2xvef9wcnn/d3qD/3V3ff91d33/am13/3Byef9wcnn/
+Z2p0/2xvef9wc33/c3V8/3V4gf9tb3P/bnB3/21vc/92eHz/bW9z/29xdf9sbnX/bnB3/25wd/9qbXf/
+am13/2ptd/9nanT/c3V8/3d6g/9kZ3H/bG95/2xvef93eoP/Z2p0/25xe/9qbXf/am13/2xudf9sbnX/
+cHJ5/29xdf9wc33/bnF7/3l8hv9sb3n/cHN9/3N2f/9sb3n/bG95/3N2f/9wc33/bG95/3Bzff93eX//
+am13/25wd/9vcXX/cHJ5/25wd/9zdXz/c3V8/2xudf9sb3n/bnB3/2xvef9sbnX/amxz/1xfaP9nanH/
+Z2px/3Bzff9ucXv/a253/2xud/9tb3j/cXR7/21vc/9ucHf/amxz/25xe/93eX//c3V8/2hqdP9rbnf/
+bXB5/3R2ev9sbnX/bW9z/25wd/9qbHP/cHJ5/29xef9zdX3/cHJ7/21weP9sb3n/bnB3/3N2f/94eoD/
+b3J7/3N2f/9zdn//eHuF/3l7gf92eH7/fX+F/3R2ff91eH7/enyC/3p8gv94eoH/d3h9/31/hv97fYP/
+e32D/3x9gf94eoD/dnh8/31/hf94eX7/d3l//3d5f/97fYP/cHN9/3V3ff97fof/cHN9/2xvef9wc33/
+cHN9/3t+h/9zdXz/c3Z//3d6g/9wc33/d3mA/3J1f/9ucHb/bXB5/21vdv9ucHf/bnB3/25wd/9vcnv/
+cHJ5/2dqcf9+gIb/bnF7/3N1fP9vcXX/bnF7/3d6g/9wc33/e36H/3l8hv9zdn//cHN9/25xe/91d33/
+bnB3/25xe/9sb3n/bnF7/2xvef9ucXv/cHN9/3Byef93eX//bG51/2xudf9sbnX/bG95/2dqdP9qbHP/
+bnF7/2psc/9nanH/am13/2Zpc/9nanT/Z2px/2ptd/9sbnX/bnF7/2xudf9tb3P/cHJ5/3V3ff91d33/
+dXd9/2xvef9sb3n/dXiB/25wd/9wc33/c3V8/3V4gf9zdn//d3qD/3N2f/95fIb/cHN9/3l8hv97fYP/
+eXuB/2dqdP9zdn//eXyG/3Bzff91eIH/eXuB/3+Bh/9ucXv/bnB3/35/g/9tb3P/dXd9/3Byef9wcnn/
+b3F1/3d5f/93eX//bnF7/3Bzff9sb3n/cHJ5/25xe/93eX//c3Z//3Byef9ucHf/dXd9/3N1fP9sb3n/
+bG95/3N2f/93eX//bnB3/3V3ff9vcXX/bnF7/3Bzff9ucXv/bnB3/2dqdP9ucXv/cHN9/2ptd/91eIH/
+bG95/2xvef9qbHP/bG95/3V3ff9vcXX/bG51/2xvef9qbXf/cHJ5/3l7gf91d33/bnF7/25wd/9ucHf/
+cHJ5/2psc/9sbnX/cHN9/3Bzff9zdn//bG51/25xe/9nanH/cHN9/2Zpc/9nanH/Z2px/2xudf9sb3n/
+am13/2xudf9ucHf/bG51/3V3ff99foH/Zmhu/3N1fP9wcnn/eXuB/2ptd/91d33/bnF7/2ptd/9qbXf/
+am13/25xe/9ucHf/c3V8/3V3ff95e4H/bnB3/3V3ff92eHz/amxz/2xudf92eHz/bnF7/2xudf9ucHf/
+c3V8/2dqdP9qbXf/bG51/3N1fP9ucHf/c3V8/3V3ff9ucHf/cHJ5/3Byef9zdXz/bW9z/21vc/9kZmz/
+bG51/2xvef91d33/bG50/3Byef9vcXb/cXN5/3Fzef9qbXf/bG95/2Zpc/9sb3n/d3l//3N1fP9rbXT/
+bXB4/29yev9zdXz/bnB3/25wd/9zdn//am13/25xe/9ucHr/cHN7/2xudv9oa3X/a254/2xudf9wc33/
+dXd9/2xudf9ucHf/bnB3/3Byef91d33/bnB3/3d5f/9ucHf/bG95/3N2f/92eHz/cHJ5/25wd/9wcnn/
+cHJ5/3Byef9wcnn/bnB3/25wd/9sb3n/bnB3/25wd/91eIH/c3Z//3Byef9ucHf/d3l//29xdf9nanH/
+bG51/21vc/93eoP/bG51/2ptd/9ucXv/amxz/3N1fP9qbXb/aWt0/29xeP9sb3j/bG51/2xvef9ucHf/
+bG95/2xvef9nanH/fn+D/25wd/9ucHf/am13/2xudf91d33/bG51/3l7gf91eIH/cHN9/3N2f/9wc33/
+d3l//2xvef9wc33/bnB3/2xvef9sb3n/bnF7/3Bzff9ucXv/d3l//2ptd/9ucHf/bG95/3Byef9vcXX/
+b3F1/3N1fP9vcXX/b3F1/3Bzff9nanT/bG51/2ptd/9ucXv/bG51/2xvef9sb3n/bG51/2xudf9sb3n/
+dXd9/3Bzff9qbXf/am13/3Byef9qbXf/am13/2Zpc/9ucXv/bG95/2xvef9nanT/bnF7/2Rncf9sb3n/
+bnF7/25xe/9gY2z/Z2p0/2xvef9qbXf/am13/3Bzff93eoP/am13/2ptd/97fYP/bG51/2xvef9ucXv/
+bG95/2psc/91d33/dXd9/2ptd/9zdXz/bnB3/3Bzff9ucHf/dnh8/25xe/9wcnn/cHJ5/3d6g/9ucXv/
+cHN9/2xvef9wc33/AA0BAAADAAAAAQEAAAABAQADAAAAAQEAAAABAgADAAAABAAEAKoBAwADAAAAAQAB
+AAABBgADAAAAAQACAAABEQAEAAAAAgAEALIBEgADAAAAAQABAAABFQADAAAAAQAEAAABFgADAAAAAQCA
+AAABFwAEAAAAAgAEALoBHAADAAAAAQABAAABUgADAAAAAQABAAABUwADAAAABAAEAMIAAAAAAAgACAAI
+AAgAAAAIAAIACAACAAAAAgAAAAEAAQABAAE</bytes>
+											</object>
+										</object>
+									</array>
+								</array>
+								<object class="NSColor" key="NSColor">
+									<int key="NSColorSpace">3</int>
+									<bytes key="NSWhite">MCAwAA</bytes>
+								</object>
+							</object>
+							<string key="IBUIColorCocoaTouchKeyPath">scrollViewTexturedBackgroundColor</string>
+						</object>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {768, 1004}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="791723916"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
+					<int key="IBUIStatusBarStyle">2</int>
+				</object>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mAttackSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="915148677"/>
+					</object>
+					<int key="connectionID">14</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mDecaySlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="705581788"/>
+					</object>
+					<int key="connectionID">15</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSustainSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="1016158309"/>
+					</object>
+					<int key="connectionID">16</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mReleaseSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="1029971717"/>
+					</object>
+					<int key="connectionID">17</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mCutoffSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="517761514"/>
+					</object>
+					<int key="connectionID">18</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mResonanceSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="650292805"/>
+					</object>
+					<int key="connectionID">19</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">22</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSwitch</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="791723916"/>
+					</object>
+					<int key="connectionID">23</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">toggleOnOff:</string>
+						<reference key="source" ref="791723916"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">20</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">midiPanic:</string>
+						<reference key="source" ref="893555418"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">7</int>
+					</object>
+					<int key="connectionID">21</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">keyboardDelegate</string>
+						<reference key="source" ref="905132773"/>
+						<reference key="destination" ref="372490531"/>
+					</object>
+					<int key="connectionID">27</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="791723916"/>
+							<reference ref="915148677"/>
+							<reference ref="653891293"/>
+							<reference ref="705581788"/>
+							<reference ref="1016158309"/>
+							<reference ref="1029971717"/>
+							<reference ref="517761514"/>
+							<reference ref="650292805"/>
+							<reference ref="106348874"/>
+							<reference ref="893555418"/>
+							<reference ref="905132773"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">3</int>
+						<reference key="object" ref="791723916"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="915148677"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="653891293"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="705581788"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">7</int>
+						<reference key="object" ref="1016158309"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="1029971717"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">9</int>
+						<reference key="object" ref="517761514"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">10</int>
+						<reference key="object" ref="650292805"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="106348874"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="893555418"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">26</int>
+						<reference key="object" ref="905132773"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">MidiTestViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="26.CustomClassName">CsoundVirtualKeyboard</string>
+				<string key="26.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="3.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">27</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">CsoundVirtualKeyboard</string>
+					<string key="superclassName">UIView</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">keyboardDelegate</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">keyboardDelegate</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">keyboardDelegate</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/CsoundVirtualKeyboard.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">MidiTestViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="midiPanic:">id</string>
+						<string key="toggleOnOff:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="midiPanic:">
+							<string key="name">midiPanic:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="toggleOnOff:">
+							<string key="name">toggleOnOff:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="mAttackSlider">UISlider</string>
+						<string key="mCutoffSlider">UISlider</string>
+						<string key="mDecaySlider">UISlider</string>
+						<string key="mReleaseSlider">UISlider</string>
+						<string key="mResonanceSlider">UISlider</string>
+						<string key="mSustainSlider">UISlider</string>
+						<string key="mSwitch">UISwitch</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="mAttackSlider">
+							<string key="name">mAttackSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mCutoffSlider">
+							<string key="name">mCutoffSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mDecaySlider">
+							<string key="name">mDecaySlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mReleaseSlider">
+							<string key="name">mReleaseSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mResonanceSlider">
+							<string key="name">mResonanceSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSustainSlider">
+							<string key="name">mSustainSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSwitch">
+							<string key="name">mSwitch</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/MidiTestViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/midiTest.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/midiTest.csd
new file mode 100644
index 0000000..cf0553e
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MidiTest/midiTest.csd	
@@ -0,0 +1,78 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+massign 0, 1
+
+ga1 init 0
+
+
+opcode	cpsmid, k, k
+
+kmid	xin
+
+#define MIDI2CPS(xmidi) # (440.0*exp(log(2.0)*(($xmidi)-69.0)/12.0)) #
+kcps	=	$MIDI2CPS(kmid)
+
+	xout	kcps
+
+		endop
+
+
+instr 1
+
+midinoteonkey p4, p5
+
+kpch cpsmid p4
+
+iattack chnget "attack" 
+idecay chnget "decay" 
+isustain chnget "sustain" 
+irelease chnget "release" 
+
+;print iattack
+;print idecay
+;print isustain
+;print irelease
+
+k2 linsegr 0, iattack, 1, idecay, isustain, irelease, 0
+a1 vco2 k2 * .2, kpch
+
+ga1 = ga1 + a1
+
+endin
+
+instr 2
+
+kcutoff chnget "cutoff"
+kresonance chnget "resonance"
+
+a1 moogladder ga1, kcutoff, kresonance
+
+aL, aR reverbsc a1, a1, .72, 5000
+
+outs aL, aR
+
+ga1 = 0
+
+endin
+
+instr allNotesOff
+turnoff2 1, 0, 1
+turnoff
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i2 0 360000
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/MultiTouchXYViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/MultiTouchXYViewController.h
new file mode 100644
index 0000000..10f1e62
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/MultiTouchXYViewController.h	
@@ -0,0 +1,43 @@
+/* 
+ 
+ MultiTouchXYViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+#import "CsoundValueCacheable.h"
+
+ at interface MultiTouchXYViewController  : BaseCsoundViewController 
+	<CsoundObjCompletionListener, CsoundValueCacheable> {
+	
+		int touchIds[10];
+		float touchX[10];
+		float touchY[10];
+		float* touchXPtr[10];
+		float* touchYPtr[10];
+		UITouch* touchArray[10];
+}
+
+
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/MultiTouchXYViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/MultiTouchXYViewController.m
new file mode 100644
index 0000000..1aa5e38
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/MultiTouchXYViewController.m	
@@ -0,0 +1,177 @@
+/* 
+ 
+ MultiTouchXYViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "MultiTouchXYViewController.h"
+
+ at implementation MultiTouchXYViewController
+
+-(void)viewDidLoad {
+    self.title = @"MultiTouch XY";
+	
+	for (int i = 0; i < 10; i++) {
+		touchIds[i] = 0;
+		touchX[i] = 0.0f;
+		touchY[i] = 0.0f;
+		touchArray[i] = nil;
+	}
+		
+    [super viewDidLoad];
+	
+
+}
+
+-(void)viewDidAppear:(BOOL)animated {
+	[super viewDidAppear:animated];
+	
+	NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"multiTouchXY" ofType:@"csd"];  
+	NSLog(@"FILE PATH: %@", tempFile);
+	
+	[self.csound stopCsound];
+	
+	self.csound = [[CsoundObj alloc] init];
+	[self.csound addCompletionListener:self];
+	
+	[self.csound addValueCacheable:self];
+	
+	[self.csound startCsound:tempFile];
+}
+
+- (void)dealloc {
+    [super dealloc];
+}
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+}
+
+#pragma mark ValueCacheable
+
+-(void)setup:(CsoundObj*)csoundObj {
+
+	for (int i = 0; i < 10; i++) {
+		touchXPtr[i] = [csoundObj getInputChannelPtr:[NSString stringWithFormat:@"touch.%d.x", i, nil]];
+		touchYPtr[i] = [csoundObj getInputChannelPtr:[NSString stringWithFormat:@"touch.%d.y", i, nil ]];
+	}
+
+}
+-(void)updateValuesToCsound {
+	for (int i = 0; i < 10; i++) {
+		*touchXPtr[i] = touchX[i];
+		*touchYPtr[i] = touchY[i];		
+	}
+}
+
+-(void)updateValuesFromCsound {}
+
+-(void)cleanup { 
+	for (int i = 0; i < 10; i++) {
+		touchXPtr[i] = 0;
+		touchYPtr[i] = 0;		
+	}
+}
+
+#pragma mark Touch Event Handling
+
+- (int)getTouchIdAssignment {
+	for (int i = 0; i < 10; i++) {
+		if (touchIds[i] == 0) {
+			return i;
+		}
+	}
+	return -1;
+}
+
+- (int) getTouchId:(UITouch*)touch {
+	for (int i = 0; i < 10; i++) {
+		if (touchArray[i] == touch) {
+			return i;
+		}
+	}
+	return -1;
+}
+
+- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
+	for (UITouch* touch in touches) {
+		int touchId = [self getTouchIdAssignment];
+		if (touchId != -1) {
+			touchArray[touchId] = touch;
+			touchIds[touchId] = 1;
+			
+			CGPoint pt = [touch locationInView:self.view];
+			touchX[touchId] = pt.x / self.view.frame.size.width;
+			touchY[touchId] = 1 - (pt.y / self.view.frame.size.height); // flip y value so zero is on 
+			
+			*touchXPtr[touchId] = touchX[touchId];
+			*touchYPtr[touchId] = touchY[touchId];
+			
+			[self.csound sendScore:[NSString stringWithFormat:@"i1.%d 0 -2 %d", touchId, touchId, nil]];
+		}
+	}
+}
+
+- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
+	for (UITouch* touch in touches) {
+		int touchId = [self getTouchId:touch];
+		if (touchId != -1) {
+			CGPoint pt = [touch locationInView:self.view];
+			touchX[touchId] = pt.x / self.view.frame.size.width;
+			touchY[touchId] = 1 - (pt.y / self.view.frame.size.height); // flip y value so zero is on bottom
+		}
+	}
+}
+- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
+	for (UITouch* touch in touches) {
+		int touchId = [self getTouchId:touch];
+		if (touchId != -1) {
+			touchIds[touchId] = 0;
+//			touchX[touchId] = 0;
+//			touchY[touchId] = 0;
+			touchArray[touchId] = nil;
+			[self.csound sendScore:[NSString stringWithFormat:@"i-1.%d 0 0 %d", touchId, nil]];
+
+		}
+	}
+
+}
+- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
+	for (UITouch* touch in touches) {
+		int touchId = [self getTouchId:touch];
+		if (touchId != -1) {
+			touchIds[touchId] = 0;
+//			touchX[touchId] = 0;
+//			touchY[touchId] = 0;
+			touchArray[touchId] = nil;
+			[self.csound sendScore:[NSString stringWithFormat:@"i-1.%d 0 0", touchId, nil]];
+			
+		}
+	}
+
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/MultiTouchXYViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/MultiTouchXYViewController.xib
new file mode 100644
index 0000000..ef5d2af
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/MultiTouchXYViewController.xib	
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C74</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1138.23</string>
+		<string key="IBDocument.HIToolboxVersion">567.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIView</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<bool key="IBUIMultipleTouchEnabled">YES</bool>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">MultiTouchXYViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">4</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">MultiTouchXYViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/MultiTouchXYViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/multiTouchXY.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/multiTouchXY.csd
new file mode 100644
index 0000000..73d6cac
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/MultiTouchXY/multiTouchXY.csd	
@@ -0,0 +1,56 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+ga1 init 0
+
+instr 1
+itie tival
+i_instanceNum = p4
+S_xName sprintf "touch.%d.x", i_instanceNum
+S_yName sprintf "touch.%d.y", i_instanceNum
+
+kx chnget S_xName
+ky chnget S_yName
+
+kenv linsegr 0, .01, 1, .1, 1, .25, 0
+a1 vco2 ky * .5 * kenv, 60 + (log(1 - kx) * 3000), 0
+
+ga1 = ga1 + a1
+
+endin
+
+instr 2
+
+;kcutoff chnget "cutoff"
+;kresonance chnget "resonance"
+
+kcutoff = 6000
+kresonance = .2
+
+
+a1 moogladder ga1, kcutoff, kresonance
+
+aL, aR reverbsc a1, a1, .72, 5000
+
+outs aL, aR
+
+ga1 = 0
+
+endin
+
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i2 0 360000
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/PitchShifter/PitchShifterViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/PitchShifter/PitchShifterViewController.h
new file mode 100644
index 0000000..572f924
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/PitchShifter/PitchShifterViewController.h	
@@ -0,0 +1,37 @@
+/* 
+ 
+ PitchShifterViewController.h:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "BaseCsoundViewController.h"
+#import "UIControlXY.h"
+
+ at interface PitchShifterViewController : BaseCsoundViewController <CsoundObjCompletionListener>
+{
+	IBOutlet UISwitch		*mSwitch;
+	IBOutlet UIControlXY	*mXYControl;
+}
+
+- (IBAction)toggleOnOff:(UISwitch *)sender;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/PitchShifter/PitchShifterViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/PitchShifter/PitchShifterViewController.m
new file mode 100644
index 0000000..0c80153
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/PitchShifter/PitchShifterViewController.m	
@@ -0,0 +1,99 @@
+/* 
+ 
+ PitchShifterViewController.m:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "PitchShifterViewController.h"
+
+ at implementation PitchShifterViewController
+
+- (IBAction)toggleOnOff:(UISwitch *)sender
+{
+	if (sender.on) {
+		NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"pitchshifter" ofType:@"csd"];
+		
+		[self.csound stopCsound];
+		self.csound = [[CsoundObj alloc] init];
+		[self.csound addCompletionListener:self];
+		
+		[self.csound addValueCacheable:mXYControl];
+		
+		[self.csound startCsound:tempFile];
+	} else {
+		[self.csound stopCsound];
+	}
+}
+
+#pragma mark - CsoundObj Listener
+
+- (void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+
+- (void)csoundObjComplete:(CsoundObj *)csoundObj {
+	[mSwitch setOn:NO animated:YES];
+}
+
+#pragma mark - Lifecycle
+
+- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
+{
+	self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
+	if (self) {
+		
+	}
+	return self;
+}
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+	self.title = @"Pitch Shifter";
+	
+	[mXYControl setXValue:1.0f];
+	[mXYControl setYValue:0.5f];
+}
+
+- (void)viewDidUnload
+{
+    [super viewDidUnload];
+}
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
+{
+    if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
+        interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
+        return YES;
+    } else {
+        return NO;
+    }
+}
+
+- (void)dealloc
+{
+	[mSwitch release];
+	[mXYControl release];
+	[super dealloc];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/PitchShifter/PitchShifterViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/PitchShifter/PitchShifterViewController.xib
new file mode 100644
index 0000000..95b4891
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/PitchShifter/PitchShifterViewController.xib	
@@ -0,0 +1,315 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">10K549</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1038.36</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUISwitch</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUIView" id="17333422">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">274</int>
+						<array class="NSMutableArray" key="NSSubviews">
+							<object class="IBUILabel" id="611691860">
+								<reference key="NSNextResponder" ref="17333422"/>
+								<int key="NSvFlags">292</int>
+								<string key="NSFrame">{{20, 20}, {42, 21}}</string>
+								<reference key="NSSuperview" ref="17333422"/>
+								<reference key="NSWindow"/>
+								<reference key="NSNextKeyView" ref="403773714"/>
+								<bool key="IBUIOpaque">NO</bool>
+								<bool key="IBUIClipsSubviews">YES</bool>
+								<int key="IBUIContentMode">7</int>
+								<bool key="IBUIUserInteractionEnabled">NO</bool>
+								<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+								<string key="IBUIText">pitch</string>
+								<object class="NSColor" key="IBUITextColor" id="561617699">
+									<int key="NSColorSpace">1</int>
+									<bytes key="NSRGB">MCAwIDAAA</bytes>
+								</object>
+								<nil key="IBUIHighlightedColor"/>
+								<int key="IBUIBaselineAdjustment">1</int>
+								<float key="IBUIMinimumFontSize">10</float>
+								<object class="IBUIFontDescription" key="IBUIFontDescription" id="1010916957">
+									<int key="type">1</int>
+									<double key="pointSize">17</double>
+								</object>
+								<object class="NSFont" key="IBUIFont" id="719129897">
+									<string key="NSName">Helvetica</string>
+									<double key="NSSize">17</double>
+									<int key="NSfFlags">16</int>
+								</object>
+							</object>
+							<object class="IBUILabel" id="403773714">
+								<reference key="NSNextResponder" ref="17333422"/>
+								<int key="NSvFlags">292</int>
+								<string key="NSFrame">{{218, 239}, {42, 21}}</string>
+								<reference key="NSSuperview" ref="17333422"/>
+								<reference key="NSWindow"/>
+								<reference key="NSNextKeyView"/>
+								<bool key="IBUIOpaque">NO</bool>
+								<bool key="IBUIClipsSubviews">YES</bool>
+								<int key="IBUIContentMode">7</int>
+								<bool key="IBUIUserInteractionEnabled">NO</bool>
+								<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+								<string key="IBUIText">mix</string>
+								<reference key="IBUITextColor" ref="561617699"/>
+								<nil key="IBUIHighlightedColor"/>
+								<int key="IBUIBaselineAdjustment">1</int>
+								<float key="IBUIMinimumFontSize">10</float>
+								<int key="IBUITextAlignment">2</int>
+								<reference key="IBUIFontDescription" ref="1010916957"/>
+								<reference key="IBUIFont" ref="719129897"/>
+							</object>
+						</array>
+						<string key="NSFrame">{{20, 116}, {280, 280}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="611691860"/>
+						<object class="NSColor" key="IBUIBackgroundColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+						</object>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+					</object>
+					<object class="IBUISwitch" id="884519847">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{106, 43}, {94, 27}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="17333422"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 64}, {320, 416}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="884519847"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<bool key="IBUIAutoresizesSubviews">NO</bool>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<object class="IBUISimulatedNavigationBarMetrics" key="IBUISimulatedTopBarMetrics">
+					<bool key="IBUIPrompted">NO</bool>
+				</object>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mXYControl</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="17333422"/>
+					</object>
+					<int key="connectionID">7</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSwitch</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="884519847"/>
+					</object>
+					<int key="connectionID">9</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">11</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">toggleOnOff:</string>
+						<reference key="source" ref="884519847"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">10</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="17333422"/>
+							<reference ref="884519847"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="17333422"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="611691860"/>
+							<reference ref="403773714"/>
+						</array>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="884519847"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="611691860"/>
+						<reference key="parent" ref="17333422"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">13</int>
+						<reference key="object" ref="403773714"/>
+						<reference key="parent" ref="17333422"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">PitchShifterViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="13.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.CustomClassName">UIControlXY</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">13</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">PitchShifterViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<string key="NS.object.0">UISwitch</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">toggleOnOff:</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+					</object>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="mSwitch">UISwitch</string>
+						<string key="mXYControl">UIControlXY</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="mSwitch">
+							<string key="name">mSwitch</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mXYControl">
+							<string key="name">mXYControl</string>
+							<string key="candidateClassName">UIControlXY</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/PitchShifterViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">UIControlXY</string>
+					<string key="superclassName">UIControl</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/UIControlXY.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/RecordTest/RecordTestViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/RecordTest/RecordTestViewController.h
new file mode 100644
index 0000000..840ede4
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/RecordTest/RecordTestViewController.h	
@@ -0,0 +1,47 @@
+/* 
+ 
+ RecordTestViewController.h:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+#import <AVFoundation/AVFoundation.h>
+#import "LevelMeterView.h"
+
+ at interface RecordTestViewController : BaseCsoundViewController <CsoundObjCompletionListener, AVAudioPlayerDelegate>
+{
+	IBOutlet UISwitch *mSwitch;
+	IBOutlet UISlider *mGainSlider;
+	IBOutlet UILabel *mGainLabel;
+	IBOutlet LevelMeterView *mLevelMeter;
+	IBOutlet UIButton *mPlayButton;
+	AVAudioPlayer *mPlayer;
+}
+
+- (IBAction)toggleOnOff:(id)component;
+- (IBAction)changeGain:(UISlider *)sender;
+- (IBAction)play:(UIButton *)sender;
+- (IBAction)stop:(UIButton *)sender;
+- (NSURL *)recordingURL;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/RecordTest/RecordTestViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/RecordTest/RecordTestViewController.m
new file mode 100644
index 0000000..383c5ac
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/RecordTest/RecordTestViewController.m	
@@ -0,0 +1,121 @@
+/* 
+ 
+ RecordTestViewController.m:
+ 
+ Copyright (C) 2011 Thomas Hass
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "RecordTestViewController.h"
+
+ at implementation RecordTestViewController
+
+-(void)viewDidLoad {
+    self.title = @"Record Test";
+    [super viewDidLoad];
+	mPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[self recordingURL] error:nil];
+	[mPlayer setDelegate:self];
+}
+
+-(IBAction) toggleOnOff:(id)component {
+	UISwitch* uiswitch = (UISwitch*)component;
+	NSLog(@"Status: %d", [uiswitch isOn]);
+    
+	if(uiswitch.on) {
+        
+        NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"recordTest" ofType:@"csd"];  
+        
+		[self.csound stopCsound];
+        self.csound = [[CsoundObj alloc] init];
+        [self.csound addCompletionListener:self];
+		[self.csound addSlider:mGainSlider forChannelName:@"gain"];
+		[mLevelMeter addToCsoundObj:self.csound forChannelName:@"meter"];
+		[self.csound startCsound:tempFile];
+	} else {
+		[self.csound stopRecording];
+        [self.csound stopCsound];
+    }
+}
+
+- (IBAction)changeGain:(UISlider *)sender
+{
+	[mGainLabel setText:[NSString stringWithFormat:@"%.2f", [sender value]]];
+}
+
+- (IBAction)play:(UIButton *)sender
+{
+	[mPlayer play];
+	[sender removeTarget:self action:@selector(play:) forControlEvents:UIControlEventTouchUpInside];
+	[sender addTarget:self action:@selector(stop:) forControlEvents:UIControlEventTouchUpInside];
+	[sender setTitle:@"Stop" forState:UIControlStateNormal];
+}
+
+- (IBAction)stop:(UIButton *)sender
+{
+	[mPlayer stop];
+	[mPlayer setCurrentTime:0];
+	[sender removeTarget:self action:@selector(stop:) forControlEvents:UIControlEventTouchUpInside];
+	[sender addTarget:self action:@selector(play:) forControlEvents:UIControlEventTouchUpInside];
+	[sender setTitle:@"Play" forState:UIControlStateNormal];
+}
+
+- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
+{
+	[mPlayer setCurrentTime:0];
+	[mPlayButton removeTarget:self action:@selector(stop:) forControlEvents:UIControlEventTouchUpInside];
+	[mPlayButton addTarget:self action:@selector(play:) forControlEvents:UIControlEventTouchUpInside];
+	[mPlayButton setTitle:@"Play" forState:UIControlStateNormal];
+}
+
+- (void)dealloc {
+	[mPlayButton release];
+	[mLevelMeter release];
+	[mSwitch release];
+	[mPlayer release];
+    [super dealloc];
+}
+
+- (NSURL *)recordingURL
+{
+    NSURL *localDocDirURL = nil;
+    if (localDocDirURL == nil) {
+        NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) 
+                                objectAtIndex:0];
+        localDocDirURL = [NSURL fileURLWithPath:docDirPath];
+    }
+    return [localDocDirURL URLByAppendingPathComponent:@"recording.wav"];
+}
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+	[self.csound recordToURL:[self recordingURL]];
+}
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+	[mSwitch setOn:NO animated:YES];
+	if (mPlayer != nil) {
+		[mPlayer release];
+	}
+	mPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[self recordingURL] error:nil];
+	[mPlayer setDelegate:self];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/RecordTest/RecordTestViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/RecordTest/RecordTestViewController.xib
new file mode 100644
index 0000000..4fcc3b2
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/RecordTest/RecordTestViewController.xib	
@@ -0,0 +1,533 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">10K549</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1038.36</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUISlider</string>
+			<string>IBUISwitch</string>
+			<string>IBUIButton</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUISwitch" id="1027817906">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{153, 143}, {94, 27}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="782948507"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+					</object>
+					<object class="IBUIButton" id="194301484">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{171, 359}, {72, 37}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<int key="IBUIButtonType">1</int>
+						<string key="IBUINormalTitle">Play</string>
+						<object class="NSColor" key="IBUIHighlightedTitleColor" id="923081859">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MQA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
+						</object>
+						<object class="NSColor" key="IBUINormalTitleShadowColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MC41AA</bytes>
+						</object>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">2</int>
+							<double key="pointSize">15</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica-Bold</string>
+							<double key="NSSize">15</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUIView" id="483295674">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{20, 20}, {79, 376}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="757651148"/>
+						<reference key="IBUIBackgroundColor" ref="923081859"/>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+					</object>
+					<object class="IBUILabel" id="272197523">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{179, 114}, {56, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="1027817906"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Record</string>
+						<object class="NSColor" key="IBUITextColor" id="257252145">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="200987586">
+							<int key="type">1</int>
+							<double key="pointSize">17</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="65047304">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">17</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUILabel" id="782948507">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{172, 330}, {70, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="194301484"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Playback</string>
+						<reference key="IBUITextColor" ref="257252145"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<reference key="IBUIFontDescription" ref="200987586"/>
+						<reference key="IBUIFont" ref="65047304"/>
+					</object>
+					<object class="IBUILabel" id="176701690">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{227, 20}, {56, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="234041265"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText"/>
+						<reference key="IBUITextColor" ref="257252145"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<reference key="IBUIFontDescription" ref="200987586"/>
+						<reference key="IBUIFont" ref="65047304"/>
+					</object>
+					<object class="IBUISlider" id="234041265">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{105, 49}, {197, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="16028624"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">1</float>
+						<float key="IBUIMaxValue">5</float>
+					</object>
+					<object class="IBUILabel" id="757651148">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{168, 20}, {79, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="176701690"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Input Gain</string>
+						<reference key="IBUITextColor" ref="257252145"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<reference key="IBUIFontDescription" ref="200987586"/>
+						<reference key="IBUIFont" ref="65047304"/>
+					</object>
+					<object class="IBUILabel" id="16028624">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{258, 68}, {42, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="272197523"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">1.00</string>
+						<reference key="IBUITextColor" ref="257252145"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">2</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">1</int>
+							<double key="pointSize">14</double>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">14</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 64}, {320, 416}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="483295674"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<object class="IBUISimulatedNavigationBarMetrics" key="IBUISimulatedTopBarMetrics">
+					<bool key="IBUIPrompted">NO</bool>
+				</object>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">5</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSwitch</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="1027817906"/>
+					</object>
+					<int key="connectionID">6</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mLevelMeter</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="483295674"/>
+					</object>
+					<int key="connectionID">24</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mPlayButton</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="194301484"/>
+					</object>
+					<int key="connectionID">28</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mGainSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="234041265"/>
+					</object>
+					<int key="connectionID">35</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mGainLabel</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="16028624"/>
+					</object>
+					<int key="connectionID">37</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">toggleOnOff:</string>
+						<reference key="source" ref="1027817906"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">8</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">play:</string>
+						<reference key="source" ref="194301484"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">7</int>
+					</object>
+					<int key="connectionID">22</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">changeGain:</string>
+						<reference key="source" ref="234041265"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">38</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="176701690"/>
+							<reference ref="234041265"/>
+							<reference ref="757651148"/>
+							<reference ref="16028624"/>
+							<reference ref="1027817906"/>
+							<reference ref="272197523"/>
+							<reference ref="194301484"/>
+							<reference ref="782948507"/>
+							<reference ref="483295674"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">3</int>
+						<reference key="object" ref="1027817906"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="194301484"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">23</int>
+						<reference key="object" ref="483295674"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">26</int>
+						<reference key="object" ref="272197523"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">27</int>
+						<reference key="object" ref="782948507"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">29</int>
+						<reference key="object" ref="176701690"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">32</int>
+						<reference key="object" ref="234041265"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">34</int>
+						<reference key="object" ref="757651148"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">36</int>
+						<reference key="object" ref="16028624"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">RecordTestViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="23.CustomClassName">LevelMeterView</string>
+				<string key="23.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="26.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="27.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="3.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="32.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="34.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="36.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">38</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">LevelMeterView</string>
+					<string key="superclassName">UIView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/LevelMeterView.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">RecordTestViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="changeGain:">UISlider</string>
+						<string key="play:">UIButton</string>
+						<string key="stop:">UIButton</string>
+						<string key="toggleOnOff:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="changeGain:">
+							<string key="name">changeGain:</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBActionInfo" key="play:">
+							<string key="name">play:</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+						<object class="IBActionInfo" key="stop:">
+							<string key="name">stop:</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+						<object class="IBActionInfo" key="toggleOnOff:">
+							<string key="name">toggleOnOff:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="mGainLabel">UILabel</string>
+						<string key="mGainSlider">UISlider</string>
+						<string key="mLevelMeter">LevelMeterView</string>
+						<string key="mPlayButton">UIButton</string>
+						<string key="mSwitch">UISwitch</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="mGainLabel">
+							<string key="name">mGainLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mGainSlider">
+							<string key="name">mGainSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mLevelMeter">
+							<string key="name">mLevelMeter</string>
+							<string key="candidateClassName">LevelMeterView</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mPlayButton">
+							<string key="name">mPlayButton</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSwitch">
+							<string key="name">mSwitch</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/RecordTestViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/SimpleTest1ViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/SimpleTest1ViewController.h
new file mode 100644
index 0000000..350114d
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/SimpleTest1ViewController.h	
@@ -0,0 +1,37 @@
+/* 
+ 
+ SimpleTest1ViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi, Victor Lazzarini
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+
+ at interface SimpleTest1ViewController : BaseCsoundViewController<CsoundObjCompletionListener> {
+    IBOutlet UISlider* mSlider;
+    IBOutlet UISwitch* mSwitch;
+}
+
+-(IBAction) toggleOnOff:(id)component;
+
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/SimpleTest1ViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/SimpleTest1ViewController.m
new file mode 100644
index 0000000..cb683b6
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/SimpleTest1ViewController.m	
@@ -0,0 +1,73 @@
+/* 
+ 
+ SimpleTest1ViewController.m:
+ 
+ Copyright (C) 2011 Steven Yi, Victor Lazzarini
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "SimpleTest1ViewController.h"
+
+ at implementation SimpleTest1ViewController
+
+-(void)viewDidLoad {
+    self.title = @"Simple Test 1";
+    [super viewDidLoad];
+}
+
+-(IBAction) toggleOnOff:(id)component {
+	UISwitch* uiswitch = (UISwitch*)component;
+	NSLog(@"Status: %d", [uiswitch isOn]);
+    
+	if(uiswitch.on) {
+        
+        NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"csd"];  
+        NSLog(@"FILE PATH: %@", tempFile);
+        
+		[self.csound stopCsound];
+        
+        self.csound = [[CsoundObj alloc] init];
+        [self.csound addCompletionListener:self];
+        [self.csound addSlider:mSlider forChannelName:@"slider"];
+        [self.csound startCsound:tempFile];
+        
+	} else {
+        [self.csound stopCsound];
+    }
+}
+
+- (void)dealloc {
+	[mSlider release];
+	[mSwitch release];
+    [super dealloc];
+}
+
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+	[mSwitch setOn:NO animated:YES];
+}
+
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/SimpleTest1ViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/SimpleTest1ViewController.xib
new file mode 100644
index 0000000..be3eade
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/SimpleTest1ViewController.xib	
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C74</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1138.23</string>
+		<string key="IBDocument.HIToolboxVersion">567.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUISlider</string>
+			<string>IBUISwitch</string>
+			<string>IBUIView</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUISlider" id="186719605">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 56}, {275, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<bool key="IBUIMultipleTouchEnabled">YES</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.5</float>
+					</object>
+					<object class="IBUISwitch" id="130946055">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{20, 20}, {94, 27}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="186719605"/>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<bool key="IBUIMultipleTouchEnabled">YES</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSwitch</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="130946055"/>
+					</object>
+					<int key="connectionID">7</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="186719605"/>
+					</object>
+					<int key="connectionID">8</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">toggleOnOff:</string>
+						<reference key="source" ref="130946055"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">6</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="186719605"/>
+							<reference ref="130946055"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="186719605"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="130946055"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">SimpleTest1ViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">8</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SimpleTest1ViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">toggleOnOff:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="mSlider">UISlider</string>
+						<string key="mSwitch">UISwitch</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="mSlider">
+							<string key="name">mSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSwitch">
+							<string key="name">mSwitch</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/SimpleTest1ViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/test.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/test.csd
new file mode 100644
index 0000000..8c65acf
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest1/test.csd	
@@ -0,0 +1,55 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtaudio=null -dm0
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+instr 1
+
+isl chnget "slider" 
+ksl chnget "slider" 
+ksl port ksl, 0.01, isl 
+a2 expsegr 0.001,0.01,p4,p3-0.01, 0.001, 0.1, 0.001
+a1 oscili a2, p5*(1+ksl), 1
+outs a1,a1
+endin
+
+instr 2
+asig,asig1 ins
+a1 init 0
+a2 init 0
+ksl chnget "slider"
+a1 delay asig+a2*0.5*ksl,0.3
+a2 delay asig+a1*0.5*ksl,0.8
+outs a2,a1
+endin
+
+instr 3
+
+asig,asig1 ins
+
+ksl chnget "slider"
+fsig1 pvsanal asig,2048,256,2048,1
+fsig2 pvscale fsig1,0.75+ksl,1
+fsig3 pvscale fsig1,(0.75+ksl)*1.25,1
+fsig4 pvsmix fsig2, fsig3
+a1 pvsynth fsig4 
+   outs a1, a1
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+{ 10 CNT
+i1 [$CNT*0.2] 0.5 0.5 [440*(2^[$CNT/12])]
+}
+/*i 2 0.1 10000 
+
+i 3 0.1 10000*/
+
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/SimpleTest2ViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/SimpleTest2ViewController.h
new file mode 100644
index 0000000..a097afd
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/SimpleTest2ViewController.h	
@@ -0,0 +1,43 @@
+/* 
+ 
+ SimpleTest2ViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi, Victor Lazzarini
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+#import <UIKit/UIKit.h>
+#import "BaseCsoundViewController.h"
+
+ at interface SimpleTest2ViewController : BaseCsoundViewController<CsoundObjCompletionListener> {
+    
+    IBOutlet UISlider* mRateSlider;
+    IBOutlet UISlider* mDurationSlider;
+
+    IBOutlet UISlider* mAttackSlider;
+    IBOutlet UISlider* mDecaySlider;
+    IBOutlet UISlider* mSustainSlider;
+    IBOutlet UISlider* mReleaseSlider;
+    IBOutlet UISwitch* mSwitch;
+}
+
+-(IBAction) toggleOnOff:(id)component;
+
+
+ at end
\ No newline at end of file
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/SimpleTest2ViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/SimpleTest2ViewController.m
new file mode 100644
index 0000000..834734f
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/SimpleTest2ViewController.m	
@@ -0,0 +1,84 @@
+/* 
+ 
+ SimpleTest2ViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi, Victor Lazzarini
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "SimpleTest2ViewController.h"
+
+ at implementation SimpleTest2ViewController
+
+-(void)viewDidLoad {
+    self.title = @"Simple Test 2";
+    [super viewDidLoad];
+}
+
+-(IBAction) toggleOnOff:(id)component {
+	UISwitch* uiswitch = (UISwitch*)component;
+	NSLog(@"Status: %d", [uiswitch isOn]);
+    
+	if(uiswitch.on) {
+        
+        NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"test2" ofType:@"csd"];  
+        NSLog(@"FILE PATH: %@", tempFile);
+        
+		[self.csound stopCsound];
+        
+        self.csound = [[CsoundObj alloc] init];
+        [self.csound addCompletionListener:self];
+        
+        [self.csound addSlider:mRateSlider forChannelName:@"noteRate"];
+        [self.csound addSlider:mDurationSlider forChannelName:@"duration"];        
+        [self.csound addSlider:mAttackSlider forChannelName:@"attack"];
+        [self.csound addSlider:mDecaySlider forChannelName:@"decay"];
+        [self.csound addSlider:mSustainSlider forChannelName:@"sustain"];
+        [self.csound addSlider:mReleaseSlider forChannelName:@"release"];
+        
+        [self.csound startCsound:tempFile];
+        
+	} else {
+        [self.csound stopCsound];
+    }
+}
+
+- (void)dealloc {
+	[mRateSlider release];
+    [mDurationSlider release];
+
+    [mAttackSlider release];
+    [mDecaySlider release];
+    [mSustainSlider release];
+    [mReleaseSlider release];
+	[mSwitch release];
+    [super dealloc];
+}
+
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+	[mSwitch setOn:NO animated:YES];
+}
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/SimpleTest2ViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/SimpleTest2ViewController.xib
new file mode 100644
index 0000000..99313a4
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/SimpleTest2ViewController.xib	
@@ -0,0 +1,498 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C74</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1138.23</string>
+		<string key="IBDocument.HIToolboxVersion">567.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBUISlider</string>
+			<string>IBUISwitch</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+			<string>IBProxyObject</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUISwitch" id="366045930">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{5, 20}, {94, 27}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="794527546"/>
+						<string key="NSReuseIdentifierKey">_NS:606</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+					</object>
+					<object class="IBUISlider" id="488361102">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{109, 54}, {193, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="776525145"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">1.5</float>
+						<float key="IBUIMinValue">1</float>
+						<float key="IBUIMaxValue">4</float>
+					</object>
+					<object class="IBUILabel" id="794527546">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{26, 55}, {77, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="488361102"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Note Rate</string>
+						<object class="NSColor" key="IBUITextColor" id="727448418">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<object class="IBUIFontDescription" key="IBUIFontDescription" id="354029090">
+							<int key="type">1</int>
+							<double key="pointSize">17</double>
+						</object>
+						<object class="NSFont" key="IBUIFont" id="837541887">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">17</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+					<object class="IBUISlider" id="836799419">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 173}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="431244330"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.05000000074505806</float>
+						<float key="IBUIMaxValue">2</float>
+					</object>
+					<object class="IBUILabel" id="286844193">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{26, 144}, {274, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="836799419"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">ADSR</string>
+						<reference key="IBUITextColor" ref="727448418"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<reference key="IBUIFontDescription" ref="354029090"/>
+						<reference key="IBUIFont" ref="837541887"/>
+					</object>
+					<object class="IBUISlider" id="431244330">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 203}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="828783016"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.05000000074505806</float>
+						<float key="IBUIMinValue">0.05000000074505806</float>
+						<float key="IBUIMaxValue">2</float>
+					</object>
+					<object class="IBUISlider" id="828783016">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 233}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="311810558"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">0.69999998807907104</float>
+					</object>
+					<object class="IBUISlider" id="311810558">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{18, 263}, {284, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">2</float>
+						<float key="IBUIMaxValue">4</float>
+					</object>
+					<object class="IBUISlider" id="375821102">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{109, 84}, {193, 23}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="286844193"/>
+						<string key="NSReuseIdentifierKey">_NS:623</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<int key="IBUIContentHorizontalAlignment">0</int>
+						<int key="IBUIContentVerticalAlignment">0</int>
+						<float key="IBUIValue">1.5</float>
+						<float key="IBUIMinValue">0.5</float>
+						<float key="IBUIMaxValue">4</float>
+					</object>
+					<object class="IBUILabel" id="776525145">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">292</int>
+						<string key="NSFrame">{{26, 84}, {77, 21}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView" ref="375821102"/>
+						<string key="NSReuseIdentifierKey">_NS:328</string>
+						<bool key="IBUIOpaque">NO</bool>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<int key="IBUIContentMode">7</int>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Duration</string>
+						<reference key="IBUITextColor" ref="727448418"/>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<reference key="IBUIFontDescription" ref="354029090"/>
+						<reference key="IBUIFont" ref="837541887"/>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="366045930"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSwitch</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="366045930"/>
+					</object>
+					<int key="connectionID">13</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mRateSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="488361102"/>
+					</object>
+					<int key="connectionID">15</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mAttackSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="836799419"/>
+					</object>
+					<int key="connectionID">16</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mDecaySlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="431244330"/>
+					</object>
+					<int key="connectionID">17</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mSustainSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="828783016"/>
+					</object>
+					<int key="connectionID">18</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mReleaseSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="311810558"/>
+					</object>
+					<int key="connectionID">19</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">mDurationSlider</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="375821102"/>
+					</object>
+					<int key="connectionID">22</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchEventConnection" key="connection">
+						<string key="label">toggleOnOff:</string>
+						<reference key="source" ref="366045930"/>
+						<reference key="destination" ref="372490531"/>
+						<int key="IBEventType">13</int>
+					</object>
+					<int key="connectionID">14</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="366045930"/>
+							<reference ref="794527546"/>
+							<reference ref="488361102"/>
+							<reference ref="286844193"/>
+							<reference ref="836799419"/>
+							<reference ref="431244330"/>
+							<reference ref="828783016"/>
+							<reference ref="311810558"/>
+							<reference ref="375821102"/>
+							<reference ref="776525145"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">5</int>
+						<reference key="object" ref="366045930"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">6</int>
+						<reference key="object" ref="488361102"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">7</int>
+						<reference key="object" ref="794527546"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="836799419"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">9</int>
+						<reference key="object" ref="286844193"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">10</int>
+						<reference key="object" ref="431244330"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="828783016"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">12</int>
+						<reference key="object" ref="311810558"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">20</int>
+						<reference key="object" ref="375821102"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">21</int>
+						<reference key="object" ref="776525145"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">SimpleTest2ViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="10.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="11.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="12.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="20.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="21.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="6.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="7.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">22</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">BaseCsoundViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/BaseCsoundViewController.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">SimpleTest2ViewController</string>
+					<string key="superclassName">BaseCsoundViewController</string>
+					<object class="NSMutableDictionary" key="actions">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<string key="NS.object.0">id</string>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">toggleOnOff:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">toggleOnOff:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="mAttackSlider">UISlider</string>
+						<string key="mDecaySlider">UISlider</string>
+						<string key="mDurationSlider">UISlider</string>
+						<string key="mRateSlider">UISlider</string>
+						<string key="mReleaseSlider">UISlider</string>
+						<string key="mSustainSlider">UISlider</string>
+						<string key="mSwitch">UISwitch</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="mAttackSlider">
+							<string key="name">mAttackSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mDecaySlider">
+							<string key="name">mDecaySlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mDurationSlider">
+							<string key="name">mDurationSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mRateSlider">
+							<string key="name">mRateSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mReleaseSlider">
+							<string key="name">mReleaseSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSustainSlider">
+							<string key="name">mSustainSlider</string>
+							<string key="candidateClassName">UISlider</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="mSwitch">
+							<string key="name">mSwitch</string>
+							<string key="candidateClassName">UISwitch</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/SimpleTest2ViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/test2.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/test2.csd
new file mode 100644
index 0000000..9c26e55
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/SimpleTest2/test2.csd	
@@ -0,0 +1,60 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtaudio=null -d -+msg_color=0 -m0
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+seed 0
+
+instr 1
+
+inoterate chnget "noteRate" 
+inotedur chnget "duration" 
+
+;print inoterate
+;print inotedur
+
+event_i "i", 1, inoterate, 1
+event_i "i", 2, 0, inotedur
+
+turnoff
+
+endin
+
+instr 2
+
+iattack chnget "attack" 
+idecay chnget "decay" 
+isustain chnget "sustain" 
+irelease chnget "release" 
+
+
+;ipchMul rnd31 .5, -0.5
+;ipchMul = ipchMul + .5
+;ipch = 100 + (1000 * ipchMul)
+ipch = 100 + rnd(1000)
+
+;print iattack
+;print idecay
+;print isustain
+;print irelease
+
+a2 linsegr 0, iattack, 1, idecay, isustain, irelease, 0
+a1 oscili a2 * .3, ipch, 1
+outs a1,a1
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i1 0 1
+
+f 0 3600
+ 
+</CsScore>
+</CsoundSynthesizer>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/Waveview.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/Waveview.h
new file mode 100644
index 0000000..d07d000
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/Waveview.h	
@@ -0,0 +1,50 @@
+/* 
+ 
+ Waveview.h:
+ 
+ Copyright (C) 2011 Steven Yi, Ed Costello
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <UIKit/UIKit.h>
+#import "CsoundValueCacheable.h"
+#import "CsoundObj.h"
+
+ at interface Waveview : UIView <CsoundValueCacheable>
+{
+	BOOL mCacheDirty;
+	BOOL tableLoaded;
+	float cachedValue;
+	float* channelPtr;
+	NSString* mChannelName;
+	CGFloat lastY;
+	NSInteger ksmps, sr;
+	CsoundObj *csObj;
+	MYFLT *table;
+	int tableLength;
+	MYFLT *displayData;
+	int dataRatio;
+	
+}
+
+ at property (assign) BOOL cacheDirty;
+ at property (nonatomic, retain) NSString *channelName;
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/Waveview.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/Waveview.m
new file mode 100644
index 0000000..7d8c0f4
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/Waveview.m	
@@ -0,0 +1,154 @@
+/* 
+ 
+ Waveview.m:
+ 
+ Copyright (C) 2011 Steven Yi, Ed Costello
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "Waveview.h"
+#import "CsoundObj.h"
+#import "csound.h"
+
+ at implementation Waveview
+
+ at synthesize channelName = mChannelName;
+ at synthesize cacheDirty = mCacheDirty;
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+    
+    }
+    return self;
+}
+
+
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+
+
+- (void)drawRect:(CGRect)rect
+{
+
+	CGContextRef context = UIGraphicsGetCurrentContext();
+//	CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB()
+	CGContextSetRGBFillColor(context, 0, 0, 0, 1);
+    CGContextFillRect(context, rect);
+	
+	if (tableLoaded) {
+		
+		int width = self.frame.size.width;
+		
+		CGContextSetRGBStrokeColor(context, 255, 255, 255, 1);
+		CGContextSetRGBFillColor(context, 255, 255, 255, 1);
+		CGMutablePathRef fill_path = CGPathCreateMutable();
+		CGFloat x = 0;
+		CGFloat y = displayData[0];
+		
+		CGPathMoveToPoint(fill_path, &CGAffineTransformIdentity, x, y);
+		
+		for(int i = 1; i < width; i++) {
+			CGPathAddLineToPoint(fill_path, &CGAffineTransformIdentity, i, displayData[i]);
+			//NSLog(@"%d: %f", index, val);
+										  
+		}
+	
+		CGContextAddPath(context, fill_path);	
+		CGContextSetAllowsAntialiasing(context, YES);
+		CGContextDrawPath(context, kCGPathStroke);
+		CGPathRelease(fill_path);
+	}
+}
+
+- (void)setup:(CsoundObj*)csoundObj
+{
+	tableLoaded = NO;
+	csObj = [csoundObj retain];
+
+	
+	
+}
+
+- (void)updateValuesToCsound;
+{
+	
+}
+
+- (void)updataDisplayData
+{
+	int width = self.frame.size.width;
+	int height = self.frame.size.height;
+	int middle = height / 2;
+
+	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+
+	displayData = malloc(sizeof(MYFLT) * width);
+	
+		
+	for(int i = 0; i < width; i++) {
+		float percent = i / (float)(width);
+		int index = (int)(percent * tableLength);
+		displayData[i] = (table[index] * middle) + middle;
+		
+		//NSLog(@"%d: %f", index, val);
+		
+	}
+	
+	
+	[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
+	
+	[pool release];
+
+}
+
+- (void)updateValuesFromCsound
+{
+	if (!tableLoaded) {
+	
+		NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+		CSOUND *cs = [csObj getCsound];
+		sr = csoundGetSr(cs);
+		ksmps = csoundGetKsmps(cs);
+		
+				
+			if ((tableLength = csoundTableLength(cs, 1)) > 0) {
+				
+				table = malloc(tableLength * sizeof(MYFLT));
+				csoundGetTable(cs, &table, 1);
+				tableLoaded = YES;
+				[self performSelectorInBackground:@selector(updataDisplayData) withObject:nil];
+			}
+
+		[pool release];
+	}
+}
+
+- (void)cleanup
+{
+	[csObj release];
+}
+
+
+ 
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/WaveviewViewController.h b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/WaveviewViewController.h
new file mode 100644
index 0000000..f048fe8
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/WaveviewViewController.h	
@@ -0,0 +1,38 @@
+/* 
+ 
+ WaveviewViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi, Ed Costello
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+
+#import <UIKit/UIKit.h>
+#import "Waveview.h"
+#import "BaseCsoundViewController.h"
+#import "CsoundObj.h"
+ at interface WaveviewViewController : BaseCsoundViewController <CsoundObjCompletionListener>
+{
+    
+    IBOutlet Waveview *waveview;
+}
+
+
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/WaveviewViewController.m b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/WaveviewViewController.m
new file mode 100644
index 0000000..ec87a0e
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/WaveviewViewController.m	
@@ -0,0 +1,67 @@
+/* 
+ 
+ WaveviewViewController.h:
+ 
+ Copyright (C) 2011 Steven Yi, Ed Costello
+ 
+ This file is part of Csound iOS Examples.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "WaveviewViewController.h"
+
+ at implementation WaveviewViewController
+
+-(void)viewDidLoad {
+    self.title = @"WaveviewTest";
+    [super viewDidLoad];
+}
+
+-(void)viewDidAppear:(BOOL)animated {
+	[super viewDidAppear:animated];
+	
+	NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"Waveviewtest" ofType:@"csd"];  
+	NSLog(@"FILE PATH: %@", tempFile);
+	
+	[self.csound stopCsound];
+	
+	
+	
+	self.csound = [[CsoundObj alloc] init];
+	[self.csound addCompletionListener:self];
+	
+	[self.csound  addValueCacheable:waveview];
+	
+	[self.csound startCsound:tempFile];
+}
+
+
+
+#pragma mark CsoundObjCompletionListener
+
+-(void)csoundObjDidStart:(CsoundObj *)csoundObj {
+}
+
+-(void)csoundObjComplete:(CsoundObj *)csoundObj {
+}
+
+- (void)dealloc {
+    [waveview release];
+    [super dealloc];
+}
+ at end
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/WaveviewViewController.xib b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/WaveviewViewController.xib
new file mode 100644
index 0000000..69dab12
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/WaveviewViewController.xib	
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C74</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1938</string>
+		<string key="IBDocument.AppKitVersion">1138.23</string>
+		<string key="IBDocument.HIToolboxVersion">567.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">933</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIView</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUIView" id="990374410">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">274</int>
+						<string key="NSFrameSize">{320, 460}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<reference key="NSNextKeyView"/>
+						<string key="NSReuseIdentifierKey">_NS:196</string>
+						<object class="NSColor" key="IBUIBackgroundColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MQA</bytes>
+							<object class="NSColorSpace" key="NSCustomColorSpace" id="464499048">
+								<int key="NSID">2</int>
+							</object>
+						</object>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="NSNextKeyView" ref="990374410"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<reference key="NSCustomColorSpace" ref="464499048"/>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">waveview</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="990374410"/>
+					</object>
+					<int key="connectionID">6</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="990374410"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="990374410"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">WaveviewViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.CustomClassName">Waveview</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">6</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">Waveview</string>
+					<string key="superclassName">UIView</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/Waveview.h</string>
+					</object>
+				</object>
+				<object class="IBPartialClassDescription">
+					<string key="className">WaveviewViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">waveview</string>
+						<string key="NS.object.0">Waveview</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">waveview</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">waveview</string>
+							<string key="candidateClassName">Waveview</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/WaveviewViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">933</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/Waveviewtest.csd b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/Waveviewtest.csd
new file mode 100644
index 0000000..01e465e
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/ViewControllers/Waveview/Waveviewtest.csd	
@@ -0,0 +1,63 @@
+<CsoundSynthesizer>
+<CsOptions>
+-o dac -+rtmidi=null -+rtaudio=null -d -+msg_color=0 -M0 -m0 -i adc
+</CsOptions>
+<CsInstruments>
+nchnls=2
+0dbfs=1
+ksmps=64
+sr = 44100
+
+instr 1
+
+
+
+endin
+
+</CsInstruments>
+<CsScore>
+f1 0 16384 10 1
+
+i1 0 360000
+ 
+</CsScore>
+</CsoundSynthesizer>
+<bsbPanel>
+ <label>Widgets</label>
+ <objectName/>
+ <x>1036</x>
+ <y>61</y>
+ <width>396</width>
+ <height>744</height>
+ <visible>true</visible>
+ <uuid/>
+ <bgcolor mode="nobackground">
+  <r>231</r>
+  <g>46</g>
+  <b>255</b>
+ </bgcolor>
+ <bsbObject version="2" type="BSBVSlider">
+  <objectName>slider1</objectName>
+  <x>5</x>
+  <y>5</y>
+  <width>20</width>
+  <height>100</height>
+  <uuid>{ea2b771b-3cad-462f-b9df-a821dbfeaaf8}</uuid>
+  <visible>true</visible>
+  <midichan>0</midichan>
+  <midicc>-3</midicc>
+  <minimum>0.00000000</minimum>
+  <maximum>1.00000000</maximum>
+  <value>0.00000000</value>
+  <mode>lin</mode>
+  <mouseControl act="jump">continuous</mouseControl>
+  <resolution>-1.00000000</resolution>
+  <randomizable group="0">false</randomizable>
+ </bsbObject>
+</bsbPanel>
+<bsbPresets>
+</bsbPresets>
+<MacGUI>
+ioView nobackground {59367, 11822, 65535}
+ioSlider {5, 5} {20, 100} 0.000000 1.000000 0.000000 slider1
+</MacGUI>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/DetailViewController_iPad.xib b/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/DetailViewController_iPad.xib
new file mode 100644
index 0000000..22b0ae8
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/DetailViewController_iPad.xib	
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C25</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1919</string>
+		<string key="IBDocument.AppKitVersion">1138.11</string>
+		<string key="IBDocument.HIToolboxVersion">566.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">916</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="841351856">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+			</object>
+			<object class="IBProxyObject" id="606714003">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+			</object>
+			<object class="IBUIView" id="647120888">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUILabel" id="483876647">
+						<reference key="NSNextResponder" ref="647120888"/>
+						<int key="NSvFlags">298</int>
+						<string key="NSFrame">{{20, 491}, {728, 21}}</string>
+						<reference key="NSSuperview" ref="647120888"/>
+						<reference key="NSWindow"/>
+						<object class="NSColor" key="IBUIBackgroundColor" id="33107367">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MQA</bytes>
+						</object>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+						<string key="IBUIText">Detail view content goes here</string>
+						<object class="NSColor" key="IBUITextColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">1</int>
+							<int key="size">4</int>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">14</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {768, 1004}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<reference key="IBUIBackgroundColor" ref="33107367"/>
+				<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
+					<int key="IBUIStatusBarStyle">2</int>
+				</object>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="841351856"/>
+						<reference key="destination" ref="647120888"/>
+					</object>
+					<int key="connectionID">12</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">detailDescriptionLabel</string>
+						<reference key="source" ref="841351856"/>
+						<reference key="destination" ref="483876647"/>
+					</object>
+					<int key="connectionID">66</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="841351856"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="606714003"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">8</int>
+						<reference key="object" ref="647120888"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="483876647"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">45</int>
+						<reference key="object" ref="483876647"/>
+						<reference key="parent" ref="647120888"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">DetailViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="45.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="8.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">66</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">DetailViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="detailDescriptionLabel">UILabel</string>
+						<string key="detailItem">id</string>
+						<string key="toolbar">UIToolbar</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="detailDescriptionLabel">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="detailItem">
+							<string key="name">detailItem</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="toolbar">
+							<string key="name">toolbar</string>
+							<string key="candidateClassName">UIToolbar</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/DetailViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">916</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/DetailViewController_iPhone.xib b/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/DetailViewController_iPhone.xib
new file mode 100644
index 0000000..cfec6df
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/DetailViewController_iPhone.xib	
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C25</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1919</string>
+		<string key="IBDocument.AppKitVersion">1138.11</string>
+		<string key="IBDocument.HIToolboxVersion">566.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">916</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUIView</string>
+			<string>IBUILabel</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="372490531">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="975951072">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUIView" id="191373211">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<array class="NSMutableArray" key="NSSubviews">
+					<object class="IBUILabel" id="741552823">
+						<reference key="NSNextResponder" ref="191373211"/>
+						<int key="NSvFlags">298</int>
+						<string key="NSFrame">{{20, 221}, {280, 18}}</string>
+						<reference key="NSSuperview" ref="191373211"/>
+						<reference key="NSWindow"/>
+						<object class="NSColor" key="IBUIBackgroundColor">
+							<int key="NSColorSpace">3</int>
+							<bytes key="NSWhite">MQA</bytes>
+						</object>
+						<bool key="IBUIClipsSubviews">YES</bool>
+						<bool key="IBUIUserInteractionEnabled">NO</bool>
+						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+						<string key="IBUIText">Detail view content goes here</string>
+						<object class="NSColor" key="IBUITextColor">
+							<int key="NSColorSpace">1</int>
+							<bytes key="NSRGB">MCAwIDAAA</bytes>
+						</object>
+						<nil key="IBUIHighlightedColor"/>
+						<int key="IBUIBaselineAdjustment">1</int>
+						<float key="IBUIMinimumFontSize">10</float>
+						<int key="IBUITextAlignment">1</int>
+						<object class="IBUIFontDescription" key="IBUIFontDescription">
+							<int key="type">1</int>
+							<int key="size">4</int>
+						</object>
+						<object class="NSFont" key="IBUIFont">
+							<string key="NSName">Helvetica</string>
+							<double key="NSSize">14</double>
+							<int key="NSfFlags">16</int>
+						</object>
+					</object>
+				</array>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+					<object class="NSColorSpace" key="NSCustomColorSpace">
+						<int key="NSID">2</int>
+					</object>
+				</object>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="191373211"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">detailDescriptionLabel</string>
+						<reference key="source" ref="372490531"/>
+						<reference key="destination" ref="741552823"/>
+					</object>
+					<int key="connectionID">6</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">1</int>
+						<reference key="object" ref="191373211"/>
+						<array class="NSMutableArray" key="children">
+							<reference ref="741552823"/>
+						</array>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="372490531"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="975951072"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">4</int>
+						<reference key="object" ref="741552823"/>
+						<reference key="parent" ref="191373211"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">DetailViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">6</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">DetailViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<object class="NSMutableDictionary" key="outlets">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<string key="NS.object.0">UILabel</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">detailDescriptionLabel</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">detailDescriptionLabel</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</object>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/DetailViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">916</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/InfoPlist.strings b/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..477b28f
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/InfoPlist.strings	
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/MasterViewController_iPad.xib b/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/MasterViewController_iPad.xib
new file mode 100644
index 0000000..7189901
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/MasterViewController_iPad.xib	
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C25</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1919</string>
+		<string key="IBDocument.AppKitVersion">1138.11</string>
+		<string key="IBDocument.HIToolboxVersion">566.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">916</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUITableView</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="841351856">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+			</object>
+			<object class="IBProxyObject" id="371349661">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+			</object>
+			<object class="IBUITableView" id="286511803">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<string key="NSFrame">{{0, 20}, {320, 832}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+				</object>
+				<bool key="IBUIClipsSubviews">YES</bool>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
+					<int key="IBUIStatusBarStyle">2</int>
+				</object>
+				<object class="IBUISimulatedSizeMetrics" key="IBUISimulatedDestinationMetrics">
+					<string key="IBUISimulatedSizeMetricsClass">IBUISplitViewMasterSimulatedSizeMetrics</string>
+					<object class="NSMutableDictionary" key="IBUINormalizedOrientationToSizeMap">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<array key="dict.sortedKeys">
+							<integer value="1"/>
+							<integer value="3"/>
+						</array>
+						<array class="NSMutableArray" key="dict.values">
+							<string>{320, 852}</string>
+							<string>{320, 768}</string>
+						</array>
+					</object>
+					<string key="IBUITargetRuntime">IBIPadFramework</string>
+					<string key="IBUIDisplayName">Master</string>
+					<string key="IBUIDestinationClass">IBUISplitViewController</string>
+					<object class="NSDictionary" key="IBUIDestinationContext">
+						<string key="NS.key.0">IBUISplitViewControllerContentSizeLocation</string>
+						<string key="NS.object.0">IBUISplitViewControllerContentSizeLocationMaster</string>
+					</object>
+				</object>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+				<bool key="IBUIAlwaysBounceVertical">YES</bool>
+				<int key="IBUISeparatorStyle">1</int>
+				<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
+				<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
+				<float key="IBUIRowHeight">44</float>
+				<float key="IBUISectionHeaderHeight">22</float>
+				<float key="IBUISectionFooterHeight">22</float>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="841351856"/>
+						<reference key="destination" ref="286511803"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">dataSource</string>
+						<reference key="source" ref="286511803"/>
+						<reference key="destination" ref="841351856"/>
+					</object>
+					<int key="connectionID">4</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="286511803"/>
+						<reference key="destination" ref="841351856"/>
+					</object>
+					<int key="connectionID">5</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="841351856"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="371349661"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">2</int>
+						<reference key="object" ref="286511803"/>
+						<reference key="parent" ref="0"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">MasterViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">5</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">MasterViewController</string>
+					<string key="superclassName">UITableViewController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/MasterViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">916</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/MasterViewController_iPhone.xib b/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/MasterViewController_iPhone.xib
new file mode 100644
index 0000000..729e015
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/en.lproj/MasterViewController_iPhone.xib	
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="8.00">
+	<data>
+		<int key="IBDocument.SystemTarget">1280</int>
+		<string key="IBDocument.SystemVersion">11C25</string>
+		<string key="IBDocument.InterfaceBuilderVersion">1919</string>
+		<string key="IBDocument.AppKitVersion">1138.11</string>
+		<string key="IBDocument.HIToolboxVersion">566.00</string>
+		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			<string key="NS.object.0">916</string>
+		</object>
+		<array key="IBDocument.IntegratedClassDependencies">
+			<string>IBProxyObject</string>
+			<string>IBUITableView</string>
+		</array>
+		<array key="IBDocument.PluginDependencies">
+			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+		</array>
+		<object class="NSMutableDictionary" key="IBDocument.Metadata">
+			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+			<integer value="1" key="NS.object.0"/>
+		</object>
+		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+			<object class="IBProxyObject" id="841351856">
+				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBProxyObject" id="371349661">
+				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+			</object>
+			<object class="IBUITableView" id="709618507">
+				<reference key="NSNextResponder"/>
+				<int key="NSvFlags">274</int>
+				<string key="NSFrame">{{0, 20}, {320, 460}}</string>
+				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
+				<object class="NSColor" key="IBUIBackgroundColor">
+					<int key="NSColorSpace">3</int>
+					<bytes key="NSWhite">MQA</bytes>
+				</object>
+				<bool key="IBUIClipsSubviews">YES</bool>
+				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
+				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
+				<bool key="IBUIAlwaysBounceVertical">YES</bool>
+				<int key="IBUISeparatorStyle">1</int>
+				<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
+				<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
+				<float key="IBUIRowHeight">44</float>
+				<float key="IBUISectionHeaderHeight">22</float>
+				<float key="IBUISectionFooterHeight">22</float>
+			</object>
+		</array>
+		<object class="IBObjectContainer" key="IBDocument.Objects">
+			<array class="NSMutableArray" key="connectionRecords">
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">view</string>
+						<reference key="source" ref="841351856"/>
+						<reference key="destination" ref="709618507"/>
+					</object>
+					<int key="connectionID">3</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">dataSource</string>
+						<reference key="source" ref="709618507"/>
+						<reference key="destination" ref="841351856"/>
+					</object>
+					<int key="connectionID">4</int>
+				</object>
+				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">delegate</string>
+						<reference key="source" ref="709618507"/>
+						<reference key="destination" ref="841351856"/>
+					</object>
+					<int key="connectionID">5</int>
+				</object>
+			</array>
+			<object class="IBMutableOrderedSet" key="objectRecords">
+				<array key="orderedObjects">
+					<object class="IBObjectRecord">
+						<int key="objectID">0</int>
+						<array key="object" id="0"/>
+						<reference key="children" ref="1000"/>
+						<nil key="parent"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-1</int>
+						<reference key="object" ref="841351856"/>
+						<reference key="parent" ref="0"/>
+						<string key="objectName">File's Owner</string>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">-2</int>
+						<reference key="object" ref="371349661"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">2</int>
+						<reference key="object" ref="709618507"/>
+						<reference key="parent" ref="0"/>
+					</object>
+				</array>
+			</object>
+			<dictionary class="NSMutableDictionary" key="flattenedProperties">
+				<string key="-1.CustomClassName">MasterViewController</string>
+				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="-2.CustomClassName">UIResponder</string>
+				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+			</dictionary>
+			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
+			<nil key="activeLocalization"/>
+			<dictionary class="NSMutableDictionary" key="localizations"/>
+			<nil key="sourceID"/>
+			<int key="maxID">5</int>
+		</object>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">MasterViewController</string>
+					<string key="superclassName">UITableViewController</string>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/MasterViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
+		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
+		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<string key="IBCocoaTouchPluginVersion">916</string>
+	</data>
+</archive>
diff --git a/iOS/Csound iOS Examples/Csound iOS Examples/main.m b/iOS/Csound iOS Examples/Csound iOS Examples/main.m
new file mode 100644
index 0000000..599a0fe
--- /dev/null
+++ b/iOS/Csound iOS Examples/Csound iOS Examples/main.m	
@@ -0,0 +1,18 @@
+//
+//  main.m
+//  Csound iOS Examples
+//
+//  Created by Steven Yi on 1/27/12.
+//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "AppDelegate.h"
+
+int main(int argc, char *argv[])
+{
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+    }
+}
diff --git a/iOS/Csound iOS Examples/LICENSE.TXT b/iOS/Csound iOS Examples/LICENSE.TXT
new file mode 100644
index 0000000..8ef9e34
--- /dev/null
+++ b/iOS/Csound iOS Examples/LICENSE.TXT	
@@ -0,0 +1,457 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
diff --git a/iOS/Csound iOS Examples/csound-iOS/LICENSE.TXT b/iOS/Csound iOS Examples/csound-iOS/LICENSE.TXT
new file mode 100644
index 0000000..8ef9e34
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/LICENSE.TXT	
@@ -0,0 +1,457 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/CsoundObj.h b/iOS/Csound iOS Examples/csound-iOS/classes/CsoundObj.h
new file mode 100644
index 0000000..6498eef
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/CsoundObj.h	
@@ -0,0 +1,130 @@
+/* 
+ 
+ CsoundObj.h:
+ 
+ Copyright (C) 2011 Steven Yi, Victor Lazzarini
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+
+*/
+
+#import <AudioToolbox/ExtendedAudioFile.h>
+#import <AudioToolbox/AudioConverter.h>
+#import <AudioToolbox/AudioServices.h>
+#import <AudioUnit/AudioUnit.h>
+#import <AVFoundation/AVFoundation.h>
+#import <Foundation/Foundation.h>
+#import "csound.h"
+#import <CoreMotion/CoreMotion.h>
+#import "UIKnob.h"
+
+typedef struct csdata_ {
+	CSOUND *cs;
+	int bufframes;
+	int ret;
+	int nchnls;
+    bool running;
+	bool shouldRecord;
+	bool shouldMute;
+	ExtAudioFileRef file;
+	AudioUnit *aunit;
+     __unsafe_unretained NSMutableArray* valuesCache;
+} csdata;
+
+typedef struct {
+	CSOUND *cs;
+	int attr;
+	const char *format;
+	va_list valist;
+} Message;
+
+ at class CsoundObj;
+ at protocol CsoundValueCacheable;
+
+ at protocol CsoundObjCompletionListener 
+
+-(void)csoundObjDidStart:(CsoundObj*)csoundObj;
+-(void)csoundObjComplete:(CsoundObj*)csoundObj;
+
+ at end
+
+ at interface CsoundObj : NSObject {
+    NSMutableArray* valuesCache;
+    NSMutableArray* completionListeners;
+    csdata mCsData;
+    BOOL mMidiInEnabled;
+    CMMotionManager* mMotionManager;
+	NSURL *outputURL;
+	SEL mMessageCallback;
+	id  mMessageListener;
+    BOOL mUseOldParser;
+}
+
+ at property (nonatomic, retain) NSURL *outputURL;
+ at property (assign) BOOL midiInEnabled;
+ at property (nonatomic, retain) CMMotionManager* motionManager;
+ at property (assign) BOOL useOldParser;
+
+
+
+#pragma mark UI and Hardware Methods
+
+-(id<CsoundValueCacheable>)addSwitch:(UISwitch*)uiSwitch forChannelName:(NSString*)channelName;
+-(id<CsoundValueCacheable>)addSlider:(UISlider*)uiSlider forChannelName:(NSString*)channelName;
+-(id<CsoundValueCacheable>)addButton:(UIButton*)uiButton forChannelName:(NSString*)channelName;
+
+-(void)addValueCacheable:(id<CsoundValueCacheable>)valueCacheable;
+-(void)removeValueCaheable:(id<CsoundValueCacheable>)valueCacheable;
+
+-(id<CsoundValueCacheable>)enableAccelerometer;
+-(id<CsoundValueCacheable>)enableGyroscope;
+-(id<CsoundValueCacheable>)enableAttitude;
+
+#pragma mark -
+
+-(void)sendScore:(NSString*)score;
+
+#pragma mark -
+
+-(void)addCompletionListener:(id<CsoundObjCompletionListener>)listener;
+
+#pragma mark -
+
+-(void)startCsound:(NSString*)csdFilePath;
+-(void)startCsound:(NSString *)csdFilePath recordToURL:(NSURL *)outputURL;
+-(void)recordToURL:(NSURL *)outputURL;
+-(void)stopRecording;
+-(void)stopCsound;
+-(void)muteCsound;
+-(void)unmuteCsound;
+
+-(CSOUND*)getCsound;
+-(float*)getInputChannelPtr:(NSString*)channelName;	
+-(float*)getOutputChannelPtr:(NSString*)channelName;
+-(NSData*)getOutSamples;
+-(int)getNumChannels;
+-(int)getKsmps;
+
+-(void)setMessageCallback:(SEL)method withListener:(id)listener;
+-(void)performMessageCallback:(NSValue *)infoObj;
+
+ at end
+
+
+
+
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/CsoundObj.m b/iOS/Csound iOS Examples/csound-iOS/classes/CsoundObj.m
new file mode 100644
index 0000000..ba1c992
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/CsoundObj.m	
@@ -0,0 +1,614 @@
+/* 
+ 
+ CsoundObj.m:
+ 
+ Copyright (C) 2011 Steven Yi, Victor Lazzarini
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "CsoundObj.h"
+#import "CachedSlider.h"
+#import "CachedButton.h"
+#import "CachedSwitch.h"
+#import "CachedAccelerometer.h"
+#import "CachedGyroscope.h"
+#import "CachedAttitude.h"
+#import "CsoundValueCacheable.h"
+#import "CsoundMIDI.h"
+
+OSStatus  Csound_Render(void *inRefCon,
+                        AudioUnitRenderActionFlags *ioActionFlags,
+                        const AudioTimeStamp *inTimeStamp,
+                        UInt32 dump,
+                        UInt32 inNumberFrames,
+                        AudioBufferList *ioData);
+void InterruptionListener(void *inClientData, UInt32 inInterruption);
+
+ at interface CsoundObj() 
+
+-(void)runCsound:(NSString*)csdFilePath;
+
+ at end
+
+ at implementation CsoundObj
+
+ at synthesize outputURL;
+ at synthesize midiInEnabled = mMidiInEnabled;
+ at synthesize motionManager = mMotionManager;
+ at synthesize useOldParser = mUseOldParser;
+
+//+(void)initializeAudio {
+//    /* CONFIGURING AUDIO SETTINGS */
+//    
+//    //    self.graphSampleRate = 44100.0; // Hertz
+//    //    
+//    //    NSError *audioSessionError = nil;
+//    //    AVAudioSession *mySession = [AVAudioSession sharedInstance];     
+//    //    [mySession setPreferredHardwareSampleRate: self.graphSampleRate       
+//    //                                        error: &audioSessionError];
+//    //    [mySession setCategory: AVAudioSessionCategoryPlayAndRecord      
+//    //                     error: &audioSessionError];
+//    //    [mySession setActive: YES                                        
+//    //                   error: &audioSessionError];
+//    //    self.graphSampleRate = [mySession currentHardwareSampleRate];    
+//    
+//    
+//}
+
+- (id)init
+{
+    self = [super init];
+    if (self) {
+		mCsData.shouldMute = false;
+        valuesCache = [[NSMutableArray alloc] init];
+        completionListeners = [[NSMutableArray alloc] init];
+        mMidiInEnabled = NO;
+        self.motionManager = [[CMMotionManager alloc] init];
+        mUseOldParser = NO;
+    }
+    
+    return self;
+}
+
+-(id<CsoundValueCacheable>)addSwitch:(UISwitch*)uiSwitch forChannelName:(NSString*)channelName {
+    CachedSwitch* cachedSwitch = [[[CachedSwitch alloc] init:uiSwitch 
+												 channelName:channelName] autorelease];
+    [valuesCache addObject:cachedSwitch];
+	
+    return cachedSwitch;
+}
+
+-(id<CsoundValueCacheable>)addSlider:(UISlider*)uiSlider forChannelName:(NSString*)channelName { 
+
+    CachedSlider* cachedSlider = [[[CachedSlider alloc] init:uiSlider 
+                                                channelName:channelName] autorelease];
+    [valuesCache addObject:cachedSlider];
+    
+    return cachedSlider;
+}
+
+-(id<CsoundValueCacheable>)addButton:(UIButton*)uiButton forChannelName:(NSString*)channelName {
+    CachedButton* cachedButton = [[[CachedButton alloc] init:uiButton 
+                                                channelName:channelName] autorelease];
+    [valuesCache addObject:cachedButton];
+    return cachedButton;
+}
+
+-(void)addValueCacheable:(id<CsoundValueCacheable>)valueCacheable {
+    if (valueCacheable != nil) {
+        [valuesCache addObject:valueCacheable];
+    }
+}
+
+-(void)removeValueCaheable:(id<CsoundValueCacheable>)valueCacheable {
+	if (valueCacheable != nil && [valuesCache containsObject:valueCacheable]) {
+		[valuesCache removeObject:valueCacheable];
+	}
+}
+
+-(id<CsoundValueCacheable>)enableAccelerometer {
+    
+    if (!mMotionManager.accelerometerAvailable) {
+        NSLog(@"Accelerometer not available");
+        return nil;
+    }
+    
+    CachedAccelerometer* accelerometer = [[CachedAccelerometer alloc] init:mMotionManager];
+    [valuesCache addObject:accelerometer];
+        
+    [accelerometer release];
+    
+    mMotionManager.accelerometerUpdateInterval = 1 / 100.0; // 100 hz
+    
+    [mMotionManager startAccelerometerUpdates];
+	
+	return accelerometer;
+}
+
+-(id<CsoundValueCacheable>)enableGyroscope {
+    
+    if (!mMotionManager.isGyroAvailable) {
+        NSLog(@"Gyroscope not available");
+        return nil;
+    }
+    
+    CachedGyroscope* gyro = [[[CachedGyroscope alloc] init:mMotionManager] autorelease];
+    [valuesCache addObject:gyro];
+    
+    mMotionManager.gyroUpdateInterval = 1 / 100.0; // 100 hz
+    
+    [mMotionManager startGyroUpdates];
+	
+	return gyro;
+}
+
+-(id<CsoundValueCacheable>)enableAttitude {
+    if (!mMotionManager.isDeviceMotionAvailable) {
+        NSLog(@"Attitude not available");
+        return nil;
+    }
+    
+    CachedAttitude* attitude = [[[CachedAttitude alloc] init:mMotionManager] autorelease];
+    [valuesCache addObject:attitude];
+    
+    mMotionManager.deviceMotionUpdateInterval = 1 / 100.0; // 100hz
+    
+    [mMotionManager startDeviceMotionUpdates];
+	
+	return attitude;
+}
+
+#pragma mark -
+
+static void messageCallback(CSOUND *cs, int attr, const char *format, va_list valist) 
+{	
+	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+	CsoundObj *obj = csoundGetHostData(cs);
+	Message info;
+	info.cs = cs;
+	info.attr = attr;
+	info.format = format;
+	info.valist = valist;
+	NSValue *infoObj = [NSValue value:&info withObjCType:@encode(Message)];
+	[obj performSelector:@selector(performMessageCallback:) withObject:infoObj];
+	[pool drain];
+} 
+
+- (void)setMessageCallback:(SEL)method withListener:(id)listener
+{
+	mMessageCallback = method;
+	mMessageListener = listener;
+}
+
+- (void)performMessageCallback:(NSValue *)infoObj
+{
+	[mMessageListener performSelector:mMessageCallback withObject:infoObj];
+}
+
+#pragma mark -
+
+-(void)sendScore:(NSString *)score {
+    if (mCsData.cs != NULL) {
+        csoundInputMessage(mCsData.cs, [score cStringUsingEncoding:NSASCIIStringEncoding]);
+    }
+}
+
+#pragma mark -
+
+-(void)addCompletionListener:(id<CsoundObjCompletionListener>)listener {
+    [completionListeners addObject:listener];
+}
+
+
+-(CSOUND*)getCsound {
+    if (!mCsData.running) {
+        return NULL;
+    }
+    return mCsData.cs;
+}
+
+-(float*)getInputChannelPtr:(NSString*)channelName {
+    float *value;
+    csoundGetChannelPtr(mCsData.cs, &value, [channelName cStringUsingEncoding:NSASCIIStringEncoding], CSOUND_CONTROL_CHANNEL | CSOUND_INPUT_CHANNEL);
+    return value;
+}
+
+-(float*)getOutputChannelPtr:(NSString *)channelName
+{
+	float *value;
+	csoundGetChannelPtr(mCsData.cs, &value, [channelName cStringUsingEncoding:NSASCIIStringEncoding], CSOUND_AUDIO_CHANNEL | CSOUND_OUTPUT_CHANNEL);
+	return value;
+}
+
+-(NSData*)getOutSamples {
+    if (!mCsData.running) {
+        return nil;
+    }
+    CSOUND* csound = [self getCsound];
+    float* spout = csoundGetSpout(csound);
+    int nchnls = csoundGetNchnls(csound);
+    int ksmps = csoundGetKsmps(csound);
+    NSData* data = [NSData dataWithBytes:spout length:(nchnls * ksmps * sizeof(MYFLT))];
+    return data;
+}
+
+-(int)getNumChannels {
+    if (!mCsData.running) {
+        return -1;
+    }
+    return csoundGetNchnls(mCsData.cs);
+}
+-(int)getKsmps {
+    if (!mCsData.running) {
+        return -1;
+    }    
+    return csoundGetKsmps(mCsData.cs);
+}
+
+#pragma mark Csound Code
+
+      
+    
+OSStatus  Csound_Render(void *inRefCon,
+                        AudioUnitRenderActionFlags *ioActionFlags,
+                        const AudioTimeStamp *inTimeStamp,
+                        UInt32 dump,
+                        UInt32 inNumberFrames,
+                        AudioBufferList *ioData)
+{
+    csdata *cdata = (csdata *) inRefCon;
+    int ret = cdata->ret, nchnls = cdata->nchnls;
+    float coef = (float) INT_MAX / csoundGet0dBFS(cdata->cs);
+    CSOUND *cs = cdata->cs;
+    
+    int i,j,k;
+    int slices = inNumberFrames/csoundGetKsmps(cs);
+    int ksmps = csoundGetKsmps(cs);
+    MYFLT *spin = csoundGetSpin(cs);
+    MYFLT *spout = csoundGetSpout(cs);
+    AudioUnitSampleType *buffer; 
+    
+    AudioUnitRender(*cdata->aunit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData);
+    
+    NSMutableArray* cache = cdata->valuesCache;
+    
+    for(i=0; i < slices; i++){
+		
+		for (int i = 0; i < cache.count; i++) {
+			id<CsoundValueCacheable> cachedValue = [cache objectAtIndex:i];
+			[cachedValue updateValuesToCsound];
+		}
+        
+		/* performance */
+		for (k = 0; k < nchnls; k++){
+			buffer = (AudioUnitSampleType *) ioData->mBuffers[k].mData;
+			for(j=0; j < ksmps; j++){
+				spin[j*nchnls+k] =(1./coef)*buffer[j+i*ksmps];
+			}
+		}
+        if(!ret) {
+            ret = csoundPerformKsmps(cs);
+        } else {
+            cdata->running = false;
+        }
+		
+		for (k = 0; k < nchnls; k++) {
+			buffer = (AudioUnitSampleType *) ioData->mBuffers[k].mData;
+			if (cdata->shouldMute == false) {
+				for(j=0; j < ksmps; j++){
+					buffer[j+i*ksmps] = (AudioUnitSampleType) lrintf(spout[j*nchnls+k]*coef) ;
+				}
+			} else {
+				memset(buffer, 0, sizeof(AudioUnitSampleType) * inNumberFrames);
+			}
+		}
+        
+		
+		for (int i = 0; i < cache.count; i++) {
+			id<CsoundValueCacheable> cachedValue = [cache objectAtIndex:i];
+			[cachedValue updateValuesFromCsound];
+		}
+		
+    }
+	
+	// Write to file.
+	if (cdata->shouldRecord) {
+		OSStatus err = ExtAudioFileWriteAsync(cdata->file, inNumberFrames, ioData);
+		if (err != noErr) {
+			printf("***Error writing to file: %ld\n", err);
+		}
+	}
+        
+    cdata->ret = ret;
+    return 0;
+}
+
+
+void InterruptionListener(void *inClientData, UInt32 inInterruption)
+{
+	csdata *cdata  = (csdata *)inClientData;
+    
+	if (inInterruption == kAudioSessionEndInterruption) {
+		// make sure we are again the active session
+		AudioSessionSetActive(true);
+		AudioOutputUnitStart(*(cdata->aunit));
+	}
+	
+	if (inInterruption == kAudioSessionBeginInterruption) {
+		AudioOutputUnitStop(*(cdata->aunit));
+    }
+}
+
+-(void)startCsound:(NSString*)csdFilePath {
+	mCsData.shouldRecord = false;
+    [self performSelectorInBackground:@selector(runCsound:) withObject:csdFilePath];
+}
+
+-(void)startCsound:(NSString *)csdFilePath recordToURL:(NSURL *)outputURL_{
+	mCsData.shouldRecord = true;
+	self.outputURL = outputURL_;
+	[self performSelectorInBackground:@selector(runCsound:) withObject:csdFilePath];
+}
+
+-(void)recordToURL:(NSURL *)outputURL_
+{
+    // Define format for the audio file.
+    AudioStreamBasicDescription destFormat, clientFormat;
+    memset(&destFormat, 0, sizeof(AudioStreamBasicDescription));
+    memset(&clientFormat, 0, sizeof(AudioStreamBasicDescription));
+    destFormat.mFormatID = kAudioFormatLinearPCM;
+    destFormat.mFormatFlags = kLinearPCMFormatFlagIsPacked | kLinearPCMFormatFlagIsSignedInteger;
+    destFormat.mSampleRate = csoundGetSr(mCsData.cs);
+    destFormat.mChannelsPerFrame = mCsData.nchnls;
+    destFormat.mBytesPerPacket = mCsData.nchnls * 2;
+    destFormat.mBytesPerFrame = mCsData.nchnls * 2;
+    destFormat.mBitsPerChannel = 16;
+    destFormat.mFramesPerPacket = 1;
+    
+    // Create the audio file.
+    OSStatus err = noErr;
+    CFURLRef fileURL = (CFURLRef)outputURL_;
+    err = ExtAudioFileCreateWithURL(fileURL, kAudioFileWAVEType, &destFormat, NULL, kAudioFileFlags_EraseFile, &(mCsData.file));
+    if (err == noErr) {
+        // Get the stream format from the AU...
+        UInt32 propSize = sizeof(AudioStreamBasicDescription);
+        AudioUnitGetProperty(*(mCsData.aunit), kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &clientFormat, &propSize);
+        // ...and set it as the client format for the audio file. The file will use this
+        // format to perform any necessary conversions when asked to read or write.
+        ExtAudioFileSetProperty(mCsData.file, kExtAudioFileProperty_ClientDataFormat, sizeof(clientFormat), &clientFormat);
+        // Warm the file up.
+        ExtAudioFileWriteAsync(mCsData.file, 0, NULL);
+    } else {
+        printf("***Not recording. Error: %ld\n", err);
+        err = noErr;
+    }
+    
+    mCsData.shouldRecord = true;
+}
+
+-(void)stopRecording
+{
+    mCsData.shouldRecord = false;
+    ExtAudioFileDispose(mCsData.file);
+}
+    
+-(void)stopCsound {
+    mCsData.running = false;
+}
+
+-(void)muteCsound{
+	mCsData.shouldMute = true;
+}
+
+-(void)unmuteCsound{
+	mCsData.shouldMute = false;
+}
+
+-(void)runCsound:(NSString*)csdFilePath {
+	
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];	
+	CSOUND *cs;
+    
+	cs = csoundCreate(NULL);
+    csoundPreCompile(cs);
+    csoundSetHostImplementedAudioIO(cs, 1, 0);
+	
+	csoundSetMessageCallback(cs, messageCallback);
+	csoundSetHostData(cs, self);
+    
+    if (mMidiInEnabled) {
+        [CsoundMIDI setMidiInCallbacks:cs];
+    }
+    
+    // Hardcoding to use old parser for time being
+    char* parserFlag;
+	
+    
+    if(self.useOldParser) {
+       parserFlag = "--old-parser";
+    } else {
+       parserFlag = "--new-parser";
+    }
+    
+    char *argv[3] = { "csound", parserFlag, (char*)[csdFilePath cStringUsingEncoding:NSASCIIStringEncoding]};
+	int ret = csoundCompile(cs, 3, argv);
+	mCsData.running = true;
+    
+	if(!ret) {
+        
+		mCsData.cs = cs;
+		mCsData.ret = ret;
+		mCsData.nchnls = csoundGetNchnls(cs);
+		mCsData.bufframes = (csoundGetOutputBufferSize(cs))/mCsData.nchnls;
+		mCsData.running = true;
+        mCsData.valuesCache = valuesCache;
+		AudioStreamBasicDescription format;
+		OSStatus err;
+		
+        /* SETUP VALUE CACHEABLE */
+        
+        for (int i = 0; i < valuesCache.count; i++) {
+            id<CsoundValueCacheable> cachedValue = [valuesCache objectAtIndex:i];
+            [cachedValue setup:self];
+        }
+        
+        
+		/* Audio Session handler */
+        AudioSessionInitialize(NULL, NULL, InterruptionListener, &mCsData);
+		AudioSessionSetActive(true);
+//		UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
+//		AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);
+		UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;
+		AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(audioCategory), &audioCategory);
+		
+		Float32 preferredBufferSize = mCsData.bufframes / csoundGetSr(cs);
+		AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferSize), &preferredBufferSize);
+		AudioComponentDescription cd = {kAudioUnitType_Output, kAudioUnitSubType_RemoteIO, kAudioUnitManufacturer_Apple, 0, 0};
+		AudioComponent HALOutput = AudioComponentFindNext(NULL, &cd);
+		
+		AudioUnit csAUHAL;
+		err = AudioComponentInstanceNew(HALOutput, &csAUHAL);
+
+		
+		if(!err) {
+            
+            mCsData.aunit = &csAUHAL;
+            UInt32 enableIO = 1;
+            AudioUnitSetProperty(csAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, 0, &enableIO, sizeof(enableIO));
+            AudioUnitSetProperty(csAUHAL, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &enableIO, sizeof(enableIO));
+            
+            if (enableIO) {
+                UInt32 maxFPS;
+                UInt32 outsize;
+                int elem;
+                for(elem = 1; elem >= 0; elem--){
+                    outsize = sizeof(maxFPS);
+                    AudioUnitGetProperty(csAUHAL, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, elem, &maxFPS, &outsize);
+                    AudioUnitSetProperty(csAUHAL, kAudioUnitProperty_MaximumFramesPerSlice, kAudioUnitScope_Global, elem, (UInt32*)&(mCsData.bufframes), sizeof(UInt32));
+                    outsize = sizeof(AudioStreamBasicDescription);
+                    AudioUnitGetProperty(csAUHAL, kAudioUnitProperty_StreamFormat, (elem ? kAudioUnitScope_Output : kAudioUnitScope_Input), elem, &format, &outsize);
+                    format.mSampleRate	= csoundGetSr(cs);
+                    format.mFormatID = kAudioFormatLinearPCM;
+                    format.mFormatFlags = kAudioFormatFlagsCanonical | kLinearPCMFormatFlagIsNonInterleaved;         
+                    format.mBytesPerPacket = sizeof(AudioUnitSampleType);
+                    format.mFramesPerPacket = 1;
+                    format.mBytesPerFrame = sizeof(AudioUnitSampleType);
+                    format.mChannelsPerFrame = mCsData.nchnls;
+                    format.mBitsPerChannel = sizeof(AudioUnitSampleType)*8;
+                    err = AudioUnitSetProperty(csAUHAL, kAudioUnitProperty_StreamFormat, (elem ? kAudioUnitScope_Output : kAudioUnitScope_Input), elem, &format, sizeof(AudioStreamBasicDescription));
+                }		
+                
+				if (mCsData.shouldRecord) {
+					
+					// Define format for the audio file.
+					AudioStreamBasicDescription destFormat, clientFormat;
+					memset(&destFormat, 0, sizeof(AudioStreamBasicDescription));
+					memset(&clientFormat, 0, sizeof(AudioStreamBasicDescription));
+					destFormat.mFormatID = kAudioFormatLinearPCM;
+					destFormat.mFormatFlags = kLinearPCMFormatFlagIsPacked | kLinearPCMFormatFlagIsSignedInteger;
+					destFormat.mSampleRate = csoundGetSr(cs);
+					destFormat.mChannelsPerFrame = mCsData.nchnls;
+					destFormat.mBytesPerPacket = mCsData.nchnls * 2;
+					destFormat.mBytesPerFrame = mCsData.nchnls * 2;
+					destFormat.mBitsPerChannel = 16;
+					destFormat.mFramesPerPacket = 1;
+					
+					// Create the audio file.
+					CFURLRef fileURL = (CFURLRef)self.outputURL;
+					err = ExtAudioFileCreateWithURL(fileURL, kAudioFileWAVEType, &destFormat, NULL, kAudioFileFlags_EraseFile, &(mCsData.file));
+					if (err == noErr) {
+						// Get the stream format from the AU...
+						UInt32 propSize = sizeof(AudioStreamBasicDescription);
+						AudioUnitGetProperty(csAUHAL, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &clientFormat, &propSize);
+						// ...and set it as the client format for the audio file. The file will use this
+						// format to perform any necessary conversions when asked to read or write.
+						ExtAudioFileSetProperty(mCsData.file, kExtAudioFileProperty_ClientDataFormat, sizeof(clientFormat), &clientFormat);
+						// Warm the file up.
+						ExtAudioFileWriteAsync(mCsData.file, 0, NULL);
+					} else {
+						printf("***Not recording. Error: %ld\n", err);
+						err = noErr;
+					}
+				}
+				
+                if(!err) {
+                    AURenderCallbackStruct output;
+                    output.inputProc = Csound_Render;
+                    output.inputProcRefCon = &mCsData;
+                    AudioUnitSetProperty(csAUHAL, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &output, sizeof(output));
+                    AudioUnitInitialize(csAUHAL);	
+                    
+                    err = AudioOutputUnitStart(csAUHAL);
+					
+					/* NOTIFY COMPLETION LISTENERS*/
+					
+					for (id<CsoundObjCompletionListener> listener in completionListeners) {
+						[listener csoundObjDidStart:self];
+					}
+                    
+                    if(!err) while (!mCsData.ret && mCsData.running);
+						
+                    ExtAudioFileDispose(mCsData.file);
+					mCsData.shouldRecord = false;
+                    AudioOutputUnitStop(csAUHAL);
+                    /* free(CAInputData); */
+                }
+                AudioUnitUninitialize(csAUHAL);
+                AudioComponentInstanceDispose(csAUHAL);
+            }
+		}
+		csoundDestroy(cs);
+	}	
+	
+    mCsData.running = false;
+    
+    /* CLEANUP VALUE CACHEABLE */
+    
+    for (int i = 0; i < valuesCache.count; i++) {
+        id<CsoundValueCacheable> cachedValue = [valuesCache objectAtIndex:i];
+        [cachedValue cleanup];
+    }
+    
+    /* NOTIFY COMPLETION LISTENERS*/
+    
+    for (id<CsoundObjCompletionListener> listener in completionListeners) {
+        [listener csoundObjComplete:self];	
+    }
+    
+    [mMotionManager stopAccelerometerUpdates];
+    [mMotionManager stopGyroUpdates];
+    [mMotionManager stopDeviceMotionUpdates];
+    
+	[pool release];
+}
+
+#pragma mark Memory Handling
+
+-(void)dealloc {
+    
+    [valuesCache release];
+    [completionListeners release];
+    [mMotionManager release];
+    
+    [super dealloc];
+}
+
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/midi/CsoundMIDI.h b/iOS/Csound iOS Examples/csound-iOS/classes/midi/CsoundMIDI.h
new file mode 100644
index 0000000..650bcfc
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/midi/CsoundMIDI.h	
@@ -0,0 +1,33 @@
+/* 
+ 
+ CsoundMIDI.h:
+ 
+ Copyright (C) 2011 Steven Yi, Victor Lazzarini
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+#import "csound.h"
+
+ at interface CsoundMIDI : NSObject
+
++(void)setMidiInCallbacks:(CSOUND*)csound;
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/midi/CsoundMIDI.m b/iOS/Csound iOS Examples/csound-iOS/classes/midi/CsoundMIDI.m
new file mode 100644
index 0000000..27cf830
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/midi/CsoundMIDI.m	
@@ -0,0 +1,198 @@
+/* 
+ 
+ CsoundMIDI.m:
+ 
+ Copyright (C) 2011 Steven Yi, Victor Lazzarini
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "CsoundMIDI.h"
+#include <stdio.h>
+#include <CoreMidi/CoreMidi.h>
+#include <time.h>
+#include <stdlib.h>
+
+void ReadProc(const MIDIPacketList *pktlist, void *refcon, void *srcConnRefCon);
+
+ at implementation CsoundMIDI
+
+/*=============================================*/
+/* start coremidi - csound code                */
+
+/* MIDI message queue size */
+#define DSIZE 1024
+
+
+/* MIDI data struct */
+typedef struct {
+    Byte status;
+    Byte data1;
+    Byte data2;
+    Byte flag;
+} MIDIdata;
+
+/* user data for MIDI callbacks */
+typedef struct _cdata {
+    MIDIdata *mdata;
+    int p, q, pnot, pchn;
+    MIDIClientRef mclient;
+} cdata;
+
+/* coremidi callback, called when MIDI data is available */
+void ReadProc(const MIDIPacketList *pktlist, void *refcon, void *srcConnRefCon){
+    cdata *data = (cdata *)refcon;  
+	MIDIdata *mdata = data->mdata; 
+	int *p = &data->p, i, j;
+	MIDIPacket *packet = &((MIDIPacketList *)pktlist)->packet[0];
+	Byte *curpack;
+	
+	for (i = 0; i < pktlist->numPackets; i++) {
+		//printf("len %d \n", packet->length);
+		for(j=0; j < packet->length; j+=3){
+			while(mdata[*p].flag);  /* in case data was not read, spin */
+			curpack = packet->data+j;
+			memcpy(&mdata[*p], curpack, 3);
+			mdata[*p].flag = 1;
+			(*p)++;
+			if(*p == DSIZE) *p = 0;
+		}
+		packet = MIDIPacketNext(packet);
+	} 
+
+}
+
+/* csound MIDI input open callback, sets the device for input */ 
+static int MidiInDeviceOpen(CSOUND *csound, void **userData, const char *dev)
+{
+    int k, endpoints;
+        
+    CFStringRef name = NULL, cname = NULL, pname = NULL;
+    CFStringEncoding defaultEncoding = CFStringGetSystemEncoding();
+    MIDIClientRef mclient = NULL;
+    MIDIPortRef mport = NULL;
+    MIDIEndpointRef endpoint;
+    MIDIdata *mdata = (MIDIdata *) malloc(DSIZE*sizeof(MIDIdata));
+    OSStatus ret;
+    cdata *refcon = (cdata *) malloc(sizeof(cdata));
+    memset(mdata, 0, sizeof(MIDIdata)*DSIZE);
+    refcon->mdata = mdata;
+    refcon->p = 0;
+    refcon->q = 0;
+	refcon->pnot = refcon->pchn = 0;
+	
+    /* MIDI client */
+    cname = CFStringCreateWithCString(NULL, "my client", defaultEncoding);
+    ret = MIDIClientCreate(cname, NULL, NULL, &mclient);
+    if(!ret){
+        /* MIDI output port */
+        pname = CFStringCreateWithCString(NULL, "outport", defaultEncoding);
+        ret = MIDIInputPortCreate(mclient, pname, ReadProc, refcon, &mport);
+        if(!ret){
+            /* sources, we connect to all available input sources */
+            endpoints = MIDIGetNumberOfSources();
+			csoundMessage(csound, "midi srcs %d\n", endpoints); 
+            for(k=0; k < endpoints; k++){
+                endpoint = MIDIGetSource(k);
+                void *srcRefCon = endpoint;
+                MIDIPortConnectSource(mport, endpoint, srcRefCon);
+                
+            }
+        }
+    }
+    refcon->mclient = mclient;
+    *userData = (void*) refcon;
+    if(name) CFRelease(name);
+    if(pname) CFRelease(pname);
+    if(cname) CFRelease(cname); 
+    /* report success */
+    return 0;
+}
+
+/* used to distinguish between 1 and 2-byte messages */
+static  const   int     datbyts[8] = { 2, 2, 2, 2, 1, 1, 2, 0 };
+
+/* csound MIDI read callback, called every k-cycle */
+static int MidiDataRead(CSOUND *csound, void *userData,
+                        unsigned char *mbuf, int nbytes)
+{
+    cdata * data = (cdata *)userData;
+    MIDIdata *mdata = data->mdata;
+    int *q = &data->q, st, d1, d2, n = 0;
+    
+    /* check if there is new data on circular queue */
+    while (mdata[*q].flag) {
+        st = (int) mdata[*q].status;
+        d1 = (int) mdata[*q].data1;
+        d2 = (int) mdata[*q].data2;
+        
+        if (st < 0x80)
+            goto next;
+        
+        if (st >= 0xF0 &&
+            !(st == 0xF8 || st == 0xFA || st == 0xFB ||
+              st == 0xFC || st == 0xFF))
+            goto next;
+        nbytes -= (datbyts[(st - 0x80) >> 4] + 1);
+        if (nbytes < 0) break;
+        
+        /* write to csound midi buffer */
+        n += (datbyts[(st - 0x80) >> 4] + 1);
+        switch (datbyts[(st - 0x80) >> 4]) {
+            case 0:
+                *mbuf++ = (unsigned char) st;
+                break;
+            case 1:
+                *mbuf++ = (unsigned char) st;
+                *mbuf++ = (unsigned char) d1;
+                break;
+            case 2:
+                *mbuf++ = (unsigned char) st;
+                *mbuf++ = (unsigned char) d1;
+                *mbuf++ = (unsigned char) d2;
+                break;
+        } 
+	next:
+        mdata[*q].flag = 0;
+        (*q)++;
+        if(*q==DSIZE) *q = 0;
+    }
+    
+    /* return the number of bytes read */
+    return n;
+}
+
+/* csound close device callback */
+static int MidiInDeviceClose(CSOUND *csound, void *userData)
+{
+    cdata * data = (cdata *)userData;
+    MIDIClientDispose(data->mclient);
+    free(data->mdata);
+    free(data);
+    return 0;
+}
+
+/* callback setting code */
++(void)setMidiInCallbacks:(CSOUND *)csound {
+    csoundSetExternalMidiInOpenCallback(csound, MidiInDeviceOpen);
+    csoundSetExternalMidiReadCallback(csound, MidiDataRead);
+    csoundSetExternalMidiInCloseCallback(csound, MidiInDeviceClose);
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/midi/MidiWidgetWrapper.h b/iOS/Csound iOS Examples/csound-iOS/classes/midi/MidiWidgetWrapper.h
new file mode 100644
index 0000000..8917e70
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/midi/MidiWidgetWrapper.h	
@@ -0,0 +1,32 @@
+/* 
+ 
+ MidiWidgetWrapper.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+
+ at protocol MidiWidgetWrapper <NSObject>
+
+-(void)setMIDIValue:(int)midiValue;
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/midi/MidiWidgetsManager.h b/iOS/Csound iOS Examples/csound-iOS/classes/midi/MidiWidgetsManager.h
new file mode 100644
index 0000000..57f1408
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/midi/MidiWidgetsManager.h	
@@ -0,0 +1,43 @@
+/* 
+ 
+ MidiWidgetsManager.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+#import "MidiWidgetWrapper.h"
+#import <CoreMIDI/CoreMIDI.h>
+
+ at interface MidiWidgetsManager : NSObject {
+    NSMutableArray* mWidgetWrappers;
+    MIDIClientRef mclient;
+}
+
+ at property (readonly) NSMutableArray* widgetWrappers;
+
+-(void)openMidiIn;
+-(void)closeMidiIn;
+
+-(void)addSlider:(UISlider*)slider forControllerNumber:(int)controllerNumber;
+-(void)addMidiWidgetWrapper:(id<MidiWidgetWrapper>)wrapper forControllerNumber:(int)controllerNumber;
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/midi/MidiWidgetsManager.m b/iOS/Csound iOS Examples/csound-iOS/classes/midi/MidiWidgetsManager.m
new file mode 100644
index 0000000..3c6a93a
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/midi/MidiWidgetsManager.m	
@@ -0,0 +1,140 @@
+/* 
+ 
+ MidiWidgetsManager.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "MidiWidgetsManager.h"
+#import "SliderMidiWidgetWrapper.h"
+
+void MidiWidgetsManagerReadProc(const MIDIPacketList *pktlist, void *refcon, void *srcConnRefCon);
+
+ at implementation MidiWidgetsManager
+
+ at synthesize widgetWrappers = mWidgetWrappers;
+
+-(id)init {
+    if(self = [super init]) {
+        mWidgetWrappers = [[NSMutableArray alloc] init];
+        
+        for (int i = 0; i < 128; i++) {
+            [mWidgetWrappers addObject:[NSNull null]];
+        }
+        
+    }
+    return self;
+}
+
+
+-(void)addSlider:(UISlider*)slider forControllerNumber:(int)controllerNumber {
+    SliderMidiWidgetWrapper* wrapper = [[SliderMidiWidgetWrapper alloc] init:slider];
+    [self addMidiWidgetWrapper:wrapper forControllerNumber:controllerNumber];
+}
+
+-(void)addMidiWidgetWrapper:(id<MidiWidgetWrapper>)wrapper 
+        forControllerNumber:(int)controllerNumber {
+
+     if (controllerNumber < 0 || controllerNumber > 127) {
+         NSLog(@"Error: Attempted to add a widget with controller number outside of range 0-127: %d", controllerNumber);
+         return;
+     }
+    
+    [mWidgetWrappers replaceObjectAtIndex:controllerNumber withObject:wrapper];
+}
+
+
+/* coremidi callback, called when MIDI data is available */
+void MidiWidgetsManagerReadProc(const MIDIPacketList *pktlist, void *refcon, void *srcConnRefCon){
+    MidiWidgetsManager* manager = (MidiWidgetsManager *)refcon;  
+	MIDIPacket *packet = &((MIDIPacketList *)pktlist)->packet[0];
+	Byte *curpack;
+    int i, j;
+	
+	for (i = 0; i < pktlist->numPackets; i++) {
+		for(j=0; j < packet->length; j+=3){
+			curpack = packet->data+j;
+
+			if ((*curpack++ | 0xB0) > 0) {
+                unsigned int controllerNumber = (unsigned int)(*curpack++);
+                unsigned int controllerValue = (unsigned int)(*curpack++);
+                
+                id wrapper = [manager.widgetWrappers objectAtIndex:controllerNumber];
+                
+                //NSLog(@"Controller Number: %d Value: %d", controllerNumber, controllerValue);
+                
+                if (wrapper != [NSNull null]) {
+                    [(id<MidiWidgetWrapper>)wrapper setMIDIValue:controllerValue];
+                }
+            }
+            
+		}
+		packet = MIDIPacketNext(packet);
+	} 
+    
+}
+
+#pragma mark CoreMidi Code
+
+-(void)openMidiIn {
+    int k, endpoints;
+    
+    CFStringRef name = NULL, cname = NULL, pname = NULL;
+    CFStringEncoding defaultEncoding = CFStringGetSystemEncoding();
+    MIDIPortRef mport = NULL;
+    MIDIEndpointRef endpoint;
+    OSStatus ret;
+	
+    /* MIDI client */
+    cname = CFStringCreateWithCString(NULL, "my client", defaultEncoding);
+    ret = MIDIClientCreate(cname, NULL, NULL, &mclient);
+    if(!ret){
+        /* MIDI output port */
+        pname = CFStringCreateWithCString(NULL, "outport", defaultEncoding);
+        ret = MIDIInputPortCreate(mclient, pname, MidiWidgetsManagerReadProc, self, &mport);
+        if(!ret){
+            /* sources, we connect to all available input sources */
+            endpoints = MIDIGetNumberOfSources();
+			//NSLog(@"midi srcs %d\n", endpoints); 
+            for(k=0; k < endpoints; k++){
+                endpoint = MIDIGetSource(k);
+                void *srcRefCon = endpoint;
+                MIDIPortConnectSource(mport, endpoint, srcRefCon);
+                
+            }
+        }
+    }
+    if(name) CFRelease(name);
+    if(pname) CFRelease(pname);
+    if(cname) CFRelease(cname); 
+
+}
+
+-(void)closeMidiIn {
+    MIDIClientDispose(mclient);
+}
+
+-(void)dealloc {
+    [mWidgetWrappers release];
+    [super dealloc];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/midi/SliderMidiWidgetWrapper.h b/iOS/Csound iOS Examples/csound-iOS/classes/midi/SliderMidiWidgetWrapper.h
new file mode 100644
index 0000000..fe97fb5
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/midi/SliderMidiWidgetWrapper.h	
@@ -0,0 +1,35 @@
+/* 
+ 
+ SliderMidiWidgetWrapper.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+#import "MidiWidgetWrapper.h"
+
+ at interface SliderMidiWidgetWrapper : NSObject <MidiWidgetWrapper> {
+    UISlider* mSlider;
+}
+
+-(id)init:(UISlider*)slider;
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/midi/SliderMidiWidgetWrapper.m b/iOS/Csound iOS Examples/csound-iOS/classes/midi/SliderMidiWidgetWrapper.m
new file mode 100644
index 0000000..be54775
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/midi/SliderMidiWidgetWrapper.m	
@@ -0,0 +1,55 @@
+/* 
+ 
+ SliderMidiWidgetWrapper.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ 
+ */
+#import "SliderMidiWidgetWrapper.h"
+
+ at implementation SliderMidiWidgetWrapper
+
+-(id)init:(UISlider *)slider {
+    if (self = [super init]) {
+        mSlider = [slider retain];
+    }
+    return self;
+}
+
+-(void)dealloc {
+    [mSlider release];
+}
+
+-(void)setValueSelector:(NSNumber*)value {
+    [mSlider setValue:[value floatValue] animated:YES];
+    [mSlider sendActionsForControlEvents:UIControlEventValueChanged];
+
+}
+
+-(void)setMIDIValue:(int)midiValue {
+    NSLog(@"SetMIDIValue: %d", midiValue);
+    float percent = midiValue / 127.0f;
+    float sliderRange = mSlider.maximumValue - mSlider.minimumValue;
+    float newValue = (percent * sliderRange) + mSlider.minimumValue;;
+    [self performSelectorOnMainThread:@selector(setValueSelector:) withObject:[NSNumber numberWithFloat:newValue] waitUntilDone:NO];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/BaseValueCacheable.h b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/BaseValueCacheable.h
new file mode 100644
index 0000000..5b1a4f3
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/BaseValueCacheable.h	
@@ -0,0 +1,36 @@
+/* 
+ 
+ BaseValueCacheable.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+#import "CsoundObj.h"
+#import "CsoundValueCacheable.h"
+
+ at interface BaseValueCacheable : NSObject<CsoundValueCacheable> {
+    BOOL mCacheDirty;
+}
+
+ at property (assign) BOOL cacheDirty;
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/BaseValueCacheable.m b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/BaseValueCacheable.m
new file mode 100644
index 0000000..7074ff5
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/BaseValueCacheable.m	
@@ -0,0 +1,51 @@
+/* 
+ 
+ BaseValueCacheable.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "BaseValueCacheable.h"
+
+ at implementation BaseValueCacheable
+
+ at synthesize cacheDirty = mCacheDirty;
+
+-(BOOL)isCacheDirty {
+    return NO;
+}
+
+-(void)updateValuesToCsound {
+}
+
+-(void)updateValuesFromCsound {
+    
+}
+
+-(void)cleanup {
+    
+}
+
+-(void)setup:(CsoundObj*)csoundObj {
+    
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAccelerometer.h b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAccelerometer.h
new file mode 100644
index 0000000..8e3ddea
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAccelerometer.h	
@@ -0,0 +1,40 @@
+/* 
+ 
+ CachedAccelerometer.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+#import "BaseValueCacheable.h"
+#import <CoreMotion/Coremotion.h>
+
+ at interface CachedAccelerometer : BaseValueCacheable<UIAccelerometerDelegate> {
+    float* channelPtrX;
+    float* channelPtrY;
+    float* channelPtrZ;
+        
+    CMMotionManager* manager;
+}
+
+-(id)init:(CMMotionManager*)manager;
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAccelerometer.m b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAccelerometer.m
new file mode 100644
index 0000000..b8f80d8
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAccelerometer.m	
@@ -0,0 +1,66 @@
+/* 
+ 
+ CachedAccelerometer.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "CachedAccelerometer.h"
+
+ at implementation CachedAccelerometer
+
+static NSString* CS_ACCEL_X = @"accelerometerX";
+static NSString* CS_ACCEL_Y = @"accelerometerY";
+static NSString* CS_ACCEL_Z = @"accelerometerZ";
+
+-(id)init:(CMMotionManager*)cmManager {
+    if (self = [super init]) {
+        manager = [cmManager retain];
+    }
+    return self;
+}
+
+-(void)setup:(CsoundObj*)csoundObj {
+    channelPtrX = [csoundObj getInputChannelPtr:CS_ACCEL_X];
+    channelPtrY = [csoundObj getInputChannelPtr:CS_ACCEL_Y];
+    channelPtrZ = [csoundObj getInputChannelPtr:CS_ACCEL_Z];    
+    
+    *channelPtrX = manager.accelerometerData.acceleration.x;
+    *channelPtrY = manager.accelerometerData.acceleration.y;
+    *channelPtrZ = manager.accelerometerData.acceleration.z;    
+    
+    self.cacheDirty = YES;
+}
+
+-(void)updateValuesToCsound {
+    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+    *channelPtrX = manager.accelerometerData.acceleration.x;
+    *channelPtrY = manager.accelerometerData.acceleration.y;
+    *channelPtrZ = manager.accelerometerData.acceleration.z;   
+    [pool release];
+}
+
+-(void)dealloc {
+    [manager release];
+    [super dealloc];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAttitude.h b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAttitude.h
new file mode 100644
index 0000000..c0552fa
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAttitude.h	
@@ -0,0 +1,40 @@
+/* 
+ 
+ CachedAttitude.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+#import <CoreMotion/CoreMotion.h>
+#import "BaseValueCacheable.h"
+
+ at interface CachedAttitude : BaseValueCacheable {
+    float* channelPtrRoll;
+    float* channelPtrPitch;
+    float* channelPtrYaw;
+    
+    CMMotionManager* mManager;
+}
+
+-(id)init:(CMMotionManager*)manager;
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAttitude.m b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAttitude.m
new file mode 100644
index 0000000..e85661d
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedAttitude.m	
@@ -0,0 +1,65 @@
+/* 
+ 
+ CachedAttitude.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "CachedAttitude.h"
+
+ at implementation CachedAttitude
+
+static NSString* CS_ATTITUDE_ROLL = @"attitudeRoll";
+static NSString* CS_ATTITUDE_PITCH = @"attitudePitch";
+static NSString* CS_ATTITUDE_YAW = @"attitudeYaw";
+
+-(id)init:(CMMotionManager*)manager {
+    if (self = [super init]) {
+        mManager = [manager retain];
+    }
+    return self;
+}
+
+-(void)setup:(CsoundObj*)csoundObj {
+    channelPtrRoll = [csoundObj getInputChannelPtr:CS_ATTITUDE_ROLL];
+    channelPtrPitch = [csoundObj getInputChannelPtr:CS_ATTITUDE_PITCH];
+    channelPtrYaw = [csoundObj getInputChannelPtr:CS_ATTITUDE_YAW];    
+    
+    *channelPtrRoll = mManager.deviceMotion.attitude.roll;
+    *channelPtrPitch = mManager.deviceMotion.attitude.pitch;
+    *channelPtrYaw = mManager.deviceMotion.attitude.yaw;    
+    
+}
+
+-(void)updateValuesToCsound {
+    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+    *channelPtrRoll = mManager.deviceMotion.attitude.roll;
+    *channelPtrPitch = mManager.deviceMotion.attitude.pitch;
+    *channelPtrYaw = mManager.deviceMotion.attitude.yaw;    
+    [pool release];
+}
+
+-(void)dealloc {
+    [mManager release];
+    [super dealloc];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedButton.h b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedButton.h
new file mode 100644
index 0000000..fe47b3b
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedButton.h	
@@ -0,0 +1,40 @@
+/* 
+ 
+ CachedButton.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+#import <Foundation/Foundation.h>
+#import "BaseValueCacheable.h"
+#import "CsoundObj.h"
+
+ at interface CachedButton : BaseValueCacheable {
+    float cachedValue;
+    float* channelPtr;
+    NSString* mChannelName;    
+    UIButton* mButton;
+}
+
+ at property (nonatomic, retain) NSString* channelName;
+
+-(CachedButton*)init:(UIButton*)button channelName:(NSString*)channelName;
+
+ at end
\ No newline at end of file
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedButton.m b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedButton.m
new file mode 100644
index 0000000..99b7d75
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedButton.m	
@@ -0,0 +1,74 @@
+/* 
+ 
+ CachedButton.m:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+#import "CachedButton.h"
+
+ at implementation CachedButton
+
+ at synthesize channelName = mChannelName;
+
+
+-(void)updateValueCache:(id)sender {
+    cachedValue = 1;
+    self.cacheDirty = YES;
+}
+
+-(id)init:(UIButton*)button channelName:(NSString*)channelName {
+    if (self = [super init]) {
+        self.channelName = channelName;
+        mButton = [button retain];
+    }
+    return self;
+}
+
+
+-(void)setup:(CsoundObj*)csoundObj {
+    cachedValue = mButton.isSelected ? 1 : 0;
+    self.cacheDirty = YES;
+    channelPtr = [csoundObj getInputChannelPtr:self.channelName];
+    [mButton addTarget:self action:@selector(updateValueCache:) forControlEvents:UIControlEventTouchDown];
+    [mButton sendActionsForControlEvents:UIControlEventTouchDown];
+
+}
+
+
+-(void)updateValuesToCsound {
+    if (self.cacheDirty) {
+        *channelPtr = cachedValue;
+        
+        self.cacheDirty = (cachedValue == 1);
+        cachedValue = 0;
+    }
+}
+
+-(void)cleanup {
+    [mButton removeTarget:self action:@selector(updateValueCache:) forControlEvents:UIControlEventTouchDown];
+}
+
+-(void)dealloc {
+    [mChannelName release];
+    [super dealloc];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedGyroscope.h b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedGyroscope.h
new file mode 100644
index 0000000..7cb1bee
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedGyroscope.h	
@@ -0,0 +1,40 @@
+/* 
+ 
+ CachedGyroscope.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+#import <CoreMotion/CoreMotion.h>
+#import "BaseValueCacheable.h"
+
+ at interface CachedGyroscope : BaseValueCacheable {
+    float* channelPtrX;
+    float* channelPtrY;
+    float* channelPtrZ;
+
+    CMMotionManager* mManager;
+}
+
+-(id)init:(CMMotionManager*)manager;
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedGyroscope.m b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedGyroscope.m
new file mode 100644
index 0000000..c434fa1
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedGyroscope.m	
@@ -0,0 +1,65 @@
+/* 
+ 
+ CachedGyroscope.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "CachedGyroscope.h"
+
+ at implementation CachedGyroscope
+
+static NSString* CS_GYRO_X = @"gyroX";
+static NSString* CS_GYRO_Y = @"gyroY";
+static NSString* CS_GYRO_Z = @"gyroZ";
+
+-(id)init:(CMMotionManager*)manager {
+    if (self = [super init]) {
+        mManager = [manager retain];
+    }
+    return self;
+}
+
+-(void)setup:(CsoundObj*)csoundObj {
+    channelPtrX = [csoundObj getInputChannelPtr:CS_GYRO_X];
+    channelPtrY = [csoundObj getInputChannelPtr:CS_GYRO_Y];
+    channelPtrZ = [csoundObj getInputChannelPtr:CS_GYRO_Z];    
+
+    *channelPtrX = mManager.gyroData.rotationRate.x;
+    *channelPtrY = mManager.gyroData.rotationRate.y;
+    *channelPtrZ = mManager.gyroData.rotationRate.z;    
+
+}
+
+-(void)updateValuesToCsound {
+    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
+    *channelPtrX = mManager.gyroData.rotationRate.x;
+    *channelPtrY = mManager.gyroData.rotationRate.y;
+    *channelPtrZ = mManager.gyroData.rotationRate.z;  
+    [pool release];
+}
+
+-(void)dealloc {
+    [mManager release];
+    [super dealloc];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSlider.h b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSlider.h
new file mode 100644
index 0000000..7e1ec90
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSlider.h	
@@ -0,0 +1,41 @@
+/* 
+ 
+ CachedSlider.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+#import "BaseValueCacheable.h"
+#import "CsoundObj.h"
+
+ at interface CachedSlider : BaseValueCacheable {
+    float cachedValue;
+    float* channelPtr;
+    NSString* mChannelName;
+    UISlider* mSlider;
+}
+
+ at property (nonatomic, retain) NSString* channelName;
+
+-(CachedSlider*)init:(UISlider*)slider channelName:(NSString*)channelName;
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSlider.m b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSlider.m
new file mode 100644
index 0000000..8c81dfa
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSlider.m	
@@ -0,0 +1,71 @@
+/* 
+ 
+ CachedSlider.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "CachedSlider.h"
+
+ at implementation CachedSlider
+
+ at synthesize channelName = mChannelName;
+
+-(void)updateValueCache:(id)sender {
+    cachedValue = ((UISlider*)sender).value;
+    self.cacheDirty = YES;
+}
+
+-(CachedSlider*)init:(UISlider*)slider channelName:(NSString*)channelName {
+    if (self = [super init]) {
+        mSlider = [slider retain];
+        self.channelName = channelName;
+    }
+    return self;
+}
+
+-(void)setup:(CsoundObj*)csoundObj {
+    channelPtr = [csoundObj getInputChannelPtr:self.channelName];
+    cachedValue = mSlider.value;
+    self.cacheDirty = YES;
+    [mSlider addTarget:self action:@selector(updateValueCache:) forControlEvents:UIControlEventValueChanged];
+    
+}
+
+
+-(void)updateValuesToCsound {
+    if (self.cacheDirty) {
+        *channelPtr = cachedValue;
+        self.cacheDirty = NO;
+    }
+}
+
+-(void)cleanup {
+    [mSlider removeTarget:self action:@selector(updateValueCache:) forControlEvents:UIControlEventValueChanged];
+}
+
+-(void)dealloc {
+    [mSlider release];
+    [mChannelName release];
+    [super dealloc];
+}
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSwitch.h b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSwitch.h
new file mode 100644
index 0000000..85d5db9
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSwitch.h	
@@ -0,0 +1,40 @@
+/* 
+ 
+ CachedSwitch.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+#import "BaseValueCacheable.h"
+
+ at interface CachedSwitch : BaseValueCacheable {
+    float cachedValue;
+    float* channelPtr;
+    NSString* mChannelName;   
+    UISwitch* mSwitch;
+}
+
+ at property (nonatomic, retain) NSString* channelName;
+
+-(CachedSwitch*)init:(UISwitch*)uiSwitch channelName:(NSString*)channelName;
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSwitch.m b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSwitch.m
new file mode 100644
index 0000000..6f3fdb5
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CachedSwitch.m	
@@ -0,0 +1,70 @@
+/* 
+ 
+ CachedSwitch.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import "CachedSwitch.h"
+
+ at implementation CachedSwitch
+
+ at synthesize channelName = mChannelName;
+
+-(void)updateValueCache:(id)sender {
+    cachedValue = ((UISwitch*)sender).on ? 1 : 0;
+    self.cacheDirty = YES;
+}
+
+-(CachedSwitch*)init:(UISwitch*)uiSwitch channelName:(NSString*)channelName {
+    if (self = [super init]) {
+        mSwitch = [uiSwitch retain];
+        self.channelName = channelName;
+    }
+    return self;
+}
+
+-(void)setup:(CsoundObj*)csoundObj {
+    cachedValue = mSwitch.on ? 1 : 0;
+    self.cacheDirty = YES;
+    channelPtr = [csoundObj getInputChannelPtr:self.channelName];
+    [mSwitch addTarget:self action:@selector(updateValueCache:) forControlEvents:UIControlEventValueChanged];
+}
+
+
+-(void)updateValuesToCsound {
+    if (self.cacheDirty) {
+        *channelPtr = cachedValue;
+        self.cacheDirty = NO;
+    }
+}
+
+-(void)cleanup {
+    [mSwitch removeTarget:self action:@selector(updateValueCache:) forControlEvents:UIControlEventValueChanged];
+}
+
+-(void)dealloc {
+    [mChannelName release];
+    [super dealloc];
+}
+
+
+ at end
diff --git a/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CsoundValueCacheable.h b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CsoundValueCacheable.h
new file mode 100644
index 0000000..e425c87
--- /dev/null
+++ b/iOS/Csound iOS Examples/csound-iOS/classes/valueCacheable/CsoundValueCacheable.h	
@@ -0,0 +1,36 @@
+/* 
+ 
+ CsoundValueCacheable.h:
+ 
+ Copyright (C) 2011 Steven Yi
+ 
+ This file is part of Csound for iOS.
+ 
+ The Csound for iOS Library is free software; you can redistribute it
+ and/or modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.   
+ 
+ Csound is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+ 
+ You should have received a copy of the GNU Lesser General Public
+ License along with Csound; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA
+ 
+ */
+
+#import <Foundation/Foundation.h>
+
+ at class CsoundObj;
+ at protocol CsoundValueCacheable <NSObject>
+
+-(void)setup:(CsoundObj*)csoundObj;
+-(void)updateValuesToCsound;
+-(void)updateValuesFromCsound;
+-(void)cleanup;
+
+ at end
diff --git a/iOS/README b/iOS/README
new file mode 100644
index 0000000..8c23a47
--- /dev/null
+++ b/iOS/README
@@ -0,0 +1,12 @@
+Csound for iOS
+
+Author: Steven Yi
+
+Build instructions:
+
+Requirements: 
+ 
+  * CMake
+  * XCode 4
+
+To build, simply run the build.sh script.  This script was created and tested with OSX 10.7. The build will use CMake to generate an XCode project, then run the build twice via the xcodebuild commandline program.  The two runs will compile libcsound.a for Device and Simulator, then combine the two into a single universal binary containing i386, armv6, and armv7 architectures.  
diff --git a/iOS/build.sh b/iOS/build.sh
new file mode 100755
index 0000000..ea79c45
--- /dev/null
+++ b/iOS/build.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+rm -rf cs5iOS
+mkdir cs5iOS
+cd cs5iOS
+cmake ../.. -G Xcode -DUSE_GETTEXT=0 -DUSE_DOUBLE=0 -DBUILD_STATIC_LIBRARY=1
+xcodebuild -sdk iphoneos -xcconfig ../device.xcconfig -target csound-static -configuration Release
+cp Release/libcsound.a ./libcsound-device.a
+xcodebuild -sdk iphonesimulator5.1 -xcconfig ../simulator.xcconfig -target csound-static -configuration Release 
+lipo -create libcsound-device.a Release/libcsound.a -output ../libcsound.a
+
diff --git a/iOS/device.xcconfig b/iOS/device.xcconfig
new file mode 100644
index 0000000..03f654d
--- /dev/null
+++ b/iOS/device.xcconfig
@@ -0,0 +1,5 @@
+ONLY_ACTIVE_ARCH=NO
+ARCHS = armv6 armv7
+VALID_ARCHS = armv6 armv7
+IPHONEOS_DEPLOYMENT_TARGET = 4.2
+GCC_VERSION = com.apple.compilers.llvm.clang.1_0
diff --git a/iOS/docs/.gitignore b/iOS/docs/.gitignore
new file mode 100644
index 0000000..090800a
--- /dev/null
+++ b/iOS/docs/.gitignore
@@ -0,0 +1,26 @@
+*.swp
+*.swo
+*.aux
+*.glo
+*.idx
+*.log
+*.toc
+*.ist
+*.acn
+*.acr
+*.alg
+*.bbl
+*.blg
+*.dvi
+*.glg
+*.gls
+*.ilg
+*.ind
+*.lof
+*.lot
+*.maf
+*.mtc
+*.mtc1
+*.out
+*.synctex.gz
+*.pdf
diff --git a/iOS/docs/build.sh b/iOS/docs/build.sh
new file mode 100755
index 0000000..9c5289c
--- /dev/null
+++ b/iOS/docs/build.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+pdflatex csound_ios_manual.tex
+open csound_ios_manual.pdf 
diff --git a/iOS/docs/csound_ios_manual.tex b/iOS/docs/csound_ios_manual.tex
new file mode 100644
index 0000000..f5415ff
--- /dev/null
+++ b/iOS/docs/csound_ios_manual.tex
@@ -0,0 +1,411 @@
+\documentclass[11pt]{article}
+
+\usepackage{hyperref}
+\usepackage{listings}
+\usepackage{color}
+\usepackage{xcolor}
+\usepackage{caption}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+
+
+%\DeclareCaptionFont{white}{\color{white}}
+%\DeclareCaptionFormat{listing}{\colorbox{gray}{\parbox{\textwidth}{#1#2#3}}}
+%\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}
+
+\DeclareCaptionFont{white}{\color{white}}
+\DeclareCaptionFormat{listing}{\colorbox[cmyk]{0.43, 0.35, 0.35,0.01}{\parbox{\textwidth}{\hspace{15pt}#1#2#3}}}
+\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}}
+
+\lstset{ %
+language=[Objective]C, 
+%breakindent=40pt,
+basicstyle=\ttfamily\footnotesize,       % the size of the fonts that are used for the code
+%numbers=left,                   % where to put the line-numbers
+numberstyle=\ttfamily\footnotesize,      % the size of the fonts that are used for the line-numbers
+%stepnumber=1,                   % the step between two line-numbers. If it is 1 each line will be numbered
+numbersep=5pt,                  % how far the line-numbers are from the code
+backgroundcolor=\color{white},  % choose the background color. You must add \usepackage{color}
+showspaces=false,               % show spaces adding particular underscores
+showstringspaces=false,         % underline spaces within strings
+showtabs=false,                 % show tabs within strings adding particular underscores
+%frame=single,           % adds a frame around the code
+%frame=shadowbox,
+%frame=tb,
+tabsize=2,          % sets default tabsize to 2 spaces
+%captionpos=b,           % sets the caption-position to bottom
+breaklines=true,        % sets automatic line breaking
+breakatwhitespace=false,    % sets if automatic breaks should only happen at whitespace
+escapeinside={\%*}{*)},          % if you want to add a comment within your code
+%stringstyle=\color{white}\ttfamily,
+ xleftmargin=17pt,
+         framexleftmargin=17pt,
+         framexrightmargin=5pt,
+         framexbottommargin=4pt
+}
+
+\author{Victor Lazzarini and Steven Yi }
+%\date{2011.11.xx}
+\date{\today}
+\title{Csound for iOS}
+
+\begin{document}
+\maketitle
+
+\section{Introduction}
+
+Welcome to Csound for iOS! This document will discuss the details about using Csound for iOS.  
+
+For those with knowledge of Csound, hopefully you will see that the value of your knowledge is only enhanced by offering a new platform on which to create musical software and works. 
+
+\subsection{Regarding the Csound for iOS Examples Project}
+
+This documentation covers discussion of the Csound for iOS API.  Users interested in diving in to see how the API is used may want to download the Csound for iOS Examples Project which contains a set of examples that cover different use cases of the API. The code for each example may be useful in getting you a jump-start into building your own application.
+
+\subsection{Regarding the LGPL License}
+
+The Csound for iOS includes Csound and \href{http://mega-nerd.com/libsndfile/}{libsndfile}. These are distributed as static libraries. Users of the Csound for iOS API must comply with the licensing requirements of the GNU Lesser General Public License v2.1, which both libraries use. Please carefully review the license files that accompany each project (you can view a generic version of the LGPL v2.1 license at \href{http://www.gnu.org/licenses/lgpl-2.1.html}{http://www.gnu.org/licenses/lgpl-2.1.html}). 
+
+%======
+
+\section{Getting and Using the Csound for iOS API}
+
+The Csound for iOS library is distributed as a Zip release from the Csound Sourceforge page. The Zip archive includes:
+
+\begin{itemize}
+\item Statically compiled libcsound.a and libsndfile.a, compiled as universal binaries for armv6, armv7, and i386 CPU architectures (to work with both iOS devices and simulators)
+\item C Headers for the Csound C API
+\item Objective-C CsoundObj API source
+\item Documentation
+\end{itemize} 
+
+Csound for iOS was chosen to be delivered as pre-compiled libraries and headers for easy inclusion into projects.  After starting a new project, do the following:
+
+\begin{enumerate}
+\item Right-click your project and from the context menu choose ``Add Files to [project name]''
+\item In the file dialog that opens, navigate to the folder containing the csound-iOS folder and select the csound-iOS folder. Keep the default settings of ``Create groups for any added folders''.  You will likely want to keep ``Copy items into destination group's folder (if needed)'' unselected so that your project will only have a reference to the csound-iOS folder on disk.
+\item Make sure that csound-iOS is added to all of your targets for your project.
+\end{enumerate}
+
+After selecting ``Add files'' the csound-iOS folders should now be a part of your project.  You will now be able to reference reference both the standard Csound C API as well as the Objective-C CsoundObj API from your project code.
+
+%======
+
+\section{Introduction to the API}
+\subsection{CsoundObj and Csound API's}
+
+Csound for iOS is released with the standard Csound C API as well as a custom Objective-C CsoundObj API that has been designed to make developing on iOS convenient.  The CsoundObj API includes methods for binding widgets to channels (used to communicate to and from Csound), mapping hardware MIDI to widgets, enabling hardware sensors, and more.  For further detail, please consult the CsoundObj.h and CsoundObj.m files.
+
+While the CsoundObj API has been designed to ease things for iOS development and to follow conventions of Objective-C, the decision was made to not wrap everything in the Csound C API.  As C coding is commonly found to be used within iOS development, we felt it was better to try to cover the important things that are normally done in Objective-C in CsoundObj, while delegating the user to the C API for parts of Csound that may not be used as often.  The CSOUND* struct pointer that a CsoundObj class holds can be accessed via the \textbf{getCsound} method in CsoundObj.  For more information about the Csound C API, consult the csound.h header file within csound-iOS/headers.
+
+\section{Using the CsoundObj API}
+
+The CsoundObj API revolves around the Objective-C CsoundObj class. This class contains a CSOUND* struct pointer and has methods for running Csound, as well as convenience methods to help aid developers in connecting elements to Csound. By itself, CsoundObj can take in a CSD file and render it.  By using CsoundValueCacheables, objects can interact to read values from and write values to Csound.  Beyond that, extended features can be accessed by using the Csound C API together with the CSOUND* struct.
+
+\subsection{Designing Csound CSD projects to work with Hosts}
+
+To communicate to and from a host program with Csound, you will most likely use \textbf{chnset} and \textbf{chnget} opcodes. These opcodes will allow you to read from and write values to a named channel.  Your host program will also be writing to and reading from these same channels.  As a byproduct of using named channels, your CSD will be portable to work on other platforms (Desktop, Android); porting over apps to/from iOS then will only involve redoing the application and UI code, while your audio engine (Csound) should ``just work.'' 
+
+ 
+
+\subsection{CsoundValueCacheable for Communicating with Csound}
+
+The CsoundObj API has been created to ease communication with Csound by using objects that implement the CsoundValueCacheable protocol.  The protocol definition is as follows:
+
+\begin{lstlisting}[caption=CsoundValueCacheable Protocol Definition]
+ at protocol CsoundValueCacheable
+
+-(void)setup:(CsoundObj*)csoundObj;
+-(void)updateValuesToCsound;
+-(void)updateValuesFromCsound;
+-(void)cleanup;
+
+ at end
+\end{lstlisting}
+
+CsoundValueCacheables are used to both read values from Csound as well as write values to Csound.  The lifecycle of CsoundValueCacheables is as follows:
+
+\begin{itemize}
+\item \textbf{setup} - this method is called after Csound's compile call but before the main performance loop. CsoundValueCacheables should use this method to cache any channel pointers and any other values they will need during performance.
+\item \textbf{updateValuesToCsound} and \textbf{updateValuesFromCsound} - these methods are called during the Csound performance loop. \textbf{updateValuesToCsound} is called before each call to csoundPerformKsmps, while \textbf{updateValuesFromCsound} is called after each call. 
+\item \textbf{cleanup} - this method is called after Csound has completed its run and should be used by CsoundValueCacheables to free up any allocated data and remove references to channel pointers.
+\end{itemize}
+
+By using CsoundValueCacheables, CsoundObj functionality can be extended to communicate with as many items as you would like. The Csound for iOS API contains pre-made wrapper classes for common UI classes (UISlider, UIButton, UISwitch) as well as hardware sensors (Accelerometer, Attitude, Gyroscope).  CsoundObj has helper methods for the CsoundValueCacheables that come with the CsoundObj API, as well as the generic \textbf{addCsoundValueCacheable} and \textbf{removeCsoundValueCacheable} methods for adding custom CsoundValueCacheables. Please consult these classes as well as their use in context within the Csound for iOS Examples project.
+
+
+%======
+
+\section{Common CsoundObj API Methods}
+
+\subsection{Binding Widgets to CsoundObj}
+
+The CsoundObj API contains the following methods for binding widgets:
+
+\begin{lstlisting}[caption=Methods for Widget Binding]
+-(id<CsoundValueCacheable>)addSwitch:(UISwitch*)uiSwitch forChannelName:(NSString*)channelName;
+-(id<CsoundValueCacheable>)addSlider:(UISlider*)uiSlider forChannelName:(NSString*)channelName;
+-(id<CsoundValueCacheable>)addButton:(UIButton*)uiButton forChannelName:(NSString*)channelName; 
+\end{lstlisting}
+
+These methods allow for easy binding of UISwitches, UISliders, and UIButtons, and return the CsoundValueCacheable that was created to wrap the widget. If the design of your app requires that you remove a widget from being used with CsoundObj, you can use the returned CsoundValueCacheable and pass it to the removeCsoundValueCacheable method. To bind your own custom widgets, you will need to create your own CsoundValueCacheable.  There are examples of both using the convenience widget binding methods as well as custom CsoundValueCacheables in the Csound for iOS Examples project.
+
+%======
+
+\section{Interfacing with Hardware}
+\subsection{Audio Input and Output}
+
+CsoundObj has been designed to connect everything necessary for audio input and output from Csound to CoreAudio.  Enabling input and output depends on what commandline arguments are given when running Csound.  The commandline arguments should be supplied as part of the CSD's \textbf{CsOptions} section.  To enable audio output, use \textbf{-o dac} and to enable audio input, use \textbf{-i adc}. 
+
+\subsection{MIDI Hardware Input}
+
+MIDI input is supported in two ways: directly to Csound, or indirectly via Widgets. 
+
+\subsubsection{Direct MIDI input to Csound}
+
+CsoundObj has a property called \textbf{midiInEnabled}.  By default this value is set to NO; setting it to YES will enable MIDI input from CoreMIDI directly into Csound. This will allow using Csound's MIDI handling and opcodes to respond to note and controller data from hardware MIDI devices connected to your device (currently limited to iPad devices).  The Csound for iOS Examples project contains an example called \emph{MIDI Test} which demonstrates a project that is setup to handle MIDI coming from a hardware keyboard.
+
+Note, this flag is read when CsoundObj begins a Csound run.  Setting this to YES while CsoundObj is currently rendering will have no effect. 
+
+\subsubsection{Using MidiWidgetsManager to Control Widgets}
+
+For MIDI controller data, rather than handle it directly in Csound, you can use the MidiWidgetsManager to map data from channels to UI Widgets.  The MidiWidgetsManager uses \textbf{MidiWidgetWrappers} to handle mapping of controller data and setting values on widgets.  Currently, the MidiWidgetsManager only has one built-in MidiWidgetWrapper for UISlider. To map values to custom widgets, you will need to create your own implementations of MidiWidgetWrappers. 
+
+This alternative to direct MIDI input to Csound allows for MIDI mapping without a CsoundObj instance actively rendering. In terms of architecture, MIDI values will map to Widgets, and the values within the Widgets are what will be connected with Csound.  By using this design, the values in the widget will be the primary source of values across the system and no synchronization of values is required, whether modified by MIDI or touch input. 
+
+\subsection{Accelerometer, Gyroscope, Attitude}
+
+CsoundObj has built-in support for three of the more commonly used hardware sensors on iOS devices: Accelerometer, Gyroscope, and Attitude. CsoundObj has the following methods to enable these features:
+
+
+\begin{lstlisting}[caption=CsoundObj Hardware Sensor Methods]
+-(id<CsoundValueCacheable>)enableAccelerometer;
+-(id<CsoundValueCacheable>)enableGyroscope;
+-(id<CsoundValueCacheable>)enableAttitude; 
+\end{lstlisting}
+
+When these features are enabled, CsoundValueCacheables that wrap the sensors will send values into Csound via hardcoded channels:
+
+\begin{itemize}
+
+\item Acclerometer
+\begin{itemize}
+\item accelerometerX
+\item accelerometerY
+\item accelerometerZ
+\end{itemize}
+
+\item Gyroscope 
+\begin{itemize}
+\item gyroX
+\item gyroY
+\item gyroZ
+\end{itemize}
+
+\item Attitude 
+\begin{itemize}
+\item attitudeRoll
+\item attitudePitch
+\item attitudeYaw
+\end{itemize}
+
+\end{itemize} 
+
+Once a sensor has been enabled, you can access those values in Csound using \textbf{chnget}. For further study, please see the \emph{Hardware Test} example in the Examples project. 
+
+%======
+
+\section{Csound for iOS Examples}
+
+The Examples project contains a number of simple examples that illustrate different aspects of working with Csound for iOS.  The following is a brief description of each of the examples.
+
+\subsection{Simple Test 1}
+
+Simple example that plays ascending notes.  The pitch of the notes can be altered by using the slider.  Also, a UISwitch is used to turn on/off the rendering of Csound.  In the code, you'll find that the callback that is connected to the UISwitch shows the basic usage of CsoundObj to render a CSD that is included as a resource for the project:
+
+\begin{lstlisting}[caption=Example code showing configuring and starting a CsoundObj]
+-(IBAction) toggleOnOff:(id)component {
+    UISwitch* uiswitch = (UISwitch*)component;
+    NSLog(@"Status: %d", [uiswitch isOn]);
+    
+    if(uiswitch.on) {
+      
+        NSString *tempFile = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"csd"];  
+        NSLog(@"FILE PATH: %@", tempFile);
+        
+        [self.csound stopCsound];
+        
+        self.csound = [[CsoundObj alloc] init];
+    [self.csound addCompletionListener:self];
+        [self.csound addSlider:mSlider forChannelName:@"slider"];
+        [self.csound startCsound:tempFile];
+        
+    } else {
+        [self.csound stopCsound];
+    }
+}
+\end{lstlisting}
+
+\subsection{Simple Test 2}
+
+This is a generative music example that contains a number of sliders that affect the rate of notes generated, the duration of notes, and the ADSR envelope for each note. 
+
+
+\subsection{Button Test}
+
+This example uses a CSD based on the one used for Simple Test 2, but depends on the user to trigger a button to generate each note.  The two buttons in this example show two different ways in which to integrate buttons with CsoundObj:
+
+\begin{enumerate}
+\item Using CsoundObj's \textbf{addButton} method, which will setup a k-rate channel for Csound.  The value will be 0 when the button is not pressed, and will be 1 for one ksmps period when a button is pressed (it returns to 0 the following ksmps period). 
+\item Using a standard button callback, the callback will create a string score and send that to Csound using CsoundObj's \textbf{sendScore} method. (See code below.)
+\end{enumerate}
+
+
+\begin{lstlisting}[caption=Example code showing sending score text to CsoundObj]
+-(IBAction) eventButtonHit:(id)sender {
+    NSString* score = [NSString stringWithFormat:@"i2 0 %f", [mDurationSlider value]];
+
+    [mCsound sendScore:score];
+}
+\end{lstlisting}
+
+Note that the second method will read the value from the duration slider when creating the note, while the first method handles reading the duration from the channel within the CSD code. 
+
+\subsection{MIDI Test}
+
+This example shows a number of different techniques:
+
+\begin{enumerate}
+\item In the \textbf{viewDidLoad}, a \textbf{MidiWidgetsManager} is created and used to map MIDI controller values to sliders.
+\item MIDI keyboard and controller input is also routed to Csound using CsoundObj's \textbf{setMidiInEnabled} method. This allows using standard Csound MIDI programming within the context of a Csound for iOS project. (This has been tested on iPad 1 and 2, using a Korg NanoKey connected via Apple USB Camera Connection kit, as well as with MIDI keyboards hooked up to an Alesis I/O Dock.) 
+\item A custom multi-touch virtual keyboard widget demonstrates how to track the different touches, map them to keyboard keys, and use \textbf{sendScore} to turn on and off notes. 
+\end{enumerate}
+
+For those interested in making virtual instruments, this example may be useful to use as a starting point for your own projects.
+
+\subsection{Ping Pong Delay}
+
+This example shows processing audio input in realtime, using a Ping Pong Delay. The use of audio input is controlled by the standard Csound flag \textbf{-i adc} that is found in the CSD's \textbf{CsOptions} section.  
+
+
+\subsection{Harmonizer}
+
+This example highlights the same techniques as the Ping Pong Delay, but shows using Csound's streaming Phase Vocoder to create a harmonizer effect. 
+
+\subsection{Hardware Test}
+
+This example shows using hardware sensors.  For this example, the accelerometer is enabled and values are read by the CSD to affect the pitch of a vco2 oscillator, as well as cutoff and resonance of a moogladder filter. 
+
+\subsection{Csound Haiku 4}
+
+\emph{Csound Haiku} is a generative art music work by Iain McCurdy.  Number 4 from this set of pieces was chosen to exercise what is capable on this platform.
+
+\subsection{Record Test}
+
+This example demonstrates the recording feature of CsoundObj.  It also includes a custom metering widget that implements \textbf{CsoundValueCacheable} to read values from Csound.  Note that the \textbf{updateValuesFromCsound} reads the minimum necessary values from Csound and then continues further calculations off the audio callback thread where \textbf{updateValuesFromCsound} is called.  It is important to minimize the amount of processing done in the audio callback thread and to push all processing to another thread.  This can be done using the standard \textbf{performSelector} method; upon completing calculations, updates to the UI will need to be done on the main thread, which is done here using \textbf{performSelectorOnMainThread}.  This pattern is common in audio processing applications. 
+
+\subsection{Multitouch XY}
+
+This example demonstrates a multitouch performance surface. The multi-touch code maps each touch down and up to a note on and off.  It also sends continous x and y values to Csound.  The Csound programming in the CSD shows a technique for doing individual per-note control data mapping by dynamically assigning what channels of data each note should read from. 
+
+\subsection{Waveview}
+
+This example demonstrates using a CsoundValueCacheable to read an f-table from Csound and displaying that table.  Note that the WaveView's code is doing some optimization to check if it has already loaded.  It is also checking that the table itself has completed loading before trying to grab any values for the table. 
+
+\begin{lstlisting}[caption=Waveview code demonstrating reading f-tables from Csound]
+- (void)updateValuesFromCsound
+{
+    if (!tableLoaded) {
+        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
+        CSOUND *cs = [csObj getCsound];
+        sr = csoundGetSr(cs);
+        ksmps = csoundGetKsmps(cs);
+        
+        if ((tableLength = csoundTableLength(cs, 1)) > 0) {
+
+            table = malloc(tableLength * sizeof(MYFLT));
+            csoundGetTable(cs, &table, 1);
+            tableLoaded = YES;
+            [self performSelectorInBackground:@selector(updataDisplayData) withObject:nil];
+        }
+
+        [pool release];
+    }
+
+}
+\end{lstlisting}
+
+This example also follows the same pattern as the previous example where it off-loads calculations in a background thread using \textbf{performSelectorInBackground}, then posts to the main thread to update the user interface.
+
+\subsection{Audio File Test}
+
+This examples demonstrates a technique of finding the URL of an AIFF file that is packaged as a resource with the project and playing that audio file with Csound.  The example sets up an instance of CsoundObj in its \textbf{viewDidLoad} method, as well as binds a custom UIKnob widget for controlling the playback pitch of the audio file:
+
+\begin{lstlisting}[caption=CsoundObj setup code]
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    self.csound = [[CsoundObj alloc] init];
+    [self.csound addCompletionListener:self];
+    NSString *csdPath = [[NSBundle mainBundle] pathForResource:@"audiofiletest" ofType:@"csd"];
+    [mPitchKnob setMinimumValue:0.5f];
+    [mPitchKnob setMaximumValue:2.0f];
+    [mPitchKnob setValue:1.0f];
+    [self.csound addValueCacheable:mPitchKnob];
+    [self.csound startCsound:csdPath];
+}
+\end{lstlisting}
+
+The UIKnob widget is custom UIView that is also a CsoundValueCacheable.  It uses a hardcoded Csound channel called "pitch".  After the CsoundObj object is setup and started, performance of the audio file is done in the callback to the Play button press:
+
+\begin{lstlisting}[caption=Play button callback code]
+- (IBAction)play:(UIButton *)sender
+{
+    NSString *audioFilePath = [[NSBundle mainBundle] pathForResource:@"audiofiletest" ofType:@"aif"];
+    NSString *score = [NSString stringWithFormat:@"i1 0 1 \"%@\"", audioFilePath];
+    [self.csound sendScore:score];
+}
+\end{lstlisting}
+
+This code finds the path for the \emph{audiofiletest.aif} file that is included with the project, and uses that value to construct a score statement to send to Csound. 
+
+\subsection{Console Output}
+
+This example shows how to use an Objective-C selector as a message callback for Csound through the CsoundObj.  In the example's \textbf{run} method, the call to CsoundObj's \textbf{setMessageCallback} with both the selector to call and the target object is used to route Csound's messages to the example's UITextView:
+
+\begin{lstlisting}[caption=Example of setting message callback]
+    [self.csound setMessageCallback:@selector(messageCallback:) withListener:self];
+\end{lstlisting}
+
+The message callback selector handles formatting the Csound message using typical C code one will find when using message callbacks with Csound:
+
+\begin{lstlisting}[caption=Message Callback Selector Code]
+- (void)messageCallback:(NSValue *)infoObj
+{
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    Message info;
+    [infoObj getValue:&info];
+    char message[1024];
+    vsnprintf(message, 1024, info.format, info.valist);
+    NSString *messageStr = [NSString stringWithFormat:@"%s", message];
+    [self performSelectorOnMainThread:@selector(updateUIWithNewMessage:)
+                           withObject:messageStr
+                        waitUntilDone:NO];
+    [pool drain];
+}
+\end{lstlisting}
+
+Note: after the message is formatted and converted into an Objective-C NSString from a C char*, a \textbf{performSelectorOnMainThread} is used to update the UI with the message text.  The callback from Csound will not be on the main thread. This step is therefore required as all modifications to the user interface must be done on the main thread. 
+
+\subsection{Pitch Shifter}
+
+This example uses the PVS opcodes to perform pitch shifting on a signal coming in from the microphone on the device.  It uses a custom UIControlXY widget that allows controlling the mix of the wet and dry signal along the x-axis and the amount of pitch shifting along the y-axis.  
+
+%======
+
+\section{Conclusion}
+
+We hope that this document has helped you to become familiar with the design and usage of the Csound for iOS API. The example Objective-C and Csound CSD code should hopefully give you a good starting point for your own musical projects, and we encourage you to take these examples and run with it.  We look forward to hearing your questions and feedback on this API, and most of all, look forward to seeing what you will create with all of this.  Best of luck and enjoy! 
+
+\end{document}
diff --git a/iOS/release.sh b/iOS/release.sh
new file mode 100755
index 0000000..b6795ab
--- /dev/null
+++ b/iOS/release.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+export RELEASE_DIR=csound-iOS-5.17.3
+export LIBSNDFILE_LIB=`pwd`/../../iOS/csound-iOS-dependencies/libsndfile.a 
+
+rm -rf $RELEASE_DIR
+mkdir $RELEASE_DIR
+
+# Build Documentation
+cd docs
+pdflatex csound_ios_manual.tex
+
+# Assemble release
+cd ../$RELEASE_DIR
+cp ../docs/csound_ios_manual.pdf .
+
+# COPYING HEADERS
+
+cp -R ../Csound\ iOS\ Examples .
+cp Csound\ iOS\ Examples/LICENSE.TXT .
+
diff --git a/iOS/simulator.xcconfig b/iOS/simulator.xcconfig
new file mode 100644
index 0000000..1d176d3
--- /dev/null
+++ b/iOS/simulator.xcconfig
@@ -0,0 +1,5 @@
+ONLY_ACTIVE_ARCH=NO
+ARCHS = i386 
+VALID_ARCHS = i386
+IPHONEOS_DEPLOYMENT_TARGET = 4.2
+GCC_VERSION = com.apple.compilers.llvm.clang.1_0
diff --git a/iOS/updateExamplesLibAndHeaders.sh b/iOS/updateExamplesLibAndHeaders.sh
new file mode 100755
index 0000000..85f78e8
--- /dev/null
+++ b/iOS/updateExamplesLibAndHeaders.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+export OUT_DIR=`pwd`/Csound\ iOS\ Examples/csound-iOS
+export LIBSNDFILE_LIB=`pwd`/../../iOS/csound-iOS-dependencies/libsndfile.a 
+
+# Assemble release
+cp libcsound.a "$OUT_DIR/libs"
+cp $LIBSNDFILE_LIB "$OUT_DIR/libs"
+cd ..
+
+# COPYING HEADERS
+
+export HEADER_DIR="$OUT_DIR/headers"
+cp H/cfgvar.h "$HEADER_DIR"
+cp H/cscore.h "$HEADER_DIR"
+cp H/csdl.h "$HEADER_DIR"
+cp H/csound.h "$HEADER_DIR"
+cp H/csound.hpp "$HEADER_DIR"
+cp H/csoundCore.h "$HEADER_DIR"
+cp H/cwindow.h "$HEADER_DIR"
+cp H/msg_attr.h "$HEADER_DIR"
+cp H/OpcodeBase.hpp "$HEADER_DIR"
+cp H/pstream.h "$HEADER_DIR"
+cp H/pvfileio.h "$HEADER_DIR"
+cp H/soundio.h "$HEADER_DIR"
+cp H/sysdep.h "$HEADER_DIR"
+cp H/text.h "$HEADER_DIR"
+cp H/version.h "$HEADER_DIR"
+cp H/float-version.h "$HEADER_DIR"
+cp interfaces/CsoundFile.hpp "$HEADER_DIR"
+cp interfaces/CppSound.hpp "$HEADER_DIR"
+cp interfaces/filebuilding.h "$HEADER_DIR" 
diff --git a/installer/macosx/release-build-10.7.sh b/installer/macosx/release-build-10.7.sh
index 195d33c..b7a4167 100755
--- a/installer/macosx/release-build-10.7.sh
+++ b/installer/macosx/release-build-10.7.sh
@@ -1,9 +1,9 @@
 #!/bin/sh
 
 export MANUAL_DIR=`pwd`/../../../manual
-export PACKAGE_NAME=csound5.16.1-OSX10.7-universal.pkg
-export DMG_DIR="Csound 5.16.1"
-export DMG_NAME="csound5.16.1-OSX10.7-universal.dmg"
+export PACKAGE_NAME=csound5.17.3-OSX10.7-universal.pkg
+export DMG_DIR="Csound 5.17.3"
+export DMG_NAME="csound5.17.3-OSX10.7-universal.dmg"
 # If arg2 passed in, will cd into that dir and rebuild, otherwise
 # will clone from repo and do a fresh build
 
@@ -185,6 +185,7 @@ cp makecsd   $APPS32_DIR
 cp pvlook   $APPS32_DIR       
 cp srconv $APPS32_DIR
 cp atsa  $APPS32_DIR
+cp csbeats  $APPS32_DIR
 
 cd ../csound5
 
diff --git a/installer/windows/csoundd.nsi b/installer/windows/csoundd.nsi
index 07e24c5..0f60f85 100644
--- a/installer/windows/csoundd.nsi
+++ b/installer/windows/csoundd.nsi
@@ -18,7 +18,7 @@
 #######################################################################
 
 !define PRODUCT "Csound"
-!define PROGRAM "Csound5.16"
+!define PROGRAM "Csound5.17"
 !echo "Building installer for: ${PROGRAM}"
 !ifdef FLOAT
 !ifdef NONFREE
@@ -350,9 +350,15 @@ Function un.RemoveFromPath
             WriteRegExpandStr ${NT_all_env} "PATH" $3
             Goto un_write_path_NT_resume
          un_write_path_NT_current:
-            WriteRegExpandStr ${NT_current_env} "PATH" $3
-         un_write_path_NT_resume:
-         SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+			StrLen $0 $3
+			IntCmp $0 0 unDeletePath
+               WriteRegExpandStr ${NT_current_env} "PATH" $3
+			   Goto un_write_path_NT_resume
+ 			unDeletePath:
+			   DeleteRegValue ${NT_current_env} "PATH"
+        un_write_path_NT_resume:
+           SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+
    unRemoveFromPath_done:
    Pop $4
    Pop $3
@@ -360,6 +366,48 @@ Function un.RemoveFromPath
    Pop $1
    Pop $0
 FunctionEnd
+
+;====================================================
+; RemoveFromPythonPath - Remove a given dir from the python path
+;     Input: head of the stack
+;====================================================
+Function un.RemoveFromPythonPath
+   Exch $0
+   Push $1
+   Push $2
+   Push $3
+   
+   StrLen $2 $0
+   ReadEnvStr $1 "PYTHONPATH"
+   Push $1
+   Push $0	  
+   Call un.StrStr ; Find $0 in $1
+   Pop $0 ; pos of our dir
+   IntCmp $0 -1 unRemoveFromPythonPath_done
+      ; else, it is in python path		 
+      StrCpy $3 $1 $0 ; $3 now has the part of the python path before our dir
+      IntOp $2 $2 + $0 ; $2 now contains the pos after our dir in the python path (';')
+      IntOp $2 $2 + 1 ; $2 now containts the pos after our dir and the semicolon.
+      StrLen $0 $1
+      StrCpy $1 $1 $0 $2
+      StrCpy $3 "$3$1"
+ 
+	  StrLen $0 $3
+	  IntCmp $0 0 unDeletePythonPath
+	     WriteRegExpandStr ${WriteEnvStr_RegKey} "PYTHONPATH" $3
+		 Goto un_write_pythonpath_NT_resume
+	  unDeletePythonPath:
+	     DeleteRegValue ${WriteEnvStr_RegKey} "PYTHONPATH"
+      un_write_pythonpath_NT_resume:
+	     SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+
+   unRemoveFromPythonPath_done:
+   Pop $3
+   Pop $2
+   Pop $1
+   Pop $0
+FunctionEnd
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ; Uninstall sutff
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -528,6 +576,8 @@ skipAssoc:
       # Csound itself.
       File ..\..\csound.exe
       File ..\..\cs.exe
+      File ..\..\csbeats.exe
+      File ..\..\csb64enc.exe
 !ifdef FLOAT
       File ..\..\csound32.dll.5.2
 !else
@@ -692,9 +742,9 @@ SectionGroup "Front ends"
       File C:\utah\opt\Qt\Desktop\Qt\4.8.0\mingw\bin\QtGui4.dll
       File C:\utah\opt\Qt\Desktop\Qt\4.8.0\mingw\bin\QtXml4.dll
 !ifdef FLOAT
-      File C:\utah\opt\qcs-build-desktop\bin\CsoundQt-f.exe
+      File C:\utah\opt\qutecsound\bin\CsoundQt-f.exe
 !else
-      File C:\utah\opt\qcs-build-desktop\bin\CsoundQt-d.exe
+      File C:\utah\opt\qutecsound\bin\CsoundQt-d.exe
 !endif
   SectionEnd
 !ifdef NONFREE
@@ -857,9 +907,9 @@ SectionGroup "Csound interfaces"
           File C:\utah\opt\PythonQt-build-desktop\lib\PythonQt_QtAll.dll
           File C:\utah\opt\PythonQt-build-desktop\lib\PythonQt.dll
     !ifdef FLOAT
-          File C:\utah\opt\qcs-build-desktop\bin\CsoundQt-f-py.exe
+          File C:\utah\opt\qutecsound\bin\CsoundQt-f-py.exe
     !else
-          File C:\utah\opt\qcs-build-desktop\bin\CsoundQt-d-py.exe
+          File C:\utah\opt\qutecsound\bin\CsoundQt-d-py.exe
     !endif
       SectionEnd
   SectionGroupEnd 
@@ -911,16 +961,16 @@ startMenuDeleteLoop:
     	IfErrors startMenuDeleteLoopDone
     	StrCmp $MUI_TEMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop
 startMenuDeleteLoopDone:
-	Push $INSTDIR
+	Push $INSTDIR\bin
   	Call un.RemoveFromPath
   	Push "CSOUNDRC"
   	Call un.DeleteEnvStr 
 	Push ${OPCODEDIR_ENV}
   	Call un.DeleteEnvStr 
-!ifdef NONFREE
-        Push "RAWWAVE_PATH"
-       	Call un.DeleteEnvStr 
-!endif
+    Push "RAWWAVE_PATH"
+    Call un.DeleteEnvStr 
+	Push ";$INSTDIR\bin"
+	Call un.RemoveFromPythonPath
 	Push "SFOUTYP"
   	Call un.DeleteEnvStr
   	DeleteRegKey /ifempty HKCU "Software\${PRODUCT}"
diff --git a/interfaces/csPerfThread.cpp b/interfaces/csPerfThread.cpp
index 9ec87f5..ae1611a 100644
--- a/interfaces/csPerfThread.cpp
+++ b/interfaces/csPerfThread.cpp
@@ -525,12 +525,12 @@ int CsoundPerformanceThread::Join()
 {
     int retval;
     retval = status;
- 
+
     if (perfThread) {
       retval = csoundJoinThread(perfThread);
       perfThread = (void*) 0;
     }
-    
+
     // delete any pending messages
     {
       CsoundPerformanceThreadMessage *msg;
@@ -574,4 +574,3 @@ void CsoundPerformanceThread::FlushMessageQueue()
       csoundNotifyThreadLock(flushLock);
     }
 }
-
diff --git a/interfaces/csPerfThread.hpp b/interfaces/csPerfThread.hpp
index 9ae9509..e752ed2 100644
--- a/interfaces/csPerfThread.hpp
+++ b/interfaces/csPerfThread.hpp
@@ -67,7 +67,7 @@ int main(int argc, char *argv[])
    printf("csoundCompile returned an error\n");
    return 1;
  }
- 
+
  return 0;
 }
 
@@ -188,4 +188,3 @@ class PUBLIC CsoundPerformanceThread {
 };
 
 #endif  // CSOUND_CSPERFTHREAD_HPP
-
diff --git a/pluginSDK/SConstruct b/pluginSDK/SConstruct
index 72e99c5..0c66844 100644
--- a/pluginSDK/SConstruct
+++ b/pluginSDK/SConstruct
@@ -279,7 +279,7 @@ pluginEnvironment = commonEnvironment.Copy()
 
 if getPlatform() == 'darwin':
     pluginEnvironment.Append(LINKFLAGS = Split('''
-        -framework CoreMidi -framework CoreFoundation -framework CoreAudio
+        -framework CoreMIDI -framework CoreFoundation -framework CoreAudio
     '''))
     # pluginEnvironment.Append(LINKFLAGS = ['-dynamiclib'])
     pluginEnvironment['SHLIBSUFFIX'] = '.dylib'
diff --git a/po/american.po b/po/american.po
index 2e66851..aa9ac5c 100644
--- a/po/american.po
+++ b/po/american.po
@@ -99,316 +99,317 @@ msgstr ""
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:138
+#: Engine/csound_orc_compile.c:141
 #, c-format
 msgid ""
 "input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
 "line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
+#: Engine/csound_orc_compile.c:268 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:269
+#: Engine/csound_orc_compile.c:272
 msgid "too many input args\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:304
+#: Engine/csound_orc_compile.c:307
 #, c-format
 msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:380
+#: Engine/csound_orc_compile.c:389
 #, c-format
-msgid ""
-"output name previously used, type '%c' must be uniquely defined, line %d"
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:386
+#: Engine/csound_orc_compile.c:517
 #, c-format
-msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
+msgid "output name previously used, type 'w' must be uniquely defined, line %d"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:541
+#: Engine/csound_orc_compile.c:563
 #, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:738
+#: Engine/csound_orc_compile.c:760
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:748
+#: Engine/csound_orc_compile.c:772
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+#: Engine/csound_orc_compile.c:779 Engine/csound_orc_compile.c:1068
+#: Engine/csound_orc_compile.c:1089 Engine/otran.c:363
 msgid "invalid name for instrument"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
+#: Engine/csound_orc_compile.c:783 Engine/csound_orc_compile.c:1071
+#: Engine/csound_orc_compile.c:1092 Engine/otran.c:369
 #, c-format
 msgid "instr %s redefined"
 msgstr "instr %s redefined"
 
-#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
+#: Engine/csound_orc_compile.c:927 Engine/otran.c:351
 #, c-format
 msgid "instr %ld redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:914
+#: Engine/csound_orc_compile.c:938
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1083
+#: Engine/csound_orc_compile.c:1141
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
+#: Engine/csound_orc_compile.c:1198 Engine/otran.c:578 Engine/otran.c:1432
 #, c-format
 msgid "%s invalid sample rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
+#: Engine/csound_orc_compile.c:1200 Engine/otran.c:580 Engine/otran.c:1434
 #, c-format
 msgid "%s invalid control rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
+#: Engine/csound_orc_compile.c:1204 Engine/otran.c:583 Engine/otran.c:1430
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
+#: Engine/csound_orc_compile.c:1207 Engine/otran.c:586 Engine/otran.c:1436
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1165
+#: Engine/csound_orc_compile.c:1223
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1170
+#: Engine/csound_orc_compile.c:1228
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
+#: Engine/csound_orc_compile.c:1288 Engine/otran.c:670
 msgid "inconsistent argoff sumcount"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
+#: Engine/csound_orc_compile.c:1360 Engine/otran.c:739
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
+#: Engine/csound_orc_compile.c:1398 Engine/otran.c:777
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
+#: Engine/csound_orc_compile.c:1431 Engine/otran.c:810
 #, c-format
 msgid "target label '%s' not found"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
+#: Engine/csound_orc_compile.c:1509 Engine/otran.c:865
 #, c-format
 msgid "string syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
+#: Engine/csound_orc_compile.c:1559 Engine/otran.c:915
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
+#: Engine/csound_orc_compile.c:1585 Engine/otran.c:941
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
+#: Engine/csound_orc_compile.c:1624 Engine/otran.c:1017
 msgid "gblnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
+#: Engine/csound_orc_compile.c:1652 Engine/otran.c:1045
 msgid "lclnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
+#: Engine/csound_orc_compile.c:1678 Engine/otran.c:1070
 msgid "unexpected global name"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
+#: Engine/csound_orc_compile.c:1701 Engine/otran.c:1092
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:459
+#: Engine/csound_orc_expressions.c:457
 #, c-format
 msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:862
+#: Engine/csound_orc_expressions.c:878
 #, c-format
 msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:157
+#: Engine/csound_orc_semantics.c:256
 #, c-format
 msgid ""
 "\n"
 "error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:159
+#: Engine/csound_orc_semantics.c:258
 #, c-format
 msgid ""
 " line %d:\n"
 ">>>"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:732
+#: Engine/csound_orc_semantics.c:834
 #, c-format
 msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/csound_orc_semantics.c:899 Engine/rdorch.c:1644 Engine/rdorch.c:1662
 #: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
+#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:126
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
+#: Engine/cs_par_dispatch.c:140 Engine/cs_par_dispatch.c:160
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
-#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
-#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
+#: Engine/cs_par_dispatch.c:551 Engine/cs_par_dispatch.c:578
+#: Engine/cs_par_dispatch.c:2564 Engine/cs_par_dispatch.c:2609
+#: Engine/cs_par_dispatch.c:2611 Engine/cs_par_dispatch.c:2675
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
-#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
+#: Engine/cs_par_dispatch.c:553 Engine/cs_par_dispatch.c:592
+#: Engine/cs_par_dispatch.c:619 Engine/cs_par_dispatch.c:660
 msgid "Invalid NULL Parameter name"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:535
+#: Engine/cs_par_dispatch.c:560
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
+#: Engine/cs_par_dispatch.c:689 Engine/cs_par_dispatch.c:780
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
+#: Engine/cs_par_dispatch.c:730 Engine/cs_par_dispatch.c:860
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:759
+#: Engine/cs_par_dispatch.c:784
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:907
+#: Engine/cs_par_dispatch.c:930
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:913
+#: Engine/cs_par_dispatch.c:936
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:918
+#: Engine/cs_par_dispatch.c:941
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:922
+#: Engine/cs_par_dispatch.c:945
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:926
+#: Engine/cs_par_dispatch.c:949
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
-#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
-#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
-#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
-#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
-#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
-#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
-#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
+#: Engine/cs_par_dispatch.c:1024 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1176 Engine/cs_par_dispatch.c:1276
+#: Engine/cs_par_dispatch.c:1430 Engine/cs_par_dispatch.c:1464
+#: Engine/cs_par_dispatch.c:1481 Engine/cs_par_dispatch.c:1503
+#: Engine/cs_par_dispatch.c:1531 Engine/cs_par_dispatch.c:1553
+#: Engine/cs_par_dispatch.c:1577 Engine/cs_par_dispatch.c:1669
+#: Engine/cs_par_dispatch.c:1724 Engine/cs_par_dispatch.c:1817
+#: Engine/cs_par_dispatch.c:1870 Engine/cs_par_dispatch.c:2702
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1008
+#: Engine/cs_par_dispatch.c:1029
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
-#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
+#: Engine/cs_par_dispatch.c:1081 Engine/cs_par_dispatch.c:1104
+#: Engine/cs_par_dispatch.c:1126 Engine/cs_par_dispatch.c:1128
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1062
+#: Engine/cs_par_dispatch.c:1083
 msgid "Invalid NULL Parameter instr"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1085
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
+#: Engine/cs_par_dispatch.c:1090 Engine/cs_par_dispatch.c:1112
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1086
+#: Engine/cs_par_dispatch.c:1107
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
-#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
-#: Engine/cs_par_dispatch.c:2682
+#: Engine/cs_par_dispatch.c:1250 Engine/cs_par_dispatch.c:1533
+#: Engine/cs_par_dispatch.c:2566 Engine/cs_par_dispatch.c:2676
+#: Engine/cs_par_dispatch.c:2703
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1237
+#: Engine/cs_par_dispatch.c:1261
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1554
+#: Engine/cs_par_dispatch.c:1579
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1556
+#: Engine/cs_par_dispatch.c:1581
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1647
+#: Engine/cs_par_dispatch.c:1672
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2497
+#: Engine/cs_par_dispatch.c:2518
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr "Parallel Dump File not found at: %s for writing"
 
-#: Engine/cs_par_dispatch.c:2557
+#: Engine/cs_par_dispatch.c:2578
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2610
+#: Engine/cs_par_dispatch.c:2631
 msgid "Cache Update\n"
 msgstr ""
 
@@ -422,12 +423,12 @@ msgstr ""
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1083
+#: Engine/envvar.c:1085
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr ""
 
-#: Engine/envvar.c:1266
+#: Engine/envvar.c:1268
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr ""
@@ -498,13 +499,13 @@ msgstr "ftable doesn't exist"
 msgid "ftable %d now deleted\n"
 msgstr ""
 
-#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
-#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
-#: Engine/fgens.c:2909
+#: Engine/fgens.c:153 Engine/fgens.c:1599 Engine/fgens.c:1685
+#: Engine/fgens.c:1764 Engine/fgens.c:1880 Engine/fgens.c:1961
+#: Engine/fgens.c:2937
 msgid "insufficient gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:179 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr ""
@@ -522,11 +523,11 @@ msgstr ""
 msgid "ftable %d:\n"
 msgstr ""
 
-#: Engine/fgens.c:222 Engine/fgens.c:229
+#: Engine/fgens.c:222 Engine/fgens.c:229 Engine/fgens.c:2794
 msgid "illegal table length"
 msgstr ""
 
-#: Engine/fgens.c:288 Engine/fgens.c:2215
+#: Engine/fgens.c:288 Engine/fgens.c:2221
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
@@ -535,10 +536,10 @@ msgstr ""
 
 #: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
 #: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
-#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
-#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
-#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
-#: Engine/fgens.c:2906
+#: Engine/fgens.c:1054 Engine/fgens.c:1098 Engine/fgens.c:1145
+#: Engine/fgens.c:1399 Engine/fgens.c:1461 Engine/fgens.c:1683
+#: Engine/fgens.c:1761 Engine/fgens.c:2116 Engine/fgens.c:2891
+#: Engine/fgens.c:2934
 msgid "using extended arguments\n"
 msgstr ""
 
@@ -551,13 +552,13 @@ msgid "illegal x interval"
 msgstr ""
 
 #: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
-#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
-#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: Engine/fgens.c:1356 Engine/fgens.c:2381 Engine/fgens.c:2696
+#: Engine/fgens.c:2836 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
 #: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr ""
 
-#: Engine/fgens.c:408 Engine/fgens.c:1355
+#: Engine/fgens.c:408 Engine/fgens.c:1361
 msgid "unknown srctable number"
 msgstr ""
 
@@ -593,238 +594,238 @@ msgstr ""
 msgid "uneven number of args"
 msgstr ""
 
-#: Engine/fgens.c:1077
+#: Engine/fgens.c:1082
 msgid "gen call has illegal x-ordinate values:"
 msgstr ""
 
-#: Engine/fgens.c:1095
+#: Engine/fgens.c:1100
 msgid "wrong number of args"
 msgstr ""
 
-#: Engine/fgens.c:1109
+#: Engine/fgens.c:1114
 msgid "a range given exceeds table length"
 msgstr ""
 
-#: Engine/fgens.c:1116
+#: Engine/fgens.c:1121
 msgid "an input function does not exist"
 msgstr "an input function doesn't exist"
 
-#: Engine/fgens.c:1249
+#: Engine/fgens.c:1254
 msgid "No such window!"
 msgstr ""
 
-#: Engine/fgens.c:1267
+#: Engine/fgens.c:1272
 msgid "Wrong number of input arguments"
 msgstr ""
 
-#: Engine/fgens.c:1268
+#: Engine/fgens.c:1273
 msgid "unknown distribution"
 msgstr ""
 
-#: Engine/fgens.c:1317
+#: Engine/fgens.c:1322
 msgid "error opening ASCII file"
 msgstr ""
 
-#: Engine/fgens.c:1323
+#: Engine/fgens.c:1328
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr ""
 
-#: Engine/fgens.c:1334
+#: Engine/fgens.c:1340
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1363
+#: Engine/fgens.c:1369
 msgid "table size must be the same of source table"
 msgstr ""
 
-#: Engine/fgens.c:1435 Engine/fgens.c:1495
+#: Engine/fgens.c:1441 Engine/fgens.c:1501
 msgid "x coordinates must all be in increasing order:"
 msgstr ""
 
-#: Engine/fgens.c:1438 Engine/fgens.c:1497
+#: Engine/fgens.c:1444 Engine/fgens.c:1503
 msgid "x coordinate greater than function size:"
 msgstr ""
 
-#: Engine/fgens.c:1442
+#: Engine/fgens.c:1448
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1515
+#: Engine/fgens.c:1521
 msgid "GEN28 requires zero table length"
 msgstr ""
 
-#: Engine/fgens.c:1577
+#: Engine/fgens.c:1583
 msgid "could not open space file"
 msgstr "couldn't open space file"
 
-#: Engine/fgens.c:1579
+#: Engine/fgens.c:1585
 msgid "Time values must be in increasing order"
 msgstr ""
 
-#: Engine/fgens.c:1600
+#: Engine/fgens.c:1606
 msgid "GEN30: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1683
+#: Engine/fgens.c:1689
 msgid "GEN31: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1791
+#: Engine/fgens.c:1797
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr ""
 
-#: Engine/fgens.c:1885
+#: Engine/fgens.c:1891
 msgid "GEN33: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:2053
+#: Engine/fgens.c:2059
 msgid "unknown source table number"
 msgstr ""
 
-#: Engine/fgens.c:2085
+#: Engine/fgens.c:2091
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2157
 #, c-format
 msgid "ftable %d: "
 msgstr ""
 
-#: Engine/fgens.c:2195
+#: Engine/fgens.c:2201
 #, c-format
 msgid "ftable %d:"
 msgstr ""
 
-#: Engine/fgens.c:2210
+#: Engine/fgens.c:2216
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr ""
 
-#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
-#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
-#: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
-#: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
+#: Engine/fgens.c:2252 Engine/fgens.c:2340 Engine/fgens.c:2364
+#: Opcodes/midiops2.c:233 Opcodes/midiops2.c:388 Opcodes/midiops2.c:470
+#: Opcodes/uggab.c:1482 Opcodes/uggab.c:1509 Opcodes/uggab.c:1529
+#: Opcodes/uggab.c:1572
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr ""
 
-#: Engine/fgens.c:2251
+#: Engine/fgens.c:2257
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr ""
 
-#: Engine/fgens.c:2278 Engine/fgens.c:2848
+#: Engine/fgens.c:2284 Engine/fgens.c:2875
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr ""
 
-#: Engine/fgens.c:2340
+#: Engine/fgens.c:2346
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 
-#: Engine/fgens.c:2399
+#: Engine/fgens.c:2405
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
+#: Engine/fgens.c:2452 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr ""
 
-#: Engine/fgens.c:2454 Engine/fgens.c:2714
+#: Engine/fgens.c:2460 Engine/fgens.c:2719
 #, c-format
 msgid "channel %d illegal"
 msgstr ""
 
-#: Engine/fgens.c:2460
+#: Engine/fgens.c:2466
 msgid "deferred alloc\n"
 msgstr ""
 
-#: Engine/fgens.c:2468
+#: Engine/fgens.c:2474 Engine/fgens.c:2792
 msgid "deferred size, but filesize unknown"
 msgstr ""
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2477 Engine/fgens.c:2796
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2540
+#: Engine/fgens.c:2546
 msgid "GEN1: input file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2544
+#: Engine/fgens.c:2550
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2566
+#: Engine/fgens.c:2572
 msgid "GEN1 read error"
 msgstr ""
 
-#: Engine/fgens.c:2571
+#: Engine/fgens.c:2577
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2572
+#: Engine/fgens.c:2578
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr ""
 
-#: Engine/fgens.c:2616
+#: Engine/fgens.c:2622
 msgid "wrong number of ftable arguments"
 msgstr ""
 
-#: Engine/fgens.c:2626 OOps/pstream.c:326
+#: Engine/fgens.c:2632 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr ""
 
-#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2643 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr ""
 
-#: Engine/fgens.c:2655
+#: Engine/fgens.c:2661
 msgid "ftable size too small"
 msgstr ""
 
-#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
+#: Engine/fgens.c:2735 Opcodes/mp3in.c:87 Opcodes/mp3in.c:229
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2873
+#: Engine/fgens.c:2901
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr ""
 
-#: Engine/fgens.c:2913
+#: Engine/fgens.c:2941
 msgid "number of channels inconsistent with number of args"
 msgstr ""
 
-#: Engine/fgens.c:3072
+#: Engine/fgens.c:3100
 msgid "GEN53: invalid number of gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:3082
+#: Engine/fgens.c:3110
 msgid "GEN53: invalid table length"
 msgstr ""
 
-#: Engine/fgens.c:3086
+#: Engine/fgens.c:3114
 msgid "GEN53: invalid source table number"
 msgstr ""
 
-#: Engine/fgens.c:3089
+#: Engine/fgens.c:3117
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr ""
 
-#: Engine/fgens.c:3093
+#: Engine/fgens.c:3121
 msgid "GEN53: invalid source table length"
 msgstr ""
 
-#: Engine/fgens.c:3098
+#: Engine/fgens.c:3126
 msgid "GEN53: invalid window table"
 msgstr ""
 
@@ -1029,36 +1030,36 @@ msgstr ""
 msgid "subinstr: not initialised"
 msgstr "subinstr: not initialized"
 
-#: Engine/insert.c:1855
+#: Engine/insert.c:1856
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
 "\tlclbas %p, opds %p\n"
 msgstr ""
 
-#: Engine/insert.c:1872
+#: Engine/insert.c:1873
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1898
+#: Engine/insert.c:1899
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1909
+#: Engine/insert.c:1910
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1966
+#: Engine/insert.c:1967
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:2011
+#: Engine/insert.c:2012
 #, c-format
 msgid "Instrument %s is still active"
 msgstr ""
 
-#: Engine/insert.c:2014
+#: Engine/insert.c:2015
 #, c-format
 msgid "Instrument %d is still active"
 msgstr ""
@@ -1068,8 +1069,8 @@ msgid "-L stdin fcntl failed"
 msgstr ""
 
 #: Engine/linevent.c:99 Engine/linevent.c:112 OOps/dumpf.c:57 OOps/dumpf.c:82
-#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:274 OOps/dumpf.c:301
-#: OOps/dumpf.c:328 OOps/dumpf.c:355 OOps/dumpf.c:527 util/hetro.c:249
+#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:276 OOps/dumpf.c:303
+#: OOps/dumpf.c:330 OOps/dumpf.c:357 OOps/dumpf.c:528 util/hetro.c:249
 #, c-format
 msgid "Cannot open %s"
 msgstr "Can't open %s"
@@ -1233,210 +1234,206 @@ msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
 msgstr ""
 
-#: Engine/musmon.c:81
+#: Engine/musmon.c:80
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr ""
 
-#: Engine/musmon.c:108
+#: Engine/musmon.c:107
 msgid "illegal istartempo value"
 msgstr ""
 
-#: Engine/musmon.c:111
+#: Engine/musmon.c:110
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:184 Top/main.c:121
+#: Engine/musmon.c:183 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:187 Top/main.c:124
+#: Engine/musmon.c:186 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:192 Top/main.c:113
+#: Engine/musmon.c:191 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:195 Top/main.c:116
+#: Engine/musmon.c:194 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:220
+#: Engine/musmon.c:219
 msgid "orch now loaded\n"
 msgstr ""
 
-#: Engine/musmon.c:245
+#: Engine/musmon.c:244
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:261
+#: Engine/musmon.c:260
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:283
+#: Engine/musmon.c:282
 msgid "using Cscore processing\n"
 msgstr ""
 
-#: Engine/musmon.c:286
+#: Engine/musmon.c:285
 msgid "cannot create cscore.out"
 msgstr "can't create cscore.out"
 
-#: Engine/musmon.c:299
+#: Engine/musmon.c:301
 msgid "cannot reopen cscore.out"
 msgstr "can't reopen cscore.out"
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:314
 msgid "cannot reopen cscore.srt"
 msgstr "can't reopen cscore.srt"
 
-#: Engine/musmon.c:305
+#: Engine/musmon.c:316
 msgid "sorting cscore.out ..\n"
 msgstr ""
 
-#: Engine/musmon.c:311 Top/main.c:401
+#: Engine/musmon.c:322 Top/main.c:397
 msgid "\t... done\n"
 msgstr ""
 
-#: Engine/musmon.c:312
+#: Engine/musmon.c:323
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
-#: Engine/musmon.c:1216
+#: Engine/musmon.c:327 Engine/musmon.c:457 Engine/musmon.c:1026
+#: Engine/musmon.c:1227
 #, c-format
 msgid "SECTION %d:\n"
 msgstr ""
 
-#: Engine/musmon.c:390
+#: Engine/musmon.c:401
 msgid "end of score.\t\t   overall amps:"
 msgstr ""
 
-#: Engine/musmon.c:401
+#: Engine/musmon.c:412
 msgid ""
 "\n"
 "\t   overall samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:405
+#: Engine/musmon.c:416
 #, c-format
 msgid ""
 "\n"
 "%d errors in performance\n"
 msgstr ""
 
-#: Engine/musmon.c:407
+#: Engine/musmon.c:418
 msgid "end of performance"
 msgstr ""
 
-#: Engine/musmon.c:421
+#: Engine/musmon.c:432
 msgid "no sound written to disk\n"
 msgstr ""
 
-#: Engine/musmon.c:436
+#: Engine/musmon.c:447
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:502 Engine/musmon.c:548
+#: Engine/musmon.c:513 Engine/musmon.c:559
 msgid "\t number of samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:541
+#: Engine/musmon.c:552
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:543
+#: Engine/musmon.c:554
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:607 Engine/musmon.c:632
+#: Engine/musmon.c:618 Engine/musmon.c:643
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr ""
 
-#: Engine/musmon.c:611
+#: Engine/musmon.c:622
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "off"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "on"
 msgstr ""
 
-#: Engine/musmon.c:620 Engine/musmon.c:659
+#: Engine/musmon.c:631 Engine/musmon.c:670
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr ""
 
-#: Engine/musmon.c:624
+#: Engine/musmon.c:635
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:650
+#: Engine/musmon.c:661
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:680
+#: Engine/musmon.c:691
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:701
+#: Engine/musmon.c:712
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr ""
 
-#: Engine/musmon.c:719
+#: Engine/musmon.c:730
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr ""
 
-#: Engine/musmon.c:723
+#: Engine/musmon.c:734
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:736
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:816
+#: Engine/musmon.c:827
 msgid "terminating.\n"
 msgstr ""
 
-#: Engine/musmon.c:902
+#: Engine/musmon.c:913
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr ""
 
-#: Engine/musmon.c:1129
+#: Engine/musmon.c:1140
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr ""
 
-#: Engine/musmon.c:1149
+#: Engine/musmon.c:1160
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr ""
 
-#: Engine/musmon.c:1172
+#: Engine/musmon.c:1183
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr ""
 
@@ -1459,105 +1456,105 @@ msgstr "Can't Find Instrument %d"
 msgid "cannot find the specified instrument or opcode"
 msgstr "can't find the specified instrument or opcode"
 
-#: Engine/new_orc_parser.c:91
+#: Engine/new_orc_parser.c:119
 msgid "Unmatched #ifdef\n"
 msgstr ""
 
-#: Engine/otran.c:149 Engine/symbtab.c:413
+#: Engine/otran.c:149 Engine/symbtab.c:416
 #, c-format
 msgid "invalid input type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:154 Engine/symbtab.c:418
+#: Engine/otran.c:154 Engine/symbtab.c:421
 #, c-format
 msgid "too many input args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:169 Engine/symbtab.c:433
+#: Engine/otran.c:169 Engine/symbtab.c:436
 #, c-format
 msgid "too many output args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:194 Engine/symbtab.c:458
+#: Engine/otran.c:194 Engine/symbtab.c:461
 #, c-format
 msgid "invalid output type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:325 Engine/otran.c:332
+#: Engine/otran.c:324 Engine/otran.c:331
 msgid "missing instrument number or name"
 msgstr ""
 
-#: Engine/otran.c:337
+#: Engine/otran.c:336
 msgid "illegal instr number"
 msgstr ""
 
-#: Engine/otran.c:388
+#: Engine/otran.c:387
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:393 Engine/symbtab.c:538
+#: Engine/otran.c:392 Engine/symbtab.c:541
 msgid "invalid name for opcode"
 msgstr ""
 
-#: Engine/otran.c:397
+#: Engine/otran.c:396
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
 msgstr ""
 
-#: Engine/otran.c:408 Engine/symbtab.c:548
+#: Engine/otran.c:407 Engine/symbtab.c:551
 #, c-format
 msgid "cannot redefine %s"
 msgstr "can't redefine %s"
 
-#: Engine/otran.c:412 Engine/symbtab.c:553
+#: Engine/otran.c:411 Engine/symbtab.c:556
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr ""
 
-#: Engine/otran.c:503
+#: Engine/otran.c:502
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:534
+#: Engine/otran.c:533
 msgid "Missing endin"
 msgstr ""
 
-#: Engine/otran.c:599
+#: Engine/otran.c:598
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:603
+#: Engine/otran.c:602
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr ""
 
-#: Engine/otran.c:1257
+#: Engine/otran.c:1256
 msgid "bad value for 0dbfs: must be positive."
 msgstr ""
 
-#: Engine/otran.c:1267
+#: Engine/otran.c:1266
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1339
+#: Engine/otran.c:1338
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1365
+#: Engine/otran.c:1364
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1428
+#: Engine/otran.c:1427
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "error:"
 msgstr ""
 
-#: Engine/otran.c:1461
+#: Engine/otran.c:1460
 msgid "header init errors"
 msgstr ""
 
@@ -1569,7 +1566,7 @@ msgstr ""
 msgid "Unexpected end of orchestra file"
 msgstr ""
 
-#: Engine/rdorch.c:431 Engine/sread.c:758
+#: Engine/rdorch.c:431 Engine/sread.c:765
 #, c-format
 msgid "Macro definition for %*s\n"
 msgstr ""
@@ -1587,12 +1584,12 @@ msgstr ""
 msgid "cannot open orch file %s"
 msgstr "can't open orch file %s"
 
-#: Engine/rdorch.c:684 Engine/sread.c:1584
+#: Engine/rdorch.c:684 Engine/sread.c:1595
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:716 Engine/sread.c:1607
+#: Engine/rdorch.c:716 Engine/sread.c:1618
 msgid "macro error\n"
 msgstr ""
 
@@ -1613,7 +1610,7 @@ msgstr ""
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:872 Engine/sread.c:1694
+#: Engine/rdorch.c:872 Engine/sread.c:1710
 #, c-format
 msgid "macro %s undefined\n"
 msgstr ""
@@ -1631,21 +1628,21 @@ msgstr ""
 msgid "Unknown # option: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:928 Engine/sread.c:380
+#: Engine/rdorch.c:928 Engine/sread.c:383
 #, c-format
 msgid "Undefined macro: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:930 Engine/sread.c:378
+#: Engine/rdorch.c:930 Engine/sread.c:381
 msgid "Macro expansion symbol ($) without macro name"
 msgstr ""
 
-#: Engine/rdorch.c:935 Engine/sread.c:384
+#: Engine/rdorch.c:935 Engine/sread.c:387
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr ""
 
-#: Engine/rdorch.c:952 Engine/sread.c:401
+#: Engine/rdorch.c:952 Engine/sread.c:404 Engine/sread.c:420
 msgid "Syntax error in macro call"
 msgstr ""
 
@@ -1865,7 +1862,7 @@ msgid ""
 "\tremainder of line flushed\n"
 msgstr ""
 
-#: Engine/rdscor.c:146
+#: Engine/rdscor.c:148
 msgid "ERROR: too many pfields: "
 msgstr ""
 
@@ -1915,228 +1912,233 @@ msgstr ""
 msgid "Internal error op=%c"
 msgstr ""
 
-#: Engine/sread.c:464
+#: Engine/sread.c:469
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:491
+#: Engine/sread.c:496
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:501
+#: Engine/sread.c:506
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:533 Engine/sread.c:547
+#: Engine/sread.c:538 Engine/sread.c:552
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:559
+#: Engine/sread.c:564
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:565
+#: Engine/sread.c:570
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:579
+#: Engine/sread.c:584
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:599
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:646
+#: Engine/sread.c:651
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:652
+#: Engine/sread.c:657
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:696
+#: Engine/sread.c:701
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:701
+#: Engine/sread.c:706
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:715
+#: Engine/sread.c:720
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:733
+#: Engine/sread.c:740
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr ""
 
-#: Engine/sread.c:736
+#: Engine/sread.c:743
 msgid "Repeat section\n"
 msgstr ""
 
-#: Engine/sread.c:761
+#: Engine/sread.c:768
 msgid "Invalid macro name for --smacro"
 msgstr ""
 
-#: Engine/sread.c:865
+#: Engine/sread.c:872
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr ""
 
-#: Engine/sread.c:934
+#: Engine/sread.c:942
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:948
+#: Engine/sread.c:956
 msgid "{: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:957
+#: Engine/sread.c:965
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:963
+#: Engine/sread.c:971
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1047
+#: Engine/sread.c:1056
 msgid "r: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:1049
+#: Engine/sread.c:1058
 #, c-format
 msgid "Repeats=%d\n"
 msgstr ""
 
-#: Engine/sread.c:1093
+#: Engine/sread.c:1102
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr ""
 
-#: Engine/sread.c:1108
+#: Engine/sread.c:1117
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr ""
 
-#: Engine/sread.c:1133
+#: Engine/sread.c:1142
 #, c-format
 msgid "Name %s not found"
 msgstr ""
 
-#: Engine/sread.c:1135
+#: Engine/sread.c:1144
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr ""
 
-#: Engine/sread.c:1164
+#: Engine/sread.c:1174
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1189
+#: Engine/sread.c:1199
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1251
+#: Engine/sread.c:1261
 msgid "No previous event for ^"
 msgstr ""
 
-#: Engine/sread.c:1256
+#: Engine/sread.c:1266
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1286
+#: Engine/sread.c:1296
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1289
+#: Engine/sread.c:1299
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
-#: Engine/sread.c:1761 Engine/sread.c:1775
+#: Engine/sread.c:1300 Engine/sread.c:1305 Engine/sread.c:1754
+#: Engine/sread.c:1777 Engine/sread.c:1791
 msgid "      remainder of line flushed\n"
 msgstr ""
 
-#: Engine/sread.c:1294
+#: Engine/sread.c:1304
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1373
+#: Engine/sread.c:1384
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr ""
 
-#: Engine/sread.c:1393
+#: Engine/sread.c:1404
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1539
+#: Engine/sread.c:1550
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1570
+#: Engine/sread.c:1581
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1630
+#: Engine/sread.c:1627 Engine/sread.c:1635
+#, fuzzy
+msgid "Syntax error in macro definition"
+msgstr "Syntax error: can't back up"
+
+#: Engine/sread.c:1646
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr ""
 
-#: Engine/sread.c:1642
+#: Engine/sread.c:1658
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1671
+#: Engine/sread.c:1687
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr "Can't open #include'd file %s"
 
-#: Engine/sread.c:1681
+#: Engine/sread.c:1697
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1700
+#: Engine/sread.c:1716
 msgid "unknown # option"
 msgstr ""
 
-#: Engine/sread.c:1737
+#: Engine/sread.c:1753
 #, c-format
 msgid "illegal opcode %c"
 msgstr ""
 
-#: Engine/sread.c:1760
+#: Engine/sread.c:1776
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1774
+#: Engine/sread.c:1790
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1781
+#: Engine/sread.c:1797
 msgid "unmatched quote"
 msgstr ""
 
-#: Engine/sread.c:1825
+#: Engine/sread.c:1841
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1831
+#: Engine/sread.c:1847
 msgid "   zero substituted.\n"
 msgstr ""
 
@@ -2195,16 +2197,11 @@ msgstr ""
 msgid "    String truncated\n"
 msgstr ""
 
-#: Engine/symbtab.c:208
+#: Engine/symbtab.c:211
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:345
-#, c-format
-msgid "Unknown word type for %s on line %d\n"
-msgstr ""
-
 #: Engine/twarp.c:88
 msgid "twarp: illegal opcode\n"
 msgstr ""
@@ -2221,11 +2218,11 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
-#: InOut/cmidi.c:233
+#: InOut/cmidi.c:236
 msgid "CoreMIDI real time MIDI plugin for Csound\n"
 msgstr ""
 
-#: InOut/cmidi.c:247
+#: InOut/cmidi.c:250
 msgid "rtmidi: CoreMIDI module enabled\n"
 msgstr ""
 
@@ -2280,7 +2277,7 @@ msgstr "sfinit: can't open %s"
 msgid "writing %d sample blks of %d-bit floats to %s \n"
 msgstr ""
 
-#: InOut/libsnd.c:744 util/srconv.c:484
+#: InOut/libsnd.c:744 util/srconv.c:485
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr ""
@@ -2844,182 +2841,182 @@ msgstr ""
 msgid "rtmidi: PortMIDI module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:110
+#: InOut/rtalsa.c:113
 msgid "--scheduler: invalid priority value; the allowed range is:"
 msgstr ""
 
-#: InOut/rtalsa.c:111
+#: InOut/rtalsa.c:114
 msgid "  -20 to -1: set nice level"
 msgstr ""
 
-#: InOut/rtalsa.c:112
+#: InOut/rtalsa.c:115
 msgid "          0: normal scheduling, but lock memory"
 msgstr ""
 
-#: InOut/rtalsa.c:113
+#: InOut/rtalsa.c:116
 #, c-format
 msgid "    1 to %d: SCHED_RR with the specified priority (DANGEROUS)"
 msgstr ""
 
-#: InOut/rtalsa.c:330
+#: InOut/rtalsa.c:333
 #, c-format
 msgid " *** Cannot open device '%s' for audio output: %s"
 msgstr " *** Can't open device '%s' for audio output: %s"
 
-#: InOut/rtalsa.c:333
+#: InOut/rtalsa.c:336
 #, c-format
 msgid " *** Cannot open device '%s' for audio input: %s"
 msgstr " *** Can't open device '%s' for audio input: %s"
 
-#: InOut/rtalsa.c:394
+#: InOut/rtalsa.c:397
 #, c-format
 msgid "ALSA: -B %d not allowed on this device; using %d instead\n"
 msgstr ""
 
-#: InOut/rtalsa.c:417
+#: InOut/rtalsa.c:420
 #, c-format
 msgid "ALSA: -b %d not allowed on this device; using %d instead\n"
 msgstr ""
 
-#: InOut/rtalsa.c:430
+#: InOut/rtalsa.c:433
 #, c-format
 msgid "ALSA %s: total buffer size: %d, period size: %d\n"
 msgstr ""
 
-#: InOut/rtalsa.c:506
+#: InOut/rtalsa.c:509
 msgid " *** ALSA: must specify a device name, not a number (e.g. -odac:hw:0,0)"
 msgstr ""
 
-#: InOut/rtalsa.c:514
+#: InOut/rtalsa.c:517
 #, c-format
 msgid " *** ALSA: %s: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:601
+#: InOut/rtalsa.c:604
 msgid "Error reading data from audio input device"
 msgstr ""
 
-#: InOut/rtalsa.c:646
+#: InOut/rtalsa.c:649
 msgid "Error writing data to audio output device"
 msgstr ""
 
-#: InOut/rtalsa.c:687
+#: InOut/rtalsa.c:690
 msgid "ALSA MIDI: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:694
+#: InOut/rtalsa.c:697
 #, c-format
 msgid "ALSA: error opening MIDI input device: '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:698
+#: InOut/rtalsa.c:701
 #, c-format
 msgid "ALSA: opened MIDI input device '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:717
+#: InOut/rtalsa.c:720
 msgid "ALSA midi: Using all devices.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:746
+#: InOut/rtalsa.c:749
 #, c-format
 msgid "ALSA midi: Error opening device: %s\n"
 msgstr ""
 
-#: InOut/rtalsa.c:768
+#: InOut/rtalsa.c:771
 msgid "ALSA midi: No devices found.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:867
+#: InOut/rtalsa.c:870
 #, c-format
 msgid "ALSA: error opening MIDI output device '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:870
+#: InOut/rtalsa.c:873
 #, c-format
 msgid "ALSA: opened MIDI output device '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:910
+#: InOut/rtalsa.c:913
 msgid "-M stdin fcntl failed"
 msgstr ""
 
-#: InOut/rtalsa.c:918
+#: InOut/rtalsa.c:921
 #, c-format
 msgid "cannot open %s"
 msgstr "can't open %s"
 
-#: InOut/rtalsa.c:929
+#: InOut/rtalsa.c:932
 msgid "MIDI receive: cannot get termios info."
 msgstr "MIDI receive: can't get termios info."
 
-#: InOut/rtalsa.c:937
+#: InOut/rtalsa.c:940
 msgid "MIDI receive: cannot set input baud rate."
 msgstr "MIDI receive: can't set input baud rate."
 
-#: InOut/rtalsa.c:943
+#: InOut/rtalsa.c:946
 msgid "MIDI receive: cannot set termios."
 msgstr "MIDI receive: can't set termios."
 
-#: InOut/rtalsa.c:947
+#: InOut/rtalsa.c:950
 #, c-format
 msgid "Opened MIDI input device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:987
+#: InOut/rtalsa.c:990
 #, c-format
 msgid "sensMIDI: retval errno %d"
 msgstr ""
 
-#: InOut/rtalsa.c:1054
+#: InOut/rtalsa.c:1057
 #, c-format
 msgid "Error opening MIDI output device file '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:1058
+#: InOut/rtalsa.c:1061
 #, c-format
 msgid "Opened MIDI output device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
+#: InOut/rtalsa.c:1104 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr "warning... couldn't create global var\n"
 
-#: InOut/rtalsa.c:1106
+#: InOut/rtalsa.c:1109
 msgid "RT scheduler priority, alsa module"
 msgstr ""
 
-#: InOut/rtalsa.c:1111
+#: InOut/rtalsa.c:1114
 msgid "ALSA real-time audio and MIDI module for Csound by Istvan Varga\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1142
+#: InOut/rtalsa.c:1145
 msgid "rtaudio: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1157
+#: InOut/rtalsa.c:1160
 msgid "rtmidi: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1166
+#: InOut/rtalsa.c:1169
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtauhal.c:163
+#: InOut/rtauhal.c:162
 #, c-format
 msgid "selected input device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:166
+#: InOut/rtauhal.c:165
 #, c-format
 msgid "selected output device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:524
+#: InOut/rtauhal.c:523
 msgid "AuHAL module: device closed\n"
 msgstr ""
 
-#: InOut/rtauhal.c:541
+#: InOut/rtauhal.c:540
 msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
 msgstr ""
 
@@ -3114,7 +3111,7 @@ msgstr ""
 
 #: InOut/rtjack.c:317 InOut/rtjack.c:330 InOut/rtjack.c:335 InOut/rtjack.c:552
 #: InOut/rtjack.c:590 InOut/rtjack.c:595 InOut/rtjack.c:616 InOut/rtjack.c:621
-#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315 Opcodes/ftgen.c:79
+#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315
 msgid "memory allocation failure"
 msgstr ""
 
@@ -3548,8 +3545,8 @@ msgstr ""
 msgid "Index %d out of range [0,%d] in t[]\n"
 msgstr ""
 
-#: OOps/aops.c:209
 #
+#: OOps/aops.c:209
 msgid "Vector not initialised\n"
 msgstr "Vector not initialized\n"
 
@@ -3677,58 +3674,58 @@ msgstr ""
 msgid "diskin2: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:231
+#: OOps/diskin2.c:232
 #, c-format
 msgid ""
 "diskin2: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:240
+#: OOps/diskin2.c:242
 msgid ""
 "diskin2: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:270
+#: OOps/diskin2.c:272
 #, c-format
 msgid "diskin2: warning: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:331
+#: OOps/diskin2.c:334
 msgid "diskin2: not initialised"
 msgstr "diskin2: not initialized"
 
-#: OOps/diskin2.c:560
+#: OOps/diskin2.c:566
 msgid "soundin: invalid number of channels"
 msgstr ""
 
-#: OOps/diskin2.c:581
+#: OOps/diskin2.c:587
 msgid "soundin: unknown sample format"
 msgstr ""
 
-#: OOps/diskin2.c:591
+#: OOps/diskin2.c:597
 #, c-format
 msgid "soundin: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:599
+#: OOps/diskin2.c:605
 #, c-format
 msgid ""
 "soundin: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:609
+#: OOps/diskin2.c:615
 msgid ""
 "soundin: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:618
+#: OOps/diskin2.c:624
 #, c-format
 msgid "soundin: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:651
+#: OOps/diskin2.c:657
 msgid "soundin: not initialised"
 msgstr "soundin: not initialized"
 
@@ -3911,33 +3908,37 @@ msgid "tempest: not initialised"
 msgstr "tempest: not initialized"
 
 #: OOps/dumpf.c:45 OOps/dumpf.c:70 OOps/dumpf.c:95 OOps/dumpf.c:120
-#: OOps/dumpf.c:261 OOps/dumpf.c:288 OOps/dumpf.c:315 OOps/dumpf.c:342
+#: OOps/dumpf.c:263 OOps/dumpf.c:290 OOps/dumpf.c:317 OOps/dumpf.c:344
 msgid "unknown format request"
 msgstr ""
 
 #: OOps/dumpf.c:49 OOps/dumpf.c:74 OOps/dumpf.c:99 OOps/dumpf.c:124
-#: OOps/dumpf.c:265 OOps/dumpf.c:292 OOps/dumpf.c:319 OOps/dumpf.c:346
+#: OOps/dumpf.c:267 OOps/dumpf.c:294 OOps/dumpf.c:321 OOps/dumpf.c:348
 msgid "alaw and ulaw not implemented here"
 msgstr ""
 
-#: OOps/dumpf.c:193 OOps/dumpf.c:442
+#: OOps/dumpf.c:193 OOps/dumpf.c:443
 msgid "unknown kdump format"
 msgstr ""
 
+#: OOps/dumpf.c:196
+msgid "write failure in dumpk"
+msgstr ""
+
 #: OOps/fftlib.c:3195
 #, c-format
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:93
+#: OOps/goto_ops.c:95
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:186
+#: OOps/goto_ops.c:188
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:191
+#: OOps/goto_ops.c:193
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -3954,11 +3955,11 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
-#: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
-#: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
-#: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
-#: Opcodes/midiops2.c:388 Opcodes/midiops2.c:438 Opcodes/midiops2.c:472
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/midiops2.c:59
+#: Opcodes/midiops2.c:76 Opcodes/midiops2.c:120 Opcodes/midiops2.c:154
+#: Opcodes/midiops2.c:221 Opcodes/midiops2.c:252 Opcodes/midiops2.c:316
+#: Opcodes/midiops2.c:335 Opcodes/midiops2.c:375 Opcodes/midiops2.c:406
+#: Opcodes/midiops2.c:456 Opcodes/midiops2.c:490
 msgid "illegal controller number"
 msgstr ""
 
@@ -4492,7 +4493,7 @@ msgstr ""
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:261 Opcodes/socksend.c:305
+#: OOps/remote.c:261 Opcodes/socksend.c:300
 msgid "write to socket failed"
 msgstr ""
 
@@ -4509,15 +4510,15 @@ msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
 #: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
-#: Opcodes/socksend.c:284
+#: Opcodes/sockrecv.c:345
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:316 Opcodes/socksend.c:289
+#: OOps/remote.c:316 Opcodes/sockrecv.c:350
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:321 Opcodes/socksend.c:295
+#: OOps/remote.c:321 Opcodes/sockrecv.c:356
 msgid "accept failed"
 msgstr ""
 
@@ -4582,7 +4583,7 @@ msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
 
-#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:834
+#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:839
 msgid "Instrument not defined"
 msgstr ""
 
@@ -4796,8 +4797,6 @@ msgid "oscil(krate): not initialised"
 msgstr "oscil(krate): not initialized"
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
-#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr "oscil: not initialized"
 
@@ -4913,7 +4912,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5100,1332 +5099,462 @@ msgstr "reverb: not intialized"
 msgid "pan: not initialised"
 msgstr "pan: not initialized"
 
-#: OOps/ugrw1.c:922 OOps/ugrw1.c:1247
+#: OOps/ugrw1.c:922 OOps/ugrw1.c:1234
 #, c-format
 msgid "Table write offset %f < 0 or > tablelength"
 msgstr ""
 
-#: OOps/ugrw1.c:1242
+#: OOps/ugrw1.c:1229
 #, c-format
 msgid "Table write k rate function table no. %f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1290 OOps/ugrw1.c:1313 OOps/ugrw1.c:1392
+#: OOps/ugrw1.c:1277 OOps/ugrw1.c:1300 OOps/ugrw1.c:1379
 #, c-format
 msgid "Table %f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1469
+#: OOps/ugrw1.c:1456
 #, c-format
 msgid "Table no. < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f\n"
 msgstr ""
 
-#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1558 OOps/ugrw1.c:1770 OOps/ugrw1.c:1811
+#: OOps/ugrw1.c:1472 OOps/ugrw1.c:1545 OOps/ugrw1.c:1757 OOps/ugrw1.c:1798
 #, c-format
 msgid "Destination dft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1498 OOps/ugrw1.c:1569
+#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1556
 #, c-format
 msgid "Source 1 s1ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1508 OOps/ugrw1.c:1577
+#: OOps/ugrw1.c:1495 OOps/ugrw1.c:1564
 #, c-format
 msgid "Source 2 s2ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1543
+#: OOps/ugrw1.c:1530
 #, c-format
 msgid "Table number < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1758 OOps/ugrw1.c:1800
+#: OOps/ugrw1.c:1745 OOps/ugrw1.c:1787
 #, c-format
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
-#: Opcodes/fareyseq.c:475
+#: OOps/ugrw1.c:1768 OOps/ugrw1.c:1809
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1911 OOps/ugrw1.c:2032
+#: OOps/ugrw1.c:1898 OOps/ugrw1.c:2019
 #, c-format
 msgid "Table kfn=%.2f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1919 OOps/ugrw1.c:2040
+#: OOps/ugrw1.c:1906 OOps/ugrw1.c:2027
 #, c-format
 msgid "kfn table %.2f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1931 OOps/ugrw1.c:2053
+#: OOps/ugrw1.c:1918 OOps/ugrw1.c:2040
 #, c-format
 msgid "Table kfn=%.2f length %ld shorter than ksmps %d"
 msgstr ""
 
-#: OOps/ugrw1.c:1940 OOps/ugrw1.c:2062
+#: OOps/ugrw1.c:1927 OOps/ugrw1.c:2049
 #, c-format
 msgid "kstart %.2f is outside table %.2f range 0 to %ld"
 msgstr ""
 
-#: OOps/ugrw1.c:2156
+#: OOps/ugrw1.c:2143
 msgid "zakinit should only be called once."
 msgstr ""
 
-#: OOps/ugrw1.c:2160
+#: OOps/ugrw1.c:2147
 msgid "zakinit: both isizea and isizek should be > 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2191
+#: OOps/ugrw1.c:2178
 msgid "No zk space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2210
+#: OOps/ugrw1.c:2197
 msgid "zkr index > isizek. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2214
+#: OOps/ugrw1.c:2201
 msgid "zkr index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2242
+#: OOps/ugrw1.c:2229
 msgid "zir index > isizek. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2246
+#: OOps/ugrw1.c:2233
 msgid "zir index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2268
+#: OOps/ugrw1.c:2255
 msgid "zkw index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2271
+#: OOps/ugrw1.c:2258
 msgid "zkw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2296
+#: OOps/ugrw1.c:2283
 msgid "ziw index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2299
+#: OOps/ugrw1.c:2286
 msgid "ziw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2323
+#: OOps/ugrw1.c:2310
 msgid "zkwm index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2326
+#: OOps/ugrw1.c:2313
 msgid "zkwm index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2359
+#: OOps/ugrw1.c:2346
 msgid "ziwm index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2362
+#: OOps/ugrw1.c:2349
 msgid "ziwm index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2406
+#: OOps/ugrw1.c:2393
 msgid "zkmod kzkmod > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2432
+#: OOps/ugrw1.c:2419
 msgid "zkcl first or last > isizek. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2435
+#: OOps/ugrw1.c:2422
 msgid "zkcl first or last < 0. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2439
+#: OOps/ugrw1.c:2426
 msgid "zkcl first > last. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2461
+#: OOps/ugrw1.c:2448
 msgid "No za space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2487
+#: OOps/ugrw1.c:2474
 msgid "zar index > isizea. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2491
+#: OOps/ugrw1.c:2478
 msgid "zar index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2523
+#: OOps/ugrw1.c:2510
 msgid "zarg index > isizea. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2528
+#: OOps/ugrw1.c:2515
 msgid "zarg index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2559 OOps/ugrw1.c:2590
+#: OOps/ugrw1.c:2546 OOps/ugrw1.c:2577
 msgid "zaw index > isizea. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2562 OOps/ugrw1.c:2593
+#: OOps/ugrw1.c:2549 OOps/ugrw1.c:2580
 msgid "zaw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2646
-msgid "zamod kzamod > isizea. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2678
-msgid "zacl first or last > isizea. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2682
-msgid "zacl first or last < 0. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2687
-msgid "zacl first > last. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2819
-msgid "printk not initialised"
-msgstr "printk: not initialized"
-
-#: OOps/ugrw1.c:2837
-#, c-format
-msgid "time %11.5f: "
-msgstr ""
-
-#: OOps/ugrw1.c:2898
-msgid "printks param 1 was not a \"quoted string\""
-msgstr ""
-
-#: OOps/ugrw1.c:3114
-msgid "printks not initialised"
-msgstr "printks: not initialized"
-
-#: OOps/ugrw1.c:3245
-msgid "inz index > isizea. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:3247
-msgid "inz index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:3281 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
-msgid "outz index > isizea. No output"
-msgstr ""
-
-#: OOps/ugrw1.c:3283 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
-msgid "outz index < 0. No output."
-msgstr ""
-
-#: OOps/ugrw2.c:283
-#, c-format
-msgid "Illegal resonk iscl value, %f"
-msgstr ""
-
-#: OOps/vdelay.c:132 OOps/vdelay.c:377 OOps/vdelay.c:437 OOps/vdelay.c:503
-#: OOps/vdelay.c:569 OOps/vdelay.c:648 OOps/vdelay.c:727
-msgid "vdelay: not initialised"
-msgstr "vdelay: not initialized"
-
-#: OOps/vdelay.c:234
-msgid "vdelay3: not initialised"
-msgstr "vdelay3: not initialized"
-
-#: OOps/vdelay.c:736
-msgid "Wrong input count in multitap\n"
-msgstr ""
-
-#: OOps/vdelay.c:779
-msgid "multitap: not initialised"
-msgstr "multitap: not initialized"
-
-#: OOps/vdelay.c:899
-msgid "High frequency diffusion not in (0, 1)\n"
-msgstr ""
-
-#: OOps/vdelay.c:915
-#, c-format
-msgid "reverbx; Combs ftable must have %d time and %d gain values"
-msgstr ""
-
-#: OOps/vdelay.c:947
-#, c-format
-msgid "reverbx; Alpas ftable must have %d time and %d gain values"
-msgstr ""
-
-#: OOps/vdelay.c:1058
-msgid "High frequency diffusion>1\n"
-msgstr ""
-
-#: OOps/vdelay.c:1062
-msgid "High frequency diffusion<0\n"
-msgstr ""
-
-#: OOps/vdelay.c:1066
-msgid "Non positive reverb time\n"
-msgstr ""
-
-#: OOps/vdelay.c:1124
-msgid "reverbx: not initialised"
-msgstr "reverbx: not initialized"
-
-#: Opcodes/ambicode1.c:82
-msgid "The numbers of input and output arguments are not valid."
-msgstr ""
-
-#: Opcodes/ambicode1.c:165
-msgid "The number of input arguments is not valid."
-msgstr ""
-
-#: Opcodes/ambicode1.c:169
-msgid "The isetup value should be between 1 and 5."
-msgstr ""
-
-#: Opcodes/ambicode1.c:195
-msgid "The output channel count does not match the isetup value."
-msgstr ""
-
-#: Opcodes/ambicode.c:49
-msgid "bformenc is deprecated; use bformenc1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:88
-msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
-msgstr ""
-
-#: Opcodes/ambicode.c:287
-msgid "bformdec is deprecated; use bformdec1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:291
-msgid "Wrong number of input arguments!"
-msgstr ""
-
-#: Opcodes/ambicode.c:299
-msgid "Wrong number of output cells! There must be 2 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:344
-msgid "Wrong number of output cells! There must be 4 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
-msgid "Wrong number of output cells! There must be 5 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
-msgid "Wrong number of output cells! There must be 8 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:575
-msgid "Not supported setup number!"
-msgstr ""
-
-#: Opcodes/babo.c:742
-#, c-format
-msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
-msgstr ""
-
-#: Opcodes/bilbar.c:83
-msgid "No data to continue"
-msgstr ""
-
-#: Opcodes/bilbar.c:109
-msgid "Ends must be clamped(1), pivoting(2) or free(3)"
-msgstr ""
-
-#: Opcodes/biquad.c:599
-msgid "vco: not initialised"
-msgstr "vco: not initialized"
-
-#: Opcodes/bowedbar.c:53
-#, c-format
-msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
-msgstr ""
-
-#: Opcodes/bowedbar.c:98
-msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
-msgstr ""
-
-#: Opcodes/clfilt.c:53
-msgid "filter type not lowpass or highpass in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:59
-#, c-format
-msgid "filter kind, %d, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:63
-#, c-format
-msgid "number of poles, %f, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:69
-#, c-format
-msgid "odd number of poles chosen in clfilt, rounded to %d"
-msgstr ""
-
-#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
-#, c-format
-msgid "passband ripple must be positive in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
-#, c-format
-msgid "passband ripple must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
-#, c-format
-msgid "stopband attenuation must be negative in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
-#, c-format
-msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
-msgid "Lowpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
-#: Opcodes/clfilt.c:383
-msgid "code error, ikind out of range"
-msgstr ""
-
-#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
-msgid "Highpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
-msgid "code error, ihilo out of range"
-msgstr ""
-
-#: Opcodes/control.c:40
-msgid "control: failed to allocate globals"
-msgstr ""
-
-#: Opcodes/control.c:56
-#, c-format
-msgid "Closing down wish(%d)\n"
-msgstr ""
-
-#: Opcodes/control.c:202
-#, c-format
-msgid "Slider %d set to %s\n"
-msgstr ""
-
-#: Opcodes/control.c:207
-#, c-format
-msgid "Unknown control %d"
-msgstr ""
-
-#: Opcodes/cpumeter.c:77
-#, c-format
-msgid "Failed to open /proc/stat: %s"
-msgstr ""
-
-#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
-#: Opcodes/cpumeter.c:151
-msgid "failed /proc/stat read"
-msgstr ""
-
-#: Opcodes/crossfm.c:34
-msgid "crossfm: ftable not found"
-msgstr ""
-
-#: Opcodes/date.c:68
-msgid "dates: buffer overflow"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/dssi4cs.c:823
-msgid "DSSI4CS: Not initialised or wrong argument types."
-msgstr "DSSI4CS: Not initialized or wrong argument types."
-
-#: Opcodes/dssi4cs/src/load.c:120
-#, c-format
-msgid "Failed to load plugin \"%s\": %s"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:155
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\": "
-"%s.\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:161
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\".\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:176
-#, c-format
-msgid "Unable to find label \"%s\" in plugin library file \"%s\"."
-msgstr ""
-
-#: Opcodes/fareygen.c:140
-msgid "insufficient arguments for fareytable"
-msgstr ""
-
-#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
-#, c-format
-msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:256
-#, c-format
-msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
-#, c-format
-msgid "Farey: Destination dft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
-#, c-format
-msgid "Farey: Source sft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:306
-msgid "Farey: Filter type < 1"
-msgstr ""
-
-#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
-#, c-format
-msgid "Table no. < 1 sft=%.2f"
-msgstr ""
-
-#: Opcodes/filter.c:187 Opcodes/filter.c:225
-msgid "Filter order out of bounds: (1 <= nb < 51, 0 <= na <= 50)"
-msgstr ""
-
-#: Opcodes/filter.c:672
-msgid "too many iterations in laguer"
-msgstr ""
-
-#: Opcodes/flanger.c:188
-msgid "wguide2 xfreq1 and xfreq2 arguments must be both a-rate or k and i-rate"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:195
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:149
-msgid "error allocating fluid engine\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:203
-#, c-format
-msgid ""
-"Created fluidEngine %d with sampling rate = %f, chorus %s, reverb %s, "
-"channels %d, polyphony %d.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:230
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:392
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:553
-#, c-format
-msgid "Illegal Engine Number: %i.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:238
-#, c-format
-msgid "Loading SoundFont : %s.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:244
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:208
-#, c-format
-msgid "fluid: unable to load %s"
-msgstr "fluid: unable to load %s"
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:262
-#, c-format
-msgid "SoundFont: %3d  Bank: %3d  Preset: %3d  %s\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:483
-#, c-format
-msgid ""
-"result: %d \n"
-" Note off: c:%3d k:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:491
-#, c-format
-msgid ""
-"result: %d \n"
-"Note on: c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:496
-#, c-format
-msgid "Key pressure (not handled): c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:504
-#, c-format
-msgid "Result: %d Control change: c:%3d c:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:511
-#, c-format
-msgid "Result: %d Program change: c:%3d p:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:524
-#, c-format
-msgid "Result: %d, Pitch bend:     c:%d b:%d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:530
-#, c-format
-msgid "System exclusive (not handled): c:%3d v1:%3d v2:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:562
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:577
-msgid "Illegal Interpolation Method: Must be either 0, 1, 4, or 7.\n"
-msgstr ""
-
-#: Opcodes/fm4op.c:165
-msgid "No table for VibWaveato"
-msgstr ""
-
-#: Opcodes/fm4op.c:184
-msgid "No table for FM4Op"
-msgstr ""
-
-#: Opcodes/follow.c:38
-msgid "follow - zero length!"
-msgstr ""
-
-#: Opcodes/fout.c:60
-#, c-format
-msgid "Closing file '%s'...\n"
-msgstr ""
-
-#: Opcodes/fout.c:102
-msgid "invalid file handle"
-msgstr ""
-
-#: Opcodes/fout.c:109 Opcodes/fout.c:421
-msgid "invalid file name"
-msgstr ""
-
-#: Opcodes/fout.c:166
-#, c-format
-msgid "error opening file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:193
-#, c-format
-msgid "error opening sound file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:430
-#, c-format
-msgid "cannot close '%s': not found in list of open files"
-msgstr "can't close '%s': not found in list of open files"
-
-#: Opcodes/fout.c:441
-#, c-format
-msgid "cannot close file #%d: not a valid handle"
-msgstr "can't close file #%d: not a valid handle"
-
-#: Opcodes/fout.c:448
-#, c-format
-msgid "file #%d (%s) is in use, will be closed when released"
-msgstr ""
-
-#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
-msgid "fouti: invalid file handle"
-msgstr ""
-
-#: Opcodes/freeverb.c:258
-msgid "freeverb: not initialised"
-msgstr "freeverb: not initialized"
-
-#: Opcodes/ftconv.c:156
-msgid "ftconv: invalid number of channels"
-msgstr ""
-
-#: Opcodes/ftconv.c:161
-msgid "ftconv: invalid impulse response partition length"
-msgstr ""
-
-#: Opcodes/ftconv.c:175
-msgid "ftconv: invalid length, or insufficient IR data for convolution"
-msgstr ""
-
-#: Opcodes/ftconv.c:193
-msgid "ftconv: skipped non-zero samples, impulse response may be truncated\n"
-msgstr ""
-
-#: Opcodes/ftconv.c:289
-msgid "ftconv: not initialised"
-msgstr "ftconv: not initialized"
-
-#: Opcodes/ftgen.c:69 Opcodes/ftgen.c:182
-#, c-format
-msgid "Error deleting ftable %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:136 Opcodes/signalflowgraph.cpp:895
-msgid "ftgen string arg not allowed"
-msgstr ""
-
-#: Opcodes/ftgen.c:155 Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
-msgid "ftgen error"
-msgstr ""
-
-#: Opcodes/ftgen.c:179
-#, c-format
-msgid "Invalid table number: %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:347
-msgid "ftload: error allocating ftable"
-msgstr ""
-
-#: Opcodes/ftgen.c:349
-msgid "ftload: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:351
-msgid "ftload: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:354
-msgid "ftload: incorrect file"
-msgstr ""
-
-#: Opcodes/ftgen.c:467
-msgid "ftsave: Bad table number. Saving is possible only for existing tables."
-msgstr ""
-
-#: Opcodes/ftgen.c:470
-msgid "ftsave: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:472
-msgid "ftsave: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:474
-msgid "ftsave: failed to write file"
-msgstr "ftsave: failed to write file"
-
-#: Opcodes/gab/gab.c:111
-msgid "fastab: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
-msgid "tabw off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
-msgid "tab off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:185
-msgid "tab_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:192
-#, c-format
-msgid "tab_i off end: table number: %d\n"
-msgstr ""
-
-#: Opcodes/gab/gab.c:204
-msgid "tabw_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:211
-msgid "tabw_i off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:249
-msgid "tab_init: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:318
-msgid "printi parameter was not a \"quoted string\""
-msgstr ""
-
-#: Opcodes/gab/gab.c:425
-msgid "adsynt2: wavetable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:437
-msgid "adsynt2: freqtable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:442
-msgid "adsynt2: partial count is greater than freqtable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:451
-msgid "adsynt2: amptable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:456
-msgid "adsynt2: partial count is greater than amptable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:501
-msgid "adsynt2: not initialised"
-msgstr ""
-
-#: Opcodes/gab/gab.c:743
-msgid "max_k: invalid imaxflag value"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:70
-msgid "hvs1: a line segment must be delimited by 2 points at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:152
-msgid "hvs2: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:248
-msgid "hvs3: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:390
-msgid "vphaseseg: the first function is invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
-msgid "vphaseseg: invalid num. of elements"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:416
-msgid "vphaseseg: function invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
-msgid "vtable1: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
-msgid "copyTabElems: incorrect destination table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
-msgid ""
-"copyTabElems: destination table too short or number of elements to copy too "
-"big"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
-msgid "copyTabElems: incorrect source table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
-msgid ""
-"copyTabElems: source table size less than the number of elements to copy"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
-msgid "copyTabElems: source table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
-msgid "copyTabElems: destination table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:347
-msgid "inrg: audio input is not enabled"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:362
-msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr "inrg: channel number can't be < 1 (1 is the first channel)"
-
-#: Opcodes/gab/newgabopc.c:403
-msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr "outrg: channel number can't be < 1 (1 is the first channel)"
-
-#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
-#: Opcodes/gab/newgabopc.c:672
-msgid "invalid function"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:443
-msgid "lposc: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:577
-msgid "lposcil: no sample rate stored in function assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:674
-msgid "lposcil: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
-#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
-#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
-msgid "illegal channel"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
-#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
-#, c-format
-msgid "illegal control number at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:76
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d.  When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
-#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
-#: Opcodes/midiops3.c:347
-#, c-format
-msgid "illegal initvalue at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
-msgid "sliderXtable: zero is illegal in exponential operations"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:315
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d. When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
-#: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
-#: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
-msgid "illegal midi channel"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:43
-msgid "tabmorph: invalid table number"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:47
-msgid "tabmorph: all tables must have the same length!"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:35
-msgid "mtablei: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
-#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
-msgid "mtable: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:187
-msgid "mtabi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:254
-msgid "mtablewi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
-#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
-#: Opcodes/gab/vectorial.c:408
-msgid "mtabw: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:350
-msgid "mtabwi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:382
-msgid "mtablew: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
-#, c-format
-msgid "vadd_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:473
-msgid "vadd_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:500
-msgid "vadd: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:532
-msgid "vmult_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:559
-msgid "vmult: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:575
-#, c-format
-msgid "vpow_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:592
-msgid "vpow_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:620
-msgid "vpow: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:636
-#, c-format
-msgid "vexp_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:652
-msgid "vexp_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:679
-msgid "vexp: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:697
-#, c-format
-msgid "vectorsop: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:702
-#, c-format
-msgid "vectorsop: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:742
-msgid "vcopy: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:760
-msgid "vcopy: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:787
-#, c-format
-msgid "vcopy_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:792
-#, c-format
-msgid "vcopy_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:814
-msgid "vcopy_i: ifn1 length exceeded"
+#: OOps/ugrw1.c:2633
+msgid "zamod kzamod > isizea. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:831
-msgid "vcopy_i: ifn2 length exceeded"
+#: OOps/ugrw1.c:2665
+msgid "zacl first or last > isizea. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:870
-msgid "vaddv: ifn1 length exceeded"
+#: OOps/ugrw1.c:2669
+msgid "zacl first or last < 0. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:889
-msgid "vaddv: ifn2 length exceeded"
+#: OOps/ugrw1.c:2674
+msgid "zacl first > last. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:915
-#, c-format
-msgid "vaddv_i: ifn1 invalid table number %i"
-msgstr ""
+#: OOps/ugrw1.c:2806
+msgid "printk not initialised"
+msgstr "printk: not initialized"
 
-#: Opcodes/gab/vectorial.c:920
+#: OOps/ugrw1.c:2824
 #, c-format
-msgid "vaddv_i: ifn2 invalid table number %i"
+msgid "time %11.5f: "
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:942
-msgid "vaddv_i: ifn1 length exceeded"
+#: OOps/ugrw1.c:2885
+msgid "printks param 1 was not a \"quoted string\""
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:960
-msgid "vaddv_i: ifn2 length exceeded"
+#: OOps/ugrw1.c:3101
+msgid "printks not initialised"
+msgstr "printks: not initialized"
+
+#: OOps/ugrw1.c:3232
+msgid "inz index > isizea. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:991
-msgid "vsubv: ifn1 length exceeded"
+#: OOps/ugrw1.c:3234
+msgid "inz index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1010
-msgid "vsubv: ifn2 length exceeded"
+#: OOps/ugrw1.c:3268 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
+msgid "outz index > isizea. No output"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1037
-#, c-format
-msgid "vsubv_i: ifn1 invalid table number %i"
+#: OOps/ugrw1.c:3270 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
+msgid "outz index < 0. No output."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1042
+#: OOps/ugrw2.c:283
 #, c-format
-msgid "vsubv_i: ifn2 invalid table number %i"
+msgid "Illegal resonk iscl value, %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1064
-msgid "vsubv_i: ifn1 length exceeded"
-msgstr ""
+#: OOps/vdelay.c:132 OOps/vdelay.c:377 OOps/vdelay.c:437 OOps/vdelay.c:503
+#: OOps/vdelay.c:569 OOps/vdelay.c:648 OOps/vdelay.c:727
+msgid "vdelay: not initialised"
+msgstr "vdelay: not initialized"
 
-#: Opcodes/gab/vectorial.c:1082
-msgid "vsubv_i: ifn2 length exceeded"
-msgstr ""
+#: OOps/vdelay.c:234
+msgid "vdelay3: not initialised"
+msgstr "vdelay3: not initialized"
 
-#: Opcodes/gab/vectorial.c:1119
-msgid "vmultv: ifn1 length exceeded"
+#: OOps/vdelay.c:738
+msgid "Wrong input count in multitap\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1138
-msgid "vmultv: ifn2 length exceeded"
+#: OOps/vdelay.c:781
+msgid "multitap: not initialised"
+msgstr "multitap: not initialized"
+
+#: OOps/vdelay.c:901
+msgid "High frequency diffusion not in (0, 1)\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1165
+#: OOps/vdelay.c:917
 #, c-format
-msgid "vmultv_i: ifn1 invalid table number %i"
+msgid "reverbx; Combs ftable must have %d time and %d gain values"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1170
+#: OOps/vdelay.c:949
 #, c-format
-msgid "vmultv_i: ifn2 invalid table number %i"
+msgid "reverbx; Alpas ftable must have %d time and %d gain values"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1192
-msgid "vmultv_i: ifn1 length exceeded"
+#: OOps/vdelay.c:1062
+msgid "High frequency diffusion>1\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1209
-msgid "vmultv_i: ifn2 length exceeded"
+#: OOps/vdelay.c:1066
+msgid "High frequency diffusion<0\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1246
-msgid "vdivv: ifn1 length exceeded"
+#: OOps/vdelay.c:1070
+msgid "Non positive reverb time\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1265
-msgid "vdivv: ifn2 length exceeded"
-msgstr ""
+#: OOps/vdelay.c:1128
+msgid "reverbx: not initialised"
+msgstr "reverbx: not initialized"
 
-#: Opcodes/gab/vectorial.c:1292
-#, c-format
-msgid "vdivv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode1.c:82
+msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1297
-#, c-format
-msgid "vdivv_i: ifn2 invalid table number %i"
+#: Opcodes/ambicode1.c:167
+msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1319
-msgid "vdivv_i: ifn1 length exceeded"
+#: Opcodes/ambicode1.c:171
+msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1337
-msgid "vdivv_i: ifn2 length exceeded"
+#: Opcodes/ambicode1.c:197
+msgid "The output channel count does not match the isetup value."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1374
-msgid "vpowv: ifn1 length exceeded"
+#: Opcodes/ambicode.c:49
+msgid "bformenc is deprecated; use bformenc1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1393
-msgid "vpowv: ifn2 length exceeded"
+#: Opcodes/ambicode.c:88
+msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1420
-#, c-format
-msgid "vpowv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:287
+msgid "bformdec is deprecated; use bformdec1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1425
-#, c-format
-msgid "vpowv_i: ifn2 invalid table number %i"
+#: Opcodes/ambicode.c:291
+msgid "Wrong number of input arguments!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1447
-msgid "vpowv_i: ifn1 length exceeded"
+#: Opcodes/ambicode.c:299
+msgid "Wrong number of output cells! There must be 2 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1464
-msgid "vpowv_i: ifn2 length exceeded"
+#: Opcodes/ambicode.c:344
+msgid "Wrong number of output cells! There must be 4 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1501
-msgid "vexpv: ifn1 length exceeded"
+#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
+msgid "Wrong number of output cells! There must be 5 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1520
-msgid "vexpv: ifn2 length exceeded"
+#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
+msgid "Wrong number of output cells! There must be 8 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1547
-#, c-format
-msgid "vexpv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:575
+msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1552
+#: Opcodes/babo.c:742
 #, c-format
-msgid "vexpv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1574
-msgid "vexpv_i: ifn1 length exceeded"
+msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1592
-msgid "vexpv_i: ifn2 length exceeded"
+#: Opcodes/bilbar.c:83
+msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1629
-msgid "vmap: Error: ifn1 and ifn2 can not be the same"
+#: Opcodes/bilbar.c:109
+msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1634
-#, c-format
-msgid "vmap: ifn1 invalid table number %i"
-msgstr ""
+#: Opcodes/biquad.c:599
+msgid "vco: not initialised"
+msgstr "vco: not initialized"
 
-#: Opcodes/gab/vectorial.c:1639
+#: Opcodes/bowedbar.c:53
 #, c-format
-msgid "vmap: ifn2 invalid table number %i"
+msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1661
-msgid "vmap: ifn1 length exceeded"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1678
-msgid "vmap: ifn2 length exceeded"
+#: Opcodes/cellular.c:49 Opcodes/cellular.c:55
+msgid "cell: invalid num of elements"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1698
-msgid "vectorop: invalid num of elements"
+#: Opcodes/cellular.c:51
+msgid "cell: invalid output table"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1727
-msgid "vport: invalid table length or num of elements"
+#: Opcodes/cellular.c:58
+msgid "cell: invalid initial state table"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1730
-msgid "vport: invalid table"
+#: Opcodes/cellular.c:63
+msgid "cell: invalid rule table"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1735
-msgid "vport: invalid init table length or num of elements"
+#: Opcodes/clfilt.c:53
+msgid "filter type not lowpass or highpass in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1738
-msgid "vport: invalid init table"
+#: Opcodes/clfilt.c:59
+#, c-format
+msgid "filter kind, %d, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1875
+#: Opcodes/clfilt.c:63
 #, c-format
-msgid "vrandh: Seeding from current time %lu\n"
+msgid "number of poles, %f, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1888
-msgid "vrandh: Invalid table."
+#: Opcodes/clfilt.c:69
+#, c-format
+msgid "odd number of poles chosen in clfilt, rounded to %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1891
-msgid "vrandh: idstoffset is greater than table length."
+#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
+#, c-format
+msgid "passband ripple must be positive in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1896
-msgid "randh: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
+#, c-format
+msgid "passband ripple must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1975
+#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
 #, c-format
-msgid "vrandi: Seeding from current time %lu\n"
+msgid "stopband attenuation must be negative in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1987
-msgid "vrandi: Invalid table."
+#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
+#, c-format
+msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1990
-msgid "vrandi: idstoffset is greater thantable length."
+#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
+msgid "Lowpass Elliptical not implemented yet. Sorry!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1995
-msgid "vrandi: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
+#: Opcodes/clfilt.c:383
+msgid "code error, ikind out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
-#: Opcodes/gab/vectorial.c:2091
-msgid "vecdelay: invalid num of elements"
+#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
+msgid "Highpass Elliptical not implemented yet. Sorry!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2079
-msgid "vecdly: invalid output table"
+#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
+msgid "code error, ihilo out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2086
-msgid "vecdly: invalid input table"
+#: Opcodes/control.c:40
+msgid "control: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2093
-msgid "vecdly: invalid delay table"
+#: Opcodes/control.c:56
+#, c-format
+msgid "Closing down wish(%d)\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2138
-msgid "vecdly: not initialised"
-msgstr "vecdly: not initialized"
-
-#: Opcodes/gab/vectorial.c:2181
-msgid "vlinseg/vexpseg: invalid num. of elements"
+#: Opcodes/control.c:211
+#, c-format
+msgid "Slider %d set to %s\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr "tableseg: not initialized"
-
-#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr "tablexseg: not initialized"
-
-#: Opcodes/gab/vectorial.c:2406
-#
-msgid "vdelayk: not initialised"
-msgstr "vdelayk: not initialized"
-
-#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
-msgid "cella: invalid num of elements"
+#: Opcodes/control.c:216
+#, c-format
+msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2441
-msgid "cella: invalid output table"
+#: Opcodes/cpumeter.c:77
+#, c-format
+msgid "Failed to open /proc/stat: %s"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2448
-msgid "cella: invalid initial state table"
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
+msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2452
-msgid "cella: invalid rule table"
+#: Opcodes/crossfm.c:34
+msgid "crossfm: ftable not found"
 msgstr ""
 
 #: Opcodes/grain4.c:59
@@ -6602,7 +5731,7 @@ msgstr ""
 "can't load right data file, exiting\n"
 "\n"
 
-#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1259
 msgid ""
 "\n"
 "WARNING: fades are overlapping: this could lead to noise: reduce fade size "
@@ -6638,29 +5767,29 @@ msgstr ""
 msgid "pvsifd: unsupported value for iwintype\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:426
+#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:429
 #, c-format
 msgid "imageload: cannot open image %s.\n"
 msgstr "imageload: can't open image %s.\n"
 
-#: Opcodes/imageOpcodes.c:111
+#: Opcodes/imageOpcodes.c:108 Opcodes/imageOpcodes.c:114
 #, c-format
 msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
-#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
-#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:122 Opcodes/imageOpcodes.c:129
+#: Opcodes/imageOpcodes.c:168 Opcodes/imageOpcodes.c:177
+#: Opcodes/imageOpcodes.c:191 Opcodes/imageOpcodes.c:294
+#: Opcodes/imageOpcodes.c:301 Opcodes/imageOpcodes.c:314
 msgid "imageload: out of memory.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:283
+#: Opcodes/imageOpcodes.c:286
 #, c-format
 msgid "imageload: cannot open image %s for writing.\n"
 msgstr "imageload: can't open image %s for writing.\n"
 
-#: Opcodes/imageOpcodes.c:392
+#: Opcodes/imageOpcodes.c:395
 msgid "Cannot allocate memory.\n"
 msgstr "Can't allocate memory.\n"
 
@@ -6704,29 +5833,29 @@ msgstr ""
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:892
+#: Opcodes/jacko.cpp:894
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:895
+#: Opcodes/jacko.cpp:897
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:911
+#: Opcodes/jacko.cpp:913
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
-#: Opcodes/jacko.cpp:1241
+#: Opcodes/jacko.cpp:957 Opcodes/jacko.cpp:1064 Opcodes/jacko.cpp:1171
+#: Opcodes/jacko.cpp:1243
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr "Couldn't create Jack port \"%s\".\n"
 
-#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
-#: Opcodes/jacko.cpp:1255
+#: Opcodes/jacko.cpp:971 Opcodes/jacko.cpp:1079 Opcodes/jacko.cpp:1186
+#: Opcodes/jacko.cpp:1257
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr "Couldn't create Jack connection from \"%s\" to \"%s\": status %d.\n"
@@ -6779,8 +5908,8 @@ msgstr ""
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
-#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:120
+#: Opcodes/pvlock.c:322 Opcodes/pvsbasic.c:463
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
@@ -6809,15 +5938,36 @@ msgstr ""
 msgid "splitrig: incorrect table number"
 msgstr ""
 
-#: Opcodes/midiops2.c:514 Opcodes/midiops2.c:529 Opcodes/midiops2.c:548
+#: Opcodes/midiops2.c:339 Opcodes/midiops2.c:377 Opcodes/midiops2.c:409
+#: Opcodes/midiops2.c:458 Opcodes/midiops2.c:493 Opcodes/midiops2.c:535
+#: Opcodes/midiops2.c:550 Opcodes/midiops2.c:569
+msgid "illegal midi channel"
+msgstr ""
+
+#: Opcodes/midiops2.c:532 Opcodes/midiops2.c:547 Opcodes/midiops2.c:566
 msgid "value out of range"
 msgstr ""
 
-#: Opcodes/midiops2.c:580
+#: Opcodes/midiops2.c:598
 #, c-format
 msgid "invalid channel number: %d"
 msgstr ""
 
+#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
+#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
+msgid "illegal channel"
+msgstr ""
+
+#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
+#, c-format
+msgid "illegal control number at position n.%d"
+msgstr ""
+
+#: Opcodes/midiops3.c:64 Opcodes/midiops3.c:168 Opcodes/midiops3.c:347
+#, c-format
+msgid "illegal initvalue at position n.%d"
+msgstr ""
+
 #: Opcodes/midiops3.c:333 Opcodes/midiops3.c:428
 #, c-format
 msgid "illegal msb control number at position n.%d"
@@ -6856,12 +6006,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
+#: Opcodes/mp3in.c:101 Opcodes/mp3in.c:242
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:140
+#: Opcodes/mp3in.c:148
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7015,6 +6165,10 @@ msgstr ""
 msgid "vco2init: invalid max table size"
 msgstr ""
 
+#: Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
+msgid "ftgen error"
+msgstr ""
+
 #: Opcodes/oscbnk.c:1757
 msgid "vco2init: invalid source ftable"
 msgstr ""
@@ -7071,72 +6225,72 @@ msgstr ""
 msgid "rbjeq: invalid filter type"
 msgstr ""
 
-#: Opcodes/OSC.c:122
+#: Opcodes/OSC.c:126
 msgid "Too many arguments to OSCsend"
 msgstr ""
 
-#: Opcodes/OSC.c:125
+#: Opcodes/OSC.c:129
 msgid "No a-rate arguments allowed"
 msgstr ""
 
-#: Opcodes/OSC.c:163 Opcodes/OSC.c:168 Opcodes/OSC.c:173 Opcodes/OSC.c:183
-#: Opcodes/OSC.c:190 Opcodes/OSC.c:195 Opcodes/OSC.c:206 Opcodes/OSC.c:214
-#: Opcodes/OSC.c:232
+#: Opcodes/OSC.c:167 Opcodes/OSC.c:172 Opcodes/OSC.c:177 Opcodes/OSC.c:187
+#: Opcodes/OSC.c:194 Opcodes/OSC.c:199 Opcodes/OSC.c:210 Opcodes/OSC.c:218
+#: Opcodes/OSC.c:236
 msgid "String not expected"
 msgstr ""
 
-#: Opcodes/OSC.c:202
+#: Opcodes/OSC.c:206
 msgid "Not a string when needed"
 msgstr ""
 
-#: Opcodes/OSC.c:219
+#: Opcodes/OSC.c:223
 msgid "Time stamp is two values"
 msgstr ""
 
-#: Opcodes/OSC.c:240
+#: Opcodes/OSC.c:244
 #, c-format
 msgid "ftable %.2f does not exist"
 msgstr "ftable %.2f doesn't exist"
 
-#: Opcodes/OSC.c:249
+#: Opcodes/OSC.c:253
 #, c-format
 msgid "Unknown OSC type %c\n"
 msgstr ""
 
-#: Opcodes/OSC.c:428
+#: Opcodes/OSC.c:436
 msgid "OSC: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/OSC.c:446
+#: Opcodes/OSC.c:455
 msgid "OSCrecv is already running"
 msgstr ""
 
-#: Opcodes/OSC.c:589
+#: Opcodes/OSC.c:599
 msgid "OSC deinitiatised\n"
 msgstr "OSC deinitiatized\n"
 
-#: Opcodes/OSC.c:613
+#: Opcodes/OSC.c:623
 #, c-format
 msgid "OSC listener #%d started on port %s\n"
 msgstr ""
 
-#: Opcodes/OSC.c:663
+#: Opcodes/OSC.c:673
 msgid "OSC not running"
 msgstr ""
 
-#: Opcodes/OSC.c:667
+#: Opcodes/OSC.c:677
 msgid "invalid handle"
 msgstr ""
 
-#: Opcodes/OSC.c:674
+#: Opcodes/OSC.c:684
 msgid "invalid number of arguments"
 msgstr ""
 
-#: Opcodes/OSC.c:695 Opcodes/OSC.c:700
+#: Opcodes/OSC.c:705 Opcodes/OSC.c:710
 msgid "argument list inconsistent with format string"
 msgstr ""
 
-#: Opcodes/OSC.c:704
+#: Opcodes/OSC.c:714
 msgid "invalid type"
 msgstr ""
 
@@ -7156,11 +6310,11 @@ msgstr ""
 msgid "partikkel: "
 msgstr ""
 
-#: Opcodes/partikkel.c:806
+#: Opcodes/partikkel.c:807
 msgid "partikkelsync: opcode id needs to be a non-zero integer"
 msgstr ""
 
-#: Opcodes/partikkel.c:810 Opcodes/partikkel.c:816
+#: Opcodes/partikkel.c:811 Opcodes/partikkel.c:817
 msgid "partikkelsync: could not find opcode id"
 msgstr "partikkelsync: couldn't find opcode id"
 
@@ -7315,36 +6469,36 @@ msgid ""
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1733
+#: Opcodes/pitch.c:1598
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1784
+#: Opcodes/pitch.c:1649
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
+#: Opcodes/pitch.c:1699 Opcodes/pitch.c:1842
 msgid "Error: transeg not initialised (krate)\n"
 msgstr "Error: transeg not initialized (krate)\n"
 
-#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
+#: Opcodes/pitch.c:1734 Opcodes/pitch.c:1892
 msgid "transeg: not initialised (arate)\n"
 msgstr "transeg: not initialized (arate)\n"
 
-#: Opcodes/pitch.c:1924
+#: Opcodes/pitch.c:1789
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2294
+#: Opcodes/pitch.c:2159
 msgid "median: not initialised (arate)\n"
 msgstr "median: not initialized (arate)\n"
 
-#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
+#: Opcodes/pitch.c:2163 Opcodes/pitch.c:2210
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2341
+#: Opcodes/pitch.c:2206
 msgid "median: not initialised (krate)\n"
 msgstr "median: not initialized (krate)\n"
 
@@ -7371,17 +6525,6 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr ""
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
-#: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
-#: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
-#: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
-msgid "Unsafe to have same fsig as in and out"
-msgstr ""
-
-#: Opcodes/ppp.c:36 Opcodes/pvslock.c:36
-msgid "pvslock: signal format must be amp-phase or amp-freq."
-msgstr ""
-
 #: Opcodes/psynth.c:97 Opcodes/psynth.c:253
 msgid "psynth: first input not in TRACKS format\n"
 msgstr ""
@@ -7545,7 +6688,14 @@ msgstr "pvcross: not initialized"
 msgid "invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/pvlock.c:490
+#: Opcodes/pvlock.c:480 Opcodes/pvsband.c:46 Opcodes/pvsbasic.c:578
+#: Opcodes/pvsbasic.c:883 Opcodes/pvsbasic.c:1083 Opcodes/pvsbasic.c:1183
+#: Opcodes/pvsbasic.c:1398 Opcodes/pvsbasic.c:1598 Opcodes/pvsbasic.c:1763
+#: Opcodes/pvslock.c:20
+msgid "Unsafe to have same fsig as in and out"
+msgstr ""
+
+#: Opcodes/pvlock.c:492
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7584,75 +6734,75 @@ msgstr "pvsfwrite: couldn't write data\n"
 msgid "pvsdiskin: could not open file %s\n"
 msgstr "pvsdiskin: couldn't open file %s\n"
 
-#: Opcodes/pvsbasic.c:606
+#: Opcodes/pvsbasic.c:609
 msgid "pvsfreeze: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:679
+#: Opcodes/pvsbasic.c:682
 msgid "pvsosc does not work while sliding"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:910
+#: Opcodes/pvsbasic.c:913
 msgid "pvsmooth: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1020
+#: Opcodes/pvsbasic.c:1023
 msgid "pvsmix: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1070
+#: Opcodes/pvsbasic.c:1073
 msgid "pvsmix: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1083
+#: Opcodes/pvsbasic.c:1086
 msgid "pvsfilter: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1156
+#: Opcodes/pvsbasic.c:1159
 msgid "pvsfilter: not initialised"
 msgstr "pvsfilter: not initialized"
 
-#: Opcodes/pvsbasic.c:1159
+#: Opcodes/pvsbasic.c:1162
 msgid "pvsfilter: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1372
+#: Opcodes/pvsbasic.c:1375
 msgid "pvscale: not initialised"
 msgstr "pvscale: not initialized"
 
-#: Opcodes/pvsbasic.c:1570
+#: Opcodes/pvsbasic.c:1575
 msgid "pvshift: not initialised"
 msgstr "pvshift: not initialized"
 
-#: Opcodes/pvsbasic.c:1741
+#: Opcodes/pvsbasic.c:1748
 msgid "pvswarp: not initialised"
 msgstr "pvswarp: not initialized"
 
-#: Opcodes/pvsbasic.c:1758
+#: Opcodes/pvsbasic.c:1765
 msgid "pvsblur does not work sliding yet"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1890
+#: Opcodes/pvsbasic.c:1897
 msgid "pvsblur: not initialised"
 msgstr "pvsblur: not initialized"
 
-#: Opcodes/pvsbasic.c:1925
+#: Opcodes/pvsbasic.c:1932
 msgid "pvstencil: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1933
+#: Opcodes/pvsbasic.c:1940
 msgid "pvstencil: ftable needs to equal the number of bins"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2001
+#: Opcodes/pvsbasic.c:2008
 msgid "pvstencil: not initialised"
 msgstr "pvstencil: not initialized"
 
-#: Opcodes/pvsbasic.c:2148
+#: Opcodes/pvsbasic.c:2158
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/pvsbasic.c:2161 Opcodes/pvsbasic.c:2201 Opcodes/tabvars.c:56
 #: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
 #: Opcodes/tabvars.c:181
 msgid "t-variable not initialised"
@@ -7695,6 +6845,10 @@ msgstr "pvsdemix : not initialized\n"
 msgid "pvsgendy: not initialised"
 msgstr "pvsgendy: not initialized"
 
+#: Opcodes/pvslock.c:36
+msgid "pvslock: signal format must be amp-phase or amp-freq."
+msgstr ""
+
 #: Opcodes/repluck.c:164
 #, c-format
 msgid "Reflection invalid (%f)\n"
@@ -7937,7 +7091,7 @@ msgstr ""
 "sfpreset: can't find any preset having prog number %d and bank number %d in "
 "SoundFont file \"%s\""
 
-#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2194
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
@@ -7957,15 +7111,15 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1992 Opcodes/sfont.c:1998
 msgid "Sfont: cannot use globals/"
 msgstr "Sfont: can't use globals/"
 
-#: Opcodes/sfont.c:1999
+#: Opcodes/sfont.c:2001
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2537
+#: Opcodes/sfont.c:2539
 msgid "error... could not create sfont globals\n"
 msgstr "error... couldn't create sfont globals\n"
 
@@ -7977,6 +7131,10 @@ msgstr ""
 msgid "inletf: signal format must be amp-phase or amp-freq."
 msgstr ""
 
+#: Opcodes/signalflowgraph.cpp:895
+msgid "ftgen string arg not allowed"
+msgstr ""
+
 #: Opcodes/signalflowgraph.cpp:921
 msgid "ftgenonce error"
 msgstr ""
@@ -8012,7 +7170,7 @@ msgstr ""
 msgid "crossfade longer than loop duration\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389 Opcodes/sndloop.c:661
+#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389
 msgid "function table not found\n"
 msgstr ""
 
@@ -8032,15 +7190,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr "pvsarp: not initialized\n"
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1071
+#: Opcodes/sndloop.c:1072
 msgid "pvsvoc: not initialised\n"
 msgstr "pvsvoc: not initialized\n"
 
-#: Opcodes/sndloop.c:1122
+#: Opcodes/sndloop.c:1123
 msgid "pvsmorph: not initialised\n"
 msgstr "pvsmorph: not initialized\n"
 
@@ -8060,30 +7218,30 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr "sndwarpst: not initialized"
 
-#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
-#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:315
+#: Opcodes/socksend.c:74 Opcodes/socksend.c:158 Opcodes/socksend.c:252
 #, c-format
 msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
-#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:321
+#: Opcodes/socksend.c:87 Opcodes/socksend.c:172 Opcodes/socksend.c:259
 msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:347
-#, c-format
-msgid "connect failed (%d)"
-msgstr ""
-
-#: Opcodes/sockrecv.c:360
+#: Opcodes/sockrecv.c:366
 msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
+#: Opcodes/socksend.c:127 Opcodes/socksend.c:216
 msgid "sendto failed"
 msgstr ""
 
+#: Opcodes/socksend.c:287
+#, c-format
+msgid "connect failed (%d)"
+msgstr ""
+
 #: Opcodes/space.c:165
 msgid "space: not initialised"
 msgstr "space: not initialized"
@@ -8438,20 +7596,36 @@ msgstr ""
 msgid "Min and max the same"
 msgstr ""
 
-#: Opcodes/uggab.c:424
+#: Opcodes/uggab.c:215
+msgid "table not found in poscil"
+msgstr ""
+
+#: Opcodes/uggab.c:234 Opcodes/uggab.c:261 Opcodes/uggab.c:290
+#: Opcodes/uggab.c:318
+#, fuzzy
+msgid "poscil: not initialised"
+msgstr "oscil: not initialized"
+
+#: Opcodes/uggab.c:365 Opcodes/uggab.c:412 Opcodes/uggab.c:460
+#: Opcodes/uggab.c:509
+#, fuzzy
+msgid "poscil3: not initialised"
+msgstr "oscil3: not initialized"
+
+#: Opcodes/uggab.c:589
 msgid "losc: no sample rate stored in function assuming=sr\n"
 msgstr ""
 
-#: Opcodes/uggab.c:556
+#: Opcodes/uggab.c:721
 #, c-format
 msgid "illegal reson iscl value: %f"
 msgstr ""
 
-#: Opcodes/uggab.c:579
+#: Opcodes/uggab.c:744
 msgid "loop cannot be zero"
 msgstr "loop can't be zero"
 
-#: Opcodes/uggab.c:1056 Opcodes/uggab.c:1098
+#: Opcodes/uggab.c:1221 Opcodes/uggab.c:1263
 msgid "vibrato(krate): not initialised"
 msgstr "vibrato(krate): not initialized"
 
@@ -8834,6 +8008,14 @@ msgstr ""
 msgid "vosim: not initialised"
 msgstr "vosim: not initialized"
 
+#: Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr "tableseg: not initialized"
+
+#: Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr "tablexseg: not initialized"
+
 #: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
@@ -8960,47 +8142,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:739
+#: Top/argdecode.c:77 util/srconv.c:740
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9008,7 +8190,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:749
+#: Top/argdecode.c:89 util/srconv.c:750
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9016,7 +8198,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:750
+#: Top/argdecode.c:91 util/srconv.c:751
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9076,7 +8258,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9084,7 +8266,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9149,7 +8331,7 @@ msgid "--nopeaks\t\tDo not write peak information"
 msgstr ""
 
 #: Top/argdecode.c:136
-msgid "--nodisplays\t\tsUppress all displays"
+msgid "--nodisplays\t\tSuppress all displays"
 msgstr ""
 
 #: Top/argdecode.c:137
@@ -9652,49 +8834,49 @@ msgstr ""
 msgid "error: orchestra and score name not allowed in .csoundrc"
 msgstr ""
 
-#: Top/cscorfns.c:276
+#: Top/cscorfns.c:277
 msgid "PMAX exceeded, string event truncated.\n"
 msgstr ""
 
-#: Top/cscorfns.c:663
+#: Top/cscorfns.c:666
 #, c-format
 msgid "%s found %d f event%s with non-zero p2\n"
 msgstr ""
 
-#: Top/cscorfns.c:664
+#: Top/cscorfns.c:667
 msgid "s"
 msgstr ""
 
-#: Top/cscorfns.c:767
+#: Top/cscorfns.c:770
 msgid "cscore: too many input files open"
 msgstr ""
 
-#: Top/cscorfns.c:805
+#: Top/cscorfns.c:810
 msgid "cscore: tried to set an unknown file pointer as the current file"
 msgstr ""
 
-#: Top/cscorfns.c:819
+#: Top/cscorfns.c:824
 msgid "csoundInitializeCscore: no input score given."
 msgstr ""
 
-#: Top/cscorfns.c:824
+#: Top/cscorfns.c:829 Top/cscorfns.c:858
 msgid "csoundInitializeCscore: no output score given."
 msgstr ""
 
-#: Top/cscorfns.c:852
+#: Top/cscorfns.c:889
 #, c-format
 msgid "cscoreFileOpen: error opening %s"
 msgstr ""
 
-#: Top/cscorfns.c:870
+#: Top/cscorfns.c:907
 msgid "cscoreFileClose: NULL file pointer\n"
 msgstr ""
 
-#: Top/cscorfns.c:882
+#: Top/cscorfns.c:919
 msgid "cscoreFileClose: fp not recorded\n"
 msgstr ""
 
-#: Top/cscorfns.c:888
+#: Top/cscorfns.c:925
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
@@ -9733,129 +8915,129 @@ msgstr ""
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
-#: Top/csmodule.c:638 Top/csmodule.c:646
+#: Top/csmodule.c:607 Top/csmodule.c:613 Top/csmodule.c:624 Top/csmodule.c:631
+#: Top/csmodule.c:637 Top/csmodule.c:645
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:696
+#: Top/csmodule.c:695
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:731
+#: Top/csmodule.c:730
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:737
+#: Top/csmodule.c:736
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:773
+#: Top/csmodule.c:772
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:796
+#: Top/csmodule.c:795
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:819
+#: Top/csmodule.c:818
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:918
+#: Top/csmodule.c:917
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1636 Top/csound.c:1656
+#: Top/csound.c:1640 Top/csound.c:1660
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1642
+#: Top/csound.c:1646
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1675
+#: Top/csound.c:1679
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1700
+#: Top/csound.c:1704
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1707
+#: Top/csound.c:1711
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1727
+#: Top/csound.c:1731
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1998
+#: Top/csound.c:2002
 msgid "WARNING: "
 msgstr ""
 
-#: Top/csound.c:2119
+#: Top/csound.c:2123
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2120
+#: Top/csound.c:2124
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2149 Top/csound.c:2185
+#: Top/csound.c:2153 Top/csound.c:2189
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2153 Top/csound.c:2189
+#: Top/csound.c:2157 Top/csound.c:2193
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2271
+#: Top/csound.c:2275
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2276 Top/csound.c:2310
+#: Top/csound.c:2280 Top/csound.c:2314
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2279 Top/csound.c:2313
+#: Top/csound.c:2283 Top/csound.c:2317
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2305
+#: Top/csound.c:2309
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2327
+#: Top/csound.c:2331
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2445
+#: Top/csound.c:2449
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2552
+#: Top/csound.c:2556
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2575
+#: Top/csound.c:2579
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2906
+#: Top/csound.c:2912
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr "Can't open /proc/cpuinfo. Support for RDTSC is not available.\n"
 
-#: Top/csound.c:2957
+#: Top/csound.c:2963
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9911,57 +9093,47 @@ msgstr ""
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:334
+#: Top/main.c:318
+#, fuzzy, c-format
+msgid "Failed to open input file %s\n"
+msgstr "Can't open input file %s\n"
+
+#: Top/main.c:339
 msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:352
+#: Top/main.c:360
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:359
+#: Top/main.c:367
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:369
+#: Top/main.c:377
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr "can't open scorefile %s"
 
-#: Top/main.c:371
+#: Top/main.c:379
 msgid "sorting score ...\n"
 msgstr ""
 
-#: Top/main.c:381
-#, c-format
-msgid "cannot extract %s, name conflict"
-msgstr "can't extract %s, name conflict"
-
-#: Top/main.c:384
+#: Top/main.c:389
 #, c-format
 msgid "cannot open extract file %s"
 msgstr "can't open extract file %s"
 
-#: Top/main.c:388
-#, c-format
-msgid "cannot reopen %s"
-msgstr "can't reopen %s"
-
 #: Top/main.c:392
-#, c-format
-msgid "cannot open %s for writing"
-msgstr "can't open %s for writing"
-
-#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:405
+#: Top/main.c:401
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:407
+#: Top/main.c:403
 msgid "Syntax check completed.\n"
 msgstr ""
 
@@ -10026,158 +9198,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:110 Top/one_file.c:118
+#: Top/one_file.c:120 Top/one_file.c:130
 msgid " *** cannot create temporary file"
 msgstr " *** can't create temporary file"
 
-#: Top/one_file.c:203
+#: Top/one_file.c:215
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:207
+#: Top/one_file.c:219
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr "WARNING: couldn't remove %s\n"
 
-#: Top/one_file.c:274 Top/one_file.c:302
+#: Top/one_file.c:286 Top/one_file.c:314
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:319
+#: Top/one_file.c:331
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:322
+#: Top/one_file.c:334
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:328 Top/one_file.c:744
+#: Top/one_file.c:340 Top/one_file.c:763
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:354
+#: Top/one_file.c:371
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:376 Top/one_file.c:430
+#: Top/one_file.c:393 Top/one_file.c:449
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:391 Top/one_file.c:396
+#: Top/one_file.c:408 Top/one_file.c:413
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:408
+#: Top/one_file.c:425
 #, c-format
 msgid "Creating %s (%p)\n"
 msgstr ""
 
-#: Top/one_file.c:421
+#: Top/one_file.c:438
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:468
+#: Top/one_file.c:487
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:487
+#: Top/one_file.c:506
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:503
+#: Top/one_file.c:522
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr "Can't open temporary file (%s) for MIDI subfile"
 
-#: Top/one_file.c:520
+#: Top/one_file.c:539
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:536 Top/one_file.c:584
+#: Top/one_file.c:555 Top/one_file.c:603
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:541
+#: Top/one_file.c:560
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr "Can't open sample file (%s) subfile"
 
-#: Top/one_file.c:555
+#: Top/one_file.c:574
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:589
+#: Top/one_file.c:608
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr "Can't open file (%s) subfile"
 
-#: Top/one_file.c:604
+#: Top/one_file.c:623
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:624
+#: Top/one_file.c:643
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:632 Top/one_file.c:639
+#: Top/one_file.c:651 Top/one_file.c:658
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:645
+#: Top/one_file.c:664
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:655
+#: Top/one_file.c:674
 msgid "**** Licence Information ****\n"
 msgstr "**** License Information ****\n"
 
-#: Top/one_file.c:661
+#: Top/one_file.c:680
 msgid "**** End of Licence Information ****\n"
 msgstr "**** End of License Information ****\n"
 
-#: Top/one_file.c:672
+#: Top/one_file.c:691
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:703
+#: Top/one_file.c:722
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:718
+#: Top/one_file.c:737
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:734
+#: Top/one_file.c:753
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:740
+#: Top/one_file.c:759
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:754
+#: Top/one_file.c:773
 msgid "Creating orchestra\n"
 msgstr ""
 
-#: Top/one_file.c:759
+#: Top/one_file.c:778
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:793
+#: Top/one_file.c:812
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:798
+#: Top/one_file.c:817
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr "Couldn't find <CsoundSynthesizer> tag in CSD file.\n"
 
@@ -10190,159 +9362,159 @@ msgstr ""
 msgid "%d opcodes\n"
 msgstr ""
 
-#: Top/threads.c:38
+#: Top/threads.c:92 Top/threads.c:556
 #, c-format
 msgid "%s() is not implemented on this platform.\n"
 msgstr ""
 
-#: Top/utility.c:98
+#: Top/utility.c:99
 #, c-format
 msgid "util %s:\n"
 msgstr ""
 
-#: Top/utility.c:105
+#: Top/utility.c:106
 #, c-format
 msgid "Error: utility '%s' not found"
 msgstr ""
 
-#: Top/utility.c:108
+#: Top/utility.c:109
 msgid "Error: utility not found"
 msgstr ""
 
-#: Top/utility.c:112
+#: Top/utility.c:113
 msgid "The available utilities are:\n"
 msgstr ""
 
-#: util1/scot/scot.c:51
+#: util1/scot/scot.c:56
 msgid "Score must start with orchestra section"
 msgstr ""
 
-#: util1/scot/scot.c:61
+#: util1/scot/scot.c:66
 msgid "Expected score or functions section"
 msgstr ""
 
-#: util1/scot/scot.c:117
+#: util1/scot/scot.c:122
 msgid "Tempo must be specified"
 msgstr ""
 
-#: util1/scot/scot.c:121
+#: util1/scot/scot.c:126
 msgid "Redefinition of tempo"
 msgstr ""
 
-#: util1/scot/scot.c:133
+#: util1/scot/scot.c:138
 msgid "Must specify 2 or more letters of keyword"
 msgstr ""
 
-#: util1/scot/scot.c:136 util1/scot/scot.c:145 util1/scot/scot.c:154
+#: util1/scot/scot.c:141 util1/scot/scot.c:150 util1/scot/scot.c:159
 msgid "Must be \"on\" or \"off\""
 msgstr ""
 
-#: util1/scot/scot.c:165
+#: util1/scot/scot.c:170
 msgid "Invalid time signature"
 msgstr ""
 
-#: util1/scot/scot.c:202
+#: util1/scot/scot.c:207
 msgid "Bad key signature"
 msgstr ""
 
-#: util1/scot/scot.c:237 util1/scot/scot.c:243
+#: util1/scot/scot.c:242 util1/scot/scot.c:248
 msgid "Invalid field"
 msgstr ""
 
-#: util1/scot/scot.c:254 util1/scot/scot.c:258
+#: util1/scot/scot.c:259 util1/scot/scot.c:263
 msgid "Nested next-parameter passing"
 msgstr ""
 
-#: util1/scot/scot.c:268
+#: util1/scot/scot.c:273
 msgid "Unrecognised keyword"
 msgstr ""
 
-#: util1/scot/scot.c:317
+#: util1/scot/scot.c:322
 msgid "Wrong number of beats in bar"
 msgstr ""
 
-#: util1/scot/scot.c:325
+#: util1/scot/scot.c:330
 msgid "Syntax error: cannot back up"
 msgstr "Syntax error: can't back up"
 
-#: util1/scot/scot.c:496
+#: util1/scot/scot.c:501
 msgid "Improper tie"
 msgstr ""
 
-#: util1/scot/scot.c:502
+#: util1/scot/scot.c:507
 msgid "Tie between different pitches"
 msgstr ""
 
-#: util1/scot/scot.c:510
+#: util1/scot/scot.c:515
 msgid "Warning: params changed on tie"
 msgstr ""
 
-#: util1/scot/scot.c:562
+#: util1/scot/scot.c:567
 msgid "Parameter number out of range"
 msgstr ""
 
-#: util1/scot/scot.c:622
+#: util1/scot/scot.c:627
 msgid "Lost previous note: not written"
 msgstr ""
 
-#: util1/scot/scot.c:741
+#: util1/scot/scot.c:746
 msgid "Macro expansion too long -- circular macros?"
 msgstr ""
 
-#: util1/scot/scot.c:817 util1/scot/scot.c:922 util1/scot/scot.c:946
+#: util1/scot/scot.c:822 util1/scot/scot.c:927 util1/scot/scot.c:951
 msgid "Syntax error: no {"
 msgstr ""
 
-#: util1/scot/scot.c:829
+#: util1/scot/scot.c:834
 msgid "No instrument specified"
 msgstr ""
 
-#: util1/scot/scot.c:870
+#: util1/scot/scot.c:875
 msgid "unresolved tie"
 msgstr ""
 
-#: util1/scot/scot.c:872
+#: util1/scot/scot.c:877
 msgid "unresolved slur"
 msgstr ""
 
-#: util1/scot/scot.c:879
+#: util1/scot/scot.c:884
 msgid "Circular note list\n"
 msgstr ""
 
-#: util1/scot/scot.c:925 util1/scot/scot.c:1039 util1/scot/scot.c:1053
-#: util1/scot/scot.c:1060 util1/scot/scot.c:1085
+#: util1/scot/scot.c:930 util1/scot/scot.c:1044 util1/scot/scot.c:1058
+#: util1/scot/scot.c:1065 util1/scot/scot.c:1090
 msgid "Unexpected end of file"
 msgstr ""
 
-#: util1/scot/scot.c:968
+#: util1/scot/scot.c:973
 msgid "Syntax error: no ="
 msgstr ""
 
-#: util1/scot/scot.c:970
+#: util1/scot/scot.c:975
 msgid "Syntax error: no number"
 msgstr ""
 
-#: util1/scot/scot.c:982
+#: util1/scot/scot.c:987
 msgid "No instruments declared"
 msgstr ""
 
-#: util1/scot/scot.c:1003
+#: util1/scot/scot.c:1008
 msgid "Expected ="
 msgstr ""
 
-#: util1/scot/scot.c:1151
+#: util1/scot/scot.c:1156
 msgid "Invalid pitch class"
 msgstr ""
 
-#: util1/scot/scot.c:1296 util1/scot/scot.c:1311 util1/scot/scot.c:1365
+#: util1/scot/scot.c:1301 util1/scot/scot.c:1316 util1/scot/scot.c:1370
 msgid "Division by zero"
 msgstr ""
 
-#: util1/scot/scot.c:1454
+#: util1/scot/scot.c:1461
 msgid "scot processing terminated\n"
 msgstr ""
 
-#: util1/scot/scot.c:1461
+#: util1/scot/scot.c:1468
 #, c-format
 msgid "scot: %d errors.\n"
 msgstr ""
@@ -10360,8 +9532,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
-#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
+#: util/atsa.c:546 util/atsa.c:2360 util/atsa.c:2374 util/atsa.c:2393
+#: util/atsa.c:2573 util/atsa.c:2636 util/atsa.c:2724
 msgid "done!\n"
 msgstr ""
 
@@ -10492,160 +9664,166 @@ msgstr ""
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2013
+#: util/atsa.c:1946 util/atsa.c:1951 util/atsa.c:1962 util/atsa.c:1965
+#: util/atsa.c:1969 util/atsa.c:1978 util/cvanal.c:193 util/hetro.c:607
+#: util/hetro.c:690 util/hetro.c:703
+msgid "Write failure\n"
+msgstr ""
+
+#: util/atsa.c:2019
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr "atsa: can't open input file '%s'"
 
-#: util/atsa.c:2020
+#: util/atsa.c:2026
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2025
+#: util/atsa.c:2031
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2040
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2044
+#: util/atsa.c:2050
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2050
+#: util/atsa.c:2056
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2063
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2067
+#: util/atsa.c:2073
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2074
+#: util/atsa.c:2080
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2082
+#: util/atsa.c:2088
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2090
+#: util/atsa.c:2096
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2098
+#: util/atsa.c:2104
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2106
+#: util/atsa.c:2112
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2130
+#: util/atsa.c:2136
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2139
+#: util/atsa.c:2145
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2148
+#: util/atsa.c:2154
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2157
+#: util/atsa.c:2163
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2163
+#: util/atsa.c:2169
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2174
+#: util/atsa.c:2180
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2182
+#: util/atsa.c:2188
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2190
+#: util/atsa.c:2196
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2335
+#: util/atsa.c:2341
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2365
+#: util/atsa.c:2371
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2381 util/atsa.c:2384
+#: util/atsa.c:2387 util/atsa.c:2390
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2389
+#: util/atsa.c:2395
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2497
+#: util/atsa.c:2503
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2585
+#: util/atsa.c:2591
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2681
+#: util/atsa.c:2687
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2732
+#: util/atsa.c:2738
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2832
+#: util/atsa.c:2838
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10714,7 +9892,7 @@ msgstr ""
 msgid "less sound than expected!\n"
 msgstr ""
 
-#: util/cvanal.c:243
+#: util/cvanal.c:244
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
@@ -10802,7 +9980,7 @@ msgstr ""
 msgid "cannot open %s.\n"
 msgstr "can't open %s.\n"
 
-#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
+#: util/dnoise.c:480 util/srconv.c:461 util/srconv.c:473
 #, c-format
 msgid "cannot open %s."
 msgstr "can't open %s."
@@ -10975,7 +10153,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:737
+#: util/envext.c:54 util/srconv.c:738
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11024,7 +10202,7 @@ msgid "Cannot open input file %s\n"
 msgstr "Can't open input file %s\n"
 
 #: util/het_export.c:61 util/lpc_export.c:66 util/lpc_import.c:62
-#: util/pv_export.c:64 util/pv_import.c:111
+#: util/pv_export.c:64 util/pv_import.c:123
 #, c-format
 msgid "Cannot open output file %s\n"
 msgstr "Can't open output file %s\n"
@@ -11047,7 +10225,7 @@ msgstr "Can't open input comma file%s\n"
 msgid "Cannot open output hetro file %s\n"
 msgstr "Can't open output hetro file %s\n"
 
-#: util/het_import.c:108
+#: util/het_import.c:111
 msgid "translate text form to hetro analysis file"
 msgstr ""
 
@@ -11145,48 +10323,48 @@ msgstr ""
 msgid "cannot create output file\n"
 msgstr "can't create output file\n"
 
-#: util/hetro.c:616
+#: util/hetro.c:617
 #, c-format
 msgid "scale = %f\n"
 msgstr ""
 
-#: util/hetro.c:711
+#: util/hetro.c:714
 #, c-format
 msgid "harmonic #%d:\tamp points %d, \tfrq points %d,\tpeakamp %d\n"
 msgstr ""
 
-#: util/hetro.c:715
+#: util/hetro.c:718
 #, c-format
 msgid "wrote %ld bytes to %s\n"
 msgstr ""
 
-#: util/hetro.c:747
+#: util/hetro.c:750
 msgid "OOPS: SDIF does not work on this machine!\n"
 msgstr "OOPS: SDIF doesn't work on this machine!\n"
 
-#: util/hetro.c:773
+#: util/hetro.c:776
 #, c-format
 msgid "Error creating %s\n"
 msgstr ""
 
-#: util/hetro.c:801
+#: util/hetro.c:804
 msgid "Error writing SDIF frame header.\n"
 msgstr ""
 
-#: util/hetro.c:810
+#: util/hetro.c:813
 msgid "Error writing SDIF matrix header.\n"
 msgstr ""
 
-#: util/hetro.c:823
+#: util/hetro.c:826
 msgid "Error writing SDIF data.\n"
 msgstr ""
 
-#: util/hetro.c:830
+#: util/hetro.c:833
 #, c-format
 msgid "wrote %ld 1TRC frames to %s\n"
 msgstr ""
 
-#: util/hetro.c:858
+#: util/hetro.c:861
 msgid "Soundfile analysis for adsyn"
 msgstr ""
 
@@ -11398,7 +10576,11 @@ msgstr ""
 msgid "Failed to read LPC header\n"
 msgstr ""
 
-#: util/lpc_export.c:102
+#: util/lpc_export.c:81 util/lpc_export.c:88
+msgid "Read faailure\n"
+msgstr ""
+
+#: util/lpc_export.c:106
 msgid "translate linear predictive coding file to text file"
 msgstr ""
 
@@ -11406,7 +10588,11 @@ msgstr ""
 msgid "Usage: lpc_import cstext_file lpc_file\n"
 msgstr ""
 
-#: util/lpc_import.c:98
+#: util/lpc_import.c:77 util/lpc_import.c:84 util/srconv.c:378
+msgid "Read failure\n"
+msgstr ""
+
+#: util/lpc_import.c:102
 msgid "translate text file to linear predictive coding file"
 msgstr ""
 
@@ -11423,7 +10609,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11721,11 +10907,20 @@ msgstr ""
 msgid "Usage: pv_import cstext_file pv_file \n"
 msgstr ""
 
-#: util/pv_import.c:127
+#: util/pv_import.c:73 util/pv_import.c:93
+#, fuzzy
+msgid "Not a PV file\n"
+msgstr "Can't open PV file"
+
+#: util/pv_import.c:132
+msgid "Memory failure\n"
+msgstr ""
+
+#: util/pv_import.c:143
 msgid "Sync error\n"
 msgstr ""
 
-#: util/pv_import.c:148
+#: util/pv_import.c:164
 msgid "translate text form to PVOC analysis file"
 msgstr ""
 
@@ -11792,7 +10987,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:754
+#: util/scale.c:62 util/srconv.c:755
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -11973,47 +11168,47 @@ msgstr "srconv: can't specify both -r and -P"
 msgid "srconv: cannot open time-vary function file"
 msgstr "srconv: can't open time-vary function file"
 
-#: util/srconv.c:388
+#: util/srconv.c:389
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:402
+#: util/srconv.c:403
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:407
+#: util/srconv.c:408
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:412 util/srconv.c:704
+#: util/srconv.c:413 util/srconv.c:705
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:731
+#: util/srconv.c:732
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:733
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:734
+#: util/srconv.c:735
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:736
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:737
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:820
+#: util/srconv.c:821
 msgid "Sample rate conversion"
 msgstr ""
 
@@ -12163,6 +11358,49 @@ msgstr ""
 msgid "Extract part of a sound file"
 msgstr ""
 
+#~ msgid "DSSI4CS: Not initialised or wrong argument types."
+#~ msgstr "DSSI4CS: Not initialized or wrong argument types."
+
+#~ msgid "fluid: unable to load %s"
+#~ msgstr "fluid: unable to load %s"
+
+#~ msgid "cannot close '%s': not found in list of open files"
+#~ msgstr "can't close '%s': not found in list of open files"
+
+#~ msgid "cannot close file #%d: not a valid handle"
+#~ msgstr "can't close file #%d: not a valid handle"
+
+#~ msgid "freeverb: not initialised"
+#~ msgstr "freeverb: not initialized"
+
+#~ msgid "ftconv: not initialised"
+#~ msgstr "ftconv: not initialized"
+
+#~ msgid "ftsave: failed to write file"
+#~ msgstr "ftsave: failed to write file"
+
+#~ msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
+#~ msgstr "inrg: channel number can't be < 1 (1 is the first channel)"
+
+#~ msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
+#~ msgstr "outrg: channel number can't be < 1 (1 is the first channel)"
+
+#~ msgid "vecdly: not initialised"
+#~ msgstr "vecdly: not initialized"
+
+#
+#~ msgid "vdelayk: not initialised"
+#~ msgstr "vdelayk: not initialized"
+
+#~ msgid "cannot extract %s, name conflict"
+#~ msgstr "can't extract %s, name conflict"
+
+#~ msgid "cannot reopen %s"
+#~ msgstr "can't reopen %s"
+
+#~ msgid "cannot open %s for writing"
+#~ msgstr "can't open %s for writing"
+
 #~ msgid "tableseg: not initialized"
 #~ msgstr "tableseg: not initialized"
 
@@ -12208,9 +11446,6 @@ msgstr ""
 #~ msgid "cannot open %s.  Not in cur dir, INCDIR SSDIR or SFDIR as defined"
 #~ msgstr "can't open %s.  Not in cur dir, INCDIR SSDIR or SFDIR as defined"
 
-#~ msgid "Cannot open PV file"
-#~ msgstr "Can't open PV file"
-
 #~ msgid "cannot write AIFF soundfile with no header"
 #~ msgstr "can't write AIFF soundfile with no header"
 
diff --git a/po/csound.po b/po/csound.po
index f1b052f..e2716bd 100644
--- a/po/csound.po
+++ b/po/csound.po
@@ -100,316 +100,317 @@ msgstr ""
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:138
+#: Engine/csound_orc_compile.c:141
 #, c-format
 msgid ""
 "input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
 "line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
+#: Engine/csound_orc_compile.c:268 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:269
+#: Engine/csound_orc_compile.c:272
 msgid "too many input args\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:304
+#: Engine/csound_orc_compile.c:307
 #, c-format
 msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:380
+#: Engine/csound_orc_compile.c:389
 #, c-format
-msgid ""
-"output name previously used, type '%c' must be uniquely defined, line %d"
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:386
+#: Engine/csound_orc_compile.c:517
 #, c-format
-msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
+msgid "output name previously used, type 'w' must be uniquely defined, line %d"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:541
+#: Engine/csound_orc_compile.c:563
 #, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:738
+#: Engine/csound_orc_compile.c:760
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:748
+#: Engine/csound_orc_compile.c:772
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+#: Engine/csound_orc_compile.c:779 Engine/csound_orc_compile.c:1068
+#: Engine/csound_orc_compile.c:1089 Engine/otran.c:363
 msgid "invalid name for instrument"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
+#: Engine/csound_orc_compile.c:783 Engine/csound_orc_compile.c:1071
+#: Engine/csound_orc_compile.c:1092 Engine/otran.c:369
 #, c-format
 msgid "instr %s redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
+#: Engine/csound_orc_compile.c:927 Engine/otran.c:351
 #, c-format
 msgid "instr %ld redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:914
+#: Engine/csound_orc_compile.c:938
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1083
+#: Engine/csound_orc_compile.c:1141
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
+#: Engine/csound_orc_compile.c:1198 Engine/otran.c:578 Engine/otran.c:1432
 #, c-format
 msgid "%s invalid sample rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
+#: Engine/csound_orc_compile.c:1200 Engine/otran.c:580 Engine/otran.c:1434
 #, c-format
 msgid "%s invalid control rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
+#: Engine/csound_orc_compile.c:1204 Engine/otran.c:583 Engine/otran.c:1430
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
+#: Engine/csound_orc_compile.c:1207 Engine/otran.c:586 Engine/otran.c:1436
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1165
+#: Engine/csound_orc_compile.c:1223
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1170
+#: Engine/csound_orc_compile.c:1228
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
+#: Engine/csound_orc_compile.c:1288 Engine/otran.c:670
 msgid "inconsistent argoff sumcount"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
+#: Engine/csound_orc_compile.c:1360 Engine/otran.c:739
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
+#: Engine/csound_orc_compile.c:1398 Engine/otran.c:777
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
+#: Engine/csound_orc_compile.c:1431 Engine/otran.c:810
 #, c-format
 msgid "target label '%s' not found"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
+#: Engine/csound_orc_compile.c:1509 Engine/otran.c:865
 #, c-format
 msgid "string syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
+#: Engine/csound_orc_compile.c:1559 Engine/otran.c:915
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
+#: Engine/csound_orc_compile.c:1585 Engine/otran.c:941
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
+#: Engine/csound_orc_compile.c:1624 Engine/otran.c:1017
 msgid "gblnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
+#: Engine/csound_orc_compile.c:1652 Engine/otran.c:1045
 msgid "lclnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
+#: Engine/csound_orc_compile.c:1678 Engine/otran.c:1070
 msgid "unexpected global name"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
+#: Engine/csound_orc_compile.c:1701 Engine/otran.c:1092
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:459
+#: Engine/csound_orc_expressions.c:457
 #, c-format
 msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:862
+#: Engine/csound_orc_expressions.c:878
 #, c-format
 msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:157
+#: Engine/csound_orc_semantics.c:256
 #, c-format
 msgid ""
 "\n"
 "error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:159
+#: Engine/csound_orc_semantics.c:258
 #, c-format
 msgid ""
 " line %d:\n"
 ">>>"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:732
+#: Engine/csound_orc_semantics.c:834
 #, c-format
 msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/csound_orc_semantics.c:899 Engine/rdorch.c:1644 Engine/rdorch.c:1662
 #: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
+#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:126
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
+#: Engine/cs_par_dispatch.c:140 Engine/cs_par_dispatch.c:160
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
-#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
-#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
+#: Engine/cs_par_dispatch.c:551 Engine/cs_par_dispatch.c:578
+#: Engine/cs_par_dispatch.c:2564 Engine/cs_par_dispatch.c:2609
+#: Engine/cs_par_dispatch.c:2611 Engine/cs_par_dispatch.c:2675
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
-#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
+#: Engine/cs_par_dispatch.c:553 Engine/cs_par_dispatch.c:592
+#: Engine/cs_par_dispatch.c:619 Engine/cs_par_dispatch.c:660
 msgid "Invalid NULL Parameter name"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:535
+#: Engine/cs_par_dispatch.c:560
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
+#: Engine/cs_par_dispatch.c:689 Engine/cs_par_dispatch.c:780
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
+#: Engine/cs_par_dispatch.c:730 Engine/cs_par_dispatch.c:860
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:759
+#: Engine/cs_par_dispatch.c:784
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:907
+#: Engine/cs_par_dispatch.c:930
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:913
+#: Engine/cs_par_dispatch.c:936
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:918
+#: Engine/cs_par_dispatch.c:941
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:922
+#: Engine/cs_par_dispatch.c:945
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:926
+#: Engine/cs_par_dispatch.c:949
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
-#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
-#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
-#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
-#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
-#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
-#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
-#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
+#: Engine/cs_par_dispatch.c:1024 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1176 Engine/cs_par_dispatch.c:1276
+#: Engine/cs_par_dispatch.c:1430 Engine/cs_par_dispatch.c:1464
+#: Engine/cs_par_dispatch.c:1481 Engine/cs_par_dispatch.c:1503
+#: Engine/cs_par_dispatch.c:1531 Engine/cs_par_dispatch.c:1553
+#: Engine/cs_par_dispatch.c:1577 Engine/cs_par_dispatch.c:1669
+#: Engine/cs_par_dispatch.c:1724 Engine/cs_par_dispatch.c:1817
+#: Engine/cs_par_dispatch.c:1870 Engine/cs_par_dispatch.c:2702
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1008
+#: Engine/cs_par_dispatch.c:1029
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
-#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
+#: Engine/cs_par_dispatch.c:1081 Engine/cs_par_dispatch.c:1104
+#: Engine/cs_par_dispatch.c:1126 Engine/cs_par_dispatch.c:1128
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1062
+#: Engine/cs_par_dispatch.c:1083
 msgid "Invalid NULL Parameter instr"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1085
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
+#: Engine/cs_par_dispatch.c:1090 Engine/cs_par_dispatch.c:1112
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1086
+#: Engine/cs_par_dispatch.c:1107
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
-#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
-#: Engine/cs_par_dispatch.c:2682
+#: Engine/cs_par_dispatch.c:1250 Engine/cs_par_dispatch.c:1533
+#: Engine/cs_par_dispatch.c:2566 Engine/cs_par_dispatch.c:2676
+#: Engine/cs_par_dispatch.c:2703
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1237
+#: Engine/cs_par_dispatch.c:1261
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1554
+#: Engine/cs_par_dispatch.c:1579
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1556
+#: Engine/cs_par_dispatch.c:1581
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1647
+#: Engine/cs_par_dispatch.c:1672
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2497
+#: Engine/cs_par_dispatch.c:2518
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2557
+#: Engine/cs_par_dispatch.c:2578
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2610
+#: Engine/cs_par_dispatch.c:2631
 msgid "Cache Update\n"
 msgstr ""
 
@@ -423,12 +424,12 @@ msgstr ""
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1083
+#: Engine/envvar.c:1085
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr ""
 
-#: Engine/envvar.c:1266
+#: Engine/envvar.c:1268
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr ""
@@ -499,13 +500,13 @@ msgstr ""
 msgid "ftable %d now deleted\n"
 msgstr ""
 
-#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
-#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
-#: Engine/fgens.c:2909
+#: Engine/fgens.c:153 Engine/fgens.c:1599 Engine/fgens.c:1685
+#: Engine/fgens.c:1764 Engine/fgens.c:1880 Engine/fgens.c:1961
+#: Engine/fgens.c:2937
 msgid "insufficient gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:179 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr ""
@@ -523,11 +524,11 @@ msgstr ""
 msgid "ftable %d:\n"
 msgstr ""
 
-#: Engine/fgens.c:222 Engine/fgens.c:229
+#: Engine/fgens.c:222 Engine/fgens.c:229 Engine/fgens.c:2794
 msgid "illegal table length"
 msgstr ""
 
-#: Engine/fgens.c:288 Engine/fgens.c:2215
+#: Engine/fgens.c:288 Engine/fgens.c:2221
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
@@ -536,10 +537,10 @@ msgstr ""
 
 #: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
 #: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
-#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
-#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
-#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
-#: Engine/fgens.c:2906
+#: Engine/fgens.c:1054 Engine/fgens.c:1098 Engine/fgens.c:1145
+#: Engine/fgens.c:1399 Engine/fgens.c:1461 Engine/fgens.c:1683
+#: Engine/fgens.c:1761 Engine/fgens.c:2116 Engine/fgens.c:2891
+#: Engine/fgens.c:2934
 msgid "using extended arguments\n"
 msgstr ""
 
@@ -552,13 +553,13 @@ msgid "illegal x interval"
 msgstr ""
 
 #: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
-#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
-#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: Engine/fgens.c:1356 Engine/fgens.c:2381 Engine/fgens.c:2696
+#: Engine/fgens.c:2836 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
 #: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr ""
 
-#: Engine/fgens.c:408 Engine/fgens.c:1355
+#: Engine/fgens.c:408 Engine/fgens.c:1361
 msgid "unknown srctable number"
 msgstr ""
 
@@ -594,238 +595,238 @@ msgstr ""
 msgid "uneven number of args"
 msgstr ""
 
-#: Engine/fgens.c:1077
+#: Engine/fgens.c:1082
 msgid "gen call has illegal x-ordinate values:"
 msgstr ""
 
-#: Engine/fgens.c:1095
+#: Engine/fgens.c:1100
 msgid "wrong number of args"
 msgstr ""
 
-#: Engine/fgens.c:1109
+#: Engine/fgens.c:1114
 msgid "a range given exceeds table length"
 msgstr ""
 
-#: Engine/fgens.c:1116
+#: Engine/fgens.c:1121
 msgid "an input function does not exist"
 msgstr ""
 
-#: Engine/fgens.c:1249
+#: Engine/fgens.c:1254
 msgid "No such window!"
 msgstr ""
 
-#: Engine/fgens.c:1267
+#: Engine/fgens.c:1272
 msgid "Wrong number of input arguments"
 msgstr ""
 
-#: Engine/fgens.c:1268
+#: Engine/fgens.c:1273
 msgid "unknown distribution"
 msgstr ""
 
-#: Engine/fgens.c:1317
+#: Engine/fgens.c:1322
 msgid "error opening ASCII file"
 msgstr ""
 
-#: Engine/fgens.c:1323
+#: Engine/fgens.c:1328
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr ""
 
-#: Engine/fgens.c:1334
+#: Engine/fgens.c:1340
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1363
+#: Engine/fgens.c:1369
 msgid "table size must be the same of source table"
 msgstr ""
 
-#: Engine/fgens.c:1435 Engine/fgens.c:1495
+#: Engine/fgens.c:1441 Engine/fgens.c:1501
 msgid "x coordinates must all be in increasing order:"
 msgstr ""
 
-#: Engine/fgens.c:1438 Engine/fgens.c:1497
+#: Engine/fgens.c:1444 Engine/fgens.c:1503
 msgid "x coordinate greater than function size:"
 msgstr ""
 
-#: Engine/fgens.c:1442
+#: Engine/fgens.c:1448
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1515
+#: Engine/fgens.c:1521
 msgid "GEN28 requires zero table length"
 msgstr ""
 
-#: Engine/fgens.c:1577
+#: Engine/fgens.c:1583
 msgid "could not open space file"
 msgstr ""
 
-#: Engine/fgens.c:1579
+#: Engine/fgens.c:1585
 msgid "Time values must be in increasing order"
 msgstr ""
 
-#: Engine/fgens.c:1600
+#: Engine/fgens.c:1606
 msgid "GEN30: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1683
+#: Engine/fgens.c:1689
 msgid "GEN31: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1791
+#: Engine/fgens.c:1797
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr ""
 
-#: Engine/fgens.c:1885
+#: Engine/fgens.c:1891
 msgid "GEN33: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:2053
+#: Engine/fgens.c:2059
 msgid "unknown source table number"
 msgstr ""
 
-#: Engine/fgens.c:2085
+#: Engine/fgens.c:2091
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2157
 #, c-format
 msgid "ftable %d: "
 msgstr ""
 
-#: Engine/fgens.c:2195
+#: Engine/fgens.c:2201
 #, c-format
 msgid "ftable %d:"
 msgstr ""
 
-#: Engine/fgens.c:2210
+#: Engine/fgens.c:2216
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr ""
 
-#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
-#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
-#: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
-#: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
+#: Engine/fgens.c:2252 Engine/fgens.c:2340 Engine/fgens.c:2364
+#: Opcodes/midiops2.c:233 Opcodes/midiops2.c:388 Opcodes/midiops2.c:470
+#: Opcodes/uggab.c:1482 Opcodes/uggab.c:1509 Opcodes/uggab.c:1529
+#: Opcodes/uggab.c:1572
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr ""
 
-#: Engine/fgens.c:2251
+#: Engine/fgens.c:2257
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr ""
 
-#: Engine/fgens.c:2278 Engine/fgens.c:2848
+#: Engine/fgens.c:2284 Engine/fgens.c:2875
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr ""
 
-#: Engine/fgens.c:2340
+#: Engine/fgens.c:2346
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 
-#: Engine/fgens.c:2399
+#: Engine/fgens.c:2405
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
+#: Engine/fgens.c:2452 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr ""
 
-#: Engine/fgens.c:2454 Engine/fgens.c:2714
+#: Engine/fgens.c:2460 Engine/fgens.c:2719
 #, c-format
 msgid "channel %d illegal"
 msgstr ""
 
-#: Engine/fgens.c:2460
+#: Engine/fgens.c:2466
 msgid "deferred alloc\n"
 msgstr ""
 
-#: Engine/fgens.c:2468
+#: Engine/fgens.c:2474 Engine/fgens.c:2792
 msgid "deferred size, but filesize unknown"
 msgstr ""
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2477 Engine/fgens.c:2796
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2540
+#: Engine/fgens.c:2546
 msgid "GEN1: input file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2544
+#: Engine/fgens.c:2550
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2566
+#: Engine/fgens.c:2572
 msgid "GEN1 read error"
 msgstr ""
 
-#: Engine/fgens.c:2571
+#: Engine/fgens.c:2577
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2572
+#: Engine/fgens.c:2578
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr ""
 
-#: Engine/fgens.c:2616
+#: Engine/fgens.c:2622
 msgid "wrong number of ftable arguments"
 msgstr ""
 
-#: Engine/fgens.c:2626 OOps/pstream.c:326
+#: Engine/fgens.c:2632 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr ""
 
-#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2643 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr ""
 
-#: Engine/fgens.c:2655
+#: Engine/fgens.c:2661
 msgid "ftable size too small"
 msgstr ""
 
-#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
+#: Engine/fgens.c:2735 Opcodes/mp3in.c:87 Opcodes/mp3in.c:229
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2873
+#: Engine/fgens.c:2901
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr ""
 
-#: Engine/fgens.c:2913
+#: Engine/fgens.c:2941
 msgid "number of channels inconsistent with number of args"
 msgstr ""
 
-#: Engine/fgens.c:3072
+#: Engine/fgens.c:3100
 msgid "GEN53: invalid number of gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:3082
+#: Engine/fgens.c:3110
 msgid "GEN53: invalid table length"
 msgstr ""
 
-#: Engine/fgens.c:3086
+#: Engine/fgens.c:3114
 msgid "GEN53: invalid source table number"
 msgstr ""
 
-#: Engine/fgens.c:3089
+#: Engine/fgens.c:3117
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr ""
 
-#: Engine/fgens.c:3093
+#: Engine/fgens.c:3121
 msgid "GEN53: invalid source table length"
 msgstr ""
 
-#: Engine/fgens.c:3098
+#: Engine/fgens.c:3126
 msgid "GEN53: invalid window table"
 msgstr ""
 
@@ -1030,36 +1031,36 @@ msgstr ""
 msgid "subinstr: not initialised"
 msgstr ""
 
-#: Engine/insert.c:1855
+#: Engine/insert.c:1856
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
 "\tlclbas %p, opds %p\n"
 msgstr ""
 
-#: Engine/insert.c:1872
+#: Engine/insert.c:1873
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1898
+#: Engine/insert.c:1899
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1909
+#: Engine/insert.c:1910
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1966
+#: Engine/insert.c:1967
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:2011
+#: Engine/insert.c:2012
 #, c-format
 msgid "Instrument %s is still active"
 msgstr ""
 
-#: Engine/insert.c:2014
+#: Engine/insert.c:2015
 #, c-format
 msgid "Instrument %d is still active"
 msgstr ""
@@ -1069,8 +1070,8 @@ msgid "-L stdin fcntl failed"
 msgstr ""
 
 #: Engine/linevent.c:99 Engine/linevent.c:112 OOps/dumpf.c:57 OOps/dumpf.c:82
-#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:274 OOps/dumpf.c:301
-#: OOps/dumpf.c:328 OOps/dumpf.c:355 OOps/dumpf.c:527 util/hetro.c:249
+#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:276 OOps/dumpf.c:303
+#: OOps/dumpf.c:330 OOps/dumpf.c:357 OOps/dumpf.c:528 util/hetro.c:249
 #, c-format
 msgid "Cannot open %s"
 msgstr ""
@@ -1234,210 +1235,206 @@ msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
 msgstr ""
 
-#: Engine/musmon.c:81
+#: Engine/musmon.c:80
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr ""
 
-#: Engine/musmon.c:108
+#: Engine/musmon.c:107
 msgid "illegal istartempo value"
 msgstr ""
 
-#: Engine/musmon.c:111
+#: Engine/musmon.c:110
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:184 Top/main.c:121
+#: Engine/musmon.c:183 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:187 Top/main.c:124
+#: Engine/musmon.c:186 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:192 Top/main.c:113
+#: Engine/musmon.c:191 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:195 Top/main.c:116
+#: Engine/musmon.c:194 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:220
+#: Engine/musmon.c:219
 msgid "orch now loaded\n"
 msgstr ""
 
-#: Engine/musmon.c:245
+#: Engine/musmon.c:244
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:261
+#: Engine/musmon.c:260
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:283
+#: Engine/musmon.c:282
 msgid "using Cscore processing\n"
 msgstr ""
 
-#: Engine/musmon.c:286
+#: Engine/musmon.c:285
 msgid "cannot create cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:299
+#: Engine/musmon.c:301
 msgid "cannot reopen cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:314
 msgid "cannot reopen cscore.srt"
 msgstr ""
 
-#: Engine/musmon.c:305
+#: Engine/musmon.c:316
 msgid "sorting cscore.out ..\n"
 msgstr ""
 
-#: Engine/musmon.c:311 Top/main.c:401
+#: Engine/musmon.c:322 Top/main.c:397
 msgid "\t... done\n"
 msgstr ""
 
-#: Engine/musmon.c:312
+#: Engine/musmon.c:323
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
-#: Engine/musmon.c:1216
+#: Engine/musmon.c:327 Engine/musmon.c:457 Engine/musmon.c:1026
+#: Engine/musmon.c:1227
 #, c-format
 msgid "SECTION %d:\n"
 msgstr ""
 
-#: Engine/musmon.c:390
+#: Engine/musmon.c:401
 msgid "end of score.\t\t   overall amps:"
 msgstr ""
 
-#: Engine/musmon.c:401
+#: Engine/musmon.c:412
 msgid ""
 "\n"
 "\t   overall samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:405
+#: Engine/musmon.c:416
 #, c-format
 msgid ""
 "\n"
 "%d errors in performance\n"
 msgstr ""
 
-#: Engine/musmon.c:407
+#: Engine/musmon.c:418
 msgid "end of performance"
 msgstr ""
 
-#: Engine/musmon.c:421
+#: Engine/musmon.c:432
 msgid "no sound written to disk\n"
 msgstr ""
 
-#: Engine/musmon.c:436
+#: Engine/musmon.c:447
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:502 Engine/musmon.c:548
+#: Engine/musmon.c:513 Engine/musmon.c:559
 msgid "\t number of samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:541
+#: Engine/musmon.c:552
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:543
+#: Engine/musmon.c:554
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:607 Engine/musmon.c:632
+#: Engine/musmon.c:618 Engine/musmon.c:643
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr ""
 
-#: Engine/musmon.c:611
+#: Engine/musmon.c:622
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "off"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "on"
 msgstr ""
 
-#: Engine/musmon.c:620 Engine/musmon.c:659
+#: Engine/musmon.c:631 Engine/musmon.c:670
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr ""
 
-#: Engine/musmon.c:624
+#: Engine/musmon.c:635
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:650
+#: Engine/musmon.c:661
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:680
+#: Engine/musmon.c:691
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:701
+#: Engine/musmon.c:712
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr ""
 
-#: Engine/musmon.c:719
+#: Engine/musmon.c:730
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr ""
 
-#: Engine/musmon.c:723
+#: Engine/musmon.c:734
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:736
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:816
+#: Engine/musmon.c:827
 msgid "terminating.\n"
 msgstr ""
 
-#: Engine/musmon.c:902
+#: Engine/musmon.c:913
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr ""
 
-#: Engine/musmon.c:1129
+#: Engine/musmon.c:1140
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr ""
 
-#: Engine/musmon.c:1149
+#: Engine/musmon.c:1160
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr ""
 
-#: Engine/musmon.c:1172
+#: Engine/musmon.c:1183
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr ""
 
@@ -1460,105 +1457,105 @@ msgstr ""
 msgid "cannot find the specified instrument or opcode"
 msgstr ""
 
-#: Engine/new_orc_parser.c:91
+#: Engine/new_orc_parser.c:119
 msgid "Unmatched #ifdef\n"
 msgstr ""
 
-#: Engine/otran.c:149 Engine/symbtab.c:413
+#: Engine/otran.c:149 Engine/symbtab.c:416
 #, c-format
 msgid "invalid input type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:154 Engine/symbtab.c:418
+#: Engine/otran.c:154 Engine/symbtab.c:421
 #, c-format
 msgid "too many input args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:169 Engine/symbtab.c:433
+#: Engine/otran.c:169 Engine/symbtab.c:436
 #, c-format
 msgid "too many output args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:194 Engine/symbtab.c:458
+#: Engine/otran.c:194 Engine/symbtab.c:461
 #, c-format
 msgid "invalid output type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:325 Engine/otran.c:332
+#: Engine/otran.c:324 Engine/otran.c:331
 msgid "missing instrument number or name"
 msgstr ""
 
-#: Engine/otran.c:337
+#: Engine/otran.c:336
 msgid "illegal instr number"
 msgstr ""
 
-#: Engine/otran.c:388
+#: Engine/otran.c:387
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:393 Engine/symbtab.c:538
+#: Engine/otran.c:392 Engine/symbtab.c:541
 msgid "invalid name for opcode"
 msgstr ""
 
-#: Engine/otran.c:397
+#: Engine/otran.c:396
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
 msgstr ""
 
-#: Engine/otran.c:408 Engine/symbtab.c:548
+#: Engine/otran.c:407 Engine/symbtab.c:551
 #, c-format
 msgid "cannot redefine %s"
 msgstr ""
 
-#: Engine/otran.c:412 Engine/symbtab.c:553
+#: Engine/otran.c:411 Engine/symbtab.c:556
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr ""
 
-#: Engine/otran.c:503
+#: Engine/otran.c:502
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:534
+#: Engine/otran.c:533
 msgid "Missing endin"
 msgstr ""
 
-#: Engine/otran.c:599
+#: Engine/otran.c:598
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:603
+#: Engine/otran.c:602
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr ""
 
-#: Engine/otran.c:1257
+#: Engine/otran.c:1256
 msgid "bad value for 0dbfs: must be positive."
 msgstr ""
 
-#: Engine/otran.c:1267
+#: Engine/otran.c:1266
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1339
+#: Engine/otran.c:1338
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1365
+#: Engine/otran.c:1364
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1428
+#: Engine/otran.c:1427
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "error:"
 msgstr ""
 
-#: Engine/otran.c:1461
+#: Engine/otran.c:1460
 msgid "header init errors"
 msgstr ""
 
@@ -1570,7 +1567,7 @@ msgstr ""
 msgid "Unexpected end of orchestra file"
 msgstr ""
 
-#: Engine/rdorch.c:431 Engine/sread.c:758
+#: Engine/rdorch.c:431 Engine/sread.c:765
 #, c-format
 msgid "Macro definition for %*s\n"
 msgstr ""
@@ -1588,12 +1585,12 @@ msgstr ""
 msgid "cannot open orch file %s"
 msgstr ""
 
-#: Engine/rdorch.c:684 Engine/sread.c:1584
+#: Engine/rdorch.c:684 Engine/sread.c:1595
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:716 Engine/sread.c:1607
+#: Engine/rdorch.c:716 Engine/sread.c:1618
 msgid "macro error\n"
 msgstr ""
 
@@ -1614,7 +1611,7 @@ msgstr ""
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:872 Engine/sread.c:1694
+#: Engine/rdorch.c:872 Engine/sread.c:1710
 #, c-format
 msgid "macro %s undefined\n"
 msgstr ""
@@ -1632,21 +1629,21 @@ msgstr ""
 msgid "Unknown # option: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:928 Engine/sread.c:380
+#: Engine/rdorch.c:928 Engine/sread.c:383
 #, c-format
 msgid "Undefined macro: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:930 Engine/sread.c:378
+#: Engine/rdorch.c:930 Engine/sread.c:381
 msgid "Macro expansion symbol ($) without macro name"
 msgstr ""
 
-#: Engine/rdorch.c:935 Engine/sread.c:384
+#: Engine/rdorch.c:935 Engine/sread.c:387
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr ""
 
-#: Engine/rdorch.c:952 Engine/sread.c:401
+#: Engine/rdorch.c:952 Engine/sread.c:404 Engine/sread.c:420
 msgid "Syntax error in macro call"
 msgstr ""
 
@@ -1866,7 +1863,7 @@ msgid ""
 "\tremainder of line flushed\n"
 msgstr ""
 
-#: Engine/rdscor.c:146
+#: Engine/rdscor.c:148
 msgid "ERROR: too many pfields: "
 msgstr ""
 
@@ -1916,228 +1913,232 @@ msgstr ""
 msgid "Internal error op=%c"
 msgstr ""
 
-#: Engine/sread.c:464
+#: Engine/sread.c:469
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:491
+#: Engine/sread.c:496
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:501
+#: Engine/sread.c:506
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:533 Engine/sread.c:547
+#: Engine/sread.c:538 Engine/sread.c:552
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:559
+#: Engine/sread.c:564
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:565
+#: Engine/sread.c:570
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:579
+#: Engine/sread.c:584
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:599
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:646
+#: Engine/sread.c:651
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:652
+#: Engine/sread.c:657
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:696
+#: Engine/sread.c:701
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:701
+#: Engine/sread.c:706
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:715
+#: Engine/sread.c:720
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:733
+#: Engine/sread.c:740
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr ""
 
-#: Engine/sread.c:736
+#: Engine/sread.c:743
 msgid "Repeat section\n"
 msgstr ""
 
-#: Engine/sread.c:761
+#: Engine/sread.c:768
 msgid "Invalid macro name for --smacro"
 msgstr ""
 
-#: Engine/sread.c:865
+#: Engine/sread.c:872
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr ""
 
-#: Engine/sread.c:934
+#: Engine/sread.c:942
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:948
+#: Engine/sread.c:956
 msgid "{: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:957
+#: Engine/sread.c:965
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:963
+#: Engine/sread.c:971
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1047
+#: Engine/sread.c:1056
 msgid "r: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:1049
+#: Engine/sread.c:1058
 #, c-format
 msgid "Repeats=%d\n"
 msgstr ""
 
-#: Engine/sread.c:1093
+#: Engine/sread.c:1102
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr ""
 
-#: Engine/sread.c:1108
+#: Engine/sread.c:1117
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr ""
 
-#: Engine/sread.c:1133
+#: Engine/sread.c:1142
 #, c-format
 msgid "Name %s not found"
 msgstr ""
 
-#: Engine/sread.c:1135
+#: Engine/sread.c:1144
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr ""
 
-#: Engine/sread.c:1164
+#: Engine/sread.c:1174
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1189
+#: Engine/sread.c:1199
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1251
+#: Engine/sread.c:1261
 msgid "No previous event for ^"
 msgstr ""
 
-#: Engine/sread.c:1256
+#: Engine/sread.c:1266
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1286
+#: Engine/sread.c:1296
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1289
+#: Engine/sread.c:1299
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
-#: Engine/sread.c:1761 Engine/sread.c:1775
+#: Engine/sread.c:1300 Engine/sread.c:1305 Engine/sread.c:1754
+#: Engine/sread.c:1777 Engine/sread.c:1791
 msgid "      remainder of line flushed\n"
 msgstr ""
 
-#: Engine/sread.c:1294
+#: Engine/sread.c:1304
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1373
+#: Engine/sread.c:1384
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr ""
 
-#: Engine/sread.c:1393
+#: Engine/sread.c:1404
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1539
+#: Engine/sread.c:1550
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1570
+#: Engine/sread.c:1581
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1630
+#: Engine/sread.c:1627 Engine/sread.c:1635
+msgid "Syntax error in macro definition"
+msgstr ""
+
+#: Engine/sread.c:1646
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr ""
 
-#: Engine/sread.c:1642
+#: Engine/sread.c:1658
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1671
+#: Engine/sread.c:1687
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr ""
 
-#: Engine/sread.c:1681
+#: Engine/sread.c:1697
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1700
+#: Engine/sread.c:1716
 msgid "unknown # option"
 msgstr ""
 
-#: Engine/sread.c:1737
+#: Engine/sread.c:1753
 #, c-format
 msgid "illegal opcode %c"
 msgstr ""
 
-#: Engine/sread.c:1760
+#: Engine/sread.c:1776
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1774
+#: Engine/sread.c:1790
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1781
+#: Engine/sread.c:1797
 msgid "unmatched quote"
 msgstr ""
 
-#: Engine/sread.c:1825
+#: Engine/sread.c:1841
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1831
+#: Engine/sread.c:1847
 msgid "   zero substituted.\n"
 msgstr ""
 
@@ -2196,16 +2197,11 @@ msgstr ""
 msgid "    String truncated\n"
 msgstr ""
 
-#: Engine/symbtab.c:208
+#: Engine/symbtab.c:211
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:345
-#, c-format
-msgid "Unknown word type for %s on line %d\n"
-msgstr ""
-
 #: Engine/twarp.c:88
 msgid "twarp: illegal opcode\n"
 msgstr ""
@@ -2222,11 +2218,11 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
-#: InOut/cmidi.c:233
+#: InOut/cmidi.c:236
 msgid "CoreMIDI real time MIDI plugin for Csound\n"
 msgstr ""
 
-#: InOut/cmidi.c:247
+#: InOut/cmidi.c:250
 msgid "rtmidi: CoreMIDI module enabled\n"
 msgstr ""
 
@@ -2281,7 +2277,7 @@ msgstr ""
 msgid "writing %d sample blks of %d-bit floats to %s \n"
 msgstr ""
 
-#: InOut/libsnd.c:744 util/srconv.c:484
+#: InOut/libsnd.c:744 util/srconv.c:485
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr ""
@@ -2845,182 +2841,182 @@ msgstr ""
 msgid "rtmidi: PortMIDI module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:110
+#: InOut/rtalsa.c:113
 msgid "--scheduler: invalid priority value; the allowed range is:"
 msgstr ""
 
-#: InOut/rtalsa.c:111
+#: InOut/rtalsa.c:114
 msgid "  -20 to -1: set nice level"
 msgstr ""
 
-#: InOut/rtalsa.c:112
+#: InOut/rtalsa.c:115
 msgid "          0: normal scheduling, but lock memory"
 msgstr ""
 
-#: InOut/rtalsa.c:113
+#: InOut/rtalsa.c:116
 #, c-format
 msgid "    1 to %d: SCHED_RR with the specified priority (DANGEROUS)"
 msgstr ""
 
-#: InOut/rtalsa.c:330
+#: InOut/rtalsa.c:333
 #, c-format
 msgid " *** Cannot open device '%s' for audio output: %s"
 msgstr ""
 
-#: InOut/rtalsa.c:333
+#: InOut/rtalsa.c:336
 #, c-format
 msgid " *** Cannot open device '%s' for audio input: %s"
 msgstr ""
 
-#: InOut/rtalsa.c:394
+#: InOut/rtalsa.c:397
 #, c-format
 msgid "ALSA: -B %d not allowed on this device; using %d instead\n"
 msgstr ""
 
-#: InOut/rtalsa.c:417
+#: InOut/rtalsa.c:420
 #, c-format
 msgid "ALSA: -b %d not allowed on this device; using %d instead\n"
 msgstr ""
 
-#: InOut/rtalsa.c:430
+#: InOut/rtalsa.c:433
 #, c-format
 msgid "ALSA %s: total buffer size: %d, period size: %d\n"
 msgstr ""
 
-#: InOut/rtalsa.c:506
+#: InOut/rtalsa.c:509
 msgid " *** ALSA: must specify a device name, not a number (e.g. -odac:hw:0,0)"
 msgstr ""
 
-#: InOut/rtalsa.c:514
+#: InOut/rtalsa.c:517
 #, c-format
 msgid " *** ALSA: %s: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:601
+#: InOut/rtalsa.c:604
 msgid "Error reading data from audio input device"
 msgstr ""
 
-#: InOut/rtalsa.c:646
+#: InOut/rtalsa.c:649
 msgid "Error writing data to audio output device"
 msgstr ""
 
-#: InOut/rtalsa.c:687
+#: InOut/rtalsa.c:690
 msgid "ALSA MIDI: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:694
+#: InOut/rtalsa.c:697
 #, c-format
 msgid "ALSA: error opening MIDI input device: '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:698
+#: InOut/rtalsa.c:701
 #, c-format
 msgid "ALSA: opened MIDI input device '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:717
+#: InOut/rtalsa.c:720
 msgid "ALSA midi: Using all devices.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:746
+#: InOut/rtalsa.c:749
 #, c-format
 msgid "ALSA midi: Error opening device: %s\n"
 msgstr ""
 
-#: InOut/rtalsa.c:768
+#: InOut/rtalsa.c:771
 msgid "ALSA midi: No devices found.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:867
+#: InOut/rtalsa.c:870
 #, c-format
 msgid "ALSA: error opening MIDI output device '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:870
+#: InOut/rtalsa.c:873
 #, c-format
 msgid "ALSA: opened MIDI output device '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:910
+#: InOut/rtalsa.c:913
 msgid "-M stdin fcntl failed"
 msgstr ""
 
-#: InOut/rtalsa.c:918
+#: InOut/rtalsa.c:921
 #, c-format
 msgid "cannot open %s"
 msgstr ""
 
-#: InOut/rtalsa.c:929
+#: InOut/rtalsa.c:932
 msgid "MIDI receive: cannot get termios info."
 msgstr ""
 
-#: InOut/rtalsa.c:937
+#: InOut/rtalsa.c:940
 msgid "MIDI receive: cannot set input baud rate."
 msgstr ""
 
-#: InOut/rtalsa.c:943
+#: InOut/rtalsa.c:946
 msgid "MIDI receive: cannot set termios."
 msgstr ""
 
-#: InOut/rtalsa.c:947
+#: InOut/rtalsa.c:950
 #, c-format
 msgid "Opened MIDI input device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:987
+#: InOut/rtalsa.c:990
 #, c-format
 msgid "sensMIDI: retval errno %d"
 msgstr ""
 
-#: InOut/rtalsa.c:1054
+#: InOut/rtalsa.c:1057
 #, c-format
 msgid "Error opening MIDI output device file '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:1058
+#: InOut/rtalsa.c:1061
 #, c-format
 msgid "Opened MIDI output device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
+#: InOut/rtalsa.c:1104 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1106
+#: InOut/rtalsa.c:1109
 msgid "RT scheduler priority, alsa module"
 msgstr ""
 
-#: InOut/rtalsa.c:1111
+#: InOut/rtalsa.c:1114
 msgid "ALSA real-time audio and MIDI module for Csound by Istvan Varga\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1142
+#: InOut/rtalsa.c:1145
 msgid "rtaudio: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1157
+#: InOut/rtalsa.c:1160
 msgid "rtmidi: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1166
+#: InOut/rtalsa.c:1169
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtauhal.c:163
+#: InOut/rtauhal.c:162
 #, c-format
 msgid "selected input device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:166
+#: InOut/rtauhal.c:165
 #, c-format
 msgid "selected output device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:524
+#: InOut/rtauhal.c:523
 msgid "AuHAL module: device closed\n"
 msgstr ""
 
-#: InOut/rtauhal.c:541
+#: InOut/rtauhal.c:540
 msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
 msgstr ""
 
@@ -3115,7 +3111,7 @@ msgstr ""
 
 #: InOut/rtjack.c:317 InOut/rtjack.c:330 InOut/rtjack.c:335 InOut/rtjack.c:552
 #: InOut/rtjack.c:590 InOut/rtjack.c:595 InOut/rtjack.c:616 InOut/rtjack.c:621
-#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315 Opcodes/ftgen.c:79
+#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315
 msgid "memory allocation failure"
 msgstr ""
 
@@ -3677,58 +3673,58 @@ msgstr ""
 msgid "diskin2: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:231
+#: OOps/diskin2.c:232
 #, c-format
 msgid ""
 "diskin2: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:240
+#: OOps/diskin2.c:242
 msgid ""
 "diskin2: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:270
+#: OOps/diskin2.c:272
 #, c-format
 msgid "diskin2: warning: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:331
+#: OOps/diskin2.c:334
 msgid "diskin2: not initialised"
 msgstr ""
 
-#: OOps/diskin2.c:560
+#: OOps/diskin2.c:566
 msgid "soundin: invalid number of channels"
 msgstr ""
 
-#: OOps/diskin2.c:581
+#: OOps/diskin2.c:587
 msgid "soundin: unknown sample format"
 msgstr ""
 
-#: OOps/diskin2.c:591
+#: OOps/diskin2.c:597
 #, c-format
 msgid "soundin: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:599
+#: OOps/diskin2.c:605
 #, c-format
 msgid ""
 "soundin: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:609
+#: OOps/diskin2.c:615
 msgid ""
 "soundin: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:618
+#: OOps/diskin2.c:624
 #, c-format
 msgid "soundin: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:651
+#: OOps/diskin2.c:657
 msgid "soundin: not initialised"
 msgstr ""
 
@@ -3911,33 +3907,37 @@ msgid "tempest: not initialised"
 msgstr ""
 
 #: OOps/dumpf.c:45 OOps/dumpf.c:70 OOps/dumpf.c:95 OOps/dumpf.c:120
-#: OOps/dumpf.c:261 OOps/dumpf.c:288 OOps/dumpf.c:315 OOps/dumpf.c:342
+#: OOps/dumpf.c:263 OOps/dumpf.c:290 OOps/dumpf.c:317 OOps/dumpf.c:344
 msgid "unknown format request"
 msgstr ""
 
 #: OOps/dumpf.c:49 OOps/dumpf.c:74 OOps/dumpf.c:99 OOps/dumpf.c:124
-#: OOps/dumpf.c:265 OOps/dumpf.c:292 OOps/dumpf.c:319 OOps/dumpf.c:346
+#: OOps/dumpf.c:267 OOps/dumpf.c:294 OOps/dumpf.c:321 OOps/dumpf.c:348
 msgid "alaw and ulaw not implemented here"
 msgstr ""
 
-#: OOps/dumpf.c:193 OOps/dumpf.c:442
+#: OOps/dumpf.c:193 OOps/dumpf.c:443
 msgid "unknown kdump format"
 msgstr ""
 
+#: OOps/dumpf.c:196
+msgid "write failure in dumpk"
+msgstr ""
+
 #: OOps/fftlib.c:3195
 #, c-format
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:93
+#: OOps/goto_ops.c:95
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:186
+#: OOps/goto_ops.c:188
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:191
+#: OOps/goto_ops.c:193
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -3954,11 +3954,11 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
-#: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
-#: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
-#: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
-#: Opcodes/midiops2.c:388 Opcodes/midiops2.c:438 Opcodes/midiops2.c:472
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/midiops2.c:59
+#: Opcodes/midiops2.c:76 Opcodes/midiops2.c:120 Opcodes/midiops2.c:154
+#: Opcodes/midiops2.c:221 Opcodes/midiops2.c:252 Opcodes/midiops2.c:316
+#: Opcodes/midiops2.c:335 Opcodes/midiops2.c:375 Opcodes/midiops2.c:406
+#: Opcodes/midiops2.c:456 Opcodes/midiops2.c:490
 msgid "illegal controller number"
 msgstr ""
 
@@ -4488,7 +4488,7 @@ msgstr ""
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:261 Opcodes/socksend.c:305
+#: OOps/remote.c:261 Opcodes/socksend.c:300
 msgid "write to socket failed"
 msgstr ""
 
@@ -4505,15 +4505,15 @@ msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
 #: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
-#: Opcodes/socksend.c:284
+#: Opcodes/sockrecv.c:345
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:316 Opcodes/socksend.c:289
+#: OOps/remote.c:316 Opcodes/sockrecv.c:350
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:321 Opcodes/socksend.c:295
+#: OOps/remote.c:321 Opcodes/sockrecv.c:356
 msgid "accept failed"
 msgstr ""
 
@@ -4578,7 +4578,7 @@ msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
 
-#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:834
+#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:839
 msgid "Instrument not defined"
 msgstr ""
 
@@ -4792,8 +4792,6 @@ msgid "oscil(krate): not initialised"
 msgstr ""
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
-#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr ""
 
@@ -4909,7 +4907,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5096,1331 +5094,462 @@ msgstr ""
 msgid "pan: not initialised"
 msgstr ""
 
-#: OOps/ugrw1.c:922 OOps/ugrw1.c:1247
+#: OOps/ugrw1.c:922 OOps/ugrw1.c:1234
 #, c-format
 msgid "Table write offset %f < 0 or > tablelength"
 msgstr ""
 
-#: OOps/ugrw1.c:1242
+#: OOps/ugrw1.c:1229
 #, c-format
 msgid "Table write k rate function table no. %f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1290 OOps/ugrw1.c:1313 OOps/ugrw1.c:1392
+#: OOps/ugrw1.c:1277 OOps/ugrw1.c:1300 OOps/ugrw1.c:1379
 #, c-format
 msgid "Table %f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1469
+#: OOps/ugrw1.c:1456
 #, c-format
 msgid "Table no. < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f\n"
 msgstr ""
 
-#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1558 OOps/ugrw1.c:1770 OOps/ugrw1.c:1811
+#: OOps/ugrw1.c:1472 OOps/ugrw1.c:1545 OOps/ugrw1.c:1757 OOps/ugrw1.c:1798
 #, c-format
 msgid "Destination dft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1498 OOps/ugrw1.c:1569
+#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1556
 #, c-format
 msgid "Source 1 s1ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1508 OOps/ugrw1.c:1577
+#: OOps/ugrw1.c:1495 OOps/ugrw1.c:1564
 #, c-format
 msgid "Source 2 s2ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1543
+#: OOps/ugrw1.c:1530
 #, c-format
 msgid "Table number < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1758 OOps/ugrw1.c:1800
+#: OOps/ugrw1.c:1745 OOps/ugrw1.c:1787
 #, c-format
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
-#: Opcodes/fareyseq.c:475
+#: OOps/ugrw1.c:1768 OOps/ugrw1.c:1809
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1911 OOps/ugrw1.c:2032
+#: OOps/ugrw1.c:1898 OOps/ugrw1.c:2019
 #, c-format
 msgid "Table kfn=%.2f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1919 OOps/ugrw1.c:2040
+#: OOps/ugrw1.c:1906 OOps/ugrw1.c:2027
 #, c-format
 msgid "kfn table %.2f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1931 OOps/ugrw1.c:2053
+#: OOps/ugrw1.c:1918 OOps/ugrw1.c:2040
 #, c-format
 msgid "Table kfn=%.2f length %ld shorter than ksmps %d"
 msgstr ""
 
-#: OOps/ugrw1.c:1940 OOps/ugrw1.c:2062
+#: OOps/ugrw1.c:1927 OOps/ugrw1.c:2049
 #, c-format
 msgid "kstart %.2f is outside table %.2f range 0 to %ld"
 msgstr ""
 
-#: OOps/ugrw1.c:2156
+#: OOps/ugrw1.c:2143
 msgid "zakinit should only be called once."
 msgstr ""
 
-#: OOps/ugrw1.c:2160
+#: OOps/ugrw1.c:2147
 msgid "zakinit: both isizea and isizek should be > 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2191
+#: OOps/ugrw1.c:2178
 msgid "No zk space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2210
+#: OOps/ugrw1.c:2197
 msgid "zkr index > isizek. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2214
+#: OOps/ugrw1.c:2201
 msgid "zkr index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2242
-msgid "zir index > isizek. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2246
-msgid "zir index < 0. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2268
-msgid "zkw index > isizek. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2271
-msgid "zkw index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2296
-msgid "ziw index > isizek. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2299
-msgid "ziw index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2323
-msgid "zkwm index > isizek. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2326
-msgid "zkwm index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2359
-msgid "ziwm index > isizek. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2362
-msgid "ziwm index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2406
-msgid "zkmod kzkmod > isizek. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2432
-msgid "zkcl first or last > isizek. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2435
-msgid "zkcl first or last < 0. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2439
-msgid "zkcl first > last. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2461
-msgid "No za space: zakinit has not been called yet."
-msgstr ""
-
-#: OOps/ugrw1.c:2487
-msgid "zar index > isizea. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2491
-msgid "zar index < 0. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2523
-msgid "zarg index > isizea. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2528
-msgid "zarg index < 0. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2559 OOps/ugrw1.c:2590
-msgid "zaw index > isizea. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2562 OOps/ugrw1.c:2593
-msgid "zaw index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2646
-msgid "zamod kzamod > isizea. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2678
-msgid "zacl first or last > isizea. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2682
-msgid "zacl first or last < 0. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2687
-msgid "zacl first > last. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2819
-msgid "printk not initialised"
-msgstr ""
-
-#: OOps/ugrw1.c:2837
-#, c-format
-msgid "time %11.5f: "
-msgstr ""
-
-#: OOps/ugrw1.c:2898
-msgid "printks param 1 was not a \"quoted string\""
-msgstr ""
-
-#: OOps/ugrw1.c:3114
-msgid "printks not initialised"
-msgstr ""
-
-#: OOps/ugrw1.c:3245
-msgid "inz index > isizea. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:3247
-msgid "inz index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:3281 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
-msgid "outz index > isizea. No output"
-msgstr ""
-
-#: OOps/ugrw1.c:3283 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
-msgid "outz index < 0. No output."
-msgstr ""
-
-#: OOps/ugrw2.c:283
-#, c-format
-msgid "Illegal resonk iscl value, %f"
-msgstr ""
-
-#: OOps/vdelay.c:132 OOps/vdelay.c:377 OOps/vdelay.c:437 OOps/vdelay.c:503
-#: OOps/vdelay.c:569 OOps/vdelay.c:648 OOps/vdelay.c:727
-msgid "vdelay: not initialised"
-msgstr ""
-
-#: OOps/vdelay.c:234
-msgid "vdelay3: not initialised"
-msgstr ""
-
-#: OOps/vdelay.c:736
-msgid "Wrong input count in multitap\n"
-msgstr ""
-
-#: OOps/vdelay.c:779
-msgid "multitap: not initialised"
-msgstr ""
-
-#: OOps/vdelay.c:899
-msgid "High frequency diffusion not in (0, 1)\n"
-msgstr ""
-
-#: OOps/vdelay.c:915
-#, c-format
-msgid "reverbx; Combs ftable must have %d time and %d gain values"
-msgstr ""
-
-#: OOps/vdelay.c:947
-#, c-format
-msgid "reverbx; Alpas ftable must have %d time and %d gain values"
-msgstr ""
-
-#: OOps/vdelay.c:1058
-msgid "High frequency diffusion>1\n"
-msgstr ""
-
-#: OOps/vdelay.c:1062
-msgid "High frequency diffusion<0\n"
-msgstr ""
-
-#: OOps/vdelay.c:1066
-msgid "Non positive reverb time\n"
-msgstr ""
-
-#: OOps/vdelay.c:1124
-msgid "reverbx: not initialised"
-msgstr ""
-
-#: Opcodes/ambicode1.c:82
-msgid "The numbers of input and output arguments are not valid."
-msgstr ""
-
-#: Opcodes/ambicode1.c:165
-msgid "The number of input arguments is not valid."
-msgstr ""
-
-#: Opcodes/ambicode1.c:169
-msgid "The isetup value should be between 1 and 5."
-msgstr ""
-
-#: Opcodes/ambicode1.c:195
-msgid "The output channel count does not match the isetup value."
-msgstr ""
-
-#: Opcodes/ambicode.c:49
-msgid "bformenc is deprecated; use bformenc1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:88
-msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
-msgstr ""
-
-#: Opcodes/ambicode.c:287
-msgid "bformdec is deprecated; use bformdec1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:291
-msgid "Wrong number of input arguments!"
-msgstr ""
-
-#: Opcodes/ambicode.c:299
-msgid "Wrong number of output cells! There must be 2 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:344
-msgid "Wrong number of output cells! There must be 4 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
-msgid "Wrong number of output cells! There must be 5 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
-msgid "Wrong number of output cells! There must be 8 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:575
-msgid "Not supported setup number!"
-msgstr ""
-
-#: Opcodes/babo.c:742
-#, c-format
-msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
-msgstr ""
-
-#: Opcodes/bilbar.c:83
-msgid "No data to continue"
-msgstr ""
-
-#: Opcodes/bilbar.c:109
-msgid "Ends must be clamped(1), pivoting(2) or free(3)"
-msgstr ""
-
-#: Opcodes/biquad.c:599
-msgid "vco: not initialised"
-msgstr ""
-
-#: Opcodes/bowedbar.c:53
-#, c-format
-msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
-msgstr ""
-
-#: Opcodes/bowedbar.c:98
-msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
-msgstr ""
-
-#: Opcodes/clfilt.c:53
-msgid "filter type not lowpass or highpass in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:59
-#, c-format
-msgid "filter kind, %d, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:63
-#, c-format
-msgid "number of poles, %f, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:69
-#, c-format
-msgid "odd number of poles chosen in clfilt, rounded to %d"
-msgstr ""
-
-#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
-#, c-format
-msgid "passband ripple must be positive in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
-#, c-format
-msgid "passband ripple must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
-#, c-format
-msgid "stopband attenuation must be negative in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
-#, c-format
-msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
-msgid "Lowpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
-#: Opcodes/clfilt.c:383
-msgid "code error, ikind out of range"
-msgstr ""
-
-#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
-msgid "Highpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
-msgid "code error, ihilo out of range"
-msgstr ""
-
-#: Opcodes/control.c:40
-msgid "control: failed to allocate globals"
-msgstr ""
-
-#: Opcodes/control.c:56
-#, c-format
-msgid "Closing down wish(%d)\n"
-msgstr ""
-
-#: Opcodes/control.c:202
-#, c-format
-msgid "Slider %d set to %s\n"
-msgstr ""
-
-#: Opcodes/control.c:207
-#, c-format
-msgid "Unknown control %d"
-msgstr ""
-
-#: Opcodes/cpumeter.c:77
-#, c-format
-msgid "Failed to open /proc/stat: %s"
-msgstr ""
-
-#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
-#: Opcodes/cpumeter.c:151
-msgid "failed /proc/stat read"
-msgstr ""
-
-#: Opcodes/crossfm.c:34
-msgid "crossfm: ftable not found"
-msgstr ""
-
-#: Opcodes/date.c:68
-msgid "dates: buffer overflow"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/dssi4cs.c:823
-msgid "DSSI4CS: Not initialised or wrong argument types."
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:120
-#, c-format
-msgid "Failed to load plugin \"%s\": %s"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:155
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\": "
-"%s.\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:161
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\".\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:176
-#, c-format
-msgid "Unable to find label \"%s\" in plugin library file \"%s\"."
-msgstr ""
-
-#: Opcodes/fareygen.c:140
-msgid "insufficient arguments for fareytable"
-msgstr ""
-
-#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
-#, c-format
-msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:256
-#, c-format
-msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
-#, c-format
-msgid "Farey: Destination dft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
-#, c-format
-msgid "Farey: Source sft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:306
-msgid "Farey: Filter type < 1"
-msgstr ""
-
-#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
-#, c-format
-msgid "Table no. < 1 sft=%.2f"
-msgstr ""
-
-#: Opcodes/filter.c:187 Opcodes/filter.c:225
-msgid "Filter order out of bounds: (1 <= nb < 51, 0 <= na <= 50)"
-msgstr ""
-
-#: Opcodes/filter.c:672
-msgid "too many iterations in laguer"
-msgstr ""
-
-#: Opcodes/flanger.c:188
-msgid "wguide2 xfreq1 and xfreq2 arguments must be both a-rate or k and i-rate"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:195
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:149
-msgid "error allocating fluid engine\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:203
-#, c-format
-msgid ""
-"Created fluidEngine %d with sampling rate = %f, chorus %s, reverb %s, "
-"channels %d, polyphony %d.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:230
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:392
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:553
-#, c-format
-msgid "Illegal Engine Number: %i.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:238
-#, c-format
-msgid "Loading SoundFont : %s.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:244
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:208
-#, c-format
-msgid "fluid: unable to load %s"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:262
-#, c-format
-msgid "SoundFont: %3d  Bank: %3d  Preset: %3d  %s\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:483
-#, c-format
-msgid ""
-"result: %d \n"
-" Note off: c:%3d k:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:491
-#, c-format
-msgid ""
-"result: %d \n"
-"Note on: c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:496
-#, c-format
-msgid "Key pressure (not handled): c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:504
-#, c-format
-msgid "Result: %d Control change: c:%3d c:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:511
-#, c-format
-msgid "Result: %d Program change: c:%3d p:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:524
-#, c-format
-msgid "Result: %d, Pitch bend:     c:%d b:%d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:530
-#, c-format
-msgid "System exclusive (not handled): c:%3d v1:%3d v2:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:562
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:577
-msgid "Illegal Interpolation Method: Must be either 0, 1, 4, or 7.\n"
-msgstr ""
-
-#: Opcodes/fm4op.c:165
-msgid "No table for VibWaveato"
-msgstr ""
-
-#: Opcodes/fm4op.c:184
-msgid "No table for FM4Op"
-msgstr ""
-
-#: Opcodes/follow.c:38
-msgid "follow - zero length!"
-msgstr ""
-
-#: Opcodes/fout.c:60
-#, c-format
-msgid "Closing file '%s'...\n"
-msgstr ""
-
-#: Opcodes/fout.c:102
-msgid "invalid file handle"
-msgstr ""
-
-#: Opcodes/fout.c:109 Opcodes/fout.c:421
-msgid "invalid file name"
-msgstr ""
-
-#: Opcodes/fout.c:166
-#, c-format
-msgid "error opening file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:193
-#, c-format
-msgid "error opening sound file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:430
-#, c-format
-msgid "cannot close '%s': not found in list of open files"
-msgstr ""
-
-#: Opcodes/fout.c:441
-#, c-format
-msgid "cannot close file #%d: not a valid handle"
-msgstr ""
-
-#: Opcodes/fout.c:448
-#, c-format
-msgid "file #%d (%s) is in use, will be closed when released"
-msgstr ""
-
-#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
-msgid "fouti: invalid file handle"
-msgstr ""
-
-#: Opcodes/freeverb.c:258
-msgid "freeverb: not initialised"
-msgstr ""
-
-#: Opcodes/ftconv.c:156
-msgid "ftconv: invalid number of channels"
-msgstr ""
-
-#: Opcodes/ftconv.c:161
-msgid "ftconv: invalid impulse response partition length"
-msgstr ""
-
-#: Opcodes/ftconv.c:175
-msgid "ftconv: invalid length, or insufficient IR data for convolution"
-msgstr ""
-
-#: Opcodes/ftconv.c:193
-msgid "ftconv: skipped non-zero samples, impulse response may be truncated\n"
-msgstr ""
-
-#: Opcodes/ftconv.c:289
-msgid "ftconv: not initialised"
-msgstr ""
-
-#: Opcodes/ftgen.c:69 Opcodes/ftgen.c:182
-#, c-format
-msgid "Error deleting ftable %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:136 Opcodes/signalflowgraph.cpp:895
-msgid "ftgen string arg not allowed"
-msgstr ""
-
-#: Opcodes/ftgen.c:155 Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
-msgid "ftgen error"
-msgstr ""
-
-#: Opcodes/ftgen.c:179
-#, c-format
-msgid "Invalid table number: %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:347
-msgid "ftload: error allocating ftable"
-msgstr ""
-
-#: Opcodes/ftgen.c:349
-msgid "ftload: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:351
-msgid "ftload: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:354
-msgid "ftload: incorrect file"
-msgstr ""
-
-#: Opcodes/ftgen.c:467
-msgid "ftsave: Bad table number. Saving is possible only for existing tables."
-msgstr ""
-
-#: Opcodes/ftgen.c:470
-msgid "ftsave: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:472
-msgid "ftsave: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:474
-msgid "ftsave: failed to write file"
-msgstr ""
-
-#: Opcodes/gab/gab.c:111
-msgid "fastab: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
-msgid "tabw off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
-msgid "tab off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:185
-msgid "tab_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:192
-#, c-format
-msgid "tab_i off end: table number: %d\n"
-msgstr ""
-
-#: Opcodes/gab/gab.c:204
-msgid "tabw_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:211
-msgid "tabw_i off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:249
-msgid "tab_init: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:318
-msgid "printi parameter was not a \"quoted string\""
-msgstr ""
-
-#: Opcodes/gab/gab.c:425
-msgid "adsynt2: wavetable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:437
-msgid "adsynt2: freqtable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:442
-msgid "adsynt2: partial count is greater than freqtable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:451
-msgid "adsynt2: amptable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:456
-msgid "adsynt2: partial count is greater than amptable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:501
-msgid "adsynt2: not initialised"
-msgstr ""
-
-#: Opcodes/gab/gab.c:743
-msgid "max_k: invalid imaxflag value"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:70
-msgid "hvs1: a line segment must be delimited by 2 points at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:152
-msgid "hvs2: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:248
-msgid "hvs3: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:390
-msgid "vphaseseg: the first function is invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
-msgid "vphaseseg: invalid num. of elements"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:416
-msgid "vphaseseg: function invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
-msgid "vtable1: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
-msgid "copyTabElems: incorrect destination table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
-msgid ""
-"copyTabElems: destination table too short or number of elements to copy too "
-"big"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
-msgid "copyTabElems: incorrect source table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
-msgid ""
-"copyTabElems: source table size less than the number of elements to copy"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
-msgid "copyTabElems: source table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
-msgid "copyTabElems: destination table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:347
-msgid "inrg: audio input is not enabled"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:362
-msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:403
-msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
-#: Opcodes/gab/newgabopc.c:672
-msgid "invalid function"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:443
-msgid "lposc: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:577
-msgid "lposcil: no sample rate stored in function assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:674
-msgid "lposcil: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
-#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
-#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
-msgid "illegal channel"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
-#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
-#, c-format
-msgid "illegal control number at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:76
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d.  When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
-#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
-#: Opcodes/midiops3.c:347
-#, c-format
-msgid "illegal initvalue at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
-msgid "sliderXtable: zero is illegal in exponential operations"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:315
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d. When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
-#: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
-#: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
-msgid "illegal midi channel"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:43
-msgid "tabmorph: invalid table number"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:47
-msgid "tabmorph: all tables must have the same length!"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:35
-msgid "mtablei: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
-#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
-msgid "mtable: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:187
-msgid "mtabi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:254
-msgid "mtablewi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
-#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
-#: Opcodes/gab/vectorial.c:408
-msgid "mtabw: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:350
-msgid "mtabwi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:382
-msgid "mtablew: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
-#, c-format
-msgid "vadd_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:473
-msgid "vadd_i: ifn length exceeded"
+#: OOps/ugrw1.c:2229
+msgid "zir index > isizek. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:500
-msgid "vadd: ifn1 length exceeded"
+#: OOps/ugrw1.c:2233
+msgid "zir index < 0. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:532
-msgid "vmult_i: ifn length exceeded"
+#: OOps/ugrw1.c:2255
+msgid "zkw index > isizek. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:559
-msgid "vmult: ifn1 length exceeded"
+#: OOps/ugrw1.c:2258
+msgid "zkw index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:575
-#, c-format
-msgid "vpow_i: invalid table number %i"
+#: OOps/ugrw1.c:2283
+msgid "ziw index > isizek. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:592
-msgid "vpow_i: ifn length exceeded"
+#: OOps/ugrw1.c:2286
+msgid "ziw index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:620
-msgid "vpow: ifn1 length exceeded"
+#: OOps/ugrw1.c:2310
+msgid "zkwm index > isizek. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:636
-#, c-format
-msgid "vexp_i: invalid table number %i"
+#: OOps/ugrw1.c:2313
+msgid "zkwm index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:652
-msgid "vexp_i: ifn length exceeded"
+#: OOps/ugrw1.c:2346
+msgid "ziwm index > isizek. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:679
-msgid "vexp: ifn1 length exceeded"
+#: OOps/ugrw1.c:2349
+msgid "ziwm index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:697
-#, c-format
-msgid "vectorsop: ifn1 invalid table number %i"
+#: OOps/ugrw1.c:2393
+msgid "zkmod kzkmod > isizek. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:702
-#, c-format
-msgid "vectorsop: ifn2 invalid table number %i"
+#: OOps/ugrw1.c:2419
+msgid "zkcl first or last > isizek. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:742
-msgid "vcopy: ifn1 length exceeded"
+#: OOps/ugrw1.c:2422
+msgid "zkcl first or last < 0. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:760
-msgid "vcopy: ifn2 length exceeded"
+#: OOps/ugrw1.c:2426
+msgid "zkcl first > last. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:787
-#, c-format
-msgid "vcopy_i: ifn1 invalid table number %i"
+#: OOps/ugrw1.c:2448
+msgid "No za space: zakinit has not been called yet."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:792
-#, c-format
-msgid "vcopy_i: ifn2 invalid table number %i"
+#: OOps/ugrw1.c:2474
+msgid "zar index > isizea. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:814
-msgid "vcopy_i: ifn1 length exceeded"
+#: OOps/ugrw1.c:2478
+msgid "zar index < 0. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:831
-msgid "vcopy_i: ifn2 length exceeded"
+#: OOps/ugrw1.c:2510
+msgid "zarg index > isizea. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:870
-msgid "vaddv: ifn1 length exceeded"
+#: OOps/ugrw1.c:2515
+msgid "zarg index < 0. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:889
-msgid "vaddv: ifn2 length exceeded"
+#: OOps/ugrw1.c:2546 OOps/ugrw1.c:2577
+msgid "zaw index > isizea. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:915
-#, c-format
-msgid "vaddv_i: ifn1 invalid table number %i"
+#: OOps/ugrw1.c:2549 OOps/ugrw1.c:2580
+msgid "zaw index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:920
-#, c-format
-msgid "vaddv_i: ifn2 invalid table number %i"
+#: OOps/ugrw1.c:2633
+msgid "zamod kzamod > isizea. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:942
-msgid "vaddv_i: ifn1 length exceeded"
+#: OOps/ugrw1.c:2665
+msgid "zacl first or last > isizea. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:960
-msgid "vaddv_i: ifn2 length exceeded"
+#: OOps/ugrw1.c:2669
+msgid "zacl first or last < 0. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:991
-msgid "vsubv: ifn1 length exceeded"
+#: OOps/ugrw1.c:2674
+msgid "zacl first > last. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1010
-msgid "vsubv: ifn2 length exceeded"
+#: OOps/ugrw1.c:2806
+msgid "printk not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1037
+#: OOps/ugrw1.c:2824
 #, c-format
-msgid "vsubv_i: ifn1 invalid table number %i"
+msgid "time %11.5f: "
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1042
-#, c-format
-msgid "vsubv_i: ifn2 invalid table number %i"
+#: OOps/ugrw1.c:2885
+msgid "printks param 1 was not a \"quoted string\""
+msgstr ""
+
+#: OOps/ugrw1.c:3101
+msgid "printks not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1064
-msgid "vsubv_i: ifn1 length exceeded"
+#: OOps/ugrw1.c:3232
+msgid "inz index > isizea. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1082
-msgid "vsubv_i: ifn2 length exceeded"
+#: OOps/ugrw1.c:3234
+msgid "inz index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1119
-msgid "vmultv: ifn1 length exceeded"
+#: OOps/ugrw1.c:3268 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
+msgid "outz index > isizea. No output"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1138
-msgid "vmultv: ifn2 length exceeded"
+#: OOps/ugrw1.c:3270 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
+msgid "outz index < 0. No output."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1165
+#: OOps/ugrw2.c:283
 #, c-format
-msgid "vmultv_i: ifn1 invalid table number %i"
+msgid "Illegal resonk iscl value, %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1170
-#, c-format
-msgid "vmultv_i: ifn2 invalid table number %i"
+#: OOps/vdelay.c:132 OOps/vdelay.c:377 OOps/vdelay.c:437 OOps/vdelay.c:503
+#: OOps/vdelay.c:569 OOps/vdelay.c:648 OOps/vdelay.c:727
+msgid "vdelay: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1192
-msgid "vmultv_i: ifn1 length exceeded"
+#: OOps/vdelay.c:234
+msgid "vdelay3: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1209
-msgid "vmultv_i: ifn2 length exceeded"
+#: OOps/vdelay.c:738
+msgid "Wrong input count in multitap\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1246
-msgid "vdivv: ifn1 length exceeded"
+#: OOps/vdelay.c:781
+msgid "multitap: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1265
-msgid "vdivv: ifn2 length exceeded"
+#: OOps/vdelay.c:901
+msgid "High frequency diffusion not in (0, 1)\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1292
+#: OOps/vdelay.c:917
 #, c-format
-msgid "vdivv_i: ifn1 invalid table number %i"
+msgid "reverbx; Combs ftable must have %d time and %d gain values"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1297
+#: OOps/vdelay.c:949
 #, c-format
-msgid "vdivv_i: ifn2 invalid table number %i"
+msgid "reverbx; Alpas ftable must have %d time and %d gain values"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1319
-msgid "vdivv_i: ifn1 length exceeded"
+#: OOps/vdelay.c:1062
+msgid "High frequency diffusion>1\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1337
-msgid "vdivv_i: ifn2 length exceeded"
+#: OOps/vdelay.c:1066
+msgid "High frequency diffusion<0\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1374
-msgid "vpowv: ifn1 length exceeded"
+#: OOps/vdelay.c:1070
+msgid "Non positive reverb time\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1393
-msgid "vpowv: ifn2 length exceeded"
+#: OOps/vdelay.c:1128
+msgid "reverbx: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1420
-#, c-format
-msgid "vpowv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode1.c:82
+msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1425
-#, c-format
-msgid "vpowv_i: ifn2 invalid table number %i"
+#: Opcodes/ambicode1.c:167
+msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1447
-msgid "vpowv_i: ifn1 length exceeded"
+#: Opcodes/ambicode1.c:171
+msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1464
-msgid "vpowv_i: ifn2 length exceeded"
+#: Opcodes/ambicode1.c:197
+msgid "The output channel count does not match the isetup value."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1501
-msgid "vexpv: ifn1 length exceeded"
+#: Opcodes/ambicode.c:49
+msgid "bformenc is deprecated; use bformenc1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1520
-msgid "vexpv: ifn2 length exceeded"
+#: Opcodes/ambicode.c:88
+msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1547
-#, c-format
-msgid "vexpv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:287
+msgid "bformdec is deprecated; use bformdec1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1552
-#, c-format
-msgid "vexpv_i: ifn2 invalid table number %i"
+#: Opcodes/ambicode.c:291
+msgid "Wrong number of input arguments!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1574
-msgid "vexpv_i: ifn1 length exceeded"
+#: Opcodes/ambicode.c:299
+msgid "Wrong number of output cells! There must be 2 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1592
-msgid "vexpv_i: ifn2 length exceeded"
+#: Opcodes/ambicode.c:344
+msgid "Wrong number of output cells! There must be 4 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1629
-msgid "vmap: Error: ifn1 and ifn2 can not be the same"
+#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
+msgid "Wrong number of output cells! There must be 5 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1634
-#, c-format
-msgid "vmap: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
+msgid "Wrong number of output cells! There must be 8 output cells."
+msgstr ""
+
+#: Opcodes/ambicode.c:575
+msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1639
+#: Opcodes/babo.c:742
 #, c-format
-msgid "vmap: ifn2 invalid table number %i"
+msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1661
-msgid "vmap: ifn1 length exceeded"
+#: Opcodes/bilbar.c:83
+msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1678
-msgid "vmap: ifn2 length exceeded"
+#: Opcodes/bilbar.c:109
+msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1698
-msgid "vectorop: invalid num of elements"
+#: Opcodes/biquad.c:599
+msgid "vco: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1727
-msgid "vport: invalid table length or num of elements"
+#: Opcodes/bowedbar.c:53
+#, c-format
+msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1730
-msgid "vport: invalid table"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1735
-msgid "vport: invalid init table length or num of elements"
+#: Opcodes/cellular.c:49 Opcodes/cellular.c:55
+msgid "cell: invalid num of elements"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1738
-msgid "vport: invalid init table"
+#: Opcodes/cellular.c:51
+msgid "cell: invalid output table"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1875
-#, c-format
-msgid "vrandh: Seeding from current time %lu\n"
+#: Opcodes/cellular.c:58
+msgid "cell: invalid initial state table"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1888
-msgid "vrandh: Invalid table."
+#: Opcodes/cellular.c:63
+msgid "cell: invalid rule table"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1891
-msgid "vrandh: idstoffset is greater than table length."
+#: Opcodes/clfilt.c:53
+msgid "filter type not lowpass or highpass in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1896
-msgid "randh: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:59
+#, c-format
+msgid "filter kind, %d, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1975
+#: Opcodes/clfilt.c:63
 #, c-format
-msgid "vrandi: Seeding from current time %lu\n"
+msgid "number of poles, %f, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1987
-msgid "vrandi: Invalid table."
+#: Opcodes/clfilt.c:69
+#, c-format
+msgid "odd number of poles chosen in clfilt, rounded to %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1990
-msgid "vrandi: idstoffset is greater thantable length."
+#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
+#, c-format
+msgid "passband ripple must be positive in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1995
-msgid "vrandi: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
+#, c-format
+msgid "passband ripple must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
-#: Opcodes/gab/vectorial.c:2091
-msgid "vecdelay: invalid num of elements"
+#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
+#, c-format
+msgid "stopband attenuation must be negative in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2079
-msgid "vecdly: invalid output table"
+#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
+#, c-format
+msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2086
-msgid "vecdly: invalid input table"
+#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
+msgid "Lowpass Elliptical not implemented yet. Sorry!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2093
-msgid "vecdly: invalid delay table"
+#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
+#: Opcodes/clfilt.c:383
+msgid "code error, ikind out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2138
-msgid "vecdly: not initialised"
+#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
+msgid "Highpass Elliptical not implemented yet. Sorry!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2181
-msgid "vlinseg/vexpseg: invalid num. of elements"
+#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
+msgid "code error, ihilo out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
+#: Opcodes/control.c:40
+msgid "control: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
+#: Opcodes/control.c:56
+#, c-format
+msgid "Closing down wish(%d)\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2406
-msgid "vdelayk: not initialised"
+#: Opcodes/control.c:211
+#, c-format
+msgid "Slider %d set to %s\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
-msgid "cella: invalid num of elements"
+#: Opcodes/control.c:216
+#, c-format
+msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2441
-msgid "cella: invalid output table"
+#: Opcodes/cpumeter.c:77
+#, c-format
+msgid "Failed to open /proc/stat: %s"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2448
-msgid "cella: invalid initial state table"
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
+msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2452
-msgid "cella: invalid rule table"
+#: Opcodes/crossfm.c:34
+msgid "crossfm: ftable not found"
 msgstr ""
 
 #: Opcodes/grain4.c:59
@@ -6587,7 +5716,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1259
 msgid ""
 "\n"
 "WARNING: fades are overlapping: this could lead to noise: reduce fade size "
@@ -6623,29 +5752,29 @@ msgstr ""
 msgid "pvsifd: unsupported value for iwintype\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:426
+#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:429
 #, c-format
 msgid "imageload: cannot open image %s.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:111
+#: Opcodes/imageOpcodes.c:108 Opcodes/imageOpcodes.c:114
 #, c-format
 msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
-#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
-#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:122 Opcodes/imageOpcodes.c:129
+#: Opcodes/imageOpcodes.c:168 Opcodes/imageOpcodes.c:177
+#: Opcodes/imageOpcodes.c:191 Opcodes/imageOpcodes.c:294
+#: Opcodes/imageOpcodes.c:301 Opcodes/imageOpcodes.c:314
 msgid "imageload: out of memory.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:283
+#: Opcodes/imageOpcodes.c:286
 #, c-format
 msgid "imageload: cannot open image %s for writing.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:392
+#: Opcodes/imageOpcodes.c:395
 msgid "Cannot allocate memory.\n"
 msgstr ""
 
@@ -6689,29 +5818,29 @@ msgstr ""
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:892
+#: Opcodes/jacko.cpp:894
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:895
+#: Opcodes/jacko.cpp:897
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:911
+#: Opcodes/jacko.cpp:913
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
-#: Opcodes/jacko.cpp:1241
+#: Opcodes/jacko.cpp:957 Opcodes/jacko.cpp:1064 Opcodes/jacko.cpp:1171
+#: Opcodes/jacko.cpp:1243
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
-#: Opcodes/jacko.cpp:1255
+#: Opcodes/jacko.cpp:971 Opcodes/jacko.cpp:1079 Opcodes/jacko.cpp:1186
+#: Opcodes/jacko.cpp:1257
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6764,8 +5893,8 @@ msgstr ""
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
-#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:120
+#: Opcodes/pvlock.c:322 Opcodes/pvsbasic.c:463
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
@@ -6794,15 +5923,36 @@ msgstr ""
 msgid "splitrig: incorrect table number"
 msgstr ""
 
-#: Opcodes/midiops2.c:514 Opcodes/midiops2.c:529 Opcodes/midiops2.c:548
+#: Opcodes/midiops2.c:339 Opcodes/midiops2.c:377 Opcodes/midiops2.c:409
+#: Opcodes/midiops2.c:458 Opcodes/midiops2.c:493 Opcodes/midiops2.c:535
+#: Opcodes/midiops2.c:550 Opcodes/midiops2.c:569
+msgid "illegal midi channel"
+msgstr ""
+
+#: Opcodes/midiops2.c:532 Opcodes/midiops2.c:547 Opcodes/midiops2.c:566
 msgid "value out of range"
 msgstr ""
 
-#: Opcodes/midiops2.c:580
+#: Opcodes/midiops2.c:598
 #, c-format
 msgid "invalid channel number: %d"
 msgstr ""
 
+#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
+#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
+msgid "illegal channel"
+msgstr ""
+
+#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
+#, c-format
+msgid "illegal control number at position n.%d"
+msgstr ""
+
+#: Opcodes/midiops3.c:64 Opcodes/midiops3.c:168 Opcodes/midiops3.c:347
+#, c-format
+msgid "illegal initvalue at position n.%d"
+msgstr ""
+
 #: Opcodes/midiops3.c:333 Opcodes/midiops3.c:428
 #, c-format
 msgid "illegal msb control number at position n.%d"
@@ -6841,12 +5991,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
+#: Opcodes/mp3in.c:101 Opcodes/mp3in.c:242
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:140
+#: Opcodes/mp3in.c:148
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7000,6 +6150,10 @@ msgstr ""
 msgid "vco2init: invalid max table size"
 msgstr ""
 
+#: Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
+msgid "ftgen error"
+msgstr ""
+
 #: Opcodes/oscbnk.c:1757
 msgid "vco2init: invalid source ftable"
 msgstr ""
@@ -7056,72 +6210,72 @@ msgstr ""
 msgid "rbjeq: invalid filter type"
 msgstr ""
 
-#: Opcodes/OSC.c:122
+#: Opcodes/OSC.c:126
 msgid "Too many arguments to OSCsend"
 msgstr ""
 
-#: Opcodes/OSC.c:125
+#: Opcodes/OSC.c:129
 msgid "No a-rate arguments allowed"
 msgstr ""
 
-#: Opcodes/OSC.c:163 Opcodes/OSC.c:168 Opcodes/OSC.c:173 Opcodes/OSC.c:183
-#: Opcodes/OSC.c:190 Opcodes/OSC.c:195 Opcodes/OSC.c:206 Opcodes/OSC.c:214
-#: Opcodes/OSC.c:232
+#: Opcodes/OSC.c:167 Opcodes/OSC.c:172 Opcodes/OSC.c:177 Opcodes/OSC.c:187
+#: Opcodes/OSC.c:194 Opcodes/OSC.c:199 Opcodes/OSC.c:210 Opcodes/OSC.c:218
+#: Opcodes/OSC.c:236
 msgid "String not expected"
 msgstr ""
 
-#: Opcodes/OSC.c:202
+#: Opcodes/OSC.c:206
 msgid "Not a string when needed"
 msgstr ""
 
-#: Opcodes/OSC.c:219
+#: Opcodes/OSC.c:223
 msgid "Time stamp is two values"
 msgstr ""
 
-#: Opcodes/OSC.c:240
+#: Opcodes/OSC.c:244
 #, c-format
 msgid "ftable %.2f does not exist"
 msgstr ""
 
-#: Opcodes/OSC.c:249
+#: Opcodes/OSC.c:253
 #, c-format
 msgid "Unknown OSC type %c\n"
 msgstr ""
 
-#: Opcodes/OSC.c:428
+#: Opcodes/OSC.c:436
 msgid "OSC: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/OSC.c:446
+#: Opcodes/OSC.c:455
 msgid "OSCrecv is already running"
 msgstr ""
 
-#: Opcodes/OSC.c:589
+#: Opcodes/OSC.c:599
 msgid "OSC deinitiatised\n"
 msgstr ""
 
-#: Opcodes/OSC.c:613
+#: Opcodes/OSC.c:623
 #, c-format
 msgid "OSC listener #%d started on port %s\n"
 msgstr ""
 
-#: Opcodes/OSC.c:663
+#: Opcodes/OSC.c:673
 msgid "OSC not running"
 msgstr ""
 
-#: Opcodes/OSC.c:667
+#: Opcodes/OSC.c:677
 msgid "invalid handle"
 msgstr ""
 
-#: Opcodes/OSC.c:674
+#: Opcodes/OSC.c:684
 msgid "invalid number of arguments"
 msgstr ""
 
-#: Opcodes/OSC.c:695 Opcodes/OSC.c:700
+#: Opcodes/OSC.c:705 Opcodes/OSC.c:710
 msgid "argument list inconsistent with format string"
 msgstr ""
 
-#: Opcodes/OSC.c:704
+#: Opcodes/OSC.c:714
 msgid "invalid type"
 msgstr ""
 
@@ -7141,11 +6295,11 @@ msgstr ""
 msgid "partikkel: "
 msgstr ""
 
-#: Opcodes/partikkel.c:806
+#: Opcodes/partikkel.c:807
 msgid "partikkelsync: opcode id needs to be a non-zero integer"
 msgstr ""
 
-#: Opcodes/partikkel.c:810 Opcodes/partikkel.c:816
+#: Opcodes/partikkel.c:811 Opcodes/partikkel.c:817
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
@@ -7300,36 +6454,36 @@ msgid ""
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1733
+#: Opcodes/pitch.c:1598
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1784
+#: Opcodes/pitch.c:1649
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
+#: Opcodes/pitch.c:1699 Opcodes/pitch.c:1842
 msgid "Error: transeg not initialised (krate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
+#: Opcodes/pitch.c:1734 Opcodes/pitch.c:1892
 msgid "transeg: not initialised (arate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1924
+#: Opcodes/pitch.c:1789
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2294
+#: Opcodes/pitch.c:2159
 msgid "median: not initialised (arate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
+#: Opcodes/pitch.c:2163 Opcodes/pitch.c:2210
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2341
+#: Opcodes/pitch.c:2206
 msgid "median: not initialised (krate)\n"
 msgstr ""
 
@@ -7356,17 +6510,6 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr ""
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
-#: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
-#: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
-#: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
-msgid "Unsafe to have same fsig as in and out"
-msgstr ""
-
-#: Opcodes/ppp.c:36 Opcodes/pvslock.c:36
-msgid "pvslock: signal format must be amp-phase or amp-freq."
-msgstr ""
-
 #: Opcodes/psynth.c:97 Opcodes/psynth.c:253
 msgid "psynth: first input not in TRACKS format\n"
 msgstr ""
@@ -7530,7 +6673,14 @@ msgstr ""
 msgid "invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/pvlock.c:490
+#: Opcodes/pvlock.c:480 Opcodes/pvsband.c:46 Opcodes/pvsbasic.c:578
+#: Opcodes/pvsbasic.c:883 Opcodes/pvsbasic.c:1083 Opcodes/pvsbasic.c:1183
+#: Opcodes/pvsbasic.c:1398 Opcodes/pvsbasic.c:1598 Opcodes/pvsbasic.c:1763
+#: Opcodes/pvslock.c:20
+msgid "Unsafe to have same fsig as in and out"
+msgstr ""
+
+#: Opcodes/pvlock.c:492
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7569,75 +6719,75 @@ msgstr ""
 msgid "pvsdiskin: could not open file %s\n"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:606
+#: Opcodes/pvsbasic.c:609
 msgid "pvsfreeze: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:679
+#: Opcodes/pvsbasic.c:682
 msgid "pvsosc does not work while sliding"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:910
+#: Opcodes/pvsbasic.c:913
 msgid "pvsmooth: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1020
+#: Opcodes/pvsbasic.c:1023
 msgid "pvsmix: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1070
+#: Opcodes/pvsbasic.c:1073
 msgid "pvsmix: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1083
+#: Opcodes/pvsbasic.c:1086
 msgid "pvsfilter: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1156
+#: Opcodes/pvsbasic.c:1159
 msgid "pvsfilter: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1159
+#: Opcodes/pvsbasic.c:1162
 msgid "pvsfilter: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1372
+#: Opcodes/pvsbasic.c:1375
 msgid "pvscale: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1570
+#: Opcodes/pvsbasic.c:1575
 msgid "pvshift: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1741
+#: Opcodes/pvsbasic.c:1748
 msgid "pvswarp: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1758
+#: Opcodes/pvsbasic.c:1765
 msgid "pvsblur does not work sliding yet"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1890
+#: Opcodes/pvsbasic.c:1897
 msgid "pvsblur: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1925
+#: Opcodes/pvsbasic.c:1932
 msgid "pvstencil: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1933
+#: Opcodes/pvsbasic.c:1940
 msgid "pvstencil: ftable needs to equal the number of bins"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2001
+#: Opcodes/pvsbasic.c:2008
 msgid "pvstencil: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2148
+#: Opcodes/pvsbasic.c:2158
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/pvsbasic.c:2161 Opcodes/pvsbasic.c:2201 Opcodes/tabvars.c:56
 #: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
 #: Opcodes/tabvars.c:181
 msgid "t-variable not initialised"
@@ -7680,6 +6830,10 @@ msgstr ""
 msgid "pvsgendy: not initialised"
 msgstr ""
 
+#: Opcodes/pvslock.c:36
+msgid "pvslock: signal format must be amp-phase or amp-freq."
+msgstr ""
+
 #: Opcodes/repluck.c:164
 #, c-format
 msgid "Reflection invalid (%f)\n"
@@ -7920,7 +7074,7 @@ msgid ""
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2194
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
@@ -7940,15 +7094,15 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1992 Opcodes/sfont.c:1998
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1999
+#: Opcodes/sfont.c:2001
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2537
+#: Opcodes/sfont.c:2539
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
@@ -7960,6 +7114,10 @@ msgstr ""
 msgid "inletf: signal format must be amp-phase or amp-freq."
 msgstr ""
 
+#: Opcodes/signalflowgraph.cpp:895
+msgid "ftgen string arg not allowed"
+msgstr ""
+
 #: Opcodes/signalflowgraph.cpp:921
 msgid "ftgenonce error"
 msgstr ""
@@ -7995,7 +7153,7 @@ msgstr ""
 msgid "crossfade longer than loop duration\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389 Opcodes/sndloop.c:661
+#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389
 msgid "function table not found\n"
 msgstr ""
 
@@ -8015,15 +7173,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1071
+#: Opcodes/sndloop.c:1072
 msgid "pvsvoc: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1122
+#: Opcodes/sndloop.c:1123
 msgid "pvsmorph: not initialised\n"
 msgstr ""
 
@@ -8043,30 +7201,30 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr ""
 
-#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
-#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:315
+#: Opcodes/socksend.c:74 Opcodes/socksend.c:158 Opcodes/socksend.c:252
 #, c-format
 msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
-#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:321
+#: Opcodes/socksend.c:87 Opcodes/socksend.c:172 Opcodes/socksend.c:259
 msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:347
-#, c-format
-msgid "connect failed (%d)"
-msgstr ""
-
-#: Opcodes/sockrecv.c:360
+#: Opcodes/sockrecv.c:366
 msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
+#: Opcodes/socksend.c:127 Opcodes/socksend.c:216
 msgid "sendto failed"
 msgstr ""
 
+#: Opcodes/socksend.c:287
+#, c-format
+msgid "connect failed (%d)"
+msgstr ""
+
 #: Opcodes/space.c:165
 msgid "space: not initialised"
 msgstr ""
@@ -8421,20 +7579,34 @@ msgstr ""
 msgid "Min and max the same"
 msgstr ""
 
-#: Opcodes/uggab.c:424
+#: Opcodes/uggab.c:215
+msgid "table not found in poscil"
+msgstr ""
+
+#: Opcodes/uggab.c:234 Opcodes/uggab.c:261 Opcodes/uggab.c:290
+#: Opcodes/uggab.c:318
+msgid "poscil: not initialised"
+msgstr ""
+
+#: Opcodes/uggab.c:365 Opcodes/uggab.c:412 Opcodes/uggab.c:460
+#: Opcodes/uggab.c:509
+msgid "poscil3: not initialised"
+msgstr ""
+
+#: Opcodes/uggab.c:589
 msgid "losc: no sample rate stored in function assuming=sr\n"
 msgstr ""
 
-#: Opcodes/uggab.c:556
+#: Opcodes/uggab.c:721
 #, c-format
 msgid "illegal reson iscl value: %f"
 msgstr ""
 
-#: Opcodes/uggab.c:579
+#: Opcodes/uggab.c:744
 msgid "loop cannot be zero"
 msgstr ""
 
-#: Opcodes/uggab.c:1056 Opcodes/uggab.c:1098
+#: Opcodes/uggab.c:1221 Opcodes/uggab.c:1263
 msgid "vibrato(krate): not initialised"
 msgstr ""
 
@@ -8817,6 +7989,14 @@ msgstr ""
 msgid "vosim: not initialised"
 msgstr ""
 
+#: Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr ""
+
+#: Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr ""
+
 #: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
@@ -8943,47 +8123,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:739
+#: Top/argdecode.c:77 util/srconv.c:740
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -8991,7 +8171,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:749
+#: Top/argdecode.c:89 util/srconv.c:750
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -8999,7 +8179,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:750
+#: Top/argdecode.c:91 util/srconv.c:751
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9059,7 +8239,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9067,7 +8247,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9132,7 +8312,7 @@ msgid "--nopeaks\t\tDo not write peak information"
 msgstr ""
 
 #: Top/argdecode.c:136
-msgid "--nodisplays\t\tsUppress all displays"
+msgid "--nodisplays\t\tSuppress all displays"
 msgstr ""
 
 #: Top/argdecode.c:137
@@ -9635,49 +8815,49 @@ msgstr ""
 msgid "error: orchestra and score name not allowed in .csoundrc"
 msgstr ""
 
-#: Top/cscorfns.c:276
+#: Top/cscorfns.c:277
 msgid "PMAX exceeded, string event truncated.\n"
 msgstr ""
 
-#: Top/cscorfns.c:663
+#: Top/cscorfns.c:666
 #, c-format
 msgid "%s found %d f event%s with non-zero p2\n"
 msgstr ""
 
-#: Top/cscorfns.c:664
+#: Top/cscorfns.c:667
 msgid "s"
 msgstr ""
 
-#: Top/cscorfns.c:767
+#: Top/cscorfns.c:770
 msgid "cscore: too many input files open"
 msgstr ""
 
-#: Top/cscorfns.c:805
+#: Top/cscorfns.c:810
 msgid "cscore: tried to set an unknown file pointer as the current file"
 msgstr ""
 
-#: Top/cscorfns.c:819
+#: Top/cscorfns.c:824
 msgid "csoundInitializeCscore: no input score given."
 msgstr ""
 
-#: Top/cscorfns.c:824
+#: Top/cscorfns.c:829 Top/cscorfns.c:858
 msgid "csoundInitializeCscore: no output score given."
 msgstr ""
 
-#: Top/cscorfns.c:852
+#: Top/cscorfns.c:889
 #, c-format
 msgid "cscoreFileOpen: error opening %s"
 msgstr ""
 
-#: Top/cscorfns.c:870
+#: Top/cscorfns.c:907
 msgid "cscoreFileClose: NULL file pointer\n"
 msgstr ""
 
-#: Top/cscorfns.c:882
+#: Top/cscorfns.c:919
 msgid "cscoreFileClose: fp not recorded\n"
 msgstr ""
 
-#: Top/cscorfns.c:888
+#: Top/cscorfns.c:925
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
@@ -9716,129 +8896,129 @@ msgstr ""
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
-#: Top/csmodule.c:638 Top/csmodule.c:646
+#: Top/csmodule.c:607 Top/csmodule.c:613 Top/csmodule.c:624 Top/csmodule.c:631
+#: Top/csmodule.c:637 Top/csmodule.c:645
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:696
+#: Top/csmodule.c:695
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:731
+#: Top/csmodule.c:730
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:737
+#: Top/csmodule.c:736
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:773
+#: Top/csmodule.c:772
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:796
+#: Top/csmodule.c:795
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:819
+#: Top/csmodule.c:818
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:918
+#: Top/csmodule.c:917
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1636 Top/csound.c:1656
+#: Top/csound.c:1640 Top/csound.c:1660
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1642
+#: Top/csound.c:1646
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1675
+#: Top/csound.c:1679
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1700
+#: Top/csound.c:1704
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1707
+#: Top/csound.c:1711
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1727
+#: Top/csound.c:1731
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1998
+#: Top/csound.c:2002
 msgid "WARNING: "
 msgstr ""
 
-#: Top/csound.c:2119
+#: Top/csound.c:2123
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2120
+#: Top/csound.c:2124
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2149 Top/csound.c:2185
+#: Top/csound.c:2153 Top/csound.c:2189
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2153 Top/csound.c:2189
+#: Top/csound.c:2157 Top/csound.c:2193
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2271
+#: Top/csound.c:2275
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2276 Top/csound.c:2310
+#: Top/csound.c:2280 Top/csound.c:2314
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2279 Top/csound.c:2313
+#: Top/csound.c:2283 Top/csound.c:2317
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2305
+#: Top/csound.c:2309
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2327
+#: Top/csound.c:2331
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2445
+#: Top/csound.c:2449
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2552
+#: Top/csound.c:2556
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2575
+#: Top/csound.c:2579
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2906
+#: Top/csound.c:2912
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2957
+#: Top/csound.c:2963
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9894,57 +9074,47 @@ msgstr ""
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:334
+#: Top/main.c:318
+#, c-format
+msgid "Failed to open input file %s\n"
+msgstr ""
+
+#: Top/main.c:339
 msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:352
+#: Top/main.c:360
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:359
+#: Top/main.c:367
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:369
+#: Top/main.c:377
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr ""
 
-#: Top/main.c:371
+#: Top/main.c:379
 msgid "sorting score ...\n"
 msgstr ""
 
-#: Top/main.c:381
-#, c-format
-msgid "cannot extract %s, name conflict"
-msgstr ""
-
-#: Top/main.c:384
+#: Top/main.c:389
 #, c-format
 msgid "cannot open extract file %s"
 msgstr ""
 
-#: Top/main.c:388
-#, c-format
-msgid "cannot reopen %s"
-msgstr ""
-
 #: Top/main.c:392
-#, c-format
-msgid "cannot open %s for writing"
-msgstr ""
-
-#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:405
+#: Top/main.c:401
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:407
+#: Top/main.c:403
 msgid "Syntax check completed.\n"
 msgstr ""
 
@@ -10009,158 +9179,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:110 Top/one_file.c:118
+#: Top/one_file.c:120 Top/one_file.c:130
 msgid " *** cannot create temporary file"
 msgstr ""
 
-#: Top/one_file.c:203
+#: Top/one_file.c:215
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:207
+#: Top/one_file.c:219
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr ""
 
-#: Top/one_file.c:274 Top/one_file.c:302
+#: Top/one_file.c:286 Top/one_file.c:314
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:319
+#: Top/one_file.c:331
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:322
+#: Top/one_file.c:334
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:328 Top/one_file.c:744
+#: Top/one_file.c:340 Top/one_file.c:763
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:354
+#: Top/one_file.c:371
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:376 Top/one_file.c:430
+#: Top/one_file.c:393 Top/one_file.c:449
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:391 Top/one_file.c:396
+#: Top/one_file.c:408 Top/one_file.c:413
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:408
+#: Top/one_file.c:425
 #, c-format
 msgid "Creating %s (%p)\n"
 msgstr ""
 
-#: Top/one_file.c:421
+#: Top/one_file.c:438
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:468
+#: Top/one_file.c:487
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:487
+#: Top/one_file.c:506
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:503
+#: Top/one_file.c:522
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:539
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:536 Top/one_file.c:584
+#: Top/one_file.c:555 Top/one_file.c:603
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:541
+#: Top/one_file.c:560
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:555
+#: Top/one_file.c:574
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:589
+#: Top/one_file.c:608
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:604
+#: Top/one_file.c:623
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:624
+#: Top/one_file.c:643
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:632 Top/one_file.c:639
+#: Top/one_file.c:651 Top/one_file.c:658
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:645
+#: Top/one_file.c:664
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:655
+#: Top/one_file.c:674
 msgid "**** Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:661
+#: Top/one_file.c:680
 msgid "**** End of Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:691
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:703
+#: Top/one_file.c:722
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:718
+#: Top/one_file.c:737
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:734
+#: Top/one_file.c:753
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:740
+#: Top/one_file.c:759
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:754
+#: Top/one_file.c:773
 msgid "Creating orchestra\n"
 msgstr ""
 
-#: Top/one_file.c:759
+#: Top/one_file.c:778
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:793
+#: Top/one_file.c:812
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:798
+#: Top/one_file.c:817
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 
@@ -10173,159 +9343,159 @@ msgstr ""
 msgid "%d opcodes\n"
 msgstr ""
 
-#: Top/threads.c:38
+#: Top/threads.c:92 Top/threads.c:556
 #, c-format
 msgid "%s() is not implemented on this platform.\n"
 msgstr ""
 
-#: Top/utility.c:98
+#: Top/utility.c:99
 #, c-format
 msgid "util %s:\n"
 msgstr ""
 
-#: Top/utility.c:105
+#: Top/utility.c:106
 #, c-format
 msgid "Error: utility '%s' not found"
 msgstr ""
 
-#: Top/utility.c:108
+#: Top/utility.c:109
 msgid "Error: utility not found"
 msgstr ""
 
-#: Top/utility.c:112
+#: Top/utility.c:113
 msgid "The available utilities are:\n"
 msgstr ""
 
-#: util1/scot/scot.c:51
+#: util1/scot/scot.c:56
 msgid "Score must start with orchestra section"
 msgstr ""
 
-#: util1/scot/scot.c:61
+#: util1/scot/scot.c:66
 msgid "Expected score or functions section"
 msgstr ""
 
-#: util1/scot/scot.c:117
+#: util1/scot/scot.c:122
 msgid "Tempo must be specified"
 msgstr ""
 
-#: util1/scot/scot.c:121
+#: util1/scot/scot.c:126
 msgid "Redefinition of tempo"
 msgstr ""
 
-#: util1/scot/scot.c:133
+#: util1/scot/scot.c:138
 msgid "Must specify 2 or more letters of keyword"
 msgstr ""
 
-#: util1/scot/scot.c:136 util1/scot/scot.c:145 util1/scot/scot.c:154
+#: util1/scot/scot.c:141 util1/scot/scot.c:150 util1/scot/scot.c:159
 msgid "Must be \"on\" or \"off\""
 msgstr ""
 
-#: util1/scot/scot.c:165
+#: util1/scot/scot.c:170
 msgid "Invalid time signature"
 msgstr ""
 
-#: util1/scot/scot.c:202
+#: util1/scot/scot.c:207
 msgid "Bad key signature"
 msgstr ""
 
-#: util1/scot/scot.c:237 util1/scot/scot.c:243
+#: util1/scot/scot.c:242 util1/scot/scot.c:248
 msgid "Invalid field"
 msgstr ""
 
-#: util1/scot/scot.c:254 util1/scot/scot.c:258
+#: util1/scot/scot.c:259 util1/scot/scot.c:263
 msgid "Nested next-parameter passing"
 msgstr ""
 
-#: util1/scot/scot.c:268
+#: util1/scot/scot.c:273
 msgid "Unrecognised keyword"
 msgstr ""
 
-#: util1/scot/scot.c:317
+#: util1/scot/scot.c:322
 msgid "Wrong number of beats in bar"
 msgstr ""
 
-#: util1/scot/scot.c:325
+#: util1/scot/scot.c:330
 msgid "Syntax error: cannot back up"
 msgstr ""
 
-#: util1/scot/scot.c:496
+#: util1/scot/scot.c:501
 msgid "Improper tie"
 msgstr ""
 
-#: util1/scot/scot.c:502
+#: util1/scot/scot.c:507
 msgid "Tie between different pitches"
 msgstr ""
 
-#: util1/scot/scot.c:510
+#: util1/scot/scot.c:515
 msgid "Warning: params changed on tie"
 msgstr ""
 
-#: util1/scot/scot.c:562
+#: util1/scot/scot.c:567
 msgid "Parameter number out of range"
 msgstr ""
 
-#: util1/scot/scot.c:622
+#: util1/scot/scot.c:627
 msgid "Lost previous note: not written"
 msgstr ""
 
-#: util1/scot/scot.c:741
+#: util1/scot/scot.c:746
 msgid "Macro expansion too long -- circular macros?"
 msgstr ""
 
-#: util1/scot/scot.c:817 util1/scot/scot.c:922 util1/scot/scot.c:946
+#: util1/scot/scot.c:822 util1/scot/scot.c:927 util1/scot/scot.c:951
 msgid "Syntax error: no {"
 msgstr ""
 
-#: util1/scot/scot.c:829
+#: util1/scot/scot.c:834
 msgid "No instrument specified"
 msgstr ""
 
-#: util1/scot/scot.c:870
+#: util1/scot/scot.c:875
 msgid "unresolved tie"
 msgstr ""
 
-#: util1/scot/scot.c:872
+#: util1/scot/scot.c:877
 msgid "unresolved slur"
 msgstr ""
 
-#: util1/scot/scot.c:879
+#: util1/scot/scot.c:884
 msgid "Circular note list\n"
 msgstr ""
 
-#: util1/scot/scot.c:925 util1/scot/scot.c:1039 util1/scot/scot.c:1053
-#: util1/scot/scot.c:1060 util1/scot/scot.c:1085
+#: util1/scot/scot.c:930 util1/scot/scot.c:1044 util1/scot/scot.c:1058
+#: util1/scot/scot.c:1065 util1/scot/scot.c:1090
 msgid "Unexpected end of file"
 msgstr ""
 
-#: util1/scot/scot.c:968
+#: util1/scot/scot.c:973
 msgid "Syntax error: no ="
 msgstr ""
 
-#: util1/scot/scot.c:970
+#: util1/scot/scot.c:975
 msgid "Syntax error: no number"
 msgstr ""
 
-#: util1/scot/scot.c:982
+#: util1/scot/scot.c:987
 msgid "No instruments declared"
 msgstr ""
 
-#: util1/scot/scot.c:1003
+#: util1/scot/scot.c:1008
 msgid "Expected ="
 msgstr ""
 
-#: util1/scot/scot.c:1151
+#: util1/scot/scot.c:1156
 msgid "Invalid pitch class"
 msgstr ""
 
-#: util1/scot/scot.c:1296 util1/scot/scot.c:1311 util1/scot/scot.c:1365
+#: util1/scot/scot.c:1301 util1/scot/scot.c:1316 util1/scot/scot.c:1370
 msgid "Division by zero"
 msgstr ""
 
-#: util1/scot/scot.c:1454
+#: util1/scot/scot.c:1461
 msgid "scot processing terminated\n"
 msgstr ""
 
-#: util1/scot/scot.c:1461
+#: util1/scot/scot.c:1468
 #, c-format
 msgid "scot: %d errors.\n"
 msgstr ""
@@ -10341,8 +9511,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
-#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
+#: util/atsa.c:546 util/atsa.c:2360 util/atsa.c:2374 util/atsa.c:2393
+#: util/atsa.c:2573 util/atsa.c:2636 util/atsa.c:2724
 msgid "done!\n"
 msgstr ""
 
@@ -10471,160 +9641,166 @@ msgstr ""
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2013
+#: util/atsa.c:1946 util/atsa.c:1951 util/atsa.c:1962 util/atsa.c:1965
+#: util/atsa.c:1969 util/atsa.c:1978 util/cvanal.c:193 util/hetro.c:607
+#: util/hetro.c:690 util/hetro.c:703
+msgid "Write failure\n"
+msgstr ""
+
+#: util/atsa.c:2019
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr ""
 
-#: util/atsa.c:2020
+#: util/atsa.c:2026
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2025
+#: util/atsa.c:2031
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2040
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2044
+#: util/atsa.c:2050
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2050
+#: util/atsa.c:2056
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2063
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2067
+#: util/atsa.c:2073
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2074
+#: util/atsa.c:2080
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2082
+#: util/atsa.c:2088
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2090
+#: util/atsa.c:2096
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2098
+#: util/atsa.c:2104
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2106
+#: util/atsa.c:2112
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2130
+#: util/atsa.c:2136
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2139
+#: util/atsa.c:2145
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2148
+#: util/atsa.c:2154
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2157
+#: util/atsa.c:2163
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2163
+#: util/atsa.c:2169
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2174
+#: util/atsa.c:2180
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2182
+#: util/atsa.c:2188
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2190
+#: util/atsa.c:2196
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2335
+#: util/atsa.c:2341
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2365
+#: util/atsa.c:2371
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2381 util/atsa.c:2384
+#: util/atsa.c:2387 util/atsa.c:2390
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2389
+#: util/atsa.c:2395
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2497
+#: util/atsa.c:2503
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2585
+#: util/atsa.c:2591
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2681
+#: util/atsa.c:2687
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2732
+#: util/atsa.c:2738
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2832
+#: util/atsa.c:2838
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10693,7 +9869,7 @@ msgstr ""
 msgid "less sound than expected!\n"
 msgstr ""
 
-#: util/cvanal.c:243
+#: util/cvanal.c:244
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
@@ -10781,7 +9957,7 @@ msgstr ""
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
+#: util/dnoise.c:480 util/srconv.c:461 util/srconv.c:473
 #, c-format
 msgid "cannot open %s."
 msgstr ""
@@ -10954,7 +10130,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:737
+#: util/envext.c:54 util/srconv.c:738
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11003,7 +10179,7 @@ msgid "Cannot open input file %s\n"
 msgstr ""
 
 #: util/het_export.c:61 util/lpc_export.c:66 util/lpc_import.c:62
-#: util/pv_export.c:64 util/pv_import.c:111
+#: util/pv_export.c:64 util/pv_import.c:123
 #, c-format
 msgid "Cannot open output file %s\n"
 msgstr ""
@@ -11026,7 +10202,7 @@ msgstr ""
 msgid "Cannot open output hetro file %s\n"
 msgstr ""
 
-#: util/het_import.c:108
+#: util/het_import.c:111
 msgid "translate text form to hetro analysis file"
 msgstr ""
 
@@ -11124,48 +10300,48 @@ msgstr ""
 msgid "cannot create output file\n"
 msgstr ""
 
-#: util/hetro.c:616
+#: util/hetro.c:617
 #, c-format
 msgid "scale = %f\n"
 msgstr ""
 
-#: util/hetro.c:711
+#: util/hetro.c:714
 #, c-format
 msgid "harmonic #%d:\tamp points %d, \tfrq points %d,\tpeakamp %d\n"
 msgstr ""
 
-#: util/hetro.c:715
+#: util/hetro.c:718
 #, c-format
 msgid "wrote %ld bytes to %s\n"
 msgstr ""
 
-#: util/hetro.c:747
+#: util/hetro.c:750
 msgid "OOPS: SDIF does not work on this machine!\n"
 msgstr ""
 
-#: util/hetro.c:773
+#: util/hetro.c:776
 #, c-format
 msgid "Error creating %s\n"
 msgstr ""
 
-#: util/hetro.c:801
+#: util/hetro.c:804
 msgid "Error writing SDIF frame header.\n"
 msgstr ""
 
-#: util/hetro.c:810
+#: util/hetro.c:813
 msgid "Error writing SDIF matrix header.\n"
 msgstr ""
 
-#: util/hetro.c:823
+#: util/hetro.c:826
 msgid "Error writing SDIF data.\n"
 msgstr ""
 
-#: util/hetro.c:830
+#: util/hetro.c:833
 #, c-format
 msgid "wrote %ld 1TRC frames to %s\n"
 msgstr ""
 
-#: util/hetro.c:858
+#: util/hetro.c:861
 msgid "Soundfile analysis for adsyn"
 msgstr ""
 
@@ -11377,7 +10553,11 @@ msgstr ""
 msgid "Failed to read LPC header\n"
 msgstr ""
 
-#: util/lpc_export.c:102
+#: util/lpc_export.c:81 util/lpc_export.c:88
+msgid "Read faailure\n"
+msgstr ""
+
+#: util/lpc_export.c:106
 msgid "translate linear predictive coding file to text file"
 msgstr ""
 
@@ -11385,7 +10565,11 @@ msgstr ""
 msgid "Usage: lpc_import cstext_file lpc_file\n"
 msgstr ""
 
-#: util/lpc_import.c:98
+#: util/lpc_import.c:77 util/lpc_import.c:84 util/srconv.c:378
+msgid "Read failure\n"
+msgstr ""
+
+#: util/lpc_import.c:102
 msgid "translate text file to linear predictive coding file"
 msgstr ""
 
@@ -11402,7 +10586,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11700,11 +10884,19 @@ msgstr ""
 msgid "Usage: pv_import cstext_file pv_file \n"
 msgstr ""
 
-#: util/pv_import.c:127
+#: util/pv_import.c:73 util/pv_import.c:93
+msgid "Not a PV file\n"
+msgstr ""
+
+#: util/pv_import.c:132
+msgid "Memory failure\n"
+msgstr ""
+
+#: util/pv_import.c:143
 msgid "Sync error\n"
 msgstr ""
 
-#: util/pv_import.c:148
+#: util/pv_import.c:164
 msgid "translate text form to PVOC analysis file"
 msgstr ""
 
@@ -11771,7 +10963,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:754
+#: util/scale.c:62 util/srconv.c:755
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -11950,47 +11142,47 @@ msgstr ""
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:388
+#: util/srconv.c:389
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:402
+#: util/srconv.c:403
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:407
+#: util/srconv.c:408
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:412 util/srconv.c:704
+#: util/srconv.c:413 util/srconv.c:705
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:731
+#: util/srconv.c:732
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:733
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:734
+#: util/srconv.c:735
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:736
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:737
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:820
+#: util/srconv.c:821
 msgid "Sample rate conversion"
 msgstr ""
 
diff --git a/po/es_CO.po b/po/es_CO.po
index 24c0b86..8f6bfde 100644
--- a/po/es_CO.po
+++ b/po/es_CO.po
@@ -101,331 +101,325 @@ msgstr ""
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:138
+#: Engine/csound_orc_compile.c:141
 #, c-format
 msgid ""
 "input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
 "line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
+#: Engine/csound_orc_compile.c:268 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr "argumento sobrante o faltante"
 
-#: Engine/csound_orc_compile.c:269
+#: Engine/csound_orc_compile.c:272
 #, fuzzy
 msgid "too many input args\n"
 msgstr "demasiados argumentos de entrada\n"
 
-#: Engine/csound_orc_compile.c:304
+#: Engine/csound_orc_compile.c:307
 #, c-format
 msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:380
-#, fuzzy, c-format
-msgid ""
-"output name previously used, type '%c' must be uniquely defined, line %d"
+#: Engine/csound_orc_compile.c:389
+#, c-format
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
-"nombre de salida usado previamente, el tipo '%c' debe estar definido una "
-"sola vez"
 
-#: Engine/csound_orc_compile.c:386
+#: Engine/csound_orc_compile.c:517
 #, fuzzy, c-format
-msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
+msgid "output name previously used, type 'w' must be uniquely defined, line %d"
 msgstr ""
+"nombre de salida usado previamente, el tipo '%c' debe estar definido una "
+"sola vez"
 
-#: Engine/csound_orc_compile.c:541
+#: Engine/csound_orc_compile.c:563
 #, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:738
+#: Engine/csound_orc_compile.c:760
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:748
+#: Engine/csound_orc_compile.c:772
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+#: Engine/csound_orc_compile.c:779 Engine/csound_orc_compile.c:1068
+#: Engine/csound_orc_compile.c:1089 Engine/otran.c:363
 msgid "invalid name for instrument"
 msgstr "nombre inválido para el instrumento"
 
-#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
+#: Engine/csound_orc_compile.c:783 Engine/csound_orc_compile.c:1071
+#: Engine/csound_orc_compile.c:1092 Engine/otran.c:369
 #, c-format
 msgid "instr %s redefined"
 msgstr "instr %s redefinido"
 
-#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
+#: Engine/csound_orc_compile.c:927 Engine/otran.c:351
 #, c-format
 msgid "instr %ld redefined"
 msgstr "instr %ld redefinido"
 
-#: Engine/csound_orc_compile.c:914
+#: Engine/csound_orc_compile.c:938
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1083
+#: Engine/csound_orc_compile.c:1141
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
+#: Engine/csound_orc_compile.c:1198 Engine/otran.c:578 Engine/otran.c:1432
 #, c-format
 msgid "%s invalid sample rate"
 msgstr "%s tasa de muestreo inválida"
 
-#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
+#: Engine/csound_orc_compile.c:1200 Engine/otran.c:580 Engine/otran.c:1434
 #, c-format
 msgid "%s invalid control rate"
 msgstr "%s frecuencia de control inválida"
 
-#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
+#: Engine/csound_orc_compile.c:1204 Engine/otran.c:583 Engine/otran.c:1430
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr "%s valor de ksmps inválido"
 
-#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
+#: Engine/csound_orc_compile.c:1207 Engine/otran.c:586 Engine/otran.c:1436
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr "%s sr, kr, ksmps inconsistentes"
 
-#: Engine/csound_orc_compile.c:1165
+#: Engine/csound_orc_compile.c:1223
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 "enunciados de ejecución (perf-pass) son ilegales en el bloque de encabezado\n"
 
-#: Engine/csound_orc_compile.c:1170
+#: Engine/csound_orc_compile.c:1228
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr "%d errores de sintaxis en la orquesta.  compilación inváilda\n"
 
-#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
+#: Engine/csound_orc_compile.c:1288 Engine/otran.c:670
 msgid "inconsistent argoff sumcount"
 msgstr "cuenta argoff inconsistente"
 
-#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
+#: Engine/csound_orc_compile.c:1360 Engine/otran.c:739
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr "la lista de etiquetas (LABELS) está llena...extendiendo a  %d\n"
 
-#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
+#: Engine/csound_orc_compile.c:1398 Engine/otran.c:777
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr "la lista de GOTOS está llena..extendiendo a %d\n"
 
-#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
+#: Engine/csound_orc_compile.c:1431 Engine/otran.c:810
 #, c-format
 msgid "target label '%s' not found"
 msgstr "etiqueta '%s' no encontrada"
 
-#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
+#: Engine/csound_orc_compile.c:1509 Engine/otran.c:865
 #, c-format
 msgid "string syntax '%s'"
 msgstr "sintaxis de cadena '%s'"
 
-#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
+#: Engine/csound_orc_compile.c:1559 Engine/otran.c:915
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr "sintaxis numérica '%s'"
 
-#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
+#: Engine/csound_orc_compile.c:1585 Engine/otran.c:941
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
+#: Engine/csound_orc_compile.c:1624 Engine/otran.c:1017
 msgid "gblnamset(): memory allocation failure"
 msgstr "gblnamset(): falla en asignación de memoria"
 
-#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
+#: Engine/csound_orc_compile.c:1652 Engine/otran.c:1045
 msgid "lclnamset(): memory allocation failure"
 msgstr "lclnamset(): falla en asignación de memoria"
 
-#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
+#: Engine/csound_orc_compile.c:1678 Engine/otran.c:1070
 msgid "unexpected global name"
 msgstr "nombre global inesperado"
 
-#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
+#: Engine/csound_orc_compile.c:1701 Engine/otran.c:1092
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:459
+#: Engine/csound_orc_expressions.c:457
 #, c-format
 msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:862
+#: Engine/csound_orc_expressions.c:878
 #, c-format
 msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:157
+#: Engine/csound_orc_semantics.c:256
 #, c-format
 msgid ""
 "\n"
 "error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:159
+#: Engine/csound_orc_semantics.c:258
 #, fuzzy, c-format
 msgid ""
 " line %d:\n"
 ">>>"
 msgstr " línea %d:\n"
 
-#: Engine/csound_orc_semantics.c:732
-#, fuzzy, c-format
+#: Engine/csound_orc_semantics.c:834
+#, c-format
 msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/csound_orc_semantics.c:899 Engine/rdorch.c:1644 Engine/rdorch.c:1662
 #: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr "opcode modificado: %s"
 
-#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
+#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:126
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
+#: Engine/cs_par_dispatch.c:140 Engine/cs_par_dispatch.c:160
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
-#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
-#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
+#: Engine/cs_par_dispatch.c:551 Engine/cs_par_dispatch.c:578
+#: Engine/cs_par_dispatch.c:2564 Engine/cs_par_dispatch.c:2609
+#: Engine/cs_par_dispatch.c:2611 Engine/cs_par_dispatch.c:2675
 #, fuzzy
 msgid "Invalid NULL Parameter entry"
 msgstr "parámetros de modo inválidos"
 
-#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
-#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
+#: Engine/cs_par_dispatch.c:553 Engine/cs_par_dispatch.c:592
+#: Engine/cs_par_dispatch.c:619 Engine/cs_par_dispatch.c:660
 #, fuzzy
 msgid "Invalid NULL Parameter name"
 msgstr "parámetros de modo inválidos"
 
-#: Engine/cs_par_dispatch.c:535
+#: Engine/cs_par_dispatch.c:560
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
+#: Engine/cs_par_dispatch.c:689 Engine/cs_par_dispatch.c:780
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
+#: Engine/cs_par_dispatch.c:730 Engine/cs_par_dispatch.c:860
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:759
+#: Engine/cs_par_dispatch.c:784
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:907
+#: Engine/cs_par_dispatch.c:930
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:913
+#: Engine/cs_par_dispatch.c:936
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:918
+#: Engine/cs_par_dispatch.c:941
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:922
+#: Engine/cs_par_dispatch.c:945
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:926
+#: Engine/cs_par_dispatch.c:949
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
-#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
-#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
-#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
-#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
-#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
-#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
-#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1024 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1176 Engine/cs_par_dispatch.c:1276
+#: Engine/cs_par_dispatch.c:1430 Engine/cs_par_dispatch.c:1464
+#: Engine/cs_par_dispatch.c:1481 Engine/cs_par_dispatch.c:1503
+#: Engine/cs_par_dispatch.c:1531 Engine/cs_par_dispatch.c:1553
+#: Engine/cs_par_dispatch.c:1577 Engine/cs_par_dispatch.c:1669
+#: Engine/cs_par_dispatch.c:1724 Engine/cs_par_dispatch.c:1817
+#: Engine/cs_par_dispatch.c:1870 Engine/cs_par_dispatch.c:2702
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1008
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1029
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
-#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1081 Engine/cs_par_dispatch.c:1104
+#: Engine/cs_par_dispatch.c:1126 Engine/cs_par_dispatch.c:1128
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1062
+#: Engine/cs_par_dispatch.c:1083
 #, fuzzy
 msgid "Invalid NULL Parameter instr"
 msgstr "parámetros de modo inválidos"
 
-#: Engine/cs_par_dispatch.c:1064
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1085
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1090 Engine/cs_par_dispatch.c:1112
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1086
+#: Engine/cs_par_dispatch.c:1107
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
-#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
-#: Engine/cs_par_dispatch.c:2682
+#: Engine/cs_par_dispatch.c:1250 Engine/cs_par_dispatch.c:1533
+#: Engine/cs_par_dispatch.c:2566 Engine/cs_par_dispatch.c:2676
+#: Engine/cs_par_dispatch.c:2703
 #, fuzzy
 msgid "Invalid NULL Parameter chain"
 msgstr "parámetros de modo inválidos"
 
-#: Engine/cs_par_dispatch.c:1237
+#: Engine/cs_par_dispatch.c:1261
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1554
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1579
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1556
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1581
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1647
+#: Engine/cs_par_dispatch.c:1672
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2497
-#, fuzzy, c-format
+#: Engine/cs_par_dispatch.c:2518
+#, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2557
+#: Engine/cs_par_dispatch.c:2578
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2610
+#: Engine/cs_par_dispatch.c:2631
 msgid "Cache Update\n"
 msgstr ""
 
@@ -439,12 +433,12 @@ msgstr "Variable de entorno '%s' ha sido asignada como "
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1083
+#: Engine/envvar.c:1085
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr "error interno: csoundFileOpen(): tipo inváido: %d"
 
-#: Engine/envvar.c:1266
+#: Engine/envvar.c:1268
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr "error interno: csoundCreateFileHandle(): tipo inválido: %d"
@@ -516,13 +510,13 @@ msgstr "la tabla-f (ftable) no existe"
 msgid "ftable %d now deleted\n"
 msgstr "la tabla-f (ftable) %d ha sido borrada\n"
 
-#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
-#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
-#: Engine/fgens.c:2909
+#: Engine/fgens.c:153 Engine/fgens.c:1599 Engine/fgens.c:1685
+#: Engine/fgens.c:1764 Engine/fgens.c:1880 Engine/fgens.c:1961
+#: Engine/fgens.c:2937
 msgid "insufficient gen arguments"
 msgstr "argumentos GEN insuficientes"
 
-#: Engine/fgens.c:179 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr "GEN de nombre \"%s\" no definida"
@@ -540,11 +534,11 @@ msgstr "tamaño diferido sólo permitido para GEN1, GEN23, GEN28, GEN49"
 msgid "ftable %d:\n"
 msgstr "tabla-f (ftable) %d:\n"
 
-#: Engine/fgens.c:222 Engine/fgens.c:229
+#: Engine/fgens.c:222 Engine/fgens.c:229 Engine/fgens.c:2794
 msgid "illegal table length"
 msgstr "longitud ilegal de tabla"
 
-#: Engine/fgens.c:288 Engine/fgens.c:2215
+#: Engine/fgens.c:288 Engine/fgens.c:2221
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
@@ -553,10 +547,10 @@ msgstr ""
 
 #: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
 #: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
-#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
-#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
-#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
-#: Engine/fgens.c:2906
+#: Engine/fgens.c:1054 Engine/fgens.c:1098 Engine/fgens.c:1145
+#: Engine/fgens.c:1399 Engine/fgens.c:1461 Engine/fgens.c:1683
+#: Engine/fgens.c:1761 Engine/fgens.c:2116 Engine/fgens.c:2891
+#: Engine/fgens.c:2934
 msgid "using extended arguments\n"
 msgstr ""
 
@@ -569,13 +563,13 @@ msgid "illegal x interval"
 msgstr "intervalo x ilegal"
 
 #: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
-#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
-#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: Engine/fgens.c:1356 Engine/fgens.c:2381 Engine/fgens.c:2696
+#: Engine/fgens.c:2836 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
 #: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr "argumentos insuficientes"
 
-#: Engine/fgens.c:408 Engine/fgens.c:1355
+#: Engine/fgens.c:408 Engine/fgens.c:1361
 msgid "unknown srctable number"
 msgstr "número de tabla fuente (srctable) desconocido"
 
@@ -611,240 +605,240 @@ msgstr "valor de xamp ilegal"
 msgid "uneven number of args"
 msgstr "numero de argumentos impar"
 
-#: Engine/fgens.c:1077
+#: Engine/fgens.c:1082
 msgid "gen call has illegal x-ordinate values:"
 msgstr "la llamada GEN tiene valores ilegales para el eje x:"
 
-#: Engine/fgens.c:1095
+#: Engine/fgens.c:1100
 msgid "wrong number of args"
 msgstr "número equivocado de argumentos"
 
-#: Engine/fgens.c:1109
+#: Engine/fgens.c:1114
 msgid "a range given exceeds table length"
 msgstr "uno de los rangos dado excede la longitud de  la tabla"
 
-#: Engine/fgens.c:1116
+#: Engine/fgens.c:1121
 msgid "an input function does not exist"
 msgstr "no existe función de entrada"
 
-#: Engine/fgens.c:1249
+#: Engine/fgens.c:1254
 msgid "No such window!"
 msgstr "No existe la ventana!"
 
-#: Engine/fgens.c:1267
+#: Engine/fgens.c:1272
 msgid "Wrong number of input arguments"
 msgstr "Número equivocado de argumentos de entrada"
 
-#: Engine/fgens.c:1268
+#: Engine/fgens.c:1273
 msgid "unknown distribution"
 msgstr "distribución desconocida"
 
-#: Engine/fgens.c:1317
+#: Engine/fgens.c:1322
 msgid "error opening ASCII file"
 msgstr "error abriendo archivo ASCII"
 
-#: Engine/fgens.c:1323
+#: Engine/fgens.c:1328
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr "%ld elementos en %s\n"
 
-#: Engine/fgens.c:1334
+#: Engine/fgens.c:1340
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1363
+#: Engine/fgens.c:1369
 msgid "table size must be the same of source table"
 msgstr "el tamaño de la tabla fuente y de la de destino debe ser igual"
 
-#: Engine/fgens.c:1435 Engine/fgens.c:1495
+#: Engine/fgens.c:1441 Engine/fgens.c:1501
 msgid "x coordinates must all be in increasing order:"
 msgstr "las coordenadas x deben estar en orden ascendente:"
 
-#: Engine/fgens.c:1438 Engine/fgens.c:1497
+#: Engine/fgens.c:1444 Engine/fgens.c:1503
 msgid "x coordinate greater than function size:"
 msgstr "coordenada x mayor que el tamaño de la función:"
 
-#: Engine/fgens.c:1442
+#: Engine/fgens.c:1448
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1515
+#: Engine/fgens.c:1521
 msgid "GEN28 requires zero table length"
 msgstr "GEN28 requiere tamaño de tabla cero"
 
-#: Engine/fgens.c:1577
+#: Engine/fgens.c:1583
 msgid "could not open space file"
 msgstr "no es posible abrir el archivo de espacio"
 
-#: Engine/fgens.c:1579
+#: Engine/fgens.c:1585
 msgid "Time values must be in increasing order"
 msgstr "Los valores de tiempo deben estar en orden ascendente"
 
-#: Engine/fgens.c:1600
+#: Engine/fgens.c:1606
 msgid "GEN30: source ftable not found"
 msgstr "GEN30: tabla-f (ftable) fuente no encontrada"
 
-#: Engine/fgens.c:1683
+#: Engine/fgens.c:1689
 msgid "GEN31: source ftable not found"
 msgstr "GEN31: tabla-f (ftable) fuente no encontrada"
 
-#: Engine/fgens.c:1791
+#: Engine/fgens.c:1797
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr "GEN32: tabla-f (ftable) fuente %d no encontrada"
 
-#: Engine/fgens.c:1885
+#: Engine/fgens.c:1891
 msgid "GEN33: source ftable not found"
 msgstr "GEN33: tabla-f (ftable) fuente no encontrada"
 
-#: Engine/fgens.c:2053
+#: Engine/fgens.c:2059
 msgid "unknown source table number"
 msgstr "número de tabla fuente desconocida"
 
-#: Engine/fgens.c:2085
+#: Engine/fgens.c:2091
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2157
 #, c-format
 msgid "ftable %d: "
 msgstr "tabla-f (ftable) %d: "
 
-#: Engine/fgens.c:2195
+#: Engine/fgens.c:2201
 #, c-format
 msgid "ftable %d:"
 msgstr "tabla-f (ftable) %d:"
 
-#: Engine/fgens.c:2210
+#: Engine/fgens.c:2216
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr "reemplazando tabla-f (ftable) %d anterior"
 
-#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
-#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
-#: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
-#: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
+#: Engine/fgens.c:2252 Engine/fgens.c:2340 Engine/fgens.c:2364
+#: Opcodes/midiops2.c:233 Opcodes/midiops2.c:388 Opcodes/midiops2.c:470
+#: Opcodes/uggab.c:1482 Opcodes/uggab.c:1509 Opcodes/uggab.c:1529
+#: Opcodes/uggab.c:1572
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr "Tabla-f (ftable) no. %f inválida"
 
-#: Engine/fgens.c:2251
+#: Engine/fgens.c:2257
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr "tabla-f (ftable) %f de tamaño diferido es ilegal aquí"
 
-#: Engine/fgens.c:2278 Engine/fgens.c:2848
+#: Engine/fgens.c:2284 Engine/fgens.c:2875
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr "Falló la carga diferida de '%s'"
 
-#: Engine/fgens.c:2340
+#: Engine/fgens.c:2346
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 "Carga de la tabla-f (ftable) %f de tamaño diferido no disponible en tiempo "
 "perf."
 
-#: Engine/fgens.c:2399
+#: Engine/fgens.c:2405
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
+#: Engine/fgens.c:2452 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr "formato de muestra inválido: %d"
 
-#: Engine/fgens.c:2454 Engine/fgens.c:2714
+#: Engine/fgens.c:2460 Engine/fgens.c:2719
 #, c-format
 msgid "channel %d illegal"
 msgstr "canal %d ilegal"
 
-#: Engine/fgens.c:2460
+#: Engine/fgens.c:2466
 msgid "deferred alloc\n"
 msgstr ""
 
-#: Engine/fgens.c:2468
+#: Engine/fgens.c:2474 Engine/fgens.c:2792
 msgid "deferred size, but filesize unknown"
 msgstr "tamaño diferido, pero tamaño del archivo desconocido"
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2477 Engine/fgens.c:2796
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2540
+#: Engine/fgens.c:2546
 msgid "GEN1: input file truncated by ftable size"
 msgstr "GEN1: archivo de entrada truncado por el tamaño de la tabla-f (ftable)"
 
-#: Engine/fgens.c:2544
+#: Engine/fgens.c:2550
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr "\tpunto final de bucle %ld excede el tamaño de la tabla %ld\n"
 
-#: Engine/fgens.c:2566
+#: Engine/fgens.c:2572
 msgid "GEN1 read error"
 msgstr "GEN1 error de lectura"
 
-#: Engine/fgens.c:2571
+#: Engine/fgens.c:2577
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr "GEN1: archivo aiff truncado por el tamaño de la tabla-f (ftable)"
 
-#: Engine/fgens.c:2572
+#: Engine/fgens.c:2578
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr "\tmuestras de audio %ld excedene el tamaño de la tabla %ld"
 
-#: Engine/fgens.c:2616
+#: Engine/fgens.c:2622
 msgid "wrong number of ftable arguments"
 msgstr "número equivocado de argumentos para la tabla-f (ftable)"
 
-#: Engine/fgens.c:2626 OOps/pstream.c:326
+#: Engine/fgens.c:2632 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr "No fue posible cargar el archivo PVOC-EX"
 
-#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2643 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr "número de canal ilegal"
 
-#: Engine/fgens.c:2655
+#: Engine/fgens.c:2661
 msgid "ftable size too small"
 msgstr "la tabla-f (ftable) es demasiado pequeña"
 
-#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
+#: Engine/fgens.c:2735 Opcodes/mp3in.c:87 Opcodes/mp3in.c:229
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2873
+#: Engine/fgens.c:2901
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr "GEN51: número inválido de campos-p (p-fields) (faltan grados)"
 
-#: Engine/fgens.c:2913
+#: Engine/fgens.c:2941
 msgid "number of channels inconsistent with number of args"
 msgstr "número de canales inconsistente con el número de argumentos"
 
-#: Engine/fgens.c:3072
+#: Engine/fgens.c:3100
 msgid "GEN53: invalid number of gen arguments"
 msgstr "GEN53: número inválido de argumentos"
 
-#: Engine/fgens.c:3082
+#: Engine/fgens.c:3110
 msgid "GEN53: invalid table length"
 msgstr "GEN53: tamaño inválido de tabla"
 
-#: Engine/fgens.c:3086
+#: Engine/fgens.c:3114
 msgid "GEN53: invalid source table number"
 msgstr "GEN53: número inválido de tabla fuente"
 
-#: Engine/fgens.c:3089
+#: Engine/fgens.c:3117
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr "GEN53: el modo debe estar entre 0 y 15"
 
-#: Engine/fgens.c:3093
+#: Engine/fgens.c:3121
 msgid "GEN53: invalid source table length"
 msgstr "GEN53: tamaño inválido de la tabla fuente"
 
-#: Engine/fgens.c:3098
+#: Engine/fgens.c:3126
 msgid "GEN53: invalid window table"
 msgstr "GEN53: tabla de ventana inválida"
 
@@ -1052,7 +1046,7 @@ msgstr "   terminando en %p\n"
 msgid "subinstr: not initialised"
 msgstr "subinstr: no ha sido inicializado"
 
-#: Engine/insert.c:1855
+#: Engine/insert.c:1856
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
@@ -1061,29 +1055,29 @@ msgstr ""
 "instr %d colocado en %p\n"
 "\tlclbas %p, opds %p\n"
 
-#: Engine/insert.c:1872
+#: Engine/insert.c:1873
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr "op %d (%s) colocado en %p\n"
 
-#: Engine/insert.c:1898
+#: Engine/insert.c:1899
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1909
+#: Engine/insert.c:1910
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1966
+#: Engine/insert.c:1967
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:2011
+#: Engine/insert.c:2012
 #, fuzzy, c-format
 msgid "Instrument %s is still active"
 msgstr "Intrumento %s desactivado"
 
-#: Engine/insert.c:2014
+#: Engine/insert.c:2015
 #, c-format
 msgid "Instrument %d is still active"
 msgstr "Intrumento %d desactivado"
@@ -1093,8 +1087,8 @@ msgid "-L stdin fcntl failed"
 msgstr ""
 
 #: Engine/linevent.c:99 Engine/linevent.c:112 OOps/dumpf.c:57 OOps/dumpf.c:82
-#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:274 OOps/dumpf.c:301
-#: OOps/dumpf.c:328 OOps/dumpf.c:355 OOps/dumpf.c:527 util/hetro.c:249
+#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:276 OOps/dumpf.c:303
+#: OOps/dumpf.c:330 OOps/dumpf.c:357 OOps/dumpf.c:528 util/hetro.c:249
 #, c-format
 msgid "Cannot open %s"
 msgstr "No es posible abrir %s"
@@ -1264,91 +1258,91 @@ msgstr ""
 "Archivo '%s' (sr = %d Hz, %d canal(es), %lu cuadros de muestra) cargado en "
 "la memoria\n"
 
-#: Engine/musmon.c:81
+#: Engine/musmon.c:80
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr "Tiempo transcurrido en %s: real: %.3fs, CPU: %.3fs\n"
 
-#: Engine/musmon.c:108
+#: Engine/musmon.c:107
 msgid "illegal istartempo value"
 msgstr "valor de tempo inicial (istartempo) ilegal"
 
-#: Engine/musmon.c:111
+#: Engine/musmon.c:110
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:184 Top/main.c:121
+#: Engine/musmon.c:183 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr "Csound version %s beta (64-bit) %s\n"
 
-#: Engine/musmon.c:187 Top/main.c:124
+#: Engine/musmon.c:186 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr "Csound version %s (64-bit) %s\n"
 
-#: Engine/musmon.c:192 Top/main.c:113
+#: Engine/musmon.c:191 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr "Csound version %s beta (32-bit) %s\n"
 
-#: Engine/musmon.c:195 Top/main.c:116
+#: Engine/musmon.c:194 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr "Csound version %s (32-bit) %s\n"
 
-#: Engine/musmon.c:220
+#: Engine/musmon.c:219
 msgid "orch now loaded\n"
 msgstr "orquesta cargada\n"
 
-#: Engine/musmon.c:245
+#: Engine/musmon.c:244
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:261
+#: Engine/musmon.c:260
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:283
+#: Engine/musmon.c:282
 msgid "using Cscore processing\n"
 msgstr "usando procesamiento con Cscore\n"
 
-#: Engine/musmon.c:286
+#: Engine/musmon.c:285
 msgid "cannot create cscore.out"
 msgstr "no es posible crear cscore.out"
 
-#: Engine/musmon.c:299
+#: Engine/musmon.c:301
 msgid "cannot reopen cscore.out"
 msgstr "no es posible reabrir cscore.out"
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:314
 msgid "cannot reopen cscore.srt"
 msgstr "no es posible reabrir cscore.srt"
 
-#: Engine/musmon.c:305
+#: Engine/musmon.c:316
 msgid "sorting cscore.out ..\n"
 msgstr "ordenando cscore.out ...\n"
 
-#: Engine/musmon.c:311 Top/main.c:401
+#: Engine/musmon.c:322 Top/main.c:397
 msgid "\t... done\n"
 msgstr "\t... listo\n"
 
-#: Engine/musmon.c:312
+#: Engine/musmon.c:323
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
-#: Engine/musmon.c:1216
+#: Engine/musmon.c:327 Engine/musmon.c:457 Engine/musmon.c:1026
+#: Engine/musmon.c:1227
 #, c-format
 msgid "SECTION %d:\n"
 msgstr "SECCION %d:\n"
 
-#: Engine/musmon.c:390
+#: Engine/musmon.c:401
 msgid "end of score.\t\t   overall amps:"
 msgstr "fin del score.\t\t  amplitud global:"
 
-#: Engine/musmon.c:401
+#: Engine/musmon.c:412
 msgid ""
 "\n"
 "\t   overall samples out of range:"
@@ -1356,7 +1350,7 @@ msgstr ""
 "\n"
 "\t   número global de muestras fuera de rango:"
 
-#: Engine/musmon.c:405
+#: Engine/musmon.c:416
 #, c-format
 msgid ""
 "\n"
@@ -1365,113 +1359,109 @@ msgstr ""
 "\n"
 "%d errores en la ejecución\n"
 
-#: Engine/musmon.c:407
+#: Engine/musmon.c:418
 msgid "end of performance"
 msgstr "fin de la ejecución"
 
-#: Engine/musmon.c:421
+#: Engine/musmon.c:432
 msgid "no sound written to disk\n"
 msgstr "no se ecribió sonido en el disco\n"
 
-#: Engine/musmon.c:436
+#: Engine/musmon.c:447
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:502 Engine/musmon.c:548
+#: Engine/musmon.c:513 Engine/musmon.c:559
 msgid "\t number of samples out of range:"
 msgstr "\t número de muestras fuera de rango:"
 
-#: Engine/musmon.c:541
+#: Engine/musmon.c:552
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr "fin de la sección %d\t amplitud máxima de sección:"
 
-#: Engine/musmon.c:543
+#: Engine/musmon.c:554
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:607 Engine/musmon.c:632
+#: Engine/musmon.c:618 Engine/musmon.c:643
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr " - nota descartada. Instrumento %s indefinido"
 
-#: Engine/musmon.c:611
+#: Engine/musmon.c:622
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "off"
 msgstr "apagado"
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "on"
 msgstr "prendido"
 
-#: Engine/musmon.c:620 Engine/musmon.c:659
+#: Engine/musmon.c:631 Engine/musmon.c:670
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr " - nota descartada. Instrumento %d(%d) indefinido"
 
-#: Engine/musmon.c:624
+#: Engine/musmon.c:635
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:650
+#: Engine/musmon.c:661
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr " - nota descartada.  i%d (%s) tuvo %d errores de inicialización"
 
-#: Engine/musmon.c:680
+#: Engine/musmon.c:691
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr " - nota descartada.  i%d tuvo %d errores de inicialización"
 
-#: Engine/musmon.c:701
+#: Engine/musmon.c:712
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr "avance de %5.3f tiempos por petición del score\n"
 
-#: Engine/musmon.c:719
+#: Engine/musmon.c:730
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr "\t\t   T%7.3f - nota descartada. "
 
-#: Engine/musmon.c:723
+#: Engine/musmon.c:734
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr "el instrumento %s tuvo %d errores de inicialización\n"
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:736
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr "el instrumento %d tuvo %d errores de inicialización\n"
 
-#: Engine/musmon.c:816
+#: Engine/musmon.c:827
 msgid "terminating.\n"
 msgstr "terminando.\n"
 
-#: Engine/musmon.c:902
+#: Engine/musmon.c:913
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr "error en el score.  opcode ilegal %c (ASCII %d)\n"
 
-#: Engine/musmon.c:1129
+#: Engine/musmon.c:1140
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr "insert_score_event(): número o nombre de instrumento inválido\n"
 
-#: Engine/musmon.c:1149
+#: Engine/musmon.c:1160
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr "insert_score_event(): opcode desconocido: %c\n"
 
-#: Engine/musmon.c:1172
+#: Engine/musmon.c:1183
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr "insert_score_event(): faltan campos-p (p-fields)\n"
 
@@ -1494,48 +1484,47 @@ msgstr ""
 msgid "cannot find the specified instrument or opcode"
 msgstr "No se puede encontrar el instrumento o opcode especificado"
 
-#: Engine/new_orc_parser.c:91
-#, fuzzy
+#: Engine/new_orc_parser.c:119
 msgid "Unmatched #ifdef\n"
 msgstr ""
 
-#: Engine/otran.c:149 Engine/symbtab.c:413
+#: Engine/otran.c:149 Engine/symbtab.c:416
 #, c-format
 msgid "invalid input type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:154 Engine/symbtab.c:418
+#: Engine/otran.c:154 Engine/symbtab.c:421
 #, fuzzy, c-format
 msgid "too many input args for opcode %s"
 msgstr "demasiados argumentos de entrada %s"
 
-#: Engine/otran.c:169 Engine/symbtab.c:433
+#: Engine/otran.c:169 Engine/symbtab.c:436
 #, c-format
 msgid "too many output args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:194 Engine/symbtab.c:458
+#: Engine/otran.c:194 Engine/symbtab.c:461
 #, c-format
 msgid "invalid output type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:325 Engine/otran.c:332
+#: Engine/otran.c:324 Engine/otran.c:331
 msgid "missing instrument number or name"
 msgstr "falta número o nombre de instrumento"
 
-#: Engine/otran.c:337
+#: Engine/otran.c:336
 msgid "illegal instr number"
 msgstr "número de instrumento ilegal"
 
-#: Engine/otran.c:388
+#: Engine/otran.c:387
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:393 Engine/symbtab.c:538
+#: Engine/otran.c:392 Engine/symbtab.c:541
 msgid "invalid name for opcode"
 msgstr "nombre inválido para opcode"
 
-#: Engine/otran.c:397
+#: Engine/otran.c:396
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
@@ -1543,59 +1532,59 @@ msgstr ""
 "error en la declaración de opcode (uso: nombre de opcode, tipos de salida "
 "(outtypes), tipos de entrada (intypes)) -- opcode %s"
 
-#: Engine/otran.c:408 Engine/symbtab.c:548
+#: Engine/otran.c:407 Engine/symbtab.c:551
 #, c-format
 msgid "cannot redefine %s"
 msgstr "no es posible redefinir %s"
 
-#: Engine/otran.c:412 Engine/symbtab.c:553
+#: Engine/otran.c:411 Engine/symbtab.c:556
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr "ATENCION: redefinición de opcode: %s\n"
 
-#: Engine/otran.c:503
+#: Engine/otran.c:502
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:534
+#: Engine/otran.c:533
 msgid "Missing endin"
 msgstr "Falta endin"
 
-#: Engine/otran.c:599
+#: Engine/otran.c:598
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:603
+#: Engine/otran.c:602
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr "%d errores de sintaxis en la orquesta. Compilación inválida"
 
-#: Engine/otran.c:1257
+#: Engine/otran.c:1256
 msgid "bad value for 0dbfs: must be positive."
 msgstr "valor incorrecto para 0dbfs: debe ser positivo."
 
-#: Engine/otran.c:1267
+#: Engine/otran.c:1266
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1339
+#: Engine/otran.c:1338
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1365
+#: Engine/otran.c:1364
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1428
+#: Engine/otran.c:1427
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "error:"
 msgstr ""
 
-#: Engine/otran.c:1461
+#: Engine/otran.c:1460
 msgid "header init errors"
 msgstr "errores de inicialización en el encabezado"
 
@@ -1607,7 +1596,7 @@ msgstr ""
 msgid "Unexpected end of orchestra file"
 msgstr "Fin inesperado en el archivo de orquesta"
 
-#: Engine/rdorch.c:431 Engine/sread.c:758
+#: Engine/rdorch.c:431 Engine/sread.c:765
 #, c-format
 msgid "Macro definition for %*s\n"
 msgstr "Definición del macro %*s\n"
@@ -1625,12 +1614,12 @@ msgstr "compilador de orquesta: \n"
 msgid "cannot open orch file %s"
 msgstr "No es posible abrir el archivo de orquesta %s"
 
-#: Engine/rdorch.c:684 Engine/sread.c:1584
+#: Engine/rdorch.c:684 Engine/sread.c:1595
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr "Definición del macro %s\n"
 
-#: Engine/rdorch.c:716 Engine/sread.c:1607
+#: Engine/rdorch.c:716 Engine/sread.c:1618
 msgid "macro error\n"
 msgstr "error de macro\n"
 
@@ -1651,7 +1640,7 @@ msgstr ""
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:872 Engine/sread.c:1694
+#: Engine/rdorch.c:872 Engine/sread.c:1710
 #, c-format
 msgid "macro %s undefined\n"
 msgstr "el macro %s no está definido\n"
@@ -1669,21 +1658,21 @@ msgstr "Caracter # inesperado"
 msgid "Unknown # option: '%s'"
 msgstr "Opción para # desconocida: '%s'"
 
-#: Engine/rdorch.c:928 Engine/sread.c:380
+#: Engine/rdorch.c:928 Engine/sread.c:383
 #, c-format
 msgid "Undefined macro: '%s'"
 msgstr "Macro indefinido: '%s'"
 
-#: Engine/rdorch.c:930 Engine/sread.c:378
+#: Engine/rdorch.c:930 Engine/sread.c:381
 msgid "Macro expansion symbol ($) without macro name"
 msgstr "Símbolo de expansión de macro ($) sin nombre de macro"
 
-#: Engine/rdorch.c:935 Engine/sread.c:384
+#: Engine/rdorch.c:935 Engine/sread.c:387
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr "$%s coincide con el nombre de macro $%s"
 
-#: Engine/rdorch.c:952 Engine/sread.c:401
+#: Engine/rdorch.c:952 Engine/sread.c:404 Engine/sread.c:420
 msgid "Syntax error in macro call"
 msgstr "Error de sintaxis en llamada de macro"
 
@@ -1913,7 +1902,7 @@ msgstr ""
 "\n"
 "\tel resto de la línea descartada\n"
 
-#: Engine/rdscor.c:146
+#: Engine/rdscor.c:148
 msgid "ERROR: too many pfields: "
 msgstr "ERROR: demasidados campos-p (pfields): "
 
@@ -1963,228 +1952,233 @@ msgstr "llamado desde la línea %d del macro %s"
 msgid "Internal error op=%c"
 msgstr "error interno op=%c"
 
-#: Engine/sread.c:464
+#: Engine/sread.c:469
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:491
+#: Engine/sread.c:496
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:501
+#: Engine/sread.c:506
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:533 Engine/sread.c:547
+#: Engine/sread.c:538 Engine/sread.c:552
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:559
+#: Engine/sread.c:564
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:565
+#: Engine/sread.c:570
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:579
+#: Engine/sread.c:584
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:599
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:646
+#: Engine/sread.c:651
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:652
+#: Engine/sread.c:657
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:696
+#: Engine/sread.c:701
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:701
+#: Engine/sread.c:706
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:715
+#: Engine/sread.c:720
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:733
+#: Engine/sread.c:740
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr "Sección repetida (%d)\n"
 
-#: Engine/sread.c:736
+#: Engine/sread.c:743
 msgid "Repeat section\n"
 msgstr "Sección repetida\n"
 
-#: Engine/sread.c:761
+#: Engine/sread.c:768
 msgid "Invalid macro name for --smacro"
 msgstr "Nombre de macro inválido para --smacro"
 
-#: Engine/sread.c:865
+#: Engine/sread.c:872
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr "Base de reloj = %f\n"
 
-#: Engine/sread.c:934
+#: Engine/sread.c:942
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:948
+#: Engine/sread.c:956
 msgid "{: invalid repeat count"
 msgstr "sread: {: número inválido de repeticiones"
 
-#: Engine/sread.c:957
+#: Engine/sread.c:965
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:963
+#: Engine/sread.c:971
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1047
+#: Engine/sread.c:1056
 msgid "r: invalid repeat count"
 msgstr "r: número inválido de repeticiones"
 
-#: Engine/sread.c:1049
+#: Engine/sread.c:1058
 #, c-format
 msgid "Repeats=%d\n"
 msgstr "Repeticiones=%d\n"
 
-#: Engine/sread.c:1093
+#: Engine/sread.c:1102
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr "Sección con nombre >>>%s<<<\n"
 
-#: Engine/sread.c:1108
+#: Engine/sread.c:1117
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr "%d: Archivo %s posición %ld\n"
 
-#: Engine/sread.c:1133
+#: Engine/sread.c:1142
 #, c-format
 msgid "Name %s not found"
 msgstr "Nombre %s no encontrado"
 
-#: Engine/sread.c:1135
+#: Engine/sread.c:1144
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr "%d duplicado: %s (%s,%ld)\n"
 
-#: Engine/sread.c:1164
+#: Engine/sread.c:1174
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1189
+#: Engine/sread.c:1199
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1251
+#: Engine/sread.c:1261
 msgid "No previous event for ^"
 msgstr "No hay evento previo en ^"
 
-#: Engine/sread.c:1256
+#: Engine/sread.c:1266
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1286
+#: Engine/sread.c:1296
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1289
+#: Engine/sread.c:1299
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
-#: Engine/sread.c:1761 Engine/sread.c:1775
+#: Engine/sread.c:1300 Engine/sread.c:1305 Engine/sread.c:1754
+#: Engine/sread.c:1777 Engine/sread.c:1791
 msgid "      remainder of line flushed\n"
 msgstr "      el resto de la línea descartado\n"
 
-#: Engine/sread.c:1294
+#: Engine/sread.c:1304
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1373
+#: Engine/sread.c:1384
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr "ATENCION: instr %s no encontrado, asumiendo insno = -1\n"
 
-#: Engine/sread.c:1393
+#: Engine/sread.c:1404
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1539
+#: Engine/sread.c:1550
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1570
+#: Engine/sread.c:1581
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1630
+#: Engine/sread.c:1627 Engine/sread.c:1635
+#, fuzzy
+msgid "Syntax error in macro definition"
+msgstr "Error de sintaxis en llamada de macro"
+
+#: Engine/sread.c:1646
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr "Macro %s con %d argumentos definido \n"
 
-#: Engine/sread.c:1642
+#: Engine/sread.c:1658
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1671
+#: Engine/sread.c:1687
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr ""
 
-#: Engine/sread.c:1681
+#: Engine/sread.c:1697
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1700
+#: Engine/sread.c:1716
 msgid "unknown # option"
 msgstr "Opción # desconocida"
 
-#: Engine/sread.c:1737
+#: Engine/sread.c:1753
 #, c-format
 msgid "illegal opcode %c"
 msgstr "no es un opcode legal"
 
-#: Engine/sread.c:1760
+#: Engine/sread.c:1776
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1774
+#: Engine/sread.c:1790
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1781
+#: Engine/sread.c:1797
 msgid "unmatched quote"
 msgstr "comillas sin cerrar"
 
-#: Engine/sread.c:1825
+#: Engine/sread.c:1841
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1831
+#: Engine/sread.c:1847
 msgid "   zero substituted.\n"
 msgstr "   sustituído por cero.\n"
 
@@ -2243,16 +2237,11 @@ msgstr ""
 msgid "    String truncated\n"
 msgstr "    Cadena truncada\n"
 
-#: Engine/symbtab.c:208
+#: Engine/symbtab.c:211
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:345
-#, c-format
-msgid "Unknown word type for %s on line %d\n"
-msgstr ""
-
 #: Engine/twarp.c:88
 msgid "twarp: illegal opcode\n"
 msgstr ""
@@ -2269,11 +2258,11 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
-#: InOut/cmidi.c:233
+#: InOut/cmidi.c:236
 msgid "CoreMIDI real time MIDI plugin for Csound\n"
 msgstr ""
 
-#: InOut/cmidi.c:247
+#: InOut/cmidi.c:250
 msgid "rtmidi: CoreMIDI module enabled\n"
 msgstr ""
 
@@ -2324,11 +2313,11 @@ msgid "sfinit: cannot open %s"
 msgstr "sfinit: no se puede abrir %s"
 
 #: InOut/libsnd.c:741
-#, fuzzy, c-format
+#, c-format
 msgid "writing %d sample blks of %d-bit floats to %s \n"
 msgstr ""
 
-#: InOut/libsnd.c:744 util/srconv.c:484
+#: InOut/libsnd.c:744 util/srconv.c:485
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr "escribiendo bloques de %d bytes de %s a %s"
@@ -2896,184 +2885,184 @@ msgstr ""
 msgid "rtmidi: PortMIDI module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:110
+#: InOut/rtalsa.c:113
 msgid "--scheduler: invalid priority value; the allowed range is:"
 msgstr ""
 
-#: InOut/rtalsa.c:111
+#: InOut/rtalsa.c:114
 msgid "  -20 to -1: set nice level"
 msgstr ""
 
-#: InOut/rtalsa.c:112
+#: InOut/rtalsa.c:115
 msgid "          0: normal scheduling, but lock memory"
 msgstr ""
 
-#: InOut/rtalsa.c:113
+#: InOut/rtalsa.c:116
 #, c-format
 msgid "    1 to %d: SCHED_RR with the specified priority (DANGEROUS)"
 msgstr ""
 
-#: InOut/rtalsa.c:330
+#: InOut/rtalsa.c:333
 #, c-format
 msgid " *** Cannot open device '%s' for audio output: %s"
 msgstr " *** No es posible abrir el dispositivo '%s' para salida de audio: %s"
 
-#: InOut/rtalsa.c:333
+#: InOut/rtalsa.c:336
 #, c-format
 msgid " *** Cannot open device '%s' for audio input: %s"
 msgstr " *** No es posible abrir el dispositivo '%s' para entrada de audio: %s"
 
-#: InOut/rtalsa.c:394
+#: InOut/rtalsa.c:397
 #, fuzzy, c-format
 msgid "ALSA: -B %d not allowed on this device; using %d instead\n"
 msgstr "ALSA: -B %d no está permitido para este dispositivo; use %d\n"
 
-#: InOut/rtalsa.c:417
+#: InOut/rtalsa.c:420
 #, fuzzy, c-format
 msgid "ALSA: -b %d not allowed on this device; using %d instead\n"
 msgstr "ALSA: -b %d no está permitido para este dispositivo; use %d\n"
 
-#: InOut/rtalsa.c:430
+#: InOut/rtalsa.c:433
 #, c-format
 msgid "ALSA %s: total buffer size: %d, period size: %d\n"
 msgstr ""
 
-#: InOut/rtalsa.c:506
+#: InOut/rtalsa.c:509
 msgid " *** ALSA: must specify a device name, not a number (e.g. -odac:hw:0,0)"
 msgstr ""
 " *** ALSA: se debe especificar un nombre de dispositivo, no un número (por "
 "ejemplo:. -odac:hw:0,0)"
 
-#: InOut/rtalsa.c:514
+#: InOut/rtalsa.c:517
 #, c-format
 msgid " *** ALSA: %s: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:601
+#: InOut/rtalsa.c:604
 msgid "Error reading data from audio input device"
 msgstr "Error leyendo datos del dispositivo de entrada de audio"
 
-#: InOut/rtalsa.c:646
+#: InOut/rtalsa.c:649
 msgid "Error writing data to audio output device"
 msgstr "Error escribiendo datos en el dispositivo de salida de audio"
 
-#: InOut/rtalsa.c:687
+#: InOut/rtalsa.c:690
 msgid "ALSA MIDI: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:694
+#: InOut/rtalsa.c:697
 #, c-format
 msgid "ALSA: error opening MIDI input device: '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:698
+#: InOut/rtalsa.c:701
 #, c-format
 msgid "ALSA: opened MIDI input device '%s'\n"
 msgstr "ALSA: dispositivo de entrada MIDI '%s' abierto\n"
 
-#: InOut/rtalsa.c:717
+#: InOut/rtalsa.c:720
 msgid "ALSA midi: Using all devices.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:746
+#: InOut/rtalsa.c:749
 #, c-format
 msgid "ALSA midi: Error opening device: %s\n"
 msgstr ""
 
-#: InOut/rtalsa.c:768
+#: InOut/rtalsa.c:771
 msgid "ALSA midi: No devices found.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:867
+#: InOut/rtalsa.c:870
 #, c-format
 msgid "ALSA: error opening MIDI output device '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:870
+#: InOut/rtalsa.c:873
 #, c-format
 msgid "ALSA: opened MIDI output device '%s'\n"
 msgstr "ALSA: dispositivo MIDI de salida '%s' abierto\n"
 
-#: InOut/rtalsa.c:910
+#: InOut/rtalsa.c:913
 msgid "-M stdin fcntl failed"
 msgstr ""
 
-#: InOut/rtalsa.c:918
+#: InOut/rtalsa.c:921
 #, c-format
 msgid "cannot open %s"
 msgstr "no es posible abrir %s"
 
-#: InOut/rtalsa.c:929
+#: InOut/rtalsa.c:932
 msgid "MIDI receive: cannot get termios info."
 msgstr ""
 
-#: InOut/rtalsa.c:937
+#: InOut/rtalsa.c:940
 msgid "MIDI receive: cannot set input baud rate."
 msgstr ""
 
-#: InOut/rtalsa.c:943
+#: InOut/rtalsa.c:946
 msgid "MIDI receive: cannot set termios."
 msgstr ""
 
-#: InOut/rtalsa.c:947
+#: InOut/rtalsa.c:950
 #, c-format
 msgid "Opened MIDI input device file '%s'\n"
 msgstr "Dispositivo de entrada MIDI '%s' abierto\n"
 
-#: InOut/rtalsa.c:987
+#: InOut/rtalsa.c:990
 #, c-format
 msgid "sensMIDI: retval errno %d"
 msgstr ""
 
-#: InOut/rtalsa.c:1054
+#: InOut/rtalsa.c:1057
 #, c-format
 msgid "Error opening MIDI output device file '%s'"
 msgstr "Error abriendo el dispositivo de salida MIDI '%s'"
 
-#: InOut/rtalsa.c:1058
+#: InOut/rtalsa.c:1061
 #, c-format
 msgid "Opened MIDI output device file '%s'\n"
 msgstr "Dispositivo de salida MIDI '%s' abierto\n"
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
+#: InOut/rtalsa.c:1104 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1106
+#: InOut/rtalsa.c:1109
 msgid "RT scheduler priority, alsa module"
 msgstr ""
 
-#: InOut/rtalsa.c:1111
+#: InOut/rtalsa.c:1114
 msgid "ALSA real-time audio and MIDI module for Csound by Istvan Varga\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1142
+#: InOut/rtalsa.c:1145
 msgid "rtaudio: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1157
+#: InOut/rtalsa.c:1160
 msgid "rtmidi: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1166
+#: InOut/rtalsa.c:1169
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtauhal.c:163
-#, fuzzy, c-format
+#: InOut/rtauhal.c:162
+#, c-format
 msgid "selected input device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:166
-#, fuzzy, c-format
+#: InOut/rtauhal.c:165
+#, c-format
 msgid "selected output device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:524
+#: InOut/rtauhal.c:523
 msgid "AuHAL module: device closed\n"
 msgstr ""
 
-#: InOut/rtauhal.c:541
+#: InOut/rtauhal.c:540
 msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
 msgstr ""
 
@@ -3168,7 +3157,7 @@ msgstr "entrada"
 
 #: InOut/rtjack.c:317 InOut/rtjack.c:330 InOut/rtjack.c:335 InOut/rtjack.c:552
 #: InOut/rtjack.c:590 InOut/rtjack.c:595 InOut/rtjack.c:616 InOut/rtjack.c:621
-#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315 Opcodes/ftgen.c:79
+#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315
 msgid "memory allocation failure"
 msgstr ""
 
@@ -3732,66 +3721,66 @@ msgstr "diskin2: formato de muestras desconocido"
 msgid "diskin2: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:231
-#, fuzzy, c-format
+#: OOps/diskin2.c:232
+#, c-format
 msgid ""
 "diskin2: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:240
+#: OOps/diskin2.c:242
 msgid ""
 "diskin2: number of output args inconsistent with number of file channels"
 msgstr ""
 "diskin2: número de argumentos de salida no coincide con el número de canales "
 "del archivo"
 
-#: OOps/diskin2.c:270
+#: OOps/diskin2.c:272
 #, c-format
 msgid "diskin2: warning: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 "diskin2: warning: tasa de muestreo del archivo (%d) != de tasa de muestreo "
 "de la orquesta (%d)\n"
 
-#: OOps/diskin2.c:331
+#: OOps/diskin2.c:334
 msgid "diskin2: not initialised"
 msgstr "diskin2: no ha sido inicializado"
 
-#: OOps/diskin2.c:560
+#: OOps/diskin2.c:566
 msgid "soundin: invalid number of channels"
 msgstr "soundin: número inválido de canales"
 
-#: OOps/diskin2.c:581
+#: OOps/diskin2.c:587
 msgid "soundin: unknown sample format"
 msgstr "soundin: formato de muestra desconocido"
 
-#: OOps/diskin2.c:591
+#: OOps/diskin2.c:597
 #, c-format
 msgid "soundin: %s: failed to open file"
 msgstr "soundin: %s: no se puede abrir el archivo"
 
-#: OOps/diskin2.c:599
-#, fuzzy, c-format
+#: OOps/diskin2.c:605
+#, c-format
 msgid ""
 "soundin: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:609
+#: OOps/diskin2.c:615
 msgid ""
 "soundin: number of output args inconsistent with number of file channels"
 msgstr ""
 "soundin: número de argumentos de salida no coincide con el número de canales "
 "del archivo"
 
-#: OOps/diskin2.c:618
+#: OOps/diskin2.c:624
 #, fuzzy, c-format
 msgid "soundin: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 "soundin: warning: tasa de muestreo del archivo (%d) != de tasa de muestreo "
 "de la orquesta (%d)\n"
 
-#: OOps/diskin2.c:651
+#: OOps/diskin2.c:657
 msgid "soundin: not initialised"
 msgstr "soundin: no ha sido inicializado"
 
@@ -3809,7 +3798,7 @@ msgid "diskin: %s: failed to open file"
 msgstr "diskin: %s: no se puede abrir el archivo"
 
 #: OOps/diskin.c:197
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "diskin: opened '%s':\n"
 "        %d Hz, %d channel(s), %ld sample frames\n"
@@ -3883,7 +3872,6 @@ msgid "display"
 msgstr ""
 
 #: OOps/disprep.c:96
-#, fuzzy
 msgid "illegal iprd in display"
 msgstr ""
 
@@ -3909,7 +3897,6 @@ msgid "window size must be power of two"
 msgstr "el tamaño de la ventana debe ser una potencia de dos"
 
 #: OOps/disprep.c:252
-#, fuzzy
 msgid "illegal iprd in ffy display"
 msgstr ""
 
@@ -3980,33 +3967,37 @@ msgid "tempest: not initialised"
 msgstr "tempest: no ha sido inicializado"
 
 #: OOps/dumpf.c:45 OOps/dumpf.c:70 OOps/dumpf.c:95 OOps/dumpf.c:120
-#: OOps/dumpf.c:261 OOps/dumpf.c:288 OOps/dumpf.c:315 OOps/dumpf.c:342
+#: OOps/dumpf.c:263 OOps/dumpf.c:290 OOps/dumpf.c:317 OOps/dumpf.c:344
 msgid "unknown format request"
 msgstr ""
 
 #: OOps/dumpf.c:49 OOps/dumpf.c:74 OOps/dumpf.c:99 OOps/dumpf.c:124
-#: OOps/dumpf.c:265 OOps/dumpf.c:292 OOps/dumpf.c:319 OOps/dumpf.c:346
+#: OOps/dumpf.c:267 OOps/dumpf.c:294 OOps/dumpf.c:321 OOps/dumpf.c:348
 msgid "alaw and ulaw not implemented here"
 msgstr ""
 
-#: OOps/dumpf.c:193 OOps/dumpf.c:442
+#: OOps/dumpf.c:193 OOps/dumpf.c:443
 msgid "unknown kdump format"
 msgstr ""
 
+#: OOps/dumpf.c:196
+msgid "write failure in dumpk"
+msgstr ""
+
 #: OOps/fftlib.c:3195
 #, c-format
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:93
+#: OOps/goto_ops.c:95
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:186
+#: OOps/goto_ops.c:188
 msgid "turnoff2: invalid instrument number"
 msgstr "turnoff2: número de instrumento inválido"
 
-#: OOps/goto_ops.c:191
+#: OOps/goto_ops.c:193
 msgid "turnoff2: invalid mode parameter"
 msgstr "turnoff2: parámetro de modo inválido"
 
@@ -4023,11 +4014,11 @@ msgid "cpstabm: invalid modulator table"
 msgstr "cpstabm: tabla de modulador inválida"
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
-#: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
-#: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
-#: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
-#: Opcodes/midiops2.c:388 Opcodes/midiops2.c:438 Opcodes/midiops2.c:472
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/midiops2.c:59
+#: Opcodes/midiops2.c:76 Opcodes/midiops2.c:120 Opcodes/midiops2.c:154
+#: Opcodes/midiops2.c:221 Opcodes/midiops2.c:252 Opcodes/midiops2.c:316
+#: Opcodes/midiops2.c:335 Opcodes/midiops2.c:375 Opcodes/midiops2.c:406
+#: Opcodes/midiops2.c:456 Opcodes/midiops2.c:490
 msgid "illegal controller number"
 msgstr "numero de controlador ilegal"
 
@@ -4558,7 +4549,7 @@ msgstr "---> Fallaron todos los intentos de conexión. \n"
 msgid "--->  Connected. \n"
 msgstr "--->  Conectado. \n"
 
-#: OOps/remote.c:261 Opcodes/socksend.c:305
+#: OOps/remote.c:261 Opcodes/socksend.c:300
 msgid "write to socket failed"
 msgstr ""
 
@@ -4575,15 +4566,15 @@ msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
 #: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
-#: Opcodes/socksend.c:284
+#: Opcodes/sockrecv.c:345
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:316 Opcodes/socksend.c:289
+#: OOps/remote.c:316 Opcodes/sockrecv.c:350
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:321 Opcodes/socksend.c:295
+#: OOps/remote.c:321 Opcodes/sockrecv.c:356
 msgid "accept failed"
 msgstr ""
 
@@ -4650,7 +4641,7 @@ msgstr ""
 "*** Esta versión de Csound no fue compilada con soporte para eventos remotos "
 "***\n"
 
-#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:834
+#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:839
 msgid "Instrument not defined"
 msgstr "Instrumento no definido"
 
@@ -4864,8 +4855,6 @@ msgid "oscil(krate): not initialised"
 msgstr "oscil(krate): no ha sido inicializado"
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
-#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr "oscil: no ha sido inicializado"
 
@@ -4981,7 +4970,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5168,227 +5157,226 @@ msgstr "reverb: no ha sido inicializado"
 msgid "pan: not initialised"
 msgstr "pan: no ha sido inicializado"
 
-#: OOps/ugrw1.c:922 OOps/ugrw1.c:1247
+#: OOps/ugrw1.c:922 OOps/ugrw1.c:1234
 #, c-format
 msgid "Table write offset %f < 0 or > tablelength"
 msgstr ""
 
-#: OOps/ugrw1.c:1242
+#: OOps/ugrw1.c:1229
 #, c-format
 msgid "Table write k rate function table no. %f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1290 OOps/ugrw1.c:1313 OOps/ugrw1.c:1392
+#: OOps/ugrw1.c:1277 OOps/ugrw1.c:1300 OOps/ugrw1.c:1379
 #, c-format
 msgid "Table %f not found"
 msgstr "Tabla %f no encontrada"
 
-#: OOps/ugrw1.c:1469
+#: OOps/ugrw1.c:1456
 #, c-format
 msgid "Table no. < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f\n"
 msgstr ""
 
-#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1558 OOps/ugrw1.c:1770 OOps/ugrw1.c:1811
+#: OOps/ugrw1.c:1472 OOps/ugrw1.c:1545 OOps/ugrw1.c:1757 OOps/ugrw1.c:1798
 #, c-format
 msgid "Destination dft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1498 OOps/ugrw1.c:1569
+#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1556
 #, c-format
 msgid "Source 1 s1ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1508 OOps/ugrw1.c:1577
+#: OOps/ugrw1.c:1495 OOps/ugrw1.c:1564
 #, c-format
 msgid "Source 2 s2ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1543
+#: OOps/ugrw1.c:1530
 #, c-format
 msgid "Table number < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1758 OOps/ugrw1.c:1800
+#: OOps/ugrw1.c:1745 OOps/ugrw1.c:1787
 #, c-format
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
-#: Opcodes/fareyseq.c:475
+#: OOps/ugrw1.c:1768 OOps/ugrw1.c:1809
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1911 OOps/ugrw1.c:2032
+#: OOps/ugrw1.c:1898 OOps/ugrw1.c:2019
 #, c-format
 msgid "Table kfn=%.2f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1919 OOps/ugrw1.c:2040
+#: OOps/ugrw1.c:1906 OOps/ugrw1.c:2027
 #, c-format
 msgid "kfn table %.2f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1931 OOps/ugrw1.c:2053
+#: OOps/ugrw1.c:1918 OOps/ugrw1.c:2040
 #, c-format
 msgid "Table kfn=%.2f length %ld shorter than ksmps %d"
 msgstr ""
 
-#: OOps/ugrw1.c:1940 OOps/ugrw1.c:2062
+#: OOps/ugrw1.c:1927 OOps/ugrw1.c:2049
 #, c-format
 msgid "kstart %.2f is outside table %.2f range 0 to %ld"
 msgstr ""
 
-#: OOps/ugrw1.c:2156
+#: OOps/ugrw1.c:2143
 msgid "zakinit should only be called once."
 msgstr ""
 
-#: OOps/ugrw1.c:2160
+#: OOps/ugrw1.c:2147
 msgid "zakinit: both isizea and isizek should be > 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2191
+#: OOps/ugrw1.c:2178
 msgid "No zk space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2210
+#: OOps/ugrw1.c:2197
 msgid "zkr index > isizek. Returning 0."
 msgstr "zkr index > isizek. Retornando 0."
 
-#: OOps/ugrw1.c:2214
+#: OOps/ugrw1.c:2201
 msgid "zkr index < 0. Returning 0."
 msgstr "zkr index < 0. Retornando 0."
 
-#: OOps/ugrw1.c:2242
+#: OOps/ugrw1.c:2229
 msgid "zir index > isizek. Returning 0."
 msgstr "zir index > isizek. Retornando 0."
 
-#: OOps/ugrw1.c:2246
+#: OOps/ugrw1.c:2233
 msgid "zir index < 0. Returning 0."
 msgstr "zir index < 0. Retornando 0."
 
-#: OOps/ugrw1.c:2268
+#: OOps/ugrw1.c:2255
 msgid "zkw index > isizek. Not writing."
 msgstr "zkw index > isizek. Nada escrito."
 
-#: OOps/ugrw1.c:2271
+#: OOps/ugrw1.c:2258
 msgid "zkw index < 0. Not writing."
 msgstr "zkw index < 0. Nada escrito."
 
-#: OOps/ugrw1.c:2296
+#: OOps/ugrw1.c:2283
 msgid "ziw index > isizek. Not writing."
 msgstr "ziw index > isizek. Nada escrito."
 
-#: OOps/ugrw1.c:2299
+#: OOps/ugrw1.c:2286
 msgid "ziw index < 0. Not writing."
 msgstr "ziw index < 0. Nada escrito."
 
-#: OOps/ugrw1.c:2323
+#: OOps/ugrw1.c:2310
 msgid "zkwm index > isizek. Not writing."
 msgstr "zkwm index > isizek. Nada escrito."
 
-#: OOps/ugrw1.c:2326
+#: OOps/ugrw1.c:2313
 msgid "zkwm index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2359
+#: OOps/ugrw1.c:2346
 msgid "ziwm index > isizek. Not writing."
 msgstr "ziwm index > isizek. Nada escrito."
 
-#: OOps/ugrw1.c:2362
+#: OOps/ugrw1.c:2349
 msgid "ziwm index < 0. Not writing."
 msgstr "ziwm index < 0. Nada escrito."
 
-#: OOps/ugrw1.c:2406
+#: OOps/ugrw1.c:2393
 msgid "zkmod kzkmod > isizek. Not writing."
 msgstr "zkmod kzkmod > isizek. Nada escrito."
 
-#: OOps/ugrw1.c:2432
+#: OOps/ugrw1.c:2419
 msgid "zkcl first or last > isizek. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2435
+#: OOps/ugrw1.c:2422
 msgid "zkcl first or last < 0. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2439
+#: OOps/ugrw1.c:2426
 msgid "zkcl first > last. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2461
+#: OOps/ugrw1.c:2448
 msgid "No za space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2487
+#: OOps/ugrw1.c:2474
 msgid "zar index > isizea. Returning 0."
 msgstr "zar index > isizea. Retornando 0."
 
-#: OOps/ugrw1.c:2491
+#: OOps/ugrw1.c:2478
 msgid "zar index < 0. Returning 0."
 msgstr "zar index < 0. Retornando 0."
 
-#: OOps/ugrw1.c:2523
+#: OOps/ugrw1.c:2510
 msgid "zarg index > isizea. Returning 0."
 msgstr "zarg index > isizea. Retornando 0."
 
-#: OOps/ugrw1.c:2528
+#: OOps/ugrw1.c:2515
 msgid "zarg index < 0. Returning 0."
 msgstr "zarg index < 0. Retornando 0."
 
-#: OOps/ugrw1.c:2559 OOps/ugrw1.c:2590
+#: OOps/ugrw1.c:2546 OOps/ugrw1.c:2577
 msgid "zaw index > isizea. Not writing."
 msgstr "zaw index > isizea. Nada escrito."
 
-#: OOps/ugrw1.c:2562 OOps/ugrw1.c:2593
+#: OOps/ugrw1.c:2549 OOps/ugrw1.c:2580
 msgid "zaw index < 0. Not writing."
 msgstr "zaw index < 0. Nada escrito."
 
-#: OOps/ugrw1.c:2646
+#: OOps/ugrw1.c:2633
 msgid "zamod kzamod > isizea. Not writing."
 msgstr "zamod kzamod > isizea. Nada escrito."
 
-#: OOps/ugrw1.c:2678
+#: OOps/ugrw1.c:2665
 msgid "zacl first or last > isizea. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2682
+#: OOps/ugrw1.c:2669
 msgid "zacl first or last < 0. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2687
+#: OOps/ugrw1.c:2674
 msgid "zacl first > last. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2819
+#: OOps/ugrw1.c:2806
 msgid "printk not initialised"
 msgstr "printk: no ha sido inicializado"
 
-#: OOps/ugrw1.c:2837
+#: OOps/ugrw1.c:2824
 #, c-format
 msgid "time %11.5f: "
 msgstr ""
 
-#: OOps/ugrw1.c:2898
+#: OOps/ugrw1.c:2885
 msgid "printks param 1 was not a \"quoted string\""
 msgstr ""
 
-#: OOps/ugrw1.c:3114
+#: OOps/ugrw1.c:3101
 msgid "printks not initialised"
 msgstr "printks: no ha sido inicializado"
 
-#: OOps/ugrw1.c:3245
+#: OOps/ugrw1.c:3232
 msgid "inz index > isizea. Not writing."
 msgstr "inz index > isizea. Nada escrito."
 
-#: OOps/ugrw1.c:3247
+#: OOps/ugrw1.c:3234
 msgid "inz index < 0. Not writing."
 msgstr "inz index < 0. Nada escrito."
 
-#: OOps/ugrw1.c:3281 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
+#: OOps/ugrw1.c:3268 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
 msgid "outz index > isizea. No output"
 msgstr ""
 
-#: OOps/ugrw1.c:3283 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
+#: OOps/ugrw1.c:3270 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
 msgid "outz index < 0. No output."
 msgstr ""
 
@@ -5406,41 +5394,41 @@ msgstr "vdelay: no ha sido inicializado"
 msgid "vdelay3: not initialised"
 msgstr "vdelay3: no ha sido inicializado"
 
-#: OOps/vdelay.c:736
+#: OOps/vdelay.c:738
 msgid "Wrong input count in multitap\n"
 msgstr ""
 
-#: OOps/vdelay.c:779
+#: OOps/vdelay.c:781
 msgid "multitap: not initialised"
 msgstr "multitap: no ha sido inicializado"
 
-#: OOps/vdelay.c:899
+#: OOps/vdelay.c:901
 msgid "High frequency diffusion not in (0, 1)\n"
 msgstr ""
 
-#: OOps/vdelay.c:915
+#: OOps/vdelay.c:917
 #, c-format
 msgid "reverbx; Combs ftable must have %d time and %d gain values"
 msgstr ""
 
-#: OOps/vdelay.c:947
+#: OOps/vdelay.c:949
 #, c-format
 msgid "reverbx; Alpas ftable must have %d time and %d gain values"
 msgstr ""
 
-#: OOps/vdelay.c:1058
+#: OOps/vdelay.c:1062
 msgid "High frequency diffusion>1\n"
 msgstr ""
 
-#: OOps/vdelay.c:1062
+#: OOps/vdelay.c:1066
 msgid "High frequency diffusion<0\n"
 msgstr ""
 
-#: OOps/vdelay.c:1066
+#: OOps/vdelay.c:1070
 msgid "Non positive reverb time\n"
 msgstr ""
 
-#: OOps/vdelay.c:1124
+#: OOps/vdelay.c:1128
 msgid "reverbx: not initialised"
 msgstr "reverbx: no ha sido inicializado"
 
@@ -5448,15 +5436,15 @@ msgstr "reverbx: no ha sido inicializado"
 msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:165
+#: Opcodes/ambicode1.c:167
 msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:169
+#: Opcodes/ambicode1.c:171
 msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/ambicode1.c:195
+#: Opcodes/ambicode1.c:197
 msgid "The output channel count does not match the isetup value."
 msgstr ""
 
@@ -5468,1050 +5456,168 @@ msgstr ""
 msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
 msgstr ""
 
-#: Opcodes/ambicode.c:287
-msgid "bformdec is deprecated; use bformdec1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:291
-msgid "Wrong number of input arguments!"
-msgstr ""
-
-#: Opcodes/ambicode.c:299
-msgid "Wrong number of output cells! There must be 2 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:344
-msgid "Wrong number of output cells! There must be 4 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
-msgid "Wrong number of output cells! There must be 5 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
-msgid "Wrong number of output cells! There must be 8 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:575
-msgid "Not supported setup number!"
-msgstr ""
-
-#: Opcodes/babo.c:742
-#, c-format
-msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
-msgstr ""
-
-#: Opcodes/bilbar.c:83
-msgid "No data to continue"
-msgstr ""
-
-#: Opcodes/bilbar.c:109
-msgid "Ends must be clamped(1), pivoting(2) or free(3)"
-msgstr ""
-
-#: Opcodes/biquad.c:599
-msgid "vco: not initialised"
-msgstr "vco: no ha sido inicializado"
-
-#: Opcodes/bowedbar.c:53
-#, c-format
-msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
-msgstr ""
-
-#: Opcodes/bowedbar.c:98
-msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
-msgstr ""
-
-#: Opcodes/clfilt.c:53
-msgid "filter type not lowpass or highpass in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:59
-#, c-format
-msgid "filter kind, %d, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:63
-#, c-format
-msgid "number of poles, %f, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:69
-#, c-format
-msgid "odd number of poles chosen in clfilt, rounded to %d"
-msgstr ""
-
-#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
-#, c-format
-msgid "passband ripple must be positive in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
-#, c-format
-msgid "passband ripple must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
-#, c-format
-msgid "stopband attenuation must be negative in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
-#, c-format
-msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
-msgid "Lowpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
-#: Opcodes/clfilt.c:383
-msgid "code error, ikind out of range"
-msgstr ""
-
-#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
-msgid "Highpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
-msgid "code error, ihilo out of range"
-msgstr ""
-
-#: Opcodes/control.c:40
-msgid "control: failed to allocate globals"
-msgstr ""
-
-#: Opcodes/control.c:56
-#, c-format
-msgid "Closing down wish(%d)\n"
-msgstr ""
-
-#: Opcodes/control.c:202
-#, c-format
-msgid "Slider %d set to %s\n"
-msgstr ""
-
-#: Opcodes/control.c:207
-#, c-format
-msgid "Unknown control %d"
-msgstr ""
-
-#: Opcodes/cpumeter.c:77
-#, fuzzy, c-format
-msgid "Failed to open /proc/stat: %s"
-msgstr "No fue posible abrir el archivo /proc/stat : %s"
-
-#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
-#: Opcodes/cpumeter.c:151
-msgid "failed /proc/stat read"
-msgstr ""
-
-#: Opcodes/crossfm.c:34
-msgid "crossfm: ftable not found"
-msgstr ""
-
-#: Opcodes/date.c:68
-msgid "dates: buffer overflow"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/dssi4cs.c:823
-msgid "DSSI4CS: Not initialised or wrong argument types."
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:120
-#, c-format
-msgid "Failed to load plugin \"%s\": %s"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:155
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\": "
-"%s.\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:161
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\".\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:176
-#, c-format
-msgid "Unable to find label \"%s\" in plugin library file \"%s\"."
-msgstr ""
-
-#: Opcodes/fareygen.c:140
-#, fuzzy
-msgid "insufficient arguments for fareytable"
-msgstr "argumentos insuficientes por fareytable"
-
-#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
-#, c-format
-msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:256
-#, c-format
-msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
-#, c-format
-msgid "Farey: Destination dft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
-#, c-format
-msgid "Farey: Source sft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:306
-msgid "Farey: Filter type < 1"
-msgstr ""
-
-#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
-#, c-format
-msgid "Table no. < 1 sft=%.2f"
-msgstr ""
-
-#: Opcodes/filter.c:187 Opcodes/filter.c:225
-msgid "Filter order out of bounds: (1 <= nb < 51, 0 <= na <= 50)"
-msgstr ""
-
-#: Opcodes/filter.c:672
-msgid "too many iterations in laguer"
-msgstr ""
-
-#: Opcodes/flanger.c:188
-msgid "wguide2 xfreq1 and xfreq2 arguments must be both a-rate or k and i-rate"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:195
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:149
-msgid "error allocating fluid engine\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:203
-#, c-format
-msgid ""
-"Created fluidEngine %d with sampling rate = %f, chorus %s, reverb %s, "
-"channels %d, polyphony %d.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:230
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:392
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:553
-#, fuzzy, c-format
-msgid "Illegal Engine Number: %i.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:238
-#, c-format
-msgid "Loading SoundFont : %s.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:244
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:208
-#, c-format
-msgid "fluid: unable to load %s"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:262
-#, c-format
-msgid "SoundFont: %3d  Bank: %3d  Preset: %3d  %s\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:483
-#, c-format
-msgid ""
-"result: %d \n"
-" Note off: c:%3d k:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:491
-#, c-format
-msgid ""
-"result: %d \n"
-"Note on: c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:496
-#, c-format
-msgid "Key pressure (not handled): c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:504
-#, c-format
-msgid "Result: %d Control change: c:%3d c:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:511
-#, c-format
-msgid "Result: %d Program change: c:%3d p:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:524
-#, c-format
-msgid "Result: %d, Pitch bend:     c:%d b:%d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:530
-#, c-format
-msgid "System exclusive (not handled): c:%3d v1:%3d v2:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:562
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:577
-msgid "Illegal Interpolation Method: Must be either 0, 1, 4, or 7.\n"
-msgstr ""
-
-#: Opcodes/fm4op.c:165
-msgid "No table for VibWaveato"
-msgstr ""
-
-#: Opcodes/fm4op.c:184
-msgid "No table for FM4Op"
-msgstr ""
-
-#: Opcodes/follow.c:38
-msgid "follow - zero length!"
-msgstr ""
-
-#: Opcodes/fout.c:60
-#, c-format
-msgid "Closing file '%s'...\n"
-msgstr ""
-
-#: Opcodes/fout.c:102
-msgid "invalid file handle"
-msgstr ""
-
-#: Opcodes/fout.c:109 Opcodes/fout.c:421
-msgid "invalid file name"
-msgstr ""
-
-#: Opcodes/fout.c:166
-#, c-format
-msgid "error opening file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:193
-#, c-format
-msgid "error opening sound file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:430
-#, c-format
-msgid "cannot close '%s': not found in list of open files"
-msgstr ""
-
-#: Opcodes/fout.c:441
-#, c-format
-msgid "cannot close file #%d: not a valid handle"
-msgstr ""
-
-#: Opcodes/fout.c:448
-#, c-format
-msgid "file #%d (%s) is in use, will be closed when released"
-msgstr ""
-
-#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
-msgid "fouti: invalid file handle"
-msgstr ""
-
-#: Opcodes/freeverb.c:258
-msgid "freeverb: not initialised"
-msgstr "freeverb: no ha sido inicializado"
-
-#: Opcodes/ftconv.c:156
-msgid "ftconv: invalid number of channels"
-msgstr ""
-
-#: Opcodes/ftconv.c:161
-msgid "ftconv: invalid impulse response partition length"
-msgstr ""
-
-#: Opcodes/ftconv.c:175
-msgid "ftconv: invalid length, or insufficient IR data for convolution"
-msgstr ""
-
-#: Opcodes/ftconv.c:193
-msgid "ftconv: skipped non-zero samples, impulse response may be truncated\n"
-msgstr ""
-
-#: Opcodes/ftconv.c:289
-msgid "ftconv: not initialised"
-msgstr "ftconv: no ha sido inicializado"
-
-#: Opcodes/ftgen.c:69 Opcodes/ftgen.c:182
-#, c-format
-msgid "Error deleting ftable %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:136 Opcodes/signalflowgraph.cpp:895
-msgid "ftgen string arg not allowed"
-msgstr ""
-
-#: Opcodes/ftgen.c:155 Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
-msgid "ftgen error"
-msgstr ""
-
-#: Opcodes/ftgen.c:179
-#, c-format
-msgid "Invalid table number: %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:347
-msgid "ftload: error allocating ftable"
-msgstr ""
-
-#: Opcodes/ftgen.c:349
-msgid "ftload: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:351
-msgid "ftload: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:354
-msgid "ftload: incorrect file"
-msgstr ""
-
-#: Opcodes/ftgen.c:467
-msgid "ftsave: Bad table number. Saving is possible only for existing tables."
-msgstr ""
-
-#: Opcodes/ftgen.c:470
-msgid "ftsave: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:472
-msgid "ftsave: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:474
-msgid "ftsave: failed to write file"
-msgstr ""
-
-#: Opcodes/gab/gab.c:111
-msgid "fastab: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
-msgid "tabw off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
-msgid "tab off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:185
-msgid "tab_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:192
-#, c-format
-msgid "tab_i off end: table number: %d\n"
-msgstr ""
-
-#: Opcodes/gab/gab.c:204
-msgid "tabw_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:211
-msgid "tabw_i off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:249
-msgid "tab_init: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:318
-msgid "printi parameter was not a \"quoted string\""
-msgstr ""
-
-#: Opcodes/gab/gab.c:425
-msgid "adsynt2: wavetable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:437
-msgid "adsynt2: freqtable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:442
-msgid "adsynt2: partial count is greater than freqtable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:451
-msgid "adsynt2: amptable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:456
-msgid "adsynt2: partial count is greater than amptable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:501
-msgid "adsynt2: not initialised"
-msgstr ""
-
-#: Opcodes/gab/gab.c:743
-msgid "max_k: invalid imaxflag value"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:70
-msgid "hvs1: a line segment must be delimited by 2 points at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:152
-msgid "hvs2: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:248
-msgid "hvs3: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:390
-msgid "vphaseseg: the first function is invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
-msgid "vphaseseg: invalid num. of elements"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:416
-msgid "vphaseseg: function invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
-msgid "vtable1: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
-msgid "copyTabElems: incorrect destination table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
-msgid ""
-"copyTabElems: destination table too short or number of elements to copy too "
-"big"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
-#, fuzzy
-msgid "copyTabElems: incorrect source table number"
-msgstr "copyTabElems: número inválido de tabla fuente"
-
-#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
-msgid ""
-"copyTabElems: source table size less than the number of elements to copy"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
-msgid "copyTabElems: source table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
-msgid "copyTabElems: destination table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:347
-msgid "inrg: audio input is not enabled"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:362
-msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:403
-msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
-#: Opcodes/gab/newgabopc.c:672
-msgid "invalid function"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:443
-msgid "lposc: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:577
-msgid "lposcil: no sample rate stored in function assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:674
-msgid "lposcil: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
-#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
-#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
-msgid "illegal channel"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
-#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
-#, c-format
-msgid "illegal control number at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:76
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d.  When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
-#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
-#: Opcodes/midiops3.c:347
-#, c-format
-msgid "illegal initvalue at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
-msgid "sliderXtable: zero is illegal in exponential operations"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:315
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d. When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
-#: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
-#: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
-msgid "illegal midi channel"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:43
-msgid "tabmorph: invalid table number"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:47
-msgid "tabmorph: all tables must have the same length!"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:35
-msgid "mtablei: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
-#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
-msgid "mtable: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:187
-msgid "mtabi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:254
-msgid "mtablewi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
-#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
-#: Opcodes/gab/vectorial.c:408
-msgid "mtabw: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:350
-msgid "mtabwi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:382
-msgid "mtablew: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
-#, c-format
-msgid "vadd_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:473
-msgid "vadd_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:500
-msgid "vadd: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:532
-msgid "vmult_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:559
-msgid "vmult: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:575
-#, c-format
-msgid "vpow_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:592
-msgid "vpow_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:620
-msgid "vpow: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:636
-#, c-format
-msgid "vexp_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:652
-msgid "vexp_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:679
-msgid "vexp: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:697
-#, c-format
-msgid "vectorsop: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:702
-#, c-format
-msgid "vectorsop: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:742
-msgid "vcopy: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:760
-msgid "vcopy: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:787
-#, c-format
-msgid "vcopy_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:792
-#, c-format
-msgid "vcopy_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:814
-msgid "vcopy_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:831
-msgid "vcopy_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:870
-msgid "vaddv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:889
-msgid "vaddv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:915
-#, c-format
-msgid "vaddv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:920
-#, c-format
-msgid "vaddv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:942
-msgid "vaddv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:960
-msgid "vaddv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:991
-msgid "vsubv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1010
-msgid "vsubv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1037
-#, c-format
-msgid "vsubv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1042
-#, c-format
-msgid "vsubv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1064
-msgid "vsubv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1082
-msgid "vsubv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1119
-msgid "vmultv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1138
-msgid "vmultv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1165
-#, c-format
-msgid "vmultv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1170
-#, c-format
-msgid "vmultv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1192
-msgid "vmultv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1209
-msgid "vmultv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1246
-msgid "vdivv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1265
-msgid "vdivv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1292
-#, c-format
-msgid "vdivv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1297
-#, c-format
-msgid "vdivv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1319
-msgid "vdivv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1337
-msgid "vdivv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1374
-msgid "vpowv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1393
-msgid "vpowv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1420
-#, c-format
-msgid "vpowv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:287
+msgid "bformdec is deprecated; use bformdec1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1425
-#, c-format
-msgid "vpowv_i: ifn2 invalid table number %i"
+#: Opcodes/ambicode.c:291
+msgid "Wrong number of input arguments!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1447
-msgid "vpowv_i: ifn1 length exceeded"
+#: Opcodes/ambicode.c:299
+msgid "Wrong number of output cells! There must be 2 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1464
-msgid "vpowv_i: ifn2 length exceeded"
+#: Opcodes/ambicode.c:344
+msgid "Wrong number of output cells! There must be 4 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1501
-msgid "vexpv: ifn1 length exceeded"
+#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
+msgid "Wrong number of output cells! There must be 5 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1520
-msgid "vexpv: ifn2 length exceeded"
+#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
+msgid "Wrong number of output cells! There must be 8 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1547
-#, c-format
-msgid "vexpv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:575
+msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1552
+#: Opcodes/babo.c:742
 #, c-format
-msgid "vexpv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1574
-msgid "vexpv_i: ifn1 length exceeded"
+msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1592
-msgid "vexpv_i: ifn2 length exceeded"
+#: Opcodes/bilbar.c:83
+msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1629
-msgid "vmap: Error: ifn1 and ifn2 can not be the same"
+#: Opcodes/bilbar.c:109
+msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1634
-#, c-format
-msgid "vmap: ifn1 invalid table number %i"
-msgstr ""
+#: Opcodes/biquad.c:599
+msgid "vco: not initialised"
+msgstr "vco: no ha sido inicializado"
 
-#: Opcodes/gab/vectorial.c:1639
+#: Opcodes/bowedbar.c:53
 #, c-format
-msgid "vmap: ifn2 invalid table number %i"
+msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1661
-msgid "vmap: ifn1 length exceeded"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1678
-msgid "vmap: ifn2 length exceeded"
-msgstr ""
+#: Opcodes/cellular.c:49 Opcodes/cellular.c:55
+#, fuzzy
+msgid "cell: invalid num of elements"
+msgstr "cella: número inválido de argumentos"
 
-#: Opcodes/gab/vectorial.c:1698
+#: Opcodes/cellular.c:51
 #, fuzzy
-msgid "vectorop: invalid num of elements"
-msgstr "vectorop : número inválido de argumentos"
+msgid "cell: invalid output table"
+msgstr "cella: tabla de modulador inválida"
 
-#: Opcodes/gab/vectorial.c:1727
+#: Opcodes/cellular.c:58
 #, fuzzy
-msgid "vport: invalid table length or num of elements"
-msgstr "vport : tamaño inválido de tabla"
+msgid "cell: invalid initial state table"
+msgstr "cella: tabla de modulador inválida"
 
-#: Opcodes/gab/vectorial.c:1730
+#: Opcodes/cellular.c:63
 #, fuzzy
-msgid "vport: invalid table"
-msgstr "vport : tabla inválida"
+msgid "cell: invalid rule table"
+msgstr "cella: tabla de modulador inválida"
 
-#: Opcodes/gab/vectorial.c:1735
-msgid "vport: invalid init table length or num of elements"
+#: Opcodes/clfilt.c:53
+msgid "filter type not lowpass or highpass in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1738
-#, fuzzy
-msgid "vport: invalid init table"
-msgstr "vport : tabla inválida"
-
-#: Opcodes/gab/vectorial.c:1875
+#: Opcodes/clfilt.c:59
 #, c-format
-msgid "vrandh: Seeding from current time %lu\n"
+msgid "filter kind, %d, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1888
-#, fuzzy
-msgid "vrandh: Invalid table."
-msgstr "vrandh: tabla inválida"
-
-#: Opcodes/gab/vectorial.c:1891
-msgid "vrandh: idstoffset is greater than table length."
+#: Opcodes/clfilt.c:63
+#, c-format
+msgid "number of poles, %f, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1896
-msgid "randh: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:69
+#, c-format
+msgid "odd number of poles chosen in clfilt, rounded to %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1975
+#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
 #, c-format
-msgid "vrandi: Seeding from current time %lu\n"
+msgid "passband ripple must be positive in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1987
-#, fuzzy
-msgid "vrandi: Invalid table."
-msgstr "vrandi : tabla inválida"
-
-#: Opcodes/gab/vectorial.c:1990
-msgid "vrandi: idstoffset is greater thantable length."
+#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
+#, c-format
+msgid "passband ripple must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1995
-msgid "vrandi: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
+#, c-format
+msgid "stopband attenuation must be negative in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
-#: Opcodes/gab/vectorial.c:2091
-#, fuzzy
-msgid "vecdelay: invalid num of elements"
-msgstr "vecdelay : número inválido de argumentos"
-
-#: Opcodes/gab/vectorial.c:2079
-#, fuzzy
-msgid "vecdly: invalid output table"
-msgstr "vecdly : tabla de modulador inválida"
+#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
+#, c-format
+msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2086
-#, fuzzy
-msgid "vecdly: invalid input table"
-msgstr "vecdly : tabla de ventana inválida"
+#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
+msgid "Lowpass Elliptical not implemented yet. Sorry!"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2093
-#, fuzzy
-msgid "vecdly: invalid delay table"
-msgstr "vecdly : tabla de modulador inválida"
+#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
+#: Opcodes/clfilt.c:383
+msgid "code error, ikind out of range"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2138
-#, fuzzy
-msgid "vecdly: not initialised"
-msgstr "vecdly : no ha sido inicializado"
+#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
+msgid "Highpass Elliptical not implemented yet. Sorry!"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2181
-msgid "vlinseg/vexpseg: invalid num. of elements"
+#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
+msgid "code error, ihilo out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr "tableseg: no ha sido inicializado"
+#: Opcodes/control.c:40
+msgid "control: failed to allocate globals"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr "tablexseg: no ha sido inicializado"
+#: Opcodes/control.c:56
+#, c-format
+msgid "Closing down wish(%d)\n"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2406
-#, fuzzy
-msgid "vdelayk: not initialised"
-msgstr "vdelayk: no ha sido inicializado"
+#: Opcodes/control.c:211
+#, c-format
+msgid "Slider %d set to %s\n"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
-#, fuzzy
-msgid "cella: invalid num of elements"
-msgstr "cella: número inválido de argumentos"
+#: Opcodes/control.c:216
+#, c-format
+msgid "Unknown control %d"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2441
-#, fuzzy
-msgid "cella: invalid output table"
-msgstr "cella: tabla de modulador inválida"
+#: Opcodes/cpumeter.c:77
+#, fuzzy, c-format
+msgid "Failed to open /proc/stat: %s"
+msgstr "No fue posible abrir el archivo /proc/stat : %s"
 
-#: Opcodes/gab/vectorial.c:2448
-#, fuzzy
-msgid "cella: invalid initial state table"
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
+msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2452
-#, fuzzy
-msgid "cella: invalid rule table"
-msgstr "cella: tabla de modulador inválida"
+#: Opcodes/crossfm.c:34
+msgid "crossfm: ftable not found"
+msgstr ""
 
 #: Opcodes/grain4.c:59
 msgid "granule_set: Unable to find function table"
@@ -6677,7 +5783,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1259
 msgid ""
 "\n"
 "WARNING: fades are overlapping: this could lead to noise: reduce fade size "
@@ -6713,29 +5819,29 @@ msgstr ""
 msgid "pvsifd: unsupported value for iwintype\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:426
+#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:429
 #, c-format
 msgid "imageload: cannot open image %s.\n"
 msgstr "imageload: no es posible abrir la imagen %s.\n"
 
-#: Opcodes/imageOpcodes.c:111
+#: Opcodes/imageOpcodes.c:108 Opcodes/imageOpcodes.c:114
 #, c-format
 msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
-#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
-#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:122 Opcodes/imageOpcodes.c:129
+#: Opcodes/imageOpcodes.c:168 Opcodes/imageOpcodes.c:177
+#: Opcodes/imageOpcodes.c:191 Opcodes/imageOpcodes.c:294
+#: Opcodes/imageOpcodes.c:301 Opcodes/imageOpcodes.c:314
 msgid "imageload: out of memory.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:283
+#: Opcodes/imageOpcodes.c:286
 #, c-format
 msgid "imageload: cannot open image %s for writing.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:392
+#: Opcodes/imageOpcodes.c:395
 msgid "Cannot allocate memory.\n"
 msgstr ""
 
@@ -6779,29 +5885,29 @@ msgstr ""
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:892
+#: Opcodes/jacko.cpp:894
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:895
+#: Opcodes/jacko.cpp:897
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:911
+#: Opcodes/jacko.cpp:913
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
-#: Opcodes/jacko.cpp:1241
+#: Opcodes/jacko.cpp:957 Opcodes/jacko.cpp:1064 Opcodes/jacko.cpp:1171
+#: Opcodes/jacko.cpp:1243
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
-#: Opcodes/jacko.cpp:1255
+#: Opcodes/jacko.cpp:971 Opcodes/jacko.cpp:1079 Opcodes/jacko.cpp:1186
+#: Opcodes/jacko.cpp:1257
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6854,8 +5960,8 @@ msgstr ""
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
-#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:120
+#: Opcodes/pvlock.c:322 Opcodes/pvsbasic.c:463
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
@@ -6884,15 +5990,36 @@ msgstr ""
 msgid "splitrig: incorrect table number"
 msgstr ""
 
-#: Opcodes/midiops2.c:514 Opcodes/midiops2.c:529 Opcodes/midiops2.c:548
+#: Opcodes/midiops2.c:339 Opcodes/midiops2.c:377 Opcodes/midiops2.c:409
+#: Opcodes/midiops2.c:458 Opcodes/midiops2.c:493 Opcodes/midiops2.c:535
+#: Opcodes/midiops2.c:550 Opcodes/midiops2.c:569
+msgid "illegal midi channel"
+msgstr ""
+
+#: Opcodes/midiops2.c:532 Opcodes/midiops2.c:547 Opcodes/midiops2.c:566
 msgid "value out of range"
 msgstr ""
 
-#: Opcodes/midiops2.c:580
+#: Opcodes/midiops2.c:598
 #, c-format
 msgid "invalid channel number: %d"
 msgstr ""
 
+#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
+#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
+msgid "illegal channel"
+msgstr ""
+
+#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
+#, c-format
+msgid "illegal control number at position n.%d"
+msgstr ""
+
+#: Opcodes/midiops3.c:64 Opcodes/midiops3.c:168 Opcodes/midiops3.c:347
+#, c-format
+msgid "illegal initvalue at position n.%d"
+msgstr ""
+
 #: Opcodes/midiops3.c:333 Opcodes/midiops3.c:428
 #, c-format
 msgid "illegal msb control number at position n.%d"
@@ -6931,12 +6058,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
+#: Opcodes/mp3in.c:101 Opcodes/mp3in.c:242
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr "mp3in: %s: no se puede abrir el archivo"
 
-#: Opcodes/mp3in.c:140
+#: Opcodes/mp3in.c:148
 #, fuzzy, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7092,6 +6219,10 @@ msgstr ""
 msgid "vco2init: invalid max table size"
 msgstr ""
 
+#: Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
+msgid "ftgen error"
+msgstr ""
+
 #: Opcodes/oscbnk.c:1757
 msgid "vco2init: invalid source ftable"
 msgstr ""
@@ -7148,72 +6279,72 @@ msgstr ""
 msgid "rbjeq: invalid filter type"
 msgstr ""
 
-#: Opcodes/OSC.c:122
+#: Opcodes/OSC.c:126
 msgid "Too many arguments to OSCsend"
 msgstr ""
 
-#: Opcodes/OSC.c:125
+#: Opcodes/OSC.c:129
 msgid "No a-rate arguments allowed"
 msgstr ""
 
-#: Opcodes/OSC.c:163 Opcodes/OSC.c:168 Opcodes/OSC.c:173 Opcodes/OSC.c:183
-#: Opcodes/OSC.c:190 Opcodes/OSC.c:195 Opcodes/OSC.c:206 Opcodes/OSC.c:214
-#: Opcodes/OSC.c:232
+#: Opcodes/OSC.c:167 Opcodes/OSC.c:172 Opcodes/OSC.c:177 Opcodes/OSC.c:187
+#: Opcodes/OSC.c:194 Opcodes/OSC.c:199 Opcodes/OSC.c:210 Opcodes/OSC.c:218
+#: Opcodes/OSC.c:236
 msgid "String not expected"
 msgstr ""
 
-#: Opcodes/OSC.c:202
+#: Opcodes/OSC.c:206
 msgid "Not a string when needed"
 msgstr ""
 
-#: Opcodes/OSC.c:219
+#: Opcodes/OSC.c:223
 msgid "Time stamp is two values"
 msgstr ""
 
-#: Opcodes/OSC.c:240
+#: Opcodes/OSC.c:244
 #, fuzzy, c-format
 msgid "ftable %.2f does not exist"
 msgstr "la tabla-f (ftable) %.2f no existe"
 
-#: Opcodes/OSC.c:249
+#: Opcodes/OSC.c:253
 #, c-format
 msgid "Unknown OSC type %c\n"
 msgstr ""
 
-#: Opcodes/OSC.c:428
+#: Opcodes/OSC.c:436
 msgid "OSC: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/OSC.c:446
+#: Opcodes/OSC.c:455
 msgid "OSCrecv is already running"
 msgstr "OSCrecv ya está corriendo"
 
-#: Opcodes/OSC.c:589
+#: Opcodes/OSC.c:599
 msgid "OSC deinitiatised\n"
 msgstr ""
 
-#: Opcodes/OSC.c:613
+#: Opcodes/OSC.c:623
 #, c-format
 msgid "OSC listener #%d started on port %s\n"
 msgstr ""
 
-#: Opcodes/OSC.c:663
+#: Opcodes/OSC.c:673
 msgid "OSC not running"
 msgstr "OSC no está corriendo"
 
-#: Opcodes/OSC.c:667
+#: Opcodes/OSC.c:677
 msgid "invalid handle"
 msgstr ""
 
-#: Opcodes/OSC.c:674
+#: Opcodes/OSC.c:684
 msgid "invalid number of arguments"
 msgstr "número inválido de argumentos"
 
-#: Opcodes/OSC.c:695 Opcodes/OSC.c:700
+#: Opcodes/OSC.c:705 Opcodes/OSC.c:710
 msgid "argument list inconsistent with format string"
 msgstr ""
 
-#: Opcodes/OSC.c:704
+#: Opcodes/OSC.c:714
 msgid "invalid type"
 msgstr ""
 
@@ -7233,11 +6364,11 @@ msgstr ""
 msgid "partikkel: "
 msgstr ""
 
-#: Opcodes/partikkel.c:806
+#: Opcodes/partikkel.c:807
 msgid "partikkelsync: opcode id needs to be a non-zero integer"
 msgstr ""
 
-#: Opcodes/partikkel.c:810 Opcodes/partikkel.c:816
+#: Opcodes/partikkel.c:811 Opcodes/partikkel.c:817
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
@@ -7392,36 +6523,36 @@ msgid ""
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1733
+#: Opcodes/pitch.c:1598
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1784
+#: Opcodes/pitch.c:1649
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
+#: Opcodes/pitch.c:1699 Opcodes/pitch.c:1842
 msgid "Error: transeg not initialised (krate)\n"
 msgstr "Error: transeg no ha sido inicializado (krate)\n"
 
-#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
+#: Opcodes/pitch.c:1734 Opcodes/pitch.c:1892
 msgid "transeg: not initialised (arate)\n"
 msgstr "transeg: no ha sido inicializado (arate)\n"
 
-#: Opcodes/pitch.c:1924
+#: Opcodes/pitch.c:1789
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2294
+#: Opcodes/pitch.c:2159
 msgid "median: not initialised (arate)\n"
 msgstr "median: no ha sido inicializado (arate)\n"
 
-#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
+#: Opcodes/pitch.c:2163 Opcodes/pitch.c:2210
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2341
+#: Opcodes/pitch.c:2206
 msgid "median: not initialised (krate)\n"
 msgstr "median no ha sido inicializado (krate)\n"
 
@@ -7448,17 +6579,6 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr ""
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
-#: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
-#: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
-#: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
-msgid "Unsafe to have same fsig as in and out"
-msgstr ""
-
-#: Opcodes/ppp.c:36 Opcodes/pvslock.c:36
-msgid "pvslock: signal format must be amp-phase or amp-freq."
-msgstr ""
-
 #: Opcodes/psynth.c:97 Opcodes/psynth.c:253
 msgid "psynth: first input not in TRACKS format\n"
 msgstr ""
@@ -7623,7 +6743,14 @@ msgstr "pvcross: no ha sido inicializado"
 msgid "invalid number of output arguments"
 msgstr "número inválido de argumentos"
 
-#: Opcodes/pvlock.c:490
+#: Opcodes/pvlock.c:480 Opcodes/pvsband.c:46 Opcodes/pvsbasic.c:578
+#: Opcodes/pvsbasic.c:883 Opcodes/pvsbasic.c:1083 Opcodes/pvsbasic.c:1183
+#: Opcodes/pvsbasic.c:1398 Opcodes/pvsbasic.c:1598 Opcodes/pvsbasic.c:1763
+#: Opcodes/pvslock.c:20
+msgid "Unsafe to have same fsig as in and out"
+msgstr ""
+
+#: Opcodes/pvlock.c:492
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7641,7 +6768,6 @@ msgid "pvsband: not initialised"
 msgstr "pvsband: no ha sido inicializado"
 
 #: Opcodes/pvsbasic.c:69
-#, fuzzy
 msgid "pvsgain: signal format must be amp-phase or amp-freq."
 msgstr ""
 
@@ -7663,76 +6789,75 @@ msgstr ""
 msgid "pvsdiskin: could not open file %s\n"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:606
+#: Opcodes/pvsbasic.c:609
 msgid "pvsfreeze: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:679
+#: Opcodes/pvsbasic.c:682
 msgid "pvsosc does not work while sliding"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:910
+#: Opcodes/pvsbasic.c:913
 msgid "pvsmooth: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1020
+#: Opcodes/pvsbasic.c:1023
 msgid "pvsmix: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1070
+#: Opcodes/pvsbasic.c:1073
 msgid "pvsmix: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1083
+#: Opcodes/pvsbasic.c:1086
 msgid "pvsfilter: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1156
+#: Opcodes/pvsbasic.c:1159
 msgid "pvsfilter: not initialised"
 msgstr "pvsfilter: no ha sido inicializado"
 
-#: Opcodes/pvsbasic.c:1159
+#: Opcodes/pvsbasic.c:1162
 msgid "pvsfilter: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1372
+#: Opcodes/pvsbasic.c:1375
 msgid "pvscale: not initialised"
 msgstr "pvscale: no ha sido inicializado"
 
-#: Opcodes/pvsbasic.c:1570
+#: Opcodes/pvsbasic.c:1575
 msgid "pvshift: not initialised"
 msgstr "pvshift: no ha sido inicializado"
 
-#: Opcodes/pvsbasic.c:1741
+#: Opcodes/pvsbasic.c:1748
 msgid "pvswarp: not initialised"
 msgstr "pvswarp: no ha sido inicializado"
 
-#: Opcodes/pvsbasic.c:1758
+#: Opcodes/pvsbasic.c:1765
 msgid "pvsblur does not work sliding yet"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1890
+#: Opcodes/pvsbasic.c:1897
 msgid "pvsblur: not initialised"
 msgstr "pvsblur: no ha sido inicializado"
 
-#: Opcodes/pvsbasic.c:1925
+#: Opcodes/pvsbasic.c:1932
 msgid "pvstencil: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1933
+#: Opcodes/pvsbasic.c:1940
 msgid "pvstencil: ftable needs to equal the number of bins"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2001
+#: Opcodes/pvsbasic.c:2008
 msgid "pvstencil: not initialised"
 msgstr "pvstencil: no ha sido inicializado"
 
-#: Opcodes/pvsbasic.c:2148
-#, fuzzy
+#: Opcodes/pvsbasic.c:2158
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/pvsbasic.c:2161 Opcodes/pvsbasic.c:2201 Opcodes/tabvars.c:56
 #: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
 #: Opcodes/tabvars.c:181
 #, fuzzy
@@ -7776,6 +6901,10 @@ msgstr "pvsdemix: no ha sido inicializada\n"
 msgid "pvsgendy: not initialised"
 msgstr "pvsgendy: no ha sido inicializado"
 
+#: Opcodes/pvslock.c:36
+msgid "pvslock: signal format must be amp-phase or amp-freq."
+msgstr ""
+
 #: Opcodes/repluck.c:164
 #, c-format
 msgid "Reflection invalid (%f)\n"
@@ -8016,7 +7145,7 @@ msgid ""
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2194
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
@@ -8036,15 +7165,15 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1992 Opcodes/sfont.c:1998
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1999
+#: Opcodes/sfont.c:2001
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2537
+#: Opcodes/sfont.c:2539
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
@@ -8056,6 +7185,10 @@ msgstr ""
 msgid "inletf: signal format must be amp-phase or amp-freq."
 msgstr ""
 
+#: Opcodes/signalflowgraph.cpp:895
+msgid "ftgen string arg not allowed"
+msgstr ""
+
 #: Opcodes/signalflowgraph.cpp:921
 msgid "ftgenonce error"
 msgstr ""
@@ -8091,7 +7224,7 @@ msgstr ""
 msgid "crossfade longer than loop duration\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389 Opcodes/sndloop.c:661
+#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389
 msgid "function table not found\n"
 msgstr ""
 
@@ -8111,15 +7244,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr "pvsarp: no ha sido inicializado\n"
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1071
+#: Opcodes/sndloop.c:1072
 msgid "pvsvoc: not initialised\n"
 msgstr "pvsvoc: no ha sido inicializado\n"
 
-#: Opcodes/sndloop.c:1122
+#: Opcodes/sndloop.c:1123
 msgid "pvsmorph: not initialised\n"
 msgstr "pvsmorph: no ha sido inicializado\n"
 
@@ -8139,30 +7272,30 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr "sndwarpst: no ha sido inicializado"
 
-#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
-#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:315
+#: Opcodes/socksend.c:74 Opcodes/socksend.c:158 Opcodes/socksend.c:252
 #, c-format
 msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
-#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:321
+#: Opcodes/socksend.c:87 Opcodes/socksend.c:172 Opcodes/socksend.c:259
 msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:347
-#, c-format
-msgid "connect failed (%d)"
-msgstr ""
-
-#: Opcodes/sockrecv.c:360
+#: Opcodes/sockrecv.c:366
 msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
+#: Opcodes/socksend.c:127 Opcodes/socksend.c:216
 msgid "sendto failed"
 msgstr ""
 
+#: Opcodes/socksend.c:287
+#, c-format
+msgid "connect failed (%d)"
+msgstr ""
+
 #: Opcodes/space.c:165
 msgid "space: not initialised"
 msgstr "space: no ha sido inicializado"
@@ -8518,20 +7651,37 @@ msgstr ""
 msgid "Min and max the same"
 msgstr ""
 
-#: Opcodes/uggab.c:424
+#: Opcodes/uggab.c:215
+#, fuzzy
+msgid "table not found in poscil"
+msgstr "Tabla %f no encontrada"
+
+#: Opcodes/uggab.c:234 Opcodes/uggab.c:261 Opcodes/uggab.c:290
+#: Opcodes/uggab.c:318
+#, fuzzy
+msgid "poscil: not initialised"
+msgstr "oscil: no ha sido inicializado"
+
+#: Opcodes/uggab.c:365 Opcodes/uggab.c:412 Opcodes/uggab.c:460
+#: Opcodes/uggab.c:509
+#, fuzzy
+msgid "poscil3: not initialised"
+msgstr "oscil3: no ha sido inicializado"
+
+#: Opcodes/uggab.c:589
 msgid "losc: no sample rate stored in function assuming=sr\n"
 msgstr ""
 
-#: Opcodes/uggab.c:556
+#: Opcodes/uggab.c:721
 #, c-format
 msgid "illegal reson iscl value: %f"
 msgstr ""
 
-#: Opcodes/uggab.c:579
+#: Opcodes/uggab.c:744
 msgid "loop cannot be zero"
 msgstr ""
 
-#: Opcodes/uggab.c:1056 Opcodes/uggab.c:1098
+#: Opcodes/uggab.c:1221 Opcodes/uggab.c:1263
 msgid "vibrato(krate): not initialised"
 msgstr "vibrato(krate): no ha sido inicializado"
 
@@ -8914,6 +8064,14 @@ msgstr ""
 msgid "vosim: not initialised"
 msgstr "vosim: no ha sido inicializado"
 
+#: Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr "tableseg: no ha sido inicializado"
+
+#: Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr "tablexseg: no ha sido inicializado"
+
 #: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
@@ -9040,47 +8198,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:739
+#: Top/argdecode.c:77 util/srconv.c:740
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9088,7 +8246,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:749
+#: Top/argdecode.c:89 util/srconv.c:750
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9096,7 +8254,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:750
+#: Top/argdecode.c:91 util/srconv.c:751
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9156,7 +8314,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9164,7 +8322,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9229,7 +8387,7 @@ msgid "--nopeaks\t\tDo not write peak information"
 msgstr ""
 
 #: Top/argdecode.c:136
-msgid "--nodisplays\t\tsUppress all displays"
+msgid "--nodisplays\t\tSuppress all displays"
 msgstr ""
 
 #: Top/argdecode.c:137
@@ -9732,49 +8890,49 @@ msgstr ""
 msgid "error: orchestra and score name not allowed in .csoundrc"
 msgstr ""
 
-#: Top/cscorfns.c:276
+#: Top/cscorfns.c:277
 msgid "PMAX exceeded, string event truncated.\n"
 msgstr ""
 
-#: Top/cscorfns.c:663
+#: Top/cscorfns.c:666
 #, c-format
 msgid "%s found %d f event%s with non-zero p2\n"
 msgstr ""
 
-#: Top/cscorfns.c:664
+#: Top/cscorfns.c:667
 msgid "s"
 msgstr ""
 
-#: Top/cscorfns.c:767
+#: Top/cscorfns.c:770
 msgid "cscore: too many input files open"
 msgstr ""
 
-#: Top/cscorfns.c:805
+#: Top/cscorfns.c:810
 msgid "cscore: tried to set an unknown file pointer as the current file"
 msgstr ""
 
-#: Top/cscorfns.c:819
+#: Top/cscorfns.c:824
 msgid "csoundInitializeCscore: no input score given."
 msgstr ""
 
-#: Top/cscorfns.c:824
+#: Top/cscorfns.c:829 Top/cscorfns.c:858
 msgid "csoundInitializeCscore: no output score given."
 msgstr ""
 
-#: Top/cscorfns.c:852
+#: Top/cscorfns.c:889
 #, c-format
 msgid "cscoreFileOpen: error opening %s"
 msgstr ""
 
-#: Top/cscorfns.c:870
+#: Top/cscorfns.c:907
 msgid "cscoreFileClose: NULL file pointer\n"
 msgstr ""
 
-#: Top/cscorfns.c:882
+#: Top/cscorfns.c:919
 msgid "cscoreFileClose: fp not recorded\n"
 msgstr ""
 
-#: Top/cscorfns.c:888
+#: Top/cscorfns.c:925
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
@@ -9813,129 +8971,129 @@ msgstr ""
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
-#: Top/csmodule.c:638 Top/csmodule.c:646
+#: Top/csmodule.c:607 Top/csmodule.c:613 Top/csmodule.c:624 Top/csmodule.c:631
+#: Top/csmodule.c:637 Top/csmodule.c:645
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:696
+#: Top/csmodule.c:695
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:731
+#: Top/csmodule.c:730
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:737
+#: Top/csmodule.c:736
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:773
+#: Top/csmodule.c:772
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:796
+#: Top/csmodule.c:795
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:819
+#: Top/csmodule.c:818
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:918
+#: Top/csmodule.c:917
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1636 Top/csound.c:1656
+#: Top/csound.c:1640 Top/csound.c:1660
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1642
+#: Top/csound.c:1646
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1675
+#: Top/csound.c:1679
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1700
+#: Top/csound.c:1704
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1707
+#: Top/csound.c:1711
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1727
+#: Top/csound.c:1731
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1998
+#: Top/csound.c:2002
 msgid "WARNING: "
 msgstr "ATENCION: "
 
-#: Top/csound.c:2119
+#: Top/csound.c:2123
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2120
+#: Top/csound.c:2124
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2149 Top/csound.c:2185
+#: Top/csound.c:2153 Top/csound.c:2189
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2153 Top/csound.c:2189
+#: Top/csound.c:2157 Top/csound.c:2193
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2271
+#: Top/csound.c:2275
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2276 Top/csound.c:2310
+#: Top/csound.c:2280 Top/csound.c:2314
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2279 Top/csound.c:2313
+#: Top/csound.c:2283 Top/csound.c:2317
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2305
+#: Top/csound.c:2309
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2327
+#: Top/csound.c:2331
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2445
+#: Top/csound.c:2449
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2552
+#: Top/csound.c:2556
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2575
+#: Top/csound.c:2579
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2906
+#: Top/csound.c:2912
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2957
+#: Top/csound.c:2963
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9991,57 +9149,47 @@ msgstr ""
 msgid "orchname:  %s\n"
 msgstr "nombre de la orquesta:  %s\n"
 
-#: Top/main.c:334
+#: Top/main.c:318
+#, fuzzy, c-format
+msgid "Failed to open input file %s\n"
+msgstr "No fue posible abrir el archivo de salida %s"
+
+#: Top/main.c:339
 msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:352
+#: Top/main.c:360
 msgid "end of orchestra compile"
 msgstr "fin de compilación de la orquesta"
 
-#: Top/main.c:359
+#: Top/main.c:367
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:369
+#: Top/main.c:377
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr "no es posible abrir el archivo de score %s"
 
-#: Top/main.c:371
+#: Top/main.c:379
 msgid "sorting score ...\n"
 msgstr ""
 
-#: Top/main.c:381
-#, c-format
-msgid "cannot extract %s, name conflict"
-msgstr ""
-
-#: Top/main.c:384
+#: Top/main.c:389
 #, c-format
 msgid "cannot open extract file %s"
 msgstr ""
 
-#: Top/main.c:388
-#, c-format
-msgid "cannot reopen %s"
-msgstr "No fue posible reabrir %s"
-
 #: Top/main.c:392
-#, c-format
-msgid "cannot open %s for writing"
-msgstr "no es posible abrir para escritura el archivo %s"
-
-#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr "  ... extrayendo ...\n"
 
-#: Top/main.c:405
+#: Top/main.c:401
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:407
+#: Top/main.c:403
 msgid "Syntax check completed.\n"
 msgstr "Revisión de sintaxis completa.\n"
 
@@ -10106,158 +9254,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:110 Top/one_file.c:118
+#: Top/one_file.c:120 Top/one_file.c:130
 msgid " *** cannot create temporary file"
 msgstr " *** no es posible crear el archivo temporal"
 
-#: Top/one_file.c:203
+#: Top/one_file.c:215
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr "Reitrando el archivo temporal %s ...\n"
 
-#: Top/one_file.c:207
+#: Top/one_file.c:219
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr "ATENCION: no fue posible retirar %s\n"
 
-#: Top/one_file.c:274 Top/one_file.c:302
+#: Top/one_file.c:286 Top/one_file.c:314
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:319
+#: Top/one_file.c:331
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:322
+#: Top/one_file.c:334
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:328 Top/one_file.c:744
+#: Top/one_file.c:340 Top/one_file.c:763
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:354
+#: Top/one_file.c:371
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:376 Top/one_file.c:430
+#: Top/one_file.c:393 Top/one_file.c:449
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:391 Top/one_file.c:396
+#: Top/one_file.c:408 Top/one_file.c:413
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:408
+#: Top/one_file.c:425
 #, c-format
 msgid "Creating %s (%p)\n"
 msgstr "Creando %s (%p)\n"
 
-#: Top/one_file.c:421
+#: Top/one_file.c:438
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:468
+#: Top/one_file.c:487
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:487
+#: Top/one_file.c:506
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:503
+#: Top/one_file.c:522
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:539
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:536 Top/one_file.c:584
+#: Top/one_file.c:555 Top/one_file.c:603
 #, c-format
 msgid "File %s already exists"
 msgstr "El archivo %s ya existe"
 
-#: Top/one_file.c:541
+#: Top/one_file.c:560
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:555
+#: Top/one_file.c:574
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:589
+#: Top/one_file.c:608
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:604
+#: Top/one_file.c:623
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:624
+#: Top/one_file.c:643
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:632 Top/one_file.c:639
+#: Top/one_file.c:651 Top/one_file.c:658
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:645
+#: Top/one_file.c:664
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:655
+#: Top/one_file.c:674
 msgid "**** Licence Information ****\n"
 msgstr "**** Información de licencia ****\n"
 
-#: Top/one_file.c:661
+#: Top/one_file.c:680
 msgid "**** End of Licence Information ****\n"
 msgstr "**** Fin de información de licencia ****\n"
 
-#: Top/one_file.c:672
+#: Top/one_file.c:691
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:703
+#: Top/one_file.c:722
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr "No fue posible abrir el archivo csd: %s"
 
-#: Top/one_file.c:718
+#: Top/one_file.c:737
 msgid "STARTING FILE\n"
 msgstr "INCIANDO ARCHIVO\n"
 
-#: Top/one_file.c:734
+#: Top/one_file.c:753
 msgid "Creating options\n"
 msgstr "Creando opciones\n"
 
-#: Top/one_file.c:740
+#: Top/one_file.c:759
 msgid "Skipping <CsOptions>\n"
 msgstr "Saltando <CsOptions>\n"
 
-#: Top/one_file.c:754
+#: Top/one_file.c:773
 msgid "Creating orchestra\n"
 msgstr "Creando orquesta\n"
 
-#: Top/one_file.c:759
+#: Top/one_file.c:778
 msgid "Creating score\n"
 msgstr "Creando score\n"
 
-#: Top/one_file.c:793
+#: Top/one_file.c:812
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr "Etiqueta CSD desconocida: %s\n"
 
-#: Top/one_file.c:798
+#: Top/one_file.c:817
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr "No se encontró la etiqueta <CsoundSynthesizer> en el archivo CSD.\n"
 
@@ -10270,159 +9418,159 @@ msgstr ""
 msgid "%d opcodes\n"
 msgstr ""
 
-#: Top/threads.c:38
+#: Top/threads.c:92 Top/threads.c:556
 #, c-format
 msgid "%s() is not implemented on this platform.\n"
 msgstr ""
 
-#: Top/utility.c:98
+#: Top/utility.c:99
 #, c-format
 msgid "util %s:\n"
 msgstr ""
 
-#: Top/utility.c:105
+#: Top/utility.c:106
 #, c-format
 msgid "Error: utility '%s' not found"
 msgstr "Error: utilidad '%s' no encontrada"
 
-#: Top/utility.c:108
+#: Top/utility.c:109
 msgid "Error: utility not found"
 msgstr "Error: utilidad no encontrada"
 
-#: Top/utility.c:112
+#: Top/utility.c:113
 msgid "The available utilities are:\n"
 msgstr "Las utilidades disponibles son:\n"
 
-#: util1/scot/scot.c:51
+#: util1/scot/scot.c:56
 msgid "Score must start with orchestra section"
 msgstr ""
 
-#: util1/scot/scot.c:61
+#: util1/scot/scot.c:66
 msgid "Expected score or functions section"
 msgstr ""
 
-#: util1/scot/scot.c:117
+#: util1/scot/scot.c:122
 msgid "Tempo must be specified"
 msgstr ""
 
-#: util1/scot/scot.c:121
+#: util1/scot/scot.c:126
 msgid "Redefinition of tempo"
 msgstr ""
 
-#: util1/scot/scot.c:133
+#: util1/scot/scot.c:138
 msgid "Must specify 2 or more letters of keyword"
 msgstr ""
 
-#: util1/scot/scot.c:136 util1/scot/scot.c:145 util1/scot/scot.c:154
+#: util1/scot/scot.c:141 util1/scot/scot.c:150 util1/scot/scot.c:159
 msgid "Must be \"on\" or \"off\""
 msgstr ""
 
-#: util1/scot/scot.c:165
+#: util1/scot/scot.c:170
 msgid "Invalid time signature"
 msgstr ""
 
-#: util1/scot/scot.c:202
+#: util1/scot/scot.c:207
 msgid "Bad key signature"
 msgstr ""
 
-#: util1/scot/scot.c:237 util1/scot/scot.c:243
+#: util1/scot/scot.c:242 util1/scot/scot.c:248
 msgid "Invalid field"
 msgstr ""
 
-#: util1/scot/scot.c:254 util1/scot/scot.c:258
+#: util1/scot/scot.c:259 util1/scot/scot.c:263
 msgid "Nested next-parameter passing"
 msgstr ""
 
-#: util1/scot/scot.c:268
+#: util1/scot/scot.c:273
 msgid "Unrecognised keyword"
 msgstr ""
 
-#: util1/scot/scot.c:317
+#: util1/scot/scot.c:322
 msgid "Wrong number of beats in bar"
 msgstr ""
 
-#: util1/scot/scot.c:325
+#: util1/scot/scot.c:330
 msgid "Syntax error: cannot back up"
 msgstr ""
 
-#: util1/scot/scot.c:496
+#: util1/scot/scot.c:501
 msgid "Improper tie"
 msgstr ""
 
-#: util1/scot/scot.c:502
+#: util1/scot/scot.c:507
 msgid "Tie between different pitches"
 msgstr ""
 
-#: util1/scot/scot.c:510
+#: util1/scot/scot.c:515
 msgid "Warning: params changed on tie"
 msgstr ""
 
-#: util1/scot/scot.c:562
+#: util1/scot/scot.c:567
 msgid "Parameter number out of range"
 msgstr ""
 
-#: util1/scot/scot.c:622
+#: util1/scot/scot.c:627
 msgid "Lost previous note: not written"
 msgstr ""
 
-#: util1/scot/scot.c:741
+#: util1/scot/scot.c:746
 msgid "Macro expansion too long -- circular macros?"
 msgstr ""
 
-#: util1/scot/scot.c:817 util1/scot/scot.c:922 util1/scot/scot.c:946
+#: util1/scot/scot.c:822 util1/scot/scot.c:927 util1/scot/scot.c:951
 msgid "Syntax error: no {"
 msgstr ""
 
-#: util1/scot/scot.c:829
+#: util1/scot/scot.c:834
 msgid "No instrument specified"
 msgstr "Instrumento no definido"
 
-#: util1/scot/scot.c:870
+#: util1/scot/scot.c:875
 msgid "unresolved tie"
 msgstr ""
 
-#: util1/scot/scot.c:872
+#: util1/scot/scot.c:877
 msgid "unresolved slur"
 msgstr ""
 
-#: util1/scot/scot.c:879
+#: util1/scot/scot.c:884
 msgid "Circular note list\n"
 msgstr ""
 
-#: util1/scot/scot.c:925 util1/scot/scot.c:1039 util1/scot/scot.c:1053
-#: util1/scot/scot.c:1060 util1/scot/scot.c:1085
+#: util1/scot/scot.c:930 util1/scot/scot.c:1044 util1/scot/scot.c:1058
+#: util1/scot/scot.c:1065 util1/scot/scot.c:1090
 msgid "Unexpected end of file"
 msgstr ""
 
-#: util1/scot/scot.c:968
+#: util1/scot/scot.c:973
 msgid "Syntax error: no ="
 msgstr ""
 
-#: util1/scot/scot.c:970
+#: util1/scot/scot.c:975
 msgid "Syntax error: no number"
 msgstr ""
 
-#: util1/scot/scot.c:982
+#: util1/scot/scot.c:987
 msgid "No instruments declared"
 msgstr ""
 
-#: util1/scot/scot.c:1003
+#: util1/scot/scot.c:1008
 msgid "Expected ="
 msgstr ""
 
-#: util1/scot/scot.c:1151
+#: util1/scot/scot.c:1156
 msgid "Invalid pitch class"
 msgstr ""
 
-#: util1/scot/scot.c:1296 util1/scot/scot.c:1311 util1/scot/scot.c:1365
+#: util1/scot/scot.c:1301 util1/scot/scot.c:1316 util1/scot/scot.c:1370
 msgid "Division by zero"
 msgstr ""
 
-#: util1/scot/scot.c:1454
+#: util1/scot/scot.c:1461
 msgid "scot processing terminated\n"
 msgstr ""
 
-#: util1/scot/scot.c:1461
+#: util1/scot/scot.c:1468
 #, c-format
 msgid "scot: %d errors.\n"
 msgstr ""
@@ -10440,8 +9588,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr "salvando datos ATS..."
 
-#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
-#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
+#: util/atsa.c:546 util/atsa.c:2360 util/atsa.c:2374 util/atsa.c:2393
+#: util/atsa.c:2573 util/atsa.c:2636 util/atsa.c:2724
 msgid "done!\n"
 msgstr "listo!\n"
 
@@ -10572,160 +9720,166 @@ msgstr ""
 msgid "Error: sound not optimised !"
 msgstr "Error: sonido no optimizado !"
 
-#: util/atsa.c:2013
+#: util/atsa.c:1946 util/atsa.c:1951 util/atsa.c:1962 util/atsa.c:1965
+#: util/atsa.c:1969 util/atsa.c:1978 util/cvanal.c:193 util/hetro.c:607
+#: util/hetro.c:690 util/hetro.c:703
+msgid "Write failure\n"
+msgstr ""
+
+#: util/atsa.c:2019
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr "atsa: no es posible abrir el archivo '%s'"
 
-#: util/atsa.c:2020
+#: util/atsa.c:2026
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr "atsa: el archivo tiene %d canales pero debe ser mono !"
 
-#: util/atsa.c:2025
+#: util/atsa.c:2031
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2040
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2044
+#: util/atsa.c:2050
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2050
+#: util/atsa.c:2056
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2063
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2067
+#: util/atsa.c:2073
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2074
+#: util/atsa.c:2080
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2082
+#: util/atsa.c:2088
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2090
+#: util/atsa.c:2096
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2098
+#: util/atsa.c:2104
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2106
+#: util/atsa.c:2112
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2130
+#: util/atsa.c:2136
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2139
+#: util/atsa.c:2145
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2148
+#: util/atsa.c:2154
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2157
+#: util/atsa.c:2163
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2163
+#: util/atsa.c:2169
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2174
+#: util/atsa.c:2180
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2182
+#: util/atsa.c:2188
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2190
+#: util/atsa.c:2196
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2335
+#: util/atsa.c:2341
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2365
+#: util/atsa.c:2371
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2381 util/atsa.c:2384
+#: util/atsa.c:2387 util/atsa.c:2390
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2389
+#: util/atsa.c:2395
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2497
+#: util/atsa.c:2503
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2585
+#: util/atsa.c:2591
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2681
+#: util/atsa.c:2687
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2732
+#: util/atsa.c:2738
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2832
+#: util/atsa.c:2838
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10794,7 +9948,7 @@ msgstr ""
 msgid "less sound than expected!\n"
 msgstr ""
 
-#: util/cvanal.c:243
+#: util/cvanal.c:244
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
@@ -10882,7 +10036,7 @@ msgstr ""
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
+#: util/dnoise.c:480 util/srconv.c:461 util/srconv.c:473
 #, c-format
 msgid "cannot open %s."
 msgstr "No es posible abrir %s."
@@ -11055,7 +10209,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:737
+#: util/envext.c:54 util/srconv.c:738
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11104,7 +10258,7 @@ msgid "Cannot open input file %s\n"
 msgstr "No se puede abrir el archivo de entrada %s\n"
 
 #: util/het_export.c:61 util/lpc_export.c:66 util/lpc_import.c:62
-#: util/pv_export.c:64 util/pv_import.c:111
+#: util/pv_export.c:64 util/pv_import.c:123
 #, c-format
 msgid "Cannot open output file %s\n"
 msgstr "No se puede abrir el archivo de salida %s\n"
@@ -11127,7 +10281,7 @@ msgstr ""
 msgid "Cannot open output hetro file %s\n"
 msgstr ""
 
-#: util/het_import.c:108
+#: util/het_import.c:111
 msgid "translate text form to hetro analysis file"
 msgstr ""
 
@@ -11225,48 +10379,48 @@ msgstr ""
 msgid "cannot create output file\n"
 msgstr "No se puede crear el archivo de salida\n"
 
-#: util/hetro.c:616
+#: util/hetro.c:617
 #, c-format
 msgid "scale = %f\n"
 msgstr ""
 
-#: util/hetro.c:711
+#: util/hetro.c:714
 #, c-format
 msgid "harmonic #%d:\tamp points %d, \tfrq points %d,\tpeakamp %d\n"
 msgstr ""
 
-#: util/hetro.c:715
+#: util/hetro.c:718
 #, c-format
 msgid "wrote %ld bytes to %s\n"
 msgstr ""
 
-#: util/hetro.c:747
+#: util/hetro.c:750
 msgid "OOPS: SDIF does not work on this machine!\n"
 msgstr ""
 
-#: util/hetro.c:773
+#: util/hetro.c:776
 #, c-format
 msgid "Error creating %s\n"
 msgstr ""
 
-#: util/hetro.c:801
+#: util/hetro.c:804
 msgid "Error writing SDIF frame header.\n"
 msgstr ""
 
-#: util/hetro.c:810
+#: util/hetro.c:813
 msgid "Error writing SDIF matrix header.\n"
 msgstr ""
 
-#: util/hetro.c:823
+#: util/hetro.c:826
 msgid "Error writing SDIF data.\n"
 msgstr ""
 
-#: util/hetro.c:830
+#: util/hetro.c:833
 #, c-format
 msgid "wrote %ld 1TRC frames to %s\n"
 msgstr ""
 
-#: util/hetro.c:858
+#: util/hetro.c:861
 msgid "Soundfile analysis for adsyn"
 msgstr ""
 
@@ -11478,7 +10632,11 @@ msgstr ""
 msgid "Failed to read LPC header\n"
 msgstr ""
 
-#: util/lpc_export.c:102
+#: util/lpc_export.c:81 util/lpc_export.c:88
+msgid "Read faailure\n"
+msgstr ""
+
+#: util/lpc_export.c:106
 msgid "translate linear predictive coding file to text file"
 msgstr ""
 
@@ -11486,7 +10644,11 @@ msgstr ""
 msgid "Usage: lpc_import cstext_file lpc_file\n"
 msgstr ""
 
-#: util/lpc_import.c:98
+#: util/lpc_import.c:77 util/lpc_import.c:84 util/srconv.c:378
+msgid "Read failure\n"
+msgstr ""
+
+#: util/lpc_import.c:102
 msgid "translate text file to linear predictive coding file"
 msgstr ""
 
@@ -11503,7 +10665,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11801,11 +10963,20 @@ msgstr ""
 msgid "Usage: pv_import cstext_file pv_file \n"
 msgstr ""
 
-#: util/pv_import.c:127
+#: util/pv_import.c:73 util/pv_import.c:93
+#, fuzzy
+msgid "Not a PV file\n"
+msgstr "No se puede abrir el archivo PV"
+
+#: util/pv_import.c:132
+msgid "Memory failure\n"
+msgstr ""
+
+#: util/pv_import.c:143
 msgid "Sync error\n"
 msgstr ""
 
-#: util/pv_import.c:148
+#: util/pv_import.c:164
 msgid "translate text form to PVOC analysis file"
 msgstr ""
 
@@ -11872,7 +11043,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:754
+#: util/scale.c:62 util/srconv.c:755
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -12051,47 +11222,47 @@ msgstr ""
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:388
+#: util/srconv.c:389
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:402
+#: util/srconv.c:403
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:407
+#: util/srconv.c:408
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:412 util/srconv.c:704
+#: util/srconv.c:413 util/srconv.c:705
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:731
+#: util/srconv.c:732
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:733
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:734
+#: util/srconv.c:735
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:736
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:737
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:820
+#: util/srconv.c:821
 msgid "Sample rate conversion"
 msgstr ""
 
@@ -12242,6 +11413,74 @@ msgid "Extract part of a sound file"
 msgstr ""
 
 #, fuzzy
+#~ msgid "insufficient arguments for fareytable"
+#~ msgstr "argumentos insuficientes por fareytable"
+
+#~ msgid "freeverb: not initialised"
+#~ msgstr "freeverb: no ha sido inicializado"
+
+#~ msgid "ftconv: not initialised"
+#~ msgstr "ftconv: no ha sido inicializado"
+
+#, fuzzy
+#~ msgid "copyTabElems: incorrect source table number"
+#~ msgstr "copyTabElems: número inválido de tabla fuente"
+
+#, fuzzy
+#~ msgid "vectorop: invalid num of elements"
+#~ msgstr "vectorop : número inválido de argumentos"
+
+#, fuzzy
+#~ msgid "vport: invalid table length or num of elements"
+#~ msgstr "vport : tamaño inválido de tabla"
+
+#, fuzzy
+#~ msgid "vport: invalid table"
+#~ msgstr "vport : tabla inválida"
+
+#, fuzzy
+#~ msgid "vport: invalid init table"
+#~ msgstr "vport : tabla inválida"
+
+#, fuzzy
+#~ msgid "vrandh: Invalid table."
+#~ msgstr "vrandh: tabla inválida"
+
+#, fuzzy
+#~ msgid "vrandi: Invalid table."
+#~ msgstr "vrandi : tabla inválida"
+
+#, fuzzy
+#~ msgid "vecdelay: invalid num of elements"
+#~ msgstr "vecdelay : número inválido de argumentos"
+
+#, fuzzy
+#~ msgid "vecdly: invalid output table"
+#~ msgstr "vecdly : tabla de modulador inválida"
+
+#, fuzzy
+#~ msgid "vecdly: invalid input table"
+#~ msgstr "vecdly : tabla de ventana inválida"
+
+#, fuzzy
+#~ msgid "vecdly: invalid delay table"
+#~ msgstr "vecdly : tabla de modulador inválida"
+
+#, fuzzy
+#~ msgid "vecdly: not initialised"
+#~ msgstr "vecdly : no ha sido inicializado"
+
+#, fuzzy
+#~ msgid "vdelayk: not initialised"
+#~ msgstr "vdelayk: no ha sido inicializado"
+
+#~ msgid "cannot reopen %s"
+#~ msgstr "No fue posible reabrir %s"
+
+#~ msgid "cannot open %s for writing"
+#~ msgstr "no es posible abrir para escritura el archivo %s"
+
+#, fuzzy
 #~ msgid "tableseg: not initialized"
 #~ msgstr "tableseg: no ha sido inicializado"
 
@@ -12318,9 +11557,6 @@ msgstr ""
 #~ "No es posible abrir %s. No está en el directorio actual, ni en INCDIR, "
 #~ "SSDIR o SFDIR"
 
-#~ msgid "Cannot open PV file"
-#~ msgstr "No se puede abrir el archivo PV"
-
 #~ msgid "Object/file not PVOC"
 #~ msgstr "Objeto/archivo no es PVOC"
 
diff --git a/po/french.po b/po/french.po
index d609868..7074767 100644
--- a/po/french.po
+++ b/po/french.po
@@ -101,7 +101,7 @@ msgstr "la chaîne dépasse la longueur maximale autorisée"
 msgid "(unknown error)"
 msgstr "(erreur inconnue)"
 
-#: Engine/csound_orc_compile.c:138
+#: Engine/csound_orc_compile.c:141
 #, c-format
 msgid ""
 "input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
@@ -110,163 +110,164 @@ msgstr ""
 "l'argument numero %d d'entrée '%s' de type %s est interdit lorsque l'on "
 "attend %c (pour opcode %s) ligne %d\n"
 
-#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
+#: Engine/csound_orc_compile.c:268 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr "argument manquant ou en trop"
 
-#: Engine/csound_orc_compile.c:269
+#: Engine/csound_orc_compile.c:272
 msgid "too many input args\n"
 msgstr "trop d'arguments en entrée\n"
 
-#: Engine/csound_orc_compile.c:304
+#: Engine/csound_orc_compile.c:307
 #, c-format
 msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 "l'argument en entrée '%s' a été utilisé avant d'être défini (pour opcode %s) "
 "ligne %d\n"
 
-#: Engine/csound_orc_compile.c:380
-#, c-format
-msgid ""
-"output name previously used, type '%c' must be uniquely defined, line %d"
-msgstr ""
-"nom de sortie déjà utilisé, le type '%c' doit avoir une définition unique, "
-"ligne %d"
-
-#: Engine/csound_orc_compile.c:386
+#: Engine/csound_orc_compile.c:389
 #, c-format
 msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 "l'argument de sortie '%s' est de type illégal (pour opcode %s) ligne %d\n"
 
-#: Engine/csound_orc_compile.c:541
+#: Engine/csound_orc_compile.c:517
+#, fuzzy, c-format
+msgid "output name previously used, type 'w' must be uniquely defined, line %d"
+msgstr ""
+"nom de sortie déjà utilisé, le type '%c' doit avoir une définition unique, "
+"ligne %d"
+
+#: Engine/csound_orc_compile.c:563
 #, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr "create_opcode : aucune règle pour traiter une instruction de type %d\n"
 
-#: Engine/csound_orc_compile.c:738
+#: Engine/csound_orc_compile.c:760
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr "create_instrument : numéro d'instrument %ld\n"
 
-#: Engine/csound_orc_compile.c:748
+#: Engine/csound_orc_compile.c:772
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr "create_instrument : nom de l'instrument %s\n"
 
-#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+#: Engine/csound_orc_compile.c:779 Engine/csound_orc_compile.c:1068
+#: Engine/csound_orc_compile.c:1089 Engine/otran.c:363
 msgid "invalid name for instrument"
 msgstr "nom d'instrument non valide"
 
-#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
+#: Engine/csound_orc_compile.c:783 Engine/csound_orc_compile.c:1071
+#: Engine/csound_orc_compile.c:1092 Engine/otran.c:369
 #, c-format
 msgid "instr %s redefined"
 msgstr "instr %s redéfini"
 
-#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
+#: Engine/csound_orc_compile.c:927 Engine/otran.c:351
 #, c-format
 msgid "instr %ld redefined"
 msgstr "instr %ld redéfini"
 
-#: Engine/csound_orc_compile.c:914
+#: Engine/csound_orc_compile.c:938
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr "!!! csound->opcodeInfo est NULL !!!\n"
 
-#: Engine/csound_orc_compile.c:1083
+#: Engine/csound_orc_compile.c:1141
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr "Noeud inconnu de type %d trouvé à la racine.\n"
 
-#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
+#: Engine/csound_orc_compile.c:1198 Engine/otran.c:578 Engine/otran.c:1432
 #, c-format
 msgid "%s invalid sample rate"
 msgstr "%s taux d'échantillonnage non valide"
 
-#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
+#: Engine/csound_orc_compile.c:1200 Engine/otran.c:580 Engine/otran.c:1434
 #, c-format
 msgid "%s invalid control rate"
 msgstr "%s taux de contrôle non valide"
 
-#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
+#: Engine/csound_orc_compile.c:1204 Engine/otran.c:583 Engine/otran.c:1430
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr "%s valeur de ksmps non valide"
 
-#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
+#: Engine/csound_orc_compile.c:1207 Engine/otran.c:586 Engine/otran.c:1436
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr "%s sr, kr, ksmps contradictoires"
 
-#: Engine/csound_orc_compile.c:1165
+#: Engine/csound_orc_compile.c:1223
 msgid "perf-pass statements illegal in header blk\n"
 msgstr "les instructions d'exécution sont interdites dans le bloc d'en-tête\n"
 
-#: Engine/csound_orc_compile.c:1170
+#: Engine/csound_orc_compile.c:1228
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr "%d erreurs de syntaxe dans l'orchestre. Compilation non valide\n"
 
-#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
+#: Engine/csound_orc_compile.c:1288 Engine/otran.c:670
 msgid "inconsistent argoff sumcount"
 msgstr "nombre d'arguments incohérent"
 
-#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
+#: Engine/csound_orc_compile.c:1360 Engine/otran.c:739
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr "la liste des ETIQUETTES est pleine... extension à %d\n"
 
-#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
+#: Engine/csound_orc_compile.c:1398 Engine/otran.c:777
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr "la liste des GOTOS est pleine... extension à %d\n"
 
-#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
+#: Engine/csound_orc_compile.c:1431 Engine/otran.c:810
 #, c-format
 msgid "target label '%s' not found"
 msgstr "étiquette cible '%s' non trouvée"
 
-#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
+#: Engine/csound_orc_compile.c:1509 Engine/otran.c:865
 #, c-format
 msgid "string syntax '%s'"
 msgstr "syntaxe de chaîne '%s'"
 
-#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
+#: Engine/csound_orc_compile.c:1559 Engine/otran.c:915
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr "syntaxe numérique '%s'"
 
-#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
+#: Engine/csound_orc_compile.c:1585 Engine/otran.c:941
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr "agrandissement du réservoir de valeurs flottantes à %d\n"
 
-#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
+#: Engine/csound_orc_compile.c:1624 Engine/otran.c:1017
 msgid "gblnamset(): memory allocation failure"
 msgstr "gblnamset() : échec de l'allocation de mémoire"
 
-#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
+#: Engine/csound_orc_compile.c:1652 Engine/otran.c:1045
 msgid "lclnamset(): memory allocation failure"
 msgstr "lclnamset() : échec de l'allocation de mémoire"
 
-#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
+#: Engine/csound_orc_compile.c:1678 Engine/otran.c:1070
 msgid "unexpected global name"
 msgstr "nom global inattendu"
 
-#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
+#: Engine/csound_orc_compile.c:1701 Engine/otran.c:1092
 msgid "unknown nametype"
 msgstr "type nommé inconnu"
 
-#: Engine/csound_orc_expressions.c:459
+#: Engine/csound_orc_expressions.c:457
 #, c-format
 msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr "erreur : fonction %s avec le type d'arg %c introuvable, ligne %d\n"
 
-#: Engine/csound_orc_expressions.c:862
+#: Engine/csound_orc_expressions.c:878
 #, c-format
 msgid "error: non-existent statement in conditional, line %d \n"
 msgstr "erreur : instruction inexistante dans la conditionnelle, ligne %d\n"
 
-#: Engine/csound_orc_semantics.c:157
+#: Engine/csound_orc_semantics.c:256
 #, c-format
 msgid ""
 "\n"
@@ -275,7 +276,7 @@ msgstr ""
 "\n"
 "erreur : %s (symbole %s)"
 
-#: Engine/csound_orc_semantics.c:159
+#: Engine/csound_orc_semantics.c:258
 #, c-format
 msgid ""
 " line %d:\n"
@@ -284,144 +285,150 @@ msgstr ""
 " ligne %d :\n"
 ">>>"
 
-#: Engine/csound_orc_semantics.c:732
+#: Engine/csound_orc_semantics.c:834
 #, c-format
 msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr "arguments requis manquants pour opcode %s ligne %d\n"
 
-#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/csound_orc_semantics.c:899 Engine/rdorch.c:1644 Engine/rdorch.c:1662
 #: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr "opcode modifié : %s"
 
-#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
+#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:126
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr "Index de verrou global faiblement spécifié : %i [max : %i]\n"
 
-#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
+#: Engine/cs_par_dispatch.c:140 Engine/cs_par_dispatch.c:160
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr "Nom de paramètre NULL non valide pour une variable globale\n"
 
-#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
-#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
-#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
+#: Engine/cs_par_dispatch.c:551 Engine/cs_par_dispatch.c:578
+#: Engine/cs_par_dispatch.c:2564 Engine/cs_par_dispatch.c:2609
+#: Engine/cs_par_dispatch.c:2611 Engine/cs_par_dispatch.c:2675
 msgid "Invalid NULL Parameter entry"
 msgstr "Paramètre entry NULL non valide"
 
-#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
-#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
+#: Engine/cs_par_dispatch.c:553 Engine/cs_par_dispatch.c:592
+#: Engine/cs_par_dispatch.c:619 Engine/cs_par_dispatch.c:660
 msgid "Invalid NULL Parameter name"
 msgstr "Paramètre name NULL non valide"
 
-#: Engine/cs_par_dispatch.c:535
+#: Engine/cs_par_dispatch.c:560
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr "Echec de l'allocation de l'entrée du cache de poids d'opcode."
 
-#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
+#: Engine/cs_par_dispatch.c:689 Engine/cs_par_dispatch.c:780
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr "Aucun poids à sortir (valeurs par défaut)\n"
 
-#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
+#: Engine/cs_par_dispatch.c:730 Engine/cs_par_dispatch.c:860
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr "Fichier de spéc de poids d'opcode non trouvé à : %s"
 
-#: Engine/cs_par_dispatch.c:759
+#: Engine/cs_par_dispatch.c:784
 msgid "Weights Dump\n"
 msgstr "Dump des poids\n"
 
-#: Engine/cs_par_dispatch.c:907
+#: Engine/cs_par_dispatch.c:930
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr "Fichier de spéc parallèle non trouvé à : %s"
 
-#: Engine/cs_par_dispatch.c:913
+#: Engine/cs_par_dispatch.c:936
 msgid "Parallel Spec File invalid format expected weight_min parameter"
-msgstr "Format du fichier de spéc parallèle non valide, paramètre weight_min attendu"
+msgstr ""
+"Format du fichier de spéc parallèle non valide, paramètre weight_min attendu"
 
-#: Engine/cs_par_dispatch.c:918
+#: Engine/cs_par_dispatch.c:941
 msgid "Parallel Spec File invalid format expected weight_max parameter"
-msgstr "Format du fichier de spéc parallèle non valide, paramètre weight_max attendu"
+msgstr ""
+"Format du fichier de spéc parallèle non valide, paramètre weight_max attendu"
 
-#: Engine/cs_par_dispatch.c:922
+#: Engine/cs_par_dispatch.c:945
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
-msgstr "Format du fichier de spéc parallèle non valide, paramètre roots_avail_min attendu"
+msgstr ""
+"Format du fichier de spéc parallèle non valide, paramètre roots_avail_min "
+"attendu"
 
-#: Engine/cs_par_dispatch.c:926
+#: Engine/cs_par_dispatch.c:949
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
-msgstr "Format du fichier de spéc parallèle non valide, paramètre roots_avail_max attendu"
-
-#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
-#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
-#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
-#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
-#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
-#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
-#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
-#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
+msgstr ""
+"Format du fichier de spéc parallèle non valide, paramètre roots_avail_max "
+"attendu"
+
+#: Engine/cs_par_dispatch.c:1024 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1176 Engine/cs_par_dispatch.c:1276
+#: Engine/cs_par_dispatch.c:1430 Engine/cs_par_dispatch.c:1464
+#: Engine/cs_par_dispatch.c:1481 Engine/cs_par_dispatch.c:1503
+#: Engine/cs_par_dispatch.c:1531 Engine/cs_par_dispatch.c:1553
+#: Engine/cs_par_dispatch.c:1577 Engine/cs_par_dispatch.c:1669
+#: Engine/cs_par_dispatch.c:1724 Engine/cs_par_dispatch.c:1817
+#: Engine/cs_par_dispatch.c:1870 Engine/cs_par_dispatch.c:2702
 msgid "Invalid NULL Parameter dag"
 msgstr "Paramètre dag NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1008
+#: Engine/cs_par_dispatch.c:1029
 msgid "Failed to allocate dag"
 msgstr "L'allocation de dag a échoué"
 
-#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
-#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
+#: Engine/cs_par_dispatch.c:1081 Engine/cs_par_dispatch.c:1104
+#: Engine/cs_par_dispatch.c:1126 Engine/cs_par_dispatch.c:1128
 msgid "Invalid NULL Parameter dag_node"
 msgstr "Paramètre dag_node NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1062
+#: Engine/cs_par_dispatch.c:1083
 msgid "Invalid NULL Parameter instr"
 msgstr "Paramètre instr NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1085
 msgid "Invalid NULL Parameter insds"
 msgstr "Paramètre insds NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
+#: Engine/cs_par_dispatch.c:1090 Engine/cs_par_dispatch.c:1112
 msgid "Failed to allocate dag_node"
 msgstr "L'allocation de dag_node a échoué"
 
-#: Engine/cs_par_dispatch.c:1086
+#: Engine/cs_par_dispatch.c:1107
 msgid "Invalid Parameter count must be greater than 0"
 msgstr "Nombre des paramètres non valide, doit être supérieur à 0"
 
-#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
-#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
-#: Engine/cs_par_dispatch.c:2682
+#: Engine/cs_par_dispatch.c:1250 Engine/cs_par_dispatch.c:1533
+#: Engine/cs_par_dispatch.c:2566 Engine/cs_par_dispatch.c:2676
+#: Engine/cs_par_dispatch.c:2703
 msgid "Invalid NULL Parameter chain"
 msgstr "Paramètre chain NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1237
+#: Engine/cs_par_dispatch.c:1261
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr "Impossible de trouver l'information sémantique pour l'instrument '%i'"
 
-#: Engine/cs_par_dispatch.c:1554
+#: Engine/cs_par_dispatch.c:1579
 msgid "Invalid NULL Parameter node"
 msgstr "Paramètre node NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1556
+#: Engine/cs_par_dispatch.c:1581
 msgid "Invalid NULL Parameter update_hdl"
 msgstr "Paramètre update_hdl NULL non valide"
 
-#: Engine/cs_par_dispatch.c:1647
+#: Engine/cs_par_dispatch.c:1672
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr "Paramètre update_hdl non valide, hors limites de DAG"
 
-#: Engine/cs_par_dispatch.c:2497
+#: Engine/cs_par_dispatch.c:2518
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr "Fichier de dump parallèle non trouvé à : %s pour écriture"
 
-#: Engine/cs_par_dispatch.c:2557
+#: Engine/cs_par_dispatch.c:2578
 msgid "Failed to allocate Dag2 cache entry"
 msgstr "L'allocation du cache d'entrée de Dag2 a échoué"
 
-#: Engine/cs_par_dispatch.c:2610
+#: Engine/cs_par_dispatch.c:2631
 msgid "Cache Update\n"
 msgstr "Mise à jour du cache\n"
 
@@ -435,12 +442,12 @@ msgstr "La variable d'environnement '%s' a été fixée à "
 msgid "Creating search path cache for '%s':"
 msgstr "Création du cache de chemin de recherche pour '%s' :"
 
-#: Engine/envvar.c:1083
+#: Engine/envvar.c:1085
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr "erreur interne : csoundFileOpen() : type non valide : %d"
 
-#: Engine/envvar.c:1266
+#: Engine/envvar.c:1268
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr "erreur interne : csoundCreateFileHandle() : type non valide : %d"
@@ -513,13 +520,13 @@ msgstr "la ftable n'existe pas"
 msgid "ftable %d now deleted\n"
 msgstr "la ftable %d est maintenant supprimée\n"
 
-#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
-#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
-#: Engine/fgens.c:2909
+#: Engine/fgens.c:153 Engine/fgens.c:1599 Engine/fgens.c:1685
+#: Engine/fgens.c:1764 Engine/fgens.c:1880 Engine/fgens.c:1961
+#: Engine/fgens.c:2937
 msgid "insufficient gen arguments"
 msgstr "nombre d'arguments de GEN insuffisant"
 
-#: Engine/fgens.c:179 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr "Le GEN nommé \"%s\" n'est pas défini"
@@ -537,11 +544,11 @@ msgstr "taille différée seulement pour GEN1, GEN23, GEN28 et GEN49"
 msgid "ftable %d:\n"
 msgstr "ftable %d :\n"
 
-#: Engine/fgens.c:222 Engine/fgens.c:229
+#: Engine/fgens.c:222 Engine/fgens.c:229 Engine/fgens.c:2794
 msgid "illegal table length"
 msgstr "longueur de table illégale"
 
-#: Engine/fgens.c:288 Engine/fgens.c:2215
+#: Engine/fgens.c:288 Engine/fgens.c:2221
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
@@ -552,10 +559,10 @@ msgstr ""
 
 #: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
 #: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
-#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
-#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
-#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
-#: Engine/fgens.c:2906
+#: Engine/fgens.c:1054 Engine/fgens.c:1098 Engine/fgens.c:1145
+#: Engine/fgens.c:1399 Engine/fgens.c:1461 Engine/fgens.c:1683
+#: Engine/fgens.c:1761 Engine/fgens.c:2116 Engine/fgens.c:2891
+#: Engine/fgens.c:2934
 msgid "using extended arguments\n"
 msgstr "utilisation d'arguments étendus\n"
 
@@ -568,13 +575,13 @@ msgid "illegal x interval"
 msgstr "intervalle x interdit"
 
 #: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
-#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
-#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: Engine/fgens.c:1356 Engine/fgens.c:2381 Engine/fgens.c:2696
+#: Engine/fgens.c:2836 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
 #: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr "pas assez d'arguments"
 
-#: Engine/fgens.c:408 Engine/fgens.c:1355
+#: Engine/fgens.c:408 Engine/fgens.c:1361
 msgid "unknown srctable number"
 msgstr "numéro de srctable inconnu"
 
@@ -610,240 +617,240 @@ msgstr "valeur xamp illégale"
 msgid "uneven number of args"
 msgstr "nombre impair d'arguments"
 
-#: Engine/fgens.c:1077
+#: Engine/fgens.c:1082
 msgid "gen call has illegal x-ordinate values:"
 msgstr "l'appel gen a des valeurs d'abscisse x illégales"
 
-#: Engine/fgens.c:1095
+#: Engine/fgens.c:1100
 msgid "wrong number of args"
 msgstr "nombre d'arguments incorrect"
 
-#: Engine/fgens.c:1109
+#: Engine/fgens.c:1114
 msgid "a range given exceeds table length"
 msgstr "un intervalle donné excède la longueur de la table"
 
-#: Engine/fgens.c:1116
+#: Engine/fgens.c:1121
 msgid "an input function does not exist"
 msgstr "une fonction d'entrée n'existe pas"
 
-#: Engine/fgens.c:1249
+#: Engine/fgens.c:1254
 msgid "No such window!"
 msgstr "Pas de fenêtre de cette sorte !"
 
-#: Engine/fgens.c:1267
+#: Engine/fgens.c:1272
 msgid "Wrong number of input arguments"
 msgstr "Nombre incorrect d'arguments en entrée"
 
-#: Engine/fgens.c:1268
+#: Engine/fgens.c:1273
 msgid "unknown distribution"
 msgstr "distribution inconnue"
 
-#: Engine/fgens.c:1317
+#: Engine/fgens.c:1322
 msgid "error opening ASCII file"
 msgstr "erreur à l'ouverture du fichier ASCII"
 
-#: Engine/fgens.c:1323
+#: Engine/fgens.c:1328
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr "%ld éléments dans %s\n"
 
-#: Engine/fgens.c:1334
+#: Engine/fgens.c:1340
 msgid "Numbers after table full in GEN23"
 msgstr "Encore des nombres à lire alors que la table est pleine dans GEN23"
 
-#: Engine/fgens.c:1363
+#: Engine/fgens.c:1369
 msgid "table size must be the same of source table"
 msgstr "la taille de la table doit être la même que celle de la table source"
 
-#: Engine/fgens.c:1435 Engine/fgens.c:1495
+#: Engine/fgens.c:1441 Engine/fgens.c:1501
 msgid "x coordinates must all be in increasing order:"
 msgstr "les coordonnées x doivent être toutes en ordre croissant"
 
-#: Engine/fgens.c:1438 Engine/fgens.c:1497
+#: Engine/fgens.c:1444 Engine/fgens.c:1503
 msgid "x coordinate greater than function size:"
 msgstr "coordonnée x supérieure à la taille de la fonction"
 
-#: Engine/fgens.c:1442
+#: Engine/fgens.c:1448
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr "valeur d'entrée interdite (y <= 0) dans l'appel GEN, début :"
 
-#: Engine/fgens.c:1515
+#: Engine/fgens.c:1521
 msgid "GEN28 requires zero table length"
 msgstr "GEN28 nécessite une longueur de table nulle"
 
-#: Engine/fgens.c:1577
+#: Engine/fgens.c:1583
 msgid "could not open space file"
 msgstr "impossible d'ouvrir le fichier de spatialisation"
 
-#: Engine/fgens.c:1579
+#: Engine/fgens.c:1585
 msgid "Time values must be in increasing order"
 msgstr "Les valeurs de temps doivent être en ordre croissant"
 
-#: Engine/fgens.c:1600
+#: Engine/fgens.c:1606
 msgid "GEN30: source ftable not found"
 msgstr "GEN30 : la ftable source n'a pas été trouvée"
 
-#: Engine/fgens.c:1683
+#: Engine/fgens.c:1689
 msgid "GEN31: source ftable not found"
 msgstr "GEN31 : la ftable source n'a pas été trouvée"
 
-#: Engine/fgens.c:1791
+#: Engine/fgens.c:1797
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr "GEN32 : la ftable source %d n'a pas été trouvée"
 
-#: Engine/fgens.c:1885
+#: Engine/fgens.c:1891
 msgid "GEN33: source ftable not found"
 msgstr "GEN33 : la ftable source n'a pas été trouvée"
 
-#: Engine/fgens.c:2053
+#: Engine/fgens.c:2059
 msgid "unknown source table number"
 msgstr "numéro de table source inconnu"
 
-#: Engine/fgens.c:2085
+#: Engine/fgens.c:2091
 msgid "Gen41: negative probability not allowed"
 msgstr "Gen41 : probabilité négative interdite"
 
-#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2157
 #, c-format
 msgid "ftable %d: "
 msgstr "ftable %d : "
 
-#: Engine/fgens.c:2195
+#: Engine/fgens.c:2201
 #, c-format
 msgid "ftable %d:"
 msgstr "ftable %d :"
 
-#: Engine/fgens.c:2210
+#: Engine/fgens.c:2216
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr "remplacement de la ftable précédente %d"
 
-#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
-#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
-#: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
-#: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
+#: Engine/fgens.c:2252 Engine/fgens.c:2340 Engine/fgens.c:2364
+#: Opcodes/midiops2.c:233 Opcodes/midiops2.c:388 Opcodes/midiops2.c:470
+#: Opcodes/uggab.c:1482 Opcodes/uggab.c:1509 Opcodes/uggab.c:1529
+#: Opcodes/uggab.c:1572
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr "Numéro de ftable non valide. %f"
 
-#: Engine/fgens.c:2251
+#: Engine/fgens.c:2257
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr "taille différée de la ftable %f interdite ici"
 
-#: Engine/fgens.c:2278 Engine/fgens.c:2848
+#: Engine/fgens.c:2284 Engine/fgens.c:2875
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr "Le chargement différé de '%s' a échoué"
 
-#: Engine/fgens.c:2340
+#: Engine/fgens.c:2346
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 "La taille différée au chargement de la ftable %f n'est pas disponible à "
 "l'exécution."
 
-#: Engine/fgens.c:2399
+#: Engine/fgens.c:2405
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr "la table non différée %d nécessite une taille %d\n"
 
-#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
+#: Engine/fgens.c:2452 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr "format d'échantillon non valide : %d"
 
-#: Engine/fgens.c:2454 Engine/fgens.c:2714
+#: Engine/fgens.c:2460 Engine/fgens.c:2719
 #, c-format
 msgid "channel %d illegal"
 msgstr "le canal %d est illégal"
 
-#: Engine/fgens.c:2460
+#: Engine/fgens.c:2466
 msgid "deferred alloc\n"
 msgstr "allocation différée\n"
 
-#: Engine/fgens.c:2468
+#: Engine/fgens.c:2474 Engine/fgens.c:2792
 msgid "deferred size, but filesize unknown"
 msgstr "taille différée, mais taille de fichier inconnu"
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2477 Engine/fgens.c:2796
 #, c-format
 msgid "  defer length %d\n"
 msgstr "  longueur différée %d\n"
 
-#: Engine/fgens.c:2540
+#: Engine/fgens.c:2546
 msgid "GEN1: input file truncated by ftable size"
 msgstr "GEN1 : le fichier en entrée a été tronqué à la taille de la ftable"
 
-#: Engine/fgens.c:2544
+#: Engine/fgens.c:2550
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr "\tla fin de boucle (%d) dépasse la taille de la table (%d)\n"
 
-#: Engine/fgens.c:2566
+#: Engine/fgens.c:2572
 msgid "GEN1 read error"
 msgstr "GEN1 erreur de lecture"
 
-#: Engine/fgens.c:2571
+#: Engine/fgens.c:2577
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr "GEN1 : le fichier aiff a été tronqué à la taille de la table"
 
-#: Engine/fgens.c:2572
+#: Engine/fgens.c:2578
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr "\tles échantillons audio %d dépassent la taille de la table (%d)"
 
-#: Engine/fgens.c:2616
+#: Engine/fgens.c:2622
 msgid "wrong number of ftable arguments"
 msgstr "nombre d'arguments incorrect pour la ftable"
 
-#: Engine/fgens.c:2626 OOps/pstream.c:326
+#: Engine/fgens.c:2632 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr "Le chargement du fichier PVOC-EX a échoué"
 
-#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2643 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr "numéro de canal illégal"
 
-#: Engine/fgens.c:2655
+#: Engine/fgens.c:2661
 msgid "ftable size too small"
 msgstr "taille de ftable trop petite"
 
-#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
+#: Engine/fgens.c:2735 Opcodes/mp3in.c:87 Opcodes/mp3in.c:229
 msgid "Not enough memory\n"
 msgstr "Pas assez de mémoire\n"
 
-#: Engine/fgens.c:2873
+#: Engine/fgens.c:2901
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr "gen51 : nombre de p-champs non valide (pas assez de degrés)"
 
-#: Engine/fgens.c:2913
+#: Engine/fgens.c:2941
 msgid "number of channels inconsistent with number of args"
 msgstr "nombre de canaux en contradiction avec le nombre d'arguments"
 
-#: Engine/fgens.c:3072
+#: Engine/fgens.c:3100
 msgid "GEN53: invalid number of gen arguments"
 msgstr "GEN53 : nombre d'arguments de GEN non valide"
 
-#: Engine/fgens.c:3082
+#: Engine/fgens.c:3110
 msgid "GEN53: invalid table length"
 msgstr "GEN53 : longueur de table non valide"
 
-#: Engine/fgens.c:3086
+#: Engine/fgens.c:3114
 msgid "GEN53: invalid source table number"
 msgstr "GEN53 : numéro de la table source non valide"
 
-#: Engine/fgens.c:3089
+#: Engine/fgens.c:3117
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr "GEN53 : le mode doit être compris entre 0 et 15"
 
-#: Engine/fgens.c:3093
+#: Engine/fgens.c:3121
 msgid "GEN53: invalid source table length"
 msgstr "GEN53 : longueur de la table source non valide"
 
-#: Engine/fgens.c:3098
+#: Engine/fgens.c:3126
 msgid "GEN53: invalid window table"
 msgstr "GEN53 : table de fenêtre non valide"
 
@@ -1056,7 +1063,7 @@ msgstr "   fin à %p\n"
 msgid "subinstr: not initialised"
 msgstr "subinstr : non initialisé"
 
-#: Engine/insert.c:1855
+#: Engine/insert.c:1856
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
@@ -1065,29 +1072,29 @@ msgstr ""
 "instr %d alloué à %p\n"
 "\tlclbas %p, opds %p\n"
 
-#: Engine/insert.c:1872
+#: Engine/insert.c:1873
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr "op %d (%s) alloué à %p\n"
 
-#: Engine/insert.c:1898
+#: Engine/insert.c:1899
 msgid "null iopadr"
 msgstr "iopadr null"
 
-#: Engine/insert.c:1909
+#: Engine/insert.c:1910
 msgid "null opadr"
 msgstr "opadr null"
 
-#: Engine/insert.c:1966
+#: Engine/insert.c:1967
 msgid "inconsistent opds total"
 msgstr "total d'opds non cohérent"
 
-#: Engine/insert.c:2011
+#: Engine/insert.c:2012
 #, c-format
 msgid "Instrument %s is still active"
 msgstr "L'instrument %s est toujours actif"
 
-#: Engine/insert.c:2014
+#: Engine/insert.c:2015
 #, c-format
 msgid "Instrument %d is still active"
 msgstr "L'instrument %d est toujours actif"
@@ -1097,8 +1104,8 @@ msgid "-L stdin fcntl failed"
 msgstr "-L stdin fcntl a échoué"
 
 #: Engine/linevent.c:99 Engine/linevent.c:112 OOps/dumpf.c:57 OOps/dumpf.c:82
-#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:274 OOps/dumpf.c:301
-#: OOps/dumpf.c:328 OOps/dumpf.c:355 OOps/dumpf.c:527 util/hetro.c:249
+#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:276 OOps/dumpf.c:303
+#: OOps/dumpf.c:330 OOps/dumpf.c:357 OOps/dumpf.c:528 util/hetro.c:249
 #, c-format
 msgid "Cannot open %s"
 msgstr "Impossible d'ouvrir %s"
@@ -1271,91 +1278,91 @@ msgstr ""
 "Le fichier '%s' (sr = %d Hz, %d voix, %lu trames d'échantillons) a été "
 "chargé en mémoire\n"
 
-#: Engine/musmon.c:81
+#: Engine/musmon.c:80
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr "Temps écoulé à %s : valeur réelle : %.3fs, CPU : %.3fs\n"
 
-#: Engine/musmon.c:108
+#: Engine/musmon.c:107
 msgid "illegal istartempo value"
 msgstr "valeur illégale du tempo de départ"
 
-#: Engine/musmon.c:111
+#: Engine/musmon.c:110
 msgid "Beat mode not in force"
 msgstr "Le mode beat n'est pas en vigueur"
 
-#: Engine/musmon.c:184 Top/main.c:121
+#: Engine/musmon.c:183 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr "Csound version %s beta (échantillons en format double) %s\n"
 
-#: Engine/musmon.c:187 Top/main.c:124
+#: Engine/musmon.c:186 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr "Csound version %s (échantillons en format double) %s\n"
 
-#: Engine/musmon.c:192 Top/main.c:113
+#: Engine/musmon.c:191 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr "Csound version %s beta (échantillons en format float) %s\n"
 
-#: Engine/musmon.c:195 Top/main.c:116
+#: Engine/musmon.c:194 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr "Csound version %s (échantillons en format float) %s\n"
 
-#: Engine/musmon.c:220
+#: Engine/musmon.c:219
 msgid "orch now loaded\n"
 msgstr "l'orchestre est maintenant chargé\n"
 
-#: Engine/musmon.c:245
+#: Engine/musmon.c:244
 msgid "k-period aligned audio buffering\n"
 msgstr "mise en tampon audio alignée sur la période k\n"
 
-#: Engine/musmon.c:261
+#: Engine/musmon.c:260
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr "mise en tampon audio par blocs de %d trames d'échantillons\n"
 
-#: Engine/musmon.c:283
+#: Engine/musmon.c:282
 msgid "using Cscore processing\n"
 msgstr "utilisation du traitement Cscore\n"
 
-#: Engine/musmon.c:286
+#: Engine/musmon.c:285
 msgid "cannot create cscore.out"
 msgstr "impossible de créer cscore.out"
 
-#: Engine/musmon.c:299
+#: Engine/musmon.c:301
 msgid "cannot reopen cscore.out"
 msgstr "impossible de réouvrir cscore.out"
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:314
 msgid "cannot reopen cscore.srt"
 msgstr "impossible de réouvrir cscore.srt"
 
-#: Engine/musmon.c:305
+#: Engine/musmon.c:316
 msgid "sorting cscore.out ..\n"
 msgstr "tri de cscore.out ..\n"
 
-#: Engine/musmon.c:311 Top/main.c:401
+#: Engine/musmon.c:322 Top/main.c:397
 msgid "\t... done\n"
 msgstr "\t... fait\n"
 
-#: Engine/musmon.c:312
+#: Engine/musmon.c:323
 msgid "playing from cscore.srt\n"
 msgstr "exécution à partir de cscore.srt\n"
 
-#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
-#: Engine/musmon.c:1216
+#: Engine/musmon.c:327 Engine/musmon.c:457 Engine/musmon.c:1026
+#: Engine/musmon.c:1227
 #, c-format
 msgid "SECTION %d:\n"
 msgstr "SECTION %d :\n"
 
-#: Engine/musmon.c:390
+#: Engine/musmon.c:401
 msgid "end of score.\t\t   overall amps:"
 msgstr "fin de la partition.\t\t   amplitudes maximales :"
 
-#: Engine/musmon.c:401
+#: Engine/musmon.c:412
 msgid ""
 "\n"
 "\t   overall samples out of range:"
@@ -1363,7 +1370,7 @@ msgstr ""
 "\n"
 "\t   Nombre d'échantillons hors limites :"
 
-#: Engine/musmon.c:405
+#: Engine/musmon.c:416
 #, c-format
 msgid ""
 "\n"
@@ -1372,113 +1379,109 @@ msgstr ""
 "\n"
 "%d erreurs dans l'exécution\n"
 
-#: Engine/musmon.c:407
+#: Engine/musmon.c:418
 msgid "end of performance"
 msgstr "fin de l'exécution"
 
-#: Engine/musmon.c:421
+#: Engine/musmon.c:432
 msgid "no sound written to disk\n"
 msgstr "aucun son n'a été écrit sur le disque\n"
 
-#: Engine/musmon.c:436
+#: Engine/musmon.c:447
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr "%c\tsignal sonore !\n"
 
-#: Engine/musmon.c:502 Engine/musmon.c:548
+#: Engine/musmon.c:513 Engine/musmon.c:559
 msgid "\t number of samples out of range:"
 msgstr "\t nombre d'échantillons hors limites :"
 
-#: Engine/musmon.c:541
+#: Engine/musmon.c:552
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr "fin de la section %d\tamplitudes maximales de la section :"
 
-#: Engine/musmon.c:543
+#: Engine/musmon.c:554
 msgid "end of lplay event list\t      peak amps:"
 msgstr "fin de la liste d'évènements lplay\t      amplitudes maximales :"
 
-#: Engine/musmon.c:607 Engine/musmon.c:632
+#: Engine/musmon.c:618 Engine/musmon.c:643
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr " - note effacée. instr %s non défini"
 
-#: Engine/musmon.c:611
+#: Engine/musmon.c:622
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr "Lancement de l'instrument  %s %s\n"
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "off"
 msgstr "arrêt"
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "on"
 msgstr "marche"
 
-#: Engine/musmon.c:620 Engine/musmon.c:659
+#: Engine/musmon.c:631 Engine/musmon.c:670
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr " - note effacée. instr %d(%d) non défini"
 
-#: Engine/musmon.c:624
+#: Engine/musmon.c:635
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr "Lancement de l'instrument %d %s\n"
 
-#: Engine/musmon.c:650
+#: Engine/musmon.c:661
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr " - note effacée.  i%d (%s) a eu %d erreurs d'initialisation"
 
-#: Engine/musmon.c:680
+#: Engine/musmon.c:691
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr " - note effacée.  i%d a eu %d erreurs d'initialisation"
 
-#: Engine/musmon.c:701
+#: Engine/musmon.c:712
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr "le temps a avancé de %5.3f pulsations à la demande de la partition\n"
 
-#: Engine/musmon.c:719
+#: Engine/musmon.c:730
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr "\t\t   T%7.3f - note effacée. "
 
-#: Engine/musmon.c:723
+#: Engine/musmon.c:734
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr "l'instr %s a eu %d erreurs d'initialisation\n"
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:736
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr "l'instr %d a eu %d erreurs d'initialisation\n"
 
-#: Engine/musmon.c:816
+#: Engine/musmon.c:827
 msgid "terminating.\n"
 msgstr "terminaison.\n"
 
-#: Engine/musmon.c:902
+#: Engine/musmon.c:913
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr "erreur dans la partition.  L'opcode %c (ASCII %d) est illégal\n"
 
-#: Engine/musmon.c:1129
+#: Engine/musmon.c:1140
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr "insert_score_event() : numéro ou nom d'instrument non valide\n"
 
-#: Engine/musmon.c:1149
+#: Engine/musmon.c:1160
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr "insert_score_event() : opcode inconnu : %c\n"
 
-#: Engine/musmon.c:1172
+#: Engine/musmon.c:1183
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr "insert_score_event() : pas assez de p-champs\n"
 
@@ -1501,47 +1504,47 @@ msgstr "Impossible de trouver l'instrument %d"
 msgid "cannot find the specified instrument or opcode"
 msgstr "impossible de trouver l'instrument ou l'opcode spécifié"
 
-#: Engine/new_orc_parser.c:91
+#: Engine/new_orc_parser.c:119
 msgid "Unmatched #ifdef\n"
 msgstr "#ifdef non apparié\n"
 
-#: Engine/otran.c:149 Engine/symbtab.c:413
+#: Engine/otran.c:149 Engine/symbtab.c:416
 #, c-format
 msgid "invalid input type for opcode %s"
 msgstr "type d'entrée non valide pour l'opcode %s"
 
-#: Engine/otran.c:154 Engine/symbtab.c:418
+#: Engine/otran.c:154 Engine/symbtab.c:421
 #, c-format
 msgid "too many input args for opcode %s"
 msgstr "trop d'arguments en entrée pour l'opcode %s"
 
-#: Engine/otran.c:169 Engine/symbtab.c:433
+#: Engine/otran.c:169 Engine/symbtab.c:436
 #, c-format
 msgid "too many output args for opcode %s"
 msgstr "trop d'arguments en sortie pour l'opcode %s"
 
-#: Engine/otran.c:194 Engine/symbtab.c:458
+#: Engine/otran.c:194 Engine/symbtab.c:461
 #, c-format
 msgid "invalid output type for opcode %s"
 msgstr "type de sortie non valide pour l'opcode %s"
 
-#: Engine/otran.c:325 Engine/otran.c:332
+#: Engine/otran.c:324 Engine/otran.c:331
 msgid "missing instrument number or name"
 msgstr "il manque un numéro ou un nom d'instrument"
 
-#: Engine/otran.c:337
+#: Engine/otran.c:336
 msgid "illegal instr number"
 msgstr "numéro d'instrument illégal"
 
-#: Engine/otran.c:388
+#: Engine/otran.c:387
 msgid "No opcode name"
 msgstr "Aucun nom d'opcode"
 
-#: Engine/otran.c:393 Engine/symbtab.c:538
+#: Engine/otran.c:392 Engine/symbtab.c:541
 msgid "invalid name for opcode"
 msgstr "nom d'opcode non valide"
 
-#: Engine/otran.c:397
+#: Engine/otran.c:396
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
@@ -1549,56 +1552,56 @@ msgstr ""
 "erreur de déclaration d'opcode (utilisation : nom d'opcode, types en sortie, "
 "types en entrée) -- opcode %s"
 
-#: Engine/otran.c:408 Engine/symbtab.c:548
+#: Engine/otran.c:407 Engine/symbtab.c:551
 #, c-format
 msgid "cannot redefine %s"
 msgstr "impossible de redéfinir %s"
 
-#: Engine/otran.c:412 Engine/symbtab.c:553
+#: Engine/otran.c:411 Engine/symbtab.c:556
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr "AVERTISSEMENT : opcode redéfini : %s\n"
 
-#: Engine/otran.c:503
+#: Engine/otran.c:502
 msgid "string constant used as output"
 msgstr "constante chaîne de caractères utilisée comme sortie"
 
-#: Engine/otran.c:534
+#: Engine/otran.c:533
 msgid "Missing endin"
 msgstr "Il manque endin"
 
-#: Engine/otran.c:599
+#: Engine/otran.c:598
 msgid "perf-pass statements illegal in header blk"
 msgstr "les instructions d'exécution sont interdites dans le bloc d'en-tête"
 
-#: Engine/otran.c:603
+#: Engine/otran.c:602
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr "%d erreurs de syntaxe dans l'orchestre.  Compilation non valide"
 
-#: Engine/otran.c:1257
+#: Engine/otran.c:1256
 msgid "bad value for 0dbfs: must be positive."
 msgstr "mauvaise valeur pour 0dbfs : elle doit être positive"
 
-#: Engine/otran.c:1267
+#: Engine/otran.c:1266
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 "redéfinition des taux d'échantillonnage : esr = %7.4f, ekr = %7.4f, ksmps = "
 "%d\n"
 
-#: Engine/otran.c:1339
+#: Engine/otran.c:1338
 msgid "internal error: string constant outarg"
 msgstr ""
 "erreur interne : constante chaîne de caractères utilisée comme argument en "
 "sortie"
 
-#: Engine/otran.c:1365
+#: Engine/otran.c:1364
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr "i%d pset args != pmax"
 
-#: Engine/otran.c:1428
+#: Engine/otran.c:1427
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
@@ -1607,7 +1610,7 @@ msgstr ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "Erreur :"
 
-#: Engine/otran.c:1461
+#: Engine/otran.c:1460
 msgid "header init errors"
 msgstr "Erreurs dans l'initialisation de l'en-tête"
 
@@ -1619,7 +1622,7 @@ msgstr "ungetorchar(): dépassement de tampon"
 msgid "Unexpected end of orchestra file"
 msgstr "Fin inattendue du fichier de l'orchestre"
 
-#: Engine/rdorch.c:431 Engine/sread.c:758
+#: Engine/rdorch.c:431 Engine/sread.c:765
 #, c-format
 msgid "Macro definition for %*s\n"
 msgstr "Définition de macro pour %*s\n"
@@ -1637,12 +1640,12 @@ msgstr "compilateur de l'orchestre :\n"
 msgid "cannot open orch file %s"
 msgstr "impossible d'ouvrir le fichier d'orchestre %s"
 
-#: Engine/rdorch.c:684 Engine/sread.c:1584
+#: Engine/rdorch.c:684 Engine/sread.c:1595
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr "Définition de macro pour %s\n"
 
-#: Engine/rdorch.c:716 Engine/sread.c:1607
+#: Engine/rdorch.c:716 Engine/sread.c:1618
 msgid "macro error\n"
 msgstr "erreur de macro\n"
 
@@ -1663,7 +1666,7 @@ msgstr "#else non apparié"
 msgid "Unmatched #endif"
 msgstr "#endif non apparié"
 
-#: Engine/rdorch.c:872 Engine/sread.c:1694
+#: Engine/rdorch.c:872 Engine/sread.c:1710
 #, c-format
 msgid "macro %s undefined\n"
 msgstr "la macro %s n'est pas définie\n"
@@ -1681,21 +1684,21 @@ msgstr "Caractère # non attendu"
 msgid "Unknown # option: '%s'"
 msgstr "Option # inconnue : '%s'"
 
-#: Engine/rdorch.c:928 Engine/sread.c:380
+#: Engine/rdorch.c:928 Engine/sread.c:383
 #, c-format
 msgid "Undefined macro: '%s'"
 msgstr "Macro non définie : '%s'"
 
-#: Engine/rdorch.c:930 Engine/sread.c:378
+#: Engine/rdorch.c:930 Engine/sread.c:381
 msgid "Macro expansion symbol ($) without macro name"
 msgstr "Symbole de déroulement de macro ($) sans nom de macro"
 
-#: Engine/rdorch.c:935 Engine/sread.c:384
+#: Engine/rdorch.c:935 Engine/sread.c:387
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr "$%s correspond au nom de macro $%s"
 
-#: Engine/rdorch.c:952 Engine/sread.c:401
+#: Engine/rdorch.c:952 Engine/sread.c:404 Engine/sread.c:420
 msgid "Syntax error in macro call"
 msgstr "Erreur de syntaxe dans l'appel de macro"
 
@@ -1921,7 +1924,7 @@ msgstr ""
 "\n"
 "\tle reste de la ligne a été ignoré\n"
 
-#: Engine/rdscor.c:146
+#: Engine/rdscor.c:148
 msgid "ERROR: too many pfields: "
 msgstr "ERREUR : trop de p-champs"
 
@@ -1971,228 +1974,233 @@ msgstr "  dans la ligne %d de la macro %s%s"
 msgid "Internal error op=%c"
 msgstr "Erreur interne op=%c"
 
-#: Engine/sread.c:464
+#: Engine/sread.c:469
 msgid "illegal placement of number in [] expression"
 msgstr "placement illégal d'un nombre dans l'expression []"
 
-#: Engine/sread.c:491
+#: Engine/sread.c:496
 msgid "illegal placement of operator ~ in [] expression"
 msgstr "placement illégal de l'opérateur ~ dans l'expression []"
 
-#: Engine/sread.c:501
+#: Engine/sread.c:506
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr "placement illégal des opérateurs @ ou @@ dans l'expression []"
 
-#: Engine/sread.c:533 Engine/sread.c:547
+#: Engine/sread.c:538 Engine/sread.c:552
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr "placement illégal de l'opérateur %c dans l'expression []"
 
-#: Engine/sread.c:559
+#: Engine/sread.c:564
 msgid "illegal placement of '(' in [] expression"
 msgstr "placement illégal de '(' dans l'expression []"
 
-#: Engine/sread.c:565
+#: Engine/sread.c:570
 msgid "missing operand before ')' in [] expression"
 msgstr "il manque un opérande avant ')' dans l'expression []"
 
-#: Engine/sread.c:579
+#: Engine/sread.c:584
 msgid "missing operand before closing bracket in []"
 msgstr "il manque un opérande avant le crochet fermant dans []"
 
-#: Engine/sread.c:594
+#: Engine/sread.c:599
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr "caractère %c(%.2x) illégal dans l'expression []"
 
-#: Engine/sread.c:646
+#: Engine/sread.c:651
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr "%s BOUCLE imbriquée terminée, niveau : %d\n"
 
-#: Engine/sread.c:652
+#: Engine/sread.c:657
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr "BOUCLE externe terminée, niveau : %d\n"
 
-#: Engine/sread.c:696
+#: Engine/sread.c:701
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr "%s BOUCLE imbriquée section (%d) Niveau : %d\n"
 
-#: Engine/sread.c:701
+#: Engine/sread.c:706
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr " BOUCLE externe section (%d) Niveau : %d\n"
 
-#: Engine/sread.c:715
+#: Engine/sread.c:720
 msgid "Loop terminated\n"
 msgstr "Boucle terminée\n"
 
-#: Engine/sread.c:733
+#: Engine/sread.c:740
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr "Section répétée (%d)\n"
 
-#: Engine/sread.c:736
+#: Engine/sread.c:743
 msgid "Repeat section\n"
 msgstr "Section répétée\n"
 
-#: Engine/sread.c:761
+#: Engine/sread.c:768
 msgid "Invalid macro name for --smacro"
 msgstr "Nom de macro non valide pour --smacro"
 
-#: Engine/sread.c:865
+#: Engine/sread.c:872
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr "Base de l'horloge = %f\n"
 
-#: Engine/sread.c:934
+#: Engine/sread.c:942
 msgid "Loops are nested too deeply"
 msgstr "Imbrication des boucles trop profonde"
 
-#: Engine/sread.c:948
+#: Engine/sread.c:956
 msgid "{: invalid repeat count"
 msgstr "{: nombre de répétitions non valide"
 
-#: Engine/sread.c:957
+#: Engine/sread.c:965
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr "%s BOUCLE imbriquée=%d, Niveau : %d\n"
 
-#: Engine/sread.c:963
+#: Engine/sread.c:971
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr "BOUCLE externe=%d, Niveau : %d\n"
 
-#: Engine/sread.c:1047
+#: Engine/sread.c:1056
 msgid "r: invalid repeat count"
 msgstr "r : nombre de répétitions non valide"
 
-#: Engine/sread.c:1049
+#: Engine/sread.c:1058
 #, c-format
 msgid "Repeats=%d\n"
 msgstr "Répétitions=%d\n"
 
-#: Engine/sread.c:1093
+#: Engine/sread.c:1102
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr "Section nommée >>>%s<<<\n"
 
-#: Engine/sread.c:1108
+#: Engine/sread.c:1117
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr "%d : Fichier %s position %ld\n"
 
-#: Engine/sread.c:1133
+#: Engine/sread.c:1142
 #, c-format
 msgid "Name %s not found"
 msgstr "Nom %s non trouvé"
 
-#: Engine/sread.c:1135
+#: Engine/sread.c:1144
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr "Dupliquer %d : %s (%s,%ld)\n"
 
-#: Engine/sread.c:1164
+#: Engine/sread.c:1174
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr "Facteur de déformation = %f\n"
 
-#: Engine/sread.c:1189
+#: Engine/sread.c:1199
 msgid "sread is confused on legal opcodes\n"
 msgstr "sread hésite sur des opcodes légaux\n"
 
-#: Engine/sread.c:1251
+#: Engine/sread.c:1261
 msgid "No previous event for ^"
 msgstr "Pas d'évènement précédent pour ^"
 
-#: Engine/sread.c:1256
+#: Engine/sread.c:1266
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr "espace illégal après %s, remplacé par zéro"
 
-#: Engine/sread.c:1286
+#: Engine/sread.c:1296
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr "'%s' a été ignoré dans l'évènement '%c'"
 
-#: Engine/sread.c:1289
+#: Engine/sread.c:1299
 msgid "! invalid in p1, p2, or p3"
 msgstr "! non valide dans p1, p2 ou p3"
 
-#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
-#: Engine/sread.c:1761 Engine/sread.c:1775
+#: Engine/sread.c:1300 Engine/sread.c:1305 Engine/sread.c:1754
+#: Engine/sread.c:1777 Engine/sread.c:1791
 msgid "      remainder of line flushed\n"
 msgstr "      le reste de la ligne a été ignoré\n"
 
-#: Engine/sread.c:1294
+#: Engine/sread.c:1304
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr "caractère illégal après !: '%c'"
 
-#: Engine/sread.c:1373
+#: Engine/sread.c:1384
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr "AVERTISSEMENT : instr %s non trouvé, on suppose que insno = -1\n"
 
-#: Engine/sread.c:1393
+#: Engine/sread.c:1404
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr "sread : utilisation illégale du report,   remplacé par 0\n"
 
-#: Engine/sread.c:1539
+#: Engine/sread.c:1550
 msgid "Improper \\"
 msgstr "\\ mal employé"
 
-#: Engine/sread.c:1570
+#: Engine/sread.c:1581
 msgid "Not #define"
 msgstr "Pas #define"
 
-#: Engine/sread.c:1630
+#: Engine/sread.c:1627 Engine/sread.c:1635
+#, fuzzy
+msgid "Syntax error in macro definition"
+msgstr "Erreur de syntaxe dans l'appel de macro"
+
+#: Engine/sread.c:1646
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr "Macro %s avec %d arguments définie\n"
 
-#: Engine/sread.c:1642
+#: Engine/sread.c:1658
 msgid "Not #include"
 msgstr "Pas #include"
 
-#: Engine/sread.c:1671
+#: Engine/sread.c:1687
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr "Impossible d'ouvrir le fichier inclus (#include) %s"
 
-#: Engine/sread.c:1681
+#: Engine/sread.c:1697
 msgid "Not #undef"
 msgstr "Pas #undef"
 
-#: Engine/sread.c:1700
+#: Engine/sread.c:1716
 msgid "unknown # option"
 msgstr "option # inconnue"
 
-#: Engine/sread.c:1737
+#: Engine/sread.c:1753
 #, c-format
 msgid "illegal opcode %c"
 msgstr "opcode %c illégal"
 
-#: Engine/sread.c:1760
+#: Engine/sread.c:1776
 #, c-format
 msgid "unexpected char %c"
 msgstr "caractère %c inattendu"
 
-#: Engine/sread.c:1774
+#: Engine/sread.c:1790
 msgid "illegally placed string"
 msgstr "sread : chaîne placée illégalement"
 
-#: Engine/sread.c:1781
+#: Engine/sread.c:1797
 msgid "unmatched quote"
 msgstr "guillemet non apparié"
 
-#: Engine/sread.c:1825
+#: Engine/sread.c:1841
 msgid "sread: illegal number format:  "
 msgstr "sread : format de nombre illégal :"
 
-#: Engine/sread.c:1831
+#: Engine/sread.c:1847
 msgid "   zero substituted.\n"
 msgstr "   remplacé par zéro.\n"
 
@@ -2259,16 +2267,11 @@ msgstr "swrite : sortie, sect %d ligne %d p%d a un numéro illégal  "
 msgid "    String truncated\n"
 msgstr "    Chaîne tronquée\n"
 
-#: Engine/symbtab.c:208
+#: Engine/symbtab.c:211
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr "Confusion de type pour %s (%d,%d), remplacement\n"
 
-#: Engine/symbtab.c:345
-#, c-format
-msgid "Unknown word type for %s on line %d\n"
-msgstr "Type de mot inconnu pour %s à la ligne %d\n"
-
 #: Engine/twarp.c:88
 msgid "twarp: illegal opcode\n"
 msgstr "twarp : opcode illégal\n"
@@ -2285,11 +2288,11 @@ msgstr "twarp : t a un tempo non positif\n"
 msgid "twarp: t segments exceed twarp array\n"
 msgstr "twarp : les segments t dépassent la capacité du tableau twarp\n"
 
-#: InOut/cmidi.c:233
+#: InOut/cmidi.c:236
 msgid "CoreMIDI real time MIDI plugin for Csound\n"
 msgstr "Module audio en temps réel CoreMIDI pour Csound\n"
 
-#: InOut/cmidi.c:247
+#: InOut/cmidi.c:250
 msgid "rtmidi: CoreMIDI module enabled\n"
 msgstr "rtmidi : module CoreMIDI activé\n"
 
@@ -2345,7 +2348,7 @@ msgstr "sfinit : impossible d'ouvrir %s"
 msgid "writing %d sample blks of %d-bit floats to %s \n"
 msgstr "écriture de %d blocs d'échantillons de flottants sur %d bit vers %s\n"
 
-#: InOut/libsnd.c:744 util/srconv.c:484
+#: InOut/libsnd.c:744 util/srconv.c:485
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr "écriture de blocs de %2$s de %1$d octets vers %3$s"
@@ -2917,187 +2920,187 @@ msgstr "Module audio en temps réel PortMIDI pour Csound\n"
 msgid "rtmidi: PortMIDI module enabled\n"
 msgstr "rtmidi : module PortMIDI activé\n"
 
-#: InOut/rtalsa.c:110
+#: InOut/rtalsa.c:113
 msgid "--scheduler: invalid priority value; the allowed range is:"
 msgstr ""
 "--scheduler: valeur de priorité non valide ; l'intervalle autorisé est :"
 
-#: InOut/rtalsa.c:111
+#: InOut/rtalsa.c:114
 msgid "  -20 to -1: set nice level"
 msgstr "  -20 à -1 : fixe le 'nice level'"
 
-#: InOut/rtalsa.c:112
+#: InOut/rtalsa.c:115
 msgid "          0: normal scheduling, but lock memory"
 msgstr "          0 : ordonnancement normal, mais verrouillage mémoire"
 
-#: InOut/rtalsa.c:113
+#: InOut/rtalsa.c:116
 #, c-format
 msgid "    1 to %d: SCHED_RR with the specified priority (DANGEROUS)"
 msgstr "    1 to %d : SCHED_RR avec la priorité spécifiée (DANGEREUX)"
 
-#: InOut/rtalsa.c:330
+#: InOut/rtalsa.c:333
 #, c-format
 msgid " *** Cannot open device '%s' for audio output: %s"
 msgstr ""
 " *** Impossible d'ouvrir le périphérique '%s' pour la sortie audio : %s"
 
-#: InOut/rtalsa.c:333
+#: InOut/rtalsa.c:336
 #, c-format
 msgid " *** Cannot open device '%s' for audio input: %s"
 msgstr " *** Impossible d'ouvrir le périphérique '%s' pour l'entrée audio : %s"
 
-#: InOut/rtalsa.c:394
+#: InOut/rtalsa.c:397
 #, c-format
 msgid "ALSA: -B %d not allowed on this device; using %d instead\n"
 msgstr "ALSA : -B %d interdit sur ce périphérique ; utiliser plutôt %d\n"
 
-#: InOut/rtalsa.c:417
+#: InOut/rtalsa.c:420
 #, c-format
 msgid "ALSA: -b %d not allowed on this device; using %d instead\n"
 msgstr "ALSA : -b %d interdit sur ce périphérique ; utiliser plutôt %d\n"
 
-#: InOut/rtalsa.c:430
+#: InOut/rtalsa.c:433
 #, c-format
 msgid "ALSA %s: total buffer size: %d, period size: %d\n"
 msgstr "ALSA %s : taille de tampon totale : %d, période : %d\n"
 
-#: InOut/rtalsa.c:506
+#: InOut/rtalsa.c:509
 msgid " *** ALSA: must specify a device name, not a number (e.g. -odac:hw:0,0)"
 msgstr ""
 " *** ALSA : il faut spécifier un nom de périphérique, pas un numéro (ex. -"
 "odac:hw:0,0)"
 
-#: InOut/rtalsa.c:514
+#: InOut/rtalsa.c:517
 #, c-format
 msgid " *** ALSA: %s: memory allocation failure"
 msgstr " *** ALSA : %s : échec de l'allocation mémoire"
 
-#: InOut/rtalsa.c:601
+#: InOut/rtalsa.c:604
 msgid "Error reading data from audio input device"
 msgstr "Erreur en lisant des données sur le périphérique d'entrée audio"
 
-#: InOut/rtalsa.c:646
+#: InOut/rtalsa.c:649
 msgid "Error writing data to audio output device"
 msgstr "Erreur en écrivant des données sur la sortie audio"
 
-#: InOut/rtalsa.c:687
+#: InOut/rtalsa.c:690
 msgid "ALSA MIDI: memory allocation failure"
 msgstr "ALSA MIDI : échec de l'allocation mémoire"
 
-#: InOut/rtalsa.c:694
+#: InOut/rtalsa.c:697
 #, c-format
 msgid "ALSA: error opening MIDI input device: '%s'"
 msgstr "ALSA : erreur en ouvrant le périphérique d'entrée MIDI : '%s'"
 
-#: InOut/rtalsa.c:698
+#: InOut/rtalsa.c:701
 #, c-format
 msgid "ALSA: opened MIDI input device '%s'\n"
 msgstr "ALSA : périphérique d'entrée MIDI '%s' ouvert\n"
 
-#: InOut/rtalsa.c:717
+#: InOut/rtalsa.c:720
 msgid "ALSA midi: Using all devices.\n"
 msgstr "ALSA midi : utilisation de tous les périphériques.\n"
 
-#: InOut/rtalsa.c:746
+#: InOut/rtalsa.c:749
 #, c-format
 msgid "ALSA midi: Error opening device: %s\n"
 msgstr "ALSA midi : erreur en ouvrant le périphérique : %s\n"
 
-#: InOut/rtalsa.c:768
+#: InOut/rtalsa.c:771
 msgid "ALSA midi: No devices found.\n"
 msgstr "ALSA midi : aucun périphérique trouvé.\n"
 
-#: InOut/rtalsa.c:867
+#: InOut/rtalsa.c:870
 #, c-format
 msgid "ALSA: error opening MIDI output device '%s'"
 msgstr "ALSA : erreur en ouvrant le périphérique de sortie MIDI : '%s'"
 
-#: InOut/rtalsa.c:870
+#: InOut/rtalsa.c:873
 #, c-format
 msgid "ALSA: opened MIDI output device '%s'\n"
 msgstr "ALSA : périphérique de sortie MIDI '%s' ouvert\n"
 
-#: InOut/rtalsa.c:910
+#: InOut/rtalsa.c:913
 msgid "-M stdin fcntl failed"
 msgstr "-M stdin fcntl a échoué"
 
-#: InOut/rtalsa.c:918
+#: InOut/rtalsa.c:921
 #, c-format
 msgid "cannot open %s"
 msgstr "impossible d'ouvrir %s"
 
-#: InOut/rtalsa.c:929
+#: InOut/rtalsa.c:932
 msgid "MIDI receive: cannot get termios info."
 msgstr "MIDI receive : impossible d'obtenir l'information de termios"
 
-#: InOut/rtalsa.c:937
+#: InOut/rtalsa.c:940
 msgid "MIDI receive: cannot set input baud rate."
 msgstr "MIDI receive : impossible de régler le taux d'entrée en baud"
 
-#: InOut/rtalsa.c:943
+#: InOut/rtalsa.c:946
 msgid "MIDI receive: cannot set termios."
 msgstr "MIDI receive : impossible de régler termios."
 
-#: InOut/rtalsa.c:947
+#: InOut/rtalsa.c:950
 #, c-format
 msgid "Opened MIDI input device file '%s'\n"
 msgstr "Le fichier '%s' est ouvert comme source d'entrée MIDI\n"
 
-#: InOut/rtalsa.c:987
+#: InOut/rtalsa.c:990
 #, c-format
 msgid "sensMIDI: retval errno %d"
 msgstr "sensMIDI : retval erreur numéro %d"
 
-#: InOut/rtalsa.c:1054
+#: InOut/rtalsa.c:1057
 #, c-format
 msgid "Error opening MIDI output device file '%s'"
 msgstr "Erreur en ouvrant le fichier '%s' comme destination de la sortie MIDI"
 
-#: InOut/rtalsa.c:1058
+#: InOut/rtalsa.c:1061
 #, c-format
 msgid "Opened MIDI output device file '%s'\n"
 msgstr "Le fichier '%s' est ouvert comme destination de la sortie MIDI\n"
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
+#: InOut/rtalsa.c:1104 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr "avertissement... impossible de créer une variable globale\n"
 
-#: InOut/rtalsa.c:1106
+#: InOut/rtalsa.c:1109
 msgid "RT scheduler priority, alsa module"
 msgstr "priorité de l'organisation TR, module alsa"
 
-#: InOut/rtalsa.c:1111
+#: InOut/rtalsa.c:1114
 msgid "ALSA real-time audio and MIDI module for Csound by Istvan Varga\n"
 msgstr ""
 "Modules ALSA audio en temps réel et MIDI pour Csound par Istvan Varga\n"
 
-#: InOut/rtalsa.c:1142
+#: InOut/rtalsa.c:1145
 msgid "rtaudio: ALSA module enabled\n"
 msgstr "rtaudio : module ALSA activé\n"
 
-#: InOut/rtalsa.c:1157
+#: InOut/rtalsa.c:1160
 msgid "rtmidi: ALSA module enabled\n"
 msgstr "rtmiDi : module ALSA activé\n"
 
-#: InOut/rtalsa.c:1166
+#: InOut/rtalsa.c:1169
 msgid "rtmidi: devfile module enabled\n"
 msgstr "rtmidi : module devfile activé\n"
 
-#: InOut/rtauhal.c:163
+#: InOut/rtauhal.c:162
 #, c-format
 msgid "selected input device: %s \n"
 msgstr "périphérique d'entrée sélectionné : %s\n"
 
-#: InOut/rtauhal.c:166
+#: InOut/rtauhal.c:165
 #, c-format
 msgid "selected output device: %s \n"
 msgstr "périphérique de sortie sélectionné : %s\n"
 
-#: InOut/rtauhal.c:524
+#: InOut/rtauhal.c:523
 msgid "AuHAL module: device closed\n"
 msgstr "Module AuHAL : périphérique fermé\n"
 
-#: InOut/rtauhal.c:541
+#: InOut/rtauhal.c:540
 msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
 msgstr "rtaudio : module AuHAL activé\n"
 
@@ -3200,7 +3203,7 @@ msgstr "entrée"
 
 #: InOut/rtjack.c:317 InOut/rtjack.c:330 InOut/rtjack.c:335 InOut/rtjack.c:552
 #: InOut/rtjack.c:590 InOut/rtjack.c:595 InOut/rtjack.c:616 InOut/rtjack.c:621
-#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315 Opcodes/ftgen.c:79
+#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315
 msgid "memory allocation failure"
 msgstr "échec de l'allocation mémoire"
 
@@ -3769,7 +3772,7 @@ msgstr "diskin2 : format d'échantillon inconnu"
 msgid "diskin2: %s: failed to open file"
 msgstr "diskin2 : %s: l'ouverture du fichier a échoué"
 
-#: OOps/diskin2.c:231
+#: OOps/diskin2.c:232
 #, c-format
 msgid ""
 "diskin2: opened '%s':\n"
@@ -3778,38 +3781,38 @@ msgstr ""
 "diskin2 : '%s' ouvert :\n"
 "          %d Hz, %d voix, %ld trames d'échantillons\n"
 
-#: OOps/diskin2.c:240
+#: OOps/diskin2.c:242
 msgid ""
 "diskin2: number of output args inconsistent with number of file channels"
 msgstr ""
 "diskin2 : le nombre d'arguments en sortie est en contradiction avec le "
 "nombre de canaux du fichier"
 
-#: OOps/diskin2.c:270
+#: OOps/diskin2.c:272
 #, c-format
 msgid "diskin2: warning: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 "diskin2 : avertissement: taux d'échantillonnage (%d) du fichier != sr (%d) "
 "de l'orchestre\n"
 
-#: OOps/diskin2.c:331
+#: OOps/diskin2.c:334
 msgid "diskin2: not initialised"
 msgstr "diskin2 : non initialisé"
 
-#: OOps/diskin2.c:560
+#: OOps/diskin2.c:566
 msgid "soundin: invalid number of channels"
 msgstr "soundin : nombre de canaux non valide"
 
-#: OOps/diskin2.c:581
+#: OOps/diskin2.c:587
 msgid "soundin: unknown sample format"
 msgstr "soundin : format d'échantillon inconnu"
 
-#: OOps/diskin2.c:591
+#: OOps/diskin2.c:597
 #, c-format
 msgid "soundin: %s: failed to open file"
 msgstr "soundin : %s : l'ouverture du fichier a échoué"
 
-#: OOps/diskin2.c:599
+#: OOps/diskin2.c:605
 #, c-format
 msgid ""
 "soundin: opened '%s':\n"
@@ -3818,19 +3821,19 @@ msgstr ""
 "soundin: '%s' ouvert :\n"
 "         %d Hz, %d voix, %ld trames d'échantillons\n"
 
-#: OOps/diskin2.c:609
+#: OOps/diskin2.c:615
 msgid ""
 "soundin: number of output args inconsistent with number of file channels"
 msgstr ""
 "soundin : le nombre d'arguments en sortie est en contradiction avec le "
 "nombre de canaux du fichier"
 
-#: OOps/diskin2.c:618
+#: OOps/diskin2.c:624
 #, c-format
 msgid "soundin: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr "soundin : taux d'échantillonnage (%d) != sr (%d) de l'orchestre\n"
 
-#: OOps/diskin2.c:651
+#: OOps/diskin2.c:657
 msgid "soundin: not initialised"
 msgstr "soundin : non initialisé"
 
@@ -4019,33 +4022,37 @@ msgid "tempest: not initialised"
 msgstr "tempest : non initialisé"
 
 #: OOps/dumpf.c:45 OOps/dumpf.c:70 OOps/dumpf.c:95 OOps/dumpf.c:120
-#: OOps/dumpf.c:261 OOps/dumpf.c:288 OOps/dumpf.c:315 OOps/dumpf.c:342
+#: OOps/dumpf.c:263 OOps/dumpf.c:290 OOps/dumpf.c:317 OOps/dumpf.c:344
 msgid "unknown format request"
 msgstr "le format demandé est inconnu"
 
 #: OOps/dumpf.c:49 OOps/dumpf.c:74 OOps/dumpf.c:99 OOps/dumpf.c:124
-#: OOps/dumpf.c:265 OOps/dumpf.c:292 OOps/dumpf.c:319 OOps/dumpf.c:346
+#: OOps/dumpf.c:267 OOps/dumpf.c:294 OOps/dumpf.c:321 OOps/dumpf.c:348
 msgid "alaw and ulaw not implemented here"
 msgstr "alaw et ulaw ne sont pas implémentés"
 
-#: OOps/dumpf.c:193 OOps/dumpf.c:442
+#: OOps/dumpf.c:193 OOps/dumpf.c:443
 msgid "unknown kdump format"
 msgstr "format kdump inconnu"
 
+#: OOps/dumpf.c:196
+msgid "write failure in dumpk"
+msgstr ""
+
 #: OOps/fftlib.c:3195
 #, c-format
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr " *** fftlib.x : erreur interne : taille de TFR non valide : %d"
 
-#: OOps/goto_ops.c:93
+#: OOps/goto_ops.c:95
 msgid "negative time period"
 msgstr "durée négative"
 
-#: OOps/goto_ops.c:186
+#: OOps/goto_ops.c:188
 msgid "turnoff2: invalid instrument number"
 msgstr "turnoff2 : numéro d'instrument non valide"
 
-#: OOps/goto_ops.c:191
+#: OOps/goto_ops.c:193
 msgid "turnoff2: invalid mode parameter"
 msgstr "turnoff2 : paramètre de mode non valide"
 
@@ -4062,11 +4069,11 @@ msgid "cpstabm: invalid modulator table"
 msgstr "cpstabm : table de modulateur non valide"
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
-#: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
-#: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
-#: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
-#: Opcodes/midiops2.c:388 Opcodes/midiops2.c:438 Opcodes/midiops2.c:472
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/midiops2.c:59
+#: Opcodes/midiops2.c:76 Opcodes/midiops2.c:120 Opcodes/midiops2.c:154
+#: Opcodes/midiops2.c:221 Opcodes/midiops2.c:252 Opcodes/midiops2.c:316
+#: Opcodes/midiops2.c:335 Opcodes/midiops2.c:375 Opcodes/midiops2.c:406
+#: Opcodes/midiops2.c:456 Opcodes/midiops2.c:490
 msgid "illegal controller number"
 msgstr "numéro de contrôleur illégal"
 
@@ -4687,7 +4694,7 @@ msgstr "---> Toutes les tentatives de connexion ont échoué. \n"
 msgid "--->  Connected. \n"
 msgstr "---> Connecté. \n"
 
-#: OOps/remote.c:261 Opcodes/socksend.c:305
+#: OOps/remote.c:261 Opcodes/socksend.c:300
 msgid "write to socket failed"
 msgstr "l'écriture sur le socket a échoué"
 
@@ -4704,15 +4711,15 @@ msgid "setting socket option to reuse the addresse \n"
 msgstr "réglage de l'option du socket pour réutiliser l'adresse \n"
 
 #: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
-#: Opcodes/socksend.c:284
+#: Opcodes/sockrecv.c:345
 msgid "bind failed"
 msgstr "la liaison a échoué"
 
-#: OOps/remote.c:316 Opcodes/socksend.c:289
+#: OOps/remote.c:316 Opcodes/sockrecv.c:350
 msgid "listen failed"
 msgstr "l'écoute a échoué"
 
-#: OOps/remote.c:321 Opcodes/socksend.c:295
+#: OOps/remote.c:321 Opcodes/sockrecv.c:356
 msgid "accept failed"
 msgstr "l'acceptation a échoué"
 
@@ -4779,7 +4786,7 @@ msgstr ""
 "*** Cette version de Csound n'a pas été compilée avec le support des "
 "évènements distants ***\n"
 
-#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:834
+#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:839
 msgid "Instrument not defined"
 msgstr "Instrument non défini"
 
@@ -4997,8 +5004,6 @@ msgid "oscil(krate): not initialised"
 msgstr "oscil(taux-k) : non initialisé"
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
-#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr "oscil : non initialisé"
 
@@ -5114,7 +5119,7 @@ msgstr "pluck : kcps supérieur au taux d'échantillonnage"
 msgid "Seeding from current time %lu\n"
 msgstr "Graine à partir de l'horloge %lu\n"
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr "valeur illégale de iscl dans reson, %f"
@@ -5302,227 +5307,226 @@ msgstr "reverb : non initialisé"
 msgid "pan: not initialised"
 msgstr "pan : non initialisé"
 
-#: OOps/ugrw1.c:922 OOps/ugrw1.c:1247
+#: OOps/ugrw1.c:922 OOps/ugrw1.c:1234
 #, c-format
 msgid "Table write offset %f < 0 or > tablelength"
 msgstr "Décalage d'écriture dans la table %f < 0 ou > longueur de la table"
 
-#: OOps/ugrw1.c:1242
+#: OOps/ugrw1.c:1229
 #, c-format
 msgid "Table write k rate function table no. %f < 1"
 msgstr "Ecriture de table au taux k, le numéro de la table de fonction %f < 1"
 
-#: OOps/ugrw1.c:1290 OOps/ugrw1.c:1313 OOps/ugrw1.c:1392
+#: OOps/ugrw1.c:1277 OOps/ugrw1.c:1300 OOps/ugrw1.c:1379
 #, c-format
 msgid "Table %f not found"
 msgstr "La table %f n'a pas été trouvée"
 
-#: OOps/ugrw1.c:1469
+#: OOps/ugrw1.c:1456
 #, c-format
 msgid "Table no. < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f\n"
 msgstr "Numéro de table < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f\n"
 
-#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1558 OOps/ugrw1.c:1770 OOps/ugrw1.c:1811
+#: OOps/ugrw1.c:1472 OOps/ugrw1.c:1545 OOps/ugrw1.c:1757 OOps/ugrw1.c:1798
 #, c-format
 msgid "Destination dft table %.2f not found."
 msgstr "La table %.2f de destination de la tfd n'a pas été trouvée"
 
-#: OOps/ugrw1.c:1498 OOps/ugrw1.c:1569
+#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1556
 #, c-format
 msgid "Source 1 s1ft table %.2f not found."
 msgstr "La table %.2f de la source 1 de la s1ft n'a pas été trouvée"
 
-#: OOps/ugrw1.c:1508 OOps/ugrw1.c:1577
+#: OOps/ugrw1.c:1495 OOps/ugrw1.c:1564
 #, c-format
 msgid "Source 2 s2ft table %.2f not found."
 msgstr "La table %.2f de la source 2 de la s2ft n'a pas été trouvée"
 
-#: OOps/ugrw1.c:1543
+#: OOps/ugrw1.c:1530
 #, c-format
 msgid "Table number < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f"
 msgstr "Numéro de table < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f"
 
-#: OOps/ugrw1.c:1758 OOps/ugrw1.c:1800
+#: OOps/ugrw1.c:1745 OOps/ugrw1.c:1787
 #, c-format
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr "Numéro de table < 1 dft=%.2f  sft=%.2f"
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
-#: Opcodes/fareyseq.c:475
+#: OOps/ugrw1.c:1768 OOps/ugrw1.c:1809
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr "La table %.2f de la source sft n'a pas été trouvée"
 
-#: OOps/ugrw1.c:1911 OOps/ugrw1.c:2032
+#: OOps/ugrw1.c:1898 OOps/ugrw1.c:2019
 #, c-format
 msgid "Table kfn=%.2f < 1"
 msgstr "Table kfn=%.2f < 1"
 
-#: OOps/ugrw1.c:1919 OOps/ugrw1.c:2040
+#: OOps/ugrw1.c:1906 OOps/ugrw1.c:2027
 #, c-format
 msgid "kfn table %.2f not found"
 msgstr "La table kfn=%.2f n'a pas été trouvée"
 
-#: OOps/ugrw1.c:1931 OOps/ugrw1.c:2053
+#: OOps/ugrw1.c:1918 OOps/ugrw1.c:2040
 #, c-format
 msgid "Table kfn=%.2f length %ld shorter than ksmps %d"
 msgstr "Table kfn=%.2f, longueur %ld inférieure à ksmps %d"
 
-#: OOps/ugrw1.c:1940 OOps/ugrw1.c:2062
+#: OOps/ugrw1.c:1927 OOps/ugrw1.c:2049
 #, c-format
 msgid "kstart %.2f is outside table %.2f range 0 to %ld"
 msgstr "kstart %.2f est en dehors de la table %.2f, allant de 0 à %ld"
 
-#: OOps/ugrw1.c:2156
+#: OOps/ugrw1.c:2143
 msgid "zakinit should only be called once."
 msgstr "zakinit ne doit être appelé qu'une seule fois."
 
-#: OOps/ugrw1.c:2160
+#: OOps/ugrw1.c:2147
 msgid "zakinit: both isizea and isizek should be > 0."
 msgstr "zakinit : isizea et isizek doivent tous les deux être > 0."
 
-#: OOps/ugrw1.c:2191
+#: OOps/ugrw1.c:2178
 msgid "No zk space: zakinit has not been called yet."
 msgstr "Pas d'espace zk : zakinit n'a pas encore été appelé."
 
-#: OOps/ugrw1.c:2210
+#: OOps/ugrw1.c:2197
 msgid "zkr index > isizek. Returning 0."
 msgstr "index zkr > isizek. 0 est retourné."
 
-#: OOps/ugrw1.c:2214
+#: OOps/ugrw1.c:2201
 msgid "zkr index < 0. Returning 0."
 msgstr "index zkr < 0. 0 est retourné."
 
-#: OOps/ugrw1.c:2242
+#: OOps/ugrw1.c:2229
 msgid "zir index > isizek. Returning 0."
 msgstr "index zir > isizek. 0 est retourné."
 
-#: OOps/ugrw1.c:2246
+#: OOps/ugrw1.c:2233
 msgid "zir index < 0. Returning 0."
 msgstr "index zir < 0. 0 est retourné."
 
-#: OOps/ugrw1.c:2268
+#: OOps/ugrw1.c:2255
 msgid "zkw index > isizek. Not writing."
 msgstr "index zkw > isizek. Pas d'écriture."
 
-#: OOps/ugrw1.c:2271
+#: OOps/ugrw1.c:2258
 msgid "zkw index < 0. Not writing."
 msgstr "index zkw < 0. Pas d'écriture."
 
-#: OOps/ugrw1.c:2296
+#: OOps/ugrw1.c:2283
 msgid "ziw index > isizek. Not writing."
 msgstr "index ziw > isizek. Pas d'écriture."
 
-#: OOps/ugrw1.c:2299
+#: OOps/ugrw1.c:2286
 msgid "ziw index < 0. Not writing."
 msgstr "index ziw < 0. Pas d'écriture."
 
-#: OOps/ugrw1.c:2323
+#: OOps/ugrw1.c:2310
 msgid "zkwm index > isizek. Not writing."
 msgstr "index zkwm > isizek. Pas d'écriture."
 
-#: OOps/ugrw1.c:2326
+#: OOps/ugrw1.c:2313
 msgid "zkwm index < 0. Not writing."
 msgstr "index zkwm < 0. Pas d'écriture."
 
-#: OOps/ugrw1.c:2359
+#: OOps/ugrw1.c:2346
 msgid "ziwm index > isizek. Not writing."
 msgstr "index ziwm > isizek. Pas d'écriture."
 
-#: OOps/ugrw1.c:2362
+#: OOps/ugrw1.c:2349
 msgid "ziwm index < 0. Not writing."
 msgstr "index ziwm < 0. Pas d'écriture."
 
-#: OOps/ugrw1.c:2406
+#: OOps/ugrw1.c:2393
 msgid "zkmod kzkmod > isizek. Not writing."
 msgstr "zkmod : kzkmod > isizek. Pas d'écriture."
 
-#: OOps/ugrw1.c:2432
+#: OOps/ugrw1.c:2419
 msgid "zkcl first or last > isizek. Not clearing."
 msgstr "zkcl : first ou last > isizek. Pas d'effacement."
 
-#: OOps/ugrw1.c:2435
+#: OOps/ugrw1.c:2422
 msgid "zkcl first or last < 0. Not clearing."
 msgstr "zkcl : first ou last < 0. Pas d'effacement."
 
-#: OOps/ugrw1.c:2439
+#: OOps/ugrw1.c:2426
 msgid "zkcl first > last. Not clearing."
 msgstr "zkcl : first > last. Pas d'effacement."
 
-#: OOps/ugrw1.c:2461
+#: OOps/ugrw1.c:2448
 msgid "No za space: zakinit has not been called yet."
 msgstr "Pas d'espace za : zakinit n'a pas encore été appelé."
 
-#: OOps/ugrw1.c:2487
+#: OOps/ugrw1.c:2474
 msgid "zar index > isizea. Returning 0."
 msgstr "zar : index > isizea. 0 est retourné."
 
-#: OOps/ugrw1.c:2491
+#: OOps/ugrw1.c:2478
 msgid "zar index < 0. Returning 0."
 msgstr "zar : index < 0. 0 est retourné."
 
-#: OOps/ugrw1.c:2523
+#: OOps/ugrw1.c:2510
 msgid "zarg index > isizea. Returning 0."
 msgstr "zarg : index > isizea. 0 est retourné."
 
-#: OOps/ugrw1.c:2528
+#: OOps/ugrw1.c:2515
 msgid "zarg index < 0. Returning 0."
 msgstr "zarg : index < 0. 0 est retourné."
 
-#: OOps/ugrw1.c:2559 OOps/ugrw1.c:2590
+#: OOps/ugrw1.c:2546 OOps/ugrw1.c:2577
 msgid "zaw index > isizea. Not writing."
 msgstr "zaw : index > isizea. Pas d'écriture."
 
-#: OOps/ugrw1.c:2562 OOps/ugrw1.c:2593
+#: OOps/ugrw1.c:2549 OOps/ugrw1.c:2580
 msgid "zaw index < 0. Not writing."
 msgstr "zaw : index < 0. Pas d'écriture."
 
-#: OOps/ugrw1.c:2646
+#: OOps/ugrw1.c:2633
 msgid "zamod kzamod > isizea. Not writing."
 msgstr "zamod : kzamod > isizea. Pas d'écriture."
 
-#: OOps/ugrw1.c:2678
+#: OOps/ugrw1.c:2665
 msgid "zacl first or last > isizea. Not clearing."
 msgstr "zacl : first ou last > isizea. Pas d'effacement."
 
-#: OOps/ugrw1.c:2682
+#: OOps/ugrw1.c:2669
 msgid "zacl first or last < 0. Not clearing."
 msgstr "zacl : first ou last < 0. Pas d'effacement."
 
-#: OOps/ugrw1.c:2687
+#: OOps/ugrw1.c:2674
 msgid "zacl first > last. Not clearing."
 msgstr "zacl : first > last. Pas d'effacement."
 
-#: OOps/ugrw1.c:2819
+#: OOps/ugrw1.c:2806
 msgid "printk not initialised"
 msgstr "printk n'est pas initialisé"
 
-#: OOps/ugrw1.c:2837
+#: OOps/ugrw1.c:2824
 #, c-format
 msgid "time %11.5f: "
 msgstr "temps %11.5f :"
 
-#: OOps/ugrw1.c:2898
+#: OOps/ugrw1.c:2885
 msgid "printks param 1 was not a \"quoted string\""
 msgstr "le paramètre 1 de printks n'était pas une \"chaîne entre guillemets\""
 
-#: OOps/ugrw1.c:3114
+#: OOps/ugrw1.c:3101
 msgid "printks not initialised"
 msgstr "printks : non initialisé"
 
-#: OOps/ugrw1.c:3245
+#: OOps/ugrw1.c:3232
 msgid "inz index > isizea. Not writing."
 msgstr "inz : index > isizea. Pas d'écriture."
 
-#: OOps/ugrw1.c:3247
+#: OOps/ugrw1.c:3234
 msgid "inz index < 0. Not writing."
 msgstr "inz : index < 0. Pas d'écriture."
 
-#: OOps/ugrw1.c:3281 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
+#: OOps/ugrw1.c:3268 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
 msgid "outz index > isizea. No output"
 msgstr "outz : index > isizea. Pas de sortie."
 
-#: OOps/ugrw1.c:3283 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
+#: OOps/ugrw1.c:3270 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
 msgid "outz index < 0. No output."
 msgstr "outz : index < 0. Pas de sortie."
 
@@ -5540,45 +5544,45 @@ msgstr "vdelay : non initialisé"
 msgid "vdelay3: not initialised"
 msgstr "vdelay3 : non initialisé"
 
-#: OOps/vdelay.c:736
+#: OOps/vdelay.c:738
 msgid "Wrong input count in multitap\n"
 msgstr "Mauvais nombre d'entrées dans multitap\n"
 
-#: OOps/vdelay.c:779
+#: OOps/vdelay.c:781
 msgid "multitap: not initialised"
 msgstr "multitap : non initialisé"
 
-#: OOps/vdelay.c:899
+#: OOps/vdelay.c:901
 msgid "High frequency diffusion not in (0, 1)\n"
 msgstr "La diffusion de haute fréquence n'est pas dans ]0, 1[\n"
 
-#: OOps/vdelay.c:915
+#: OOps/vdelay.c:917
 #, c-format
 msgid "reverbx; Combs ftable must have %d time and %d gain values"
 msgstr ""
 "reverbx ; la ftable des filtres en peigne doit avoir %d valeurs de temps et "
 "%d valeurs de gain"
 
-#: OOps/vdelay.c:947
+#: OOps/vdelay.c:949
 #, c-format
 msgid "reverbx; Alpas ftable must have %d time and %d gain values"
 msgstr ""
 "reverbx ; la ftable des filtres passe-tout doit avoir %d valeurs de temps et "
 "%d valeurs de gain"
 
-#: OOps/vdelay.c:1058
+#: OOps/vdelay.c:1062
 msgid "High frequency diffusion>1\n"
 msgstr "Diffusion de haute fréquence > 1\n"
 
-#: OOps/vdelay.c:1062
+#: OOps/vdelay.c:1066
 msgid "High frequency diffusion<0\n"
 msgstr "Diffusion de haute fréquence < 0\n"
 
-#: OOps/vdelay.c:1066
+#: OOps/vdelay.c:1070
 msgid "Non positive reverb time\n"
 msgstr "Durée de réverbération non positive\n"
 
-#: OOps/vdelay.c:1124
+#: OOps/vdelay.c:1128
 msgid "reverbx: not initialised"
 msgstr "reverbx : non initialisé"
 
@@ -5586,15 +5590,15 @@ msgstr "reverbx : non initialisé"
 msgid "The numbers of input and output arguments are not valid."
 msgstr "Nombre incorrect d'arguments en entrée et en sortie."
 
-#: Opcodes/ambicode1.c:165
+#: Opcodes/ambicode1.c:167
 msgid "The number of input arguments is not valid."
 msgstr "Nombre incorrect d'arguments en entrée"
 
-#: Opcodes/ambicode1.c:169
+#: Opcodes/ambicode1.c:171
 msgid "The isetup value should be between 1 and 5."
 msgstr "La valeur de isetup doit être comprise entre 1 et 5."
 
-#: Opcodes/ambicode1.c:195
+#: Opcodes/ambicode1.c:197
 msgid "The output channel count does not match the isetup value."
 msgstr "Le nombre de canaux de sortie ne correspond pas à la valeur de isetup."
 
@@ -5665,6 +5669,26 @@ msgstr ""
 "La fréquence la plus basse pour la corde frottée est inconnue -- on suppose "
 "qu'elle vaut 50 Hz\n"
 
+#: Opcodes/cellular.c:49 Opcodes/cellular.c:55
+#, fuzzy
+msgid "cell: invalid num of elements"
+msgstr "cella : nombre d'éléments non valide"
+
+#: Opcodes/cellular.c:51
+#, fuzzy
+msgid "cell: invalid output table"
+msgstr "cella : table de sortie non valide"
+
+#: Opcodes/cellular.c:58
+#, fuzzy
+msgid "cell: invalid initial state table"
+msgstr "cella : table d'état initial non valide"
+
+#: Opcodes/cellular.c:63
+#, fuzzy
+msgid "cell: invalid rule table"
+msgstr "cella : table de règle non valide"
+
 #: Opcodes/clfilt.c:53
 msgid "filter type not lowpass or highpass in clfilt"
 msgstr "Le type de filtre dans clfilt n'est ni passe-bas ni passe-haut"
@@ -5734,12 +5758,12 @@ msgstr "control : échec de l'allocation des variables globales"
 msgid "Closing down wish(%d)\n"
 msgstr "Fermeture de wish(%d)\n"
 
-#: Opcodes/control.c:202
+#: Opcodes/control.c:211
 #, c-format
 msgid "Slider %d set to %s\n"
 msgstr "Réglette %d fixé à %s\n"
 
-#: Opcodes/control.c:207
+#: Opcodes/control.c:216
 #, c-format
 msgid "Unknown control %d"
 msgstr "Contrôle %d inconnu"
@@ -5758,1137 +5782,210 @@ msgstr "La lecture de /proc/stat a échoué"
 msgid "crossfm: ftable not found"
 msgstr "crossfm : table non trouvée"
 
-#: Opcodes/date.c:68
-msgid "dates: buffer overflow"
-msgstr "dates : dépassement de tampon"
-
-#: Opcodes/dssi4cs/src/dssi4cs.c:823
-msgid "DSSI4CS: Not initialised or wrong argument types."
-msgstr "DSSI4CS : non initialisé ou types d'argument incorrects."
-
-#: Opcodes/dssi4cs/src/load.c:120
-#, c-format
-msgid "Failed to load plugin \"%s\": %s"
-msgstr "Le chargement du plugin \"%s\" a échoué : %s"
-
-#: Opcodes/dssi4cs/src/load.c:155
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\": "
-"%s.\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-"Impossible de trouver la fonction ladspa_descriptor() dans le fichier de "
-"bibliothèque de plugin \"%s\" : %s.\n"
-"Etes-vous sûr que c'est un fichier de plugin LADSPA ?"
+#: Opcodes/grain4.c:59
+msgid "granule_set: Unable to find function table"
+msgstr "granule_set : impossible de trouver la table de fonction"
 
-#: Opcodes/dssi4cs/src/load.c:161
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\".\n"
-"Are you sure this is a LADSPA plugin file ?"
+#: Opcodes/grain4.c:69
+msgid "granule_set: Unable to find function table for envelope"
 msgstr ""
-"Impossible de trouver la fonction ladspa_descriptor() dans le fichier de "
-"bibliothèque de plugin \"%s\".\n"
-"Etes-vous sûr que c'est un fichier de plugin LADSPA ?"
+"granule_set : impossible de trouver la table de fonction pour l'enveloppe"
 
-#: Opcodes/dssi4cs/src/load.c:176
-#, c-format
-msgid "Unable to find label \"%s\" in plugin library file \"%s\"."
-msgstr ""
-"Impossible de trouver l'étiquette \"%s\" dans le fichier de bibliothèque de "
-"plugin \"%s\"."
+#: Opcodes/grain4.c:75
+msgid "granule_set: Too many voices"
+msgstr "granule_set : trop de voix"
 
-#: Opcodes/fareygen.c:140
-msgid "insufficient arguments for fareytable"
-msgstr "arguments insuffisants pour une table de Farey"
+#: Opcodes/grain4.c:78
+msgid "granule_set: iratio must be greater then 0"
+msgstr "granule_set : iratio doit être supérieur à 0"
 
-#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
-#, c-format
-msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
-msgstr "Farey : No de table < 1 dft=%.2f  sft=%.2f"
+#: Opcodes/grain4.c:82
+msgid "granule_set: imode must be -1, 0 or +1"
+msgstr "granule_set : imode doit valoir -1, 0 ou +1"
 
-#: Opcodes/fareyseq.c:256
-#, c-format
-msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
-msgstr "Farey : Type de filtre < 1 dft=%.2f  sft=%.2f"
+#: Opcodes/grain4.c:86
+msgid "granule_set: Illegal ithd, must be greater than zero"
+msgstr "granule_set : ithd illégal, doit être supérieur à zéro"
 
-#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
-#, c-format
-msgid "Farey: Destination dft table %.2f not found."
-msgstr "Farey : Table dft de destination %.2f introuvable"
+#: Opcodes/grain4.c:91
+msgid "granule_set: ipshift must be integer between 0 and 4"
+msgstr "granule_set : ipshift doit être un entier entre 0 et 4"
 
-#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
-#, c-format
-msgid "Farey: Source sft table %.2f not found."
-msgstr "Farey : Table sft source %.2f introuvable"
+#: Opcodes/grain4.c:96
+msgid "granule_set: Not enough voices for the number of pitches"
+msgstr "granule_set : pas assez de voix pour le nombre de hauteurs"
 
-#: Opcodes/fareyseq.c:306
-msgid "Farey: Filter type < 1"
-msgstr "Farey : Type de filtre < 1"
+#: Opcodes/grain4.c:103
+msgid "granule_set: ipitch1 must be greater then zero"
+msgstr "granule_set : ipitch1 doit être supérieur à zéro"
 
-#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
-#, c-format
-msgid "Table no. < 1 sft=%.2f"
-msgstr "Numéro de table < 1 sft=%.2f"
+#: Opcodes/grain4.c:108
+msgid "granule_set: ipitch2 must be greater then zero"
+msgstr "granule_set : ipitch2 doit être supérieur à zéro"
 
-#: Opcodes/filter.c:187 Opcodes/filter.c:225
-msgid "Filter order out of bounds: (1 <= nb < 51, 0 <= na <= 50)"
-msgstr "Ordre du filtre hors limites : (1 <= nb < 51, 0 <= na <= 50)"
+#: Opcodes/grain4.c:113
+msgid "granule_set: ipitch3 must be greater then zero"
+msgstr "granule_set : ipitch3 doit être supérieur à zéro"
 
-#: Opcodes/filter.c:672
-msgid "too many iterations in laguer"
-msgstr "trop d'itérations dans laguer"
+#: Opcodes/grain4.c:118
+msgid "granule_set: ipitch4 must be greater then zero"
+msgstr "granule_set : ipitch4 doit être supérieur à zéro"
 
-#: Opcodes/flanger.c:188
-msgid "wguide2 xfreq1 and xfreq2 arguments must be both a-rate or k and i-rate"
+#: Opcodes/grain4.c:123
+msgid "granule_set: must be positive and less than function table length"
 msgstr ""
-"wguide2 : les arguments xfreq1 et xfreq2 doivent être tous les deux de taux-"
-"a ou de taux-k et i"
+"granule_set : doit être positif et inférieur à la longueur de la table de "
+"fonction"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:195
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:149
-msgid "error allocating fluid engine\n"
-msgstr "erreur à l'allocation du moteur fluid\n"
+#: Opcodes/grain4.c:127
+msgid "granule_set: igskip_os must be greater then 0"
+msgstr "granule_set : igskip_os doit être supérieur à 0"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:203
-#, c-format
-msgid ""
-"Created fluidEngine %d with sampling rate = %f, chorus %s, reverb %s, "
-"channels %d, polyphony %d.\n"
-msgstr ""
-"fluidEngine %d a été crée avec un taux d'échantillonnage = %f, chorus %s, "
-"reverb %s, canaux %d, polyphonie %d.\n"
+#: Opcodes/grain4.c:136
+msgid "granule_set: kgap must be greater then 0"
+msgstr "granule_set : kgap doit être supérieur à 0"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:230
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:392
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:553
+#: Opcodes/grain4.c:140
 #, c-format
-msgid "Illegal Engine Number: %i.\n"
-msgstr "Numéro de moteur illégal : %i.\n"
+msgid "granule_set: igap_os must be 0%% to 100%%"
+msgstr "granule_set : igap_os doit être entre 0%% et 100%%"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:238
-#, c-format
-msgid "Loading SoundFont : %s.\n"
-msgstr "Chargement de SoundFont : %s.\n"
+#: Opcodes/grain4.c:144
+msgid "granule_set: kgsize must be greater then 0"
+msgstr "granule_set : kgsize doit être supérieur à 0"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:244
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:208
+#: Opcodes/grain4.c:148
 #, c-format
-msgid "fluid: unable to load %s"
-msgstr "fluid : impossible d'ouvrir le fichier %s"
+msgid "granule_set: igsize_os must be 0%% to 100%%"
+msgstr "granule_set : igsize_os doit être entre 0%% et 100%%"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:262
-#, c-format
-msgid "SoundFont: %3d  Bank: %3d  Preset: %3d  %s\n"
-msgstr "SoundFont : %3d  Banque : %3d  Preset : %3d  %s\n"
+#: Opcodes/grain4.c:154
+msgid "granule_set: Illegal value of iatt and/or idec"
+msgstr "granule_set : valeur illégale de iatt et/ou de idec"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:483
-#, c-format
-msgid ""
-"result: %d \n"
-" Note off: c:%3d k:%3d\n"
-msgstr ""
-"résultat : %d \n"
-" Note off : c:%3d k:%3d\n"
+#: Opcodes/grain4.c:238
+msgid "granule_set: Illegal combination of igskip and ilength"
+msgstr "granule_set : combinaison illégale de igskip et de ilength"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:491
+#: Opcodes/grain4.c:245
 #, c-format
 msgid ""
-"result: %d \n"
-"Note on: c:%3d k:%3d v:%3d\n"
+"granule_set: WARNING * ilength may be too short * \n"
+"            ilength should be greater than kgsize * max up\n"
+"            pitch shift. Also, igsize_os and igskip_os should\n"
+"            be taken into consideration.\n"
+"ilength is %f Sec, kgsize is %f Sec\n"
 msgstr ""
-"résultat : %d \n"
-" Note on : c:%3d k:%3d v:%3d\n"
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:496
-#, c-format
-msgid "Key pressure (not handled): c:%3d k:%3d v:%3d\n"
-msgstr "Pression de touche (non traitée) : c:%3d k:%3d v:%3d\n"
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:504
-#, c-format
-msgid "Result: %d Control change: c:%3d c:%3d v:%3d\n"
-msgstr "Résultat : %d Changement de contrôle : c:%3d c:%3d v:%3d\n"
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:511
-#, c-format
-msgid "Result: %d Program change: c:%3d p:%3d\n"
-msgstr "Résultat : %d Changement de programme : c:%3d p:%3d\n"
+"granule_set : AVERTISSEMENT * ilength est peut être trop courte * \n"
+"              ilength doit être supérieure à kgsize * max de la\n"
+"              transposition de hauteur vers le haut. Il faut aussi\n"
+"              prendre en considération igsize_os et igskip_os.\n"
+"ilength vaut %f sec, kgsize vaut %f sec\n"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:524
-#, c-format
-msgid "Result: %d, Pitch bend:     c:%d b:%d\n"
-msgstr "Résultat : %d, Pitch bend :     c:%d b:%d\n"
+#: Opcodes/grain4.c:419
+msgid "grain4: not initialised"
+msgstr "grain4 : non initialisé"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:530
-#, c-format
-msgid "System exclusive (not handled): c:%3d v1:%3d v2:%3d\n"
-msgstr "Système exclusif (non traité) : c:%3d v1:%3d v2:%3d\n"
+#: Opcodes/grain.c:92
+msgid "grain: grain length zero"
+msgstr "grain : densité de grain non valide"
 
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:562
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:577
-msgid "Illegal Interpolation Method: Must be either 0, 1, 4, or 7.\n"
-msgstr "Méthode d'interpolation illégale : doit valoir 0, 1, 4 ou 7.\n"
+#: Opcodes/grain.c:152
+msgid "grain: not initialised"
+msgstr "grain : non initialisé"
 
-#: Opcodes/fm4op.c:165
-msgid "No table for VibWaveato"
-msgstr "Pas de table pour VibWaveato"
+#: Opcodes/harmon.c:226
+msgid "harm signal has positive lead\n"
+msgstr "le signal de l'harmonizer a une conduite positive\n"
 
-#: Opcodes/fm4op.c:184
-msgid "No table for FM4Op"
-msgstr "Pas de table pour FM40p"
+#: Opcodes/harmon.c:233
+msgid "harm signal has negative lead\n"
+msgstr "le signal de l'harmonizer a une conduite négative\n"
 
-#: Opcodes/follow.c:38
-msgid "follow - zero length!"
-msgstr "follow - longueur nulle !"
+#: Opcodes/harmon.c:363
+msgid "harmon234: out of range\n"
+msgstr "harmon234 : hors limites\n"
 
-#: Opcodes/fout.c:60
+#: Opcodes/hrtferX.c:81
 #, c-format
-msgid "Closing file '%s'...\n"
-msgstr "Fermeture du fichier '%s'...\n"
-
-#: Opcodes/fout.c:102
-msgid "invalid file handle"
-msgstr "descripteur de fichier non valide"
-
-#: Opcodes/fout.c:109 Opcodes/fout.c:421
-msgid "invalid file name"
-msgstr "nom de fichier non valide"
+msgid ""
+"Orchestra sampling rate is not compatible with HRTF.\n"
+"Should be %d...exiting."
+msgstr ""
+"Le taux d'évhantillonnage de l'orchestre n'est pas compatible avec HRTF.\n"
+"Il devrait valoir %d... fin du traitement."
 
-#: Opcodes/fout.c:166
-#, c-format
-msgid "error opening file '%s'"
-msgstr "erreur en ouvrant le fichier '%s'"
+#: Opcodes/hrtferX.c:89
+msgid ""
+"\n"
+"Last argument must be the string 'HRTFcompact' ...correcting.\n"
+msgstr ""
+"\n"
+"Le dernier argument doit être la chaîne 'HRTFcompact' ... correction.\n"
 
-#: Opcodes/fout.c:193
-#, c-format
-msgid "error opening sound file '%s'"
-msgstr "erreur en ouvrant le fichier son '%s'"
+#: Opcodes/hrtferX.c:494
+msgid "hrtfer: not initialised"
+msgstr "hrtfer : non initialisé"
 
-#: Opcodes/fout.c:430
+#: Opcodes/hrtfopcodes.c:260 Opcodes/hrtfopcodes.c:1434
+#: Opcodes/hrtfearly.c:300 Opcodes/hrtfreverb.c:257
 #, c-format
-msgid "cannot close '%s': not found in list of open files"
+msgid ""
+"\n"
+"\n"
+"WARNING!!:\n"
+"Orchestra SR not compatible with HRTF processing SR of: %.0f\n"
+"\n"
 msgstr ""
-"impossible de fermet '%s' : il n'a pas été trouvé dans la liste des fichiers "
-"ouverts"
+"\n"
+"\n"
+"AVERTISSEMENT !! :\n"
+"SR de l'orchestre incompatible avec le SR du traitement HRTF de : %.0f\n"
+"\n"
 
-#: Opcodes/fout.c:441
-#, c-format
-msgid "cannot close file #%d: not a valid handle"
+#: Opcodes/hrtfopcodes.c:287 Opcodes/hrtfopcodes.c:1461
+#: Opcodes/hrtfopcodes.c:2071 Opcodes/hrtfearly.c:327 Opcodes/hrtfreverb.c:300
+msgid ""
+"\n"
+"\n"
+"\n"
+"Cannot load left data file, exiting\n"
+"\n"
 msgstr ""
-"impossible de fermer le fichier #%d : ce n'est pas un descripteur valide"
-
-#: Opcodes/fout.c:448
-#, c-format
-msgid "file #%d (%s) is in use, will be closed when released"
-msgstr "le fichier #%d (%s) est utilisé, il sera fermé à sa libération"
-
-#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
-msgid "fouti: invalid file handle"
-msgstr "fouti : descripteur de fichier non valide"
-
-#: Opcodes/freeverb.c:258
-msgid "freeverb: not initialised"
-msgstr "freeverb : non initialisé"
-
-#: Opcodes/ftconv.c:156
-msgid "ftconv: invalid number of channels"
-msgstr "ftconv : nombre de canaux non valide"
-
-#: Opcodes/ftconv.c:161
-msgid "ftconv: invalid impulse response partition length"
-msgstr "ftconv : longueur de partition de la réponse impulsionnelle non valide"
+"\n"
+"\n"
+"\n"
+"impossible de charger le fichier des données de gauche, abandon\n"
+"\n"
 
-#: Opcodes/ftconv.c:175
-msgid "ftconv: invalid length, or insufficient IR data for convolution"
+#: Opcodes/hrtfopcodes.c:294 Opcodes/hrtfopcodes.c:1468
+#: Opcodes/hrtfopcodes.c:2078 Opcodes/hrtfearly.c:334 Opcodes/hrtfreverb.c:306
+msgid ""
+"\n"
+"\n"
+"\n"
+"Cannot load right data file, exiting\n"
+"\n"
 msgstr ""
-"ftconv : longueur non valide, ou pas assez de données de RI pour la "
-"convolution"
+"\n"
+"\n"
+"\n"
+"impossible de charger le fichier des données de droite, abandon\n"
+"\n"
 
-#: Opcodes/ftconv.c:193
-msgid "ftconv: skipped non-zero samples, impulse response may be truncated\n"
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1259
+msgid ""
+"\n"
+"WARNING: fades are overlapping: this could lead to noise: reduce fade size "
+"or change trajectory\n"
+"\n"
 msgstr ""
-"ftconv : des échantillons non nuls ont été sautés, la réponse impulsionnelle "
-"est peut-être tronquée\n"
-
-#: Opcodes/ftconv.c:289
-msgid "ftconv: not initialised"
-msgstr "ftconv : non initialisé"
-
-#: Opcodes/ftgen.c:69 Opcodes/ftgen.c:182
-#, c-format
-msgid "Error deleting ftable %d"
-msgstr "Erreur en supprimant la ftable %d"
-
-#: Opcodes/ftgen.c:136 Opcodes/signalflowgraph.cpp:895
-msgid "ftgen string arg not allowed"
-msgstr "ftgen : argument chaîne interdit"
-
-#: Opcodes/ftgen.c:155 Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
-msgid "ftgen error"
-msgstr "erreur de ftgen"
+"\n"
+"AVERTISSEMENT : les fondus se chevauchent : ceci peut provoquer du bruit : "
+"réduisez la taille des fondus ou changez la trajectoire\n"
+"\n"
 
-#: Opcodes/ftgen.c:179
-#, c-format
-msgid "Invalid table number: %d"
-msgstr "Numéro de table non valide : %d"
-
-#: Opcodes/ftgen.c:347
-msgid "ftload: error allocating ftable"
-msgstr "ftload : erreur d'allocation de la ftable"
-
-#: Opcodes/ftgen.c:349
-msgid "ftload: no table numbers"
-msgstr "ftload : pas de numéro de table"
-
-#: Opcodes/ftgen.c:351
-msgid "ftload: unable to open file"
-msgstr "ftload : impossible d'ouvrir le fichier"
-
-#: Opcodes/ftgen.c:354
-msgid "ftload: incorrect file"
-msgstr "ftload : fichier incorrect"
-
-#: Opcodes/ftgen.c:467
-msgid "ftsave: Bad table number. Saving is possible only for existing tables."
-msgstr ""
-"ftsave : mauvais numéro de table. La sauvegarde n'est possible que pour des "
-"tables existantes."
-
-#: Opcodes/ftgen.c:470
-msgid "ftsave: no table numbers"
-msgstr "ftsave : pas de numéros de table"
-
-#: Opcodes/ftgen.c:472
-msgid "ftsave: unable to open file"
-msgstr "ftsave : impossible d'ouvrir le fichier"
-
-#: Opcodes/ftgen.c:474
-msgid "ftsave: failed to write file"
-msgstr "ftsave : impossible d'ouvrir le fichier"
-
-#: Opcodes/gab/gab.c:111
-msgid "fastab: incorrect table number"
-msgstr "fastab : numéro de table incorrect"
-
-#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
-msgid "tabw off end"
-msgstr "tabw hors-limite"
-
-#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
-msgid "tab off end"
-msgstr "tab hors-limite"
-
-#: Opcodes/gab/gab.c:185
-msgid "tab_i: incorrect table number"
-msgstr "tab_i : numéro de table incorrect"
-
-#: Opcodes/gab/gab.c:192
-#, c-format
-msgid "tab_i off end: table number: %d\n"
-msgstr "tab_i hors-limite : numéro de table : %d\n"
-
-#: Opcodes/gab/gab.c:204
-msgid "tabw_i: incorrect table number"
-msgstr "tabw_i : numéro de table incorrect"
-
-#: Opcodes/gab/gab.c:211
-msgid "tabw_i off end"
-msgstr "tabw_i hors-limite"
-
-#: Opcodes/gab/gab.c:249
-msgid "tab_init: incorrect table number"
-msgstr "tab_init : numéro de table incorrect"
-
-#: Opcodes/gab/gab.c:318
-msgid "printi parameter was not a \"quoted string\""
-msgstr "printi : le paramètre n'était pas une \"chaîne entre guillemets\""
-
-#: Opcodes/gab/gab.c:425
-msgid "adsynt2: wavetable not found!"
-msgstr "adsynt2 : la table d'onde n'a pas été trouvée !"
-
-#: Opcodes/gab/gab.c:437
-msgid "adsynt2: freqtable not found!"
-msgstr "adsynt2 : la table de fréq n'a pas été trouvée !"
-
-#: Opcodes/gab/gab.c:442
-msgid "adsynt2: partial count is greater than freqtable size!"
-msgstr ""
-"adsynt2 : le nombre de partiels est supérieur à la taille de la table de "
-"fréq !"
-
-#: Opcodes/gab/gab.c:451
-msgid "adsynt2: amptable not found!"
-msgstr "adsynt2 : la table d'amp n'a pas été trouvée !"
-
-#: Opcodes/gab/gab.c:456
-msgid "adsynt2: partial count is greater than amptable size!"
-msgstr ""
-"adsynt2 : le nombre de partiels est supérieur à la taille de la table d'amp !"
-
-#: Opcodes/gab/gab.c:501
-msgid "adsynt2: not initialised"
-msgstr "adsynt2 : non initialisé"
-
-#: Opcodes/gab/gab.c:743
-msgid "max_k: invalid imaxflag value"
-msgstr "max_k : valeur de imaxflag non valide"
-
-#: Opcodes/gab/hvs.c:70
-msgid "hvs1: a line segment must be delimited by 2 points at least"
-msgstr "hvs1 : un segment de droite doit être délimité par 2 points au moins"
-
-#: Opcodes/gab/hvs.c:152
-msgid "hvs2: a square area must be delimited by 2 lines at least"
-msgstr "hvs2 : une surface carrée doit être délimitée par 2 droites au moins"
-
-#: Opcodes/gab/hvs.c:248
-msgid "hvs3: a square area must be delimited by 2 lines at least"
-msgstr "hvs3 : une surface carrée doit être délimitée par 2 droites au moins"
-
-#: Opcodes/gab/hvs.c:390
-msgid "vphaseseg: the first function is invalid or missing"
-msgstr "vphaseseg : la première fonction est non valide ou manquante"
-
-#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
-msgid "vphaseseg: invalid num. of elements"
-msgstr "vphaseseg : nombre d'éléments non valide"
-
-#: Opcodes/gab/hvs.c:416
-msgid "vphaseseg: function invalid or missing"
-msgstr "vphaseseg : fonction non valide ou manquante"
-
-#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
-msgid "vtable1: incorrect table number"
-msgstr "vtable1 : numéro de table incorrect"
-
-#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
-msgid "copyTabElems: incorrect destination table number"
-msgstr "copyTabElems : numéro de table incorrect"
-
-#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
-msgid ""
-"copyTabElems: destination table too short or number of elements to copy too "
-"big"
-msgstr ""
-"copyTabElems : table de destination trop courte ou nombre d'éléments à copier "
-"trop grand"
-
-#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
-msgid "copyTabElems: incorrect source table number"
-msgstr "copyTabElems : numéro de table source incorrect"
-
-#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
-msgid ""
-"copyTabElems: source table size less than the number of elements to copy"
-msgstr ""
-"copyTabElems : taille de la table source inférieure au nombre d'éléments "
-"à copier"
-
-#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
-msgid "copyTabElems: source table too short"
-msgstr "copyTabElems : table source trop courte"
-
-#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
-msgid "copyTabElems: destination table too short"
-msgstr "copyTabElems : table de destination trop courte"
-
-#: Opcodes/gab/newgabopc.c:347
-msgid "inrg: audio input is not enabled"
-msgstr "inrg : entrée audio désactivée"
-
-#: Opcodes/gab/newgabopc.c:362
-msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-"inrg : le numéro de canal ne peut pas être < 1 (1 est le premier canal)"
-
-#: Opcodes/gab/newgabopc.c:403
-msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-"outrg : le numéro de canal ne peut pas être < 1 (1 est le premier canal)"
-
-#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
-#: Opcodes/gab/newgabopc.c:672
-msgid "invalid function"
-msgstr "fonction non valide"
-
-#: Opcodes/gab/newgabopc.c:443
-msgid "lposc: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-"lposc : pas de taux d'échantillonnage dans la fonction ; on suppose = sr\n"
-
-#: Opcodes/gab/newgabopc.c:577
-msgid "lposcil: no sample rate stored in function assuming=sr\n"
-msgstr ""
-"lposcil : pas de taux d'échantillonnage dans la fonction ; on suppose = sr\n"
-
-#: Opcodes/gab/newgabopc.c:674
-msgid "lposcil: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-"lposcil : pas de taux d'échantillonnage dans la fonction ; on suppose = sr\n"
-
-#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
-#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
-#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
-msgid "illegal channel"
-msgstr "canal illégal"
-
-#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
-#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
-#, c-format
-msgid "illegal control number at position n.%d"
-msgstr "numéro de contrôle illégal à la position n.%d"
-
-#: Opcodes/gab/sliderTable.c:76
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d.  When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-"sliderXtable : valeur d'initialisation illégale à la position %d. Lorsque "
-"l'on utilise une indexation de table, l'intervalle d'initialisation va de 0 "
-"à 1"
-
-#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
-#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
-#: Opcodes/midiops3.c:347
-#, c-format
-msgid "illegal initvalue at position n.%d"
-msgstr "valeur d'initialisation illégale à la position n.%d"
-
-#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
-msgid "sliderXtable: zero is illegal in exponential operations"
-msgstr "sliderXtable : zéro est illégal dans les opérations exponentielles"
-
-#: Opcodes/gab/sliderTable.c:315
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d. When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-"sliderXtable : valeur d'initialisation illégale à la position %d. Lorsque "
-"l'on utilise une indexation de table, l'intervalle d'initialisation va de 0 "
-"à 1"
-
-#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
-#: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
-#: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
-msgid "illegal midi channel"
-msgstr "canal midi illégal"
-
-#: Opcodes/gab/tabmorph.c:43
-msgid "tabmorph: invalid table number"
-msgstr "tabmorph : numéro de table non valide"
-
-#: Opcodes/gab/tabmorph.c:47
-msgid "tabmorph: all tables must have the same length!"
-msgstr "tabmorph : toutes les tables doivent avoir la même longueur !"
-
-#: Opcodes/gab/vectorial.c:35
-msgid "mtablei: incorrect table number"
-msgstr "mtablei : numéro de table incorrect"
-
-#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
-#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
-msgid "mtable: incorrect table number"
-msgstr "mtable : numéro de table incorrect"
-
-#: Opcodes/gab/vectorial.c:187
-msgid "mtabi: incorrect table number"
-msgstr "mtabi : numéro de table incorrect"
-
-#: Opcodes/gab/vectorial.c:254
-msgid "mtablewi: incorrect table number"
-msgstr "mtablewi : numéro de table incorrect"
-
-#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
-#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
-#: Opcodes/gab/vectorial.c:408
-msgid "mtabw: incorrect table number"
-msgstr "mtabw : numéro de table incorrect"
-
-#: Opcodes/gab/vectorial.c:350
-msgid "mtabwi: incorrect table number"
-msgstr "mtabwi : numéro de table incorrect"
-
-#: Opcodes/gab/vectorial.c:382
-msgid "mtablew: incorrect table number"
-msgstr "mtablew : numéro de table incorrect"
-
-#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
-#, c-format
-msgid "vadd_i: invalid table number %i"
-msgstr "vadd_i : numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:473
-msgid "vadd_i: ifn length exceeded"
-msgstr "vadd_i : la longueur de ifn a été dépassée"
-
-#: Opcodes/gab/vectorial.c:500
-msgid "vadd: ifn1 length exceeded"
-msgstr "vadd : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:532
-msgid "vmult_i: ifn length exceeded"
-msgstr "vmult_i : la longueur de ifn a été dépassée"
-
-#: Opcodes/gab/vectorial.c:559
-msgid "vmult: ifn1 length exceeded"
-msgstr "vmult : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:575
-#, c-format
-msgid "vpow_i: invalid table number %i"
-msgstr "vpow_i : numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:592
-msgid "vpow_i: ifn length exceeded"
-msgstr "vpow_i : la longueur de ifn a été dépassée"
-
-#: Opcodes/gab/vectorial.c:620
-msgid "vpow: ifn1 length exceeded"
-msgstr "vpow : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:636
-#, c-format
-msgid "vexp_i: invalid table number %i"
-msgstr "vexp_i : numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:652
-msgid "vexp_i: ifn length exceeded"
-msgstr "vexp_i : la longueur de ifn a été dépassée"
-
-#: Opcodes/gab/vectorial.c:679
-msgid "vexp: ifn1 length exceeded"
-msgstr "vexp : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:697
-#, c-format
-msgid "vectorsop: ifn1 invalid table number %i"
-msgstr "vectorsop : ifn1 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:702
-#, c-format
-msgid "vectorsop: ifn2 invalid table number %i"
-msgstr "vectorsop : ifn2 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:742
-msgid "vcopy: ifn1 length exceeded"
-msgstr "vcopy : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:760
-msgid "vcopy: ifn2 length exceeded"
-msgstr "vcopy : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:787
-#, c-format
-msgid "vcopy_i: ifn1 invalid table number %i"
-msgstr "vcopy_i : ifn1 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:792
-#, c-format
-msgid "vcopy_i: ifn2 invalid table number %i"
-msgstr "vcopy_i : ifn2 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:814
-msgid "vcopy_i: ifn1 length exceeded"
-msgstr "vcopy_i : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:831
-msgid "vcopy_i: ifn2 length exceeded"
-msgstr "vcopy_i : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:870
-msgid "vaddv: ifn1 length exceeded"
-msgstr "vaddv : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:889
-msgid "vaddv: ifn2 length exceeded"
-msgstr "vaddv : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:915
-#, c-format
-msgid "vaddv_i: ifn1 invalid table number %i"
-msgstr "vaddv_i : ifn1 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:920
-#, c-format
-msgid "vaddv_i: ifn2 invalid table number %i"
-msgstr "vaddv_i : ifn2 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:942
-msgid "vaddv_i: ifn1 length exceeded"
-msgstr "vaddv_i : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:960
-msgid "vaddv_i: ifn2 length exceeded"
-msgstr "vaddv_i : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:991
-msgid "vsubv: ifn1 length exceeded"
-msgstr "vsubv :  la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1010
-msgid "vsubv: ifn2 length exceeded"
-msgstr "vsubv : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1037
-#, c-format
-msgid "vsubv_i: ifn1 invalid table number %i"
-msgstr "vsubv_i : ifn1 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1042
-#, c-format
-msgid "vsubv_i: ifn2 invalid table number %i"
-msgstr "vsubv_i : ifn2 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1064
-msgid "vsubv_i: ifn1 length exceeded"
-msgstr "vsubv_i : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1082
-msgid "vsubv_i: ifn2 length exceeded"
-msgstr "vsubv_i : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1119
-msgid "vmultv: ifn1 length exceeded"
-msgstr "vmultv : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1138
-msgid "vmultv: ifn2 length exceeded"
-msgstr "vmultv : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1165
-#, c-format
-msgid "vmultv_i: ifn1 invalid table number %i"
-msgstr "vmultv_i : ifn1 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1170
-#, c-format
-msgid "vmultv_i: ifn2 invalid table number %i"
-msgstr "vmultv_i : ifn2 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1192
-msgid "vmultv_i: ifn1 length exceeded"
-msgstr "vmultv_i : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1209
-msgid "vmultv_i: ifn2 length exceeded"
-msgstr "vmultv_i : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1246
-msgid "vdivv: ifn1 length exceeded"
-msgstr "vdivv : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1265
-msgid "vdivv: ifn2 length exceeded"
-msgstr "vdivv : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1292
-#, c-format
-msgid "vdivv_i: ifn1 invalid table number %i"
-msgstr "vdivv_i : ifn1 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1297
-#, c-format
-msgid "vdivv_i: ifn2 invalid table number %i"
-msgstr "vdivv_i : ifn2 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1319
-msgid "vdivv_i: ifn1 length exceeded"
-msgstr "vdivv_i : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1337
-msgid "vdivv_i: ifn2 length exceeded"
-msgstr "vdivv_i : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1374
-msgid "vpowv: ifn1 length exceeded"
-msgstr "vpowv : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1393
-msgid "vpowv: ifn2 length exceeded"
-msgstr "vpowv : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1420
-#, c-format
-msgid "vpowv_i: ifn1 invalid table number %i"
-msgstr "vpowv_i : ifn1 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1425
-#, c-format
-msgid "vpowv_i: ifn2 invalid table number %i"
-msgstr "vpowv_i : ifn2 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1447
-msgid "vpowv_i: ifn1 length exceeded"
-msgstr "vpowv_i : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1464
-msgid "vpowv_i: ifn2 length exceeded"
-msgstr "vpowv_i : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1501
-msgid "vexpv: ifn1 length exceeded"
-msgstr "vexpv : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1520
-msgid "vexpv: ifn2 length exceeded"
-msgstr "vexpv : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1547
-#, c-format
-msgid "vexpv_i: ifn1 invalid table number %i"
-msgstr "vexpv_i : ifn1 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1552
-#, c-format
-msgid "vexpv_i: ifn2 invalid table number %i"
-msgstr "vexpv_i : ifn2 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1574
-msgid "vexpv_i: ifn1 length exceeded"
-msgstr "vexpv_i : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1592
-msgid "vexpv_i: ifn2 length exceeded"
-msgstr "vexpv_i : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1629
-msgid "vmap: Error: ifn1 and ifn2 can not be the same"
-msgstr "vmap : Erreur : ifn1 et ifn2 ne peuvent pas être les mêmes"
-
-#: Opcodes/gab/vectorial.c:1634
-#, c-format
-msgid "vmap: ifn1 invalid table number %i"
-msgstr "vmap : ifn1 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1639
-#, c-format
-msgid "vmap: ifn2 invalid table number %i"
-msgstr "vmap : ifn2 numéro de table %i non valide"
-
-#: Opcodes/gab/vectorial.c:1661
-msgid "vmap: ifn1 length exceeded"
-msgstr "vmap : la longueur de ifn1 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1678
-msgid "vmap: ifn2 length exceeded"
-msgstr "vmap : la longueur de ifn2 a été dépassée"
-
-#: Opcodes/gab/vectorial.c:1698
-msgid "vectorop: invalid num of elements"
-msgstr "vectorop : nombre d'éléments non valide"
-
-#: Opcodes/gab/vectorial.c:1727
-msgid "vport: invalid table length or num of elements"
-msgstr "vport : longueur de table ou nombre d'éléments non valides"
-
-#: Opcodes/gab/vectorial.c:1730
-msgid "vport: invalid table"
-msgstr "vport : table non valide"
-
-#: Opcodes/gab/vectorial.c:1735
-msgid "vport: invalid init table length or num of elements"
-msgstr "vport : longueur de table init ou nombre d'éléments non valides"
-
-#: Opcodes/gab/vectorial.c:1738
-msgid "vport: invalid init table"
-msgstr "vport : table non valide"
-
-#: Opcodes/gab/vectorial.c:1875
-#, c-format
-msgid "vrandh: Seeding from current time %lu\n"
-msgstr "vrandh : graine à partir de l'horloge %lu\n"
-
-#: Opcodes/gab/vectorial.c:1888
-msgid "vrandh: Invalid table."
-msgstr "vrandh : table non valide."
-
-#: Opcodes/gab/vectorial.c:1891
-msgid "vrandh: idstoffset is greater than table length."
-msgstr "vrandh : idstoffset est supérieur à la longueur de la table."
-
-#: Opcodes/gab/vectorial.c:1896
-msgid "randh: Table length exceeded, last elements discarded."
-msgstr "randh : longeur de la table dépassée, derniers éléments ignoré."
-
-#: Opcodes/gab/vectorial.c:1975
-#, c-format
-msgid "vrandi: Seeding from current time %lu\n"
-msgstr "vrandi : graine à partir de l'horloge %lu\n"
-
-#: Opcodes/gab/vectorial.c:1987
-msgid "vrandi: Invalid table."
-msgstr "vrandi : table non valide."
-
-#: Opcodes/gab/vectorial.c:1990
-msgid "vrandi: idstoffset is greater thantable length."
-msgstr "vrandi : idstoffset est supérieur à la longueur de la table."
-
-#: Opcodes/gab/vectorial.c:1995
-msgid "vrandi: Table length exceeded, last elements discarded."
-msgstr "vrandi : longueur de la table dépassée, derniers éléments ignorés."
-
-#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
-#: Opcodes/gab/vectorial.c:2091
-msgid "vecdelay: invalid num of elements"
-msgstr "vecdelay : nombre d'éléments non valide"
-
-#: Opcodes/gab/vectorial.c:2079
-msgid "vecdly: invalid output table"
-msgstr "vecdly : table de sortie non valide"
-
-#: Opcodes/gab/vectorial.c:2086
-msgid "vecdly: invalid input table"
-msgstr "vecdly : table d'entrée non valide"
-
-#: Opcodes/gab/vectorial.c:2093
-msgid "vecdly: invalid delay table"
-msgstr "vecdly : table de délai non valide"
-
-#: Opcodes/gab/vectorial.c:2138
-msgid "vecdly: not initialised"
-msgstr "vecdly : non initialisé"
-
-#: Opcodes/gab/vectorial.c:2181
-msgid "vlinseg/vexpseg: invalid num. of elements"
-msgstr "vlinseg/vexpseg : nombre d'éléments non valide"
-
-#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr "tableseg : non initialisé"
-
-#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr "tablexseg : non initialisé"
-
-#: Opcodes/gab/vectorial.c:2406
-msgid "vdelayk: not initialised"
-msgstr "vdelayk : non initialisé"
-
-#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
-msgid "cella: invalid num of elements"
-msgstr "cella : nombre d'éléments non valide"
-
-#: Opcodes/gab/vectorial.c:2441
-msgid "cella: invalid output table"
-msgstr "cella : table de sortie non valide"
-
-#: Opcodes/gab/vectorial.c:2448
-msgid "cella: invalid initial state table"
-msgstr "cella : table d'état initial non valide"
-
-#: Opcodes/gab/vectorial.c:2452
-msgid "cella: invalid rule table"
-msgstr "cella : table de règle non valide"
-
-#: Opcodes/grain4.c:59
-msgid "granule_set: Unable to find function table"
-msgstr "granule_set : impossible de trouver la table de fonction"
-
-#: Opcodes/grain4.c:69
-msgid "granule_set: Unable to find function table for envelope"
-msgstr ""
-"granule_set : impossible de trouver la table de fonction pour l'enveloppe"
-
-#: Opcodes/grain4.c:75
-msgid "granule_set: Too many voices"
-msgstr "granule_set : trop de voix"
-
-#: Opcodes/grain4.c:78
-msgid "granule_set: iratio must be greater then 0"
-msgstr "granule_set : iratio doit être supérieur à 0"
-
-#: Opcodes/grain4.c:82
-msgid "granule_set: imode must be -1, 0 or +1"
-msgstr "granule_set : imode doit valoir -1, 0 ou +1"
-
-#: Opcodes/grain4.c:86
-msgid "granule_set: Illegal ithd, must be greater than zero"
-msgstr "granule_set : ithd illégal, doit être supérieur à zéro"
-
-#: Opcodes/grain4.c:91
-msgid "granule_set: ipshift must be integer between 0 and 4"
-msgstr "granule_set : ipshift doit être un entier entre 0 et 4"
-
-#: Opcodes/grain4.c:96
-msgid "granule_set: Not enough voices for the number of pitches"
-msgstr "granule_set : pas assez de voix pour le nombre de hauteurs"
-
-#: Opcodes/grain4.c:103
-msgid "granule_set: ipitch1 must be greater then zero"
-msgstr "granule_set : ipitch1 doit être supérieur à zéro"
-
-#: Opcodes/grain4.c:108
-msgid "granule_set: ipitch2 must be greater then zero"
-msgstr "granule_set : ipitch2 doit être supérieur à zéro"
-
-#: Opcodes/grain4.c:113
-msgid "granule_set: ipitch3 must be greater then zero"
-msgstr "granule_set : ipitch3 doit être supérieur à zéro"
-
-#: Opcodes/grain4.c:118
-msgid "granule_set: ipitch4 must be greater then zero"
-msgstr "granule_set : ipitch4 doit être supérieur à zéro"
-
-#: Opcodes/grain4.c:123
-msgid "granule_set: must be positive and less than function table length"
-msgstr ""
-"granule_set : doit être positif et inférieur à la longueur de la table de "
-"fonction"
-
-#: Opcodes/grain4.c:127
-msgid "granule_set: igskip_os must be greater then 0"
-msgstr "granule_set : igskip_os doit être supérieur à 0"
-
-#: Opcodes/grain4.c:136
-msgid "granule_set: kgap must be greater then 0"
-msgstr "granule_set : kgap doit être supérieur à 0"
-
-#: Opcodes/grain4.c:140
-#, c-format
-msgid "granule_set: igap_os must be 0%% to 100%%"
-msgstr "granule_set : igap_os doit être entre 0%% et 100%%"
-
-#: Opcodes/grain4.c:144
-msgid "granule_set: kgsize must be greater then 0"
-msgstr "granule_set : kgsize doit être supérieur à 0"
-
-#: Opcodes/grain4.c:148
-#, c-format
-msgid "granule_set: igsize_os must be 0%% to 100%%"
-msgstr "granule_set : igsize_os doit être entre 0%% et 100%%"
-
-#: Opcodes/grain4.c:154
-msgid "granule_set: Illegal value of iatt and/or idec"
-msgstr "granule_set : valeur illégale de iatt et/ou de idec"
-
-#: Opcodes/grain4.c:238
-msgid "granule_set: Illegal combination of igskip and ilength"
-msgstr "granule_set : combinaison illégale de igskip et de ilength"
-
-#: Opcodes/grain4.c:245
-#, c-format
-msgid ""
-"granule_set: WARNING * ilength may be too short * \n"
-"            ilength should be greater than kgsize * max up\n"
-"            pitch shift. Also, igsize_os and igskip_os should\n"
-"            be taken into consideration.\n"
-"ilength is %f Sec, kgsize is %f Sec\n"
-msgstr ""
-"granule_set : AVERTISSEMENT * ilength est peut être trop courte * \n"
-"              ilength doit être supérieure à kgsize * max de la\n"
-"              transposition de hauteur vers le haut. Il faut aussi\n"
-"              prendre en considération igsize_os et igskip_os.\n"
-"ilength vaut %f sec, kgsize vaut %f sec\n"
-
-#: Opcodes/grain4.c:419
-msgid "grain4: not initialised"
-msgstr "grain4 : non initialisé"
-
-#: Opcodes/grain.c:92
-msgid "grain: grain length zero"
-msgstr "grain : densité de grain non valide"
-
-#: Opcodes/grain.c:152
-msgid "grain: not initialised"
-msgstr "grain : non initialisé"
-
-#: Opcodes/harmon.c:226
-msgid "harm signal has positive lead\n"
-msgstr "le signal de l'harmonizer a une conduite positive\n"
-
-#: Opcodes/harmon.c:233
-msgid "harm signal has negative lead\n"
-msgstr "le signal de l'harmonizer a une conduite négative\n"
-
-#: Opcodes/harmon.c:363
-msgid "harmon234: out of range\n"
-msgstr "harmon234 : hors limites\n"
-
-#: Opcodes/hrtferX.c:81
-#, c-format
-msgid ""
-"Orchestra sampling rate is not compatible with HRTF.\n"
-"Should be %d...exiting."
-msgstr ""
-"Le taux d'évhantillonnage de l'orchestre n'est pas compatible avec HRTF.\n"
-"Il devrait valoir %d... fin du traitement."
-
-#: Opcodes/hrtferX.c:89
-msgid ""
-"\n"
-"Last argument must be the string 'HRTFcompact' ...correcting.\n"
-msgstr ""
-"\n"
-"Le dernier argument doit être la chaîne 'HRTFcompact' ... correction.\n"
-
-#: Opcodes/hrtferX.c:494
-msgid "hrtfer: not initialised"
-msgstr "hrtfer : non initialisé"
-
-#: Opcodes/hrtfopcodes.c:260 Opcodes/hrtfopcodes.c:1434
-#: Opcodes/hrtfearly.c:300 Opcodes/hrtfreverb.c:257
-#, c-format
-msgid ""
-"\n"
-"\n"
-"WARNING!!:\n"
-"Orchestra SR not compatible with HRTF processing SR of: %.0f\n"
-"\n"
-msgstr ""
-"\n"
-"\n"
-"AVERTISSEMENT !! :\n"
-"SR de l'orchestre incompatible avec le SR du traitement HRTF de : %.0f\n"
-"\n"
-
-#: Opcodes/hrtfopcodes.c:287 Opcodes/hrtfopcodes.c:1461
-#: Opcodes/hrtfopcodes.c:2071 Opcodes/hrtfearly.c:327 Opcodes/hrtfreverb.c:300
-msgid ""
-"\n"
-"\n"
-"\n"
-"Cannot load left data file, exiting\n"
-"\n"
-msgstr ""
-"\n"
-"\n"
-"\n"
-"impossible de charger le fichier des données de gauche, abandon\n"
-"\n"
-
-#: Opcodes/hrtfopcodes.c:294 Opcodes/hrtfopcodes.c:1468
-#: Opcodes/hrtfopcodes.c:2078 Opcodes/hrtfearly.c:334 Opcodes/hrtfreverb.c:306
-msgid ""
-"\n"
-"\n"
-"\n"
-"Cannot load right data file, exiting\n"
-"\n"
-msgstr ""
-"\n"
-"\n"
-"\n"
-"impossible de charger le fichier des données de droite, abandon\n"
-"\n"
-
-#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
-msgid ""
-"\n"
-"WARNING: fades are overlapping: this could lead to noise: reduce fade size "
-"or change trajectory\n"
-"\n"
-msgstr ""
-"\n"
-"AVERTISSEMENT : les fondus se chevauchent : ceci peut provoquer du bruit : "
-"réduisez la taille des fondus ou changez la trajectoire\n"
-"\n"
-
-#: Opcodes/hrtfopcodes.c:2052
+#: Opcodes/hrtfopcodes.c:2052
 #, c-format
 msgid ""
 "\n"
@@ -6909,7 +6006,8 @@ msgid ""
 "warning, approaching instability, fixed with a flat late reverb!"
 msgstr ""
 "\n"
-"avertissement, proche de l'instabilité, résolu avec une réverbération tardive plate !"
+"avertissement, proche de l'instabilité, résolu avec une réverbération "
+"tardive plate !"
 
 #: Opcodes/ifd.c:74
 msgid "pvsifd: fftsize should be an integral multiple of hopsize"
@@ -6923,29 +6021,29 @@ msgstr "pvsifd : fftsize doit être une puissance de deux"
 msgid "pvsifd: unsupported value for iwintype\n"
 msgstr "pvsifd : valeur non supportée pout iwintype\n"
 
-#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:426
+#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:429
 #, c-format
 msgid "imageload: cannot open image %s.\n"
 msgstr "imageload : impossible d'ouvrir l'image %s.\n"
 
-#: Opcodes/imageOpcodes.c:111
+#: Opcodes/imageOpcodes.c:108 Opcodes/imageOpcodes.c:114
 #, c-format
 msgid "imageload: file %s is not in PNG format.\n"
 msgstr "imageload : le fichier %s n'est pas au format PNG.\n"
 
-#: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
-#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
-#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:122 Opcodes/imageOpcodes.c:129
+#: Opcodes/imageOpcodes.c:168 Opcodes/imageOpcodes.c:177
+#: Opcodes/imageOpcodes.c:191 Opcodes/imageOpcodes.c:294
+#: Opcodes/imageOpcodes.c:301 Opcodes/imageOpcodes.c:314
 msgid "imageload: out of memory.\n"
 msgstr "imageload : dépassement mémoire.\n"
 
-#: Opcodes/imageOpcodes.c:283
+#: Opcodes/imageOpcodes.c:286
 #, c-format
 msgid "imageload: cannot open image %s for writing.\n"
 msgstr "imageload : impossible d'ouvrir l'image %s en écriture.\n"
 
-#: Opcodes/imageOpcodes.c:392
+#: Opcodes/imageOpcodes.c:395
 msgid "Cannot allocate memory.\n"
 msgstr "Impossible d'allouer la mémoire.\n"
 
@@ -6991,29 +6089,29 @@ msgstr "DEBUT de JackoState::close()...\n"
 msgid "ENDED JackoState::close().\n"
 msgstr "FIN de JackoState::close().\n"
 
-#: Opcodes/jacko.cpp:892
+#: Opcodes/jacko.cpp:894
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr "La mise de Jack en mode roue libre \"%s\" a échoué : erreur %d.\n"
 
-#: Opcodes/jacko.cpp:895
+#: Opcodes/jacko.cpp:897
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr "Jack mis en mode roue libre \"%s\".\n"
 
-#: Opcodes/jacko.cpp:911
+#: Opcodes/jacko.cpp:913
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr "Connexions Jack \"%s\".\n"
 
-#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
-#: Opcodes/jacko.cpp:1241
+#: Opcodes/jacko.cpp:957 Opcodes/jacko.cpp:1064 Opcodes/jacko.cpp:1171
+#: Opcodes/jacko.cpp:1243
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr "Impossible de créer le port de Jack \"%s\".\n"
 
-#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
-#: Opcodes/jacko.cpp:1255
+#: Opcodes/jacko.cpp:971 Opcodes/jacko.cpp:1079 Opcodes/jacko.cpp:1186
+#: Opcodes/jacko.cpp:1257
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr "Impossible de créer la connexion Jack de \"%s\" à \"%s\" : état %d.\n"
@@ -7067,8 +6165,8 @@ msgstr "mode de boucle non valide : %d"
 msgid "loscilx: invalid number of output arguments"
 msgstr "loscilx : nombre d'arguments de sortie non valide"
 
-#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
-#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:120
+#: Opcodes/pvlock.c:322 Opcodes/pvsbasic.c:463
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
@@ -7099,15 +6197,36 @@ msgstr "metro : la phase initiale est tronquée"
 msgid "splitrig: incorrect table number"
 msgstr "splitrig : numéro de table incorrect"
 
-#: Opcodes/midiops2.c:514 Opcodes/midiops2.c:529 Opcodes/midiops2.c:548
+#: Opcodes/midiops2.c:339 Opcodes/midiops2.c:377 Opcodes/midiops2.c:409
+#: Opcodes/midiops2.c:458 Opcodes/midiops2.c:493 Opcodes/midiops2.c:535
+#: Opcodes/midiops2.c:550 Opcodes/midiops2.c:569
+msgid "illegal midi channel"
+msgstr "canal midi illégal"
+
+#: Opcodes/midiops2.c:532 Opcodes/midiops2.c:547 Opcodes/midiops2.c:566
 msgid "value out of range"
 msgstr "valeur hors limites"
 
-#: Opcodes/midiops2.c:580
+#: Opcodes/midiops2.c:598
 #, c-format
 msgid "invalid channel number: %d"
 msgstr "numéro de canal non valide : %d"
 
+#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
+#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
+msgid "illegal channel"
+msgstr "canal illégal"
+
+#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
+#, c-format
+msgid "illegal control number at position n.%d"
+msgstr "numéro de contrôle illégal à la position n.%d"
+
+#: Opcodes/midiops3.c:64 Opcodes/midiops3.c:168 Opcodes/midiops3.c:347
+#, c-format
+msgid "illegal initvalue at position n.%d"
+msgstr "valeur d'initialisation illégale à la position n.%d"
+
 #: Opcodes/midiops3.c:333 Opcodes/midiops3.c:428
 #, c-format
 msgid "illegal msb control number at position n.%d"
@@ -7146,12 +6265,12 @@ msgstr "Pas de table pour l'excitation d'Agogobell"
 msgid "modmatrix: "
 msgstr "modmatrix : "
 
-#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
+#: Opcodes/mp3in.c:101 Opcodes/mp3in.c:242
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr "mp3in : %s : l'ouverture du fichier a échoué"
 
-#: Opcodes/mp3in.c:140
+#: Opcodes/mp3in.c:148
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7312,6 +6431,10 @@ msgstr "vco2init : taille min de table non valide"
 msgid "vco2init: invalid max table size"
 msgstr "vco2init : taille max de table non valide"
 
+#: Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
+msgid "ftgen error"
+msgstr "erreur de ftgen"
+
 #: Opcodes/oscbnk.c:1757
 msgid "vco2init: invalid source ftable"
 msgstr "vco2init : ftable source non valide"
@@ -7371,72 +6494,72 @@ msgstr "vdel_k : durée de délai non valide (doit être >= 0)"
 msgid "rbjeq: invalid filter type"
 msgstr "rbjeq : type de filtre non valide"
 
-#: Opcodes/OSC.c:122
+#: Opcodes/OSC.c:126
 msgid "Too many arguments to OSCsend"
 msgstr "Trop d'arguments pour OSCsend"
 
-#: Opcodes/OSC.c:125
+#: Opcodes/OSC.c:129
 msgid "No a-rate arguments allowed"
 msgstr "Les arguments de taux-a sont interdits"
 
-#: Opcodes/OSC.c:163 Opcodes/OSC.c:168 Opcodes/OSC.c:173 Opcodes/OSC.c:183
-#: Opcodes/OSC.c:190 Opcodes/OSC.c:195 Opcodes/OSC.c:206 Opcodes/OSC.c:214
-#: Opcodes/OSC.c:232
+#: Opcodes/OSC.c:167 Opcodes/OSC.c:172 Opcodes/OSC.c:177 Opcodes/OSC.c:187
+#: Opcodes/OSC.c:194 Opcodes/OSC.c:199 Opcodes/OSC.c:210 Opcodes/OSC.c:218
+#: Opcodes/OSC.c:236
 msgid "String not expected"
 msgstr "Chaîne non attendue"
 
-#: Opcodes/OSC.c:202
+#: Opcodes/OSC.c:206
 msgid "Not a string when needed"
 msgstr "Pas de chaîne alors qu'il en faut une"
 
-#: Opcodes/OSC.c:219
+#: Opcodes/OSC.c:223
 msgid "Time stamp is two values"
 msgstr "Le timestamp comprend deux valeurs"
 
-#: Opcodes/OSC.c:240
+#: Opcodes/OSC.c:244
 #, c-format
 msgid "ftable %.2f does not exist"
 msgstr "la ftable %.2f n'existe pas"
 
-#: Opcodes/OSC.c:249
+#: Opcodes/OSC.c:253
 #, c-format
 msgid "Unknown OSC type %c\n"
 msgstr "Type OSC inconnu %c\n"
 
-#: Opcodes/OSC.c:428
+#: Opcodes/OSC.c:436
 msgid "OSC: failed to allocate globals"
 msgstr "OSC : échec de l'allocation des variables globales"
 
-#: Opcodes/OSC.c:446
+#: Opcodes/OSC.c:455
 msgid "OSCrecv is already running"
 msgstr "OSCrecv s'exécute déjà"
 
-#: Opcodes/OSC.c:589
+#: Opcodes/OSC.c:599
 msgid "OSC deinitiatised\n"
 msgstr "OSC dé-initialisé\n"
 
-#: Opcodes/OSC.c:613
+#: Opcodes/OSC.c:623
 #, c-format
 msgid "OSC listener #%d started on port %s\n"
 msgstr "Ecouteur OSC #%d démarré sur le port %s\n"
 
-#: Opcodes/OSC.c:663
+#: Opcodes/OSC.c:673
 msgid "OSC not running"
 msgstr "OSC n'est pas actif"
 
-#: Opcodes/OSC.c:667
+#: Opcodes/OSC.c:677
 msgid "invalid handle"
 msgstr "descripteur non valide"
 
-#: Opcodes/OSC.c:674
+#: Opcodes/OSC.c:684
 msgid "invalid number of arguments"
 msgstr "nombre d'arguments non valide"
 
-#: Opcodes/OSC.c:695 Opcodes/OSC.c:700
+#: Opcodes/OSC.c:705 Opcodes/OSC.c:710
 msgid "argument list inconsistent with format string"
 msgstr "liste d'arguments inconsistante avec le format chaîne"
 
-#: Opcodes/OSC.c:704
+#: Opcodes/OSC.c:714
 msgid "invalid type"
 msgstr "type non valide"
 
@@ -7456,11 +6579,11 @@ msgstr "Type de panoramique inconnu"
 msgid "partikkel: "
 msgstr "partikkel :"
 
-#: Opcodes/partikkel.c:806
+#: Opcodes/partikkel.c:807
 msgid "partikkelsync: opcode id needs to be a non-zero integer"
 msgstr "partikkelsync : l'id de l'opcode doit être un entier non nul"
 
-#: Opcodes/partikkel.c:810 Opcodes/partikkel.c:816
+#: Opcodes/partikkel.c:811 Opcodes/partikkel.c:817
 msgid "partikkelsync: could not find opcode id"
 msgstr "partikkelsync : impossible de trouver l'id de l'opcode"
 
@@ -7626,36 +6749,36 @@ msgstr ""
 "pinkish : la méthode de Gardner nécessitre 4-%d bandes. La valeur par défaut "
 "%ld a été substituée à %d.\n"
 
-#: Opcodes/pitch.c:1733
+#: Opcodes/pitch.c:1598
 msgid "Incorrect argument count in transeg"
 msgstr "Nombre d'arguments incorrect dans transeg"
 
-#: Opcodes/pitch.c:1784
+#: Opcodes/pitch.c:1649
 msgid "Incorrect argument count in transegb"
 msgstr "Nombre d'arguments incorrect dans transegb"
 
-#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
+#: Opcodes/pitch.c:1699 Opcodes/pitch.c:1842
 msgid "Error: transeg not initialised (krate)\n"
 msgstr "Erreur : transeg non initialisé (taux-k)\n"
 
-#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
+#: Opcodes/pitch.c:1734 Opcodes/pitch.c:1892
 msgid "transeg: not initialised (arate)\n"
 msgstr "transeg : non initialisé (taux-a)\n"
 
-#: Opcodes/pitch.c:1924
+#: Opcodes/pitch.c:1789
 msgid "Incorrect argument count in transegr"
 msgstr "Nombre d'arguments incorrect dans transegr"
 
-#: Opcodes/pitch.c:2294
+#: Opcodes/pitch.c:2159
 msgid "median: not initialised (arate)\n"
 msgstr "median : non initialisé (taux-a)\n"
 
-#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
+#: Opcodes/pitch.c:2163 Opcodes/pitch.c:2210
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr "median : fenêtre (%d) plus grande que le maximum (%d) ; tronquée"
 
-#: Opcodes/pitch.c:2341
+#: Opcodes/pitch.c:2206
 msgid "median: not initialised (krate)\n"
 msgstr "median non initialisé (taux-k)\n"
 
@@ -7683,17 +6806,6 @@ msgstr "Mémoire tampon non allouée !"
 msgid "Error: %s, %s"
 msgstr "Erreur : %s, %s"
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
-#: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
-#: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
-#: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
-msgid "Unsafe to have same fsig as in and out"
-msgstr "Il est risqué d'avoir le même fsig en entrée et en sortie"
-
-#: Opcodes/ppp.c:36 Opcodes/pvslock.c:36
-msgid "pvslock: signal format must be amp-phase or amp-freq."
-msgstr "pvslock : le format du signal doit être amp-phase ou amp-fréq."
-
 #: Opcodes/psynth.c:97 Opcodes/psynth.c:253
 msgid "psynth: first input not in TRACKS format\n"
 msgstr "psynth : la première entrée n'est pas au format TRACKS\n"
@@ -7861,7 +6973,14 @@ msgstr "pvcross : non initialisé"
 msgid "invalid number of output arguments"
 msgstr "nombre d'arguments de sortie non valide"
 
-#: Opcodes/pvlock.c:490
+#: Opcodes/pvlock.c:480 Opcodes/pvsband.c:46 Opcodes/pvsbasic.c:578
+#: Opcodes/pvsbasic.c:883 Opcodes/pvsbasic.c:1083 Opcodes/pvsbasic.c:1183
+#: Opcodes/pvsbasic.c:1398 Opcodes/pvsbasic.c:1598 Opcodes/pvsbasic.c:1763
+#: Opcodes/pvslock.c:20
+msgid "Unsafe to have same fsig as in and out"
+msgstr "Il est risqué d'avoir le même fsig en entrée et en sortie"
+
+#: Opcodes/pvlock.c:492
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr "pvsfreeze : le format de signal doit être amp-fréq."
 
@@ -7900,75 +7019,75 @@ msgstr "pvsfwrite : impossible d'écrire les données\n"
 msgid "pvsdiskin: could not open file %s\n"
 msgstr "pvsdiskin : impossible d'ouvrir le fichier %s\n"
 
-#: Opcodes/pvsbasic.c:606
+#: Opcodes/pvsbasic.c:609
 msgid "pvsfreeze: signal format must be amp-phase or amp-freq."
 msgstr "pvsfreeze : le format de signal doit être amp-phase ou amp-fréq."
 
-#: Opcodes/pvsbasic.c:679
+#: Opcodes/pvsbasic.c:682
 msgid "pvsosc does not work while sliding"
 msgstr "pvsosc ne travaille pas lors du glissement"
 
-#: Opcodes/pvsbasic.c:910
+#: Opcodes/pvsbasic.c:913
 msgid "pvsmooth: signal format must be amp-phase or amp-freq."
 msgstr "pvsmooth : le format de signal doit être amp-phase ou amp-fréq."
 
-#: Opcodes/pvsbasic.c:1020
+#: Opcodes/pvsbasic.c:1023
 msgid "pvsmix: signal format must be amp-phase or amp-freq."
 msgstr "pvsmix : le format de signal doit être amp-phase ou amp-fréq."
 
-#: Opcodes/pvsbasic.c:1070
+#: Opcodes/pvsbasic.c:1073
 msgid "pvsmix: formats are different."
 msgstr "pvsmix : les formats sont différents"
 
-#: Opcodes/pvsbasic.c:1083
+#: Opcodes/pvsbasic.c:1086
 msgid "pvsfilter: signal format must be amp-phase or amp-freq."
 msgstr "pvsfilter : le format de signal doit être amp-phase ou amp-fréq."
 
-#: Opcodes/pvsbasic.c:1156
+#: Opcodes/pvsbasic.c:1159
 msgid "pvsfilter: not initialised"
 msgstr "pvsfilter : non initialisé"
 
-#: Opcodes/pvsbasic.c:1159
+#: Opcodes/pvsbasic.c:1162
 msgid "pvsfilter: formats are different."
 msgstr "pvsfilter : les formats sont différents"
 
-#: Opcodes/pvsbasic.c:1372
+#: Opcodes/pvsbasic.c:1375
 msgid "pvscale: not initialised"
 msgstr "pvscale : non initialisé"
 
-#: Opcodes/pvsbasic.c:1570
+#: Opcodes/pvsbasic.c:1575
 msgid "pvshift: not initialised"
 msgstr "pvshift : non initialisé"
 
-#: Opcodes/pvsbasic.c:1741
+#: Opcodes/pvsbasic.c:1748
 msgid "pvswarp: not initialised"
 msgstr "pvswarp : non initialisé"
 
-#: Opcodes/pvsbasic.c:1758
+#: Opcodes/pvsbasic.c:1765
 msgid "pvsblur does not work sliding yet"
 msgstr "pvsblur ne traite pas encore le glissement"
 
-#: Opcodes/pvsbasic.c:1890
+#: Opcodes/pvsbasic.c:1897
 msgid "pvsblur: not initialised"
 msgstr "pvsblur : non initialisé"
 
-#: Opcodes/pvsbasic.c:1925
+#: Opcodes/pvsbasic.c:1932
 msgid "pvstencil: signal format must be amp-phase or amp-freq."
 msgstr "pvstencil : le format de signal doit être amp-phase ou amp-fréq."
 
-#: Opcodes/pvsbasic.c:1933
+#: Opcodes/pvsbasic.c:1940
 msgid "pvstencil: ftable needs to equal the number of bins"
 msgstr "pvstencil : la ftable doit égaler le nombre de bins"
 
-#: Opcodes/pvsbasic.c:2001
+#: Opcodes/pvsbasic.c:2008
 msgid "pvstencil: not initialised"
 msgstr "pvstencil : non initialisé"
 
-#: Opcodes/pvsbasic.c:2148
+#: Opcodes/pvsbasic.c:2158
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr "pvs2tab : le format du signal doit être amp-phase ou amp-fréq."
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/pvsbasic.c:2161 Opcodes/pvsbasic.c:2201 Opcodes/tabvars.c:56
 #: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
 #: Opcodes/tabvars.c:181
 msgid "t-variable not initialised"
@@ -8012,6 +7131,10 @@ msgstr "pvsdemix : non initialisé\n"
 msgid "pvsgendy: not initialised"
 msgstr "pvsgendy : non initialisé"
 
+#: Opcodes/pvslock.c:36
+msgid "pvslock: signal format must be amp-phase or amp-freq."
+msgstr "pvslock : le format du signal doit être amp-phase ou amp-fréq."
+
 #: Opcodes/repluck.c:164
 #, c-format
 msgid "Reflection invalid (%f)\n"
@@ -8266,7 +7389,7 @@ msgstr ""
 "sfpreset : impossible de trouver un preset ayant le numéro de prog %d et le "
 "numéro de banque %d dans le fichier SoundFont \"%s\""
 
-#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2194
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr "sfplay : numéro de preset non valide ou hors limites"
 
@@ -8289,15 +7412,15 @@ msgstr ""
 "Actuellement sfload n'autorise que les échantillons en RAM.\n"
 "Session annulée !"
 
-#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1992 Opcodes/sfont.c:1998
 msgid "Sfont: cannot use globals/"
 msgstr "Sfont : impossible d'utiliser des variables globales/"
 
-#: Opcodes/sfont.c:1999
+#: Opcodes/sfont.c:2001
 msgid "Sfont format not compatible"
 msgstr "Sfont : format non compatible"
 
-#: Opcodes/sfont.c:2537
+#: Opcodes/sfont.c:2539
 msgid "error... could not create sfont globals\n"
 msgstr "erreur... impossible de créer les globales de sfont\n"
 
@@ -8309,6 +7432,10 @@ msgstr "powershape : la ftable ifullscale doit être entièrement positive"
 msgid "inletf: signal format must be amp-phase or amp-freq."
 msgstr "inletf : le format de signal doit être amp-phase ou amp-fréq."
 
+#: Opcodes/signalflowgraph.cpp:895
+msgid "ftgen string arg not allowed"
+msgstr "ftgen : argument chaîne interdit"
+
 #: Opcodes/signalflowgraph.cpp:921
 msgid "ftgenonce error"
 msgstr "erreur ftgenonce"
@@ -8344,7 +7471,7 @@ msgstr "crossfade plus long que la durée de la boucle\n"
 msgid "crossfade longer than loop duration\n"
 msgstr "crossfade plus long que la durée de la boucle\n"
 
-#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389 Opcodes/sndloop.c:661
+#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389
 msgid "function table not found\n"
 msgstr "table de fonction non trouvée\n"
 
@@ -8364,15 +7491,15 @@ msgstr "pvsarp : le format du signal doit être amp-phase ou amp-fréq.\n"
 msgid "pvsarp: not initialised\n"
 msgstr "pvsarp : non initialisé\n"
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr "le format du signal doit être amp-phase ou amp-fréq.\n"
 
-#: Opcodes/sndloop.c:1071
+#: Opcodes/sndloop.c:1072
 msgid "pvsvoc: not initialised\n"
 msgstr "pvsvoc : non initialisé\n"
 
-#: Opcodes/sndloop.c:1122
+#: Opcodes/sndloop.c:1123
 msgid "pvsmorph: not initialised\n"
 msgstr "pvsmorph : non initialisé\n"
 
@@ -8392,30 +7519,30 @@ msgstr "Nombre de sorties incorrect dans sndwarpst ; doit valoir 2 ou 4"
 msgid "sndwarpst: not initialised"
 msgstr "sndwarpst : non initialisé"
 
-#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
-#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:315
+#: Opcodes/socksend.c:74 Opcodes/socksend.c:158 Opcodes/socksend.c:252
 #, c-format
 msgid "Winsock2 failed to start: %d"
 msgstr "Le démarrage de winsock2 a échoué : %d"
 
-#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
-#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:321
+#: Opcodes/socksend.c:87 Opcodes/socksend.c:172 Opcodes/socksend.c:259
 msgid "creating socket"
 msgstr "création du socket"
 
-#: Opcodes/sockrecv.c:347
-#, c-format
-msgid "connect failed (%d)"
-msgstr "la connexion a échoué (%d)"
-
-#: Opcodes/sockrecv.c:360
+#: Opcodes/sockrecv.c:366
 msgid "read from socket failed"
 msgstr "la lecture depuis le socket a échoué"
 
-#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
+#: Opcodes/socksend.c:127 Opcodes/socksend.c:216
 msgid "sendto failed"
 msgstr "sendto a échoué"
 
+#: Opcodes/socksend.c:287
+#, c-format
+msgid "connect failed (%d)"
+msgstr "la connexion a échoué (%d)"
+
 #: Opcodes/space.c:165
 msgid "space: not initialised"
 msgstr "space : non initialisé"
@@ -8788,22 +7915,39 @@ msgstr " valeur de imode incorrecte"
 msgid "Min and max the same"
 msgstr "Min et max sont les mêmes"
 
-#: Opcodes/uggab.c:424
+#: Opcodes/uggab.c:215
+#, fuzzy
+msgid "table not found in poscil"
+msgstr "La table %f n'a pas été trouvée"
+
+#: Opcodes/uggab.c:234 Opcodes/uggab.c:261 Opcodes/uggab.c:290
+#: Opcodes/uggab.c:318
+#, fuzzy
+msgid "poscil: not initialised"
+msgstr "oscil : non initialisé"
+
+#: Opcodes/uggab.c:365 Opcodes/uggab.c:412 Opcodes/uggab.c:460
+#: Opcodes/uggab.c:509
+#, fuzzy
+msgid "poscil3: not initialised"
+msgstr "oscil3 : non initialisé"
+
+#: Opcodes/uggab.c:589
 msgid "losc: no sample rate stored in function assuming=sr\n"
 msgstr ""
 "losc : pas de taux d'échantillonnage dans la fonction, on suppose qu'il est "
 "égal à sr\n"
 
-#: Opcodes/uggab.c:556
+#: Opcodes/uggab.c:721
 #, c-format
 msgid "illegal reson iscl value: %f"
 msgstr "valeur illégale de iscl de reson : %f"
 
-#: Opcodes/uggab.c:579
+#: Opcodes/uggab.c:744
 msgid "loop cannot be zero"
 msgstr "une boucle ne peut pas être nulle"
 
-#: Opcodes/uggab.c:1056 Opcodes/uggab.c:1098
+#: Opcodes/uggab.c:1221 Opcodes/uggab.c:1263
 msgid "vibrato(krate): not initialised"
 msgstr "vibrato(taux-k) : non initialisé"
 
@@ -9234,6 +8378,14 @@ msgstr "vosim: kfund (%f) > sr. Génération d'un silence de ksmps."
 msgid "vosim: not initialised"
 msgstr "vosim : non initialisé"
 
+#: Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr "tableseg : non initialisé"
+
+#: Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr "tablexseg : non initialisé"
+
 #: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
@@ -9364,47 +8516,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr "-B N\tnombre d'échantillons par tampon physique d'E/S"
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr "-A\tcréation d'un fichier de sortie au format AIFF"
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr "-W\tcréation d'un fichier de sortie au format WAV"
 
-#: Top/argdecode.c:77 util/srconv.c:739
+#: Top/argdecode.c:77 util/srconv.c:740
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr "-J\tcréation d'un fichier de sortie au format IRCAM"
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
 msgid "-h\tno header on output soundfile"
 msgstr "-h\tpas d'en-tête dans le fichier de sortie"
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
 msgid "-c\t8-bit signed_char sound samples"
 msgstr "-c\téchantillons en caractères signés sur 8 bit"
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
 msgid "-a\talaw sound samples"
 msgstr "-a\téchantillons alaw"
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr "-8\téchantillons en caractères non signés sur 8 bit"
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
 msgid "-u\tulaw sound samples"
 msgstr "-u\téchantillons ulaw"
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
 msgid "-s\tshort_int sound samples"
 msgstr "-s\téchantillons en entiers courts"
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
 msgid "-l\tlong_int sound samples"
 msgstr "-l\téchantillons en entiers longs"
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
 msgid "-f\tfloat sound samples"
 msgstr "-f\téchantillons en nombres flottants"
 
@@ -9412,7 +8564,7 @@ msgstr "-f\téchantillons en nombres flottants"
 msgid "-3\t24bit sound samples"
 msgstr "-3\téchantillons sur 24 bit"
 
-#: Top/argdecode.c:89 util/srconv.c:749
+#: Top/argdecode.c:89 util/srconv.c:750
 msgid "-r N\torchestra srate override"
 msgstr "-r N\tredéfinition du srate de l'orchestre"
 
@@ -9420,7 +8572,7 @@ msgstr "-r N\tredéfinition du srate de l'orchestre"
 msgid "-k N\torchestra krate override"
 msgstr "-k N\tredéfinition du krate de l'orchestre"
 
-#: Top/argdecode.c:91 util/srconv.c:750
+#: Top/argdecode.c:91 util/srconv.c:751
 msgid "-K\tDo not generate PEAK chunks"
 msgstr "-K\tNe générer aucun bloc PEAK"
 
@@ -9488,7 +8640,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr "-F nomfic\tlire un flux d'évènements MIDI à partir du fichier 'nomfic'"
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 "-R\tréécrire l'en-tête continuellement lors de l'écriture d'un fichier son "
@@ -9500,7 +8652,7 @@ msgstr ""
 "-H#\taffiche une pulsation de style 1, 2 ou 3 à chaque écriture dans le "
 "fichier son"
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 "-N\tavertir (par un beep) quand la partition ou la piste MIDI est terminée"
@@ -9568,7 +8720,8 @@ msgid "--nopeaks\t\tDo not write peak information"
 msgstr "--nopeaks\t\tNe pas écrire d'information de crête"
 
 #: Top/argdecode.c:136
-msgid "--nodisplays\t\tsUppress all displays"
+#, fuzzy
+msgid "--nodisplays\t\tSuppress all displays"
 msgstr "--nodisplays\t\tsuppression de tout affichage"
 
 #: Top/argdecode.c:137
@@ -10106,51 +9259,51 @@ msgid "error: orchestra and score name not allowed in .csoundrc"
 msgstr ""
 "erreur : les noms d'orchestre et de partition sont interdits dans .csoundrc"
 
-#: Top/cscorfns.c:276
+#: Top/cscorfns.c:277
 msgid "PMAX exceeded, string event truncated.\n"
 msgstr "PMAX dépassé, évènement chaîne tronqué.\n"
 
-#: Top/cscorfns.c:663
+#: Top/cscorfns.c:666
 #, c-format
 msgid "%s found %d f event%s with non-zero p2\n"
 msgstr "%s a trouvé %d évènements f%s avec un p2 non nul\n"
 
-#: Top/cscorfns.c:664
+#: Top/cscorfns.c:667
 msgid "s"
 msgstr "s"
 
-#: Top/cscorfns.c:767
+#: Top/cscorfns.c:770
 msgid "cscore: too many input files open"
 msgstr "cscore : trop de fichiers d'entrée ouverts"
 
-#: Top/cscorfns.c:805
+#: Top/cscorfns.c:810
 msgid "cscore: tried to set an unknown file pointer as the current file"
 msgstr ""
 "cscore : il a été tenté de prendre un pointeur de fichier inconnu comme "
 "fichier courant"
 
-#: Top/cscorfns.c:819
+#: Top/cscorfns.c:824
 msgid "csoundInitializeCscore: no input score given."
 msgstr "csoundInitializeCscore : aucune partition d'entrée n'a été donnée"
 
-#: Top/cscorfns.c:824
+#: Top/cscorfns.c:829 Top/cscorfns.c:858
 msgid "csoundInitializeCscore: no output score given."
 msgstr "csoundInitializeCscore : aucune partition de sortie n'a été donnée"
 
-#: Top/cscorfns.c:852
+#: Top/cscorfns.c:889
 #, c-format
 msgid "cscoreFileOpen: error opening %s"
 msgstr "cscoreFileOpen : erreur en ouvrant %s"
 
-#: Top/cscorfns.c:870
+#: Top/cscorfns.c:907
 msgid "cscoreFileClose: NULL file pointer\n"
 msgstr "cscoreFileClose : pointeur de fichier NULL\n"
 
-#: Top/cscorfns.c:882
+#: Top/cscorfns.c:919
 msgid "cscoreFileClose: fp not recorded\n"
 msgstr "cscoreFileClose : pointeur de fichier non enregistré\n"
 
-#: Top/cscorfns.c:888
+#: Top/cscorfns.c:925
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr "cscoreFileGetCurrent : pas de pointeur de fichier courant"
 
@@ -10192,133 +9345,133 @@ msgstr "csoundLoadExternal() : échec de l'allocation mémoire"
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr "Erreur dans le fonction de pré-initialisation du module '%s'"
 
-#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
-#: Top/csmodule.c:638 Top/csmodule.c:646
+#: Top/csmodule.c:607 Top/csmodule.c:613 Top/csmodule.c:624 Top/csmodule.c:631
+#: Top/csmodule.c:637 Top/csmodule.c:645
 msgid "Error opening plugin directory\n"
 msgstr "Erreur en ouvrant le répertoire de plugin\n"
 
-#: Top/csmodule.c:696
+#: Top/csmodule.c:695
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr "Erreur en ouvrant le répertoire de plugin '%s' : %s"
 
-#: Top/csmodule.c:731
+#: Top/csmodule.c:730
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr "nom de chemin trop long, on se passe de '%s'"
 
-#: Top/csmodule.c:737
+#: Top/csmodule.c:736
 #, c-format
 msgid "Library %s omitted\n"
 msgstr "Bibliothèque %s omise\n"
 
-#: Top/csmodule.c:773
+#: Top/csmodule.c:772
 msgid "Loading command-line libraries:\n"
 msgstr "Chargement des bibliothèques de ligne de commande :\n"
 
-#: Top/csmodule.c:796
+#: Top/csmodule.c:795
 #, c-format
 msgid " *** error loading '%s'"
 msgstr " *** erreur en chargeant '%s'"
 
-#: Top/csmodule.c:819
+#: Top/csmodule.c:818
 #, c-format
 msgid "Error starting module '%s'"
 msgstr "Erreur au démarrage du module '%s'"
 
-#: Top/csmodule.c:918
+#: Top/csmodule.c:917
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr "Erreur de dé-initialisation du module '%s'"
 
-#: Top/csound.c:1636 Top/csound.c:1656
+#: Top/csound.c:1640 Top/csound.c:1660
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr "Retour prématuré de csoundPerformKsmps().\n"
 
-#: Top/csound.c:1642
+#: Top/csound.c:1646
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr "La partition est finie dans csoundPerformKsmps().\n"
 
-#: Top/csound.c:1675
+#: Top/csound.c:1679
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr "Retour prématuré de csoundPerformBuffer().\n"
 
-#: Top/csound.c:1700
+#: Top/csound.c:1704
 msgid "Early return from csoundPerform().\n"
 msgstr "Retour prématuré de csoundPerform().\n"
 
-#: Top/csound.c:1707
+#: Top/csound.c:1711
 msgid "Score finished in csoundPerform().\n"
 msgstr "La partition est finie dans csoundPerform().\n"
 
-#: Top/csound.c:1727
+#: Top/csound.c:1731
 msgid "csoundPerform(): stopped.\n"
 msgstr "csoundPerform() : arrêté.\n"
 
-#: Top/csound.c:1998
+#: Top/csound.c:2002
 msgid "WARNING: "
 msgstr "AVERTISSEMENT : "
 
-#: Top/csound.c:2119
+#: Top/csound.c:2123
 msgid "rtdummy: failed to allocate globals"
 msgstr "rtdummy : l'allocation des variables globales a échoué"
 
-#: Top/csound.c:2120
+#: Top/csound.c:2124
 msgid "rtaudio: dummy module enabled\n"
 msgstr "rtaudio : module factice activé\n"
 
-#: Top/csound.c:2149 Top/csound.c:2185
+#: Top/csound.c:2153 Top/csound.c:2189
 msgid " *** error: rtaudio module set to empty string"
 msgstr " *** erreur : le module rtaudio est fixé par une chaîne vide"
 
-#: Top/csound.c:2153 Top/csound.c:2189
+#: Top/csound.c:2157 Top/csound.c:2193
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr " *** erreur : module rtaudio inconnu : '%s'"
 
-#: Top/csound.c:2271
+#: Top/csound.c:2275
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 "AVERTISSEMENT : l'entrée midi en temps réel est désactivée, utilisation de "
 "fonctions factices\n"
 
-#: Top/csound.c:2276 Top/csound.c:2310
+#: Top/csound.c:2280 Top/csound.c:2314
 msgid "error: -+rtmidi set to empty string"
 msgstr "erreur : -+rtmidi contient une chaîne vide"
 
-#: Top/csound.c:2279 Top/csound.c:2313
+#: Top/csound.c:2283 Top/csound.c:2317
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr "erreur : -+rtmidi='%s' : module inconnu"
 
-#: Top/csound.c:2305
+#: Top/csound.c:2309
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 "AVERTISSEMENT : la sortie midi en temps réel est désactivée, utilisation de "
 "fonctions factices\n"
 
-#: Top/csound.c:2327
+#: Top/csound.c:2331
 msgid "Unknown MIDI error"
 msgstr "Erreur MIDI inconnue"
 
-#: Top/csound.c:2445
+#: Top/csound.c:2449
 msgid "xyin not supported. use invalue opcode instead."
 msgstr "xyin n'est pas supporté. Utiliser plutôt l'opcode invalue."
 
-#: Top/csound.c:2552
+#: Top/csound.c:2556
 msgid "Failed to allocate new opcode entry."
 msgstr "Echec de l'allocation d'une nouvelle entrée d'opcode."
 
-#: Top/csound.c:2575
+#: Top/csound.c:2579
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr "Echec de l'allocation d'une entrée d'opcode pour %s."
 
-#: Top/csound.c:2906
+#: Top/csound.c:2912
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr "Impossible d'ouvrir /proc/cpuinfo. RDTSC n'est pas supporté.\n"
 
-#: Top/csound.c:2957
+#: Top/csound.c:2963
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr "Aucune entrée de fréq CPU valide n'a été trouvée dans /proc/cpuinfo.\n"
 
@@ -10378,57 +9531,47 @@ msgstr ""
 msgid "orchname:  %s\n"
 msgstr "nom de l'orchestre :   %s\n"
 
-#: Top/main.c:334
+#: Top/main.c:318
+#, fuzzy, c-format
+msgid "Failed to open input file %s\n"
+msgstr "L'ouverture du fichier de sortie %s a échoué"
+
+#: Top/main.c:339
 msgid "Stopping on parser failure\n"
 msgstr "Arrêt sur échec du parseur\n"
 
-#: Top/main.c:352
+#: Top/main.c:360
 msgid "end of orchestra compile"
 msgstr "fin de la compilation de l'orchestre"
 
-#: Top/main.c:359
+#: Top/main.c:367
 #, c-format
 msgid "using previous %s\n"
 msgstr "utilisation du %s précédent\n"
 
-#: Top/main.c:369
+#: Top/main.c:377
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr "impossible d'ouvrir le fichier de partition %s"
 
-#: Top/main.c:371
+#: Top/main.c:379
 msgid "sorting score ...\n"
 msgstr "tri de la partition ...\n"
 
-#: Top/main.c:381
-#, c-format
-msgid "cannot extract %s, name conflict"
-msgstr "impossible d'extraire %s, conflit de noms"
-
-#: Top/main.c:384
+#: Top/main.c:389
 #, c-format
 msgid "cannot open extract file %s"
 msgstr "impossible d'ouvrir le fichier d'extraction %s"
 
-#: Top/main.c:388
-#, c-format
-msgid "cannot reopen %s"
-msgstr "impossible de réouvrir %s"
-
 #: Top/main.c:392
-#, c-format
-msgid "cannot open %s for writing"
-msgstr "impossible d'ouvrir %s en écriture"
-
-#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr "  ... extraction ...\n"
 
-#: Top/main.c:405
+#: Top/main.c:401
 msgid "end of score sort"
 msgstr "fin du tri de la partition"
 
-#: Top/main.c:407
+#: Top/main.c:403
 msgid "Syntax check completed.\n"
 msgstr "Vérification de la syntaxe accomplie.\n"
 
@@ -10495,158 +9638,158 @@ msgstr " *** échec de l'allocation mémoire\n"
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr " *** erreur en mettant l'option '%s' à '%s' : %s\n"
 
-#: Top/one_file.c:110 Top/one_file.c:118
+#: Top/one_file.c:120 Top/one_file.c:130
 msgid " *** cannot create temporary file"
 msgstr " *** impossible de créer un fichier temporaire"
 
-#: Top/one_file.c:203
+#: Top/one_file.c:215
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr "Suppression du fichier temporaire %s ...\n"
 
-#: Top/one_file.c:207
+#: Top/one_file.c:219
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr "AVERTISSEMENT : impossible de supprimer %s\n"
 
-#: Top/one_file.c:274 Top/one_file.c:302
+#: Top/one_file.c:286 Top/one_file.c:314
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr "Plus de %d arguments dans <CsOptions>"
 
-#: Top/one_file.c:319
+#: Top/one_file.c:331
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr "Arguments non valides dans <CsOptions> : %s"
 
-#: Top/one_file.c:322
+#: Top/one_file.c:334
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr "Arguments non valides dans .csoundrc ou dans le fichier -@ : %s"
 
-#: Top/one_file.c:328 Top/one_file.c:744
+#: Top/one_file.c:340 Top/one_file.c:763
 msgid "Missing end tag </CsOptions>"
 msgstr "La balise fermante </CsOptions> est absente"
 
-#: Top/one_file.c:354
+#: Top/one_file.c:371
 msgid "Missing end tag </CsInstruments>"
 msgstr "La balise fermante </CsInstruments> est absente"
 
-#: Top/one_file.c:376 Top/one_file.c:430
+#: Top/one_file.c:393 Top/one_file.c:449
 msgid "Missing end tag </CsScore>"
 msgstr "La balise fermante </CsScore> est absente"
 
-#: Top/one_file.c:391 Top/one_file.c:396
+#: Top/one_file.c:408 Top/one_file.c:413
 msgid "Missing program in tag <CsScore>"
 msgstr "La balise fermante </CsScore> est absente"
 
-#: Top/one_file.c:408
+#: Top/one_file.c:425
 #, c-format
 msgid "Creating %s (%p)\n"
 msgstr "Création de %s (%p)\n"
 
-#: Top/one_file.c:421
+#: Top/one_file.c:438
 msgid "External generation failed"
 msgstr "La génération externe a échoué"
 
-#: Top/one_file.c:468
+#: Top/one_file.c:487
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr "Le caractère %c(%2x) n'est pas en base64"
 
-#: Top/one_file.c:487
+#: Top/one_file.c:506
 msgid "Truncated byte at end of base64 stream"
 msgstr "Octet tronqué à la fin du flux base64"
 
-#: Top/one_file.c:503
+#: Top/one_file.c:522
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr "Impossible d'ouvrir le fichier temporaire (%s) comme sous-fichier MIDI"
 
-#: Top/one_file.c:520
+#: Top/one_file.c:539
 msgid "Missing end tag </CsMidifileB>"
 msgstr "La balise fermante </CsMidifileB> est absente"
 
-#: Top/one_file.c:536 Top/one_file.c:584
+#: Top/one_file.c:555 Top/one_file.c:603
 #, c-format
 msgid "File %s already exists"
 msgstr "Le fichier %s existe déjà"
 
-#: Top/one_file.c:541
+#: Top/one_file.c:560
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr "Impossible d'ouvrir le sous-fichier du fichier d'échantillons (%s)"
 
-#: Top/one_file.c:555
+#: Top/one_file.c:574
 msgid "Missing end tag </CsSampleB>"
 msgstr "La balise fermante </CsSampleB> est absente"
 
-#: Top/one_file.c:589
+#: Top/one_file.c:608
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr "Impossible d'ouvrir le sous-fichier du fichier (%s)"
 
-#: Top/one_file.c:604
+#: Top/one_file.c:623
 msgid "Missing end tag </CsFileB>"
 msgstr "La balise fermante </CsFileB> est absente"
 
-#: Top/one_file.c:624
+#: Top/one_file.c:643
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr "Ce fichier CSD nécessite une version de Csound antérieure à la %d.%02d"
 
-#: Top/one_file.c:632 Top/one_file.c:639
+#: Top/one_file.c:651 Top/one_file.c:658
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr "Ce fichier CSD nécessite une version de Csound ultérieure à la %d.%02d"
 
-#: Top/one_file.c:645
+#: Top/one_file.c:664
 msgid "Missing end tag </CsVersion>"
 msgstr "La balise fermante </CsVersion> est absente"
 
-#: Top/one_file.c:655
+#: Top/one_file.c:674
 msgid "**** Licence Information ****\n"
 msgstr "**** Information de Licence ****\n"
 
-#: Top/one_file.c:661
+#: Top/one_file.c:680
 msgid "**** End of Licence Information ****\n"
 msgstr "**** Fin de l'Information de Licence ****\n"
 
-#: Top/one_file.c:672
+#: Top/one_file.c:691
 msgid "Missing end tag </CsLicence>"
 msgstr "La balise fermante </CsLicence> est absente"
 
-#: Top/one_file.c:703
+#: Top/one_file.c:722
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr "L'ouverture du fichier csd a échoué : %s"
 
-#: Top/one_file.c:718
+#: Top/one_file.c:737
 msgid "STARTING FILE\n"
 msgstr "DEBUT DU FICHIER\n"
 
-#: Top/one_file.c:734
+#: Top/one_file.c:753
 msgid "Creating options\n"
 msgstr "Création des options\n"
 
-#: Top/one_file.c:740
+#: Top/one_file.c:759
 msgid "Skipping <CsOptions>\n"
 msgstr "On ignore <CsOptions>\n"
 
-#: Top/one_file.c:754
+#: Top/one_file.c:773
 msgid "Creating orchestra\n"
 msgstr "Création de l'orchestre\n"
 
-#: Top/one_file.c:759
+#: Top/one_file.c:778
 msgid "Creating score\n"
 msgstr "Création de la partition\n"
 
-#: Top/one_file.c:793
+#: Top/one_file.c:812
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr "balise CSD inconnue : %s\n"
 
-#: Top/one_file.c:798
+#: Top/one_file.c:817
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 "La balise <CsoundSynthesizer> n'a pas été trouvée dans le fichier CSD.\n"
@@ -10660,159 +9803,159 @@ msgstr "Erreur lors de la création de la liste d'opcodes"
 msgid "%d opcodes\n"
 msgstr "%d opcodes\n"
 
-#: Top/threads.c:38
+#: Top/threads.c:92 Top/threads.c:556
 #, c-format
 msgid "%s() is not implemented on this platform.\n"
 msgstr "%s() n'est pas implémenté sur cette plateforme.\n"
 
-#: Top/utility.c:98
+#: Top/utility.c:99
 #, c-format
 msgid "util %s:\n"
 msgstr "utilitaire %s :\n"
 
-#: Top/utility.c:105
+#: Top/utility.c:106
 #, c-format
 msgid "Error: utility '%s' not found"
 msgstr "Erreur : l'utilitaire '%s' n'a pas été trouvé"
 
-#: Top/utility.c:108
+#: Top/utility.c:109
 msgid "Error: utility not found"
 msgstr "Erreur : utilitaire non trouvé"
 
-#: Top/utility.c:112
+#: Top/utility.c:113
 msgid "The available utilities are:\n"
 msgstr "Les utilitaires disponibles sont :\n"
 
-#: util1/scot/scot.c:51
+#: util1/scot/scot.c:56
 msgid "Score must start with orchestra section"
 msgstr "Une partition doit débuter par une section d'orchestre"
 
-#: util1/scot/scot.c:61
+#: util1/scot/scot.c:66
 msgid "Expected score or functions section"
 msgstr "Il manque une section de partition ou de fonctions"
 
-#: util1/scot/scot.c:117
+#: util1/scot/scot.c:122
 msgid "Tempo must be specified"
 msgstr "Le tempo doit être spécifié"
 
-#: util1/scot/scot.c:121
+#: util1/scot/scot.c:126
 msgid "Redefinition of tempo"
 msgstr "Redéfinition du tempo"
 
-#: util1/scot/scot.c:133
+#: util1/scot/scot.c:138
 msgid "Must specify 2 or more letters of keyword"
 msgstr "Il faut spécifier un mot-clé d'au moins 2 lettres"
 
-#: util1/scot/scot.c:136 util1/scot/scot.c:145 util1/scot/scot.c:154
+#: util1/scot/scot.c:141 util1/scot/scot.c:150 util1/scot/scot.c:159
 msgid "Must be \"on\" or \"off\""
 msgstr "Doit être \"on\" ou \"off\""
 
-#: util1/scot/scot.c:165
+#: util1/scot/scot.c:170
 msgid "Invalid time signature"
 msgstr "nom de fichier non valide"
 
-#: util1/scot/scot.c:202
+#: util1/scot/scot.c:207
 msgid "Bad key signature"
 msgstr "Mauvaise armature de clé"
 
-#: util1/scot/scot.c:237 util1/scot/scot.c:243
+#: util1/scot/scot.c:242 util1/scot/scot.c:248
 msgid "Invalid field"
 msgstr "descripteur de fichier non valide"
 
-#: util1/scot/scot.c:254 util1/scot/scot.c:258
+#: util1/scot/scot.c:259 util1/scot/scot.c:263
 msgid "Nested next-parameter passing"
 msgstr "Passage de paramètre next imbriqué"
 
-#: util1/scot/scot.c:268
+#: util1/scot/scot.c:273
 msgid "Unrecognised keyword"
 msgstr "Mot-clé non reconnu"
 
-#: util1/scot/scot.c:317
+#: util1/scot/scot.c:322
 msgid "Wrong number of beats in bar"
 msgstr "Mauvais nombre de pulsations dans la mesure"
 
-#: util1/scot/scot.c:325
+#: util1/scot/scot.c:330
 msgid "Syntax error: cannot back up"
 msgstr "Erreur de syntaxe : impossible de sauvegarder"
 
-#: util1/scot/scot.c:496
+#: util1/scot/scot.c:501
 msgid "Improper tie"
 msgstr "Liaison impropre"
 
-#: util1/scot/scot.c:502
+#: util1/scot/scot.c:507
 msgid "Tie between different pitches"
 msgstr "Liaison entre hauteurs différentes"
 
-#: util1/scot/scot.c:510
+#: util1/scot/scot.c:515
 msgid "Warning: params changed on tie"
 msgstr "Avertissement : paramètres changés pendant la liaison"
 
-#: util1/scot/scot.c:562
+#: util1/scot/scot.c:567
 msgid "Parameter number out of range"
 msgstr "Le numéro du périphérique est hors limites"
 
-#: util1/scot/scot.c:622
+#: util1/scot/scot.c:627
 msgid "Lost previous note: not written"
 msgstr "La note précédente est perdue : pas d'écriture"
 
-#: util1/scot/scot.c:741
+#: util1/scot/scot.c:746
 msgid "Macro expansion too long -- circular macros?"
 msgstr "Expension de macro trop longue -- macros circulaires ?"
 
-#: util1/scot/scot.c:817 util1/scot/scot.c:922 util1/scot/scot.c:946
+#: util1/scot/scot.c:822 util1/scot/scot.c:927 util1/scot/scot.c:951
 msgid "Syntax error: no {"
 msgstr "Erreur de syntaxe : no {"
 
-#: util1/scot/scot.c:829
+#: util1/scot/scot.c:834
 msgid "No instrument specified"
 msgstr "Instrument non défini"
 
-#: util1/scot/scot.c:870
+#: util1/scot/scot.c:875
 msgid "unresolved tie"
 msgstr "liaison non résolue"
 
-#: util1/scot/scot.c:872
+#: util1/scot/scot.c:877
 msgid "unresolved slur"
 msgstr "articulation non résolue"
 
-#: util1/scot/scot.c:879
+#: util1/scot/scot.c:884
 msgid "Circular note list\n"
 msgstr "Liste de notes circulaire\n"
 
-#: util1/scot/scot.c:925 util1/scot/scot.c:1039 util1/scot/scot.c:1053
-#: util1/scot/scot.c:1060 util1/scot/scot.c:1085
+#: util1/scot/scot.c:930 util1/scot/scot.c:1044 util1/scot/scot.c:1058
+#: util1/scot/scot.c:1065 util1/scot/scot.c:1090
 msgid "Unexpected end of file"
 msgstr "Fin de fichier inattendue"
 
-#: util1/scot/scot.c:968
+#: util1/scot/scot.c:973
 msgid "Syntax error: no ="
 msgstr "Erreur de syntaxe : no ="
 
-#: util1/scot/scot.c:970
+#: util1/scot/scot.c:975
 msgid "Syntax error: no number"
 msgstr "Erreur de syntaxe : pas de numéro"
 
-#: util1/scot/scot.c:982
+#: util1/scot/scot.c:987
 msgid "No instruments declared"
 msgstr "Aucun instrument n'est déclaré"
 
-#: util1/scot/scot.c:1003
+#: util1/scot/scot.c:1008
 msgid "Expected ="
 msgstr "Il manque ="
 
-#: util1/scot/scot.c:1151
+#: util1/scot/scot.c:1156
 msgid "Invalid pitch class"
 msgstr "Classe de hauteur non valide"
 
-#: util1/scot/scot.c:1296 util1/scot/scot.c:1311 util1/scot/scot.c:1365
+#: util1/scot/scot.c:1301 util1/scot/scot.c:1316 util1/scot/scot.c:1370
 msgid "Division by zero"
 msgstr "Division par zéro"
 
-#: util1/scot/scot.c:1454
+#: util1/scot/scot.c:1461
 msgid "scot processing terminated\n"
 msgstr "traitement scot terminé\n"
 
-#: util1/scot/scot.c:1461
+#: util1/scot/scot.c:1468
 #, c-format
 msgid "scot: %d errors.\n"
 msgstr "scot : %d erreurs.\n"
@@ -10830,8 +9973,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr "sauvegarde des données ATS..."
 
-#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
-#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
+#: util/atsa.c:546 util/atsa.c:2360 util/atsa.c:2374 util/atsa.c:2393
+#: util/atsa.c:2573 util/atsa.c:2636 util/atsa.c:2724
 msgid "done!\n"
 msgstr "fini !\n"
 
@@ -10965,48 +10108,55 @@ msgstr ""
 msgid "Error: sound not optimised !"
 msgstr "Erreur : le son n'est pas optimisé !"
 
-#: util/atsa.c:2013
+#: util/atsa.c:1946 util/atsa.c:1951 util/atsa.c:1962 util/atsa.c:1965
+#: util/atsa.c:1969 util/atsa.c:1978 util/cvanal.c:193 util/hetro.c:607
+#: util/hetro.c:690 util/hetro.c:703
+#, fuzzy
+msgid "Write failure\n"
+msgstr "Echec de l'allocation mémoire"
+
+#: util/atsa.c:2019
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr "atsa : impossible d'ouvrir le fichier '%s' en entrée"
 
-#: util/atsa.c:2020
+#: util/atsa.c:2026
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr "atsa : le fichier a %d voix, doit être mono !"
 
-#: util/atsa.c:2025
+#: util/atsa.c:2031
 msgid "tracking...\n"
 msgstr "pistage...\n"
 
-#: util/atsa.c:2034
+#: util/atsa.c:2040
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr "le début %f est hors limites, corrigé à 0.0"
 
-#: util/atsa.c:2044
+#: util/atsa.c:2050
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr "la durée %f est hors limites, limitée à la durée du fichier"
 
-#: util/atsa.c:2050
+#: util/atsa.c:2056
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr "début : %f, durée : %f, durée du fichier : %f\n"
 
-#: util/atsa.c:2057
+#: util/atsa.c:2063
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 "fréq. la plus basse %f hors limites, forcée à la valeur par défaut : %f"
 
-#: util/atsa.c:2067
+#: util/atsa.c:2073
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 "fréq. la plus haute %f hors limites, forcée à la valeur par défaut : %f"
 
-#: util/atsa.c:2074
+#: util/atsa.c:2080
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
@@ -11015,7 +10165,7 @@ msgstr ""
 "dév. de fréq. %f hors limites, doit être > 0.0 et <= 1.0, forcée à la valeur "
 "par défaut : %f"
 
-#: util/atsa.c:2082
+#: util/atsa.c:2088
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
@@ -11024,7 +10174,7 @@ msgstr ""
 "cycles par fenêtre %d hors limites, doivent être entre 1 et 8, forcés à la "
 "valeur par défaut : %d"
 
-#: util/atsa.c:2090
+#: util/atsa.c:2096
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
@@ -11033,7 +10183,7 @@ msgstr ""
 "type de fenêtre %d hors limites, doit être entre 0 et 3, forcé à la valeur "
 "par défaut : %d"
 
-#: util/atsa.c:2098
+#: util/atsa.c:2104
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
@@ -11041,7 +10191,7 @@ msgstr ""
 "taille de saut %f hors limites, doit être > 0.0 et <= 1.0, forcée à la "
 "valeur par défaut : %f"
 
-#: util/atsa.c:2106
+#: util/atsa.c:2112
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
@@ -11050,28 +10200,28 @@ msgstr ""
 "magnitude la plus faible %f hors limites, doit être >= 0.0 et <= 1.0, forcée "
 "à la valeur par défaut : %f"
 
-#: util/atsa.c:2130
+#: util/atsa.c:2136
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 "atsa : %d trames ne suffisent pas pour l'analyse, il en faut au moins %d"
 
-#: util/atsa.c:2139
+#: util/atsa.c:2145
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr "longueur de trajectoire %d hors limites, forcée à : %d"
 
-#: util/atsa.c:2148
+#: util/atsa.c:2154
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr "longueur min. de segment %d hors limites, forcée à : %d"
 
-#: util/atsa.c:2157
+#: util/atsa.c:2163
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr "longueur de blanc min. %d hors limites, forcée à : %d"
 
-#: util/atsa.c:2163
+#: util/atsa.c:2169
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
@@ -11080,7 +10230,7 @@ msgstr ""
 "seuil de SMR %f hors limites, doit être >= 0.0 et < %f dB SPL, forcé à la "
 "valeur par défaut : %f"
 
-#: util/atsa.c:2174
+#: util/atsa.c:2180
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
@@ -11089,7 +10239,7 @@ msgstr ""
 "SMR min. de seg. %f hors limites, doit être >= %f et < %f dB SPL, forcé à la "
 "valeur par défaut : %f"
 
-#: util/atsa.c:2182
+#: util/atsa.c:2188
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
@@ -11098,7 +10248,7 @@ msgstr ""
 "contribution du dernier pic %f hors limites, doit être >= 0.0 et <= 1.0, "
 "forcé à la valeur par défaut : %f"
 
-#: util/atsa.c:2190
+#: util/atsa.c:2196
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
@@ -11107,39 +10257,39 @@ msgstr ""
 "contribution du SMR %f hors limites, doit être >= 0.0 et <= 1.0, forcé à la "
 "valeur par défaut : %f"
 
-#: util/atsa.c:2335
+#: util/atsa.c:2341
 msgid "Initializing ATS data..."
 msgstr "Initialisation des données ATS..."
 
-#: util/atsa.c:2365
+#: util/atsa.c:2371
 msgid "Computing residual..."
 msgstr "Calcul des résiduels..."
 
-#: util/atsa.c:2381 util/atsa.c:2384
+#: util/atsa.c:2387 util/atsa.c:2390
 msgid "Analysing residual..."
 msgstr "Analyse des résiduels..."
 
-#: util/atsa.c:2389
+#: util/atsa.c:2395
 msgid "tracking completed.\n"
 msgstr "pistage complet.\n"
 
-#: util/atsa.c:2497
+#: util/atsa.c:2503
 msgid "Filling sound gaps..."
 msgstr "Remplissage des blancs..."
 
-#: util/atsa.c:2585
+#: util/atsa.c:2591
 msgid "Trimming short partials..."
 msgstr "Elimination des partiels courts..."
 
-#: util/atsa.c:2681
+#: util/atsa.c:2687
 msgid "Computing averages..."
 msgstr "Calcul des moyennes..."
 
-#: util/atsa.c:2732
+#: util/atsa.c:2738
 msgid "No partials to track -- stopping\n"
 msgstr "Aucun partiel à pister -- arrêt\n"
 
-#: util/atsa.c:2832
+#: util/atsa.c:2838
 msgid "Soundfile analysis for ATS opcodes"
 msgstr "Analyse du fichier son pour les opcodes ATS"
 
@@ -11210,7 +10360,7 @@ msgstr ""
 msgid "less sound than expected!\n"
 msgstr "moins de son que ce qui était attendu !\n"
 
-#: util/cvanal.c:243
+#: util/cvanal.c:244
 msgid "Soundfile analysis for convolve"
 msgstr "Analyse du fichier son pour convolve"
 
@@ -11298,7 +10448,7 @@ msgstr "Il faut un fichier d'exemple de bruit (-i name)\n"
 msgid "cannot open %s.\n"
 msgstr "impossible d'ouvrir %s.\n"
 
-#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
+#: util/dnoise.c:480 util/srconv.c:461 util/srconv.c:473
 #, c-format
 msgid "cannot open %s."
 msgstr "impossible d'ouvrir %s"
@@ -11481,7 +10631,7 @@ msgstr "Nettoie le bruit d'un fichier son"
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr "Utilisation : \tenvext [-options] fichierson\n"
 
-#: util/envext.c:54 util/srconv.c:737
+#: util/envext.c:54 util/srconv.c:738
 msgid "-o fnam\tsound output filename\n"
 msgstr "-o nomfic\tnom du fichier son de sortie\n"
 
@@ -11530,7 +10680,7 @@ msgid "Cannot open input file %s\n"
 msgstr "Impossible d'ouvrir le fichier d'entrée %s\n"
 
 #: util/het_export.c:61 util/lpc_export.c:66 util/lpc_import.c:62
-#: util/pv_export.c:64 util/pv_import.c:111
+#: util/pv_export.c:64 util/pv_import.c:123
 #, c-format
 msgid "Cannot open output file %s\n"
 msgstr "Impossible d'ouvrir le fichier de sortie %s\n"
@@ -11553,7 +10703,7 @@ msgstr "Impossible d'ouvrir le fichier csv d'entrée %s\n"
 msgid "Cannot open output hetro file %s\n"
 msgstr "Impossible d'ouvrir le fichier hetro de sortie %s\n"
 
-#: util/het_import.c:108
+#: util/het_import.c:111
 msgid "translate text form to hetro analysis file"
 msgstr "traduction du format texte en fichier d'analyse hetro"
 
@@ -11653,49 +10803,49 @@ msgstr ""
 msgid "cannot create output file\n"
 msgstr "impossible de créer le fichier de sortie\n"
 
-#: util/hetro.c:616
+#: util/hetro.c:617
 #, c-format
 msgid "scale = %f\n"
 msgstr "scale = %f\n"
 
-#: util/hetro.c:711
+#: util/hetro.c:714
 #, c-format
 msgid "harmonic #%d:\tamp points %d, \tfrq points %d,\tpeakamp %d\n"
 msgstr ""
 "harmonique %d :\tpoints d'amp %d,\tpoints de frq %d,\tamp de crête %d\n"
 
-#: util/hetro.c:715
+#: util/hetro.c:718
 #, c-format
 msgid "wrote %ld bytes to %s\n"
 msgstr "%ld octets écrits vers %s\n"
 
-#: util/hetro.c:747
+#: util/hetro.c:750
 msgid "OOPS: SDIF does not work on this machine!\n"
 msgstr "OOPS : SDIF ne fonctionne pas sur cette machine !\n"
 
-#: util/hetro.c:773
+#: util/hetro.c:776
 #, c-format
 msgid "Error creating %s\n"
 msgstr "Erreur en créant %s\n"
 
-#: util/hetro.c:801
+#: util/hetro.c:804
 msgid "Error writing SDIF frame header.\n"
 msgstr "Erreur en écrivant un en-tête de trame SDIF.\n"
 
-#: util/hetro.c:810
+#: util/hetro.c:813
 msgid "Error writing SDIF matrix header.\n"
 msgstr "Erreur en écrivant un en-tête de matrice SDIF.\n"
 
-#: util/hetro.c:823
+#: util/hetro.c:826
 msgid "Error writing SDIF data.\n"
 msgstr "Erreur en écrivant des données SDIF.\n"
 
-#: util/hetro.c:830
+#: util/hetro.c:833
 #, c-format
 msgid "wrote %ld 1TRC frames to %s\n"
 msgstr "%ld trames 1TRC on été écrites vers %s\n"
 
-#: util/hetro.c:858
+#: util/hetro.c:861
 msgid "Soundfile analysis for adsyn"
 msgstr "Analyse du fichier son pour adsyn"
 
@@ -11923,7 +11073,12 @@ msgstr "Utilisation : lpc_export fichier_lpc fichier_cstext\n"
 msgid "Failed to read LPC header\n"
 msgstr "La lecture de l'en-tête LPC a échoué\n"
 
-#: util/lpc_export.c:102
+#: util/lpc_export.c:81 util/lpc_export.c:88
+#, fuzzy
+msgid "Read faailure\n"
+msgstr "Echec de l'allocation mémoire"
+
+#: util/lpc_export.c:106
 msgid "translate linear predictive coding file to text file"
 msgstr ""
 "traduction du fichier de codage de prédiction linéaire en fichier texte"
@@ -11932,7 +11087,12 @@ msgstr ""
 msgid "Usage: lpc_import cstext_file lpc_file\n"
 msgstr "Utilisation : lpc_import fichier_cstext fichier_lpc\n"
 
-#: util/lpc_import.c:98
+#: util/lpc_import.c:77 util/lpc_import.c:84 util/srconv.c:378
+#, fuzzy
+msgid "Read failure\n"
+msgstr "Echec de l'allocation mémoire"
+
+#: util/lpc_import.c:102
 msgid "translate text file to linear predictive coding file"
 msgstr ""
 "traduction du fichier texte en fichier de codage de prédiction linéaire"
@@ -11950,7 +11110,7 @@ msgstr "Utilisation :\tmixer [-options] fichierson [-options] fichierson ..."
 msgid "Legal flags are:"
 msgstr "Les options légales sont :"
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 "-H#\taffiche une pulsation de style 1, 2 ou 3 à chaque écriture dans le "
@@ -12256,11 +11416,21 @@ msgstr "traduction du fichier d'analyse PVOC en format texte"
 msgid "Usage: pv_import cstext_file pv_file \n"
 msgstr "Utilisation : pv_import fichier_textcsv fichier_pv\n"
 
-#: util/pv_import.c:127
+#: util/pv_import.c:73 util/pv_import.c:93
+#, fuzzy
+msgid "Not a PV file\n"
+msgstr "%s : n'est pas un fichier son\n"
+
+#: util/pv_import.c:132
+#, fuzzy
+msgid "Memory failure\n"
+msgstr "Echec de l'allocation mémoire"
+
+#: util/pv_import.c:143
 msgid "Sync error\n"
 msgstr "Erreur de syncro\n"
 
-#: util/pv_import.c:148
+#: util/pv_import.c:164
 msgid "translate text form to PVOC analysis file"
 msgstr "traduction d'un format texte en un fichier d'analyse PVOC"
 
@@ -12335,7 +11505,7 @@ msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 "-P fpnum\tpondère le fichier au pourcentage de la valeur maximale donné"
 
-#: util/scale.c:62 util/srconv.c:754
+#: util/scale.c:62 util/srconv.c:755
 msgid "-- fnam\tlog output to file"
 msgstr "-- nomfic\tcompte-rendu en sortie dans le fichier"
 
@@ -12518,30 +11688,30 @@ msgstr ""
 "srconv : impossible d'ouvrir le fichier de la fonction de variation "
 "temporelle"
 
-#: util/srconv.c:388
+#: util/srconv.c:389
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 "srconv : trop peu de paires x-y dans le fichier de la fonction de variation "
 "temporelle"
 
-#: util/srconv.c:402
+#: util/srconv.c:403
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 "srconv : la première valeur de x dans la fonction de variation temporelle "
 "doit être 0"
 
-#: util/srconv.c:407
+#: util/srconv.c:408
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 "srconv : valeur initiale de y non valide dans la fonction de variation "
 "temporelle"
 
-#: util/srconv.c:412 util/srconv.c:704
+#: util/srconv.c:413 util/srconv.c:705
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 "srconv : valeurs de x non valides dans la fonction de variation temporelle"
 
-#: util/srconv.c:731
+#: util/srconv.c:732
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
@@ -12551,26 +11721,26 @@ msgstr ""
 "\n"
 "options : "
 
-#: util/srconv.c:732
+#: util/srconv.c:733
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 "-P num\trapport de transposition de hauteur (srate/r) [ne pas spécifier à la "
 "fois P et r]"
 
-#: util/srconv.c:734
+#: util/srconv.c:735
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr "-Q num\tfacteur de qualité (1 à 8 : par défaut = 2)"
 
-#: util/srconv.c:735
+#: util/srconv.c:736
 msgid "-i filnam\tbreak file"
 msgstr "-i nomfic\tfichier de segments"
 
-#: util/srconv.c:736
+#: util/srconv.c:737
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr "r num\ttaux d'échantillonnage en sortie (doit être spécifié)"
 
-#: util/srconv.c:820
+#: util/srconv.c:821
 msgid "Sample rate conversion"
 msgstr "Conversion du taux d'échantillonnage"
 
@@ -12722,6 +11892,648 @@ msgstr "extraction depuis la trame d'échantillon %ld (%3.1f secs)\n"
 msgid "Extract part of a sound file"
 msgstr "Extraction d'une partie d'un fichier son"
 
+#~ msgid "Unknown word type for %s on line %d\n"
+#~ msgstr "Type de mot inconnu pour %s à la ligne %d\n"
+
+#~ msgid "dates: buffer overflow"
+#~ msgstr "dates : dépassement de tampon"
+
+#~ msgid "DSSI4CS: Not initialised or wrong argument types."
+#~ msgstr "DSSI4CS : non initialisé ou types d'argument incorrects."
+
+#~ msgid "Failed to load plugin \"%s\": %s"
+#~ msgstr "Le chargement du plugin \"%s\" a échoué : %s"
+
+#~ msgid ""
+#~ "Unable to find ladspa_descriptor() function in plugin library file \"%s"
+#~ "\": %s.\n"
+#~ "Are you sure this is a LADSPA plugin file ?"
+#~ msgstr ""
+#~ "Impossible de trouver la fonction ladspa_descriptor() dans le fichier de "
+#~ "bibliothèque de plugin \"%s\" : %s.\n"
+#~ "Etes-vous sûr que c'est un fichier de plugin LADSPA ?"
+
+#~ msgid ""
+#~ "Unable to find ladspa_descriptor() function in plugin library file \"%s"
+#~ "\".\n"
+#~ "Are you sure this is a LADSPA plugin file ?"
+#~ msgstr ""
+#~ "Impossible de trouver la fonction ladspa_descriptor() dans le fichier de "
+#~ "bibliothèque de plugin \"%s\".\n"
+#~ "Etes-vous sûr que c'est un fichier de plugin LADSPA ?"
+
+#~ msgid "Unable to find label \"%s\" in plugin library file \"%s\"."
+#~ msgstr ""
+#~ "Impossible de trouver l'étiquette \"%s\" dans le fichier de bibliothèque "
+#~ "de plugin \"%s\"."
+
+#~ msgid "insufficient arguments for fareytable"
+#~ msgstr "arguments insuffisants pour une table de Farey"
+
+#~ msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
+#~ msgstr "Farey : No de table < 1 dft=%.2f  sft=%.2f"
+
+#~ msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
+#~ msgstr "Farey : Type de filtre < 1 dft=%.2f  sft=%.2f"
+
+#~ msgid "Farey: Destination dft table %.2f not found."
+#~ msgstr "Farey : Table dft de destination %.2f introuvable"
+
+#~ msgid "Farey: Source sft table %.2f not found."
+#~ msgstr "Farey : Table sft source %.2f introuvable"
+
+#~ msgid "Farey: Filter type < 1"
+#~ msgstr "Farey : Type de filtre < 1"
+
+#~ msgid "Table no. < 1 sft=%.2f"
+#~ msgstr "Numéro de table < 1 sft=%.2f"
+
+#~ msgid "Filter order out of bounds: (1 <= nb < 51, 0 <= na <= 50)"
+#~ msgstr "Ordre du filtre hors limites : (1 <= nb < 51, 0 <= na <= 50)"
+
+#~ msgid "too many iterations in laguer"
+#~ msgstr "trop d'itérations dans laguer"
+
+#~ msgid ""
+#~ "wguide2 xfreq1 and xfreq2 arguments must be both a-rate or k and i-rate"
+#~ msgstr ""
+#~ "wguide2 : les arguments xfreq1 et xfreq2 doivent être tous les deux de "
+#~ "taux-a ou de taux-k et i"
+
+#~ msgid "error allocating fluid engine\n"
+#~ msgstr "erreur à l'allocation du moteur fluid\n"
+
+#~ msgid ""
+#~ "Created fluidEngine %d with sampling rate = %f, chorus %s, reverb %s, "
+#~ "channels %d, polyphony %d.\n"
+#~ msgstr ""
+#~ "fluidEngine %d a été crée avec un taux d'échantillonnage = %f, chorus %s, "
+#~ "reverb %s, canaux %d, polyphonie %d.\n"
+
+#~ msgid "Illegal Engine Number: %i.\n"
+#~ msgstr "Numéro de moteur illégal : %i.\n"
+
+#~ msgid "Loading SoundFont : %s.\n"
+#~ msgstr "Chargement de SoundFont : %s.\n"
+
+#~ msgid "fluid: unable to load %s"
+#~ msgstr "fluid : impossible d'ouvrir le fichier %s"
+
+#~ msgid "SoundFont: %3d  Bank: %3d  Preset: %3d  %s\n"
+#~ msgstr "SoundFont : %3d  Banque : %3d  Preset : %3d  %s\n"
+
+#~ msgid ""
+#~ "result: %d \n"
+#~ " Note off: c:%3d k:%3d\n"
+#~ msgstr ""
+#~ "résultat : %d \n"
+#~ " Note off : c:%3d k:%3d\n"
+
+#~ msgid ""
+#~ "result: %d \n"
+#~ "Note on: c:%3d k:%3d v:%3d\n"
+#~ msgstr ""
+#~ "résultat : %d \n"
+#~ " Note on : c:%3d k:%3d v:%3d\n"
+
+#~ msgid "Key pressure (not handled): c:%3d k:%3d v:%3d\n"
+#~ msgstr "Pression de touche (non traitée) : c:%3d k:%3d v:%3d\n"
+
+#~ msgid "Result: %d Control change: c:%3d c:%3d v:%3d\n"
+#~ msgstr "Résultat : %d Changement de contrôle : c:%3d c:%3d v:%3d\n"
+
+#~ msgid "Result: %d Program change: c:%3d p:%3d\n"
+#~ msgstr "Résultat : %d Changement de programme : c:%3d p:%3d\n"
+
+#~ msgid "Result: %d, Pitch bend:     c:%d b:%d\n"
+#~ msgstr "Résultat : %d, Pitch bend :     c:%d b:%d\n"
+
+#~ msgid "System exclusive (not handled): c:%3d v1:%3d v2:%3d\n"
+#~ msgstr "Système exclusif (non traité) : c:%3d v1:%3d v2:%3d\n"
+
+#~ msgid "Illegal Interpolation Method: Must be either 0, 1, 4, or 7.\n"
+#~ msgstr "Méthode d'interpolation illégale : doit valoir 0, 1, 4 ou 7.\n"
+
+#~ msgid "No table for VibWaveato"
+#~ msgstr "Pas de table pour VibWaveato"
+
+#~ msgid "No table for FM4Op"
+#~ msgstr "Pas de table pour FM40p"
+
+#~ msgid "follow - zero length!"
+#~ msgstr "follow - longueur nulle !"
+
+#~ msgid "Closing file '%s'...\n"
+#~ msgstr "Fermeture du fichier '%s'...\n"
+
+#~ msgid "invalid file handle"
+#~ msgstr "descripteur de fichier non valide"
+
+#~ msgid "invalid file name"
+#~ msgstr "nom de fichier non valide"
+
+#~ msgid "error opening file '%s'"
+#~ msgstr "erreur en ouvrant le fichier '%s'"
+
+#~ msgid "error opening sound file '%s'"
+#~ msgstr "erreur en ouvrant le fichier son '%s'"
+
+#~ msgid "cannot close '%s': not found in list of open files"
+#~ msgstr ""
+#~ "impossible de fermet '%s' : il n'a pas été trouvé dans la liste des "
+#~ "fichiers ouverts"
+
+#~ msgid "cannot close file #%d: not a valid handle"
+#~ msgstr ""
+#~ "impossible de fermer le fichier #%d : ce n'est pas un descripteur valide"
+
+#~ msgid "file #%d (%s) is in use, will be closed when released"
+#~ msgstr "le fichier #%d (%s) est utilisé, il sera fermé à sa libération"
+
+#~ msgid "fouti: invalid file handle"
+#~ msgstr "fouti : descripteur de fichier non valide"
+
+#~ msgid "freeverb: not initialised"
+#~ msgstr "freeverb : non initialisé"
+
+#~ msgid "ftconv: invalid number of channels"
+#~ msgstr "ftconv : nombre de canaux non valide"
+
+#~ msgid "ftconv: invalid impulse response partition length"
+#~ msgstr ""
+#~ "ftconv : longueur de partition de la réponse impulsionnelle non valide"
+
+#~ msgid "ftconv: invalid length, or insufficient IR data for convolution"
+#~ msgstr ""
+#~ "ftconv : longueur non valide, ou pas assez de données de RI pour la "
+#~ "convolution"
+
+#~ msgid ""
+#~ "ftconv: skipped non-zero samples, impulse response may be truncated\n"
+#~ msgstr ""
+#~ "ftconv : des échantillons non nuls ont été sautés, la réponse "
+#~ "impulsionnelle est peut-être tronquée\n"
+
+#~ msgid "ftconv: not initialised"
+#~ msgstr "ftconv : non initialisé"
+
+#~ msgid "Error deleting ftable %d"
+#~ msgstr "Erreur en supprimant la ftable %d"
+
+#~ msgid "Invalid table number: %d"
+#~ msgstr "Numéro de table non valide : %d"
+
+#~ msgid "ftload: error allocating ftable"
+#~ msgstr "ftload : erreur d'allocation de la ftable"
+
+#~ msgid "ftload: no table numbers"
+#~ msgstr "ftload : pas de numéro de table"
+
+#~ msgid "ftload: unable to open file"
+#~ msgstr "ftload : impossible d'ouvrir le fichier"
+
+#~ msgid "ftload: incorrect file"
+#~ msgstr "ftload : fichier incorrect"
+
+#~ msgid ""
+#~ "ftsave: Bad table number. Saving is possible only for existing tables."
+#~ msgstr ""
+#~ "ftsave : mauvais numéro de table. La sauvegarde n'est possible que pour "
+#~ "des tables existantes."
+
+#~ msgid "ftsave: no table numbers"
+#~ msgstr "ftsave : pas de numéros de table"
+
+#~ msgid "ftsave: unable to open file"
+#~ msgstr "ftsave : impossible d'ouvrir le fichier"
+
+#~ msgid "ftsave: failed to write file"
+#~ msgstr "ftsave : impossible d'ouvrir le fichier"
+
+#~ msgid "fastab: incorrect table number"
+#~ msgstr "fastab : numéro de table incorrect"
+
+#~ msgid "tabw off end"
+#~ msgstr "tabw hors-limite"
+
+#~ msgid "tab off end"
+#~ msgstr "tab hors-limite"
+
+#~ msgid "tab_i: incorrect table number"
+#~ msgstr "tab_i : numéro de table incorrect"
+
+#~ msgid "tab_i off end: table number: %d\n"
+#~ msgstr "tab_i hors-limite : numéro de table : %d\n"
+
+#~ msgid "tabw_i: incorrect table number"
+#~ msgstr "tabw_i : numéro de table incorrect"
+
+#~ msgid "tabw_i off end"
+#~ msgstr "tabw_i hors-limite"
+
+#~ msgid "tab_init: incorrect table number"
+#~ msgstr "tab_init : numéro de table incorrect"
+
+#~ msgid "printi parameter was not a \"quoted string\""
+#~ msgstr "printi : le paramètre n'était pas une \"chaîne entre guillemets\""
+
+#~ msgid "adsynt2: wavetable not found!"
+#~ msgstr "adsynt2 : la table d'onde n'a pas été trouvée !"
+
+#~ msgid "adsynt2: freqtable not found!"
+#~ msgstr "adsynt2 : la table de fréq n'a pas été trouvée !"
+
+#~ msgid "adsynt2: partial count is greater than freqtable size!"
+#~ msgstr ""
+#~ "adsynt2 : le nombre de partiels est supérieur à la taille de la table de "
+#~ "fréq !"
+
+#~ msgid "adsynt2: amptable not found!"
+#~ msgstr "adsynt2 : la table d'amp n'a pas été trouvée !"
+
+#~ msgid "adsynt2: partial count is greater than amptable size!"
+#~ msgstr ""
+#~ "adsynt2 : le nombre de partiels est supérieur à la taille de la table "
+#~ "d'amp !"
+
+#~ msgid "adsynt2: not initialised"
+#~ msgstr "adsynt2 : non initialisé"
+
+#~ msgid "max_k: invalid imaxflag value"
+#~ msgstr "max_k : valeur de imaxflag non valide"
+
+#~ msgid "hvs1: a line segment must be delimited by 2 points at least"
+#~ msgstr ""
+#~ "hvs1 : un segment de droite doit être délimité par 2 points au moins"
+
+#~ msgid "hvs2: a square area must be delimited by 2 lines at least"
+#~ msgstr ""
+#~ "hvs2 : une surface carrée doit être délimitée par 2 droites au moins"
+
+#~ msgid "hvs3: a square area must be delimited by 2 lines at least"
+#~ msgstr ""
+#~ "hvs3 : une surface carrée doit être délimitée par 2 droites au moins"
+
+#~ msgid "vphaseseg: the first function is invalid or missing"
+#~ msgstr "vphaseseg : la première fonction est non valide ou manquante"
+
+#~ msgid "vphaseseg: invalid num. of elements"
+#~ msgstr "vphaseseg : nombre d'éléments non valide"
+
+#~ msgid "vphaseseg: function invalid or missing"
+#~ msgstr "vphaseseg : fonction non valide ou manquante"
+
+#~ msgid "vtable1: incorrect table number"
+#~ msgstr "vtable1 : numéro de table incorrect"
+
+#~ msgid "copyTabElems: incorrect destination table number"
+#~ msgstr "copyTabElems : numéro de table incorrect"
+
+#~ msgid ""
+#~ "copyTabElems: destination table too short or number of elements to copy "
+#~ "too big"
+#~ msgstr ""
+#~ "copyTabElems : table de destination trop courte ou nombre d'éléments à "
+#~ "copier trop grand"
+
+#~ msgid "copyTabElems: incorrect source table number"
+#~ msgstr "copyTabElems : numéro de table source incorrect"
+
+#~ msgid ""
+#~ "copyTabElems: source table size less than the number of elements to copy"
+#~ msgstr ""
+#~ "copyTabElems : taille de la table source inférieure au nombre d'éléments "
+#~ "à copier"
+
+#~ msgid "copyTabElems: source table too short"
+#~ msgstr "copyTabElems : table source trop courte"
+
+#~ msgid "copyTabElems: destination table too short"
+#~ msgstr "copyTabElems : table de destination trop courte"
+
+#~ msgid "inrg: audio input is not enabled"
+#~ msgstr "inrg : entrée audio désactivée"
+
+#~ msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
+#~ msgstr ""
+#~ "inrg : le numéro de canal ne peut pas être < 1 (1 est le premier canal)"
+
+#~ msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
+#~ msgstr ""
+#~ "outrg : le numéro de canal ne peut pas être < 1 (1 est le premier canal)"
+
+#~ msgid "invalid function"
+#~ msgstr "fonction non valide"
+
+#~ msgid "lposc: no sample rate stored in function; assuming=sr\n"
+#~ msgstr ""
+#~ "lposc : pas de taux d'échantillonnage dans la fonction ; on suppose = sr\n"
+
+#~ msgid "lposcil: no sample rate stored in function assuming=sr\n"
+#~ msgstr ""
+#~ "lposcil : pas de taux d'échantillonnage dans la fonction ; on suppose = "
+#~ "sr\n"
+
+#~ msgid "lposcil: no sample rate stored in function; assuming=sr\n"
+#~ msgstr ""
+#~ "lposcil : pas de taux d'échantillonnage dans la fonction ; on suppose = "
+#~ "sr\n"
+
+#~ msgid ""
+#~ "sliderXtable: illegal initvalue at position %d.  When using table "
+#~ "indexing, the init range is 0 to 1"
+#~ msgstr ""
+#~ "sliderXtable : valeur d'initialisation illégale à la position %d. Lorsque "
+#~ "l'on utilise une indexation de table, l'intervalle d'initialisation va de "
+#~ "0 à 1"
+
+#~ msgid "sliderXtable: zero is illegal in exponential operations"
+#~ msgstr "sliderXtable : zéro est illégal dans les opérations exponentielles"
+
+#~ msgid ""
+#~ "sliderXtable: illegal initvalue at position %d. When using table "
+#~ "indexing, the init range is 0 to 1"
+#~ msgstr ""
+#~ "sliderXtable : valeur d'initialisation illégale à la position %d. Lorsque "
+#~ "l'on utilise une indexation de table, l'intervalle d'initialisation va de "
+#~ "0 à 1"
+
+#~ msgid "tabmorph: invalid table number"
+#~ msgstr "tabmorph : numéro de table non valide"
+
+#~ msgid "tabmorph: all tables must have the same length!"
+#~ msgstr "tabmorph : toutes les tables doivent avoir la même longueur !"
+
+#~ msgid "mtablei: incorrect table number"
+#~ msgstr "mtablei : numéro de table incorrect"
+
+#~ msgid "mtable: incorrect table number"
+#~ msgstr "mtable : numéro de table incorrect"
+
+#~ msgid "mtabi: incorrect table number"
+#~ msgstr "mtabi : numéro de table incorrect"
+
+#~ msgid "mtablewi: incorrect table number"
+#~ msgstr "mtablewi : numéro de table incorrect"
+
+#~ msgid "mtabw: incorrect table number"
+#~ msgstr "mtabw : numéro de table incorrect"
+
+#~ msgid "mtabwi: incorrect table number"
+#~ msgstr "mtabwi : numéro de table incorrect"
+
+#~ msgid "mtablew: incorrect table number"
+#~ msgstr "mtablew : numéro de table incorrect"
+
+#~ msgid "vadd_i: invalid table number %i"
+#~ msgstr "vadd_i : numéro de table %i non valide"
+
+#~ msgid "vadd_i: ifn length exceeded"
+#~ msgstr "vadd_i : la longueur de ifn a été dépassée"
+
+#~ msgid "vadd: ifn1 length exceeded"
+#~ msgstr "vadd : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vmult_i: ifn length exceeded"
+#~ msgstr "vmult_i : la longueur de ifn a été dépassée"
+
+#~ msgid "vmult: ifn1 length exceeded"
+#~ msgstr "vmult : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vpow_i: invalid table number %i"
+#~ msgstr "vpow_i : numéro de table %i non valide"
+
+#~ msgid "vpow_i: ifn length exceeded"
+#~ msgstr "vpow_i : la longueur de ifn a été dépassée"
+
+#~ msgid "vpow: ifn1 length exceeded"
+#~ msgstr "vpow : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vexp_i: invalid table number %i"
+#~ msgstr "vexp_i : numéro de table %i non valide"
+
+#~ msgid "vexp_i: ifn length exceeded"
+#~ msgstr "vexp_i : la longueur de ifn a été dépassée"
+
+#~ msgid "vexp: ifn1 length exceeded"
+#~ msgstr "vexp : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vectorsop: ifn1 invalid table number %i"
+#~ msgstr "vectorsop : ifn1 numéro de table %i non valide"
+
+#~ msgid "vectorsop: ifn2 invalid table number %i"
+#~ msgstr "vectorsop : ifn2 numéro de table %i non valide"
+
+#~ msgid "vcopy: ifn1 length exceeded"
+#~ msgstr "vcopy : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vcopy: ifn2 length exceeded"
+#~ msgstr "vcopy : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vcopy_i: ifn1 invalid table number %i"
+#~ msgstr "vcopy_i : ifn1 numéro de table %i non valide"
+
+#~ msgid "vcopy_i: ifn2 invalid table number %i"
+#~ msgstr "vcopy_i : ifn2 numéro de table %i non valide"
+
+#~ msgid "vcopy_i: ifn1 length exceeded"
+#~ msgstr "vcopy_i : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vcopy_i: ifn2 length exceeded"
+#~ msgstr "vcopy_i : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vaddv: ifn1 length exceeded"
+#~ msgstr "vaddv : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vaddv: ifn2 length exceeded"
+#~ msgstr "vaddv : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vaddv_i: ifn1 invalid table number %i"
+#~ msgstr "vaddv_i : ifn1 numéro de table %i non valide"
+
+#~ msgid "vaddv_i: ifn2 invalid table number %i"
+#~ msgstr "vaddv_i : ifn2 numéro de table %i non valide"
+
+#~ msgid "vaddv_i: ifn1 length exceeded"
+#~ msgstr "vaddv_i : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vaddv_i: ifn2 length exceeded"
+#~ msgstr "vaddv_i : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vsubv: ifn1 length exceeded"
+#~ msgstr "vsubv :  la longueur de ifn1 a été dépassée"
+
+#~ msgid "vsubv: ifn2 length exceeded"
+#~ msgstr "vsubv : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vsubv_i: ifn1 invalid table number %i"
+#~ msgstr "vsubv_i : ifn1 numéro de table %i non valide"
+
+#~ msgid "vsubv_i: ifn2 invalid table number %i"
+#~ msgstr "vsubv_i : ifn2 numéro de table %i non valide"
+
+#~ msgid "vsubv_i: ifn1 length exceeded"
+#~ msgstr "vsubv_i : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vsubv_i: ifn2 length exceeded"
+#~ msgstr "vsubv_i : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vmultv: ifn1 length exceeded"
+#~ msgstr "vmultv : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vmultv: ifn2 length exceeded"
+#~ msgstr "vmultv : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vmultv_i: ifn1 invalid table number %i"
+#~ msgstr "vmultv_i : ifn1 numéro de table %i non valide"
+
+#~ msgid "vmultv_i: ifn2 invalid table number %i"
+#~ msgstr "vmultv_i : ifn2 numéro de table %i non valide"
+
+#~ msgid "vmultv_i: ifn1 length exceeded"
+#~ msgstr "vmultv_i : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vmultv_i: ifn2 length exceeded"
+#~ msgstr "vmultv_i : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vdivv: ifn1 length exceeded"
+#~ msgstr "vdivv : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vdivv: ifn2 length exceeded"
+#~ msgstr "vdivv : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vdivv_i: ifn1 invalid table number %i"
+#~ msgstr "vdivv_i : ifn1 numéro de table %i non valide"
+
+#~ msgid "vdivv_i: ifn2 invalid table number %i"
+#~ msgstr "vdivv_i : ifn2 numéro de table %i non valide"
+
+#~ msgid "vdivv_i: ifn1 length exceeded"
+#~ msgstr "vdivv_i : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vdivv_i: ifn2 length exceeded"
+#~ msgstr "vdivv_i : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vpowv: ifn1 length exceeded"
+#~ msgstr "vpowv : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vpowv: ifn2 length exceeded"
+#~ msgstr "vpowv : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vpowv_i: ifn1 invalid table number %i"
+#~ msgstr "vpowv_i : ifn1 numéro de table %i non valide"
+
+#~ msgid "vpowv_i: ifn2 invalid table number %i"
+#~ msgstr "vpowv_i : ifn2 numéro de table %i non valide"
+
+#~ msgid "vpowv_i: ifn1 length exceeded"
+#~ msgstr "vpowv_i : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vpowv_i: ifn2 length exceeded"
+#~ msgstr "vpowv_i : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vexpv: ifn1 length exceeded"
+#~ msgstr "vexpv : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vexpv: ifn2 length exceeded"
+#~ msgstr "vexpv : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vexpv_i: ifn1 invalid table number %i"
+#~ msgstr "vexpv_i : ifn1 numéro de table %i non valide"
+
+#~ msgid "vexpv_i: ifn2 invalid table number %i"
+#~ msgstr "vexpv_i : ifn2 numéro de table %i non valide"
+
+#~ msgid "vexpv_i: ifn1 length exceeded"
+#~ msgstr "vexpv_i : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vexpv_i: ifn2 length exceeded"
+#~ msgstr "vexpv_i : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vmap: Error: ifn1 and ifn2 can not be the same"
+#~ msgstr "vmap : Erreur : ifn1 et ifn2 ne peuvent pas être les mêmes"
+
+#~ msgid "vmap: ifn1 invalid table number %i"
+#~ msgstr "vmap : ifn1 numéro de table %i non valide"
+
+#~ msgid "vmap: ifn2 invalid table number %i"
+#~ msgstr "vmap : ifn2 numéro de table %i non valide"
+
+#~ msgid "vmap: ifn1 length exceeded"
+#~ msgstr "vmap : la longueur de ifn1 a été dépassée"
+
+#~ msgid "vmap: ifn2 length exceeded"
+#~ msgstr "vmap : la longueur de ifn2 a été dépassée"
+
+#~ msgid "vectorop: invalid num of elements"
+#~ msgstr "vectorop : nombre d'éléments non valide"
+
+#~ msgid "vport: invalid table length or num of elements"
+#~ msgstr "vport : longueur de table ou nombre d'éléments non valides"
+
+#~ msgid "vport: invalid table"
+#~ msgstr "vport : table non valide"
+
+#~ msgid "vport: invalid init table length or num of elements"
+#~ msgstr "vport : longueur de table init ou nombre d'éléments non valides"
+
+#~ msgid "vport: invalid init table"
+#~ msgstr "vport : table non valide"
+
+#~ msgid "vrandh: Seeding from current time %lu\n"
+#~ msgstr "vrandh : graine à partir de l'horloge %lu\n"
+
+#~ msgid "vrandh: Invalid table."
+#~ msgstr "vrandh : table non valide."
+
+#~ msgid "vrandh: idstoffset is greater than table length."
+#~ msgstr "vrandh : idstoffset est supérieur à la longueur de la table."
+
+#~ msgid "randh: Table length exceeded, last elements discarded."
+#~ msgstr "randh : longeur de la table dépassée, derniers éléments ignoré."
+
+#~ msgid "vrandi: Seeding from current time %lu\n"
+#~ msgstr "vrandi : graine à partir de l'horloge %lu\n"
+
+#~ msgid "vrandi: Invalid table."
+#~ msgstr "vrandi : table non valide."
+
+#~ msgid "vrandi: idstoffset is greater thantable length."
+#~ msgstr "vrandi : idstoffset est supérieur à la longueur de la table."
+
+#~ msgid "vrandi: Table length exceeded, last elements discarded."
+#~ msgstr "vrandi : longueur de la table dépassée, derniers éléments ignorés."
+
+#~ msgid "vecdelay: invalid num of elements"
+#~ msgstr "vecdelay : nombre d'éléments non valide"
+
+#~ msgid "vecdly: invalid output table"
+#~ msgstr "vecdly : table de sortie non valide"
+
+#~ msgid "vecdly: invalid input table"
+#~ msgstr "vecdly : table d'entrée non valide"
+
+#~ msgid "vecdly: invalid delay table"
+#~ msgstr "vecdly : table de délai non valide"
+
+#~ msgid "vecdly: not initialised"
+#~ msgstr "vecdly : non initialisé"
+
+#~ msgid "vlinseg/vexpseg: invalid num. of elements"
+#~ msgstr "vlinseg/vexpseg : nombre d'éléments non valide"
+
+#~ msgid "vdelayk: not initialised"
+#~ msgstr "vdelayk : non initialisé"
+
+#~ msgid "cannot extract %s, name conflict"
+#~ msgstr "impossible d'extraire %s, conflit de noms"
+
+#~ msgid "cannot reopen %s"
+#~ msgstr "impossible de réouvrir %s"
+
+#~ msgid "cannot open %s for writing"
+#~ msgstr "impossible d'ouvrir %s en écriture"
+
 #~ msgid "tableseg: not initialized"
 #~ msgstr "tableseg : non initialisé"
 
diff --git a/po/german.po b/po/german.po
index ba4ea95..f59fb9b 100644
--- a/po/german.po
+++ b/po/german.po
@@ -99,319 +99,319 @@ msgstr ""
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:138
+#: Engine/csound_orc_compile.c:141
 #, c-format
 msgid ""
 "input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
 "line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
+#: Engine/csound_orc_compile.c:268 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:269
+#: Engine/csound_orc_compile.c:272
 #, fuzzy
 msgid "too many input args\n"
 msgstr "zu viele Argumente\n"
 
-#: Engine/csound_orc_compile.c:304
+#: Engine/csound_orc_compile.c:307
 #, c-format
 msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:380
+#: Engine/csound_orc_compile.c:389
 #, c-format
-msgid ""
-"output name previously used, type '%c' must be uniquely defined, line %d"
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:386
+#: Engine/csound_orc_compile.c:517
 #, c-format
-msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
+msgid "output name previously used, type 'w' must be uniquely defined, line %d"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:541
+#: Engine/csound_orc_compile.c:563
 #, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:738
+#: Engine/csound_orc_compile.c:760
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:748
+#: Engine/csound_orc_compile.c:772
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+#: Engine/csound_orc_compile.c:779 Engine/csound_orc_compile.c:1068
+#: Engine/csound_orc_compile.c:1089 Engine/otran.c:363
 msgid "invalid name for instrument"
 msgstr "unzulässiger Name für Instrument"
 
-#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
+#: Engine/csound_orc_compile.c:783 Engine/csound_orc_compile.c:1071
+#: Engine/csound_orc_compile.c:1092 Engine/otran.c:369
 #, c-format
 msgid "instr %s redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
+#: Engine/csound_orc_compile.c:927 Engine/otran.c:351
 #, c-format
 msgid "instr %ld redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:914
+#: Engine/csound_orc_compile.c:938
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1083
+#: Engine/csound_orc_compile.c:1141
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
+#: Engine/csound_orc_compile.c:1198 Engine/otran.c:578 Engine/otran.c:1432
 #, c-format
 msgid "%s invalid sample rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
+#: Engine/csound_orc_compile.c:1200 Engine/otran.c:580 Engine/otran.c:1434
 #, c-format
 msgid "%s invalid control rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
+#: Engine/csound_orc_compile.c:1204 Engine/otran.c:583 Engine/otran.c:1430
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
+#: Engine/csound_orc_compile.c:1207 Engine/otran.c:586 Engine/otran.c:1436
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1165
+#: Engine/csound_orc_compile.c:1223
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1170
+#: Engine/csound_orc_compile.c:1228
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
+#: Engine/csound_orc_compile.c:1288 Engine/otran.c:670
 msgid "inconsistent argoff sumcount"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
+#: Engine/csound_orc_compile.c:1360 Engine/otran.c:739
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr "LABELS Liste ist volles... Verlängern bis %d\n"
 
-#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
+#: Engine/csound_orc_compile.c:1398 Engine/otran.c:777
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr "GOTOS Liste ist volles...Verlängern bis %d\n"
 
-#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
+#: Engine/csound_orc_compile.c:1431 Engine/otran.c:810
 #, c-format
 msgid "target label '%s' not found"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
+#: Engine/csound_orc_compile.c:1509 Engine/otran.c:865
 #, c-format
 msgid "string syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
+#: Engine/csound_orc_compile.c:1559 Engine/otran.c:915
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
+#: Engine/csound_orc_compile.c:1585 Engine/otran.c:941
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
+#: Engine/csound_orc_compile.c:1624 Engine/otran.c:1017
 msgid "gblnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
+#: Engine/csound_orc_compile.c:1652 Engine/otran.c:1045
 msgid "lclnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
+#: Engine/csound_orc_compile.c:1678 Engine/otran.c:1070
 msgid "unexpected global name"
 msgstr "unerwarteter globaler Name"
 
-#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
+#: Engine/csound_orc_compile.c:1701 Engine/otran.c:1092
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:459
+#: Engine/csound_orc_expressions.c:457
 #, c-format
 msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:862
+#: Engine/csound_orc_expressions.c:878
 #, c-format
 msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:157
-#, fuzzy, c-format
+#: Engine/csound_orc_semantics.c:256
+#, c-format
 msgid ""
 "\n"
 "error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:159
+#: Engine/csound_orc_semantics.c:258
 #, c-format
 msgid ""
 " line %d:\n"
 ">>>"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:732
-#, fuzzy, c-format
+#: Engine/csound_orc_semantics.c:834
+#, c-format
 msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/csound_orc_semantics.c:899 Engine/rdorch.c:1644 Engine/rdorch.c:1662
 #: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
+#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:126
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
+#: Engine/cs_par_dispatch.c:140 Engine/cs_par_dispatch.c:160
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
-#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
-#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
+#: Engine/cs_par_dispatch.c:551 Engine/cs_par_dispatch.c:578
+#: Engine/cs_par_dispatch.c:2564 Engine/cs_par_dispatch.c:2609
+#: Engine/cs_par_dispatch.c:2611 Engine/cs_par_dispatch.c:2675
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
-#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
+#: Engine/cs_par_dispatch.c:553 Engine/cs_par_dispatch.c:592
+#: Engine/cs_par_dispatch.c:619 Engine/cs_par_dispatch.c:660
 msgid "Invalid NULL Parameter name"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:535
+#: Engine/cs_par_dispatch.c:560
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
+#: Engine/cs_par_dispatch.c:689 Engine/cs_par_dispatch.c:780
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
+#: Engine/cs_par_dispatch.c:730 Engine/cs_par_dispatch.c:860
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:759
+#: Engine/cs_par_dispatch.c:784
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:907
+#: Engine/cs_par_dispatch.c:930
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:913
+#: Engine/cs_par_dispatch.c:936
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:918
+#: Engine/cs_par_dispatch.c:941
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:922
+#: Engine/cs_par_dispatch.c:945
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:926
+#: Engine/cs_par_dispatch.c:949
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
-#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
-#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
-#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
-#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
-#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
-#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
-#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
+#: Engine/cs_par_dispatch.c:1024 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1176 Engine/cs_par_dispatch.c:1276
+#: Engine/cs_par_dispatch.c:1430 Engine/cs_par_dispatch.c:1464
+#: Engine/cs_par_dispatch.c:1481 Engine/cs_par_dispatch.c:1503
+#: Engine/cs_par_dispatch.c:1531 Engine/cs_par_dispatch.c:1553
+#: Engine/cs_par_dispatch.c:1577 Engine/cs_par_dispatch.c:1669
+#: Engine/cs_par_dispatch.c:1724 Engine/cs_par_dispatch.c:1817
+#: Engine/cs_par_dispatch.c:1870 Engine/cs_par_dispatch.c:2702
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1008
+#: Engine/cs_par_dispatch.c:1029
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
-#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
+#: Engine/cs_par_dispatch.c:1081 Engine/cs_par_dispatch.c:1104
+#: Engine/cs_par_dispatch.c:1126 Engine/cs_par_dispatch.c:1128
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1062
+#: Engine/cs_par_dispatch.c:1083
 #, fuzzy
 msgid "Invalid NULL Parameter instr"
 msgstr "unzulässiger Name für Instrument"
 
-#: Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1085
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
+#: Engine/cs_par_dispatch.c:1090 Engine/cs_par_dispatch.c:1112
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1086
-#, fuzzy
+#: Engine/cs_par_dispatch.c:1107
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
-#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
-#: Engine/cs_par_dispatch.c:2682
+#: Engine/cs_par_dispatch.c:1250 Engine/cs_par_dispatch.c:1533
+#: Engine/cs_par_dispatch.c:2566 Engine/cs_par_dispatch.c:2676
+#: Engine/cs_par_dispatch.c:2703
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1237
+#: Engine/cs_par_dispatch.c:1261
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1554
+#: Engine/cs_par_dispatch.c:1579
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1556
+#: Engine/cs_par_dispatch.c:1581
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1647
+#: Engine/cs_par_dispatch.c:1672
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2497
+#: Engine/cs_par_dispatch.c:2518
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2557
+#: Engine/cs_par_dispatch.c:2578
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2610
+#: Engine/cs_par_dispatch.c:2631
 msgid "Cache Update\n"
 msgstr ""
 
@@ -425,12 +425,12 @@ msgstr ""
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1083
+#: Engine/envvar.c:1085
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr ""
 
-#: Engine/envvar.c:1266
+#: Engine/envvar.c:1268
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr ""
@@ -501,13 +501,13 @@ msgstr ""
 msgid "ftable %d now deleted\n"
 msgstr ""
 
-#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
-#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
-#: Engine/fgens.c:2909
+#: Engine/fgens.c:153 Engine/fgens.c:1599 Engine/fgens.c:1685
+#: Engine/fgens.c:1764 Engine/fgens.c:1880 Engine/fgens.c:1961
+#: Engine/fgens.c:2937
 msgid "insufficient gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:179 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr ""
@@ -525,11 +525,11 @@ msgstr ""
 msgid "ftable %d:\n"
 msgstr ""
 
-#: Engine/fgens.c:222 Engine/fgens.c:229
+#: Engine/fgens.c:222 Engine/fgens.c:229 Engine/fgens.c:2794
 msgid "illegal table length"
 msgstr "ungültige Tabelle Länge"
 
-#: Engine/fgens.c:288 Engine/fgens.c:2215
+#: Engine/fgens.c:288 Engine/fgens.c:2221
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
@@ -538,10 +538,10 @@ msgstr ""
 
 #: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
 #: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
-#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
-#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
-#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
-#: Engine/fgens.c:2906
+#: Engine/fgens.c:1054 Engine/fgens.c:1098 Engine/fgens.c:1145
+#: Engine/fgens.c:1399 Engine/fgens.c:1461 Engine/fgens.c:1683
+#: Engine/fgens.c:1761 Engine/fgens.c:2116 Engine/fgens.c:2891
+#: Engine/fgens.c:2934
 msgid "using extended arguments\n"
 msgstr ""
 
@@ -554,13 +554,13 @@ msgid "illegal x interval"
 msgstr ""
 
 #: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
-#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
-#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: Engine/fgens.c:1356 Engine/fgens.c:2381 Engine/fgens.c:2696
+#: Engine/fgens.c:2836 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
 #: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr "unzulängliche Argumente"
 
-#: Engine/fgens.c:408 Engine/fgens.c:1355
+#: Engine/fgens.c:408 Engine/fgens.c:1361
 msgid "unknown srctable number"
 msgstr ""
 
@@ -596,238 +596,238 @@ msgstr ""
 msgid "uneven number of args"
 msgstr ""
 
-#: Engine/fgens.c:1077
+#: Engine/fgens.c:1082
 msgid "gen call has illegal x-ordinate values:"
 msgstr ""
 
-#: Engine/fgens.c:1095
+#: Engine/fgens.c:1100
 msgid "wrong number of args"
 msgstr ""
 
-#: Engine/fgens.c:1109
+#: Engine/fgens.c:1114
 msgid "a range given exceeds table length"
 msgstr ""
 
-#: Engine/fgens.c:1116
+#: Engine/fgens.c:1121
 msgid "an input function does not exist"
 msgstr ""
 
-#: Engine/fgens.c:1249
+#: Engine/fgens.c:1254
 msgid "No such window!"
 msgstr ""
 
-#: Engine/fgens.c:1267
+#: Engine/fgens.c:1272
 msgid "Wrong number of input arguments"
 msgstr "Falsche Zahl der Eingang Argumente"
 
-#: Engine/fgens.c:1268
+#: Engine/fgens.c:1273
 msgid "unknown distribution"
 msgstr "unbekannte Verteilung"
 
-#: Engine/fgens.c:1317
+#: Engine/fgens.c:1322
 msgid "error opening ASCII file"
 msgstr "Störung Öffnung ASCII Akte"
 
-#: Engine/fgens.c:1323
+#: Engine/fgens.c:1328
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr ""
 
-#: Engine/fgens.c:1334
+#: Engine/fgens.c:1340
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1363
+#: Engine/fgens.c:1369
 msgid "table size must be the same of source table"
 msgstr ""
 
-#: Engine/fgens.c:1435 Engine/fgens.c:1495
+#: Engine/fgens.c:1441 Engine/fgens.c:1501
 msgid "x coordinates must all be in increasing order:"
 msgstr "alle Koordinaten x müssen in zunehmendem Auftrag sein"
 
-#: Engine/fgens.c:1438 Engine/fgens.c:1497
+#: Engine/fgens.c:1444 Engine/fgens.c:1503
 msgid "x coordinate greater than function size:"
 msgstr ""
 
-#: Engine/fgens.c:1442
+#: Engine/fgens.c:1448
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1515
+#: Engine/fgens.c:1521
 msgid "GEN28 requires zero table length"
 msgstr ""
 
-#: Engine/fgens.c:1577
+#: Engine/fgens.c:1583
 msgid "could not open space file"
 msgstr ""
 
-#: Engine/fgens.c:1579
+#: Engine/fgens.c:1585
 msgid "Time values must be in increasing order"
 msgstr "Zeitwerte müssen in zunehmendem Auftrag sein"
 
-#: Engine/fgens.c:1600
+#: Engine/fgens.c:1606
 msgid "GEN30: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1683
+#: Engine/fgens.c:1689
 msgid "GEN31: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1791
+#: Engine/fgens.c:1797
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr ""
 
-#: Engine/fgens.c:1885
+#: Engine/fgens.c:1891
 msgid "GEN33: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:2053
+#: Engine/fgens.c:2059
 msgid "unknown source table number"
 msgstr "unbekannte Quelltabelle Zahl"
 
-#: Engine/fgens.c:2085
+#: Engine/fgens.c:2091
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2157
 #, c-format
 msgid "ftable %d: "
 msgstr ""
 
-#: Engine/fgens.c:2195
+#: Engine/fgens.c:2201
 #, c-format
 msgid "ftable %d:"
 msgstr ""
 
-#: Engine/fgens.c:2210
+#: Engine/fgens.c:2216
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr "Ersetzen vorhergehendes ftable %d"
 
-#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
-#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
-#: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
-#: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
+#: Engine/fgens.c:2252 Engine/fgens.c:2340 Engine/fgens.c:2364
+#: Opcodes/midiops2.c:233 Opcodes/midiops2.c:388 Opcodes/midiops2.c:470
+#: Opcodes/uggab.c:1482 Opcodes/uggab.c:1509 Opcodes/uggab.c:1529
+#: Opcodes/uggab.c:1572
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr ""
 
-#: Engine/fgens.c:2251
+#: Engine/fgens.c:2257
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr ""
 
-#: Engine/fgens.c:2278 Engine/fgens.c:2848
+#: Engine/fgens.c:2284 Engine/fgens.c:2875
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr ""
 
-#: Engine/fgens.c:2340
+#: Engine/fgens.c:2346
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 
-#: Engine/fgens.c:2399
+#: Engine/fgens.c:2405
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
+#: Engine/fgens.c:2452 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr ""
 
-#: Engine/fgens.c:2454 Engine/fgens.c:2714
+#: Engine/fgens.c:2460 Engine/fgens.c:2719
 #, c-format
 msgid "channel %d illegal"
 msgstr "Führung %d ungültig"
 
-#: Engine/fgens.c:2460
+#: Engine/fgens.c:2466
 msgid "deferred alloc\n"
 msgstr "aufgeschobene Verteilung\n"
 
-#: Engine/fgens.c:2468
+#: Engine/fgens.c:2474 Engine/fgens.c:2792
 msgid "deferred size, but filesize unknown"
 msgstr "aufgeschobene Größe, aber Akte Größe Unbekanntes"
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2477 Engine/fgens.c:2796
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2540
+#: Engine/fgens.c:2546
 msgid "GEN1: input file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2544
+#: Engine/fgens.c:2550
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2566
+#: Engine/fgens.c:2572
 msgid "GEN1 read error"
 msgstr "GEN1 Lesefehler"
 
-#: Engine/fgens.c:2571
+#: Engine/fgens.c:2577
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2572
+#: Engine/fgens.c:2578
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr ""
 
-#: Engine/fgens.c:2616
+#: Engine/fgens.c:2622
 msgid "wrong number of ftable arguments"
 msgstr "falsche Zahl von ftable Argumenten"
 
-#: Engine/fgens.c:2626 OOps/pstream.c:326
+#: Engine/fgens.c:2632 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr ""
 
-#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2643 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr ""
 
-#: Engine/fgens.c:2655
+#: Engine/fgens.c:2661
 msgid "ftable size too small"
 msgstr ""
 
-#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
+#: Engine/fgens.c:2735 Opcodes/mp3in.c:87 Opcodes/mp3in.c:229
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2873
+#: Engine/fgens.c:2901
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr ""
 
-#: Engine/fgens.c:2913
+#: Engine/fgens.c:2941
 msgid "number of channels inconsistent with number of args"
 msgstr ""
 
-#: Engine/fgens.c:3072
+#: Engine/fgens.c:3100
 msgid "GEN53: invalid number of gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:3082
+#: Engine/fgens.c:3110
 msgid "GEN53: invalid table length"
 msgstr ""
 
-#: Engine/fgens.c:3086
+#: Engine/fgens.c:3114
 msgid "GEN53: invalid source table number"
 msgstr ""
 
-#: Engine/fgens.c:3089
+#: Engine/fgens.c:3117
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr ""
 
-#: Engine/fgens.c:3093
+#: Engine/fgens.c:3121
 msgid "GEN53: invalid source table length"
 msgstr ""
 
-#: Engine/fgens.c:3098
+#: Engine/fgens.c:3126
 msgid "GEN53: invalid window table"
 msgstr ""
 
@@ -1034,36 +1034,36 @@ msgstr ""
 msgid "subinstr: not initialised"
 msgstr "subinstr: nicht initialisiert"
 
-#: Engine/insert.c:1855
+#: Engine/insert.c:1856
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
 "\tlclbas %p, opds %p\n"
 msgstr ""
 
-#: Engine/insert.c:1872
+#: Engine/insert.c:1873
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1898
+#: Engine/insert.c:1899
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1909
+#: Engine/insert.c:1910
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1966
+#: Engine/insert.c:1967
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:2011
+#: Engine/insert.c:2012
 #, c-format
 msgid "Instrument %s is still active"
 msgstr ""
 
-#: Engine/insert.c:2014
+#: Engine/insert.c:2015
 #, c-format
 msgid "Instrument %d is still active"
 msgstr ""
@@ -1073,8 +1073,8 @@ msgid "-L stdin fcntl failed"
 msgstr ""
 
 #: Engine/linevent.c:99 Engine/linevent.c:112 OOps/dumpf.c:57 OOps/dumpf.c:82
-#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:274 OOps/dumpf.c:301
-#: OOps/dumpf.c:328 OOps/dumpf.c:355 OOps/dumpf.c:527 util/hetro.c:249
+#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:276 OOps/dumpf.c:303
+#: OOps/dumpf.c:330 OOps/dumpf.c:357 OOps/dumpf.c:528 util/hetro.c:249
 #, c-format
 msgid "Cannot open %s"
 msgstr ""
@@ -1167,7 +1167,7 @@ msgid "cannot load %s, or SADIR undefined\n"
 msgstr ""
 
 #: Engine/memfiles.c:131
-#, fuzzy, c-format
+#, c-format
 msgid "error processing file %s\n"
 msgstr ""
 
@@ -1240,210 +1240,206 @@ msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
 msgstr ""
 
-#: Engine/musmon.c:81
+#: Engine/musmon.c:80
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr ""
 
-#: Engine/musmon.c:108
+#: Engine/musmon.c:107
 msgid "illegal istartempo value"
 msgstr ""
 
-#: Engine/musmon.c:111
+#: Engine/musmon.c:110
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:184 Top/main.c:121
+#: Engine/musmon.c:183 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:187 Top/main.c:124
+#: Engine/musmon.c:186 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:192 Top/main.c:113
+#: Engine/musmon.c:191 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:195 Top/main.c:116
+#: Engine/musmon.c:194 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:220
+#: Engine/musmon.c:219
 msgid "orch now loaded\n"
 msgstr ""
 
-#: Engine/musmon.c:245
+#: Engine/musmon.c:244
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:261
+#: Engine/musmon.c:260
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:283
+#: Engine/musmon.c:282
 msgid "using Cscore processing\n"
 msgstr ""
 
-#: Engine/musmon.c:286
+#: Engine/musmon.c:285
 msgid "cannot create cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:299
+#: Engine/musmon.c:301
 msgid "cannot reopen cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:314
 msgid "cannot reopen cscore.srt"
 msgstr ""
 
-#: Engine/musmon.c:305
+#: Engine/musmon.c:316
 msgid "sorting cscore.out ..\n"
 msgstr ""
 
-#: Engine/musmon.c:311 Top/main.c:401
+#: Engine/musmon.c:322 Top/main.c:397
 msgid "\t... done\n"
 msgstr "\t... getan\n"
 
-#: Engine/musmon.c:312
+#: Engine/musmon.c:323
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
-#: Engine/musmon.c:1216
+#: Engine/musmon.c:327 Engine/musmon.c:457 Engine/musmon.c:1026
+#: Engine/musmon.c:1227
 #, c-format
 msgid "SECTION %d:\n"
 msgstr ""
 
-#: Engine/musmon.c:390
+#: Engine/musmon.c:401
 msgid "end of score.\t\t   overall amps:"
 msgstr ""
 
-#: Engine/musmon.c:401
+#: Engine/musmon.c:412
 msgid ""
 "\n"
 "\t   overall samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:405
+#: Engine/musmon.c:416
 #, c-format
 msgid ""
 "\n"
 "%d errors in performance\n"
 msgstr ""
 
-#: Engine/musmon.c:407
+#: Engine/musmon.c:418
 msgid "end of performance"
 msgstr ""
 
-#: Engine/musmon.c:421
+#: Engine/musmon.c:432
 msgid "no sound written to disk\n"
 msgstr ""
 
-#: Engine/musmon.c:436
+#: Engine/musmon.c:447
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:502 Engine/musmon.c:548
+#: Engine/musmon.c:513 Engine/musmon.c:559
 msgid "\t number of samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:541
+#: Engine/musmon.c:552
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:543
+#: Engine/musmon.c:554
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:607 Engine/musmon.c:632
+#: Engine/musmon.c:618 Engine/musmon.c:643
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr ""
 
-#: Engine/musmon.c:611
+#: Engine/musmon.c:622
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "off"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "on"
 msgstr ""
 
-#: Engine/musmon.c:620 Engine/musmon.c:659
+#: Engine/musmon.c:631 Engine/musmon.c:670
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr ""
 
-#: Engine/musmon.c:624
+#: Engine/musmon.c:635
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:650
+#: Engine/musmon.c:661
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:680
+#: Engine/musmon.c:691
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:701
+#: Engine/musmon.c:712
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr ""
 
-#: Engine/musmon.c:719
+#: Engine/musmon.c:730
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr ""
 
-#: Engine/musmon.c:723
+#: Engine/musmon.c:734
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:736
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:816
+#: Engine/musmon.c:827
 msgid "terminating.\n"
 msgstr ""
 
-#: Engine/musmon.c:902
+#: Engine/musmon.c:913
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr ""
 
-#: Engine/musmon.c:1129
+#: Engine/musmon.c:1140
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr ""
 
-#: Engine/musmon.c:1149
+#: Engine/musmon.c:1160
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr ""
 
-#: Engine/musmon.c:1172
+#: Engine/musmon.c:1183
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr ""
 
@@ -1466,98 +1462,98 @@ msgstr ""
 msgid "cannot find the specified instrument or opcode"
 msgstr ""
 
-#: Engine/new_orc_parser.c:91
+#: Engine/new_orc_parser.c:119
 msgid "Unmatched #ifdef\n"
 msgstr ""
 
-#: Engine/otran.c:149 Engine/symbtab.c:413
+#: Engine/otran.c:149 Engine/symbtab.c:416
 #, c-format
 msgid "invalid input type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:154 Engine/symbtab.c:418
+#: Engine/otran.c:154 Engine/symbtab.c:421
 #, c-format
 msgid "too many input args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:169 Engine/symbtab.c:433
+#: Engine/otran.c:169 Engine/symbtab.c:436
 #, c-format
 msgid "too many output args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:194 Engine/symbtab.c:458
+#: Engine/otran.c:194 Engine/symbtab.c:461
 #, c-format
 msgid "invalid output type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:325 Engine/otran.c:332
+#: Engine/otran.c:324 Engine/otran.c:331
 msgid "missing instrument number or name"
 msgstr ""
 
-#: Engine/otran.c:337
+#: Engine/otran.c:336
 msgid "illegal instr number"
 msgstr ""
 
-#: Engine/otran.c:388
+#: Engine/otran.c:387
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:393 Engine/symbtab.c:538
+#: Engine/otran.c:392 Engine/symbtab.c:541
 msgid "invalid name for opcode"
 msgstr ""
 
-#: Engine/otran.c:397
+#: Engine/otran.c:396
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
 msgstr ""
 
-#: Engine/otran.c:408 Engine/symbtab.c:548
+#: Engine/otran.c:407 Engine/symbtab.c:551
 #, c-format
 msgid "cannot redefine %s"
 msgstr ""
 
-#: Engine/otran.c:412 Engine/symbtab.c:553
+#: Engine/otran.c:411 Engine/symbtab.c:556
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr ""
 
-#: Engine/otran.c:503
+#: Engine/otran.c:502
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:534
+#: Engine/otran.c:533
 msgid "Missing endin"
 msgstr ""
 
-#: Engine/otran.c:599
+#: Engine/otran.c:598
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:603
+#: Engine/otran.c:602
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr ""
 
-#: Engine/otran.c:1257
+#: Engine/otran.c:1256
 msgid "bad value for 0dbfs: must be positive."
 msgstr ""
 
-#: Engine/otran.c:1267
+#: Engine/otran.c:1266
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1339
+#: Engine/otran.c:1338
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1365
+#: Engine/otran.c:1364
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1428
+#: Engine/otran.c:1427
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
@@ -1566,7 +1562,7 @@ msgstr ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "Störung:"
 
-#: Engine/otran.c:1461
+#: Engine/otran.c:1460
 msgid "header init errors"
 msgstr ""
 
@@ -1578,7 +1574,7 @@ msgstr ""
 msgid "Unexpected end of orchestra file"
 msgstr ""
 
-#: Engine/rdorch.c:431 Engine/sread.c:758
+#: Engine/rdorch.c:431 Engine/sread.c:765
 #, c-format
 msgid "Macro definition for %*s\n"
 msgstr ""
@@ -1596,12 +1592,12 @@ msgstr ""
 msgid "cannot open orch file %s"
 msgstr ""
 
-#: Engine/rdorch.c:684 Engine/sread.c:1584
+#: Engine/rdorch.c:684 Engine/sread.c:1595
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:716 Engine/sread.c:1607
+#: Engine/rdorch.c:716 Engine/sread.c:1618
 msgid "macro error\n"
 msgstr ""
 
@@ -1622,7 +1618,7 @@ msgstr ""
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:872 Engine/sread.c:1694
+#: Engine/rdorch.c:872 Engine/sread.c:1710
 #, c-format
 msgid "macro %s undefined\n"
 msgstr ""
@@ -1640,21 +1636,21 @@ msgstr ""
 msgid "Unknown # option: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:928 Engine/sread.c:380
+#: Engine/rdorch.c:928 Engine/sread.c:383
 #, c-format
 msgid "Undefined macro: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:930 Engine/sread.c:378
+#: Engine/rdorch.c:930 Engine/sread.c:381
 msgid "Macro expansion symbol ($) without macro name"
 msgstr ""
 
-#: Engine/rdorch.c:935 Engine/sread.c:384
+#: Engine/rdorch.c:935 Engine/sread.c:387
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr ""
 
-#: Engine/rdorch.c:952 Engine/sread.c:401
+#: Engine/rdorch.c:952 Engine/sread.c:404 Engine/sread.c:420
 msgid "Syntax error in macro call"
 msgstr ""
 
@@ -1874,7 +1870,7 @@ msgid ""
 "\tremainder of line flushed\n"
 msgstr ""
 
-#: Engine/rdscor.c:146
+#: Engine/rdscor.c:148
 msgid "ERROR: too many pfields: "
 msgstr ""
 
@@ -1924,228 +1920,233 @@ msgstr ""
 msgid "Internal error op=%c"
 msgstr ""
 
-#: Engine/sread.c:464
+#: Engine/sread.c:469
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:491
+#: Engine/sread.c:496
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:501
+#: Engine/sread.c:506
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:533 Engine/sread.c:547
+#: Engine/sread.c:538 Engine/sread.c:552
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:559
+#: Engine/sread.c:564
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:565
+#: Engine/sread.c:570
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:579
+#: Engine/sread.c:584
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:599
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:646
+#: Engine/sread.c:651
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:652
+#: Engine/sread.c:657
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:696
+#: Engine/sread.c:701
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:701
+#: Engine/sread.c:706
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:715
+#: Engine/sread.c:720
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:733
+#: Engine/sread.c:740
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr ""
 
-#: Engine/sread.c:736
+#: Engine/sread.c:743
 msgid "Repeat section\n"
 msgstr ""
 
-#: Engine/sread.c:761
+#: Engine/sread.c:768
 msgid "Invalid macro name for --smacro"
 msgstr ""
 
-#: Engine/sread.c:865
+#: Engine/sread.c:872
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr ""
 
-#: Engine/sread.c:934
+#: Engine/sread.c:942
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:948
+#: Engine/sread.c:956
 msgid "{: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:957
+#: Engine/sread.c:965
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:963
+#: Engine/sread.c:971
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1047
+#: Engine/sread.c:1056
 msgid "r: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:1049
+#: Engine/sread.c:1058
 #, c-format
 msgid "Repeats=%d\n"
 msgstr ""
 
-#: Engine/sread.c:1093
+#: Engine/sread.c:1102
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr ""
 
-#: Engine/sread.c:1108
+#: Engine/sread.c:1117
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr ""
 
-#: Engine/sread.c:1133
+#: Engine/sread.c:1142
 #, c-format
 msgid "Name %s not found"
 msgstr ""
 
-#: Engine/sread.c:1135
+#: Engine/sread.c:1144
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr ""
 
-#: Engine/sread.c:1164
+#: Engine/sread.c:1174
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1189
+#: Engine/sread.c:1199
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1251
+#: Engine/sread.c:1261
 msgid "No previous event for ^"
 msgstr ""
 
-#: Engine/sread.c:1256
+#: Engine/sread.c:1266
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1286
+#: Engine/sread.c:1296
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1289
+#: Engine/sread.c:1299
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
-#: Engine/sread.c:1761 Engine/sread.c:1775
+#: Engine/sread.c:1300 Engine/sread.c:1305 Engine/sread.c:1754
+#: Engine/sread.c:1777 Engine/sread.c:1791
 msgid "      remainder of line flushed\n"
 msgstr ""
 
-#: Engine/sread.c:1294
+#: Engine/sread.c:1304
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1373
+#: Engine/sread.c:1384
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr ""
 
-#: Engine/sread.c:1393
+#: Engine/sread.c:1404
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1539
+#: Engine/sread.c:1550
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1570
+#: Engine/sread.c:1581
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1630
+#: Engine/sread.c:1627 Engine/sread.c:1635
+#, fuzzy
+msgid "Syntax error in macro definition"
+msgstr "Syntaxstörung: keine ="
+
+#: Engine/sread.c:1646
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr ""
 
-#: Engine/sread.c:1642
+#: Engine/sread.c:1658
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1671
+#: Engine/sread.c:1687
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr ""
 
-#: Engine/sread.c:1681
+#: Engine/sread.c:1697
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1700
+#: Engine/sread.c:1716
 msgid "unknown # option"
 msgstr ""
 
-#: Engine/sread.c:1737
+#: Engine/sread.c:1753
 #, c-format
 msgid "illegal opcode %c"
 msgstr ""
 
-#: Engine/sread.c:1760
+#: Engine/sread.c:1776
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1774
+#: Engine/sread.c:1790
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1781
+#: Engine/sread.c:1797
 msgid "unmatched quote"
 msgstr ""
 
-#: Engine/sread.c:1825
+#: Engine/sread.c:1841
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1831
+#: Engine/sread.c:1847
 msgid "   zero substituted.\n"
 msgstr ""
 
@@ -2204,16 +2205,11 @@ msgstr ""
 msgid "    String truncated\n"
 msgstr ""
 
-#: Engine/symbtab.c:208
+#: Engine/symbtab.c:211
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:345
-#, c-format
-msgid "Unknown word type for %s on line %d\n"
-msgstr ""
-
 #: Engine/twarp.c:88
 msgid "twarp: illegal opcode\n"
 msgstr ""
@@ -2230,11 +2226,11 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
-#: InOut/cmidi.c:233
+#: InOut/cmidi.c:236
 msgid "CoreMIDI real time MIDI plugin for Csound\n"
 msgstr ""
 
-#: InOut/cmidi.c:247
+#: InOut/cmidi.c:250
 msgid "rtmidi: CoreMIDI module enabled\n"
 msgstr ""
 
@@ -2289,7 +2285,7 @@ msgstr ""
 msgid "writing %d sample blks of %d-bit floats to %s \n"
 msgstr ""
 
-#: InOut/libsnd.c:744 util/srconv.c:484
+#: InOut/libsnd.c:744 util/srconv.c:485
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr ""
@@ -2853,182 +2849,182 @@ msgstr ""
 msgid "rtmidi: PortMIDI module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:110
+#: InOut/rtalsa.c:113
 msgid "--scheduler: invalid priority value; the allowed range is:"
 msgstr ""
 
-#: InOut/rtalsa.c:111
+#: InOut/rtalsa.c:114
 msgid "  -20 to -1: set nice level"
 msgstr ""
 
-#: InOut/rtalsa.c:112
+#: InOut/rtalsa.c:115
 msgid "          0: normal scheduling, but lock memory"
 msgstr ""
 
-#: InOut/rtalsa.c:113
+#: InOut/rtalsa.c:116
 #, c-format
 msgid "    1 to %d: SCHED_RR with the specified priority (DANGEROUS)"
 msgstr ""
 
-#: InOut/rtalsa.c:330
+#: InOut/rtalsa.c:333
 #, c-format
 msgid " *** Cannot open device '%s' for audio output: %s"
 msgstr ""
 
-#: InOut/rtalsa.c:333
+#: InOut/rtalsa.c:336
 #, c-format
 msgid " *** Cannot open device '%s' for audio input: %s"
 msgstr ""
 
-#: InOut/rtalsa.c:394
+#: InOut/rtalsa.c:397
 #, c-format
 msgid "ALSA: -B %d not allowed on this device; using %d instead\n"
 msgstr ""
 
-#: InOut/rtalsa.c:417
+#: InOut/rtalsa.c:420
 #, c-format
 msgid "ALSA: -b %d not allowed on this device; using %d instead\n"
 msgstr ""
 
-#: InOut/rtalsa.c:430
+#: InOut/rtalsa.c:433
 #, c-format
 msgid "ALSA %s: total buffer size: %d, period size: %d\n"
 msgstr ""
 
-#: InOut/rtalsa.c:506
+#: InOut/rtalsa.c:509
 msgid " *** ALSA: must specify a device name, not a number (e.g. -odac:hw:0,0)"
 msgstr ""
 
-#: InOut/rtalsa.c:514
+#: InOut/rtalsa.c:517
 #, c-format
 msgid " *** ALSA: %s: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:601
+#: InOut/rtalsa.c:604
 msgid "Error reading data from audio input device"
 msgstr ""
 
-#: InOut/rtalsa.c:646
+#: InOut/rtalsa.c:649
 msgid "Error writing data to audio output device"
 msgstr ""
 
-#: InOut/rtalsa.c:687
+#: InOut/rtalsa.c:690
 msgid "ALSA MIDI: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:694
+#: InOut/rtalsa.c:697
 #, c-format
 msgid "ALSA: error opening MIDI input device: '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:698
+#: InOut/rtalsa.c:701
 #, c-format
 msgid "ALSA: opened MIDI input device '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:717
+#: InOut/rtalsa.c:720
 msgid "ALSA midi: Using all devices.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:746
+#: InOut/rtalsa.c:749
 #, c-format
 msgid "ALSA midi: Error opening device: %s\n"
 msgstr ""
 
-#: InOut/rtalsa.c:768
+#: InOut/rtalsa.c:771
 msgid "ALSA midi: No devices found.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:867
+#: InOut/rtalsa.c:870
 #, c-format
 msgid "ALSA: error opening MIDI output device '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:870
+#: InOut/rtalsa.c:873
 #, c-format
 msgid "ALSA: opened MIDI output device '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:910
+#: InOut/rtalsa.c:913
 msgid "-M stdin fcntl failed"
 msgstr ""
 
-#: InOut/rtalsa.c:918
+#: InOut/rtalsa.c:921
 #, c-format
 msgid "cannot open %s"
 msgstr ""
 
-#: InOut/rtalsa.c:929
+#: InOut/rtalsa.c:932
 msgid "MIDI receive: cannot get termios info."
 msgstr ""
 
-#: InOut/rtalsa.c:937
+#: InOut/rtalsa.c:940
 msgid "MIDI receive: cannot set input baud rate."
 msgstr ""
 
-#: InOut/rtalsa.c:943
+#: InOut/rtalsa.c:946
 msgid "MIDI receive: cannot set termios."
 msgstr ""
 
-#: InOut/rtalsa.c:947
+#: InOut/rtalsa.c:950
 #, c-format
 msgid "Opened MIDI input device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:987
+#: InOut/rtalsa.c:990
 #, c-format
 msgid "sensMIDI: retval errno %d"
 msgstr ""
 
-#: InOut/rtalsa.c:1054
+#: InOut/rtalsa.c:1057
 #, c-format
 msgid "Error opening MIDI output device file '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:1058
+#: InOut/rtalsa.c:1061
 #, c-format
 msgid "Opened MIDI output device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
+#: InOut/rtalsa.c:1104 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1106
+#: InOut/rtalsa.c:1109
 msgid "RT scheduler priority, alsa module"
 msgstr ""
 
-#: InOut/rtalsa.c:1111
+#: InOut/rtalsa.c:1114
 msgid "ALSA real-time audio and MIDI module for Csound by Istvan Varga\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1142
+#: InOut/rtalsa.c:1145
 msgid "rtaudio: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1157
+#: InOut/rtalsa.c:1160
 msgid "rtmidi: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1166
+#: InOut/rtalsa.c:1169
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtauhal.c:163
+#: InOut/rtauhal.c:162
 #, c-format
 msgid "selected input device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:166
+#: InOut/rtauhal.c:165
 #, c-format
 msgid "selected output device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:524
+#: InOut/rtauhal.c:523
 msgid "AuHAL module: device closed\n"
 msgstr ""
 
-#: InOut/rtauhal.c:541
+#: InOut/rtauhal.c:540
 msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
 msgstr ""
 
@@ -3123,7 +3119,7 @@ msgstr ""
 
 #: InOut/rtjack.c:317 InOut/rtjack.c:330 InOut/rtjack.c:335 InOut/rtjack.c:552
 #: InOut/rtjack.c:590 InOut/rtjack.c:595 InOut/rtjack.c:616 InOut/rtjack.c:621
-#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315 Opcodes/ftgen.c:79
+#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315
 msgid "memory allocation failure"
 msgstr ""
 
@@ -3688,58 +3684,58 @@ msgstr ""
 msgid "diskin2: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:231
+#: OOps/diskin2.c:232
 #, c-format
 msgid ""
 "diskin2: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:240
+#: OOps/diskin2.c:242
 msgid ""
 "diskin2: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:270
+#: OOps/diskin2.c:272
 #, c-format
 msgid "diskin2: warning: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:331
+#: OOps/diskin2.c:334
 msgid "diskin2: not initialised"
 msgstr "diskin2: nicht initialisiert"
 
-#: OOps/diskin2.c:560
+#: OOps/diskin2.c:566
 msgid "soundin: invalid number of channels"
 msgstr ""
 
-#: OOps/diskin2.c:581
+#: OOps/diskin2.c:587
 msgid "soundin: unknown sample format"
 msgstr ""
 
-#: OOps/diskin2.c:591
+#: OOps/diskin2.c:597
 #, c-format
 msgid "soundin: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:599
+#: OOps/diskin2.c:605
 #, c-format
 msgid ""
 "soundin: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:609
+#: OOps/diskin2.c:615
 msgid ""
 "soundin: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:618
+#: OOps/diskin2.c:624
 #, c-format
 msgid "soundin: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:651
+#: OOps/diskin2.c:657
 msgid "soundin: not initialised"
 msgstr "soundin: nicht initialisiert"
 
@@ -3922,33 +3918,37 @@ msgid "tempest: not initialised"
 msgstr "tempest: nicht initialisiert"
 
 #: OOps/dumpf.c:45 OOps/dumpf.c:70 OOps/dumpf.c:95 OOps/dumpf.c:120
-#: OOps/dumpf.c:261 OOps/dumpf.c:288 OOps/dumpf.c:315 OOps/dumpf.c:342
+#: OOps/dumpf.c:263 OOps/dumpf.c:290 OOps/dumpf.c:317 OOps/dumpf.c:344
 msgid "unknown format request"
 msgstr ""
 
 #: OOps/dumpf.c:49 OOps/dumpf.c:74 OOps/dumpf.c:99 OOps/dumpf.c:124
-#: OOps/dumpf.c:265 OOps/dumpf.c:292 OOps/dumpf.c:319 OOps/dumpf.c:346
+#: OOps/dumpf.c:267 OOps/dumpf.c:294 OOps/dumpf.c:321 OOps/dumpf.c:348
 msgid "alaw and ulaw not implemented here"
 msgstr ""
 
-#: OOps/dumpf.c:193 OOps/dumpf.c:442
+#: OOps/dumpf.c:193 OOps/dumpf.c:443
 msgid "unknown kdump format"
 msgstr ""
 
+#: OOps/dumpf.c:196
+msgid "write failure in dumpk"
+msgstr ""
+
 #: OOps/fftlib.c:3195
 #, c-format
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:93
+#: OOps/goto_ops.c:95
 msgid "negative time period"
 msgstr "negativer Zeitabschnitt"
 
-#: OOps/goto_ops.c:186
+#: OOps/goto_ops.c:188
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:191
+#: OOps/goto_ops.c:193
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -3965,11 +3965,11 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
-#: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
-#: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
-#: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
-#: Opcodes/midiops2.c:388 Opcodes/midiops2.c:438 Opcodes/midiops2.c:472
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/midiops2.c:59
+#: Opcodes/midiops2.c:76 Opcodes/midiops2.c:120 Opcodes/midiops2.c:154
+#: Opcodes/midiops2.c:221 Opcodes/midiops2.c:252 Opcodes/midiops2.c:316
+#: Opcodes/midiops2.c:335 Opcodes/midiops2.c:375 Opcodes/midiops2.c:406
+#: Opcodes/midiops2.c:456 Opcodes/midiops2.c:490
 msgid "illegal controller number"
 msgstr "ungültige Steuerpultzahl"
 
@@ -4499,7 +4499,7 @@ msgstr ""
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:261 Opcodes/socksend.c:305
+#: OOps/remote.c:261 Opcodes/socksend.c:300
 msgid "write to socket failed"
 msgstr ""
 
@@ -4516,15 +4516,15 @@ msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
 #: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
-#: Opcodes/socksend.c:284
+#: Opcodes/sockrecv.c:345
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:316 Opcodes/socksend.c:289
+#: OOps/remote.c:316 Opcodes/sockrecv.c:350
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:321 Opcodes/socksend.c:295
+#: OOps/remote.c:321 Opcodes/sockrecv.c:356
 msgid "accept failed"
 msgstr ""
 
@@ -4589,7 +4589,7 @@ msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
 
-#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:834
+#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:839
 msgid "Instrument not defined"
 msgstr ""
 
@@ -4803,8 +4803,6 @@ msgid "oscil(krate): not initialised"
 msgstr "oscil(krate): nicht initialisiert"
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
-#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr "oscil: nicht initialisiert"
 
@@ -4920,7 +4918,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5107,227 +5105,226 @@ msgstr ""
 msgid "pan: not initialised"
 msgstr "pan: nicht initialisiert"
 
-#: OOps/ugrw1.c:922 OOps/ugrw1.c:1247
+#: OOps/ugrw1.c:922 OOps/ugrw1.c:1234
 #, c-format
 msgid "Table write offset %f < 0 or > tablelength"
 msgstr ""
 
-#: OOps/ugrw1.c:1242
+#: OOps/ugrw1.c:1229
 #, c-format
 msgid "Table write k rate function table no. %f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1290 OOps/ugrw1.c:1313 OOps/ugrw1.c:1392
+#: OOps/ugrw1.c:1277 OOps/ugrw1.c:1300 OOps/ugrw1.c:1379
 #, c-format
 msgid "Table %f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1469
+#: OOps/ugrw1.c:1456
 #, c-format
 msgid "Table no. < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f\n"
 msgstr ""
 
-#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1558 OOps/ugrw1.c:1770 OOps/ugrw1.c:1811
+#: OOps/ugrw1.c:1472 OOps/ugrw1.c:1545 OOps/ugrw1.c:1757 OOps/ugrw1.c:1798
 #, c-format
 msgid "Destination dft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1498 OOps/ugrw1.c:1569
+#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1556
 #, c-format
 msgid "Source 1 s1ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1508 OOps/ugrw1.c:1577
+#: OOps/ugrw1.c:1495 OOps/ugrw1.c:1564
 #, c-format
 msgid "Source 2 s2ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1543
+#: OOps/ugrw1.c:1530
 #, c-format
 msgid "Table number < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1758 OOps/ugrw1.c:1800
+#: OOps/ugrw1.c:1745 OOps/ugrw1.c:1787
 #, c-format
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
-#: Opcodes/fareyseq.c:475
+#: OOps/ugrw1.c:1768 OOps/ugrw1.c:1809
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1911 OOps/ugrw1.c:2032
+#: OOps/ugrw1.c:1898 OOps/ugrw1.c:2019
 #, c-format
 msgid "Table kfn=%.2f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1919 OOps/ugrw1.c:2040
+#: OOps/ugrw1.c:1906 OOps/ugrw1.c:2027
 #, c-format
 msgid "kfn table %.2f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1931 OOps/ugrw1.c:2053
+#: OOps/ugrw1.c:1918 OOps/ugrw1.c:2040
 #, c-format
 msgid "Table kfn=%.2f length %ld shorter than ksmps %d"
 msgstr ""
 
-#: OOps/ugrw1.c:1940 OOps/ugrw1.c:2062
+#: OOps/ugrw1.c:1927 OOps/ugrw1.c:2049
 #, c-format
 msgid "kstart %.2f is outside table %.2f range 0 to %ld"
 msgstr ""
 
-#: OOps/ugrw1.c:2156
+#: OOps/ugrw1.c:2143
 msgid "zakinit should only be called once."
 msgstr ""
 
-#: OOps/ugrw1.c:2160
+#: OOps/ugrw1.c:2147
 msgid "zakinit: both isizea and isizek should be > 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2191
+#: OOps/ugrw1.c:2178
 msgid "No zk space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2210
+#: OOps/ugrw1.c:2197
 msgid "zkr index > isizek. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2214
+#: OOps/ugrw1.c:2201
 msgid "zkr index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2242
+#: OOps/ugrw1.c:2229
 msgid "zir index > isizek. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2246
+#: OOps/ugrw1.c:2233
 msgid "zir index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2268
+#: OOps/ugrw1.c:2255
 msgid "zkw index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2271
+#: OOps/ugrw1.c:2258
 msgid "zkw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2296
+#: OOps/ugrw1.c:2283
 msgid "ziw index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2299
+#: OOps/ugrw1.c:2286
 msgid "ziw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2323
+#: OOps/ugrw1.c:2310
 msgid "zkwm index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2326
+#: OOps/ugrw1.c:2313
 msgid "zkwm index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2359
+#: OOps/ugrw1.c:2346
 msgid "ziwm index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2362
+#: OOps/ugrw1.c:2349
 msgid "ziwm index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2406
+#: OOps/ugrw1.c:2393
 msgid "zkmod kzkmod > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2432
+#: OOps/ugrw1.c:2419
 msgid "zkcl first or last > isizek. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2435
+#: OOps/ugrw1.c:2422
 msgid "zkcl first or last < 0. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2439
+#: OOps/ugrw1.c:2426
 msgid "zkcl first > last. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2461
+#: OOps/ugrw1.c:2448
 msgid "No za space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2487
+#: OOps/ugrw1.c:2474
 msgid "zar index > isizea. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2491
+#: OOps/ugrw1.c:2478
 msgid "zar index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2523
+#: OOps/ugrw1.c:2510
 msgid "zarg index > isizea. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2528
+#: OOps/ugrw1.c:2515
 msgid "zarg index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2559 OOps/ugrw1.c:2590
+#: OOps/ugrw1.c:2546 OOps/ugrw1.c:2577
 msgid "zaw index > isizea. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2562 OOps/ugrw1.c:2593
+#: OOps/ugrw1.c:2549 OOps/ugrw1.c:2580
 msgid "zaw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2646
+#: OOps/ugrw1.c:2633
 msgid "zamod kzamod > isizea. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2678
+#: OOps/ugrw1.c:2665
 msgid "zacl first or last > isizea. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2682
+#: OOps/ugrw1.c:2669
 msgid "zacl first or last < 0. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2687
+#: OOps/ugrw1.c:2674
 msgid "zacl first > last. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2819
+#: OOps/ugrw1.c:2806
 msgid "printk not initialised"
 msgstr "printk: nicht initialisiert"
 
-#: OOps/ugrw1.c:2837
+#: OOps/ugrw1.c:2824
 #, c-format
 msgid "time %11.5f: "
 msgstr ""
 
-#: OOps/ugrw1.c:2898
+#: OOps/ugrw1.c:2885
 msgid "printks param 1 was not a \"quoted string\""
 msgstr ""
 
-#: OOps/ugrw1.c:3114
+#: OOps/ugrw1.c:3101
 msgid "printks not initialised"
 msgstr "printks: nicht initialisiert"
 
-#: OOps/ugrw1.c:3245
+#: OOps/ugrw1.c:3232
 msgid "inz index > isizea. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:3247
+#: OOps/ugrw1.c:3234
 msgid "inz index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:3281 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
+#: OOps/ugrw1.c:3268 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
 msgid "outz index > isizea. No output"
 msgstr ""
 
-#: OOps/ugrw1.c:3283 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
+#: OOps/ugrw1.c:3270 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
 msgid "outz index < 0. No output."
 msgstr ""
 
@@ -5345,1101 +5342,230 @@ msgstr "vdelay: nicht initialisiert"
 msgid "vdelay3: not initialised"
 msgstr "vdelay3: nicht initialisiert"
 
-#: OOps/vdelay.c:736
+#: OOps/vdelay.c:738
 msgid "Wrong input count in multitap\n"
 msgstr ""
 
-#: OOps/vdelay.c:779
-msgid "multitap: not initialised"
-msgstr "multitap: nicht initialisiert"
-
-#: OOps/vdelay.c:899
-msgid "High frequency diffusion not in (0, 1)\n"
-msgstr ""
-
-#: OOps/vdelay.c:915
-#, c-format
-msgid "reverbx; Combs ftable must have %d time and %d gain values"
-msgstr ""
-
-#: OOps/vdelay.c:947
-#, c-format
-msgid "reverbx; Alpas ftable must have %d time and %d gain values"
-msgstr ""
-
-#: OOps/vdelay.c:1058
-msgid "High frequency diffusion>1\n"
-msgstr ""
-
-#: OOps/vdelay.c:1062
-msgid "High frequency diffusion<0\n"
-msgstr ""
-
-#: OOps/vdelay.c:1066
-msgid "Non positive reverb time\n"
-msgstr ""
-
-#: OOps/vdelay.c:1124
-msgid "reverbx: not initialised"
-msgstr "reverbx: nicht initialisiert"
-
-#: Opcodes/ambicode1.c:82
-msgid "The numbers of input and output arguments are not valid."
-msgstr ""
-
-#: Opcodes/ambicode1.c:165
-#, fuzzy
-msgid "The number of input arguments is not valid."
-msgstr "Falsche Zahl der Eingang Argumente"
-
-#: Opcodes/ambicode1.c:169
-msgid "The isetup value should be between 1 and 5."
-msgstr ""
-
-#: Opcodes/ambicode1.c:195
-msgid "The output channel count does not match the isetup value."
-msgstr ""
-
-#: Opcodes/ambicode.c:49
-msgid "bformenc is deprecated; use bformenc1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:88
-msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
-msgstr ""
-
-#: Opcodes/ambicode.c:287
-msgid "bformdec is deprecated; use bformdec1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:291
-msgid "Wrong number of input arguments!"
-msgstr ""
-
-#: Opcodes/ambicode.c:299
-msgid "Wrong number of output cells! There must be 2 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:344
-msgid "Wrong number of output cells! There must be 4 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
-msgid "Wrong number of output cells! There must be 5 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
-msgid "Wrong number of output cells! There must be 8 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:575
-msgid "Not supported setup number!"
-msgstr ""
-
-#: Opcodes/babo.c:742
-#, c-format
-msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
-msgstr ""
-
-#: Opcodes/bilbar.c:83
-msgid "No data to continue"
-msgstr ""
-
-#: Opcodes/bilbar.c:109
-msgid "Ends must be clamped(1), pivoting(2) or free(3)"
-msgstr ""
-
-#: Opcodes/biquad.c:599
-msgid "vco: not initialised"
-msgstr "vco: nicht initialisiert"
-
-#: Opcodes/bowedbar.c:53
-#, c-format
-msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
-msgstr ""
-
-#: Opcodes/bowedbar.c:98
-msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
-msgstr ""
-
-#: Opcodes/clfilt.c:53
-msgid "filter type not lowpass or highpass in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:59
-#, c-format
-msgid "filter kind, %d, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:63
-#, c-format
-msgid "number of poles, %f, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:69
-#, c-format
-msgid "odd number of poles chosen in clfilt, rounded to %d"
-msgstr ""
-
-#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
-#, c-format
-msgid "passband ripple must be positive in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
-#, c-format
-msgid "passband ripple must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
-#, c-format
-msgid "stopband attenuation must be negative in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
-#, c-format
-msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
-msgid "Lowpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
-#: Opcodes/clfilt.c:383
-msgid "code error, ikind out of range"
-msgstr ""
-
-#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
-msgid "Highpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
-msgid "code error, ihilo out of range"
-msgstr ""
-
-#: Opcodes/control.c:40
-msgid "control: failed to allocate globals"
-msgstr ""
-
-#: Opcodes/control.c:56
-#, c-format
-msgid "Closing down wish(%d)\n"
-msgstr ""
-
-#: Opcodes/control.c:202
-#, c-format
-msgid "Slider %d set to %s\n"
-msgstr ""
-
-#: Opcodes/control.c:207
-#, c-format
-msgid "Unknown control %d"
-msgstr ""
-
-#: Opcodes/cpumeter.c:77
-#, c-format
-msgid "Failed to open /proc/stat: %s"
-msgstr ""
-
-#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
-#: Opcodes/cpumeter.c:151
-msgid "failed /proc/stat read"
-msgstr ""
-
-#: Opcodes/crossfm.c:34
-msgid "crossfm: ftable not found"
-msgstr ""
-
-#: Opcodes/date.c:68
-msgid "dates: buffer overflow"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/dssi4cs.c:823
-msgid "DSSI4CS: Not initialised or wrong argument types."
-msgstr "DSSI4CS: nicht initialisiert or wrong argument types."
-
-#: Opcodes/dssi4cs/src/load.c:120
-#, c-format
-msgid "Failed to load plugin \"%s\": %s"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:155
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\": "
-"%s.\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:161
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\".\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:176
-#, c-format
-msgid "Unable to find label \"%s\" in plugin library file \"%s\"."
-msgstr ""
-
-#: Opcodes/fareygen.c:140
-#, fuzzy
-msgid "insufficient arguments for fareytable"
-msgstr "unzulängliche Argumente"
-
-#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
-#, c-format
-msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:256
-#, c-format
-msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
-#, c-format
-msgid "Farey: Destination dft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
-#, c-format
-msgid "Farey: Source sft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:306
-msgid "Farey: Filter type < 1"
-msgstr ""
-
-#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
-#, c-format
-msgid "Table no. < 1 sft=%.2f"
-msgstr ""
-
-#: Opcodes/filter.c:187 Opcodes/filter.c:225
-msgid "Filter order out of bounds: (1 <= nb < 51, 0 <= na <= 50)"
-msgstr ""
-
-#: Opcodes/filter.c:672
-msgid "too many iterations in laguer"
-msgstr ""
-
-#: Opcodes/flanger.c:188
-msgid "wguide2 xfreq1 and xfreq2 arguments must be both a-rate or k and i-rate"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:195
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:149
-msgid "error allocating fluid engine\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:203
-#, c-format
-msgid ""
-"Created fluidEngine %d with sampling rate = %f, chorus %s, reverb %s, "
-"channels %d, polyphony %d.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:230
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:392
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:553
-#, c-format
-msgid "Illegal Engine Number: %i.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:238
-#, c-format
-msgid "Loading SoundFont : %s.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:244
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:208
-#, c-format
-msgid "fluid: unable to load %s"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:262
-#, c-format
-msgid "SoundFont: %3d  Bank: %3d  Preset: %3d  %s\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:483
-#, c-format
-msgid ""
-"result: %d \n"
-" Note off: c:%3d k:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:491
-#, c-format
-msgid ""
-"result: %d \n"
-"Note on: c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:496
-#, c-format
-msgid "Key pressure (not handled): c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:504
-#, c-format
-msgid "Result: %d Control change: c:%3d c:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:511
-#, c-format
-msgid "Result: %d Program change: c:%3d p:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:524
-#, c-format
-msgid "Result: %d, Pitch bend:     c:%d b:%d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:530
-#, c-format
-msgid "System exclusive (not handled): c:%3d v1:%3d v2:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:562
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:577
-msgid "Illegal Interpolation Method: Must be either 0, 1, 4, or 7.\n"
-msgstr ""
-
-#: Opcodes/fm4op.c:165
-msgid "No table for VibWaveato"
-msgstr "Keine Tabelle für VibWaveato"
-
-#: Opcodes/fm4op.c:184
-msgid "No table for FM4Op"
-msgstr "Keine Tabelle für FM4Op"
-
-#: Opcodes/follow.c:38
-msgid "follow - zero length!"
-msgstr ""
-
-#: Opcodes/fout.c:60
-#, c-format
-msgid "Closing file '%s'...\n"
-msgstr ""
-
-#: Opcodes/fout.c:102
-msgid "invalid file handle"
-msgstr ""
-
-#: Opcodes/fout.c:109 Opcodes/fout.c:421
-msgid "invalid file name"
-msgstr ""
-
-#: Opcodes/fout.c:166
-#, c-format
-msgid "error opening file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:193
-#, c-format
-msgid "error opening sound file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:430
-#, c-format
-msgid "cannot close '%s': not found in list of open files"
-msgstr ""
-
-#: Opcodes/fout.c:441
-#, c-format
-msgid "cannot close file #%d: not a valid handle"
-msgstr ""
-
-#: Opcodes/fout.c:448
-#, c-format
-msgid "file #%d (%s) is in use, will be closed when released"
-msgstr ""
-
-#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
-msgid "fouti: invalid file handle"
-msgstr ""
-
-#: Opcodes/freeverb.c:258
-msgid "freeverb: not initialised"
-msgstr "freeverb: nicht initialisiert"
-
-#: Opcodes/ftconv.c:156
-msgid "ftconv: invalid number of channels"
-msgstr ""
-
-#: Opcodes/ftconv.c:161
-msgid "ftconv: invalid impulse response partition length"
-msgstr ""
-
-#: Opcodes/ftconv.c:175
-msgid "ftconv: invalid length, or insufficient IR data for convolution"
-msgstr ""
-
-#: Opcodes/ftconv.c:193
-msgid "ftconv: skipped non-zero samples, impulse response may be truncated\n"
-msgstr ""
-
-#: Opcodes/ftconv.c:289
-msgid "ftconv: not initialised"
-msgstr "ftconv: nicht initialisiert"
-
-#: Opcodes/ftgen.c:69 Opcodes/ftgen.c:182
-#, c-format
-msgid "Error deleting ftable %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:136 Opcodes/signalflowgraph.cpp:895
-msgid "ftgen string arg not allowed"
-msgstr ""
-
-#: Opcodes/ftgen.c:155 Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
-msgid "ftgen error"
-msgstr ""
-
-#: Opcodes/ftgen.c:179
-#, c-format
-msgid "Invalid table number: %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:347
-msgid "ftload: error allocating ftable"
-msgstr ""
-
-#: Opcodes/ftgen.c:349
-msgid "ftload: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:351
-msgid "ftload: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:354
-msgid "ftload: incorrect file"
-msgstr ""
-
-#: Opcodes/ftgen.c:467
-msgid "ftsave: Bad table number. Saving is possible only for existing tables."
-msgstr ""
-
-#: Opcodes/ftgen.c:470
-msgid "ftsave: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:472
-msgid "ftsave: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:474
-msgid "ftsave: failed to write file"
-msgstr ""
-
-#: Opcodes/gab/gab.c:111
-msgid "fastab: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
-msgid "tabw off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
-msgid "tab off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:185
-msgid "tab_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:192
-#, c-format
-msgid "tab_i off end: table number: %d\n"
-msgstr ""
-
-#: Opcodes/gab/gab.c:204
-msgid "tabw_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:211
-msgid "tabw_i off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:249
-msgid "tab_init: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:318
-msgid "printi parameter was not a \"quoted string\""
-msgstr ""
-
-#: Opcodes/gab/gab.c:425
-msgid "adsynt2: wavetable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:437
-msgid "adsynt2: freqtable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:442
-msgid "adsynt2: partial count is greater than freqtable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:451
-msgid "adsynt2: amptable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:456
-msgid "adsynt2: partial count is greater than amptable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:501
-msgid "adsynt2: not initialised"
-msgstr ""
-
-#: Opcodes/gab/gab.c:743
-msgid "max_k: invalid imaxflag value"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:70
-msgid "hvs1: a line segment must be delimited by 2 points at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:152
-msgid "hvs2: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:248
-msgid "hvs3: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:390
-msgid "vphaseseg: the first function is invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
-msgid "vphaseseg: invalid num. of elements"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:416
-msgid "vphaseseg: function invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
-msgid "vtable1: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
-msgid "copyTabElems: incorrect destination table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
-msgid ""
-"copyTabElems: destination table too short or number of elements to copy too "
-"big"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
-#, fuzzy
-msgid "copyTabElems: incorrect source table number"
-msgstr "unbekannte Quelltabelle Zahl"
-
-#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
-msgid ""
-"copyTabElems: source table size less than the number of elements to copy"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
-msgid "copyTabElems: source table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
-msgid "copyTabElems: destination table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:347
-msgid "inrg: audio input is not enabled"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:362
-msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:403
-msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
-#: Opcodes/gab/newgabopc.c:672
-msgid "invalid function"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:443
-msgid "lposc: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:577
-msgid "lposcil: no sample rate stored in function assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:674
-msgid "lposcil: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
-#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
-#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
-msgid "illegal channel"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
-#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
-#, c-format
-msgid "illegal control number at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:76
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d.  When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
-#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
-#: Opcodes/midiops3.c:347
-#, c-format
-msgid "illegal initvalue at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
-msgid "sliderXtable: zero is illegal in exponential operations"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:315
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d. When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
-#: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
-#: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
-msgid "illegal midi channel"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:43
-msgid "tabmorph: invalid table number"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:47
-msgid "tabmorph: all tables must have the same length!"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:35
-msgid "mtablei: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
-#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
-msgid "mtable: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:187
-msgid "mtabi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:254
-msgid "mtablewi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
-#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
-#: Opcodes/gab/vectorial.c:408
-msgid "mtabw: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:350
-msgid "mtabwi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:382
-msgid "mtablew: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
-#, c-format
-msgid "vadd_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:473
-msgid "vadd_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:500
-msgid "vadd: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:532
-msgid "vmult_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:559
-msgid "vmult: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:575
-#, c-format
-msgid "vpow_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:592
-msgid "vpow_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:620
-msgid "vpow: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:636
-#, c-format
-msgid "vexp_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:652
-msgid "vexp_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:679
-msgid "vexp: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:697
-#, c-format
-msgid "vectorsop: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:702
-#, c-format
-msgid "vectorsop: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:742
-msgid "vcopy: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:760
-msgid "vcopy: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:787
-#, c-format
-msgid "vcopy_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:792
-#, c-format
-msgid "vcopy_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:814
-msgid "vcopy_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:831
-msgid "vcopy_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:870
-msgid "vaddv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:889
-msgid "vaddv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:915
-#, c-format
-msgid "vaddv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:920
-#, c-format
-msgid "vaddv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:942
-msgid "vaddv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:960
-msgid "vaddv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:991
-msgid "vsubv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1010
-msgid "vsubv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1037
-#, c-format
-msgid "vsubv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1042
-#, c-format
-msgid "vsubv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1064
-msgid "vsubv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1082
-msgid "vsubv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1119
-msgid "vmultv: ifn1 length exceeded"
-msgstr ""
+#: OOps/vdelay.c:781
+msgid "multitap: not initialised"
+msgstr "multitap: nicht initialisiert"
 
-#: Opcodes/gab/vectorial.c:1138
-msgid "vmultv: ifn2 length exceeded"
+#: OOps/vdelay.c:901
+msgid "High frequency diffusion not in (0, 1)\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1165
+#: OOps/vdelay.c:917
 #, c-format
-msgid "vmultv_i: ifn1 invalid table number %i"
+msgid "reverbx; Combs ftable must have %d time and %d gain values"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1170
+#: OOps/vdelay.c:949
 #, c-format
-msgid "vmultv_i: ifn2 invalid table number %i"
+msgid "reverbx; Alpas ftable must have %d time and %d gain values"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1192
-msgid "vmultv_i: ifn1 length exceeded"
+#: OOps/vdelay.c:1062
+msgid "High frequency diffusion>1\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1209
-msgid "vmultv_i: ifn2 length exceeded"
+#: OOps/vdelay.c:1066
+msgid "High frequency diffusion<0\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1246
-msgid "vdivv: ifn1 length exceeded"
+#: OOps/vdelay.c:1070
+msgid "Non positive reverb time\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1265
-msgid "vdivv: ifn2 length exceeded"
-msgstr ""
+#: OOps/vdelay.c:1128
+msgid "reverbx: not initialised"
+msgstr "reverbx: nicht initialisiert"
 
-#: Opcodes/gab/vectorial.c:1292
-#, c-format
-msgid "vdivv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode1.c:82
+msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1297
-#, c-format
-msgid "vdivv_i: ifn2 invalid table number %i"
-msgstr ""
+#: Opcodes/ambicode1.c:167
+#, fuzzy
+msgid "The number of input arguments is not valid."
+msgstr "Falsche Zahl der Eingang Argumente"
 
-#: Opcodes/gab/vectorial.c:1319
-msgid "vdivv_i: ifn1 length exceeded"
+#: Opcodes/ambicode1.c:171
+msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1337
-msgid "vdivv_i: ifn2 length exceeded"
+#: Opcodes/ambicode1.c:197
+msgid "The output channel count does not match the isetup value."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1374
-msgid "vpowv: ifn1 length exceeded"
+#: Opcodes/ambicode.c:49
+msgid "bformenc is deprecated; use bformenc1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1393
-msgid "vpowv: ifn2 length exceeded"
+#: Opcodes/ambicode.c:88
+msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1420
-#, c-format
-msgid "vpowv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:287
+msgid "bformdec is deprecated; use bformdec1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1425
-#, c-format
-msgid "vpowv_i: ifn2 invalid table number %i"
+#: Opcodes/ambicode.c:291
+msgid "Wrong number of input arguments!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1447
-msgid "vpowv_i: ifn1 length exceeded"
+#: Opcodes/ambicode.c:299
+msgid "Wrong number of output cells! There must be 2 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1464
-msgid "vpowv_i: ifn2 length exceeded"
+#: Opcodes/ambicode.c:344
+msgid "Wrong number of output cells! There must be 4 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1501
-msgid "vexpv: ifn1 length exceeded"
+#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
+msgid "Wrong number of output cells! There must be 5 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1520
-msgid "vexpv: ifn2 length exceeded"
+#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
+msgid "Wrong number of output cells! There must be 8 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1547
-#, c-format
-msgid "vexpv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:575
+msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1552
+#: Opcodes/babo.c:742
 #, c-format
-msgid "vexpv_i: ifn2 invalid table number %i"
+msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1574
-msgid "vexpv_i: ifn1 length exceeded"
+#: Opcodes/bilbar.c:83
+msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1592
-msgid "vexpv_i: ifn2 length exceeded"
+#: Opcodes/bilbar.c:109
+msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1629
-msgid "vmap: Error: ifn1 and ifn2 can not be the same"
-msgstr ""
+#: Opcodes/biquad.c:599
+msgid "vco: not initialised"
+msgstr "vco: nicht initialisiert"
 
-#: Opcodes/gab/vectorial.c:1634
+#: Opcodes/bowedbar.c:53
 #, c-format
-msgid "vmap: ifn1 invalid table number %i"
+msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1639
-#, c-format
-msgid "vmap: ifn2 invalid table number %i"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1661
-msgid "vmap: ifn1 length exceeded"
-msgstr ""
+#: Opcodes/cellular.c:49 Opcodes/cellular.c:55
+#, fuzzy
+msgid "cell: invalid num of elements"
+msgstr "unzulässiger Name für Instrument"
 
-#: Opcodes/gab/vectorial.c:1678
-msgid "vmap: ifn2 length exceeded"
-msgstr ""
+#: Opcodes/cellular.c:51
+#, fuzzy
+msgid "cell: invalid output table"
+msgstr "unzulässiger Name für Instrument"
 
-#: Opcodes/gab/vectorial.c:1698
+#: Opcodes/cellular.c:58
 #, fuzzy
-msgid "vectorop: invalid num of elements"
+msgid "cell: invalid initial state table"
 msgstr "unzulässiger Name für Instrument"
 
-#: Opcodes/gab/vectorial.c:1727
-msgid "vport: invalid table length or num of elements"
-msgstr ""
+#: Opcodes/cellular.c:63
+#, fuzzy
+msgid "cell: invalid rule table"
+msgstr "unzulässiger Name für Instrument"
 
-#: Opcodes/gab/vectorial.c:1730
-msgid "vport: invalid table"
+#: Opcodes/clfilt.c:53
+msgid "filter type not lowpass or highpass in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1735
-msgid "vport: invalid init table length or num of elements"
+#: Opcodes/clfilt.c:59
+#, c-format
+msgid "filter kind, %d, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1738
-msgid "vport: invalid init table"
+#: Opcodes/clfilt.c:63
+#, c-format
+msgid "number of poles, %f, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1875
+#: Opcodes/clfilt.c:69
 #, c-format
-msgid "vrandh: Seeding from current time %lu\n"
+msgid "odd number of poles chosen in clfilt, rounded to %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1888
-msgid "vrandh: Invalid table."
+#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
+#, c-format
+msgid "passband ripple must be positive in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1891
-msgid "vrandh: idstoffset is greater than table length."
+#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
+#, c-format
+msgid "passband ripple must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1896
-msgid "randh: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
+#, c-format
+msgid "stopband attenuation must be negative in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1975
+#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
 #, c-format
-msgid "vrandi: Seeding from current time %lu\n"
+msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1987
-msgid "vrandi: Invalid table."
+#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
+msgid "Lowpass Elliptical not implemented yet. Sorry!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1990
-msgid "vrandi: idstoffset is greater thantable length."
+#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
+#: Opcodes/clfilt.c:383
+msgid "code error, ikind out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1995
-msgid "vrandi: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
+msgid "Highpass Elliptical not implemented yet. Sorry!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
-#: Opcodes/gab/vectorial.c:2091
-#, fuzzy
-msgid "vecdelay: invalid num of elements"
-msgstr "unzulässiger Name für Instrument"
-
-#: Opcodes/gab/vectorial.c:2079
-msgid "vecdly: invalid output table"
+#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
+msgid "code error, ihilo out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2086
-msgid "vecdly: invalid input table"
+#: Opcodes/control.c:40
+msgid "control: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2093
-msgid "vecdly: invalid delay table"
+#: Opcodes/control.c:56
+#, c-format
+msgid "Closing down wish(%d)\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2138
-#, fuzzy
-msgid "vecdly: not initialised"
-msgstr "vdelay: nicht initialisiert"
-
-#: Opcodes/gab/vectorial.c:2181
-msgid "vlinseg/vexpseg: invalid num. of elements"
+#: Opcodes/control.c:211
+#, c-format
+msgid "Slider %d set to %s\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr "tableseg: nicht initialisiert"
-
-#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr "tablexseg: nicht initialisiert"
-
-#: Opcodes/gab/vectorial.c:2406
-#, fuzzy
-msgid "vdelayk: not initialised"
-msgstr "delayk: nicht initialisiert"
-
-#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
-#, fuzzy
-msgid "cella: invalid num of elements"
-msgstr "unzulässiger Name für Instrument"
+#: Opcodes/control.c:216
+#, c-format
+msgid "Unknown control %d"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2441
-msgid "cella: invalid output table"
+#: Opcodes/cpumeter.c:77
+#, c-format
+msgid "Failed to open /proc/stat: %s"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2448
-msgid "cella: invalid initial state table"
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
+msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2452
-msgid "cella: invalid rule table"
+#: Opcodes/crossfm.c:34
+msgid "crossfm: ftable not found"
 msgstr ""
 
 #: Opcodes/grain4.c:59
@@ -6606,7 +5732,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1259
 msgid ""
 "\n"
 "WARNING: fades are overlapping: this could lead to noise: reduce fade size "
@@ -6642,29 +5768,29 @@ msgstr ""
 msgid "pvsifd: unsupported value for iwintype\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:426
+#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:429
 #, c-format
 msgid "imageload: cannot open image %s.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:111
+#: Opcodes/imageOpcodes.c:108 Opcodes/imageOpcodes.c:114
 #, c-format
 msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
-#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
-#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:122 Opcodes/imageOpcodes.c:129
+#: Opcodes/imageOpcodes.c:168 Opcodes/imageOpcodes.c:177
+#: Opcodes/imageOpcodes.c:191 Opcodes/imageOpcodes.c:294
+#: Opcodes/imageOpcodes.c:301 Opcodes/imageOpcodes.c:314
 msgid "imageload: out of memory.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:283
+#: Opcodes/imageOpcodes.c:286
 #, c-format
 msgid "imageload: cannot open image %s for writing.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:392
+#: Opcodes/imageOpcodes.c:395
 msgid "Cannot allocate memory.\n"
 msgstr ""
 
@@ -6708,29 +5834,29 @@ msgstr ""
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:892
+#: Opcodes/jacko.cpp:894
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:895
+#: Opcodes/jacko.cpp:897
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:911
+#: Opcodes/jacko.cpp:913
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
-#: Opcodes/jacko.cpp:1241
+#: Opcodes/jacko.cpp:957 Opcodes/jacko.cpp:1064 Opcodes/jacko.cpp:1171
+#: Opcodes/jacko.cpp:1243
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
-#: Opcodes/jacko.cpp:1255
+#: Opcodes/jacko.cpp:971 Opcodes/jacko.cpp:1079 Opcodes/jacko.cpp:1186
+#: Opcodes/jacko.cpp:1257
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6783,8 +5909,8 @@ msgstr ""
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
-#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:120
+#: Opcodes/pvlock.c:322 Opcodes/pvsbasic.c:463
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
@@ -6813,15 +5939,36 @@ msgstr ""
 msgid "splitrig: incorrect table number"
 msgstr ""
 
-#: Opcodes/midiops2.c:514 Opcodes/midiops2.c:529 Opcodes/midiops2.c:548
+#: Opcodes/midiops2.c:339 Opcodes/midiops2.c:377 Opcodes/midiops2.c:409
+#: Opcodes/midiops2.c:458 Opcodes/midiops2.c:493 Opcodes/midiops2.c:535
+#: Opcodes/midiops2.c:550 Opcodes/midiops2.c:569
+msgid "illegal midi channel"
+msgstr ""
+
+#: Opcodes/midiops2.c:532 Opcodes/midiops2.c:547 Opcodes/midiops2.c:566
 msgid "value out of range"
 msgstr ""
 
-#: Opcodes/midiops2.c:580
+#: Opcodes/midiops2.c:598
 #, c-format
 msgid "invalid channel number: %d"
 msgstr ""
 
+#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
+#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
+msgid "illegal channel"
+msgstr ""
+
+#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
+#, c-format
+msgid "illegal control number at position n.%d"
+msgstr ""
+
+#: Opcodes/midiops3.c:64 Opcodes/midiops3.c:168 Opcodes/midiops3.c:347
+#, c-format
+msgid "illegal initvalue at position n.%d"
+msgstr ""
+
 #: Opcodes/midiops3.c:333 Opcodes/midiops3.c:428
 #, c-format
 msgid "illegal msb control number at position n.%d"
@@ -6860,12 +6007,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
+#: Opcodes/mp3in.c:101 Opcodes/mp3in.c:242
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:140
+#: Opcodes/mp3in.c:148
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7019,6 +6166,10 @@ msgstr ""
 msgid "vco2init: invalid max table size"
 msgstr ""
 
+#: Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
+msgid "ftgen error"
+msgstr ""
+
 #: Opcodes/oscbnk.c:1757
 msgid "vco2init: invalid source ftable"
 msgstr ""
@@ -7075,74 +6226,74 @@ msgstr ""
 msgid "rbjeq: invalid filter type"
 msgstr ""
 
-#: Opcodes/OSC.c:122
+#: Opcodes/OSC.c:126
 msgid "Too many arguments to OSCsend"
 msgstr ""
 
-#: Opcodes/OSC.c:125
+#: Opcodes/OSC.c:129
 msgid "No a-rate arguments allowed"
 msgstr ""
 
-#: Opcodes/OSC.c:163 Opcodes/OSC.c:168 Opcodes/OSC.c:173 Opcodes/OSC.c:183
-#: Opcodes/OSC.c:190 Opcodes/OSC.c:195 Opcodes/OSC.c:206 Opcodes/OSC.c:214
-#: Opcodes/OSC.c:232
+#: Opcodes/OSC.c:167 Opcodes/OSC.c:172 Opcodes/OSC.c:177 Opcodes/OSC.c:187
+#: Opcodes/OSC.c:194 Opcodes/OSC.c:199 Opcodes/OSC.c:210 Opcodes/OSC.c:218
+#: Opcodes/OSC.c:236
 msgid "String not expected"
 msgstr ""
 
-#: Opcodes/OSC.c:202
+#: Opcodes/OSC.c:206
 msgid "Not a string when needed"
 msgstr ""
 
-#: Opcodes/OSC.c:219
+#: Opcodes/OSC.c:223
 msgid "Time stamp is two values"
 msgstr ""
 
-#: Opcodes/OSC.c:240
+#: Opcodes/OSC.c:244
 #, c-format
 msgid "ftable %.2f does not exist"
 msgstr ""
 
-#: Opcodes/OSC.c:249
+#: Opcodes/OSC.c:253
 #, c-format
 msgid "Unknown OSC type %c\n"
 msgstr ""
 
-#: Opcodes/OSC.c:428
+#: Opcodes/OSC.c:436
 msgid "OSC: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/OSC.c:446
+#: Opcodes/OSC.c:455
 msgid "OSCrecv is already running"
 msgstr ""
 
-#: Opcodes/OSC.c:589
+#: Opcodes/OSC.c:599
 #, fuzzy
 msgid "OSC deinitiatised\n"
 msgstr "delay: nicht initialisiert"
 
-#: Opcodes/OSC.c:613
+#: Opcodes/OSC.c:623
 #, c-format
 msgid "OSC listener #%d started on port %s\n"
 msgstr ""
 
-#: Opcodes/OSC.c:663
+#: Opcodes/OSC.c:673
 msgid "OSC not running"
 msgstr ""
 
-#: Opcodes/OSC.c:667
+#: Opcodes/OSC.c:677
 msgid "invalid handle"
 msgstr ""
 
-#: Opcodes/OSC.c:674
+#: Opcodes/OSC.c:684
 #, fuzzy
 msgid "invalid number of arguments"
 msgstr "unzulässiger Name für Instrument"
 
-#: Opcodes/OSC.c:695 Opcodes/OSC.c:700
+#: Opcodes/OSC.c:705 Opcodes/OSC.c:710
 msgid "argument list inconsistent with format string"
 msgstr ""
 
-#: Opcodes/OSC.c:704
+#: Opcodes/OSC.c:714
 msgid "invalid type"
 msgstr ""
 
@@ -7162,11 +6313,11 @@ msgstr ""
 msgid "partikkel: "
 msgstr ""
 
-#: Opcodes/partikkel.c:806
+#: Opcodes/partikkel.c:807
 msgid "partikkelsync: opcode id needs to be a non-zero integer"
 msgstr ""
 
-#: Opcodes/partikkel.c:810 Opcodes/partikkel.c:816
+#: Opcodes/partikkel.c:811 Opcodes/partikkel.c:817
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
@@ -7321,40 +6472,40 @@ msgid ""
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1733
+#: Opcodes/pitch.c:1598
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1784
+#: Opcodes/pitch.c:1649
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
+#: Opcodes/pitch.c:1699 Opcodes/pitch.c:1842
 #, fuzzy
 msgid "Error: transeg not initialised (krate)\n"
 msgstr ""
 "\n"
 "Störung: transeg nicht initialisiert (krate)"
 
-#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
+#: Opcodes/pitch.c:1734 Opcodes/pitch.c:1892
 msgid "transeg: not initialised (arate)\n"
 msgstr "transeg: nicht initialisiert (arate)\n"
 
-#: Opcodes/pitch.c:1924
+#: Opcodes/pitch.c:1789
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2294
+#: Opcodes/pitch.c:2159
 #, fuzzy
 msgid "median: not initialised (arate)\n"
 msgstr "linseg: nicht initialisiert (arate)\n"
 
-#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
+#: Opcodes/pitch.c:2163 Opcodes/pitch.c:2210
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2341
+#: Opcodes/pitch.c:2206
 #, fuzzy
 msgid "median: not initialised (krate)\n"
 msgstr "linseg nicht initialisiert (krate)\n"
@@ -7382,17 +6533,6 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr "Störung: %s, %s"
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
-#: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
-#: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
-#: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
-msgid "Unsafe to have same fsig as in and out"
-msgstr ""
-
-#: Opcodes/ppp.c:36 Opcodes/pvslock.c:36
-msgid "pvslock: signal format must be amp-phase or amp-freq."
-msgstr ""
-
 #: Opcodes/psynth.c:97 Opcodes/psynth.c:253
 msgid "psynth: first input not in TRACKS format\n"
 msgstr ""
@@ -7557,7 +6697,14 @@ msgstr "pvcross: nicht initialisiert"
 msgid "invalid number of output arguments"
 msgstr "unzulässiger Name für Instrument"
 
-#: Opcodes/pvlock.c:490
+#: Opcodes/pvlock.c:480 Opcodes/pvsband.c:46 Opcodes/pvsbasic.c:578
+#: Opcodes/pvsbasic.c:883 Opcodes/pvsbasic.c:1083 Opcodes/pvsbasic.c:1183
+#: Opcodes/pvsbasic.c:1398 Opcodes/pvsbasic.c:1598 Opcodes/pvsbasic.c:1763
+#: Opcodes/pvslock.c:20
+msgid "Unsafe to have same fsig as in and out"
+msgstr ""
+
+#: Opcodes/pvlock.c:492
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7596,76 +6743,76 @@ msgstr "pvsfwrite: konnte nicht Daten schreiben\n"
 msgid "pvsdiskin: could not open file %s\n"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:606
+#: Opcodes/pvsbasic.c:609
 msgid "pvsfreeze: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:679
+#: Opcodes/pvsbasic.c:682
 msgid "pvsosc does not work while sliding"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:910
+#: Opcodes/pvsbasic.c:913
 msgid "pvsmooth: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1020
+#: Opcodes/pvsbasic.c:1023
 msgid "pvsmix: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1070
+#: Opcodes/pvsbasic.c:1073
 msgid "pvsmix: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1083
+#: Opcodes/pvsbasic.c:1086
 msgid "pvsfilter: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1156
+#: Opcodes/pvsbasic.c:1159
 msgid "pvsfilter: not initialised"
 msgstr "pvsfilter: nicht initialisiert"
 
-#: Opcodes/pvsbasic.c:1159
+#: Opcodes/pvsbasic.c:1162
 msgid "pvsfilter: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1372
+#: Opcodes/pvsbasic.c:1375
 msgid "pvscale: not initialised"
 msgstr "pvscale: nicht initialisiert"
 
-#: Opcodes/pvsbasic.c:1570
+#: Opcodes/pvsbasic.c:1575
 msgid "pvshift: not initialised"
 msgstr "pvshift: nicht initialisiert"
 
-#: Opcodes/pvsbasic.c:1741
+#: Opcodes/pvsbasic.c:1748
 #, fuzzy
 msgid "pvswarp: not initialised"
 msgstr "pvsarp: nicht initialisiert\n"
 
-#: Opcodes/pvsbasic.c:1758
+#: Opcodes/pvsbasic.c:1765
 msgid "pvsblur does not work sliding yet"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1890
+#: Opcodes/pvsbasic.c:1897
 msgid "pvsblur: not initialised"
 msgstr "pvsblur: nicht initialisiert"
 
-#: Opcodes/pvsbasic.c:1925
+#: Opcodes/pvsbasic.c:1932
 msgid "pvstencil: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1933
+#: Opcodes/pvsbasic.c:1940
 msgid "pvstencil: ftable needs to equal the number of bins"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2001
+#: Opcodes/pvsbasic.c:2008
 msgid "pvstencil: not initialised"
 msgstr "pvstencil: nicht initialisiert"
 
-#: Opcodes/pvsbasic.c:2148
+#: Opcodes/pvsbasic.c:2158
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/pvsbasic.c:2161 Opcodes/pvsbasic.c:2201 Opcodes/tabvars.c:56
 #: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
 #: Opcodes/tabvars.c:181
 #, fuzzy
@@ -7711,6 +6858,10 @@ msgstr "pvsmaska: nicht initialisiert\n"
 msgid "pvsgendy: not initialised"
 msgstr "pvsband: nicht initialisiert"
 
+#: Opcodes/pvslock.c:36
+msgid "pvslock: signal format must be amp-phase or amp-freq."
+msgstr ""
+
 #: Opcodes/repluck.c:164
 #, c-format
 msgid "Reflection invalid (%f)\n"
@@ -7952,7 +7103,7 @@ msgid ""
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2194
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
@@ -7972,15 +7123,15 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1992 Opcodes/sfont.c:1998
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1999
+#: Opcodes/sfont.c:2001
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2537
+#: Opcodes/sfont.c:2539
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
@@ -7992,6 +7143,10 @@ msgstr ""
 msgid "inletf: signal format must be amp-phase or amp-freq."
 msgstr ""
 
+#: Opcodes/signalflowgraph.cpp:895
+msgid "ftgen string arg not allowed"
+msgstr ""
+
 #: Opcodes/signalflowgraph.cpp:921
 #, fuzzy
 msgid "ftgenonce error"
@@ -8028,7 +7183,7 @@ msgstr ""
 msgid "crossfade longer than loop duration\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389 Opcodes/sndloop.c:661
+#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389
 msgid "function table not found\n"
 msgstr ""
 
@@ -8048,15 +7203,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr "pvsarp: nicht initialisiert\n"
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1071
+#: Opcodes/sndloop.c:1072
 msgid "pvsvoc: not initialised\n"
 msgstr "pvsvoc: nicht initialisiert\n"
 
-#: Opcodes/sndloop.c:1122
+#: Opcodes/sndloop.c:1123
 msgid "pvsmorph: not initialised\n"
 msgstr "pvsmorph: nicht initialisiert\n"
 
@@ -8076,31 +7231,31 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr "sndwarpst: nicht initialisiert"
 
-#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
-#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:315
+#: Opcodes/socksend.c:74 Opcodes/socksend.c:158 Opcodes/socksend.c:252
 #, c-format
 msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
-#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:321
+#: Opcodes/socksend.c:87 Opcodes/socksend.c:172 Opcodes/socksend.c:259
 #, fuzzy
 msgid "creating socket"
 msgstr "Herstellen des Orchesters\n"
 
-#: Opcodes/sockrecv.c:347
-#, c-format
-msgid "connect failed (%d)"
-msgstr ""
-
-#: Opcodes/sockrecv.c:360
+#: Opcodes/sockrecv.c:366
 msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
+#: Opcodes/socksend.c:127 Opcodes/socksend.c:216
 msgid "sendto failed"
 msgstr ""
 
+#: Opcodes/socksend.c:287
+#, c-format
+msgid "connect failed (%d)"
+msgstr ""
+
 #: Opcodes/space.c:165
 msgid "space: not initialised"
 msgstr "space: nicht initialisiert"
@@ -8458,20 +7613,36 @@ msgstr ""
 msgid "Min and max the same"
 msgstr ""
 
-#: Opcodes/uggab.c:424
+#: Opcodes/uggab.c:215
+msgid "table not found in poscil"
+msgstr ""
+
+#: Opcodes/uggab.c:234 Opcodes/uggab.c:261 Opcodes/uggab.c:290
+#: Opcodes/uggab.c:318
+#, fuzzy
+msgid "poscil: not initialised"
+msgstr "oscil: nicht initialisiert"
+
+#: Opcodes/uggab.c:365 Opcodes/uggab.c:412 Opcodes/uggab.c:460
+#: Opcodes/uggab.c:509
+#, fuzzy
+msgid "poscil3: not initialised"
+msgstr "oscil3: nicht initialisiert"
+
+#: Opcodes/uggab.c:589
 msgid "losc: no sample rate stored in function assuming=sr\n"
 msgstr ""
 
-#: Opcodes/uggab.c:556
+#: Opcodes/uggab.c:721
 #, c-format
 msgid "illegal reson iscl value: %f"
 msgstr ""
 
-#: Opcodes/uggab.c:579
+#: Opcodes/uggab.c:744
 msgid "loop cannot be zero"
 msgstr ""
 
-#: Opcodes/uggab.c:1056 Opcodes/uggab.c:1098
+#: Opcodes/uggab.c:1221 Opcodes/uggab.c:1263
 msgid "vibrato(krate): not initialised"
 msgstr "vibrato(krate): nicht initialisiert"
 
@@ -8854,6 +8025,14 @@ msgstr ""
 msgid "vosim: not initialised"
 msgstr "vosim: nicht initialisiert"
 
+#: Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr "tableseg: nicht initialisiert"
+
+#: Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr "tablexseg: nicht initialisiert"
+
 #: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
@@ -8980,47 +8159,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:739
+#: Top/argdecode.c:77 util/srconv.c:740
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9028,7 +8207,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:749
+#: Top/argdecode.c:89 util/srconv.c:750
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9036,7 +8215,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:750
+#: Top/argdecode.c:91 util/srconv.c:751
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9096,7 +8275,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9104,7 +8283,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9169,7 +8348,7 @@ msgid "--nopeaks\t\tDo not write peak information"
 msgstr ""
 
 #: Top/argdecode.c:136
-msgid "--nodisplays\t\tsUppress all displays"
+msgid "--nodisplays\t\tSuppress all displays"
 msgstr ""
 
 #: Top/argdecode.c:137
@@ -9673,49 +8852,49 @@ msgstr ""
 msgid "error: orchestra and score name not allowed in .csoundrc"
 msgstr ""
 
-#: Top/cscorfns.c:276
+#: Top/cscorfns.c:277
 msgid "PMAX exceeded, string event truncated.\n"
 msgstr ""
 
-#: Top/cscorfns.c:663
+#: Top/cscorfns.c:666
 #, c-format
 msgid "%s found %d f event%s with non-zero p2\n"
 msgstr ""
 
-#: Top/cscorfns.c:664
+#: Top/cscorfns.c:667
 msgid "s"
 msgstr ""
 
-#: Top/cscorfns.c:767
+#: Top/cscorfns.c:770
 msgid "cscore: too many input files open"
 msgstr ""
 
-#: Top/cscorfns.c:805
+#: Top/cscorfns.c:810
 msgid "cscore: tried to set an unknown file pointer as the current file"
 msgstr ""
 
-#: Top/cscorfns.c:819
+#: Top/cscorfns.c:824
 msgid "csoundInitializeCscore: no input score given."
 msgstr ""
 
-#: Top/cscorfns.c:824
+#: Top/cscorfns.c:829 Top/cscorfns.c:858
 msgid "csoundInitializeCscore: no output score given."
 msgstr ""
 
-#: Top/cscorfns.c:852
+#: Top/cscorfns.c:889
 #, c-format
 msgid "cscoreFileOpen: error opening %s"
 msgstr ""
 
-#: Top/cscorfns.c:870
+#: Top/cscorfns.c:907
 msgid "cscoreFileClose: NULL file pointer\n"
 msgstr ""
 
-#: Top/cscorfns.c:882
+#: Top/cscorfns.c:919
 msgid "cscoreFileClose: fp not recorded\n"
 msgstr ""
 
-#: Top/cscorfns.c:888
+#: Top/cscorfns.c:925
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
@@ -9754,129 +8933,129 @@ msgstr ""
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
-#: Top/csmodule.c:638 Top/csmodule.c:646
+#: Top/csmodule.c:607 Top/csmodule.c:613 Top/csmodule.c:624 Top/csmodule.c:631
+#: Top/csmodule.c:637 Top/csmodule.c:645
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:696
+#: Top/csmodule.c:695
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:731
+#: Top/csmodule.c:730
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:737
+#: Top/csmodule.c:736
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:773
+#: Top/csmodule.c:772
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:796
+#: Top/csmodule.c:795
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:819
+#: Top/csmodule.c:818
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:918
+#: Top/csmodule.c:917
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1636 Top/csound.c:1656
+#: Top/csound.c:1640 Top/csound.c:1660
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1642
+#: Top/csound.c:1646
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1675
+#: Top/csound.c:1679
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1700
+#: Top/csound.c:1704
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1707
+#: Top/csound.c:1711
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1727
+#: Top/csound.c:1731
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1998
+#: Top/csound.c:2002
 msgid "WARNING: "
 msgstr "ACHTUNG: "
 
-#: Top/csound.c:2119
+#: Top/csound.c:2123
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2120
+#: Top/csound.c:2124
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2149 Top/csound.c:2185
+#: Top/csound.c:2153 Top/csound.c:2189
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2153 Top/csound.c:2189
+#: Top/csound.c:2157 Top/csound.c:2193
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2271
+#: Top/csound.c:2275
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2276 Top/csound.c:2310
+#: Top/csound.c:2280 Top/csound.c:2314
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2279 Top/csound.c:2313
+#: Top/csound.c:2283 Top/csound.c:2317
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2305
+#: Top/csound.c:2309
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2327
+#: Top/csound.c:2331
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2445
+#: Top/csound.c:2449
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2552
+#: Top/csound.c:2556
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2575
+#: Top/csound.c:2579
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2906
+#: Top/csound.c:2912
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2957
+#: Top/csound.c:2963
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9932,57 +9111,47 @@ msgstr ""
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:334
+#: Top/main.c:318
+#, c-format
+msgid "Failed to open input file %s\n"
+msgstr ""
+
+#: Top/main.c:339
 msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:352
+#: Top/main.c:360
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:359
+#: Top/main.c:367
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:369
+#: Top/main.c:377
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr ""
 
-#: Top/main.c:371
+#: Top/main.c:379
 msgid "sorting score ...\n"
 msgstr ""
 
-#: Top/main.c:381
-#, c-format
-msgid "cannot extract %s, name conflict"
-msgstr ""
-
-#: Top/main.c:384
+#: Top/main.c:389
 #, c-format
 msgid "cannot open extract file %s"
 msgstr ""
 
-#: Top/main.c:388
-#, c-format
-msgid "cannot reopen %s"
-msgstr ""
-
 #: Top/main.c:392
-#, c-format
-msgid "cannot open %s for writing"
-msgstr ""
-
-#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:405
+#: Top/main.c:401
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:407
+#: Top/main.c:403
 msgid "Syntax check completed.\n"
 msgstr "Syntaxprüfung durchgeführt.\n"
 
@@ -10047,158 +9216,158 @@ msgstr "*** Speicherallozierungausfall\n"
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:110 Top/one_file.c:118
+#: Top/one_file.c:120 Top/one_file.c:130
 msgid " *** cannot create temporary file"
 msgstr ""
 
-#: Top/one_file.c:203
+#: Top/one_file.c:215
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:207
+#: Top/one_file.c:219
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr "ACHTUNG: konnte nicht %s entfernen\n"
 
-#: Top/one_file.c:274 Top/one_file.c:302
+#: Top/one_file.c:286 Top/one_file.c:314
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:319
+#: Top/one_file.c:331
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:322
+#: Top/one_file.c:334
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:328 Top/one_file.c:744
+#: Top/one_file.c:340 Top/one_file.c:763
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:354
+#: Top/one_file.c:371
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:376 Top/one_file.c:430
+#: Top/one_file.c:393 Top/one_file.c:449
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:391 Top/one_file.c:396
+#: Top/one_file.c:408 Top/one_file.c:413
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:408
+#: Top/one_file.c:425
 #, c-format
 msgid "Creating %s (%p)\n"
 msgstr ""
 
-#: Top/one_file.c:421
+#: Top/one_file.c:438
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:468
+#: Top/one_file.c:487
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:487
+#: Top/one_file.c:506
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:503
+#: Top/one_file.c:522
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:539
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:536 Top/one_file.c:584
+#: Top/one_file.c:555 Top/one_file.c:603
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:541
+#: Top/one_file.c:560
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:555
+#: Top/one_file.c:574
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:589
+#: Top/one_file.c:608
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:604
+#: Top/one_file.c:623
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:624
+#: Top/one_file.c:643
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:632 Top/one_file.c:639
+#: Top/one_file.c:651 Top/one_file.c:658
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:645
+#: Top/one_file.c:664
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:655
+#: Top/one_file.c:674
 msgid "**** Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:661
+#: Top/one_file.c:680
 msgid "**** End of Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:691
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:703
+#: Top/one_file.c:722
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:718
+#: Top/one_file.c:737
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:734
+#: Top/one_file.c:753
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:740
+#: Top/one_file.c:759
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:754
+#: Top/one_file.c:773
 msgid "Creating orchestra\n"
 msgstr "Herstellen des Orchesters\n"
 
-#: Top/one_file.c:759
+#: Top/one_file.c:778
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:793
+#: Top/one_file.c:812
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:798
+#: Top/one_file.c:817
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 
@@ -10211,159 +9380,159 @@ msgstr ""
 msgid "%d opcodes\n"
 msgstr ""
 
-#: Top/threads.c:38
+#: Top/threads.c:92 Top/threads.c:556
 #, c-format
 msgid "%s() is not implemented on this platform.\n"
 msgstr ""
 
-#: Top/utility.c:98
+#: Top/utility.c:99
 #, c-format
 msgid "util %s:\n"
 msgstr ""
 
-#: Top/utility.c:105
+#: Top/utility.c:106
 #, c-format
 msgid "Error: utility '%s' not found"
 msgstr ""
 
-#: Top/utility.c:108
+#: Top/utility.c:109
 msgid "Error: utility not found"
 msgstr ""
 
-#: Top/utility.c:112
+#: Top/utility.c:113
 msgid "The available utilities are:\n"
 msgstr ""
 
-#: util1/scot/scot.c:51
+#: util1/scot/scot.c:56
 msgid "Score must start with orchestra section"
 msgstr ""
 
-#: util1/scot/scot.c:61
+#: util1/scot/scot.c:66
 msgid "Expected score or functions section"
 msgstr ""
 
-#: util1/scot/scot.c:117
+#: util1/scot/scot.c:122
 msgid "Tempo must be specified"
 msgstr ""
 
-#: util1/scot/scot.c:121
+#: util1/scot/scot.c:126
 msgid "Redefinition of tempo"
 msgstr ""
 
-#: util1/scot/scot.c:133
+#: util1/scot/scot.c:138
 msgid "Must specify 2 or more letters of keyword"
 msgstr ""
 
-#: util1/scot/scot.c:136 util1/scot/scot.c:145 util1/scot/scot.c:154
+#: util1/scot/scot.c:141 util1/scot/scot.c:150 util1/scot/scot.c:159
 msgid "Must be \"on\" or \"off\""
 msgstr ""
 
-#: util1/scot/scot.c:165
+#: util1/scot/scot.c:170
 msgid "Invalid time signature"
 msgstr ""
 
-#: util1/scot/scot.c:202
+#: util1/scot/scot.c:207
 msgid "Bad key signature"
 msgstr ""
 
-#: util1/scot/scot.c:237 util1/scot/scot.c:243
+#: util1/scot/scot.c:242 util1/scot/scot.c:248
 msgid "Invalid field"
 msgstr ""
 
-#: util1/scot/scot.c:254 util1/scot/scot.c:258
+#: util1/scot/scot.c:259 util1/scot/scot.c:263
 msgid "Nested next-parameter passing"
 msgstr ""
 
-#: util1/scot/scot.c:268
+#: util1/scot/scot.c:273
 msgid "Unrecognised keyword"
 msgstr "Unerkanntes Schlüsselwort"
 
-#: util1/scot/scot.c:317
+#: util1/scot/scot.c:322
 msgid "Wrong number of beats in bar"
 msgstr ""
 
-#: util1/scot/scot.c:325
+#: util1/scot/scot.c:330
 msgid "Syntax error: cannot back up"
 msgstr ""
 
-#: util1/scot/scot.c:496
+#: util1/scot/scot.c:501
 msgid "Improper tie"
 msgstr ""
 
-#: util1/scot/scot.c:502
+#: util1/scot/scot.c:507
 msgid "Tie between different pitches"
 msgstr ""
 
-#: util1/scot/scot.c:510
+#: util1/scot/scot.c:515
 msgid "Warning: params changed on tie"
 msgstr ""
 
-#: util1/scot/scot.c:562
+#: util1/scot/scot.c:567
 msgid "Parameter number out of range"
 msgstr ""
 
-#: util1/scot/scot.c:622
+#: util1/scot/scot.c:627
 msgid "Lost previous note: not written"
 msgstr ""
 
-#: util1/scot/scot.c:741
+#: util1/scot/scot.c:746
 msgid "Macro expansion too long -- circular macros?"
 msgstr ""
 
-#: util1/scot/scot.c:817 util1/scot/scot.c:922 util1/scot/scot.c:946
+#: util1/scot/scot.c:822 util1/scot/scot.c:927 util1/scot/scot.c:951
 msgid "Syntax error: no {"
 msgstr ""
 
-#: util1/scot/scot.c:829
+#: util1/scot/scot.c:834
 msgid "No instrument specified"
 msgstr ""
 
-#: util1/scot/scot.c:870
+#: util1/scot/scot.c:875
 msgid "unresolved tie"
 msgstr ""
 
-#: util1/scot/scot.c:872
+#: util1/scot/scot.c:877
 msgid "unresolved slur"
 msgstr ""
 
-#: util1/scot/scot.c:879
+#: util1/scot/scot.c:884
 msgid "Circular note list\n"
 msgstr ""
 
-#: util1/scot/scot.c:925 util1/scot/scot.c:1039 util1/scot/scot.c:1053
-#: util1/scot/scot.c:1060 util1/scot/scot.c:1085
+#: util1/scot/scot.c:930 util1/scot/scot.c:1044 util1/scot/scot.c:1058
+#: util1/scot/scot.c:1065 util1/scot/scot.c:1090
 msgid "Unexpected end of file"
 msgstr ""
 
-#: util1/scot/scot.c:968
+#: util1/scot/scot.c:973
 msgid "Syntax error: no ="
 msgstr "Syntaxstörung: keine ="
 
-#: util1/scot/scot.c:970
+#: util1/scot/scot.c:975
 msgid "Syntax error: no number"
 msgstr "Syntaxstörung: keine Zahl"
 
-#: util1/scot/scot.c:982
+#: util1/scot/scot.c:987
 msgid "No instruments declared"
 msgstr ""
 
-#: util1/scot/scot.c:1003
+#: util1/scot/scot.c:1008
 msgid "Expected ="
 msgstr ""
 
-#: util1/scot/scot.c:1151
+#: util1/scot/scot.c:1156
 msgid "Invalid pitch class"
 msgstr ""
 
-#: util1/scot/scot.c:1296 util1/scot/scot.c:1311 util1/scot/scot.c:1365
+#: util1/scot/scot.c:1301 util1/scot/scot.c:1316 util1/scot/scot.c:1370
 msgid "Division by zero"
 msgstr "Abteilung durch null"
 
-#: util1/scot/scot.c:1454
+#: util1/scot/scot.c:1461
 msgid "scot processing terminated\n"
 msgstr ""
 
-#: util1/scot/scot.c:1461
+#: util1/scot/scot.c:1468
 #, c-format
 msgid "scot: %d errors.\n"
 msgstr "scot: %d Störungen.\n"
@@ -10379,8 +9548,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
-#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
+#: util/atsa.c:546 util/atsa.c:2360 util/atsa.c:2374 util/atsa.c:2393
+#: util/atsa.c:2573 util/atsa.c:2636 util/atsa.c:2724
 msgid "done!\n"
 msgstr "getan!\n"
 
@@ -10509,160 +9678,167 @@ msgstr ""
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2013
+#: util/atsa.c:1946 util/atsa.c:1951 util/atsa.c:1962 util/atsa.c:1965
+#: util/atsa.c:1969 util/atsa.c:1978 util/cvanal.c:193 util/hetro.c:607
+#: util/hetro.c:690 util/hetro.c:703
+#, fuzzy
+msgid "Write failure\n"
+msgstr "*** Speicherallozierungausfall\n"
+
+#: util/atsa.c:2019
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr ""
 
-#: util/atsa.c:2020
+#: util/atsa.c:2026
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2025
+#: util/atsa.c:2031
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2040
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2044
+#: util/atsa.c:2050
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2050
+#: util/atsa.c:2056
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2063
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2067
+#: util/atsa.c:2073
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2074
+#: util/atsa.c:2080
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2082
+#: util/atsa.c:2088
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2090
+#: util/atsa.c:2096
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2098
+#: util/atsa.c:2104
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2106
+#: util/atsa.c:2112
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2130
+#: util/atsa.c:2136
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2139
+#: util/atsa.c:2145
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2148
+#: util/atsa.c:2154
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2157
+#: util/atsa.c:2163
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2163
+#: util/atsa.c:2169
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2174
+#: util/atsa.c:2180
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2182
+#: util/atsa.c:2188
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2190
+#: util/atsa.c:2196
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2335
+#: util/atsa.c:2341
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2365
+#: util/atsa.c:2371
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2381 util/atsa.c:2384
+#: util/atsa.c:2387 util/atsa.c:2390
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2389
+#: util/atsa.c:2395
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2497
+#: util/atsa.c:2503
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2585
+#: util/atsa.c:2591
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2681
+#: util/atsa.c:2687
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2732
+#: util/atsa.c:2738
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2832
+#: util/atsa.c:2838
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10731,7 +9907,7 @@ msgstr ""
 msgid "less sound than expected!\n"
 msgstr ""
 
-#: util/cvanal.c:243
+#: util/cvanal.c:244
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
@@ -10819,7 +9995,7 @@ msgstr ""
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
+#: util/dnoise.c:480 util/srconv.c:461 util/srconv.c:473
 #, c-format
 msgid "cannot open %s."
 msgstr ""
@@ -10992,7 +10168,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:737
+#: util/envext.c:54 util/srconv.c:738
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11041,7 +10217,7 @@ msgid "Cannot open input file %s\n"
 msgstr ""
 
 #: util/het_export.c:61 util/lpc_export.c:66 util/lpc_import.c:62
-#: util/pv_export.c:64 util/pv_import.c:111
+#: util/pv_export.c:64 util/pv_import.c:123
 #, c-format
 msgid "Cannot open output file %s\n"
 msgstr ""
@@ -11064,7 +10240,7 @@ msgstr ""
 msgid "Cannot open output hetro file %s\n"
 msgstr ""
 
-#: util/het_import.c:108
+#: util/het_import.c:111
 msgid "translate text form to hetro analysis file"
 msgstr ""
 
@@ -11162,48 +10338,48 @@ msgstr ""
 msgid "cannot create output file\n"
 msgstr ""
 
-#: util/hetro.c:616
+#: util/hetro.c:617
 #, c-format
 msgid "scale = %f\n"
 msgstr ""
 
-#: util/hetro.c:711
+#: util/hetro.c:714
 #, c-format
 msgid "harmonic #%d:\tamp points %d, \tfrq points %d,\tpeakamp %d\n"
 msgstr ""
 
-#: util/hetro.c:715
+#: util/hetro.c:718
 #, c-format
 msgid "wrote %ld bytes to %s\n"
 msgstr ""
 
-#: util/hetro.c:747
+#: util/hetro.c:750
 msgid "OOPS: SDIF does not work on this machine!\n"
 msgstr ""
 
-#: util/hetro.c:773
+#: util/hetro.c:776
 #, c-format
 msgid "Error creating %s\n"
 msgstr ""
 
-#: util/hetro.c:801
+#: util/hetro.c:804
 msgid "Error writing SDIF frame header.\n"
 msgstr ""
 
-#: util/hetro.c:810
+#: util/hetro.c:813
 msgid "Error writing SDIF matrix header.\n"
 msgstr ""
 
-#: util/hetro.c:823
+#: util/hetro.c:826
 msgid "Error writing SDIF data.\n"
 msgstr ""
 
-#: util/hetro.c:830
+#: util/hetro.c:833
 #, c-format
 msgid "wrote %ld 1TRC frames to %s\n"
 msgstr ""
 
-#: util/hetro.c:858
+#: util/hetro.c:861
 msgid "Soundfile analysis for adsyn"
 msgstr ""
 
@@ -11415,7 +10591,12 @@ msgstr ""
 msgid "Failed to read LPC header\n"
 msgstr ""
 
-#: util/lpc_export.c:102
+#: util/lpc_export.c:81 util/lpc_export.c:88
+#, fuzzy
+msgid "Read faailure\n"
+msgstr "*** Speicherallozierungausfall\n"
+
+#: util/lpc_export.c:106
 msgid "translate linear predictive coding file to text file"
 msgstr ""
 
@@ -11423,7 +10604,12 @@ msgstr ""
 msgid "Usage: lpc_import cstext_file lpc_file\n"
 msgstr ""
 
-#: util/lpc_import.c:98
+#: util/lpc_import.c:77 util/lpc_import.c:84 util/srconv.c:378
+#, fuzzy
+msgid "Read failure\n"
+msgstr "*** Speicherallozierungausfall\n"
+
+#: util/lpc_import.c:102
 msgid "translate text file to linear predictive coding file"
 msgstr ""
 
@@ -11440,7 +10626,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11738,11 +10924,20 @@ msgstr ""
 msgid "Usage: pv_import cstext_file pv_file \n"
 msgstr ""
 
-#: util/pv_import.c:127
+#: util/pv_import.c:73 util/pv_import.c:93
+msgid "Not a PV file\n"
+msgstr ""
+
+#: util/pv_import.c:132
+#, fuzzy
+msgid "Memory failure\n"
+msgstr "*** Speicherallozierungausfall\n"
+
+#: util/pv_import.c:143
 msgid "Sync error\n"
 msgstr ""
 
-#: util/pv_import.c:148
+#: util/pv_import.c:164
 msgid "translate text form to PVOC analysis file"
 msgstr ""
 
@@ -11809,7 +11004,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:754
+#: util/scale.c:62 util/srconv.c:755
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -11988,47 +11183,47 @@ msgstr ""
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:388
+#: util/srconv.c:389
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:402
+#: util/srconv.c:403
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:407
+#: util/srconv.c:408
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:412 util/srconv.c:704
+#: util/srconv.c:413 util/srconv.c:705
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:731
+#: util/srconv.c:732
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:733
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:734
+#: util/srconv.c:735
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:736
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:737
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:820
+#: util/srconv.c:821
 msgid "Sample rate conversion"
 msgstr ""
 
@@ -12178,6 +11373,45 @@ msgstr ""
 msgid "Extract part of a sound file"
 msgstr ""
 
+#~ msgid "DSSI4CS: Not initialised or wrong argument types."
+#~ msgstr "DSSI4CS: nicht initialisiert or wrong argument types."
+
+#, fuzzy
+#~ msgid "insufficient arguments for fareytable"
+#~ msgstr "unzulängliche Argumente"
+
+#~ msgid "No table for VibWaveato"
+#~ msgstr "Keine Tabelle für VibWaveato"
+
+#~ msgid "No table for FM4Op"
+#~ msgstr "Keine Tabelle für FM4Op"
+
+#~ msgid "freeverb: not initialised"
+#~ msgstr "freeverb: nicht initialisiert"
+
+#~ msgid "ftconv: not initialised"
+#~ msgstr "ftconv: nicht initialisiert"
+
+#, fuzzy
+#~ msgid "copyTabElems: incorrect source table number"
+#~ msgstr "unbekannte Quelltabelle Zahl"
+
+#, fuzzy
+#~ msgid "vectorop: invalid num of elements"
+#~ msgstr "unzulässiger Name für Instrument"
+
+#, fuzzy
+#~ msgid "vecdelay: invalid num of elements"
+#~ msgstr "unzulässiger Name für Instrument"
+
+#, fuzzy
+#~ msgid "vecdly: not initialised"
+#~ msgstr "vdelay: nicht initialisiert"
+
+#, fuzzy
+#~ msgid "vdelayk: not initialised"
+#~ msgstr "delayk: nicht initialisiert"
+
 #, fuzzy
 #~ msgid "tableseg: not initialized"
 #~ msgstr "tableseg: nicht initialisiert"
diff --git a/po/italian.po b/po/italian.po
index f6d7ba5..59d7b4f 100644
--- a/po/italian.po
+++ b/po/italian.po
@@ -101,322 +101,323 @@ msgstr "la lunghezza della stringa supera il valore permesso"
 msgid "(unknown error)"
 msgstr "(errore sconosciuto)"
 
-#: Engine/csound_orc_compile.c:138
+#: Engine/csound_orc_compile.c:141
 #, fuzzy, c-format
 msgid ""
 "input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
 "line %d\n"
 msgstr "argomento in input '%s' di tipo %s non permesso aspettando invece %c"
 
-#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
+#: Engine/csound_orc_compile.c:268 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr "argomento mancante o in più"
 
-#: Engine/csound_orc_compile.c:269
+#: Engine/csound_orc_compile.c:272
 #, fuzzy
 msgid "too many input args\n"
 msgstr "troppi argomenti in input"
 
-#: Engine/csound_orc_compile.c:304
+#: Engine/csound_orc_compile.c:307
 #, fuzzy, c-format
 msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr "argomento in input '%s' usato prima di essere definito"
 
-#: Engine/csound_orc_compile.c:380
-#, fuzzy, c-format
-msgid ""
-"output name previously used, type '%c' must be uniquely defined, line %d"
-msgstr "nome di output già usato, il tipo '%c' deve essere definito unicamente"
-
-#: Engine/csound_orc_compile.c:386
+#: Engine/csound_orc_compile.c:389
 #, fuzzy, c-format
 msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr "argomento di output '%s' di tipo illegale"
 
-#: Engine/csound_orc_compile.c:541
+#: Engine/csound_orc_compile.c:517
+#, fuzzy, c-format
+msgid "output name previously used, type 'w' must be uniquely defined, line %d"
+msgstr "nome di output già usato, il tipo '%c' deve essere definito unicamente"
+
+#: Engine/csound_orc_compile.c:563
 #, fuzzy, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr "create_opcode: Non c'è regola d'uso per dichiarazione di tipo %d\n"
 
-#: Engine/csound_orc_compile.c:738
+#: Engine/csound_orc_compile.c:760
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr "create_instrument: strumento num %ld\n"
 
-#: Engine/csound_orc_compile.c:748
+#: Engine/csound_orc_compile.c:772
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr "create_instrument: nome dello strumento %s\n"
 
-#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+#: Engine/csound_orc_compile.c:779 Engine/csound_orc_compile.c:1068
+#: Engine/csound_orc_compile.c:1089 Engine/otran.c:363
 msgid "invalid name for instrument"
 msgstr "nome dello strumento non valido"
 
-#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
+#: Engine/csound_orc_compile.c:783 Engine/csound_orc_compile.c:1071
+#: Engine/csound_orc_compile.c:1092 Engine/otran.c:369
 #, c-format
 msgid "instr %s redefined"
 msgstr "strumento %s ridefinito"
 
-#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
+#: Engine/csound_orc_compile.c:927 Engine/otran.c:351
 #, c-format
 msgid "instr %ld redefined"
 msgstr "strumento %ld ridefinito"
 
-#: Engine/csound_orc_compile.c:914
+#: Engine/csound_orc_compile.c:938
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr "!!! csound->opcodeInfo e' NULL !!!\n"
 
-#: Engine/csound_orc_compile.c:1083
+#: Engine/csound_orc_compile.c:1141
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr "Nodo sconosciuto di tipo %d trovato in root.\n"
 
-#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
+#: Engine/csound_orc_compile.c:1198 Engine/otran.c:578 Engine/otran.c:1432
 #, c-format
 msgid "%s invalid sample rate"
 msgstr "%s frequenza di campionamento (sr) non valida"
 
-#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
+#: Engine/csound_orc_compile.c:1200 Engine/otran.c:580 Engine/otran.c:1434
 #, c-format
 msgid "%s invalid control rate"
 msgstr "%s frequenza dei segnali di controllo (kr) non valida"
 
-#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
+#: Engine/csound_orc_compile.c:1204 Engine/otran.c:583 Engine/otran.c:1430
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr "%s valore di ksmps non valido"
 
-#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
+#: Engine/csound_orc_compile.c:1207 Engine/otran.c:586 Engine/otran.c:1436
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr "%s sr, kr e ksmps sono incongruenti"
 
-#: Engine/csound_orc_compile.c:1165
+#: Engine/csound_orc_compile.c:1223
 msgid "perf-pass statements illegal in header blk\n"
 msgstr "dichiarazione d'esecuzione non valida nel blocco header\n"
 
-#: Engine/csound_orc_compile.c:1170
+#: Engine/csound_orc_compile.c:1228
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr "%d errore\\i di sintassi nell'orchestra.  Compilazione non valida\n"
 
-#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
+#: Engine/csound_orc_compile.c:1288 Engine/otran.c:670
 msgid "inconsistent argoff sumcount"
 msgstr "argoff sumcount incoerente"
 
-#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
+#: Engine/csound_orc_compile.c:1360 Engine/otran.c:739
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr "Lista delle etichette piena...estesa a %d\n"
 
-#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
+#: Engine/csound_orc_compile.c:1398 Engine/otran.c:777
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr "Lista dei GOTOS piena...estesa a %d\n"
 
-#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
+#: Engine/csound_orc_compile.c:1431 Engine/otran.c:810
 #, c-format
 msgid "target label '%s' not found"
 msgstr "obiettivo dell'etichetta '%s' non trovato"
 
-#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
+#: Engine/csound_orc_compile.c:1509 Engine/otran.c:865
 #, c-format
 msgid "string syntax '%s'"
 msgstr "sintassi della stringa '%s'"
 
-#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
+#: Engine/csound_orc_compile.c:1559 Engine/otran.c:915
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr "sintassi numerica '%s'"
 
-#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
+#: Engine/csound_orc_compile.c:1585 Engine/otran.c:941
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr "insieme dei Floating esteso a %d\n"
 
-#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
+#: Engine/csound_orc_compile.c:1624 Engine/otran.c:1017
 msgid "gblnamset(): memory allocation failure"
 msgstr "gblnamset(): allocazione di memoria fallita"
 
-#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
+#: Engine/csound_orc_compile.c:1652 Engine/otran.c:1045
 msgid "lclnamset(): memory allocation failure"
 msgstr "lclcnamset: allocazione di memoria fallita"
 
-#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
+#: Engine/csound_orc_compile.c:1678 Engine/otran.c:1070
 #, fuzzy
 msgid "unexpected global name"
 msgstr "nome globale inaspettato"
 
-#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
+#: Engine/csound_orc_compile.c:1701 Engine/otran.c:1092
 msgid "unknown nametype"
 msgstr "tipo di nome sconosciuto"
 
-#: Engine/csound_orc_expressions.c:459
+#: Engine/csound_orc_expressions.c:457
 #, c-format
 msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:862
+#: Engine/csound_orc_expressions.c:878
 #, c-format
 msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:157
+#: Engine/csound_orc_semantics.c:256
 #, fuzzy, c-format
 msgid ""
 "\n"
 "error: %s  (token \"%s\")"
 msgstr "%s: errore: %s (%s)\n"
 
-#: Engine/csound_orc_semantics.c:159
+#: Engine/csound_orc_semantics.c:258
 #, fuzzy, c-format
 msgid ""
 " line %d:\n"
 ">>>"
 msgstr ", linea %d:\n"
 
-#: Engine/csound_orc_semantics.c:732
+#: Engine/csound_orc_semantics.c:834
 #, fuzzy, c-format
 msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr "gli argomenti richiesti sono insufficienti"
 
-#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/csound_orc_semantics.c:899 Engine/rdorch.c:1644 Engine/rdorch.c:1662
 #: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr "modificato l'opcode: %s"
 
-#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
+#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:126
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
+#: Engine/cs_par_dispatch.c:140 Engine/cs_par_dispatch.c:160
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
-#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
-#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
+#: Engine/cs_par_dispatch.c:551 Engine/cs_par_dispatch.c:578
+#: Engine/cs_par_dispatch.c:2564 Engine/cs_par_dispatch.c:2609
+#: Engine/cs_par_dispatch.c:2611 Engine/cs_par_dispatch.c:2675
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
-#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
+#: Engine/cs_par_dispatch.c:553 Engine/cs_par_dispatch.c:592
+#: Engine/cs_par_dispatch.c:619 Engine/cs_par_dispatch.c:660
 #, fuzzy
 msgid "Invalid NULL Parameter name"
 msgstr "nome di variabile non valido"
 
-#: Engine/cs_par_dispatch.c:535
+#: Engine/cs_par_dispatch.c:560
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
+#: Engine/cs_par_dispatch.c:689 Engine/cs_par_dispatch.c:780
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
+#: Engine/cs_par_dispatch.c:730 Engine/cs_par_dispatch.c:860
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:759
+#: Engine/cs_par_dispatch.c:784
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:907
+#: Engine/cs_par_dispatch.c:930
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:913
+#: Engine/cs_par_dispatch.c:936
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:918
+#: Engine/cs_par_dispatch.c:941
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:922
+#: Engine/cs_par_dispatch.c:945
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:926
+#: Engine/cs_par_dispatch.c:949
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
-#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
-#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
-#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
-#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
-#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
-#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
-#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
+#: Engine/cs_par_dispatch.c:1024 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1176 Engine/cs_par_dispatch.c:1276
+#: Engine/cs_par_dispatch.c:1430 Engine/cs_par_dispatch.c:1464
+#: Engine/cs_par_dispatch.c:1481 Engine/cs_par_dispatch.c:1503
+#: Engine/cs_par_dispatch.c:1531 Engine/cs_par_dispatch.c:1553
+#: Engine/cs_par_dispatch.c:1577 Engine/cs_par_dispatch.c:1669
+#: Engine/cs_par_dispatch.c:1724 Engine/cs_par_dispatch.c:1817
+#: Engine/cs_par_dispatch.c:1870 Engine/cs_par_dispatch.c:2702
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1008
+#: Engine/cs_par_dispatch.c:1029
 #, fuzzy
 msgid "Failed to allocate dag"
 msgstr "fallita apertura del dispositivo"
 
-#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
-#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
+#: Engine/cs_par_dispatch.c:1081 Engine/cs_par_dispatch.c:1104
+#: Engine/cs_par_dispatch.c:1126 Engine/cs_par_dispatch.c:1128
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1062
+#: Engine/cs_par_dispatch.c:1083
 #, fuzzy
 msgid "Invalid NULL Parameter instr"
 msgstr "nome dello strumento non valido"
 
-#: Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1085
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
+#: Engine/cs_par_dispatch.c:1090 Engine/cs_par_dispatch.c:1112
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1086
+#: Engine/cs_par_dispatch.c:1107
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
-#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
-#: Engine/cs_par_dispatch.c:2682
+#: Engine/cs_par_dispatch.c:1250 Engine/cs_par_dispatch.c:1533
+#: Engine/cs_par_dispatch.c:2566 Engine/cs_par_dispatch.c:2676
+#: Engine/cs_par_dispatch.c:2703
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1237
+#: Engine/cs_par_dispatch.c:1261
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1554
+#: Engine/cs_par_dispatch.c:1579
 #, fuzzy
 msgid "Invalid NULL Parameter node"
 msgstr "nome dell'opcode non valido"
 
-#: Engine/cs_par_dispatch.c:1556
+#: Engine/cs_par_dispatch.c:1581
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1647
+#: Engine/cs_par_dispatch.c:1672
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2497
+#: Engine/cs_par_dispatch.c:2518
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2557
+#: Engine/cs_par_dispatch.c:2578
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2610
+#: Engine/cs_par_dispatch.c:2631
 msgid "Cache Update\n"
 msgstr ""
 
@@ -430,12 +431,12 @@ msgstr "La variabile d'ambiente '%s' è stata fissata a"
 msgid "Creating search path cache for '%s':"
 msgstr "Creata cache del percorso di ricerca per '%s':"
 
-#: Engine/envvar.c:1083
+#: Engine/envvar.c:1085
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr "errore interno: csoundFileOpen(): tipo non valido: %d"
 
-#: Engine/envvar.c:1266
+#: Engine/envvar.c:1268
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr "errore interno: csoundCreateFileHandle(): tipo non valido: %d"
@@ -509,13 +510,13 @@ msgstr "ftable non esiste"
 msgid "ftable %d now deleted\n"
 msgstr "la ftable %d viene cancellata\n"
 
-#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
-#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
-#: Engine/fgens.c:2909
+#: Engine/fgens.c:153 Engine/fgens.c:1599 Engine/fgens.c:1685
+#: Engine/fgens.c:1764 Engine/fgens.c:1880 Engine/fgens.c:1961
+#: Engine/fgens.c:2937
 msgid "insufficient gen arguments"
 msgstr "gli argomenti della gen sono insufficienti"
 
-#: Engine/fgens.c:179 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr "gen chiamata \"%s\" non definita"
@@ -533,11 +534,11 @@ msgstr "dimensione differita solo per GENs 1, 23, 28 o 49"
 msgid "ftable %d:\n"
 msgstr "ftable %d:\n"
 
-#: Engine/fgens.c:222 Engine/fgens.c:229
+#: Engine/fgens.c:222 Engine/fgens.c:229 Engine/fgens.c:2794
 msgid "illegal table length"
 msgstr "lunghezza della tavola illegale"
 
-#: Engine/fgens.c:288 Engine/fgens.c:2215
+#: Engine/fgens.c:288 Engine/fgens.c:2221
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
@@ -548,10 +549,10 @@ msgstr ""
 
 #: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
 #: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
-#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
-#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
-#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
-#: Engine/fgens.c:2906
+#: Engine/fgens.c:1054 Engine/fgens.c:1098 Engine/fgens.c:1145
+#: Engine/fgens.c:1399 Engine/fgens.c:1461 Engine/fgens.c:1683
+#: Engine/fgens.c:1761 Engine/fgens.c:2116 Engine/fgens.c:2891
+#: Engine/fgens.c:2934
 msgid "using extended arguments\n"
 msgstr "uso di argomenti estesi\n"
 
@@ -564,13 +565,13 @@ msgid "illegal x interval"
 msgstr "intervallo di x non consentito"
 
 #: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
-#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
-#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: Engine/fgens.c:1356 Engine/fgens.c:2381 Engine/fgens.c:2696
+#: Engine/fgens.c:2836 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
 #: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr "argomenti insufficienti"
 
-#: Engine/fgens.c:408 Engine/fgens.c:1355
+#: Engine/fgens.c:408 Engine/fgens.c:1361
 msgid "unknown srctable number"
 msgstr "numero di srctable sconosciuto"
 
@@ -607,248 +608,248 @@ msgstr "valore di xamp non consentito"
 msgid "uneven number of args"
 msgstr "numero di argomenti irregolare"
 
-#: Engine/fgens.c:1077
+#: Engine/fgens.c:1082
 msgid "gen call has illegal x-ordinate values:"
 msgstr "la gen chiamata ha valori di ordinata x non consentiti"
 
-#: Engine/fgens.c:1095
+#: Engine/fgens.c:1100
 msgid "wrong number of args"
 msgstr "numero di argomenti sbagliato"
 
-#: Engine/fgens.c:1109
+#: Engine/fgens.c:1114
 msgid "a range given exceeds table length"
 msgstr "un intervallo dato supera la lunghezza della tavola"
 
-#: Engine/fgens.c:1116
+#: Engine/fgens.c:1121
 msgid "an input function does not exist"
 msgstr "una funzione in input non esiste"
 
-#: Engine/fgens.c:1249
+#: Engine/fgens.c:1254
 msgid "No such window!"
 msgstr "Non c'è una tale finestra!"
 
-#: Engine/fgens.c:1267
+#: Engine/fgens.c:1272
 msgid "Wrong number of input arguments"
 msgstr "Numero di argomenti in input sbagliato"
 
-#: Engine/fgens.c:1268
+#: Engine/fgens.c:1273
 msgid "unknown distribution"
 msgstr "distrbuzione sconosciuta"
 
-#: Engine/fgens.c:1317
+#: Engine/fgens.c:1322
 msgid "error opening ASCII file"
 msgstr "errore in apertura del file ASCII"
 
-#: Engine/fgens.c:1323
+#: Engine/fgens.c:1328
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr "%ld elementi in %s\n"
 
-#: Engine/fgens.c:1334
+#: Engine/fgens.c:1340
 msgid "Numbers after table full in GEN23"
 msgstr "Numeri in eccesso dopo aver riempito la GEN23"
 
-#: Engine/fgens.c:1363
+#: Engine/fgens.c:1369
 msgid "table size must be the same of source table"
 msgstr ""
 "il formato della tavola deve essere la stessa della tavola di derivazione "
 "(source)"
 
-#: Engine/fgens.c:1435 Engine/fgens.c:1495
+#: Engine/fgens.c:1441 Engine/fgens.c:1501
 msgid "x coordinates must all be in increasing order:"
 msgstr "le coordinate x devono essere tutte in ordine crescente"
 
-#: Engine/fgens.c:1438 Engine/fgens.c:1497
+#: Engine/fgens.c:1444 Engine/fgens.c:1503
 msgid "x coordinate greater than function size:"
 msgstr "coordinata x maggiore della dimensione della tavola"
 
-#: Engine/fgens.c:1442
+#: Engine/fgens.c:1448
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr "valore di input non valido (y <= 0) per la gen chiamata, inizio:"
 
-#: Engine/fgens.c:1515
+#: Engine/fgens.c:1521
 msgid "GEN28 requires zero table length"
 msgstr "GEN28 richiede lunghezza della tavola zero"
 
-#: Engine/fgens.c:1577
+#: Engine/fgens.c:1583
 msgid "could not open space file"
 msgstr "Impossibile aprire il file spazializzazione"
 
-#: Engine/fgens.c:1579
+#: Engine/fgens.c:1585
 msgid "Time values must be in increasing order"
 msgstr "I valori di tempo devono essere in ordine crescente"
 
-#: Engine/fgens.c:1600
+#: Engine/fgens.c:1606
 #, fuzzy
 msgid "GEN30: source ftable not found"
 msgstr "GEN30: source ftable non trovata"
 
-#: Engine/fgens.c:1683
+#: Engine/fgens.c:1689
 #, fuzzy
 msgid "GEN31: source ftable not found"
 msgstr "GEN31: source ftable non trovata"
 
-#: Engine/fgens.c:1791
+#: Engine/fgens.c:1797
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr "GEN32: source ftable %d non trovata"
 
-#: Engine/fgens.c:1885
+#: Engine/fgens.c:1891
 #, fuzzy
 msgid "GEN33: source ftable not found"
 msgstr "GEN33: source ftable non trovata"
 
-#: Engine/fgens.c:2053
+#: Engine/fgens.c:2059
 #, fuzzy
 msgid "unknown source table number"
 msgstr "numero di tavola source sconosciuto"
 
-#: Engine/fgens.c:2085
+#: Engine/fgens.c:2091
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2157
 #, c-format
 msgid "ftable %d: "
 msgstr "ftable %d: "
 
-#: Engine/fgens.c:2195
+#: Engine/fgens.c:2201
 #, c-format
 msgid "ftable %d:"
 msgstr "ftable %d:"
 
-#: Engine/fgens.c:2210
+#: Engine/fgens.c:2216
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr "sostituisco la precedente ftable %d"
 
-#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
-#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
-#: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
-#: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
+#: Engine/fgens.c:2252 Engine/fgens.c:2340 Engine/fgens.c:2364
+#: Opcodes/midiops2.c:233 Opcodes/midiops2.c:388 Opcodes/midiops2.c:470
+#: Opcodes/uggab.c:1482 Opcodes/uggab.c:1509 Opcodes/uggab.c:1529
+#: Opcodes/uggab.c:1572
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr "ftable num. %f non valida"
 
-#: Engine/fgens.c:2251
+#: Engine/fgens.c:2257
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr "la dimensione differita della ftable %f non è valida qui"
 
-#: Engine/fgens.c:2278 Engine/fgens.c:2848
+#: Engine/fgens.c:2284 Engine/fgens.c:2875
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr "fallito caricamento differito di '%s'"
 
-#: Engine/fgens.c:2340
+#: Engine/fgens.c:2346
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 "Caricamento della ftable %f a dimensione differita non disponibile al "
 "momento d'esecuzione"
 
-#: Engine/fgens.c:2399
+#: Engine/fgens.c:2405
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr "ftable %d con dimensione non differita necessita di dimensione %d\n"
 
-#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
+#: Engine/fgens.c:2452 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr "formato campione non valido: %d"
 
-#: Engine/fgens.c:2454 Engine/fgens.c:2714
+#: Engine/fgens.c:2460 Engine/fgens.c:2719
 #, c-format
 msgid "channel %d illegal"
 msgstr "canale %d non consentito"
 
-#: Engine/fgens.c:2460
+#: Engine/fgens.c:2466
 msgid "deferred alloc\n"
 msgstr "allocazione differita\n"
 
-#: Engine/fgens.c:2468
+#: Engine/fgens.c:2474 Engine/fgens.c:2792
 msgid "deferred size, but filesize unknown"
 msgstr "dimensione differita, ma dimensione del file sconosciuta"
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2477 Engine/fgens.c:2796
 #, c-format
 msgid "  defer length %d\n"
 msgstr "lunghezza differita %d\n"
 
-#: Engine/fgens.c:2540
+#: Engine/fgens.c:2546
 msgid "GEN1: input file truncated by ftable size"
 msgstr "GEN1: file di input troncato dalla dimensione della ftable"
 
-#: Engine/fgens.c:2544
+#: Engine/fgens.c:2550
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr "\til punto finale del loop %d supera ftsize %d\n"
 
-#: Engine/fgens.c:2566
+#: Engine/fgens.c:2572
 msgid "GEN1 read error"
 msgstr "GEN1 errore in lettura"
 
-#: Engine/fgens.c:2571
+#: Engine/fgens.c:2577
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr "GEN1: file aiff troncato dalla dimensione della ftable"
 
-#: Engine/fgens.c:2572
+#: Engine/fgens.c:2578
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr "\tcampioni audio %d superano ftsize %d"
 
-#: Engine/fgens.c:2616
+#: Engine/fgens.c:2622
 msgid "wrong number of ftable arguments"
 msgstr "numero sbagliato di argomenti della ftable"
 
-#: Engine/fgens.c:2626 OOps/pstream.c:326
+#: Engine/fgens.c:2632 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr "Caricamento del file PVOC-EX fallito"
 
-#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2643 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 #, fuzzy
 msgid "illegal channel number"
 msgstr "numero di canale non consentito"
 
-#: Engine/fgens.c:2655
+#: Engine/fgens.c:2661
 msgid "ftable size too small"
 msgstr "dimensione della ftable troppo piccola"
 
-#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
+#: Engine/fgens.c:2735 Opcodes/mp3in.c:87 Opcodes/mp3in.c:229
 msgid "Not enough memory\n"
 msgstr "emoria insufficiente\n"
 
-#: Engine/fgens.c:2873
+#: Engine/fgens.c:2901
 #, fuzzy
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr "gen51: numero di p-fields non valido (troppi pochi gradi)"
 
-#: Engine/fgens.c:2913
+#: Engine/fgens.c:2941
 msgid "number of channels inconsistent with number of args"
 msgstr "numero di canali incongruente con il numero di argomenti"
 
-#: Engine/fgens.c:3072
+#: Engine/fgens.c:3100
 msgid "GEN53: invalid number of gen arguments"
 msgstr "GEN53: numero di argomenti della gen non valido"
 
-#: Engine/fgens.c:3082
+#: Engine/fgens.c:3110
 msgid "GEN53: invalid table length"
 msgstr "GEN53: lunghezza della tavola non valida"
 
-#: Engine/fgens.c:3086
+#: Engine/fgens.c:3114
 msgid "GEN53: invalid source table number"
 msgstr "GEN53: numero di source table non valido"
 
-#: Engine/fgens.c:3089
+#: Engine/fgens.c:3117
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr "GEN53: mode dev'essere nell'intervallo tra 0 e 15"
 
-#: Engine/fgens.c:3093
+#: Engine/fgens.c:3121
 msgid "GEN53: invalid source table length"
 msgstr "GEN53: numero di source table non valido"
 
-#: Engine/fgens.c:3098
+#: Engine/fgens.c:3126
 msgid "GEN53: invalid window table"
 msgstr "GEN53: window table non valida"
 
@@ -1060,7 +1061,7 @@ msgstr "   finisce a %p\n"
 msgid "subinstr: not initialised"
 msgstr "subinstr: non inizializzato"
 
-#: Engine/insert.c:1855
+#: Engine/insert.c:1856
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
@@ -1069,30 +1070,30 @@ msgstr ""
 "strumento %d allocato a %p\n"
 "\tlclbas %p, opds %p\n"
 
-#: Engine/insert.c:1872
+#: Engine/insert.c:1873
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr "op %d (%s) allocato a %p\n"
 
-#: Engine/insert.c:1898
+#: Engine/insert.c:1899
 msgid "null iopadr"
 msgstr "null iopadr"
 
-#: Engine/insert.c:1909
+#: Engine/insert.c:1910
 msgid "null opadr"
 msgstr "null iopadr"
 
-#: Engine/insert.c:1966
+#: Engine/insert.c:1967
 #, fuzzy
 msgid "inconsistent opds total"
 msgstr "totale opds inconsistente"
 
-#: Engine/insert.c:2011
+#: Engine/insert.c:2012
 #, fuzzy, c-format
 msgid "Instrument %s is still active"
 msgstr "Strumento %s ancora attivo"
 
-#: Engine/insert.c:2014
+#: Engine/insert.c:2015
 #, fuzzy, c-format
 msgid "Instrument %d is still active"
 msgstr "Strumento %d ancora attivo"
@@ -1102,8 +1103,8 @@ msgid "-L stdin fcntl failed"
 msgstr "-L stdin fcntl fallito"
 
 #: Engine/linevent.c:99 Engine/linevent.c:112 OOps/dumpf.c:57 OOps/dumpf.c:82
-#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:274 OOps/dumpf.c:301
-#: OOps/dumpf.c:328 OOps/dumpf.c:355 OOps/dumpf.c:527 util/hetro.c:249
+#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:276 OOps/dumpf.c:303
+#: OOps/dumpf.c:330 OOps/dumpf.c:357 OOps/dumpf.c:528 util/hetro.c:249
 #, c-format
 msgid "Cannot open %s"
 msgstr "Impossibile aprire %s"
@@ -1277,93 +1278,93 @@ msgstr ""
 "File '%s' (sr = %d Hz, %d canale\\\\i, %lu sample frames) caricati in "
 "memoria\n"
 
-#: Engine/musmon.c:81
+#: Engine/musmon.c:80
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr "Tempo impiegato %s: reale: %.3fs, CPU: %.3fs\n"
 
-#: Engine/musmon.c:108
+#: Engine/musmon.c:107
 msgid "illegal istartempo value"
 msgstr "valore di istartempo non consentito"
 
-#: Engine/musmon.c:111
+#: Engine/musmon.c:110
 msgid "Beat mode not in force"
 msgstr "Modo beat non attivato"
 
-#: Engine/musmon.c:184 Top/main.c:121
+#: Engine/musmon.c:183 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr "Csound versione %s beta (double samples) %s\n"
 
-#: Engine/musmon.c:187 Top/main.c:124
+#: Engine/musmon.c:186 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr "Csound versione %s (double samples) %s\n"
 
-#: Engine/musmon.c:192 Top/main.c:113
+#: Engine/musmon.c:191 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr "Csound versione %s beta (float samples) %s\n"
 
-#: Engine/musmon.c:195 Top/main.c:116
+#: Engine/musmon.c:194 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr "Csound versione %s (float samples) %s\n"
 
-#: Engine/musmon.c:220
+#: Engine/musmon.c:219
 msgid "orch now loaded\n"
 msgstr "orchestra ora caricata\n"
 
-#: Engine/musmon.c:245
+#: Engine/musmon.c:244
 #, fuzzy
 msgid "k-period aligned audio buffering\n"
 msgstr "k-period allineato all'audio buffering\n"
 
-#: Engine/musmon.c:261
+#: Engine/musmon.c:260
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr "audio bufferizzato in blocchi di %d sample-frame\n"
 
-#: Engine/musmon.c:283
+#: Engine/musmon.c:282
 msgid "using Cscore processing\n"
 msgstr "uso il processamento di Cscore\n"
 
-#: Engine/musmon.c:286
+#: Engine/musmon.c:285
 msgid "cannot create cscore.out"
 msgstr "impossibile creare cscore.out"
 
-#: Engine/musmon.c:299
+#: Engine/musmon.c:301
 msgid "cannot reopen cscore.out"
 msgstr "impossibile raprire cscore.out"
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:314
 msgid "cannot reopen cscore.srt"
 msgstr "impossibile raprire cscore.srt"
 
-#: Engine/musmon.c:305
+#: Engine/musmon.c:316
 #, fuzzy
 msgid "sorting cscore.out ..\n"
 msgstr "sistemo cscore.out ..\n"
 
-#: Engine/musmon.c:311 Top/main.c:401
+#: Engine/musmon.c:322 Top/main.c:397
 msgid "\t... done\n"
 msgstr "\t... fatto\n"
 
-#: Engine/musmon.c:312
+#: Engine/musmon.c:323
 msgid "playing from cscore.srt\n"
 msgstr "suono da cscore.srt\n"
 
-#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
-#: Engine/musmon.c:1216
+#: Engine/musmon.c:327 Engine/musmon.c:457 Engine/musmon.c:1026
+#: Engine/musmon.c:1227
 #, c-format
 msgid "SECTION %d:\n"
 msgstr "SEZIONE %d:\n"
 
-#: Engine/musmon.c:390
+#: Engine/musmon.c:401
 msgid "end of score.\t\t   overall amps:"
 msgstr "fine della score.\t\t   ampiezza totale:"
 
-#: Engine/musmon.c:401
+#: Engine/musmon.c:412
 msgid ""
 "\n"
 "\t   overall samples out of range:"
@@ -1371,7 +1372,7 @@ msgstr ""
 "\n"
 "\t   numero di campioni fuori dall'intervallo (range):"
 
-#: Engine/musmon.c:405
+#: Engine/musmon.c:416
 #, c-format
 msgid ""
 "\n"
@@ -1380,113 +1381,109 @@ msgstr ""
 "\n"
 "%d errori nell'esecuzione\n"
 
-#: Engine/musmon.c:407
+#: Engine/musmon.c:418
 msgid "end of performance"
 msgstr "fine dell'esecuzione"
 
-#: Engine/musmon.c:421
+#: Engine/musmon.c:432
 msgid "no sound written to disk\n"
 msgstr "nessun suono scritto sul disco\n"
 
-#: Engine/musmon.c:436
+#: Engine/musmon.c:447
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr "%c\tbeep!\n"
 
-#: Engine/musmon.c:502 Engine/musmon.c:548
+#: Engine/musmon.c:513 Engine/musmon.c:559
 msgid "\t number of samples out of range:"
 msgstr "\t numero di campioni fuori dall'intervallo:"
 
-#: Engine/musmon.c:541
+#: Engine/musmon.c:552
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr "fine della sezione %d\t picchi d'ampiezza della sezione:"
 
-#: Engine/musmon.c:543
+#: Engine/musmon.c:554
 msgid "end of lplay event list\t      peak amps:"
 msgstr "fine lista eventi di lplay\t      picco d'ampiezza:"
 
-#: Engine/musmon.c:607 Engine/musmon.c:632
+#: Engine/musmon.c:618 Engine/musmon.c:643
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr " - nota cancellata. strumento %s non definito"
 
-#: Engine/musmon.c:611
+#: Engine/musmon.c:622
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr "Fisso lo strumento %s %s\n"
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "off"
 msgstr "off"
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "on"
 msgstr "on"
 
-#: Engine/musmon.c:620 Engine/musmon.c:659
+#: Engine/musmon.c:631 Engine/musmon.c:670
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr " - nota cancellata. strumento %d(%d) non definito"
 
-#: Engine/musmon.c:624
+#: Engine/musmon.c:635
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr "Fisso lo strumento %d %s\n"
 
-#: Engine/musmon.c:650
+#: Engine/musmon.c:661
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr " - nota cancellata.  i%d (%s) ha %d errori di inizializzazione"
 
-#: Engine/musmon.c:680
+#: Engine/musmon.c:691
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr " - nota cancellata.  i%d ha %d errori di inizializzazione"
 
-#: Engine/musmon.c:701
+#: Engine/musmon.c:712
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr "avanzamento del tempo di %5.3f beats su richiesta della score\n"
 
-#: Engine/musmon.c:719
+#: Engine/musmon.c:730
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr "\t\t   T%7.3f - nota cancellata. "
 
-#: Engine/musmon.c:723
+#: Engine/musmon.c:734
 #, fuzzy, c-format
 msgid "instr %s had %d init errors\n"
 msgstr "lo strumento %d ha %d errori di inizializzazione\n"
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:736
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr "lo strumento %d ha %d errori di inizializzazione\n"
 
-#: Engine/musmon.c:816
+#: Engine/musmon.c:827
 msgid "terminating.\n"
 msgstr "finito.\n"
 
-#: Engine/musmon.c:902
+#: Engine/musmon.c:913
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr "errore nella score.  opcode illecito %c (ASCII %d)\n"
 
-#: Engine/musmon.c:1129
+#: Engine/musmon.c:1140
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr "insert_score_event(): numero o nome dello strumento non valido\n"
 
-#: Engine/musmon.c:1149
+#: Engine/musmon.c:1160
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr "insert_score_event(): opcode sconosciuto: %c\n"
 
-#: Engine/musmon.c:1172
+#: Engine/musmon.c:1183
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr "insert_score_event(): p-fields insufficienti\n"
 
@@ -1509,48 +1506,48 @@ msgstr "Impossibile trovare lo strumento %d"
 msgid "cannot find the specified instrument or opcode"
 msgstr "impossibile trovare lo strumento o l'opcode specificato"
 
-#: Engine/new_orc_parser.c:91
+#: Engine/new_orc_parser.c:119
 #, fuzzy
 msgid "Unmatched #ifdef\n"
 msgstr "#idef senza corrispondenza"
 
-#: Engine/otran.c:149 Engine/symbtab.c:413
+#: Engine/otran.c:149 Engine/symbtab.c:416
 #, c-format
 msgid "invalid input type for opcode %s"
 msgstr "tipo di input non valido per l'opcode %s"
 
-#: Engine/otran.c:154 Engine/symbtab.c:418
+#: Engine/otran.c:154 Engine/symbtab.c:421
 #, c-format
 msgid "too many input args for opcode %s"
 msgstr "troppi argomenti in input per l'opcode %s"
 
-#: Engine/otran.c:169 Engine/symbtab.c:433
+#: Engine/otran.c:169 Engine/symbtab.c:436
 #, c-format
 msgid "too many output args for opcode %s"
 msgstr "troppi argomenti in output per l'opcode %s"
 
-#: Engine/otran.c:194 Engine/symbtab.c:458
+#: Engine/otran.c:194 Engine/symbtab.c:461
 #, c-format
 msgid "invalid output type for opcode %s"
 msgstr "tipo di output non valido per l'opcode %s"
 
-#: Engine/otran.c:325 Engine/otran.c:332
+#: Engine/otran.c:324 Engine/otran.c:331
 msgid "missing instrument number or name"
 msgstr "manca il numero o il nome dello strumento"
 
-#: Engine/otran.c:337
+#: Engine/otran.c:336
 msgid "illegal instr number"
 msgstr "numero di strumento illecito"
 
-#: Engine/otran.c:388
+#: Engine/otran.c:387
 msgid "No opcode name"
 msgstr "Non c'è il nome dell'opcode"
 
-#: Engine/otran.c:393 Engine/symbtab.c:538
+#: Engine/otran.c:392 Engine/symbtab.c:541
 msgid "invalid name for opcode"
 msgstr "nome dell'opcode non valido"
 
-#: Engine/otran.c:397
+#: Engine/otran.c:396
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
@@ -1558,54 +1555,54 @@ msgstr ""
 "errore dichiarazione opcode (uso: nome opcode, tipi di out, tipi di input) "
 "-- opcode %s"
 
-#: Engine/otran.c:408 Engine/symbtab.c:548
+#: Engine/otran.c:407 Engine/symbtab.c:551
 #, c-format
 msgid "cannot redefine %s"
 msgstr "Impossibile ridefinire %s"
 
-#: Engine/otran.c:412 Engine/symbtab.c:553
+#: Engine/otran.c:411 Engine/symbtab.c:556
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr "ATTENZIONE: opcode ridefinito: %s\n"
 
-#: Engine/otran.c:503
+#: Engine/otran.c:502
 msgid "string constant used as output"
 msgstr "stringa costante usata come output"
 
-#: Engine/otran.c:534
+#: Engine/otran.c:533
 msgid "Missing endin"
 msgstr "Manca endin"
 
-#: Engine/otran.c:599
+#: Engine/otran.c:598
 msgid "perf-pass statements illegal in header blk"
 msgstr "dichiarazione d'esecuzione non valida nel blocco header"
 
-#: Engine/otran.c:603
+#: Engine/otran.c:602
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr "%d errore\\i di sintassi nell'orchestra.  Compilazione non valida"
 
-#: Engine/otran.c:1257
+#: Engine/otran.c:1256
 msgid "bad value for 0dbfs: must be positive."
 msgstr "pessimo valore per 0dbfs: deve essere positivo."
 
-#: Engine/otran.c:1267
+#: Engine/otran.c:1266
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 "frequenza di campionamento (sr) soprascritta: esr = %7.4f, ekr = %7.4f, "
 "ksmps = %d\n"
 
-#: Engine/otran.c:1339
+#: Engine/otran.c:1338
 msgid "internal error: string constant outarg"
 msgstr "errore interno: stringa costante outarg"
 
-#: Engine/otran.c:1365
+#: Engine/otran.c:1364
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr "i%d pset args != pmax"
 
-#: Engine/otran.c:1428
+#: Engine/otran.c:1427
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
@@ -1614,7 +1611,7 @@ msgstr ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "errore:"
 
-#: Engine/otran.c:1461
+#: Engine/otran.c:1460
 msgid "header init errors"
 msgstr "l'header ha errori in inizializzazione"
 
@@ -1626,7 +1623,7 @@ msgstr "ungetorchar(): buffer overflow"
 msgid "Unexpected end of orchestra file"
 msgstr "Fine inattesa del file orchestra"
 
-#: Engine/rdorch.c:431 Engine/sread.c:758
+#: Engine/rdorch.c:431 Engine/sread.c:765
 #, c-format
 msgid "Macro definition for %*s\n"
 msgstr "Definizione di macro per %*s\n"
@@ -1644,12 +1641,12 @@ msgstr "compilatore dell'orchestra:\n"
 msgid "cannot open orch file %s"
 msgstr "impossibile aprire l'orchestra file %s"
 
-#: Engine/rdorch.c:684 Engine/sread.c:1584
+#: Engine/rdorch.c:684 Engine/sread.c:1595
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr "Definizione di macro per %s\n"
 
-#: Engine/rdorch.c:716 Engine/sread.c:1607
+#: Engine/rdorch.c:716 Engine/sread.c:1618
 msgid "macro error\n"
 msgstr "errore macro\n"
 
@@ -1673,7 +1670,7 @@ msgstr "#else senza corrispondenza"
 msgid "Unmatched #endif"
 msgstr "#endif senza corrispondenza"
 
-#: Engine/rdorch.c:872 Engine/sread.c:1694
+#: Engine/rdorch.c:872 Engine/sread.c:1710
 #, c-format
 msgid "macro %s undefined\n"
 msgstr "macro %s non definita\n"
@@ -1691,21 +1688,21 @@ msgstr "Carattere # inatteso"
 msgid "Unknown # option: '%s'"
 msgstr "Opzione # sconosciuta: '%s'"
 
-#: Engine/rdorch.c:928 Engine/sread.c:380
+#: Engine/rdorch.c:928 Engine/sread.c:383
 #, c-format
 msgid "Undefined macro: '%s'"
 msgstr "macro non definita: '%s'"
 
-#: Engine/rdorch.c:930 Engine/sread.c:378
+#: Engine/rdorch.c:930 Engine/sread.c:381
 msgid "Macro expansion symbol ($) without macro name"
 msgstr "Simbolo di espansione macro ($) senza il nome della macro"
 
-#: Engine/rdorch.c:935 Engine/sread.c:384
+#: Engine/rdorch.c:935 Engine/sread.c:387
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr "$%s corrisponde al nome di macro $%s"
 
-#: Engine/rdorch.c:952 Engine/sread.c:401
+#: Engine/rdorch.c:952 Engine/sread.c:404 Engine/sread.c:420
 msgid "Syntax error in macro call"
 msgstr "Errore di sintassi nella macro chiamata"
 
@@ -1935,7 +1932,7 @@ msgstr ""
 "\n"
 "\tresto della linea ignorato\n"
 
-#: Engine/rdscor.c:146
+#: Engine/rdscor.c:148
 msgid "ERROR: too many pfields: "
 msgstr "ERRORE: troppi pfields: "
 
@@ -1986,230 +1983,235 @@ msgstr "  alla linea %d della macro %s%s"
 msgid "Internal error op=%c"
 msgstr "Errore interno op=%c"
 
-#: Engine/sread.c:464
+#: Engine/sread.c:469
 msgid "illegal placement of number in [] expression"
 msgstr "piazzamento illecito di numero in espressione []"
 
-#: Engine/sread.c:491
+#: Engine/sread.c:496
 msgid "illegal placement of operator ~ in [] expression"
 msgstr "piazzamento illecito dell'operatore ~ in espressione []"
 
-#: Engine/sread.c:501
+#: Engine/sread.c:506
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr "piazzamento illecito dell'operatore @ o @@ in espressione []"
 
-#: Engine/sread.c:533 Engine/sread.c:547
+#: Engine/sread.c:538 Engine/sread.c:552
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr "piazzamento illecito dell'operatore %c in espressione []"
 
-#: Engine/sread.c:559
+#: Engine/sread.c:564
 msgid "illegal placement of '(' in [] expression"
 msgstr "piazzamento illecito di '(' in espressione []"
 
-#: Engine/sread.c:565
+#: Engine/sread.c:570
 msgid "missing operand before ')' in [] expression"
 msgstr "manca l'operando dopo ')' in espressione []"
 
-#: Engine/sread.c:579
+#: Engine/sread.c:584
 msgid "missing operand before closing bracket in []"
 msgstr "manca l'operando dopo la chiusura della parentesi in []"
 
-#: Engine/sread.c:594
+#: Engine/sread.c:599
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr "carattere illecito %c(%.2x) in espressione []"
 
-#: Engine/sread.c:646
+#: Engine/sread.c:651
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr "%s LOOP innestato erminato, livellp: %d\n"
 
-#: Engine/sread.c:652
+#: Engine/sread.c:657
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr "LOOP esterno terminato, livello: %d\n"
 
-#: Engine/sread.c:696
+#: Engine/sread.c:701
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr "%s  LOOP innestato sezione (%d) Livello:%d\n"
 
-#: Engine/sread.c:701
+#: Engine/sread.c:706
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr " LOOP esterno sezione (%d) Livello:%d\n"
 
-#: Engine/sread.c:715
+#: Engine/sread.c:720
 msgid "Loop terminated\n"
 msgstr "Loop terminato\n"
 
-#: Engine/sread.c:733
+#: Engine/sread.c:740
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr "Ripetizione della sezione (%d)\n"
 
-#: Engine/sread.c:736
+#: Engine/sread.c:743
 msgid "Repeat section\n"
 msgstr "Ripetizione della sezione\n"
 
-#: Engine/sread.c:761
+#: Engine/sread.c:768
 msgid "Invalid macro name for --smacro"
 msgstr "Nome di macro non valido per --smacro"
 
-#: Engine/sread.c:865
+#: Engine/sread.c:872
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr "Clockbase = %f\n"
 
-#: Engine/sread.c:934
+#: Engine/sread.c:942
 msgid "Loops are nested too deeply"
 msgstr "Loops eccessivamente innestati"
 
-#: Engine/sread.c:948
+#: Engine/sread.c:956
 #, fuzzy
 msgid "{: invalid repeat count"
 msgstr "{: conteggio delle ripetizioni non valido"
 
-#: Engine/sread.c:957
+#: Engine/sread.c:965
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr "%s LOOP innestato=%d Livello:%d\n"
 
-#: Engine/sread.c:963
+#: Engine/sread.c:971
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr "LOOP esterno=%d Livello:%d\n"
 
-#: Engine/sread.c:1047
+#: Engine/sread.c:1056
 msgid "r: invalid repeat count"
 msgstr "r: conteggio delle ripetizioni non valido"
 
-#: Engine/sread.c:1049
+#: Engine/sread.c:1058
 #, c-format
 msgid "Repeats=%d\n"
 msgstr "Ripetizioni=%d\n"
 
-#: Engine/sread.c:1093
+#: Engine/sread.c:1102
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr "Sezione Nominata >>>%s<<<\n"
 
-#: Engine/sread.c:1108
+#: Engine/sread.c:1117
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr "%d: File %s posizione %ld\n"
 
-#: Engine/sread.c:1133
+#: Engine/sread.c:1142
 #, c-format
 msgid "Name %s not found"
 msgstr "Nome %s non trovato"
 
-#: Engine/sread.c:1135
+#: Engine/sread.c:1144
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr "Duplicazione %d: %s (%s,%ld)\n"
 
-#: Engine/sread.c:1164
+#: Engine/sread.c:1174
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr "Warp_factor = %f\n"
 
-#: Engine/sread.c:1189
+#: Engine/sread.c:1199
 msgid "sread is confused on legal opcodes\n"
 msgstr "sread è confuso sugli opcodes leciti\n"
 
-#: Engine/sread.c:1251
+#: Engine/sread.c:1261
 msgid "No previous event for ^"
 msgstr "Non c'è l'evento precedente per ^"
 
-#: Engine/sread.c:1256
+#: Engine/sread.c:1266
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr "spazio illecito seguente %s, sostituito con zero"
 
-#: Engine/sread.c:1286
+#: Engine/sread.c:1296
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr "ignorato '%s' nell'evento '%c'"
 
-#: Engine/sread.c:1289
+#: Engine/sread.c:1299
 msgid "! invalid in p1, p2, or p3"
 msgstr "! non valido in p1, p2, or p3"
 
-#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
-#: Engine/sread.c:1761 Engine/sread.c:1775
+#: Engine/sread.c:1300 Engine/sread.c:1305 Engine/sread.c:1754
+#: Engine/sread.c:1777 Engine/sread.c:1791
 msgid "      remainder of line flushed\n"
 msgstr "      resto della linea ignorato\n"
 
-#: Engine/sread.c:1294
+#: Engine/sread.c:1304
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr "carattere illecito dopo !: '%c'"
 
-#: Engine/sread.c:1373
+#: Engine/sread.c:1384
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr "ATTENZIONE: strumento %s non trovato, insno = -1\n"
 
-#: Engine/sread.c:1393
+#: Engine/sread.c:1404
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr "sread: uso illecito del riporto,   sostituito 0\n"
 
-#: Engine/sread.c:1539
+#: Engine/sread.c:1550
 #, fuzzy
 msgid "Improper \\"
 msgstr "Improprio \\"
 
-#: Engine/sread.c:1570
+#: Engine/sread.c:1581
 msgid "Not #define"
 msgstr "Non #define"
 
-#: Engine/sread.c:1630
+#: Engine/sread.c:1627 Engine/sread.c:1635
+#, fuzzy
+msgid "Syntax error in macro definition"
+msgstr "Errore di sintassi nella macro chiamata"
+
+#: Engine/sread.c:1646
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr "Macro %s con %d argomenti definiti\n"
 
-#: Engine/sread.c:1642
+#: Engine/sread.c:1658
 msgid "Not #include"
 msgstr "Non #include"
 
-#: Engine/sread.c:1671
+#: Engine/sread.c:1687
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr "Impossibile aprire il file #include %s"
 
-#: Engine/sread.c:1681
+#: Engine/sread.c:1697
 msgid "Not #undef"
 msgstr "Non #undef"
 
-#: Engine/sread.c:1700
+#: Engine/sread.c:1716
 msgid "unknown # option"
 msgstr "opzione # sconosciuta"
 
-#: Engine/sread.c:1737
+#: Engine/sread.c:1753
 #, c-format
 msgid "illegal opcode %c"
 msgstr "opcode illecito %c"
 
-#: Engine/sread.c:1760
+#: Engine/sread.c:1776
 #, c-format
 msgid "unexpected char %c"
 msgstr "carattere inatteso %c"
 
-#: Engine/sread.c:1774
+#: Engine/sread.c:1790
 msgid "illegally placed string"
 msgstr "stringa piazzata illecitamente"
 
-#: Engine/sread.c:1781
+#: Engine/sread.c:1797
 msgid "unmatched quote"
 msgstr "virgolette senza corrispondenza"
 
-#: Engine/sread.c:1825
+#: Engine/sread.c:1841
 msgid "sread: illegal number format:  "
 msgstr "sread: formato numerico illecito:  "
 
-#: Engine/sread.c:1831
+#: Engine/sread.c:1847
 msgid "   zero substituted.\n"
 msgstr "   sostituito zero.\n"
 
@@ -2273,16 +2275,11 @@ msgstr "swrite: output, sez%d linea%d p%d ha numero illecito  "
 msgid "    String truncated\n"
 msgstr "    Stringa troncata\n"
 
-#: Engine/symbtab.c:208
+#: Engine/symbtab.c:211
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:345
-#, c-format
-msgid "Unknown word type for %s on line %d\n"
-msgstr "Tipo di parola sconosciuta per %s alla linea %d\n"
-
 #: Engine/twarp.c:88
 msgid "twarp: illegal opcode\n"
 msgstr "twarp: opcode illecito\n"
@@ -2300,12 +2297,12 @@ msgstr "twarp: t ha tempo non positivo\n"
 msgid "twarp: t segments exceed twarp array\n"
 msgstr "twarp: segmenti di t superano l'array twarp\n"
 
-#: InOut/cmidi.c:233
+#: InOut/cmidi.c:236
 #, fuzzy
 msgid "CoreMIDI real time MIDI plugin for Csound\n"
 msgstr "PortMIDI real time MIDI plugin per Csound\n"
 
-#: InOut/cmidi.c:247
+#: InOut/cmidi.c:250
 #, fuzzy
 msgid "rtmidi: CoreMIDI module enabled\n"
 msgstr "rtmidi: PortMIDI modulo abilitato\n"
@@ -2362,7 +2359,7 @@ msgstr "sfinit: impossibile aprire %s"
 msgid "writing %d sample blks of %d-bit floats to %s \n"
 msgstr "scrittura blocchi di %d-byte di %s su %s"
 
-#: InOut/libsnd.c:744 util/srconv.c:484
+#: InOut/libsnd.c:744 util/srconv.c:485
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr "scrittura blocchi di %d-byte di %s su %s"
@@ -2936,187 +2933,187 @@ msgstr "PortMIDI real time MIDI plugin per Csound\n"
 msgid "rtmidi: PortMIDI module enabled\n"
 msgstr "rtmidi: PortMIDI modulo abilitato\n"
 
-#: InOut/rtalsa.c:110
+#: InOut/rtalsa.c:113
 msgid "--scheduler: invalid priority value; the allowed range is:"
 msgstr "--scheduler: valore di priorità non valido; il range permesso è:"
 
-#: InOut/rtalsa.c:111
+#: InOut/rtalsa.c:114
 msgid "  -20 to -1: set nice level"
 msgstr ""
 
-#: InOut/rtalsa.c:112
+#: InOut/rtalsa.c:115
 msgid "          0: normal scheduling, but lock memory"
 msgstr ""
 
-#: InOut/rtalsa.c:113
+#: InOut/rtalsa.c:116
 #, c-format
 msgid "    1 to %d: SCHED_RR with the specified priority (DANGEROUS)"
 msgstr "    1 to %d: SCHED_RR con la specificata priorità (PERICOLOSO)"
 
-#: InOut/rtalsa.c:330
+#: InOut/rtalsa.c:333
 #, c-format
 msgid " *** Cannot open device '%s' for audio output: %s"
 msgstr " *** Impossibile aprire il dispositivo '%s' per output audio: %s"
 
-#: InOut/rtalsa.c:333
+#: InOut/rtalsa.c:336
 #, c-format
 msgid " *** Cannot open device '%s' for audio input: %s"
 msgstr " *** Impossibile aprire il dispositivo '%s' per input audio: %s"
 
-#: InOut/rtalsa.c:394
+#: InOut/rtalsa.c:397
 #, fuzzy, c-format
 msgid "ALSA: -B %d not allowed on this device; using %d instead\n"
 msgstr "ALSA: -B %d non è permesso su questo dispositivo; usare %d invece\n"
 
-#: InOut/rtalsa.c:417
+#: InOut/rtalsa.c:420
 #, fuzzy, c-format
 msgid "ALSA: -b %d not allowed on this device; using %d instead\n"
 msgstr "ALSA: -b %d non è permesso su questo dispositivo; usare %d invece\n"
 
-#: InOut/rtalsa.c:430
+#: InOut/rtalsa.c:433
 #, c-format
 msgid "ALSA %s: total buffer size: %d, period size: %d\n"
 msgstr "ALSA %s: totale dimensione buffer: %d, dimensione periodo: %d\n"
 
-#: InOut/rtalsa.c:506
+#: InOut/rtalsa.c:509
 msgid " *** ALSA: must specify a device name, not a number (e.g. -odac:hw:0,0)"
 msgstr ""
 " *** ALSA: si deve specificare un nome di dispositivo, non un numero (es. -"
 "odac:hw:0,0)"
 
-#: InOut/rtalsa.c:514
+#: InOut/rtalsa.c:517
 #, c-format
 msgid " *** ALSA: %s: memory allocation failure"
 msgstr " *** ALSA: %s: allocazione di memoria fallita"
 
-#: InOut/rtalsa.c:601
+#: InOut/rtalsa.c:604
 msgid "Error reading data from audio input device"
 msgstr "Errore in lettura dati dal dispositivo di input audio"
 
-#: InOut/rtalsa.c:646
+#: InOut/rtalsa.c:649
 msgid "Error writing data to audio output device"
 msgstr "Errore in scrittura dati sul dispositivo di output audio"
 
-#: InOut/rtalsa.c:687
+#: InOut/rtalsa.c:690
 msgid "ALSA MIDI: memory allocation failure"
 msgstr "ALSA MIDI: allocazione di memoria fallita"
 
-#: InOut/rtalsa.c:694
+#: InOut/rtalsa.c:697
 #, c-format
 msgid "ALSA: error opening MIDI input device: '%s'"
 msgstr "ALSA: errore in apertura del dispositivo di input MIDI: '%s'"
 
-#: InOut/rtalsa.c:698
+#: InOut/rtalsa.c:701
 #, c-format
 msgid "ALSA: opened MIDI input device '%s'\n"
 msgstr "ALSA: aperto il dispositivo di input MIDI '%s'\n"
 
-#: InOut/rtalsa.c:717
+#: InOut/rtalsa.c:720
 msgid "ALSA midi: Using all devices.\n"
 msgstr "ALSA midi: uso di tutti i dispositivi.\n"
 
-#: InOut/rtalsa.c:746
+#: InOut/rtalsa.c:749
 #, c-format
 msgid "ALSA midi: Error opening device: %s\n"
 msgstr "ALSA midi: errore in apertura del dispositivo: %s\n"
 
-#: InOut/rtalsa.c:768
+#: InOut/rtalsa.c:771
 #, fuzzy
 msgid "ALSA midi: No devices found.\n"
 msgstr "ALSA midi: uso di tutti i dispositivi.\n"
 
-#: InOut/rtalsa.c:867
+#: InOut/rtalsa.c:870
 #, c-format
 msgid "ALSA: error opening MIDI output device '%s'"
 msgstr "ALSA: errore in apertura del dispositivo di output MIDI: '%s'"
 
-#: InOut/rtalsa.c:870
+#: InOut/rtalsa.c:873
 #, c-format
 msgid "ALSA: opened MIDI output device '%s'\n"
 msgstr "ALSA: aperto il dispositivo di output MIDI '%s'\n"
 
-#: InOut/rtalsa.c:910
+#: InOut/rtalsa.c:913
 msgid "-M stdin fcntl failed"
 msgstr "-M stdin fcntl fallito"
 
-#: InOut/rtalsa.c:918
+#: InOut/rtalsa.c:921
 #, c-format
 msgid "cannot open %s"
 msgstr "Impossibile aprire %s"
 
-#: InOut/rtalsa.c:929
+#: InOut/rtalsa.c:932
 msgid "MIDI receive: cannot get termios info."
 msgstr "MIDI receive: impossibile ottenere termios info."
 
-#: InOut/rtalsa.c:937
+#: InOut/rtalsa.c:940
 msgid "MIDI receive: cannot set input baud rate."
 msgstr "MIDI receive: impossibile impostare input baud rate."
 
-#: InOut/rtalsa.c:943
+#: InOut/rtalsa.c:946
 msgid "MIDI receive: cannot set termios."
 msgstr "MIDI receive: impossibile settare termios."
 
-#: InOut/rtalsa.c:947
+#: InOut/rtalsa.c:950
 #, c-format
 msgid "Opened MIDI input device file '%s'\n"
 msgstr "Apertura del file del dispositivo di input MIDI '%s'\n"
 
-#: InOut/rtalsa.c:987
+#: InOut/rtalsa.c:990
 #, c-format
 msgid "sensMIDI: retval errno %d"
 msgstr "sensMIDI: retval errno %d"
 
-#: InOut/rtalsa.c:1054
+#: InOut/rtalsa.c:1057
 #, c-format
 msgid "Error opening MIDI output device file '%s'"
 msgstr "Errore in apertura del file del dispositivo di output MIDI '%s'"
 
-#: InOut/rtalsa.c:1058
+#: InOut/rtalsa.c:1061
 #, c-format
 msgid "Opened MIDI output device file '%s'\n"
 msgstr "Apertura del file del dispositivo di output MIDI '%s'\n"
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
+#: InOut/rtalsa.c:1104 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr "attenzione... impossibile creare global var\n"
 
-#: InOut/rtalsa.c:1106
+#: InOut/rtalsa.c:1109
 #, fuzzy
 msgid "RT scheduler priority, alsa module"
 msgstr "priorità RT scheduler, modulo alsa"
 
-#: InOut/rtalsa.c:1111
+#: InOut/rtalsa.c:1114
 msgid "ALSA real-time audio and MIDI module for Csound by Istvan Varga\n"
 msgstr "ALSA real-time audio e modulo MIDI per Csound di Istvan Varga\n"
 
-#: InOut/rtalsa.c:1142
+#: InOut/rtalsa.c:1145
 msgid "rtaudio: ALSA module enabled\n"
 msgstr "rtaudio: modulo ALSA abilitato\n"
 
-#: InOut/rtalsa.c:1157
+#: InOut/rtalsa.c:1160
 msgid "rtmidi: ALSA module enabled\n"
 msgstr "rtmidi: modulo ALSA abilitato\n"
 
-#: InOut/rtalsa.c:1166
+#: InOut/rtalsa.c:1169
 msgid "rtmidi: devfile module enabled\n"
 msgstr "rtmidi: modulo devfile abilitato\n"
 
-#: InOut/rtauhal.c:163
+#: InOut/rtauhal.c:162
 #, fuzzy, c-format
 msgid "selected input device: %s \n"
 msgstr "dispositivo selezionato: %u \n"
 
-#: InOut/rtauhal.c:166
+#: InOut/rtauhal.c:165
 #, fuzzy, c-format
 msgid "selected output device: %s \n"
 msgstr "dispositivo selezionato: %u \n"
 
-#: InOut/rtauhal.c:524
+#: InOut/rtauhal.c:523
 #, fuzzy
 msgid "AuHAL module: device closed\n"
 msgstr "modulo coreaudio: dispositivo chiuso\n"
 
-#: InOut/rtauhal.c:541
+#: InOut/rtauhal.c:540
 #, fuzzy
 msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
 msgstr "rtaudio: CoreAudio modulo abilitato\n"
@@ -3221,7 +3218,7 @@ msgstr "input"
 
 #: InOut/rtjack.c:317 InOut/rtjack.c:330 InOut/rtjack.c:335 InOut/rtjack.c:552
 #: InOut/rtjack.c:590 InOut/rtjack.c:595 InOut/rtjack.c:616 InOut/rtjack.c:621
-#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315 Opcodes/ftgen.c:79
+#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315
 msgid "memory allocation failure"
 msgstr "allocazione di memoria fallita"
 
@@ -3797,7 +3794,7 @@ msgstr ""
 msgid "diskin2: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:231
+#: OOps/diskin2.c:232
 #, fuzzy, c-format
 msgid ""
 "diskin2: opened '%s':\n"
@@ -3806,34 +3803,34 @@ msgstr ""
 "File '%s' (sr = %d Hz, %d canale\\\\i, %lu sample frames) caricati in "
 "memoria\n"
 
-#: OOps/diskin2.c:240
+#: OOps/diskin2.c:242
 msgid ""
 "diskin2: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:270
+#: OOps/diskin2.c:272
 #, c-format
 msgid "diskin2: warning: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:331
+#: OOps/diskin2.c:334
 msgid "diskin2: not initialised"
 msgstr "diskin2: non inizializzato"
 
-#: OOps/diskin2.c:560
+#: OOps/diskin2.c:566
 msgid "soundin: invalid number of channels"
 msgstr ""
 
-#: OOps/diskin2.c:581
+#: OOps/diskin2.c:587
 msgid "soundin: unknown sample format"
 msgstr ""
 
-#: OOps/diskin2.c:591
+#: OOps/diskin2.c:597
 #, c-format
 msgid "soundin: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:599
+#: OOps/diskin2.c:605
 #, fuzzy, c-format
 msgid ""
 "soundin: opened '%s':\n"
@@ -3842,17 +3839,17 @@ msgstr ""
 "File '%s' (sr = %d Hz, %d canale\\\\i, %lu sample frames) caricati in "
 "memoria\n"
 
-#: OOps/diskin2.c:609
+#: OOps/diskin2.c:615
 msgid ""
 "soundin: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:618
+#: OOps/diskin2.c:624
 #, c-format
 msgid "soundin: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:651
+#: OOps/diskin2.c:657
 msgid "soundin: not initialised"
 msgstr "soundin: non inizializzato"
 
@@ -4039,33 +4036,37 @@ msgid "tempest: not initialised"
 msgstr "tempest: non inizializzato"
 
 #: OOps/dumpf.c:45 OOps/dumpf.c:70 OOps/dumpf.c:95 OOps/dumpf.c:120
-#: OOps/dumpf.c:261 OOps/dumpf.c:288 OOps/dumpf.c:315 OOps/dumpf.c:342
+#: OOps/dumpf.c:263 OOps/dumpf.c:290 OOps/dumpf.c:317 OOps/dumpf.c:344
 msgid "unknown format request"
 msgstr ""
 
 #: OOps/dumpf.c:49 OOps/dumpf.c:74 OOps/dumpf.c:99 OOps/dumpf.c:124
-#: OOps/dumpf.c:265 OOps/dumpf.c:292 OOps/dumpf.c:319 OOps/dumpf.c:346
+#: OOps/dumpf.c:267 OOps/dumpf.c:294 OOps/dumpf.c:321 OOps/dumpf.c:348
 msgid "alaw and ulaw not implemented here"
 msgstr ""
 
-#: OOps/dumpf.c:193 OOps/dumpf.c:442
+#: OOps/dumpf.c:193 OOps/dumpf.c:443
 msgid "unknown kdump format"
 msgstr ""
 
+#: OOps/dumpf.c:196
+msgid "write failure in dumpk"
+msgstr ""
+
 #: OOps/fftlib.c:3195
 #, c-format
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:93
+#: OOps/goto_ops.c:95
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:186
+#: OOps/goto_ops.c:188
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:191
+#: OOps/goto_ops.c:193
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -4082,11 +4083,11 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
-#: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
-#: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
-#: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
-#: Opcodes/midiops2.c:388 Opcodes/midiops2.c:438 Opcodes/midiops2.c:472
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/midiops2.c:59
+#: Opcodes/midiops2.c:76 Opcodes/midiops2.c:120 Opcodes/midiops2.c:154
+#: Opcodes/midiops2.c:221 Opcodes/midiops2.c:252 Opcodes/midiops2.c:316
+#: Opcodes/midiops2.c:335 Opcodes/midiops2.c:375 Opcodes/midiops2.c:406
+#: Opcodes/midiops2.c:456 Opcodes/midiops2.c:490
 msgid "illegal controller number"
 msgstr ""
 
@@ -4616,7 +4617,7 @@ msgstr ""
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:261 Opcodes/socksend.c:305
+#: OOps/remote.c:261 Opcodes/socksend.c:300
 msgid "write to socket failed"
 msgstr ""
 
@@ -4633,15 +4634,15 @@ msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
 #: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
-#: Opcodes/socksend.c:284
+#: Opcodes/sockrecv.c:345
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:316 Opcodes/socksend.c:289
+#: OOps/remote.c:316 Opcodes/sockrecv.c:350
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:321 Opcodes/socksend.c:295
+#: OOps/remote.c:321 Opcodes/sockrecv.c:356
 msgid "accept failed"
 msgstr ""
 
@@ -4706,7 +4707,7 @@ msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
 
-#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:834
+#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:839
 msgid "Instrument not defined"
 msgstr ""
 
@@ -4920,8 +4921,6 @@ msgid "oscil(krate): not initialised"
 msgstr "oscil(krate): non inizializzato"
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
-#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr "oscil: non inizializzato"
 
@@ -5037,7 +5036,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5224,227 +5223,226 @@ msgstr ""
 msgid "pan: not initialised"
 msgstr "pan: non inizializzato"
 
-#: OOps/ugrw1.c:922 OOps/ugrw1.c:1247
+#: OOps/ugrw1.c:922 OOps/ugrw1.c:1234
 #, c-format
 msgid "Table write offset %f < 0 or > tablelength"
 msgstr ""
 
-#: OOps/ugrw1.c:1242
+#: OOps/ugrw1.c:1229
 #, c-format
 msgid "Table write k rate function table no. %f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1290 OOps/ugrw1.c:1313 OOps/ugrw1.c:1392
+#: OOps/ugrw1.c:1277 OOps/ugrw1.c:1300 OOps/ugrw1.c:1379
 #, c-format
 msgid "Table %f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1469
+#: OOps/ugrw1.c:1456
 #, c-format
 msgid "Table no. < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f\n"
 msgstr ""
 
-#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1558 OOps/ugrw1.c:1770 OOps/ugrw1.c:1811
+#: OOps/ugrw1.c:1472 OOps/ugrw1.c:1545 OOps/ugrw1.c:1757 OOps/ugrw1.c:1798
 #, c-format
 msgid "Destination dft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1498 OOps/ugrw1.c:1569
+#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1556
 #, c-format
 msgid "Source 1 s1ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1508 OOps/ugrw1.c:1577
+#: OOps/ugrw1.c:1495 OOps/ugrw1.c:1564
 #, c-format
 msgid "Source 2 s2ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1543
+#: OOps/ugrw1.c:1530
 #, c-format
 msgid "Table number < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1758 OOps/ugrw1.c:1800
+#: OOps/ugrw1.c:1745 OOps/ugrw1.c:1787
 #, c-format
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
-#: Opcodes/fareyseq.c:475
+#: OOps/ugrw1.c:1768 OOps/ugrw1.c:1809
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1911 OOps/ugrw1.c:2032
+#: OOps/ugrw1.c:1898 OOps/ugrw1.c:2019
 #, c-format
 msgid "Table kfn=%.2f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1919 OOps/ugrw1.c:2040
+#: OOps/ugrw1.c:1906 OOps/ugrw1.c:2027
 #, c-format
 msgid "kfn table %.2f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1931 OOps/ugrw1.c:2053
+#: OOps/ugrw1.c:1918 OOps/ugrw1.c:2040
 #, c-format
 msgid "Table kfn=%.2f length %ld shorter than ksmps %d"
 msgstr ""
 
-#: OOps/ugrw1.c:1940 OOps/ugrw1.c:2062
+#: OOps/ugrw1.c:1927 OOps/ugrw1.c:2049
 #, c-format
 msgid "kstart %.2f is outside table %.2f range 0 to %ld"
 msgstr ""
 
-#: OOps/ugrw1.c:2156
+#: OOps/ugrw1.c:2143
 msgid "zakinit should only be called once."
 msgstr ""
 
-#: OOps/ugrw1.c:2160
+#: OOps/ugrw1.c:2147
 msgid "zakinit: both isizea and isizek should be > 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2191
+#: OOps/ugrw1.c:2178
 msgid "No zk space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2210
+#: OOps/ugrw1.c:2197
 msgid "zkr index > isizek. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2214
+#: OOps/ugrw1.c:2201
 msgid "zkr index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2242
+#: OOps/ugrw1.c:2229
 msgid "zir index > isizek. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2246
+#: OOps/ugrw1.c:2233
 msgid "zir index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2268
+#: OOps/ugrw1.c:2255
 msgid "zkw index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2271
+#: OOps/ugrw1.c:2258
 msgid "zkw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2296
+#: OOps/ugrw1.c:2283
 msgid "ziw index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2299
+#: OOps/ugrw1.c:2286
 msgid "ziw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2323
+#: OOps/ugrw1.c:2310
 msgid "zkwm index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2326
+#: OOps/ugrw1.c:2313
 msgid "zkwm index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2359
+#: OOps/ugrw1.c:2346
 msgid "ziwm index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2362
+#: OOps/ugrw1.c:2349
 msgid "ziwm index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2406
+#: OOps/ugrw1.c:2393
 msgid "zkmod kzkmod > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2432
+#: OOps/ugrw1.c:2419
 msgid "zkcl first or last > isizek. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2435
+#: OOps/ugrw1.c:2422
 msgid "zkcl first or last < 0. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2439
+#: OOps/ugrw1.c:2426
 msgid "zkcl first > last. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2461
+#: OOps/ugrw1.c:2448
 msgid "No za space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2487
+#: OOps/ugrw1.c:2474
 msgid "zar index > isizea. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2491
+#: OOps/ugrw1.c:2478
 msgid "zar index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2523
+#: OOps/ugrw1.c:2510
 msgid "zarg index > isizea. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2528
+#: OOps/ugrw1.c:2515
 msgid "zarg index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2559 OOps/ugrw1.c:2590
+#: OOps/ugrw1.c:2546 OOps/ugrw1.c:2577
 msgid "zaw index > isizea. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2562 OOps/ugrw1.c:2593
+#: OOps/ugrw1.c:2549 OOps/ugrw1.c:2580
 msgid "zaw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2646
+#: OOps/ugrw1.c:2633
 msgid "zamod kzamod > isizea. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2678
+#: OOps/ugrw1.c:2665
 msgid "zacl first or last > isizea. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2682
+#: OOps/ugrw1.c:2669
 msgid "zacl first or last < 0. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2687
+#: OOps/ugrw1.c:2674
 msgid "zacl first > last. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2819
+#: OOps/ugrw1.c:2806
 msgid "printk not initialised"
 msgstr "printk: non inizializzato"
 
-#: OOps/ugrw1.c:2837
+#: OOps/ugrw1.c:2824
 #, c-format
 msgid "time %11.5f: "
 msgstr ""
 
-#: OOps/ugrw1.c:2898
+#: OOps/ugrw1.c:2885
 msgid "printks param 1 was not a \"quoted string\""
 msgstr ""
 
-#: OOps/ugrw1.c:3114
+#: OOps/ugrw1.c:3101
 msgid "printks not initialised"
 msgstr "printks: non inizializzato"
 
-#: OOps/ugrw1.c:3245
+#: OOps/ugrw1.c:3232
 msgid "inz index > isizea. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:3247
+#: OOps/ugrw1.c:3234
 msgid "inz index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:3281 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
+#: OOps/ugrw1.c:3268 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
 msgid "outz index > isizea. No output"
 msgstr ""
 
-#: OOps/ugrw1.c:3283 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
+#: OOps/ugrw1.c:3270 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
 msgid "outz index < 0. No output."
 msgstr ""
 
@@ -5462,41 +5460,41 @@ msgstr "vdelay: non inizializzato"
 msgid "vdelay3: not initialised"
 msgstr "vdelay3: non inizializzato"
 
-#: OOps/vdelay.c:736
+#: OOps/vdelay.c:738
 msgid "Wrong input count in multitap\n"
 msgstr ""
 
-#: OOps/vdelay.c:779
+#: OOps/vdelay.c:781
 msgid "multitap: not initialised"
 msgstr "multitap: non inizializzato"
 
-#: OOps/vdelay.c:899
+#: OOps/vdelay.c:901
 msgid "High frequency diffusion not in (0, 1)\n"
 msgstr ""
 
-#: OOps/vdelay.c:915
+#: OOps/vdelay.c:917
 #, c-format
 msgid "reverbx; Combs ftable must have %d time and %d gain values"
 msgstr ""
 
-#: OOps/vdelay.c:947
+#: OOps/vdelay.c:949
 #, c-format
 msgid "reverbx; Alpas ftable must have %d time and %d gain values"
 msgstr ""
 
-#: OOps/vdelay.c:1058
+#: OOps/vdelay.c:1062
 msgid "High frequency diffusion>1\n"
 msgstr ""
 
-#: OOps/vdelay.c:1062
+#: OOps/vdelay.c:1066
 msgid "High frequency diffusion<0\n"
 msgstr ""
 
-#: OOps/vdelay.c:1066
+#: OOps/vdelay.c:1070
 msgid "Non positive reverb time\n"
 msgstr ""
 
-#: OOps/vdelay.c:1124
+#: OOps/vdelay.c:1128
 msgid "reverbx: not initialised"
 msgstr "reverbx: non inizializzato"
 
@@ -5504,15 +5502,15 @@ msgstr "reverbx: non inizializzato"
 msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:165
+#: Opcodes/ambicode1.c:167
 msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/ambicode1.c:169
+#: Opcodes/ambicode1.c:171
 msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/ambicode1.c:195
+#: Opcodes/ambicode1.c:197
 msgid "The output channel count does not match the isetup value."
 msgstr ""
 
@@ -5558,1017 +5556,135 @@ msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
 #: Opcodes/bilbar.c:83
-msgid "No data to continue"
-msgstr ""
-
-#: Opcodes/bilbar.c:109
-msgid "Ends must be clamped(1), pivoting(2) or free(3)"
-msgstr ""
-
-#: Opcodes/biquad.c:599
-msgid "vco: not initialised"
-msgstr "vco: non inizializzato"
-
-#: Opcodes/bowedbar.c:53
-#, c-format
-msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
-msgstr ""
-
-#: Opcodes/bowedbar.c:98
-msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
-msgstr ""
-
-#: Opcodes/clfilt.c:53
-msgid "filter type not lowpass or highpass in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:59
-#, c-format
-msgid "filter kind, %d, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:63
-#, c-format
-msgid "number of poles, %f, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:69
-#, c-format
-msgid "odd number of poles chosen in clfilt, rounded to %d"
-msgstr ""
-
-#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
-#, c-format
-msgid "passband ripple must be positive in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
-#, c-format
-msgid "passband ripple must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
-#, c-format
-msgid "stopband attenuation must be negative in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
-#, c-format
-msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
-msgid "Lowpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
-#: Opcodes/clfilt.c:383
-msgid "code error, ikind out of range"
-msgstr ""
-
-#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
-msgid "Highpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
-msgid "code error, ihilo out of range"
-msgstr ""
-
-#: Opcodes/control.c:40
-msgid "control: failed to allocate globals"
-msgstr ""
-
-#: Opcodes/control.c:56
-#, c-format
-msgid "Closing down wish(%d)\n"
-msgstr ""
-
-#: Opcodes/control.c:202
-#, c-format
-msgid "Slider %d set to %s\n"
-msgstr ""
-
-#: Opcodes/control.c:207
-#, c-format
-msgid "Unknown control %d"
-msgstr ""
-
-#: Opcodes/cpumeter.c:77
-#, fuzzy, c-format
-msgid "Failed to open /proc/stat: %s"
-msgstr "non riesco ad aprire il file pvocex %s: %s"
-
-#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
-#: Opcodes/cpumeter.c:151
-msgid "failed /proc/stat read"
-msgstr ""
-
-#: Opcodes/crossfm.c:34
-#, fuzzy
-msgid "crossfm: ftable not found"
-msgstr "GEN30: source ftable non trovata"
-
-#: Opcodes/date.c:68
-msgid "dates: buffer overflow"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/dssi4cs.c:823
-msgid "DSSI4CS: Not initialised or wrong argument types."
-msgstr "DSSI4CS: non inizializzato or wrong argument types."
-
-#: Opcodes/dssi4cs/src/load.c:120
-#, c-format
-msgid "Failed to load plugin \"%s\": %s"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:155
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\": "
-"%s.\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:161
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\".\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:176
-#, c-format
-msgid "Unable to find label \"%s\" in plugin library file \"%s\"."
-msgstr ""
-
-#: Opcodes/fareygen.c:140
-#, fuzzy
-msgid "insufficient arguments for fareytable"
-msgstr "argomenti insufficienti"
-
-#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
-#, c-format
-msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:256
-#, c-format
-msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
-#, c-format
-msgid "Farey: Destination dft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
-#, fuzzy, c-format
-msgid "Farey: Source sft table %.2f not found."
-msgstr "GEN32: source ftable %d non trovata"
-
-#: Opcodes/fareyseq.c:306
-msgid "Farey: Filter type < 1"
-msgstr ""
-
-#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
-#, c-format
-msgid "Table no. < 1 sft=%.2f"
-msgstr ""
-
-#: Opcodes/filter.c:187 Opcodes/filter.c:225
-msgid "Filter order out of bounds: (1 <= nb < 51, 0 <= na <= 50)"
-msgstr ""
-
-#: Opcodes/filter.c:672
-msgid "too many iterations in laguer"
-msgstr ""
-
-#: Opcodes/flanger.c:188
-msgid "wguide2 xfreq1 and xfreq2 arguments must be both a-rate or k and i-rate"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:195
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:149
-msgid "error allocating fluid engine\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:203
-#, c-format
-msgid ""
-"Created fluidEngine %d with sampling rate = %f, chorus %s, reverb %s, "
-"channels %d, polyphony %d.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:230
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:392
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:553
-#, fuzzy, c-format
-msgid "Illegal Engine Number: %i.\n"
-msgstr "numero di gen non consentito"
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:238
-#, c-format
-msgid "Loading SoundFont : %s.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:244
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:208
-#, c-format
-msgid "fluid: unable to load %s"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:262
-#, c-format
-msgid "SoundFont: %3d  Bank: %3d  Preset: %3d  %s\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:483
-#, c-format
-msgid ""
-"result: %d \n"
-" Note off: c:%3d k:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:491
-#, c-format
-msgid ""
-"result: %d \n"
-"Note on: c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:496
-#, c-format
-msgid "Key pressure (not handled): c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:504
-#, c-format
-msgid "Result: %d Control change: c:%3d c:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:511
-#, c-format
-msgid "Result: %d Program change: c:%3d p:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:524
-#, c-format
-msgid "Result: %d, Pitch bend:     c:%d b:%d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:530
-#, c-format
-msgid "System exclusive (not handled): c:%3d v1:%3d v2:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:562
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:577
-msgid "Illegal Interpolation Method: Must be either 0, 1, 4, or 7.\n"
-msgstr ""
-
-#: Opcodes/fm4op.c:165
-msgid "No table for VibWaveato"
-msgstr ""
-
-#: Opcodes/fm4op.c:184
-msgid "No table for FM4Op"
-msgstr ""
-
-#: Opcodes/follow.c:38
-msgid "follow - zero length!"
-msgstr ""
-
-#: Opcodes/fout.c:60
-#, c-format
-msgid "Closing file '%s'...\n"
-msgstr ""
-
-#: Opcodes/fout.c:102
-msgid "invalid file handle"
-msgstr ""
-
-#: Opcodes/fout.c:109 Opcodes/fout.c:421
-msgid "invalid file name"
-msgstr ""
-
-#: Opcodes/fout.c:166
-#, c-format
-msgid "error opening file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:193
-#, c-format
-msgid "error opening sound file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:430
-#, c-format
-msgid "cannot close '%s': not found in list of open files"
-msgstr ""
-
-#: Opcodes/fout.c:441
-#, c-format
-msgid "cannot close file #%d: not a valid handle"
-msgstr ""
-
-#: Opcodes/fout.c:448
-#, c-format
-msgid "file #%d (%s) is in use, will be closed when released"
-msgstr ""
-
-#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
-msgid "fouti: invalid file handle"
-msgstr ""
-
-#: Opcodes/freeverb.c:258
-msgid "freeverb: not initialised"
-msgstr "freeverb: non inizializzato"
-
-#: Opcodes/ftconv.c:156
-msgid "ftconv: invalid number of channels"
-msgstr ""
-
-#: Opcodes/ftconv.c:161
-msgid "ftconv: invalid impulse response partition length"
-msgstr ""
-
-#: Opcodes/ftconv.c:175
-msgid "ftconv: invalid length, or insufficient IR data for convolution"
-msgstr ""
-
-#: Opcodes/ftconv.c:193
-msgid "ftconv: skipped non-zero samples, impulse response may be truncated\n"
-msgstr ""
-
-#: Opcodes/ftconv.c:289
-msgid "ftconv: not initialised"
-msgstr "ftconv: non inizializzato"
-
-#: Opcodes/ftgen.c:69 Opcodes/ftgen.c:182
-#, c-format
-msgid "Error deleting ftable %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:136 Opcodes/signalflowgraph.cpp:895
-msgid "ftgen string arg not allowed"
-msgstr ""
-
-#: Opcodes/ftgen.c:155 Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
-msgid "ftgen error"
-msgstr ""
-
-#: Opcodes/ftgen.c:179
-#, c-format
-msgid "Invalid table number: %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:347
-msgid "ftload: error allocating ftable"
-msgstr ""
-
-#: Opcodes/ftgen.c:349
-msgid "ftload: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:351
-msgid "ftload: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:354
-msgid "ftload: incorrect file"
-msgstr ""
-
-#: Opcodes/ftgen.c:467
-msgid "ftsave: Bad table number. Saving is possible only for existing tables."
-msgstr ""
-
-#: Opcodes/ftgen.c:470
-msgid "ftsave: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:472
-msgid "ftsave: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:474
-msgid "ftsave: failed to write file"
-msgstr ""
-
-#: Opcodes/gab/gab.c:111
-msgid "fastab: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
-msgid "tabw off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
-msgid "tab off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:185
-msgid "tab_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:192
-#, c-format
-msgid "tab_i off end: table number: %d\n"
-msgstr ""
-
-#: Opcodes/gab/gab.c:204
-msgid "tabw_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:211
-msgid "tabw_i off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:249
-msgid "tab_init: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:318
-msgid "printi parameter was not a \"quoted string\""
-msgstr ""
-
-#: Opcodes/gab/gab.c:425
-msgid "adsynt2: wavetable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:437
-msgid "adsynt2: freqtable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:442
-msgid "adsynt2: partial count is greater than freqtable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:451
-msgid "adsynt2: amptable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:456
-msgid "adsynt2: partial count is greater than amptable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:501
-#, fuzzy
-msgid "adsynt2: not initialised"
-msgstr "adsynt: non inizializzato"
-
-#: Opcodes/gab/gab.c:743
-msgid "max_k: invalid imaxflag value"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:70
-msgid "hvs1: a line segment must be delimited by 2 points at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:152
-msgid "hvs2: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:248
-msgid "hvs3: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:390
-msgid "vphaseseg: the first function is invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
-msgid "vphaseseg: invalid num. of elements"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:416
-msgid "vphaseseg: function invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
-msgid "vtable1: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
-msgid "copyTabElems: incorrect destination table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
-msgid ""
-"copyTabElems: destination table too short or number of elements to copy too "
-"big"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
-#, fuzzy
-msgid "copyTabElems: incorrect source table number"
-msgstr "GEN53: numero di source table non valido"
-
-#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
-msgid ""
-"copyTabElems: source table size less than the number of elements to copy"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
-msgid "copyTabElems: source table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
-msgid "copyTabElems: destination table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:347
-msgid "inrg: audio input is not enabled"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:362
-msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:403
-msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
-#: Opcodes/gab/newgabopc.c:672
-msgid "invalid function"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:443
-msgid "lposc: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:577
-msgid "lposcil: no sample rate stored in function assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:674
-msgid "lposcil: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
-#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
-#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
-msgid "illegal channel"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
-#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
-#, c-format
-msgid "illegal control number at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:76
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d.  When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
-#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
-#: Opcodes/midiops3.c:347
-#, c-format
-msgid "illegal initvalue at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
-msgid "sliderXtable: zero is illegal in exponential operations"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:315
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d. When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
-#: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
-#: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
-msgid "illegal midi channel"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:43
-msgid "tabmorph: invalid table number"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:47
-msgid "tabmorph: all tables must have the same length!"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:35
-msgid "mtablei: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
-#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
-msgid "mtable: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:187
-msgid "mtabi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:254
-msgid "mtablewi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
-#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
-#: Opcodes/gab/vectorial.c:408
-msgid "mtabw: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:350
-msgid "mtabwi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:382
-msgid "mtablew: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
-#, c-format
-msgid "vadd_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:473
-msgid "vadd_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:500
-msgid "vadd: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:532
-msgid "vmult_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:559
-msgid "vmult: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:575
-#, c-format
-msgid "vpow_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:592
-msgid "vpow_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:620
-msgid "vpow: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:636
-#, c-format
-msgid "vexp_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:652
-msgid "vexp_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:679
-msgid "vexp: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:697
-#, c-format
-msgid "vectorsop: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:702
-#, c-format
-msgid "vectorsop: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:742
-msgid "vcopy: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:760
-msgid "vcopy: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:787
-#, c-format
-msgid "vcopy_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:792
-#, c-format
-msgid "vcopy_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:814
-msgid "vcopy_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:831
-msgid "vcopy_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:870
-msgid "vaddv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:889
-msgid "vaddv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:915
-#, c-format
-msgid "vaddv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:920
-#, c-format
-msgid "vaddv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:942
-msgid "vaddv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:960
-msgid "vaddv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:991
-msgid "vsubv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1010
-msgid "vsubv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1037
-#, c-format
-msgid "vsubv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1042
-#, c-format
-msgid "vsubv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1064
-msgid "vsubv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1082
-msgid "vsubv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1119
-msgid "vmultv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1138
-msgid "vmultv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1165
-#, c-format
-msgid "vmultv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1170
-#, c-format
-msgid "vmultv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1192
-msgid "vmultv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1209
-msgid "vmultv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1246
-msgid "vdivv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1265
-msgid "vdivv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1292
-#, c-format
-msgid "vdivv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1297
-#, c-format
-msgid "vdivv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1319
-msgid "vdivv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1337
-msgid "vdivv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1374
-msgid "vpowv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1393
-msgid "vpowv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1420
-#, c-format
-msgid "vpowv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1425
-#, c-format
-msgid "vpowv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1447
-msgid "vpowv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1464
-msgid "vpowv_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1501
-msgid "vexpv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1520
-msgid "vexpv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1547
-#, c-format
-msgid "vexpv_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1552
-#, c-format
-msgid "vexpv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1574
-msgid "vexpv_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1592
-msgid "vexpv_i: ifn2 length exceeded"
+msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1629
-msgid "vmap: Error: ifn1 and ifn2 can not be the same"
+#: Opcodes/bilbar.c:109
+msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1634
-#, c-format
-msgid "vmap: ifn1 invalid table number %i"
-msgstr ""
+#: Opcodes/biquad.c:599
+msgid "vco: not initialised"
+msgstr "vco: non inizializzato"
 
-#: Opcodes/gab/vectorial.c:1639
+#: Opcodes/bowedbar.c:53
 #, c-format
-msgid "vmap: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1661
-msgid "vmap: ifn1 length exceeded"
+msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1678
-msgid "vmap: ifn2 length exceeded"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1698
+#: Opcodes/cellular.c:49 Opcodes/cellular.c:55
 #, fuzzy
-msgid "vectorop: invalid num of elements"
+msgid "cell: invalid num of elements"
 msgstr "numero errato di discussioni ftable"
 
-#: Opcodes/gab/vectorial.c:1727
+#: Opcodes/cellular.c:51
 #, fuzzy
-msgid "vport: invalid table length or num of elements"
-msgstr "GEN53: lunghezza della tavola non valida"
+msgid "cell: invalid output table"
+msgstr "GEN53: window table non valida"
 
-#: Opcodes/gab/vectorial.c:1730
+#: Opcodes/cellular.c:58
 #, fuzzy
-msgid "vport: invalid table"
-msgstr "soundin: skip time non valido"
-
-#: Opcodes/gab/vectorial.c:1735
-msgid "vport: invalid init table length or num of elements"
-msgstr ""
+msgid "cell: invalid initial state table"
+msgstr "GEN53: window table non valida"
 
-#: Opcodes/gab/vectorial.c:1738
+#: Opcodes/cellular.c:63
 #, fuzzy
-msgid "vport: invalid init table"
-msgstr "soundin: skip time non valido"
+msgid "cell: invalid rule table"
+msgstr "GEN53: window table non valida"
 
-#: Opcodes/gab/vectorial.c:1875
-#, c-format
-msgid "vrandh: Seeding from current time %lu\n"
+#: Opcodes/clfilt.c:53
+msgid "filter type not lowpass or highpass in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1888
-#, fuzzy
-msgid "vrandh: Invalid table."
-msgstr "ftable num. %f non valida"
-
-#: Opcodes/gab/vectorial.c:1891
-msgid "vrandh: idstoffset is greater than table length."
+#: Opcodes/clfilt.c:59
+#, c-format
+msgid "filter kind, %d, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1896
-msgid "randh: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:63
+#, c-format
+msgid "number of poles, %f, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1975
+#: Opcodes/clfilt.c:69
 #, c-format
-msgid "vrandi: Seeding from current time %lu\n"
+msgid "odd number of poles chosen in clfilt, rounded to %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1987
-#, fuzzy
-msgid "vrandi: Invalid table."
-msgstr "ftable num. %f non valida"
-
-#: Opcodes/gab/vectorial.c:1990
-msgid "vrandi: idstoffset is greater thantable length."
+#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
+#, c-format
+msgid "passband ripple must be positive in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1995
-msgid "vrandi: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
+#, c-format
+msgid "passband ripple must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
-#: Opcodes/gab/vectorial.c:2091
-#, fuzzy
-msgid "vecdelay: invalid num of elements"
-msgstr "numero errato di discussioni ftable"
+#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
+#, c-format
+msgid "stopband attenuation must be negative in clfilt. Set to %f"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2079
-#, fuzzy
-msgid "vecdly: invalid output table"
-msgstr "GEN53: window table non valida"
+#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
+#, c-format
+msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2086
-#, fuzzy
-msgid "vecdly: invalid input table"
-msgstr "GEN53: window table non valida"
+#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
+msgid "Lowpass Elliptical not implemented yet. Sorry!"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2093
-#, fuzzy
-msgid "vecdly: invalid delay table"
-msgstr "GEN53: window table non valida"
+#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
+#: Opcodes/clfilt.c:383
+msgid "code error, ikind out of range"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2138
-#, fuzzy
-msgid "vecdly: not initialised"
-msgstr "vdelay: non inizializzato"
+#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
+msgid "Highpass Elliptical not implemented yet. Sorry!"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2181
-msgid "vlinseg/vexpseg: invalid num. of elements"
+#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
+msgid "code error, ihilo out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
-msgstr "tableseg: non inizializzato"
+#: Opcodes/control.c:40
+msgid "control: failed to allocate globals"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
-msgstr "tablexseg: non inizializzato"
+#: Opcodes/control.c:56
+#, c-format
+msgid "Closing down wish(%d)\n"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2406
-#, fuzzy
-msgid "vdelayk: not initialised"
-msgstr "delayk: non inizializzato"
+#: Opcodes/control.c:211
+#, c-format
+msgid "Slider %d set to %s\n"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
-#, fuzzy
-msgid "cella: invalid num of elements"
-msgstr "numero errato di discussioni ftable"
+#: Opcodes/control.c:216
+#, c-format
+msgid "Unknown control %d"
+msgstr ""
 
-#: Opcodes/gab/vectorial.c:2441
-#, fuzzy
-msgid "cella: invalid output table"
-msgstr "GEN53: window table non valida"
+#: Opcodes/cpumeter.c:77
+#, fuzzy, c-format
+msgid "Failed to open /proc/stat: %s"
+msgstr "non riesco ad aprire il file pvocex %s: %s"
 
-#: Opcodes/gab/vectorial.c:2448
-msgid "cella: invalid initial state table"
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
+msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2452
+#: Opcodes/crossfm.c:34
 #, fuzzy
-msgid "cella: invalid rule table"
-msgstr "GEN53: window table non valida"
+msgid "crossfm: ftable not found"
+msgstr "GEN30: source ftable non trovata"
 
 #: Opcodes/grain4.c:59
 msgid "granule_set: Unable to find function table"
@@ -6734,7 +5850,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1259
 msgid ""
 "\n"
 "WARNING: fades are overlapping: this could lead to noise: reduce fade size "
@@ -6770,29 +5886,29 @@ msgstr ""
 msgid "pvsifd: unsupported value for iwintype\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:426
+#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:429
 #, c-format
 msgid "imageload: cannot open image %s.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:111
+#: Opcodes/imageOpcodes.c:108 Opcodes/imageOpcodes.c:114
 #, c-format
 msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
-#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
-#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:122 Opcodes/imageOpcodes.c:129
+#: Opcodes/imageOpcodes.c:168 Opcodes/imageOpcodes.c:177
+#: Opcodes/imageOpcodes.c:191 Opcodes/imageOpcodes.c:294
+#: Opcodes/imageOpcodes.c:301 Opcodes/imageOpcodes.c:314
 msgid "imageload: out of memory.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:283
+#: Opcodes/imageOpcodes.c:286
 #, c-format
 msgid "imageload: cannot open image %s for writing.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:392
+#: Opcodes/imageOpcodes.c:395
 msgid "Cannot allocate memory.\n"
 msgstr ""
 
@@ -6836,29 +5952,29 @@ msgstr ""
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:892
+#: Opcodes/jacko.cpp:894
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:895
+#: Opcodes/jacko.cpp:897
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:911
+#: Opcodes/jacko.cpp:913
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
-#: Opcodes/jacko.cpp:1241
+#: Opcodes/jacko.cpp:957 Opcodes/jacko.cpp:1064 Opcodes/jacko.cpp:1171
+#: Opcodes/jacko.cpp:1243
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
-#: Opcodes/jacko.cpp:1255
+#: Opcodes/jacko.cpp:971 Opcodes/jacko.cpp:1079 Opcodes/jacko.cpp:1186
+#: Opcodes/jacko.cpp:1257
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6911,8 +6027,8 @@ msgstr ""
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
-#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:120
+#: Opcodes/pvlock.c:322 Opcodes/pvsbasic.c:463
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
@@ -6941,15 +6057,36 @@ msgstr ""
 msgid "splitrig: incorrect table number"
 msgstr ""
 
-#: Opcodes/midiops2.c:514 Opcodes/midiops2.c:529 Opcodes/midiops2.c:548
+#: Opcodes/midiops2.c:339 Opcodes/midiops2.c:377 Opcodes/midiops2.c:409
+#: Opcodes/midiops2.c:458 Opcodes/midiops2.c:493 Opcodes/midiops2.c:535
+#: Opcodes/midiops2.c:550 Opcodes/midiops2.c:569
+msgid "illegal midi channel"
+msgstr ""
+
+#: Opcodes/midiops2.c:532 Opcodes/midiops2.c:547 Opcodes/midiops2.c:566
 msgid "value out of range"
 msgstr ""
 
-#: Opcodes/midiops2.c:580
+#: Opcodes/midiops2.c:598
 #, c-format
 msgid "invalid channel number: %d"
 msgstr ""
 
+#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
+#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
+msgid "illegal channel"
+msgstr ""
+
+#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
+#, c-format
+msgid "illegal control number at position n.%d"
+msgstr ""
+
+#: Opcodes/midiops3.c:64 Opcodes/midiops3.c:168 Opcodes/midiops3.c:347
+#, c-format
+msgid "illegal initvalue at position n.%d"
+msgstr ""
+
 #: Opcodes/midiops3.c:333 Opcodes/midiops3.c:428
 #, c-format
 msgid "illegal msb control number at position n.%d"
@@ -6988,12 +6125,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
+#: Opcodes/mp3in.c:101 Opcodes/mp3in.c:242
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:140
+#: Opcodes/mp3in.c:148
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7148,6 +6285,10 @@ msgstr ""
 msgid "vco2init: invalid max table size"
 msgstr ""
 
+#: Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
+msgid "ftgen error"
+msgstr ""
+
 #: Opcodes/oscbnk.c:1757
 msgid "vco2init: invalid source ftable"
 msgstr ""
@@ -7204,75 +6345,75 @@ msgstr ""
 msgid "rbjeq: invalid filter type"
 msgstr ""
 
-#: Opcodes/OSC.c:122
+#: Opcodes/OSC.c:126
 msgid "Too many arguments to OSCsend"
 msgstr ""
 
-#: Opcodes/OSC.c:125
+#: Opcodes/OSC.c:129
 msgid "No a-rate arguments allowed"
 msgstr ""
 
-#: Opcodes/OSC.c:163 Opcodes/OSC.c:168 Opcodes/OSC.c:173 Opcodes/OSC.c:183
-#: Opcodes/OSC.c:190 Opcodes/OSC.c:195 Opcodes/OSC.c:206 Opcodes/OSC.c:214
-#: Opcodes/OSC.c:232
+#: Opcodes/OSC.c:167 Opcodes/OSC.c:172 Opcodes/OSC.c:177 Opcodes/OSC.c:187
+#: Opcodes/OSC.c:194 Opcodes/OSC.c:199 Opcodes/OSC.c:210 Opcodes/OSC.c:218
+#: Opcodes/OSC.c:236
 msgid "String not expected"
 msgstr ""
 
-#: Opcodes/OSC.c:202
+#: Opcodes/OSC.c:206
 msgid "Not a string when needed"
 msgstr ""
 
-#: Opcodes/OSC.c:219
+#: Opcodes/OSC.c:223
 msgid "Time stamp is two values"
 msgstr ""
 
-#: Opcodes/OSC.c:240
+#: Opcodes/OSC.c:244
 #, fuzzy, c-format
 msgid "ftable %.2f does not exist"
 msgstr "ftable non esiste"
 
-#: Opcodes/OSC.c:249
+#: Opcodes/OSC.c:253
 #, c-format
 msgid "Unknown OSC type %c\n"
 msgstr ""
 
-#: Opcodes/OSC.c:428
+#: Opcodes/OSC.c:436
 msgid "OSC: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/OSC.c:446
+#: Opcodes/OSC.c:455
 msgid "OSCrecv is already running"
 msgstr ""
 
-#: Opcodes/OSC.c:589
+#: Opcodes/OSC.c:599
 #, fuzzy
 msgid "OSC deinitiatised\n"
 msgstr "delay: non inizializzato"
 
-#: Opcodes/OSC.c:613
+#: Opcodes/OSC.c:623
 #, c-format
 msgid "OSC listener #%d started on port %s\n"
 msgstr ""
 
-#: Opcodes/OSC.c:663
+#: Opcodes/OSC.c:673
 msgid "OSC not running"
 msgstr ""
 
-#: Opcodes/OSC.c:667
+#: Opcodes/OSC.c:677
 msgid "invalid handle"
 msgstr ""
 
-#: Opcodes/OSC.c:674
+#: Opcodes/OSC.c:684
 #, fuzzy
 msgid "invalid number of arguments"
 msgstr "numero errato di discussioni ftable"
 
-#: Opcodes/OSC.c:695 Opcodes/OSC.c:700
+#: Opcodes/OSC.c:705 Opcodes/OSC.c:710
 #, fuzzy
 msgid "argument list inconsistent with format string"
 msgstr "numero di canali incongruente con il numero di argomenti"
 
-#: Opcodes/OSC.c:704
+#: Opcodes/OSC.c:714
 msgid "invalid type"
 msgstr ""
 
@@ -7292,11 +6433,11 @@ msgstr ""
 msgid "partikkel: "
 msgstr "partikkel: "
 
-#: Opcodes/partikkel.c:806
+#: Opcodes/partikkel.c:807
 msgid "partikkelsync: opcode id needs to be a non-zero integer"
 msgstr ""
 
-#: Opcodes/partikkel.c:810 Opcodes/partikkel.c:816
+#: Opcodes/partikkel.c:811 Opcodes/partikkel.c:817
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
@@ -7451,40 +6592,40 @@ msgid ""
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1733
+#: Opcodes/pitch.c:1598
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1784
+#: Opcodes/pitch.c:1649
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
+#: Opcodes/pitch.c:1699 Opcodes/pitch.c:1842
 #, fuzzy
 msgid "Error: transeg not initialised (krate)\n"
 msgstr ""
 "\n"
 "Error: transeg non inizializzato (krate)"
 
-#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
+#: Opcodes/pitch.c:1734 Opcodes/pitch.c:1892
 msgid "transeg: not initialised (arate)\n"
 msgstr "transeg: non inizializzato (arate)\n"
 
-#: Opcodes/pitch.c:1924
+#: Opcodes/pitch.c:1789
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2294
+#: Opcodes/pitch.c:2159
 #, fuzzy
 msgid "median: not initialised (arate)\n"
 msgstr "linseg: non inizializzato (arate)\n"
 
-#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
+#: Opcodes/pitch.c:2163 Opcodes/pitch.c:2210
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2341
+#: Opcodes/pitch.c:2206
 #, fuzzy
 msgid "median: not initialised (krate)\n"
 msgstr "linseg non inizializzato (krate)\n"
@@ -7512,18 +6653,6 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr "Errore: %s, %s"
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
-#: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
-#: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
-#: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
-msgid "Unsafe to have same fsig as in and out"
-msgstr ""
-
-#: Opcodes/ppp.c:36 Opcodes/pvslock.c:36
-#, fuzzy
-msgid "pvslock: signal format must be amp-phase or amp-freq."
-msgstr "formato campione non valido: deve essere -s, -l, o -f"
-
 #: Opcodes/psynth.c:97 Opcodes/psynth.c:253
 msgid "psynth: first input not in TRACKS format\n"
 msgstr ""
@@ -7688,7 +6817,14 @@ msgstr "pvcross: non inizializzato"
 msgid "invalid number of output arguments"
 msgstr "numero errato di discussioni ftable"
 
-#: Opcodes/pvlock.c:490
+#: Opcodes/pvlock.c:480 Opcodes/pvsband.c:46 Opcodes/pvsbasic.c:578
+#: Opcodes/pvsbasic.c:883 Opcodes/pvsbasic.c:1083 Opcodes/pvsbasic.c:1183
+#: Opcodes/pvsbasic.c:1398 Opcodes/pvsbasic.c:1598 Opcodes/pvsbasic.c:1763
+#: Opcodes/pvslock.c:20
+msgid "Unsafe to have same fsig as in and out"
+msgstr ""
+
+#: Opcodes/pvlock.c:492
 #, fuzzy
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr "formato campione non valido: deve essere -s, -l, o -f"
@@ -7729,77 +6865,77 @@ msgstr ""
 msgid "pvsdiskin: could not open file %s\n"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:606
+#: Opcodes/pvsbasic.c:609
 msgid "pvsfreeze: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:679
+#: Opcodes/pvsbasic.c:682
 msgid "pvsosc does not work while sliding"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:910
+#: Opcodes/pvsbasic.c:913
 msgid "pvsmooth: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1020
+#: Opcodes/pvsbasic.c:1023
 msgid "pvsmix: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1070
+#: Opcodes/pvsbasic.c:1073
 msgid "pvsmix: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1083
+#: Opcodes/pvsbasic.c:1086
 msgid "pvsfilter: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1156
+#: Opcodes/pvsbasic.c:1159
 msgid "pvsfilter: not initialised"
 msgstr "pvsfilter: non inizializzato"
 
-#: Opcodes/pvsbasic.c:1159
+#: Opcodes/pvsbasic.c:1162
 msgid "pvsfilter: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1372
+#: Opcodes/pvsbasic.c:1375
 msgid "pvscale: not initialised"
 msgstr "pvscale: non inizializzato"
 
-#: Opcodes/pvsbasic.c:1570
+#: Opcodes/pvsbasic.c:1575
 msgid "pvshift: not initialised"
 msgstr "pvshift: non inizializzato"
 
-#: Opcodes/pvsbasic.c:1741
+#: Opcodes/pvsbasic.c:1748
 #, fuzzy
 msgid "pvswarp: not initialised"
 msgstr "pvsarp: non inizializzato\n"
 
-#: Opcodes/pvsbasic.c:1758
+#: Opcodes/pvsbasic.c:1765
 msgid "pvsblur does not work sliding yet"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1890
+#: Opcodes/pvsbasic.c:1897
 msgid "pvsblur: not initialised"
 msgstr "pvsblur: non inizializzato"
 
-#: Opcodes/pvsbasic.c:1925
+#: Opcodes/pvsbasic.c:1932
 msgid "pvstencil: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1933
+#: Opcodes/pvsbasic.c:1940
 msgid "pvstencil: ftable needs to equal the number of bins"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2001
+#: Opcodes/pvsbasic.c:2008
 msgid "pvstencil: not initialised"
 msgstr "pvstencil: non inizializzato"
 
-#: Opcodes/pvsbasic.c:2148
+#: Opcodes/pvsbasic.c:2158
 #, fuzzy
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr "formato campione non valido: deve essere -s, -l, o -f"
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/pvsbasic.c:2161 Opcodes/pvsbasic.c:2201 Opcodes/tabvars.c:56
 #: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
 #: Opcodes/tabvars.c:181
 #, fuzzy
@@ -7847,6 +6983,11 @@ msgstr "pvsmaska: non inizializzato\n"
 msgid "pvsgendy: not initialised"
 msgstr "pvsband: non inizializzato"
 
+#: Opcodes/pvslock.c:36
+#, fuzzy
+msgid "pvslock: signal format must be amp-phase or amp-freq."
+msgstr "formato campione non valido: deve essere -s, -l, o -f"
+
 #: Opcodes/repluck.c:164
 #, c-format
 msgid "Reflection invalid (%f)\n"
@@ -8088,7 +7229,7 @@ msgid ""
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2194
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
@@ -8108,15 +7249,15 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1992 Opcodes/sfont.c:1998
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1999
+#: Opcodes/sfont.c:2001
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2537
+#: Opcodes/sfont.c:2539
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
@@ -8129,6 +7270,10 @@ msgstr ""
 msgid "inletf: signal format must be amp-phase or amp-freq."
 msgstr "formato campione non valido: deve essere -s, -l, o -f"
 
+#: Opcodes/signalflowgraph.cpp:895
+msgid "ftgen string arg not allowed"
+msgstr ""
+
 #: Opcodes/signalflowgraph.cpp:921
 #, fuzzy
 msgid "ftgenonce error"
@@ -8165,7 +7310,7 @@ msgstr ""
 msgid "crossfade longer than loop duration\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389 Opcodes/sndloop.c:661
+#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389
 msgid "function table not found\n"
 msgstr ""
 
@@ -8185,15 +7330,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr "pvsarp: non inizializzato\n"
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1071
+#: Opcodes/sndloop.c:1072
 msgid "pvsvoc: not initialised\n"
 msgstr "pvsvoc: non inizializzato\n"
 
-#: Opcodes/sndloop.c:1122
+#: Opcodes/sndloop.c:1123
 msgid "pvsmorph: not initialised\n"
 msgstr "pvsmorph: non inizializzato\n"
 
@@ -8213,30 +7358,30 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr "sndwarpst: non inizializzato"
 
-#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
-#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:315
+#: Opcodes/socksend.c:74 Opcodes/socksend.c:158 Opcodes/socksend.c:252
 #, c-format
 msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
-#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:321
+#: Opcodes/socksend.c:87 Opcodes/socksend.c:172 Opcodes/socksend.c:259
 msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:347
-#, c-format
-msgid "connect failed (%d)"
-msgstr ""
-
-#: Opcodes/sockrecv.c:360
+#: Opcodes/sockrecv.c:366
 msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
+#: Opcodes/socksend.c:127 Opcodes/socksend.c:216
 msgid "sendto failed"
 msgstr ""
 
+#: Opcodes/socksend.c:287
+#, c-format
+msgid "connect failed (%d)"
+msgstr ""
+
 #: Opcodes/space.c:165
 msgid "space: not initialised"
 msgstr "space: non inizializzato"
@@ -8593,20 +7738,37 @@ msgstr ""
 msgid "Min and max the same"
 msgstr ""
 
-#: Opcodes/uggab.c:424
+#: Opcodes/uggab.c:215
+#, fuzzy
+msgid "table not found in poscil"
+msgstr "GEN30: source ftable non trovata"
+
+#: Opcodes/uggab.c:234 Opcodes/uggab.c:261 Opcodes/uggab.c:290
+#: Opcodes/uggab.c:318
+#, fuzzy
+msgid "poscil: not initialised"
+msgstr "oscil: non inizializzato"
+
+#: Opcodes/uggab.c:365 Opcodes/uggab.c:412 Opcodes/uggab.c:460
+#: Opcodes/uggab.c:509
+#, fuzzy
+msgid "poscil3: not initialised"
+msgstr "oscil3: non inizializzato"
+
+#: Opcodes/uggab.c:589
 msgid "losc: no sample rate stored in function assuming=sr\n"
 msgstr ""
 
-#: Opcodes/uggab.c:556
+#: Opcodes/uggab.c:721
 #, c-format
 msgid "illegal reson iscl value: %f"
 msgstr ""
 
-#: Opcodes/uggab.c:579
+#: Opcodes/uggab.c:744
 msgid "loop cannot be zero"
 msgstr ""
 
-#: Opcodes/uggab.c:1056 Opcodes/uggab.c:1098
+#: Opcodes/uggab.c:1221 Opcodes/uggab.c:1263
 msgid "vibrato(krate): not initialised"
 msgstr "vibrato(krate): non inizializzato"
 
@@ -8989,6 +8151,14 @@ msgstr ""
 msgid "vosim: not initialised"
 msgstr "vosim: non inizializzato"
 
+#: Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr "tableseg: non inizializzato"
+
+#: Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr "tablexseg: non inizializzato"
+
 #: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
@@ -9116,47 +8286,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:739
+#: Top/argdecode.c:77 util/srconv.c:740
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9164,7 +8334,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:749
+#: Top/argdecode.c:89 util/srconv.c:750
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9172,7 +8342,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:750
+#: Top/argdecode.c:91 util/srconv.c:751
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9232,7 +8402,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9240,7 +8410,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9305,7 +8475,7 @@ msgid "--nopeaks\t\tDo not write peak information"
 msgstr ""
 
 #: Top/argdecode.c:136
-msgid "--nodisplays\t\tsUppress all displays"
+msgid "--nodisplays\t\tSuppress all displays"
 msgstr ""
 
 #: Top/argdecode.c:137
@@ -9809,49 +8979,49 @@ msgstr ""
 msgid "error: orchestra and score name not allowed in .csoundrc"
 msgstr ""
 
-#: Top/cscorfns.c:276
+#: Top/cscorfns.c:277
 msgid "PMAX exceeded, string event truncated.\n"
 msgstr ""
 
-#: Top/cscorfns.c:663
+#: Top/cscorfns.c:666
 #, c-format
 msgid "%s found %d f event%s with non-zero p2\n"
 msgstr ""
 
-#: Top/cscorfns.c:664
+#: Top/cscorfns.c:667
 msgid "s"
 msgstr "s"
 
-#: Top/cscorfns.c:767
+#: Top/cscorfns.c:770
 msgid "cscore: too many input files open"
 msgstr ""
 
-#: Top/cscorfns.c:805
+#: Top/cscorfns.c:810
 msgid "cscore: tried to set an unknown file pointer as the current file"
 msgstr ""
 
-#: Top/cscorfns.c:819
+#: Top/cscorfns.c:824
 msgid "csoundInitializeCscore: no input score given."
 msgstr ""
 
-#: Top/cscorfns.c:824
+#: Top/cscorfns.c:829 Top/cscorfns.c:858
 msgid "csoundInitializeCscore: no output score given."
 msgstr ""
 
-#: Top/cscorfns.c:852
+#: Top/cscorfns.c:889
 #, c-format
 msgid "cscoreFileOpen: error opening %s"
 msgstr ""
 
-#: Top/cscorfns.c:870
+#: Top/cscorfns.c:907
 msgid "cscoreFileClose: NULL file pointer\n"
 msgstr ""
 
-#: Top/cscorfns.c:882
+#: Top/cscorfns.c:919
 msgid "cscoreFileClose: fp not recorded\n"
 msgstr ""
 
-#: Top/cscorfns.c:888
+#: Top/cscorfns.c:925
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
@@ -9890,129 +9060,129 @@ msgstr ""
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
-#: Top/csmodule.c:638 Top/csmodule.c:646
+#: Top/csmodule.c:607 Top/csmodule.c:613 Top/csmodule.c:624 Top/csmodule.c:631
+#: Top/csmodule.c:637 Top/csmodule.c:645
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:696
+#: Top/csmodule.c:695
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:731
+#: Top/csmodule.c:730
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:737
+#: Top/csmodule.c:736
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:773
+#: Top/csmodule.c:772
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:796
+#: Top/csmodule.c:795
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:819
+#: Top/csmodule.c:818
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:918
+#: Top/csmodule.c:917
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1636 Top/csound.c:1656
+#: Top/csound.c:1640 Top/csound.c:1660
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1642
+#: Top/csound.c:1646
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1675
+#: Top/csound.c:1679
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1700
+#: Top/csound.c:1704
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1707
+#: Top/csound.c:1711
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1727
+#: Top/csound.c:1731
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1998
+#: Top/csound.c:2002
 msgid "WARNING: "
 msgstr "ATTENZIONE: "
 
-#: Top/csound.c:2119
+#: Top/csound.c:2123
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2120
+#: Top/csound.c:2124
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2149 Top/csound.c:2185
+#: Top/csound.c:2153 Top/csound.c:2189
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2153 Top/csound.c:2189
+#: Top/csound.c:2157 Top/csound.c:2193
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2271
+#: Top/csound.c:2275
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2276 Top/csound.c:2310
+#: Top/csound.c:2280 Top/csound.c:2314
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2279 Top/csound.c:2313
+#: Top/csound.c:2283 Top/csound.c:2317
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2305
+#: Top/csound.c:2309
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2327
+#: Top/csound.c:2331
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2445
+#: Top/csound.c:2449
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2552
+#: Top/csound.c:2556
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2575
+#: Top/csound.c:2579
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2906
+#: Top/csound.c:2912
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2957
+#: Top/csound.c:2963
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -10068,57 +9238,47 @@ msgstr ""
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:334
+#: Top/main.c:318
+#, fuzzy, c-format
+msgid "Failed to open input file %s\n"
+msgstr "Non è possibile aprire il file di input %s"
+
+#: Top/main.c:339
 msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:352
+#: Top/main.c:360
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:359
+#: Top/main.c:367
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:369
+#: Top/main.c:377
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr ""
 
-#: Top/main.c:371
+#: Top/main.c:379
 msgid "sorting score ...\n"
 msgstr ""
 
-#: Top/main.c:381
-#, c-format
-msgid "cannot extract %s, name conflict"
-msgstr ""
-
-#: Top/main.c:384
+#: Top/main.c:389
 #, c-format
 msgid "cannot open extract file %s"
 msgstr ""
 
-#: Top/main.c:388
-#, c-format
-msgid "cannot reopen %s"
-msgstr "Impossibile riaprire %s"
-
 #: Top/main.c:392
-#, c-format
-msgid "cannot open %s for writing"
-msgstr ""
-
-#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:405
+#: Top/main.c:401
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:407
+#: Top/main.c:403
 msgid "Syntax check completed.\n"
 msgstr ""
 
@@ -10183,158 +9343,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:110 Top/one_file.c:118
+#: Top/one_file.c:120 Top/one_file.c:130
 msgid " *** cannot create temporary file"
 msgstr ""
 
-#: Top/one_file.c:203
+#: Top/one_file.c:215
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:207
+#: Top/one_file.c:219
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr ""
 
-#: Top/one_file.c:274 Top/one_file.c:302
+#: Top/one_file.c:286 Top/one_file.c:314
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:319
+#: Top/one_file.c:331
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:322
+#: Top/one_file.c:334
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:328 Top/one_file.c:744
+#: Top/one_file.c:340 Top/one_file.c:763
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:354
+#: Top/one_file.c:371
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:376 Top/one_file.c:430
+#: Top/one_file.c:393 Top/one_file.c:449
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:391 Top/one_file.c:396
+#: Top/one_file.c:408 Top/one_file.c:413
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:408
+#: Top/one_file.c:425
 #, c-format
 msgid "Creating %s (%p)\n"
 msgstr ""
 
-#: Top/one_file.c:421
+#: Top/one_file.c:438
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:468
+#: Top/one_file.c:487
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:487
+#: Top/one_file.c:506
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:503
+#: Top/one_file.c:522
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:539
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:536 Top/one_file.c:584
+#: Top/one_file.c:555 Top/one_file.c:603
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:541
+#: Top/one_file.c:560
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:555
+#: Top/one_file.c:574
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:589
+#: Top/one_file.c:608
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:604
+#: Top/one_file.c:623
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:624
+#: Top/one_file.c:643
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:632 Top/one_file.c:639
+#: Top/one_file.c:651 Top/one_file.c:658
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:645
+#: Top/one_file.c:664
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:655
+#: Top/one_file.c:674
 msgid "**** Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:661
+#: Top/one_file.c:680
 msgid "**** End of Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:691
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:703
+#: Top/one_file.c:722
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:718
+#: Top/one_file.c:737
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:734
+#: Top/one_file.c:753
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:740
+#: Top/one_file.c:759
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:754
+#: Top/one_file.c:773
 msgid "Creating orchestra\n"
 msgstr ""
 
-#: Top/one_file.c:759
+#: Top/one_file.c:778
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:793
+#: Top/one_file.c:812
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:798
+#: Top/one_file.c:817
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 
@@ -10347,159 +9507,159 @@ msgstr ""
 msgid "%d opcodes\n"
 msgstr ""
 
-#: Top/threads.c:38
+#: Top/threads.c:92 Top/threads.c:556
 #, c-format
 msgid "%s() is not implemented on this platform.\n"
 msgstr ""
 
-#: Top/utility.c:98
+#: Top/utility.c:99
 #, c-format
 msgid "util %s:\n"
 msgstr "util %s:\n"
 
-#: Top/utility.c:105
+#: Top/utility.c:106
 #, c-format
 msgid "Error: utility '%s' not found"
 msgstr ""
 
-#: Top/utility.c:108
+#: Top/utility.c:109
 msgid "Error: utility not found"
 msgstr ""
 
-#: Top/utility.c:112
+#: Top/utility.c:113
 msgid "The available utilities are:\n"
 msgstr ""
 
-#: util1/scot/scot.c:51
+#: util1/scot/scot.c:56
 msgid "Score must start with orchestra section"
 msgstr ""
 
-#: util1/scot/scot.c:61
+#: util1/scot/scot.c:66
 msgid "Expected score or functions section"
 msgstr ""
 
-#: util1/scot/scot.c:117
+#: util1/scot/scot.c:122
 msgid "Tempo must be specified"
 msgstr ""
 
-#: util1/scot/scot.c:121
+#: util1/scot/scot.c:126
 msgid "Redefinition of tempo"
 msgstr ""
 
-#: util1/scot/scot.c:133
+#: util1/scot/scot.c:138
 msgid "Must specify 2 or more letters of keyword"
 msgstr ""
 
-#: util1/scot/scot.c:136 util1/scot/scot.c:145 util1/scot/scot.c:154
+#: util1/scot/scot.c:141 util1/scot/scot.c:150 util1/scot/scot.c:159
 msgid "Must be \"on\" or \"off\""
 msgstr ""
 
-#: util1/scot/scot.c:165
+#: util1/scot/scot.c:170
 msgid "Invalid time signature"
 msgstr ""
 
-#: util1/scot/scot.c:202
+#: util1/scot/scot.c:207
 msgid "Bad key signature"
 msgstr ""
 
-#: util1/scot/scot.c:237 util1/scot/scot.c:243
+#: util1/scot/scot.c:242 util1/scot/scot.c:248
 msgid "Invalid field"
 msgstr ""
 
-#: util1/scot/scot.c:254 util1/scot/scot.c:258
+#: util1/scot/scot.c:259 util1/scot/scot.c:263
 msgid "Nested next-parameter passing"
 msgstr ""
 
-#: util1/scot/scot.c:268
+#: util1/scot/scot.c:273
 msgid "Unrecognised keyword"
 msgstr ""
 
-#: util1/scot/scot.c:317
+#: util1/scot/scot.c:322
 msgid "Wrong number of beats in bar"
 msgstr ""
 
-#: util1/scot/scot.c:325
+#: util1/scot/scot.c:330
 msgid "Syntax error: cannot back up"
 msgstr ""
 
-#: util1/scot/scot.c:496
+#: util1/scot/scot.c:501
 msgid "Improper tie"
 msgstr ""
 
-#: util1/scot/scot.c:502
+#: util1/scot/scot.c:507
 msgid "Tie between different pitches"
 msgstr ""
 
-#: util1/scot/scot.c:510
+#: util1/scot/scot.c:515
 msgid "Warning: params changed on tie"
 msgstr ""
 
-#: util1/scot/scot.c:562
+#: util1/scot/scot.c:567
 msgid "Parameter number out of range"
 msgstr ""
 
-#: util1/scot/scot.c:622
+#: util1/scot/scot.c:627
 msgid "Lost previous note: not written"
 msgstr ""
 
-#: util1/scot/scot.c:741
+#: util1/scot/scot.c:746
 msgid "Macro expansion too long -- circular macros?"
 msgstr ""
 
-#: util1/scot/scot.c:817 util1/scot/scot.c:922 util1/scot/scot.c:946
+#: util1/scot/scot.c:822 util1/scot/scot.c:927 util1/scot/scot.c:951
 msgid "Syntax error: no {"
 msgstr ""
 
-#: util1/scot/scot.c:829
+#: util1/scot/scot.c:834
 msgid "No instrument specified"
 msgstr ""
 
-#: util1/scot/scot.c:870
+#: util1/scot/scot.c:875
 msgid "unresolved tie"
 msgstr ""
 
-#: util1/scot/scot.c:872
+#: util1/scot/scot.c:877
 msgid "unresolved slur"
 msgstr ""
 
-#: util1/scot/scot.c:879
+#: util1/scot/scot.c:884
 msgid "Circular note list\n"
 msgstr ""
 
-#: util1/scot/scot.c:925 util1/scot/scot.c:1039 util1/scot/scot.c:1053
-#: util1/scot/scot.c:1060 util1/scot/scot.c:1085
+#: util1/scot/scot.c:930 util1/scot/scot.c:1044 util1/scot/scot.c:1058
+#: util1/scot/scot.c:1065 util1/scot/scot.c:1090
 msgid "Unexpected end of file"
 msgstr ""
 
-#: util1/scot/scot.c:968
+#: util1/scot/scot.c:973
 msgid "Syntax error: no ="
 msgstr ""
 
-#: util1/scot/scot.c:970
+#: util1/scot/scot.c:975
 msgid "Syntax error: no number"
 msgstr ""
 
-#: util1/scot/scot.c:982
+#: util1/scot/scot.c:987
 msgid "No instruments declared"
 msgstr ""
 
-#: util1/scot/scot.c:1003
+#: util1/scot/scot.c:1008
 msgid "Expected ="
 msgstr ""
 
-#: util1/scot/scot.c:1151
+#: util1/scot/scot.c:1156
 msgid "Invalid pitch class"
 msgstr ""
 
-#: util1/scot/scot.c:1296 util1/scot/scot.c:1311 util1/scot/scot.c:1365
+#: util1/scot/scot.c:1301 util1/scot/scot.c:1316 util1/scot/scot.c:1370
 msgid "Division by zero"
 msgstr ""
 
-#: util1/scot/scot.c:1454
+#: util1/scot/scot.c:1461
 msgid "scot processing terminated\n"
 msgstr ""
 
-#: util1/scot/scot.c:1461
+#: util1/scot/scot.c:1468
 #, c-format
 msgid "scot: %d errors.\n"
 msgstr "scot: %d errori.\n"
@@ -10515,8 +9675,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
-#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
+#: util/atsa.c:546 util/atsa.c:2360 util/atsa.c:2374 util/atsa.c:2393
+#: util/atsa.c:2573 util/atsa.c:2636 util/atsa.c:2724
 msgid "done!\n"
 msgstr ""
 
@@ -10645,160 +9805,167 @@ msgstr ""
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2013
+#: util/atsa.c:1946 util/atsa.c:1951 util/atsa.c:1962 util/atsa.c:1965
+#: util/atsa.c:1969 util/atsa.c:1978 util/cvanal.c:193 util/hetro.c:607
+#: util/hetro.c:690 util/hetro.c:703
+#, fuzzy
+msgid "Write failure\n"
+msgstr "Allocazione di memoria fallita"
+
+#: util/atsa.c:2019
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr ""
 
-#: util/atsa.c:2020
+#: util/atsa.c:2026
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2025
+#: util/atsa.c:2031
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2040
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2044
+#: util/atsa.c:2050
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2050
+#: util/atsa.c:2056
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2063
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2067
+#: util/atsa.c:2073
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2074
+#: util/atsa.c:2080
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2082
+#: util/atsa.c:2088
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2090
+#: util/atsa.c:2096
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2098
+#: util/atsa.c:2104
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2106
+#: util/atsa.c:2112
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2130
+#: util/atsa.c:2136
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2139
+#: util/atsa.c:2145
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2148
+#: util/atsa.c:2154
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2157
+#: util/atsa.c:2163
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2163
+#: util/atsa.c:2169
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2174
+#: util/atsa.c:2180
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2182
+#: util/atsa.c:2188
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2190
+#: util/atsa.c:2196
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2335
+#: util/atsa.c:2341
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2365
+#: util/atsa.c:2371
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2381 util/atsa.c:2384
+#: util/atsa.c:2387 util/atsa.c:2390
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2389
+#: util/atsa.c:2395
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2497
+#: util/atsa.c:2503
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2585
+#: util/atsa.c:2591
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2681
+#: util/atsa.c:2687
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2732
+#: util/atsa.c:2738
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2832
+#: util/atsa.c:2838
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10867,7 +10034,7 @@ msgstr ""
 msgid "less sound than expected!\n"
 msgstr ""
 
-#: util/cvanal.c:243
+#: util/cvanal.c:244
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
@@ -10955,7 +10122,7 @@ msgstr ""
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
+#: util/dnoise.c:480 util/srconv.c:461 util/srconv.c:473
 #, c-format
 msgid "cannot open %s."
 msgstr "Impossibile aprire %s."
@@ -11128,7 +10295,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:737
+#: util/envext.c:54 util/srconv.c:738
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11177,7 +10344,7 @@ msgid "Cannot open input file %s\n"
 msgstr ""
 
 #: util/het_export.c:61 util/lpc_export.c:66 util/lpc_import.c:62
-#: util/pv_export.c:64 util/pv_import.c:111
+#: util/pv_export.c:64 util/pv_import.c:123
 #, c-format
 msgid "Cannot open output file %s\n"
 msgstr ""
@@ -11200,7 +10367,7 @@ msgstr ""
 msgid "Cannot open output hetro file %s\n"
 msgstr ""
 
-#: util/het_import.c:108
+#: util/het_import.c:111
 msgid "translate text form to hetro analysis file"
 msgstr ""
 
@@ -11298,48 +10465,48 @@ msgstr ""
 msgid "cannot create output file\n"
 msgstr ""
 
-#: util/hetro.c:616
+#: util/hetro.c:617
 #, c-format
 msgid "scale = %f\n"
 msgstr ""
 
-#: util/hetro.c:711
+#: util/hetro.c:714
 #, c-format
 msgid "harmonic #%d:\tamp points %d, \tfrq points %d,\tpeakamp %d\n"
 msgstr ""
 
-#: util/hetro.c:715
+#: util/hetro.c:718
 #, c-format
 msgid "wrote %ld bytes to %s\n"
 msgstr ""
 
-#: util/hetro.c:747
+#: util/hetro.c:750
 msgid "OOPS: SDIF does not work on this machine!\n"
 msgstr ""
 
-#: util/hetro.c:773
+#: util/hetro.c:776
 #, c-format
 msgid "Error creating %s\n"
 msgstr ""
 
-#: util/hetro.c:801
+#: util/hetro.c:804
 msgid "Error writing SDIF frame header.\n"
 msgstr ""
 
-#: util/hetro.c:810
+#: util/hetro.c:813
 msgid "Error writing SDIF matrix header.\n"
 msgstr ""
 
-#: util/hetro.c:823
+#: util/hetro.c:826
 msgid "Error writing SDIF data.\n"
 msgstr ""
 
-#: util/hetro.c:830
+#: util/hetro.c:833
 #, c-format
 msgid "wrote %ld 1TRC frames to %s\n"
 msgstr ""
 
-#: util/hetro.c:858
+#: util/hetro.c:861
 msgid "Soundfile analysis for adsyn"
 msgstr ""
 
@@ -11551,7 +10718,12 @@ msgstr ""
 msgid "Failed to read LPC header\n"
 msgstr ""
 
-#: util/lpc_export.c:102
+#: util/lpc_export.c:81 util/lpc_export.c:88
+#, fuzzy
+msgid "Read faailure\n"
+msgstr "Allocazione di memoria fallita"
+
+#: util/lpc_export.c:106
 msgid "translate linear predictive coding file to text file"
 msgstr ""
 
@@ -11559,7 +10731,12 @@ msgstr ""
 msgid "Usage: lpc_import cstext_file lpc_file\n"
 msgstr ""
 
-#: util/lpc_import.c:98
+#: util/lpc_import.c:77 util/lpc_import.c:84 util/srconv.c:378
+#, fuzzy
+msgid "Read failure\n"
+msgstr "Allocazione di memoria fallita"
+
+#: util/lpc_import.c:102
 msgid "translate text file to linear predictive coding file"
 msgstr ""
 
@@ -11576,7 +10753,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11874,11 +11051,20 @@ msgstr ""
 msgid "Usage: pv_import cstext_file pv_file \n"
 msgstr ""
 
-#: util/pv_import.c:127
+#: util/pv_import.c:73 util/pv_import.c:93
+msgid "Not a PV file\n"
+msgstr ""
+
+#: util/pv_import.c:132
+#, fuzzy
+msgid "Memory failure\n"
+msgstr "Allocazione di memoria fallita"
+
+#: util/pv_import.c:143
 msgid "Sync error\n"
 msgstr ""
 
-#: util/pv_import.c:148
+#: util/pv_import.c:164
 msgid "translate text form to PVOC analysis file"
 msgstr ""
 
@@ -11945,7 +11131,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:754
+#: util/scale.c:62 util/srconv.c:755
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -12124,47 +11310,47 @@ msgstr ""
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:388
+#: util/srconv.c:389
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:402
+#: util/srconv.c:403
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:407
+#: util/srconv.c:408
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:412 util/srconv.c:704
+#: util/srconv.c:413 util/srconv.c:705
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:731
+#: util/srconv.c:732
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:733
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:734
+#: util/srconv.c:735
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:736
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:737
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:820
+#: util/srconv.c:821
 msgid "Sample rate conversion"
 msgstr ""
 
@@ -12315,6 +11501,89 @@ msgstr ""
 msgid "Extract part of a sound file"
 msgstr ""
 
+#~ msgid "Unknown word type for %s on line %d\n"
+#~ msgstr "Tipo di parola sconosciuta per %s alla linea %d\n"
+
+#~ msgid "DSSI4CS: Not initialised or wrong argument types."
+#~ msgstr "DSSI4CS: non inizializzato or wrong argument types."
+
+#, fuzzy
+#~ msgid "insufficient arguments for fareytable"
+#~ msgstr "argomenti insufficienti"
+
+#, fuzzy
+#~ msgid "Farey: Source sft table %.2f not found."
+#~ msgstr "GEN32: source ftable %d non trovata"
+
+#, fuzzy
+#~ msgid "Illegal Engine Number: %i.\n"
+#~ msgstr "numero di gen non consentito"
+
+#~ msgid "freeverb: not initialised"
+#~ msgstr "freeverb: non inizializzato"
+
+#~ msgid "ftconv: not initialised"
+#~ msgstr "ftconv: non inizializzato"
+
+#, fuzzy
+#~ msgid "adsynt2: not initialised"
+#~ msgstr "adsynt: non inizializzato"
+
+#, fuzzy
+#~ msgid "copyTabElems: incorrect source table number"
+#~ msgstr "GEN53: numero di source table non valido"
+
+#, fuzzy
+#~ msgid "vectorop: invalid num of elements"
+#~ msgstr "numero errato di discussioni ftable"
+
+#, fuzzy
+#~ msgid "vport: invalid table length or num of elements"
+#~ msgstr "GEN53: lunghezza della tavola non valida"
+
+#, fuzzy
+#~ msgid "vport: invalid table"
+#~ msgstr "soundin: skip time non valido"
+
+#, fuzzy
+#~ msgid "vport: invalid init table"
+#~ msgstr "soundin: skip time non valido"
+
+#, fuzzy
+#~ msgid "vrandh: Invalid table."
+#~ msgstr "ftable num. %f non valida"
+
+#, fuzzy
+#~ msgid "vrandi: Invalid table."
+#~ msgstr "ftable num. %f non valida"
+
+#, fuzzy
+#~ msgid "vecdelay: invalid num of elements"
+#~ msgstr "numero errato di discussioni ftable"
+
+#, fuzzy
+#~ msgid "vecdly: invalid output table"
+#~ msgstr "GEN53: window table non valida"
+
+#, fuzzy
+#~ msgid "vecdly: invalid input table"
+#~ msgstr "GEN53: window table non valida"
+
+#, fuzzy
+#~ msgid "vecdly: invalid delay table"
+#~ msgstr "GEN53: window table non valida"
+
+#, fuzzy
+#~ msgid "vecdly: not initialised"
+#~ msgstr "vdelay: non inizializzato"
+
+#, fuzzy
+#~ msgid "vdelayk: not initialised"
+#~ msgstr "delayk: non inizializzato"
+
+#~ msgid "cannot reopen %s"
+#~ msgstr "Impossibile riaprire %s"
+
 #, fuzzy
 #~ msgid "tableseg: not initialized"
 #~ msgstr "tableseg: non inizializzato"
@@ -12372,9 +11641,6 @@ msgstr ""
 #~ msgid "Ignoring name %s not in file\n"
 #~ msgstr "Ignorato il nome %s non è nel file\n"
 
-#~ msgid "cannot open input file %s"
-#~ msgstr "Non è possibile aprire il file di input %s"
-
 #, fuzzy
 #~ msgid "rtaudio: AuHAL module enabled\n"
 #~ msgstr "rtaudio: modulo ALSA abilitato\n"
diff --git a/po/romanian.po b/po/romanian.po
index a2186d2..6456aa3 100644
--- a/po/romanian.po
+++ b/po/romanian.po
@@ -100,316 +100,317 @@ msgstr ""
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:138
+#: Engine/csound_orc_compile.c:141
 #, c-format
 msgid ""
 "input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
 "line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
+#: Engine/csound_orc_compile.c:268 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:269
+#: Engine/csound_orc_compile.c:272
 msgid "too many input args\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:304
+#: Engine/csound_orc_compile.c:307
 #, c-format
 msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:380
+#: Engine/csound_orc_compile.c:389
 #, c-format
-msgid ""
-"output name previously used, type '%c' must be uniquely defined, line %d"
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:386
+#: Engine/csound_orc_compile.c:517
 #, c-format
-msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
+msgid "output name previously used, type 'w' must be uniquely defined, line %d"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:541
+#: Engine/csound_orc_compile.c:563
 #, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:738
+#: Engine/csound_orc_compile.c:760
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:748
+#: Engine/csound_orc_compile.c:772
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+#: Engine/csound_orc_compile.c:779 Engine/csound_orc_compile.c:1068
+#: Engine/csound_orc_compile.c:1089 Engine/otran.c:363
 msgid "invalid name for instrument"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
+#: Engine/csound_orc_compile.c:783 Engine/csound_orc_compile.c:1071
+#: Engine/csound_orc_compile.c:1092 Engine/otran.c:369
 #, c-format
 msgid "instr %s redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
+#: Engine/csound_orc_compile.c:927 Engine/otran.c:351
 #, c-format
 msgid "instr %ld redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:914
+#: Engine/csound_orc_compile.c:938
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1083
+#: Engine/csound_orc_compile.c:1141
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
+#: Engine/csound_orc_compile.c:1198 Engine/otran.c:578 Engine/otran.c:1432
 #, c-format
 msgid "%s invalid sample rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
+#: Engine/csound_orc_compile.c:1200 Engine/otran.c:580 Engine/otran.c:1434
 #, c-format
 msgid "%s invalid control rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
+#: Engine/csound_orc_compile.c:1204 Engine/otran.c:583 Engine/otran.c:1430
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
+#: Engine/csound_orc_compile.c:1207 Engine/otran.c:586 Engine/otran.c:1436
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1165
+#: Engine/csound_orc_compile.c:1223
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1170
+#: Engine/csound_orc_compile.c:1228
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
+#: Engine/csound_orc_compile.c:1288 Engine/otran.c:670
 msgid "inconsistent argoff sumcount"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
+#: Engine/csound_orc_compile.c:1360 Engine/otran.c:739
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
+#: Engine/csound_orc_compile.c:1398 Engine/otran.c:777
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
+#: Engine/csound_orc_compile.c:1431 Engine/otran.c:810
 #, c-format
 msgid "target label '%s' not found"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
+#: Engine/csound_orc_compile.c:1509 Engine/otran.c:865
 #, c-format
 msgid "string syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
+#: Engine/csound_orc_compile.c:1559 Engine/otran.c:915
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
+#: Engine/csound_orc_compile.c:1585 Engine/otran.c:941
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
+#: Engine/csound_orc_compile.c:1624 Engine/otran.c:1017
 msgid "gblnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
+#: Engine/csound_orc_compile.c:1652 Engine/otran.c:1045
 msgid "lclnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
+#: Engine/csound_orc_compile.c:1678 Engine/otran.c:1070
 msgid "unexpected global name"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
+#: Engine/csound_orc_compile.c:1701 Engine/otran.c:1092
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:459
+#: Engine/csound_orc_expressions.c:457
 #, c-format
 msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:862
+#: Engine/csound_orc_expressions.c:878
 #, c-format
 msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:157
+#: Engine/csound_orc_semantics.c:256
 #, c-format
 msgid ""
 "\n"
 "error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:159
+#: Engine/csound_orc_semantics.c:258
 #, c-format
 msgid ""
 " line %d:\n"
 ">>>"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:732
+#: Engine/csound_orc_semantics.c:834
 #, c-format
 msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/csound_orc_semantics.c:899 Engine/rdorch.c:1644 Engine/rdorch.c:1662
 #: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
+#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:126
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
+#: Engine/cs_par_dispatch.c:140 Engine/cs_par_dispatch.c:160
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
-#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
-#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
+#: Engine/cs_par_dispatch.c:551 Engine/cs_par_dispatch.c:578
+#: Engine/cs_par_dispatch.c:2564 Engine/cs_par_dispatch.c:2609
+#: Engine/cs_par_dispatch.c:2611 Engine/cs_par_dispatch.c:2675
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
-#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
+#: Engine/cs_par_dispatch.c:553 Engine/cs_par_dispatch.c:592
+#: Engine/cs_par_dispatch.c:619 Engine/cs_par_dispatch.c:660
 msgid "Invalid NULL Parameter name"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:535
+#: Engine/cs_par_dispatch.c:560
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
+#: Engine/cs_par_dispatch.c:689 Engine/cs_par_dispatch.c:780
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
+#: Engine/cs_par_dispatch.c:730 Engine/cs_par_dispatch.c:860
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:759
+#: Engine/cs_par_dispatch.c:784
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:907
+#: Engine/cs_par_dispatch.c:930
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:913
+#: Engine/cs_par_dispatch.c:936
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:918
+#: Engine/cs_par_dispatch.c:941
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:922
+#: Engine/cs_par_dispatch.c:945
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:926
+#: Engine/cs_par_dispatch.c:949
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
-#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
-#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
-#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
-#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
-#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
-#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
-#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
+#: Engine/cs_par_dispatch.c:1024 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1176 Engine/cs_par_dispatch.c:1276
+#: Engine/cs_par_dispatch.c:1430 Engine/cs_par_dispatch.c:1464
+#: Engine/cs_par_dispatch.c:1481 Engine/cs_par_dispatch.c:1503
+#: Engine/cs_par_dispatch.c:1531 Engine/cs_par_dispatch.c:1553
+#: Engine/cs_par_dispatch.c:1577 Engine/cs_par_dispatch.c:1669
+#: Engine/cs_par_dispatch.c:1724 Engine/cs_par_dispatch.c:1817
+#: Engine/cs_par_dispatch.c:1870 Engine/cs_par_dispatch.c:2702
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1008
+#: Engine/cs_par_dispatch.c:1029
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
-#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
+#: Engine/cs_par_dispatch.c:1081 Engine/cs_par_dispatch.c:1104
+#: Engine/cs_par_dispatch.c:1126 Engine/cs_par_dispatch.c:1128
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1062
+#: Engine/cs_par_dispatch.c:1083
 msgid "Invalid NULL Parameter instr"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1085
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
+#: Engine/cs_par_dispatch.c:1090 Engine/cs_par_dispatch.c:1112
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1086
+#: Engine/cs_par_dispatch.c:1107
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
-#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
-#: Engine/cs_par_dispatch.c:2682
+#: Engine/cs_par_dispatch.c:1250 Engine/cs_par_dispatch.c:1533
+#: Engine/cs_par_dispatch.c:2566 Engine/cs_par_dispatch.c:2676
+#: Engine/cs_par_dispatch.c:2703
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1237
+#: Engine/cs_par_dispatch.c:1261
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1554
+#: Engine/cs_par_dispatch.c:1579
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1556
+#: Engine/cs_par_dispatch.c:1581
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1647
+#: Engine/cs_par_dispatch.c:1672
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2497
+#: Engine/cs_par_dispatch.c:2518
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2557
+#: Engine/cs_par_dispatch.c:2578
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2610
+#: Engine/cs_par_dispatch.c:2631
 msgid "Cache Update\n"
 msgstr ""
 
@@ -423,12 +424,12 @@ msgstr ""
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1083
+#: Engine/envvar.c:1085
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr ""
 
-#: Engine/envvar.c:1266
+#: Engine/envvar.c:1268
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr ""
@@ -499,13 +500,13 @@ msgstr ""
 msgid "ftable %d now deleted\n"
 msgstr ""
 
-#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
-#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
-#: Engine/fgens.c:2909
+#: Engine/fgens.c:153 Engine/fgens.c:1599 Engine/fgens.c:1685
+#: Engine/fgens.c:1764 Engine/fgens.c:1880 Engine/fgens.c:1961
+#: Engine/fgens.c:2937
 msgid "insufficient gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:179 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr ""
@@ -523,11 +524,11 @@ msgstr ""
 msgid "ftable %d:\n"
 msgstr ""
 
-#: Engine/fgens.c:222 Engine/fgens.c:229
+#: Engine/fgens.c:222 Engine/fgens.c:229 Engine/fgens.c:2794
 msgid "illegal table length"
 msgstr ""
 
-#: Engine/fgens.c:288 Engine/fgens.c:2215
+#: Engine/fgens.c:288 Engine/fgens.c:2221
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
@@ -536,10 +537,10 @@ msgstr ""
 
 #: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
 #: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
-#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
-#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
-#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
-#: Engine/fgens.c:2906
+#: Engine/fgens.c:1054 Engine/fgens.c:1098 Engine/fgens.c:1145
+#: Engine/fgens.c:1399 Engine/fgens.c:1461 Engine/fgens.c:1683
+#: Engine/fgens.c:1761 Engine/fgens.c:2116 Engine/fgens.c:2891
+#: Engine/fgens.c:2934
 msgid "using extended arguments\n"
 msgstr ""
 
@@ -552,13 +553,13 @@ msgid "illegal x interval"
 msgstr ""
 
 #: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
-#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
-#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: Engine/fgens.c:1356 Engine/fgens.c:2381 Engine/fgens.c:2696
+#: Engine/fgens.c:2836 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
 #: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr ""
 
-#: Engine/fgens.c:408 Engine/fgens.c:1355
+#: Engine/fgens.c:408 Engine/fgens.c:1361
 msgid "unknown srctable number"
 msgstr ""
 
@@ -594,238 +595,238 @@ msgstr ""
 msgid "uneven number of args"
 msgstr ""
 
-#: Engine/fgens.c:1077
+#: Engine/fgens.c:1082
 msgid "gen call has illegal x-ordinate values:"
 msgstr ""
 
-#: Engine/fgens.c:1095
+#: Engine/fgens.c:1100
 msgid "wrong number of args"
 msgstr ""
 
-#: Engine/fgens.c:1109
+#: Engine/fgens.c:1114
 msgid "a range given exceeds table length"
 msgstr ""
 
-#: Engine/fgens.c:1116
+#: Engine/fgens.c:1121
 msgid "an input function does not exist"
 msgstr ""
 
-#: Engine/fgens.c:1249
+#: Engine/fgens.c:1254
 msgid "No such window!"
 msgstr ""
 
-#: Engine/fgens.c:1267
+#: Engine/fgens.c:1272
 msgid "Wrong number of input arguments"
 msgstr ""
 
-#: Engine/fgens.c:1268
+#: Engine/fgens.c:1273
 msgid "unknown distribution"
 msgstr ""
 
-#: Engine/fgens.c:1317
+#: Engine/fgens.c:1322
 msgid "error opening ASCII file"
 msgstr ""
 
-#: Engine/fgens.c:1323
+#: Engine/fgens.c:1328
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr ""
 
-#: Engine/fgens.c:1334
+#: Engine/fgens.c:1340
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1363
+#: Engine/fgens.c:1369
 msgid "table size must be the same of source table"
 msgstr ""
 
-#: Engine/fgens.c:1435 Engine/fgens.c:1495
+#: Engine/fgens.c:1441 Engine/fgens.c:1501
 msgid "x coordinates must all be in increasing order:"
 msgstr ""
 
-#: Engine/fgens.c:1438 Engine/fgens.c:1497
+#: Engine/fgens.c:1444 Engine/fgens.c:1503
 msgid "x coordinate greater than function size:"
 msgstr ""
 
-#: Engine/fgens.c:1442
+#: Engine/fgens.c:1448
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1515
+#: Engine/fgens.c:1521
 msgid "GEN28 requires zero table length"
 msgstr ""
 
-#: Engine/fgens.c:1577
+#: Engine/fgens.c:1583
 msgid "could not open space file"
 msgstr ""
 
-#: Engine/fgens.c:1579
+#: Engine/fgens.c:1585
 msgid "Time values must be in increasing order"
 msgstr ""
 
-#: Engine/fgens.c:1600
+#: Engine/fgens.c:1606
 msgid "GEN30: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1683
+#: Engine/fgens.c:1689
 msgid "GEN31: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1791
+#: Engine/fgens.c:1797
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr ""
 
-#: Engine/fgens.c:1885
+#: Engine/fgens.c:1891
 msgid "GEN33: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:2053
+#: Engine/fgens.c:2059
 msgid "unknown source table number"
 msgstr ""
 
-#: Engine/fgens.c:2085
+#: Engine/fgens.c:2091
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2157
 #, c-format
 msgid "ftable %d: "
 msgstr ""
 
-#: Engine/fgens.c:2195
+#: Engine/fgens.c:2201
 #, c-format
 msgid "ftable %d:"
 msgstr ""
 
-#: Engine/fgens.c:2210
+#: Engine/fgens.c:2216
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr ""
 
-#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
-#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
-#: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
-#: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
+#: Engine/fgens.c:2252 Engine/fgens.c:2340 Engine/fgens.c:2364
+#: Opcodes/midiops2.c:233 Opcodes/midiops2.c:388 Opcodes/midiops2.c:470
+#: Opcodes/uggab.c:1482 Opcodes/uggab.c:1509 Opcodes/uggab.c:1529
+#: Opcodes/uggab.c:1572
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr ""
 
-#: Engine/fgens.c:2251
+#: Engine/fgens.c:2257
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr ""
 
-#: Engine/fgens.c:2278 Engine/fgens.c:2848
+#: Engine/fgens.c:2284 Engine/fgens.c:2875
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr ""
 
-#: Engine/fgens.c:2340
+#: Engine/fgens.c:2346
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 
-#: Engine/fgens.c:2399
+#: Engine/fgens.c:2405
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
+#: Engine/fgens.c:2452 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr ""
 
-#: Engine/fgens.c:2454 Engine/fgens.c:2714
+#: Engine/fgens.c:2460 Engine/fgens.c:2719
 #, c-format
 msgid "channel %d illegal"
 msgstr ""
 
-#: Engine/fgens.c:2460
+#: Engine/fgens.c:2466
 msgid "deferred alloc\n"
 msgstr ""
 
-#: Engine/fgens.c:2468
+#: Engine/fgens.c:2474 Engine/fgens.c:2792
 msgid "deferred size, but filesize unknown"
 msgstr ""
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2477 Engine/fgens.c:2796
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2540
+#: Engine/fgens.c:2546
 msgid "GEN1: input file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2544
+#: Engine/fgens.c:2550
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2566
+#: Engine/fgens.c:2572
 msgid "GEN1 read error"
 msgstr ""
 
-#: Engine/fgens.c:2571
+#: Engine/fgens.c:2577
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2572
+#: Engine/fgens.c:2578
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr ""
 
-#: Engine/fgens.c:2616
+#: Engine/fgens.c:2622
 msgid "wrong number of ftable arguments"
 msgstr ""
 
-#: Engine/fgens.c:2626 OOps/pstream.c:326
+#: Engine/fgens.c:2632 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr ""
 
-#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2643 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr ""
 
-#: Engine/fgens.c:2655
+#: Engine/fgens.c:2661
 msgid "ftable size too small"
 msgstr ""
 
-#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
+#: Engine/fgens.c:2735 Opcodes/mp3in.c:87 Opcodes/mp3in.c:229
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2873
+#: Engine/fgens.c:2901
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr ""
 
-#: Engine/fgens.c:2913
+#: Engine/fgens.c:2941
 msgid "number of channels inconsistent with number of args"
 msgstr ""
 
-#: Engine/fgens.c:3072
+#: Engine/fgens.c:3100
 msgid "GEN53: invalid number of gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:3082
+#: Engine/fgens.c:3110
 msgid "GEN53: invalid table length"
 msgstr ""
 
-#: Engine/fgens.c:3086
+#: Engine/fgens.c:3114
 msgid "GEN53: invalid source table number"
 msgstr ""
 
-#: Engine/fgens.c:3089
+#: Engine/fgens.c:3117
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr ""
 
-#: Engine/fgens.c:3093
+#: Engine/fgens.c:3121
 msgid "GEN53: invalid source table length"
 msgstr ""
 
-#: Engine/fgens.c:3098
+#: Engine/fgens.c:3126
 msgid "GEN53: invalid window table"
 msgstr ""
 
@@ -1030,36 +1031,36 @@ msgstr ""
 msgid "subinstr: not initialised"
 msgstr ""
 
-#: Engine/insert.c:1855
+#: Engine/insert.c:1856
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
 "\tlclbas %p, opds %p\n"
 msgstr ""
 
-#: Engine/insert.c:1872
+#: Engine/insert.c:1873
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1898
+#: Engine/insert.c:1899
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1909
+#: Engine/insert.c:1910
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1966
+#: Engine/insert.c:1967
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:2011
+#: Engine/insert.c:2012
 #, c-format
 msgid "Instrument %s is still active"
 msgstr ""
 
-#: Engine/insert.c:2014
+#: Engine/insert.c:2015
 #, c-format
 msgid "Instrument %d is still active"
 msgstr ""
@@ -1069,8 +1070,8 @@ msgid "-L stdin fcntl failed"
 msgstr ""
 
 #: Engine/linevent.c:99 Engine/linevent.c:112 OOps/dumpf.c:57 OOps/dumpf.c:82
-#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:274 OOps/dumpf.c:301
-#: OOps/dumpf.c:328 OOps/dumpf.c:355 OOps/dumpf.c:527 util/hetro.c:249
+#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:276 OOps/dumpf.c:303
+#: OOps/dumpf.c:330 OOps/dumpf.c:357 OOps/dumpf.c:528 util/hetro.c:249
 #, c-format
 msgid "Cannot open %s"
 msgstr ""
@@ -1234,210 +1235,206 @@ msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
 msgstr ""
 
-#: Engine/musmon.c:81
+#: Engine/musmon.c:80
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr ""
 
-#: Engine/musmon.c:108
+#: Engine/musmon.c:107
 msgid "illegal istartempo value"
 msgstr ""
 
-#: Engine/musmon.c:111
+#: Engine/musmon.c:110
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:184 Top/main.c:121
+#: Engine/musmon.c:183 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:187 Top/main.c:124
+#: Engine/musmon.c:186 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:192 Top/main.c:113
+#: Engine/musmon.c:191 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:195 Top/main.c:116
+#: Engine/musmon.c:194 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:220
+#: Engine/musmon.c:219
 msgid "orch now loaded\n"
 msgstr ""
 
-#: Engine/musmon.c:245
+#: Engine/musmon.c:244
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:261
+#: Engine/musmon.c:260
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:283
+#: Engine/musmon.c:282
 msgid "using Cscore processing\n"
 msgstr ""
 
-#: Engine/musmon.c:286
+#: Engine/musmon.c:285
 msgid "cannot create cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:299
+#: Engine/musmon.c:301
 msgid "cannot reopen cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:314
 msgid "cannot reopen cscore.srt"
 msgstr ""
 
-#: Engine/musmon.c:305
+#: Engine/musmon.c:316
 msgid "sorting cscore.out ..\n"
 msgstr ""
 
-#: Engine/musmon.c:311 Top/main.c:401
+#: Engine/musmon.c:322 Top/main.c:397
 msgid "\t... done\n"
 msgstr ""
 
-#: Engine/musmon.c:312
+#: Engine/musmon.c:323
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
-#: Engine/musmon.c:1216
+#: Engine/musmon.c:327 Engine/musmon.c:457 Engine/musmon.c:1026
+#: Engine/musmon.c:1227
 #, c-format
 msgid "SECTION %d:\n"
 msgstr ""
 
-#: Engine/musmon.c:390
+#: Engine/musmon.c:401
 msgid "end of score.\t\t   overall amps:"
 msgstr ""
 
-#: Engine/musmon.c:401
+#: Engine/musmon.c:412
 msgid ""
 "\n"
 "\t   overall samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:405
+#: Engine/musmon.c:416
 #, c-format
 msgid ""
 "\n"
 "%d errors in performance\n"
 msgstr ""
 
-#: Engine/musmon.c:407
+#: Engine/musmon.c:418
 msgid "end of performance"
 msgstr ""
 
-#: Engine/musmon.c:421
+#: Engine/musmon.c:432
 msgid "no sound written to disk\n"
 msgstr ""
 
-#: Engine/musmon.c:436
+#: Engine/musmon.c:447
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:502 Engine/musmon.c:548
+#: Engine/musmon.c:513 Engine/musmon.c:559
 msgid "\t number of samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:541
+#: Engine/musmon.c:552
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:543
+#: Engine/musmon.c:554
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:607 Engine/musmon.c:632
+#: Engine/musmon.c:618 Engine/musmon.c:643
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr ""
 
-#: Engine/musmon.c:611
+#: Engine/musmon.c:622
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "off"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "on"
 msgstr ""
 
-#: Engine/musmon.c:620 Engine/musmon.c:659
+#: Engine/musmon.c:631 Engine/musmon.c:670
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr ""
 
-#: Engine/musmon.c:624
+#: Engine/musmon.c:635
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:650
+#: Engine/musmon.c:661
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:680
+#: Engine/musmon.c:691
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:701
+#: Engine/musmon.c:712
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr ""
 
-#: Engine/musmon.c:719
+#: Engine/musmon.c:730
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr ""
 
-#: Engine/musmon.c:723
+#: Engine/musmon.c:734
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:736
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:816
+#: Engine/musmon.c:827
 msgid "terminating.\n"
 msgstr ""
 
-#: Engine/musmon.c:902
+#: Engine/musmon.c:913
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr ""
 
-#: Engine/musmon.c:1129
+#: Engine/musmon.c:1140
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr ""
 
-#: Engine/musmon.c:1149
+#: Engine/musmon.c:1160
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr ""
 
-#: Engine/musmon.c:1172
+#: Engine/musmon.c:1183
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr ""
 
@@ -1460,105 +1457,105 @@ msgstr ""
 msgid "cannot find the specified instrument or opcode"
 msgstr ""
 
-#: Engine/new_orc_parser.c:91
+#: Engine/new_orc_parser.c:119
 msgid "Unmatched #ifdef\n"
 msgstr ""
 
-#: Engine/otran.c:149 Engine/symbtab.c:413
+#: Engine/otran.c:149 Engine/symbtab.c:416
 #, c-format
 msgid "invalid input type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:154 Engine/symbtab.c:418
+#: Engine/otran.c:154 Engine/symbtab.c:421
 #, c-format
 msgid "too many input args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:169 Engine/symbtab.c:433
+#: Engine/otran.c:169 Engine/symbtab.c:436
 #, c-format
 msgid "too many output args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:194 Engine/symbtab.c:458
+#: Engine/otran.c:194 Engine/symbtab.c:461
 #, c-format
 msgid "invalid output type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:325 Engine/otran.c:332
+#: Engine/otran.c:324 Engine/otran.c:331
 msgid "missing instrument number or name"
 msgstr ""
 
-#: Engine/otran.c:337
+#: Engine/otran.c:336
 msgid "illegal instr number"
 msgstr ""
 
-#: Engine/otran.c:388
+#: Engine/otran.c:387
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:393 Engine/symbtab.c:538
+#: Engine/otran.c:392 Engine/symbtab.c:541
 msgid "invalid name for opcode"
 msgstr ""
 
-#: Engine/otran.c:397
+#: Engine/otran.c:396
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
 msgstr ""
 
-#: Engine/otran.c:408 Engine/symbtab.c:548
+#: Engine/otran.c:407 Engine/symbtab.c:551
 #, c-format
 msgid "cannot redefine %s"
 msgstr ""
 
-#: Engine/otran.c:412 Engine/symbtab.c:553
+#: Engine/otran.c:411 Engine/symbtab.c:556
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr ""
 
-#: Engine/otran.c:503
+#: Engine/otran.c:502
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:534
+#: Engine/otran.c:533
 msgid "Missing endin"
 msgstr ""
 
-#: Engine/otran.c:599
+#: Engine/otran.c:598
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:603
+#: Engine/otran.c:602
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr ""
 
-#: Engine/otran.c:1257
+#: Engine/otran.c:1256
 msgid "bad value for 0dbfs: must be positive."
 msgstr ""
 
-#: Engine/otran.c:1267
+#: Engine/otran.c:1266
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1339
+#: Engine/otran.c:1338
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1365
+#: Engine/otran.c:1364
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1428
+#: Engine/otran.c:1427
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "error:"
 msgstr ""
 
-#: Engine/otran.c:1461
+#: Engine/otran.c:1460
 msgid "header init errors"
 msgstr ""
 
@@ -1570,7 +1567,7 @@ msgstr ""
 msgid "Unexpected end of orchestra file"
 msgstr ""
 
-#: Engine/rdorch.c:431 Engine/sread.c:758
+#: Engine/rdorch.c:431 Engine/sread.c:765
 #, c-format
 msgid "Macro definition for %*s\n"
 msgstr ""
@@ -1588,12 +1585,12 @@ msgstr ""
 msgid "cannot open orch file %s"
 msgstr ""
 
-#: Engine/rdorch.c:684 Engine/sread.c:1584
+#: Engine/rdorch.c:684 Engine/sread.c:1595
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:716 Engine/sread.c:1607
+#: Engine/rdorch.c:716 Engine/sread.c:1618
 msgid "macro error\n"
 msgstr ""
 
@@ -1614,7 +1611,7 @@ msgstr ""
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:872 Engine/sread.c:1694
+#: Engine/rdorch.c:872 Engine/sread.c:1710
 #, c-format
 msgid "macro %s undefined\n"
 msgstr ""
@@ -1632,21 +1629,21 @@ msgstr ""
 msgid "Unknown # option: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:928 Engine/sread.c:380
+#: Engine/rdorch.c:928 Engine/sread.c:383
 #, c-format
 msgid "Undefined macro: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:930 Engine/sread.c:378
+#: Engine/rdorch.c:930 Engine/sread.c:381
 msgid "Macro expansion symbol ($) without macro name"
 msgstr ""
 
-#: Engine/rdorch.c:935 Engine/sread.c:384
+#: Engine/rdorch.c:935 Engine/sread.c:387
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr ""
 
-#: Engine/rdorch.c:952 Engine/sread.c:401
+#: Engine/rdorch.c:952 Engine/sread.c:404 Engine/sread.c:420
 msgid "Syntax error in macro call"
 msgstr ""
 
@@ -1866,7 +1863,7 @@ msgid ""
 "\tremainder of line flushed\n"
 msgstr ""
 
-#: Engine/rdscor.c:146
+#: Engine/rdscor.c:148
 msgid "ERROR: too many pfields: "
 msgstr ""
 
@@ -1916,228 +1913,232 @@ msgstr ""
 msgid "Internal error op=%c"
 msgstr ""
 
-#: Engine/sread.c:464
+#: Engine/sread.c:469
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:491
+#: Engine/sread.c:496
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:501
+#: Engine/sread.c:506
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:533 Engine/sread.c:547
+#: Engine/sread.c:538 Engine/sread.c:552
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:559
+#: Engine/sread.c:564
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:565
+#: Engine/sread.c:570
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:579
+#: Engine/sread.c:584
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:599
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:646
+#: Engine/sread.c:651
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:652
+#: Engine/sread.c:657
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:696
+#: Engine/sread.c:701
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:701
+#: Engine/sread.c:706
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:715
+#: Engine/sread.c:720
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:733
+#: Engine/sread.c:740
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr ""
 
-#: Engine/sread.c:736
+#: Engine/sread.c:743
 msgid "Repeat section\n"
 msgstr ""
 
-#: Engine/sread.c:761
+#: Engine/sread.c:768
 msgid "Invalid macro name for --smacro"
 msgstr ""
 
-#: Engine/sread.c:865
+#: Engine/sread.c:872
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr ""
 
-#: Engine/sread.c:934
+#: Engine/sread.c:942
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:948
+#: Engine/sread.c:956
 msgid "{: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:957
+#: Engine/sread.c:965
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:963
+#: Engine/sread.c:971
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1047
+#: Engine/sread.c:1056
 msgid "r: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:1049
+#: Engine/sread.c:1058
 #, c-format
 msgid "Repeats=%d\n"
 msgstr ""
 
-#: Engine/sread.c:1093
+#: Engine/sread.c:1102
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr ""
 
-#: Engine/sread.c:1108
+#: Engine/sread.c:1117
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr ""
 
-#: Engine/sread.c:1133
+#: Engine/sread.c:1142
 #, c-format
 msgid "Name %s not found"
 msgstr ""
 
-#: Engine/sread.c:1135
+#: Engine/sread.c:1144
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr ""
 
-#: Engine/sread.c:1164
+#: Engine/sread.c:1174
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1189
+#: Engine/sread.c:1199
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1251
+#: Engine/sread.c:1261
 msgid "No previous event for ^"
 msgstr ""
 
-#: Engine/sread.c:1256
+#: Engine/sread.c:1266
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1286
+#: Engine/sread.c:1296
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1289
+#: Engine/sread.c:1299
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
-#: Engine/sread.c:1761 Engine/sread.c:1775
+#: Engine/sread.c:1300 Engine/sread.c:1305 Engine/sread.c:1754
+#: Engine/sread.c:1777 Engine/sread.c:1791
 msgid "      remainder of line flushed\n"
 msgstr ""
 
-#: Engine/sread.c:1294
+#: Engine/sread.c:1304
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1373
+#: Engine/sread.c:1384
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr ""
 
-#: Engine/sread.c:1393
+#: Engine/sread.c:1404
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1539
+#: Engine/sread.c:1550
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1570
+#: Engine/sread.c:1581
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1630
+#: Engine/sread.c:1627 Engine/sread.c:1635
+msgid "Syntax error in macro definition"
+msgstr ""
+
+#: Engine/sread.c:1646
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr ""
 
-#: Engine/sread.c:1642
+#: Engine/sread.c:1658
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1671
+#: Engine/sread.c:1687
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr ""
 
-#: Engine/sread.c:1681
+#: Engine/sread.c:1697
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1700
+#: Engine/sread.c:1716
 msgid "unknown # option"
 msgstr ""
 
-#: Engine/sread.c:1737
+#: Engine/sread.c:1753
 #, c-format
 msgid "illegal opcode %c"
 msgstr ""
 
-#: Engine/sread.c:1760
+#: Engine/sread.c:1776
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1774
+#: Engine/sread.c:1790
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1781
+#: Engine/sread.c:1797
 msgid "unmatched quote"
 msgstr ""
 
-#: Engine/sread.c:1825
+#: Engine/sread.c:1841
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1831
+#: Engine/sread.c:1847
 msgid "   zero substituted.\n"
 msgstr ""
 
@@ -2196,16 +2197,11 @@ msgstr ""
 msgid "    String truncated\n"
 msgstr ""
 
-#: Engine/symbtab.c:208
+#: Engine/symbtab.c:211
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:345
-#, c-format
-msgid "Unknown word type for %s on line %d\n"
-msgstr ""
-
 #: Engine/twarp.c:88
 msgid "twarp: illegal opcode\n"
 msgstr ""
@@ -2222,11 +2218,11 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
-#: InOut/cmidi.c:233
+#: InOut/cmidi.c:236
 msgid "CoreMIDI real time MIDI plugin for Csound\n"
 msgstr ""
 
-#: InOut/cmidi.c:247
+#: InOut/cmidi.c:250
 msgid "rtmidi: CoreMIDI module enabled\n"
 msgstr ""
 
@@ -2281,7 +2277,7 @@ msgstr ""
 msgid "writing %d sample blks of %d-bit floats to %s \n"
 msgstr ""
 
-#: InOut/libsnd.c:744 util/srconv.c:484
+#: InOut/libsnd.c:744 util/srconv.c:485
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr ""
@@ -2845,182 +2841,182 @@ msgstr ""
 msgid "rtmidi: PortMIDI module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:110
+#: InOut/rtalsa.c:113
 msgid "--scheduler: invalid priority value; the allowed range is:"
 msgstr ""
 
-#: InOut/rtalsa.c:111
+#: InOut/rtalsa.c:114
 msgid "  -20 to -1: set nice level"
 msgstr ""
 
-#: InOut/rtalsa.c:112
+#: InOut/rtalsa.c:115
 msgid "          0: normal scheduling, but lock memory"
 msgstr ""
 
-#: InOut/rtalsa.c:113
+#: InOut/rtalsa.c:116
 #, c-format
 msgid "    1 to %d: SCHED_RR with the specified priority (DANGEROUS)"
 msgstr ""
 
-#: InOut/rtalsa.c:330
+#: InOut/rtalsa.c:333
 #, c-format
 msgid " *** Cannot open device '%s' for audio output: %s"
 msgstr ""
 
-#: InOut/rtalsa.c:333
+#: InOut/rtalsa.c:336
 #, c-format
 msgid " *** Cannot open device '%s' for audio input: %s"
 msgstr ""
 
-#: InOut/rtalsa.c:394
+#: InOut/rtalsa.c:397
 #, c-format
 msgid "ALSA: -B %d not allowed on this device; using %d instead\n"
 msgstr ""
 
-#: InOut/rtalsa.c:417
+#: InOut/rtalsa.c:420
 #, c-format
 msgid "ALSA: -b %d not allowed on this device; using %d instead\n"
 msgstr ""
 
-#: InOut/rtalsa.c:430
+#: InOut/rtalsa.c:433
 #, c-format
 msgid "ALSA %s: total buffer size: %d, period size: %d\n"
 msgstr ""
 
-#: InOut/rtalsa.c:506
+#: InOut/rtalsa.c:509
 msgid " *** ALSA: must specify a device name, not a number (e.g. -odac:hw:0,0)"
 msgstr ""
 
-#: InOut/rtalsa.c:514
+#: InOut/rtalsa.c:517
 #, c-format
 msgid " *** ALSA: %s: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:601
+#: InOut/rtalsa.c:604
 msgid "Error reading data from audio input device"
 msgstr ""
 
-#: InOut/rtalsa.c:646
+#: InOut/rtalsa.c:649
 msgid "Error writing data to audio output device"
 msgstr ""
 
-#: InOut/rtalsa.c:687
+#: InOut/rtalsa.c:690
 msgid "ALSA MIDI: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:694
+#: InOut/rtalsa.c:697
 #, c-format
 msgid "ALSA: error opening MIDI input device: '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:698
+#: InOut/rtalsa.c:701
 #, c-format
 msgid "ALSA: opened MIDI input device '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:717
+#: InOut/rtalsa.c:720
 msgid "ALSA midi: Using all devices.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:746
+#: InOut/rtalsa.c:749
 #, c-format
 msgid "ALSA midi: Error opening device: %s\n"
 msgstr ""
 
-#: InOut/rtalsa.c:768
+#: InOut/rtalsa.c:771
 msgid "ALSA midi: No devices found.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:867
+#: InOut/rtalsa.c:870
 #, c-format
 msgid "ALSA: error opening MIDI output device '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:870
+#: InOut/rtalsa.c:873
 #, c-format
 msgid "ALSA: opened MIDI output device '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:910
+#: InOut/rtalsa.c:913
 msgid "-M stdin fcntl failed"
 msgstr ""
 
-#: InOut/rtalsa.c:918
+#: InOut/rtalsa.c:921
 #, c-format
 msgid "cannot open %s"
 msgstr ""
 
-#: InOut/rtalsa.c:929
+#: InOut/rtalsa.c:932
 msgid "MIDI receive: cannot get termios info."
 msgstr ""
 
-#: InOut/rtalsa.c:937
+#: InOut/rtalsa.c:940
 msgid "MIDI receive: cannot set input baud rate."
 msgstr ""
 
-#: InOut/rtalsa.c:943
+#: InOut/rtalsa.c:946
 msgid "MIDI receive: cannot set termios."
 msgstr ""
 
-#: InOut/rtalsa.c:947
+#: InOut/rtalsa.c:950
 #, c-format
 msgid "Opened MIDI input device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:987
+#: InOut/rtalsa.c:990
 #, c-format
 msgid "sensMIDI: retval errno %d"
 msgstr ""
 
-#: InOut/rtalsa.c:1054
+#: InOut/rtalsa.c:1057
 #, c-format
 msgid "Error opening MIDI output device file '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:1058
+#: InOut/rtalsa.c:1061
 #, c-format
 msgid "Opened MIDI output device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
+#: InOut/rtalsa.c:1104 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1106
+#: InOut/rtalsa.c:1109
 msgid "RT scheduler priority, alsa module"
 msgstr ""
 
-#: InOut/rtalsa.c:1111
+#: InOut/rtalsa.c:1114
 msgid "ALSA real-time audio and MIDI module for Csound by Istvan Varga\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1142
+#: InOut/rtalsa.c:1145
 msgid "rtaudio: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1157
+#: InOut/rtalsa.c:1160
 msgid "rtmidi: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1166
+#: InOut/rtalsa.c:1169
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtauhal.c:163
+#: InOut/rtauhal.c:162
 #, c-format
 msgid "selected input device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:166
+#: InOut/rtauhal.c:165
 #, c-format
 msgid "selected output device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:524
+#: InOut/rtauhal.c:523
 msgid "AuHAL module: device closed\n"
 msgstr ""
 
-#: InOut/rtauhal.c:541
+#: InOut/rtauhal.c:540
 msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
 msgstr ""
 
@@ -3115,7 +3111,7 @@ msgstr ""
 
 #: InOut/rtjack.c:317 InOut/rtjack.c:330 InOut/rtjack.c:335 InOut/rtjack.c:552
 #: InOut/rtjack.c:590 InOut/rtjack.c:595 InOut/rtjack.c:616 InOut/rtjack.c:621
-#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315 Opcodes/ftgen.c:79
+#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315
 msgid "memory allocation failure"
 msgstr ""
 
@@ -3677,58 +3673,58 @@ msgstr ""
 msgid "diskin2: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:231
+#: OOps/diskin2.c:232
 #, c-format
 msgid ""
 "diskin2: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:240
+#: OOps/diskin2.c:242
 msgid ""
 "diskin2: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:270
+#: OOps/diskin2.c:272
 #, c-format
 msgid "diskin2: warning: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:331
+#: OOps/diskin2.c:334
 msgid "diskin2: not initialised"
 msgstr ""
 
-#: OOps/diskin2.c:560
+#: OOps/diskin2.c:566
 msgid "soundin: invalid number of channels"
 msgstr ""
 
-#: OOps/diskin2.c:581
+#: OOps/diskin2.c:587
 msgid "soundin: unknown sample format"
 msgstr ""
 
-#: OOps/diskin2.c:591
+#: OOps/diskin2.c:597
 #, c-format
 msgid "soundin: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:599
+#: OOps/diskin2.c:605
 #, c-format
 msgid ""
 "soundin: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:609
+#: OOps/diskin2.c:615
 msgid ""
 "soundin: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:618
+#: OOps/diskin2.c:624
 #, c-format
 msgid "soundin: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:651
+#: OOps/diskin2.c:657
 msgid "soundin: not initialised"
 msgstr ""
 
@@ -3911,33 +3907,37 @@ msgid "tempest: not initialised"
 msgstr ""
 
 #: OOps/dumpf.c:45 OOps/dumpf.c:70 OOps/dumpf.c:95 OOps/dumpf.c:120
-#: OOps/dumpf.c:261 OOps/dumpf.c:288 OOps/dumpf.c:315 OOps/dumpf.c:342
+#: OOps/dumpf.c:263 OOps/dumpf.c:290 OOps/dumpf.c:317 OOps/dumpf.c:344
 msgid "unknown format request"
 msgstr ""
 
 #: OOps/dumpf.c:49 OOps/dumpf.c:74 OOps/dumpf.c:99 OOps/dumpf.c:124
-#: OOps/dumpf.c:265 OOps/dumpf.c:292 OOps/dumpf.c:319 OOps/dumpf.c:346
+#: OOps/dumpf.c:267 OOps/dumpf.c:294 OOps/dumpf.c:321 OOps/dumpf.c:348
 msgid "alaw and ulaw not implemented here"
 msgstr ""
 
-#: OOps/dumpf.c:193 OOps/dumpf.c:442
+#: OOps/dumpf.c:193 OOps/dumpf.c:443
 msgid "unknown kdump format"
 msgstr ""
 
+#: OOps/dumpf.c:196
+msgid "write failure in dumpk"
+msgstr ""
+
 #: OOps/fftlib.c:3195
 #, c-format
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:93
+#: OOps/goto_ops.c:95
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:186
+#: OOps/goto_ops.c:188
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:191
+#: OOps/goto_ops.c:193
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -3954,11 +3954,11 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
-#: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
-#: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
-#: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
-#: Opcodes/midiops2.c:388 Opcodes/midiops2.c:438 Opcodes/midiops2.c:472
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/midiops2.c:59
+#: Opcodes/midiops2.c:76 Opcodes/midiops2.c:120 Opcodes/midiops2.c:154
+#: Opcodes/midiops2.c:221 Opcodes/midiops2.c:252 Opcodes/midiops2.c:316
+#: Opcodes/midiops2.c:335 Opcodes/midiops2.c:375 Opcodes/midiops2.c:406
+#: Opcodes/midiops2.c:456 Opcodes/midiops2.c:490
 msgid "illegal controller number"
 msgstr ""
 
@@ -4488,7 +4488,7 @@ msgstr ""
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:261 Opcodes/socksend.c:305
+#: OOps/remote.c:261 Opcodes/socksend.c:300
 msgid "write to socket failed"
 msgstr ""
 
@@ -4505,15 +4505,15 @@ msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
 #: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
-#: Opcodes/socksend.c:284
+#: Opcodes/sockrecv.c:345
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:316 Opcodes/socksend.c:289
+#: OOps/remote.c:316 Opcodes/sockrecv.c:350
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:321 Opcodes/socksend.c:295
+#: OOps/remote.c:321 Opcodes/sockrecv.c:356
 msgid "accept failed"
 msgstr ""
 
@@ -4578,7 +4578,7 @@ msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
 
-#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:834
+#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:839
 msgid "Instrument not defined"
 msgstr ""
 
@@ -4792,8 +4792,6 @@ msgid "oscil(krate): not initialised"
 msgstr ""
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
-#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr ""
 
@@ -4909,7 +4907,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5096,1331 +5094,462 @@ msgstr ""
 msgid "pan: not initialised"
 msgstr ""
 
-#: OOps/ugrw1.c:922 OOps/ugrw1.c:1247
+#: OOps/ugrw1.c:922 OOps/ugrw1.c:1234
 #, c-format
 msgid "Table write offset %f < 0 or > tablelength"
 msgstr ""
 
-#: OOps/ugrw1.c:1242
+#: OOps/ugrw1.c:1229
 #, c-format
 msgid "Table write k rate function table no. %f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1290 OOps/ugrw1.c:1313 OOps/ugrw1.c:1392
+#: OOps/ugrw1.c:1277 OOps/ugrw1.c:1300 OOps/ugrw1.c:1379
 #, c-format
 msgid "Table %f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1469
+#: OOps/ugrw1.c:1456
 #, c-format
 msgid "Table no. < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f\n"
 msgstr ""
 
-#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1558 OOps/ugrw1.c:1770 OOps/ugrw1.c:1811
+#: OOps/ugrw1.c:1472 OOps/ugrw1.c:1545 OOps/ugrw1.c:1757 OOps/ugrw1.c:1798
 #, c-format
 msgid "Destination dft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1498 OOps/ugrw1.c:1569
+#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1556
 #, c-format
 msgid "Source 1 s1ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1508 OOps/ugrw1.c:1577
+#: OOps/ugrw1.c:1495 OOps/ugrw1.c:1564
 #, c-format
 msgid "Source 2 s2ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1543
+#: OOps/ugrw1.c:1530
 #, c-format
 msgid "Table number < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1758 OOps/ugrw1.c:1800
+#: OOps/ugrw1.c:1745 OOps/ugrw1.c:1787
 #, c-format
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
-#: Opcodes/fareyseq.c:475
+#: OOps/ugrw1.c:1768 OOps/ugrw1.c:1809
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1911 OOps/ugrw1.c:2032
+#: OOps/ugrw1.c:1898 OOps/ugrw1.c:2019
 #, c-format
 msgid "Table kfn=%.2f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1919 OOps/ugrw1.c:2040
+#: OOps/ugrw1.c:1906 OOps/ugrw1.c:2027
 #, c-format
 msgid "kfn table %.2f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1931 OOps/ugrw1.c:2053
+#: OOps/ugrw1.c:1918 OOps/ugrw1.c:2040
 #, c-format
 msgid "Table kfn=%.2f length %ld shorter than ksmps %d"
 msgstr ""
 
-#: OOps/ugrw1.c:1940 OOps/ugrw1.c:2062
+#: OOps/ugrw1.c:1927 OOps/ugrw1.c:2049
 #, c-format
 msgid "kstart %.2f is outside table %.2f range 0 to %ld"
 msgstr ""
 
-#: OOps/ugrw1.c:2156
+#: OOps/ugrw1.c:2143
 msgid "zakinit should only be called once."
 msgstr ""
 
-#: OOps/ugrw1.c:2160
+#: OOps/ugrw1.c:2147
 msgid "zakinit: both isizea and isizek should be > 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2191
+#: OOps/ugrw1.c:2178
 msgid "No zk space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2210
+#: OOps/ugrw1.c:2197
 msgid "zkr index > isizek. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2214
+#: OOps/ugrw1.c:2201
 msgid "zkr index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2242
-msgid "zir index > isizek. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2246
-msgid "zir index < 0. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2268
-msgid "zkw index > isizek. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2271
-msgid "zkw index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2296
-msgid "ziw index > isizek. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2299
-msgid "ziw index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2323
-msgid "zkwm index > isizek. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2326
-msgid "zkwm index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2359
-msgid "ziwm index > isizek. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2362
-msgid "ziwm index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2406
-msgid "zkmod kzkmod > isizek. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2432
-msgid "zkcl first or last > isizek. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2435
-msgid "zkcl first or last < 0. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2439
-msgid "zkcl first > last. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2461
-msgid "No za space: zakinit has not been called yet."
-msgstr ""
-
-#: OOps/ugrw1.c:2487
-msgid "zar index > isizea. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2491
-msgid "zar index < 0. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2523
-msgid "zarg index > isizea. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2528
-msgid "zarg index < 0. Returning 0."
-msgstr ""
-
-#: OOps/ugrw1.c:2559 OOps/ugrw1.c:2590
-msgid "zaw index > isizea. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2562 OOps/ugrw1.c:2593
-msgid "zaw index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2646
-msgid "zamod kzamod > isizea. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:2678
-msgid "zacl first or last > isizea. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2682
-msgid "zacl first or last < 0. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2687
-msgid "zacl first > last. Not clearing."
-msgstr ""
-
-#: OOps/ugrw1.c:2819
-msgid "printk not initialised"
-msgstr ""
-
-#: OOps/ugrw1.c:2837
-#, c-format
-msgid "time %11.5f: "
-msgstr ""
-
-#: OOps/ugrw1.c:2898
-msgid "printks param 1 was not a \"quoted string\""
-msgstr ""
-
-#: OOps/ugrw1.c:3114
-msgid "printks not initialised"
-msgstr ""
-
-#: OOps/ugrw1.c:3245
-msgid "inz index > isizea. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:3247
-msgid "inz index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:3281 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
-msgid "outz index > isizea. No output"
-msgstr ""
-
-#: OOps/ugrw1.c:3283 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
-msgid "outz index < 0. No output."
-msgstr ""
-
-#: OOps/ugrw2.c:283
-#, c-format
-msgid "Illegal resonk iscl value, %f"
-msgstr ""
-
-#: OOps/vdelay.c:132 OOps/vdelay.c:377 OOps/vdelay.c:437 OOps/vdelay.c:503
-#: OOps/vdelay.c:569 OOps/vdelay.c:648 OOps/vdelay.c:727
-msgid "vdelay: not initialised"
-msgstr ""
-
-#: OOps/vdelay.c:234
-msgid "vdelay3: not initialised"
-msgstr ""
-
-#: OOps/vdelay.c:736
-msgid "Wrong input count in multitap\n"
-msgstr ""
-
-#: OOps/vdelay.c:779
-msgid "multitap: not initialised"
-msgstr ""
-
-#: OOps/vdelay.c:899
-msgid "High frequency diffusion not in (0, 1)\n"
-msgstr ""
-
-#: OOps/vdelay.c:915
-#, c-format
-msgid "reverbx; Combs ftable must have %d time and %d gain values"
-msgstr ""
-
-#: OOps/vdelay.c:947
-#, c-format
-msgid "reverbx; Alpas ftable must have %d time and %d gain values"
-msgstr ""
-
-#: OOps/vdelay.c:1058
-msgid "High frequency diffusion>1\n"
-msgstr ""
-
-#: OOps/vdelay.c:1062
-msgid "High frequency diffusion<0\n"
-msgstr ""
-
-#: OOps/vdelay.c:1066
-msgid "Non positive reverb time\n"
-msgstr ""
-
-#: OOps/vdelay.c:1124
-msgid "reverbx: not initialised"
-msgstr ""
-
-#: Opcodes/ambicode1.c:82
-msgid "The numbers of input and output arguments are not valid."
-msgstr ""
-
-#: Opcodes/ambicode1.c:165
-msgid "The number of input arguments is not valid."
-msgstr ""
-
-#: Opcodes/ambicode1.c:169
-msgid "The isetup value should be between 1 and 5."
-msgstr ""
-
-#: Opcodes/ambicode1.c:195
-msgid "The output channel count does not match the isetup value."
-msgstr ""
-
-#: Opcodes/ambicode.c:49
-msgid "bformenc is deprecated; use bformenc1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:88
-msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
-msgstr ""
-
-#: Opcodes/ambicode.c:287
-msgid "bformdec is deprecated; use bformdec1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:291
-msgid "Wrong number of input arguments!"
-msgstr ""
-
-#: Opcodes/ambicode.c:299
-msgid "Wrong number of output cells! There must be 2 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:344
-msgid "Wrong number of output cells! There must be 4 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
-msgid "Wrong number of output cells! There must be 5 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
-msgid "Wrong number of output cells! There must be 8 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:575
-msgid "Not supported setup number!"
-msgstr ""
-
-#: Opcodes/babo.c:742
-#, c-format
-msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
-msgstr ""
-
-#: Opcodes/bilbar.c:83
-msgid "No data to continue"
-msgstr ""
-
-#: Opcodes/bilbar.c:109
-msgid "Ends must be clamped(1), pivoting(2) or free(3)"
-msgstr ""
-
-#: Opcodes/biquad.c:599
-msgid "vco: not initialised"
-msgstr ""
-
-#: Opcodes/bowedbar.c:53
-#, c-format
-msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
-msgstr ""
-
-#: Opcodes/bowedbar.c:98
-msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
-msgstr ""
-
-#: Opcodes/clfilt.c:53
-msgid "filter type not lowpass or highpass in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:59
-#, c-format
-msgid "filter kind, %d, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:63
-#, c-format
-msgid "number of poles, %f, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:69
-#, c-format
-msgid "odd number of poles chosen in clfilt, rounded to %d"
-msgstr ""
-
-#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
-#, c-format
-msgid "passband ripple must be positive in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
-#, c-format
-msgid "passband ripple must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
-#, c-format
-msgid "stopband attenuation must be negative in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
-#, c-format
-msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
-msgid "Lowpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
-#: Opcodes/clfilt.c:383
-msgid "code error, ikind out of range"
-msgstr ""
-
-#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
-msgid "Highpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
-msgid "code error, ihilo out of range"
-msgstr ""
-
-#: Opcodes/control.c:40
-msgid "control: failed to allocate globals"
-msgstr ""
-
-#: Opcodes/control.c:56
-#, c-format
-msgid "Closing down wish(%d)\n"
-msgstr ""
-
-#: Opcodes/control.c:202
-#, c-format
-msgid "Slider %d set to %s\n"
-msgstr ""
-
-#: Opcodes/control.c:207
-#, c-format
-msgid "Unknown control %d"
-msgstr ""
-
-#: Opcodes/cpumeter.c:77
-#, c-format
-msgid "Failed to open /proc/stat: %s"
-msgstr ""
-
-#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
-#: Opcodes/cpumeter.c:151
-msgid "failed /proc/stat read"
-msgstr ""
-
-#: Opcodes/crossfm.c:34
-msgid "crossfm: ftable not found"
-msgstr ""
-
-#: Opcodes/date.c:68
-msgid "dates: buffer overflow"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/dssi4cs.c:823
-msgid "DSSI4CS: Not initialised or wrong argument types."
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:120
-#, c-format
-msgid "Failed to load plugin \"%s\": %s"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:155
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\": "
-"%s.\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:161
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\".\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:176
-#, c-format
-msgid "Unable to find label \"%s\" in plugin library file \"%s\"."
-msgstr ""
-
-#: Opcodes/fareygen.c:140
-msgid "insufficient arguments for fareytable"
-msgstr ""
-
-#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
-#, c-format
-msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:256
-#, c-format
-msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
-#, c-format
-msgid "Farey: Destination dft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
-#, c-format
-msgid "Farey: Source sft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:306
-msgid "Farey: Filter type < 1"
-msgstr ""
-
-#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
-#, c-format
-msgid "Table no. < 1 sft=%.2f"
-msgstr ""
-
-#: Opcodes/filter.c:187 Opcodes/filter.c:225
-msgid "Filter order out of bounds: (1 <= nb < 51, 0 <= na <= 50)"
-msgstr ""
-
-#: Opcodes/filter.c:672
-msgid "too many iterations in laguer"
-msgstr ""
-
-#: Opcodes/flanger.c:188
-msgid "wguide2 xfreq1 and xfreq2 arguments must be both a-rate or k and i-rate"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:195
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:149
-msgid "error allocating fluid engine\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:203
-#, c-format
-msgid ""
-"Created fluidEngine %d with sampling rate = %f, chorus %s, reverb %s, "
-"channels %d, polyphony %d.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:230
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:392
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:553
-#, c-format
-msgid "Illegal Engine Number: %i.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:238
-#, c-format
-msgid "Loading SoundFont : %s.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:244
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:208
-#, c-format
-msgid "fluid: unable to load %s"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:262
-#, c-format
-msgid "SoundFont: %3d  Bank: %3d  Preset: %3d  %s\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:483
-#, c-format
-msgid ""
-"result: %d \n"
-" Note off: c:%3d k:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:491
-#, c-format
-msgid ""
-"result: %d \n"
-"Note on: c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:496
-#, c-format
-msgid "Key pressure (not handled): c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:504
-#, c-format
-msgid "Result: %d Control change: c:%3d c:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:511
-#, c-format
-msgid "Result: %d Program change: c:%3d p:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:524
-#, c-format
-msgid "Result: %d, Pitch bend:     c:%d b:%d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:530
-#, c-format
-msgid "System exclusive (not handled): c:%3d v1:%3d v2:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:562
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:577
-msgid "Illegal Interpolation Method: Must be either 0, 1, 4, or 7.\n"
-msgstr ""
-
-#: Opcodes/fm4op.c:165
-msgid "No table for VibWaveato"
-msgstr ""
-
-#: Opcodes/fm4op.c:184
-msgid "No table for FM4Op"
-msgstr ""
-
-#: Opcodes/follow.c:38
-msgid "follow - zero length!"
-msgstr ""
-
-#: Opcodes/fout.c:60
-#, c-format
-msgid "Closing file '%s'...\n"
-msgstr ""
-
-#: Opcodes/fout.c:102
-msgid "invalid file handle"
-msgstr ""
-
-#: Opcodes/fout.c:109 Opcodes/fout.c:421
-msgid "invalid file name"
-msgstr ""
-
-#: Opcodes/fout.c:166
-#, c-format
-msgid "error opening file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:193
-#, c-format
-msgid "error opening sound file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:430
-#, c-format
-msgid "cannot close '%s': not found in list of open files"
-msgstr ""
-
-#: Opcodes/fout.c:441
-#, c-format
-msgid "cannot close file #%d: not a valid handle"
-msgstr ""
-
-#: Opcodes/fout.c:448
-#, c-format
-msgid "file #%d (%s) is in use, will be closed when released"
-msgstr ""
-
-#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
-msgid "fouti: invalid file handle"
-msgstr ""
-
-#: Opcodes/freeverb.c:258
-msgid "freeverb: not initialised"
-msgstr ""
-
-#: Opcodes/ftconv.c:156
-msgid "ftconv: invalid number of channels"
-msgstr ""
-
-#: Opcodes/ftconv.c:161
-msgid "ftconv: invalid impulse response partition length"
-msgstr ""
-
-#: Opcodes/ftconv.c:175
-msgid "ftconv: invalid length, or insufficient IR data for convolution"
-msgstr ""
-
-#: Opcodes/ftconv.c:193
-msgid "ftconv: skipped non-zero samples, impulse response may be truncated\n"
-msgstr ""
-
-#: Opcodes/ftconv.c:289
-msgid "ftconv: not initialised"
-msgstr ""
-
-#: Opcodes/ftgen.c:69 Opcodes/ftgen.c:182
-#, c-format
-msgid "Error deleting ftable %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:136 Opcodes/signalflowgraph.cpp:895
-msgid "ftgen string arg not allowed"
-msgstr ""
-
-#: Opcodes/ftgen.c:155 Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
-msgid "ftgen error"
-msgstr ""
-
-#: Opcodes/ftgen.c:179
-#, c-format
-msgid "Invalid table number: %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:347
-msgid "ftload: error allocating ftable"
-msgstr ""
-
-#: Opcodes/ftgen.c:349
-msgid "ftload: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:351
-msgid "ftload: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:354
-msgid "ftload: incorrect file"
-msgstr ""
-
-#: Opcodes/ftgen.c:467
-msgid "ftsave: Bad table number. Saving is possible only for existing tables."
-msgstr ""
-
-#: Opcodes/ftgen.c:470
-msgid "ftsave: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:472
-msgid "ftsave: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:474
-msgid "ftsave: failed to write file"
-msgstr ""
-
-#: Opcodes/gab/gab.c:111
-msgid "fastab: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
-msgid "tabw off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
-msgid "tab off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:185
-msgid "tab_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:192
-#, c-format
-msgid "tab_i off end: table number: %d\n"
-msgstr ""
-
-#: Opcodes/gab/gab.c:204
-msgid "tabw_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:211
-msgid "tabw_i off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:249
-msgid "tab_init: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:318
-msgid "printi parameter was not a \"quoted string\""
-msgstr ""
-
-#: Opcodes/gab/gab.c:425
-msgid "adsynt2: wavetable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:437
-msgid "adsynt2: freqtable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:442
-msgid "adsynt2: partial count is greater than freqtable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:451
-msgid "adsynt2: amptable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:456
-msgid "adsynt2: partial count is greater than amptable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:501
-msgid "adsynt2: not initialised"
-msgstr ""
-
-#: Opcodes/gab/gab.c:743
-msgid "max_k: invalid imaxflag value"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:70
-msgid "hvs1: a line segment must be delimited by 2 points at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:152
-msgid "hvs2: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:248
-msgid "hvs3: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:390
-msgid "vphaseseg: the first function is invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
-msgid "vphaseseg: invalid num. of elements"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:416
-msgid "vphaseseg: function invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
-msgid "vtable1: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
-msgid "copyTabElems: incorrect destination table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
-msgid ""
-"copyTabElems: destination table too short or number of elements to copy too "
-"big"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
-msgid "copyTabElems: incorrect source table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
-msgid ""
-"copyTabElems: source table size less than the number of elements to copy"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
-msgid "copyTabElems: source table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
-msgid "copyTabElems: destination table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:347
-msgid "inrg: audio input is not enabled"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:362
-msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:403
-msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
-#: Opcodes/gab/newgabopc.c:672
-msgid "invalid function"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:443
-msgid "lposc: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:577
-msgid "lposcil: no sample rate stored in function assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:674
-msgid "lposcil: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
-#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
-#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
-msgid "illegal channel"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
-#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
-#, c-format
-msgid "illegal control number at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:76
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d.  When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
-#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
-#: Opcodes/midiops3.c:347
-#, c-format
-msgid "illegal initvalue at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
-msgid "sliderXtable: zero is illegal in exponential operations"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:315
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d. When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
-#: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
-#: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
-msgid "illegal midi channel"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:43
-msgid "tabmorph: invalid table number"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:47
-msgid "tabmorph: all tables must have the same length!"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:35
-msgid "mtablei: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
-#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
-msgid "mtable: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:187
-msgid "mtabi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:254
-msgid "mtablewi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
-#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
-#: Opcodes/gab/vectorial.c:408
-msgid "mtabw: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:350
-msgid "mtabwi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:382
-msgid "mtablew: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
-#, c-format
-msgid "vadd_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:473
-msgid "vadd_i: ifn length exceeded"
+#: OOps/ugrw1.c:2229
+msgid "zir index > isizek. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:500
-msgid "vadd: ifn1 length exceeded"
+#: OOps/ugrw1.c:2233
+msgid "zir index < 0. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:532
-msgid "vmult_i: ifn length exceeded"
+#: OOps/ugrw1.c:2255
+msgid "zkw index > isizek. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:559
-msgid "vmult: ifn1 length exceeded"
+#: OOps/ugrw1.c:2258
+msgid "zkw index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:575
-#, c-format
-msgid "vpow_i: invalid table number %i"
+#: OOps/ugrw1.c:2283
+msgid "ziw index > isizek. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:592
-msgid "vpow_i: ifn length exceeded"
+#: OOps/ugrw1.c:2286
+msgid "ziw index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:620
-msgid "vpow: ifn1 length exceeded"
+#: OOps/ugrw1.c:2310
+msgid "zkwm index > isizek. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:636
-#, c-format
-msgid "vexp_i: invalid table number %i"
+#: OOps/ugrw1.c:2313
+msgid "zkwm index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:652
-msgid "vexp_i: ifn length exceeded"
+#: OOps/ugrw1.c:2346
+msgid "ziwm index > isizek. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:679
-msgid "vexp: ifn1 length exceeded"
+#: OOps/ugrw1.c:2349
+msgid "ziwm index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:697
-#, c-format
-msgid "vectorsop: ifn1 invalid table number %i"
+#: OOps/ugrw1.c:2393
+msgid "zkmod kzkmod > isizek. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:702
-#, c-format
-msgid "vectorsop: ifn2 invalid table number %i"
+#: OOps/ugrw1.c:2419
+msgid "zkcl first or last > isizek. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:742
-msgid "vcopy: ifn1 length exceeded"
+#: OOps/ugrw1.c:2422
+msgid "zkcl first or last < 0. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:760
-msgid "vcopy: ifn2 length exceeded"
+#: OOps/ugrw1.c:2426
+msgid "zkcl first > last. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:787
-#, c-format
-msgid "vcopy_i: ifn1 invalid table number %i"
+#: OOps/ugrw1.c:2448
+msgid "No za space: zakinit has not been called yet."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:792
-#, c-format
-msgid "vcopy_i: ifn2 invalid table number %i"
+#: OOps/ugrw1.c:2474
+msgid "zar index > isizea. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:814
-msgid "vcopy_i: ifn1 length exceeded"
+#: OOps/ugrw1.c:2478
+msgid "zar index < 0. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:831
-msgid "vcopy_i: ifn2 length exceeded"
+#: OOps/ugrw1.c:2510
+msgid "zarg index > isizea. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:870
-msgid "vaddv: ifn1 length exceeded"
+#: OOps/ugrw1.c:2515
+msgid "zarg index < 0. Returning 0."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:889
-msgid "vaddv: ifn2 length exceeded"
+#: OOps/ugrw1.c:2546 OOps/ugrw1.c:2577
+msgid "zaw index > isizea. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:915
-#, c-format
-msgid "vaddv_i: ifn1 invalid table number %i"
+#: OOps/ugrw1.c:2549 OOps/ugrw1.c:2580
+msgid "zaw index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:920
-#, c-format
-msgid "vaddv_i: ifn2 invalid table number %i"
+#: OOps/ugrw1.c:2633
+msgid "zamod kzamod > isizea. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:942
-msgid "vaddv_i: ifn1 length exceeded"
+#: OOps/ugrw1.c:2665
+msgid "zacl first or last > isizea. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:960
-msgid "vaddv_i: ifn2 length exceeded"
+#: OOps/ugrw1.c:2669
+msgid "zacl first or last < 0. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:991
-msgid "vsubv: ifn1 length exceeded"
+#: OOps/ugrw1.c:2674
+msgid "zacl first > last. Not clearing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1010
-msgid "vsubv: ifn2 length exceeded"
+#: OOps/ugrw1.c:2806
+msgid "printk not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1037
+#: OOps/ugrw1.c:2824
 #, c-format
-msgid "vsubv_i: ifn1 invalid table number %i"
+msgid "time %11.5f: "
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1042
-#, c-format
-msgid "vsubv_i: ifn2 invalid table number %i"
+#: OOps/ugrw1.c:2885
+msgid "printks param 1 was not a \"quoted string\""
+msgstr ""
+
+#: OOps/ugrw1.c:3101
+msgid "printks not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1064
-msgid "vsubv_i: ifn1 length exceeded"
+#: OOps/ugrw1.c:3232
+msgid "inz index > isizea. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1082
-msgid "vsubv_i: ifn2 length exceeded"
+#: OOps/ugrw1.c:3234
+msgid "inz index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1119
-msgid "vmultv: ifn1 length exceeded"
+#: OOps/ugrw1.c:3268 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
+msgid "outz index > isizea. No output"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1138
-msgid "vmultv: ifn2 length exceeded"
+#: OOps/ugrw1.c:3270 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
+msgid "outz index < 0. No output."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1165
+#: OOps/ugrw2.c:283
 #, c-format
-msgid "vmultv_i: ifn1 invalid table number %i"
+msgid "Illegal resonk iscl value, %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1170
-#, c-format
-msgid "vmultv_i: ifn2 invalid table number %i"
+#: OOps/vdelay.c:132 OOps/vdelay.c:377 OOps/vdelay.c:437 OOps/vdelay.c:503
+#: OOps/vdelay.c:569 OOps/vdelay.c:648 OOps/vdelay.c:727
+msgid "vdelay: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1192
-msgid "vmultv_i: ifn1 length exceeded"
+#: OOps/vdelay.c:234
+msgid "vdelay3: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1209
-msgid "vmultv_i: ifn2 length exceeded"
+#: OOps/vdelay.c:738
+msgid "Wrong input count in multitap\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1246
-msgid "vdivv: ifn1 length exceeded"
+#: OOps/vdelay.c:781
+msgid "multitap: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1265
-msgid "vdivv: ifn2 length exceeded"
+#: OOps/vdelay.c:901
+msgid "High frequency diffusion not in (0, 1)\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1292
+#: OOps/vdelay.c:917
 #, c-format
-msgid "vdivv_i: ifn1 invalid table number %i"
+msgid "reverbx; Combs ftable must have %d time and %d gain values"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1297
+#: OOps/vdelay.c:949
 #, c-format
-msgid "vdivv_i: ifn2 invalid table number %i"
+msgid "reverbx; Alpas ftable must have %d time and %d gain values"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1319
-msgid "vdivv_i: ifn1 length exceeded"
+#: OOps/vdelay.c:1062
+msgid "High frequency diffusion>1\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1337
-msgid "vdivv_i: ifn2 length exceeded"
+#: OOps/vdelay.c:1066
+msgid "High frequency diffusion<0\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1374
-msgid "vpowv: ifn1 length exceeded"
+#: OOps/vdelay.c:1070
+msgid "Non positive reverb time\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1393
-msgid "vpowv: ifn2 length exceeded"
+#: OOps/vdelay.c:1128
+msgid "reverbx: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1420
-#, c-format
-msgid "vpowv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode1.c:82
+msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1425
-#, c-format
-msgid "vpowv_i: ifn2 invalid table number %i"
+#: Opcodes/ambicode1.c:167
+msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1447
-msgid "vpowv_i: ifn1 length exceeded"
+#: Opcodes/ambicode1.c:171
+msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1464
-msgid "vpowv_i: ifn2 length exceeded"
+#: Opcodes/ambicode1.c:197
+msgid "The output channel count does not match the isetup value."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1501
-msgid "vexpv: ifn1 length exceeded"
+#: Opcodes/ambicode.c:49
+msgid "bformenc is deprecated; use bformenc1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1520
-msgid "vexpv: ifn2 length exceeded"
+#: Opcodes/ambicode.c:88
+msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1547
-#, c-format
-msgid "vexpv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:287
+msgid "bformdec is deprecated; use bformdec1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1552
-#, c-format
-msgid "vexpv_i: ifn2 invalid table number %i"
+#: Opcodes/ambicode.c:291
+msgid "Wrong number of input arguments!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1574
-msgid "vexpv_i: ifn1 length exceeded"
+#: Opcodes/ambicode.c:299
+msgid "Wrong number of output cells! There must be 2 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1592
-msgid "vexpv_i: ifn2 length exceeded"
+#: Opcodes/ambicode.c:344
+msgid "Wrong number of output cells! There must be 4 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1629
-msgid "vmap: Error: ifn1 and ifn2 can not be the same"
+#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
+msgid "Wrong number of output cells! There must be 5 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1634
-#, c-format
-msgid "vmap: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
+msgid "Wrong number of output cells! There must be 8 output cells."
+msgstr ""
+
+#: Opcodes/ambicode.c:575
+msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1639
+#: Opcodes/babo.c:742
 #, c-format
-msgid "vmap: ifn2 invalid table number %i"
+msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1661
-msgid "vmap: ifn1 length exceeded"
+#: Opcodes/bilbar.c:83
+msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1678
-msgid "vmap: ifn2 length exceeded"
+#: Opcodes/bilbar.c:109
+msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1698
-msgid "vectorop: invalid num of elements"
+#: Opcodes/biquad.c:599
+msgid "vco: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1727
-msgid "vport: invalid table length or num of elements"
+#: Opcodes/bowedbar.c:53
+#, c-format
+msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1730
-msgid "vport: invalid table"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1735
-msgid "vport: invalid init table length or num of elements"
+#: Opcodes/cellular.c:49 Opcodes/cellular.c:55
+msgid "cell: invalid num of elements"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1738
-msgid "vport: invalid init table"
+#: Opcodes/cellular.c:51
+msgid "cell: invalid output table"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1875
-#, c-format
-msgid "vrandh: Seeding from current time %lu\n"
+#: Opcodes/cellular.c:58
+msgid "cell: invalid initial state table"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1888
-msgid "vrandh: Invalid table."
+#: Opcodes/cellular.c:63
+msgid "cell: invalid rule table"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1891
-msgid "vrandh: idstoffset is greater than table length."
+#: Opcodes/clfilt.c:53
+msgid "filter type not lowpass or highpass in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1896
-msgid "randh: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:59
+#, c-format
+msgid "filter kind, %d, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1975
+#: Opcodes/clfilt.c:63
 #, c-format
-msgid "vrandi: Seeding from current time %lu\n"
+msgid "number of poles, %f, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1987
-msgid "vrandi: Invalid table."
+#: Opcodes/clfilt.c:69
+#, c-format
+msgid "odd number of poles chosen in clfilt, rounded to %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1990
-msgid "vrandi: idstoffset is greater thantable length."
+#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
+#, c-format
+msgid "passband ripple must be positive in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1995
-msgid "vrandi: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
+#, c-format
+msgid "passband ripple must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
-#: Opcodes/gab/vectorial.c:2091
-msgid "vecdelay: invalid num of elements"
+#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
+#, c-format
+msgid "stopband attenuation must be negative in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2079
-msgid "vecdly: invalid output table"
+#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
+#, c-format
+msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2086
-msgid "vecdly: invalid input table"
+#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
+msgid "Lowpass Elliptical not implemented yet. Sorry!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2093
-msgid "vecdly: invalid delay table"
+#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
+#: Opcodes/clfilt.c:383
+msgid "code error, ikind out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2138
-msgid "vecdly: not initialised"
+#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
+msgid "Highpass Elliptical not implemented yet. Sorry!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2181
-msgid "vlinseg/vexpseg: invalid num. of elements"
+#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
+msgid "code error, ihilo out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
+#: Opcodes/control.c:40
+msgid "control: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
+#: Opcodes/control.c:56
+#, c-format
+msgid "Closing down wish(%d)\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2406
-msgid "vdelayk: not initialised"
+#: Opcodes/control.c:211
+#, c-format
+msgid "Slider %d set to %s\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
-msgid "cella: invalid num of elements"
+#: Opcodes/control.c:216
+#, c-format
+msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2441
-msgid "cella: invalid output table"
+#: Opcodes/cpumeter.c:77
+#, c-format
+msgid "Failed to open /proc/stat: %s"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2448
-msgid "cella: invalid initial state table"
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
+msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2452
-msgid "cella: invalid rule table"
+#: Opcodes/crossfm.c:34
+msgid "crossfm: ftable not found"
 msgstr ""
 
 #: Opcodes/grain4.c:59
@@ -6587,7 +5716,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1259
 msgid ""
 "\n"
 "WARNING: fades are overlapping: this could lead to noise: reduce fade size "
@@ -6623,29 +5752,29 @@ msgstr ""
 msgid "pvsifd: unsupported value for iwintype\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:426
+#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:429
 #, c-format
 msgid "imageload: cannot open image %s.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:111
+#: Opcodes/imageOpcodes.c:108 Opcodes/imageOpcodes.c:114
 #, c-format
 msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
-#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
-#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:122 Opcodes/imageOpcodes.c:129
+#: Opcodes/imageOpcodes.c:168 Opcodes/imageOpcodes.c:177
+#: Opcodes/imageOpcodes.c:191 Opcodes/imageOpcodes.c:294
+#: Opcodes/imageOpcodes.c:301 Opcodes/imageOpcodes.c:314
 msgid "imageload: out of memory.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:283
+#: Opcodes/imageOpcodes.c:286
 #, c-format
 msgid "imageload: cannot open image %s for writing.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:392
+#: Opcodes/imageOpcodes.c:395
 msgid "Cannot allocate memory.\n"
 msgstr ""
 
@@ -6689,29 +5818,29 @@ msgstr ""
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:892
+#: Opcodes/jacko.cpp:894
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:895
+#: Opcodes/jacko.cpp:897
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:911
+#: Opcodes/jacko.cpp:913
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
-#: Opcodes/jacko.cpp:1241
+#: Opcodes/jacko.cpp:957 Opcodes/jacko.cpp:1064 Opcodes/jacko.cpp:1171
+#: Opcodes/jacko.cpp:1243
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
-#: Opcodes/jacko.cpp:1255
+#: Opcodes/jacko.cpp:971 Opcodes/jacko.cpp:1079 Opcodes/jacko.cpp:1186
+#: Opcodes/jacko.cpp:1257
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6764,8 +5893,8 @@ msgstr ""
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
-#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:120
+#: Opcodes/pvlock.c:322 Opcodes/pvsbasic.c:463
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
@@ -6794,15 +5923,36 @@ msgstr ""
 msgid "splitrig: incorrect table number"
 msgstr ""
 
-#: Opcodes/midiops2.c:514 Opcodes/midiops2.c:529 Opcodes/midiops2.c:548
+#: Opcodes/midiops2.c:339 Opcodes/midiops2.c:377 Opcodes/midiops2.c:409
+#: Opcodes/midiops2.c:458 Opcodes/midiops2.c:493 Opcodes/midiops2.c:535
+#: Opcodes/midiops2.c:550 Opcodes/midiops2.c:569
+msgid "illegal midi channel"
+msgstr ""
+
+#: Opcodes/midiops2.c:532 Opcodes/midiops2.c:547 Opcodes/midiops2.c:566
 msgid "value out of range"
 msgstr ""
 
-#: Opcodes/midiops2.c:580
+#: Opcodes/midiops2.c:598
 #, c-format
 msgid "invalid channel number: %d"
 msgstr ""
 
+#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
+#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
+msgid "illegal channel"
+msgstr ""
+
+#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
+#, c-format
+msgid "illegal control number at position n.%d"
+msgstr ""
+
+#: Opcodes/midiops3.c:64 Opcodes/midiops3.c:168 Opcodes/midiops3.c:347
+#, c-format
+msgid "illegal initvalue at position n.%d"
+msgstr ""
+
 #: Opcodes/midiops3.c:333 Opcodes/midiops3.c:428
 #, c-format
 msgid "illegal msb control number at position n.%d"
@@ -6841,12 +5991,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
+#: Opcodes/mp3in.c:101 Opcodes/mp3in.c:242
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:140
+#: Opcodes/mp3in.c:148
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7000,6 +6150,10 @@ msgstr ""
 msgid "vco2init: invalid max table size"
 msgstr ""
 
+#: Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
+msgid "ftgen error"
+msgstr ""
+
 #: Opcodes/oscbnk.c:1757
 msgid "vco2init: invalid source ftable"
 msgstr ""
@@ -7056,72 +6210,72 @@ msgstr ""
 msgid "rbjeq: invalid filter type"
 msgstr ""
 
-#: Opcodes/OSC.c:122
+#: Opcodes/OSC.c:126
 msgid "Too many arguments to OSCsend"
 msgstr ""
 
-#: Opcodes/OSC.c:125
+#: Opcodes/OSC.c:129
 msgid "No a-rate arguments allowed"
 msgstr ""
 
-#: Opcodes/OSC.c:163 Opcodes/OSC.c:168 Opcodes/OSC.c:173 Opcodes/OSC.c:183
-#: Opcodes/OSC.c:190 Opcodes/OSC.c:195 Opcodes/OSC.c:206 Opcodes/OSC.c:214
-#: Opcodes/OSC.c:232
+#: Opcodes/OSC.c:167 Opcodes/OSC.c:172 Opcodes/OSC.c:177 Opcodes/OSC.c:187
+#: Opcodes/OSC.c:194 Opcodes/OSC.c:199 Opcodes/OSC.c:210 Opcodes/OSC.c:218
+#: Opcodes/OSC.c:236
 msgid "String not expected"
 msgstr ""
 
-#: Opcodes/OSC.c:202
+#: Opcodes/OSC.c:206
 msgid "Not a string when needed"
 msgstr ""
 
-#: Opcodes/OSC.c:219
+#: Opcodes/OSC.c:223
 msgid "Time stamp is two values"
 msgstr ""
 
-#: Opcodes/OSC.c:240
+#: Opcodes/OSC.c:244
 #, c-format
 msgid "ftable %.2f does not exist"
 msgstr ""
 
-#: Opcodes/OSC.c:249
+#: Opcodes/OSC.c:253
 #, c-format
 msgid "Unknown OSC type %c\n"
 msgstr ""
 
-#: Opcodes/OSC.c:428
+#: Opcodes/OSC.c:436
 msgid "OSC: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/OSC.c:446
+#: Opcodes/OSC.c:455
 msgid "OSCrecv is already running"
 msgstr ""
 
-#: Opcodes/OSC.c:589
+#: Opcodes/OSC.c:599
 msgid "OSC deinitiatised\n"
 msgstr ""
 
-#: Opcodes/OSC.c:613
+#: Opcodes/OSC.c:623
 #, c-format
 msgid "OSC listener #%d started on port %s\n"
 msgstr ""
 
-#: Opcodes/OSC.c:663
+#: Opcodes/OSC.c:673
 msgid "OSC not running"
 msgstr ""
 
-#: Opcodes/OSC.c:667
+#: Opcodes/OSC.c:677
 msgid "invalid handle"
 msgstr ""
 
-#: Opcodes/OSC.c:674
+#: Opcodes/OSC.c:684
 msgid "invalid number of arguments"
 msgstr ""
 
-#: Opcodes/OSC.c:695 Opcodes/OSC.c:700
+#: Opcodes/OSC.c:705 Opcodes/OSC.c:710
 msgid "argument list inconsistent with format string"
 msgstr ""
 
-#: Opcodes/OSC.c:704
+#: Opcodes/OSC.c:714
 msgid "invalid type"
 msgstr ""
 
@@ -7141,11 +6295,11 @@ msgstr ""
 msgid "partikkel: "
 msgstr ""
 
-#: Opcodes/partikkel.c:806
+#: Opcodes/partikkel.c:807
 msgid "partikkelsync: opcode id needs to be a non-zero integer"
 msgstr ""
 
-#: Opcodes/partikkel.c:810 Opcodes/partikkel.c:816
+#: Opcodes/partikkel.c:811 Opcodes/partikkel.c:817
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
@@ -7300,36 +6454,36 @@ msgid ""
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1733
+#: Opcodes/pitch.c:1598
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1784
+#: Opcodes/pitch.c:1649
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
+#: Opcodes/pitch.c:1699 Opcodes/pitch.c:1842
 msgid "Error: transeg not initialised (krate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
+#: Opcodes/pitch.c:1734 Opcodes/pitch.c:1892
 msgid "transeg: not initialised (arate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1924
+#: Opcodes/pitch.c:1789
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2294
+#: Opcodes/pitch.c:2159
 msgid "median: not initialised (arate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
+#: Opcodes/pitch.c:2163 Opcodes/pitch.c:2210
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2341
+#: Opcodes/pitch.c:2206
 msgid "median: not initialised (krate)\n"
 msgstr ""
 
@@ -7356,17 +6510,6 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr ""
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
-#: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
-#: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
-#: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
-msgid "Unsafe to have same fsig as in and out"
-msgstr ""
-
-#: Opcodes/ppp.c:36 Opcodes/pvslock.c:36
-msgid "pvslock: signal format must be amp-phase or amp-freq."
-msgstr ""
-
 #: Opcodes/psynth.c:97 Opcodes/psynth.c:253
 msgid "psynth: first input not in TRACKS format\n"
 msgstr ""
@@ -7530,7 +6673,14 @@ msgstr ""
 msgid "invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/pvlock.c:490
+#: Opcodes/pvlock.c:480 Opcodes/pvsband.c:46 Opcodes/pvsbasic.c:578
+#: Opcodes/pvsbasic.c:883 Opcodes/pvsbasic.c:1083 Opcodes/pvsbasic.c:1183
+#: Opcodes/pvsbasic.c:1398 Opcodes/pvsbasic.c:1598 Opcodes/pvsbasic.c:1763
+#: Opcodes/pvslock.c:20
+msgid "Unsafe to have same fsig as in and out"
+msgstr ""
+
+#: Opcodes/pvlock.c:492
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7569,75 +6719,75 @@ msgstr ""
 msgid "pvsdiskin: could not open file %s\n"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:606
+#: Opcodes/pvsbasic.c:609
 msgid "pvsfreeze: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:679
+#: Opcodes/pvsbasic.c:682
 msgid "pvsosc does not work while sliding"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:910
+#: Opcodes/pvsbasic.c:913
 msgid "pvsmooth: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1020
+#: Opcodes/pvsbasic.c:1023
 msgid "pvsmix: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1070
+#: Opcodes/pvsbasic.c:1073
 msgid "pvsmix: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1083
+#: Opcodes/pvsbasic.c:1086
 msgid "pvsfilter: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1156
+#: Opcodes/pvsbasic.c:1159
 msgid "pvsfilter: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1159
+#: Opcodes/pvsbasic.c:1162
 msgid "pvsfilter: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1372
+#: Opcodes/pvsbasic.c:1375
 msgid "pvscale: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1570
+#: Opcodes/pvsbasic.c:1575
 msgid "pvshift: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1741
+#: Opcodes/pvsbasic.c:1748
 msgid "pvswarp: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1758
+#: Opcodes/pvsbasic.c:1765
 msgid "pvsblur does not work sliding yet"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1890
+#: Opcodes/pvsbasic.c:1897
 msgid "pvsblur: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1925
+#: Opcodes/pvsbasic.c:1932
 msgid "pvstencil: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1933
+#: Opcodes/pvsbasic.c:1940
 msgid "pvstencil: ftable needs to equal the number of bins"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2001
+#: Opcodes/pvsbasic.c:2008
 msgid "pvstencil: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2148
+#: Opcodes/pvsbasic.c:2158
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/pvsbasic.c:2161 Opcodes/pvsbasic.c:2201 Opcodes/tabvars.c:56
 #: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
 #: Opcodes/tabvars.c:181
 msgid "t-variable not initialised"
@@ -7680,6 +6830,10 @@ msgstr ""
 msgid "pvsgendy: not initialised"
 msgstr ""
 
+#: Opcodes/pvslock.c:36
+msgid "pvslock: signal format must be amp-phase or amp-freq."
+msgstr ""
+
 #: Opcodes/repluck.c:164
 #, c-format
 msgid "Reflection invalid (%f)\n"
@@ -7920,7 +7074,7 @@ msgid ""
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2194
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
@@ -7940,15 +7094,15 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1992 Opcodes/sfont.c:1998
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1999
+#: Opcodes/sfont.c:2001
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2537
+#: Opcodes/sfont.c:2539
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
@@ -7960,6 +7114,10 @@ msgstr ""
 msgid "inletf: signal format must be amp-phase or amp-freq."
 msgstr ""
 
+#: Opcodes/signalflowgraph.cpp:895
+msgid "ftgen string arg not allowed"
+msgstr ""
+
 #: Opcodes/signalflowgraph.cpp:921
 msgid "ftgenonce error"
 msgstr ""
@@ -7995,7 +7153,7 @@ msgstr ""
 msgid "crossfade longer than loop duration\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389 Opcodes/sndloop.c:661
+#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389
 msgid "function table not found\n"
 msgstr ""
 
@@ -8015,15 +7173,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1071
+#: Opcodes/sndloop.c:1072
 msgid "pvsvoc: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1122
+#: Opcodes/sndloop.c:1123
 msgid "pvsmorph: not initialised\n"
 msgstr ""
 
@@ -8043,30 +7201,30 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr ""
 
-#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
-#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:315
+#: Opcodes/socksend.c:74 Opcodes/socksend.c:158 Opcodes/socksend.c:252
 #, c-format
 msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
-#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:321
+#: Opcodes/socksend.c:87 Opcodes/socksend.c:172 Opcodes/socksend.c:259
 msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:347
-#, c-format
-msgid "connect failed (%d)"
-msgstr ""
-
-#: Opcodes/sockrecv.c:360
+#: Opcodes/sockrecv.c:366
 msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
+#: Opcodes/socksend.c:127 Opcodes/socksend.c:216
 msgid "sendto failed"
 msgstr ""
 
+#: Opcodes/socksend.c:287
+#, c-format
+msgid "connect failed (%d)"
+msgstr ""
+
 #: Opcodes/space.c:165
 msgid "space: not initialised"
 msgstr ""
@@ -8421,20 +7579,34 @@ msgstr ""
 msgid "Min and max the same"
 msgstr ""
 
-#: Opcodes/uggab.c:424
+#: Opcodes/uggab.c:215
+msgid "table not found in poscil"
+msgstr ""
+
+#: Opcodes/uggab.c:234 Opcodes/uggab.c:261 Opcodes/uggab.c:290
+#: Opcodes/uggab.c:318
+msgid "poscil: not initialised"
+msgstr ""
+
+#: Opcodes/uggab.c:365 Opcodes/uggab.c:412 Opcodes/uggab.c:460
+#: Opcodes/uggab.c:509
+msgid "poscil3: not initialised"
+msgstr ""
+
+#: Opcodes/uggab.c:589
 msgid "losc: no sample rate stored in function assuming=sr\n"
 msgstr ""
 
-#: Opcodes/uggab.c:556
+#: Opcodes/uggab.c:721
 #, c-format
 msgid "illegal reson iscl value: %f"
 msgstr ""
 
-#: Opcodes/uggab.c:579
+#: Opcodes/uggab.c:744
 msgid "loop cannot be zero"
 msgstr ""
 
-#: Opcodes/uggab.c:1056 Opcodes/uggab.c:1098
+#: Opcodes/uggab.c:1221 Opcodes/uggab.c:1263
 msgid "vibrato(krate): not initialised"
 msgstr ""
 
@@ -8817,6 +7989,14 @@ msgstr ""
 msgid "vosim: not initialised"
 msgstr ""
 
+#: Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr ""
+
+#: Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr ""
+
 #: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
@@ -8943,47 +8123,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:739
+#: Top/argdecode.c:77 util/srconv.c:740
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -8991,7 +8171,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:749
+#: Top/argdecode.c:89 util/srconv.c:750
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -8999,7 +8179,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:750
+#: Top/argdecode.c:91 util/srconv.c:751
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9059,7 +8239,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9067,7 +8247,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9132,7 +8312,7 @@ msgid "--nopeaks\t\tDo not write peak information"
 msgstr ""
 
 #: Top/argdecode.c:136
-msgid "--nodisplays\t\tsUppress all displays"
+msgid "--nodisplays\t\tSuppress all displays"
 msgstr ""
 
 #: Top/argdecode.c:137
@@ -9635,49 +8815,49 @@ msgstr ""
 msgid "error: orchestra and score name not allowed in .csoundrc"
 msgstr ""
 
-#: Top/cscorfns.c:276
+#: Top/cscorfns.c:277
 msgid "PMAX exceeded, string event truncated.\n"
 msgstr ""
 
-#: Top/cscorfns.c:663
+#: Top/cscorfns.c:666
 #, c-format
 msgid "%s found %d f event%s with non-zero p2\n"
 msgstr ""
 
-#: Top/cscorfns.c:664
+#: Top/cscorfns.c:667
 msgid "s"
 msgstr ""
 
-#: Top/cscorfns.c:767
+#: Top/cscorfns.c:770
 msgid "cscore: too many input files open"
 msgstr ""
 
-#: Top/cscorfns.c:805
+#: Top/cscorfns.c:810
 msgid "cscore: tried to set an unknown file pointer as the current file"
 msgstr ""
 
-#: Top/cscorfns.c:819
+#: Top/cscorfns.c:824
 msgid "csoundInitializeCscore: no input score given."
 msgstr ""
 
-#: Top/cscorfns.c:824
+#: Top/cscorfns.c:829 Top/cscorfns.c:858
 msgid "csoundInitializeCscore: no output score given."
 msgstr ""
 
-#: Top/cscorfns.c:852
+#: Top/cscorfns.c:889
 #, c-format
 msgid "cscoreFileOpen: error opening %s"
 msgstr ""
 
-#: Top/cscorfns.c:870
+#: Top/cscorfns.c:907
 msgid "cscoreFileClose: NULL file pointer\n"
 msgstr ""
 
-#: Top/cscorfns.c:882
+#: Top/cscorfns.c:919
 msgid "cscoreFileClose: fp not recorded\n"
 msgstr ""
 
-#: Top/cscorfns.c:888
+#: Top/cscorfns.c:925
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
@@ -9716,129 +8896,129 @@ msgstr ""
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
-#: Top/csmodule.c:638 Top/csmodule.c:646
+#: Top/csmodule.c:607 Top/csmodule.c:613 Top/csmodule.c:624 Top/csmodule.c:631
+#: Top/csmodule.c:637 Top/csmodule.c:645
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:696
+#: Top/csmodule.c:695
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:731
+#: Top/csmodule.c:730
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:737
+#: Top/csmodule.c:736
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:773
+#: Top/csmodule.c:772
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:796
+#: Top/csmodule.c:795
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:819
+#: Top/csmodule.c:818
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:918
+#: Top/csmodule.c:917
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1636 Top/csound.c:1656
+#: Top/csound.c:1640 Top/csound.c:1660
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1642
+#: Top/csound.c:1646
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1675
+#: Top/csound.c:1679
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1700
+#: Top/csound.c:1704
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1707
+#: Top/csound.c:1711
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1727
+#: Top/csound.c:1731
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1998
+#: Top/csound.c:2002
 msgid "WARNING: "
 msgstr ""
 
-#: Top/csound.c:2119
+#: Top/csound.c:2123
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2120
+#: Top/csound.c:2124
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2149 Top/csound.c:2185
+#: Top/csound.c:2153 Top/csound.c:2189
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2153 Top/csound.c:2189
+#: Top/csound.c:2157 Top/csound.c:2193
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2271
+#: Top/csound.c:2275
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2276 Top/csound.c:2310
+#: Top/csound.c:2280 Top/csound.c:2314
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2279 Top/csound.c:2313
+#: Top/csound.c:2283 Top/csound.c:2317
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2305
+#: Top/csound.c:2309
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2327
+#: Top/csound.c:2331
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2445
+#: Top/csound.c:2449
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2552
+#: Top/csound.c:2556
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2575
+#: Top/csound.c:2579
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2906
+#: Top/csound.c:2912
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2957
+#: Top/csound.c:2963
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9894,57 +9074,47 @@ msgstr ""
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:334
+#: Top/main.c:318
+#, c-format
+msgid "Failed to open input file %s\n"
+msgstr ""
+
+#: Top/main.c:339
 msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:352
+#: Top/main.c:360
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:359
+#: Top/main.c:367
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:369
+#: Top/main.c:377
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr ""
 
-#: Top/main.c:371
+#: Top/main.c:379
 msgid "sorting score ...\n"
 msgstr ""
 
-#: Top/main.c:381
-#, c-format
-msgid "cannot extract %s, name conflict"
-msgstr ""
-
-#: Top/main.c:384
+#: Top/main.c:389
 #, c-format
 msgid "cannot open extract file %s"
 msgstr ""
 
-#: Top/main.c:388
-#, c-format
-msgid "cannot reopen %s"
-msgstr ""
-
 #: Top/main.c:392
-#, c-format
-msgid "cannot open %s for writing"
-msgstr ""
-
-#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:405
+#: Top/main.c:401
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:407
+#: Top/main.c:403
 msgid "Syntax check completed.\n"
 msgstr ""
 
@@ -10009,158 +9179,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:110 Top/one_file.c:118
+#: Top/one_file.c:120 Top/one_file.c:130
 msgid " *** cannot create temporary file"
 msgstr ""
 
-#: Top/one_file.c:203
+#: Top/one_file.c:215
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:207
+#: Top/one_file.c:219
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr ""
 
-#: Top/one_file.c:274 Top/one_file.c:302
+#: Top/one_file.c:286 Top/one_file.c:314
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:319
+#: Top/one_file.c:331
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:322
+#: Top/one_file.c:334
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:328 Top/one_file.c:744
+#: Top/one_file.c:340 Top/one_file.c:763
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:354
+#: Top/one_file.c:371
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:376 Top/one_file.c:430
+#: Top/one_file.c:393 Top/one_file.c:449
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:391 Top/one_file.c:396
+#: Top/one_file.c:408 Top/one_file.c:413
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:408
+#: Top/one_file.c:425
 #, c-format
 msgid "Creating %s (%p)\n"
 msgstr ""
 
-#: Top/one_file.c:421
+#: Top/one_file.c:438
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:468
+#: Top/one_file.c:487
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:487
+#: Top/one_file.c:506
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:503
+#: Top/one_file.c:522
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:539
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:536 Top/one_file.c:584
+#: Top/one_file.c:555 Top/one_file.c:603
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:541
+#: Top/one_file.c:560
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:555
+#: Top/one_file.c:574
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:589
+#: Top/one_file.c:608
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:604
+#: Top/one_file.c:623
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:624
+#: Top/one_file.c:643
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:632 Top/one_file.c:639
+#: Top/one_file.c:651 Top/one_file.c:658
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:645
+#: Top/one_file.c:664
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:655
+#: Top/one_file.c:674
 msgid "**** Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:661
+#: Top/one_file.c:680
 msgid "**** End of Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:691
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:703
+#: Top/one_file.c:722
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:718
+#: Top/one_file.c:737
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:734
+#: Top/one_file.c:753
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:740
+#: Top/one_file.c:759
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:754
+#: Top/one_file.c:773
 msgid "Creating orchestra\n"
 msgstr ""
 
-#: Top/one_file.c:759
+#: Top/one_file.c:778
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:793
+#: Top/one_file.c:812
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:798
+#: Top/one_file.c:817
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 
@@ -10173,159 +9343,159 @@ msgstr ""
 msgid "%d opcodes\n"
 msgstr ""
 
-#: Top/threads.c:38
+#: Top/threads.c:92 Top/threads.c:556
 #, c-format
 msgid "%s() is not implemented on this platform.\n"
 msgstr ""
 
-#: Top/utility.c:98
+#: Top/utility.c:99
 #, c-format
 msgid "util %s:\n"
 msgstr ""
 
-#: Top/utility.c:105
+#: Top/utility.c:106
 #, c-format
 msgid "Error: utility '%s' not found"
 msgstr ""
 
-#: Top/utility.c:108
+#: Top/utility.c:109
 msgid "Error: utility not found"
 msgstr ""
 
-#: Top/utility.c:112
+#: Top/utility.c:113
 msgid "The available utilities are:\n"
 msgstr ""
 
-#: util1/scot/scot.c:51
+#: util1/scot/scot.c:56
 msgid "Score must start with orchestra section"
 msgstr ""
 
-#: util1/scot/scot.c:61
+#: util1/scot/scot.c:66
 msgid "Expected score or functions section"
 msgstr ""
 
-#: util1/scot/scot.c:117
+#: util1/scot/scot.c:122
 msgid "Tempo must be specified"
 msgstr ""
 
-#: util1/scot/scot.c:121
+#: util1/scot/scot.c:126
 msgid "Redefinition of tempo"
 msgstr ""
 
-#: util1/scot/scot.c:133
+#: util1/scot/scot.c:138
 msgid "Must specify 2 or more letters of keyword"
 msgstr ""
 
-#: util1/scot/scot.c:136 util1/scot/scot.c:145 util1/scot/scot.c:154
+#: util1/scot/scot.c:141 util1/scot/scot.c:150 util1/scot/scot.c:159
 msgid "Must be \"on\" or \"off\""
 msgstr ""
 
-#: util1/scot/scot.c:165
+#: util1/scot/scot.c:170
 msgid "Invalid time signature"
 msgstr ""
 
-#: util1/scot/scot.c:202
+#: util1/scot/scot.c:207
 msgid "Bad key signature"
 msgstr ""
 
-#: util1/scot/scot.c:237 util1/scot/scot.c:243
+#: util1/scot/scot.c:242 util1/scot/scot.c:248
 msgid "Invalid field"
 msgstr ""
 
-#: util1/scot/scot.c:254 util1/scot/scot.c:258
+#: util1/scot/scot.c:259 util1/scot/scot.c:263
 msgid "Nested next-parameter passing"
 msgstr ""
 
-#: util1/scot/scot.c:268
+#: util1/scot/scot.c:273
 msgid "Unrecognised keyword"
 msgstr ""
 
-#: util1/scot/scot.c:317
+#: util1/scot/scot.c:322
 msgid "Wrong number of beats in bar"
 msgstr ""
 
-#: util1/scot/scot.c:325
+#: util1/scot/scot.c:330
 msgid "Syntax error: cannot back up"
 msgstr ""
 
-#: util1/scot/scot.c:496
+#: util1/scot/scot.c:501
 msgid "Improper tie"
 msgstr ""
 
-#: util1/scot/scot.c:502
+#: util1/scot/scot.c:507
 msgid "Tie between different pitches"
 msgstr ""
 
-#: util1/scot/scot.c:510
+#: util1/scot/scot.c:515
 msgid "Warning: params changed on tie"
 msgstr ""
 
-#: util1/scot/scot.c:562
+#: util1/scot/scot.c:567
 msgid "Parameter number out of range"
 msgstr ""
 
-#: util1/scot/scot.c:622
+#: util1/scot/scot.c:627
 msgid "Lost previous note: not written"
 msgstr ""
 
-#: util1/scot/scot.c:741
+#: util1/scot/scot.c:746
 msgid "Macro expansion too long -- circular macros?"
 msgstr ""
 
-#: util1/scot/scot.c:817 util1/scot/scot.c:922 util1/scot/scot.c:946
+#: util1/scot/scot.c:822 util1/scot/scot.c:927 util1/scot/scot.c:951
 msgid "Syntax error: no {"
 msgstr ""
 
-#: util1/scot/scot.c:829
+#: util1/scot/scot.c:834
 msgid "No instrument specified"
 msgstr ""
 
-#: util1/scot/scot.c:870
+#: util1/scot/scot.c:875
 msgid "unresolved tie"
 msgstr ""
 
-#: util1/scot/scot.c:872
+#: util1/scot/scot.c:877
 msgid "unresolved slur"
 msgstr ""
 
-#: util1/scot/scot.c:879
+#: util1/scot/scot.c:884
 msgid "Circular note list\n"
 msgstr ""
 
-#: util1/scot/scot.c:925 util1/scot/scot.c:1039 util1/scot/scot.c:1053
-#: util1/scot/scot.c:1060 util1/scot/scot.c:1085
+#: util1/scot/scot.c:930 util1/scot/scot.c:1044 util1/scot/scot.c:1058
+#: util1/scot/scot.c:1065 util1/scot/scot.c:1090
 msgid "Unexpected end of file"
 msgstr ""
 
-#: util1/scot/scot.c:968
+#: util1/scot/scot.c:973
 msgid "Syntax error: no ="
 msgstr ""
 
-#: util1/scot/scot.c:970
+#: util1/scot/scot.c:975
 msgid "Syntax error: no number"
 msgstr ""
 
-#: util1/scot/scot.c:982
+#: util1/scot/scot.c:987
 msgid "No instruments declared"
 msgstr ""
 
-#: util1/scot/scot.c:1003
+#: util1/scot/scot.c:1008
 msgid "Expected ="
 msgstr ""
 
-#: util1/scot/scot.c:1151
+#: util1/scot/scot.c:1156
 msgid "Invalid pitch class"
 msgstr ""
 
-#: util1/scot/scot.c:1296 util1/scot/scot.c:1311 util1/scot/scot.c:1365
+#: util1/scot/scot.c:1301 util1/scot/scot.c:1316 util1/scot/scot.c:1370
 msgid "Division by zero"
 msgstr ""
 
-#: util1/scot/scot.c:1454
+#: util1/scot/scot.c:1461
 msgid "scot processing terminated\n"
 msgstr ""
 
-#: util1/scot/scot.c:1461
+#: util1/scot/scot.c:1468
 #, c-format
 msgid "scot: %d errors.\n"
 msgstr ""
@@ -10341,8 +9511,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
-#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
+#: util/atsa.c:546 util/atsa.c:2360 util/atsa.c:2374 util/atsa.c:2393
+#: util/atsa.c:2573 util/atsa.c:2636 util/atsa.c:2724
 msgid "done!\n"
 msgstr ""
 
@@ -10471,160 +9641,166 @@ msgstr ""
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2013
+#: util/atsa.c:1946 util/atsa.c:1951 util/atsa.c:1962 util/atsa.c:1965
+#: util/atsa.c:1969 util/atsa.c:1978 util/cvanal.c:193 util/hetro.c:607
+#: util/hetro.c:690 util/hetro.c:703
+msgid "Write failure\n"
+msgstr ""
+
+#: util/atsa.c:2019
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr ""
 
-#: util/atsa.c:2020
+#: util/atsa.c:2026
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2025
+#: util/atsa.c:2031
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2040
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2044
+#: util/atsa.c:2050
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2050
+#: util/atsa.c:2056
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2063
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2067
+#: util/atsa.c:2073
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2074
+#: util/atsa.c:2080
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2082
+#: util/atsa.c:2088
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2090
+#: util/atsa.c:2096
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2098
+#: util/atsa.c:2104
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2106
+#: util/atsa.c:2112
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2130
+#: util/atsa.c:2136
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2139
+#: util/atsa.c:2145
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2148
+#: util/atsa.c:2154
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2157
+#: util/atsa.c:2163
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2163
+#: util/atsa.c:2169
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2174
+#: util/atsa.c:2180
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2182
+#: util/atsa.c:2188
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2190
+#: util/atsa.c:2196
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2335
+#: util/atsa.c:2341
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2365
+#: util/atsa.c:2371
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2381 util/atsa.c:2384
+#: util/atsa.c:2387 util/atsa.c:2390
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2389
+#: util/atsa.c:2395
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2497
+#: util/atsa.c:2503
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2585
+#: util/atsa.c:2591
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2681
+#: util/atsa.c:2687
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2732
+#: util/atsa.c:2738
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2832
+#: util/atsa.c:2838
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10693,7 +9869,7 @@ msgstr ""
 msgid "less sound than expected!\n"
 msgstr ""
 
-#: util/cvanal.c:243
+#: util/cvanal.c:244
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
@@ -10781,7 +9957,7 @@ msgstr ""
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
+#: util/dnoise.c:480 util/srconv.c:461 util/srconv.c:473
 #, c-format
 msgid "cannot open %s."
 msgstr ""
@@ -10954,7 +10130,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:737
+#: util/envext.c:54 util/srconv.c:738
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11003,7 +10179,7 @@ msgid "Cannot open input file %s\n"
 msgstr ""
 
 #: util/het_export.c:61 util/lpc_export.c:66 util/lpc_import.c:62
-#: util/pv_export.c:64 util/pv_import.c:111
+#: util/pv_export.c:64 util/pv_import.c:123
 #, c-format
 msgid "Cannot open output file %s\n"
 msgstr ""
@@ -11026,7 +10202,7 @@ msgstr ""
 msgid "Cannot open output hetro file %s\n"
 msgstr ""
 
-#: util/het_import.c:108
+#: util/het_import.c:111
 msgid "translate text form to hetro analysis file"
 msgstr ""
 
@@ -11124,48 +10300,48 @@ msgstr ""
 msgid "cannot create output file\n"
 msgstr ""
 
-#: util/hetro.c:616
+#: util/hetro.c:617
 #, c-format
 msgid "scale = %f\n"
 msgstr ""
 
-#: util/hetro.c:711
+#: util/hetro.c:714
 #, c-format
 msgid "harmonic #%d:\tamp points %d, \tfrq points %d,\tpeakamp %d\n"
 msgstr ""
 
-#: util/hetro.c:715
+#: util/hetro.c:718
 #, c-format
 msgid "wrote %ld bytes to %s\n"
 msgstr ""
 
-#: util/hetro.c:747
+#: util/hetro.c:750
 msgid "OOPS: SDIF does not work on this machine!\n"
 msgstr ""
 
-#: util/hetro.c:773
+#: util/hetro.c:776
 #, c-format
 msgid "Error creating %s\n"
 msgstr ""
 
-#: util/hetro.c:801
+#: util/hetro.c:804
 msgid "Error writing SDIF frame header.\n"
 msgstr ""
 
-#: util/hetro.c:810
+#: util/hetro.c:813
 msgid "Error writing SDIF matrix header.\n"
 msgstr ""
 
-#: util/hetro.c:823
+#: util/hetro.c:826
 msgid "Error writing SDIF data.\n"
 msgstr ""
 
-#: util/hetro.c:830
+#: util/hetro.c:833
 #, c-format
 msgid "wrote %ld 1TRC frames to %s\n"
 msgstr ""
 
-#: util/hetro.c:858
+#: util/hetro.c:861
 msgid "Soundfile analysis for adsyn"
 msgstr ""
 
@@ -11377,7 +10553,11 @@ msgstr ""
 msgid "Failed to read LPC header\n"
 msgstr ""
 
-#: util/lpc_export.c:102
+#: util/lpc_export.c:81 util/lpc_export.c:88
+msgid "Read faailure\n"
+msgstr ""
+
+#: util/lpc_export.c:106
 msgid "translate linear predictive coding file to text file"
 msgstr ""
 
@@ -11385,7 +10565,11 @@ msgstr ""
 msgid "Usage: lpc_import cstext_file lpc_file\n"
 msgstr ""
 
-#: util/lpc_import.c:98
+#: util/lpc_import.c:77 util/lpc_import.c:84 util/srconv.c:378
+msgid "Read failure\n"
+msgstr ""
+
+#: util/lpc_import.c:102
 msgid "translate text file to linear predictive coding file"
 msgstr ""
 
@@ -11402,7 +10586,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11700,11 +10884,19 @@ msgstr ""
 msgid "Usage: pv_import cstext_file pv_file \n"
 msgstr ""
 
-#: util/pv_import.c:127
+#: util/pv_import.c:73 util/pv_import.c:93
+msgid "Not a PV file\n"
+msgstr ""
+
+#: util/pv_import.c:132
+msgid "Memory failure\n"
+msgstr ""
+
+#: util/pv_import.c:143
 msgid "Sync error\n"
 msgstr ""
 
-#: util/pv_import.c:148
+#: util/pv_import.c:164
 msgid "translate text form to PVOC analysis file"
 msgstr ""
 
@@ -11771,7 +10963,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:754
+#: util/scale.c:62 util/srconv.c:755
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -11950,47 +11142,47 @@ msgstr ""
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:388
+#: util/srconv.c:389
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:402
+#: util/srconv.c:403
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:407
+#: util/srconv.c:408
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:412 util/srconv.c:704
+#: util/srconv.c:413 util/srconv.c:705
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:731
+#: util/srconv.c:732
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:733
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:734
+#: util/srconv.c:735
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:736
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:737
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:820
+#: util/srconv.c:821
 msgid "Sample rate conversion"
 msgstr ""
 
diff --git a/po/russian.po b/po/russian.po
index b221130..8a46467 100644
--- a/po/russian.po
+++ b/po/russian.po
@@ -99,316 +99,317 @@ msgstr "шнур превышает длину позволенную макси
 msgid "(unknown error)"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:138
+#: Engine/csound_orc_compile.c:141
 #, c-format
 msgid ""
 "input arg %d '%s' of type %s not allowed when expecting %c (for opcode %s), "
 "line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:265 Engine/rdorch.c:1862
+#: Engine/csound_orc_compile.c:268 Engine/rdorch.c:1862
 msgid "missing or extra arg"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:269
+#: Engine/csound_orc_compile.c:272
 msgid "too many input args\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:304
+#: Engine/csound_orc_compile.c:307
 #, c-format
 msgid "input arg '%s' used before defined (in opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:380
+#: Engine/csound_orc_compile.c:389
 #, c-format
-msgid ""
-"output name previously used, type '%c' must be uniquely defined, line %d"
+msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:386
+#: Engine/csound_orc_compile.c:517
 #, c-format
-msgid "output arg '%s' illegal type (for opcode %s), line %d\n"
+msgid "output name previously used, type 'w' must be uniquely defined, line %d"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:541
+#: Engine/csound_orc_compile.c:563
 #, c-format
 msgid "create_opcode: No rule to handle statement of type %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:738
+#: Engine/csound_orc_compile.c:760
 #, c-format
 msgid "create_instrument: instr num %ld\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:748
+#: Engine/csound_orc_compile.c:772
 #, c-format
 msgid "create_instrument: instr name %s\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:755 Engine/otran.c:364
+#: Engine/csound_orc_compile.c:779 Engine/csound_orc_compile.c:1068
+#: Engine/csound_orc_compile.c:1089 Engine/otran.c:363
 msgid "invalid name for instrument"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:759 Engine/otran.c:370
+#: Engine/csound_orc_compile.c:783 Engine/csound_orc_compile.c:1071
+#: Engine/csound_orc_compile.c:1092 Engine/otran.c:369
 #, c-format
 msgid "instr %s redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:903 Engine/otran.c:352
+#: Engine/csound_orc_compile.c:927 Engine/otran.c:351
 #, c-format
 msgid "instr %ld redefined"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:914
+#: Engine/csound_orc_compile.c:938
 msgid "!!! csound->opcodeInfo is NULL !!!\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1083
+#: Engine/csound_orc_compile.c:1141
 #, c-format
 msgid "Unknown TREE node of type %d found in root.\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1140 Engine/otran.c:579 Engine/otran.c:1433
+#: Engine/csound_orc_compile.c:1198 Engine/otran.c:578 Engine/otran.c:1432
 #, c-format
 msgid "%s invalid sample rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1142 Engine/otran.c:581 Engine/otran.c:1435
+#: Engine/csound_orc_compile.c:1200 Engine/otran.c:580 Engine/otran.c:1434
 #, c-format
 msgid "%s invalid control rate"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1146 Engine/otran.c:584 Engine/otran.c:1431
+#: Engine/csound_orc_compile.c:1204 Engine/otran.c:583 Engine/otran.c:1430
 #, c-format
 msgid "%s invalid ksmps value"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1149 Engine/otran.c:587 Engine/otran.c:1437
+#: Engine/csound_orc_compile.c:1207 Engine/otran.c:586 Engine/otran.c:1436
 #, c-format
 msgid "%s inconsistent sr, kr, ksmps"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1165
+#: Engine/csound_orc_compile.c:1223
 msgid "perf-pass statements illegal in header blk\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1170
+#: Engine/csound_orc_compile.c:1228
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1230 Engine/otran.c:671
+#: Engine/csound_orc_compile.c:1288 Engine/otran.c:670
 msgid "inconsistent argoff sumcount"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1302 Engine/otran.c:740
+#: Engine/csound_orc_compile.c:1360 Engine/otran.c:739
 #, c-format
 msgid "LABELS list is full...extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1340 Engine/otran.c:778
+#: Engine/csound_orc_compile.c:1398 Engine/otran.c:777
 #, c-format
 msgid "GOTOS list is full..extending to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1373 Engine/otran.c:811
+#: Engine/csound_orc_compile.c:1431 Engine/otran.c:810
 #, c-format
 msgid "target label '%s' not found"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1451 Engine/otran.c:866
+#: Engine/csound_orc_compile.c:1509 Engine/otran.c:865
 #, c-format
 msgid "string syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1501 Engine/otran.c:916
+#: Engine/csound_orc_compile.c:1559 Engine/otran.c:915
 #, c-format
 msgid "numeric syntax '%s'"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1527 Engine/otran.c:942
+#: Engine/csound_orc_compile.c:1585 Engine/otran.c:941
 #, c-format
 msgid "extending Floating pool to %d\n"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1566 Engine/otran.c:1018
+#: Engine/csound_orc_compile.c:1624 Engine/otran.c:1017
 msgid "gblnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1594 Engine/otran.c:1046
+#: Engine/csound_orc_compile.c:1652 Engine/otran.c:1045
 msgid "lclnamset(): memory allocation failure"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1620 Engine/otran.c:1071
+#: Engine/csound_orc_compile.c:1678 Engine/otran.c:1070
 msgid "unexpected global name"
 msgstr ""
 
-#: Engine/csound_orc_compile.c:1643 Engine/otran.c:1093
+#: Engine/csound_orc_compile.c:1701 Engine/otran.c:1092
 msgid "unknown nametype"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:459
+#: Engine/csound_orc_expressions.c:457
 #, c-format
 msgid "error: function %s with arg type %c not found, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_expressions.c:862
+#: Engine/csound_orc_expressions.c:878
 #, c-format
 msgid "error: non-existent statement in conditional, line %d \n"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:157
+#: Engine/csound_orc_semantics.c:256
 #, c-format
 msgid ""
 "\n"
 "error: %s  (token \"%s\")"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:159
+#: Engine/csound_orc_semantics.c:258
 #, c-format
 msgid ""
 " line %d:\n"
 ">>>"
 msgstr ""
 
-#: Engine/csound_orc_semantics.c:732
+#: Engine/csound_orc_semantics.c:834
 #, fuzzy, c-format
 msgid "insufficient required arguments for opcode %s on line %d\n"
 msgstr "недостаточные аргументы"
 
-#: Engine/csound_orc_semantics.c:797 Engine/rdorch.c:1644 Engine/rdorch.c:1662
+#: Engine/csound_orc_semantics.c:899 Engine/rdorch.c:1644 Engine/rdorch.c:1662
 #: Engine/rdorch.c:1703 Engine/rdorch.c:1841 Engine/rdorch.c:2011
 #, c-format
 msgid "modified opcod: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:115 Engine/cs_par_dispatch.c:128
+#: Engine/cs_par_dispatch.c:113 Engine/cs_par_dispatch.c:126
 #, c-format
 msgid "Poorly specified global lock index: %i [max: %i]\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:142 Engine/cs_par_dispatch.c:162
+#: Engine/cs_par_dispatch.c:140 Engine/cs_par_dispatch.c:160
 msgid "Invalid NULL parameter name for a global variable\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:526 Engine/cs_par_dispatch.c:553
-#: Engine/cs_par_dispatch.c:2543 Engine/cs_par_dispatch.c:2588
-#: Engine/cs_par_dispatch.c:2590 Engine/cs_par_dispatch.c:2654
+#: Engine/cs_par_dispatch.c:551 Engine/cs_par_dispatch.c:578
+#: Engine/cs_par_dispatch.c:2564 Engine/cs_par_dispatch.c:2609
+#: Engine/cs_par_dispatch.c:2611 Engine/cs_par_dispatch.c:2675
 msgid "Invalid NULL Parameter entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:528 Engine/cs_par_dispatch.c:567
-#: Engine/cs_par_dispatch.c:594 Engine/cs_par_dispatch.c:635
+#: Engine/cs_par_dispatch.c:553 Engine/cs_par_dispatch.c:592
+#: Engine/cs_par_dispatch.c:619 Engine/cs_par_dispatch.c:660
 msgid "Invalid NULL Parameter name"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:535
+#: Engine/cs_par_dispatch.c:560
 msgid "Failed to allocate Opcode Weight cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:664 Engine/cs_par_dispatch.c:755
+#: Engine/cs_par_dispatch.c:689 Engine/cs_par_dispatch.c:780
 msgid "No Weights to Dump (Using Defaults)\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:705 Engine/cs_par_dispatch.c:835
+#: Engine/cs_par_dispatch.c:730 Engine/cs_par_dispatch.c:860
 #, c-format
 msgid "Opcode Weight Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:759
+#: Engine/cs_par_dispatch.c:784
 msgid "Weights Dump\n"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:907
+#: Engine/cs_par_dispatch.c:930
 #, c-format
 msgid "Parallel Spec File not found at: %s"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:913
+#: Engine/cs_par_dispatch.c:936
 msgid "Parallel Spec File invalid format expected weight_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:918
+#: Engine/cs_par_dispatch.c:941
 msgid "Parallel Spec File invalid format expected weight_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:922
+#: Engine/cs_par_dispatch.c:945
 msgid "Parallel Spec File invalid format expected roots_avail_min parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:926
+#: Engine/cs_par_dispatch.c:949
 msgid "Parallel Spec File invalid format expected roots_avail_max parameter"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1003 Engine/cs_par_dispatch.c:1027
-#: Engine/cs_par_dispatch.c:1155 Engine/cs_par_dispatch.c:1251
-#: Engine/cs_par_dispatch.c:1405 Engine/cs_par_dispatch.c:1439
-#: Engine/cs_par_dispatch.c:1456 Engine/cs_par_dispatch.c:1478
-#: Engine/cs_par_dispatch.c:1506 Engine/cs_par_dispatch.c:1528
-#: Engine/cs_par_dispatch.c:1552 Engine/cs_par_dispatch.c:1644
-#: Engine/cs_par_dispatch.c:1699 Engine/cs_par_dispatch.c:1792
-#: Engine/cs_par_dispatch.c:1847 Engine/cs_par_dispatch.c:2681
+#: Engine/cs_par_dispatch.c:1024 Engine/cs_par_dispatch.c:1048
+#: Engine/cs_par_dispatch.c:1176 Engine/cs_par_dispatch.c:1276
+#: Engine/cs_par_dispatch.c:1430 Engine/cs_par_dispatch.c:1464
+#: Engine/cs_par_dispatch.c:1481 Engine/cs_par_dispatch.c:1503
+#: Engine/cs_par_dispatch.c:1531 Engine/cs_par_dispatch.c:1553
+#: Engine/cs_par_dispatch.c:1577 Engine/cs_par_dispatch.c:1669
+#: Engine/cs_par_dispatch.c:1724 Engine/cs_par_dispatch.c:1817
+#: Engine/cs_par_dispatch.c:1870 Engine/cs_par_dispatch.c:2702
 msgid "Invalid NULL Parameter dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1008
+#: Engine/cs_par_dispatch.c:1029
 msgid "Failed to allocate dag"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1060 Engine/cs_par_dispatch.c:1083
-#: Engine/cs_par_dispatch.c:1105 Engine/cs_par_dispatch.c:1107
+#: Engine/cs_par_dispatch.c:1081 Engine/cs_par_dispatch.c:1104
+#: Engine/cs_par_dispatch.c:1126 Engine/cs_par_dispatch.c:1128
 msgid "Invalid NULL Parameter dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1062
+#: Engine/cs_par_dispatch.c:1083
 msgid "Invalid NULL Parameter instr"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1064
+#: Engine/cs_par_dispatch.c:1085
 msgid "Invalid NULL Parameter insds"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1069 Engine/cs_par_dispatch.c:1091
+#: Engine/cs_par_dispatch.c:1090 Engine/cs_par_dispatch.c:1112
 msgid "Failed to allocate dag_node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1086
+#: Engine/cs_par_dispatch.c:1107
 msgid "Invalid Parameter count must be greater than 0"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1229 Engine/cs_par_dispatch.c:1508
-#: Engine/cs_par_dispatch.c:2545 Engine/cs_par_dispatch.c:2655
-#: Engine/cs_par_dispatch.c:2682
+#: Engine/cs_par_dispatch.c:1250 Engine/cs_par_dispatch.c:1533
+#: Engine/cs_par_dispatch.c:2566 Engine/cs_par_dispatch.c:2676
+#: Engine/cs_par_dispatch.c:2703
 msgid "Invalid NULL Parameter chain"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1237
+#: Engine/cs_par_dispatch.c:1261
 #, c-format
 msgid "Failed to find semantic information for instrument '%i'"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1554
+#: Engine/cs_par_dispatch.c:1579
 msgid "Invalid NULL Parameter node"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1556
+#: Engine/cs_par_dispatch.c:1581
 msgid "Invalid NULL Parameter update_hdl"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:1647
+#: Engine/cs_par_dispatch.c:1672
 msgid "Invalid Parameter update_hdl is outside the DAG range"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2497
+#: Engine/cs_par_dispatch.c:2518
 #, c-format
 msgid "Parallel Dump File not found at: %s for writing"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2557
+#: Engine/cs_par_dispatch.c:2578
 msgid "Failed to allocate Dag2 cache entry"
 msgstr ""
 
-#: Engine/cs_par_dispatch.c:2610
+#: Engine/cs_par_dispatch.c:2631
 msgid "Cache Update\n"
 msgstr ""
 
@@ -422,12 +423,12 @@ msgstr ""
 msgid "Creating search path cache for '%s':"
 msgstr ""
 
-#: Engine/envvar.c:1083
+#: Engine/envvar.c:1085
 #, c-format
 msgid "internal error: csoundFileOpen(): invalid type: %d"
 msgstr ""
 
-#: Engine/envvar.c:1266
+#: Engine/envvar.c:1268
 #, c-format
 msgid "internal error: csoundCreateFileHandle(): invalid type: %d"
 msgstr ""
@@ -498,13 +499,13 @@ msgstr ""
 msgid "ftable %d now deleted\n"
 msgstr ""
 
-#: Engine/fgens.c:153 Engine/fgens.c:1593 Engine/fgens.c:1679
-#: Engine/fgens.c:1758 Engine/fgens.c:1874 Engine/fgens.c:1955
-#: Engine/fgens.c:2909
+#: Engine/fgens.c:153 Engine/fgens.c:1599 Engine/fgens.c:1685
+#: Engine/fgens.c:1764 Engine/fgens.c:1880 Engine/fgens.c:1961
+#: Engine/fgens.c:2937
 msgid "insufficient gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:179 Opcodes/ftgen.c:116
+#: Engine/fgens.c:179
 #, c-format
 msgid "Named gen \"%s\" not defined"
 msgstr ""
@@ -522,11 +523,11 @@ msgstr ""
 msgid "ftable %d:\n"
 msgstr ""
 
-#: Engine/fgens.c:222 Engine/fgens.c:229
+#: Engine/fgens.c:222 Engine/fgens.c:229 Engine/fgens.c:2794
 msgid "illegal table length"
 msgstr ""
 
-#: Engine/fgens.c:288 Engine/fgens.c:2215
+#: Engine/fgens.c:288 Engine/fgens.c:2221
 #, c-format
 msgid ""
 "ftable %d relocating due to size change\n"
@@ -535,10 +536,10 @@ msgstr ""
 
 #: Engine/fgens.c:346 Engine/fgens.c:467 Engine/fgens.c:551 Engine/fgens.c:632
 #: Engine/fgens.c:707 Engine/fgens.c:756 Engine/fgens.c:877 Engine/fgens.c:954
-#: Engine/fgens.c:1049 Engine/fgens.c:1093 Engine/fgens.c:1140
-#: Engine/fgens.c:1393 Engine/fgens.c:1455 Engine/fgens.c:1677
-#: Engine/fgens.c:1755 Engine/fgens.c:2110 Engine/fgens.c:2863
-#: Engine/fgens.c:2906
+#: Engine/fgens.c:1054 Engine/fgens.c:1098 Engine/fgens.c:1145
+#: Engine/fgens.c:1399 Engine/fgens.c:1461 Engine/fgens.c:1683
+#: Engine/fgens.c:1761 Engine/fgens.c:2116 Engine/fgens.c:2891
+#: Engine/fgens.c:2934
 msgid "using extended arguments\n"
 msgstr ""
 
@@ -551,13 +552,13 @@ msgid "illegal x interval"
 msgstr ""
 
 #: Engine/fgens.c:404 Engine/fgens.c:553 Engine/fgens.c:634 Engine/fgens.c:879
-#: Engine/fgens.c:1350 Engine/fgens.c:2375 Engine/fgens.c:2690
-#: Engine/fgens.c:2810 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
+#: Engine/fgens.c:1356 Engine/fgens.c:2381 Engine/fgens.c:2696
+#: Engine/fgens.c:2836 Top/main.c:141 util/cvanal.c:66 util/lpanal.c:398
 #: util/pvanal.c:170
 msgid "insufficient arguments"
 msgstr "недостаточные аргументы"
 
-#: Engine/fgens.c:408 Engine/fgens.c:1355
+#: Engine/fgens.c:408 Engine/fgens.c:1361
 msgid "unknown srctable number"
 msgstr ""
 
@@ -593,238 +594,238 @@ msgstr ""
 msgid "uneven number of args"
 msgstr ""
 
-#: Engine/fgens.c:1077
+#: Engine/fgens.c:1082
 msgid "gen call has illegal x-ordinate values:"
 msgstr ""
 
-#: Engine/fgens.c:1095
+#: Engine/fgens.c:1100
 msgid "wrong number of args"
 msgstr "неправильный число аргументов"
 
-#: Engine/fgens.c:1109
+#: Engine/fgens.c:1114
 msgid "a range given exceeds table length"
 msgstr ""
 
-#: Engine/fgens.c:1116
+#: Engine/fgens.c:1121
 msgid "an input function does not exist"
 msgstr ""
 
-#: Engine/fgens.c:1249
+#: Engine/fgens.c:1254
 msgid "No such window!"
 msgstr ""
 
-#: Engine/fgens.c:1267
+#: Engine/fgens.c:1272
 msgid "Wrong number of input arguments"
 msgstr "неправильный число аргументов входного сигнала"
 
-#: Engine/fgens.c:1268
+#: Engine/fgens.c:1273
 msgid "unknown distribution"
 msgstr ""
 
-#: Engine/fgens.c:1317
+#: Engine/fgens.c:1322
 msgid "error opening ASCII file"
 msgstr ""
 
-#: Engine/fgens.c:1323
+#: Engine/fgens.c:1328
 #, c-format
 msgid "%ld elements in %s\n"
 msgstr ""
 
-#: Engine/fgens.c:1334
+#: Engine/fgens.c:1340
 msgid "Numbers after table full in GEN23"
 msgstr ""
 
-#: Engine/fgens.c:1363
+#: Engine/fgens.c:1369
 msgid "table size must be the same of source table"
 msgstr ""
 
-#: Engine/fgens.c:1435 Engine/fgens.c:1495
+#: Engine/fgens.c:1441 Engine/fgens.c:1501
 msgid "x coordinates must all be in increasing order:"
 msgstr ""
 
-#: Engine/fgens.c:1438 Engine/fgens.c:1497
+#: Engine/fgens.c:1444 Engine/fgens.c:1503
 msgid "x coordinate greater than function size:"
 msgstr ""
 
-#: Engine/fgens.c:1442
+#: Engine/fgens.c:1448
 msgid "illegal input val (y <= 0) for gen call, beginning:"
 msgstr ""
 
-#: Engine/fgens.c:1515
+#: Engine/fgens.c:1521
 msgid "GEN28 requires zero table length"
 msgstr ""
 
-#: Engine/fgens.c:1577
+#: Engine/fgens.c:1583
 msgid "could not open space file"
 msgstr ""
 
-#: Engine/fgens.c:1579
+#: Engine/fgens.c:1585
 msgid "Time values must be in increasing order"
 msgstr ""
 
-#: Engine/fgens.c:1600
+#: Engine/fgens.c:1606
 msgid "GEN30: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1683
+#: Engine/fgens.c:1689
 msgid "GEN31: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:1791
+#: Engine/fgens.c:1797
 #, c-format
 msgid "GEN32: source ftable %d not found"
 msgstr ""
 
-#: Engine/fgens.c:1885
+#: Engine/fgens.c:1891
 msgid "GEN33: source ftable not found"
 msgstr ""
 
-#: Engine/fgens.c:2053
+#: Engine/fgens.c:2059
 msgid "unknown source table number"
 msgstr ""
 
-#: Engine/fgens.c:2085
+#: Engine/fgens.c:2091
 msgid "Gen41: negative probability not allowed"
 msgstr ""
 
-#: Engine/fgens.c:2151 Opcodes/fareygen.c:70
+#: Engine/fgens.c:2157
 #, c-format
 msgid "ftable %d: "
 msgstr ""
 
-#: Engine/fgens.c:2195
+#: Engine/fgens.c:2201
 #, c-format
 msgid "ftable %d:"
 msgstr ""
 
-#: Engine/fgens.c:2210
+#: Engine/fgens.c:2216
 #, c-format
 msgid "replacing previous ftable %d"
 msgstr ""
 
-#: Engine/fgens.c:2246 Engine/fgens.c:2334 Engine/fgens.c:2358
-#: Opcodes/gab/gab.c:580 Opcodes/gab/gab.c:634 Opcodes/midiops2.c:218
-#: Opcodes/midiops2.c:370 Opcodes/midiops2.c:452 Opcodes/uggab.c:1317
-#: Opcodes/uggab.c:1344 Opcodes/uggab.c:1364 Opcodes/uggab.c:1407
+#: Engine/fgens.c:2252 Engine/fgens.c:2340 Engine/fgens.c:2364
+#: Opcodes/midiops2.c:233 Opcodes/midiops2.c:388 Opcodes/midiops2.c:470
+#: Opcodes/uggab.c:1482 Opcodes/uggab.c:1509 Opcodes/uggab.c:1529
+#: Opcodes/uggab.c:1572
 #, c-format
 msgid "Invalid ftable no. %f"
 msgstr ""
 
-#: Engine/fgens.c:2251
+#: Engine/fgens.c:2257
 #, c-format
 msgid "deferred-size ftable %f illegal here"
 msgstr ""
 
-#: Engine/fgens.c:2278 Engine/fgens.c:2848
+#: Engine/fgens.c:2284 Engine/fgens.c:2875
 #, c-format
 msgid "Deferred load of '%s' failed"
 msgstr ""
 
-#: Engine/fgens.c:2340
+#: Engine/fgens.c:2346
 #, c-format
 msgid "Deferred-size ftable %f load not available at perf time."
 msgstr ""
 
-#: Engine/fgens.c:2399
+#: Engine/fgens.c:2405
 #, c-format
 msgid "non-deferred ftable %d needs size %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2446 Opcodes/loscilx.c:64
+#: Engine/fgens.c:2452 Opcodes/loscilx.c:64
 #, c-format
 msgid "invalid sample format: %d"
 msgstr ""
 
-#: Engine/fgens.c:2454 Engine/fgens.c:2714
+#: Engine/fgens.c:2460 Engine/fgens.c:2719
 #, c-format
 msgid "channel %d illegal"
 msgstr ""
 
-#: Engine/fgens.c:2460
+#: Engine/fgens.c:2466
 msgid "deferred alloc\n"
 msgstr ""
 
-#: Engine/fgens.c:2468
+#: Engine/fgens.c:2474 Engine/fgens.c:2792
 msgid "deferred size, but filesize unknown"
 msgstr ""
 
-#: Engine/fgens.c:2471
+#: Engine/fgens.c:2477 Engine/fgens.c:2796
 #, c-format
 msgid "  defer length %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2540
+#: Engine/fgens.c:2546
 msgid "GEN1: input file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2544
+#: Engine/fgens.c:2550
 #, c-format
 msgid "\tlooping endpoint %d exceeds ftsize %d\n"
 msgstr ""
 
-#: Engine/fgens.c:2566
+#: Engine/fgens.c:2572
 msgid "GEN1 read error"
 msgstr ""
 
-#: Engine/fgens.c:2571
+#: Engine/fgens.c:2577
 msgid "GEN1: aiff file truncated by ftable size"
 msgstr ""
 
-#: Engine/fgens.c:2572
+#: Engine/fgens.c:2578
 #, c-format
 msgid "\taudio samps %d exceeds ftsize %d"
 msgstr ""
 
-#: Engine/fgens.c:2616
+#: Engine/fgens.c:2622
 msgid "wrong number of ftable arguments"
 msgstr ""
 
-#: Engine/fgens.c:2626 OOps/pstream.c:326
+#: Engine/fgens.c:2632 OOps/pstream.c:326
 msgid "Failed to load PVOC-EX file"
 msgstr ""
 
-#: Engine/fgens.c:2637 InOut/midirecv.c:416 OOps/midiops.c:377
+#: Engine/fgens.c:2643 InOut/midirecv.c:416 OOps/midiops.c:377
 #: OOps/midiops.c:419 OOps/midiops.c:431
 msgid "illegal channel number"
 msgstr ""
 
-#: Engine/fgens.c:2655
+#: Engine/fgens.c:2661
 msgid "ftable size too small"
 msgstr ""
 
-#: Engine/fgens.c:2730 Opcodes/mp3in.c:80 Opcodes/mp3in.c:219
+#: Engine/fgens.c:2735 Opcodes/mp3in.c:87 Opcodes/mp3in.c:229
 msgid "Not enough memory\n"
 msgstr ""
 
-#: Engine/fgens.c:2873
+#: Engine/fgens.c:2901
 msgid "gen51: invalid number of p-fields (too few grades)"
 msgstr ""
 
-#: Engine/fgens.c:2913
+#: Engine/fgens.c:2941
 msgid "number of channels inconsistent with number of args"
 msgstr ""
 
-#: Engine/fgens.c:3072
+#: Engine/fgens.c:3100
 msgid "GEN53: invalid number of gen arguments"
 msgstr ""
 
-#: Engine/fgens.c:3082
+#: Engine/fgens.c:3110
 msgid "GEN53: invalid table length"
 msgstr ""
 
-#: Engine/fgens.c:3086
+#: Engine/fgens.c:3114
 msgid "GEN53: invalid source table number"
 msgstr ""
 
-#: Engine/fgens.c:3089
+#: Engine/fgens.c:3117
 msgid "GEN53: mode must be in the range 0 to 15"
 msgstr ""
 
-#: Engine/fgens.c:3093
+#: Engine/fgens.c:3121
 msgid "GEN53: invalid source table length"
 msgstr ""
 
-#: Engine/fgens.c:3098
+#: Engine/fgens.c:3126
 msgid "GEN53: invalid window table"
 msgstr ""
 
@@ -1029,36 +1030,36 @@ msgstr ""
 msgid "subinstr: not initialised"
 msgstr ""
 
-#: Engine/insert.c:1855
+#: Engine/insert.c:1856
 #, c-format
 msgid ""
 "instr %d allocated at %p\n"
 "\tlclbas %p, opds %p\n"
 msgstr ""
 
-#: Engine/insert.c:1872
+#: Engine/insert.c:1873
 #, c-format
 msgid "op %d (%s) allocated at %p\n"
 msgstr ""
 
-#: Engine/insert.c:1898
+#: Engine/insert.c:1899
 msgid "null iopadr"
 msgstr ""
 
-#: Engine/insert.c:1909
+#: Engine/insert.c:1910
 msgid "null opadr"
 msgstr ""
 
-#: Engine/insert.c:1966
+#: Engine/insert.c:1967
 msgid "inconsistent opds total"
 msgstr ""
 
-#: Engine/insert.c:2011
+#: Engine/insert.c:2012
 #, c-format
 msgid "Instrument %s is still active"
 msgstr ""
 
-#: Engine/insert.c:2014
+#: Engine/insert.c:2015
 #, c-format
 msgid "Instrument %d is still active"
 msgstr ""
@@ -1068,8 +1069,8 @@ msgid "-L stdin fcntl failed"
 msgstr ""
 
 #: Engine/linevent.c:99 Engine/linevent.c:112 OOps/dumpf.c:57 OOps/dumpf.c:82
-#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:274 OOps/dumpf.c:301
-#: OOps/dumpf.c:328 OOps/dumpf.c:355 OOps/dumpf.c:527 util/hetro.c:249
+#: OOps/dumpf.c:107 OOps/dumpf.c:132 OOps/dumpf.c:276 OOps/dumpf.c:303
+#: OOps/dumpf.c:330 OOps/dumpf.c:357 OOps/dumpf.c:528 util/hetro.c:249
 #, c-format
 msgid "Cannot open %s"
 msgstr ""
@@ -1233,210 +1234,206 @@ msgid ""
 "File '%s' (sr = %d Hz, %d channel(s), %lu sample frames) loaded into memory\n"
 msgstr ""
 
-#: Engine/musmon.c:81
+#: Engine/musmon.c:80
 #, c-format
 msgid "Elapsed time at %s: real: %.3fs, CPU: %.3fs\n"
 msgstr ""
 
-#: Engine/musmon.c:108
+#: Engine/musmon.c:107
 msgid "illegal istartempo value"
 msgstr ""
 
-#: Engine/musmon.c:111
+#: Engine/musmon.c:110
 msgid "Beat mode not in force"
 msgstr ""
 
-#: Engine/musmon.c:184 Top/main.c:121
+#: Engine/musmon.c:183 Top/main.c:121
 #, c-format
 msgid "Csound version %s beta (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:187 Top/main.c:124
+#: Engine/musmon.c:186 Top/main.c:124
 #, c-format
 msgid "Csound version %s (double samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:192 Top/main.c:113
+#: Engine/musmon.c:191 Top/main.c:113
 #, c-format
 msgid "Csound version %s beta (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:195 Top/main.c:116
+#: Engine/musmon.c:194 Top/main.c:116
 #, c-format
 msgid "Csound version %s (float samples) %s\n"
 msgstr ""
 
-#: Engine/musmon.c:220
+#: Engine/musmon.c:219
 msgid "orch now loaded\n"
 msgstr ""
 
-#: Engine/musmon.c:245
+#: Engine/musmon.c:244
 msgid "k-period aligned audio buffering\n"
 msgstr ""
 
-#: Engine/musmon.c:261
+#: Engine/musmon.c:260
 #, c-format
 msgid "audio buffered in %d sample-frame blocks\n"
 msgstr ""
 
-#: Engine/musmon.c:283
+#: Engine/musmon.c:282
 msgid "using Cscore processing\n"
 msgstr ""
 
-#: Engine/musmon.c:286
+#: Engine/musmon.c:285
 msgid "cannot create cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:299
+#: Engine/musmon.c:301
 msgid "cannot reopen cscore.out"
 msgstr ""
 
-#: Engine/musmon.c:303
+#: Engine/musmon.c:314
 msgid "cannot reopen cscore.srt"
 msgstr ""
 
-#: Engine/musmon.c:305
+#: Engine/musmon.c:316
 msgid "sorting cscore.out ..\n"
 msgstr ""
 
-#: Engine/musmon.c:311 Top/main.c:401
+#: Engine/musmon.c:322 Top/main.c:397
 msgid "\t... done\n"
 msgstr ""
 
-#: Engine/musmon.c:312
+#: Engine/musmon.c:323
 msgid "playing from cscore.srt\n"
 msgstr ""
 
-#: Engine/musmon.c:316 Engine/musmon.c:446 Engine/musmon.c:1015
-#: Engine/musmon.c:1216
+#: Engine/musmon.c:327 Engine/musmon.c:457 Engine/musmon.c:1026
+#: Engine/musmon.c:1227
 #, c-format
 msgid "SECTION %d:\n"
 msgstr ""
 
-#: Engine/musmon.c:390
+#: Engine/musmon.c:401
 msgid "end of score.\t\t   overall amps:"
 msgstr ""
 
-#: Engine/musmon.c:401
+#: Engine/musmon.c:412
 msgid ""
 "\n"
 "\t   overall samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:405
+#: Engine/musmon.c:416
 #, c-format
 msgid ""
 "\n"
 "%d errors in performance\n"
 msgstr ""
 
-#: Engine/musmon.c:407
+#: Engine/musmon.c:418
 msgid "end of performance"
 msgstr ""
 
-#: Engine/musmon.c:421
+#: Engine/musmon.c:432
 msgid "no sound written to disk\n"
 msgstr ""
 
-#: Engine/musmon.c:436
+#: Engine/musmon.c:447
 #, c-format
 msgid "%c\tbeep!\n"
 msgstr ""
 
-#: Engine/musmon.c:502 Engine/musmon.c:548
+#: Engine/musmon.c:513 Engine/musmon.c:559
 msgid "\t number of samples out of range:"
 msgstr ""
 
-#: Engine/musmon.c:541
+#: Engine/musmon.c:552
 #, c-format
 msgid "end of section %d\t sect peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:543
+#: Engine/musmon.c:554
 msgid "end of lplay event list\t      peak amps:"
 msgstr ""
 
-#: Engine/musmon.c:607 Engine/musmon.c:632
+#: Engine/musmon.c:618 Engine/musmon.c:643
 #, c-format
 msgid " - note deleted. instr %s undefined"
 msgstr ""
 
-#: Engine/musmon.c:611
+#: Engine/musmon.c:622
 #, c-format
 msgid "Setting instrument %s %s\n"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "off"
 msgstr ""
 
-#: Engine/musmon.c:612 Engine/musmon.c:625
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:207
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:208
+#: Engine/musmon.c:623 Engine/musmon.c:636
 msgid "on"
 msgstr ""
 
-#: Engine/musmon.c:620 Engine/musmon.c:659
+#: Engine/musmon.c:631 Engine/musmon.c:670
 #, c-format
 msgid " - note deleted. instr %d(%d) undefined"
 msgstr ""
 
-#: Engine/musmon.c:624
+#: Engine/musmon.c:635
 #, c-format
 msgid "Setting instrument %d %s\n"
 msgstr ""
 
-#: Engine/musmon.c:650
+#: Engine/musmon.c:661
 #, c-format
 msgid " - note deleted.  i%d (%s) had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:680
+#: Engine/musmon.c:691
 #, c-format
 msgid " - note deleted.  i%d had %d init errors"
 msgstr ""
 
-#: Engine/musmon.c:701
+#: Engine/musmon.c:712
 #, c-format
 msgid "time advanced %5.3f beats by score request\n"
 msgstr ""
 
-#: Engine/musmon.c:719
+#: Engine/musmon.c:730
 #, c-format
 msgid "\t\t   T%7.3f - note deleted. "
 msgstr ""
 
-#: Engine/musmon.c:723
+#: Engine/musmon.c:734
 #, c-format
 msgid "instr %s had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:725
+#: Engine/musmon.c:736
 #, c-format
 msgid "instr %d had %d init errors\n"
 msgstr ""
 
-#: Engine/musmon.c:816
+#: Engine/musmon.c:827
 msgid "terminating.\n"
 msgstr ""
 
-#: Engine/musmon.c:902
+#: Engine/musmon.c:913
 #, c-format
 msgid "error in score.  illegal opcode %c (ASCII %d)\n"
 msgstr ""
 
-#: Engine/musmon.c:1129
+#: Engine/musmon.c:1140
 msgid "insert_score_event(): invalid instrument number or name\n"
 msgstr ""
 
-#: Engine/musmon.c:1149
+#: Engine/musmon.c:1160
 #, c-format
 msgid "insert_score_event(): unknown opcode: %c\n"
 msgstr ""
 
-#: Engine/musmon.c:1172
+#: Engine/musmon.c:1183
 msgid "insert_score_event(): insufficient p-fields\n"
 msgstr ""
 
@@ -1459,105 +1456,105 @@ msgstr ""
 msgid "cannot find the specified instrument or opcode"
 msgstr ""
 
-#: Engine/new_orc_parser.c:91
+#: Engine/new_orc_parser.c:119
 msgid "Unmatched #ifdef\n"
 msgstr ""
 
-#: Engine/otran.c:149 Engine/symbtab.c:413
+#: Engine/otran.c:149 Engine/symbtab.c:416
 #, c-format
 msgid "invalid input type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:154 Engine/symbtab.c:418
+#: Engine/otran.c:154 Engine/symbtab.c:421
 #, c-format
 msgid "too many input args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:169 Engine/symbtab.c:433
+#: Engine/otran.c:169 Engine/symbtab.c:436
 #, c-format
 msgid "too many output args for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:194 Engine/symbtab.c:458
+#: Engine/otran.c:194 Engine/symbtab.c:461
 #, c-format
 msgid "invalid output type for opcode %s"
 msgstr ""
 
-#: Engine/otran.c:325 Engine/otran.c:332
+#: Engine/otran.c:324 Engine/otran.c:331
 msgid "missing instrument number or name"
 msgstr ""
 
-#: Engine/otran.c:337
+#: Engine/otran.c:336
 msgid "illegal instr number"
 msgstr ""
 
-#: Engine/otran.c:388
+#: Engine/otran.c:387
 msgid "No opcode name"
 msgstr ""
 
-#: Engine/otran.c:393 Engine/symbtab.c:538
+#: Engine/otran.c:392 Engine/symbtab.c:541
 msgid "invalid name for opcode"
 msgstr ""
 
-#: Engine/otran.c:397
+#: Engine/otran.c:396
 #, c-format
 msgid ""
 "opcode declaration error (usage: opcode name, outtypes, intypes) -- opcode %s"
 msgstr ""
 
-#: Engine/otran.c:408 Engine/symbtab.c:548
+#: Engine/otran.c:407 Engine/symbtab.c:551
 #, c-format
 msgid "cannot redefine %s"
 msgstr ""
 
-#: Engine/otran.c:412 Engine/symbtab.c:553
+#: Engine/otran.c:411 Engine/symbtab.c:556
 #, c-format
 msgid "WARNING: redefined opcode: %s\n"
 msgstr ""
 
-#: Engine/otran.c:503
+#: Engine/otran.c:502
 msgid "string constant used as output"
 msgstr ""
 
-#: Engine/otran.c:534
+#: Engine/otran.c:533
 msgid "Missing endin"
 msgstr ""
 
-#: Engine/otran.c:599
+#: Engine/otran.c:598
 msgid "perf-pass statements illegal in header blk"
 msgstr ""
 
-#: Engine/otran.c:603
+#: Engine/otran.c:602
 #, c-format
 msgid "%d syntax errors in orchestra.  compilation invalid"
 msgstr ""
 
-#: Engine/otran.c:1257
+#: Engine/otran.c:1256
 msgid "bad value for 0dbfs: must be positive."
 msgstr ""
 
-#: Engine/otran.c:1267
+#: Engine/otran.c:1266
 #, c-format
 msgid "sample rate overrides: esr = %7.4f, ekr = %7.4f, ksmps = %d\n"
 msgstr ""
 
-#: Engine/otran.c:1339
+#: Engine/otran.c:1338
 msgid "internal error: string constant outarg"
 msgstr ""
 
-#: Engine/otran.c:1365
+#: Engine/otran.c:1364
 #, c-format
 msgid "i%d pset args != pmax"
 msgstr ""
 
-#: Engine/otran.c:1428
+#: Engine/otran.c:1427
 #, c-format
 msgid ""
 "sr = %.7g, kr = %.7g, ksmps = %.7g\n"
 "error:"
 msgstr ""
 
-#: Engine/otran.c:1461
+#: Engine/otran.c:1460
 msgid "header init errors"
 msgstr ""
 
@@ -1569,7 +1566,7 @@ msgstr ""
 msgid "Unexpected end of orchestra file"
 msgstr ""
 
-#: Engine/rdorch.c:431 Engine/sread.c:758
+#: Engine/rdorch.c:431 Engine/sread.c:765
 #, c-format
 msgid "Macro definition for %*s\n"
 msgstr ""
@@ -1587,12 +1584,12 @@ msgstr ""
 msgid "cannot open orch file %s"
 msgstr ""
 
-#: Engine/rdorch.c:684 Engine/sread.c:1584
+#: Engine/rdorch.c:684 Engine/sread.c:1595
 #, c-format
 msgid "Macro definition for %s\n"
 msgstr ""
 
-#: Engine/rdorch.c:716 Engine/sread.c:1607
+#: Engine/rdorch.c:716 Engine/sread.c:1618
 msgid "macro error\n"
 msgstr ""
 
@@ -1613,7 +1610,7 @@ msgstr ""
 msgid "Unmatched #endif"
 msgstr ""
 
-#: Engine/rdorch.c:872 Engine/sread.c:1694
+#: Engine/rdorch.c:872 Engine/sread.c:1710
 #, c-format
 msgid "macro %s undefined\n"
 msgstr ""
@@ -1631,21 +1628,21 @@ msgstr ""
 msgid "Unknown # option: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:928 Engine/sread.c:380
+#: Engine/rdorch.c:928 Engine/sread.c:383
 #, c-format
 msgid "Undefined macro: '%s'"
 msgstr ""
 
-#: Engine/rdorch.c:930 Engine/sread.c:378
+#: Engine/rdorch.c:930 Engine/sread.c:381
 msgid "Macro expansion symbol ($) without macro name"
 msgstr ""
 
-#: Engine/rdorch.c:935 Engine/sread.c:384
+#: Engine/rdorch.c:935 Engine/sread.c:387
 #, c-format
 msgid "$%s matches macro name $%s"
 msgstr ""
 
-#: Engine/rdorch.c:952 Engine/sread.c:401
+#: Engine/rdorch.c:952 Engine/sread.c:404 Engine/sread.c:420
 msgid "Syntax error in macro call"
 msgstr ""
 
@@ -1865,7 +1862,7 @@ msgid ""
 "\tremainder of line flushed\n"
 msgstr ""
 
-#: Engine/rdscor.c:146
+#: Engine/rdscor.c:148
 msgid "ERROR: too many pfields: "
 msgstr ""
 
@@ -1915,228 +1912,232 @@ msgstr ""
 msgid "Internal error op=%c"
 msgstr ""
 
-#: Engine/sread.c:464
+#: Engine/sread.c:469
 msgid "illegal placement of number in [] expression"
 msgstr ""
 
-#: Engine/sread.c:491
+#: Engine/sread.c:496
 msgid "illegal placement of operator ~ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:501
+#: Engine/sread.c:506
 msgid "illegal placement of operator @ or @@ in [] expression"
 msgstr ""
 
-#: Engine/sread.c:533 Engine/sread.c:547
+#: Engine/sread.c:538 Engine/sread.c:552
 #, c-format
 msgid "illegal placement of operator %c in [] expression"
 msgstr ""
 
-#: Engine/sread.c:559
+#: Engine/sread.c:564
 msgid "illegal placement of '(' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:565
+#: Engine/sread.c:570
 msgid "missing operand before ')' in [] expression"
 msgstr ""
 
-#: Engine/sread.c:579
+#: Engine/sread.c:584
 msgid "missing operand before closing bracket in []"
 msgstr ""
 
-#: Engine/sread.c:594
+#: Engine/sread.c:599
 #, c-format
 msgid "illegal character %c(%.2x) in [] expression"
 msgstr ""
 
-#: Engine/sread.c:646
+#: Engine/sread.c:651
 #, c-format
 msgid "%s Nested LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:652
+#: Engine/sread.c:657
 #, c-format
 msgid "External LOOP terminated, level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:696
+#: Engine/sread.c:701
 #, c-format
 msgid "%s  Nested LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:701
+#: Engine/sread.c:706
 #, c-format
 msgid " External LOOP section (%d) Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:715
+#: Engine/sread.c:720
 msgid "Loop terminated\n"
 msgstr ""
 
-#: Engine/sread.c:733
+#: Engine/sread.c:740
 #, c-format
 msgid "Repeat section (%d)\n"
 msgstr ""
 
-#: Engine/sread.c:736
+#: Engine/sread.c:743
 msgid "Repeat section\n"
 msgstr ""
 
-#: Engine/sread.c:761
+#: Engine/sread.c:768
 msgid "Invalid macro name for --smacro"
 msgstr ""
 
-#: Engine/sread.c:865
+#: Engine/sread.c:872
 #, c-format
 msgid "Clockbase = %f\n"
 msgstr ""
 
-#: Engine/sread.c:934
+#: Engine/sread.c:942
 msgid "Loops are nested too deeply"
 msgstr ""
 
-#: Engine/sread.c:948
+#: Engine/sread.c:956
 msgid "{: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:957
+#: Engine/sread.c:965
 #, c-format
 msgid "%s Nested LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:963
+#: Engine/sread.c:971
 #, c-format
 msgid "External LOOP=%d Level:%d\n"
 msgstr ""
 
-#: Engine/sread.c:1047
+#: Engine/sread.c:1056
 msgid "r: invalid repeat count"
 msgstr ""
 
-#: Engine/sread.c:1049
+#: Engine/sread.c:1058
 #, c-format
 msgid "Repeats=%d\n"
 msgstr ""
 
-#: Engine/sread.c:1093
+#: Engine/sread.c:1102
 #, c-format
 msgid "Named section >>>%s<<<\n"
 msgstr ""
 
-#: Engine/sread.c:1108
+#: Engine/sread.c:1117
 #, c-format
 msgid "%d: File %s position %ld\n"
 msgstr ""
 
-#: Engine/sread.c:1133
+#: Engine/sread.c:1142
 #, c-format
 msgid "Name %s not found"
 msgstr ""
 
-#: Engine/sread.c:1135
+#: Engine/sread.c:1144
 #, c-format
 msgid "Duplicate %d: %s (%s,%ld)\n"
 msgstr ""
 
-#: Engine/sread.c:1164
+#: Engine/sread.c:1174
 #, c-format
 msgid "Warp_factor = %f\n"
 msgstr ""
 
-#: Engine/sread.c:1189
+#: Engine/sread.c:1199
 msgid "sread is confused on legal opcodes\n"
 msgstr ""
 
-#: Engine/sread.c:1251
+#: Engine/sread.c:1261
 msgid "No previous event for ^"
 msgstr ""
 
-#: Engine/sread.c:1256
+#: Engine/sread.c:1266
 #, c-format
 msgid "illegal space following %s, zero substituted"
 msgstr ""
 
-#: Engine/sread.c:1286
+#: Engine/sread.c:1296
 #, c-format
 msgid "ignoring '%s' in '%c' event"
 msgstr ""
 
-#: Engine/sread.c:1289
+#: Engine/sread.c:1299
 msgid "! invalid in p1, p2, or p3"
 msgstr ""
 
-#: Engine/sread.c:1290 Engine/sread.c:1295 Engine/sread.c:1738
-#: Engine/sread.c:1761 Engine/sread.c:1775
+#: Engine/sread.c:1300 Engine/sread.c:1305 Engine/sread.c:1754
+#: Engine/sread.c:1777 Engine/sread.c:1791
 msgid "      remainder of line flushed\n"
 msgstr ""
 
-#: Engine/sread.c:1294
+#: Engine/sread.c:1304
 #, c-format
 msgid "illegal character after !: '%c'"
 msgstr ""
 
-#: Engine/sread.c:1373
+#: Engine/sread.c:1384
 #, c-format
 msgid "WARNING: instr %s not found, assuming insno = -1\n"
 msgstr ""
 
-#: Engine/sread.c:1393
+#: Engine/sread.c:1404
 msgid "sread: illegal use of carry,   0 substituted\n"
 msgstr ""
 
-#: Engine/sread.c:1539
+#: Engine/sread.c:1550
 msgid "Improper \\"
 msgstr ""
 
-#: Engine/sread.c:1570
+#: Engine/sread.c:1581
 msgid "Not #define"
 msgstr ""
 
-#: Engine/sread.c:1630
+#: Engine/sread.c:1627 Engine/sread.c:1635
+msgid "Syntax error in macro definition"
+msgstr ""
+
+#: Engine/sread.c:1646
 #, c-format
 msgid "Macro %s with %d arguments defined\n"
 msgstr ""
 
-#: Engine/sread.c:1642
+#: Engine/sread.c:1658
 msgid "Not #include"
 msgstr ""
 
-#: Engine/sread.c:1671
+#: Engine/sread.c:1687
 #, c-format
 msgid "Cannot open #include'd file %s"
 msgstr ""
 
-#: Engine/sread.c:1681
+#: Engine/sread.c:1697
 msgid "Not #undef"
 msgstr ""
 
-#: Engine/sread.c:1700
+#: Engine/sread.c:1716
 msgid "unknown # option"
 msgstr ""
 
-#: Engine/sread.c:1737
+#: Engine/sread.c:1753
 #, c-format
 msgid "illegal opcode %c"
 msgstr ""
 
-#: Engine/sread.c:1760
+#: Engine/sread.c:1776
 #, c-format
 msgid "unexpected char %c"
 msgstr ""
 
-#: Engine/sread.c:1774
+#: Engine/sread.c:1790
 msgid "illegally placed string"
 msgstr ""
 
-#: Engine/sread.c:1781
+#: Engine/sread.c:1797
 msgid "unmatched quote"
 msgstr ""
 
-#: Engine/sread.c:1825
+#: Engine/sread.c:1841
 msgid "sread: illegal number format:  "
 msgstr ""
 
-#: Engine/sread.c:1831
+#: Engine/sread.c:1847
 msgid "   zero substituted.\n"
 msgstr ""
 
@@ -2195,16 +2196,11 @@ msgstr ""
 msgid "    String truncated\n"
 msgstr ""
 
-#: Engine/symbtab.c:208
+#: Engine/symbtab.c:211
 #, c-format
 msgid "Type confusion for %s (%d,%d), replacing\n"
 msgstr ""
 
-#: Engine/symbtab.c:345
-#, c-format
-msgid "Unknown word type for %s on line %d\n"
-msgstr ""
-
 #: Engine/twarp.c:88
 msgid "twarp: illegal opcode\n"
 msgstr ""
@@ -2221,11 +2217,11 @@ msgstr ""
 msgid "twarp: t segments exceed twarp array\n"
 msgstr ""
 
-#: InOut/cmidi.c:233
+#: InOut/cmidi.c:236
 msgid "CoreMIDI real time MIDI plugin for Csound\n"
 msgstr ""
 
-#: InOut/cmidi.c:247
+#: InOut/cmidi.c:250
 msgid "rtmidi: CoreMIDI module enabled\n"
 msgstr ""
 
@@ -2280,7 +2276,7 @@ msgstr ""
 msgid "writing %d sample blks of %d-bit floats to %s \n"
 msgstr ""
 
-#: InOut/libsnd.c:744 util/srconv.c:484
+#: InOut/libsnd.c:744 util/srconv.c:485
 #, c-format
 msgid "writing %d-byte blks of %s to %s"
 msgstr ""
@@ -2844,182 +2840,182 @@ msgstr ""
 msgid "rtmidi: PortMIDI module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:110
+#: InOut/rtalsa.c:113
 msgid "--scheduler: invalid priority value; the allowed range is:"
 msgstr ""
 
-#: InOut/rtalsa.c:111
+#: InOut/rtalsa.c:114
 msgid "  -20 to -1: set nice level"
 msgstr ""
 
-#: InOut/rtalsa.c:112
+#: InOut/rtalsa.c:115
 msgid "          0: normal scheduling, but lock memory"
 msgstr ""
 
-#: InOut/rtalsa.c:113
+#: InOut/rtalsa.c:116
 #, c-format
 msgid "    1 to %d: SCHED_RR with the specified priority (DANGEROUS)"
 msgstr ""
 
-#: InOut/rtalsa.c:330
+#: InOut/rtalsa.c:333
 #, c-format
 msgid " *** Cannot open device '%s' for audio output: %s"
 msgstr ""
 
-#: InOut/rtalsa.c:333
+#: InOut/rtalsa.c:336
 #, c-format
 msgid " *** Cannot open device '%s' for audio input: %s"
 msgstr ""
 
-#: InOut/rtalsa.c:394
+#: InOut/rtalsa.c:397
 #, c-format
 msgid "ALSA: -B %d not allowed on this device; using %d instead\n"
 msgstr ""
 
-#: InOut/rtalsa.c:417
+#: InOut/rtalsa.c:420
 #, c-format
 msgid "ALSA: -b %d not allowed on this device; using %d instead\n"
 msgstr ""
 
-#: InOut/rtalsa.c:430
+#: InOut/rtalsa.c:433
 #, c-format
 msgid "ALSA %s: total buffer size: %d, period size: %d\n"
 msgstr ""
 
-#: InOut/rtalsa.c:506
+#: InOut/rtalsa.c:509
 msgid " *** ALSA: must specify a device name, not a number (e.g. -odac:hw:0,0)"
 msgstr ""
 
-#: InOut/rtalsa.c:514
+#: InOut/rtalsa.c:517
 #, c-format
 msgid " *** ALSA: %s: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:601
+#: InOut/rtalsa.c:604
 msgid "Error reading data from audio input device"
 msgstr ""
 
-#: InOut/rtalsa.c:646
+#: InOut/rtalsa.c:649
 msgid "Error writing data to audio output device"
 msgstr ""
 
-#: InOut/rtalsa.c:687
+#: InOut/rtalsa.c:690
 msgid "ALSA MIDI: memory allocation failure"
 msgstr ""
 
-#: InOut/rtalsa.c:694
+#: InOut/rtalsa.c:697
 #, c-format
 msgid "ALSA: error opening MIDI input device: '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:698
+#: InOut/rtalsa.c:701
 #, c-format
 msgid "ALSA: opened MIDI input device '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:717
+#: InOut/rtalsa.c:720
 msgid "ALSA midi: Using all devices.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:746
+#: InOut/rtalsa.c:749
 #, c-format
 msgid "ALSA midi: Error opening device: %s\n"
 msgstr ""
 
-#: InOut/rtalsa.c:768
+#: InOut/rtalsa.c:771
 msgid "ALSA midi: No devices found.\n"
 msgstr ""
 
-#: InOut/rtalsa.c:867
+#: InOut/rtalsa.c:870
 #, c-format
 msgid "ALSA: error opening MIDI output device '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:870
+#: InOut/rtalsa.c:873
 #, c-format
 msgid "ALSA: opened MIDI output device '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:910
+#: InOut/rtalsa.c:913
 msgid "-M stdin fcntl failed"
 msgstr ""
 
-#: InOut/rtalsa.c:918
+#: InOut/rtalsa.c:921
 #, c-format
 msgid "cannot open %s"
 msgstr ""
 
-#: InOut/rtalsa.c:929
+#: InOut/rtalsa.c:932
 msgid "MIDI receive: cannot get termios info."
 msgstr ""
 
-#: InOut/rtalsa.c:937
+#: InOut/rtalsa.c:940
 msgid "MIDI receive: cannot set input baud rate."
 msgstr ""
 
-#: InOut/rtalsa.c:943
+#: InOut/rtalsa.c:946
 msgid "MIDI receive: cannot set termios."
 msgstr ""
 
-#: InOut/rtalsa.c:947
+#: InOut/rtalsa.c:950
 #, c-format
 msgid "Opened MIDI input device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:987
+#: InOut/rtalsa.c:990
 #, c-format
 msgid "sensMIDI: retval errno %d"
 msgstr ""
 
-#: InOut/rtalsa.c:1054
+#: InOut/rtalsa.c:1057
 #, c-format
 msgid "Error opening MIDI output device file '%s'"
 msgstr ""
 
-#: InOut/rtalsa.c:1058
+#: InOut/rtalsa.c:1061
 #, c-format
 msgid "Opened MIDI output device file '%s'\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1101 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
+#: InOut/rtalsa.c:1104 InOut/rtcoreaudio.c:71 InOut/rtcoreaudio.c:81
 msgid "warning... could not create global var\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1106
+#: InOut/rtalsa.c:1109
 msgid "RT scheduler priority, alsa module"
 msgstr ""
 
-#: InOut/rtalsa.c:1111
+#: InOut/rtalsa.c:1114
 msgid "ALSA real-time audio and MIDI module for Csound by Istvan Varga\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1142
+#: InOut/rtalsa.c:1145
 msgid "rtaudio: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1157
+#: InOut/rtalsa.c:1160
 msgid "rtmidi: ALSA module enabled\n"
 msgstr ""
 
-#: InOut/rtalsa.c:1166
+#: InOut/rtalsa.c:1169
 msgid "rtmidi: devfile module enabled\n"
 msgstr ""
 
-#: InOut/rtauhal.c:163
+#: InOut/rtauhal.c:162
 #, c-format
 msgid "selected input device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:166
+#: InOut/rtauhal.c:165
 #, c-format
 msgid "selected output device: %s \n"
 msgstr ""
 
-#: InOut/rtauhal.c:524
+#: InOut/rtauhal.c:523
 msgid "AuHAL module: device closed\n"
 msgstr ""
 
-#: InOut/rtauhal.c:541
+#: InOut/rtauhal.c:540
 msgid "rtaudio: coreaaudio-AuHAL module enabled\n"
 msgstr ""
 
@@ -3114,7 +3110,7 @@ msgstr ""
 
 #: InOut/rtjack.c:317 InOut/rtjack.c:330 InOut/rtjack.c:335 InOut/rtjack.c:552
 #: InOut/rtjack.c:590 InOut/rtjack.c:595 InOut/rtjack.c:616 InOut/rtjack.c:621
-#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315 Opcodes/ftgen.c:79
+#: InOut/rtwinmm.c:112 InOut/rtwinmm.c:315
 msgid "memory allocation failure"
 msgstr ""
 
@@ -3679,58 +3675,58 @@ msgstr ""
 msgid "diskin2: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:231
+#: OOps/diskin2.c:232
 #, c-format
 msgid ""
 "diskin2: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:240
+#: OOps/diskin2.c:242
 msgid ""
 "diskin2: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:270
+#: OOps/diskin2.c:272
 #, c-format
 msgid "diskin2: warning: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:331
+#: OOps/diskin2.c:334
 msgid "diskin2: not initialised"
 msgstr ""
 
-#: OOps/diskin2.c:560
+#: OOps/diskin2.c:566
 msgid "soundin: invalid number of channels"
 msgstr ""
 
-#: OOps/diskin2.c:581
+#: OOps/diskin2.c:587
 msgid "soundin: unknown sample format"
 msgstr ""
 
-#: OOps/diskin2.c:591
+#: OOps/diskin2.c:597
 #, c-format
 msgid "soundin: %s: failed to open file"
 msgstr ""
 
-#: OOps/diskin2.c:599
+#: OOps/diskin2.c:605
 #, c-format
 msgid ""
 "soundin: opened '%s':\n"
 "         %d Hz, %d channel(s), %ld sample frames\n"
 msgstr ""
 
-#: OOps/diskin2.c:609
+#: OOps/diskin2.c:615
 msgid ""
 "soundin: number of output args inconsistent with number of file channels"
 msgstr ""
 
-#: OOps/diskin2.c:618
+#: OOps/diskin2.c:624
 #, c-format
 msgid "soundin: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
 
-#: OOps/diskin2.c:651
+#: OOps/diskin2.c:657
 msgid "soundin: not initialised"
 msgstr ""
 
@@ -3913,33 +3909,37 @@ msgid "tempest: not initialised"
 msgstr ""
 
 #: OOps/dumpf.c:45 OOps/dumpf.c:70 OOps/dumpf.c:95 OOps/dumpf.c:120
-#: OOps/dumpf.c:261 OOps/dumpf.c:288 OOps/dumpf.c:315 OOps/dumpf.c:342
+#: OOps/dumpf.c:263 OOps/dumpf.c:290 OOps/dumpf.c:317 OOps/dumpf.c:344
 msgid "unknown format request"
 msgstr ""
 
 #: OOps/dumpf.c:49 OOps/dumpf.c:74 OOps/dumpf.c:99 OOps/dumpf.c:124
-#: OOps/dumpf.c:265 OOps/dumpf.c:292 OOps/dumpf.c:319 OOps/dumpf.c:346
+#: OOps/dumpf.c:267 OOps/dumpf.c:294 OOps/dumpf.c:321 OOps/dumpf.c:348
 msgid "alaw and ulaw not implemented here"
 msgstr ""
 
-#: OOps/dumpf.c:193 OOps/dumpf.c:442
+#: OOps/dumpf.c:193 OOps/dumpf.c:443
 msgid "unknown kdump format"
 msgstr ""
 
+#: OOps/dumpf.c:196
+msgid "write failure in dumpk"
+msgstr ""
+
 #: OOps/fftlib.c:3195
 #, c-format
 msgid " *** fftlib.c: internal error: invalid FFT size: %d"
 msgstr ""
 
-#: OOps/goto_ops.c:93
+#: OOps/goto_ops.c:95
 msgid "negative time period"
 msgstr ""
 
-#: OOps/goto_ops.c:186
+#: OOps/goto_ops.c:188
 msgid "turnoff2: invalid instrument number"
 msgstr ""
 
-#: OOps/goto_ops.c:191
+#: OOps/goto_ops.c:193
 msgid "turnoff2: invalid mode parameter"
 msgstr ""
 
@@ -3956,11 +3956,11 @@ msgid "cpstabm: invalid modulator table"
 msgstr ""
 
 #: OOps/midiops.c:304 OOps/midiops.c:314 OOps/midiops.c:334 OOps/midiops.c:344
-#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/gab/sliderTable.c:567
-#: Opcodes/midiops2.c:56 Opcodes/midiops2.c:73 Opcodes/midiops2.c:111
-#: Opcodes/midiops2.c:145 Opcodes/midiops2.c:206 Opcodes/midiops2.c:237
-#: Opcodes/midiops2.c:298 Opcodes/midiops2.c:317 Opcodes/midiops2.c:357
-#: Opcodes/midiops2.c:388 Opcodes/midiops2.c:438 Opcodes/midiops2.c:472
+#: OOps/midiops.c:421 OOps/midiops.c:435 Opcodes/midiops2.c:59
+#: Opcodes/midiops2.c:76 Opcodes/midiops2.c:120 Opcodes/midiops2.c:154
+#: Opcodes/midiops2.c:221 Opcodes/midiops2.c:252 Opcodes/midiops2.c:316
+#: Opcodes/midiops2.c:335 Opcodes/midiops2.c:375 Opcodes/midiops2.c:406
+#: Opcodes/midiops2.c:456 Opcodes/midiops2.c:490
 msgid "illegal controller number"
 msgstr ""
 
@@ -4490,7 +4490,7 @@ msgstr ""
 msgid "--->  Connected. \n"
 msgstr ""
 
-#: OOps/remote.c:261 Opcodes/socksend.c:305
+#: OOps/remote.c:261 Opcodes/socksend.c:300
 msgid "write to socket failed"
 msgstr ""
 
@@ -4507,15 +4507,15 @@ msgid "setting socket option to reuse the addresse \n"
 msgstr ""
 
 #: OOps/remote.c:312 Opcodes/sockrecv.c:141 Opcodes/sockrecv.c:237
-#: Opcodes/socksend.c:284
+#: Opcodes/sockrecv.c:345
 msgid "bind failed"
 msgstr ""
 
-#: OOps/remote.c:316 Opcodes/socksend.c:289
+#: OOps/remote.c:316 Opcodes/sockrecv.c:350
 msgid "listen failed"
 msgstr ""
 
-#: OOps/remote.c:321 Opcodes/socksend.c:295
+#: OOps/remote.c:321 Opcodes/sockrecv.c:356
 msgid "accept failed"
 msgstr ""
 
@@ -4580,7 +4580,7 @@ msgid ""
 "*** This version of Csound was not compiled with remote event support ***\n"
 msgstr ""
 
-#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:834
+#: OOps/schedule.c:103 OOps/schedule.c:189 util1/scot/scot.c:839
 msgid "Instrument not defined"
 msgstr ""
 
@@ -4795,8 +4795,6 @@ msgid "oscil(krate): not initialised"
 msgstr ""
 
 #: OOps/ugens2.c:1139 OOps/ugens2.c:1167 OOps/ugens2.c:1192 OOps/ugens2.c:1219
-#: Opcodes/pitch.c:1580 Opcodes/pitch.c:1607 Opcodes/pitch.c:1634
-#: Opcodes/pitch.c:1663
 msgid "oscil: not initialised"
 msgstr ""
 
@@ -4912,7 +4910,7 @@ msgstr ""
 msgid "Seeding from current time %lu\n"
 msgstr ""
 
-#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/gab/gab.c:47 Opcodes/ugsc.c:186
+#: OOps/ugens5.c:198 OOps/ugens5.c:260 Opcodes/ugsc.c:186
 #, c-format
 msgid "illegal reson iscl value, %f"
 msgstr ""
@@ -5099,1338 +5097,466 @@ msgstr ""
 msgid "pan: not initialised"
 msgstr ""
 
-#: OOps/ugrw1.c:922 OOps/ugrw1.c:1247
+#: OOps/ugrw1.c:922 OOps/ugrw1.c:1234
 #, c-format
 msgid "Table write offset %f < 0 or > tablelength"
 msgstr ""
 
-#: OOps/ugrw1.c:1242
+#: OOps/ugrw1.c:1229
 #, c-format
 msgid "Table write k rate function table no. %f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1290 OOps/ugrw1.c:1313 OOps/ugrw1.c:1392
+#: OOps/ugrw1.c:1277 OOps/ugrw1.c:1300 OOps/ugrw1.c:1379
 #, c-format
 msgid "Table %f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1469
+#: OOps/ugrw1.c:1456
 #, c-format
 msgid "Table no. < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f\n"
 msgstr ""
 
-#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1558 OOps/ugrw1.c:1770 OOps/ugrw1.c:1811
+#: OOps/ugrw1.c:1472 OOps/ugrw1.c:1545 OOps/ugrw1.c:1757 OOps/ugrw1.c:1798
 #, c-format
 msgid "Destination dft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1498 OOps/ugrw1.c:1569
+#: OOps/ugrw1.c:1485 OOps/ugrw1.c:1556
 #, c-format
 msgid "Source 1 s1ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1508 OOps/ugrw1.c:1577
+#: OOps/ugrw1.c:1495 OOps/ugrw1.c:1564
 #, c-format
 msgid "Source 2 s2ft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1543
+#: OOps/ugrw1.c:1530
 #, c-format
 msgid "Table number < 1 dft=%.2f  s1ft=%.2f  s2ft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1758 OOps/ugrw1.c:1800
+#: OOps/ugrw1.c:1745 OOps/ugrw1.c:1787
 #, c-format
 msgid "Table no. < 1 dft=%.2f  sft=%.2f"
 msgstr ""
 
-#: OOps/ugrw1.c:1781 OOps/ugrw1.c:1822 Opcodes/fareyseq.c:453
-#: Opcodes/fareyseq.c:475
+#: OOps/ugrw1.c:1768 OOps/ugrw1.c:1809
 #, c-format
 msgid "Source sft table %.2f not found."
 msgstr ""
 
-#: OOps/ugrw1.c:1911 OOps/ugrw1.c:2032
+#: OOps/ugrw1.c:1898 OOps/ugrw1.c:2019
 #, c-format
 msgid "Table kfn=%.2f < 1"
 msgstr ""
 
-#: OOps/ugrw1.c:1919 OOps/ugrw1.c:2040
+#: OOps/ugrw1.c:1906 OOps/ugrw1.c:2027
 #, c-format
 msgid "kfn table %.2f not found"
 msgstr ""
 
-#: OOps/ugrw1.c:1931 OOps/ugrw1.c:2053
+#: OOps/ugrw1.c:1918 OOps/ugrw1.c:2040
 #, c-format
 msgid "Table kfn=%.2f length %ld shorter than ksmps %d"
 msgstr ""
 
-#: OOps/ugrw1.c:1940 OOps/ugrw1.c:2062
+#: OOps/ugrw1.c:1927 OOps/ugrw1.c:2049
 #, c-format
 msgid "kstart %.2f is outside table %.2f range 0 to %ld"
 msgstr ""
 
-#: OOps/ugrw1.c:2156
+#: OOps/ugrw1.c:2143
 msgid "zakinit should only be called once."
 msgstr ""
 
-#: OOps/ugrw1.c:2160
+#: OOps/ugrw1.c:2147
 msgid "zakinit: both isizea and isizek should be > 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2191
+#: OOps/ugrw1.c:2178
 msgid "No zk space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2210
+#: OOps/ugrw1.c:2197
 msgid "zkr index > isizek. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2214
+#: OOps/ugrw1.c:2201
 msgid "zkr index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2242
+#: OOps/ugrw1.c:2229
 msgid "zir index > isizek. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2246
+#: OOps/ugrw1.c:2233
 msgid "zir index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2268
+#: OOps/ugrw1.c:2255
 msgid "zkw index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2271
+#: OOps/ugrw1.c:2258
 msgid "zkw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2296
+#: OOps/ugrw1.c:2283
 msgid "ziw index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2299
+#: OOps/ugrw1.c:2286
 msgid "ziw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2323
+#: OOps/ugrw1.c:2310
 msgid "zkwm index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2326
+#: OOps/ugrw1.c:2313
 msgid "zkwm index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2359
+#: OOps/ugrw1.c:2346
 msgid "ziwm index > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2362
+#: OOps/ugrw1.c:2349
 msgid "ziwm index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2406
+#: OOps/ugrw1.c:2393
 msgid "zkmod kzkmod > isizek. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2432
+#: OOps/ugrw1.c:2419
 msgid "zkcl first or last > isizek. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2435
+#: OOps/ugrw1.c:2422
 msgid "zkcl first or last < 0. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2439
+#: OOps/ugrw1.c:2426
 msgid "zkcl first > last. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2461
+#: OOps/ugrw1.c:2448
 msgid "No za space: zakinit has not been called yet."
 msgstr ""
 
-#: OOps/ugrw1.c:2487
+#: OOps/ugrw1.c:2474
 msgid "zar index > isizea. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2491
+#: OOps/ugrw1.c:2478
 msgid "zar index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2523
+#: OOps/ugrw1.c:2510
 msgid "zarg index > isizea. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2528
+#: OOps/ugrw1.c:2515
 msgid "zarg index < 0. Returning 0."
 msgstr ""
 
-#: OOps/ugrw1.c:2559 OOps/ugrw1.c:2590
+#: OOps/ugrw1.c:2546 OOps/ugrw1.c:2577
 msgid "zaw index > isizea. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2562 OOps/ugrw1.c:2593
+#: OOps/ugrw1.c:2549 OOps/ugrw1.c:2580
 msgid "zaw index < 0. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2646
+#: OOps/ugrw1.c:2633
 msgid "zamod kzamod > isizea. Not writing."
 msgstr ""
 
-#: OOps/ugrw1.c:2678
+#: OOps/ugrw1.c:2665
 msgid "zacl first or last > isizea. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2682
+#: OOps/ugrw1.c:2669
 msgid "zacl first or last < 0. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2687
+#: OOps/ugrw1.c:2674
 msgid "zacl first > last. Not clearing."
 msgstr ""
 
-#: OOps/ugrw1.c:2819
+#: OOps/ugrw1.c:2806
 msgid "printk not initialised"
 msgstr ""
 
-#: OOps/ugrw1.c:2837
+#: OOps/ugrw1.c:2824
 #, c-format
 msgid "time %11.5f: "
 msgstr ""
 
-#: OOps/ugrw1.c:2898
-msgid "printks param 1 was not a \"quoted string\""
-msgstr ""
-
-#: OOps/ugrw1.c:3114
-msgid "printks not initialised"
-msgstr ""
-
-#: OOps/ugrw1.c:3245
-msgid "inz index > isizea. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:3247
-msgid "inz index < 0. Not writing."
-msgstr ""
-
-#: OOps/ugrw1.c:3281 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
-msgid "outz index > isizea. No output"
-msgstr ""
-
-#: OOps/ugrw1.c:3283 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
-msgid "outz index < 0. No output."
-msgstr ""
-
-#: OOps/ugrw2.c:283
-#, c-format
-msgid "Illegal resonk iscl value, %f"
-msgstr ""
-
-#: OOps/vdelay.c:132 OOps/vdelay.c:377 OOps/vdelay.c:437 OOps/vdelay.c:503
-#: OOps/vdelay.c:569 OOps/vdelay.c:648 OOps/vdelay.c:727
-msgid "vdelay: not initialised"
-msgstr ""
-
-#: OOps/vdelay.c:234
-msgid "vdelay3: not initialised"
-msgstr ""
-
-#: OOps/vdelay.c:736
-msgid "Wrong input count in multitap\n"
-msgstr ""
-
-#: OOps/vdelay.c:779
-msgid "multitap: not initialised"
-msgstr ""
-
-#: OOps/vdelay.c:899
-msgid "High frequency diffusion not in (0, 1)\n"
-msgstr ""
-
-#: OOps/vdelay.c:915
-#, c-format
-msgid "reverbx; Combs ftable must have %d time and %d gain values"
-msgstr ""
-
-#: OOps/vdelay.c:947
-#, c-format
-msgid "reverbx; Alpas ftable must have %d time and %d gain values"
-msgstr ""
-
-#: OOps/vdelay.c:1058
-msgid "High frequency diffusion>1\n"
-msgstr ""
-
-#: OOps/vdelay.c:1062
-msgid "High frequency diffusion<0\n"
-msgstr ""
-
-#: OOps/vdelay.c:1066
-msgid "Non positive reverb time\n"
-msgstr ""
-
-#: OOps/vdelay.c:1124
-msgid "reverbx: not initialised"
-msgstr ""
-
-#: Opcodes/ambicode1.c:82
-msgid "The numbers of input and output arguments are not valid."
-msgstr ""
-
-#: Opcodes/ambicode1.c:165
-msgid "The number of input arguments is not valid."
-msgstr ""
-
-#: Opcodes/ambicode1.c:169
-msgid "The isetup value should be between 1 and 5."
-msgstr ""
-
-#: Opcodes/ambicode1.c:195
-msgid "The output channel count does not match the isetup value."
-msgstr ""
-
-#: Opcodes/ambicode.c:49
-msgid "bformenc is deprecated; use bformenc1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:88
-msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
-msgstr ""
-
-#: Opcodes/ambicode.c:287
-msgid "bformdec is deprecated; use bformdec1 instead\n"
-msgstr ""
-
-#: Opcodes/ambicode.c:291
-msgid "Wrong number of input arguments!"
-msgstr ""
-
-#: Opcodes/ambicode.c:299
-msgid "Wrong number of output cells! There must be 2 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:344
-msgid "Wrong number of output cells! There must be 4 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
-msgid "Wrong number of output cells! There must be 5 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
-msgid "Wrong number of output cells! There must be 8 output cells."
-msgstr ""
-
-#: Opcodes/ambicode.c:575
-msgid "Not supported setup number!"
-msgstr ""
-
-#: Opcodes/babo.c:742
-#, c-format
-msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
-msgstr ""
-
-#: Opcodes/bilbar.c:83
-msgid "No data to continue"
-msgstr ""
-
-#: Opcodes/bilbar.c:109
-msgid "Ends must be clamped(1), pivoting(2) or free(3)"
-msgstr ""
-
-#: Opcodes/biquad.c:599
-msgid "vco: not initialised"
-msgstr ""
-
-#: Opcodes/bowedbar.c:53
-#, c-format
-msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
-msgstr ""
-
-#: Opcodes/bowedbar.c:98
-msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
-msgstr ""
-
-#: Opcodes/clfilt.c:53
-msgid "filter type not lowpass or highpass in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:59
-#, c-format
-msgid "filter kind, %d, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:63
-#, c-format
-msgid "number of poles, %f, out of range in clfilt"
-msgstr ""
-
-#: Opcodes/clfilt.c:69
-#, c-format
-msgid "odd number of poles chosen in clfilt, rounded to %d"
-msgstr ""
-
-#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
-#, c-format
-msgid "passband ripple must be positive in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
-#, c-format
-msgid "passband ripple must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
-#, c-format
-msgid "stopband attenuation must be negative in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
-#, c-format
-msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
-msgstr ""
-
-#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
-msgid "Lowpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
-#: Opcodes/clfilt.c:383
-msgid "code error, ikind out of range"
-msgstr ""
-
-#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
-msgid "Highpass Elliptical not implemented yet. Sorry!"
-msgstr ""
-
-#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
-msgid "code error, ihilo out of range"
-msgstr ""
-
-#: Opcodes/control.c:40
-msgid "control: failed to allocate globals"
-msgstr ""
-
-#: Opcodes/control.c:56
-#, c-format
-msgid "Closing down wish(%d)\n"
-msgstr ""
-
-#: Opcodes/control.c:202
-#, c-format
-msgid "Slider %d set to %s\n"
-msgstr ""
-
-#: Opcodes/control.c:207
-#, c-format
-msgid "Unknown control %d"
-msgstr ""
-
-#: Opcodes/cpumeter.c:77
-#, c-format
-msgid "Failed to open /proc/stat: %s"
-msgstr ""
-
-#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
-#: Opcodes/cpumeter.c:151
-msgid "failed /proc/stat read"
-msgstr ""
-
-#: Opcodes/crossfm.c:34
-msgid "crossfm: ftable not found"
-msgstr ""
-
-#: Opcodes/date.c:68
-msgid "dates: buffer overflow"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/dssi4cs.c:823
-msgid "DSSI4CS: Not initialised or wrong argument types."
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:120
-#, c-format
-msgid "Failed to load plugin \"%s\": %s"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:155
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\": "
-"%s.\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:161
-#, c-format
-msgid ""
-"Unable to find ladspa_descriptor() function in plugin library file \"%s\".\n"
-"Are you sure this is a LADSPA plugin file ?"
-msgstr ""
-
-#: Opcodes/dssi4cs/src/load.c:176
-#, c-format
-msgid "Unable to find label \"%s\" in plugin library file \"%s\"."
-msgstr ""
-
-#: Opcodes/fareygen.c:140
-#, fuzzy
-msgid "insufficient arguments for fareytable"
-msgstr "недостаточные аргументы"
-
-#: Opcodes/fareyseq.c:251 Opcodes/fareyseq.c:301
-#, c-format
-msgid "Farey: Table no. < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:256
-#, c-format
-msgid "Farey: Filter type < 1 dft=%.2f  sft=%.2f"
-msgstr ""
-
-#: Opcodes/fareyseq.c:271 Opcodes/fareyseq.c:319
-#, c-format
-msgid "Farey: Destination dft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:282 Opcodes/fareyseq.c:330
-#, c-format
-msgid "Farey: Source sft table %.2f not found."
-msgstr ""
-
-#: Opcodes/fareyseq.c:306
-msgid "Farey: Filter type < 1"
-msgstr ""
-
-#: Opcodes/fareyseq.c:445 Opcodes/fareyseq.c:466
-#, c-format
-msgid "Table no. < 1 sft=%.2f"
-msgstr ""
-
-#: Opcodes/filter.c:187 Opcodes/filter.c:225
-msgid "Filter order out of bounds: (1 <= nb < 51, 0 <= na <= 50)"
-msgstr ""
-
-#: Opcodes/filter.c:672
-msgid "too many iterations in laguer"
-msgstr ""
-
-#: Opcodes/flanger.c:188
-msgid "wguide2 xfreq1 and xfreq2 arguments must be both a-rate or k and i-rate"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:195
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:149
-msgid "error allocating fluid engine\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:203
-#, c-format
-msgid ""
-"Created fluidEngine %d with sampling rate = %f, chorus %s, reverb %s, "
-"channels %d, polyphony %d.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:230
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:392
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:553
-#, c-format
-msgid "Illegal Engine Number: %i.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:238
-#, c-format
-msgid "Loading SoundFont : %s.\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:244
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:208
-#, c-format
-msgid "fluid: unable to load %s"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:262
-#, c-format
-msgid "SoundFont: %3d  Bank: %3d  Preset: %3d  %s\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:483
-#, c-format
-msgid ""
-"result: %d \n"
-" Note off: c:%3d k:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:491
-#, c-format
-msgid ""
-"result: %d \n"
-"Note on: c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:496
-#, c-format
-msgid "Key pressure (not handled): c:%3d k:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:504
-#, c-format
-msgid "Result: %d Control change: c:%3d c:%3d v:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:511
-#, c-format
-msgid "Result: %d Program change: c:%3d p:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:524
-#, c-format
-msgid "Result: %d, Pitch bend:     c:%d b:%d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:530
-#, c-format
-msgid "System exclusive (not handled): c:%3d v1:%3d v2:%3d\n"
-msgstr ""
-
-#: Opcodes/fluidOpcodes/fluidOpcodes.c:562
-#: Opcodes/fluidOpcodes/fluidOpcodes.cpp:577
-msgid "Illegal Interpolation Method: Must be either 0, 1, 4, or 7.\n"
-msgstr ""
-
-#: Opcodes/fm4op.c:165
-msgid "No table for VibWaveato"
-msgstr ""
-
-#: Opcodes/fm4op.c:184
-msgid "No table for FM4Op"
-msgstr ""
-
-#: Opcodes/follow.c:38
-msgid "follow - zero length!"
-msgstr ""
-
-#: Opcodes/fout.c:60
-#, c-format
-msgid "Closing file '%s'...\n"
-msgstr ""
-
-#: Opcodes/fout.c:102
-msgid "invalid file handle"
-msgstr ""
-
-#: Opcodes/fout.c:109 Opcodes/fout.c:421
-msgid "invalid file name"
-msgstr ""
-
-#: Opcodes/fout.c:166
-#, c-format
-msgid "error opening file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:193
-#, c-format
-msgid "error opening sound file '%s'"
-msgstr ""
-
-#: Opcodes/fout.c:430
-#, c-format
-msgid "cannot close '%s': not found in list of open files"
-msgstr ""
-
-#: Opcodes/fout.c:441
-#, c-format
-msgid "cannot close file #%d: not a valid handle"
-msgstr ""
-
-#: Opcodes/fout.c:448
-#, c-format
-msgid "file #%d (%s) is in use, will be closed when released"
-msgstr ""
-
-#: Opcodes/fout.c:477 Opcodes/fout.c:480 Opcodes/fout.c:551 Opcodes/fout.c:554
-msgid "fouti: invalid file handle"
-msgstr ""
-
-#: Opcodes/freeverb.c:258
-msgid "freeverb: not initialised"
-msgstr ""
-
-#: Opcodes/ftconv.c:156
-msgid "ftconv: invalid number of channels"
-msgstr ""
-
-#: Opcodes/ftconv.c:161
-msgid "ftconv: invalid impulse response partition length"
-msgstr ""
-
-#: Opcodes/ftconv.c:175
-msgid "ftconv: invalid length, or insufficient IR data for convolution"
-msgstr ""
-
-#: Opcodes/ftconv.c:193
-msgid "ftconv: skipped non-zero samples, impulse response may be truncated\n"
-msgstr ""
-
-#: Opcodes/ftconv.c:289
-msgid "ftconv: not initialised"
-msgstr ""
-
-#: Opcodes/ftgen.c:69 Opcodes/ftgen.c:182
-#, c-format
-msgid "Error deleting ftable %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:136 Opcodes/signalflowgraph.cpp:895
-msgid "ftgen string arg not allowed"
-msgstr ""
-
-#: Opcodes/ftgen.c:155 Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
-msgid "ftgen error"
-msgstr ""
-
-#: Opcodes/ftgen.c:179
-#, c-format
-msgid "Invalid table number: %d"
-msgstr ""
-
-#: Opcodes/ftgen.c:347
-msgid "ftload: error allocating ftable"
-msgstr ""
-
-#: Opcodes/ftgen.c:349
-msgid "ftload: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:351
-msgid "ftload: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:354
-msgid "ftload: incorrect file"
-msgstr ""
-
-#: Opcodes/ftgen.c:467
-msgid "ftsave: Bad table number. Saving is possible only for existing tables."
-msgstr ""
-
-#: Opcodes/ftgen.c:470
-msgid "ftsave: no table numbers"
-msgstr ""
-
-#: Opcodes/ftgen.c:472
-msgid "ftsave: unable to open file"
-msgstr ""
-
-#: Opcodes/ftgen.c:474
-msgid "ftsave: failed to write file"
-msgstr ""
-
-#: Opcodes/gab/gab.c:111
-msgid "fastab: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:134 Opcodes/gab/gab.c:143 Opcodes/gab/gab.c:173
-msgid "tabw off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:159 Opcodes/gab/gab.c:227 Opcodes/gab/gab.c:236
-msgid "tab off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:185
-msgid "tab_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:192
-#, c-format
-msgid "tab_i off end: table number: %d\n"
-msgstr ""
-
-#: Opcodes/gab/gab.c:204
-msgid "tabw_i: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:211
-msgid "tabw_i off end"
-msgstr ""
-
-#: Opcodes/gab/gab.c:249
-msgid "tab_init: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/gab.c:318
-msgid "printi parameter was not a \"quoted string\""
-msgstr ""
-
-#: Opcodes/gab/gab.c:425
-msgid "adsynt2: wavetable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:437
-msgid "adsynt2: freqtable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:442
-msgid "adsynt2: partial count is greater than freqtable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:451
-msgid "adsynt2: amptable not found!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:456
-msgid "adsynt2: partial count is greater than amptable size!"
-msgstr ""
-
-#: Opcodes/gab/gab.c:501
-#, fuzzy
-msgid "adsynt2: not initialised"
-msgstr "%s: не выступлено с иничиативой"
-
-#: Opcodes/gab/gab.c:743
-msgid "max_k: invalid imaxflag value"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:70
-msgid "hvs1: a line segment must be delimited by 2 points at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:152
-msgid "hvs2: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:248
-msgid "hvs3: a square area must be delimited by 2 lines at least"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:390
-msgid "vphaseseg: the first function is invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:398 Opcodes/gab/vectorial.c:2301
-msgid "vphaseseg: invalid num. of elements"
-msgstr ""
-
-#: Opcodes/gab/hvs.c:416
-msgid "vphaseseg: function invalid or missing"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:40 Opcodes/gab/newgabopc.c:55
-msgid "vtable1: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:241 Opcodes/gab/newgabopc.c:296
-msgid "copyTabElems: incorrect destination table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:246 Opcodes/gab/newgabopc.c:301
-msgid ""
-"copyTabElems: destination table too short or number of elements to copy too "
-"big"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:252 Opcodes/gab/newgabopc.c:306
-msgid "copyTabElems: incorrect source table number"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:257 Opcodes/gab/newgabopc.c:310
-msgid ""
-"copyTabElems: source table size less than the number of elements to copy"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:273 Opcodes/gab/newgabopc.c:318
-msgid "copyTabElems: source table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:276 Opcodes/gab/newgabopc.c:321
-msgid "copyTabElems: destination table too short"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:347
-msgid "inrg: audio input is not enabled"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:362
-msgid "inrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:403
-msgid "outrg: channel number cannot be < 1 (1 is the first channel)"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:440 Opcodes/gab/newgabopc.c:574
-#: Opcodes/gab/newgabopc.c:672
-msgid "invalid function"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:443
-msgid "lposc: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:577
-msgid "lposcil: no sample rate stored in function assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/newgabopc.c:674
-msgid "lposcil: no sample rate stored in function; assuming=sr\n"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:47 Opcodes/gab/sliderTable.c:256
-#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
-#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
-msgid "illegal channel"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:67 Opcodes/gab/sliderTable.c:280
-#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
-#, c-format
-msgid "illegal control number at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:76
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d.  When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:86 Opcodes/gab/sliderTable.c:287
-#: Opcodes/gab/sliderTable.c:513 Opcodes/midiops3.c:64 Opcodes/midiops3.c:168
-#: Opcodes/midiops3.c:347
-#, c-format
-msgid "illegal initvalue at position n.%d"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:98 Opcodes/gab/sliderTable.c:299
-msgid "sliderXtable: zero is illegal in exponential operations"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:315
-#, c-format
-msgid ""
-"sliderXtable: illegal initvalue at position %d. When using table indexing, "
-"the init range is 0 to 1"
-msgstr ""
-
-#: Opcodes/gab/sliderTable.c:569 Opcodes/midiops2.c:321 Opcodes/midiops2.c:359
-#: Opcodes/midiops2.c:391 Opcodes/midiops2.c:440 Opcodes/midiops2.c:475
-#: Opcodes/midiops2.c:517 Opcodes/midiops2.c:532 Opcodes/midiops2.c:551
-msgid "illegal midi channel"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:43
-msgid "tabmorph: invalid table number"
-msgstr ""
-
-#: Opcodes/gab/tabmorph.c:47
-msgid "tabmorph: all tables must have the same length!"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:35
-msgid "mtablei: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:65 Opcodes/gab/vectorial.c:85
-#: Opcodes/gab/vectorial.c:135 Opcodes/gab/vectorial.c:202
-msgid "mtable: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:187
-msgid "mtabi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:254
-msgid "mtablewi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:270 Opcodes/gab/vectorial.c:290
-#: Opcodes/gab/vectorial.c:319 Opcodes/gab/vectorial.c:364
-#: Opcodes/gab/vectorial.c:408
-msgid "mtabw: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:350
-msgid "mtabwi: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:382
-msgid "mtablew: incorrect table number"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:457 Opcodes/gab/vectorial.c:516
-#, c-format
-msgid "vadd_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:473
-msgid "vadd_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:500
-msgid "vadd: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:532
-msgid "vmult_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:559
-msgid "vmult: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:575
-#, c-format
-msgid "vpow_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:592
-msgid "vpow_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:620
-msgid "vpow: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:636
-#, c-format
-msgid "vexp_i: invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:652
-msgid "vexp_i: ifn length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:679
-msgid "vexp: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:697
-#, c-format
-msgid "vectorsop: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:702
-#, c-format
-msgid "vectorsop: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:742
-msgid "vcopy: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:760
-msgid "vcopy: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:787
-#, c-format
-msgid "vcopy_i: ifn1 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:792
-#, c-format
-msgid "vcopy_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:814
-msgid "vcopy_i: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:831
-msgid "vcopy_i: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:870
-msgid "vaddv: ifn1 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:889
-msgid "vaddv: ifn2 length exceeded"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:915
-#, c-format
-msgid "vaddv_i: ifn1 invalid table number %i"
+#: OOps/ugrw1.c:2885
+msgid "printks param 1 was not a \"quoted string\""
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:920
-#, c-format
-msgid "vaddv_i: ifn2 invalid table number %i"
+#: OOps/ugrw1.c:3101
+msgid "printks not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:942
-msgid "vaddv_i: ifn1 length exceeded"
+#: OOps/ugrw1.c:3232
+msgid "inz index > isizea. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:960
-msgid "vaddv_i: ifn2 length exceeded"
+#: OOps/ugrw1.c:3234
+msgid "inz index < 0. Not writing."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:991
-msgid "vsubv: ifn1 length exceeded"
+#: OOps/ugrw1.c:3268 Opcodes/vbap_zak.c:201 Opcodes/vbap_zak.c:500
+msgid "outz index > isizea. No output"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1010
-msgid "vsubv: ifn2 length exceeded"
+#: OOps/ugrw1.c:3270 Opcodes/vbap_zak.c:204 Opcodes/vbap_zak.c:503
+msgid "outz index < 0. No output."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1037
+#: OOps/ugrw2.c:283
 #, c-format
-msgid "vsubv_i: ifn1 invalid table number %i"
+msgid "Illegal resonk iscl value, %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1042
-#, c-format
-msgid "vsubv_i: ifn2 invalid table number %i"
+#: OOps/vdelay.c:132 OOps/vdelay.c:377 OOps/vdelay.c:437 OOps/vdelay.c:503
+#: OOps/vdelay.c:569 OOps/vdelay.c:648 OOps/vdelay.c:727
+msgid "vdelay: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1064
-msgid "vsubv_i: ifn1 length exceeded"
+#: OOps/vdelay.c:234
+msgid "vdelay3: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1082
-msgid "vsubv_i: ifn2 length exceeded"
+#: OOps/vdelay.c:738
+msgid "Wrong input count in multitap\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1119
-msgid "vmultv: ifn1 length exceeded"
+#: OOps/vdelay.c:781
+msgid "multitap: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1138
-msgid "vmultv: ifn2 length exceeded"
+#: OOps/vdelay.c:901
+msgid "High frequency diffusion not in (0, 1)\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1165
+#: OOps/vdelay.c:917
 #, c-format
-msgid "vmultv_i: ifn1 invalid table number %i"
+msgid "reverbx; Combs ftable must have %d time and %d gain values"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1170
+#: OOps/vdelay.c:949
 #, c-format
-msgid "vmultv_i: ifn2 invalid table number %i"
+msgid "reverbx; Alpas ftable must have %d time and %d gain values"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1192
-msgid "vmultv_i: ifn1 length exceeded"
+#: OOps/vdelay.c:1062
+msgid "High frequency diffusion>1\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1209
-msgid "vmultv_i: ifn2 length exceeded"
+#: OOps/vdelay.c:1066
+msgid "High frequency diffusion<0\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1246
-msgid "vdivv: ifn1 length exceeded"
+#: OOps/vdelay.c:1070
+msgid "Non positive reverb time\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1265
-msgid "vdivv: ifn2 length exceeded"
+#: OOps/vdelay.c:1128
+msgid "reverbx: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1292
-#, c-format
-msgid "vdivv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode1.c:82
+msgid "The numbers of input and output arguments are not valid."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1297
-#, c-format
-msgid "vdivv_i: ifn2 invalid table number %i"
+#: Opcodes/ambicode1.c:167
+msgid "The number of input arguments is not valid."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1319
-msgid "vdivv_i: ifn1 length exceeded"
+#: Opcodes/ambicode1.c:171
+msgid "The isetup value should be between 1 and 5."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1337
-msgid "vdivv_i: ifn2 length exceeded"
+#: Opcodes/ambicode1.c:197
+msgid "The output channel count does not match the isetup value."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1374
-msgid "vpowv: ifn1 length exceeded"
+#: Opcodes/ambicode.c:49
+msgid "bformenc is deprecated; use bformenc1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1393
-msgid "vpowv: ifn2 length exceeded"
+#: Opcodes/ambicode.c:88
+msgid "Wrong number of output arguments! 4, 9 or 16 needed!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1420
-#, c-format
-msgid "vpowv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:287
+msgid "bformdec is deprecated; use bformdec1 instead\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1425
-#, c-format
-msgid "vpowv_i: ifn2 invalid table number %i"
+#: Opcodes/ambicode.c:291
+msgid "Wrong number of input arguments!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1447
-msgid "vpowv_i: ifn1 length exceeded"
+#: Opcodes/ambicode.c:299
+msgid "Wrong number of output cells! There must be 2 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1464
-msgid "vpowv_i: ifn2 length exceeded"
+#: Opcodes/ambicode.c:344
+msgid "Wrong number of output cells! There must be 4 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1501
-msgid "vexpv: ifn1 length exceeded"
+#: Opcodes/ambicode.c:389 Opcodes/ambicode.c:536
+msgid "Wrong number of output cells! There must be 5 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1520
-msgid "vexpv: ifn2 length exceeded"
+#: Opcodes/ambicode.c:438 Opcodes/ambicode.c:488
+msgid "Wrong number of output cells! There must be 8 output cells."
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1547
-#, c-format
-msgid "vexpv_i: ifn1 invalid table number %i"
+#: Opcodes/ambicode.c:575
+msgid "Not supported setup number!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1552
+#: Opcodes/babo.c:742
 #, c-format
-msgid "vexpv_i: ifn2 invalid table number %i"
-msgstr ""
-
-#: Opcodes/gab/vectorial.c:1574
-msgid "vexpv_i: ifn1 length exceeded"
+msgid "Babo: resonator dimensions are incorrect (%.1f, %.1f, %.1f)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1592
-msgid "vexpv_i: ifn2 length exceeded"
+#: Opcodes/bilbar.c:83
+msgid "No data to continue"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1629
-msgid "vmap: Error: ifn1 and ifn2 can not be the same"
+#: Opcodes/bilbar.c:109
+msgid "Ends must be clamped(1), pivoting(2) or free(3)"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1634
-#, c-format
-msgid "vmap: ifn1 invalid table number %i"
+#: Opcodes/biquad.c:599
+msgid "vco: not initialised"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1639
+#: Opcodes/bowedbar.c:53
 #, c-format
-msgid "vmap: ifn2 invalid table number %i"
+msgid "DLineN: Delay length too big ... setting to maximum length of %ld.\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1661
-msgid "vmap: ifn1 length exceeded"
+#: Opcodes/bowedbar.c:98
+msgid "unknown lowest frequency for bowed bar -- assuming 50Hz\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1678
-msgid "vmap: ifn2 length exceeded"
-msgstr ""
+#: Opcodes/cellular.c:49 Opcodes/cellular.c:55
+#, fuzzy
+msgid "cell: invalid num of elements"
+msgstr "неправильный число аргументов"
 
-#: Opcodes/gab/vectorial.c:1698
+#: Opcodes/cellular.c:51
 #, fuzzy
-msgid "vectorop: invalid num of elements"
+msgid "cell: invalid output table"
 msgstr "неправильный число аргументов"
 
-#: Opcodes/gab/vectorial.c:1727
-msgid "vport: invalid table length or num of elements"
-msgstr ""
+#: Opcodes/cellular.c:58
+#, fuzzy
+msgid "cell: invalid initial state table"
+msgstr "неправильный число аргументов"
 
-#: Opcodes/gab/vectorial.c:1730
-msgid "vport: invalid table"
-msgstr ""
+#: Opcodes/cellular.c:63
+#, fuzzy
+msgid "cell: invalid rule table"
+msgstr "неправильный число аргументов"
 
-#: Opcodes/gab/vectorial.c:1735
-msgid "vport: invalid init table length or num of elements"
+#: Opcodes/clfilt.c:53
+msgid "filter type not lowpass or highpass in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1738
-msgid "vport: invalid init table"
+#: Opcodes/clfilt.c:59
+#, c-format
+msgid "filter kind, %d, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1875
+#: Opcodes/clfilt.c:63
 #, c-format
-msgid "vrandh: Seeding from current time %lu\n"
+msgid "number of poles, %f, out of range in clfilt"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1888
-msgid "vrandh: Invalid table."
+#: Opcodes/clfilt.c:69
+#, c-format
+msgid "odd number of poles chosen in clfilt, rounded to %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1891
-msgid "vrandh: idstoffset is greater than table length."
+#: Opcodes/clfilt.c:94 Opcodes/clfilt.c:197
+#, c-format
+msgid "passband ripple must be positive in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1896
-msgid "randh: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:99 Opcodes/clfilt.c:202
+#, c-format
+msgid "passband ripple must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1975
+#: Opcodes/clfilt.c:141 Opcodes/clfilt.c:244
 #, c-format
-msgid "vrandi: Seeding from current time %lu\n"
+msgid "stopband attenuation must be negative in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1987
-msgid "vrandi: Invalid table."
+#: Opcodes/clfilt.c:146 Opcodes/clfilt.c:249
+#, c-format
+msgid "stopband attenuation must be non-zero in clfilt. Set to %f"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1990
-msgid "vrandi: idstoffset is greater thantable length."
+#: Opcodes/clfilt.c:170 Opcodes/clfilt.c:341
+msgid "Lowpass Elliptical not implemented yet. Sorry!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:1995
-msgid "vrandi: Table length exceeded, last elements discarded."
+#: Opcodes/clfilt.c:173 Opcodes/clfilt.c:276 Opcodes/clfilt.c:346
+#: Opcodes/clfilt.c:383
+msgid "code error, ikind out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2077 Opcodes/gab/vectorial.c:2084
-#: Opcodes/gab/vectorial.c:2091
-#, fuzzy
-msgid "vecdelay: invalid num of elements"
-msgstr "неправильный число аргументов"
-
-#: Opcodes/gab/vectorial.c:2079
-msgid "vecdly: invalid output table"
+#: Opcodes/clfilt.c:272 Opcodes/clfilt.c:378
+msgid "Highpass Elliptical not implemented yet. Sorry!"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2086
-msgid "vecdly: invalid input table"
+#: Opcodes/clfilt.c:280 Opcodes/clfilt.c:387
+msgid "code error, ihilo out of range"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2093
-msgid "vecdly: invalid delay table"
+#: Opcodes/control.c:40
+msgid "control: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2138
-#, fuzzy
-msgid "vecdly: not initialised"
-msgstr "%s: не выступлено с иничиативой"
-
-#: Opcodes/gab/vectorial.c:2181
-msgid "vlinseg/vexpseg: invalid num. of elements"
+#: Opcodes/control.c:56
+#, c-format
+msgid "Closing down wish(%d)\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2223 Opcodes/vpvoc.c:118
-msgid "tableseg: not initialised"
+#: Opcodes/control.c:211
+#, c-format
+msgid "Slider %d set to %s\n"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2253 Opcodes/vpvoc.c:146
-msgid "tablexseg: not initialised"
+#: Opcodes/control.c:216
+#, c-format
+msgid "Unknown control %d"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2406
-#, fuzzy
-msgid "vdelayk: not initialised"
-msgstr "%s: не выступлено с иничиативой"
-
-#: Opcodes/gab/vectorial.c:2439 Opcodes/gab/vectorial.c:2445
-#, fuzzy
-msgid "cella: invalid num of elements"
-msgstr "неправильный число аргументов"
-
-#: Opcodes/gab/vectorial.c:2441
-msgid "cella: invalid output table"
+#: Opcodes/cpumeter.c:77
+#, c-format
+msgid "Failed to open /proc/stat: %s"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2448
-msgid "cella: invalid initial state table"
+#: Opcodes/cpumeter.c:79 Opcodes/cpumeter.c:84 Opcodes/cpumeter.c:111
+#: Opcodes/cpumeter.c:151
+msgid "failed /proc/stat read"
 msgstr ""
 
-#: Opcodes/gab/vectorial.c:2452
-msgid "cella: invalid rule table"
+#: Opcodes/crossfm.c:34
+msgid "crossfm: ftable not found"
 msgstr ""
 
 #: Opcodes/grain4.c:59
@@ -6597,7 +5723,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1241
+#: Opcodes/hrtfopcodes.c:690 Opcodes/hrtfearly.c:1259
 msgid ""
 "\n"
 "WARNING: fades are overlapping: this could lead to noise: reduce fade size "
@@ -6633,29 +5759,29 @@ msgstr ""
 msgid "pvsifd: unsupported value for iwintype\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:426
+#: Opcodes/imageOpcodes.c:102 Opcodes/imageOpcodes.c:429
 #, c-format
 msgid "imageload: cannot open image %s.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:111
+#: Opcodes/imageOpcodes.c:108 Opcodes/imageOpcodes.c:114
 #, c-format
 msgid "imageload: file %s is not in PNG format.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:119 Opcodes/imageOpcodes.c:126
-#: Opcodes/imageOpcodes.c:165 Opcodes/imageOpcodes.c:174
-#: Opcodes/imageOpcodes.c:188 Opcodes/imageOpcodes.c:291
-#: Opcodes/imageOpcodes.c:298 Opcodes/imageOpcodes.c:311
+#: Opcodes/imageOpcodes.c:122 Opcodes/imageOpcodes.c:129
+#: Opcodes/imageOpcodes.c:168 Opcodes/imageOpcodes.c:177
+#: Opcodes/imageOpcodes.c:191 Opcodes/imageOpcodes.c:294
+#: Opcodes/imageOpcodes.c:301 Opcodes/imageOpcodes.c:314
 msgid "imageload: out of memory.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:283
+#: Opcodes/imageOpcodes.c:286
 #, c-format
 msgid "imageload: cannot open image %s for writing.\n"
 msgstr ""
 
-#: Opcodes/imageOpcodes.c:392
+#: Opcodes/imageOpcodes.c:395
 msgid "Cannot allocate memory.\n"
 msgstr ""
 
@@ -6699,29 +5825,29 @@ msgstr ""
 msgid "ENDED JackoState::close().\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:892
+#: Opcodes/jacko.cpp:894
 #, c-format
 msgid "Failed to set Jack freewheeling mode to \"%s\": error %d.\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:895
+#: Opcodes/jacko.cpp:897
 #, c-format
 msgid "Set Jack freewheeling mode to \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:911
+#: Opcodes/jacko.cpp:913
 #, c-format
 msgid "Turned Jack connections \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:955 Opcodes/jacko.cpp:1062 Opcodes/jacko.cpp:1169
-#: Opcodes/jacko.cpp:1241
+#: Opcodes/jacko.cpp:957 Opcodes/jacko.cpp:1064 Opcodes/jacko.cpp:1171
+#: Opcodes/jacko.cpp:1243
 #, c-format
 msgid "Could not create Jack port \"%s\".\n"
 msgstr ""
 
-#: Opcodes/jacko.cpp:969 Opcodes/jacko.cpp:1077 Opcodes/jacko.cpp:1184
-#: Opcodes/jacko.cpp:1255
+#: Opcodes/jacko.cpp:971 Opcodes/jacko.cpp:1079 Opcodes/jacko.cpp:1186
+#: Opcodes/jacko.cpp:1257
 #, c-format
 msgid "Could not create Jack connection from \"%s\" to \"%s\": status %d.\n"
 msgstr ""
@@ -6774,8 +5900,8 @@ msgstr ""
 msgid "loscilx: invalid number of output arguments"
 msgstr ""
 
-#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:118
-#: Opcodes/pvlock.c:320 Opcodes/pvsbasic.c:460
+#: Opcodes/loscilx.c:192 Opcodes/loscilx.c:221 Opcodes/pvlock.c:120
+#: Opcodes/pvlock.c:322 Opcodes/pvsbasic.c:463
 msgid ""
 "number of output arguments inconsistent with number of sound file channels"
 msgstr ""
@@ -6804,15 +5930,36 @@ msgstr ""
 msgid "splitrig: incorrect table number"
 msgstr ""
 
-#: Opcodes/midiops2.c:514 Opcodes/midiops2.c:529 Opcodes/midiops2.c:548
+#: Opcodes/midiops2.c:339 Opcodes/midiops2.c:377 Opcodes/midiops2.c:409
+#: Opcodes/midiops2.c:458 Opcodes/midiops2.c:493 Opcodes/midiops2.c:535
+#: Opcodes/midiops2.c:550 Opcodes/midiops2.c:569
+msgid "illegal midi channel"
+msgstr ""
+
+#: Opcodes/midiops2.c:532 Opcodes/midiops2.c:547 Opcodes/midiops2.c:566
 msgid "value out of range"
 msgstr ""
 
-#: Opcodes/midiops2.c:580
+#: Opcodes/midiops2.c:598
 #, c-format
 msgid "invalid channel number: %d"
 msgstr ""
 
+#: Opcodes/midiops3.c:44 Opcodes/midiops3.c:146 Opcodes/midiops3.c:259
+#: Opcodes/midiops3.c:317 Opcodes/midiops3.c:413
+msgid "illegal channel"
+msgstr ""
+
+#: Opcodes/midiops3.c:58 Opcodes/midiops3.c:162 Opcodes/midiops3.c:273
+#, c-format
+msgid "illegal control number at position n.%d"
+msgstr ""
+
+#: Opcodes/midiops3.c:64 Opcodes/midiops3.c:168 Opcodes/midiops3.c:347
+#, c-format
+msgid "illegal initvalue at position n.%d"
+msgstr ""
+
 #: Opcodes/midiops3.c:333 Opcodes/midiops3.c:428
 #, c-format
 msgid "illegal msb control number at position n.%d"
@@ -6851,12 +5998,12 @@ msgstr ""
 msgid "modmatrix: "
 msgstr ""
 
-#: Opcodes/mp3in.c:93 Opcodes/mp3in.c:231
+#: Opcodes/mp3in.c:101 Opcodes/mp3in.c:242
 #, c-format
 msgid "mp3in: %s: failed to open file"
 msgstr ""
 
-#: Opcodes/mp3in.c:140
+#: Opcodes/mp3in.c:148
 #, c-format
 msgid "mp3in: file sample rate (%d) != orchestra sr (%d)\n"
 msgstr ""
@@ -7010,6 +6157,10 @@ msgstr ""
 msgid "vco2init: invalid max table size"
 msgstr ""
 
+#: Opcodes/oscbnk.c:1749 Opcodes/oscbnk.c:1773
+msgid "ftgen error"
+msgstr ""
+
 #: Opcodes/oscbnk.c:1757
 msgid "vco2init: invalid source ftable"
 msgstr ""
@@ -7066,73 +6217,73 @@ msgstr ""
 msgid "rbjeq: invalid filter type"
 msgstr ""
 
-#: Opcodes/OSC.c:122
+#: Opcodes/OSC.c:126
 msgid "Too many arguments to OSCsend"
 msgstr ""
 
-#: Opcodes/OSC.c:125
+#: Opcodes/OSC.c:129
 msgid "No a-rate arguments allowed"
 msgstr ""
 
-#: Opcodes/OSC.c:163 Opcodes/OSC.c:168 Opcodes/OSC.c:173 Opcodes/OSC.c:183
-#: Opcodes/OSC.c:190 Opcodes/OSC.c:195 Opcodes/OSC.c:206 Opcodes/OSC.c:214
-#: Opcodes/OSC.c:232
+#: Opcodes/OSC.c:167 Opcodes/OSC.c:172 Opcodes/OSC.c:177 Opcodes/OSC.c:187
+#: Opcodes/OSC.c:194 Opcodes/OSC.c:199 Opcodes/OSC.c:210 Opcodes/OSC.c:218
+#: Opcodes/OSC.c:236
 msgid "String not expected"
 msgstr ""
 
-#: Opcodes/OSC.c:202
+#: Opcodes/OSC.c:206
 msgid "Not a string when needed"
 msgstr ""
 
-#: Opcodes/OSC.c:219
+#: Opcodes/OSC.c:223
 msgid "Time stamp is two values"
 msgstr ""
 
-#: Opcodes/OSC.c:240
+#: Opcodes/OSC.c:244
 #, c-format
 msgid "ftable %.2f does not exist"
 msgstr ""
 
-#: Opcodes/OSC.c:249
+#: Opcodes/OSC.c:253
 #, c-format
 msgid "Unknown OSC type %c\n"
 msgstr ""
 
-#: Opcodes/OSC.c:428
+#: Opcodes/OSC.c:436
 msgid "OSC: failed to allocate globals"
 msgstr ""
 
-#: Opcodes/OSC.c:446
+#: Opcodes/OSC.c:455
 msgid "OSCrecv is already running"
 msgstr ""
 
-#: Opcodes/OSC.c:589
+#: Opcodes/OSC.c:599
 msgid "OSC deinitiatised\n"
 msgstr ""
 
-#: Opcodes/OSC.c:613
+#: Opcodes/OSC.c:623
 #, c-format
 msgid "OSC listener #%d started on port %s\n"
 msgstr ""
 
-#: Opcodes/OSC.c:663
+#: Opcodes/OSC.c:673
 msgid "OSC not running"
 msgstr ""
 
-#: Opcodes/OSC.c:667
+#: Opcodes/OSC.c:677
 msgid "invalid handle"
 msgstr ""
 
-#: Opcodes/OSC.c:674
+#: Opcodes/OSC.c:684
 #, fuzzy
 msgid "invalid number of arguments"
 msgstr "неправильный число аргументов"
 
-#: Opcodes/OSC.c:695 Opcodes/OSC.c:700
+#: Opcodes/OSC.c:705 Opcodes/OSC.c:710
 msgid "argument list inconsistent with format string"
 msgstr ""
 
-#: Opcodes/OSC.c:704
+#: Opcodes/OSC.c:714
 msgid "invalid type"
 msgstr ""
 
@@ -7152,11 +6303,11 @@ msgstr ""
 msgid "partikkel: "
 msgstr ""
 
-#: Opcodes/partikkel.c:806
+#: Opcodes/partikkel.c:807
 msgid "partikkelsync: opcode id needs to be a non-zero integer"
 msgstr ""
 
-#: Opcodes/partikkel.c:810 Opcodes/partikkel.c:816
+#: Opcodes/partikkel.c:811 Opcodes/partikkel.c:817
 msgid "partikkelsync: could not find opcode id"
 msgstr ""
 
@@ -7311,38 +6462,38 @@ msgid ""
 "%d.\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1733
+#: Opcodes/pitch.c:1598
 msgid "Incorrect argument count in transeg"
 msgstr ""
 
-#: Opcodes/pitch.c:1784
+#: Opcodes/pitch.c:1649
 msgid "Incorrect argument count in transegb"
 msgstr ""
 
-#: Opcodes/pitch.c:1834 Opcodes/pitch.c:1977
+#: Opcodes/pitch.c:1699 Opcodes/pitch.c:1842
 #, fuzzy
 msgid "Error: transeg not initialised (krate)\n"
 msgstr "%s: не выступлено с иничиативой"
 
-#: Opcodes/pitch.c:1869 Opcodes/pitch.c:2027
+#: Opcodes/pitch.c:1734 Opcodes/pitch.c:1892
 msgid "transeg: not initialised (arate)\n"
 msgstr ""
 
-#: Opcodes/pitch.c:1924
+#: Opcodes/pitch.c:1789
 msgid "Incorrect argument count in transegr"
 msgstr ""
 
-#: Opcodes/pitch.c:2294
+#: Opcodes/pitch.c:2159
 #, fuzzy
 msgid "median: not initialised (arate)\n"
 msgstr "%s: не выступлено с иничиативой"
 
-#: Opcodes/pitch.c:2298 Opcodes/pitch.c:2345
+#: Opcodes/pitch.c:2163 Opcodes/pitch.c:2210
 #, c-format
 msgid "median: window (%d)larger than maximum(%d); truncated"
 msgstr ""
 
-#: Opcodes/pitch.c:2341
+#: Opcodes/pitch.c:2206
 #, fuzzy
 msgid "median: not initialised (krate)\n"
 msgstr "%s: не выступлено с иничиативой"
@@ -7370,17 +6521,6 @@ msgstr ""
 msgid "Error: %s, %s"
 msgstr ""
 
-#: Opcodes/ppp.c:20 Opcodes/pvlock.c:478 Opcodes/pvsband.c:46
-#: Opcodes/pvsbasic.c:575 Opcodes/pvsbasic.c:880 Opcodes/pvsbasic.c:1080
-#: Opcodes/pvsbasic.c:1180 Opcodes/pvsbasic.c:1395 Opcodes/pvsbasic.c:1593
-#: Opcodes/pvsbasic.c:1756 Opcodes/pvslock.c:20
-msgid "Unsafe to have same fsig as in and out"
-msgstr ""
-
-#: Opcodes/ppp.c:36 Opcodes/pvslock.c:36
-msgid "pvslock: signal format must be amp-phase or amp-freq."
-msgstr ""
-
 #: Opcodes/psynth.c:97 Opcodes/psynth.c:253
 msgid "psynth: first input not in TRACKS format\n"
 msgstr ""
@@ -7545,7 +6685,14 @@ msgstr ""
 msgid "invalid number of output arguments"
 msgstr "неправильный число аргументов"
 
-#: Opcodes/pvlock.c:490
+#: Opcodes/pvlock.c:480 Opcodes/pvsband.c:46 Opcodes/pvsbasic.c:578
+#: Opcodes/pvsbasic.c:883 Opcodes/pvsbasic.c:1083 Opcodes/pvsbasic.c:1183
+#: Opcodes/pvsbasic.c:1398 Opcodes/pvsbasic.c:1598 Opcodes/pvsbasic.c:1763
+#: Opcodes/pvslock.c:20
+msgid "Unsafe to have same fsig as in and out"
+msgstr ""
+
+#: Opcodes/pvlock.c:492
 msgid "pvsfreeze: signal format must be amp-freq."
 msgstr ""
 
@@ -7584,76 +6731,76 @@ msgstr ""
 msgid "pvsdiskin: could not open file %s\n"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:606
+#: Opcodes/pvsbasic.c:609
 msgid "pvsfreeze: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:679
+#: Opcodes/pvsbasic.c:682
 msgid "pvsosc does not work while sliding"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:910
+#: Opcodes/pvsbasic.c:913
 msgid "pvsmooth: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1020
+#: Opcodes/pvsbasic.c:1023
 msgid "pvsmix: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1070
+#: Opcodes/pvsbasic.c:1073
 msgid "pvsmix: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1083
+#: Opcodes/pvsbasic.c:1086
 msgid "pvsfilter: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1156
+#: Opcodes/pvsbasic.c:1159
 msgid "pvsfilter: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1159
+#: Opcodes/pvsbasic.c:1162
 msgid "pvsfilter: formats are different."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1372
+#: Opcodes/pvsbasic.c:1375
 msgid "pvscale: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1570
+#: Opcodes/pvsbasic.c:1575
 msgid "pvshift: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1741
+#: Opcodes/pvsbasic.c:1748
 #, fuzzy
 msgid "pvswarp: not initialised"
 msgstr "%s: не выступлено с иничиативой"
 
-#: Opcodes/pvsbasic.c:1758
+#: Opcodes/pvsbasic.c:1765
 msgid "pvsblur does not work sliding yet"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1890
+#: Opcodes/pvsbasic.c:1897
 msgid "pvsblur: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1925
+#: Opcodes/pvsbasic.c:1932
 msgid "pvstencil: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:1933
+#: Opcodes/pvsbasic.c:1940
 msgid "pvstencil: ftable needs to equal the number of bins"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2001
+#: Opcodes/pvsbasic.c:2008
 msgid "pvstencil: not initialised"
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2148
+#: Opcodes/pvsbasic.c:2158
 msgid "pvs2tab: signal format must be amp-phase or amp-freq."
 msgstr ""
 
-#: Opcodes/pvsbasic.c:2151 Opcodes/pvsbasic.c:2189 Opcodes/tabvars.c:56
+#: Opcodes/pvsbasic.c:2161 Opcodes/pvsbasic.c:2201 Opcodes/tabvars.c:56
 #: Opcodes/tabvars.c:92 Opcodes/tabvars.c:134 Opcodes/tabvars.c:179
 #: Opcodes/tabvars.c:181
 #, fuzzy
@@ -7700,6 +6847,10 @@ msgstr "%s: не выступлено с иничиативой"
 msgid "pvsgendy: not initialised"
 msgstr "%s: не выступлено с иничиативой"
 
+#: Opcodes/pvslock.c:36
+msgid "pvslock: signal format must be amp-phase or amp-freq."
+msgstr ""
+
 #: Opcodes/repluck.c:164
 #, c-format
 msgid "Reflection invalid (%f)\n"
@@ -7940,7 +7091,7 @@ msgid ""
 "SoundFont file \"%s\""
 msgstr ""
 
-#: Opcodes/sfont.c:309 Opcodes/sfont.c:2192
+#: Opcodes/sfont.c:309 Opcodes/sfont.c:2194
 msgid "sfplay: invalid or out-of-range preset number"
 msgstr ""
 
@@ -7960,15 +7111,15 @@ msgid ""
 "Session aborted !"
 msgstr ""
 
-#: Opcodes/sfont.c:1990 Opcodes/sfont.c:1996
+#: Opcodes/sfont.c:1992 Opcodes/sfont.c:1998
 msgid "Sfont: cannot use globals/"
 msgstr ""
 
-#: Opcodes/sfont.c:1999
+#: Opcodes/sfont.c:2001
 msgid "Sfont format not compatible"
 msgstr ""
 
-#: Opcodes/sfont.c:2537
+#: Opcodes/sfont.c:2539
 msgid "error... could not create sfont globals\n"
 msgstr ""
 
@@ -7980,6 +7131,10 @@ msgstr ""
 msgid "inletf: signal format must be amp-phase or amp-freq."
 msgstr ""
 
+#: Opcodes/signalflowgraph.cpp:895
+msgid "ftgen string arg not allowed"
+msgstr ""
+
 #: Opcodes/signalflowgraph.cpp:921
 msgid "ftgenonce error"
 msgstr ""
@@ -8015,7 +7170,7 @@ msgstr ""
 msgid "crossfade longer than loop duration\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389 Opcodes/sndloop.c:661
+#: Opcodes/sndloop.c:302 Opcodes/sndloop.c:389
 msgid "function table not found\n"
 msgstr ""
 
@@ -8035,15 +7190,15 @@ msgstr ""
 msgid "pvsarp: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1091
+#: Opcodes/sndloop.c:995 Opcodes/sndloop.c:1092
 msgid "signal format must be amp-phase or amp-freq.\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1071
+#: Opcodes/sndloop.c:1072
 msgid "pvsvoc: not initialised\n"
 msgstr ""
 
-#: Opcodes/sndloop.c:1122
+#: Opcodes/sndloop.c:1123
 msgid "pvsmorph: not initialised\n"
 msgstr ""
 
@@ -8063,30 +7218,30 @@ msgstr ""
 msgid "sndwarpst: not initialised"
 msgstr ""
 
-#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:314
-#: Opcodes/socksend.c:73 Opcodes/socksend.c:157 Opcodes/socksend.c:252
+#: Opcodes/sockrecv.c:117 Opcodes/sockrecv.c:215 Opcodes/sockrecv.c:315
+#: Opcodes/socksend.c:74 Opcodes/socksend.c:158 Opcodes/socksend.c:252
 #, c-format
 msgid "Winsock2 failed to start: %d"
 msgstr ""
 
-#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:320
-#: Opcodes/socksend.c:86 Opcodes/socksend.c:171 Opcodes/socksend.c:259
+#: Opcodes/sockrecv.c:131 Opcodes/sockrecv.c:227 Opcodes/sockrecv.c:321
+#: Opcodes/socksend.c:87 Opcodes/socksend.c:172 Opcodes/socksend.c:259
 msgid "creating socket"
 msgstr ""
 
-#: Opcodes/sockrecv.c:347
-#, c-format
-msgid "connect failed (%d)"
-msgstr ""
-
-#: Opcodes/sockrecv.c:360
+#: Opcodes/sockrecv.c:366
 msgid "read from socket failed"
 msgstr ""
 
-#: Opcodes/socksend.c:126 Opcodes/socksend.c:215
+#: Opcodes/socksend.c:127 Opcodes/socksend.c:216
 msgid "sendto failed"
 msgstr ""
 
+#: Opcodes/socksend.c:287
+#, c-format
+msgid "connect failed (%d)"
+msgstr ""
+
 #: Opcodes/space.c:165
 msgid "space: not initialised"
 msgstr ""
@@ -8443,20 +7598,36 @@ msgstr ""
 msgid "Min and max the same"
 msgstr ""
 
-#: Opcodes/uggab.c:424
+#: Opcodes/uggab.c:215
+msgid "table not found in poscil"
+msgstr ""
+
+#: Opcodes/uggab.c:234 Opcodes/uggab.c:261 Opcodes/uggab.c:290
+#: Opcodes/uggab.c:318
+#, fuzzy
+msgid "poscil: not initialised"
+msgstr "%s: не выступлено с иничиативой"
+
+#: Opcodes/uggab.c:365 Opcodes/uggab.c:412 Opcodes/uggab.c:460
+#: Opcodes/uggab.c:509
+#, fuzzy
+msgid "poscil3: not initialised"
+msgstr "%s: не выступлено с иничиативой"
+
+#: Opcodes/uggab.c:589
 msgid "losc: no sample rate stored in function assuming=sr\n"
 msgstr ""
 
-#: Opcodes/uggab.c:556
+#: Opcodes/uggab.c:721
 #, c-format
 msgid "illegal reson iscl value: %f"
 msgstr ""
 
-#: Opcodes/uggab.c:579
+#: Opcodes/uggab.c:744
 msgid "loop cannot be zero"
 msgstr ""
 
-#: Opcodes/uggab.c:1056 Opcodes/uggab.c:1098
+#: Opcodes/uggab.c:1221 Opcodes/uggab.c:1263
 msgid "vibrato(krate): not initialised"
 msgstr ""
 
@@ -8839,6 +8010,14 @@ msgstr ""
 msgid "vosim: not initialised"
 msgstr ""
 
+#: Opcodes/vpvoc.c:118
+msgid "tableseg: not initialised"
+msgstr ""
+
+#: Opcodes/vpvoc.c:146
+msgid "tablexseg: not initialised"
+msgstr ""
+
 #: Opcodes/vpvoc.c:173
 #, c-format
 msgid "vpvoc: Could not find ifnmagctrl table %f"
@@ -8965,47 +8144,47 @@ msgstr ""
 msgid "-B N\tsamples per hardware sound I/O buffer"
 msgstr ""
 
-#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:738
+#: Top/argdecode.c:75 util/mixer.c:95 util/scale.c:46 util/srconv.c:739
 msgid "-A\tcreate an AIFF format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:740
+#: Top/argdecode.c:76 util/mixer.c:96 util/scale.c:47 util/srconv.c:741
 msgid "-W\tcreate a WAV format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:77 util/srconv.c:739
+#: Top/argdecode.c:77 util/srconv.c:740
 msgid "-J\tcreate an IRCAM format output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:741
+#: Top/argdecode.c:78 util/mixer.c:97 util/scale.c:48 util/srconv.c:742
 msgid "-h\tno header on output soundfile"
 msgstr ""
 
-#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:742
+#: Top/argdecode.c:79 util/mixer.c:99 util/scale.c:49 util/srconv.c:743
 msgid "-c\t8-bit signed_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:743
+#: Top/argdecode.c:81 util/mixer.c:101 util/scale.c:50 util/srconv.c:744
 msgid "-a\talaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:744
+#: Top/argdecode.c:83 util/mixer.c:98 util/mixer.c:100 util/srconv.c:745
 msgid "-8\t8-bit unsigned_char sound samples"
 msgstr ""
 
-#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:745
+#: Top/argdecode.c:84 util/mixer.c:102 util/scale.c:51 util/srconv.c:746
 msgid "-u\tulaw sound samples"
 msgstr ""
 
-#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:746
+#: Top/argdecode.c:85 util/mixer.c:103 util/scale.c:52 util/srconv.c:747
 msgid "-s\tshort_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:747
+#: Top/argdecode.c:86 util/mixer.c:104 util/scale.c:53 util/srconv.c:748
 msgid "-l\tlong_int sound samples"
 msgstr ""
 
-#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:748
+#: Top/argdecode.c:87 util/mixer.c:105 util/scale.c:54 util/srconv.c:749
 msgid "-f\tfloat sound samples"
 msgstr ""
 
@@ -9013,7 +8192,7 @@ msgstr ""
 msgid "-3\t24bit sound samples"
 msgstr ""
 
-#: Top/argdecode.c:89 util/srconv.c:749
+#: Top/argdecode.c:89 util/srconv.c:750
 msgid "-r N\torchestra srate override"
 msgstr ""
 
@@ -9021,7 +8200,7 @@ msgstr ""
 msgid "-k N\torchestra krate override"
 msgstr ""
 
-#: Top/argdecode.c:91 util/srconv.c:750
+#: Top/argdecode.c:91 util/srconv.c:751
 msgid "-K\tDo not generate PEAK chunks"
 msgstr ""
 
@@ -9081,7 +8260,7 @@ msgstr ""
 msgid "-F fnam\tread MIDIfile event stream from file 'fnam'"
 msgstr ""
 
-#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:751
+#: Top/argdecode.c:107 util/mixer.c:106 util/scale.c:59 util/srconv.c:752
 msgid "-R\tcontinually rewrite header while writing soundfile (WAV/AIFF)"
 msgstr ""
 
@@ -9089,7 +8268,7 @@ msgstr ""
 msgid "-H#\tprint heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
-#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:753
+#: Top/argdecode.c:109 util/mixer.c:108 util/scale.c:61 util/srconv.c:754
 msgid "-N\tnotify (ring the bell) when score or miditrack is done"
 msgstr ""
 
@@ -9154,7 +8333,7 @@ msgid "--nopeaks\t\tDo not write peak information"
 msgstr ""
 
 #: Top/argdecode.c:136
-msgid "--nodisplays\t\tsUppress all displays"
+msgid "--nodisplays\t\tSuppress all displays"
 msgstr ""
 
 #: Top/argdecode.c:137
@@ -9658,49 +8837,49 @@ msgstr ""
 msgid "error: orchestra and score name not allowed in .csoundrc"
 msgstr ""
 
-#: Top/cscorfns.c:276
+#: Top/cscorfns.c:277
 msgid "PMAX exceeded, string event truncated.\n"
 msgstr ""
 
-#: Top/cscorfns.c:663
+#: Top/cscorfns.c:666
 #, c-format
 msgid "%s found %d f event%s with non-zero p2\n"
 msgstr ""
 
-#: Top/cscorfns.c:664
+#: Top/cscorfns.c:667
 msgid "s"
 msgstr ""
 
-#: Top/cscorfns.c:767
+#: Top/cscorfns.c:770
 msgid "cscore: too many input files open"
 msgstr ""
 
-#: Top/cscorfns.c:805
+#: Top/cscorfns.c:810
 msgid "cscore: tried to set an unknown file pointer as the current file"
 msgstr ""
 
-#: Top/cscorfns.c:819
+#: Top/cscorfns.c:824
 msgid "csoundInitializeCscore: no input score given."
 msgstr ""
 
-#: Top/cscorfns.c:824
+#: Top/cscorfns.c:829 Top/cscorfns.c:858
 msgid "csoundInitializeCscore: no output score given."
 msgstr ""
 
-#: Top/cscorfns.c:852
+#: Top/cscorfns.c:889
 #, c-format
 msgid "cscoreFileOpen: error opening %s"
 msgstr ""
 
-#: Top/cscorfns.c:870
+#: Top/cscorfns.c:907
 msgid "cscoreFileClose: NULL file pointer\n"
 msgstr ""
 
-#: Top/cscorfns.c:882
+#: Top/cscorfns.c:919
 msgid "cscoreFileClose: fp not recorded\n"
 msgstr ""
 
-#: Top/cscorfns.c:888
+#: Top/cscorfns.c:925
 msgid "cscoreFileGetCurrent: no fp current"
 msgstr ""
 
@@ -9739,129 +8918,129 @@ msgstr ""
 msgid "Error in pre-initialisation function of module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:608 Top/csmodule.c:614 Top/csmodule.c:625 Top/csmodule.c:632
-#: Top/csmodule.c:638 Top/csmodule.c:646
+#: Top/csmodule.c:607 Top/csmodule.c:613 Top/csmodule.c:624 Top/csmodule.c:631
+#: Top/csmodule.c:637 Top/csmodule.c:645
 msgid "Error opening plugin directory\n"
 msgstr ""
 
-#: Top/csmodule.c:696
+#: Top/csmodule.c:695
 #, c-format
 msgid "Error opening plugin directory '%s': %s"
 msgstr ""
 
-#: Top/csmodule.c:731
+#: Top/csmodule.c:730
 #, c-format
 msgid "path name too long, skipping '%s'"
 msgstr ""
 
-#: Top/csmodule.c:737
+#: Top/csmodule.c:736
 #, c-format
 msgid "Library %s omitted\n"
 msgstr ""
 
-#: Top/csmodule.c:773
+#: Top/csmodule.c:772
 msgid "Loading command-line libraries:\n"
 msgstr ""
 
-#: Top/csmodule.c:796
+#: Top/csmodule.c:795
 #, c-format
 msgid " *** error loading '%s'"
 msgstr ""
 
-#: Top/csmodule.c:819
+#: Top/csmodule.c:818
 #, c-format
 msgid "Error starting module '%s'"
 msgstr ""
 
-#: Top/csmodule.c:918
+#: Top/csmodule.c:917
 #, c-format
 msgid "Error de-initialising module '%s'"
 msgstr ""
 
-#: Top/csound.c:1636 Top/csound.c:1656
+#: Top/csound.c:1640 Top/csound.c:1660
 msgid "Early return from csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1642
+#: Top/csound.c:1646
 msgid "Score finished in csoundPerformKsmps().\n"
 msgstr ""
 
-#: Top/csound.c:1675
+#: Top/csound.c:1679
 msgid "Early return from csoundPerformBuffer().\n"
 msgstr ""
 
-#: Top/csound.c:1700
+#: Top/csound.c:1704
 msgid "Early return from csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1707
+#: Top/csound.c:1711
 msgid "Score finished in csoundPerform().\n"
 msgstr ""
 
-#: Top/csound.c:1727
+#: Top/csound.c:1731
 msgid "csoundPerform(): stopped.\n"
 msgstr ""
 
-#: Top/csound.c:1998
+#: Top/csound.c:2002
 msgid "WARNING: "
 msgstr "ПРЕДУПРЕЖДЕНИЕ:"
 
-#: Top/csound.c:2119
+#: Top/csound.c:2123
 msgid "rtdummy: failed to allocate globals"
 msgstr ""
 
-#: Top/csound.c:2120
+#: Top/csound.c:2124
 msgid "rtaudio: dummy module enabled\n"
 msgstr ""
 
-#: Top/csound.c:2149 Top/csound.c:2185
+#: Top/csound.c:2153 Top/csound.c:2189
 msgid " *** error: rtaudio module set to empty string"
 msgstr ""
 
-#: Top/csound.c:2153 Top/csound.c:2189
+#: Top/csound.c:2157 Top/csound.c:2193
 #, c-format
 msgid " *** error: unknown rtaudio module: '%s'"
 msgstr ""
 
-#: Top/csound.c:2271
+#: Top/csound.c:2275
 msgid "WARNING: real time midi input disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2276 Top/csound.c:2310
+#: Top/csound.c:2280 Top/csound.c:2314
 msgid "error: -+rtmidi set to empty string"
 msgstr ""
 
-#: Top/csound.c:2279 Top/csound.c:2313
+#: Top/csound.c:2283 Top/csound.c:2317
 #, c-format
 msgid "error: -+rtmidi='%s': unknown module"
 msgstr ""
 
-#: Top/csound.c:2305
+#: Top/csound.c:2309
 msgid "WARNING: real time midi output disabled, using dummy functions\n"
 msgstr ""
 
-#: Top/csound.c:2327
+#: Top/csound.c:2331
 msgid "Unknown MIDI error"
 msgstr ""
 
-#: Top/csound.c:2445
+#: Top/csound.c:2449
 msgid "xyin not supported. use invalue opcode instead."
 msgstr ""
 
-#: Top/csound.c:2552
+#: Top/csound.c:2556
 msgid "Failed to allocate new opcode entry."
 msgstr ""
 
-#: Top/csound.c:2575
+#: Top/csound.c:2579
 #, c-format
 msgid "Failed to allocate opcode entry for %s."
 msgstr ""
 
-#: Top/csound.c:2906
+#: Top/csound.c:2912
 msgid "Cannot open /proc/cpuinfo. Support for RDTSC is not available.\n"
 msgstr ""
 
-#: Top/csound.c:2957
+#: Top/csound.c:2963
 msgid "No valid CPU frequency entry was found in /proc/cpuinfo.\n"
 msgstr ""
 
@@ -9917,57 +9096,47 @@ msgstr ""
 msgid "orchname:  %s\n"
 msgstr ""
 
-#: Top/main.c:334
+#: Top/main.c:318
+#, c-format
+msgid "Failed to open input file %s\n"
+msgstr ""
+
+#: Top/main.c:339
 msgid "Stopping on parser failure\n"
 msgstr ""
 
-#: Top/main.c:352
+#: Top/main.c:360
 msgid "end of orchestra compile"
 msgstr ""
 
-#: Top/main.c:359
+#: Top/main.c:367
 #, c-format
 msgid "using previous %s\n"
 msgstr ""
 
-#: Top/main.c:369
+#: Top/main.c:377
 #, c-format
 msgid "cannot open scorefile %s"
 msgstr ""
 
-#: Top/main.c:371
+#: Top/main.c:379
 msgid "sorting score ...\n"
 msgstr ""
 
-#: Top/main.c:381
-#, c-format
-msgid "cannot extract %s, name conflict"
-msgstr ""
-
-#: Top/main.c:384
+#: Top/main.c:389
 #, c-format
 msgid "cannot open extract file %s"
 msgstr ""
 
-#: Top/main.c:388
-#, c-format
-msgid "cannot reopen %s"
-msgstr ""
-
 #: Top/main.c:392
-#, c-format
-msgid "cannot open %s for writing"
-msgstr ""
-
-#: Top/main.c:394
 msgid "  ... extracting ...\n"
 msgstr ""
 
-#: Top/main.c:405
+#: Top/main.c:401
 msgid "end of score sort"
 msgstr ""
 
-#: Top/main.c:407
+#: Top/main.c:403
 msgid "Syntax check completed.\n"
 msgstr ""
 
@@ -10032,158 +9201,158 @@ msgstr ""
 msgid " *** error setting option '%s' to '%s': %s\n"
 msgstr ""
 
-#: Top/one_file.c:110 Top/one_file.c:118
+#: Top/one_file.c:120 Top/one_file.c:130
 msgid " *** cannot create temporary file"
 msgstr ""
 
-#: Top/one_file.c:203
+#: Top/one_file.c:215
 #, c-format
 msgid "Removing temporary file %s ...\n"
 msgstr ""
 
-#: Top/one_file.c:207
+#: Top/one_file.c:219
 #, c-format
 msgid "WARNING: could not remove %s\n"
 msgstr ""
 
-#: Top/one_file.c:274 Top/one_file.c:302
+#: Top/one_file.c:286 Top/one_file.c:314
 #, c-format
 msgid "More than %d arguments in <CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:319
+#: Top/one_file.c:331
 #, c-format
 msgid "Invalid arguments in <CsOptions>: %s"
 msgstr ""
 
-#: Top/one_file.c:322
+#: Top/one_file.c:334
 #, c-format
 msgid "Invalid arguments in .csoundrc or -@ file: %s"
 msgstr ""
 
-#: Top/one_file.c:328 Top/one_file.c:744
+#: Top/one_file.c:340 Top/one_file.c:763
 msgid "Missing end tag </CsOptions>"
 msgstr ""
 
-#: Top/one_file.c:354
+#: Top/one_file.c:371
 msgid "Missing end tag </CsInstruments>"
 msgstr ""
 
-#: Top/one_file.c:376 Top/one_file.c:430
+#: Top/one_file.c:393 Top/one_file.c:449
 msgid "Missing end tag </CsScore>"
 msgstr ""
 
-#: Top/one_file.c:391 Top/one_file.c:396
+#: Top/one_file.c:408 Top/one_file.c:413
 msgid "Missing program in tag <CsScore>"
 msgstr ""
 
-#: Top/one_file.c:408
+#: Top/one_file.c:425
 #, c-format
 msgid "Creating %s (%p)\n"
 msgstr ""
 
-#: Top/one_file.c:421
+#: Top/one_file.c:438
 msgid "External generation failed"
 msgstr ""
 
-#: Top/one_file.c:468
+#: Top/one_file.c:487
 #, c-format
 msgid "Non base64 character %c(%2x)"
 msgstr ""
 
-#: Top/one_file.c:487
+#: Top/one_file.c:506
 msgid "Truncated byte at end of base64 stream"
 msgstr ""
 
-#: Top/one_file.c:503
+#: Top/one_file.c:522
 #, c-format
 msgid "Cannot open temporary file (%s) for MIDI subfile"
 msgstr ""
 
-#: Top/one_file.c:520
+#: Top/one_file.c:539
 msgid "Missing end tag </CsMidifileB>"
 msgstr ""
 
-#: Top/one_file.c:536 Top/one_file.c:584
+#: Top/one_file.c:555 Top/one_file.c:603
 #, c-format
 msgid "File %s already exists"
 msgstr ""
 
-#: Top/one_file.c:541
+#: Top/one_file.c:560
 #, c-format
 msgid "Cannot open sample file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:555
+#: Top/one_file.c:574
 msgid "Missing end tag </CsSampleB>"
 msgstr ""
 
-#: Top/one_file.c:589
+#: Top/one_file.c:608
 #, c-format
 msgid "Cannot open file (%s) subfile"
 msgstr ""
 
-#: Top/one_file.c:604
+#: Top/one_file.c:623
 msgid "Missing end tag </CsFileB>"
 msgstr ""
 
-#: Top/one_file.c:624
+#: Top/one_file.c:643
 #, c-format
 msgid "This CSD file requires a version of Csound before %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:632 Top/one_file.c:639
+#: Top/one_file.c:651 Top/one_file.c:658
 #, c-format
 msgid "This CSD file requires a version of Csound after %d.%02d"
 msgstr ""
 
-#: Top/one_file.c:645
+#: Top/one_file.c:664
 msgid "Missing end tag </CsVersion>"
 msgstr ""
 
-#: Top/one_file.c:655
+#: Top/one_file.c:674
 msgid "**** Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:661
+#: Top/one_file.c:680
 msgid "**** End of Licence Information ****\n"
 msgstr ""
 
-#: Top/one_file.c:672
+#: Top/one_file.c:691
 msgid "Missing end tag </CsLicence>"
 msgstr ""
 
-#: Top/one_file.c:703
+#: Top/one_file.c:722
 #, c-format
 msgid "Failed to open csd file: %s"
 msgstr ""
 
-#: Top/one_file.c:718
+#: Top/one_file.c:737
 msgid "STARTING FILE\n"
 msgstr ""
 
-#: Top/one_file.c:734
+#: Top/one_file.c:753
 msgid "Creating options\n"
 msgstr ""
 
-#: Top/one_file.c:740
+#: Top/one_file.c:759
 msgid "Skipping <CsOptions>\n"
 msgstr ""
 
-#: Top/one_file.c:754
+#: Top/one_file.c:773
 msgid "Creating orchestra\n"
 msgstr ""
 
-#: Top/one_file.c:759
+#: Top/one_file.c:778
 msgid "Creating score\n"
 msgstr ""
 
-#: Top/one_file.c:793
+#: Top/one_file.c:812
 #, c-format
 msgid "unknown CSD tag: %s\n"
 msgstr ""
 
-#: Top/one_file.c:798
+#: Top/one_file.c:817
 msgid "Could not find <CsoundSynthesizer> tag in CSD file.\n"
 msgstr ""
 
@@ -10196,159 +9365,159 @@ msgstr ""
 msgid "%d opcodes\n"
 msgstr ""
 
-#: Top/threads.c:38
+#: Top/threads.c:92 Top/threads.c:556
 #, c-format
 msgid "%s() is not implemented on this platform.\n"
 msgstr ""
 
-#: Top/utility.c:98
+#: Top/utility.c:99
 #, c-format
 msgid "util %s:\n"
 msgstr ""
 
-#: Top/utility.c:105
+#: Top/utility.c:106
 #, c-format
 msgid "Error: utility '%s' not found"
 msgstr ""
 
-#: Top/utility.c:108
+#: Top/utility.c:109
 msgid "Error: utility not found"
 msgstr ""
 
-#: Top/utility.c:112
+#: Top/utility.c:113
 msgid "The available utilities are:\n"
 msgstr ""
 
-#: util1/scot/scot.c:51
+#: util1/scot/scot.c:56
 msgid "Score must start with orchestra section"
 msgstr ""
 
-#: util1/scot/scot.c:61
+#: util1/scot/scot.c:66
 msgid "Expected score or functions section"
 msgstr ""
 
-#: util1/scot/scot.c:117
+#: util1/scot/scot.c:122
 msgid "Tempo must be specified"
 msgstr ""
 
-#: util1/scot/scot.c:121
+#: util1/scot/scot.c:126
 msgid "Redefinition of tempo"
 msgstr ""
 
-#: util1/scot/scot.c:133
+#: util1/scot/scot.c:138
 msgid "Must specify 2 or more letters of keyword"
 msgstr ""
 
-#: util1/scot/scot.c:136 util1/scot/scot.c:145 util1/scot/scot.c:154
+#: util1/scot/scot.c:141 util1/scot/scot.c:150 util1/scot/scot.c:159
 msgid "Must be \"on\" or \"off\""
 msgstr ""
 
-#: util1/scot/scot.c:165
+#: util1/scot/scot.c:170
 msgid "Invalid time signature"
 msgstr ""
 
-#: util1/scot/scot.c:202
+#: util1/scot/scot.c:207
 msgid "Bad key signature"
 msgstr ""
 
-#: util1/scot/scot.c:237 util1/scot/scot.c:243
+#: util1/scot/scot.c:242 util1/scot/scot.c:248
 msgid "Invalid field"
 msgstr ""
 
-#: util1/scot/scot.c:254 util1/scot/scot.c:258
+#: util1/scot/scot.c:259 util1/scot/scot.c:263
 msgid "Nested next-parameter passing"
 msgstr ""
 
-#: util1/scot/scot.c:268
+#: util1/scot/scot.c:273
 msgid "Unrecognised keyword"
 msgstr ""
 
-#: util1/scot/scot.c:317
+#: util1/scot/scot.c:322
 msgid "Wrong number of beats in bar"
 msgstr ""
 
-#: util1/scot/scot.c:325
+#: util1/scot/scot.c:330
 msgid "Syntax error: cannot back up"
 msgstr ""
 
-#: util1/scot/scot.c:496
+#: util1/scot/scot.c:501
 msgid "Improper tie"
 msgstr ""
 
-#: util1/scot/scot.c:502
+#: util1/scot/scot.c:507
 msgid "Tie between different pitches"
 msgstr ""
 
-#: util1/scot/scot.c:510
+#: util1/scot/scot.c:515
 msgid "Warning: params changed on tie"
 msgstr ""
 
-#: util1/scot/scot.c:562
+#: util1/scot/scot.c:567
 msgid "Parameter number out of range"
 msgstr ""
 
-#: util1/scot/scot.c:622
+#: util1/scot/scot.c:627
 msgid "Lost previous note: not written"
 msgstr ""
 
-#: util1/scot/scot.c:741
+#: util1/scot/scot.c:746
 msgid "Macro expansion too long -- circular macros?"
 msgstr ""
 
-#: util1/scot/scot.c:817 util1/scot/scot.c:922 util1/scot/scot.c:946
+#: util1/scot/scot.c:822 util1/scot/scot.c:927 util1/scot/scot.c:951
 msgid "Syntax error: no {"
 msgstr ""
 
-#: util1/scot/scot.c:829
+#: util1/scot/scot.c:834
 msgid "No instrument specified"
 msgstr ""
 
-#: util1/scot/scot.c:870
+#: util1/scot/scot.c:875
 msgid "unresolved tie"
 msgstr ""
 
-#: util1/scot/scot.c:872
+#: util1/scot/scot.c:877
 msgid "unresolved slur"
 msgstr ""
 
-#: util1/scot/scot.c:879
+#: util1/scot/scot.c:884
 msgid "Circular note list\n"
 msgstr ""
 
-#: util1/scot/scot.c:925 util1/scot/scot.c:1039 util1/scot/scot.c:1053
-#: util1/scot/scot.c:1060 util1/scot/scot.c:1085
+#: util1/scot/scot.c:930 util1/scot/scot.c:1044 util1/scot/scot.c:1058
+#: util1/scot/scot.c:1065 util1/scot/scot.c:1090
 msgid "Unexpected end of file"
 msgstr ""
 
-#: util1/scot/scot.c:968
+#: util1/scot/scot.c:973
 msgid "Syntax error: no ="
 msgstr ""
 
-#: util1/scot/scot.c:970
+#: util1/scot/scot.c:975
 msgid "Syntax error: no number"
 msgstr ""
 
-#: util1/scot/scot.c:982
+#: util1/scot/scot.c:987
 msgid "No instruments declared"
 msgstr ""
 
-#: util1/scot/scot.c:1003
+#: util1/scot/scot.c:1008
 msgid "Expected ="
 msgstr ""
 
-#: util1/scot/scot.c:1151
+#: util1/scot/scot.c:1156
 msgid "Invalid pitch class"
 msgstr ""
 
-#: util1/scot/scot.c:1296 util1/scot/scot.c:1311 util1/scot/scot.c:1365
+#: util1/scot/scot.c:1301 util1/scot/scot.c:1316 util1/scot/scot.c:1370
 msgid "Division by zero"
 msgstr ""
 
-#: util1/scot/scot.c:1454
+#: util1/scot/scot.c:1461
 msgid "scot processing terminated\n"
 msgstr ""
 
-#: util1/scot/scot.c:1461
+#: util1/scot/scot.c:1468
 #, c-format
 msgid "scot: %d errors.\n"
 msgstr ""
@@ -10364,8 +9533,8 @@ msgstr ""
 msgid "saving ATS data..."
 msgstr ""
 
-#: util/atsa.c:546 util/atsa.c:2354 util/atsa.c:2368 util/atsa.c:2387
-#: util/atsa.c:2567 util/atsa.c:2630 util/atsa.c:2718
+#: util/atsa.c:546 util/atsa.c:2360 util/atsa.c:2374 util/atsa.c:2393
+#: util/atsa.c:2573 util/atsa.c:2636 util/atsa.c:2724
 msgid "done!\n"
 msgstr ""
 
@@ -10494,160 +9663,166 @@ msgstr ""
 msgid "Error: sound not optimised !"
 msgstr ""
 
-#: util/atsa.c:2013
+#: util/atsa.c:1946 util/atsa.c:1951 util/atsa.c:1962 util/atsa.c:1965
+#: util/atsa.c:1969 util/atsa.c:1978 util/cvanal.c:193 util/hetro.c:607
+#: util/hetro.c:690 util/hetro.c:703
+msgid "Write failure\n"
+msgstr ""
+
+#: util/atsa.c:2019
 #, c-format
 msgid "atsa: cannot open input file '%s'"
 msgstr ""
 
-#: util/atsa.c:2020
+#: util/atsa.c:2026
 #, c-format
 msgid "atsa: file has %d channels, must be mono !"
 msgstr ""
 
-#: util/atsa.c:2025
+#: util/atsa.c:2031
 msgid "tracking...\n"
 msgstr ""
 
-#: util/atsa.c:2034
+#: util/atsa.c:2040
 #, c-format
 msgid "start %f out of bounds, corrected to 0.0"
 msgstr ""
 
-#: util/atsa.c:2044
+#: util/atsa.c:2050
 #, c-format
 msgid "duration %f out of bounds, limited to file duration"
 msgstr ""
 
-#: util/atsa.c:2050
+#: util/atsa.c:2056
 #, c-format
 msgid "start: %f duration: %f file dur: %f\n"
 msgstr ""
 
-#: util/atsa.c:2057
+#: util/atsa.c:2063
 #, c-format
 msgid "lowest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2067
+#: util/atsa.c:2073
 #, c-format
 msgid "highest freq. %f out of bounds, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2074
+#: util/atsa.c:2080
 #, c-format
 msgid ""
 "freq. dev. %f out of bounds, should be > 0.0 and <= 1.0, forced to default: "
 "%f"
 msgstr ""
 
-#: util/atsa.c:2082
+#: util/atsa.c:2088
 #, c-format
 msgid ""
 "windows cycles %d out of bounds, should be between 1 and 8, forced to "
 "default: %d"
 msgstr ""
 
-#: util/atsa.c:2090
+#: util/atsa.c:2096
 #, c-format
 msgid ""
 "window type %d out of bounds, should be between 0 and 3, forced to default: "
 "%d"
 msgstr ""
 
-#: util/atsa.c:2098
+#: util/atsa.c:2104
 #, c-format
 msgid ""
 "hop size %f out of bounds, should be > 0.0 and <= 1.0, forced to default: %f"
 msgstr ""
 
-#: util/atsa.c:2106
+#: util/atsa.c:2112
 #, c-format
 msgid ""
 "lowest magnitude %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2130
+#: util/atsa.c:2136
 #, c-format
 msgid "atsa: %d frames are not enough for analysis, need at least %d"
 msgstr ""
 
-#: util/atsa.c:2139
+#: util/atsa.c:2145
 #, c-format
 msgid "track length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2148
+#: util/atsa.c:2154
 #, c-format
 msgid "min. segment length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2157
+#: util/atsa.c:2163
 #, c-format
 msgid "min. gap length %d out of bounds, forced to: %d"
 msgstr ""
 
-#: util/atsa.c:2163
+#: util/atsa.c:2169
 #, c-format
 msgid ""
 "SMR threshold %f out of bounds, should be >= 0.0 and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2174
+#: util/atsa.c:2180
 #, c-format
 msgid ""
 "min. seg. SMR %f out of bounds, should be >= %f and < %f dB SPL, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2182
+#: util/atsa.c:2188
 #, c-format
 msgid ""
 "last peak contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced "
 "to default: %f"
 msgstr ""
 
-#: util/atsa.c:2190
+#: util/atsa.c:2196
 #, c-format
 msgid ""
 "SMR contribution %f out of bounds, should be >= 0.0 and <= 1.0, forced to "
 "default: %f"
 msgstr ""
 
-#: util/atsa.c:2335
+#: util/atsa.c:2341
 msgid "Initializing ATS data..."
 msgstr ""
 
-#: util/atsa.c:2365
+#: util/atsa.c:2371
 msgid "Computing residual..."
 msgstr ""
 
-#: util/atsa.c:2381 util/atsa.c:2384
+#: util/atsa.c:2387 util/atsa.c:2390
 msgid "Analysing residual..."
 msgstr ""
 
-#: util/atsa.c:2389
+#: util/atsa.c:2395
 msgid "tracking completed.\n"
 msgstr ""
 
-#: util/atsa.c:2497
+#: util/atsa.c:2503
 msgid "Filling sound gaps..."
 msgstr ""
 
-#: util/atsa.c:2585
+#: util/atsa.c:2591
 msgid "Trimming short partials..."
 msgstr ""
 
-#: util/atsa.c:2681
+#: util/atsa.c:2687
 msgid "Computing averages..."
 msgstr ""
 
-#: util/atsa.c:2732
+#: util/atsa.c:2738
 msgid "No partials to track -- stopping\n"
 msgstr ""
 
-#: util/atsa.c:2832
+#: util/atsa.c:2838
 msgid "Soundfile analysis for ATS opcodes"
 msgstr ""
 
@@ -10716,7 +9891,7 @@ msgstr ""
 msgid "less sound than expected!\n"
 msgstr ""
 
-#: util/cvanal.c:243
+#: util/cvanal.c:244
 msgid "Soundfile analysis for convolve"
 msgstr ""
 
@@ -10804,7 +9979,7 @@ msgstr ""
 msgid "cannot open %s.\n"
 msgstr ""
 
-#: util/dnoise.c:480 util/srconv.c:460 util/srconv.c:472
+#: util/dnoise.c:480 util/srconv.c:461 util/srconv.c:473
 #, c-format
 msgid "cannot open %s."
 msgstr ""
@@ -10977,7 +10152,7 @@ msgstr ""
 msgid "Usage:\tenvext [-flags] soundfile\n"
 msgstr ""
 
-#: util/envext.c:54 util/srconv.c:737
+#: util/envext.c:54 util/srconv.c:738
 msgid "-o fnam\tsound output filename\n"
 msgstr ""
 
@@ -11026,7 +10201,7 @@ msgid "Cannot open input file %s\n"
 msgstr ""
 
 #: util/het_export.c:61 util/lpc_export.c:66 util/lpc_import.c:62
-#: util/pv_export.c:64 util/pv_import.c:111
+#: util/pv_export.c:64 util/pv_import.c:123
 #, c-format
 msgid "Cannot open output file %s\n"
 msgstr ""
@@ -11049,7 +10224,7 @@ msgstr ""
 msgid "Cannot open output hetro file %s\n"
 msgstr ""
 
-#: util/het_import.c:108
+#: util/het_import.c:111
 msgid "translate text form to hetro analysis file"
 msgstr ""
 
@@ -11147,48 +10322,48 @@ msgstr ""
 msgid "cannot create output file\n"
 msgstr ""
 
-#: util/hetro.c:616
+#: util/hetro.c:617
 #, c-format
 msgid "scale = %f\n"
 msgstr ""
 
-#: util/hetro.c:711
+#: util/hetro.c:714
 #, c-format
 msgid "harmonic #%d:\tamp points %d, \tfrq points %d,\tpeakamp %d\n"
 msgstr ""
 
-#: util/hetro.c:715
+#: util/hetro.c:718
 #, c-format
 msgid "wrote %ld bytes to %s\n"
 msgstr ""
 
-#: util/hetro.c:747
+#: util/hetro.c:750
 msgid "OOPS: SDIF does not work on this machine!\n"
 msgstr ""
 
-#: util/hetro.c:773
+#: util/hetro.c:776
 #, c-format
 msgid "Error creating %s\n"
 msgstr ""
 
-#: util/hetro.c:801
+#: util/hetro.c:804
 msgid "Error writing SDIF frame header.\n"
 msgstr ""
 
-#: util/hetro.c:810
+#: util/hetro.c:813
 msgid "Error writing SDIF matrix header.\n"
 msgstr ""
 
-#: util/hetro.c:823
+#: util/hetro.c:826
 msgid "Error writing SDIF data.\n"
 msgstr ""
 
-#: util/hetro.c:830
+#: util/hetro.c:833
 #, c-format
 msgid "wrote %ld 1TRC frames to %s\n"
 msgstr ""
 
-#: util/hetro.c:858
+#: util/hetro.c:861
 msgid "Soundfile analysis for adsyn"
 msgstr ""
 
@@ -11400,7 +10575,11 @@ msgstr ""
 msgid "Failed to read LPC header\n"
 msgstr ""
 
-#: util/lpc_export.c:102
+#: util/lpc_export.c:81 util/lpc_export.c:88
+msgid "Read faailure\n"
+msgstr ""
+
+#: util/lpc_export.c:106
 msgid "translate linear predictive coding file to text file"
 msgstr ""
 
@@ -11408,7 +10587,11 @@ msgstr ""
 msgid "Usage: lpc_import cstext_file lpc_file\n"
 msgstr ""
 
-#: util/lpc_import.c:98
+#: util/lpc_import.c:77 util/lpc_import.c:84 util/srconv.c:378
+msgid "Read failure\n"
+msgstr ""
+
+#: util/lpc_import.c:102
 msgid "translate text file to linear predictive coding file"
 msgstr ""
 
@@ -11425,7 +10608,7 @@ msgstr ""
 msgid "Legal flags are:"
 msgstr ""
 
-#: util/mixer.c:107 util/scale.c:60 util/srconv.c:752
+#: util/mixer.c:107 util/scale.c:60 util/srconv.c:753
 msgid "-H#\tprint a heartbeat style 1, 2 or 3 at each soundfile write"
 msgstr ""
 
@@ -11723,11 +10906,19 @@ msgstr ""
 msgid "Usage: pv_import cstext_file pv_file \n"
 msgstr ""
 
-#: util/pv_import.c:127
+#: util/pv_import.c:73 util/pv_import.c:93
+msgid "Not a PV file\n"
+msgstr ""
+
+#: util/pv_import.c:132
+msgid "Memory failure\n"
+msgstr ""
+
+#: util/pv_import.c:143
 msgid "Sync error\n"
 msgstr ""
 
-#: util/pv_import.c:148
+#: util/pv_import.c:164
 msgid "translate text form to PVOC analysis file"
 msgstr ""
 
@@ -11794,7 +10985,7 @@ msgstr ""
 msgid "-P fpnum\tscale file to given percentage of full"
 msgstr ""
 
-#: util/scale.c:62 util/srconv.c:754
+#: util/scale.c:62 util/srconv.c:755
 msgid "-- fnam\tlog output to file"
 msgstr ""
 
@@ -11973,47 +11164,47 @@ msgstr ""
 msgid "srconv: cannot open time-vary function file"
 msgstr ""
 
-#: util/srconv.c:388
+#: util/srconv.c:389
 msgid "srconv: too few x-y pairs in time-vary function file"
 msgstr ""
 
-#: util/srconv.c:402
+#: util/srconv.c:403
 msgid "srconv: first x value in time-vary function must be 0"
 msgstr ""
 
-#: util/srconv.c:407
+#: util/srconv.c:408
 msgid "srconv: invalid initial y value in time-vary function"
 msgstr ""
 
-#: util/srconv.c:412 util/srconv.c:704
+#: util/srconv.c:413 util/srconv.c:705
 msgid "srconv: invalid x values in time-vary function"
 msgstr ""
 
-#: util/srconv.c:731
+#: util/srconv.c:732
 msgid ""
 "usage: srconv [flags] infile\n"
 "\n"
 "flags:"
 msgstr ""
 
-#: util/srconv.c:732
+#: util/srconv.c:733
 msgid ""
 "-P num\tpitch transposition ratio (srate/r) [do not specify both P and r]"
 msgstr ""
 
-#: util/srconv.c:734
+#: util/srconv.c:735
 msgid "-Q num\tquality factor (1 to 8: default = 2)"
 msgstr ""
 
-#: util/srconv.c:735
+#: util/srconv.c:736
 msgid "-i filnam\tbreak file"
 msgstr ""
 
-#: util/srconv.c:736
+#: util/srconv.c:737
 msgid "-r num\toutput sample rate (must be specified)"
 msgstr ""
 
-#: util/srconv.c:820
+#: util/srconv.c:821
 msgid "Sample rate conversion"
 msgstr ""
 
@@ -12164,6 +11355,30 @@ msgid "Extract part of a sound file"
 msgstr ""
 
 #, fuzzy
+#~ msgid "insufficient arguments for fareytable"
+#~ msgstr "недостаточные аргументы"
+
+#, fuzzy
+#~ msgid "adsynt2: not initialised"
+#~ msgstr "%s: не выступлено с иничиативой"
+
+#, fuzzy
+#~ msgid "vectorop: invalid num of elements"
+#~ msgstr "неправильный число аргументов"
+
+#, fuzzy
+#~ msgid "vecdelay: invalid num of elements"
+#~ msgstr "неправильный число аргументов"
+
+#, fuzzy
+#~ msgid "vecdly: not initialised"
+#~ msgstr "%s: не выступлено с иничиативой"
+
+#, fuzzy
+#~ msgid "vdelayk: not initialised"
+#~ msgstr "%s: не выступлено с иничиативой"
+
+#, fuzzy
 #~ msgid "tableseg: not initialized"
 #~ msgstr "%s: не выступлено с иничиативой"
 
diff --git a/readme-csound5-complete.txt b/readme-csound5-complete.txt
index 688fa78..966c3d0 100644
--- a/readme-csound5-complete.txt
+++ b/readme-csound5-complete.txt
@@ -1,5 +1,5 @@
 CSOUND AND CSOUND VST
-Version 5.16
+Version 5.17
 
 A user-programmable and user-extensible sound processing language
 and software synthesizer.
diff --git a/readme-csound5.txt b/readme-csound5.txt
index fcfda29..1e01f2e 100644
--- a/readme-csound5.txt
+++ b/readme-csound5.txt
@@ -1,5 +1,5 @@
 CSOUND
-Version 5.16
+Version 5.17
 
 A user-programmable and user-extensible sound processing language
 and software synthesizer.
diff --git a/util/atsa.c b/util/atsa.c
index fcea3b7..5bde588 100644
--- a/util/atsa.c
+++ b/util/atsa.c
@@ -1942,11 +1942,13 @@ static void ats_save(CSOUND *csound, ATS_SOUND *sound, FILE *outfile,
     header.typ = (double) type;
     /* write header */
     fseek(outfile, 0, SEEK_SET);
-    fwrite(&header, 1, sizeof(ATS_HEADER), outfile);
+    if (UNLIKELY(1!=fwrite(&header, 1, sizeof(ATS_HEADER), outfile)))
+      fprintf(stderr, Str("Write failure\n"));
     /* write frame data */
     for (frm = 0; frm < sound->frames; frm++) {
       daux = sound->time[0][frm];
-      fwrite(&daux, 1, sizeof(double), outfile);
+      if (UNLIKELY(1!=fwrite(&daux, 1, sizeof(double), outfile)))
+        fprintf(stderr, Str("Write failure\n"));
       for (i = 0; i < sound->partials; i++) {
         /* we ouput data in increasing frequency order
          * and we check for dead partials
@@ -1956,12 +1958,15 @@ static void ats_save(CSOUND *csound, ATS_SOUND *sound, FILE *outfile,
           par = sound->av[i].track;
           /* output data to file */
           daux = sound->amp[par][frm];
-          fwrite(&daux, 1, sizeof(double), outfile);
+          if (UNLIKELY(1!=fwrite(&daux, 1, sizeof(double), outfile)))
+            fprintf(stderr, Str("Write failure\n"));
           daux = sound->frq[par][frm];
-          fwrite(&daux, 1, sizeof(double), outfile);
+          if (UNLIKELY(1!=fwrite(&daux, 1, sizeof(double), outfile)))
+            fprintf(stderr, Str("Write failure\n"));
           if (type == 2 || type == 4) {
             daux = sound->pha[par][frm];
-            fwrite(&daux, 1, sizeof(double), outfile);
+            if (UNLIKELY(1!=fwrite(&daux, 1, sizeof(double), outfile)))
+              fprintf(stderr, Str("Write failure\n"));
           }
         }
       }
@@ -1969,7 +1974,8 @@ static void ats_save(CSOUND *csound, ATS_SOUND *sound, FILE *outfile,
       if (type == 3 || type == 4) {
         for (i = 0; i < ATSA_CRITICAL_BANDS; i++) {
           daux = sound->band_energy[i][frm];
-          fwrite(&daux, 1, sizeof(double), outfile);
+          if (UNLIKELY(1!=fwrite(&daux, 1, sizeof(double), outfile)))
+            fprintf(stderr, Str("Write failure\n"));
         }
       }
     }
@@ -2154,7 +2160,7 @@ static ATS_SOUND *tracker(CSOUND *csound, ANARGS *anargs, char *soundfile,
       i_tmp =
           (ATSA_MGAPLEN < anargs->frames) ? ATSA_MGAPLEN : anargs->frames - 1;
       csound->Warning(csound,
-                      Str("min. gap length %d out of bounds, " "forced to: %d"),
+                      Str("min. gap length %d out of bounds, forced to: %d"),
                       anargs->min_gap_len, i_tmp);
       anargs->min_gap_len = i_tmp;
     }
diff --git a/util/cvanal.c b/util/cvanal.c
index 17da96e..fb1ef46 100644
--- a/util/cvanal.c
+++ b/util/cvanal.c
@@ -189,7 +189,8 @@ static int takeFFT(CSOUND *csound, SOUNDIN *p, CVSTRUCT *cvh,
       outbuf[Hlenpadded] = outbuf[1];
       outbuf[1] = outbuf[Hlenpadded + 1L] = FL(0.0);
       /* write straight out, just the indep vals */
-      fwrite(outbuf, 1, cvh->dataBsize/nchanls, ofd);
+      if (UNLIKELY(1!=fwrite(outbuf, cvh->dataBsize/nchanls, 1, ofd)))
+        fprintf(stderr, Str("Write failure\n"));
       for (j = Hlenpadded - Hlen; j > 0; j--)
         fp2[j] = FL(0.0);
       fp2 = outbuf;
diff --git a/util/het_import.c b/util/het_import.c
index 67fd695..f934db9 100644
--- a/util/het_import.c
+++ b/util/het_import.c
@@ -89,8 +89,11 @@ static int het_import(CSOUND *csound, int argc, char **argv)
       int16 end = END;
       x = getnum(infd, &term);
       if (term == '\0') break;
-      fwrite(&x, 1, sizeof(int16), outf);
-      if (term == '\n')  fwrite(&end, 1, sizeof(int16), outf);
+      if (UNLIKELY(1!=fwrite(&x, sizeof(int16), 1, outf)))
+        fprintf(stderr, "Write failure\n");
+      if (term == '\n')
+        if (UNLIKELY(1!=fwrite(&end, sizeof(int16), 1, outf)))
+          fprintf(stderr, "Write failure\n");
     }
     fclose(outf);
     fclose(infd);
diff --git a/util/heti_main.c b/util/heti_main.c
index 06eb561..679ce9b 100644
--- a/util/heti_main.c
+++ b/util/heti_main.c
@@ -34,6 +34,11 @@
 #define END  32767
 
 #include <stdint.h>
+#if defined(HAVE_GCC3)
+#  define UNLIKELY(x)   __builtin_expect(!!(x),0)
+#else
+#  define UNLIKELY(x)   x
+#endif
 
 typedef int_least32_t int32;
 typedef int_least16_t int16;
@@ -89,8 +94,9 @@ int main(int argc, char **argv)
       int16 end = END;
       x = getnum(infd, &term);
       if (term == '\0') break;
-      fwrite(&x, 1, sizeof(int16), outf);
-      if (term == '\n')  fwrite(&end, 1, sizeof(int16), outf);
+      if (UNLIKELY(fwrite(&x, 1, sizeof(int16), outf)!=1)) exit(1);
+      if (term == '\n')
+        if (UNLIKELY(fwrite(&end, 1, sizeof(int16), outf)!=1)) exit(1);
     }
     fclose(outf);
     fclose(infd);
diff --git a/util/hetro.c b/util/hetro.c
index 9254399..dd389df 100644
--- a/util/hetro.c
+++ b/util/hetro.c
@@ -603,7 +603,8 @@ static int filedump(HET *thishet, CSOUND *csound)
                                  NULL, "", CSFTYPE_HETRO, 0) == NULL)
       return quit(csound, Str("cannot create output file\n"));
 
-    write(ofd, (char*)&thishet->hmax, sizeof(thishet->hmax)); /* Write header */
+    if (UNLIKELY(write(ofd, (char*)&thishet->hmax, sizeof(thishet->hmax))<0))
+      csound->Message(csound,Str("Write failure\n")); /* Write header */
 
     for (pnt=0; pnt < thishet->num_pts; pnt++) {
       ampsum = 0.0;
@@ -685,7 +686,8 @@ static int filedump(HET *thishet, CSOUND *csound)
       *fp++ = END;
       mpoints = ((mp - magout) / 2) - 1;
       nbytes = (mp - magout) * sizeof(int16);
-      write(ofd, (char *)magout, nbytes);
+      if (UNLIKELY(write(ofd, (char *)magout, nbytes)<0))
+        csound->Message(csound, Str("Write failure\n"));
 #ifdef DEBUG
       {
         int i;
@@ -697,7 +699,8 @@ static int filedump(HET *thishet, CSOUND *csound)
       lenfil += nbytes;
       fpoints = ((fp - frqout) / 2) - 1;
       nbytes = (fp - frqout) * sizeof(int16);
-      write(ofd, (char *)frqout, nbytes);
+      if (UNLIKELY(write(ofd, (char *)frqout, nbytes)<0))
+        csound->Message(csound, Str("Write failure\n"));
 #ifdef DEBUG
       {
         int i;
diff --git a/util/lpanal.c b/util/lpanal.c
index 4dc0b34..3cc9daa 100644
--- a/util/lpanal.c
+++ b/util/lpanal.c
@@ -842,7 +842,7 @@ static void gauss(LPC* thislp,
    /* csound->Message(csound,Str("Row %d or %d have maximum of %g\n"),
                       i, thislp->poleCount, amax);
       csound->Die(csound, Str("gauss: ill-conditioned"));
-   */ 
+   */
          for (ii=i; ii < thislp->poleCount;++ii) a[ii][i] = 1.0e-20; /* VL: fix for very low values */
        }
       if (i != istar) {
@@ -1215,4 +1215,3 @@ int lpanal_init_(CSOUND *csound)
     }
     return retval;
 }
-
diff --git a/util/lpc_export.c b/util/lpc_export.c
index 575a035..4636728 100644
--- a/util/lpc_export.c
+++ b/util/lpc_export.c
@@ -75,13 +75,17 @@ static int lpc_export(CSOUND *csound, int argc, char **argv)
             hdr.headersize, hdr.lpmagic, hdr.npoles, hdr.nvals,
             hdr.framrate, hdr.srate, hdr.duration);
     str = (char *)csound->Malloc(csound,hdr.headersize-sizeof(LPHEADER)+4);
-    fread(&hdr, sizeof(char), hdr.headersize-sizeof(LPHEADER)+4, inf);
+    if (UNLIKELY(fread(&hdr, sizeof(char),
+                       hdr.headersize-sizeof(LPHEADER)+4, inf)!=
+                 hdr.headersize-sizeof(LPHEADER)+4))
+      csound->Message(csound, Str("Read faailure\n"));
     for (i=0; i<(signed int)hdr.headersize-sizeof(LPHEADER)+4; i++)
       putc(str[i],outf);
     putc('\n', outf);
     coef = (MYFLT *)csound->Malloc(csound,(hdr.npoles+hdr.nvals)*sizeof(MYFLT));
     for (i = 0; i<floor(hdr.framrate*hdr.duration); i++) {
-      fread(&coef[0], sizeof(MYFLT), hdr.npoles, inf);
+      if (UNLIKELY(fread(&coef[0], sizeof(MYFLT), hdr.npoles, inf)!=hdr.npoles))
+        csound->Message(csound, Str("Read faailure\n"));
       for (j=0; j<hdr.npoles; j++)
         fprintf(outf, "%f%c", coef[j], (j==hdr.npoles-1 ? '\n' : ','));
     }
diff --git a/util/lpc_import.c b/util/lpc_import.c
index 97aa125..5753ac9 100644
--- a/util/lpc_import.c
+++ b/util/lpc_import.c
@@ -71,13 +71,17 @@ static int lpc_import(CSOUND *csound, int argc, char **argv)
             hdr.headersize, hdr.lpmagic, hdr.npoles, hdr.nvals,
             hdr.framrate, hdr.srate, hdr.duration);
     str = (char *)csound->Malloc(csound,hdr.headersize-sizeof(LPHEADER)+4);
-    fread(&hdr, sizeof(char), hdr.headersize-sizeof(LPHEADER)+4, inf);
+    if (UNLIKELY(fread(&hdr, sizeof(char),
+                       hdr.headersize-sizeof(LPHEADER)+4, inf)!=
+                 hdr.headersize-sizeof(LPHEADER)+4))
+      csound->Message(csound, Str("Read failure\n"));
     for (i=0; i<(signed int)hdr.headersize-sizeof(LPHEADER)+4; i++)
       putc(str[i],outf);
     putc('\n', outf);
     coef = (MYFLT *)csound->Malloc(csound, (hdr.npoles+hdr.nvals)*sizeof(MYFLT));
     for (i = 0; i<hdr.nvals; i++) {
-      fread(&coef[0], sizeof(MYFLT), hdr.npoles, inf);
+      if (UNLIKELY(fread(&coef[0], sizeof(MYFLT), hdr.npoles, inf)!=hdr.npoles))
+        csound->Message(csound, Str("Read failure\n"));
       for (j=0; j<hdr.npoles; j++)
         fprintf(outf, "%f%c", coef[j], (j==hdr.npoles-1 ? '\n' : ','));
     }
diff --git a/util/lpci_main.c b/util/lpci_main.c
index 23be25a..4291993 100644
--- a/util/lpci_main.c
+++ b/util/lpci_main.c
@@ -74,17 +74,28 @@ int main(int argc, char **argv)
             hdr.headersize, hdr.lpmagic, hdr.npoles, hdr.nvals,
             hdr.framrate, hdr.srate, hdr.duration);
     str = (char *)malloc(hdr.headersize-sizeof(LPHEADER)+4);
-    fread(&hdr, sizeof(char), hdr.headersize-sizeof(LPHEADER)+4, inf);
+    if (str==NULL) {
+      printf("memory allocation failure\n");
+      exit(1);
+    }
+    if (hdr.headersize-sizeof(LPHEADER)+4 !=
+        fread(&hdr, sizeof(char), hdr.headersize-sizeof(LPHEADER)+4, inf)) {
+      printf("Ill formed data\n");
+      exit(1);
+    }
     for (i=0; i<hdr.headersize-sizeof(LPHEADER)+4; i++)
       putc(str[i],outf);
     putc('\n', outf);
-    coef = (MYFLT *)malloc((hdr.npoles+hdr.nvals)*sizeof(MYFLT));
+    coef = (MYFLT *)malloc(hdr.npoles*sizeof(MYFLT));
     if (coef==NULL) {
       printf("memory allocation failure\n");
       exit(1);
     }
     for (i = 0; i<hdr.nvals; i++) {
-      fread(&coef[0], sizeof(MYFLT), hdr.npoles, inf);
+      if (hdr.npoles != fread(coef, sizeof(MYFLT), hdr.npoles, inf)) {
+        printf("Ill formed data\n");
+        exit(1);
+      }
       for (j=0; j<hdr.npoles; j++)
         fprintf(outf, "%f%c", coef[j], (j==hdr.npoles-1 ? '\n' : ','));
     }
diff --git a/util/lpcx_main.c b/util/lpcx_main.c
index 6409d5a..5598be1 100644
--- a/util/lpcx_main.c
+++ b/util/lpcx_main.c
@@ -74,13 +74,19 @@ int main(int argc, char **argv)
             hdr.headersize, hdr.lpmagic, hdr.npoles, hdr.nvals,
             hdr.framrate, hdr.srate, hdr.duration);
     str = (char *)malloc(hdr.headersize-sizeof(LPHEADER)+4);
-    fread(&hdr, sizeof(char), hdr.headersize-sizeof(LPHEADER)+4, inf);
+    if (UNLIKELY(fread(&hdr, sizeof(char), hdr.headersize-sizeof(LPHEADER)+4, inf)!=hdr.headersize-sizeof(LPHEADER)+4)){
+      fprintf(stderr, "Read failure\n");
+      exit(1);
+    }
     for (i=0; i<hdr.headersize-sizeof(LPHEADER)+4; i++)
       putc(str[i],outf);
     putc('\n', outf);
     coef = (MYFLT *)malloc((hdr.npoles+hdr.nvals)*sizeof(MYFLT));
     for (i = 0; i<floor(hdr.framrate*hdr.duration); i++) {
-      fread(&coef[0], sizeof(MYFLT), hdr.npoles, inf);
+      if (UNLIKELY(fread(&coef[0], sizeof(MYFLT), hdr.npoles, inf) != hdr.npoles)) {
+        fprintf(stderr, "Read failure\n");
+        exit(1);
+      }
       for (j=0; j<hdr.npoles; j++)
         fprintf(outf, "%f%c", coef[j], (j==hdr.npoles-1 ? '\n' : ','));
     }
diff --git a/util/pv_import.c b/util/pv_import.c
index 4766dbf..7b3bc2d 100644
--- a/util/pv_import.c
+++ b/util/pv_import.c
@@ -67,29 +67,41 @@ static int pv_import(CSOUND *csound, int argc, char **argv)
       csound->Message(csound, Str("Cannot open input file %s\n"), argv[1]);
       return 1;
     }
-    fscanf(inf,
+    if (UNLIKELY(EOF == fscanf(inf,
            "FormatTag,Channels,SamplesPerSec,AvgBytesPerSec,"
-           "BlockAlign,BitsPerSample,cbSize\n");
+                               "BlockAlign,BitsPerSample,cbSize\n"))) {
+      csound->Message(csound, Str("Not a PV file\n"));
+      exit(1);
+    }
     {
       int fmt1, fmt2, fmt3, fmt4, fmt5;
-      fscanf(inf, "%d,%d,%d,%d,%u,%u,%d\n",
+      if (7!=fscanf(inf, "%d,%d,%d,%d,%u,%u,%d\n",
              &fmt1, &fmt2, &fmt.nSamplesPerSec,
-             &fmt.nAvgBytesPerSec, &fmt3, &fmt4, &fmt5);
+                    &fmt.nAvgBytesPerSec, &fmt3, &fmt4, &fmt5)) {
+        printf("ill formed inout\n");
+        exit(1);
+      }
       fmt.wFormatTag = fmt1;
       fmt.nChannels = fmt2;
       fmt.nBlockAlign = fmt3;
       fmt.wBitsPerSample = fmt4;
       fmt.cbSize = fmt5;
     }
-    fscanf(inf, "WordFormat,AnalFormat,SourceFormat,WindowType,"
+    if (UNLIKELY(EOF == fscanf(inf, "WordFormat,AnalFormat,SourceFormat,WindowType,"
             "AnalysisBins,Winlen,Overlap,FrameAlign,"
-            "AnalysisRate,WindowParam\n");
+            "AnalysisRate,WindowParam\n"))) {
+      csound->Message(csound, Str("Not a PV file\n"));
+      exit(1);
+    }
     {
       int data1, data2, data3, data4;
-      fscanf(inf, "%d,%d,%d,%d,%d,%d,%d,%d,%g,%g\n",
-             &data1,&data2,&data3,&data4,&data.nAnalysisBins,
-             &data.dwWinlen, &data.dwOverlap,&data.dwFrameAlign,
-             &data.fAnalysisRate, &data.fWindowParam);
+      if(10!=fscanf(inf, "%d,%d,%d,%d,%d,%d,%d,%d,%g,%g\n",
+                    &data1,&data2,&data3,&data4,&data.nAnalysisBins,
+                    &data.dwWinlen, &data.dwOverlap,&data.dwFrameAlign,
+                    &data.fAnalysisRate, &data.fWindowParam)) {
+        printf("Ill formed data\n");
+        exit(1);
+      }
       data.wWordFormat = data1;
       data.wAnalFormat = data2;
       data.wSourceFormat = data3;
@@ -116,6 +128,10 @@ static int pv_import(CSOUND *csound, int argc, char **argv)
       float *frame =
         (float*) csound->Malloc(csound, data.nAnalysisBins*2*sizeof(float));
       int i;
+      if (frame==NULL) {
+        csound->Message(csound, Str("Memory failure\n"));
+        exit(1);
+      }
       for (i=1;;i++) {
         int j;
         for (j=0; j<data.nAnalysisBins*2; j++) {
diff --git a/util/srconv.c b/util/srconv.c
index 9d84a7e..8a54eb7 100644
--- a/util/srconv.c
+++ b/util/srconv.c
@@ -374,16 +374,17 @@ static int srconv(CSOUND *csound, int argc, char **argv)
       }
       /* register file to be closed by csoundReset() */
       (void) csound->CreateFileHandle(csound, &tvfp, CSFILE_STD, bfile);
-      fscanf(tvfp, "%d", &tvlen);
+      if (UNLIKELY(fscanf(tvfp, "%d", &tvlen) != 1))
+          csound->Message(csound, Str("Read failure\n"));
       fxval = (MYFLT*) csound->Malloc(csound, tvlen * sizeof(MYFLT));
       fyval = (MYFLT*) csound->Malloc(csound, tvlen * sizeof(MYFLT));
       i0 = fxval;
       i1 = fyval;
       for (i = 0; i < tvlen; i++, i0++, i1++) {
 #ifdef USE_DOUBLE
-        if ((fscanf(tvfp, "%lf %lf", i0, i1)) == EOF) {
+        if ((fscanf(tvfp, "%lf %lf", i0, i1)) != 2) {
 #else
-        if ((fscanf(tvfp, "%f %f", i0, i1)) == EOF) {
+        if ((fscanf(tvfp, "%f %f", i0, i1)) != 2) {
 #endif
           sprintf(err_msg, Str("srconv: too few x-y pairs "
                                "in time-vary function file"));
diff --git a/util1/csd_util/base64.c b/util1/csd_util/base64.c
index b7bf42a..16e3ac6 100644
--- a/util1/csd_util/base64.c
+++ b/util1/csd_util/base64.c
@@ -64,17 +64,16 @@ void encode_file(char *inflname, FILE *outfl, int style)
       exit(-1);
     }
     /* create new CSD tag and encode file */
-    if (style) 
+    if (style)
       fprintf(outfl, "<CsMidifileB>");
     else
       fprintf(outfl, "<CsFileB filename=\"%s\">", s);
     linepos = bitcnt = inval = 0;
     while (encode_byte(infile, outfl));
-    if (style) 
+    if (style)
       fprintf(outfl, "\b</CsMidifileB>\n");
     else
       fprintf(outfl, "\n</CsFileB>\n");
     /* close file */
     fclose(infile); infile = NULL;
 }
-
diff --git a/util1/scot/scot.c b/util1/scot/scot.c
index 7b074cc..d26b32f 100644
--- a/util1/scot/scot.c
+++ b/util1/scot/scot.c
@@ -27,6 +27,11 @@
 #include "scot.h"
 
 #define Str(x)  (x)
+#if defined(HAVE_GCC3)
+#  define UNLIKELY(x)   __builtin_expect(!!(x),0)
+#else
+#  define UNLIKELY(x)   x
+#endif
 
 static  char    curline[MAXLINE + 1];   /* current line of infile */
 static  int     inx,                    /* column # */
@@ -1398,8 +1403,10 @@ void initf(FILE *inf, FILE *outf, char *fil)
     infile = inf;
     outfile = outf;
     infilename = fil;
-    fgets(curline, MAXLINE, infile);
-
+    if (UNLIKELY(NULL == fgets(curline, MAXLINE, infile))) {
+      fprintf(stderr, "Read failure\n");
+      exit(1);
+    }
 #ifdef DEBUG
     printf("1: %s", curline);
 #endif
diff --git a/util1/sortex/smain.c b/util1/sortex/smain.c
index 683af80..284fcbc 100644
--- a/util1/sortex/smain.c
+++ b/util1/sortex/smain.c
@@ -23,6 +23,10 @@
 
 #include "csound.h"                                    /*   SMAIN.C  */
 
+#if defined(LINUX) || defined(SGI) || defined(sol) || defined(__MACH__) || defined(__EMX__)
+#include <signal.h>
+#endif
+
 static void msg_callback(CSOUND *csound,
                          int attr, const char *fmt, va_list args)
 {
@@ -37,6 +41,9 @@ int main(void)                          /* stdio stub for standalone scsort */
     int    err;
 
     csound = csoundCreate(NULL);
+#if defined(LINUX) || defined(SGI) || defined(sol) || defined(__MACH__) || defined(__EMX__)
+    signal(SIGPIPE, SIG_DFL);
+#endif
     csoundSetMessageCallback(csound, msg_callback);
     csoundPreCompile(csound);
     err = csoundScoreSort(csound, stdin, stdout);
diff --git a/util1/sortex/xmain.c b/util1/sortex/xmain.c
index ff947fe..5012016 100644
--- a/util1/sortex/xmain.c
+++ b/util1/sortex/xmain.c
@@ -23,6 +23,10 @@
 
 #include "csound.h"                                /*   XMAIN.C  */
 
+#if defined(LINUX) || defined(SGI) || defined(sol) || defined(__MACH__) || defined(__EMX__)
+#include <signal.h>
+#endif
+
 int main(int ac, char **av)         /* stdio stub for standalone extract */
 {                                   /*     first opens the control xfile */
     CSOUND  *csound;
@@ -30,6 +34,9 @@ int main(int ac, char **av)         /* stdio stub for standalone extract */
     int     err = 1;
 
     csound = csoundCreate(NULL);
+#if defined(LINUX) || defined(SGI) || defined(sol) || defined(__MACH__) || defined(__EMX__)
+    signal(SIGPIPE, SIG_DFL);
+#endif
     csoundPreCompile(csound);
     if (ac != 2) {
       fprintf(stderr, "usage: extract xfile <in >out\n");

-- 
csound packaging



More information about the pkg-multimedia-commits mailing list