Commit fd18d5df authored by Deb Mukherjee's avatar Deb Mukherjee

Modeling default coef probs with distribution

Replaces the default tables for single coefficient magnitudes with
those obtained from an appropriate distribution. The EOB node
is left unchanged. The model is represeted as a 256-size codebook
where the index corresponds to the probability of the Zero or the
One node. Two variations are implemented corresponding to whether
the Zero node or the One-node is used as the peg. The main advantage
is that the default prob tables will become considerably smaller and
manageable. Besides there is substantially less risk of over-fitting
for a training set.

Various distributions are tried and the one that gives the best
results is the family of Generalized Gaussian distributions with
shape parameter 0.75. The results are within about 0.2% of fully
trained tables for the Zero peg variant, and within 0.1% of the
One peg variant.

The forward updates are optionally (controlled by a macro)
model-based, i.e. restricted to only convey probabilities from the
codebook. Backward updates can also be optionally (controlled by
another macro) model-based, but is turned off by default. Currently
model-based forward updates work about the same as unconstrained
updates, but there is a drop in performance with backward-updates
being model based.

The model based approach also allows the probabilities for the key
frames to be adjusted from the defaults based on the base_qindex of
the frame. Currently the adjustment function is a placeholder that
adjusts the prob of EOB and Zero node from the nominal one at higher
quality (lower qindex) or lower quality (higher qindex) ends of the
range. The rest of the probabilities are then derived based on the
model from the adjusted prob of zero.

Change-Id: Iae050f3cbcc6d8b3f204e8dc395ae47b3b2192c9
parent 66eff0aa
......@@ -247,6 +247,7 @@ EXPERIMENT_LIST="
abovesprefmv
code_nonzerocount
useselectrefmv
modelcoefprob
"
CONFIG_LIST="
external_build
......
......@@ -13,9 +13,10 @@
/* Update probabilities for the nodes in the token entropy tree.
Generated file included by vp9_entropy.c */
#define COEF_UPDATE_PROB 252
#define COEF_UPDATE_PROB_8X8 252
#define COEF_UPDATE_PROB_16X16 252
static const vp9_prob vp9_coef_update_prob[ENTROPY_NODES] = {
252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252
};
#if CONFIG_CODE_NONZEROCOUNT
#define NZC_UPDATE_PROB_4X4 252
......@@ -25,4 +26,8 @@
#define NZC_UPDATE_PROB_PCAT 252
#endif
#if CONFIG_MODELCOEFPROB
#define COEF_MODEL_UPDATE_PROB 16
#endif
#endif // VP9_COMMON_VP9_COEFUPDATEPROBS_H__
......@@ -11,6 +11,10 @@
/*Generated file, included by vp9_entropy.c*/
// NOTE: When the CONFIG_MODELCOEFPROB experiment is on, only the first
// 2 or 3 from each row is actually used depending on whether
// UNCONSTRAINDED_NODES is 2 or 3. If this experiment is merged
// the tables below should be shortened accordingly.
static const vp9_coeff_probs default_coef_probs_4x4[BLOCK_TYPES] = {
{ /* block Type 0 */
{ /* Intra */
......
......@@ -245,6 +245,1602 @@ const int vp9_basenzcvalue[NZC32X32_TOKENS] = {
#endif // CONFIG_CODE_NONZEROCOUNT
#if CONFIG_MODELCOEFPROB
const vp9_prob vp9_modelcoefprobs_gg875[COEFPROB_MODELS][ENTROPY_NODES - 1] = {
// Probs generated with a Generalized Gaussian (with shape parameter 0.875)
// source model with varying quantizer step size for a uniform quantizer
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, // do not use
{1, 2, 6, 86, 129, 11, 87, 42, 92, 52,},
{2, 4, 12, 87, 129, 22, 89, 75, 97, 91,},
{3, 6, 17, 88, 130, 32, 90, 102, 102, 121,},
{4, 8, 22, 89, 131, 41, 91, 125, 107, 145,},
{5, 10, 28, 90, 131, 50, 93, 144, 112, 164,},
{6, 12, 33, 90, 132, 59, 94, 160, 117, 180,},
{7, 14, 38, 91, 132, 67, 95, 173, 122, 193,},
{8, 15, 42, 92, 133, 75, 97, 185, 126, 204,},
{9, 17, 47, 92, 133, 82, 98, 195, 131, 212,},
{10, 19, 52, 93, 134, 89, 99, 203, 135, 220,},
{11, 21, 56, 94, 134, 96, 101, 211, 140, 226,},
{12, 23, 60, 95, 135, 102, 102, 217, 144, 231,},
{13, 25, 65, 95, 135, 109, 103, 222, 148, 235,},
{14, 26, 69, 96, 136, 115, 105, 227, 153, 238,},
{15, 28, 73, 97, 136, 120, 106, 231, 157, 241,},
{16, 30, 77, 97, 137, 126, 107, 234, 161, 244,},
{17, 32, 81, 98, 138, 131, 108, 237, 164, 246,},
{18, 34, 85, 99, 138, 136, 110, 240, 168, 247,},
{19, 35, 89, 100, 139, 141, 111, 242, 172, 249,},
{20, 37, 92, 100, 139, 145, 112, 244, 175, 250,},
{21, 39, 96, 101, 140, 150, 113, 246, 179, 251,},
{22, 41, 99, 102, 140, 154, 115, 247, 182, 252,},
{23, 42, 103, 102, 141, 158, 116, 248, 185, 252,},
{24, 44, 106, 103, 141, 162, 117, 249, 188, 253,},
{25, 46, 110, 104, 142, 166, 118, 250, 191, 253,},
{26, 48, 113, 104, 142, 170, 120, 251, 194, 254,},
{27, 49, 116, 105, 143, 173, 121, 252, 197, 254,},
{28, 51, 119, 106, 143, 176, 122, 252, 200, 254,},
{29, 53, 122, 107, 144, 180, 123, 253, 202, 255,},
{30, 54, 125, 107, 144, 183, 125, 253, 205, 255,},
{31, 56, 128, 108, 145, 186, 126, 254, 207, 255,},
{32, 58, 131, 109, 145, 189, 127, 254, 209, 255,},
{33, 59, 134, 109, 146, 191, 128, 254, 212, 255,},
{34, 61, 137, 110, 146, 194, 130, 254, 214, 255,},
{35, 62, 139, 111, 147, 196, 131, 255, 216, 255,},
{36, 64, 142, 112, 147, 199, 132, 255, 218, 255,},
{37, 66, 145, 112, 148, 201, 134, 255, 220, 255,},
{38, 67, 147, 113, 148, 203, 135, 255, 221, 255,},
{39, 69, 150, 114, 149, 206, 136, 255, 223, 255,},
{40, 70, 152, 114, 149, 208, 137, 255, 225, 255,},
{41, 72, 155, 115, 150, 210, 138, 255, 226, 255,},
{42, 74, 157, 116, 150, 212, 140, 255, 228, 255,},
{43, 75, 159, 117, 151, 213, 141, 255, 229, 255,},
{44, 77, 161, 117, 151, 215, 142, 255, 230, 255,},
{45, 78, 164, 118, 152, 217, 143, 255, 232, 255,},
{46, 80, 166, 119, 152, 219, 145, 255, 233, 255,},
{47, 81, 168, 120, 153, 220, 146, 255, 234, 255,},
{48, 83, 170, 120, 153, 222, 147, 255, 235, 255,},
{49, 84, 172, 121, 154, 223, 148, 255, 236, 255,},
{50, 86, 174, 122, 154, 225, 150, 255, 237, 255,},
{51, 87, 176, 123, 155, 226, 151, 255, 238, 255,},
{52, 89, 178, 123, 155, 227, 152, 255, 239, 255,},
{53, 90, 180, 124, 156, 228, 153, 255, 240, 255,},
{54, 92, 182, 125, 156, 230, 154, 255, 241, 255,},
{55, 93, 183, 126, 157, 231, 156, 255, 242, 255,},
{56, 95, 185, 126, 157, 232, 157, 255, 242, 255,},
{57, 96, 187, 127, 158, 233, 158, 255, 243, 255,},
{58, 98, 189, 128, 158, 234, 159, 255, 244, 255,},
{59, 99, 190, 129, 159, 235, 160, 255, 244, 255,},
{60, 101, 192, 129, 159, 236, 162, 255, 245, 255,},
{61, 102, 193, 130, 160, 237, 163, 255, 246, 255,},
{62, 104, 195, 131, 160, 238, 164, 255, 246, 255,},
{63, 105, 197, 132, 161, 238, 165, 255, 247, 255,},
{64, 106, 198, 132, 162, 239, 166, 255, 247, 255,},
{65, 108, 199, 133, 162, 240, 167, 255, 248, 255,},
{66, 109, 201, 134, 163, 241, 169, 255, 248, 255,},
{67, 111, 202, 135, 163, 241, 170, 255, 249, 255,},
{68, 112, 204, 135, 164, 242, 171, 255, 249, 255,},
{69, 113, 205, 136, 164, 243, 172, 255, 249, 255,},
{70, 115, 206, 137, 165, 243, 173, 255, 250, 255,},
{71, 116, 208, 138, 165, 244, 174, 255, 250, 255,},
{72, 117, 209, 138, 166, 244, 175, 255, 250, 255,},
{73, 119, 210, 139, 166, 245, 177, 255, 251, 255,},
{74, 120, 211, 140, 167, 245, 178, 255, 251, 255,},
{75, 121, 212, 141, 167, 246, 179, 255, 251, 255,},
{76, 123, 214, 142, 168, 246, 180, 255, 252, 255,},
{77, 124, 215, 142, 168, 247, 181, 255, 252, 255,},
{78, 125, 216, 143, 169, 247, 182, 255, 252, 255,},
{79, 127, 217, 144, 170, 248, 183, 255, 252, 255,},
{80, 128, 218, 145, 170, 248, 184, 255, 253, 255,},
{81, 129, 219, 146, 171, 248, 185, 255, 253, 255,},
{82, 131, 220, 146, 171, 249, 186, 255, 253, 255,},
{83, 132, 221, 147, 172, 249, 187, 255, 253, 255,},
{84, 133, 222, 148, 172, 249, 188, 255, 253, 255,},
{85, 134, 223, 149, 173, 250, 189, 255, 253, 255,},
{86, 136, 224, 149, 173, 250, 190, 255, 254, 255,},
{87, 137, 225, 150, 174, 250, 191, 255, 254, 255,},
{88, 138, 226, 151, 174, 251, 192, 255, 254, 255,},
{89, 139, 226, 152, 175, 251, 193, 255, 254, 255,},
{90, 141, 227, 153, 175, 251, 194, 255, 254, 255,},
{91, 142, 228, 153, 176, 251, 195, 255, 254, 255,},
{92, 143, 229, 154, 177, 252, 196, 255, 254, 255,},
{93, 144, 230, 155, 177, 252, 197, 255, 254, 255,},
{94, 146, 230, 156, 178, 252, 198, 255, 255, 255,},
{95, 147, 231, 157, 178, 252, 199, 255, 255, 255,},
{96, 148, 232, 157, 179, 252, 200, 255, 255, 255,},
{97, 149, 233, 158, 179, 253, 201, 255, 255, 255,},
{98, 150, 233, 159, 180, 253, 202, 255, 255, 255,},
{99, 152, 234, 160, 180, 253, 203, 255, 255, 255,},
{100, 153, 235, 161, 181, 253, 204, 255, 255, 255,},
{101, 154, 235, 161, 182, 253, 205, 255, 255, 255,},
{102, 155, 236, 162, 182, 253, 206, 255, 255, 255,},
{103, 156, 236, 163, 183, 254, 207, 255, 255, 255,},
{104, 157, 237, 164, 183, 254, 207, 255, 255, 255,},
{105, 159, 238, 165, 184, 254, 208, 255, 255, 255,},
{106, 160, 238, 166, 184, 254, 209, 255, 255, 255,},
{107, 161, 239, 166, 185, 254, 210, 255, 255, 255,},
{108, 162, 239, 167, 185, 254, 211, 255, 255, 255,},
{109, 163, 240, 168, 186, 254, 212, 255, 255, 255,},
{110, 164, 240, 169, 187, 254, 212, 255, 255, 255,},
{111, 165, 241, 170, 187, 254, 213, 255, 255, 255,},
{112, 166, 241, 170, 188, 255, 214, 255, 255, 255,},
{113, 167, 242, 171, 188, 255, 215, 255, 255, 255,},
{114, 169, 242, 172, 189, 255, 216, 255, 255, 255,},
{115, 170, 243, 173, 189, 255, 216, 255, 255, 255,},
{116, 171, 243, 174, 190, 255, 217, 255, 255, 255,},
{117, 172, 244, 174, 190, 255, 218, 255, 255, 255,},
{118, 173, 244, 175, 191, 255, 219, 255, 255, 255,},
{119, 174, 244, 176, 192, 255, 219, 255, 255, 255,},
{120, 175, 245, 177, 192, 255, 220, 255, 255, 255,},
{121, 176, 245, 178, 193, 255, 221, 255, 255, 255,},
{122, 177, 245, 178, 193, 255, 222, 255, 255, 255,},
{123, 178, 246, 179, 194, 255, 222, 255, 255, 255,},
{124, 179, 246, 180, 194, 255, 223, 255, 255, 255,},
{125, 180, 247, 181, 195, 255, 224, 255, 255, 255,},
{126, 181, 247, 182, 196, 255, 224, 255, 255, 255,},
{127, 182, 247, 182, 196, 255, 225, 255, 255, 255,},
{128, 183, 247, 183, 197, 255, 226, 255, 255, 255,},
{129, 184, 248, 184, 197, 255, 226, 255, 255, 255,},
{130, 185, 248, 185, 198, 255, 227, 255, 255, 255,},
{131, 186, 248, 186, 198, 255, 228, 255, 255, 255,},
{132, 187, 249, 186, 199, 255, 228, 255, 255, 255,},
{133, 188, 249, 187, 200, 255, 229, 255, 255, 255,},
{134, 189, 249, 188, 200, 255, 230, 255, 255, 255,},
{135, 190, 249, 189, 201, 255, 230, 255, 255, 255,},
{136, 191, 250, 190, 201, 255, 231, 255, 255, 255,},
{137, 192, 250, 190, 202, 255, 231, 255, 255, 255,},
{138, 193, 250, 191, 202, 255, 232, 255, 255, 255,},
{139, 194, 250, 192, 203, 255, 232, 255, 255, 255,},
{140, 195, 251, 193, 204, 255, 233, 255, 255, 255,},
{141, 195, 251, 194, 204, 255, 234, 255, 255, 255,},
{142, 196, 251, 194, 205, 255, 234, 255, 255, 255,},
{143, 197, 251, 195, 205, 255, 235, 255, 255, 255,},
{144, 198, 251, 196, 206, 255, 235, 255, 255, 255,},
{145, 199, 252, 197, 206, 255, 236, 255, 255, 255,},
{146, 200, 252, 197, 207, 255, 236, 255, 255, 255,},
{147, 201, 252, 198, 208, 255, 237, 255, 255, 255,},
{148, 202, 252, 199, 208, 255, 237, 255, 255, 255,},
{149, 203, 252, 200, 209, 255, 238, 255, 255, 255,},
{150, 203, 252, 201, 209, 255, 238, 255, 255, 255,},
{151, 204, 253, 201, 210, 255, 239, 255, 255, 255,},
{152, 205, 253, 202, 210, 255, 239, 255, 255, 255,},
{153, 206, 253, 203, 211, 255, 239, 255, 255, 255,},
{154, 207, 253, 204, 212, 255, 240, 255, 255, 255,},
{155, 208, 253, 204, 212, 255, 240, 255, 255, 255,},
{156, 209, 253, 205, 213, 255, 241, 255, 255, 255,},
{157, 209, 253, 206, 213, 255, 241, 255, 255, 255,},
{158, 210, 254, 207, 214, 255, 242, 255, 255, 255,},
{159, 211, 254, 207, 214, 255, 242, 255, 255, 255,},
{160, 212, 254, 208, 215, 255, 242, 255, 255, 255,},
{161, 213, 254, 209, 215, 255, 243, 255, 255, 255,},
{162, 213, 254, 210, 216, 255, 243, 255, 255, 255,},
{163, 214, 254, 210, 217, 255, 244, 255, 255, 255,},
{164, 215, 254, 211, 217, 255, 244, 255, 255, 255,},
{165, 216, 254, 212, 218, 255, 244, 255, 255, 255,},
{166, 216, 254, 212, 218, 255, 245, 255, 255, 255,},
{167, 217, 254, 213, 219, 255, 245, 255, 255, 255,},
{168, 218, 254, 214, 219, 255, 245, 255, 255, 255,},
{169, 219, 255, 215, 220, 255, 246, 255, 255, 255,},
{170, 219, 255, 215, 221, 255, 246, 255, 255, 255,},
{171, 220, 255, 216, 221, 255, 246, 255, 255, 255,},
{172, 221, 255, 217, 222, 255, 247, 255, 255, 255,},
{173, 222, 255, 217, 222, 255, 247, 255, 255, 255,},
{174, 222, 255, 218, 223, 255, 247, 255, 255, 255,},
{175, 223, 255, 219, 223, 255, 248, 255, 255, 255,},
{176, 224, 255, 220, 224, 255, 248, 255, 255, 255,},
{177, 224, 255, 220, 224, 255, 248, 255, 255, 255,},
{178, 225, 255, 221, 225, 255, 248, 255, 255, 255,},
{179, 226, 255, 222, 225, 255, 249, 255, 255, 255,},
{180, 226, 255, 222, 226, 255, 249, 255, 255, 255,},
{181, 227, 255, 223, 227, 255, 249, 255, 255, 255,},
{182, 228, 255, 224, 227, 255, 249, 255, 255, 255,},
{183, 228, 255, 224, 228, 255, 250, 255, 255, 255,},
{184, 229, 255, 225, 228, 255, 250, 255, 255, 255,},
{185, 230, 255, 226, 229, 255, 250, 255, 255, 255,},
{186, 230, 255, 226, 229, 255, 250, 255, 255, 255,},
{187, 231, 255, 227, 230, 255, 251, 255, 255, 255,},
{188, 232, 255, 228, 230, 255, 251, 255, 255, 255,},
{189, 232, 255, 228, 231, 255, 251, 255, 255, 255,},
{190, 233, 255, 229, 231, 255, 251, 255, 255, 255,},
{191, 233, 255, 229, 232, 255, 251, 255, 255, 255,},
{192, 234, 255, 230, 232, 255, 252, 255, 255, 255,},
{193, 234, 255, 231, 233, 255, 252, 255, 255, 255,},
{194, 235, 255, 231, 233, 255, 252, 255, 255, 255,},
{195, 236, 255, 232, 234, 255, 252, 255, 255, 255,},
{196, 236, 255, 232, 234, 255, 252, 255, 255, 255,},
{197, 237, 255, 233, 235, 255, 252, 255, 255, 255,},
{198, 237, 255, 234, 235, 255, 253, 255, 255, 255,},
{199, 238, 255, 234, 236, 255, 253, 255, 255, 255,},
{200, 238, 255, 235, 236, 255, 253, 255, 255, 255,},
{201, 239, 255, 235, 237, 255, 253, 255, 255, 255,},
{202, 239, 255, 236, 237, 255, 253, 255, 255, 255,},
{203, 240, 255, 237, 238, 255, 253, 255, 255, 255,},
{204, 240, 255, 237, 238, 255, 254, 255, 255, 255,},
{205, 241, 255, 238, 239, 255, 254, 255, 255, 255,},
{206, 241, 255, 238, 239, 255, 254, 255, 255, 255,},
{207, 242, 255, 239, 240, 255, 254, 255, 255, 255,},
{208, 242, 255, 239, 240, 255, 254, 255, 255, 255,},
{209, 243, 255, 240, 241, 255, 254, 255, 255, 255,},
{210, 243, 255, 240, 241, 255, 254, 255, 255, 255,},
{211, 244, 255, 241, 242, 255, 254, 255, 255, 255,},
{212, 244, 255, 241, 242, 255, 254, 255, 255, 255,},
{213, 245, 255, 242, 243, 255, 255, 255, 255, 255,},
{214, 245, 255, 242, 243, 255, 255, 255, 255, 255,},
{215, 246, 255, 243, 244, 255, 255, 255, 255, 255,},
{216, 246, 255, 243, 244, 255, 255, 255, 255, 255,},
{217, 246, 255, 244, 244, 255, 255, 255, 255, 255,},
{218, 247, 255, 244, 245, 255, 255, 255, 255, 255,},
{219, 247, 255, 245, 245, 255, 255, 255, 255, 255,},
{220, 248, 255, 245, 246, 255, 255, 255, 255, 255,},
{221, 248, 255, 246, 246, 255, 255, 255, 255, 255,},
{222, 248, 255, 246, 247, 255, 255, 255, 255, 255,},
{223, 249, 255, 247, 247, 255, 255, 255, 255, 255,},
{224, 249, 255, 247, 247, 255, 255, 255, 255, 255,},
{225, 250, 255, 247, 248, 255, 255, 255, 255, 255,},
{226, 250, 255, 248, 248, 255, 255, 255, 255, 255,},
{227, 250, 255, 248, 249, 255, 255, 255, 255, 255,},
{228, 251, 255, 249, 249, 255, 255, 255, 255, 255,},
{229, 251, 255, 249, 249, 255, 255, 255, 255, 255,},
{230, 251, 255, 249, 250, 255, 255, 255, 255, 255,},
{231, 251, 255, 250, 250, 255, 255, 255, 255, 255,},
{232, 252, 255, 250, 250, 255, 255, 255, 255, 255,},
{233, 252, 255, 251, 251, 255, 255, 255, 255, 255,},
{234, 252, 255, 251, 251, 255, 255, 255, 255, 255,},
{235, 253, 255, 251, 251, 255, 255, 255, 255, 255,},
{236, 253, 255, 252, 252, 255, 255, 255, 255, 255,},
{237, 253, 255, 252, 252, 255, 255, 255, 255, 255,},
{238, 253, 255, 252, 252, 255, 255, 255, 255, 255,},
{239, 254, 255, 253, 253, 255, 255, 255, 255, 255,},
{240, 254, 255, 253, 253, 255, 255, 255, 255, 255,},
{241, 254, 255, 253, 253, 255, 255, 255, 255, 255,},
{242, 254, 255, 253, 254, 255, 255, 255, 255, 255,},
{243, 254, 255, 254, 254, 255, 255, 255, 255, 255,},
{244, 255, 255, 254, 254, 255, 255, 255, 255, 255,},
{245, 255, 255, 254, 254, 255, 255, 255, 255, 255,},
{246, 255, 255, 254, 254, 255, 255, 255, 255, 255,},
{247, 255, 255, 255, 255, 255, 255, 255, 255, 255,},
{248, 255, 255, 255, 255, 255, 255, 255, 255, 255,},
{249, 255, 255, 255, 255, 255, 255, 255, 255, 255,},
{250, 255, 255, 255, 255, 255, 255, 255, 255, 255,},
{251, 255, 255, 255, 255, 255, 255, 255, 255, 255,},
{252, 255, 255, 255, 255, 255, 255, 255, 255, 255,},
{253, 255, 255, 255, 255, 255, 255, 255, 255, 255,},
{254, 255, 255, 255, 255, 255, 255, 255, 255, 255,},
{255, 255, 255, 255, 255, 255, 255, 255, 255, 255,},
};
const vp9_prob vp9_modelcoefprobs_gg75[COEFPROB_MODELS][ENTROPY_NODES - 1] = {
// Probs generated with a Generalized Gaussian (with shape parameter 0.75)
// source model with varying quantizer step size for a uniform quantizer
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, // do not use
{1, 2, 6, 87, 129, 11, 88, 39, 93, 47,},
{2, 4, 11, 88, 130, 21, 89, 68, 98, 79,},
{3, 6, 16, 89, 131, 30, 91, 92, 103, 105,},
{4, 8, 21, 90, 131, 38, 92, 112, 107, 126,},
{5, 10, 26, 90, 132, 46, 94, 129, 111, 143,},
{6, 11, 31, 91, 133, 54, 95, 143, 115, 157,},
{7, 13, 35, 92, 133, 61, 96, 156, 119, 170,},
{8, 15, 40, 93, 134, 68, 97, 167, 123, 180,},
{9, 17, 44, 94, 134, 74, 98, 177, 126, 189,},
{10, 19, 48, 94, 135, 80, 100, 185, 130, 197,},
{11, 20, 52, 95, 135, 86, 101, 192, 133, 204,},
{12, 22, 56, 96, 136, 92, 102, 199, 137, 210,},
{13, 24, 60, 96, 136, 97, 103, 205, 140, 215,},
{14, 26, 64, 97, 137, 103, 104, 210, 143, 219,},
{15, 27, 68, 98, 137, 108, 105, 215, 146, 223,},
{16, 29, 71, 98, 138, 112, 106, 219, 149, 227,},
{17, 31, 75, 99, 138, 117, 107, 223, 152, 230,},
{18, 32, 78, 100, 139, 121, 108, 226, 155, 233,},
{19, 34, 82, 100, 139, 126, 109, 229, 158, 235,},
{20, 36, 85, 101, 140, 130, 110, 231, 161, 238,},
{21, 37, 88, 102, 140, 134, 111, 234, 164, 239,},
{22, 39, 91, 102, 141, 138, 112, 236, 167, 241,},
{23, 40, 94, 103, 141, 141, 113, 238, 169, 243,},
{24, 42, 97, 104, 142, 145, 114, 240, 172, 244,},
{25, 44, 100, 104, 142, 149, 115, 241, 174, 245,},
{26, 45, 103, 105, 143, 152, 116, 243, 177, 246,},
{27, 47, 106, 105, 143, 155, 117, 244, 179, 247,},
{28, 48, 109, 106, 143, 158, 118, 245, 182, 248,},
{29, 50, 112, 107, 144, 161, 119, 246, 184, 249,},
{30, 52, 115, 107, 144, 164, 120, 247, 186, 250,},
{31, 53, 117, 108, 145, 167, 121, 248, 188, 250,},
{32, 55, 120, 109, 145, 170, 122, 249, 190, 251,},
{33, 56, 122, 109, 146, 173, 123, 249, 192, 252,},
{34, 58, 125, 110, 146, 175, 124, 250, 194, 252,},
{35, 59, 127, 110, 147, 178, 125, 251, 196, 252,},
{36, 61, 130, 111, 147, 180, 126, 251, 198, 253,},
{37, 62, 132, 112, 147, 183, 127, 251, 200, 253,},
{38, 64, 135, 112, 148, 185, 128, 252, 202, 253,},
{39, 65, 137, 113, 148, 187, 129, 252, 204, 254,},
{40, 67, 139, 114, 149, 189, 130, 253, 205, 254,},
{41, 68, 141, 114, 149, 191, 131, 253, 207, 254,},
{42, 70, 144, 115, 150, 193, 132, 253, 209, 254,},
{43, 71, 146, 115, 150, 195, 133, 254, 210, 254,},
{44, 72, 148, 116, 151, 197, 134, 254, 212, 255,},
{45, 74, 150, 117, 151, 199, 135, 254, 213, 255,},
{46, 75, 152, 117, 151, 201, 136, 254, 215, 255,},
{47, 77, 154, 118, 152, 202, 137, 254, 216, 255,},
{48, 78, 156, 119, 152, 204, 138, 254, 217, 255,},
{49, 80, 158, 119, 153, 206, 139, 255, 219, 255,},
{50, 81, 160, 120, 153, 207, 140, 255, 220, 255,},
{51, 82, 162, 120, 154, 209, 141, 255, 221, 255,},
{52, 84, 164, 121, 154, 210, 142, 255, 222, 255,},
{53, 85, 165, 122, 155, 212, 143, 255, 224, 255,},
{54, 87, 167, 122, 155, 213, 144, 255, 225, 255,},
{55, 88, 169, 123, 155, 215, 145, 255, 226, 255,},
{56, 89, 171, 124, 156, 216, 146, 255, 227, 255,},
{57, 91, 172, 124, 156, 217, 146, 255, 228, 255,},
{58, 92, 174, 125, 157, 218, 147, 255, 229, 255,},
{59, 93, 176, 126, 157, 220, 148, 255, 230, 255,},
{60, 95, 177, 126, 158, 221, 149, 255, 231, 255,},
{61, 96, 179, 127, 158, 222, 150, 255, 232, 255,},
{62, 97, 180, 127, 159, 223, 151, 255, 232, 255,},
{63, 99, 182, 128, 159, 224, 152, 255, 233, 255,},
{64, 100, 183, 129, 159, 225, 153, 255, 234, 255,},
{65, 101, 185, 129, 160, 226, 154, 255, 235, 255,},
{66, 103, 186, 130, 160, 227, 155, 255, 236, 255,},
{67, 104, 188, 131, 161, 228, 156, 255, 236, 255,},
{68, 105, 189, 131, 161, 229, 157, 255, 237, 255,},
{69, 106, 190, 132, 162, 230, 158, 255, 238, 255,},
{70, 108, 192, 133, 162, 231, 159, 255, 238, 255,},
{71, 109, 193, 133, 162, 231, 159, 255, 239, 255,},
{72, 110, 194, 134, 163, 232, 160, 255, 240, 255,},
{73, 111, 196, 134, 163, 233, 161, 255, 240, 255,},
{74, 113, 197, 135, 164, 234, 162, 255, 241, 255,},
{75, 114, 198, 136, 164, 235, 163, 255, 241, 255,},
{76, 115, 199, 136, 165, 235, 164, 255, 242, 255,},
{77, 116, 200, 137, 165, 236, 165, 255, 243, 255,},
{78, 118, 202, 138, 166, 237, 166, 255, 243, 255,},
{79, 119, 203, 138, 166, 237, 167, 255, 244, 255,},
{80, 120, 204, 139, 167, 238, 168, 255, 244, 255,},
{81, 121, 205, 140, 167, 239, 168, 255, 244, 255,},
{82, 123, 206, 140, 167, 239, 169, 255, 245, 255,},
{83, 124, 207, 141, 168, 240, 170, 255, 245, 255,},
{84, 125, 208, 142, 168, 240, 171, 255, 246, 255,},
{85, 126, 209, 142, 169, 241, 172, 255, 246, 255,},
{86, 127, 210, 143, 169, 241, 173, 255, 247, 255,},
{87, 129, 211, 144, 170, 242, 174, 255, 247, 255,},
{88, 130, 212, 144, 170, 242, 175, 255, 247, 255,},
{89, 131, 213, 145, 171, 243, 175, 255, 248, 255,},
{90, 132, 214, 146, 171, 243, 176, 255, 248, 255,},
{91, 133, 215, 146, 171, 244, 177, 255, 248, 255,},
{92, 134, 216, 147, 172, 244, 178, 255, 249, 255,},
{93, 136, 217, 148, 172, 245, 179, 255, 249, 255,},
{94, 137, 218, 148, 173, 245, 180, 255, 249, 255,},
{95, 138, 219, 149, 173, 245, 181, 255, 249, 255,},
{96, 139, 220, 150, 174, 246, 181, 255, 250, 255,},
{97, 140, 220, 150, 174, 246, 182, 255, 250, 255,},
{98, 141, 221, 151, 175, 247, 183, 255, 250, 255,},
{99, 142, 222, 152, 175, 247, 184, 255, 250, 255,},
{100, 144, 223, 152, 176, 247, 185, 255, 251, 255,},
{101, 145, 224, 153, 176, 248, 186, 255, 251, 255,},
{102, 146, 224, 154, 177, 248, 186, 255, 251, 255,},
{103, 147, 225, 154, 177, 248, 187, 255, 251, 255,},
{104, 148, 226, 155, 177, 248, 188, 255, 252, 255,},
{105, 149, 226, 156, 178, 249, 189, 255, 252, 255,},
{106, 150, 227, 156, 178, 249, 190, 255, 252, 255,},
{107, 151, 228, 157, 179, 249, 191, 255, 252, 255,},
{108, 152, 229, 158, 179, 250, 191, 255, 252, 255,},
{109, 153, 229, 158, 180, 250, 192, 255, 252, 255,},
{110, 154, 230, 159, 180, 250, 193, 255, 253, 255,},
{111, 155, 231, 160, 181, 250, 194, 255, 253, 255,},
{112, 157, 231, 160, 181, 251, 195, 255, 253, 255,},
{113, 158, 232, 161, 182, 251, 195, 255, 253, 255,},
{114, 159, 232, 162, 182, 251, 196, 255, 253, 255,},
{115, 160, 233, 162, 183, 251, 197, 255, 253, 255,},
{116, 161, 234, 163, 183, 251, 198, 255, 253, 255,},
{117, 162, 234, 164, 184, 252, 198, 255, 254, 255,},
{118, 163, 235, 165, 184, 252, 199, 255, 254, 255,},
{119, 164, 235, 165, 185, 252, 200, 255, 254, 255,},
{120, 165, 236, 166, 185, 252, 201, 255, 254, 255,},
{121, 166, 236, 167, 186, 252, 201, 255, 254, 255,},
{122, 167, 237, 167, 186, 252, 202, 255, 254, 255,},
{123, 168, 237, 168, 186, 253, 203, 255, 254, 255,},
{124, 169, 238, 169, 187, 253, 204, 255, 254, 255,},
{125, 170, 238, 169, 187, 253, 204, 255, 254, 255,},
{126, 171, 239, 170, 188, 253, 205, 255, 254, 255,},
{127, 172, 239, 171, 188, 253, 206, 255, 254, 255,},
{128, 173, 240, 171, 189, 253, 207, 255, 255, 255,},
{129, 174, 240, 172, 189, 253, 207, 255, 255, 255,},
{130, 175, 241, 173, 190, 253, 208, 255, 255, 255,},
{131, 176, 241, 174, 190, 254, 209, 255, 255, 255,},
{132, 177, 241, 174, 191, 254, 209, 255, 255, 255,},
{133, 178, 242, 175, 191, 254, 210, 255, 255, 255,},
{134, 179, 242, 176, 192, 254, 211, 255, 255, 255,},
{135, 180, 243, 176, 192, 254, 212, 255, 255, 255,},
{136, 180, 243, 177, 193, 254, 212, 255, 255, 255,},
{137, 181, 243, 178, 193, 254, 213, 255, 255, 255,},
{138, 182, 244, 179, 194, 254, 214, 255, 255, 255,},
{139, 183, 244, 179, 194, 254, 214, 255, 255, 255,},
{140, 184, 244, 180, 195, 254, 215, 255, 255, 255,},
{141, 185, 245, 181, 195, 254, 216, 255, 255, 255,},
{142, 186, 245, 181, 196, 255, 216, 255, 255, 255,},
{143, 187, 245, 182, 196, 255, 217, 255, 255, 255,},
{144, 188, 246, 183, 197, 255, 218, 255, 255, 255,},
{145, 189, 246, 183, 197, 255, 218, 255, 255, 255,},
{146, 190, 246, 184, 198, 255, 219, 255, 255, 255,},
{147, 191, 247, 185, 198, 255, 220, 255, 255, 255,},
{148, 191, 247, 186, 199, 255, 220, 255, 255, 255,},
{149, 192, 247, 186, 199, 255, 221, 255, 255, 255,},
{150, 193, 248, 187, 200, 255, 221, 255, 255, 255,},
{151, 194, 248, 188, 200, 255, 222, 255, 255, 255,},
{152, 195, 248, 188, 201, 255, 223, 255, 255, 255,},
{153, 196, 248, 189, 201, 255, 223, 255, 255, 255,},
{154, 197, 249, 190, 202, 255, 224, 255, 255, 255,},
{155, 198, 249, 191, 202, 255, 224, 255, 255, 255,},
{156, 198, 249, 191, 203, 255, 225, 255, 255, 255,},
{157, 199, 249, 192, 203, 255, 226, 255, 255, 255,},
{158, 200, 250, 193, 204, 255, 226, 255, 255, 255,},
{159, 201, 250, 193, 204, 255, 227, 255, 255, 255,},
{160, 202, 250, 194, 205, 255, 227, 255, 255, 255,},
{161, 203, 250, 195, 206, 255, 228, 255, 255, 255,},
{162, 203, 250, 196, 206, 255, 228, 255, 255, 255,},
{163, 204, 251, 196, 207, 255, 229, 255, 255, 255,},
{164, 205, 251, 197, 207, 255, 229, 255, 255, 255,},
{165, 206, 251, 198, 208, 255, 230, 255, 255, 255,},
{166, 207, 251, 198, 208, 255, 231, 255, 255, 255,},
{167, 207, 251, 199, 209, 255, 231, 255, 255, 255,},
{168, 208, 252, 200, 209, 255, 232, 255, 255, 255,},
{169, 209, 252, 201, 210, 255, 232, 255, 255, 255,},
{170, 210, 252, 201, 210, 255, 233, 255, 255, 255,},
{171, 211, 252, 202, 211, 255, 233, 255, 255, 255,},
{172, 211, 252, 203, 211, 255, 234, 255, 255, 255,},
{173, 212, 252, 203, 212, 255, 234, 255, 255, 255,},
{174, 213, 252, 204, 212, 255, 235, 255, 255, 255,},
{175, 214, 253, 205, 213, 255, 235, 255, 255, 255,},
{176, 214, 253, 206, 213, 255, 236, 255, 255, 255,},
{177, 215, 253, 206, 214, 255, 236, 255, 255, 255,},
{178, 216, 253, 207, 214, 255, 237, 255, 255, 255,},
{179, 217, 253, 208, 215, 255, 237, 255, 255, 255,},
{180, 217, 253, 208, 216, 255, 237, 255, 255, 255,},
{181, 218, 253, 209, 216, 255, 238, 255, 255, 255,},
{182, 219, 254, 210, 217, 255, 238, 255, 255, 255,},
{183, 220, 254, 211, 217, 255, 239, 255, 255, 255,},
{184, 220, 254, 211, 218, 255, 239, 255, 255, 255,},
{185, 221, 254, 212, 218, 255, 240, 255, 255, 255,},
{186, 222, 254, 213, 219, 255, 240, 255, 255, 255,},
{187, 222, 254, 213, 219, 255, 241, 255, 255, 255,},
{188, 223, 254, 214, 220, 255, 241, 255, 255, 255,},
{189, 224, 254, 215, 220, 255, 241, 255, 255, 255,},
{190, 225, 254, 215, 221, 255, 242, 255, 255, 255,},
{191, 225, 254, 216, 221, 255, 242, 255, 255, 255,},
{192, 226, 254, 217, 222, 255, 243, 255, 255, 255,},
{193, 227, 255, 218, 223, 255, 243, 255, 255, 255,},
{194, 227, 255, 218, 223, 255, 243, 255, 255, 255,},
{195, 228, 255, 219, 224, 255, 244, 255, 255, 255,},
{196, 229, 255, 220, 224, 255, 244, 255, 255, 255,},
{197, 229, 255, 220, 225, 255, 244, 255, 255, 255,},
{198, 230, 255, 221, 225, 255, 245, 255, 255, 255,},
{199, 230, 255, 222, 226, 255, 245, 255, 255, 255,},
{200, 231, 255, 222, 226, 255, 246, 255, 255, 255,},
{201, 232, 255, 223, 227, 255, 246, 255, 255, 255,},