summaryrefslogtreecommitdiff
path: root/third_party/resample/src
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/resample/src')
-rw-r--r--third_party/resample/src/Makefile.am22
-rw-r--r--third_party/resample/src/Makefile.in478
-rw-r--r--third_party/resample/src/filterkit.c631
-rw-r--r--third_party/resample/src/filterkit.h159
-rw-r--r--third_party/resample/src/largefilter.h16411
-rw-r--r--third_party/resample/src/resample.c238
-rw-r--r--third_party/resample/src/resample.h86
-rw-r--r--third_party/resample/src/resamplesubs.c520
-rw-r--r--third_party/resample/src/smallfilter.h4617
-rw-r--r--third_party/resample/src/sndlibextra.c90
-rw-r--r--third_party/resample/src/sndlibextra.h48
-rw-r--r--third_party/resample/src/stdefs.h59
-rw-r--r--third_party/resample/src/windowfilter.c114
13 files changed, 0 insertions, 23473 deletions
diff --git a/third_party/resample/src/Makefile.am b/third_party/resample/src/Makefile.am
deleted file mode 100644
index bd3ce51a..00000000
--- a/third_party/resample/src/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-SNDLIB = ../sndlib-20
-
-INCLUDES = -I$(SNDLIB)
-
-bin_PROGRAMS = resample windowfilter
-
-resample_SOURCES = resample.c resamplesubs.c sndlibextra.c filterkit.c \
- $(SNDLIB)/audio.c $(SNDLIB)/io.c $(SNDLIB)/headers.c $(SNDLIB)/sound.c \
- resample.h stdefs.h sndlibextra.h filterkit.h smallfilter.h largefilter.h \
- $(SNDLIB)/sndlib.h $(SNDLIB)/mus-config.h $(SNDLIB)/_sndlib.h $(SNDLIB)/sndlib-strings.h $(SNDLIB)/configure
-
-resample_LDADD = -lm
-
-windowfilter_SOURCES = windowfilter.c resamplesubs.c sndlibextra.c filterkit.c \
- $(SNDLIB)/audio.c $(SNDLIB)/io.c $(SNDLIB)/headers.c $(SNDLIB)/sound.c
-
-windowfilter_LDADD = -lm
-
-EXTRA_DIST = $(man_MANS)
-
diff --git a/third_party/resample/src/Makefile.in b/third_party/resample/src/Makefile.in
deleted file mode 100644
index 56da85f2..00000000
--- a/third_party/resample/src/Makefile.in
+++ /dev/null
@@ -1,478 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-bin_PROGRAMS = resample$(EXEEXT) windowfilter$(EXEEXT)
-subdir = src
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.in
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-am__installdirs = "$(DESTDIR)$(bindir)"
-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-PROGRAMS = $(bin_PROGRAMS)
-am_resample_OBJECTS = resample.$(OBJEXT) resamplesubs.$(OBJEXT) \
- sndlibextra.$(OBJEXT) filterkit.$(OBJEXT) audio.$(OBJEXT) \
- io.$(OBJEXT) headers.$(OBJEXT) sound.$(OBJEXT)
-resample_OBJECTS = $(am_resample_OBJECTS)
-resample_DEPENDENCIES =
-am_windowfilter_OBJECTS = windowfilter.$(OBJEXT) \
- resamplesubs.$(OBJEXT) sndlibextra.$(OBJEXT) \
- filterkit.$(OBJEXT) audio.$(OBJEXT) io.$(OBJEXT) \
- headers.$(OBJEXT) sound.$(OBJEXT)
-windowfilter_OBJECTS = $(am_windowfilter_OBJECTS)
-windowfilter_DEPENDENCIES =
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(resample_SOURCES) $(windowfilter_SOURCES)
-DIST_SOURCES = $(resample_SOURCES) $(windowfilter_SOURCES)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ALLOCA = @ALLOCA@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_RANLIB = @ac_ct_RANLIB@
-ac_ct_STRIP = @ac_ct_STRIP@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build_alias = @build_alias@
-datadir = @datadir@
-exec_prefix = @exec_prefix@
-host_alias = @host_alias@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-SNDLIB = ../sndlib-20
-INCLUDES = -I$(SNDLIB)
-resample_SOURCES = resample.c resamplesubs.c sndlibextra.c filterkit.c \
- $(SNDLIB)/audio.c $(SNDLIB)/io.c $(SNDLIB)/headers.c $(SNDLIB)/sound.c \
- resample.h stdefs.h sndlibextra.h filterkit.h smallfilter.h largefilter.h \
- $(SNDLIB)/sndlib.h $(SNDLIB)/mus-config.h $(SNDLIB)/_sndlib.h $(SNDLIB)/sndlib-strings.h $(SNDLIB)/configure
-
-resample_LDADD = -lm
-windowfilter_SOURCES = windowfilter.c resamplesubs.c sndlibextra.c filterkit.c \
- $(SNDLIB)/audio.c $(SNDLIB)/io.c $(SNDLIB)/headers.c $(SNDLIB)/sound.c
-
-windowfilter_LDADD = -lm
-EXTRA_DIST = $(man_MANS)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .o .obj
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
- && exit 0; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
- cd $(top_srcdir) && \
- $(AUTOMAKE) --gnu src/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-binPROGRAMS: $(bin_PROGRAMS)
- @$(NORMAL_INSTALL)
- test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
- @list='$(bin_PROGRAMS)'; for p in $$list; do \
- p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
- if test -f $$p \
- ; then \
- f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
- echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
- $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
- else :; fi; \
- done
-
-uninstall-binPROGRAMS:
- @$(NORMAL_UNINSTALL)
- @list='$(bin_PROGRAMS)'; for p in $$list; do \
- f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
- echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
- rm -f "$(DESTDIR)$(bindir)/$$f"; \
- done
-
-clean-binPROGRAMS:
- -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
-resample$(EXEEXT): $(resample_OBJECTS) $(resample_DEPENDENCIES)
- @rm -f resample$(EXEEXT)
- $(LINK) $(resample_LDFLAGS) $(resample_OBJECTS) $(resample_LDADD) $(LIBS)
-windowfilter$(EXEEXT): $(windowfilter_OBJECTS) $(windowfilter_DEPENDENCIES)
- @rm -f windowfilter$(EXEEXT)
- $(LINK) $(windowfilter_LDFLAGS) $(windowfilter_OBJECTS) $(windowfilter_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/audio.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filterkit.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/headers.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resample.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resamplesubs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sndlibextra.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windowfilter.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-audio.o: $(SNDLIB)/audio.c
-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT audio.o -MD -MP -MF "$(DEPDIR)/audio.Tpo" -c -o audio.o `test -f '$(SNDLIB)/audio.c' || echo '$(srcdir)/'`$(SNDLIB)/audio.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/audio.Tpo" "$(DEPDIR)/audio.Po"; else rm -f "$(DEPDIR)/audio.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(SNDLIB)/audio.c' object='audio.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o audio.o `test -f '$(SNDLIB)/audio.c' || echo '$(srcdir)/'`$(SNDLIB)/audio.c
-
-audio.obj: $(SNDLIB)/audio.c
-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT audio.obj -MD -MP -MF "$(DEPDIR)/audio.Tpo" -c -o audio.obj `if test -f '$(SNDLIB)/audio.c'; then $(CYGPATH_W) '$(SNDLIB)/audio.c'; else $(CYGPATH_W) '$(srcdir)/$(SNDLIB)/audio.c'; fi`; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/audio.Tpo" "$(DEPDIR)/audio.Po"; else rm -f "$(DEPDIR)/audio.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(SNDLIB)/audio.c' object='audio.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o audio.obj `if test -f '$(SNDLIB)/audio.c'; then $(CYGPATH_W) '$(SNDLIB)/audio.c'; else $(CYGPATH_W) '$(srcdir)/$(SNDLIB)/audio.c'; fi`
-
-io.o: $(SNDLIB)/io.c
-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT io.o -MD -MP -MF "$(DEPDIR)/io.Tpo" -c -o io.o `test -f '$(SNDLIB)/io.c' || echo '$(srcdir)/'`$(SNDLIB)/io.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/io.Tpo" "$(DEPDIR)/io.Po"; else rm -f "$(DEPDIR)/io.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(SNDLIB)/io.c' object='io.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o io.o `test -f '$(SNDLIB)/io.c' || echo '$(srcdir)/'`$(SNDLIB)/io.c
-
-io.obj: $(SNDLIB)/io.c
-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT io.obj -MD -MP -MF "$(DEPDIR)/io.Tpo" -c -o io.obj `if test -f '$(SNDLIB)/io.c'; then $(CYGPATH_W) '$(SNDLIB)/io.c'; else $(CYGPATH_W) '$(srcdir)/$(SNDLIB)/io.c'; fi`; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/io.Tpo" "$(DEPDIR)/io.Po"; else rm -f "$(DEPDIR)/io.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(SNDLIB)/io.c' object='io.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o io.obj `if test -f '$(SNDLIB)/io.c'; then $(CYGPATH_W) '$(SNDLIB)/io.c'; else $(CYGPATH_W) '$(srcdir)/$(SNDLIB)/io.c'; fi`
-
-headers.o: $(SNDLIB)/headers.c
-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT headers.o -MD -MP -MF "$(DEPDIR)/headers.Tpo" -c -o headers.o `test -f '$(SNDLIB)/headers.c' || echo '$(srcdir)/'`$(SNDLIB)/headers.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/headers.Tpo" "$(DEPDIR)/headers.Po"; else rm -f "$(DEPDIR)/headers.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(SNDLIB)/headers.c' object='headers.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o headers.o `test -f '$(SNDLIB)/headers.c' || echo '$(srcdir)/'`$(SNDLIB)/headers.c
-
-headers.obj: $(SNDLIB)/headers.c
-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT headers.obj -MD -MP -MF "$(DEPDIR)/headers.Tpo" -c -o headers.obj `if test -f '$(SNDLIB)/headers.c'; then $(CYGPATH_W) '$(SNDLIB)/headers.c'; else $(CYGPATH_W) '$(srcdir)/$(SNDLIB)/headers.c'; fi`; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/headers.Tpo" "$(DEPDIR)/headers.Po"; else rm -f "$(DEPDIR)/headers.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(SNDLIB)/headers.c' object='headers.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o headers.obj `if test -f '$(SNDLIB)/headers.c'; then $(CYGPATH_W) '$(SNDLIB)/headers.c'; else $(CYGPATH_W) '$(srcdir)/$(SNDLIB)/headers.c'; fi`
-
-sound.o: $(SNDLIB)/sound.c
-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sound.o -MD -MP -MF "$(DEPDIR)/sound.Tpo" -c -o sound.o `test -f '$(SNDLIB)/sound.c' || echo '$(srcdir)/'`$(SNDLIB)/sound.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sound.Tpo" "$(DEPDIR)/sound.Po"; else rm -f "$(DEPDIR)/sound.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(SNDLIB)/sound.c' object='sound.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sound.o `test -f '$(SNDLIB)/sound.c' || echo '$(srcdir)/'`$(SNDLIB)/sound.c
-
-sound.obj: $(SNDLIB)/sound.c
-@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sound.obj -MD -MP -MF "$(DEPDIR)/sound.Tpo" -c -o sound.obj `if test -f '$(SNDLIB)/sound.c'; then $(CYGPATH_W) '$(SNDLIB)/sound.c'; else $(CYGPATH_W) '$(srcdir)/$(SNDLIB)/sound.c'; fi`; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sound.Tpo" "$(DEPDIR)/sound.Po"; else rm -f "$(DEPDIR)/sound.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(SNDLIB)/sound.c' object='sound.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sound.obj `if test -f '$(SNDLIB)/sound.c'; then $(CYGPATH_W) '$(SNDLIB)/sound.c'; else $(CYGPATH_W) '$(srcdir)/$(SNDLIB)/sound.c'; fi`
-uninstall-info-am:
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$tags $$unique; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(CTAGS_ARGS)$$tags$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$tags $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && cd $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
- list='$(DISTFILES)'; for file in $$list; do \
- case $$file in \
- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
- esac; \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test "$$dir" != "$$file" && test "$$dir" != "."; then \
- dir="/$$dir"; \
- $(mkdir_p) "$(distdir)$$dir"; \
- else \
- dir=''; \
- fi; \
- if test -d $$d/$$file; then \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
- fi; \
- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
- else \
- test -f $(distdir)/$$file \
- || cp -p $$d/$$file $(distdir)/$$file \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
- for dir in "$(DESTDIR)$(bindir)"; do \
- test -z "$$dir" || $(mkdir_p) "$$dir"; \
- done
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-exec-am: install-binPROGRAMS
-
-install-info: install-info-am
-
-install-man:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-binPROGRAMS uninstall-info-am
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
- clean-generic ctags distclean distclean-compile \
- distclean-generic distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-binPROGRAMS \
- install-data install-data-am install-exec install-exec-am \
- install-info install-info-am install-man install-strip \
- installcheck installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
- uninstall-am uninstall-binPROGRAMS uninstall-info-am
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/third_party/resample/src/filterkit.c b/third_party/resample/src/filterkit.c
deleted file mode 100644
index 5171b5ea..00000000
--- a/third_party/resample/src/filterkit.c
+++ /dev/null
@@ -1,631 +0,0 @@
-/*
- * filterkit.c (library "filterkit.a"): Kaiser-windowed low-pass filter support.
- */
-
-/* filterkit.c
- *
- * LpFilter() - Calculates the filter coeffs for a Kaiser-windowed low-pass
- * filter with a given roll-off frequency. These coeffs
- * are stored into a array of doubles.
- * writeFilter() - Writes a filter to a file.
- * makeFilter() - Calls LpFilter() to create a filter, then scales the double
- * coeffs into an array of half words.
- * readFilter() - Reads a filter from a file.
- * FilterUp() - Applies a filter to a given sample when up-converting.
- * FilterUD() - Applies a filter to a given sample when up- or down-
- * converting.
- * initZerox() - Initialization routine for the zerox() function. Must
- * be called before zerox() is called. This routine loads
- * the correct filter so zerox() can use it.
- * zerox() - Given a pointer into a sample, finds a zero-crossing on the
- * interval [pointer-1:pointer+2] by iteration.
- * Query() - Ask the user for a yes/no question with prompt, default,
- * and optional help.
- * GetUShort() - Ask the user for a unsigned short with prompt, default,
- * and optional help.
- * GetDouble() - Ask the user for a double with prompt, default, and
- * optional help.
- * GetString() - Ask the user for a string with prompt, default, and
- * optional help.
- */
-
-#include "resample.h"
-#include "filterkit.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-
-/*
- * Getstr() will print the passed "prompt" as a message to the user, and
- * wait for the user to type an input string. The string is
- * then copied into "answer". If the user types just a carriage
- * return, then the string "defaultAnswer" is copied into "answer".
- * ???
- * "Answer" and "defaultAnswer" may be the same string, in which case,
- * the defaultAnswer value will be the original contents of "answer".
- * ???
- */
-static void getstr(char *prompt, char *defaultAnswer, char *answer)
-{
- char *p,s[200];
-
- printf("%s (defaultAnswer = %s):",prompt,defaultAnswer);
- strcpy(s, prompt);
- if (!(*s))
- strcpy(s, "input:");
- p = s;
- while (*p && *p != '(')
- p++;
- p--;
- while (*p == ' ')
- p--;
- *(++p) = '\0';
-
- /* gets(answer); */
- fgets(answer,sizeof(answer),stdin);
- answer[strlen(answer)-1] = '\0';
-
- if (answer[0] == '\0') {
- strcpy(answer, defaultAnswer);
- printf("\t%s = %s\n",s,answer);
- } else {
- printf("\t%s set to %s\n",s,answer);
- }
-}
-
-
-/* LpFilter()
- *
- * reference: "Digital Filters, 2nd edition"
- * R.W. Hamming, pp. 178-179
- *
- * Izero() computes the 0th order modified bessel function of the first kind.
- * (Needed to compute Kaiser window).
- *
- * LpFilter() computes the coeffs of a Kaiser-windowed low pass filter with
- * the following characteristics:
- *
- * c[] = array in which to store computed coeffs
- * frq = roll-off frequency of filter
- * N = Half the window length in number of coeffs
- * Beta = parameter of Kaiser window
- * Num = number of coeffs before 1/frq
- *
- * Beta trades the rejection of the lowpass filter against the transition
- * width from passband to stopband. Larger Beta means a slower
- * transition and greater stopband rejection. See Rabiner and Gold
- * (Theory and Application of DSP) under Kaiser windows for more about
- * Beta. The following table from Rabiner and Gold gives some feel
- * for the effect of Beta:
- *
- * All ripples in dB, width of transition band = D*N where N = window length
- *
- * BETA D PB RIP SB RIP
- * 2.120 1.50 +-0.27 -30
- * 3.384 2.23 0.0864 -40
- * 4.538 2.93 0.0274 -50
- * 5.658 3.62 0.00868 -60
- * 6.764 4.32 0.00275 -70
- * 7.865 5.0 0.000868 -80
- * 8.960 5.7 0.000275 -90
- * 10.056 6.4 0.000087 -100
- */
-
-
-#define IzeroEPSILON 1E-21 /* Max error acceptable in Izero */
-
-static double Izero(double x)
-{
- double sum, u, halfx, temp;
- int n;
-
- sum = u = n = 1;
- halfx = x/2.0;
- do {
- temp = halfx/(double)n;
- n += 1;
- temp *= temp;
- u *= temp;
- sum += u;
- } while (u >= IzeroEPSILON*sum);
- return(sum);
-}
-
-
-void LpFilter(double c[], int N, double frq, double Beta, int Num)
-{
- double IBeta, temp, inm1;
- int i;
-
- /* Calculate ideal lowpass filter impulse response coefficients: */
- c[0] = 2.0*frq;
- for (i=1; i<N; i++) {
- temp = PI*(double)i/(double)Num;
- c[i] = sin(2.0*temp*frq)/temp; /* Analog sinc function, cutoff = frq */
- }
-
- /*
- * Calculate and Apply Kaiser window to ideal lowpass filter.
- * Note: last window value is IBeta which is NOT zero.
- * You're supposed to really truncate the window here, not ramp
- * it to zero. This helps reduce the first sidelobe.
- */
- IBeta = 1.0/Izero(Beta);
- inm1 = 1.0/((double)(N-1));
- for (i=1; i<N; i++) {
- temp = (double)i * inm1;
- c[i] *= Izero(Beta*sqrt(1.0-temp*temp)) * IBeta;
- }
-}
-
-
-/* Write a filter to a file
- * Filter file format:
- * file name: "F" Nmult "T" Nhc ".filter"
- * 1st line: the string "ScaleFactor" followed by its value.
- * 2nd line: the string "Length" followed by Nwing's value.
- * 3rd line: the string "Nmult" followed by Nmult's value.
- * 4th line: the string "Coeffs:" on a separate line.
- * following lines: Nwing number of 16-bit impulse response values
- * in the right wing of the impulse response (the Imp[] array).
- * (Nwing is equal to Npc*(Nmult+1)/2+1, where Npc is defined in the
- * file "resample.h".) Each coefficient is on a separate line.
- * next line: the string "Differences:" on a separate line.
- * following lines: Nwing number of 16-bit impulse-response
- * successive differences: ImpD[i] = Imp[i+1] - Imp[i].
- * ERROR codes:
- * 0 - no error
- * 1 - could not open file
- */
-
-int writeFilter(HWORD Imp[], HWORD ImpD[], UHWORD LpScl, UHWORD Nmult,
- UHWORD Nwing)
-{
- char fname[30];
- FILE *fp;
- int i;
-
- sprintf(fname, "F%dT%d.filter", Nmult, Nhc);
- fp = fopen(fname, "w");
- if (!fp)
- return(1);
- fprintf(fp, "ScaleFactor %d\n", LpScl);
- fprintf(fp, "Length %d\n", Nwing);
- fprintf(fp, "Nmult %d\n", Nmult);
- fprintf(fp, "Coeffs:\n");
- for (i=0; i<Nwing; i++) /* Put array of 16-bit filter coefficients */
- fprintf(fp, "%d\n", Imp[i]);
- fprintf(fp, "Differences:\n");
- for (i=0; i<Nwing; i++) /* Put array of 16-bit filter coeff differences */
- fprintf(fp, "%d\n", ImpD[i]);
- fclose(fp);
- printf("Wrote filter file '%s' in current directory.\n",fname);
- return(0);
-}
-
-
-/* ERROR return codes:
- * 0 - no error
- * 1 - Nwing too large (Nwing is > MAXNWING)
- * 2 - Froll is not in interval [0:1)
- * 3 - Beta is < 1.0
- * 4 - LpScl will not fit in 16-bits
- *
- * Made following global to avoid stack problems in Sun3 compilation: */
-
-#define MAXNWING 8192
-static double ImpR[MAXNWING];
-
-int makeFilter(HWORD Imp[], HWORD ImpD[], UHWORD *LpScl, UHWORD Nwing,
- double Froll, double Beta)
-{
- double DCgain, Scl, Maxh;
- HWORD Dh;
- int i, temp;
-
- if (Nwing > MAXNWING) /* Check for valid parameters */
- return(1);
- if ((Froll<=0) || (Froll>1))
- return(2);
- if (Beta < 1)
- return(3);
-
- /*
- * Design Kaiser-windowed sinc-function low-pass filter
- */
- LpFilter(ImpR, (int)Nwing, 0.5*Froll, Beta, Npc);
-
- /* Compute the DC gain of the lowpass filter, and its maximum coefficient
- * magnitude. Scale the coefficients so that the maximum coeffiecient just
- * fits in Nh-bit fixed-point, and compute LpScl as the NLpScl-bit (signed)
- * scale factor which when multiplied by the output of the lowpass filter
- * gives unity gain. */
- DCgain = 0;
- Dh = Npc; /* Filter sampling period for factors>=1 */
- for (i=Dh; i<Nwing; i+=Dh)
- DCgain += ImpR[i];
- DCgain = 2*DCgain + ImpR[0]; /* DC gain of real coefficients */
-
- for (Maxh=i=0; i<Nwing; i++)
- Maxh = MAX(Maxh, fabs(ImpR[i]));
-
- Scl = ((1<<(Nh-1))-1)/Maxh; /* Map largest coeff to 16-bit maximum */
- temp = fabs((1<<(NLpScl+Nh))/(DCgain*Scl));
- if (temp >= 1<<16)
- return(4); /* Filter scale factor overflows UHWORD */
- *LpScl = temp;
-
- /* Scale filter coefficients for Nh bits and convert to integer */
- if (ImpR[0] < 0) /* Need pos 1st value for LpScl storage */
- Scl = -Scl;
- for (i=0; i<Nwing; i++) /* Scale them */
- ImpR[i] *= Scl;
- for (i=0; i<Nwing; i++) /* Round them */
- Imp[i] = ImpR[i] + 0.5;
-
- /* ImpD makes linear interpolation of the filter coefficients faster */
- for (i=0; i<Nwing-1; i++)
- ImpD[i] = Imp[i+1] - Imp[i];
- ImpD[Nwing-1] = - Imp[Nwing-1]; /* Last coeff. not interpolated */
-
- return(0);
-}
-
-
-/* Read-in a filter
- * Filter file format:
- * file name: "F" Nmult "T" Nhc ".filter"
- * 1st line: the string "ScaleFactor" followed by its value.
- * 2nd line: the string "Length" followed by Nwing's value.
- * 3rd line: the string "Coeffs:" on separate line.
- * Nwing number of 16-bit impulse response values in the right
- * wing of the impulse response. (Length=Npc*(Nmult+1)/2+1,
- * where originally Npc=2^9, and Nmult=13.) Each on separate line.
- * The string "Differences:" on separate line.
- * Nwing number of 16-bit impulse-response successive differences:
- * ImpDiff[i] = Imp[i+1] - Imp[i].
- *
- * ERROR return codes:
- * 0 - no error
- * 1 - file not found
- * 2 - invalid ScaleFactor in file
- * 3 - invalid Length in file
- * 4 - invalid Nmult in file
- */
-int readFilter(char *filterFile, HWORD **ImpP, HWORD **ImpDP, UHWORD *LpScl,
- UHWORD *Nmult, UHWORD *Nwing)
-{
- char *fname;
- FILE *fp;
- int i, temp;
- HWORD *Imp,*ImpD;
-
- if (!filterFile || !(*filterFile)) {
- fname = (char *) malloc(32);
- if ((*Nmult)>0 && ((*Nmult)&1))
- sprintf(fname, "F%dT%d.filter", *Nmult, Nhc);
- else
- sprintf(fname, "F65dT%d.filter", Nhc);
- } else
- fname = filterFile;
-
- fp = fopen(fname, "r");
- if (fp == NULL)
- return(1);
-
- fscanf(fp, "ScaleFactor ");
- if (1 != fscanf(fp,"%d",&temp))
- return(2);
- *LpScl = temp;
-
- fscanf(fp, "\nLength ");
- if (1 != fscanf(fp,"%d",&temp))
- return(3);
- *Nwing = temp;
-
- fscanf(fp, "\nNmult ");
- if (1 != fscanf(fp,"%d",&temp))
- return(4);
- *Nmult = temp;
-
- Imp = (HWORD *) malloc(*Nwing * sizeof(HWORD));
-
- fscanf(fp, "\nCoeffs:\n");
- for (i=0; i<*Nwing; i++) { /* Get array of 16-bit filter coefficients */
- fscanf(fp, "%d\n", &temp);
- Imp[i] = temp;
- }
-
- ImpD = (HWORD *) malloc(*Nwing * sizeof(HWORD));
-
- fscanf(fp, "\nDifferences:\n");
- for (i=0; i<*Nwing; i++) { /* Get array of 16bit filter coeff differences */
- fscanf(fp, "%d\n", &temp);
- ImpD[i] = temp;
- }
-
- fclose(fp);
- if (!filterFile || !(*filterFile))
- free(fname);
- *ImpP = Imp;
- *ImpDP = ImpD;
- return(0);
-}
-
-
-WORD FilterUp(HWORD Imp[], HWORD ImpD[],
- UHWORD Nwing, BOOL Interp,
- HWORD *Xp, HWORD Ph, HWORD Inc)
-{
- HWORD *Hp, *Hdp = NULL, *End;
- HWORD a = 0;
- WORD v, t;
-
- v=0;
- Hp = &Imp[Ph>>Na];
- End = &Imp[Nwing];
- if (Interp) {
- Hdp = &ImpD[Ph>>Na];
- a = Ph & Amask;
- }
- if (Inc == 1) /* If doing right wing... */
- { /* ...drop extra coeff, so when Ph is */
- End--; /* 0.5, we don't do too many mult's */
- if (Ph == 0) /* If the phase is zero... */
- { /* ...then we've already skipped the */
- Hp += Npc; /* first sample, so we must also */
- Hdp += Npc; /* skip ahead in Imp[] and ImpD[] */
- }
- }
- if (Interp)
- while (Hp < End) {
- t = *Hp; /* Get filter coeff */
- t += (((WORD)*Hdp)*a)>>Na; /* t is now interp'd filter coeff */
- Hdp += Npc; /* Filter coeff differences step */
- t *= *Xp; /* Mult coeff by input sample */
- if (t & (1<<(Nhxn-1))) /* Round, if needed */
- t += (1<<(Nhxn-1));
- t >>= Nhxn; /* Leave some guard bits, but come back some */
- v += t; /* The filter output */
- Hp += Npc; /* Filter coeff step */
- Xp += Inc; /* Input signal step. NO CHECK ON BOUNDS */
- }
- else
- while (Hp < End) {
- t = *Hp; /* Get filter coeff */
- t *= *Xp; /* Mult coeff by input sample */
- if (t & (1<<(Nhxn-1))) /* Round, if needed */
- t += (1<<(Nhxn-1));
- t >>= Nhxn; /* Leave some guard bits, but come back some */
- v += t; /* The filter output */
- Hp += Npc; /* Filter coeff step */
- Xp += Inc; /* Input signal step. NO CHECK ON BOUNDS */
- }
- return(v);
-}
-
-WORD FilterUD( HWORD Imp[], HWORD ImpD[],
- UHWORD Nwing, BOOL Interp,
- HWORD *Xp, HWORD Ph, HWORD Inc, UHWORD dhb)
-{
- HWORD a;
- HWORD *Hp, *Hdp, *End;
- WORD v, t;
- UWORD Ho;
-
- v=0;
- Ho = (Ph*(UWORD)dhb)>>Np;
- End = &Imp[Nwing];
- if (Inc == 1) /* If doing right wing... */
- { /* ...drop extra coeff, so when Ph is */
- End--; /* 0.5, we don't do too many mult's */
- if (Ph == 0) /* If the phase is zero... */
- Ho += dhb; /* ...then we've already skipped the */
- } /* first sample, so we must also */
- /* skip ahead in Imp[] and ImpD[] */
- if (Interp)
- while ((Hp = &Imp[Ho>>Na]) < End) {
- t = *Hp; /* Get IR sample */
- Hdp = &ImpD[Ho>>Na]; /* get interp (lower Na) bits from diff table*/
- a = Ho & Amask; /* a is logically between 0 and 1 */
- t += (((WORD)*Hdp)*a)>>Na; /* t is now interp'd filter coeff */
- t *= *Xp; /* Mult coeff by input sample */
- if (t & 1<<(Nhxn-1)) /* Round, if needed */
- t += 1<<(Nhxn-1);
- t >>= Nhxn; /* Leave some guard bits, but come back some */
- v += t; /* The filter output */
- Ho += dhb; /* IR step */
- Xp += Inc; /* Input signal step. NO CHECK ON BOUNDS */
- }
- else
- while ((Hp = &Imp[Ho>>Na]) < End) {
- t = *Hp; /* Get IR sample */
- t *= *Xp; /* Mult coeff by input sample */
- if (t & 1<<(Nhxn-1)) /* Round, if needed */
- t += 1<<(Nhxn-1);
- t >>= Nhxn; /* Leave some guard bits, but come back some */
- v += t; /* The filter output */
- Ho += dhb; /* IR step */
- Xp += Inc; /* Input signal step. NO CHECK ON BOUNDS */
- }
- return(v);
-}
-
-/*
- * double zerox(Data, Factor)
- * HWORD *Data;
- * double Factor;
- * Given a pointer into a sound sample, this function uses a low-pass
- * filter to estimate the x coordinate of the zero-crossing which must ocurr
- * between Data[0] and Data[1]. This value is returned as the value of the
- * function. A return value of -100 indicates there was no zero-crossing in
- * the x interval [-1,2]. Factor is the resampling factor: Rate(out) /
- * Rate(in). Nmult (which determines which filter is used) is passed the
- * zerox's initialization routine: initZerox(Nmult)
- * UHWORD Nmult;
- */
-
-static UHWORD LpScl, Nmult, Nwing;
-static HWORD *Imp;
-static HWORD *ImpD;
-
-/* ERROR return values:
- * 0 - no error
- * 1 - Nmult is even (should be odd)
- * 2 - filter file not found
- * 3 - invalid ScaleFactor in input file
- * 4 - invalid Length in file
- * 5 - invalid Nmult in file
- */
-int initZerox(UHWORD tempNmult)
-{
- int err;
-
- /* Check for illegal input values */
- if (!(tempNmult % 2))
- return(1);
- err = readFilter(NULL, (HWORD **)&Imp, (HWORD **)&ImpD,
- &LpScl, &tempNmult, &Nwing);
- if (err)
- return(1+err);
-
- Nmult = tempNmult;
- return(0);
-}
-
-#define MAXITER 64
-#define ZeroxEPSILON (1E-4)
-#define ZeroxMAXERROR (5.0)
-
-double zerox(HWORD *Data, double Factor)
-{
- double x, out;
- double lo, hi;
- double dh;
- UWORD dhb;
- WORD v;
- int i;
-
- if (!Data[0])
- return (0.0);
- if (!Data[1])
- return (1.0);
-
- if (Data[0] < Data[1])
- {
- lo = -1.0;
- hi = 2.0;
- }
- else
- {
- lo = 2.0;
- hi = -1.0;
- }
- dh = (Factor<1) ? (Factor*Npc) : (Npc);
- dhb = dh * (1<<Na) + 0.5;
-
- for (i=0; i<MAXITER; i++)
- {
- x = (hi+lo)/2.0;
- v = FilterUD(Imp,ImpD,Nwing,TRUE,Data, (HWORD)(x*Pmask), -1,dhb);
- v += FilterUD(Imp,ImpD,Nwing,TRUE,Data+1,(HWORD)((1-x)*Pmask), 1,dhb);
- v >>= Nhg;
- v *= LpScl;
- out = (double)v / (double)(1<<NLpScl);
- if (out < 0.0)
- lo = x;
- else
- hi = x;
- if (ABS(out) <= ZeroxEPSILON)
- return(x);
- }
- printf("|ZeroX Error| x:%g, \t Data[x]:%d, \t Data[x+1]:%d\n",
- x, *Data, *(Data+1));
- printf("|\tABS(out):%g \t EPSILON:%g\n", ABS(out),ZeroxEPSILON);
- if (ABS(out) <= ZeroxMAXERROR)
- return(x);
- return(-100.0);
-}
-
-
-BOOL Query(char *prompt, BOOL deflt, char *help)
-{
- char s[80];
-
- while (TRUE)
- {
- sprintf(s,"\n%s%s", prompt, (*help) ? " (Type ? for help)" : "");
- getstr(s,(deflt)?"yes":"no",s);
- if (*s=='?' && *help)
- printf(help);
- if (*s=='Y' || *s=='y')
- return(TRUE);
- if (*s=='N' || *s=='n')
- return(FALSE);
- }
-}
-
-
-char *GetString(char *prompt, char *deflt, char *help)
-{
- static char s[200];
-
- while (TRUE)
- {
- sprintf(s,"\n%s%s",prompt, (*help) ? " (Type ? for Help)" : "");
- getstr(s,deflt,s);
- if (*s=='?' && *help)
- printf(help);
- else
- return(s);
- }
-}
-
-
-double GetDouble(char *title, double deflt, char *help)
-{
- char s[80],sdeflt[80];
- double newval;
-
- while (TRUE)
- {
- sprintf(s,"\n%s:%s",title, (*help) ? " (Type ? for Help)" : "");
- sprintf(sdeflt,"%g",deflt);
- getstr(s,sdeflt,s);
- if (*s=='?' && *help)
- printf(help);
- else
- {
- if (!sscanf(s,"%lf",&newval))
- return(deflt);
- return(newval);
- }
- }
-}
-
-
-unsigned short GetUShort(char *title, unsigned short deflt, char *help)
-{
- char s[80],sdeflt[80];
- int newval;
-
- while (TRUE)
- {
- sprintf(s,"\n%s:%s",title, (*help) ? " (Type ? for Help)" : "");
- sprintf(sdeflt,"%d",deflt);
- getstr(s,sdeflt,s);
- if (*s=='?' && *help)
- printf(help);
- else
- {
- if (!sscanf(s,"%d",&newval))
- printf("unchanged (%d)\n",(newval=deflt));
- if (newval < 0)
- printf("Error: value must be >= zero\n");
- else
- return(newval);
- }
- }
-}
diff --git a/third_party/resample/src/filterkit.h b/third_party/resample/src/filterkit.h
deleted file mode 100644
index c0d5e97c..00000000
--- a/third_party/resample/src/filterkit.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*:filterkit.h */
-
-#include "stdefs.h"
-
-/*
- * LpFilter() - Calculates the filter coeffs for a Kaiser-windowed low-pass
- * filter with a given roll-off frequency. These coeffs
- * are stored into a array of doubles.
- * writeFilter() - Writes a filter to a file.
- * makeFilter() - Calls LpFilter() to create a filter, then scales the double
- * coeffs into an array of half words.
- * readFilter() - Reads a filter from a file.
- * FilterUp() - Applies a filter to a given sample when up-converting.
- * FilterUD() - Applies a filter to a given sample when up- or down-
- * converting.
- * initZerox() - Initialization routine for the zerox() function. Must
- * be called before zerox() is called. This routine loads
- * the correct filter so zerox() can use it.
- * zerox() - Given a pointer into a sample, finds a zero-crossing on the
- * interval [pointer-1:pointer+2] by iteration.
- * Query() - Ask the user for a yes/no question with prompt, default,
- * and optional help.
- * GetUShort() - Ask the user for a unsigned short with prompt, default,
- * and optional help.
- * GetDouble() - Ask the user for a double with prompt, default, and
- * optional help.
- * GetString() - Ask the user for a string with prompt, default, and
- * optional help.
- */
-
-void LpFilter(double c[], int N, double frq, double Beta, int Num);
-/*
- * reference: "Digital Filters, 2nd edition"
- * R.W. Hamming, pp. 178-179
- *
- * LpFilter() computes the coeffs of a Kaiser-windowed low pass filter with
- * the following characteristics:
- *
- * c[] = array in which to store computed coeffs
- * frq = roll-off frequency of filter
- * N = Half the window length in number of coeffs
- * Beta = parameter of Kaiser window
- * Num = number of coeffs before 1/frq
- *
- * Beta trades the rejection of the lowpass filter against the transition
- * width from passband to stopband. Larger Beta means a slower
- * transition and greater stopband rejection. See Rabiner and Gold
- * (Theory and Application of DSP) under Kaiser windows for more about
- * Beta. The following table from Rabiner and Gold gives some feel
- * for the effect of Beta:
- *
- * All ripples in dB, width of transition band = D*N where N = window length
- *
- * BETA D PB RIP SB RIP
- * 2.120 1.50 +-0.27 -30
- * 3.384 2.23 0.0864 -40
- * 4.538 2.93 0.0274 -50
- * 5.658 3.62 0.00868 -60
- * 6.764 4.32 0.00275 -70
- * 7.865 5.0 0.000868 -80
- * 8.960 5.7 0.000275 -90
- * 10.056 6.4 0.000087 -100
- */
-
-int writeFilter(HWORD Imp[], HWORD ImpD[], UHWORD LpScl, UHWORD Nmult, UHWORD Nwing);
-/*
- * Write a filter to a file
- * Filter file format:
- * file name: "F" Nmult "T" Nhc ".filter"
- * 1st line: the string "ScaleFactor" followed by its value.
- * 2nd line: the string "Length" followed by Nwing's value.
- * 3rd line: the string "Coeffs:" on a separate line.
- * following lines: Nwing number of 16-bit impulse response values
- * in the right wing of the impulse response (the Imp[] array).
- * (Nwing is equal to Npc*(Nmult+1)/2+1, where Npc is defined in the
- * file "resample.h".) Each coefficient is on a separate line.
- * next line: the string "Differences:" on a separate line.
- * following lines: Nwing number of 16-bit impulse-response
- * successive differences: ImpD[i] = Imp[i+1] - Imp[i].
- * ERROR codes:
- * 0 - no error
- * 1 - could not open file
- */
-
-int makeFilter(HWORD Imp[], HWORD ImpD[], UHWORD *LpScl, UHWORD Nwing,
- double Froll, double Beta);
-/*
- * makeFilter
- * ERROR return codes:
- * 0 - no error
- * 1 - Nwing too large (Nwing is > MAXNWING)
- * 2 - Froll is not in interval [0:1)
- * 3 - Beta is < 1.0
- * 4 - LpScl will not fit in 16-bits
- */
-
-int readFilter(char *filterFile,
- HWORD **ImpP, HWORD **ImpDP, UHWORD *LpScl,
- UHWORD *Nmult, UHWORD *Nwing);
-/*
- * Read-in a filter
- * Filter file format:
- * Default file name: "F" Nmult "T" Nhc ".filter"
- * 1st line: the string "ScaleFactor" followed by its value.
- * 2nd line: the string "Length" followed by Nwing's value.
- * 3rd line: the string "Coeffs:" on separate line.
- * Nwing number of 16-bit impulse response values in the right
- * wing of the impulse response. (Length=Npc*(Nmult+1)/2+1,
- * where originally Npc=2^9, and Nmult=13.) Each on separate line.
- * The string "Differences:" on separate line.
- * Nwing number of 16-bit impulse-response successive differences:
- * ImpDiff[i] = Imp[i+1] - Imp[i].
- *
- * ERROR return codes:
- * 0 - no error
- * 1 - file not found
- * 2 - invalid ScaleFactor in file
- * 3 - invalid Length in file
- */
-
-WORD FilterUp(HWORD Imp[], HWORD ImpD[], UHWORD Nwing, BOOL Interp,
- HWORD *Xp, HWORD Inc, HWORD Ph);
-
-WORD FilterUD(HWORD Imp[], HWORD ImpD[], UHWORD Nwing, BOOL Interp,
- HWORD *Xp, HWORD Ph, HWORD Inc, UHWORD dhb);
-
-int initZerox(UHWORD tempNmult);
-/*
- * initZerox
- * ERROR return values:
- * 0 - no error
- * 1 - Nmult is even (should be odd)
- * 2 - filter file not found
- * 3 - invalid ScaleFactor in input file
- * 4 - invalid Length in file
- */
-
-/*
- * zerox
- * Given a pointer into a sound sample, this function uses a low-pass
- * filter to estimate the x coordinate of the zero-crossing which must ocurr
- * between Data[0] and Data[1]. This value is returned as the value of the
- * function. A return value of -100 indicates there was no zero-crossing in
- * the x interval [-1,2]. Factor is the resampling factor: Rate(out) /
- * Rate(in). Nmult (which determines which filter is used) is passed the
- * zerox's initialization routine: initZerox(Nmult)
- */
-double zerox(HWORD *Data, double Factor);
-
-BOOL Query(char *prompt, BOOL deflt, char *help);
-
-unsigned short GetUShort(char *title, unsigned short deflt, char *help);
-
-double GetDouble(char *title, double deflt, char *help);
-
-char *GetString(char *prompt, char *deflt, char *help);
-
-#define GetUHWORD(x,y,z) GetUShort(x,y,z)
-
diff --git a/third_party/resample/src/largefilter.h b/third_party/resample/src/largefilter.h
deleted file mode 100644
index 7a86dd40..00000000
--- a/third_party/resample/src/largefilter.h
+++ /dev/null
@@ -1,16411 +0,0 @@
-/* Included by resamplesubs.c */
-
-/*
-
- USAGE: resample -expensiveFilter ...
-
-The -expensiveFilter option (-e) for resample selects the 'expensive'
-preloaded resampling filter. The default filter requires an
-oversampling factor of around 20% to avoid aliasing. The expensive
-filter is five times more computationally expensive and requires only
-about a 5-10% oversampling factor. Both filters have comparable
-stop-band attenuations (approximately 80 dB). If both options -f and
--e are present, the last one on the command line takes effect. The
-expensive filter is not yet documented because its cut-off frequency
-should be retuned slightly for optimal performance. Also, we plan to
-compute truly optimized resampling filters sometime in the future. In
-the meantime, the default filter is fast, well tuned, and works very
-well for its level of computational expense.
-
-*/
-
-#define LARGE_FILTER_NMULT ((HWORD)65)
-#define LARGE_FILTER_SCALE 14746 /* Unity-gain scale factor */
-#define LARGE_FILTER_NWING 8192 /* Filter table length */
-static HWORD LARGE_FILTER_IMP[] /* Impulse response */ = {
-32767,
-32766,
-32764,
-32761,
-32756,
-32750,
-32743,
-32734,
-32724,
-32713,
-32700,
-32686,
-32671,
-32654,
-32636,
-32617,
-32596,
-32574,
-32551,
-32526,
-32500,
-32473,
-32445,
-32415,
-32383,
-32351,
-32317,
-32282,
-32246,
-32208,
-32169,
-32129,
-32087,
-32044,
-32000,
-31955,
-31908,
-31860,
-31811,
-31760,
-31708,
-31655,
-31601,
-31545,
-31489,
-31431,
-31371,
-31311,
-31249,
-31186,
-31122,
-31056,
-30990,
-30922,
-30853,
-30783,
-30711,
-30639,
-30565,
-30490,
-30414,
-30337,
-30258,
-30179,
-30098,
-30016,
-29933,
-29849,
-29764,
-29677,
-29590,
-29501,
-29411,
-29321,
-29229,
-29136,
-29042,
-28947,
-28851,
-28753,
-28655,
-28556,
-28456,
-28354,
-28252,
-28149,
-28044,
-27939,
-27833,
-27725,
-27617,
-27508,
-27398,
-27287,
-27175,
-27062,
-26948,
-26833,
-26717,
-26601,
-26483,
-26365,
-26246,
-26125,
-26005,
-25883,
-25760,
-25637,
-25512,
-25387,
-25261,
-25135,
-25007,
-24879,
-24750,
-24620,
-24490,
-24358,
-24226,
-24094,
-23960,
-23826,
-23691,
-23556,
-23420,
-23283,
-23146,
-23008,
-22869,
-22730,
-22590,
-22449,
-22308,
-22166,
-22024,
-21881,
-21738,
-21594,
-21449,
-21304,
-21159,
-21013,
-20866,
-20719,
-20572,
-20424,
-20275,
-20127,
-19977,
-19828,
-19678,
-19527,
-19376,
-19225,
-19073,
-18921,
-18769,
-18616,
-18463,
-18310,
-18157,
-18003,
-17849,
-17694,
-17539,
-17384,
-17229,
-17074,
-16918,
-16762,
-16606,
-16450,
-16294,
-16137,
-15980,
-15823,
-15666,
-15509,
-15352,
-15195,
-15037,
-14880,
-14722,
-14564,
-14407,
-14249,
-14091,
-13933,
-13775,
-13618,
-13460,
-13302,
-13144,
-12987,
-12829,
-12671,
-12514,
-12356,
-12199,
-12042,
-11885,
-11728,
-11571,
-11414,
-11257,
-11101,
-10945,
-10789,
-10633,
-10477,
-10322,
-10167,
-10012,
-9857,
-9702,
-9548,
-9394,
-9241,
-9087,
-8934,
-8781,
-8629,
-8477,
-8325,
-8174,
-8023,
-7872,
-7722,
-7572,
-7422,
-7273,
-7124,
-6976,
-6828,
-6681,
-6534,
-6387,
-6241,
-6096,
-5951,
-5806,
-5662,
-5518,
-5375,
-5233,
-5091,
-4949,
-4808,
-4668,
-4528,
-4389,
-4250,
-4112,
-3975,
-3838,
-3702,
-3566,
-3431,
-3297,
-3163,
-3030,
-2898,
-2766,
-2635,
-2505,
-2375,
-2246,
-2118,
-1990,
-1864,
-1738,
-1612,
-1487,
-1364,
-1240,
-1118,
-996,
-875,
-755,
-636,
-517,
-400,
-283,
-166,
-51,
--63,
--176,
--289,
--401,
--513,
--623,
--733,
--841,
--949,
--1056,
--1162,
--1268,
--1372,
--1476,
--1578,
--1680,
--1781,
--1881,
--1980,
--2078,
--2176,
--2272,
--2367,
--2462,
--2556,
--2648,
--2740,
--2831,
--2921,
--3010,
--3098,
--3185,
--3271,
--3356,
--3441,
--3524,
--3606,
--3688,
--3768,
--3848,
--3926,
--4004,
--4080,
--4156,
--4231,
--4304,
--4377,
--4449,
--4519,
--4589,
--4658,
--4726,
--4792,
--4858,
--4923,
--4987,
--5050,
--5111,
--5172,
--5232,
--5291,
--5349,
--5406,
--5462,
--5517,
--5571,
--5624,
--5675,
--5726,
--5776,
--5825,
--5873,
--5920,
--5966,
--6011,
--6055,
--6098,
--6140,
--6181,
--6222,
--6261,
--6299,
--6336,
--6372,
--6407,
--6441,
--6475,
--6507,
--6538,
--6569,
--6598,
--6626,
--6654,
--6680,
--6706,
--6730,
--6754,
--6777,
--6798,
--6819,
--6839,
--6858,
--6876,
--6893,
--6909,
--6924,
--6938,
--6951,
--6964,
--6975,
--6986,
--6995,
--7004,
--7012,
--7019,
--7025,
--7030,
--7035,
--7038,
--7040,
--7042,
--7043,
--7043,
--7042,
--7040,
--7038,
--7034,
--7030,
--7025,
--7019,
--7012,
--7004,
--6996,
--6986,
--6976,
--6965,
--6954,
--6941,
--6928,
--6914,
--6899,
--6884,
--6867,
--6850,
--6832,
--6814,
--6794,
--6774,
--6753,
--6732,
--6709,
--6686,
--6663,
--6638,
--6613,
--6587,
--6561,
--6534,
--6506,
--6478,
--6448,
--6419,
--6388,
--6357,
--6325,
--6293,
--6260,
--6226,
--6192,
--6157,
--6122,
--6086,
--6049,
--6012,
--5975,
--5936,
--5897,
--5858,
--5818,
--5778,
--5737,
--5695,
--5653,
--5611,
--5568,
--5524,
--5480,
--5436,
--5391,
--5345,
--5300,
--5253,
--5207,
--5159,
--5112,
--5064,
--5015,
--4966,
--4917,
--4868,
--4818,
--4767,
--4716,
--4665,
--4614,
--4562,
--4510,
--4457,
--4404,
--4351,
--4298,
--4244,
--4190,
--4136,
--4081,
--4026,
--3971,
--3916,
--3860,
--3804,
--3748,
--3692,
--3635,
--3578,
--3521,
--3464,
--3406,
--3349,
--3291,
--3233,
--3175,
--3117,
--3058,
--3000,
--2941,
--2882,
--2823,
--2764,
--2705,
--2646,
--2587,
--2527,
--2468,
--2408,
--2349,
--2289,
--2229,
--2169,
--2110,
--2050,
--1990,
--1930,
--1870,
--1811,
--1751,
--1691,
--1631,
--1571,
--1512,
--1452,
--1392,
--1333,
--1273,
--1214,
--1154,
--1095,
--1036,
--977,
--918,
--859,
--800,
--741,
--683,
--624,
--566,
--508,
--450,
--392,
--335,
--277,
--220,
--163,
--106,
--49,
-6,
-63,
-119,
-175,
-230,
-286,
-341,
-396,
-450,
-505,
-559,
-613,
-667,
-720,
-773,
-826,
-878,
-931,
-983,
-1034,
-1086,
-1137,
-1187,
-1238,
-1288,
-1337,
-1387,
-1436,
-1484,
-1533,
-1581,
-1628,
-1675,
-1722,
-1769,
-1815,
-1861,
-1906,
-1951,
-1996,
-2040,
-2084,
-2127,
-2170,
-2212,
-2255,
-2296,
-2338,
-2378,
-2419,
-2459,
-2498,
-2538,
-2576,
-2615,
-2652,
-2690,
-2727,
-2763,
-2799,
-2834,
-2870,
-2904,
-2938,
-2972,
-3005,
-3038,
-3070,
-3102,
-3133,
-3164,
-3194,
-3224,
-3253,
-3282,
-3310,
-3338,
-3365,
-3392,
-3418,
-3444,
-3469,
-3494,
-3518,
-3542,
-3566,
-3588,
-3611,
-3632,
-3653,
-3674,
-3694,
-3714,
-3733,
-3752,
-3770,
-3788,
-3805,
-3821,
-3837,
-3853,
-3868,
-3882,
-3896,
-3910,
-3923,
-3935,
-3947,
-3958,
-3969,
-3980,
-3989,
-3999,
-4007,
-4016,
-4023,
-4031,
-4037,
-4044,
-4049,
-4054,
-4059,
-4063,
-4067,
-4070,
-4073,
-4075,
-4076,
-4077,
-4078,
-4078,
-4078,
-4077,
-4076,
-4074,
-4071,
-4068,
-4065,
-4061,
-4057,
-4052,
-4047,
-4041,
-4035,
-4028,
-4021,
-4013,
-4005,
-3997,
-3988,
-3978,
-3968,
-3958,
-3947,
-3936,
-3924,
-3912,
-3899,
-3886,
-3872,
-3858,
-3844,
-3829,
-3814,
-3798,
-3782,
-3766,
-3749,
-3731,
-3714,
-3696,
-3677,
-3658,
-3639,
-3619,
-3599,
-3578,
-3558,
-3536,
-3515,
-3493,
-3470,
-3448,
-3425,
-3401,
-3378,
-3353,
-3329,
-3304,
-3279,
-3254,
-3228,
-3202,
-3175,
-3149,
-3122,
-3094,
-3067,
-3039,
-3011,
-2982,
-2953,
-2924,
-2895,
-2865,
-2835,
-2805,
-2775,
-2744,
-2713,
-2682,
-2651,
-2619,
-2587,
-2555,
-2523,
-2490,
-2457,
-2424,
-2391,
-2358,
-2324,
-2290,
-2256,
-2222,
-2188,
-2153,
-2119,
-2084,
-2049,
-2014,
-1978,
-1943,
-1907,
-1872,
-1836,
-1800,
-1764,
-1727,
-1691,
-1655,
-1618,
-1581,
-1545,
-1508,
-1471,
-1434,
-1397,
-1360,
-1322,
-1285,
-1248,
-1210,
-1173,
-1135,
-1098,
-1060,
-1023,
-985,
-947,
-910,
-872,
-834,
-797,
-759,
-721,
-684,
-646,
-608,
-571,
-533,
-496,
-458,
-421,
-383,
-346,
-308,
-271,
-234,
-197,
-160,
-123,
-86,
-49,
-12,
--23,
--60,
--96,
--133,
--169,
--205,
--241,
--277,
--313,
--348,
--384,
--419,
--455,
--490,
--525,
--559,
--594,
--628,
--663,
--697,
--731,
--765,
--798,
--832,
--865,
--898,
--931,
--963,
--996,
--1028,
--1060,
--1092,
--1124,
--1155,
--1186,
--1217,
--1248,
--1279,
--1309,
--1339,
--1369,
--1398,
--1428,
--1457,
--1486,
--1514,
--1542,
--1571,
--1598,
--1626,
--1653,
--1680,
--1707,
--1733,
--1760,
--1785,
--1811,
--1836,
--1862,
--1886,
--1911,
--1935,
--1959,
--1982,
--2006,
--2029,
--2051,
--2074,
--2096,
--2118,
--2139,
--2160,
--2181,
--2202,
--2222,
--2242,
--2261,
--2280,
--2299,
--2318,
--2336,
--2354,
--2372,
--2389,
--2406,
--2423,
--2439,
--2455,
--2470,
--2486,
--2500,
--2515,
--2529,
--2543,
--2557,
--2570,
--2583,
--2595,
--2607,
--2619,
--2631,
--2642,
--2652,
--2663,
--2673,
--2683,
--2692,
--2701,
--2710,
--2718,
--2726,
--2734,
--2741,
--2748,
--2754,
--2760,
--2766,
--2772,
--2777,
--2782,
--2786,
--2790,
--2794,
--2797,
--2800,
--2803,
--2805,
--2807,
--2809,
--2810,
--2811,
--2812,
--2812,
--2812,
--2812,
--2811,
--2810,
--2808,
--2807,
--2804,
--2802,
--2799,
--2796,
--2792,
--2789,
--2785,
--2780,
--2775,
--2770,
--2765,
--2759,
--2753,
--2746,
--2740,
--2732,
--2725,
--2717,
--2709,
--2701,
--2692,
--2683,
--2674,
--2664,
--2655,
--2644,
--2634,
--2623,
--2612,
--2601,
--2589,
--2577,
--2565,
--2552,
--2539,
--2526,
--2513,
--2499,
--2485,
--2471,
--2457,
--2442,
--2427,
--2412,
--2396,
--2380,
--2364,
--2348,
--2331,
--2315,
--2297,
--2280,
--2263,
--2245,
--2227,
--2209,
--2190,
--2171,
--2152,
--2133,
--2114,
--2094,
--2075,
--2055,
--2034,
--2014,
--1993,
--1972,
--1951,
--1930,
--1909,
--1887,
--1865,
--1843,
--1821,
--1799,
--1776,
--1754,
--1731,
--1708,
--1685,
--1662,
--1638,
--1614,
--1591,
--1567,
--1543,
--1519,
--1494,
--1470,
--1445,
--1421,
--1396,
--1371,
--1346,
--1321,
--1295,
--1270,
--1244,
--1219,
--1193,
--1167,
--1142,
--1116,
--1090,
--1064,
--1037,
--1011,
--985,
--958,
--932,
--905,
--879,
--852,
--826,
--799,
--772,
--745,
--719,
--692,
--665,
--638,
--611,
--584,
--557,
--530,
--503,
--476,
--449,
--422,
--395,
--368,
--341,
--314,
--287,
--260,
--234,
--207,
--180,
--153,
--126,
--100,
--73,
--46,
--20,
-6,
-32,
-59,
-85,
-111,
-138,
-164,
-190,
-216,
-242,
-268,
-294,
-319,
-345,
-370,
-396,
-421,
-446,
-471,
-496,
-521,
-546,
-571,
-595,
-619,
-644,
-668,
-692,
-716,
-739,
-763,
-787,
-810,
-833,
-856,
-879,
-902,
-924,
-947,
-969,
-991,
-1013,
-1035,
-1056,
-1078,
-1099,
-1120,
-1141,
-1162,
-1182,
-1202,
-1223,
-1243,
-1262,
-1282,
-1301,
-1320,
-1339,
-1358,
-1377,
-1395,
-1413,
-1431,
-1449,
-1467,
-1484,
-1501,
-1518,
-1535,
-1551,
-1567,
-1583,
-1599,
-1615,
-1630,
-1645,
-1660,
-1674,
-1689,
-1703,
-1717,
-1731,
-1744,
-1757,
-1770,
-1783,
-1795,
-1808,
-1820,
-1831,
-1843,
-1854,
-1865,
-1876,
-1886,
-1897,
-1907,
-1916,
-1926,
-1935,
-1944,
-1953,
-1961,
-1970,
-1978,
-1985,
-1993,
-2000,
-2007,
-2014,
-2020,
-2026,
-2032,
-2038,
-2043,
-2048,
-2053,
-2058,
-2062,
-2066,
-2070,
-2073,
-2077,
-2080,
-2083,
-2085,
-2087,
-2089,
-2091,
-2093,
-2094,
-2095,
-2095,
-2096,
-2096,
-2096,
-2096,
-2095,
-2094,
-2093,
-2092,
-2090,
-2088,
-2086,
-2084,
-2081,
-2079,
-2075,
-2072,
-2069,
-2065,
-2061,
-2056,
-2052,
-2047,
-2042,
-2037,
-2031,
-2025,
-2019,
-2013,
-2006,
-2000,
-1993,
-1986,
-1978,
-1971,
-1963,
-1955,
-1946,
-1938,
-1929,
-1920,
-1911,
-1901,
-1892,
-1882,
-1872,
-1862,
-1851,
-1841,
-1830,
-1819,
-1807,
-1796,
-1784,
-1772,
-1760,
-1748,
-1735,
-1723,
-1710,
-1697,
-1684,
-1670,
-1657,
-1643,
-1629,
-1615,
-1601,
-1586,
-1572,
-1557,
-1542,
-1527,
-1512,
-1496,
-1481,
-1465,
-1449,
-1433,
-1417,
-1401,
-1384,
-1368,
-1351,
-1334,
-1317,
-1300,
-1283,
-1265,
-1248,
-1230,
-1212,
-1195,
-1177,
-1159,
-1140,
-1122,
-1104,
-1085,
-1067,
-1048,
-1029,
-1010,
-991,
-972,
-953,
-934,
-915,
-895,
-876,
-856,
-837,
-817,
-797,
-777,
-758,
-738,
-718,
-698,
-678,
-658,
-637,
-617,
-597,
-577,
-556,
-536,
-516,
-495,
-475,
-454,
-434,
-414,
-393,
-373,
-352,
-332,
-311,
-291,
-270,
-250,
-229,
-208,
-188,
-168,
-147,
-127,
-106,
-86,
-65,
-45,
-25,
-5,
--15,
--35,
--55,
--75,
--95,
--115,
--135,
--155,
--175,
--195,
--215,
--234,
--254,
--274,
--293,
--313,
--332,
--351,
--370,
--390,
--409,
--428,
--446,
--465,
--484,
--503,
--521,
--539,
--558,
--576,
--594,
--612,
--630,
--648,
--666,
--683,
--701,
--718,
--735,
--752,
--769,
--786,
--803,
--819,
--836,
--852,
--868,
--885,
--900,
--916,
--932,
--947,
--963,
--978,
--993,
--1008,
--1023,
--1038,
--1052,
--1066,
--1081,
--1095,
--1108,
--1122,
--1136,
--1149,
--1162,
--1175,
--1188,
--1201,
--1214,
--1226,
--1238,
--1250,
--1262,
--1274,
--1285,
--1297,
--1308,
--1319,
--1330,
--1340,
--1351,
--1361,
--1371,
--1381,
--1390,
--1400,
--1409,
--1418,
--1427,
--1436,
--1445,
--1453,
--1461,
--1469,
--1477,
--1485,
--1492,
--1499,
--1506,
--1513,
--1520,
--1526,
--1532,
--1538,
--1544,
--1550,
--1555,
--1560,
--1566,
--1570,
--1575,
--1579,
--1584,
--1588,
--1592,
--1595,
--1599,
--1602,
--1605,
--1608,
--1610,
--1613,
--1615,
--1617,
--1619,
--1620,
--1622,
--1623,
--1624,
--1625,
--1625,
--1626,
--1626,
--1626,
--1626,
--1625,
--1625,
--1624,
--1623,
--1622,
--1621,
--1619,
--1617,
--1615,
--1613,
--1611,
--1608,
--1605,
--1603,
--1599,
--1596,
--1593,
--1589,
--1585,
--1581,
--1577,
--1572,
--1568,
--1563,
--1558,
--1553,
--1547,
--1542,
--1536,
--1530,
--1524,
--1518,
--1511,
--1505,
--1498,
--1491,
--1484,
--1477,
--1469,
--1462,
--1454,
--1446,
--1438,
--1430,
--1421,
--1413,
--1404,
--1395,
--1386,
--1377,
--1367,
--1358,
--1348,
--1338,
--1328,
--1318,
--1308,
--1297,
--1287,
--1276,
--1265,
--1254,
--1243,
--1232,
--1221,
--1209,
--1198,
--1186,
--1174,
--1162,
--1150,
--1138,
--1125,
--1113,
--1100,
--1087,
--1075,
--1062,
--1049,
--1035,
--1022,
--1009,
--995,
--982,
--968,
--954,
--941,
--927,
--913,
--898,
--884,
--870,
--856,
--841,
--827,
--812,
--797,
--783,
--768,
--753,
--738,
--723,
--708,
--692,
--677,
--662,
--647,
--631,
--616,
--600,
--585,
--569,
--554,
--538,
--522,
--506,
--491,
--475,
--459,
--443,
--427,
--411,
--395,
--379,
--363,
--347,
--331,
--315,
--299,
--283,
--267,
--251,
--235,
--218,
--202,
--186,
--170,
--154,
--138,
--122,
--106,
--90,
--74,
--58,
--42,
--26,
--10,
-5,
-21,
-37,
-53,
-69,
-85,
-100,
-116,
-132,
-147,
-163,
-179,
-194,
-209,
-225,
-240,
-256,
-271,
-286,
-301,
-316,
-331,
-346,
-361,
-376,
-391,
-405,
-420,
-434,
-449,
-463,
-477,
-492,
-506,
-520,
-534,
-548,
-561,
-575,
-589,
-602,
-615,
-629,
-642,
-655,
-668,
-681,
-694,
-706,
-719,
-731,
-744,
-756,
-768,
-780,
-792,
-804,
-816,
-827,
-839,
-850,
-861,
-872,
-883,
-894,
-905,
-915,
-926,
-936,
-946,
-956,
-966,
-976,
-986,
-995,
-1005,
-1014,
-1023,
-1032,
-1041,
-1049,
-1058,
-1066,
-1075,
-1083,
-1091,
-1099,
-1106,
-1114,
-1121,
-1128,
-1135,
-1142,
-1149,
-1156,
-1162,
-1169,
-1175,
-1181,
-1187,
-1192,
-1198,
-1203,
-1208,
-1214,
-1218,
-1223,
-1228,
-1232,
-1237,
-1241,
-1245,
-1249,
-1252,
-1256,
-1259,
-1262,
-1265,
-1268,
-1271,
-1273,
-1276,
-1278,
-1280,
-1282,
-1284,
-1285,
-1287,
-1288,
-1289,
-1290,
-1291,
-1292,
-1292,
-1292,
-1293,
-1293,
-1292,
-1292,
-1292,
-1291,
-1290,
-1289,
-1288,
-1287,
-1285,
-1284,
-1282,
-1280,
-1278,
-1276,
-1274,
-1271,
-1269,
-1266,
-1263,
-1260,
-1257,
-1253,
-1250,
-1246,
-1242,
-1238,
-1234,
-1230,
-1225,
-1221,
-1216,
-1211,
-1206,
-1201,
-1196,
-1190,
-1185,
-1179,
-1173,
-1167,
-1161,
-1155,
-1149,
-1142,
-1136,
-1129,
-1122,
-1115,
-1108,
-1101,
-1094,
-1086,
-1078,
-1071,
-1063,
-1055,
-1047,
-1039,
-1030,
-1022,
-1013,
-1005,
-996,
-987,
-978,
-969,
-960,
-951,
-941,
-932,
-922,
-913,
-903,
-893,
-883,
-873,
-863,
-853,
-842,
-832,
-821,
-811,
-800,
-789,
-778,
-768,
-757,
-746,
-734,
-723,
-712,
-701,
-689,
-678,
-666,
-654,
-643,
-631,
-619,
-607,
-596,
-584,
-572,
-559,
-547,
-535,
-523,
-511,
-498,
-486,
-474,
-461,
-449,
-436,
-424,
-411,
-399,
-386,
-373,
-361,
-348,
-335,
-322,
-310,
-297,
-284,
-271,
-258,
-246,
-233,
-220,
-207,
-194,
-181,
-168,
-156,
-143,
-130,
-117,
-104,
-91,
-78,
-65,
-53,
-40,
-27,
-14,
-1,
--10,
--23,
--36,
--48,
--61,
--74,
--86,
--99,
--111,
--124,
--136,
--149,
--161,
--174,
--186,
--198,
--211,
--223,
--235,
--247,
--259,
--271,
--283,
--295,
--307,
--319,
--330,
--342,
--354,
--365,
--377,
--388,
--399,
--411,
--422,
--433,
--444,
--455,
--466,
--477,
--488,
--499,
--509,
--520,
--530,
--541,
--551,
--561,
--571,
--581,
--591,
--601,
--611,
--621,
--631,
--640,
--650,
--659,
--668,
--677,
--686,
--695,
--704,
--713,
--722,
--730,
--739,
--747,
--755,
--763,
--771,
--779,
--787,
--795,
--803,
--810,
--817,
--825,
--832,
--839,
--846,
--853,
--859,
--866,
--873,
--879,
--885,
--891,
--897,
--903,
--909,
--915,
--920,
--926,
--931,
--936,
--941,
--946,
--951,
--955,
--960,
--964,
--969,
--973,
--977,
--981,
--985,
--988,
--992,
--995,
--999,
--1002,
--1005,
--1008,
--1011,
--1013,
--1016,
--1018,
--1020,
--1023,
--1025,
--1026,
--1028,
--1030,
--1031,
--1033,
--1034,
--1035,
--1036,
--1037,
--1038,
--1038,
--1039,
--1039,
--1039,
--1039,
--1039,
--1039,
--1039,
--1038,
--1038,
--1037,
--1036,
--1036,
--1034,
--1033,
--1032,
--1031,
--1029,
--1027,
--1026,
--1024,
--1022,
--1019,
--1017,
--1015,
--1012,
--1010,
--1007,
--1004,
--1001,
--998,
--995,
--991,
--988,
--984,
--980,
--977,
--973,
--969,
--965,
--960,
--956,
--951,
--947,
--942,
--937,
--932,
--927,
--922,
--917,
--912,
--906,
--901,
--895,
--889,
--883,
--877,
--871,
--865,
--859,
--853,
--846,
--840,
--833,
--826,
--819,
--812,
--805,
--798,
--791,
--784,
--777,
--769,
--762,
--754,
--746,
--739,
--731,
--723,
--715,
--707,
--699,
--691,
--682,
--674,
--665,
--657,
--648,
--640,
--631,
--622,
--614,
--605,
--596,
--587,
--578,
--569,
--559,
--550,
--541,
--532,
--522,
--513,
--503,
--494,
--484,
--474,
--465,
--455,
--445,
--436,
--426,
--416,
--406,
--396,
--386,
--376,
--366,
--356,
--346,
--336,
--325,
--315,
--305,
--295,
--285,
--274,
--264,
--254,
--243,
--233,
--223,
--212,
--202,
--192,
--181,
--171,
--161,
--150,
--140,
--129,
--119,
--108,
--98,
--88,
--77,
--67,
--57,
--46,
--36,
--25,
--15,
--5,
-5,
-15,
-25,
-35,
-46,
-56,
-66,
-76,
-86,
-97,
-107,
-117,
-127,
-137,
-147,
-157,
-167,
-177,
-186,
-196,
-206,
-216,
-225,
-235,
-245,
-254,
-264,
-273,
-283,
-292,
-301,
-311,
-320,
-329,
-338,
-347,
-356,
-365,
-374,
-383,
-392,
-400,
-409,
-418,
-426,
-435,
-443,
-451,
-460,
-468,
-476,
-484,
-492,
-500,
-508,
-515,
-523,
-531,
-538,
-546,
-553,
-560,
-568,
-575,
-582,
-589,
-596,
-602,
-609,
-616,
-622,
-629,
-635,
-642,
-648,
-654,
-660,
-666,
-672,
-678,
-683,
-689,
-694,
-700,
-705,
-710,
-715,
-720,
-725,
-730,
-735,
-739,
-744,
-748,
-753,
-757,
-761,
-765,
-769,
-773,
-777,
-780,
-784,
-787,
-791,
-794,
-797,
-800,
-803,
-806,
-809,
-811,
-814,
-816,
-818,
-821,
-823,
-825,
-827,
-828,
-830,
-832,
-833,
-835,
-836,
-837,
-838,
-839,
-840,
-841,
-841,
-842,
-842,
-843,
-843,
-843,
-843,
-843,
-843,
-843,
-842,
-842,
-841,
-840,
-840,
-839,
-838,
-837,
-835,
-834,
-833,
-831,
-830,
-828,
-826,
-824,
-822,
-820,
-818,
-816,
-813,
-811,
-808,
-806,
-803,
-800,
-797,
-794,
-791,
-788,
-784,
-781,
-777,
-774,
-770,
-766,
-763,
-759,
-755,
-750,
-746,
-742,
-738,
-733,
-729,
-724,
-719,
-714,
-710,
-705,
-700,
-694,
-689,
-684,
-679,
-673,
-668,
-662,
-657,
-651,
-645,
-639,
-633,
-627,
-621,
-615,
-609,
-603,
-596,
-590,
-584,
-577,
-571,
-564,
-557,
-551,
-544,
-537,
-530,
-523,
-516,
-509,
-502,
-495,
-487,
-480,
-473,
-465,
-458,
-450,
-443,
-435,
-428,
-420,
-413,
-405,
-397,
-389,
-381,
-374,
-366,
-358,
-350,
-342,
-334,
-326,
-318,
-310,
-301,
-293,
-285,
-277,
-269,
-260,
-252,
-244,
-236,
-227,
-219,
-211,
-202,
-194,
-185,
-177,
-169,
-160,
-152,
-143,
-135,
-126,
-118,
-110,
-101,
-93,
-84,
-76,
-67,
-59,
-50,
-42,
-34,
-25,
-17,
-8,
-0,
--7,
--16,
--24,
--32,
--41,
--49,
--57,
--66,
--74,
--82,
--90,
--98,
--106,
--115,
--123,
--131,
--139,
--147,
--155,
--163,
--171,
--179,
--186,
--194,
--202,
--210,
--217,
--225,
--233,
--240,
--248,
--255,
--263,
--270,
--278,
--285,
--292,
--299,
--307,
--314,
--321,
--328,
--335,
--342,
--349,
--356,
--362,
--369,
--376,
--382,
--389,
--396,
--402,
--408,
--415,
--421,
--427,
--433,
--439,
--445,
--451,
--457,
--463,
--469,
--475,
--480,
--486,
--491,
--497,
--502,
--507,
--513,
--518,
--523,
--528,
--533,
--538,
--542,
--547,
--552,
--556,
--561,
--565,
--570,
--574,
--578,
--582,
--586,
--590,
--594,
--598,
--602,
--605,
--609,
--612,
--616,
--619,
--622,
--625,
--629,
--632,
--634,
--637,
--640,
--643,
--645,
--648,
--650,
--653,
--655,
--657,
--659,
--661,
--663,
--665,
--667,
--668,
--670,
--671,
--673,
--674,
--675,
--676,
--678,
--679,
--679,
--680,
--681,
--682,
--682,
--683,
--683,
--683,
--684,
--684,
--684,
--684,
--684,
--684,
--683,
--683,
--682,
--682,
--681,
--681,
--680,
--679,
--678,
--677,
--676,
--675,
--674,
--672,
--671,
--669,
--668,
--666,
--664,
--662,
--661,
--659,
--657,
--654,
--652,
--650,
--648,
--645,
--643,
--640,
--637,
--635,
--632,
--629,
--626,
--623,
--620,
--617,
--613,
--610,
--607,
--603,
--600,
--596,
--593,
--589,
--585,
--581,
--577,
--573,
--569,
--565,
--561,
--557,
--552,
--548,
--544,
--539,
--534,
--530,
--525,
--520,
--516,
--511,
--506,
--501,
--496,
--491,
--486,
--481,
--475,
--470,
--465,
--460,
--454,
--449,
--443,
--438,
--432,
--426,
--421,
--415,
--409,
--403,
--398,
--392,
--386,
--380,
--374,
--368,
--362,
--355,
--349,
--343,
--337,
--331,
--324,
--318,
--312,
--305,
--299,
--292,
--286,
--280,
--273,
--266,
--260,
--253,
--247,
--240,
--234,
--227,
--220,
--213,
--207,
--200,
--193,
--187,
--180,
--173,
--166,
--159,
--153,
--146,
--139,
--132,
--125,
--118,
--112,
--105,
--98,
--91,
--84,
--77,
--70,
--64,
--57,
--50,
--43,
--36,
--29,
--22,
--16,
--9,
--2,
-4,
-11,
-17,
-24,
-31,
-38,
-44,
-51,
-58,
-64,
-71,
-78,
-84,
-91,
-98,
-104,
-111,
-117,
-124,
-130,
-137,
-143,
-149,
-156,
-162,
-168,
-175,
-181,
-187,
-193,
-199,
-205,
-212,
-218,
-224,
-230,
-236,
-241,
-247,
-253,
-259,
-265,
-270,
-276,
-282,
-287,
-293,
-298,
-304,
-309,
-314,
-320,
-325,
-330,
-335,
-340,
-345,
-350,
-355,
-360,
-365,
-370,
-375,
-380,
-384,
-389,
-393,
-398,
-402,
-407,
-411,
-415,
-419,
-424,
-428,
-432,
-436,
-440,
-443,
-447,
-451,
-455,
-458,
-462,
-465,
-469,
-472,
-475,
-479,
-482,
-485,
-488,
-491,
-494,
-497,
-499,
-502,
-505,
-507,
-510,
-512,
-515,
-517,
-519,
-522,
-524,
-526,
-528,
-530,
-532,
-533,
-535,
-537,
-538,
-540,
-541,
-543,
-544,
-545,
-546,
-548,
-549,
-550,
-550,
-551,
-552,
-553,
-553,
-554,
-554,
-555,
-555,
-555,
-556,
-556,
-556,
-556,
-556,
-556,
-555,
-555,
-555,
-554,
-554,
-553,
-553,
-552,
-551,
-551,
-550,
-549,
-548,
-547,
-546,
-545,
-543,
-542,
-541,
-539,
-538,
-536,
-534,
-533,
-531,
-529,
-527,
-525,
-523,
-521,
-519,
-517,
-514,
-512,
-510,
-507,
-505,
-502,
-500,
-497,
-494,
-492,
-489,
-486,
-483,
-480,
-477,
-474,
-471,
-467,
-464,
-461,
-457,
-454,
-450,
-447,
-443,
-440,
-436,
-432,
-429,
-425,
-421,
-417,
-413,
-409,
-405,
-401,
-397,
-393,
-388,
-384,
-380,
-375,
-371,
-367,
-362,
-358,
-353,
-349,
-344,
-339,
-335,
-330,
-325,
-321,
-316,
-311,
-306,
-301,
-296,
-291,
-286,
-281,
-276,
-271,
-266,
-261,
-256,
-251,
-245,
-240,
-235,
-230,
-225,
-219,
-214,
-209,
-203,
-198,
-193,
-187,
-182,
-176,
-171,
-165,
-160,
-154,
-149,
-144,
-138,
-132,
-127,
-121,
-116,
-110,
-105,
-99,
-94,
-88,
-83,
-77,
-71,
-66,
-60,
-55,
-49,
-44,
-38,
-33,
-27,
-21,
-16,
-10,
-5,
-0,
--5,
--11,
--16,
--22,
--27,
--33,
--38,
--43,
--49,
--54,
--60,
--65,
--70,
--76,
--81,
--86,
--92,
--97,
--102,
--107,
--113,
--118,
--123,
--128,
--133,
--138,
--143,
--148,
--153,
--158,
--163,
--168,
--173,
--178,
--183,
--188,
--192,
--197,
--202,
--207,
--211,
--216,
--221,
--225,
--230,
--234,
--239,
--243,
--247,
--252,
--256,
--260,
--265,
--269,
--273,
--277,
--281,
--285,
--289,
--293,
--297,
--301,
--305,
--308,
--312,
--316,
--319,
--323,
--327,
--330,
--334,
--337,
--340,
--344,
--347,
--350,
--353,
--357,
--360,
--363,
--366,
--369,
--372,
--374,
--377,
--380,
--383,
--385,
--388,
--390,
--393,
--395,
--398,
--400,
--402,
--405,
--407,
--409,
--411,
--413,
--415,
--417,
--419,
--420,
--422,
--424,
--425,
--427,
--429,
--430,
--431,
--433,
--434,
--435,
--436,
--438,
--439,
--440,
--441,
--442,
--442,
--443,
--444,
--445,
--445,
--446,
--446,
--447,
--447,
--448,
--448,
--448,
--448,
--449,
--449,
--449,
--449,
--449,
--448,
--448,
--448,
--448,
--447,
--447,
--446,
--446,
--445,
--445,
--444,
--443,
--442,
--442,
--441,
--440,
--439,
--438,
--437,
--435,
--434,
--433,
--432,
--430,
--429,
--427,
--426,
--424,
--423,
--421,
--419,
--418,
--416,
--414,
--412,
--410,
--408,
--406,
--404,
--402,
--400,
--397,
--395,
--393,
--390,
--388,
--385,
--383,
--380,
--378,
--375,
--373,
--370,
--367,
--364,
--361,
--359,
--356,
--353,
--350,
--347,
--344,
--340,
--337,
--334,
--331,
--328,
--324,
--321,
--318,
--314,
--311,
--307,
--304,
--300,
--297,
--293,
--290,
--286,
--282,
--279,
--275,
--271,
--267,
--263,
--260,
--256,
--252,
--248,
--244,
--240,
--236,
--232,
--228,
--224,
--220,
--216,
--212,
--207,
--203,
--199,
--195,
--191,
--186,
--182,
--178,
--174,
--169,
--165,
--161,
--156,
--152,
--148,
--143,
--139,
--134,
--130,
--126,
--121,
--117,
--112,
--108,
--103,
--99,
--95,
--90,
--86,
--81,
--77,
--72,
--68,
--63,
--59,
--54,
--50,
--45,
--41,
--36,
--32,
--27,
--23,
--18,
--14,
--9,
--5,
-0,
-3,
-7,
-12,
-16,
-21,
-25,
-29,
-34,
-38,
-43,
-47,
-51,
-56,
-60,
-64,
-69,
-73,
-77,
-81,
-85,
-90,
-94,
-98,
-102,
-106,
-110,
-115,
-119,
-123,
-127,
-131,
-135,
-139,
-143,
-146,
-150,
-154,
-158,
-162,
-166,
-169,
-173,
-177,
-181,
-184,
-188,
-192,
-195,
-199,
-202,
-206,
-209,
-212,
-216,
-219,
-223,
-226,
-229,
-232,
-236,
-239,
-242,
-245,
-248,
-251,
-254,
-257,
-260,
-263,
-266,
-268,
-271,
-274,
-277,
-279,
-282,
-284,
-287,
-289,
-292,
-294,
-297,
-299,
-301,
-304,
-306,
-308,
-310,
-312,
-314,
-316,
-318,
-320,
-322,
-324,
-326,
-328,
-329,
-331,
-333,
-334,
-336,
-337,
-339,
-340,
-341,
-343,
-344,
-345,
-346,
-348,
-349,
-350,
-351,
-352,
-353,
-354,
-354,
-355,
-356,
-357,
-357,
-358,
-358,
-359,
-359,
-360,
-360,
-361,
-361,
-361,
-361,
-362,
-362,
-362,
-362,
-362,
-362,
-362,
-361,
-361,
-361,
-361,
-360,
-360,
-360,
-359,
-359,
-358,
-358,
-357,
-356,
-356,
-355,
-354,
-353,
-352,
-351,
-350,
-349,
-348,
-347,
-346,
-345,
-344,
-343,
-341,
-340,
-339,
-337,
-336,
-334,
-333,
-331,
-330,
-328,
-326,
-324,
-323,
-321,
-319,
-317,
-315,
-313,
-311,
-309,
-307,
-305,
-303,
-301,
-299,
-297,
-294,
-292,
-290,
-288,
-285,
-283,
-280,
-278,
-275,
-273,
-270,
-268,
-265,
-263,
-260,
-257,
-254,
-252,
-249,
-246,
-243,
-240,
-238,
-235,
-232,
-229,
-226,
-223,
-220,
-217,
-214,
-211,
-208,
-204,
-201,
-198,
-195,
-192,
-188,
-185,
-182,
-179,
-175,
-172,
-169,
-165,
-162,
-159,
-155,
-152,
-149,
-145,
-142,
-138,
-135,
-131,
-128,
-124,
-121,
-117,
-114,
-110,
-107,
-103,
-100,
-96,
-93,
-89,
-85,
-82,
-78,
-75,
-71,
-67,
-64,
-60,
-57,
-53,
-49,
-46,
-42,
-39,
-35,
-31,
-28,
-24,
-21,
-17,
-14,
-10,
-6,
-3,
-0,
--3,
--7,
--10,
--14,
--18,
--21,
--25,
--28,
--32,
--35,
--39,
--42,
--45,
--49,
--52,
--56,
--59,
--63,
--66,
--69,
--73,
--76,
--79,
--83,
--86,
--89,
--93,
--96,
--99,
--102,
--105,
--109,
--112,
--115,
--118,
--121,
--124,
--127,
--130,
--133,
--136,
--139,
--142,
--145,
--148,
--151,
--154,
--157,
--160,
--162,
--165,
--168,
--171,
--173,
--176,
--179,
--181,
--184,
--186,
--189,
--191,
--194,
--196,
--199,
--201,
--204,
--206,
--208,
--211,
--213,
--215,
--217,
--219,
--221,
--224,
--226,
--228,
--230,
--232,
--234,
--236,
--237,
--239,
--241,
--243,
--245,
--246,
--248,
--250,
--251,
--253,
--254,
--256,
--257,
--259,
--260,
--262,
--263,
--264,
--266,
--267,
--268,
--269,
--270,
--271,
--273,
--274,
--275,
--275,
--276,
--277,
--278,
--279,
--280,
--281,
--281,
--282,
--283,
--283,
--284,
--284,
--285,
--285,
--286,
--286,
--286,
--287,
--287,
--287,
--287,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--288,
--287,
--287,
--287,
--287,
--286,
--286,
--286,
--285,
--285,
--284,
--284,
--283,
--283,
--282,
--281,
--281,
--280,
--279,
--278,
--277,
--277,
--276,
--275,
--274,
--273,
--272,
--271,
--270,
--269,
--267,
--266,
--265,
--264,
--262,
--261,
--260,
--258,
--257,
--256,
--254,
--253,
--251,
--250,
--248,
--247,
--245,
--243,
--242,
--240,
--238,
--236,
--235,
--233,
--231,
--229,
--227,
--225,
--223,
--221,
--219,
--217,
--215,
--213,
--211,
--209,
--207,
--205,
--203,
--201,
--198,
--196,
--194,
--192,
--189,
--187,
--185,
--182,
--180,
--178,
--175,
--173,
--170,
--168,
--165,
--163,
--160,
--158,
--155,
--153,
--150,
--148,
--145,
--142,
--140,
--137,
--135,
--132,
--129,
--127,
--124,
--121,
--118,
--116,
--113,
--110,
--108,
--105,
--102,
--99,
--96,
--94,
--91,
--88,
--85,
--82,
--80,
--77,
--74,
--71,
--68,
--65,
--63,
--60,
--57,
--54,
--51,
--48,
--45,
--42,
--40,
--37,
--34,
--31,
--28,
--25,
--22,
--20,
--17,
--14,
--11,
--8,
--5,
--2,
-0,
-2,
-5,
-8,
-11,
-13,
-16,
-19,
-22,
-25,
-27,
-30,
-33,
-36,
-38,
-41,
-44,
-47,
-49,
-52,
-55,
-57,
-60,
-63,
-65,
-68,
-71,
-73,
-76,
-78,
-81,
-83,
-86,
-88,
-91,
-93,
-96,
-98,
-101,
-103,
-106,
-108,
-110,
-113,
-115,
-117,
-120,
-122,
-124,
-127,
-129,
-131,
-133,
-135,
-137,
-140,
-142,
-144,
-146,
-148,
-150,
-152,
-154,
-156,
-158,
-160,
-161,
-163,
-165,
-167,
-169,
-171,
-172,
-174,
-176,
-177,
-179,
-181,
-182,
-184,
-185,
-187,
-188,
-190,
-191,
-193,
-194,
-195,
-197,
-198,
-199,
-201,
-202,
-203,
-204,
-205,
-207,
-208,
-209,
-210,
-211,
-212,
-213,
-214,
-215,
-216,
-216,
-217,
-218,
-219,
-219,
-220,
-221,
-222,
-222,
-223,
-223,
-224,
-224,
-225,
-225,
-226,
-226,
-227,
-227,
-227,
-227,
-228,
-228,
-228,
-228,
-228,
-229,
-229,
-229,
-229,
-229,
-229,
-229,
-229,
-228,
-228,
-228,
-228,
-228,
-228,
-227,
-227,
-227,
-226,
-226,
-225,
-225,
-225,
-224,
-224,
-223,
-222,
-222,
-221,
-221,
-220,
-219,
-218,
-218,
-217,
-216,
-215,
-214,
-214,
-213,
-212,
-211,
-210,
-209,
-208,
-207,
-206,
-205,
-203,
-202,
-201,
-200,
-199,
-197,
-196,
-195,
-194,
-192,
-191,
-190,
-188,
-187,
-185,
-184,
-182,
-181,
-179,
-178,
-176,
-175,
-173,
-172,
-170,
-168,
-167,
-165,
-163,
-162,
-160,
-158,
-156,
-155,
-153,
-151,
-149,
-147,
-146,
-144,
-142,
-140,
-138,
-136,
-134,
-132,
-130,
-128,
-126,
-124,
-122,
-120,
-118,
-116,
-114,
-112,
-110,
-108,
-106,
-104,
-102,
-99,
-97,
-95,
-93,
-91,
-89,
-87,
-84,
-82,
-80,
-78,
-76,
-73,
-71,
-69,
-67,
-64,
-62,
-60,
-58,
-56,
-53,
-51,
-49,
-47,
-44,
-42,
-40,
-38,
-35,
-33,
-31,
-28,
-26,
-24,
-22,
-19,
-17,
-15,
-13,
-10,
-8,
-6,
-4,
-1,
-0,
--2,
--4,
--6,
--9,
--11,
--13,
--15,
--17,
--20,
--22,
--24,
--26,
--28,
--30,
--33,
--35,
--37,
--39,
--41,
--43,
--45,
--47,
--49,
--52,
--54,
--56,
--58,
--60,
--62,
--64,
--66,
--68,
--70,
--72,
--74,
--76,
--77,
--79,
--81,
--83,
--85,
--87,
--89,
--90,
--92,
--94,
--96,
--98,
--99,
--101,
--103,
--105,
--106,
--108,
--110,
--111,
--113,
--114,
--116,
--118,
--119,
--121,
--122,
--124,
--125,
--127,
--128,
--130,
--131,
--132,
--134,
--135,
--136,
--138,
--139,
--140,
--142,
--143,
--144,
--145,
--146,
--148,
--149,
--150,
--151,
--152,
--153,
--154,
--155,
--156,
--157,
--158,
--159,
--160,
--161,
--162,
--162,
--163,
--164,
--165,
--166,
--166,
--167,
--168,
--168,
--169,
--170,
--170,
--171,
--171,
--172,
--172,
--173,
--173,
--174,
--174,
--175,
--175,
--175,
--176,
--176,
--176,
--177,
--177,
--177,
--177,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--178,
--177,
--177,
--177,
--177,
--177,
--176,
--176,
--176,
--175,
--175,
--175,
--174,
--174,
--173,
--173,
--172,
--172,
--171,
--171,
--170,
--170,
--169,
--168,
--168,
--167,
--166,
--166,
--165,
--164,
--163,
--163,
--162,
--161,
--160,
--159,
--158,
--158,
--157,
--156,
--155,
--154,
--153,
--152,
--151,
--150,
--149,
--148,
--147,
--145,
--144,
--143,
--142,
--141,
--140,
--139,
--137,
--136,
--135,
--134,
--132,
--131,
--130,
--128,
--127,
--126,
--124,
--123,
--122,
--120,
--119,
--118,
--116,
--115,
--113,
--112,
--110,
--109,
--107,
--106,
--104,
--103,
--101,
--100,
--98,
--97,
--95,
--94,
--92,
--90,
--89,
--87,
--86,
--84,
--82,
--81,
--79,
--77,
--76,
--74,
--72,
--71,
--69,
--67,
--66,
--64,
--62,
--60,
--59,
--57,
--55,
--54,
--52,
--50,
--48,
--47,
--45,
--43,
--41,
--40,
--38,
--36,
--34,
--33,
--31,
--29,
--27,
--25,
--24,
--22,
--20,
--18,
--17,
--15,
--13,
--11,
--10,
--8,
--6,
--4,
--3,
--1,
-0,
-2,
-3,
-5,
-7,
-8,
-10,
-12,
-14,
-15,
-17,
-19,
-20,
-22,
-24,
-25,
-27,
-29,
-30,
-32,
-34,
-35,
-37,
-39,
-40,
-42,
-43,
-45,
-47,
-48,
-50,
-51,
-53,
-54,
-56,
-57,
-59,
-60,
-62,
-63,
-65,
-66,
-68,
-69,
-70,
-72,
-73,
-75,
-76,
-77,
-79,
-80,
-81,
-83,
-84,
-85,
-87,
-88,
-89,
-90,
-92,
-93,
-94,
-95,
-96,
-97,
-99,
-100,
-101,
-102,
-103,
-104,
-105,
-106,
-107,
-108,
-109,
-110,
-111,
-112,
-113,
-114,
-115,
-116,
-117,
-117,
-118,
-119,
-120,
-121,
-121,
-122,
-123,
-124,
-124,
-125,
-126,
-126,
-127,
-128,
-128,
-129,
-129,
-130,
-130,
-131,
-131,
-132,
-132,
-133,
-133,
-134,
-134,
-135,
-135,
-135,
-136,
-136,
-136,
-136,
-137,
-137,
-137,
-137,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-139,
-139,
-139,
-139,
-139,
-139,
-139,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-138,
-137,
-137,
-137,
-137,
-136,
-136,
-136,
-136,
-135,
-135,
-134,
-134,
-134,
-133,
-133,
-132,
-132,
-132,
-131,
-131,
-130,
-129,
-129,
-128,
-128,
-127,
-127,
-126,
-125,
-125,
-124,
-123,
-123,
-122,
-121,
-121,
-120,
-119,
-118,
-117,
-117,
-116,
-115,
-114,
-113,
-113,
-112,
-111,
-110,
-109,
-108,
-107,
-106,
-105,
-104,
-103,
-102,
-101,
-100,
-99,
-98,
-97,
-96,
-95,
-94,
-93,
-92,
-91,
-90,
-89,
-87,
-86,
-85,
-84,
-83,
-82,
-81,
-79,
-78,
-77,
-76,
-75,
-73,
-72,
-71,
-70,
-68,
-67,
-66,
-65,
-63,
-62,
-61,
-60,
-58,
-57,
-56,
-54,
-53,
-52,
-50,
-49,
-48,
-47,
-45,
-44,
-43,
-41,
-40,
-39,
-37,
-36,
-34,
-33,
-32,
-30,
-29,
-28,
-26,
-25,
-24,
-22,
-21,
-20,
-18,
-17,
-16,
-14,
-13,
-11,
-10,
-9,
-7,
-6,
-5,
-3,
-2,
-1,
-0,
--1,
--2,
--4,
--5,
--6,
--8,
--9,
--10,
--11,
--13,
--14,
--15,
--17,
--18,
--19,
--20,
--22,
--23,
--24,
--26,
--27,
--28,
--29,
--30,
--32,
--33,
--34,
--35,
--37,
--38,
--39,
--40,
--41,
--42,
--44,
--45,
--46,
--47,
--48,
--49,
--50,
--51,
--53,
--54,
--55,
--56,
--57,
--58,
--59,
--60,
--61,
--62,
--63,
--64,
--65,
--66,
--67,
--68,
--69,
--70,
--71,
--71,
--72,
--73,
--74,
--75,
--76,
--77,
--77,
--78,
--79,
--80,
--81,
--81,
--82,
--83,
--84,
--84,
--85,
--86,
--87,
--87,
--88,
--89,
--89,
--90,
--90,
--91,
--92,
--92,
--93,
--93,
--94,
--94,
--95,
--95,
--96,
--96,
--97,
--97,
--98,
--98,
--99,
--99,
--99,
--100,
--100,
--100,
--101,
--101,
--101,
--102,
--102,
--102,
--102,
--103,
--103,
--103,
--103,
--103,
--104,
--104,
--104,
--104,
--104,
--104,
--104,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--105,
--104,
--104,
--104,
--104,
--104,
--104,
--104,
--104,
--103,
--103,
--103,
--103,
--103,
--102,
--102,
--102,
--102,
--101,
--101,
--101,
--100,
--100,
--100,
--99,
--99,
--99,
--98,
--98,
--97,
--97,
--97,
--96,
--96,
--95,
--95,
--94,
--94,
--93,
--93,
--92,
--92,
--91,
--90,
--90,
--89,
--89,
--88,
--87,
--87,
--86,
--86,
--85,
--84,
--84,
--83,
--82,
--81,
--81,
--80,
--79,
--79,
--78,
--77,
--76,
--76,
--75,
--74,
--73,
--72,
--72,
--71,
--70,
--69,
--68,
--67,
--67,
--66,
--65,
--64,
--63,
--62,
--61,
--61,
--60,
--59,
--58,
--57,
--56,
--55,
--54,
--53,
--52,
--51,
--50,
--49,
--48,
--48,
--47,
--46,
--45,
--44,
--43,
--42,
--41,
--40,
--39,
--38,
--37,
--36,
--35,
--34,
--33,
--32,
--31,
--30,
--29,
--28,
--27,
--26,
--25,
--24,
--23,
--21,
--20,
--19,
--18,
--17,
--16,
--15,
--14,
--13,
--12,
--11,
--10,
--9,
--8,
--7,
--6,
--5,
--4,
--3,
--2,
--1,
-0,
-0,
-1,
-2,
-3,
-4,
-5,
-6,
-7,
-8,
-9,
-10,
-11,
-12,
-13,
-14,
-15,
-16,
-17,
-18,
-19,
-20,
-21,
-22,
-22,
-23,
-24,
-25,
-26,
-27,
-28,
-29,
-30,
-31,
-32,
-32,
-33,
-34,
-35,
-36,
-37,
-38,
-38,
-39,
-40,
-41,
-42,
-42,
-43,
-44,
-45,
-46,
-46,
-47,
-48,
-49,
-49,
-50,
-51,
-52,
-52,
-53,
-54,
-54,
-55,
-56,
-56,
-57,
-58,
-58,
-59,
-59,
-60,
-61,
-61,
-62,
-62,
-63,
-64,
-64,
-65,
-65,
-66,
-66,
-67,
-67,
-68,
-68,
-69,
-69,
-69,
-70,
-70,
-71,
-71,
-72,
-72,
-72,
-73,
-73,
-73,
-74,
-74,
-74,
-75,
-75,
-75,
-76,
-76,
-76,
-76,
-77,
-77,
-77,
-77,
-77,
-78,
-78,
-78,
-78,
-78,
-78,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-79,
-78,
-78,
-78,
-78,
-78,
-78,
-77,
-77,
-77,
-77,
-77,
-76,
-76,
-76,
-76,
-75,
-75,
-75,
-74,
-74,
-74,
-74,
-73,
-73,
-72,
-72,
-72,
-71,
-71,
-71,
-70,
-70,
-69,
-69,
-69,
-68,
-68,
-67,
-67,
-66,
-66,
-65,
-65,
-64,
-64,
-63,
-63,
-62,
-62,
-61,
-61,
-60,
-60,
-59,
-59,
-58,
-57,
-57,
-56,
-56,
-55,
-55,
-54,
-53,
-53,
-52,
-51,
-51,
-50,
-50,
-49,
-48,
-48,
-47,
-46,
-46,
-45,
-44,
-44,
-43,
-42,
-41,
-41,
-40,
-39,
-39,
-38,
-37,
-37,
-36,
-35,
-34,
-34,
-33,
-32,
-31,
-31,
-30,
-29,
-28,
-28,
-27,
-26,
-25,
-25,
-24,
-23,
-22,
-22,
-21,
-20,
-19,
-19,
-18,
-17,
-16,
-16,
-15,
-14,
-13,
-12,
-12,
-11,
-10,
-9,
-9,
-8,
-7,
-6,
-6,
-5,
-4,
-3,
-3,
-2,
-1,
-0,
-0,
-0,
--1,
--2,
--2,
--3,
--4,
--5,
--5,
--6,
--7,
--8,
--8,
--9,
--10,
--10,
--11,
--12,
--13,
--13,
--14,
--15,
--15,
--16,
--17,
--17,
--18,
--19,
--19,
--20,
--21,
--21,
--22,
--23,
--23,
--24,
--25,
--25,
--26,
--27,
--27,
--28,
--28,
--29,
--30,
--30,
--31,
--31,
--32,
--33,
--33,
--34,
--34,
--35,
--35,
--36,
--36,
--37,
--37,
--38,
--38,
--39,
--39,
--40,
--40,
--41,
--41,
--42,
--42,
--43,
--43,
--44,
--44,
--45,
--45,
--45,
--46,
--46,
--47,
--47,
--47,
--48,
--48,
--49,
--49,
--49,
--50,
--50,
--50,
--51,
--51,
--51,
--51,
--52,
--52,
--52,
--53,
--53,
--53,
--53,
--54,
--54,
--54,
--54,
--54,
--55,
--55,
--55,
--55,
--55,
--56,
--56,
--56,
--56,
--56,
--56,
--56,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--57,
--56,
--56,
--56,
--56,
--56,
--56,
--56,
--55,
--55,
--55,
--55,
--55,
--54,
--54,
--54,
--54,
--54,
--53,
--53,
--53,
--53,
--52,
--52,
--52,
--52,
--51,
--51,
--51,
--50,
--50,
--50,
--50,
--49,
--49,
--49,
--48,
--48,
--48,
--47,
--47,
--46,
--46,
--46,
--45,
--45,
--45,
--44,
--44,
--43,
--43,
--43,
--42,
--42,
--41,
--41,
--40,
--40,
--40,
--39,
--39,
--38,
--38,
--37,
--37,
--36,
--36,
--35,
--35,
--35,
--34,
--34,
--33,
--33,
--32,
--32,
--31,
--31,
--30,
--30,
--29,
--29,
--28,
--28,
--27,
--26,
--26,
--25,
--25,
--24,
--24,
--23,
--23,
--22,
--22,
--21,
--21,
--20,
--19,
--19,
--18,
--18,
--17,
--17,
--16,
--16,
--15,
--15,
--14,
--13,
--13,
--12,
--12,
--11,
--11,
--10,
--9,
--9,
--8,
--8,
--7,
--7,
--6,
--6,
--5,
--4,
--4,
--3,
--3,
--2,
--2,
--1,
--1,
-0,
-0,
-0,
-1,
-1,
-2,
-2,
-3,
-3,
-4,
-4,
-5,
-5,
-6,
-7,
-7,
-8,
-8,
-9,
-9,
-10,
-10,
-11,
-11,
-12,
-12,
-13,
-13,
-14,
-14,
-15,
-15,
-16,
-16,
-17,
-17,
-18,
-18,
-18,
-19,
-19,
-20,
-20,
-21,
-21,
-22,
-22,
-22,
-23,
-23,
-24,
-24,
-25,
-25,
-25,
-26,
-26,
-27,
-27,
-27,
-28,
-28,
-28,
-29,
-29,
-30,
-30,
-30,
-31,
-31,
-31,
-32,
-32,
-32,
-33,
-33,
-33,
-33,
-34,
-34,
-34,
-35,
-35,
-35,
-35,
-36,
-36,
-36,
-36,
-37,
-37,
-37,
-37,
-38,
-38,
-38,
-38,
-38,
-39,
-39,
-39,
-39,
-39,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-42,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-41,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-39,
-39,
-39,
-39,
-39,
-38,
-38,
-38,
-38,
-38,
-37,
-37,
-37,
-37,
-37,
-36,
-36,
-36,
-36,
-35,
-35,
-35,
-35,
-34,
-34,
-34,
-34,
-33,
-33,
-33,
-33,
-32,
-32,
-32,
-31,
-31,
-31,
-30,
-30,
-30,
-30,
-29,
-29,
-29,
-28,
-28,
-28,
-27,
-27,
-27,
-26,
-26,
-26,
-25,
-25,
-25,
-24,
-24,
-23,
-23,
-23,
-22,
-22,
-22,
-21,
-21,
-21,
-20,
-20,
-19,
-19,
-19,
-18,
-18,
-18,
-17,
-17,
-16,
-16,
-16,
-15,
-15,
-14,
-14,
-14,
-13,
-13,
-12,
-12,
-12,
-11,
-11,
-10,
-10,
-10,
-9,
-9,
-8,
-8,
-8,
-7,
-7,
-6,
-6,
-6,
-5,
-5,
-4,
-4,
-4,
-3,
-3,
-2,
-2,
-2,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--2,
--2,
--2,
--3,
--3,
--3,
--4,
--4,
--5,
--5,
--5,
--6,
--6,
--6,
--7,
--7,
--7,
--8,
--8,
--9,
--9,
--9,
--10,
--10,
--10,
--11,
--11,
--11,
--12,
--12,
--12,
--13,
--13,
--13,
--14,
--14,
--14,
--14,
--15,
--15,
--15,
--16,
--16,
--16,
--17,
--17,
--17,
--17,
--18,
--18,
--18,
--19,
--19,
--19,
--19,
--20,
--20,
--20,
--20,
--21,
--21,
--21,
--21,
--21,
--22,
--22,
--22,
--22,
--23,
--23,
--23,
--23,
--23,
--24,
--24,
--24,
--24,
--24,
--25,
--25,
--25,
--25,
--25,
--25,
--26,
--26,
--26,
--26,
--26,
--26,
--26,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--29,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--28,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--27,
--26,
--26,
--26,
--26,
--26,
--26,
--26,
--25,
--25,
--25,
--25,
--25,
--25,
--25,
--24,
--24,
--24,
--24,
--24,
--24,
--23,
--23,
--23,
--23,
--23,
--22,
--22,
--22,
--22,
--22,
--21,
--21,
--21,
--21,
--21,
--20,
--20,
--20,
--20,
--20,
--19,
--19,
--19,
--19,
--18,
--18,
--18,
--18,
--17,
--17,
--17,
--17,
--16,
--16,
--16,
--16,
--15,
--15,
--15,
--15,
--14,
--14,
--14,
--14,
--13,
--13,
--13,
--13,
--12,
--12,
--12,
--12,
--11,
--11,
--11,
--11,
--10,
--10,
--10,
--9,
--9,
--9,
--9,
--8,
--8,
--8,
--7,
--7,
--7,
--7,
--6,
--6,
--6,
--6,
--5,
--5,
--5,
--4,
--4,
--4,
--4,
--3,
--3,
--3,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-3,
-3,
-3,
-3,
-4,
-4,
-4,
-5,
-5,
-5,
-5,
-6,
-6,
-6,
-6,
-6,
-7,
-7,
-7,
-7,
-8,
-8,
-8,
-8,
-9,
-9,
-9,
-9,
-10,
-10,
-10,
-10,
-10,
-11,
-11,
-11,
-11,
-11,
-12,
-12,
-12,
-12,
-12,
-13,
-13,
-13,
-13,
-13,
-14,
-14,
-14,
-14,
-14,
-14,
-15,
-15,
-15,
-15,
-15,
-15,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-20,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-19,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-18,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-17,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-14,
-14,
-14,
-14,
-14,
-14,
-14,
-13,
-13,
-13,
-13,
-13,
-13,
-12,
-12,
-12,
-12,
-12,
-12,
-11,
-11,
-11,
-11,
-11,
-11,
-10,
-10,
-10,
-10,
-10,
-9,
-9,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-8,
-8,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--4,
--4,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-8,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0};
-
-static HWORD LARGE_FILTER_IMPD[] /* Impulse response differences */ = {
--1,
--2,
--3,
--5,
--6,
--7,
--9,
--10,
--11,
--13,
--14,
--15,
--17,
--18,
--19,
--21,
--22,
--23,
--25,
--26,
--27,
--28,
--30,
--32,
--32,
--34,
--35,
--36,
--38,
--39,
--40,
--42,
--43,
--44,
--45,
--47,
--48,
--49,
--51,
--52,
--53,
--54,
--56,
--56,
--58,
--60,
--60,
--62,
--63,
--64,
--66,
--66,
--68,
--69,
--70,
--72,
--72,
--74,
--75,
--76,
--77,
--79,
--79,
--81,
--82,
--83,
--84,
--85,
--87,
--87,
--89,
--90,
--90,
--92,
--93,
--94,
--95,
--96,
--98,
--98,
--99,
--100,
--102,
--102,
--103,
--105,
--105,
--106,
--108,
--108,
--109,
--110,
--111,
--112,
--113,
--114,
--115,
--116,
--116,
--118,
--118,
--119,
--121,
--120,
--122,
--123,
--123,
--125,
--125,
--126,
--126,
--128,
--128,
--129,
--130,
--130,
--132,
--132,
--132,
--134,
--134,
--135,
--135,
--136,
--137,
--137,
--138,
--139,
--139,
--140,
--141,
--141,
--142,
--142,
--143,
--143,
--144,
--145,
--145,
--145,
--146,
--147,
--147,
--147,
--148,
--149,
--148,
--150,
--149,
--150,
--151,
--151,
--151,
--152,
--152,
--152,
--153,
--153,
--153,
--153,
--154,
--154,
--155,
--155,
--155,
--155,
--155,
--156,
--156,
--156,
--156,
--156,
--157,
--157,
--157,
--157,
--157,
--157,
--157,
--158,
--157,
--158,
--158,
--157,
--158,
--158,
--158,
--158,
--157,
--158,
--158,
--158,
--157,
--158,
--158,
--157,
--158,
--157,
--157,
--157,
--157,
--157,
--157,
--157,
--156,
--156,
--156,
--156,
--156,
--155,
--155,
--155,
--155,
--155,
--154,
--154,
--153,
--154,
--153,
--153,
--152,
--152,
--152,
--151,
--151,
--151,
--150,
--150,
--150,
--149,
--149,
--148,
--148,
--147,
--147,
--147,
--146,
--145,
--145,
--145,
--144,
--144,
--143,
--142,
--142,
--142,
--141,
--140,
--140,
--139,
--139,
--138,
--137,
--137,
--136,
--136,
--135,
--134,
--134,
--133,
--132,
--132,
--131,
--130,
--130,
--129,
--128,
--128,
--126,
--126,
--126,
--125,
--123,
--124,
--122,
--122,
--121,
--120,
--119,
--119,
--117,
--117,
--117,
--115,
--114,
--113,
--113,
--112,
--112,
--110,
--110,
--108,
--108,
--107,
--106,
--106,
--104,
--104,
--102,
--102,
--101,
--100,
--99,
--98,
--98,
--96,
--95,
--95,
--94,
--92,
--92,
--91,
--90,
--89,
--88,
--87,
--86,
--85,
--85,
--83,
--82,
--82,
--80,
--80,
--78,
--78,
--76,
--76,
--75,
--73,
--73,
--72,
--70,
--70,
--69,
--68,
--66,
--66,
--65,
--64,
--63,
--61,
--61,
--60,
--59,
--58,
--57,
--56,
--55,
--54,
--53,
--51,
--51,
--50,
--49,
--48,
--47,
--46,
--45,
--44,
--43,
--42,
--41,
--41,
--39,
--38,
--37,
--36,
--35,
--34,
--34,
--32,
--31,
--31,
--29,
--28,
--28,
--26,
--26,
--24,
--24,
--23,
--21,
--21,
--20,
--19,
--18,
--17,
--16,
--15,
--14,
--13,
--13,
--11,
--11,
--9,
--9,
--8,
--7,
--6,
--5,
--5,
--3,
--2,
--2,
--1,
-0,
-1,
-2,
-2,
-4,
-4,
-5,
-6,
-7,
-8,
-8,
-10,
-10,
-11,
-11,
-13,
-13,
-14,
-15,
-15,
-17,
-17,
-18,
-18,
-20,
-20,
-21,
-21,
-23,
-23,
-23,
-25,
-25,
-26,
-26,
-27,
-28,
-28,
-30,
-29,
-31,
-31,
-32,
-32,
-33,
-34,
-34,
-35,
-35,
-36,
-37,
-37,
-37,
-39,
-39,
-39,
-40,
-40,
-41,
-42,
-42,
-42,
-43,
-44,
-44,
-44,
-45,
-46,
-45,
-47,
-46,
-48,
-47,
-48,
-49,
-49,
-49,
-49,
-50,
-51,
-51,
-51,
-51,
-52,
-52,
-53,
-53,
-53,
-53,
-54,
-54,
-54,
-55,
-55,
-55,
-55,
-56,
-56,
-56,
-56,
-57,
-57,
-57,
-57,
-58,
-57,
-58,
-58,
-58,
-58,
-59,
-58,
-59,
-59,
-59,
-59,
-59,
-59,
-59,
-60,
-59,
-60,
-59,
-60,
-60,
-60,
-59,
-60,
-60,
-60,
-60,
-59,
-60,
-60,
-60,
-60,
-59,
-60,
-60,
-59,
-60,
-59,
-60,
-59,
-59,
-59,
-59,
-59,
-59,
-59,
-58,
-59,
-58,
-58,
-58,
-58,
-57,
-58,
-57,
-57,
-57,
-57,
-55,
-57,
-56,
-56,
-55,
-56,
-55,
-55,
-54,
-55,
-54,
-54,
-54,
-53,
-53,
-53,
-52,
-53,
-52,
-51,
-52,
-51,
-50,
-51,
-50,
-49,
-50,
-49,
-48,
-49,
-48,
-47,
-47,
-47,
-47,
-46,
-46,
-45,
-45,
-45,
-44,
-44,
-43,
-43,
-42,
-43,
-41,
-42,
-40,
-41,
-40,
-39,
-40,
-38,
-39,
-37,
-38,
-37,
-36,
-36,
-35,
-36,
-34,
-34,
-34,
-33,
-33,
-32,
-32,
-31,
-31,
-30,
-30,
-29,
-29,
-28,
-28,
-27,
-27,
-26,
-26,
-25,
-25,
-24,
-24,
-24,
-22,
-23,
-21,
-21,
-21,
-20,
-20,
-19,
-19,
-18,
-18,
-17,
-16,
-16,
-16,
-15,
-14,
-14,
-14,
-13,
-12,
-12,
-11,
-11,
-11,
-9,
-10,
-8,
-9,
-7,
-8,
-6,
-7,
-5,
-5,
-5,
-4,
-4,
-3,
-3,
-2,
-1,
-1,
-1,
-0,
-0,
--1,
--1,
--2,
--3,
--3,
--3,
--4,
--4,
--5,
--5,
--6,
--6,
--7,
--7,
--8,
--8,
--8,
--9,
--10,
--10,
--10,
--11,
--11,
--12,
--12,
--13,
--13,
--14,
--14,
--14,
--15,
--15,
--16,
--16,
--16,
--17,
--18,
--17,
--18,
--19,
--19,
--19,
--20,
--20,
--21,
--20,
--22,
--21,
--22,
--23,
--22,
--23,
--24,
--23,
--25,
--24,
--25,
--25,
--25,
--26,
--26,
--27,
--26,
--27,
--28,
--27,
--28,
--28,
--29,
--29,
--29,
--29,
--30,
--30,
--30,
--30,
--31,
--31,
--31,
--31,
--32,
--32,
--32,
--32,
--33,
--33,
--33,
--33,
--33,
--34,
--34,
--34,
--34,
--34,
--35,
--34,
--35,
--35,
--35,
--36,
--35,
--36,
--35,
--36,
--36,
--36,
--37,
--36,
--36,
--37,
--37,
--36,
--37,
--37,
--37,
--37,
--37,
--38,
--37,
--37,
--38,
--37,
--38,
--37,
--38,
--37,
--38,
--38,
--37,
--38,
--38,
--37,
--38,
--38,
--37,
--38,
--38,
--37,
--38,
--37,
--38,
--37,
--38,
--37,
--38,
--37,
--37,
--37,
--37,
--37,
--37,
--37,
--37,
--35,
--37,
--36,
--37,
--36,
--36,
--36,
--36,
--36,
--35,
--36,
--35,
--36,
--35,
--35,
--34,
--35,
--34,
--35,
--34,
--34,
--34,
--33,
--34,
--33,
--33,
--33,
--32,
--33,
--32,
--32,
--32,
--32,
--31,
--31,
--31,
--31,
--31,
--30,
--30,
--30,
--29,
--30,
--29,
--29,
--28,
--28,
--29,
--27,
--28,
--27,
--27,
--27,
--26,
--27,
--25,
--26,
--25,
--26,
--24,
--25,
--24,
--24,
--23,
--24,
--23,
--22,
--23,
--22,
--22,
--21,
--21,
--21,
--21,
--20,
--20,
--19,
--19,
--19,
--19,
--18,
--18,
--18,
--17,
--17,
--17,
--16,
--16,
--15,
--16,
--14,
--15,
--14,
--14,
--14,
--13,
--13,
--12,
--12,
--12,
--12,
--11,
--10,
--11,
--10,
--10,
--9,
--9,
--9,
--8,
--8,
--8,
--7,
--7,
--6,
--6,
--6,
--6,
--5,
--5,
--4,
--4,
--4,
--3,
--3,
--3,
--2,
--2,
--2,
--1,
--1,
--1,
-0,
-0,
-0,
-1,
-1,
-2,
-1,
-3,
-2,
-3,
-3,
-4,
-3,
-4,
-5,
-5,
-5,
-5,
-6,
-6,
-7,
-6,
-8,
-7,
-8,
-8,
-8,
-9,
-9,
-9,
-10,
-9,
-11,
-10,
-11,
-11,
-11,
-12,
-12,
-12,
-13,
-13,
-13,
-13,
-14,
-14,
-14,
-14,
-15,
-15,
-15,
-16,
-16,
-16,
-16,
-17,
-16,
-18,
-17,
-17,
-18,
-18,
-18,
-19,
-19,
-19,
-19,
-19,
-20,
-19,
-20,
-21,
-20,
-21,
-21,
-21,
-21,
-21,
-22,
-22,
-22,
-22,
-22,
-23,
-22,
-23,
-23,
-23,
-23,
-24,
-24,
-23,
-24,
-24,
-24,
-25,
-24,
-25,
-24,
-25,
-25,
-25,
-25,
-26,
-25,
-26,
-25,
-26,
-26,
-25,
-26,
-26,
-26,
-27,
-26,
-26,
-27,
-26,
-27,
-26,
-27,
-26,
-27,
-27,
-27,
-26,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-27,
-26,
-27,
-27,
-27,
-27,
-26,
-27,
-27,
-26,
-26,
-26,
-27,
-26,
-26,
-27,
-26,
-26,
-26,
-26,
-26,
-26,
-25,
-26,
-25,
-26,
-25,
-25,
-25,
-25,
-25,
-25,
-25,
-24,
-24,
-25,
-24,
-24,
-24,
-23,
-24,
-24,
-23,
-23,
-23,
-23,
-23,
-22,
-23,
-22,
-22,
-22,
-22,
-21,
-22,
-21,
-21,
-21,
-21,
-20,
-20,
-21,
-20,
-19,
-20,
-19,
-19,
-19,
-19,
-19,
-18,
-18,
-18,
-18,
-18,
-17,
-17,
-17,
-17,
-16,
-16,
-16,
-16,
-16,
-15,
-15,
-15,
-14,
-15,
-14,
-14,
-14,
-13,
-13,
-13,
-13,
-12,
-13,
-12,
-11,
-12,
-11,
-11,
-11,
-10,
-11,
-10,
-9,
-10,
-9,
-9,
-9,
-8,
-9,
-8,
-7,
-8,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-0,
-1,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--3,
--2,
--4,
--3,
--3,
--4,
--4,
--5,
--4,
--5,
--5,
--5,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--8,
--7,
--8,
--8,
--9,
--8,
--9,
--9,
--9,
--10,
--9,
--10,
--10,
--10,
--11,
--10,
--11,
--11,
--12,
--11,
--12,
--12,
--12,
--12,
--13,
--12,
--13,
--13,
--13,
--14,
--13,
--14,
--14,
--14,
--14,
--15,
--14,
--15,
--15,
--15,
--15,
--16,
--15,
--16,
--16,
--16,
--16,
--16,
--17,
--16,
--17,
--17,
--17,
--17,
--17,
--18,
--17,
--18,
--18,
--17,
--18,
--18,
--19,
--18,
--18,
--19,
--18,
--19,
--19,
--19,
--19,
--19,
--19,
--19,
--19,
--20,
--19,
--20,
--19,
--20,
--20,
--20,
--19,
--20,
--20,
--20,
--20,
--20,
--21,
--20,
--20,
--20,
--21,
--20,
--20,
--21,
--20,
--21,
--20,
--20,
--21,
--20,
--21,
--20,
--21,
--20,
--21,
--20,
--21,
--21,
--20,
--20,
--21,
--20,
--21,
--20,
--21,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--20,
--19,
--20,
--20,
--19,
--20,
--19,
--19,
--19,
--20,
--19,
--19,
--18,
--19,
--19,
--19,
--18,
--18,
--19,
--18,
--18,
--18,
--18,
--18,
--18,
--17,
--18,
--17,
--17,
--17,
--17,
--17,
--17,
--16,
--17,
--16,
--16,
--17,
--15,
--16,
--16,
--15,
--16,
--15,
--15,
--15,
--15,
--15,
--14,
--14,
--15,
--14,
--13,
--14,
--14,
--13,
--13,
--13,
--13,
--13,
--13,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--11,
--11,
--11,
--10,
--11,
--10,
--10,
--10,
--9,
--10,
--9,
--9,
--9,
--9,
--9,
--8,
--8,
--8,
--8,
--8,
--7,
--7,
--7,
--7,
--7,
--6,
--6,
--6,
--6,
--6,
--5,
--5,
--6,
--4,
--5,
--4,
--5,
--4,
--4,
--3,
--4,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--2,
--1,
--2,
--1,
--1,
--1,
-0,
--1,
-0,
-0,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-2,
-2,
-2,
-2,
-2,
-3,
-3,
-2,
-4,
-3,
-3,
-4,
-4,
-4,
-4,
-5,
-4,
-5,
-5,
-5,
-6,
-5,
-6,
-6,
-6,
-6,
-7,
-6,
-7,
-7,
-7,
-7,
-8,
-7,
-8,
-8,
-8,
-8,
-9,
-8,
-9,
-9,
-9,
-9,
-10,
-9,
-10,
-10,
-10,
-10,
-10,
-11,
-10,
-11,
-11,
-11,
-11,
-11,
-11,
-12,
-11,
-12,
-12,
-12,
-12,
-12,
-13,
-12,
-13,
-13,
-12,
-13,
-13,
-14,
-13,
-13,
-14,
-13,
-14,
-14,
-13,
-14,
-14,
-15,
-14,
-14,
-14,
-15,
-14,
-15,
-15,
-14,
-15,
-15,
-15,
-15,
-15,
-16,
-15,
-15,
-15,
-16,
-15,
-16,
-15,
-16,
-15,
-16,
-16,
-16,
-15,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-17,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-16,
-15,
-16,
-16,
-16,
-16,
-16,
-15,
-16,
-16,
-15,
-16,
-16,
-15,
-15,
-16,
-15,
-16,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-15,
-14,
-15,
-14,
-15,
-14,
-14,
-15,
-14,
-14,
-14,
-14,
-13,
-14,
-14,
-13,
-13,
-14,
-13,
-13,
-13,
-13,
-13,
-12,
-13,
-12,
-13,
-12,
-12,
-12,
-12,
-12,
-12,
-11,
-12,
-11,
-11,
-11,
-11,
-11,
-11,
-10,
-11,
-10,
-10,
-10,
-10,
-10,
-10,
-9,
-10,
-9,
-9,
-9,
-9,
-8,
-9,
-8,
-9,
-8,
-8,
-8,
-7,
-8,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-6,
-6,
-6,
-5,
-6,
-5,
-5,
-6,
-4,
-5,
-5,
-4,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-2,
-2,
-2,
-2,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-1,
-0,
--1,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--3,
--3,
--3,
--3,
--4,
--3,
--4,
--4,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--5,
--5,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--7,
--7,
--7,
--7,
--8,
--8,
--7,
--8,
--8,
--8,
--8,
--9,
--8,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--10,
--9,
--10,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--10,
--11,
--10,
--11,
--11,
--11,
--10,
--11,
--11,
--12,
--11,
--11,
--11,
--12,
--11,
--12,
--12,
--11,
--12,
--12,
--12,
--11,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--13,
--12,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--11,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--12,
--11,
--12,
--11,
--11,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--11,
--10,
--11,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--10,
--9,
--10,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--4,
--5,
--4,
--4,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--3,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-1,
-0,
-2,
-1,
-1,
-1,
-2,
-2,
-1,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-4,
-4,
-3,
-4,
-4,
-4,
-5,
-4,
-5,
-4,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-6,
-5,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-6,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-7,
-8,
-7,
-8,
-8,
-7,
-8,
-8,
-8,
-8,
-8,
-8,
-9,
-8,
-9,
-8,
-9,
-8,
-9,
-9,
-8,
-9,
-9,
-9,
-9,
-9,
-10,
-9,
-9,
-9,
-10,
-9,
-10,
-9,
-10,
-10,
-9,
-10,
-10,
-9,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-11,
-10,
-11,
-10,
-10,
-11,
-10,
-10,
-11,
-10,
-11,
-10,
-10,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-10,
-10,
-11,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-10,
-9,
-10,
-10,
-10,
-9,
-10,
-10,
-9,
-10,
-9,
-10,
-9,
-9,
-10,
-9,
-9,
-9,
-9,
-9,
-9,
-9,
-9,
-9,
-8,
-9,
-9,
-8,
-9,
-8,
-8,
-9,
-8,
-8,
-8,
-8,
-8,
-8,
-7,
-8,
-8,
-7,
-8,
-7,
-7,
-8,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-6,
-6,
-6,
-6,
-6,
-6,
-5,
-6,
-5,
-6,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-4,
-5,
-4,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-4,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--3,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--4,
--5,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--5,
--4,
--5,
--5,
--6,
--5,
--5,
--5,
--6,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--6,
--7,
--6,
--7,
--7,
--6,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--8,
--7,
--7,
--8,
--7,
--8,
--7,
--8,
--7,
--8,
--7,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--8,
--8,
--8,
--9,
--8,
--8,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--9,
--8,
--9,
--8,
--7,
--9,
--8,
--8,
--9,
--8,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--8,
--7,
--8,
--8,
--7,
--8,
--7,
--8,
--7,
--8,
--7,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--7,
--7,
--6,
--6,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--5,
--4,
--5,
--4,
--5,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--3,
--4,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-3,
-2,
-2,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-4,
-3,
-4,
-3,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-5,
-5,
-4,
-5,
-5,
-4,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-6,
-5,
-5,
-5,
-6,
-5,
-6,
-5,
-6,
-6,
-5,
-6,
-6,
-6,
-5,
-6,
-6,
-6,
-6,
-6,
-6,
-7,
-6,
-6,
-6,
-6,
-7,
-6,
-6,
-7,
-6,
-7,
-6,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-6,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-7,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-7,
-6,
-7,
-6,
-7,
-6,
-7,
-6,
-6,
-7,
-6,
-6,
-7,
-6,
-6,
-6,
-6,
-6,
-7,
-6,
-6,
-6,
-6,
-5,
-6,
-6,
-6,
-6,
-5,
-6,
-6,
-5,
-6,
-5,
-6,
-5,
-5,
-6,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-3,
-4,
-3,
-4,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--3,
--2,
--3,
--2,
--3,
--3,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--5,
--4,
--5,
--4,
--5,
--5,
--4,
--5,
--5,
--4,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--6,
--5,
--5,
--5,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--6,
--6,
--5,
--6,
--5,
--5,
--5,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--6,
--5,
--5,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--5,
--5,
--4,
--5,
--5,
--4,
--5,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-4,
-3,
-4,
-3,
-4,
-3,
-4,
-3,
-4,
-4,
-3,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-5,
-4,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-4,
-5,
-3,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-5,
-4,
-4,
-5,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-4,
-5,
-4,
-4,
-4,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-4,
-4,
-3,
-4,
-4,
-4,
-3,
-4,
-4,
-3,
-4,
-3,
-4,
-3,
-3,
-4,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--4,
--3,
--3,
--3,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--4,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--3,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--3,
--1,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--2,
--1,
--2,
--2,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0};
diff --git a/third_party/resample/src/resample.c b/third_party/resample/src/resample.c
deleted file mode 100644
index 73122704..00000000
--- a/third_party/resample/src/resample.c
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * FILE: resample.c
- * Sampling-rate-conversion main program (command line usage)
- */
-
-static char resampleVersion[]
- = "\n\tresample version 1.9 (Feb. 1, 2006 - jos@ccrma.stanford.edu)\n\n\
-Copyright 1982-2006 by Julius Smith.\n\
-This is free software. See the Lesser GNU Public License (LGPL) for copying conditions.\n\
-There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
-PARTICULAR PURPOSE.\n\n\
-";
-
-#define USAGE "\
-\n\
-USAGE: One of the following:\n\
-\n\
- resample -to srate [-noFilterInterp] [-linearSignalInterp] [-f filterFile] [-terse] inputSoundFile outputSoundFile\n\
- resample -by factor [options as above] inputSoundFile outputSoundFile\n\
- resample -version\n\
-\n\
-Options can be abbreviated.\n\n\
-Report bugs to <bug-resample@w3k.org>.\n\n\
-"
-
-#include "filterkit.h"
-#include "resample.h"
-#include "sndlibextra.h"
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <errno.h>
-
-static int trace = 1; /* controls verbosity of output */
-
-static char comment[256] = "";
-
-static void fail(char *s)
-{
- fprintf(stderr,"\n*** resample: %s \n",s); /* Display error message */
- fprintf(stderr,USAGE);
- exit(1); /* Exit, indicating error */
-}
-
-static void fails(char *s, char *s2)
-{
- printf("resample: "); /* Display error message */
- printf(s,s2);
- printf("\n\n");
- exit(1); /* Exit, indicating error */
-}
-
-
-int main(int argc, char *argv[])
-{
- double factor = -2.0; /* factor = Sndout/Sndin */
- double newsrate=0;
- BOOL interpFilt = TRUE; /* TRUE means interpolate filter coeffs */
- BOOL largeFilter = FALSE; /* TRUE means use 65-tap FIR filter */
- BOOL linearInterp = FALSE; /* TRUE => no filter, linearly interpolate */
- BOOL knowFactor = FALSE; /* Used to detect insufficient command-line spec */
- int inCount, outCount, outCountReal;
- int infd, outfd, insrate, nChans, result;
- int inType, inFormat;
- int outType, outFormat;
-
- struct stat statbuf;
- char *insfname, *outsfname, *argv0;
- char filterFile[512] = "";
-
- if (argc == 1) {
- fprintf(stderr, USAGE);
- exit(1);
- }
-
- argv0 = argv[0];
- while (--argc && **(++argv)=='-') {
- ++(argv[0]); /* skip over '-' */
- switch (*argv[0]) {
- case 'a': /* -aaaQuality (old name) */
- case 'e': /* -expensive */
- largeFilter = TRUE;
- if (trace)
- printf("Choosing higher quality filter.\n");
- break;
- case 'b': /* -by factor */
- if (--argc)
- sscanf(*(++argv),"%lf",&factor);
- if (trace)
- printf("Sampling-rate conversion factor set to %f.\n",factor);
- knowFactor = TRUE;
- break;
- case 'f': /* -filter filterFile */
- if (--argc)
- strcpy(filterFile, *++argv);
- else
- fail("Need to specify filter file name");
- if (trace)
- printf("Filter file set to %s.\n",filterFile);
- break;
- case 'l': /* -linearInpterpolation */
- linearInterp = TRUE;
- if (trace)
- printf("Using linear instead of bandlimited interpolation\n");
- break;
- case 'n': /* -noFilterInterpolation */
- interpFilt = FALSE;
- if (trace)
- printf("Filter-table interpolation disabled.\n");
- break;
- case 't':
- if (*(argv[0]+1) == 'e') { /* -terse */
- trace = 0;
- break;
- }
- if (--argc) /* -to srate */
- sscanf(*(++argv),"%lf",&newsrate);
- if (trace)
- printf("Target sampling-rate set to %f.\n",newsrate);
- knowFactor = TRUE;
- break;
- case 'v': /* -version */
- printf(resampleVersion);
- if (argc == 1)
- exit(0);
- break;
- default:
- fprintf(stderr,"Unknown switch -%s\n",argv[0]);
- fprintf(stderr,USAGE);
- exit(1);
- }
- }
-
- if (!knowFactor)
- fail("Must specify sampling-rate conversion factor via '-to' or '-by' option");
-
- if (argc < 1)
- fail("Need to specify input soundfile");
- insfname = *argv;
-
- if (argc < 2) {
- fprintf(stderr, USAGE);
- exit(1);
- }
- else
- outsfname = *++argv;
-
- /* Test whether output file name exists. If so, bail... */
- result = stat(outsfname, &statbuf);
- if (result != -1)
- fails("\"%s\" already exists", outsfname);
- if (errno != ENOENT)
- fails("Error creating output file (%s)", strerror(errno));
-
- if (trace)
- printf("Writing output to \"%s\".\n", outsfname);
-
- /* Open input file and gather info from its header */
- // resample-1.8: infd = sndlib_open_read(insfname);
- infd = mus_sound_open_input(insfname);
- if (infd == -1)
- fails("Could not open input file \"%s\"", insfname);
- if (NOT_A_SOUND_FILE(mus_header_type()))
- fails("\"%s\" is probably not a sound file.", insfname);
- nChans = mus_header_chans();
- insrate = mus_header_srate();
- inCount = mus_header_samples();
- inType = mus_header_type(); /* header type (i.e. aiff, wave, etc) (see sndlib.h) */
- inFormat = mus_header_format(); /* data format (see sndlib.h) */
- inCount /= nChans; /* to get sample frames */
-
-/*
- * Set output soundfile format.
- * See sndlib.h for supported types (e.g., MUS_RIFF).
- */
- outType = inType;
- outFormat = inFormat;
-
- /* Compute sampling rate conversion factor, if not specified. */
- if (newsrate>0) {
- if (factor>0)
- fprintf(stderr, "Command-line sampling-rate conversion factor "
- "ignored ... the '-to' option overrides the '-by' option.\n");
- factor = newsrate / (double)insrate;
- if (trace)
- printf("Sampling rate conversion factor set to %f\n",factor);
- }
-
- if (factor < 0) {
- factor = -factor;
- factor = GetDouble("Sampling-rate conversion factor",factor,"");
- }
-
- if (newsrate <= 0)
- newsrate = (int)((double)insrate * factor + 0.5); /* round */
-
- sprintf(comment,"%s -by %f %s%s%s%s%s%s%s %s",argv0,factor,
- (largeFilter?"-expensiveFilter ":""),
- (strcmp(filterFile,"")==0?"":"-f "),
- (strcmp(filterFile,"")==0?"":filterFile),
- (strcmp(filterFile,"")==0?"":" "),
- (linearInterp? "-linearSigInterp ":""),
- (interpFilt? "":"-noFilterInterp "),
- insfname, outsfname);
-
- outfd = sndlib_create(outsfname, inType, inFormat, newsrate, nChans, comment);
- if (outfd == -1)
- fails("Could not create output file \"%s\"", outsfname);
- outCount = (int)(factor * (double)inCount + 0.5); /* output frames */
-
- printf("\nStarting Conversion\n");
- outCountReal = resample(factor, infd, outfd, inCount, outCount, nChans,
- interpFilt, linearInterp, largeFilter, filterFile);
-
- if (outCountReal <= 0)
- fail("Conversion factor out of range");
-
- if (trace && (outCount != outCountReal))
- fprintf(stderr,
- "outCount = %d, outCountReal = %d\n",outCount,outCountReal);
-
- // resample-1.8: sndlib_close(infd, FALSE, 0, 0, 0);
- mus_file_close(infd);
-
- /* Output samps already written; just update header and close file. */
- // resample-1.8: if (sndlib_close(outfd, 1, outType, outFormat, outCountReal * nChans))
- // resample-1.8: fails("Error closing output file (%s)", strerror(errno));
- mus_file_close(outfd);
- int sound_bytes = outCountReal * nChans * mus_bytes_per_sample(outFormat);
- mus_header_change_data_size(outsfname, inType, sound_bytes);
-
- printf("\nConversion Finished: %d output samples.\n\n",outCount);
-
- return(0);
-}
diff --git a/third_party/resample/src/resample.h b/third_party/resample/src/resample.h
deleted file mode 100644
index c09e891b..00000000
--- a/third_party/resample/src/resample.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * FILE: resample.h
- *
- * The configuration constants below govern
- * the number of bits in the input sample and filter coefficients, the
- * number of bits to the right of the binary-point for fixed-point math, etc.
- *
- */
-
-#include "stdefs.h"
-
-/* Conversion constants */
-#define Nhc 8
-#define Na 7
-#define Np (Nhc+Na)
-#define Npc (1<<Nhc)
-#define Amask ((1<<Na)-1)
-#define Pmask ((1<<Np)-1)
-#define Nh 16
-#define Nb 16
-#define Nhxn 14
-#define Nhg (Nh-Nhxn)
-#define NLpScl 13
-
-/* Description of constants:
- *
- * Npc - is the number of look-up values available for the lowpass filter
- * between the beginning of its impulse response and the "cutoff time"
- * of the filter. The cutoff time is defined as the reciprocal of the
- * lowpass-filter cut off frequence in Hz. For example, if the
- * lowpass filter were a sinc function, Npc would be the index of the
- * impulse-response lookup-table corresponding to the first zero-
- * crossing of the sinc function. (The inverse first zero-crossing
- * time of a sinc function equals its nominal cutoff frequency in Hz.)
- * Npc must be a power of 2 due to the details of the current
- * implementation. The default value of 512 is sufficiently high that
- * using linear interpolation to fill in between the table entries
- * gives approximately 16-bit accuracy in filter coefficients.
- *
- * Nhc - is log base 2 of Npc.
- *
- * Na - is the number of bits devoted to linear interpolation of the
- * filter coefficients.
- *
- * Np - is Na + Nhc, the number of bits to the right of the binary point
- * in the integer "time" variable. To the left of the point, it indexes
- * the input array (X), and to the right, it is interpreted as a number
- * between 0 and 1 sample of the input X. Np must be less than 16 in
- * this implementation.
- *
- * Nh - is the number of bits in the filter coefficients. The sum of Nh and
- * the number of bits in the input data (typically 16) cannot exceed 32.
- * Thus Nh should be 16. The largest filter coefficient should nearly
- * fill 16 bits (32767).
- *
- * Nb - is the number of bits in the input data. The sum of Nb and Nh cannot
- * exceed 32.
- *
- * Nhxn - is the number of bits to right shift after multiplying each input
- * sample times a filter coefficient. It can be as great as Nh and as
- * small as 0. Nhxn = Nh-2 gives 2 guard bits in the multiply-add
- * accumulation. If Nhxn=0, the accumulation will soon overflow 32 bits.
- *
- * Nhg - is the number of guard bits in mpy-add accumulation (equal to Nh-Nhxn)
- *
- * NLpScl - is the number of bits allocated to the unity-gain normalization
- * factor. The output of the lowpass filter is multiplied by LpScl and
- * then right-shifted NLpScl bits. To avoid overflow, we must have
- * Nb+Nhg+NLpScl < 32.
- */
-
-
-int resample( /* number of output sample returned */
- double factor, /* factor = Sndout/Sndin */
- int infd, /* input and output file descriptors */
- int outfd,
- int inCount, /* number of input samples to convert */
- int outCount, /* number of output samples to compute */
- int nChans, /* number of sound channels (1 or 2) */
- BOOL interpFilt, /* TRUE means interpolate filter coeffs */
- int fastMode, /* 0 = highest quality, slowest speed */
- BOOL largeFilter, /* TRUE means use 65-tap FIR filter */
- char *filterFile /* NULL for internal filter, else filename */
-);
-
-//#define MUS_SAMPLE_TYPE mus_sample_t; // more incompatible changes to sndlib
diff --git a/third_party/resample/src/resamplesubs.c b/third_party/resample/src/resamplesubs.c
deleted file mode 100644
index 920e56e6..00000000
--- a/third_party/resample/src/resamplesubs.c
+++ /dev/null
@@ -1,520 +0,0 @@
-/* resamplesubs.c - sampling rate conversion subroutines */
-// Altered version
-
-#include "resample.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-
-#define IBUFFSIZE 4096 /* Input buffer size */
-
-#include "smallfilter.h"
-#include "largefilter.h"
-
-#include "filterkit.h"
-#include "sndlibextra.h"
-
-#ifdef WITH_PJ
-#include "resamplesubs.h"
-
-unsigned resample_LARGE_FILTER_NMULT = LARGE_FILTER_NMULT;
-unsigned resample_LARGE_FILTER_NWING = LARGE_FILTER_NWING;
-unsigned resample_LARGE_FILTER_SCALE = LARGE_FILTER_SCALE;
-short* resample_LARGE_FILTER_IMP = LARGE_FILTER_IMP;
-short* resample_LARGE_FILTER_IMPD = LARGE_FILTER_IMPD;
-
-unsigned resample_SMALL_FILTER_NMULT = SMALL_FILTER_NMULT;
-unsigned resample_SMALL_FILTER_NWING = SMALL_FILTER_NWING;
-unsigned resample_SMALL_FILTER_SCALE = SMALL_FILTER_SCALE;
-short* resample_SMALL_FILTER_IMP = SMALL_FILTER_IMP;
-short* resample_SMALL_FILTER_IMPD = SMALL_FILTER_IMPD;
-#endif
-
-
-/* CAUTION: Assumes we call this for only one resample job per program run! */
-/* return: 0 - notDone */
-/* >0 - index of last sample */
-static int
-readData(int infd, /* input file descriptor */
- int inCount, /* _total_ number of frames in input file */
- HWORD *outPtr1, /* array receiving left chan samps */
- HWORD *outPtr2, /* array receiving right chan samps */
- int dataArraySize, /* size of these arrays */
- int nChans,
- int Xoff) /* read into input array starting at this index */
-{
- int i, Nsamps, nret;
- static unsigned int framecount; /* frames previously read */
- static mus_sample_t **ibufs = NULL;
-
- if (ibufs == NULL) { /* first time called, so allocate it */
- ibufs = sndlib_allocate_buffers(nChans, dataArraySize);
- if (ibufs == NULL) {
- fprintf(stderr, "readData: Can't allocate input buffers!\n");
- exit(1);
- }
- framecount = 0; /* init this too */
- }
-
- Nsamps = dataArraySize - Xoff; /* Calculate number of samples to get */
- outPtr1 += Xoff; /* Start at designated sample number */
- outPtr2 += Xoff;
-
- nret = mus_file_read(infd, 0, Nsamps - 1, nChans, ibufs);
- if (nret < 0) {
- fprintf(stderr, "readData: Can't read data!\n");
- exit(1);
- }
-
- /* NB: sndlib pads ibufs with zeros if it reads past EOF. */
- if (nChans == 1) {
- for (i = 0; i < Nsamps; i++)
- *outPtr1++ = MUS_SAMPLE_TYPE_TO_HWORD(ibufs[0][i]);
- }
- else {
- for (i = 0; i < Nsamps; i++) {
- *outPtr1++ = MUS_SAMPLE_TYPE_TO_HWORD(ibufs[0][i]);
- *outPtr2++ = MUS_SAMPLE_TYPE_TO_HWORD(ibufs[1][i]);
- }
- }
-
- framecount += Nsamps;
-
- if (framecount >= (unsigned)inCount) /* return index of last samp */
- return (((Nsamps - (framecount - inCount)) - 1) + Xoff);
- else
- return 0;
-}
-
-
-#ifdef DEBUG
-static int pof = 0; /* positive overflow count */
-static int nof = 0; /* negative overflow count */
-#endif
-
-static INLINE HWORD WordToHword(WORD v, int scl)
-{
- HWORD out;
- WORD llsb = (1<<(scl-1));
- v += llsb; /* round */
- v >>= scl;
- if (v>MAX_HWORD) {
-#ifdef DEBUG
- if (pof == 0)
- fprintf(stderr, "*** resample: sound sample overflow\n");
- else if ((pof % 10000) == 0)
- fprintf(stderr, "*** resample: another ten thousand overflows\n");
- pof++;
-#endif
- v = MAX_HWORD;
- } else if (v < MIN_HWORD) {
-#ifdef DEBUG
- if (nof == 0)
- fprintf(stderr, "*** resample: sound sample (-) overflow\n");
- else if ((nof % 1000) == 0)
- fprintf(stderr, "*** resample: another thousand (-) overflows\n");
- nof++;
-#endif
- v = MIN_HWORD;
- }
- out = (HWORD) v;
- return out;
-}
-
-/* Sampling rate conversion using linear interpolation for maximum speed.
- */
-STATIC int
- SrcLinear(HWORD X[], HWORD Y[], double factor, UWORD *Time, UHWORD Nx)
-{
- HWORD iconst;
- HWORD *Xp, *Ystart;
- WORD v,x1,x2;
-
- double dt; /* Step through input signal */
- UWORD dtb; /* Fixed-point version of Dt */
- UWORD endTime; /* When Time reaches EndTime, return to user */
-
- dt = 1.0/factor; /* Output sampling period */
- dtb = dt*(1<<Np) + 0.5; /* Fixed-point representation */
-
- Ystart = Y;
- endTime = *Time + (1<<Np)*(WORD)Nx;
- while (*Time < endTime)
- {
- iconst = (*Time) & Pmask;
- Xp = &X[(*Time)>>Np]; /* Ptr to current input sample */
- x1 = *Xp++;
- x2 = *Xp;
- x1 *= ((1<<Np)-iconst);
- x2 *= iconst;
- v = x1 + x2;
- *Y++ = WordToHword(v,Np); /* Deposit output */
- *Time += dtb; /* Move to next sample by time increment */
- }
- return (Y - Ystart); /* Return number of output samples */
-}
-
-/* Sampling rate up-conversion only subroutine;
- * Slightly faster than down-conversion;
- */
-STATIC int SrcUp(HWORD X[], HWORD Y[], double factor, UWORD *Time,
- UHWORD Nx, UHWORD Nwing, UHWORD LpScl,
- HWORD Imp[], HWORD ImpD[], BOOL Interp)
-{
- HWORD *Xp, *Ystart;
- WORD v;
-
- double dt; /* Step through input signal */
- UWORD dtb; /* Fixed-point version of Dt */
- UWORD endTime; /* When Time reaches EndTime, return to user */
-
- dt = 1.0/factor; /* Output sampling period */
- dtb = dt*(1<<Np) + 0.5; /* Fixed-point representation */
-
- Ystart = Y;
- endTime = *Time + (1<<Np)*(WORD)Nx;
- while (*Time < endTime)
- {
- Xp = &X[*Time>>Np]; /* Ptr to current input sample */
- /* Perform left-wing inner product */
- v = FilterUp(Imp, ImpD, Nwing, Interp, Xp, (HWORD)(*Time&Pmask),-1);
- /* Perform right-wing inner product */
- v += FilterUp(Imp, ImpD, Nwing, Interp, Xp+1,
- /* previous (triggers warning): (HWORD)((-*Time)&Pmask),1); */
- (HWORD)((((*Time)^Pmask)+1)&Pmask),1);
- v >>= Nhg; /* Make guard bits */
- v *= LpScl; /* Normalize for unity filter gain */
- *Y++ = WordToHword(v,NLpScl); /* strip guard bits, deposit output */
- *Time += dtb; /* Move to next sample by time increment */
- }
- return (Y - Ystart); /* Return the number of output samples */
-}
-
-
-/* Sampling rate conversion subroutine */
-
-STATIC int SrcUD(HWORD X[], HWORD Y[], double factor, UWORD *Time,
- UHWORD Nx, UHWORD Nwing, UHWORD LpScl,
- HWORD Imp[], HWORD ImpD[], BOOL Interp)
-{
- HWORD *Xp, *Ystart;
- WORD v;
-
- double dh; /* Step through filter impulse response */
- double dt; /* Step through input signal */
- UWORD endTime; /* When Time reaches EndTime, return to user */
- UWORD dhb, dtb; /* Fixed-point versions of Dh,Dt */
-
- dt = 1.0/factor; /* Output sampling period */
- dtb = dt*(1<<Np) + 0.5; /* Fixed-point representation */
-
- dh = MIN(Npc, factor*Npc); /* Filter sampling period */
- dhb = dh*(1<<Na) + 0.5; /* Fixed-point representation */
-
- Ystart = Y;
- endTime = *Time + (1<<Np)*(WORD)Nx;
- while (*Time < endTime)
- {
- Xp = &X[*Time>>Np]; /* Ptr to current input sample */
- v = FilterUD(Imp, ImpD, Nwing, Interp, Xp, (HWORD)(*Time&Pmask),
- -1, dhb); /* Perform left-wing inner product */
- v += FilterUD(Imp, ImpD, Nwing, Interp, Xp+1,
- /* previous (triggers warning): (HWORD)((-*Time)&Pmask), */
- (HWORD)((((*Time)^Pmask)+1)&Pmask),
- 1, dhb); /* Perform right-wing inner product */
- v >>= Nhg; /* Make guard bits */
- v *= LpScl; /* Normalize for unity filter gain */
- *Y++ = WordToHword(v,NLpScl); /* strip guard bits, deposit output */
- *Time += dtb; /* Move to next sample by time increment */
- }
- return (Y - Ystart); /* Return the number of output samples */
-}
-
-#ifndef WITH_PJ
-static int err_ret(char *s)
-{
- fprintf(stderr,"resample: %s \n\n",s); /* Display error message */
- return -1;
-}
-
-static int resampleFast( /* number of output samples returned */
- double factor, /* factor = Sndout/Sndin */
- int infd, /* input and output file descriptors */
- int outfd,
- int inCount, /* number of input samples to convert */
- int outCount, /* number of output samples to compute */
- int nChans) /* number of sound channels (1 or 2) */
-{
- UWORD Time, Time2; /* Current time/pos in input sample */
- UHWORD Xp, Ncreep, Xoff, Xread;
- int OBUFFSIZE = (int)(((double)IBUFFSIZE)*factor+2.0);
- HWORD X1[IBUFFSIZE], Y1[2]; /* I/O buffers */
- HWORD X2[IBUFFSIZE], Y2[OBUFFSIZE]; /* I/O buffers */
- UHWORD Nout, Nx;
- int i, Ycount, last;
-
- mus_sample_t **obufs = sndlib_allocate_buffers(nChans, OBUFFSIZE);
- if (obufs == NULL)
- return err_ret("Can't allocate output buffers");
-
- Xoff = 10;
-
- Nx = IBUFFSIZE - 2*Xoff; /* # of samples to process each iteration */
- last = 0; /* Have not read last input sample yet */
- Ycount = 0; /* Current sample and length of output file */
-
- Xp = Xoff; /* Current "now"-sample pointer for input */
- Xread = Xoff; /* Position in input array to read into */
- Time = (Xoff<<Np); /* Current-time pointer for converter */
-
- for (i=0; i<Xoff; X1[i++]=0); /* Need Xoff zeros at begining of sample */
- for (i=0; i<Xoff; X2[i++]=0); /* Need Xoff zeros at begining of sample */
-
- do {
- if (!last) /* If haven't read last sample yet */
- {
- last = readData(infd, inCount, X1, X2, IBUFFSIZE,
- nChans, (int)Xread);
- if (last && (last-Xoff<Nx)) { /* If last sample has been read... */
- Nx = last-Xoff; /* ...calc last sample affected by filter */
- if (Nx <= 0)
- break;
- }
- }
-
- /* Resample stuff in input buffer */
- Time2 = Time;
- Nout=SrcLinear(X1,Y1,factor,&Time,Nx);
- if (nChans==2)
- Nout=SrcLinear(X2,Y2,factor,&Time2,Nx);
-
- Time -= (Nx<<Np); /* Move converter Nx samples back in time */
- Xp += Nx; /* Advance by number of samples processed */
- Ncreep = (Time>>Np) - Xoff; /* Calc time accumulation in Time */
- if (Ncreep) {
- Time -= (Ncreep<<Np); /* Remove time accumulation */
- Xp += Ncreep; /* and add it to read pointer */
- }
- for (i=0; i<IBUFFSIZE-Xp+Xoff; i++) { /* Copy part of input signal */
- X1[i] = X1[i+Xp-Xoff]; /* that must be re-used */
- if (nChans==2)
- X2[i] = X2[i+Xp-Xoff]; /* that must be re-used */
- }
- if (last) { /* If near end of sample... */
- last -= Xp; /* ...keep track were it ends */
- if (!last) /* Lengthen input by 1 sample if... */
- last++; /* ...needed to keep flag TRUE */
- }
- Xread = i; /* Pos in input buff to read new data into */
- Xp = Xoff;
-
- Ycount += Nout;
- if (Ycount>outCount) {
- Nout -= (Ycount-outCount);
- Ycount = outCount;
- }
-
- if (Nout > OBUFFSIZE) /* Check to see if output buff overflowed */
- return err_ret("Output array overflow");
-
- if (nChans==1) {
- for (i = 0; i < Nout; i++)
- obufs[0][i] = HWORD_TO_MUS_SAMPLE_TYPE(Y1[i]);
- } else {
- for (i = 0; i < Nout; i++) {
- obufs[0][i] = HWORD_TO_MUS_SAMPLE_TYPE(Y1[i]);
- obufs[1][i] = HWORD_TO_MUS_SAMPLE_TYPE(Y2[i]);
- }
- }
- /* NB: errors reported within sndlib */
- mus_file_write(outfd, 0, Nout - 1, nChans, obufs);
-
- printf("."); fflush(stdout);
-
- } while (Ycount<outCount); /* Continue until done */
-
- return(Ycount); /* Return # of samples in output file */
-}
-
-
-static int resampleWithFilter( /* number of output samples returned */
- double factor, /* factor = outSampleRate/inSampleRate */
- int infd, /* input and output file descriptors */
- int outfd,
- int inCount, /* number of input samples to convert */
- int outCount, /* number of output samples to compute */
- int nChans, /* number of sound channels (1 or 2) */
- BOOL interpFilt, /* TRUE means interpolate filter coeffs */
- HWORD Imp[], HWORD ImpD[],
- UHWORD LpScl, UHWORD Nmult, UHWORD Nwing)
-{
- UWORD Time, Time2; /* Current time/pos in input sample */
- UHWORD Xp, Ncreep, Xoff, Xread;
- int OBUFFSIZE = (int)(((double)IBUFFSIZE)*factor+2.0);
- HWORD X1[IBUFFSIZE], Y1[OBUFFSIZE]; /* I/O buffers */
- HWORD X2[IBUFFSIZE], Y2[OBUFFSIZE]; /* I/O buffers */
- UHWORD Nout, Nx;
- int i, Ycount, last;
-
- mus_sample_t **obufs = sndlib_allocate_buffers(nChans, OBUFFSIZE);
- if (obufs == NULL)
- return err_ret("Can't allocate output buffers");
-
- /* Account for increased filter gain when using factors less than 1 */
- if (factor < 1)
- LpScl = LpScl*factor + 0.5;
-
- /* Calc reach of LP filter wing & give some creeping room */
- Xoff = ((Nmult+1)/2.0) * MAX(1.0,1.0/factor) + 10;
-
- if (IBUFFSIZE < 2*Xoff) /* Check input buffer size */
- return err_ret("IBUFFSIZE (or factor) is too small");
-
- Nx = IBUFFSIZE - 2*Xoff; /* # of samples to process each iteration */
-
- last = 0; /* Have not read last input sample yet */
- Ycount = 0; /* Current sample and length of output file */
- Xp = Xoff; /* Current "now"-sample pointer for input */
- Xread = Xoff; /* Position in input array to read into */
- Time = (Xoff<<Np); /* Current-time pointer for converter */
-
- for (i=0; i<Xoff; X1[i++]=0); /* Need Xoff zeros at begining of sample */
- for (i=0; i<Xoff; X2[i++]=0); /* Need Xoff zeros at begining of sample */
-
- do {
- if (!last) /* If haven't read last sample yet */
- {
- last = readData(infd, inCount, X1, X2, IBUFFSIZE,
- nChans, (int)Xread);
- if (last && (last-Xoff<Nx)) { /* If last sample has been read... */
- Nx = last-Xoff; /* ...calc last sample affected by filter */
- if (Nx <= 0)
- break;
- }
- }
- /* Resample stuff in input buffer */
- Time2 = Time;
- if (factor >= 1) { /* SrcUp() is faster if we can use it */
- Nout=SrcUp(X1,Y1,factor,&Time,Nx,Nwing,LpScl,Imp,ImpD,interpFilt);
- if (nChans==2)
- Nout=SrcUp(X2,Y2,factor,&Time2,Nx,Nwing,LpScl,Imp,ImpD,
- interpFilt);
- }
- else {
- Nout=SrcUD(X1,Y1,factor,&Time,Nx,Nwing,LpScl,Imp,ImpD,interpFilt);
- if (nChans==2)
- Nout=SrcUD(X2,Y2,factor,&Time2,Nx,Nwing,LpScl,Imp,ImpD,
- interpFilt);
- }
-
- Time -= (Nx<<Np); /* Move converter Nx samples back in time */
- Xp += Nx; /* Advance by number of samples processed */
- Ncreep = (Time>>Np) - Xoff; /* Calc time accumulation in Time */
- if (Ncreep) {
- Time -= (Ncreep<<Np); /* Remove time accumulation */
- Xp += Ncreep; /* and add it to read pointer */
- }
- for (i=0; i<IBUFFSIZE-Xp+Xoff; i++) { /* Copy part of input signal */
- X1[i] = X1[i+Xp-Xoff]; /* that must be re-used */
- if (nChans==2)
- X2[i] = X2[i+Xp-Xoff]; /* that must be re-used */
- }
- if (last) { /* If near end of sample... */
- last -= Xp; /* ...keep track were it ends */
- if (!last) /* Lengthen input by 1 sample if... */
- last++; /* ...needed to keep flag TRUE */
- }
- Xread = i; /* Pos in input buff to read new data into */
- Xp = Xoff;
-
- Ycount += Nout;
- if (Ycount>outCount) {
- Nout -= (Ycount-outCount);
- Ycount = outCount;
- }
-
- if (Nout > OBUFFSIZE) /* Check to see if output buff overflowed */
- return err_ret("Output array overflow");
-
- if (nChans==1) {
- for (i = 0; i < Nout; i++)
- obufs[0][i] = HWORD_TO_MUS_SAMPLE_TYPE(Y1[i]);
- } else {
- for (i = 0; i < Nout; i++) {
- obufs[0][i] = HWORD_TO_MUS_SAMPLE_TYPE(Y1[i]);
- obufs[1][i] = HWORD_TO_MUS_SAMPLE_TYPE(Y2[i]);
- }
- }
- /* NB: errors reported within sndlib */
- mus_file_write(outfd, 0, Nout - 1, nChans, obufs);
-
- printf("."); fflush(stdout);
-
- } while (Ycount<outCount); /* Continue until done */
-
- return(Ycount); /* Return # of samples in output file */
-}
-
-
-int resample( /* number of output samples returned */
- double factor, /* factor = Sndout/Sndin */
- int infd, /* input and output file descriptors */
- int outfd,
- int inCount, /* number of input samples to convert */
- int outCount, /* number of output samples to compute */
- int nChans, /* number of sound channels (1 or 2) */
- BOOL interpFilt, /* TRUE means interpolate filter coeffs */
- int fastMode, /* 0 = highest quality, slowest speed */
- BOOL largeFilter, /* TRUE means use 65-tap FIR filter */
- char *filterFile) /* NULL for internal filter, else filename */
-{
- UHWORD LpScl; /* Unity-gain scale factor */
- UHWORD Nwing; /* Filter table size */
- UHWORD Nmult; /* Filter length for up-conversions */
- HWORD *Imp=0; /* Filter coefficients */
- HWORD *ImpD=0; /* ImpD[n] = Imp[n+1]-Imp[n] */
-
- if (fastMode)
- return resampleFast(factor,infd,outfd,inCount,outCount,nChans);
-
-#ifdef DEBUG
- /* Check for illegal constants */
- if (Np >= 16)
- return err_ret("Error: Np>=16");
- if (Nb+Nhg+NLpScl >= 32)
- return err_ret("Error: Nb+Nhg+NLpScl>=32");
- if (Nh+Nb > 32)
- return err_ret("Error: Nh+Nb>32");
-#endif
-
- /* Set defaults */
-
- if (filterFile != NULL && *filterFile != '\0') {
- if (readFilter(filterFile, &Imp, &ImpD, &LpScl, &Nmult, &Nwing))
- return err_ret("could not find filter file, "
- "or syntax error in contents of filter file");
- } else if (largeFilter) {
- Nmult = LARGE_FILTER_NMULT;
- Imp = LARGE_FILTER_IMP; /* Impulse response */
- ImpD = LARGE_FILTER_IMPD; /* Impulse response deltas */
- LpScl = LARGE_FILTER_SCALE; /* Unity-gain scale factor */
- Nwing = LARGE_FILTER_NWING; /* Filter table length */
- } else {
- Nmult = SMALL_FILTER_NMULT;
- Imp = SMALL_FILTER_IMP; /* Impulse response */
- ImpD = SMALL_FILTER_IMPD; /* Impulse response deltas */
- LpScl = SMALL_FILTER_SCALE; /* Unity-gain scale factor */
- Nwing = SMALL_FILTER_NWING; /* Filter table length */
- }
-#if DEBUG
- fprintf(stderr,"Attenuating resampler scale factor by 0.95 "
- "to reduce probability of clipping\n");
-#endif
- LpScl *= 0.95;
- return resampleWithFilter(factor,infd,outfd,inCount,outCount,nChans,
- interpFilt, Imp, ImpD, LpScl, Nmult, Nwing);
-}
-#endif /* WITH_PJ */
-
diff --git a/third_party/resample/src/smallfilter.h b/third_party/resample/src/smallfilter.h
deleted file mode 100644
index 6f6f0f84..00000000
--- a/third_party/resample/src/smallfilter.h
+++ /dev/null
@@ -1,4617 +0,0 @@
-/* Included by resamplesubs.c */
-#define SMALL_FILTER_NMULT ((HWORD)13)
-#define SMALL_FILTER_SCALE 13128 /* Unity-gain scale factor */
-#define SMALL_FILTER_NWING 1536 /* Filter table length */
-static HWORD SMALL_FILTER_IMP[] /* Impulse response */ = {
-32767,
-32766,
-32764,
-32760,
-32755,
-32749,
-32741,
-32731,
-32721,
-32708,
-32695,
-32679,
-32663,
-32645,
-32625,
-32604,
-32582,
-32558,
-32533,
-32506,
-32478,
-32448,
-32417,
-32385,
-32351,
-32316,
-32279,
-32241,
-32202,
-32161,
-32119,
-32075,
-32030,
-31984,
-31936,
-31887,
-31836,
-31784,
-31731,
-31676,
-31620,
-31563,
-31504,
-31444,
-31383,
-31320,
-31256,
-31191,
-31124,
-31056,
-30987,
-30916,
-30845,
-30771,
-30697,
-30621,
-30544,
-30466,
-30387,
-30306,
-30224,
-30141,
-30057,
-29971,
-29884,
-29796,
-29707,
-29617,
-29525,
-29433,
-29339,
-29244,
-29148,
-29050,
-28952,
-28852,
-28752,
-28650,
-28547,
-28443,
-28338,
-28232,
-28125,
-28017,
-27908,
-27797,
-27686,
-27574,
-27461,
-27346,
-27231,
-27115,
-26998,
-26879,
-26760,
-26640,
-26519,
-26398,
-26275,
-26151,
-26027,
-25901,
-25775,
-25648,
-25520,
-25391,
-25262,
-25131,
-25000,
-24868,
-24735,
-24602,
-24467,
-24332,
-24197,
-24060,
-23923,
-23785,
-23647,
-23507,
-23368,
-23227,
-23086,
-22944,
-22802,
-22659,
-22515,
-22371,
-22226,
-22081,
-21935,
-21789,
-21642,
-21494,
-21346,
-21198,
-21049,
-20900,
-20750,
-20600,
-20449,
-20298,
-20146,
-19995,
-19842,
-19690,
-19537,
-19383,
-19230,
-19076,
-18922,
-18767,
-18612,
-18457,
-18302,
-18146,
-17990,
-17834,
-17678,
-17521,
-17365,
-17208,
-17051,
-16894,
-16737,
-16579,
-16422,
-16264,
-16106,
-15949,
-15791,
-15633,
-15475,
-15317,
-15159,
-15001,
-14843,
-14685,
-14527,
-14369,
-14212,
-14054,
-13896,
-13739,
-13581,
-13424,
-13266,
-13109,
-12952,
-12795,
-12639,
-12482,
-12326,
-12170,
-12014,
-11858,
-11703,
-11548,
-11393,
-11238,
-11084,
-10929,
-10776,
-10622,
-10469,
-10316,
-10164,
-10011,
-9860,
-9708,
-9557,
-9407,
-9256,
-9106,
-8957,
-8808,
-8659,
-8511,
-8364,
-8216,
-8070,
-7924,
-7778,
-7633,
-7488,
-7344,
-7200,
-7057,
-6914,
-6773,
-6631,
-6490,
-6350,
-6210,
-6071,
-5933,
-5795,
-5658,
-5521,
-5385,
-5250,
-5115,
-4981,
-4848,
-4716,
-4584,
-4452,
-4322,
-4192,
-4063,
-3935,
-3807,
-3680,
-3554,
-3429,
-3304,
-3180,
-3057,
-2935,
-2813,
-2692,
-2572,
-2453,
-2335,
-2217,
-2101,
-1985,
-1870,
-1755,
-1642,
-1529,
-1418,
-1307,
-1197,
-1088,
-979,
-872,
-765,
-660,
-555,
-451,
-348,
-246,
-145,
-44,
--54,
--153,
--250,
--347,
--443,
--537,
--631,
--724,
--816,
--908,
--998,
--1087,
--1175,
--1263,
--1349,
--1435,
--1519,
--1603,
--1685,
--1767,
--1848,
--1928,
--2006,
--2084,
--2161,
--2237,
--2312,
--2386,
--2459,
--2531,
--2603,
--2673,
--2742,
--2810,
--2878,
--2944,
--3009,
--3074,
--3137,
--3200,
--3261,
--3322,
--3381,
--3440,
--3498,
--3554,
--3610,
--3665,
--3719,
--3772,
--3824,
--3875,
--3925,
--3974,
--4022,
--4069,
--4116,
--4161,
--4205,
--4249,
--4291,
--4333,
--4374,
--4413,
--4452,
--4490,
--4527,
--4563,
--4599,
--4633,
--4666,
--4699,
--4730,
--4761,
--4791,
--4820,
--4848,
--4875,
--4901,
--4926,
--4951,
--4974,
--4997,
--5019,
--5040,
--5060,
--5080,
--5098,
--5116,
--5133,
--5149,
--5164,
--5178,
--5192,
--5205,
--5217,
--5228,
--5238,
--5248,
--5257,
--5265,
--5272,
--5278,
--5284,
--5289,
--5293,
--5297,
--5299,
--5301,
--5303,
--5303,
--5303,
--5302,
--5300,
--5298,
--5295,
--5291,
--5287,
--5282,
--5276,
--5270,
--5263,
--5255,
--5246,
--5237,
--5228,
--5217,
--5206,
--5195,
--5183,
--5170,
--5157,
--5143,
--5128,
--5113,
--5097,
--5081,
--5064,
--5047,
--5029,
--5010,
--4991,
--4972,
--4952,
--4931,
--4910,
--4889,
--4867,
--4844,
--4821,
--4797,
--4774,
--4749,
--4724,
--4699,
--4673,
--4647,
--4620,
--4593,
--4566,
--4538,
--4510,
--4481,
--4452,
--4422,
--4393,
--4363,
--4332,
--4301,
--4270,
--4238,
--4206,
--4174,
--4142,
--4109,
--4076,
--4042,
--4009,
--3975,
--3940,
--3906,
--3871,
--3836,
--3801,
--3765,
--3729,
--3693,
--3657,
--3620,
--3584,
--3547,
--3510,
--3472,
--3435,
--3397,
--3360,
--3322,
--3283,
--3245,
--3207,
--3168,
--3129,
--3091,
--3052,
--3013,
--2973,
--2934,
--2895,
--2855,
--2816,
--2776,
--2736,
--2697,
--2657,
--2617,
--2577,
--2537,
--2497,
--2457,
--2417,
--2377,
--2337,
--2297,
--2256,
--2216,
--2176,
--2136,
--2096,
--2056,
--2016,
--1976,
--1936,
--1896,
--1856,
--1817,
--1777,
--1737,
--1698,
--1658,
--1619,
--1579,
--1540,
--1501,
--1462,
--1423,
--1384,
--1345,
--1306,
--1268,
--1230,
--1191,
--1153,
--1115,
--1077,
--1040,
--1002,
--965,
--927,
--890,
--854,
--817,
--780,
--744,
--708,
--672,
--636,
--600,
--565,
--530,
--494,
--460,
--425,
--391,
--356,
--322,
--289,
--255,
--222,
--189,
--156,
--123,
--91,
--59,
--27,
-4,
-35,
-66,
-97,
-127,
-158,
-188,
-218,
-247,
-277,
-306,
-334,
-363,
-391,
-419,
-447,
-474,
-501,
-528,
-554,
-581,
-606,
-632,
-657,
-683,
-707,
-732,
-756,
-780,
-803,
-827,
-850,
-872,
-895,
-917,
-939,
-960,
-981,
-1002,
-1023,
-1043,
-1063,
-1082,
-1102,
-1121,
-1139,
-1158,
-1176,
-1194,
-1211,
-1228,
-1245,
-1262,
-1278,
-1294,
-1309,
-1325,
-1340,
-1354,
-1369,
-1383,
-1397,
-1410,
-1423,
-1436,
-1448,
-1461,
-1473,
-1484,
-1496,
-1507,
-1517,
-1528,
-1538,
-1548,
-1557,
-1566,
-1575,
-1584,
-1592,
-1600,
-1608,
-1616,
-1623,
-1630,
-1636,
-1643,
-1649,
-1654,
-1660,
-1665,
-1670,
-1675,
-1679,
-1683,
-1687,
-1690,
-1694,
-1697,
-1700,
-1702,
-1704,
-1706,
-1708,
-1709,
-1711,
-1712,
-1712,
-1713,
-1713,
-1713,
-1713,
-1712,
-1711,
-1710,
-1709,
-1708,
-1706,
-1704,
-1702,
-1700,
-1697,
-1694,
-1691,
-1688,
-1685,
-1681,
-1677,
-1673,
-1669,
-1664,
-1660,
-1655,
-1650,
-1644,
-1639,
-1633,
-1627,
-1621,
-1615,
-1609,
-1602,
-1596,
-1589,
-1582,
-1575,
-1567,
-1560,
-1552,
-1544,
-1536,
-1528,
-1520,
-1511,
-1503,
-1494,
-1485,
-1476,
-1467,
-1458,
-1448,
-1439,
-1429,
-1419,
-1409,
-1399,
-1389,
-1379,
-1368,
-1358,
-1347,
-1337,
-1326,
-1315,
-1304,
-1293,
-1282,
-1271,
-1260,
-1248,
-1237,
-1225,
-1213,
-1202,
-1190,
-1178,
-1166,
-1154,
-1142,
-1130,
-1118,
-1106,
-1094,
-1081,
-1069,
-1057,
-1044,
-1032,
-1019,
-1007,
-994,
-981,
-969,
-956,
-943,
-931,
-918,
-905,
-892,
-879,
-867,
-854,
-841,
-828,
-815,
-802,
-790,
-777,
-764,
-751,
-738,
-725,
-713,
-700,
-687,
-674,
-662,
-649,
-636,
-623,
-611,
-598,
-585,
-573,
-560,
-548,
-535,
-523,
-510,
-498,
-486,
-473,
-461,
-449,
-437,
-425,
-413,
-401,
-389,
-377,
-365,
-353,
-341,
-330,
-318,
-307,
-295,
-284,
-272,
-261,
-250,
-239,
-228,
-217,
-206,
-195,
-184,
-173,
-163,
-152,
-141,
-131,
-121,
-110,
-100,
-90,
-80,
-70,
-60,
-51,
-41,
-31,
-22,
-12,
-3,
--5,
--14,
--23,
--32,
--41,
--50,
--59,
--67,
--76,
--84,
--93,
--101,
--109,
--117,
--125,
--133,
--140,
--148,
--156,
--163,
--170,
--178,
--185,
--192,
--199,
--206,
--212,
--219,
--226,
--232,
--239,
--245,
--251,
--257,
--263,
--269,
--275,
--280,
--286,
--291,
--297,
--302,
--307,
--312,
--317,
--322,
--327,
--332,
--336,
--341,
--345,
--349,
--354,
--358,
--362,
--366,
--369,
--373,
--377,
--380,
--384,
--387,
--390,
--394,
--397,
--400,
--402,
--405,
--408,
--411,
--413,
--416,
--418,
--420,
--422,
--424,
--426,
--428,
--430,
--432,
--433,
--435,
--436,
--438,
--439,
--440,
--442,
--443,
--444,
--445,
--445,
--446,
--447,
--447,
--448,
--448,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--449,
--448,
--448,
--447,
--447,
--446,
--445,
--444,
--443,
--443,
--442,
--441,
--440,
--438,
--437,
--436,
--435,
--433,
--432,
--430,
--429,
--427,
--426,
--424,
--422,
--420,
--419,
--417,
--415,
--413,
--411,
--409,
--407,
--405,
--403,
--400,
--398,
--396,
--393,
--391,
--389,
--386,
--384,
--381,
--379,
--376,
--374,
--371,
--368,
--366,
--363,
--360,
--357,
--355,
--352,
--349,
--346,
--343,
--340,
--337,
--334,
--331,
--328,
--325,
--322,
--319,
--316,
--313,
--310,
--307,
--304,
--301,
--298,
--294,
--291,
--288,
--285,
--282,
--278,
--275,
--272,
--269,
--265,
--262,
--259,
--256,
--252,
--249,
--246,
--243,
--239,
--236,
--233,
--230,
--226,
--223,
--220,
--217,
--213,
--210,
--207,
--204,
--200,
--197,
--194,
--191,
--187,
--184,
--181,
--178,
--175,
--172,
--168,
--165,
--162,
--159,
--156,
--153,
--150,
--147,
--143,
--140,
--137,
--134,
--131,
--128,
--125,
--122,
--120,
--117,
--114,
--111,
--108,
--105,
--102,
--99,
--97,
--94,
--91,
--88,
--86,
--83,
--80,
--78,
--75,
--72,
--70,
--67,
--65,
--62,
--59,
--57,
--55,
--52,
--50,
--47,
--45,
--43,
--40,
--38,
--36,
--33,
--31,
--29,
--27,
--25,
--22,
--20,
--18,
--16,
--14,
--12,
--10,
--8,
--6,
--4,
--2,
-0,
-0,
-2,
-4,
-6,
-8,
-9,
-11,
-13,
-14,
-16,
-17,
-19,
-21,
-22,
-24,
-25,
-27,
-28,
-29,
-31,
-32,
-33,
-35,
-36,
-37,
-38,
-40,
-41,
-42,
-43,
-44,
-45,
-46,
-47,
-48,
-49,
-50,
-51,
-52,
-53,
-54,
-55,
-56,
-56,
-57,
-58,
-59,
-59,
-60,
-61,
-62,
-62,
-63,
-63,
-64,
-64,
-65,
-66,
-66,
-66,
-67,
-67,
-68,
-68,
-69,
-69,
-69,
-70,
-70,
-70,
-70,
-71,
-71,
-71,
-71,
-71,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-72,
-71,
-71,
-71,
-71,
-71,
-70,
-70,
-70,
-70,
-69,
-69,
-69,
-69,
-68,
-68,
-68,
-67,
-67,
-67,
-66,
-66,
-66,
-65,
-65,
-64,
-64,
-64,
-63,
-63,
-62,
-62,
-62,
-61,
-61,
-60,
-60,
-59,
-59,
-58,
-58,
-58,
-57,
-57,
-56,
-56,
-55,
-55,
-54,
-54,
-53,
-53,
-52,
-52,
-51,
-51,
-50,
-50,
-49,
-48,
-48,
-47,
-47,
-46,
-46,
-45,
-45,
-44,
-44,
-43,
-43,
-42,
-42,
-41,
-41,
-40,
-39,
-39,
-38,
-38,
-37,
-37,
-36,
-36,
-35,
-35,
-34,
-34,
-33,
-33,
-32,
-32,
-31,
-31,
-30,
-30,
-29,
-29,
-28,
-28,
-27,
-27,
-26,
-26,
-25,
-25,
-24,
-24,
-23,
-23,
-23,
-22,
-22,
-21,
-21,
-20,
-20,
-20,
-19,
-19,
-18,
-18,
-17,
-17,
-17,
-16,
-16,
-15,
-15,
-15,
-14,
-14,
-14,
-13,
-13,
-12,
-12,
-12,
-11,
-11,
-11,
-10,
-10,
-10,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-7,
-7,
-7,
-7,
-6,
-6,
-6,
-6,
-5,
-5,
-5,
-5,
-4,
-4,
-4,
-4,
-3,
-3,
-3,
-3,
-3,
-2,
-2,
-2,
-2,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1,
--1
-};
-
-static HWORD SMALL_FILTER_IMPD[] = {
--1,
--2,
--4,
--5,
--6,
--8,
--10,
--10,
--13,
--13,
--16,
--16,
--18,
--20,
--21,
--22,
--24,
--25,
--27,
--28,
--30,
--31,
--32,
--34,
--35,
--37,
--38,
--39,
--41,
--42,
--44,
--45,
--46,
--48,
--49,
--51,
--52,
--53,
--55,
--56,
--57,
--59,
--60,
--61,
--63,
--64,
--65,
--67,
--68,
--69,
--71,
--71,
--74,
--74,
--76,
--77,
--78,
--79,
--81,
--82,
--83,
--84,
--86,
--87,
--88,
--89,
--90,
--92,
--92,
--94,
--95,
--96,
--98,
--98,
--100,
--100,
--102,
--103,
--104,
--105,
--106,
--107,
--108,
--109,
--111,
--111,
--112,
--113,
--115,
--115,
--116,
--117,
--119,
--119,
--120,
--121,
--121,
--123,
--124,
--124,
--126,
--126,
--127,
--128,
--129,
--129,
--131,
--131,
--132,
--133,
--133,
--135,
--135,
--135,
--137,
--137,
--138,
--138,
--140,
--139,
--141,
--141,
--142,
--142,
--143,
--144,
--144,
--145,
--145,
--146,
--146,
--147,
--148,
--148,
--148,
--149,
--149,
--150,
--150,
--151,
--151,
--152,
--151,
--153,
--152,
--153,
--154,
--153,
--154,
--154,
--155,
--155,
--155,
--155,
--156,
--156,
--156,
--156,
--157,
--156,
--157,
--157,
--157,
--157,
--158,
--157,
--158,
--158,
--157,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--157,
--158,
--158,
--157,
--158,
--157,
--158,
--157,
--157,
--157,
--156,
--157,
--156,
--156,
--156,
--156,
--155,
--155,
--155,
--155,
--154,
--155,
--153,
--154,
--153,
--153,
--152,
--153,
--151,
--152,
--151,
--150,
--151,
--150,
--149,
--149,
--149,
--148,
--147,
--148,
--146,
--146,
--146,
--145,
--145,
--144,
--144,
--143,
--143,
--141,
--142,
--141,
--140,
--140,
--139,
--138,
--138,
--137,
--137,
--136,
--135,
--135,
--134,
--133,
--132,
--132,
--132,
--130,
--130,
--129,
--128,
--128,
--127,
--126,
--125,
--125,
--124,
--123,
--122,
--122,
--121,
--120,
--119,
--118,
--118,
--116,
--116,
--115,
--115,
--113,
--113,
--111,
--111,
--110,
--109,
--109,
--107,
--107,
--105,
--105,
--104,
--103,
--102,
--101,
--101,
--98,
--99,
--97,
--97,
--96,
--94,
--94,
--93,
--92,
--92,
--90,
--89,
--88,
--88,
--86,
--86,
--84,
--84,
--82,
--82,
--81,
--80,
--78,
--78,
--77,
--76,
--75,
--74,
--73,
--72,
--72,
--70,
--69,
--68,
--68,
--66,
--65,
--65,
--63,
--63,
--61,
--61,
--59,
--59,
--58,
--56,
--56,
--55,
--54,
--53,
--52,
--51,
--50,
--49,
--48,
--47,
--47,
--45,
--44,
--44,
--42,
--42,
--41,
--39,
--39,
--38,
--37,
--36,
--36,
--34,
--33,
--33,
--31,
--31,
--30,
--29,
--28,
--27,
--26,
--25,
--25,
--23,
--23,
--22,
--21,
--20,
--20,
--18,
--18,
--17,
--16,
--15,
--14,
--14,
--13,
--12,
--11,
--10,
--10,
--9,
--8,
--7,
--6,
--6,
--5,
--4,
--4,
--2,
--2,
--2,
-0,
-0,
-1,
-2,
-2,
-3,
-4,
-4,
-5,
-6,
-6,
-7,
-8,
-9,
-9,
-9,
-11,
-11,
-11,
-12,
-13,
-13,
-14,
-15,
-15,
-16,
-16,
-17,
-17,
-18,
-19,
-19,
-19,
-20,
-21,
-21,
-21,
-22,
-23,
-23,
-24,
-23,
-25,
-25,
-25,
-26,
-26,
-27,
-27,
-27,
-28,
-28,
-29,
-29,
-30,
-29,
-30,
-31,
-31,
-31,
-32,
-32,
-32,
-32,
-33,
-33,
-34,
-33,
-34,
-35,
-34,
-35,
-35,
-35,
-36,
-36,
-36,
-36,
-37,
-36,
-37,
-37,
-38,
-37,
-38,
-37,
-38,
-39,
-38,
-38,
-39,
-39,
-38,
-39,
-39,
-40,
-39,
-39,
-40,
-39,
-40,
-40,
-39,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-41,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-39,
-40,
-40,
-39,
-40,
-39,
-40,
-39,
-39,
-39,
-39,
-39,
-39,
-39,
-38,
-38,
-39,
-38,
-38,
-38,
-37,
-38,
-37,
-38,
-37,
-36,
-37,
-37,
-36,
-36,
-36,
-36,
-36,
-35,
-35,
-36,
-34,
-35,
-34,
-35,
-34,
-33,
-34,
-33,
-33,
-33,
-33,
-32,
-32,
-32,
-31,
-31,
-31,
-31,
-30,
-31,
-30,
-30,
-29,
-30,
-29,
-28,
-29,
-28,
-28,
-28,
-27,
-27,
-27,
-26,
-27,
-25,
-26,
-25,
-26,
-24,
-25,
-24,
-24,
-23,
-24,
-23,
-22,
-23,
-22,
-22,
-21,
-21,
-21,
-21,
-20,
-20,
-19,
-20,
-19,
-18,
-19,
-18,
-18,
-17,
-17,
-17,
-17,
-16,
-16,
-15,
-16,
-15,
-14,
-15,
-14,
-14,
-13,
-13,
-13,
-12,
-13,
-12,
-11,
-12,
-11,
-10,
-11,
-10,
-10,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-8,
-7,
-7,
-6,
-7,
-6,
-5,
-6,
-5,
-5,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-2,
-2,
-2,
-2,
-1,
-2,
-1,
-0,
-1,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--7,
--8,
--7,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--10,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--10,
--11,
--10,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--12,
--11,
--12,
--12,
--11,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--13,
--12,
--12,
--13,
--12,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--11,
--12,
--11,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--11,
--11,
--10,
--10,
--11,
--10,
--10,
--10,
--10,
--10,
--9,
--10,
--10,
--9,
--10,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-0,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
--1,
--2,
--4,
--5,
--6,
--8,
--10,
--10,
--13,
--13,
--16,
--16,
--18,
--20,
--21,
--22,
--24,
--25,
--27,
--28,
--30,
--31,
--32,
--34,
--35,
--37,
--38,
--39,
--41,
--42,
--44,
--45,
--46,
--48,
--49,
--51,
--52,
--53,
--55,
--56,
--57,
--59,
--60,
--61,
--63,
--64,
--65,
--67,
--68,
--69,
--71,
--71,
--74,
--74,
--76,
--77,
--78,
--79,
--81,
--82,
--83,
--84,
--86,
--87,
--88,
--89,
--90,
--92,
--92,
--94,
--95,
--96,
--98,
--98,
--100,
--100,
--102,
--103,
--104,
--105,
--106,
--107,
--108,
--109,
--111,
--111,
--112,
--113,
--115,
--115,
--116,
--117,
--119,
--119,
--120,
--121,
--121,
--123,
--124,
--124,
--126,
--126,
--127,
--128,
--129,
--129,
--131,
--131,
--132,
--133,
--133,
--135,
--135,
--135,
--137,
--137,
--138,
--138,
--140,
--139,
--141,
--141,
--142,
--142,
--143,
--144,
--144,
--145,
--145,
--146,
--146,
--147,
--148,
--148,
--148,
--149,
--149,
--150,
--150,
--151,
--151,
--152,
--151,
--153,
--152,
--153,
--154,
--153,
--154,
--154,
--155,
--155,
--155,
--155,
--156,
--156,
--156,
--156,
--157,
--156,
--157,
--157,
--157,
--157,
--158,
--157,
--158,
--158,
--157,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--158,
--157,
--158,
--158,
--157,
--158,
--157,
--158,
--157,
--157,
--157,
--156,
--157,
--156,
--156,
--156,
--156,
--155,
--155,
--155,
--155,
--154,
--155,
--153,
--154,
--153,
--153,
--152,
--153,
--151,
--152,
--151,
--150,
--151,
--150,
--149,
--149,
--149,
--148,
--147,
--148,
--146,
--146,
--146,
--145,
--145,
--144,
--144,
--143,
--143,
--141,
--142,
--141,
--140,
--140,
--139,
--138,
--138,
--137,
--137,
--136,
--135,
--135,
--134,
--133,
--132,
--132,
--132,
--130,
--130,
--129,
--128,
--128,
--127,
--126,
--125,
--125,
--124,
--123,
--122,
--122,
--121,
--120,
--119,
--118,
--118,
--116,
--116,
--115,
--115,
--113,
--113,
--111,
--111,
--110,
--109,
--109,
--107,
--107,
--105,
--105,
--104,
--103,
--102,
--101,
--101,
--98,
--99,
--97,
--97,
--96,
--94,
--94,
--93,
--92,
--92,
--90,
--89,
--88,
--88,
--86,
--86,
--84,
--84,
--82,
--82,
--81,
--80,
--78,
--78,
--77,
--76,
--75,
--74,
--73,
--72,
--72,
--70,
--69,
--68,
--68,
--66,
--65,
--65,
--63,
--63,
--61,
--61,
--59,
--59,
--58,
--56,
--56,
--55,
--54,
--53,
--52,
--51,
--50,
--49,
--48,
--47,
--47,
--45,
--44,
--44,
--42,
--42,
--41,
--39,
--39,
--38,
--37,
--36,
--36,
--34,
--33,
--33,
--31,
--31,
--30,
--29,
--28,
--27,
--26,
--25,
--25,
--23,
--23,
--22,
--21,
--20,
--20,
--18,
--18,
--17,
--16,
--15,
--14,
--14,
--13,
--12,
--11,
--10,
--10,
--9,
--8,
--7,
--6,
--6,
--5,
--4,
--4,
--2,
--2,
--2,
-0,
-0,
-1,
-2,
-2,
-3,
-4,
-4,
-5,
-6,
-6,
-7,
-8,
-9,
-9,
-9,
-11,
-11,
-11,
-12,
-13,
-13,
-14,
-15,
-15,
-16,
-16,
-17,
-17,
-18,
-19,
-19,
-19,
-20,
-21,
-21,
-21,
-22,
-23,
-23,
-24,
-23,
-25,
-25,
-25,
-26,
-26,
-27,
-27,
-27,
-28,
-28,
-29,
-29,
-30,
-29,
-30,
-31,
-31,
-31,
-32,
-32,
-32,
-32,
-33,
-33,
-34,
-33,
-34,
-35,
-34,
-35,
-35,
-35,
-36,
-36,
-36,
-36,
-37,
-36,
-37,
-37,
-38,
-37,
-38,
-37,
-38,
-39,
-38,
-38,
-39,
-39,
-38,
-39,
-39,
-40,
-39,
-39,
-40,
-39,
-40,
-40,
-39,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-41,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-40,
-39,
-40,
-40,
-39,
-40,
-39,
-40,
-39,
-39,
-39,
-39,
-39,
-39,
-39,
-38,
-38,
-39,
-38,
-38,
-38,
-37,
-38,
-37,
-38,
-37,
-36,
-37,
-37,
-36,
-36,
-36,
-36,
-36,
-35,
-35,
-36,
-34,
-35,
-34,
-35,
-34,
-33,
-34,
-33,
-33,
-33,
-33,
-32,
-32,
-32,
-31,
-31,
-31,
-31,
-30,
-31,
-30,
-30,
-29,
-30,
-29,
-28,
-29,
-28,
-28,
-28,
-27,
-27,
-27,
-26,
-27,
-25,
-26,
-25,
-26,
-24,
-25,
-24,
-24,
-23,
-24,
-23,
-22,
-23,
-22,
-22,
-21,
-21,
-21,
-21,
-20,
-20,
-19,
-20,
-19,
-18,
-19,
-18,
-18,
-17,
-17,
-17,
-17,
-16,
-16,
-15,
-16,
-15,
-14,
-15,
-14,
-14,
-13,
-13,
-13,
-12,
-13,
-12,
-11,
-12,
-11,
-10,
-11,
-10,
-10,
-9,
-9,
-9,
-9,
-8,
-8,
-8,
-8,
-7,
-7,
-6,
-7,
-6,
-5,
-6,
-5,
-5,
-5,
-4,
-4,
-4,
-3,
-4,
-3,
-3,
-2,
-2,
-2,
-2,
-1,
-2,
-1,
-0,
-1,
-0,
-0,
-0,
--1,
--1,
--1,
--1,
--1,
--2,
--2,
--2,
--2,
--3,
--3,
--3,
--3,
--3,
--4,
--4,
--4,
--4,
--5,
--4,
--5,
--5,
--6,
--5,
--6,
--6,
--6,
--6,
--6,
--7,
--6,
--7,
--7,
--7,
--8,
--7,
--8,
--8,
--8,
--8,
--8,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--10,
--9,
--10,
--10,
--10,
--10,
--10,
--10,
--11,
--10,
--11,
--10,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--12,
--11,
--12,
--12,
--11,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--13,
--12,
--12,
--13,
--12,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--13,
--12,
--13,
--13,
--12,
--13,
--12,
--13,
--12,
--13,
--12,
--12,
--13,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--12,
--11,
--12,
--11,
--12,
--11,
--12,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--11,
--10,
--11,
--11,
--10,
--10,
--11,
--10,
--10,
--10,
--10,
--10,
--9,
--10,
--10,
--9,
--10,
--9,
--8,
--9,
--9,
--9,
--9,
--9,
--9,
--8,
--9,
--8,
--9,
--8,
--8,
--8,
--8,
--8,
--7,
--8,
--8,
--7,
--7,
--8,
--7,
--7,
--7,
--7,
--6,
--7,
--7,
--6,
--7,
--6,
--6,
--6,
--6,
--6,
--6,
--5,
--6,
--5,
--6,
--5,
--5,
--5,
--5,
--5,
--5,
--5,
--4,
--5,
--4,
--4,
--5,
--4,
--4,
--4,
--3,
--4,
--4,
--3,
--4,
--3,
--3,
--4,
--3,
--3,
--2,
--3,
--3,
--3,
--2,
--3,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--2,
--1,
--2,
--1,
--2,
--1,
--1,
--2,
--1,
--1,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-2,
-1,
-2,
-1,
-2,
-2,
-2,
-1,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-4,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-3,
-3,
-3,
-3,
-2,
-3,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-3,
-2,
-3,
-2,
-3,
-3,
-2,
-2,
-3,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-3,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-2,
-0,
-2,
-2,
-2,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-2,
-1,
-2,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-2,
-1,
-1,
-1,
-2,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-1,
-1,
-0,
-1,
-0,
-1,
-0,
-1,
-1,
-0,
-0,
-1,
-0,
-1,
-0,
-1,
-0,
-0,
-1,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
--1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-0,
-1
-};
diff --git a/third_party/resample/src/sndlibextra.c b/third_party/resample/src/sndlibextra.c
deleted file mode 100644
index c756cb10..00000000
--- a/third_party/resample/src/sndlibextra.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* sndlibextra.c
-
- An interface to the low-level sndlib functions contained in sndlib/headers.c
- and sndlib/io.c, designed for use by the resample program.
- (sndlibextra.c is a stripped-down version of sndlibsupport.c in RTcmix.)
-
- - John Gibson (jgg9c@virginia.edu)
-*/
-#include <assert.h>
-#include <string.h>
-#include "sndlibextra.h"
-
-/* #define NDEBUG */ /* define to disable asserts */
-
-/* ---------------------------------------------------- sndlib_create --- */
-/* Creates a new file and writes a header with the given characteristics.
- <type> is a sndlib constant for header type (e.g. MUS_AIFF).
- <format> is a sndlib constant for sound data format (e.g. snd_16_linear).
- (These constants are defined in sndlib.h.) Caller is responsible for
- checking that the header type and data format are compatible, and that
- the header type is one that sndlib can write (is WRITEABLE_HEADER_TYPE()).
- Writes no comment.
-
- NOTE: This will truncate an existing file with <sfname>, so check first!
-
- On success, returns a standard file descriptor, and leaves the file
- position pointer at the end of the header.
- On failure, returns -1. Caller can check errno then.
-*/
-int
-sndlib_create(char *sfname, /* file name */
- int type, /* file type, e.g. AIFF */
- int format, /* data format, e.g., MU-LAW */
- int srate, /* sampling rate in Hz */
- int chans, /* 1 for mono, 2 for stereo */
- char *comment)
-{
- int fd, loc;
- assert(sfname != NULL && strlen(sfname) <= FILENAME_MAX);
- mus_header_initialize(); // make sure relevant parts of sndlib are initialized
- //resample-1.8: sndlib_write_header(fd, 0, type, format, srate, chans, comment, &loc)
- //resample-1.8: mus_file_open_descriptors(fd, format, mus_header_data_format_to_bytes_per_sample(),loc);
- // int mus_file_open_descriptors(int tfd, const char *arg, int df, int ds, off_t dl, int dc, int dt);
- fd = mus_sound_open_output(sfname, srate, chans, format, type, "created by resample");
- return fd;
-}
-
-/* ------------------------------------------ sndlib_allocate_buffers --- */
-/* Allocate the multi-dimensional array required by sndlib I/O functions.
- Returns an array of <nchans> arrays of <nframes> integers. The memory
- is cleared. If the return value is NULL, check errno.
-*/
-int **
-sndlib_allocate_buffers(int nchans, int nframes)
-{
- int **bufs, n;
-
- assert(nchans > 0 && nframes > 0);
-
- bufs = (int **)calloc(nchans, sizeof(int *));
- if (bufs == NULL)
- return NULL;
-
- for (n = 0; n < nchans; n++) {
- bufs[n] = (int *)calloc(nframes, sizeof(int));
- if (bufs[n] == NULL) {
- sndlib_free_buffers(bufs, nchans);
- return NULL;
- }
- }
-
- return bufs;
-}
-
-
-/* ---------------------------------------------- sndlib_free_buffers --- */
-/* Free the multi-dimensional array <bufs> with <nchans> elements.
-*/
-void
-sndlib_free_buffers(int **bufs, int nchans)
-{
- int n;
-
- assert(bufs != NULL);
-
- for (n = 0; n < nchans; n++)
- if (bufs[n])
- free(bufs[n]);
- free(bufs);
-}
diff --git a/third_party/resample/src/sndlibextra.h b/third_party/resample/src/sndlibextra.h
deleted file mode 100644
index 536ac72c..00000000
--- a/third_party/resample/src/sndlibextra.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <endian.h> /* so that sndlib.h will get host byte-order right */
-#include <sndlib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
-/* for creating, opening and closing files for sndlib I/O */
-int sndlib_create(char *, int, int, int, int, char *);
-int sndlib_open_read(char *);
-int sndlib_open_write(char *);
-int sndlib_close(int, int, int, int, int);
-
-/* for reading and writing headers */
-int sndlib_read_header(int);
-int sndlib_write_header(int, int, int, int, int, int, char *, int *);
-int sndlib_set_header_data_size(int, int, int);
-
-/* helper functions */
-int **sndlib_allocate_buffers(int, int);
-void sndlib_free_buffers(int **, int);
-
-
-/* some handy macros */
-
-#define IS_FLOAT_FORMAT(format) ( \
- (format) == snd_32_float \
- || (format) == snd_32_float_little_endian )
-
-#define NOT_A_SOUND_FILE(header_type) ( \
- (header_type) == MUS_UNSUPPORTED \
- || (header_type) == MUS_RAW )
-
-/* The header types that sndlib can write, as of sndlib-5.5. */
-#define WRITEABLE_HEADER_TYPE(type) ( \
- (type) == MUS_AIFF \
- || (type) == MUS_NEXT \
- || (type) == MUS_RIFF \
- || (type) == MUS_IRCAM )
-
-#define INVALID_DATA_FORMAT(format) ((format) < 1)
-
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
diff --git a/third_party/resample/src/stdefs.h b/third_party/resample/src/stdefs.h
deleted file mode 100644
index 4672981b..00000000
--- a/third_party/resample/src/stdefs.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* stdefs.h */
-#ifndef _STDEFS_H
-#define _STDEFS_H
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef PI
-#define PI (3.14159265358979232846)
-#endif
-
-#ifndef PI2
-#define PI2 (6.28318530717958465692)
-#endif
-
-#define D2R (0.01745329348) /* (2*pi)/360 */
-#define R2D (57.29577951) /* 360/(2*pi) */
-
-#ifndef MAX
-#define MAX(x,y) ((x)>(y) ?(x):(y))
-#endif
-#ifndef MIN
-#define MIN(x,y) ((x)<(y) ?(x):(y))
-#endif
-
-#ifndef ABS
-#define ABS(x) ((x)<0 ?(-(x)):(x))
-#endif
-
-#ifndef SGN
-#define SGN(x) ((x)<0 ?(-1):((x)==0?(0):(1)))
-#endif
-
-typedef char BOOL;
-typedef short HWORD;
-typedef unsigned short UHWORD;
-typedef int WORD;
-typedef unsigned int UWORD;
-
-#define MUS_SAMPLE_TYPE_TO_HWORD(x) ((HWORD)((x)>>(MUS_SAMPLE_BITS-16)))
-#define HWORD_TO_MUS_SAMPLE_TYPE(x) ((mus_sample_t)((x)<<(MUS_SAMPLE_BITS-16)))
-
-#define MAX_HWORD (32767)
-#define MIN_HWORD (-32768)
-
-#ifdef DEBUG
-#define INLINE
-#else
-#ifndef INLINE
-#define INLINE inline
-#endif
-#endif
-
-#endif /* _STDEFS_H */
diff --git a/third_party/resample/src/windowfilter.c b/third_party/resample/src/windowfilter.c
deleted file mode 100644
index b2b67690..00000000
--- a/third_party/resample/src/windowfilter.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* makefilter.c */
-
-#include <stdio.h>
-#include <math.h>
-#include "stdefs.h"
-#include "filterkit.h"
-#include "resample.h"
-#define MAXNWING 8192 /* FIXME: flush */
-
-/* LIBRARIES needed:
- *
- * 1. filterkit
- * makeFilter() - designs a Kaiser-windowed low-pass filter
- * writeFilter() - writes a filter to a standard filter file
- * GetUShort() - prompt user for a UHWORD with help
- * GetDouble() - prompt user for a double with help
- *
- * 2. math
- */
-
-char NmultHelp[] =
- "\n Nmult is the length of the symmetric FIR lowpass filter used"
- "\n by the sampling rate converter. It must be odd."
- "\n This is the number of multiplies per output sample for"
- "\n up-conversions (Factor>1), and is the number of multiplies"
- "\n per input sample for down-conversions (Factor<1). Thus if"
- "\n the rate conversion is Srate2 = Factor*Srate1, then you have"
- "\n Nmult*Srate1*MAXof(Factor,1) multiplies per second of real time."
- "\n Naturally, higher Nmult gives better lowpass-filtering at the"
- "\n expense of longer compute times. Nmult should be odd because"
- "\n it is the length of a symmetric FIR filter, and the current"
- "\n implementation requires a coefficient at the time origin.\n";
-
-char FrollHelp[] =
- "\n Froll determines the frequency at which the lowpass filter begins to"
- "\n roll-off. If Froll=1, then there is no 'guard zone' and the filter"
- "\n roll-off region will be aliased. If Froll is 0.90, for example, then"
- "\n the filter begins rolling off at 0.90*Srate/2, so that by Srate/2,"
- "\n the filter is well down and aliasing is reduced. Since aliasing"
- "\n distortion is typically worse than loss of the high-frequency spectral"
- "\n amplitude, Froll<1 is highly recommended. The default of 0.90"
- "\n sacrifices the upper 10 percent of the spectrum as an anti-aliasing"
- "\n guard zone.\n";
-
-char BetaHelp[] =
- "\n Beta trades the rejection of the lowpass filter against the"
- "\n transition width from passband to stopband. Larger Beta means"
- "\n a slower transition and greater stopband rejection. See Rabiner"
- "\n and Gold (Th. and App. of DSP) under Kaiser windows for more about"
- "\n Beta. The following table from Rabiner and Gold (p. 101) gives some"
- "\n feel for the effect of Beta:"
- "\n"
- "\n BETA D PB RIP SB RIP"
- "\n 2.120 1.50 +-0.27 -30"
- "\n 3.384 2.23 0.0864 -40"
- "\n 4.538 2.93 0.0274 -50"
- "\n 5.658 3.62 0.00868 -60"
- "\n 6.764 4.32 0.00275 -70"
- "\n 7.865 5.0 0.000868 -80"
- "\n 8.960 5.7 0.000275 -90"
- "\n 10.056 6.4 0.000087 -100"
- "\n"
- "\n Above, ripples are in dB, and the transition band width is "
- "\n approximately D*Fs/N, where Fs = sampling rate, "
- "\n and N = window length. PB = 'pass band' and SB = 'stop band'."
- "\n Alternatively, D is the transition widths in bins given a"
- "\n length N DFT (i.e. a window transform with no zero padding."
- "\n";
-
-
-int main(void)
-{
- HWORD Imp[MAXNWING]; /* Filter coefficients */
- HWORD ImpD[MAXNWING]; /* ImpD[i] = ImpD[i+1] - ImpD[i] */
- double Froll, Beta;
- UHWORD Nmult, Nwing, LpScl;
- int err;
-
- Froll = 0.90;
- Beta = 9;
- Nmult = 65;
- while (1)
- {
- Froll = GetDouble("Normalized Roll-off freq (0<Froll<=1)",
- Froll, FrollHelp);
- Beta = GetDouble("Beta", Beta, BetaHelp);
- Nmult = GetUHWORD("Odd filter length 'Nmult'", Nmult, NmultHelp);
- if ((Nmult&1) == 0) {
- Nmult++;
- printf("Filter length increased to %d to make it odd.\n",Nmult);
- }
- Nwing = Npc*(Nmult-1)/2; /* # of filter coeffs in right wing */
- printf("\n");
- if (!(Nmult % 2))
- printf("Error: Nmult must be odd and greater than zero\n");
- else if ((err = makeFilter(Imp, ImpD, &LpScl, Nwing, Froll, Beta))) {
- printf("*** Error: Unable to make filter.\n");
- if (err == 1)
- printf("\tNmult=%d too large for MAXNWING=%d\n",Nmult,MAXNWING);
- else if (err == 2)
- printf("\tNormalized roll-off freq Froll must be between 0 and 1\n");
- else if (err == 3)
- printf("\tHeisenberg says Beta must be greater or equal to 1\n");
- else if (err == 4) {
- printf("\tUnity-gain scale factor overflows 16-bit half-word\n");
- printf("\tFilter design was probably way off. Try relaxing specs.\n");
- }
- } else if ((err = writeFilter(Imp, ImpD, LpScl, Nmult, Nwing)))
- printf("Error: Unable to write filter, err=%d\n", err);
- else
- break;
- }
- return(0);
-}