aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Ross <pross@xvid.org>2019-01-13 15:45:07 +1100
committerPeter Ross <pross@xvid.org>2019-01-26 23:49:09 +1100
commitd8ebfd1bdf7e2c47af3eb057b97de5b7fe854e35 (patch)
tree381ef5658380b185ae2b25af9f3e864cf33f4f81
parent160ebe0a8d780f6db7c18e824d8ec6f437da33a2 (diff)
downloadffmpeg-d8ebfd1bdf7e2c47af3eb057b97de5b7fe854e35.tar.gz
avcodec/vp6: select idct based (loosely) on number of coefficients decoded
The VP3/4/5/6 reference decoders all use three IDCT versions: one for the DC-only case, another for blocks with more than 10 coefficients, and an optimised one for blocks with up to 10 AC coefficents. VP6 relies on the sparse 10 coefficient version, and without it, IDCT drift occurs. Fixes: https://trac.ffmpeg.org/ticket/1282 Signed-off-by: Peter Ross <pross@xvid.org>
-rw-r--r--libavcodec/vp5.c1
-rw-r--r--libavcodec/vp56.c30
-rw-r--r--libavcodec/vp56.h2
-rw-r--r--libavcodec/vp6.c14
-rw-r--r--tests/ref/fate/vp6a172
-rw-r--r--tests/ref/fate/vp6a-skip_alpha172
6 files changed, 213 insertions, 178 deletions
diff --git a/libavcodec/vp5.c b/libavcodec/vp5.c
index cb08cec33f..49988b8b76 100644
--- a/libavcodec/vp5.c
+++ b/libavcodec/vp5.c
@@ -252,6 +252,7 @@ static int vp5_parse_coeff(VP56Context *s)
for (i=coeff_idx; i<=ctx_last; i++)
s->coeff_ctx[ff_vp56_b6to4[b]][i] = 5;
s->above_blocks[s->above_block_idx[b]].not_null_dc = s->coeff_ctx[ff_vp56_b6to4[b]][0];
+ s->idct_selector[b] = 63;
}
return 0;
}
diff --git a/libavcodec/vp56.c b/libavcodec/vp56.c
index e9e8d5d9fd..72fea3780e 100644
--- a/libavcodec/vp56.c
+++ b/libavcodec/vp56.c
@@ -406,6 +406,24 @@ static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src,
}
}
+static void vp56_idct_put(VP56Context *s, uint8_t * dest, ptrdiff_t stride, int16_t *block, int selector)
+{
+ if (selector > 10 || selector == 1)
+ s->vp3dsp.idct_put(dest, stride, block);
+ else
+ ff_vp3dsp_idct10_put(dest, stride, block);
+}
+
+static void vp56_idct_add(VP56Context *s, uint8_t * dest, ptrdiff_t stride, int16_t *block, int selector)
+{
+ if (selector > 10)
+ s->vp3dsp.idct_add(dest, stride, block);
+ else if (selector > 1)
+ ff_vp3dsp_idct10_add(dest, stride, block);
+ else
+ s->vp3dsp.idct_dc_add(dest, stride, block);
+}
+
static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, int is_alpha, VP56mb mb_type)
{
int b, ab, b_max, plane, off;
@@ -426,8 +444,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in
case VP56_MB_INTRA:
for (b=0; b<b_max; b++) {
plane = ff_vp56_b2p[b+ab];
- s->vp3dsp.idct_put(frame_current->data[plane] + s->block_offset[b],
- s->stride[plane], s->block_coeff[b]);
+ vp56_idct_put(s, frame_current->data[plane] + s->block_offset[b],
+ s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
}
break;
@@ -439,8 +457,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in
s->hdsp.put_pixels_tab[1][0](frame_current->data[plane] + off,
frame_ref->data[plane] + off,
s->stride[plane], 8);
- s->vp3dsp.idct_add(frame_current->data[plane] + off,
- s->stride[plane], s->block_coeff[b]);
+ vp56_idct_add(s, frame_current->data[plane] + off,
+ s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
}
break;
@@ -457,8 +475,8 @@ static av_always_inline void vp56_render_mb(VP56Context *s, int row, int col, in
plane = ff_vp56_b2p[b+ab];
vp56_mc(s, b, plane, frame_ref->data[plane], s->stride[plane],
16*col+x_off, 16*row+y_off);
- s->vp3dsp.idct_add(frame_current->data[plane] + s->block_offset[b],
- s->stride[plane], s->block_coeff[b]);
+ vp56_idct_add(s, frame_current->data[plane] + s->block_offset[b],
+ s->stride[plane], s->block_coeff[b], s->idct_selector[b]);
}
break;
}
diff --git a/libavcodec/vp56.h b/libavcodec/vp56.h
index 9b3036895c..84b2f6c94b 100644
--- a/libavcodec/vp56.h
+++ b/libavcodec/vp56.h
@@ -105,6 +105,7 @@ typedef struct VP56Macroblock {
typedef struct VP56Model {
uint8_t coeff_reorder[64]; /* used in vp6 only */
uint8_t coeff_index_to_pos[64]; /* used in vp6 only */
+ uint8_t coeff_index_to_idct_selector[64]; /* used in vp6 only */
uint8_t vector_sig[2]; /* delta sign */
uint8_t vector_dct[2]; /* delta coding types */
uint8_t vector_pdi[2][2]; /* predefined delta init */
@@ -157,6 +158,7 @@ struct vp56_context {
VP56mb mb_type;
VP56Macroblock *macroblocks;
DECLARE_ALIGNED(16, int16_t, block_coeff)[6][64];
+ int idct_selector[6];
/* motion vectors */
VP56mv mv[6]; /* vectors for each block in MB */
diff --git a/libavcodec/vp6.c b/libavcodec/vp6.c
index 645fc5c690..977fcb7076 100644
--- a/libavcodec/vp6.c
+++ b/libavcodec/vp6.c
@@ -194,6 +194,18 @@ static void vp6_coeff_order_table_init(VP56Context *s)
for (pos=1; pos<64; pos++)
if (s->modelp->coeff_reorder[pos] == i)
s->modelp->coeff_index_to_pos[idx++] = pos;
+
+ for (idx = 0; idx < 64; idx++) {
+ int max = 0;
+ for (i = 0; i <= idx; i++) {
+ int v = s->modelp->coeff_index_to_pos[i];
+ if (v > max)
+ max = v;
+ }
+ if (s->sub_version > 6)
+ max++;
+ s->modelp->coeff_index_to_idct_selector[idx] = max;
+ }
}
static void vp6_default_models_init(VP56Context *s)
@@ -446,6 +458,7 @@ static int vp6_parse_coeff_huffman(VP56Context *s)
cg = FFMIN(vp6_coeff_groups[coeff_idx], 3);
vlc_coeff = &s->ract_vlc[pt][ct][cg];
}
+ s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)];
}
return 0;
}
@@ -527,6 +540,7 @@ static int vp6_parse_coeff(VP56Context *s)
s->left_block[ff_vp56_b6to4[b]].not_null_dc =
s->above_blocks[s->above_block_idx[b]].not_null_dc = !!s->block_coeff[b][0];
+ s->idct_selector[b] = model->coeff_index_to_idct_selector[FFMIN(coeff_idx, 63)];
}
return 0;
}
diff --git a/tests/ref/fate/vp6a b/tests/ref/fate/vp6a
index b4f33630f7..8fb2630ff3 100644
--- a/tests/ref/fate/vp6a
+++ b/tests/ref/fate/vp6a
@@ -4,95 +4,95 @@
#dimensions 0: 300x180
#sar 0: 0/1
0, 0, 0, 1, 135000, 0x9dceed6d
-0, 1, 1, 1, 135000, 0x47e5778d
-0, 2, 2, 1, 135000, 0x5de36599
-0, 3, 3, 1, 135000, 0x540d8079
-0, 4, 4, 1, 135000, 0xba9ea534
-0, 5, 5, 1, 135000, 0xa75088f8
-0, 6, 6, 1, 135000, 0x7d867559
-0, 7, 7, 1, 135000, 0xcc678fee
-0, 8, 8, 1, 135000, 0x79c590b9
-0, 9, 9, 1, 135000, 0x87789918
-0, 10, 10, 1, 135000, 0xaa939213
-0, 11, 11, 1, 135000, 0x3912916d
-0, 12, 12, 1, 135000, 0x41305d0b
-0, 13, 13, 1, 135000, 0x2686b5dd
-0, 14, 14, 1, 135000, 0xa69ae422
-0, 15, 15, 1, 135000, 0x998a3478
-0, 16, 16, 1, 135000, 0x5842768d
-0, 17, 17, 1, 135000, 0xf6a85b16
-0, 18, 18, 1, 135000, 0x7a5b2708
-0, 19, 19, 1, 135000, 0x8b2abb63
-0, 20, 20, 1, 135000, 0x7dc8468b
-0, 21, 21, 1, 135000, 0x04d85001
-0, 22, 22, 1, 135000, 0x83e3c647
-0, 23, 23, 1, 135000, 0xcddd687e
-0, 24, 24, 1, 135000, 0x818e785e
-0, 25, 25, 1, 135000, 0x3a915080
-0, 26, 26, 1, 135000, 0x953d603d
-0, 27, 27, 1, 135000, 0x79005ebf
-0, 28, 28, 1, 135000, 0x80afec75
-0, 29, 29, 1, 135000, 0xfc8e376b
-0, 30, 30, 1, 135000, 0xf957b7ef
-0, 31, 31, 1, 135000, 0xe878da44
-0, 32, 32, 1, 135000, 0xe68ecca3
-0, 33, 33, 1, 135000, 0x1a2cc7d3
-0, 34, 34, 1, 135000, 0x4f346a69
-0, 35, 35, 1, 135000, 0x7a0cf4ac
-0, 36, 36, 1, 135000, 0x6d4eee7a
-0, 37, 37, 1, 135000, 0xf0688cbd
-0, 38, 38, 1, 135000, 0xca4abbbc
-0, 39, 39, 1, 135000, 0x87669519
-0, 40, 40, 1, 135000, 0xd090e9d7
-0, 41, 41, 1, 135000, 0xd7f536c1
-0, 42, 42, 1, 135000, 0x353ede54
-0, 43, 43, 1, 135000, 0xbc8f5358
-0, 44, 44, 1, 135000, 0xb52cd59a
-0, 45, 45, 1, 135000, 0x0b882eba
-0, 46, 46, 1, 135000, 0xc544cd54
-0, 47, 47, 1, 135000, 0x31ca7e73
+0, 1, 1, 1, 135000, 0x1fc377a4
+0, 2, 2, 1, 135000, 0x0b4465d4
+0, 3, 3, 1, 135000, 0x136b8062
+0, 4, 4, 1, 135000, 0x4691a55c
+0, 5, 5, 1, 135000, 0x55bb8a19
+0, 6, 6, 1, 135000, 0xdbf67651
+0, 7, 7, 1, 135000, 0x6fb19113
+0, 8, 8, 1, 135000, 0x3edc9227
+0, 9, 9, 1, 135000, 0x53b39aff
+0, 10, 10, 1, 135000, 0x699e94b0
+0, 11, 11, 1, 135000, 0xeedd9388
+0, 12, 12, 1, 135000, 0x14055f96
+0, 13, 13, 1, 135000, 0x71fbb5fd
+0, 14, 14, 1, 135000, 0x6fb4e491
+0, 15, 15, 1, 135000, 0x35ca3482
+0, 16, 16, 1, 135000, 0x0c2a7530
+0, 17, 17, 1, 135000, 0x422c5581
+0, 18, 18, 1, 135000, 0x19eb2155
+0, 19, 19, 1, 135000, 0x07e1b114
+0, 20, 20, 1, 135000, 0xa10f3f81
+0, 21, 21, 1, 135000, 0x75684dcd
+0, 22, 22, 1, 135000, 0x1721c337
+0, 23, 23, 1, 135000, 0x3897667d
+0, 24, 24, 1, 135000, 0x1232769e
+0, 25, 25, 1, 135000, 0xec975059
+0, 26, 26, 1, 135000, 0xb2a46123
+0, 27, 27, 1, 135000, 0x052c5f72
+0, 28, 28, 1, 135000, 0x3087eb2f
+0, 29, 29, 1, 135000, 0xd1e0373a
+0, 30, 30, 1, 135000, 0x64dab704
+0, 31, 31, 1, 135000, 0xa44dd89e
+0, 32, 32, 1, 135000, 0x380ecae9
+0, 33, 33, 1, 135000, 0x8c6fc4ab
+0, 34, 34, 1, 135000, 0x02096903
+0, 35, 35, 1, 135000, 0x11edf432
+0, 36, 36, 1, 135000, 0x3585ee5f
+0, 37, 37, 1, 135000, 0xe1338c40
+0, 38, 38, 1, 135000, 0x5edfbd0c
+0, 39, 39, 1, 135000, 0x9420965c
+0, 40, 40, 1, 135000, 0x0caceb17
+0, 41, 41, 1, 135000, 0x3fdc36c3
+0, 42, 42, 1, 135000, 0x8a24df14
+0, 43, 43, 1, 135000, 0x5dc057b0
+0, 44, 44, 1, 135000, 0xdc5eda65
+0, 45, 45, 1, 135000, 0x60433612
+0, 46, 46, 1, 135000, 0x6a91d6c9
+0, 47, 47, 1, 135000, 0x53598734
0, 48, 48, 1, 135000, 0xb1569ce9
-0, 49, 49, 1, 135000, 0x8bf4394f
-0, 50, 50, 1, 135000, 0xf413812a
-0, 51, 51, 1, 135000, 0xf2fa90ab
-0, 52, 52, 1, 135000, 0xdcd8b265
-0, 53, 53, 1, 135000, 0xa89cdba1
-0, 54, 54, 1, 135000, 0x212b59a5
-0, 55, 55, 1, 135000, 0x10c589c3
-0, 56, 56, 1, 135000, 0x432ab5b4
+0, 49, 49, 1, 135000, 0xf5e83a33
+0, 50, 50, 1, 135000, 0xebe18275
+0, 51, 51, 1, 135000, 0x98af9447
+0, 52, 52, 1, 135000, 0x3f03b765
+0, 53, 53, 1, 135000, 0x7423e0b8
+0, 54, 54, 1, 135000, 0x6c1b5faa
+0, 55, 55, 1, 135000, 0xebf98d52
+0, 56, 56, 1, 135000, 0xf3dfb8b6
0, 57, 57, 1, 135000, 0x85a9634a
-0, 58, 58, 1, 135000, 0x10db5b87
-0, 59, 59, 1, 135000, 0x583145d9
-0, 60, 60, 1, 135000, 0x7d3a33bd
-0, 61, 61, 1, 135000, 0xcf592423
-0, 62, 62, 1, 135000, 0xb59728e5
-0, 63, 63, 1, 135000, 0x1eeca660
-0, 64, 64, 1, 135000, 0xff7bcc34
-0, 65, 65, 1, 135000, 0x0ef8f271
-0, 66, 66, 1, 135000, 0x8c9ca8ee
-0, 67, 67, 1, 135000, 0x8a7ece34
-0, 68, 68, 1, 135000, 0x7d4c3b5d
-0, 69, 69, 1, 135000, 0x99118f21
-0, 70, 70, 1, 135000, 0xd97fe7e2
-0, 71, 71, 1, 135000, 0xf93842f1
-0, 72, 72, 1, 135000, 0x35c912e8
-0, 73, 73, 1, 135000, 0x14e59e97
+0, 58, 58, 1, 135000, 0x4d425bb5
+0, 59, 59, 1, 135000, 0xfb7945ee
+0, 60, 60, 1, 135000, 0x593534c1
+0, 61, 61, 1, 135000, 0xe3fa2517
+0, 62, 62, 1, 135000, 0x893629e3
+0, 63, 63, 1, 135000, 0xdc3ca6ad
+0, 64, 64, 1, 135000, 0x16b1ce27
+0, 65, 65, 1, 135000, 0x8296f478
+0, 66, 66, 1, 135000, 0x9e9baaa3
+0, 67, 67, 1, 135000, 0x994ecd4a
+0, 68, 68, 1, 135000, 0x40f83b3c
+0, 69, 69, 1, 135000, 0x0de38f90
+0, 70, 70, 1, 135000, 0x5455ea6c
+0, 71, 71, 1, 135000, 0x053e41e8
+0, 72, 72, 1, 135000, 0x0fee1281
+0, 73, 73, 1, 135000, 0xa0c9a434
0, 74, 74, 1, 135000, 0x8e4c19aa
-0, 75, 75, 1, 135000, 0x4adfbc53
-0, 76, 76, 1, 135000, 0x0613adde
-0, 77, 77, 1, 135000, 0x8db264ab
-0, 78, 78, 1, 135000, 0x3948b619
-0, 79, 79, 1, 135000, 0x843d7c02
-0, 80, 80, 1, 135000, 0x534fea34
+0, 75, 75, 1, 135000, 0x34bebc00
+0, 76, 76, 1, 135000, 0x6670ad6f
+0, 77, 77, 1, 135000, 0xdbba63fc
+0, 78, 78, 1, 135000, 0xe34fb839
+0, 79, 79, 1, 135000, 0xa3ce7eb1
+0, 80, 80, 1, 135000, 0xdec7ed7d
0, 81, 81, 1, 135000, 0xdb7041bf
-0, 82, 82, 1, 135000, 0xd0ce1cce
-0, 83, 83, 1, 135000, 0x3c008335
-0, 84, 84, 1, 135000, 0xb699208f
-0, 85, 85, 1, 135000, 0xe07da3ca
-0, 86, 86, 1, 135000, 0x26331f41
-0, 87, 87, 1, 135000, 0x4e19fe83
-0, 88, 88, 1, 135000, 0xaa9a9e45
-0, 89, 89, 1, 135000, 0x336b7ed0
-0, 90, 90, 1, 135000, 0xc9bf7611
+0, 82, 82, 1, 135000, 0x2b1d1dc1
+0, 83, 83, 1, 135000, 0xaaa384c1
+0, 84, 84, 1, 135000, 0x37f42217
+0, 85, 85, 1, 135000, 0x928ba4da
+0, 86, 86, 1, 135000, 0x2b681f41
+0, 87, 87, 1, 135000, 0xcbe1ff84
+0, 88, 88, 1, 135000, 0x47949f24
+0, 89, 89, 1, 135000, 0x368b7fe5
+0, 90, 90, 1, 135000, 0x1cf4773b
0, 91, 91, 1, 135000, 0x14c33a35
0, 92, 92, 1, 135000, 0xdc08470e
diff --git a/tests/ref/fate/vp6a-skip_alpha b/tests/ref/fate/vp6a-skip_alpha
index e2c435f402..f092778021 100644
--- a/tests/ref/fate/vp6a-skip_alpha
+++ b/tests/ref/fate/vp6a-skip_alpha
@@ -4,95 +4,95 @@
#dimensions 0: 300x180
#sar 0: 0/1
0, 0, 0, 1, 81000, 0xcb92962d
-0, 1, 1, 1, 81000, 0xae381904
-0, 2, 2, 1, 81000, 0x1fcc0c75
-0, 3, 3, 1, 81000, 0x023f0c21
-0, 4, 4, 1, 81000, 0xad691402
-0, 5, 5, 1, 81000, 0x42390be0
-0, 6, 6, 1, 81000, 0xc1c10a4e
-0, 7, 7, 1, 81000, 0x9c0315ac
-0, 8, 8, 1, 81000, 0xc2a315a7
-0, 9, 9, 1, 81000, 0x3a631392
-0, 10, 10, 1, 81000, 0x11591414
-0, 11, 11, 1, 81000, 0x1a551125
-0, 12, 12, 1, 81000, 0x2e1efa4f
-0, 13, 13, 1, 81000, 0x4aa3f016
-0, 14, 14, 1, 81000, 0x74c029d8
-0, 15, 15, 1, 81000, 0xdee9a98b
-0, 16, 16, 1, 81000, 0xdf3502d5
-0, 17, 17, 1, 81000, 0x4653536b
-0, 18, 18, 1, 81000, 0x7f658c75
-0, 19, 19, 1, 81000, 0xab18ff13
-0, 20, 20, 1, 81000, 0xac2b8f3b
-0, 21, 21, 1, 81000, 0xd61ff094
-0, 22, 22, 1, 81000, 0x425bfc2b
-0, 23, 23, 1, 81000, 0x6be7ecd3
-0, 24, 24, 1, 81000, 0x0b0ee65b
-0, 25, 25, 1, 81000, 0x3c6f146b
-0, 26, 26, 1, 81000, 0x27c4e9c8
-0, 27, 27, 1, 81000, 0x174022c4
-0, 28, 28, 1, 81000, 0x3320fe81
-0, 29, 29, 1, 81000, 0x7a3c342e
-0, 30, 30, 1, 81000, 0x448b4346
-0, 31, 31, 1, 81000, 0xd285b23d
-0, 32, 32, 1, 81000, 0x852ed590
-0, 33, 33, 1, 81000, 0xc9d3df17
-0, 34, 34, 1, 81000, 0x4d23727b
-0, 35, 35, 1, 81000, 0x1fae66cd
-0, 36, 36, 1, 81000, 0x384d54ab
-0, 37, 37, 1, 81000, 0x2fee6ba3
-0, 38, 38, 1, 81000, 0xd7ad6f59
-0, 39, 39, 1, 81000, 0xaf5e3e76
-0, 40, 40, 1, 81000, 0x10fceda4
-0, 41, 41, 1, 81000, 0xb26df92b
-0, 42, 42, 1, 81000, 0xd6676e08
-0, 43, 43, 1, 81000, 0xff6b1b95
-0, 44, 44, 1, 81000, 0x6196d598
-0, 45, 45, 1, 81000, 0x833ebf1b
-0, 46, 46, 1, 81000, 0x7b085af1
-0, 47, 47, 1, 81000, 0xe8f583b4
+0, 1, 1, 1, 81000, 0x8fef1925
+0, 2, 2, 1, 81000, 0xf0350cb6
+0, 3, 3, 1, 81000, 0xa70a0c52
+0, 4, 4, 1, 81000, 0x21ef1490
+0, 5, 5, 1, 81000, 0x98bc0c96
+0, 6, 6, 1, 81000, 0x92380b27
+0, 7, 7, 1, 81000, 0xbba216cd
+0, 8, 8, 1, 81000, 0x92a8172b
+0, 9, 9, 1, 81000, 0xfbc21592
+0, 10, 10, 1, 81000, 0xdad416a1
+0, 11, 11, 1, 81000, 0xec4d13aa
+0, 12, 12, 1, 81000, 0xaf36fcff
+0, 13, 13, 1, 81000, 0xb4fcf056
+0, 14, 14, 1, 81000, 0xe3782a3f
+0, 15, 15, 1, 81000, 0x714daa0b
+0, 16, 16, 1, 81000, 0xe2770382
+0, 17, 17, 1, 81000, 0x553253ff
+0, 18, 18, 1, 81000, 0x928d8c46
+0, 19, 19, 1, 81000, 0x06c8fe82
+0, 20, 20, 1, 81000, 0xb8198f5a
+0, 21, 21, 1, 81000, 0x0029f118
+0, 22, 22, 1, 81000, 0x6fe7fc6f
+0, 23, 23, 1, 81000, 0x9165edde
+0, 24, 24, 1, 81000, 0xe76ae791
+0, 25, 25, 1, 81000, 0xa4dd145a
+0, 26, 26, 1, 81000, 0x2d7de9d8
+0, 27, 27, 1, 81000, 0xe102228b
+0, 28, 28, 1, 81000, 0xc57ffe0e
+0, 29, 29, 1, 81000, 0x324434cb
+0, 30, 30, 1, 81000, 0xedc0433e
+0, 31, 31, 1, 81000, 0xd42bb18a
+0, 32, 32, 1, 81000, 0xedb3d561
+0, 33, 33, 1, 81000, 0x5244de92
+0, 34, 34, 1, 81000, 0x0bb27280
+0, 35, 35, 1, 81000, 0xc6116736
+0, 36, 36, 1, 81000, 0x42f154e2
+0, 37, 37, 1, 81000, 0xffbd6bf9
+0, 38, 38, 1, 81000, 0x813170d0
+0, 39, 39, 1, 81000, 0x430c4040
+0, 40, 40, 1, 81000, 0x56d1eecb
+0, 41, 41, 1, 81000, 0xaa4afa12
+0, 42, 42, 1, 81000, 0x2c3d6fb8
+0, 43, 43, 1, 81000, 0xfedf1e3e
+0, 44, 44, 1, 81000, 0xf538d893
+0, 45, 45, 1, 81000, 0xcc81c3b5
+0, 46, 46, 1, 81000, 0x59b95fbc
+0, 47, 47, 1, 81000, 0xb4da87a0
0, 48, 48, 1, 81000, 0x3426d5e4
-0, 49, 49, 1, 81000, 0x214069ed
-0, 50, 50, 1, 81000, 0x7dbdfd3f
-0, 51, 51, 1, 81000, 0xf19b3f45
-0, 52, 52, 1, 81000, 0x0f05c7e2
-0, 53, 53, 1, 81000, 0xba94e323
-0, 54, 54, 1, 81000, 0x0de7b0c2
-0, 55, 55, 1, 81000, 0xfcf93c55
-0, 56, 56, 1, 81000, 0x8a8dbd55
+0, 49, 49, 1, 81000, 0x8d066aae
+0, 50, 50, 1, 81000, 0x09effe79
+0, 51, 51, 1, 81000, 0xecc540ae
+0, 52, 52, 1, 81000, 0x845dc90c
+0, 53, 53, 1, 81000, 0x9c2fe4d2
+0, 54, 54, 1, 81000, 0x8887b277
+0, 55, 55, 1, 81000, 0x3bdc3ca9
+0, 56, 56, 1, 81000, 0x094fbe27
0, 57, 57, 1, 81000, 0xddf22b97
-0, 58, 58, 1, 81000, 0x49a830ff
-0, 59, 59, 1, 81000, 0x82ab2a4b
-0, 60, 60, 1, 81000, 0xd23420e5
-0, 61, 61, 1, 81000, 0x7c1017d1
-0, 62, 62, 1, 81000, 0x9aa61b38
-0, 63, 63, 1, 81000, 0x2a724a18
-0, 64, 64, 1, 81000, 0xc18055f2
-0, 65, 65, 1, 81000, 0xecba3855
-0, 66, 66, 1, 81000, 0x0eed6b0f
-0, 67, 67, 1, 81000, 0x4be73816
-0, 68, 68, 1, 81000, 0xa681214e
-0, 69, 69, 1, 81000, 0x4958f83d
-0, 70, 70, 1, 81000, 0xca0f0d61
-0, 71, 71, 1, 81000, 0x3c453de1
-0, 72, 72, 1, 81000, 0xff60360a
-0, 73, 73, 1, 81000, 0xdcef0949
+0, 58, 58, 1, 81000, 0x31b23156
+0, 59, 59, 1, 81000, 0xf5bf2ad8
+0, 60, 60, 1, 81000, 0x4a9321c4
+0, 61, 61, 1, 81000, 0xdd1b18ca
+0, 62, 62, 1, 81000, 0x4ece1cdd
+0, 63, 63, 1, 81000, 0x6a9a4b53
+0, 64, 64, 1, 81000, 0x6624578b
+0, 65, 65, 1, 81000, 0x89273a0f
+0, 66, 66, 1, 81000, 0x9eb56c4c
+0, 67, 67, 1, 81000, 0xe60238f5
+0, 68, 68, 1, 81000, 0xbc4c228a
+0, 69, 69, 1, 81000, 0x3feefa08
+0, 70, 70, 1, 81000, 0x0d620f37
+0, 71, 71, 1, 81000, 0x93693fc8
+0, 72, 72, 1, 81000, 0xfc4b3848
+0, 73, 73, 1, 81000, 0xd9950bfb
0, 74, 74, 1, 81000, 0xe5e3732d
-0, 75, 75, 1, 81000, 0x39747fd4
-0, 76, 76, 1, 81000, 0x6bec70e6
-0, 77, 77, 1, 81000, 0x7026a8c0
-0, 78, 78, 1, 81000, 0x92de5b61
-0, 79, 79, 1, 81000, 0x3f00507f
-0, 80, 80, 1, 81000, 0x5620c377
+0, 75, 75, 1, 81000, 0x53517fd2
+0, 76, 76, 1, 81000, 0xb57c70b0
+0, 77, 77, 1, 81000, 0x378ea87c
+0, 78, 78, 1, 81000, 0xfd2b5b58
+0, 79, 79, 1, 81000, 0x66d45077
+0, 80, 80, 1, 81000, 0x6e07c3f8
0, 81, 81, 1, 81000, 0x39f5ed38
-0, 82, 82, 1, 81000, 0x6ee35d67
-0, 83, 83, 1, 81000, 0x4f99a409
-0, 84, 84, 1, 81000, 0x0a05b6ea
-0, 85, 85, 1, 81000, 0xd6c442d9
-0, 86, 86, 1, 81000, 0x0bb3d2f0
-0, 87, 87, 1, 81000, 0x6891c5b1
-0, 88, 88, 1, 81000, 0xf16ba9be
-0, 89, 89, 1, 81000, 0xba53528e
-0, 90, 90, 1, 81000, 0xc847de49
+0, 82, 82, 1, 81000, 0x55b05da7
+0, 83, 83, 1, 81000, 0x7f78a42c
+0, 84, 84, 1, 81000, 0x5139b79c
+0, 85, 85, 1, 81000, 0x4054437d
+0, 86, 86, 1, 81000, 0x0f9dd327
+0, 87, 87, 1, 81000, 0xa885c60e
+0, 88, 88, 1, 81000, 0x37abaa72
+0, 89, 89, 1, 81000, 0xdab25345
+0, 90, 90, 1, 81000, 0xbdf4df9d
0, 91, 91, 1, 81000, 0xc5b2e2b0
0, 92, 92, 1, 81000, 0xb0b497ff