OSDN Git Service

Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 28 Mar 2012 23:41:04 +0000 (01:41 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 29 Mar 2012 02:11:10 +0000 (04:11 +0200)
* qatar/master:
  asf: only set index_read if the index contained entries.
  cabac: add overread protection to BRANCHLESS_GET_CABAC().
  cabac: increment jump locations by one in callers of BRANCHLESS_GET_CABAC().
  cabac: remove unused argument from BRANCHLESS_GET_CABAC_UPDATE().
  cabac: use struct+offset instead of memory operand in BRANCHLESS_GET_CABAC().
  h264: add overread protection to get_cabac_bypass_sign_x86().
  h264: reindent get_cabac_bypass_sign_x86().
  h264: use struct offsets in get_cabac_bypass_sign_x86().
  h264: fix overreads in cabac reader.
  wmall: fix seeking.
  lagarith: fix buffer overreads.
  dvdec: drop unnecessary dv_tablegen.h #include
  build: fix doc generation errors in parallel builds
  Replace memset(0) by zero initializations.
  faandct: Remove FAAN_POSTSCALE define and related code.
  dvenc: print allowed profiles if the video doesn't conform to any of them.
  avcodec_encode_{audio,video}: only reallocate output packet when it has non-zero size.
  FATE: add a test for vp8 with changing frame size.
  fate: add kgv1 fate test.
  oggdec: calculate correct timestamps in Ogg/FLAC

Conflicts:
libavcodec/4xm.c
libavcodec/cook.c
libavcodec/dvdata.c
libavcodec/dvdsubdec.c
libavcodec/lagarith.c
libavcodec/lagarithrac.c
libavcodec/utils.c
tests/fate/video.mak

Merged-by: Michael Niedermayer <michaelni@gmx.at>
57 files changed:
1  2 
doc/Makefile
ffplay.c
ffserver.c
libavcodec/4xm.c
libavcodec/aaccoder.c
libavcodec/aacpsy.c
libavcodec/ac3dec.c
libavcodec/alsdec.c
libavcodec/bink.c
libavcodec/cabac_functions.h
libavcodec/cook.c
libavcodec/dct-test.c
libavcodec/dv.c
libavcodec/dvdata.c
libavcodec/dvdata.h
libavcodec/dvdec.c
libavcodec/dvdsubdec.c
libavcodec/dxva2.c
libavcodec/faandct.h
libavcodec/flac_parser.c
libavcodec/intrax8dsp.c
libavcodec/jpeglsenc.c
libavcodec/lagarith.c
libavcodec/lagarithrac.c
libavcodec/libxvid_rc.c
libavcodec/libxvidff.c
libavcodec/mjpegdec.c
libavcodec/motion_est.c
libavcodec/mpegaudiodec.c
libavcodec/mpegvideo_enc.c
libavcodec/ra144enc.c
libavcodec/rangecoder.c
libavcodec/rv34.c
libavcodec/smacker.c
libavcodec/tiff.c
libavcodec/truemotion1.c
libavcodec/wmalosslessdec.c
libavcodec/wmaprodec.c
libavcodec/wmavoice.c
libavcodec/x86/cabac.h
libavcodec/x86/h264_i386.h
libavdevice/bktr.c
libavformat/asfcrypt.c
libavformat/asfdec.c
libavformat/movenc.c
libavformat/oggparseflac.c
libavformat/rtsp.c
libavformat/sapenc.c
libavformat/sdp.c
libavformat/seek-test.c
libavformat/tcp.c
libavformat/udp.c
libavformat/utils.c
libavutil/imgutils.c
libavutil/parseutils.c
tests/fate/video.mak
tests/ref/fate/vp8-size-change

diff --cc doc/Makefile
Simple merge
diff --cc ffplay.c
Simple merge
diff --cc ffserver.c
Simple merge
@@@ -576,19 -550,17 +576,18 @@@ static int decode_i_mb(FourXContext *f
  }
  
  static const uint8_t *read_huffman_tables(FourXContext *f,
 -                                          const uint8_t * const buf)
 +                                          const uint8_t * const buf, int buf_size)
  {
-     int frequency[512];
+     int frequency[512] = { 0 };
      uint8_t flag[512];
      int up[512];
      uint8_t len_tab[257];
      int bits_tab[257];
      int start, end;
      const uint8_t *ptr = buf;
 +    const uint8_t *ptr_end = buf + buf_size;
      int j;
  
-     memset(frequency, 0, sizeof(frequency));
      memset(up, -1, sizeof(up));
  
      start = *ptr++;
@@@ -691,10 -660,7 +690,9 @@@ static int decode_i2_frame(FourXContex
  
      for (y = 0; y < height; y += 16) {
          for (x = 0; x < width; x += 16) {
-             unsigned int color[4], bits;
+             unsigned int color[4] = { 0 }, bits;
 +            if (buf_end - buf < 8)
 +                return -1;
-             memset(color, 0, sizeof(color));
              // warning following is purely guessed ...
              color[0] = bytestream2_get_le16u(&g3);
              color[1] = bytestream2_get_le16u(&g3);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -47,7 -47,8 +47,7 @@@ static void refill(CABACContext *c)
          c->low+= c->bytestream[0]<<1;
  #endif
      c->low -= CABAC_MASK;
-     c->bytestream+= CABAC_BITS/8;
 -    if (c->bytestream < c->bytestream_end)
 -        c->bytestream += CABAC_BITS / 8;
++    c->bytestream += CABAC_BITS / 8;
  }
  
  static inline void renorm_cabac_decoder_once(CABACContext *c){
@@@ -74,7 -75,8 +74,7 @@@ static void refill2(CABACContext *c)
  #endif
  
      c->low += x<<i;
-     c->bytestream+= CABAC_BITS/8;
 -    if (c->bytestream < c->bytestream_end)
 -        c->bytestream += CABAC_BITS/8;
++    c->bytestream += CABAC_BITS/8;
  }
  
  static av_always_inline int get_cabac_inline(CABACContext *c, uint8_t * const state){
@@@ -649,14 -645,11 +645,11 @@@ static void decode_vectors(COOKContext 
   */
  static int mono_decode(COOKContext *q, COOKSubpacket *p, float *mlt_buffer)
  {
-     int category_index[128];
+     int category_index[128] = { 0 };
+     int category[128]       = { 0 };
      int quant_index_table[102];
-     int category[128];
 -    int res;
 +    int res, i;
  
-     memset(&category,       0, sizeof(category));
-     memset(&category_index, 0, sizeof(category_index));
      if ((res = decode_envelope(q, p, quant_index_table)) < 0)
          return res;
      q->num_vectors = get_bits(&q->gb, p->log2_numvector_size);
Simple merge
diff --cc libavcodec/dv.c
Simple merge
@@@ -25,7 -25,7 +25,8 @@@
   */
  
  #include "libavutil/rational.h"
 +#include "libavutil/intreadwrite.h"
+ #include "libavutil/pixdesc.h"
  #include "avcodec.h"
  #include "dvdata.h"
  
Simple merge
Simple merge
@@@ -124,27 -116,12 +124,27 @@@ static int decode_rle(uint8_t *bitmap, 
  }
  
  static void guess_palette(uint32_t *rgba_palette,
 -                          uint8_t *colormap,
 -                          uint8_t *alpha,
 +                          DVDSubContext* ctx,
                            uint32_t subtitle_color)
  {
-     uint8_t color_used[16];
 +    static const uint8_t level_map[4][4] = {
 +        // this configuration (full range, lowest to highest) in tests
 +        // seemed most common, so assume this
 +        {0xff},
 +        {0x00, 0xff},
 +        {0x00, 0x80, 0xff},
 +        {0x00, 0x55, 0xaa, 0xff},
 +    };
+     uint8_t color_used[16] = { 0 };
      int nb_opaque_colors, i, level, j, r, g, b;
 +    uint8_t *colormap = ctx->colormap, *alpha = ctx->alpha;
 +
 +    if(ctx->has_palette) {
 +        for(i = 0; i < 4; i++)
 +            rgba_palette[i] = (ctx->palette[colormap[i]] & 0x00ffffff)
 +                              | ((alpha[i] * 17) << 24);
 +        return;
 +    }
  
      for(i = 0; i < 4; i++)
          rgba_palette[i] = 0;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -334,8 -335,8 +335,8 @@@ output_zeros
          i = 0;
          while (!zero_run && dst + i < end) {
              i++;
-             if (i+2 >= srcend - src)
-                 return src - start;
 -            if (src + i >= src_end)
++            if (i+2 >= src_end - src)
+                 return AVERROR_INVALIDDATA;
              zero_run =
                  !(src[i] | (src[i + 1] & mask1) | (src[i + 2] & mask2));
          }
          } else {
              memcpy(dst, src, i);
              src += i;
+             dst += i;
          }
      }
-     return  src - start;
 -    return src_start - src;
++    return  src - src_start;
  }
  
  
@@@ -366,10 -368,10 +368,10 @@@ static int lag_decode_arith_plane(Lagar
      int read = 0;
      uint32_t length;
      uint32_t offset = 1;
 -    int esc_count = src[0];
 +    int esc_count;
      GetBitContext gb;
      lag_rac rac;
-     const uint8_t *srcend = src + src_size;
+     const uint8_t *src_end = src + src_size;
  
      rac.avctx = l->avctx;
      l->zeros = 0;
@@@ -518,10 -518,15 +524,14 @@@ static int lag_decode_frame(AVCodecCont
          }
          for (i = 0; i < planes; i++)
              srcs[i] = l->rgb_planes + (i + 1) * l->rgb_stride * avctx->height - l->rgb_stride;
-         for (i = 0; i < planes; i++) {
 -        if (offset_ry >= buf_size ||
 -            offset_gu >= buf_size ||
 -            offset_bv >= buf_size ||
 -            (planes == 4 && offs[3] >= buf_size)) {
 -            av_log(avctx, AV_LOG_ERROR,
 -                    "Invalid frame offsets\n");
 -            return AVERROR_INVALIDDATA;
 -        }
++        for (i = 0; i < planes; i++)
 +            if (buf_size <= offs[i]) {
++                av_log(avctx, AV_LOG_ERROR,
++                        "Invalid frame offsets\n");
 +                return AVERROR_INVALIDDATA;
 +            }
++
+         for (i = 0; i < planes; i++)
              lag_decode_arith_plane(l, srcs[i],
                                     avctx->width, avctx->height,
                                     -l->rgb_stride, buf + offs[i],
              av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
              return -1;
          }
 +        if (buf_size <= offset_ry || buf_size <= offset_gu || buf_size <= offset_bv) {
 +            return AVERROR_INVALIDDATA;
 +        }
  
+         if (offset_ry >= buf_size ||
+             offset_gu >= buf_size ||
+             offset_bv >= buf_size) {
+             av_log(avctx, AV_LOG_ERROR,
+                    "Invalid frame offsets\n");
+             return AVERROR_INVALIDDATA;
+         }
          lag_decode_arith_plane(l, p->data[0], avctx->width, avctx->height,
                                 p->linesize[0], buf + offset_ry,
                                 buf_size - offset_ry);
@@@ -38,9 -38,11 +38,11 @@@ void ff_lag_rac_init(lag_rac *l, GetBit
       * however, it gets skipped by the call to align_get_bits()
       */
      align_get_bits(gb);
+     left                = get_bits_left(gb) >> 3;
      l->bytestream_start =
      l->bytestream       = gb->buffer + get_bits_count(gb) / 8;
-     l->bytestream_end   = l->bytestream_start + get_bits_left(gb) / 8;
 -    l->bytestream_end   = l->bytestream_start + FFMIN(length, left);
++    l->bytestream_end   = l->bytestream_start + left;
      l->range        = 0x80;
      l->low          = *l->bytestream >> 1;
      l->hash_shift   = FFMAX(l->scale - 8, 0);
Simple merge
@@@ -94,14 -131,14 +94,14 @@@ static av_cold int xvid_encode_init(AVC
      uint16_t *intra, *inter;
      int fd;
  
-     xvid_plugin_single_t single;
-     struct xvid_ff_pass1 rc2pass1;
-     xvid_plugin_2pass2_t rc2pass2;
-     xvid_gbl_init_t xvid_gbl_init;
-     xvid_enc_create_t xvid_enc_create;
+     xvid_plugin_single_t single       = { 0 };
+     struct xvid_ff_pass1 rc2pass1     = { 0 };
+     xvid_plugin_2pass2_t rc2pass2     = { 0 };
+     xvid_gbl_init_t xvid_gbl_init     = { 0 };
+     xvid_enc_create_t xvid_enc_create = { 0 };
      xvid_enc_plugin_t plugins[7];
  
 -    /* Bring in VOP flags from avconv command-line */
 +    /* Bring in VOP flags from ffmpeg command-line */
      x->vop_flags = XVID_VOP_HALFPEL; /* Bare minimum quality */
      if( xvid_flags & CODEC_FLAG_4MV )
          x->vop_flags |= XVID_VOP_INTER4V; /* Level 3 */
@@@ -382,16 -414,17 +377,14 @@@ static int xvid_encode_frame(AVCodecCon
      int mb_width   = (avctx->width  + 15) / 16;
      int mb_height  = (avctx->height + 15) / 16;
  
-     xvid_enc_frame_t xvid_enc_frame;
-     xvid_enc_stats_t xvid_enc_stats;
+     xvid_enc_frame_t xvid_enc_frame = { 0 };
+     xvid_enc_stats_t xvid_enc_stats = { 0 };
  
 -    if (!user_packet &&
 -        (ret = av_new_packet(pkt, mb_width*mb_height*MAX_MB_BYTES + FF_MIN_BUFFER_SIZE)) < 0) {
 -        av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n");
 +    if ((ret = ff_alloc_packet2(avctx, pkt, mb_width*mb_height*MAX_MB_BYTES + FF_MIN_BUFFER_SIZE)) < 0)
          return ret;
 -    }
  
      /* Start setting up the frame */
-     memset(&xvid_enc_frame, 0, sizeof(xvid_enc_frame));
      xvid_enc_frame.version = XVID_VERSION;
-     memset(&xvid_enc_stats, 0, sizeof(xvid_enc_stats));
      xvid_enc_stats.version = XVID_VERSION;
      *p = *picture;
  
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
          "shl    %%cl        , "low"                                     \n\t"\
          "mov    "tmpbyte"   , "statep"                                  \n\t"\
          "test   "lowword"   , "lowword"                                 \n\t"\
-         " jnz   1f                                                      \n\t"\
+         " jnz   2f                                                      \n\t"\
          "mov    "byte"      , %%"REG_c"                                 \n\t"\
 -        "cmp    "end"       , %%"REG_c"                                 \n\t"\
 -        "jge    1f                                                      \n\t"\
          "add"OPSIZE" $2     , "byte"                                    \n\t"\
 -        "1:                                                             \n\t"\
          "movzwl (%%"REG_c")     , "tmp"                                 \n\t"\
          "lea    -1("low")   , %%ecx                                     \n\t"\
          "xor    "low"       , %%ecx                                     \n\t"\
          "add    $7          , %%ecx                                     \n\t"\
          "shl    %%cl        , "tmp"                                     \n\t"\
          "add    "tmp"       , "low"                                     \n\t"\
-         "1:                                                             \n\t"
+         "2:                                                             \n\t"
  
 -#if HAVE_7REGS && !defined(BROKEN_RELOCATIONS)
 +
 +#if HAVE_7REGS && !defined(BROKEN_RELOCATIONS) && !(defined(__i386) && defined(__clang__) && (__clang_major__<2 || (__clang_major__==2 && __clang_minor__<10)))\
 +                                               && !(defined(__i386) && !defined(__clang__) && defined(__llvm__) && __GNUC__==4 && __GNUC_MINOR__==2 && __GNUC_PATCHLEVEL__<=1)
  #define get_cabac_inline get_cabac_inline_x86
  static av_always_inline int get_cabac_inline_x86(CABACContext *c,
                                                   uint8_t *const state)
@@@ -107,32 -110,37 +109,36 @@@ static av_always_inline int get_cabac_b
  {
      x86_reg tmp;
      __asm__ volatile(
-         "movl %4, %k1                           \n\t"
-         "movl %2, %%eax                         \n\t"
-         "shl $17, %k1                           \n\t"
-         "add %%eax, %%eax                       \n\t"
-         "sub %k1, %%eax                         \n\t"
-         "cltd                                   \n\t"
-         "and %%edx, %k1                         \n\t"
-         "add %k1, %%eax                         \n\t"
-         "xor %%edx, %%ecx                       \n\t"
-         "sub %%edx, %%ecx                       \n\t"
-         "test %%ax, %%ax                        \n\t"
-         " jnz 1f                                \n\t"
-         "mov  %3, %1                            \n\t"
-         "subl $0xFFFF, %%eax                    \n\t"
-         "movzwl (%1), %%edx                     \n\t"
-         "bswap %%edx                            \n\t"
-         "shrl $15, %%edx                        \n\t"
-         "add  $2, %1                            \n\t"
-         "addl %%edx, %%eax                      \n\t"
-         "mov  %1, %3                            \n\t"
-         "1:                                     \n\t"
-         "movl %%eax, %2                         \n\t"
+         "movl        %a6(%2), %k1       \n\t"
+         "movl        %a3(%2), %%eax     \n\t"
+         "shl             $17, %k1       \n\t"
+         "add           %%eax, %%eax     \n\t"
+         "sub             %k1, %%eax     \n\t"
+         "cltd                           \n\t"
+         "and           %%edx, %k1       \n\t"
+         "add             %k1, %%eax     \n\t"
+         "xor           %%edx, %%ecx     \n\t"
+         "sub           %%edx, %%ecx     \n\t"
+         "test           %%ax, %%ax      \n\t"
+         "jnz              1f            \n\t"
+         "mov         %a4(%2), %1        \n\t"
+         "subl        $0xFFFF, %%eax     \n\t"
+         "movzwl         (%1), %%edx     \n\t"
+         "bswap         %%edx            \n\t"
+         "shrl            $15, %%edx     \n\t"
++        "add              $2, %1        \n\t"
+         "addl          %%edx, %%eax     \n\t"
 -        "cmp         %a5(%2), %1        \n\t"
 -        "jge              1f            \n\t"
 -        "add"OPSIZE"      $2, %a4(%2)   \n\t"
++        "mov              %1, %a4(%2)   \n\t"
+         "1:                             \n\t"
+         "movl          %%eax, %a3(%2)   \n\t"
  
-         :"+c"(val), "=&r"(tmp), "+m"(c->low), "+m"(c->bytestream)
-         :"m"(c->range)
-         : "%eax", "%edx"
+         : "+c"(val), "=&r"(tmp)
+         : "r"(c),
+           "i"(offsetof(CABACContext, low)),
+           "i"(offsetof(CABACContext, bytestream)),
+           "i"(offsetof(CABACContext, bytestream_end)),
+           "i"(offsetof(CABACContext, range))
+         : "%eax", "%edx", "memory"
      );
      return val;
  }
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -124,52 -124,56 +124,55 @@@ fate-iff-fibonacci: CMD = md5 -i $(SAMP
  FATE_IFF += fate-iff-ilbm
  fate-iff-ilbm: CMD = framecrc -i $(SAMPLES)/iff/lms-matriks.ilbm -pix_fmt rgb24
  
 -FATE_TESTS += $(FATE_IFF)
 +FATE_VIDEO += $(FATE_IFF)
  fate-iff: $(FATE_IFF)
  
 -FATE_TESTS += fate-kgv1
++FATE_VIDEO += fate-kgv1
+ fate-kgv1: CMD = framecrc -i $(SAMPLES)/kega/kgv1.avi -pix_fmt rgb555le -an
 -FATE_TESTS += fate-kmvc
 +FATE_VIDEO += fate-kmvc
  fate-kmvc: CMD = framecrc -i $(SAMPLES)/KMVC/LOGO1.AVI -an -t 3 -pix_fmt rgb24
  
 -FATE_TESTS += fate-mimic
 +FATE_VIDEO += fate-mimic
  fate-mimic: CMD = framecrc -idct simple -i $(SAMPLES)/mimic/mimic2-womanloveffmpeg.cam
  
 -FATE_TESTS += fate-mjpegb
 +FATE_VIDEO += fate-mjpegb
  fate-mjpegb: CMD = framecrc -idct simple -flags +bitexact -i $(SAMPLES)/mjpegb/mjpegb_part.mov -an
  
 -FATE_TESTS += fate-motionpixels
 +FATE_VIDEO += fate-motionpixels
  fate-motionpixels: CMD = framecrc -i $(SAMPLES)/motion-pixels/INTRO-partial.MVI -an -pix_fmt rgb24 -vframes 111
  
 -FATE_TESTS += fate-mpeg2-field-enc
 +FATE_VIDEO += fate-mpeg2-field-enc
  fate-mpeg2-field-enc: CMD = framecrc -flags +bitexact -dct fastint -idct simple -i $(SAMPLES)/mpeg2/mpeg2_field_encoding.ts -an
  
 -# FIXME dropped frames in this test because of coarse timebase
 -FATE_TESTS += fate-nuv
 +FATE_VIDEO += fate-nuv
  fate-nuv: CMD = framecrc -idct simple -i $(SAMPLES)/nuv/Today.nuv -an
  
 -FATE_TESTS += fate-qpeg
 +FATE_VIDEO += fate-qpeg
  fate-qpeg: CMD = framecrc -i $(SAMPLES)/qpeg/Clock.avi -an -pix_fmt rgb24
  
 -FATE_TESTS += fate-r210
 +FATE_VIDEO += fate-r210
  fate-r210: CMD = framecrc -i $(SAMPLES)/r210/r210.avi -pix_fmt rgb48le
  
 -FATE_TESTS += fate-rl2
 +FATE_VIDEO += fate-rl2
  fate-rl2: CMD = framecrc -i $(SAMPLES)/rl2/Z4915300.RL2 -pix_fmt rgb24 -an
  
 -FATE_TESTS += fate-smacker
 +FATE_VIDEO += fate-smacker
  fate-smacker: CMD = framecrc -i $(SAMPLES)/smacker/wetlogo.smk -pix_fmt rgb24
  
 -FATE_TESTS += fate-smc
 +FATE_VIDEO += fate-smc
  fate-smc: CMD = framecrc -i $(SAMPLES)/smc/cass_schi.qt -pix_fmt rgb24
  
 -FATE_TESTS += fate-sp5x
 +FATE_VIDEO += fate-sp5x
  fate-sp5x: CMD = framecrc -idct simple -i $(SAMPLES)/sp5x/sp5x_problem.avi
  
 -FATE_TESTS += fate-sub-srt
 +FATE_VIDEO += fate-sub-srt
  fate-sub-srt: CMD = md5 -i $(SAMPLES)/sub/SubRip_capability_tester.srt -f ass
  
 -FATE_TESTS += fate-tiertex-seq
 +FATE_VIDEO += fate-tiertex-seq
  fate-tiertex-seq: CMD = framecrc -i $(SAMPLES)/tiertex-seq/Gameover.seq -pix_fmt rgb24
  
 -FATE_TESTS += fate-tmv
 +FATE_VIDEO += fate-tmv
  fate-tmv: CMD = framecrc -i $(SAMPLES)/tmv/pop-partial.tmv -pix_fmt rgb24
  
  FATE_TXD += fate-txd-16bpp
index 0000000,d87c563..85e2741
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,31 +1,31 @@@
 -#tb 0: 1/1000
 -0,          0,          0,        0,  3110400, 649f0f2e3e09e6938161bb07bede5282
 -0,         33,         33,        0,  3110400, f24f632d50eafef73fa89391ca98c375
 -0,         67,         67,        0,  3110400, 57b6d2ed51bfaf6588f39eb73e7922b8
 -0,        100,        100,        0,  3110400, 463e0988ce28eb1c30669c06113deb4c
 -0,        133,        133,        0,  3110400, 3c4ac119f998a0ccd7d3a6361f4d10a0
 -0,        167,        167,        0,  3110400, 0f11c5cc9c1ac9055e21e417e1259c69
 -0,        200,        200,        0,  3110400, 08c6e70f101c61013f2969b6a370d3f9
 -0,        233,        233,        0,  3110400, ea8cb37017d8a9d20bf443b730fd8365
 -0,        267,        267,        0,  3110400, 3f614203f054c89151680f4b1b0c6c4c
 -0,        300,        300,        0,  3110400, 90488ee40d06c0f05eee8348dde57325
 -0,        333,        333,        0,  3110400, f48117b74ac7455e69fd14e9b68ce95d
 -0,        367,        367,        0,  3110400, 37ee06b6267b5ec25fd642525cf4469a
 -0,        400,        400,        0,  3110400, cd5e0988e7c084f29bda4a18cb38c1e8
 -0,        433,        433,        0,  3110400, 1fe943b01f00b8bc0cb5722010cef03c
 -0,        467,        467,        0,  3110400, 40d8e8150326c7eb061d3f6cfd307d97
 -0,        500,        500,        0,  3110400, 49812cbf928858cb56331c8c8aaaf556
 -0,        533,        533,        0,  3110400, 3df607c752273ebcac21123e2c4c010c
 -0,        567,        567,        0,  3110400, 020a0ae162c8326f83f8f4d8bf1627d2
 -0,        600,        600,        0,  3110400, 459ac9f9488a6a2f4e378703a6b2a45a
 -0,        633,        633,        0,  3110400, b1baf9a56f7667e4b8f4e3007b9ebe0f
 -0,        667,        667,        0,  3110400, eea61a72a05c380450a96b575ba25f65
 -0,        700,        700,        0,  3110400, e013a9f233824631d8c6e3f93106eebe
 -0,        733,        733,        0,  3110400, 6c64147ebdee4b36728c6978b290ffb5
 -0,        767,        767,        0,  3110400, c37956235667345d92fdfc7c62496e84
 -0,        800,        800,        0,  3110400, 0ac58c28575b804d9e63395653c3aef2
 -0,        833,        833,        0,  3110400, 641f2a78e338c733ef159bd36ec7966f
 -0,        867,        867,        0,  3110400, 9402d455fa5bd556b85f479c42c3a4d2
 -0,        900,        900,        0,  3110400, ca86e16b05db0c79b028d709c19e1f13
 -0,        933,        933,        0,  3110400, 9167d622809df07eef9bcb3cb09de0f0
 -0,        967,        967,        0,  3110400, e1d52ae2a2eb6aabb9bdc7e7ed05253e
++#tb 0: 1/30
++0,          0,          0,        1,  3110400, f9b685c9aaa7652faeded50ed1005414
++0,          1,          1,        1,  3110400, d22c3d6a1e57ba4af2bd19e09ad7bdb1
++0,          2,          2,        1,  3110400, 0d516dc90992321576a1f090b382beab
++0,          3,          3,        1,  3110400, a306b1c732dbaea18ad1efd9d3820094
++0,          4,          4,        1,  3110400, faddd965d3e70e62cad07dc72225e8c2
++0,          5,          5,        1,  3110400, 375795188ae0ce026179aea29cb8a1b4
++0,          6,          6,        1,  3110400, aa372227e1630513116ff6678a2c4fcf
++0,          7,          7,        1,  3110400, e4937f5756a3bbbe2660c0874514479b
++0,          8,          8,        1,  3110400, ad7d1f6a28ac9f6490f1ee7595ef6b94
++0,          9,          9,        1,  3110400, 305414d3ca8aca36242e08041b92ad69
++0,         10,         10,        1,  3110400, b719401bd210e4fc02be258ca866e50e
++0,         11,         11,        1,  3110400, a25f312e44492715f334ab97f50e73ad
++0,         12,         12,        1,  3110400, 1da8d6815b3ce412690e86f18444c621
++0,         13,         13,        1,  3110400, 0522ee62ed61c900b71f3fff2030026b
++0,         14,         14,        1,  3110400, 523d2a4f5571a952f68d5768eb3336dc
++0,         15,         15,        1,  3110400, 03a9b1f05d48c25d689f74db4d2cdbe1
++0,         16,         16,        1,  3110400, 6ae91271da4f5c6e604df8e04a40ea45
++0,         17,         17,        1,  3110400, 5b3e7bac9f61c4248999a2587a630d28
++0,         18,         18,        1,  3110400, 60069876ccffeee06a535e471b8916e8
++0,         19,         19,        1,  3110400, 9f5101c81bc7702d98baee78c4ffe65d
++0,         20,         20,        1,  3110400, c02641360b4d8af4640aa330d9eb8bb0
++0,         21,         21,        1,  3110400, 63274292e7d3f2482c3c282722ae3f02
++0,         22,         22,        1,  3110400, ae39b5a18260046e96b4b44520ef0f7d
++0,         23,         23,        1,  3110400, bb89af6f8f2b13d0cd668d445669f655
++0,         24,         24,        1,  3110400, 0ac58c28575b804d9e63395653c3aef2
++0,         25,         25,        1,  3110400, 641f2a78e338c733ef159bd36ec7966f
++0,         26,         26,        1,  3110400, 9402d455fa5bd556b85f479c42c3a4d2
++0,         27,         27,        1,  3110400, fa2407483a8e169a161e45ac6cfa7831
++0,         28,         28,        1,  3110400, 087744a0ac52ef96803fc9c4fb17635b
++0,         29,         29,        1,  3110400, b62328f2bd00b269cd3a359360b613b7