Commit ad343687 authored by Ronald S. Bultje's avatar Ronald S. Bultje
Browse files

New intra mode and partitioning probabilities.

Split partition probabilities between keyframes and non-keyframes,
since they are fairly different. Also have per-blocksize interframe
y intramode probabilities, since these vary heavily between different
blocksizes.

Lastly, replace default probabilities for partitioning and intra modes
with new ones generated from current codec. Replace counts with actual
probabilities also.

Change-Id: I77ca996e25e4a28e03bdbc542f27a3e64ca1234f
parent d03e974f
......@@ -21,6 +21,7 @@
#include "vp9/common/vp9_common.h"
#include "vp9/common/vp9_enums.h"
#define BLOCK_SIZE_GROUPS 4
#define MAX_MB_SEGMENTS 8
#define MB_SEG_TREE_PROBS (MAX_MB_SEGMENTS-1)
#define PREDICTION_PROBS 3
......@@ -55,7 +56,8 @@ static INLINE int combine_entropy_contexts(ENTROPY_CONTEXT a,
typedef enum {
KEY_FRAME = 0,
INTER_FRAME = 1
INTER_FRAME = 1,
NUM_FRAME_TYPES,
} FRAME_TYPE;
typedef enum {
......
......@@ -15,58 +15,87 @@
#include "vp9/common/vp9_alloccommon.h"
#include "vpx_mem/vpx_mem.h"
static const unsigned int y_mode_cts[VP9_INTRA_MODES] = {
/* DC V H D45 D135 D117 D153 D27 D63 TM */
98, 19, 15, 14, 14, 14, 14, 12, 12, 13,
static const vp9_prob default_kf_uv_probs[VP9_INTRA_MODES]
[VP9_INTRA_MODES - 1] = {
{ 149, 13, 48, 141, 174, 131, 54, 61, 109 } /* y = dc */,
{ 120, 17, 119, 132, 103, 103, 54, 100, 130 } /* y = v */,
{ 114, 16, 19, 177, 220, 145, 31, 33, 122 } /* y = h */,
{ 119, 12, 43, 102, 133, 133, 77, 90, 102 } /* y = d45 */,
{ 110, 10, 28, 144, 78, 158, 40, 49, 161 } /* y = d135 */,
{ 114, 10, 46, 169, 50, 96, 48, 70, 150 } /* y = d117 */,
{ 116, 10, 24, 125, 134, 168, 26, 27, 193 } /* y = d153 */,
{ 121, 14, 26, 124, 175, 143, 36, 37, 79 } /* y = d27 */,
{ 116, 13, 54, 100, 105, 122, 58, 126, 122 } /* y = d63 */,
{ 98, 22, 60, 147, 159, 124, 45, 68, 128 } /* y = tm */
};
static const unsigned int uv_mode_cts[VP9_INTRA_MODES][VP9_INTRA_MODES] = {
/* DC V H D45 135 117 153 D27 D63 TM */
{ 200, 15, 15, 10, 10, 10, 10, 10, 10, 6}, /* DC */
{ 130, 75, 10, 10, 10, 10, 10, 10, 10, 6}, /* V */
{ 130, 10, 75, 10, 10, 10, 10, 10, 10, 6}, /* H */
{ 130, 15, 10, 75, 10, 10, 10, 10, 10, 6}, /* D45 */
{ 150, 15, 10, 10, 75, 10, 10, 10, 10, 6}, /* D135 */
{ 150, 15, 10, 10, 10, 75, 10, 10, 10, 6}, /* D117 */
{ 150, 15, 10, 10, 10, 10, 75, 10, 10, 6}, /* D153 */
{ 150, 15, 10, 10, 10, 10, 10, 75, 10, 6}, /* D27 */
{ 150, 15, 10, 10, 10, 10, 10, 10, 75, 6}, /* D63 */
{ 160, 30, 30, 10, 10, 10, 10, 10, 10, 16}, /* TM */
static const vp9_prob default_if_y_probs[BLOCK_SIZE_GROUPS]
[VP9_INTRA_MODES - 1] = {
{ 42, 31, 23, 150, 161, 193, 32, 53, 100 } /* block_size < 8x8 */,
{ 132, 58, 30, 160, 209, 195, 52, 47, 76 } /* block_size < 16x16 */,
{ 179, 85, 24, 168, 236, 198, 87, 45, 46 } /* block_size < 32x32 */,
{ 221, 176, 63, 133, 233, 121, 125, 105, 34 } /* block_size >= 32x32 */
};
static const unsigned int kf_uv_mode_cts[VP9_INTRA_MODES][VP9_INTRA_MODES] = {
// DC V H D45 135 117 153 D27 D63 TM
{ 160, 24, 24, 20, 20, 20, 20, 20, 20, 8}, /* DC */
{ 102, 64, 30, 20, 20, 20, 20, 20, 20, 10}, /* V */
{ 102, 30, 64, 20, 20, 20, 20, 20, 20, 10}, /* H */
{ 102, 33, 20, 64, 20, 20, 20, 20, 20, 14}, /* D45 */
{ 102, 33, 20, 20, 64, 20, 20, 20, 20, 14}, /* D135 */
{ 122, 33, 20, 20, 20, 64, 20, 20, 20, 14}, /* D117 */
{ 102, 33, 20, 20, 20, 20, 64, 20, 20, 14}, /* D153 */
{ 102, 33, 20, 20, 20, 20, 20, 64, 20, 14}, /* D27 */
{ 102, 33, 20, 20, 20, 20, 20, 20, 64, 14}, /* D63 */
{ 132, 36, 30, 20, 20, 20, 20, 20, 20, 18}, /* TM */
static const vp9_prob default_if_uv_probs[VP9_INTRA_MODES]
[VP9_INTRA_MODES - 1] = {
{ 115, 7, 78, 180, 210, 127, 34, 57, 104 } /* y = dc */,
{ 43, 9, 165, 140, 112, 93, 45, 125, 117 } /* y = v */,
{ 68, 6, 25, 206, 241, 154, 16, 23, 102 } /* y = h */,
{ 90, 5, 48, 117, 155, 134, 61, 88, 96 } /* y = d45 */,
{ 77, 5, 43, 148, 100, 147, 37, 60, 146 } /* y = d135 */,
{ 75, 5, 57, 167, 62, 91, 45, 76, 139 } /* y = d117 */,
{ 86, 4, 34, 155, 185, 163, 22, 29, 160 } /* y = d153 */,
{ 82, 5, 34, 155, 207, 144, 26, 38, 79 } /* y = d27 */,
{ 69, 6, 65, 105, 104, 122, 48, 131, 116 } /* y = d63 */,
{ 86, 16, 114, 177, 189, 108, 28, 72, 120 } /* y = tm */
};
const vp9_prob vp9_partition_probs[NUM_PARTITION_CONTEXTS]
const vp9_prob vp9_partition_probs[NUM_FRAME_TYPES][NUM_PARTITION_CONTEXTS]
[PARTITION_TYPES - 1] = {
// FIXME(jingning,rbultje) put real probabilities here
{202, 162, 107},
{16, 2, 169},
{3, 246, 19},
{104, 90, 134},
{202, 162, 107},
{16, 2, 169},
{3, 246, 19},
{104, 90, 134},
{202, 162, 107},
{16, 2, 169},
{3, 246, 19},
{104, 90, 134},
{183, 70, 109},
{30, 14, 162},
{67, 208, 22},
{4, 17, 5},
{ /* frame_type = keyframe */
/* 8x8 -> 4x4 */
{ 164, 121, 109 } /* a/l both not split */,
{ 69, 11, 129 } /* a split, l not split */,
{ 52, 181, 37 } /* l split, a not split */,
{ 66, 71, 93 } /* a/l both split */,
/* 16x16 -> 8x8 */
{ 154, 48, 43 } /* a/l both not split */,
{ 81, 11, 63 } /* a split, l not split */,
{ 67, 65, 17 } /* l split, a not split */,
{ 57, 18, 24 } /* a/l both split */,
/* 32x32 -> 16x16 */
{ 156, 42, 35 } /* a/l both not split */,
{ 74, 10, 40 } /* a split, l not split */,
{ 59, 53, 10 } /* l split, a not split */,
{ 28, 10, 9 } /* a/l both split */,
/* 64x64 -> 32x32 */
{ 168, 32, 43 } /* a/l both not split */,
{ 59, 13, 41 } /* a split, l not split */,
{ 60, 25, 10 } /* l split, a not split */,
{ 13, 5, 4 } /* a/l both split */
}, { /* frame_type = interframe */
/* 8x8 -> 4x4 */
{ 192, 121, 151 } /* a/l both not split */,
{ 134, 63, 162 } /* a split, l not split */,
{ 136, 134, 127 } /* l split, a not split */,
{ 101, 97, 131 } /* a/l both split */,
/* 16x16 -> 8x8 */
{ 167, 67, 80 } /* a/l both not split */,
{ 87, 36, 70 } /* a split, l not split */,
{ 90, 61, 45 } /* l split, a not split */,
{ 46, 31, 32 } /* a/l both split */,
/* 32x32 -> 16x16 */
{ 167, 63, 75 } /* a/l both not split */,
{ 67, 27, 61 } /* a split, l not split */,
{ 56, 87, 31 } /* l split, a not split */,
{ 15, 13, 11 } /* a/l both split */,
/* 64x64 -> 32x32 */
{ 222, 45, 44 } /* a/l both not split */,
{ 62, 17, 62 } /* a split, l not split */,
{ 52, 65, 16 } /* l split, a not split */,
{ 9, 7, 6 } /* a/l both split */
}
};
/* Array indices are identical to previously-existing INTRAMODECONTEXTNODES. */
......@@ -101,18 +130,12 @@ struct vp9_token vp9_sb_mv_ref_encoding_array[VP9_INTER_MODES];
struct vp9_token vp9_partition_encodings[PARTITION_TYPES];
void vp9_init_mbmode_probs(VP9_COMMON *x) {
unsigned int bct[VP9_INTRA_MODES][2]; // num Ymodes > num UV modes
int i;
vp9_tree_probs_from_distribution(vp9_intra_mode_tree, x->fc.y_mode_prob,
bct, y_mode_cts, 0);
for (i = 0; i < VP9_INTRA_MODES; i++) {
vp9_tree_probs_from_distribution(vp9_intra_mode_tree, x->kf_uv_mode_prob[i],
bct, kf_uv_mode_cts[i], 0);
vp9_tree_probs_from_distribution(vp9_intra_mode_tree, x->fc.uv_mode_prob[i],
bct, uv_mode_cts[i], 0);
}
vpx_memcpy(x->fc.uv_mode_prob, default_if_uv_probs,
sizeof(default_if_uv_probs));
vpx_memcpy(x->kf_uv_mode_prob, default_kf_uv_probs,
sizeof(default_kf_uv_probs));
vpx_memcpy(x->fc.y_mode_prob, default_if_y_probs,
sizeof(default_if_y_probs));
vpx_memcpy(x->fc.switchable_interp_prob, vp9_switchable_interp_prob,
sizeof(vp9_switchable_interp_prob));
......@@ -280,9 +303,10 @@ void vp9_adapt_mode_probs(VP9_COMMON *cm) {
printf("};\n");
#endif
update_mode_probs(VP9_INTRA_MODES, vp9_intra_mode_tree,
fc->y_mode_counts, fc->pre_y_mode_prob,
fc->y_mode_prob, 0);
for (i = 0; i < BLOCK_SIZE_GROUPS; i++)
update_mode_probs(VP9_INTRA_MODES, vp9_intra_mode_tree,
fc->y_mode_counts[i], fc->pre_y_mode_prob[i],
fc->y_mode_prob[i], 0);
for (i = 0; i < VP9_INTRA_MODES; ++i)
update_mode_probs(VP9_INTRA_MODES, vp9_intra_mode_tree,
......@@ -292,7 +316,7 @@ void vp9_adapt_mode_probs(VP9_COMMON *cm) {
for (i = 0; i < NUM_PARTITION_CONTEXTS; i++)
update_mode_probs(PARTITION_TYPES, vp9_partition_tree,
fc->partition_counts[i], fc->pre_partition_prob[i],
fc->partition_prob[i], 0);
fc->partition_prob[INTER_FRAME][i], 0);
if (cm->mcomp_filter_type == SWITCHABLE) {
for (i = 0; i <= VP9_SWITCHABLE_FILTERS; i++) {
......
......@@ -21,7 +21,7 @@ extern int vp9_mv_cont(const int_mv *l, const int_mv *a);
extern const vp9_prob vp9_kf_default_bmode_probs[VP9_INTRA_MODES]
[VP9_INTRA_MODES]
[VP9_INTRA_MODES -1 ];
[VP9_INTRA_MODES - 1];
extern const vp9_tree_index vp9_intra_mode_tree[];
extern const vp9_tree_index vp9_sb_mv_ref_tree[];
......@@ -35,6 +35,9 @@ extern struct vp9_token vp9_sb_mv_ref_encoding_array[VP9_INTER_MODES];
// probability models for partition information
extern const vp9_tree_index vp9_partition_tree[];
extern struct vp9_token vp9_partition_encodings[PARTITION_TYPES];
extern const vp9_prob vp9_partition_probs[NUM_FRAME_TYPES]
[NUM_PARTITION_CONTEXTS]
[PARTITION_TYPES - 1];
void vp9_entropy_mode_init(void);
......
......@@ -13,116 +13,116 @@
const vp9_prob vp9_kf_default_bmode_probs[VP9_INTRA_MODES]
[VP9_INTRA_MODES]
[VP9_INTRA_MODES-1] = {
{ // Above 0
{ 231, 9, 124, 138, 96, 200, 76, 42, 88, }, // left 0
{ 152, 11, 187, 112, 170, 139, 130, 91, 113, }, // left 1
{ 175, 10, 71, 182, 212, 191, 43, 39, 82, }, // left 2
{ 56, 23, 63, 38, 76, 60, 185, 206, 159, }, // left 3
{ 144, 52, 89, 192, 19, 236, 134, 93, 37, }, // left 4
{ 114, 22, 29, 133, 37, 18, 60, 156, 233, }, // left 5
{ 121, 16, 26, 124, 176, 50, 29, 20, 234, }, // left 6
{ 170, 19, 50, 91, 169, 216, 14, 16, 5, }, // left 7
{ 63, 14, 21, 68, 32, 29, 71, 224, 181, }, // left 8
{ 81, 93, 62, 65, 78, 171, 152, 103, 172, }, // left 9
}, { // Above 1
{ 134, 2, 185, 147, 159, 152, 83, 33, 136, }, // left 0
{ 72, 9, 194, 141, 208, 108, 124, 73, 119, }, // left 1
{ 66, 1, 102, 183, 236, 151, 35, 8, 78, }, // left 2
{ 41, 30, 60, 26, 101, 148, 212, 206, 177, }, // left 3
{ 104, 91, 122, 184, 33, 243, 156, 73, 1, }, // left 4
{ 74, 23, 47, 119, 63, 60, 79, 135, 211, }, // left 5
{ 65, 12, 40, 134, 211, 79, 42, 37, 187, }, // left 6
{ 87, 26, 76, 97, 218, 183, 27, 7, 31, }, // left 7
{ 47, 24, 45, 53, 78, 89, 105, 215, 128, }, // left 8
{ 66, 89, 68, 91, 120, 113, 190, 105, 98, }, // left 9
}, { // Above 2
{ 88, 1, 88, 166, 229, 115, 30, 23, 155, }, // left 0
{ 43, 5, 98, 198, 244, 158, 50, 14, 113, }, // left 1
{ 39, 1, 53, 208, 247, 208, 10, 11, 92, }, // left 2
{ 56, 42, 41, 102, 156, 110, 76, 61, 106, }, // left 3
{ 107, 79, 78, 158, 85, 255, 20, 64, 114, }, // left 4
{ 39, 15, 30, 174, 135, 66, 85, 28, 176, }, // left 5
{ 34, 5, 22, 137, 222, 64, 22, 5, 220, }, // left 6
{ 68, 7, 25, 135, 206, 192, 7, 14, 8, }, // left 7
{ 34, 45, 24, 78, 85, 55, 85, 120, 60, }, // left 8
{ 62, 54, 23, 142, 182, 177, 64, 57, 171, }, // left 9
}, { // Above 3
{ 193, 15, 108, 82, 121, 192, 188, 119, 145, }, // left 0
{ 60, 15, 157, 65, 142, 61, 202, 203, 85, }, // left 1
{ 112, 17, 121, 128, 175, 128, 94, 85, 1, }, // left 2
{ 40, 25, 47, 12, 20, 64, 221, 194, 57, }, // left 3
{ 100, 74, 112, 85, 43, 255, 64, 142, 128, }, // left 4
{ 88, 24, 47, 91, 93, 73, 141, 171, 85, }, // left 5
{ 61, 9, 65, 75, 107, 146, 53, 100, 255, }, // left 6
{ 142, 8, 80, 105, 199, 255, 20, 43, 1, }, // left 7
{ 41, 17, 43, 22, 64, 43, 98, 246, 255, }, // left 8
{ 51, 37, 59, 56, 94, 64, 200, 154, 128, }, // left 9
}, { // Above 4
{ 125, 10, 103, 129, 89, 209, 65, 22, 91, }, // left 0
{ 95, 25, 93, 146, 108, 208, 96, 34, 108, }, // left 1
{ 75, 17, 84, 185, 188, 199, 20, 1, 43, }, // left 2
{ 57, 91, 27, 83, 23, 205, 67, 75, 149, }, // left 3
{ 115, 70, 29, 237, 3, 247, 73, 51, 1, }, // left 4
{ 38, 67, 45, 73, 64, 85, 51, 96, 255, }, // left 5
{ 41, 25, 11, 142, 133, 128, 77, 73, 205, }, // left 6
{ 101, 26, 32, 124, 38, 247, 7, 7, 8, }, // left 7
{ 57, 91, 28, 128, 32, 73, 128, 128, 128, }, // left 8
{ 117, 127, 39, 164, 51, 230, 128, 183, 255, }, // left 9
}, { // Above 5
{ 138, 5, 32, 135, 70, 29, 33, 115, 208, }, // left 0
{ 67, 9, 91, 111, 142, 38, 78, 87, 199, }, // left 1
{ 63, 7, 60, 172, 138, 60, 85, 64, 199, }, // left 2
{ 40, 25, 44, 87, 71, 79, 102, 183, 85, }, // left 3
{ 57, 110, 80, 140, 85, 255, 51, 128, 128, }, // left 4
{ 47, 12, 16, 167, 26, 23, 69, 135, 171, }, // left 5
{ 46, 14, 18, 102, 89, 15, 7, 67, 238, }, // left 6
{ 65, 8, 33, 123, 158, 51, 18, 79, 114, }, // left 7
{ 40, 16, 3, 91, 28, 32, 37, 207, 224, }, // left 8
{ 87, 66, 49, 98, 32, 146, 59, 51, 224, }, // left 9
}, { // Above 6
{ 104, 1, 55, 88, 130, 39, 9, 17, 234, }, // left 0
{ 64, 15, 96, 103, 192, 37, 43, 15, 248, }, // left 1
{ 54, 2, 57, 135, 213, 70, 4, 22, 203, }, // left 2
{ 30, 38, 40, 64, 128, 43, 114, 141, 171, }, // left 3
{ 75, 43, 38, 181, 21, 233, 154, 128, 1, }, // left 4
{ 39, 1, 19, 126, 107, 12, 35, 40, 237, }, // left 5
{ 31, 6, 9, 77, 221, 1, 2, 4, 244, }, // left 6
{ 88, 20, 33, 90, 110, 192, 39, 23, 51, }, // left 7
{ 56, 21, 23, 119, 55, 70, 48, 177, 128, }, // left 8
{ 55, 44, 46, 120, 188, 1, 60, 98, 192, }, // left 9
}, { // Above 7
{ 102, 1, 61, 95, 192, 205, 6, 9, 31, }, // left 0
{ 69, 12, 63, 104, 187, 166, 14, 5, 20, }, // left 1
{ 68, 1, 45, 136, 242, 154, 1, 7, 30, }, // left 2
{ 62, 69, 24, 92, 73, 205, 82, 90, 93, }, // left 3
{ 75, 31, 17, 215, 12, 246, 16, 17, 1, }, // left 4
{ 37, 18, 46, 128, 80, 93, 112, 1, 114, }, // left 5
{ 63, 9, 10, 125, 195, 85, 20, 11, 134, }, // left 6
{ 86, 6, 6, 54, 136, 224, 1, 1, 1, }, // left 7
{ 56, 24, 9, 110, 43, 77, 128, 96, 1, }, // left 8
{ 58, 60, 20, 59, 116, 171, 69, 28, 75, }, // left 9
}, { // Above 8
{ 164, 10, 52, 70, 121, 74, 105, 168, 164, }, // left 0
{ 51, 20, 112, 95, 138, 85, 101, 166, 238, }, // left 1
{ 86, 9, 42, 122, 140, 77, 117, 39, 23, }, // left 2
{ 22, 18, 28, 30, 156, 146, 141, 247, 255, }, // left 3
{ 83, 98, 20, 128, 43, 205, 128, 85, 1, }, // left 4
{ 45, 32, 18, 92, 67, 18, 38, 238, 255, }, // left 5
{ 56, 7, 22, 104, 98, 32, 54, 85, 154, }, // left 6
{ 85, 13, 27, 120, 192, 128, 57, 73, 51, }, // left 7
{ 18, 7, 12, 29, 67, 37, 40, 240, 192, }, // left 8
{ 35, 40, 32, 55, 57, 37, 147, 165, 154, }, // left 9
}, { // Above 9
{ 190, 31, 91, 133, 82, 229, 152, 59, 141, }, // left 0
{ 85, 47, 155, 116, 163, 213, 141, 85, 171, }, // left 1
{ 101, 8, 78, 184, 186, 142, 118, 37, 128, }, // left 2
{ 56, 40, 49, 37, 128, 183, 219, 149, 205, }, // left 3
{ 146, 92, 56, 184, 45, 229, 114, 102, 1, }, // left 4
{ 71, 45, 37, 107, 51, 32, 110, 224, 1, }, // left 5
{ 101, 26, 43, 111, 158, 102, 45, 91, 228, }, // left 6
{ 138, 17, 48, 117, 144, 255, 81, 20, 21, }, // left 7
{ 32, 33, 47, 64, 93, 73, 101, 179, 171, }, // left 8
{ 112, 125, 38, 113, 56, 213, 168, 154, 192, }, // left 9
},
[VP9_INTRA_MODES - 1] = {
{ /* above = dc */
{ 165, 25, 57, 147, 137, 207, 70, 49, 89 } /* left = dc */,
{ 107, 33, 127, 132, 131, 173, 86, 88, 105 } /* left = v */,
{ 87, 25, 24, 193, 225, 213, 44, 33, 94 } /* left = h */,
{ 82, 32, 42, 91, 116, 154, 134, 119, 110 } /* left = d45 */,
{ 87, 41, 47, 164, 49, 219, 85, 72, 84 } /* left = d135 */,
{ 83, 29, 29, 134, 55, 84, 58, 132, 185 } /* left = d117 */,
{ 78, 22, 24, 134, 145, 161, 37, 32, 199 } /* left = d153 */,
{ 103, 25, 33, 121, 156, 215, 34, 32, 29 } /* left = d27 */,
{ 73, 28, 26, 91, 75, 116, 67, 169, 128 } /* left = d63 */,
{ 62, 79, 46, 119, 142, 197, 97, 73, 133 } /* left = tm */
}, { /* above = v */
{ 77, 19, 144, 147, 131, 159, 67, 75, 108 } /* left = dc */,
{ 48, 30, 180, 135, 139, 124, 84, 125, 102 } /* left = v */,
{ 47, 14, 76, 169, 216, 171, 48, 35, 77 } /* left = h */,
{ 53, 39, 82, 93, 98, 165, 128, 156, 115 } /* left = d45 */,
{ 59, 52, 88, 155, 54, 208, 95, 109, 23 } /* left = d135 */,
{ 45, 30, 76, 136, 51, 95, 62, 154, 157 } /* left = d117 */,
{ 45, 22, 60, 127, 136, 156, 45, 67, 157 } /* left = d153 */,
{ 59, 30, 78, 107, 157, 181, 49, 39, 50 } /* left = d27 */,
{ 45, 33, 70, 85, 76, 127, 76, 185, 89 } /* left = d63 */,
{ 41, 69, 104, 113, 125, 154, 110, 123, 88 } /* left = tm */
}, { /* above = h */
{ 85, 12, 38, 172, 219, 185, 40, 29, 118 } /* left = dc */,
{ 52, 25, 78, 175, 211, 189, 56, 37, 108 } /* left = v */,
{ 38, 11, 17, 207, 245, 224, 18, 13, 84 } /* left = h */,
{ 63, 42, 25, 121, 162, 179, 63, 53, 90 } /* left = d45 */,
{ 69, 59, 35, 146, 108, 245, 33, 56, 115 } /* left = d135 */,
{ 45, 27, 30, 160, 118, 128, 75, 49, 147 } /* left = d117 */,
{ 40, 17, 19, 147, 198, 169, 30, 14, 181 } /* left = d153 */,
{ 56, 19, 15, 150, 207, 212, 17, 22, 28 } /* left = d27 */,
{ 45, 50, 21, 97, 113, 135, 68, 89, 72 } /* left = d63 */,
{ 41, 70, 19, 165, 199, 203, 54, 52, 121 } /* left = tm */
}, { /* above = d45 */
{ 124, 25, 52, 122, 127, 200, 116, 88, 105 } /* left = dc */,
{ 60, 31, 107, 103, 119, 136, 135, 150, 90 } /* left = v */,
{ 70, 28, 37, 157, 203, 192, 73, 67, 21 } /* left = h */,
{ 62, 33, 39, 54, 67, 159, 150, 114, 61 } /* left = d45 */,
{ 69, 41, 46, 102, 64, 240, 68, 103, 111 } /* left = d135 */,
{ 59, 27, 39, 121, 68, 132, 101, 139, 96 } /* left = d117 */,
{ 55, 19, 33, 119, 109, 198, 61, 88, 224 } /* left = d153 */,
{ 92, 16, 40, 107, 160, 242, 48, 62, 15 } /* left = d27 */,
{ 57, 27, 36, 65, 95, 130, 94, 213, 222 } /* left = d63 */,
{ 47, 47, 47, 101, 130, 154, 130, 105, 102 } /* left = tm */
}, { /* above = d135 */
{ 80, 19, 42, 132, 81, 205, 51, 36, 99 } /* left = dc */,
{ 60, 34, 67, 145, 76, 196, 72, 61, 112 } /* left = v */,
{ 46, 25, 29, 172, 181, 208, 37, 11, 79 } /* left = h */,
{ 59, 45, 20, 103, 42, 203, 57, 68, 107 } /* left = d45 */,
{ 68, 41, 25, 190, 21, 226, 68, 65, 38 } /* left = d135 */,
{ 42, 38, 34, 133, 48, 145, 57, 106, 237 } /* left = d117 */,
{ 35, 20, 11, 139, 94, 197, 49, 50, 182 } /* left = d153 */,
{ 64, 26, 24, 122, 73, 230, 27, 27, 39 } /* left = d27 */,
{ 53, 49, 25, 118, 52, 147, 84, 104, 103 } /* left = d63 */,
{ 62, 70, 35, 156, 90, 214, 95, 140, 211 } /* left = tm */
}, { /* above = d117 */
{ 78, 14, 37, 152, 67, 100, 44, 103, 160 } /* left = dc */,
{ 50, 20, 86, 139, 72, 98, 62, 111, 157 } /* left = v */,
{ 42, 17, 33, 169, 153, 139, 62, 61, 136 } /* left = h */,
{ 48, 21, 39, 123, 65, 143, 76, 131, 87 } /* left = d45 */,
{ 47, 41, 44, 149, 49, 221, 51, 107, 122 } /* left = d135 */,
{ 37, 18, 26, 177, 20, 66, 58, 131, 148 } /* left = d117 */,
{ 39, 19, 26, 125, 77, 115, 22, 75, 192 } /* left = d153 */,
{ 48, 13, 33, 125, 113, 132, 30, 77, 99 } /* left = d27 */,
{ 45, 27, 15, 119, 42, 96, 45, 168, 164 } /* left = d63 */,
{ 48, 52, 52, 129, 60, 158, 58, 89, 153 } /* left = tm */
}, { /* above = d153 */
{ 82, 9, 31, 121, 146, 145, 23, 28, 194 } /* left = dc */,
{ 57, 32, 78, 121, 148, 128, 50, 37, 217 } /* left = v */,
{ 38, 12, 19, 158, 221, 172, 12, 22, 166 } /* left = h */,
{ 49, 32, 24, 100, 125, 142, 72, 83, 132 } /* left = d45 */,
{ 54, 36, 22, 172, 49, 225, 88, 72, 59 } /* left = d135 */,
{ 43, 7, 23, 130, 95, 86, 44, 57, 206 } /* left = d117 */,
{ 34, 13, 12, 90, 196, 91, 8, 10, 226 } /* left = d153 */,
{ 55, 23, 17, 106, 127, 207, 32, 23, 92 } /* left = d27 */,
{ 54, 28, 20, 121, 76, 151, 45, 110, 124 } /* left = d63 */,
{ 41, 51, 31, 120, 192, 74, 45, 62, 163 } /* left = tm */
}, { /* above = d27 */
{ 88, 10, 40, 120, 157, 211, 25, 27, 54 } /* left = dc */,
{ 64, 31, 69, 121, 129, 184, 36, 29, 45 } /* left = v */,
{ 51, 11, 22, 170, 232, 209, 11, 20, 64 } /* left = h */,
{ 65, 43, 19, 102, 91, 208, 68, 78, 75 } /* left = d45 */,
{ 64, 40, 23, 171, 47, 229, 45, 48, 19 } /* left = d135 */,
{ 43, 27, 39, 136, 76, 149, 92, 13, 114 } /* left = d117 */,
{ 53, 19, 14, 128, 148, 173, 31, 25, 133 } /* left = d153 */,
{ 73, 19, 13, 97, 137, 218, 12, 12, 10 } /* left = d27 */,
{ 57, 35, 15, 111, 68, 149, 90, 102, 16 } /* left = d63 */,
{ 43, 63, 23, 107, 144, 200, 64, 47, 88 } /* left = tm */
}, { /* above = d63 */
{ 95, 19, 44, 97, 120, 145, 81, 142, 115 } /* left = dc */,
{ 46, 29, 93, 95, 106, 133, 83, 189, 177 } /* left = v */,
{ 54, 19, 29, 136, 181, 157, 80, 67, 47 } /* left = h */,
{ 44, 26, 34, 83, 125, 180, 116, 218, 206 } /* left = d45 */,
{ 56, 41, 25, 118, 55, 192, 93, 121, 22 } /* left = d135 */,
{ 44, 31, 30, 110, 67, 80, 56, 217, 225 } /* left = d117 */,
{ 44, 14, 25, 101, 105, 136, 57, 83, 133 } /* left = d153 */,
{ 62, 16, 28, 105, 157, 164, 67, 92, 58 } /* left = d27 */,
{ 36, 18, 25, 57, 88, 113, 59, 210, 127 } /* left = d63 */,
{ 36, 41, 44, 79, 104, 129, 100, 151, 105 } /* left = tm */
}, { /* above = tm */
{ 90, 61, 68, 152, 141, 209, 79, 59, 93 } /* left = dc */,
{ 49, 71, 127, 132, 129, 187, 89, 105, 113 } /* left = v */,
{ 48, 29, 26, 190, 225, 190, 55, 32, 75 } /* left = h */,
{ 58, 51, 46, 110, 134, 192, 124, 100, 113 } /* left = d45 */,
{ 69, 60, 38, 156, 82, 214, 79, 89, 24 } /* left = d135 */,
{ 48, 54, 50, 139, 71, 106, 77, 162, 18 } /* left = d117 */,
{ 52, 34, 33, 137, 149, 184