[FFmpeg-devel] avfilter: add dumpwave filter.

Submitted by Dmitry Humeniuk on Jan. 7, 2019, 2:31 p.m.

Details

Message ID 20190107143115.101095-1-dhumeniuk@google.com
State New
Headers show

Commit Message

Dmitry Humeniuk Jan. 7, 2019, 2:31 p.m.
Signed-off-by: Dmitry Humeniuk <dhumeniuk@google.com>
---
 Changelog                            |    1 +
 doc/filters.texi                     |   23 +
 libavfilter/Makefile                 |    1 +
 libavfilter/af_dumpwave.c            |  234 ++++
 libavfilter/allfilters.c             |    1 +
 libavfilter/version.h                |    4 +-
 tests/fate-run.sh                    |    9 +
 tests/fate/filter-audio.mak          |   12 +
 tests/ref/fate/filter-dumpwave       | 1800 ++++++++++++++++++++++++++
 tests/ref/fate/filter-dumpwave-24bit | 1800 ++++++++++++++++++++++++++
 tests/ref/fate/filter-dumpwave-fltp  | 1800 ++++++++++++++++++++++++++
 11 files changed, 5683 insertions(+), 2 deletions(-)
 create mode 100644 libavfilter/af_dumpwave.c
 create mode 100644 tests/ref/fate/filter-dumpwave
 create mode 100644 tests/ref/fate/filter-dumpwave-24bit
 create mode 100644 tests/ref/fate/filter-dumpwave-fltp

Comments

Tobias Rapp Jan. 8, 2019, 8:20 a.m.
On 07.01.2019 15:31, Dmitry Humeniuk wrote:
> Signed-off-by: Dmitry Humeniuk <dhumeniuk@google.com>
> ---
>   Changelog                            |    1 +
>   doc/filters.texi                     |   23 +
>   libavfilter/Makefile                 |    1 +
>   libavfilter/af_dumpwave.c            |  234 ++++
>   libavfilter/allfilters.c             |    1 +
>   libavfilter/version.h                |    4 +-
>   tests/fate-run.sh                    |    9 +
>   tests/fate/filter-audio.mak          |   12 +
>   tests/ref/fate/filter-dumpwave       | 1800 ++++++++++++++++++++++++++
>   tests/ref/fate/filter-dumpwave-24bit | 1800 ++++++++++++++++++++++++++
>   tests/ref/fate/filter-dumpwave-fltp  | 1800 ++++++++++++++++++++++++++
>   11 files changed, 5683 insertions(+), 2 deletions(-)
>   create mode 100644 libavfilter/af_dumpwave.c
>   create mode 100644 tests/ref/fate/filter-dumpwave
>   create mode 100644 tests/ref/fate/filter-dumpwave-24bit
>   create mode 100644 tests/ref/fate/filter-dumpwave-fltp
> 
> diff --git a/Changelog b/Changelog
> index f135fa56b6..1eb337796b 100644
> --- a/Changelog
> +++ b/Changelog
> @@ -13,6 +13,7 @@ version <next>:
>   - GIF parser
>   - vividas demuxer
>   - hymt decoder
> +- dumpwave filter
>   
>   
>   version 4.1:
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 98858c5356..66c2961fd8 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -2912,6 +2912,29 @@ Set window length in seconds used to split audio into segments of equal length.
>   Default is 3 seconds.
>   @end table
>   
> +@section dumpwave
> +Dump RMS envelope to a file.
> +Convert samples to decibels and calculates RMS (Root-Mean-Square) audio power in 0 to 1.0 floats.
> +
> +@table @option
> +@item w, width
> +Number of data values.
> +The default value is @var{1800}
> +
> +@item n, nb_samples
> +Samples count per value per channel, default 128
> +
> +@item f, file
> +Path to a file ``-'' is a shorthand
> +for standard output.
> +@end table
> +
> +For example, to generate RMS envelope for 44.1 kHz 6 seconds length audio
> +with dimensions @var{1800x140}, samples count @code{44100*6/1800=147} and store it to @var{/tmp/out.csv}, you might use:
> +@example
> +dumpwave=w=1800:n=147:f=/tmp/out.csv
> +@end example
> +
>   @section dynaudnorm
>   Dynamic Audio Normalizer.
>   
> [...]

I appreciate the completeness of the proposed patch (documentation, 
tests, version bump) but it seems that the functionality overlaps with 
existing filters. Besides the different output format I think the same 
can be achieved by using a command like:

ffmpeg -i input.wav -f null -filter:a 
"asetnsamples=147,astats=metadata=on,ametadata=print:key=lavfi.astats.Overall.RMS_peak:file=/tmp/out.dat" 
/dev/null

So if it is only about the output format, it would be better to add CSV 
support to the ametadata filter, IMHO. That way other filters with frame 
metadata output will also gain CSV support.

Best regards,
Tobias

Patch hide | download patch | download mbox

diff --git a/Changelog b/Changelog
index f135fa56b6..1eb337796b 100644
--- a/Changelog
+++ b/Changelog
@@ -13,6 +13,7 @@  version <next>:
 - GIF parser
 - vividas demuxer
 - hymt decoder
+- dumpwave filter
 
 
 version 4.1:
diff --git a/doc/filters.texi b/doc/filters.texi
index 98858c5356..66c2961fd8 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -2912,6 +2912,29 @@  Set window length in seconds used to split audio into segments of equal length.
 Default is 3 seconds.
 @end table
 
+@section dumpwave
+Dump RMS envelope to a file.
+Convert samples to decibels and calculates RMS (Root-Mean-Square) audio power in 0 to 1.0 floats.
+
+@table @option
+@item w, width
+Number of data values.
+The default value is @var{1800}
+
+@item n, nb_samples
+Samples count per value per channel, default 128
+
+@item f, file
+Path to a file ``-'' is a shorthand
+for standard output.
+@end table
+
+For example, to generate RMS envelope for 44.1 kHz 6 seconds length audio
+with dimensions @var{1800x140}, samples count @code{44100*6/1800=147} and store it to @var{/tmp/out.csv}, you might use:
+@example
+dumpwave=w=1800:n=147:f=/tmp/out.csv
+@end example
+
 @section dynaudnorm
 Dynamic Audio Normalizer.
 
diff --git a/libavfilter/Makefile b/libavfilter/Makefile
index 6e2658186d..c40e61fcbe 100644
--- a/libavfilter/Makefile
+++ b/libavfilter/Makefile
@@ -99,6 +99,7 @@  OBJS-$(CONFIG_CROSSFEED_FILTER)              += af_crossfeed.o
 OBJS-$(CONFIG_CRYSTALIZER_FILTER)            += af_crystalizer.o
 OBJS-$(CONFIG_DCSHIFT_FILTER)                += af_dcshift.o
 OBJS-$(CONFIG_DRMETER_FILTER)                += af_drmeter.o
+OBJS-$(CONFIG_DUMPWAVE_FILTER)               += af_dumpwave.o
 OBJS-$(CONFIG_DYNAUDNORM_FILTER)             += af_dynaudnorm.o
 OBJS-$(CONFIG_EARWAX_FILTER)                 += af_earwax.o
 OBJS-$(CONFIG_EBUR128_FILTER)                += f_ebur128.o
diff --git a/libavfilter/af_dumpwave.c b/libavfilter/af_dumpwave.c
new file mode 100644
index 0000000000..19917ed22f
--- /dev/null
+++ b/libavfilter/af_dumpwave.c
@@ -0,0 +1,234 @@ 
+/*
+ * Copyright (c) 2019 Dmytro Humeniuk
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @file
+ * waveform audio filter – dump RMS amplitude to a file
+ */
+
+#include "libavutil/avassert.h"
+#include "libavutil/avstring.h"
+#include "libavutil/channel_layout.h"
+#include "libavutil/opt.h"
+#include "libavutil/parseutils.h"
+#include "avfilter.h"
+#include "formats.h"
+#include "audio.h"
+#include "internal.h"
+
+typedef struct DumpWaveContext {
+    const AVClass *class;   /**< class for AVOptions */
+    int width;              /**< number of data values */
+    int idx;                /**< index of current value */
+    char *filename;         /**< output filename */
+    float *values;          /**< scaling factors */
+    int64_t nb_samples;     /**< samples per value per channel */
+    int64_t count;          /**< current number of samples counted */
+    int64_t frame_size;     /**< samples per value */
+    double sum;             /**< sum of the squared samples per value */
+    double max_value;       /**< keep track of max value */
+    FILE *dump_fp;
+} DumpWaveContext;
+
+#define OFFSET(x) offsetof(DumpWaveContext, x)
+#define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
+
+static const AVOption dumpwave_options[] = {
+    { "w", "set number of data values",  OFFSET(width), AV_OPT_TYPE_INT,  {.i64 = 1800}, 1, INT_MAX, FLAGS },
+    { "width", "set number of data values",  OFFSET(width), AV_OPT_TYPE_INT,  {.i64 = 1800}, 1, INT_MAX, FLAGS },
+    { "n", "set number of samples per value per channel",  OFFSET(nb_samples), AV_OPT_TYPE_INT64,  {.i64 = 128}, 1, INT64_MAX, FLAGS },
+    { "nb_samples", "set number of samples per value per channel",  OFFSET(nb_samples), AV_OPT_TYPE_INT64,  {.i64 = 128}, 1, INT64_MAX, FLAGS },
+    { "f", "set dump file", OFFSET(filename), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, FLAGS },
+    { "file", "set dump file", OFFSET(filename), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, FLAGS },
+    { NULL }
+};
+
+AVFILTER_DEFINE_CLASS(dumpwave);
+
+static av_cold int init(AVFilterContext *ctx)
+{
+    DumpWaveContext *dumpwave = ctx->priv;
+
+    dumpwave->sum = dumpwave->idx = dumpwave->count = 0;
+
+    if (!dumpwave->filename) {
+        av_log(ctx, AV_LOG_ERROR, "No output file provided\n");
+        return AVERROR(EINVAL);
+    } else if (!strcmp("-", dumpwave->filename)) {
+        dumpwave->dump_fp = stdout;
+    } else {
+        dumpwave->dump_fp = fopen(dumpwave->filename, "w");
+        if (!dumpwave->dump_fp) {
+            int err = AVERROR(errno);
+            char buf[128];
+            av_strerror(err, buf, sizeof(buf));
+            av_log(ctx, AV_LOG_ERROR, "Could not open file %s: %s\n",
+                   dumpwave->filename, buf);
+            return err;
+        }
+    }
+    return 0;
+}
+
+static av_cold void uninit(AVFilterContext *ctx)
+{
+    DumpWaveContext *dumpwave = ctx->priv;
+    fclose(dumpwave->dump_fp);
+    av_freep(&dumpwave->values);
+}
+
+static int query_formats(AVFilterContext *ctx)
+{
+    static const enum AVSampleFormat sample_fmts[] = {
+        AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLTP,
+        AV_SAMPLE_FMT_NONE
+    };
+    AVFilterFormats *formats;
+    AVFilterChannelLayouts *layouts;
+    int ret;
+
+    if (!(formats = ff_make_format_list(sample_fmts)))
+        return AVERROR(ENOMEM);
+
+    layouts = ff_all_channel_counts();
+    if (!layouts)
+        return AVERROR(ENOMEM);
+    ret = ff_set_common_channel_layouts(ctx, layouts);
+    if (ret < 0)
+        return ret;
+
+    return ff_set_common_formats(ctx, formats);
+}
+
+static int config_input(AVFilterLink *inlink)
+{
+    DumpWaveContext *dumpwave = inlink->dst->priv;
+    dumpwave->frame_size = dumpwave->nb_samples * inlink->channels;
+
+    return 0;
+}
+
+static int config_output(AVFilterLink *outlink)
+{
+    AVFilterContext *ctx = outlink->src;
+    DumpWaveContext *dumpwave = ctx->priv;
+    dumpwave->values = av_malloc(dumpwave->width * sizeof(float));
+    if (!dumpwave->values)
+        return AVERROR(ENOMEM);
+    memset(dumpwave->values, 0, dumpwave->width * sizeof(float));
+
+    return 0;
+}
+
+static int request_frame(AVFilterLink *outlink) {
+    AVFilterContext *ctx = outlink->src;
+    DumpWaveContext *dumpwave = ctx->priv;
+
+    AVFilterLink *inlink = ctx->inputs[0];
+
+    int ret = ff_request_frame(inlink);
+
+    if (ret == AVERROR_EOF)
+        for (int i = 0; i < dumpwave->width; i++)
+            fprintf(dumpwave->dump_fp, (i == dumpwave->width - 1) ? "%f\n" : "%f,",
+                    av_clipf(dumpwave->values[i] / dumpwave->max_value, 0, 1.0));
+    return ret;
+}
+
+/**
+ * Convert sample to dB and calculate root mean squared value
+ */
+static inline void RMS(DumpWaveContext *dumpwave, const float sample)
+{
+    double value = 0.;
+    if (sample != 0)
+        value = (20. * log10(fabs(sample)) + 60.) / 60.;
+
+    dumpwave->sum += value * value;
+
+    if (dumpwave->count++ == dumpwave->frame_size) {
+        value = av_clipd(sqrt(dumpwave->sum / dumpwave->frame_size), 0, 1.0);
+        dumpwave->max_value = FFMAX(value, dumpwave->max_value);
+        dumpwave->values[dumpwave->idx++] = value;
+        dumpwave->sum = dumpwave->count = 0;
+    }
+}
+
+static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
+{
+    AVFilterContext *ctx = inlink->dst;
+    DumpWaveContext *dumpwave = ctx->priv;
+    int channels = frame->channels;
+    int c, i;
+
+    if (dumpwave->idx < dumpwave->width)
+        switch (inlink->format) {
+            case AV_SAMPLE_FMT_FLTP:
+                for (c = 0; c < channels; c++) {
+                    const float *src = (const float *)frame->extended_data[c];
+
+                    for (i = 0; i < frame->nb_samples; i++, src++)
+                        RMS(dumpwave, *src);
+                }
+                break;
+            case AV_SAMPLE_FMT_FLT: {
+                const float *src = (const float *)frame->extended_data[0];
+
+                for (i = 0; i < frame->nb_samples; i++) {
+                    for (c = 0; c < channels; c++, src++)
+                        RMS(dumpwave, *src);
+                }
+
+            } break;
+        }
+    return ff_filter_frame(inlink->dst->outputs[0], frame);
+}
+
+static const AVFilterPad dumpwave_inputs[] = {
+    {
+        .name         = "default",
+        .type         = AVMEDIA_TYPE_AUDIO,
+        .filter_frame = filter_frame,
+        .config_props  = config_input
+    },
+    { NULL }
+};
+
+static const AVFilterPad dumpwave_outputs[] = {
+    {
+        .name          = "default",
+        .type          = AVMEDIA_TYPE_AUDIO,
+        .request_frame = request_frame,
+        .config_props  = config_output
+    },
+    { NULL }
+};
+
+AVFilter ff_af_dumpwave = {
+    .name          = "dumpwave",
+    .description   = NULL_IF_CONFIG_SMALL("Dump RMS amplitude to a file"),
+    .init          = init,
+    .uninit        = uninit,
+    .query_formats = query_formats,
+    .priv_size     = sizeof(DumpWaveContext),
+    .inputs        = dumpwave_inputs,
+    .outputs       = dumpwave_outputs,
+    .priv_class    = &dumpwave_class,
+};
\ No newline at end of file
diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c
index a600069500..0661d70126 100644
--- a/libavfilter/allfilters.c
+++ b/libavfilter/allfilters.c
@@ -91,6 +91,7 @@  extern AVFilter ff_af_crossfeed;
 extern AVFilter ff_af_crystalizer;
 extern AVFilter ff_af_dcshift;
 extern AVFilter ff_af_drmeter;
+extern AVFilter ff_af_dumpwave;
 extern AVFilter ff_af_dynaudnorm;
 extern AVFilter ff_af_earwax;
 extern AVFilter ff_af_ebur128;
diff --git a/libavfilter/version.h b/libavfilter/version.h
index c6b4d981c9..6af31400eb 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -30,8 +30,8 @@ 
 #include "libavutil/version.h"
 
 #define LIBAVFILTER_VERSION_MAJOR   7
-#define LIBAVFILTER_VERSION_MINOR  46
-#define LIBAVFILTER_VERSION_MICRO 101
+#define LIBAVFILTER_VERSION_MINOR  47
+#define LIBAVFILTER_VERSION_MICRO 100
 
 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
                                                LIBAVFILTER_VERSION_MINOR, \
diff --git a/tests/fate-run.sh b/tests/fate-run.sh
index aece90a01d..9b758b9d14 100755
--- a/tests/fate-run.sh
+++ b/tests/fate-run.sh
@@ -264,6 +264,15 @@  refcmp_metadata(){
         -f null /dev/null | awk -v ref=${ref} -v fuzz=${fuzz} -f ${base}/refcmp-metadata.awk -
 }
 
+refcmp_dumpwave(){
+    src=$1
+    size=$2
+    fuzz=${3:-1}
+    ffmpeg $FLAGS $DEC_OPTS -i ${src} \
+    -af "dumpwave=n=${size}:f=-" \
+    -f null /dev/null | tr ',.' '\n=' | awk -v ref=${ref} -v fuzz=${fuzz} -f ${base}/refcmp-metadata.awk -
+}
+
 video_filter(){
     filters=$1
     shift
diff --git a/tests/fate/filter-audio.mak b/tests/fate/filter-audio.mak
index dcc8d56c88..dc75174aad 100644
--- a/tests/fate/filter-audio.mak
+++ b/tests/fate/filter-audio.mak
@@ -109,6 +109,18 @@  fate-filter-dcshift: tests/data/asynth-44100-2.wav
 fate-filter-dcshift: SRC = $(TARGET_PATH)/tests/data/asynth-44100-2.wav
 fate-filter-dcshift: CMD = framecrc -i $(SRC) -frames:a 20 -af dcshift=shift=0.25:limitergain=0.05
 
+FATE_AFILTER-$(call FILTERDEMDEC, DUMPWAVE, WAV, PCM_S16LE) += fate-filter-dumpwave
+fate-filter-dumpwave: SRC = $(TARGET_PATH)/tests/data/asynth-44100-2.wav
+fate-filter-dumpwave: CMD = refcmp_dumpwave $(SRC) 147 0.000010
+
+FATE_AFILTER-$(call FILTERDEMDEC, DUMPWAVE, TRUEHD, TRUEHD) += fate-filter-dumpwave-fltp
+fate-filter-dumpwave-fltp: SRC = $(TARGET_SAMPLES)/audiomatch/tones_afconvert_44100_stereo_aac_he2.m4a
+fate-filter-dumpwave-fltp: CMD = refcmp_dumpwave $(SRC) 52 0.000015
+
+FATE_AFILTER-$(call FILTERDEMDEC, DUMPWAVE, FLAC, FLAC) += fate-filter-dumpwave-24bit
+fate-filter-dumpwave-24bit: SRC = $(TARGET_SAMPLES)/lossless-audio/master_audio_2.0_24bit.wma
+fate-filter-dumpwave-24bit: CMD = refcmp_dumpwave $(SRC) 51 0.000012
+
 FATE_AFILTER-$(call FILTERDEMDECENCMUX, EARWAX, WAV, PCM_S16LE, PCM_S16LE, WAV) += fate-filter-earwax
 fate-filter-earwax: tests/data/asynth-44100-2.wav
 fate-filter-earwax: SRC = $(TARGET_PATH)/tests/data/asynth-44100-2.wav
diff --git a/tests/ref/fate/filter-dumpwave b/tests/ref/fate/filter-dumpwave
new file mode 100644
index 0000000000..9ff02a6428
--- /dev/null
+++ b/tests/ref/fate/filter-dumpwave
@@ -0,0 +1,1800 @@ 
+0=824713
+0=836494
+0=825428
+0=824060
+0=835604
+0=826313
+0=823901
+0=833144
+0=828954
+0=824104
+0=829610
+0=832018
+0=824678
+0=827427
+0=833274
+0=825691
+0=826063
+0=833246
+0=827138
+0=825129
+0=831745
+0=829414
+0=824635
+0=828717
+0=833131
+0=824515
+0=825745
+0=835551
+0=824762
+0=825481
+0=836432
+0=825483
+0=823315
+0=836010
+0=826669
+0=823132
+0=834015
+0=828911
+0=823107
+0=830483
+0=832162
+0=823610
+0=828233
+0=833608
+0=824550
+0=826681
+0=833674
+0=826003
+0=825739
+0=832841
+0=827991
+0=825183
+0=829525
+0=831461
+0=825033
+0=826088
+0=834779
+0=825269
+0=824212
+0=836058
+0=825893
+0=823233
+0=836044
+0=827084
+0=822411
+0=834705
+0=828903
+0=822325
+0=831550
+0=832031
+0=822594
+0=828754
+0=834174
+0=823346
+0=827171
+0=834582
+0=824762
+0=826097
+0=833716
+0=826493
+0=825521
+0=832286
+0=829235
+0=825318
+0=827169
+0=833501
+0=825497
+0=825067
+0=835384
+0=826105
+0=823294
+0=835794
+0=827138
+0=822466
+0=834867
+0=828914
+0=821995
+0=832229
+0=831767
+0=822020
+0=829257
+0=834446
+0=822624
+0=827395
+0=835379
+0=823484
+0=826304
+0=834958
+0=825499
+0=825631
+0=833075
+0=827498
+0=825395
+0=829181
+0=831935
+0=825538
+0=825936
+0=834287
+0=826054
+0=824192
+0=835167
+0=827070
+0=822906
+0=834753
+0=828585
+0=822224
+0=832633
+0=831274
+0=822082
+0=829433
+0=834421
+0=822216
+0=827524
+0=835770
+0=823219
+0=826257
+0=835786
+0=824168
+0=825569
+0=834507
+0=826952
+0=825268
+0=831121
+0=829681
+0=825360
+0=827472
+0=833150
+0=825853
+0=825405
+0=834210
+0=826736
+0=823965
+0=834163
+0=828219
+0=823060
+0=832808
+0=830389
+0=822496
+0=829672
+0=833834
+0=822671
+0=827330
+0=835856
+0=822881
+0=826048
+0=836287
+0=823811
+0=825254
+0=835412
+0=825462
+0=824933
+0=833021
+0=828347
+0=824985
+0=829122
+0=831754
+0=825411
+0=826752
+0=833384
+0=826276
+0=825227
+0=833596
+0=827575
+0=824135
+0=832481
+0=829677
+0=823489
+0=829686
+0=833066
+0=823234
+0=827012
+0=835562
+0=824716
+0=825499
+0=836463
+0=824052
+0=824712
+0=836053
+0=825668
+0=824331
+0=834114
+0=827550
+0=824364
+0=830369
+0=831171
+0=824776
+0=827937
+0=832893
+0=825551
+0=826238
+0=833315
+0=826839
+0=825152
+0=832631
+0=828643
+0=824462
+0=829905
+0=831817
+0=824162
+0=827330
+0=835030
+0=824250
+0=824973
+0=836330
+0=824711
+0=824560
+0=836326
+0=825740
+0=823491
+0=835011
+0=827545
+0=823451
+0=831829
+0=830534
+0=823834
+0=828799
+0=832919
+0=824619
+0=827071
+0=833590
+0=825789
+0=825864
+0=832896
+0=827583
+0=825162
+0=831336
+0=830119
+0=824830
+0=827172
+0=834013
+0=824880
+0=826167
+0=835928
+0=825349
+0=823540
+0=836332
+0=826227
+0=822945
+0=835420
+0=827831
+0=822566
+0=832875
+0=830421
+0=822813
+0=829639
+0=833200
+0=823475
+0=827625
+0=834167
+0=824539
+0=826400
+0=834045
+0=826156
+0=825602
+0=832023
+0=828635
+0=825248
+0=828054
+0=832779
+0=825267
+0=825381
+0=835146
+0=825660
+0=823875
+0=836016
+0=826540
+0=822652
+0=835587
+0=827903
+0=822192
+0=833525
+0=830375
+0=822106
+0=830173
+0=833515
+0=822478
+0=828093
+0=834873
+0=823588
+0=807679
+0=832758
+0=845901
+0=838234
+0=824826
+0=821727
+0=833420
+0=831204
+0=819857
+0=822333
+0=828943
+0=833602
+0=836239
+0=823254
+0=825184
+0=830914
+0=833152
+0=819845
+0=826346
+0=829342
+0=829812
+0=834948
+0=822844
+0=827243
+0=830042
+0=833120
+0=822461
+0=832665
+0=829938
+0=823505
+0=831995
+0=824883
+0=828929
+0=827465
+0=830454
+0=828869
+0=829441
+0=828687
+0=825792
+0=825534
+0=831786
+0=827401
+0=828518
+0=824201
+0=835049
+0=826093
+0=828691
+0=830435
+0=825434
+0=831118
+0=827483
+0=829513
+0=826767
+0=826669
+0=827010
+0=828877
+0=828658
+0=833404
+0=826415
+0=828336
+0=827704
+0=830553
+0=827867
+0=833043
+0=828870
+0=828767
+0=825718
+0=830430
+0=828926
+0=828511
+0=823706
+0=828209
+0=826576
+0=827226
+0=828840
+0=831177
+0=826671
+0=828063
+0=828448
+0=831527
+0=832124
+0=829561
+0=828394
+0=828758
+0=825850
+0=829836
+0=827294
+0=827792
+0=826723
+0=828506
+0=826223
+0=824863
+0=821319
+0=830490
+0=826487
+0=829876
+0=827071
+0=828760
+0=829973
+0=824724
+0=829631
+0=829469
+0=828403
+0=828887
+0=828358
+0=827968
+0=828677
+0=828797
+0=832920
+0=827751
+0=826622
+0=827771
+0=830324
+0=827317
+0=831077
+0=827135
+0=827741
+0=829584
+0=830074
+0=827912
+0=830567
+0=826160
+0=829930
+0=827662
+0=828260
+0=829672
+0=827494
+0=828671
+0=829424
+0=828924
+0=835833
+0=825353
+0=829051
+0=829085
+0=829071
+0=826121
+0=828028
+0=828063
+0=829834
+0=828848
+0=828001
+0=828558
+0=829316
+0=828389
+0=825677
+0=825782
+0=828510
+0=828591
+0=828890
+0=827116
+0=831236
+0=828815
+0=829912
+0=828992
+0=827963
+0=829399
+0=829715
+0=826767
+0=829244
+0=826276
+0=831629
+0=828400
+0=827019
+0=846009
+0=827517
+0=827446
+0=829167
+0=828056
+0=827422
+0=828760
+0=830776
+0=827353
+0=827269
+0=828299
+0=830804
+0=827898
+0=829006
+0=827864
+0=831547
+0=829355
+0=828103
+0=829353
+0=828739
+0=829176
+0=828768
+0=828085
+0=830323
+0=834475
+0=827281
+0=829466
+0=829737
+0=827968
+0=829235
+0=829616
+0=827988
+0=828080
+0=828529
+0=826965
+0=829097
+0=827944
+0=829234
+0=825369
+0=827880
+0=827049
+0=829290
+0=827330
+0=828476
+0=828912
+0=828194
+0=828029
+0=828367
+0=827998
+0=830111
+0=826484
+0=827909
+0=831675
+0=823444
+0=826577
+0=851884
+0=851253
+0=826948
+0=823042
+0=831610
+0=828220
+0=826573
+0=829420
+0=827029
+0=826651
+0=830314
+0=827825
+0=828047
+0=828714
+0=827486
+0=827645
+0=829441
+0=828369
+0=828381
+0=828673
+0=828549
+0=823670
+0=828222
+0=829183
+0=826012
+0=829493
+0=828342
+0=827954
+0=831691
+0=826571
+0=829680
+0=827076
+0=829309
+0=827886
+0=829528
+0=826691
+0=828621
+0=827689
+0=828158
+0=827498
+0=827886
+0=829785
+0=828749
+0=828439
+0=829434
+0=804690
+0=831404
+0=830026
+0=826814
+0=828947
+0=828761
+0=828400
+0=828949
+0=829409
+0=828153
+0=829825
+0=828828
+0=828819
+0=828555
+0=829293
+0=827703
+0=828321
+0=828114
+0=830936
+0=832720
+0=827978
+0=829719
+0=827841
+0=828720
+0=827590
+0=830485
+0=828187
+0=827580
+0=828146
+0=829508
+0=829404
+0=829341
+0=827336
+0=829380
+0=826851
+0=826628
+0=768180
+0=787571
+0=805210
+0=779217
+0=791471
+0=783526
+0=779731
+0=778912
+0=778940
+0=774108
+0=785830
+0=776888
+0=787092
+0=779067
+0=795728
+0=789099
+0=777030
+0=765784
+0=783062
+0=781050
+0=784287
+0=807812
+0=773561
+0=762505
+0=769473
+0=755651
+0=776867
+0=794793
+0=795090
+0=762953
+0=785230
+0=774152
+0=786401
+0=789144
+0=784995
+0=787514
+0=788021
+0=788567
+0=793192
+0=788149
+0=772176
+0=782433
+0=792908
+0=780921
+0=788482
+0=793462
+0=792531
+0=792874
+0=774784
+0=788625
+0=775557
+0=788330
+0=788195
+0=797677
+0=792909
+0=779301
+0=804506
+0=758956
+0=784072
+0=776451
+0=793550
+0=754527
+0=786744
+0=771059
+0=790982
+0=784901
+0=781898
+0=798241
+0=783798
+0=781142
+0=770487
+0=787604
+0=766027
+0=768224
+0=777160
+0=805029
+0=796685
+0=772947
+0=794081
+0=776281
+0=777476
+0=775038
+0=790958
+0=789942
+0=781881
+0=770143
+0=781131
+0=781693
+0=792957
+0=791689
+0=801173
+0=766312
+0=795903
+0=783324
+0=765790
+0=767969
+0=795156
+0=777345
+0=794897
+0=791492
+0=766243
+0=789287
+0=767587
+0=775792
+0=770022
+0=797729
+0=768568
+0=780550
+0=783389
+0=773479
+0=779061
+0=761783
+0=779974
+0=797270
+0=796186
+0=772953
+0=791541
+0=769254
+0=786664
+0=784919
+0=772198
+0=770196
+0=779742
+0=769250
+0=791960
+0=785956
+0=781518
+0=784169
+0=800683
+0=790195
+0=800395
+0=768227
+0=790383
+0=787723
+0=792108
+0=781892
+0=791797
+0=794240
+0=795643
+0=782601
+0=792907
+0=781655
+0=792525
+0=792264
+0=787882
+0=772522
+0=799622
+0=779597
+0=765720
+0=898600
+0=958203
+0=969008
+0=971050
+0=948607
+0=975215
+0=976717
+0=964028
+0=974475
+0=986066
+0=974158
+0=966265
+0=945112
+0=971755
+0=960580
+0=967360
+0=989716
+0=993119
+0=975423
+0=964560
+0=990898
+0=970927
+0=981310
+0=969310
+0=963654
+0=968231
+0=978391
+0=978674
+0=962900
+0=957737
+0=949883
+0=975287
+0=969320
+0=981096
+0=967428
+0=962277
+0=988736
+0=965942
+0=969544
+0=978327
+0=971183
+0=971561
+0=955862
+0=963205
+0=958212
+0=958793
+0=972081
+0=968635
+0=966267
+0=978997
+0=966114
+0=975850
+0=984185
+0=980326
+0=992522
+0=981875
+0=960001
+0=982048
+0=970918
+0=966708
+0=955842
+0=977851
+0=987260
+0=984555
+0=981376
+0=965924
+0=973230
+0=957210
+0=986907
+0=967033
+0=998863
+0=951828
+0=971206
+0=956956
+0=962391
+0=971464
+0=968171
+0=973145
+0=985079
+0=977878
+0=966492
+0=977089
+0=982652
+0=962583
+0=962786
+0=982820
+0=972458
+0=953460
+0=979750
+0=963521
+0=974605
+0=986349
+0=970416
+0=983391
+0=972795
+0=971330
+0=989825
+0=966466
+0=966456
+0=968458
+0=987607
+0=985040
+0=962080
+0=978616
+0=982024
+0=954487
+0=965447
+0=977020
+0=981027
+0=964041
+0=980185
+0=974881
+0=960906
+0=985900
+0=961117
+0=974484
+0=963251
+0=972246
+0=972540
+0=989015
+0=961761
+0=973984
+0=957154
+0=976602
+0=935132
+0=991384
+0=975965
+0=976788
+0=950601
+0=960536
+0=978050
+0=973021
+0=967748
+0=987574
+0=968024
+0=962597
+0=968875
+0=981262
+0=964487
+0=972034
+0=986382
+0=974452
+0=953045
+0=984896
+0=964190
+0=990139
+1=000000
+0=968265
+0=961641
+0=969249
+0=828633
+0=828975
+0=827590
+0=829446
+0=829004
+0=826740
+0=829787
+0=827436
+0=828054
+0=829965
+0=828053
+0=827251
+0=830556
+0=827031
+0=829032
+0=828806
+0=827160
+0=830407
+0=826292
+0=830495
+0=825979
+0=831061
+0=827399
+0=829224
+0=828151
+0=827881
+0=827365
+0=831360
+0=825168
+0=830735
+0=825253
+0=830098
+0=831157
+0=828787
+0=834779
+0=829343
+0=831097
+0=828375
+0=828209
+0=830786
+0=827098
+0=827546
+0=828497
+0=829739
+0=826432
+0=829397
+0=829940
+0=825244
+0=830240
+0=829071
+0=827113
+0=827481
+0=829080
+0=828244
+0=829047
+0=827420
+0=827385
+0=828607
+0=829125
+0=829090
+0=829259
+0=827938
+0=826984
+0=827859
+0=827897
+0=828158
+0=827818
+0=829623
+0=827863
+0=829010
+0=828474
+0=827453
+0=828174
+0=830110
+0=827617
+0=827074
+0=828368
+0=828727
+0=827859
+0=829200
+0=829032
+0=829779
+0=828827
+0=827797
+0=828546
+0=828514
+0=828597
+0=828019
+0=825839
+0=830818
+0=830634
+0=828577
+0=828632
+0=827963
+0=827773
+0=828257
+0=827778
+0=830072
+0=828885
+0=828019
+0=828013
+0=828126
+0=829659
+0=827290
+0=827688
+0=830544
+0=828509
+0=826998
+0=828635
+0=829392
+0=828513
+0=827737
+0=829766
+0=829377
+0=828336
+0=829298
+0=827000
+0=828547
+0=829795
+0=826440
+0=830167
+0=827110
+0=828217
+0=829066
+0=828750
+0=829395
+0=825810
+0=831530
+0=825576
+0=830971
+0=826330
+0=830852
+0=818968
+0=830018
+0=827341
+0=828250
+0=828999
+0=828425
+0=829854
+0=827135
+0=829476
+0=828009
+0=826841
+0=829919
+0=826349
+0=828222
+0=830507
+0=826850
+0=829168
+0=827334
+0=826887
+0=830475
+0=829541
+0=826793
+0=826977
+0=829063
+0=828051
+0=830291
+0=826899
+0=828941
+0=829134
+0=829257
+0=828076
+0=827105
+0=828526
+0=827257
+0=832841
+0=830720
+0=827027
+0=827415
+0=827945
+0=827393
+0=830044
+0=829004
+0=828786
+0=829814
+0=827970
+0=827517
+0=829038
+0=828765
+0=828461
+0=828721
+0=828167
+0=828438
+0=828044
+0=827704
+0=828487
+0=828711
+0=828388
+0=826896
+0=829897
+0=826786
+0=829717
+0=827846
+0=832228
+0=829500
+0=828101
+0=829589
+0=828545
+0=826308
+0=827763
+0=829509
+0=828806
+0=828134
+0=828043
+0=828083
+0=831631
+0=828206
+0=825912
+0=827893
+0=830964
+0=827237
+0=828798
+0=826831
+0=831194
+0=825525
+0=827852
+0=831271
+0=824462
+0=827330
+0=830550
+0=827150
+0=829315
+0=829490
+0=826902
+0=830134
+0=826501
+0=829455
+0=829443
+0=827621
+0=828501
+0=828237
+0=830242
+0=826398
+0=831190
+0=826525
+0=828713
+0=828495
+0=828902
+0=826165
+0=830709
+0=828595
+0=828089
+0=829991
+0=826473
+0=830967
+0=826669
+0=827851
+0=828430
+0=828488
+0=832604
+0=828278
+0=827484
+0=831295
+0=828165
+0=827364
+0=827998
+0=830292
+0=827750
+0=827043
+0=829364
+0=829314
+0=826528
+0=829223
+0=829128
+0=829351
+0=827883
+0=826832
+0=826700
+0=828587
+0=831325
+0=828623
+0=825264
+0=829579
+0=827462
+0=829857
+0=828099
+0=829919
+0=826829
+0=829848
+0=829417
+0=825359
+0=827279
+0=828431
+0=827694
+0=829030
+0=827653
+0=828248
+0=827623
+0=828880
+0=830796
+0=828858
+0=824991
+0=830041
+0=828434
+0=827362
+0=830333
+0=827500
+0=818002
+0=650152
+0=603187
+0=594715
+0=596728
+0=603095
+0=607414
+0=625697
+0=627437
+0=635532
+0=652778
+0=654270
+0=657409
+0=676480
+0=675552
+0=677501
+0=691884
+0=694174
+0=691481
+0=702665
+0=708868
+0=703115
+0=709216
+0=719085
+0=710703
+0=713287
+0=723647
+0=715061
+0=714048
+0=723670
+0=716606
+0=711759
+0=718615
+0=715589
+0=706615
+0=709133
+0=711495
+0=697679
+0=697665
+0=700657
+0=685899
+0=681944
+0=685541
+0=668851
+0=663889
+0=662647
+0=649750
+0=639236
+0=634993
+0=625106
+0=613827
+0=603022
+0=601251
+0=589880
+0=599393
+0=639364
+0=609054
+0=631997
+0=603159
+0=593049
+0=593817
+0=607815
+0=619537
+0=618083
+0=635035
+0=648255
+0=646333
+0=656907
+0=674077
+0=668509
+0=676966
+0=691539
+0=687058
+0=690878
+0=705091
+0=701320
+0=702740
+0=711968
+0=713393
+0=709236
+0=715137
+0=721624
+0=714155
+0=715707
+0=724479
+0=714329
+0=713562
+0=722551
+0=712282
+0=708742
+0=715527
+0=707375
+0=700093
+0=702919
+0=699467
+0=689683
+0=686215
+0=687082
+0=672740
+0=667612
+0=666954
+0=654736
+0=642538
+0=642944
+0=629883
+0=616503
+0=611330
+0=604445
+0=589969
+0=594095
+0=611289
+0=648941
+0=647681
+0=614498
+0=589683
+0=592996
+0=606560
+0=607747
+0=614619
+0=636944
+0=635718
+0=643146
+0=658632
+0=663951
+0=664603
+0=676854
+0=685700
+0=684034
+0=690760
+0=702740
+0=697628
+0=701532
+0=712943
+0=709204
+0=708281
+0=719118
+0=716396
+0=712664
+0=718774
+0=721928
+0=713647
+0=716902
+0=722474
+0=711463
+0=711237
+0=717474
+0=706694
+0=702877
+0=708450
+0=697928
+0=691404
+0=692526
+0=687486
+0=674734
+0=673402
+0=671949
+0=655923
+0=647459
+0=651327
+0=630040
+0=621305
+0=622337
+0=604898
+0=592119
+0=598490
+0=598012
+0=631633
+0=613269
+0=637996
+0=596329
+0=594216
+0=599277
+0=602047
+0=613400
+0=628947
+0=629017
+0=641367
+0=654310
+0=657165
+0=662350
+0=676110
+0=678865
+0=681653
+0=689327
+0=698920
+0=694694
+0=700911
+0=711852
+0=705927
+0=707700
+0=720340
+0=712533
+0=712446
+0=723155
+0=716987
+0=713607
+0=721128
+0=718895
+0=711628
+0=714710
+0=717713
+0=707054
+0=704989
+0=711452
+0=697978
+0=693496
+0=699011
+0=686536
+0=676846
+0=682598
+0=670047
+0=658107
+0=658116
+0=650961
+0=632455
+0=632148
+0=624424
+0=606772
+0=602922
+0=600593
+0=589659
+0=605437
+0=651853
+0=644894
+0=607547
+0=597557
+0=593797
+0=601977
+0=607835
+0=622434
+0=625829
+0=635334
+0=650666
+0=652636
+0=657055
+0=675504
+0=673724
+0=677031
+0=692113
+0=692057
+0=690913
+0=704036
+0=706413
+0=702471
+0=710150
+0=717847
+0=709939
+0=713998
+0=723398
+0=714166
+0=714626
+0=724399
+0=715465
+0=712254
+0=720638
+0=713866
+0=707020
+0=711040
+0=710640
+0=698010
+0=699075
+0=701067
+0=686127
+0=683281
+0=686939
+0=668922
+0=665133
+0=665133
+0=649619
+0=640439
+0=639263
+0=623962
+0=614825
+0=606600
+0=600790
+0=590391
+0=597384
+0=629934
+0=612794
+0=637389
+0=605436
+0=592250
+0=593766
+0=606874
+0=616885
+0=617075
+0=634730
+0=645470
+0=645144
+0=656590
+0=672275
+0=667178
+0=676492
+0=690819
+0=685604
+0=690330
+0=705479
+0=699555
+0=701897
+0=713963
+0=711021
+0=708849
+0=716800
+0=719788
+0=713805
+0=716784
+0=723852
+0=713900
+0=714382
+0=722926
+0=711697
+0=709365
+0=717025
+0=706470
+0=700477
+0=706142
+0=697736
+0=689344
+0=689518
+0=686751
+0=672911
+0=670073
+0=667733
+0=654929
+0=644993
+0=644637
+0=629947
+0=618884
+0=613599
+0=604071
+0=591591
+0=594720
+0=604830
+0=652804
+0=643875
+0=618896
+0=590671
+0=592497
+0=605527
+0=606194
+0=612937
+0=636421
+0=633488
+0=641504
+0=659307
+0=661223
+0=663082
+0=677697
+0=683504
+0=682617
+0=691274
+0=701617
+0=696178
+0=701861
+0=712770
+0=707428
+0=708749
+0=720021
+0=714585
+0=712747
+0=721085
+0=719554
+0=713504
+0=718429
+0=721627
+0=711194
+0=712434
+0=717714
+0=706253
+0=703998
+0=709668
+0=697182
+0=692556
+0=694885
+0=686032
+0=676261
+0=676225
+0=670327
+0=657960
+0=649837
+0=651260
+0=631849
+0=623263
+0=623312
+0=606489
+0=593319
+0=599977
+0=594806
+0=620507
+0=614542
+0=646242
+0=599441
+0=595160
+0=597929
+0=599853
+0=612970
+0=627371
+0=626544
+0=640746
+0=653680
+0=654598
+0=661713
+0=676589
+0=676006
+0=681004
+0=691190
+0=695531
+0=693976
+0=701782
+0=710214
+0=705144
+0=708251
+0=719777
+0=711621
+0=712817
+0=723704
+0=715758
+0=713853
+0=722969
+0=717090
+0=711806
+0=717009
+0=716146
+0=707176
+0=706736
+0=711137
+0=698080
+0=694967
+0=699647
+0=686650
+0=678224
+0=684045
+0=670219
+0=659382
+0=660810
+0=650813
+0=633677
+0=634527
+0=625384
+0=607705
+0=604425
+0=602144
+0=588241
+0=602358
+0=640337
+0=652672
+0=615042
+0=599240
+0=591482
+0=600823
+0=609381
+0=618119
+0=624214
+0=635562
+0=648034
+0=651051
+0=657043
+0=673992
+0=672034
+0=676835
+0=691720
+0=690220
+0=690596
+0=705124
+0=703913
+0=702057
+0=711324
+0=716062
+0=709409
+0=714850
+0=722683
+0=713520
+0=715410
+0=724539
+0=714637
+0=712965
+0=721784
+0=712729
+0=707643
+0=713639
+0=708779
+0=698579
+0=700947
+0=700687
+0=686621
+0=684408
+0=688154
+0=669318
+0=666069
+0=667454
+0=649895
+0=641523
+0=642661
+0=623775
+0=615865
+0=610867
+0=599708
+0=590076
+0=596896
+0=621421
+0=623214
+0=634432
+0=607868
+0=591573
+0=593987
+0=605556
+0=614365
+0=616214
+0=634818
+0=642097
+0=644248
+0=656730
+0=669659
+0=666141
+0=676271
+0=689472
+0=684445
+0=690078
+0=705130
+0=698156
+0=701634
+0=714659
+0=709287
+0=708537
+0=719078
+0=717164
+0=712823
+0=718971
+0=722645
+0=713631
+0=715434
+0=722789
+0=711391
+0=710147
+0=717895
+0=705986
+0=701130
+0=708254
+0=696784
+0=689844
+0=692710
+0=685593
+0=673183
+0=672721
+0=668142
+0=654584
+0=648190
+0=646007
+0=629544
+0=621942
+0=615664
+0=604410
+0=592839
+0=595412
+0=600888
+0=644187
+0=647795
+0=626200
+0=591502
+0=592368
+0=603512
+0=605184
+0=611597
+0=635108
+0=631597
+0=640182
+0=659114
+0=659076
+0=661740
+0=679008
+0=680617
+0=681336
+0=692042
+0=700006
+0=694923
+0=702292
+0=712181
+0=706179
+0=709004
+0=720389
+0=713175
+0=712885
+0=722619
+0=717656
+0=713590
+0=720617
+0=719788
+0=711203
+0=713926
+0=717449
+0=705980
+0=705292
+0=710428
+0=696721
+0=693761
+0=696667
+0=685286
+0=677550
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
diff --git a/tests/ref/fate/filter-dumpwave-24bit b/tests/ref/fate/filter-dumpwave-24bit
new file mode 100644
index 0000000000..f762ace37b
--- /dev/null
+++ b/tests/ref/fate/filter-dumpwave-24bit
@@ -0,0 +1,1800 @@ 
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=224302
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+0=841745
+0=788047
+0=748917
+0=720293
+0=688079
+0=656733
+0=638894
+0=634215
+0=630093
+0=631210
+0=633098
+0=651759
+0=658466
+0=652880
+0=662558
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+0=844392
+0=765081
+0=762103
+0=707079
+0=679771
+0=675042
+0=663191
+0=700414
+0=757438
+0=725194
+0=705868
+0=687268
+0=691135
+0=750347
+0=723829
+0=682688
+0=666682
+0=664180
+0=675279
+0=676935
+0=654239
+0=664039
+0=663011
+0=647605
+0=642384
+0=647789
+0=671352
+0=673537
+0=691387
+0=714801
+0=736264
+0=738198
+0=712065
+0=718203
+0=717840
+0=769580
+0=737699
+0=707247
+0=697584
+0=671126
+0=642209
+0=660227
+0=660507
+0=688137
+0=767453
+0=799177
+0=734205
+0=710574
+0=671055
+0=731670
+0=827303
+0=831449
+0=964008
+0=990753
+0=935534
+0=698339
+0=692149
+0=688286
+0=699028
+0=688225
+0=707303
+0=691346
+0=698947
+0=699622
+0=706657
+0=723386
+0=721420
+0=726225
+0=736428
+0=742754
+0=718415
+0=725973
+0=723311
+0=715160
+0=726739
+0=712333
+0=709311
+0=644005
+0=667798
+0=686012
+0=722711
+0=931965
+0=866032
+0=749760
+0=698270
+0=640944
+0=689757
+0=753800
+0=791440
+0=925562
+0=799456
+1=000000
+0=919873
+0=817269
+0=677215
+0=758001
+0=763341
+0=784855
+0=771223
+0=761722
+0=736243
+0=743542
+0=757208
+0=755877
+0=753123
+0=764066
+0=769388
+0=804547
+0=804305
+0=795622
+0=798916
+0=767507
+0=774637
+0=764732
+0=714243
+0=671109
+0=729271
+0=799450
+0=909180
+1=000000
+0=894119
+0=709049
+0=662739
+0=680415
+0=713906
+0=772539
+0=906828
+0=899995
+0=920487
+1=000000
+0=810841
+0=684986
+0=711258
+0=725620
+0=776792
+0=745277
+0=761995
+0=767798
+0=739816
+0=757500
+0=738110
+0=792096
+0=846678
+0=838788
+0=948339
+0=982073
+0=952408
+0=832683
+0=813362
+0=842852
+0=797106
+0=803256
+0=764264
+0=790589
+0=856282
+1=000000
+0=999174
+0=901788
+0=777854
+0=773426
+0=738647
+0=703269
+0=780736
+0=988676
+1=000000
+1=000000
+1=000000
+0=833610
+0=763349
+0=726852
+0=739021
+0=908965
+0=885340
+1=000000
+0=881319
+0=799549
+0=857412
+0=837212
+0=867977
+0=892579
+0=894092
+0=856737
+0=877661
+0=854919
+0=803554
+0=813056
+0=807427
+0=787018
+0=777809
+0=845759
+0=846430
+0=869370
+1=000000
+1=000000
+0=978480
+0=806175
+0=816200
+0=825170
+0=763962
+0=822614
+1=000000
+0=955709
+1=000000
+0=920265
+0=764339
+0=771021
+0=749014
+0=783016
+0=910570
+1=000000
+1=000000
+0=930078
+0=752214
+0=782371
+0=973670
+0=903115
+0=920444
+0=912696
+0=888486
+0=925196
+0=893076
+0=901428
+0=857528
+0=899964
+0=863507
+0=861074
+0=844177
+0=852677
+0=902875
+0=900525
+0=958217
+0=890276
+0=946505
+0=944610
+0=811391
+0=746645
+0=904529
+0=865012
+0=973616
+1=000000
+0=873728
+0=743539
+0=739248
+0=735495
+0=941765
+0=916189
+0=956666
+0=871292
+0=942754
+0=786919
+0=759121
+0=763417
+0=736012
+0=855912
+0=915690
+0=880190
+0=978250
+0=994537
+0=897972
+0=948645
+1=000000
+0=946789
+0=967859
+0=868263
+0=891167
+0=868412
+0=923960
+0=930740
+0=949476
+0=968820
+0=942560
+0=997686
+0=955536
+0=991766
+1=000000
+0=978315
+1=000000
+0=948582
+0=763077
+0=738243
+0=791407
+0=851858
+0=938881
+0=933761
+0=864582
+0=971071
+1=000000
+0=997599
+0=942161
+0=760131
+0=925148
+1=000000
+1=000000
+0=969989
+0=983823
+0=948713
+0=915842
+0=994454
+0=895032
+0=880687
+0=852227
+0=833531
+0=848224
+0=882641
+0=957190
+0=968869
+1=000000
+1=000000
+0=992307
+0=967208
+0=979524
+0=977865
+0=959268
+0=967298
+0=989030
+0=832418
+0=772989
+0=765857
+0=831373
+0=982342
+0=980518
+1=000000
+0=975839
+0=900911
+0=820326
+0=980271
+1=000000
+0=892618
+0=973388
+1=000000
+0=998069
+1=000000
+0=872368
+0=903706
+0=967277
+0=949791
+0=952947
+0=904188
+0=944787
+0=954079
+0=926660
+0=982137
+0=955253
+0=992198
+0=961992
+0=990132
+0=966033
+0=959110
+0=957259
+0=856759
+0=890691
+0=940475
+0=985574
+0=860379
+0=849068
+0=959235
+0=844167
+0=874377
+0=848563
+0=840440
+0=948905
+0=906866
+0=958252
+0=989144
+0=848357
+0=968794
+0=980987
+0=894828
+0=911726
+0=881825
+0=856113
+0=959623
+0=896656
+0=972501
+0=939894
+0=982672
+0=959736
+0=961141
+1=000000
+0=994292
+0=995982
+0=947090
+1=000000
+1=000000
+0=992761
+0=978781
+0=985234
+0=957014
+0=961768
+0=948226
+0=914261
+0=932501
+0=933892
+0=978484
+0=967140
+0=832748
+0=745884
+0=917392
+1=000000
+0=894209
+0=883887
+0=822313
+0=972362
+1=000000
+0=886391
+0=928341
+0=821172
+0=863261
+1=000000
+0=832096
+0=909564
+0=973634
+0=974417
+0=922031
+0=956091
+0=954641
+0=922537
+0=929884
+0=944048
+0=966920
+0=981914
+0=971320
+0=951493
+1=000000
+0=979823
+0=972921
+0=942573
+0=967899
+0=952465
+0=907230
+0=931029
+0=969490
+0=941927
+0=809856
+0=964684
+0=944925
+0=989618
+0=874620
+0=967000
+0=981291
+1=000000
+0=883393
+0=891833
+0=863094
+1=000000
+0=971085
+0=979232
+0=959368
+0=982586
+0=884528
+0=882526
+1=000000
+0=906835
+0=993183
+1=000000
+1=000000
+0=982826
+0=997459
+0=991041
+1=000000
+0=958453
+0=945851
+0=960850
+0=910385
+0=847791
+0=890285
+0=961240
+0=957250
+0=985075
+0=951963
+0=927003
+0=952378
+0=919249
+1=000000
+0=901805
+1=000000
+1=000000
+0=814169
+0=916923
+1=000000
+1=000000
+0=952165
+0=902322
+0=908002
+0=948014
+0=858024
+0=761607
+0=833539
+0=950271
+0=978927
+0=993227
+0=792331
+0=931884
+0=972283
+0=983334
+0=958172
+0=942749
+0=952302
+0=987334
+0=947250
+0=958788
+0=951924
+0=960742
+0=940217
+0=961246
+0=976297
+0=987047
+0=931444
+0=967859
+0=955151
+0=971760
+0=970895
+0=943685
+0=958568
+0=817709
+0=786615
+0=789430
+0=948780
+0=882037
+0=712753
+0=841486
+0=929263
+1=000000
+0=735648
+0=753999
+0=862883
+1=000000
+0=938782
+0=801265
+0=926550
+1=000000
+0=750665
+0=948961
+0=951378
+0=967976
+0=991725
+1=000000
+0=954079
+0=961090
+1=000000
+0=978406
+0=961082
+0=978406
+0=985876
+0=995996
+0=994075
+0=999286
+0=941232
+0=981213
+0=953664
+0=955501
+0=966355
+0=748529
+0=764968
+0=808405
+0=955742
+0=696660
+0=756588
+0=799144
+1=000000
+0=853078
+0=990571
+0=884054
+0=956468
+0=908133
+0=789570
+0=847777
+0=970647
+0=812663
+0=768222
+0=735423
+0=779359
+0=968791
+0=987127
+0=957957
+0=925199
+0=957934
+0=952264
+0=945846
+0=954571
+0=936280
+0=964646
+0=992989
+0=950365
+0=932901
+0=915224
+0=888636
+0=956748
+1=000000
+1=000000
+1=000000
+0=922857
+0=923174
+0=770231
+0=946888
+0=968871
+0=965949
+1=000000
+1=000000
+1=000000
+0=975505
+0=845332
+0=825614
+0=838105
+0=990704
+0=867669
+0=839457
+0=802678
+0=850867
+0=963496
+0=860189
+0=978255
+0=959337
+0=953877
+0=955596
+0=962588
+0=983066
+0=960229
+0=936067
+0=981828
+0=984295
+0=956396
+0=981942
+0=965212
+0=957171
+0=943461
+0=973749
+0=961673
+0=875896
+0=985616
+0=984066
+1=000000
+1=000000
+1=000000
+0=918539
+1=000000
+1=000000
+0=947545
+0=767944
+0=752053
+0=821105
+1=000000
+0=865282
+0=808337
+0=808271
+0=854263
+0=945628
+0=822692
+0=998359
+1=000000
+0=865840
+0=908397
+0=964975
+0=879364
+0=924567
+0=980277
+0=960580
+0=974134
+0=954330
+0=968070
+0=992057
+0=943954
+0=961198
+1=000000
+0=950107
+0=951018
+0=965437
+0=956448
+0=991752
+0=946372
+0=977417
+0=924209
+0=788942
+0=944906
+0=922399
+0=736540
+0=748182
+0=793174
+1=000000
+0=942923
+0=750392
+0=769406
+0=963301
+0=899519
+0=816897
+0=808104
+0=890071
+0=938358
+0=962607
+0=835501
+0=868008
+0=966809
+1=000000
+0=973309
+0=973334
+0=978602
+0=955790
+0=951976
+0=972266
+0=983089
+0=919059
+0=925421
+0=939524
+1=000000
+0=995834
+0=974150
+0=932100
+0=960070
+0=964293
+0=996906
+0=967398
+0=973681
+0=855122
+0=772457
+0=783127
+0=976136
+0=909671
+0=841953
+0=807564
+0=755521
+0=976210
+1=000000
+0=880193
+1=000000
+0=997657
+0=995070
+0=978508
+0=940706
+0=936243
+0=995662
+0=946063
+0=975254
+0=985556
+0=975832
+0=968476
+0=956676
+0=950189
+0=980697
+0=968794
+0=931082
+0=930510
+0=948618
+0=941369
+0=924711
+0=987972
+0=988729
+0=969527
+0=933802
+0=918249
+0=906997
+0=920807
+0=854953
+0=979677
+0=984832
+1=000000
+0=904425
+0=898181
+0=908456
+0=848372
+0=998143
+1=000000
+0=966288
+1=000000
+1=000000
+0=916176
+1=000000
+1=000000
+0=940605
+1=000000
+0=986891
+1=000000
+0=929727
+0=988300
+0=967530
+0=980489
+0=952880
+0=961959
+0=908535
+0=948238
+0=943060
+0=978952
+0=970153
+1=000000
+0=968099
+0=984090
+0=972909
+1=000000
+0=983198
+0=974817
+0=944278
+0=939285
+0=992397
+0=967710
+0=913271
+0=837739
+0=968960
+1=000000
+0=914456
+0=981115
+0=981976
+1=000000
+1=000000
+0=945902
+0=965958
+1=000000
+0=923470
+0=836821
+0=887226
+0=910174
+0=896661
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
\ No newline at end of file
diff --git a/tests/ref/fate/filter-dumpwave-fltp b/tests/ref/fate/filter-dumpwave-fltp
new file mode 100644
index 0000000000..e66230c331
--- /dev/null
+++ b/tests/ref/fate/filter-dumpwave-fltp
@@ -0,0 +1,1800 @@ 
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+0=858258
+0=539333
+0=438221
+0=372100
+0=366304
+0=605164
+0=637041
+0=647097
+0=650465
+0=660785
+0=686207
+0=692284
+0=714718
+1=000000
+1=000000
+1=000000
+1=000000
+1=000000
+0=932305
+0=620423
+0=442906
+0=368353
+0=319873
+0=545479
+0=620829
+0=647351
+0=677884
+0=675255
+0=679301
+0=672597
+0=688984
+0=706110
+0=716553
+0=740333
+0=731576
+0=713456
+0=726138
+0=718627
+0=724037
+0=726700
+0=736484
+0=729591
+0=722254
+0=722133
+0=719773
+0=717406
+0=723866
+0=740628
+0=731773
+0=729539
+0=718669
+0=705302
+0=724621
+0=739104
+0=724219
+0=727740
+0=720731
+0=709535
+0=723419
+0=734793
+0=740019
+0=730477
+0=716716
+0=712089
+0=714344
+0=728412
+0=736718
+0=739912
+0=729902
+0=710555
+0=719894
+0=722910
+0=722449
+0=737566
+0=729739
+0=716124
+0=721822
+0=715009
+0=723679
+0=722796
+0=732713
+0=737485
+0=720121
+0=728077
+0=716547
+0=716084
+0=719229
+0=732125
+0=744413
+0=730455
+0=715725
+0=710203
+0=732332
+0=741583
+0=724931
+0=724937
+0=709796
+0=709250
+0=723284
+0=732987
+0=745560
+0=728379
+0=711723
+0=724620
+0=713805
+0=730486
+0=724913
+0=741663
+0=728598
+0=718227
+0=727791
+0=723163
+0=723398
+0=731062
+0=734626
+0=731220
+0=727052
+0=720081
+0=738048
+0=717014
+0=733038
+0=743975
+0=734933
+0=732812
+0=720501
+0=717626
+0=725392
+0=732820
+0=749270
+0=704439
+0=722127
+0=711660
+0=734862
+0=738333
+0=733339
+0=736081
+0=708228
+0=726093
+0=731247
+0=730739
+0=743854
+0=736958
+0=724179
+0=723631
+0=723821
+0=732181
+0=726260
+0=739140
+0=733514
+0=724304
+0=729432
+0=722905
+0=728259
+0=721314
+0=738705
+0=740450
+0=727002
+0=723862
+0=723334
+0=709887
+0=730005
+0=739521
+0=741841
+0=729584
+0=712231
+0=336937
+0=298472
+0=209081
+0=714031
+0=724366
+0=715397
+0=721422
+0=732867
+0=730268
+0=748117
+0=729724
+0=712682
+0=726029
+0=721250
+0=726328
+0=733099
+0=737674
+0=731491
+0=720964
+0=578512
+0=298573
+0=272381
+0=206786
+0=237417
+0=252874
+0=226084
+0=172041
+0=186558
+0=190866
+0=182826
+0=175867
+0=165237
+0=151661
+0=150387
+0=146097
+0=152924
+0=199537
+0=153670
+0=122749
+0=159706
+0=126894
+0=165266
+0=239186
+0=233079
+0=222228
+0=206099
+0=201526
+0=191191
+0=198300
+0=197981
+0=163304
+0=145302
+0=159978
+0=149547
+0=147227
+0=141445
+0=159249
+0=135666
+0=139789
+0=127052
+0=160830
+0=186189
+0=132828
+0=150849
+0=143468
+0=144028
+0=183438
+0=135804
+0=217010
+0=197695
+0=171126
+0=203445
+0=194493
+0=241693
+0=406420
+0=339634
+0=383268
+0=455703
+0=457827
+0=520291
+0=524483
+0=238330
+0=110808
+0=168339
+0=147951
+0=162243
+0=150819
+0=184741
+0=175898
+0=194101
+0=190111
+0=179677
+0=233265
+0=318130
+0=320481
+0=354988
+0=481297
+0=460593
+0=467382
+0=568170
+0=517503
+0=520205
+0=548765
+0=553441
+0=600469
+0=545632
+0=600640
+0=568467
+0=569154
+0=546451
+0=582425
+0=571239
+0=555579
+0=571522
+0=607882
+0=576581
+0=600963
+0=610136
+0=595841
+0=591522
+0=525182
+0=543039
+0=535541
+0=568935
+0=537147
+0=642570
+0=626792
+0=578389
+0=569345
+0=595519
+0=579207
+0=581767
+0=613901
+0=575467
+0=583127
+0=579487
+0=603304
+0=562584
+0=560308
+0=610506
+0=561111
+0=563899
+0=381348
+0=379003
+0=253670
+0=460863
+0=711883
+0=729942
+0=724539
+0=714967
+0=705897
+0=725739
+0=735627
+0=742161
+0=732013
+0=713670
+0=715329
+0=718217
+0=730857
+0=592026
+0=603543
+0=485509
+0=363700
+0=264931
+0=282851
+0=643812
+0=730715
+0=715021
+0=723639
+0=713050
+0=724163
+0=728431
+0=737754
+0=730148
+0=721797
+0=721400
+0=723999
+0=719481
+0=726417
+0=739884
+0=726363
+0=729663
+0=715532
+0=719538
+0=708151
+0=731072
+0=747187
+0=728660
+0=726613
+0=716812
+0=715687
+0=725991
+0=726762
+0=751239
+0=738150
+0=711591
+0=723254
+0=718762
+0=746486
+0=734648
+0=725186
+0=711405
+0=717831
+0=724430
+0=722088
+0=739427
+0=734160
+0=717988
+0=727660
+0=721939
+0=726270
+0=719455
+0=735387
+0=743644
+0=723760
+0=727418
+0=720378
+0=715459
+0=724325
+0=734440
+0=740681
+0=732058
+0=715527
+0=719033
+0=717267
+0=728859
+0=740613
+0=742972
+0=728086
+0=709030
+0=719161
+0=723549
+0=726643
+0=739857
+0=735571
+0=720428
+0=722604
+0=725676
+0=727857
+0=739551
+0=730475
+0=715310
+0=726128
+0=721116
+0=722589
+0=729138
+0=740910
+0=729306
+0=726668
+0=717646
+0=725112
+0=713459
+0=730843
+0=743416
+0=730909
+0=727784
+0=717161
+0=713982
+0=723304
+0=731416
+0=749010
+0=730449
+0=719547
+0=715115
+0=716023
+0=734460
+0=728302
+0=739427
+0=727087
+0=713513
+0=725010
+0=723686
+0=724884
+0=731997
+0=734340
+0=728727
+0=693627
+0=728784
+0=723745
+0=739751
+0=732782
+0=722184
+0=727462
+0=719573
+0=721123
+0=724998
+0=734660
+0=734712
+0=725043
+0=722626
+0=723222
+0=710904
+0=730531
+0=741462
+0=735233
+0=728171
+0=713188
+0=716663
+0=722527
+0=724713
+0=743040
+0=724682
+0=717445
+0=714630
+0=708284
+0=734476
+0=699138
+0=532407
+0=442498
+0=400918
+0=355128
+0=309918
+0=248948
+0=158553
+0=147877
+0=674200
+0=720693
+0=728688
+0=721800
+0=732922
+0=743805
+0=731951
+0=738284
+0=731081
+0=731093
+0=733115
+0=707788
+0=444923
+0=412918
+0=340215
+0=262937
+0=250349
+0=215054
+0=139889
+0=161877
+0=132695
+0=153043
+0=178970
+0=122343
+0=143666
+0=146711
+0=195903
+0=170892
+0=276601
+0=238787
+0=204432
+0=256136
+0=295939
+0=239652
+0=284766
+0=295380
+0=330743
+0=370179
+0=320568
+0=257844
+0=180962
+0=170186
+0=186331
+0=178293
+0=113517
+0=233356
+0=167461
+0=115629
+0=193337
+0=191038
+0=202300
+0=304221
+0=317445
+0=246462
+0=295359
+0=320380
+0=288341
+0=319974
+0=316320
+0=330785
+0=329100
+0=310133
+0=282031
+0=213775
+0=350954
+0=380485
+0=307958
+0=351828
+0=393056
+0=350981
+0=453510
+0=473442
+0=540284
+0=516216
+0=603404
+0=556632
+0=591924
+0=579931
+0=396341
+0=299853
+0=303798
+0=297094
+0=279675
+0=258558
+0=417952
+0=332794
+0=309517
+0=387591
+0=409073
+0=391377
+0=428548
+0=516457
+0=515962
+0=524509
+0=569197
+0=595600
+0=598179
+0=586404
+0=570604
+0=569281
+0=588599
+0=594373
+0=597649
+0=615876
+0=561009
+0=577146
+0=589312
+0=592530
+0=550463
+0=551038
+0=606072
+0=604416
+0=655783
+0=595122
+0=538098
+0=389445
+0=272194
+0=540215
+0=542095
+0=549248
+0=573062
+0=579642
+0=573118
+0=572743
+0=592692
+0=583184
+0=552493
+0=568285
+0=589139
+0=571588
+0=556753
+0=595836
+0=630269
+0=597138
+0=488225
+0=347092
+0=286099
+0=366328
+0=649498
+0=756743
+0=711298
+0=719262
+0=757913
+0=710452
+0=706664
+0=747384
+0=716401
+0=710435
+0=742745
+0=733614
+0=714059
+0=725425
+0=748371
+0=715471
+0=715689
+0=751005
+0=383424
+0=543304
+0=717851
+0=735742
+0=719975
+0=725764
+0=748057
+0=706992
+0=711115
+0=751541
+0=710409
+0=708143
+0=759903
+0=719540
+0=704172
+0=758216
+0=726936
+0=700870
+0=751976
+0=726916
+0=705335
+0=743198
+0=727901
+0=709083
+0=730888
+0=737053
+0=715735
+0=722046
+0=736705
+0=720850
+0=714872
+0=738044
+0=722373
+0=712685
+0=743363
+0=723412
+0=711854
+0=742301
+0=722805
+0=733364
+0=707359
+0=750534
+0=721420
+0=702777
+0=749953
+0=727744
+0=700834
+0=747712
+0=729716
+0=699351
+0=742505
+0=727801
+0=704355
+0=736950
+0=736657
+0=708611
+0=728755
+0=740617
+0=709061
+0=724837
+0=743027
+0=711733
+0=723548
+0=742172
+0=713453
+0=723111
+0=738481
+0=718783
+0=723631
+0=737043
+0=720849
+0=714271
+0=732983
+0=734784
+0=710186
+0=726337
+0=744514
+0=705553
+0=725768
+0=739792
+0=728077
+0=707064
+0=737820
+0=735137
+0=704437
+0=730470
+0=743551
+0=702571
+0=732589
+0=746277
+0=702843
+0=724997
+0=751937
+0=702865
+0=722701
+0=750335
+0=707710
+0=718330
+0=749578
+0=717181
+0=719136
+0=743255
+0=728472
+0=712757
+0=728306
+0=741419
+0=713193
+0=720430
+0=754870
+0=718739
+0=711283
+0=758151
+0=721479
+0=705882
+0=755512
+0=720269
+0=703466
+0=735995
+0=751547
+0=709571
+0=722190
+0=756596
+0=704799
+0=715729
+0=755869
+0=710600
+0=712699
+0=758070
+0=718994
+0=717050
+0=746810
+0=727704
+0=715373
+0=735590
+0=733008
+0=714378
+0=725329
+0=740216
+0=717403
+0=710533
+0=729894
+0=693987
+0=587768
+0=502688
+0=525693
+0=516775
+0=511696
+0=473457
+0=444074
+0=465045
+0=429726
+0=412075
+0=369313
+0=329445
+0=305959
+0=240333
+0=641779
+0=724398
+0=701575
+0=747225
+0=725585
+0=684201
+0=612099
+0=546590
+0=503191
+0=526074
+0=505146
+0=446389
+0=465481
+0=448487
+0=417446
+0=391045
+0=343813
+0=320181
+0=258764
+0=241668
+0=189530
+0=142873
+0=157287
+0=165445
+0=192255
+0=137583
+0=139002
+0=134500
+0=287154
+0=351916
+0=293061
+0=364687
+0=397716
+0=429355
+0=524339
+0=524467
+0=520499
+0=508603
+0=559377
+0=368069
+0=164384
+0=163397
+0=120486
+0=205538
+0=150500
+0=111980
+0=166251
+0=158987
+0=306947
+0=289644
+0=362536
+0=367776
+0=387989
+0=485289
+0=545698
+0=532848
+0=513362
+0=565849
+0=583167
+0=544731
+0=584662
+0=570803
+0=583310
+0=570594
+0=599108
+0=563213
+0=548218
+0=542949
+0=565844
+0=600136
+0=588134
+0=573516
+0=578478
+0=590521
+0=555043
+0=554922
+0=560007
+0=612432
+0=606998
+0=570844
+0=550222
+0=582718
+0=572938
+0=579646
+0=585976
+0=560054
+0=514494
+0=566194
+0=564815
+0=575461
+0=645236
+0=563480
+0=590996
+0=570147
+0=555875
+0=539656
+0=590824
+0=594470
+0=592896
+0=602625
+0=549499
+0=611599
+0=572959
+0=591319
+0=589460
+0=551811
+0=566512
+0=564639
+0=614177
+0=547875
+0=396662
+0=307126
+0=172631
+0=441375
+0=680673
+0=751469
+0=722806
+0=588483
+0=582915
+0=565876
+0=578834
+0=595932
+0=556568
+0=612285
+0=570464
+0=587057
+0=565883
+0=593059
+0=569029
+0=534140
+0=349448
+0=215013
+0=276477
+0=623042
+0=696869
+0=685143
+0=719663
+0=737190
+0=755151
+0=726025
+0=714721
+0=712053
+0=714640
+0=720430
+0=743733
+0=750345
+0=718849
+0=711144
+0=714843
+0=714334
+0=725673
+0=762379
+0=737157
+0=722936
+0=710881
+0=706635
+0=767496
+0=715661
+0=707068
+0=713999
+0=739455
+0=752270
+0=724763
+0=712256
+0=710139
+0=717277
+0=727246
+0=755813
+0=746759
+0=717384
+0=705529
+0=706060
+0=719702
+0=732741
+0=760755
+0=729350
+0=718240
+0=715523
+0=714636
+0=717284
+0=737025
+0=753960
+0=722617
+0=715784
+0=708112
+0=709513
+0=727078
+0=762408
+0=746239
+0=721714
+0=707990
+0=705856
+0=714945
+0=735405
+0=760176
+0=654258
+0=737983
+0=757958
+0=728876
+0=712977
+0=709876
+0=717108
+0=727267
+0=746639
+0=748290
+0=717772
+0=709286
+0=713374
+0=715636
+0=728005
+0=761250
+0=735247
+0=721463
+0=716874
+0=710418
+0=714677
+0=735266
+0=757754
+0=729692
+0=714396
+0=707368
+0=710669
+0=729828
+0=749334
+0=752397
+0=718298
+0=706464
+0=708124
+0=719114
+0=729194
+0=758562
+0=731793
+0=718500
+0=720633
+0=782719
+0=715891
+0=715671
+0=718355
+0=720950
+0=740356
+0=754179
+0=718208
+0=713248
+0=710593
+0=709908
+0=722396
+0=762683
+0=741903
+0=724495
+0=711420
+0=705995
+0=713733
+0=736806
+0=759246
+0=730239
+0=711932
+0=708783
+0=716779
+0=730679
+0=741627
+0=755470
+0=720472
+0=709848
+0=710643
+0=712935
+0=724190
+0=759969
+0=737380
+0=727660
+0=718064
+0=710381
+0=711870
+0=731416
+0=688292
+0=715189
+0=734444
+0=757581
+0=726122
+0=717919
+0=707154
+0=710005
+0=724170
+0=759493
+0=748364
+0=722862
+0=710645
+0=706161
+0=717410
+0=733247
+0=758410
+0=732630
+0=713077
+0=712436
+0=671528
+0=469513
+0=233696
+0=311195
+0=320420
+0=367389
+0=362505
+0=346831
+0=328538
+0=301621
+0=287011
+0=286690
+0=214465
+0=163265
+0=152579
+0=163518
+0=144076
+0=160782
+0=135019
+0=630613
+0=597477
+0=237097
+0=198741
+0=292621
+0=323590
+0=332767
+0=360086
+0=312172
+0=279391
+0=302348
+0=335329
+0=256106
+0=215853
+0=174218
+0=135164
+0=136013
+0=133883
+0=165344
+0=135052
+0=128345
+0=150472
+0=205497
+0=226469
+0=263599
+0=269841
+0=170750
+0=188872
+0=186840
+0=250134
+0=298306
+0=396104
+0=427885
+0=543909
+0=424536
+0=472631
+0=512415
+0=527628
+0=538201
+0=352777
+0=137645
+0=143076
+0=246058
+0=263169
+0=248701
+0=240569
+0=168567
+0=194020
+0=236052
+0=284744
+0=285092
+0=407308
+0=491072
+0=478449
+0=451156
+0=429528
+0=490049
+0=515566
+0=580273
+0=582295
+0=588152
+0=594467
+0=564015
+0=538235
+0=572068
+0=604544
+0=647035
+0=568192
+0=608431
+0=583999
+0=585483
+0=595099
+0=594672
+0=596411
+0=582694
+0=560740
+0=621372
+0=575073
+0=547070
+0=627652
+0=593563
+0=621620
+0=586489
+0=590537
+0=600251
+0=625004
+0=577153
+0=570160
+0=606588
+0=588507
+0=591719
+0=619735
+0=609646
+0=614669
+0=579035
+0=524839
+0=640188
+0=576647
+0=560327
+0=589136
+0=574958
+0=581608
+0=610523
+0=600005
+0=594807
+0=415057
+0=330775
+0=348688
+0=396542
+0=672117
+0=723955
+0=723567
+0=723081
+0=736399
+0=738797
+0=725828
+0=720043
+0=601666
+0=561489
+0=595882
+0=558544
+0=570027
+0=577182
+0=548895
+0=548908
+0=347306
+0=357285
+0=237377
+0=580480
+0=703569
+0=720167
+0=731121
+0=732540
+0=743617
+0=731436
+0=708197
+0=723609
+0=720998
+0=721977
+0=734014
+0=736209
+0=725814
+0=723207
+0=723041
+0=726563
+0=719056
+0=729847
+0=741391
+0=724859
+0=729588
+0=719098
+0=720348
+0=717385
+0=732965
+0=745913
+0=726066
+0=716518
+0=708595
+0=728737
+0=742360
+0=732139
+0=731107
+0=717320
+0=716150
+0=719504
+0=729701
+0=746598
+0=732365
+0=722496
+0=714218
+0=718923
+0=728152
+0=728376
+0=741974
+0=730084
+0=714578
+0=728150
+0=719273
+0=728601
+0=726802
+0=736534
+0=732485
+0=725136
+0=724259
+0=724578
+0=716306
+0=726466
+0=739287
+0=731719
+0=732103
+0=716522
+0=717032
+0=714119
+0=730491
+0=743419
+0=740030
+0=719759
+0=710935
+0=731383
+0=736073
+0=742159
+0=731421
+0=713264
+0=721349
+0=719988
+0=730493
+0=733872
+0=737872
+0=723866
+0=717884
+0=721266
+0=725806
+0=720238
+0=734459
+0=733243
+0=722119
+0=726957
+0=718741
+0=726565
+0=714592
+0=732242
+0=742935
+0=725439
+0=726836
+0=717610
+0=711754
+0=728007
+0=733194
+0=744611
+0=729491
+0=715490
+0=714082
+0=715279
+0=730334
+0=748382
+0=725652
+0=711697
+0=715536
+0=727916
+0=726933
+0=745189
+0=732148
+0=711409
+0=723626
+0=718507
+0=731067
+0=726650
+0=739967
+0=728664
+0=719181
+0=724035
+0=719857
+0=719321
+0=725289
+0=735995
+0=730689
+0=728807
+0=720367
+0=723034
+0=709003
+0=733111
+0=746213
+0=729288
+0=730585
+0=715614
+0=711483
+0=724817
+0=729381
+0=745292
+0=642570
+0=337972
+0=222941
+0=199253
+0=557917
+0=736973
+0=728063
+0=711478
+0=721841
+0=723217
+0=723962
+0=741826
+0=735359
+0=719901
+0=726042
+0=718349
+0=726303
+0=722474
+0=733124
+0=712207
+0=514321
+0=258485
+0=191512
+0=191568
+0=208579
+0=197767
+0=159554
+0=166685
+0=159137
+0=156098
+0=140183
+0=135656
+0=158351
+0=204264
+0=179447
+0=145815
+0=186971
+0=154190
+0=172361
+0=264647
+0=249852
+0=360308
+0=295691
+0=240511
+0=219274
+0=128982
+0=155513
+0=164454
+0=161931
+0=132662
+0=207530
+0=147174
+0=210396
+0=151111
+0=186041
+0=157637
+0=125937
+0=211981
+0=239249
+0=251700
+0=311075
+0=234826
+0=230703
+0=313952
+0=281432
+0=256490
+0=366061
+0=264166
+0=243863
+0=261983
+0=413306
+0=380981
+0=492869
+0=420291
+0=520805
+0=531118
+0=553591
+0=552420
+0=567550
+0=578776
+0=549849
+0=557985
+0=434722
+0=333954
+0=236992
+0=328843
+0=325971
+0=203870
+0=268857
+0=383662
+0=375773
+0=438134
+0=417538
+0=422026
+0=565881
+0=582816
+0=551380
+0=551130
+0=580823
+0=545862
+0=543732
+0=586506
+0=604576
+0=581742
+0=581295
+0=551463
+0=569139
+0=556255
+0=569214
+0=588226
+0=581470
+0=627098
+0=596086
+0=576726
+0=572954
+0=605795
+0=578559
+0=571867
+0=565670
+0=575661
+0=609835
+0=588236
+0=624934
+0=573511
+0=572515
+0=555435
+0=563173
+0=557587
+0=578116
+0=618013
+0=578225
+0=580694
+0=590855
+0=585934
+0=585363
+0=612975
+0=598365
+0=584673
+0=549799
+0=570197
+0=618477
+0=596165
+0=586621
+0=442706
+0=334194
+0=243121
+0=311331
+0=636602
+0=707214
+0=719460
+0=728204
+0=721297
+0=719018
+0=732579
+0=729194
+0=725977
+0=727010
+0=743814
+0=723710
+0=728655
+0=628553
+0=558622
+0=552421
+0=373848
+0=257946
+0=279333
+0=488714
+0=699833
+0=739322
+0=724375
+0=724333
+0=737915
+0=723226
+0=722602
+0=728291
+0=734953
+0=717845
+0=724287
+0=718031
+0=715061
+0=717984
+0=726193
+0=735433
+0=719109
+0=727262
+0=733828
+0=726461
+0=724164
+0=739346
+0=730675
+0=729563
+0=725637
+0=742532
+0=721622
+0=725064
+0=729975
+0=730429
+0=718999
+0=725529
+0=695749
+0=734219
+0=723839
+0=734220
+0=734464
+0=723981
+0=718157
+0=736161
+0=720684
+0=717402
+0=715020
+0=722694
+0=721875
+0=716569
+0=735752
+0=720938
+0=724215
+0=730151
+0=738189
+0=721097
+0=732469
+0=735577
+0=730498
+0=720141
+0=736966
+0=731033
+0=726389
+0=722812
+0=736244
+0=718244
+0=720137
+0=721958
+0=715690
+0=715191
+0=718824
+0=732252
+0=721350
+0=719896
+0=730658
+0=783584
+0=720844
+0=711397
+0=720923
+0=725021
+0=716381
+0=730739
+0=732948
+0=724540
+0=720467
+0=740826
+0=725570
+0=724575
+0=730908
+0=737576
+0=723859
+0=727079
+0=736010
+0=722816
+0=720204
+0=728826
+0=727815
+0=716737
+0=715549
+0=718111
+0=719339
+0=719322
+0=729040
+0=733479
+0=721686
+0=725697
+0=736822
+0=726820
+0=725612
+0=738860
+0=732063
+0=726496
+0=726555
+0=740571
+0=656223
+0=723796
+0=728434
+0=736799
+0=725844
+0=724446
+0=740163
+0=730635
+0=724207
+0=730917
+0=734293
+0=721812
+0=721282
+0=733457
+0=719132
+0=715520
+0=715774
+0=725195
+0=722186
+0=718917
+0=739118
+0=724739
+0=723615
+0=728776
+0=738377
+0=724282
+0=730260
+0=739063
+0=731981
+0=716725
+0=684159
+0=433223
+0=231157
+0=214786
+0=206197
+0=223375
+0=222949
+0=152217
+0=117950
+0=588154
+0=728723
+0=733535
+0=726428
+0=717015
+0=727914
+0=725047
+0=712196
+0=716219
+0=724869
+0=722152
+0=596353
+0=327881
+0=216518
+0=197994
+0=240207
+0=179869
+0=211432
+0=131779
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
+0=000000
\ No newline at end of file