www.pudn.com > av3dec_20050318.zip > sam_decode_cbc.c


/* 
*********************************************************************** 
* COPYRIGHT AND WARRANTY INFORMATION 
* 
* Copyright 2004,  Audio Video Coding Standard, Part III 
* 
* This software module was originally developed by 
* 
* JungHoe Kim (kjh94@samsung.com), Samsung AIT 
* 
* edited by 
* 
* Lei Miao (win.miaolei@samsung.com), Samsung AIT 
* 
* DISCLAIMER OF WARRANTY 
* 
* These software programs are available to the users without any 
* license fee or royalty on an "as is" basis. The AVS disclaims 
* any and all warranties, whether express, implied, or statutory, 
* including any implied warranties of merchantability or of fitness 
* for a particular purpose. In no event shall the contributors or  
* the AVS be liable for any incidental, punitive, or consequential 
* damages of any kind whatsoever arising from the use of this program. 
* 
* This disclaimer of warranty extends to the user of this program 
* and user's customers, employees, agents, transferees, successors, 
* and assigns. 
* 
* The AVS does not represent or warrant that the program furnished 
* hereunder are free of infringement of any third-party patents. 
* Commercial implementations of AVS, including shareware, may be 
* subject to royalty fees to patent holders. Information regarding 
* the AVS patent policy is available from the AVS Web site at 
* http://www.avs.org.cn 
* 
* THIS IS NOT A GRANT OF PATENT RIGHTS - SEE THE AVS PATENT POLICY. 
************************************************************************ 
*/ 
 
#include  
#include "sam_cbc_dec.h" 
 
#define	TOP_LAYER			48 
 
static double fs_tbl[9] = { 
	48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000 
}; 
 
static int	sampling_rate; 
 
unsigned int codeBook[36][16][16] = { 
	{{5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 0, 5, 30, 6, 16, 29, 56, 1, 62, 17, 255, 9, 126, 57, 254}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{7, 0, 12, 7, 11, 27, 6, 21, 1, 4, 5, 19, 8, 20, 26, 18}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 0, 6, 5, 7, 28, 4, 62, 2, 60, 29, 247, 6, 122, 63, 246}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 7, 2, 9, 3, 21, 27, 17, 0, 24, 25, 16, 11, 53, 20, 52}, {2, 13, 1, 3, 12, 9, 15, 59, 28, 17, 0, 117, 5, 16, 1, 116}, {5, 7, 25, 1, 3, 4, 9, 0, 2, 3, 17, 16, 13, 5, 49, 48}, {1, 1, 15, 0, 5, 8, 9, 25, 1, 53, 52, 110, 14, 54, 24, 111}, {6, 2, 3, 10, 11, 12, 10, 14, 7, 4, 4, 11, 1, 13, 0, 15}, {1, 18, 1, 12, 52, 5, 27, 19, 5, 0, 7, 8, 53, 4, 1, 3}, {6, 2, 1, 0, 7, 20, 21, 57, 4, 1, 6, 31, 11, 30, 29, 56}, {0, 14, 4, 4, 5, 12, 13, 121, 6, 7, 11, 20, 31, 61, 21, 120}, {2, 28, 12, 15, 0, 4, 15, 5, 13, 57, 29, 56, 6, 116, 59, 117}, {2, 12, 7, 3, 6, 7, 2, 2, 6, 20, 13, 4, 0, 21, 7, 11}, {14, 15, 24, 55, 0, 1, 11, 8, 54, 52, 107, 106, 10, 9, 51, 50}, {4, 3, 0, 5, 3, 7, 2, 11, 13, 48, 99, 98, 10, 4, 1, 25}, {1, 3, 6, 15, 11, 58, 10, 17, 0, 4, 9, 5, 28, 119, 16, 118}, {4, 13, 3, 10, 7, 185, 0, 2, 3, 24, 2, 47, 93, 184, 22, 25}, {0, 6, 9, 31, 3, 11, 4, 28, 10, 5, 59, 33, 30, 17, 58, 32}, {2, 2, 0, 3, 15, 28, 27, 15, 29, 13, 26, 29, 12, 12, 2, 28}}, 
	{{1, 7, 5, 2, 6, 17, 0, 37, 1, 16, 19, 36, 3, 7, 2, 6}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{14, 11, 5, 4, 7, 0, 2, 10, 13, 3, 1, 6, 9, 8, 12, 15}, {12, 250, 2, 124, 13, 120, 5, 126, 14, 251, 4, 127, 3, 121, 0, 61}, {12, 0, 228, 112, 15, 5, 113, 119, 13, 1, 229, 118, 4, 1, 115, 58}, {1, 2, 0, 12, 7, 15, 14, 7, 6, 11, 10, 13, 2, 6, 4, 1}, {10, 11, 15, 4, 228, 229, 112, 118, 0, 1, 6, 1, 113, 115, 119, 58}, {9, 17, 0, 17, 16, 128, 11, 129, 5, 9, 3, 6, 10, 65, 7, 33}, {9, 0, 21, 16, 20, 9, 34, 35, 5, 3, 35, 7, 11, 6, 16, 34}, {5, 15, 6, 2, 14, 65, 6, 64, 3, 1, 2, 17, 9, 33, 0, 7}, {12, 14, 13, 3, 2, 4, 5, 0, 253, 252, 120, 121, 125, 124, 127, 61}, {2, 72, 5, 38, 0, 39, 3, 7, 26, 294, 12, 146, 37, 295, 8, 27}, {9, 5, 18, 11, 0, 3, 10, 6, 19, 8, 122, 123, 14, 8, 60, 31}, {0, 19, 15, 55, 3, 2, 11, 18, 17, 24, 25, 54, 10, 14, 16, 26}, {1, 6, 7, 2, 30, 2, 14, 4, 3, 10, 0, 6, 46, 47, 22, 31}, {5, 62, 0, 9, 17, 100, 13, 63, 30, 203, 14, 51, 33, 202, 24, 32}, {5, 3, 15, 9, 17, 2, 33, 13, 0, 1, 65, 12, 29, 1, 64, 28}, {3, 0, 1, 23, 2, 18, 7, 16, 10, 12, 17, 27, 22, 26, 39, 38}}, 
	{{1, 1, 7, 26, 0, 98, 25, 199, 2, 396, 97, 794, 27, 1590, 96, 1591}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 1, 1, 1, 6, 61, 31, 1, 2, 0, 60, 6, 14, 15, 2, 14}, {0, 6, 2, 14, 61, 248, 63, 120, 251, 974, 250, 975, 242, 972, 249, 973}, {2, 0, 7, 5, 7, 12, 27, 9, 13, 24, 101, 100, 26, 8, 103, 102}, {0, 6, 5, 15, 8, 19, 28, 36, 119, 237, 232, 467, 37, 236, 117, 466}, {2, 9, 7, 13, 7, 51, 25, 24, 0, 48, 13, 49, 5, 100, 8, 101}, {6, 6, 2, 14, 2, 6, 2, 15, 31, 14, 0, 31, 61, 30, 14, 60}, {2, 2, 15, 14, 12, 6, 14, 27, 1, 26, 3, 30, 0, 62, 2, 63}, {1, 1, 5, 0, 15, 51, 14, 18, 13, 50, 24, 17, 39, 77, 16, 76}, {0, 48, 25, 98, 7, 110, 26, 109, 5, 435, 99, 432, 4, 434, 111, 433}, {5, 8, 0, 8, 3, 19, 7, 18, 25, 19, 18, 53, 24, 27, 5, 52}, {6, 5, 0, 57, 2, 15, 4, 13, 7, 56, 59, 116, 1, 12, 1, 117}, {7, 21, 20, 23, 6, 3, 3, 22, 17, 16, 19, 18, 2, 5, 0, 4}, {3, 82, 1, 2, 4, 163, 0, 167, 1, 166, 21, 80, 11, 324, 3, 325}, {4, 1, 3, 2, 0, 11, 3, 2, 29, 28, 31, 10, 13, 30, 25, 24}, {0, 10, 2, 44, 4, 23, 3, 90, 15, 28, 13, 182, 12, 59, 58, 183}, {1, 0, 2, 7, 4, 6, 11, 29, 28, 31, 30, 25, 10, 24, 27, 26}}, 
	{{1, 6, 1, 10, 2, 0, 6, 17, 7, 23, 1, 16, 9, 14, 22, 15}, {1, 1, 6, 11, 9, 17, 14, 31, 30, 32, 0, 40, 21, 33, 1, 41}, {4, 2, 1, 29, 15, 1, 0, 28, 12, 7, 13, 21, 11, 13, 12, 20}, {5, 14, 9, 3, 3, 12, 8, 2, 5, 26, 30, 8, 0, 27, 31, 9}, {4, 11, 0, 12, 2, 9, 28, 10, 3, 10, 15, 13, 3, 8, 29, 11}, {4, 6, 5, 2, 0, 3, 3, 9, 15, 29, 6, 5, 28, 2, 7, 8}, {0, 2, 10, 11, 30, 6, 62, 25, 1, 4, 28, 7, 29, 13, 63, 24}, {3, 10, 15, 28, 4, 26, 1, 59, 4, 11, 1, 0, 12, 27, 5, 58}, {0, 17, 13, 24, 5, 6, 15, 7, 14, 32, 4, 33, 9, 50, 5, 51}, {12, 30, 4, 6, 2, 29, 0, 11, 31, 86, 7, 87, 28, 20, 13, 42}, {0, 3, 2, 31, 6, 5, 28, 5, 3, 30, 19, 59, 4, 8, 58, 18}, {5, 5, 12, 27, 0, 14, 9, 4, 7, 13, 16, 35, 15, 34, 26, 12}, {5, 5, 3, 15, 12, 19, 8, 28, 0, 9, 13, 29, 3, 8, 2, 18}, {3, 8, 5, 9, 15, 25, 14, 24, 13, 8, 1, 9, 0, 2, 5, 3}, {3, 6, 4, 10, 14, 15, 0, 3, 9, 11, 2, 17, 5, 2, 16, 3}, {7, 3, 1, 11, 9, 0, 5, 1, 13, 17, 25, 49, 4, 16, 10, 48}}, 
	{{1, 0, 5, 30, 6, 63, 29, 33, 1, 62, 17, 115, 9, 32, 56, 114}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{3, 0, 9, 23, 10, 16, 22, 13, 2, 17, 15, 4, 3, 5, 14, 12}, {1, 0, 5, 18, 13, 38, 1, 39, 12, 5, 14, 6, 8, 4, 15, 7}, {5, 4, 60, 63, 2, 3, 62, 24, 13, 14, 102, 103, 0, 1, 50, 61}, {6, 5, 31, 58, 5, 4, 28, 59, 3, 18, 17, 33, 0, 19, 30, 32}, {4, 11, 2, 14, 0, 4, 1, 5, 6, 15, 3, 1, 3, 43, 20, 42}, {3, 25, 7, 26, 19, 47, 8, 22, 5, 10, 0, 4, 24, 46, 27, 18}, {4, 5, 9, 6, 3, 15, 16, 17, 6, 7, 1, 5, 2, 0, 28, 29}, {7, 2, 13, 8, 22, 36, 37, 13, 1, 10, 0, 23, 12, 19, 7, 12}, {1, 10, 9, 3, 7, 11, 0, 13, 2, 34, 33, 32, 25, 49, 35, 48}, {4, 20, 7, 3, 6, 2, 1, 0, 22, 93, 21, 92, 3, 95, 2, 94}, {4, 5, 8, 15, 6, 0, 14, 6, 11, 31, 20, 43, 30, 14, 42, 9}, {6, 30, 3, 12, 2, 0, 2, 15, 2, 63, 53, 52, 14, 14, 27, 62}, {7, 2, 6, 4, 23, 7, 2, 1, 10, 0, 7, 22, 6, 26, 12, 27}, {7, 24, 2, 7, 2, 25, 0, 13, 3, 204, 13, 103, 24, 205, 2, 50}, {5, 1, 30, 25, 0, 1, 16, 24, 9, 14, 107, 17, 27, 31, 106, 52}, {3, 3, 8, 22, 10, 18, 4, 3, 0, 46, 39, 38, 2, 11, 10, 47}}, 
	{{20, 1, 0, 7, 21, 2, 5, 12, 3, 6, 4, 13, 11, 14, 15, 4}, {8, 58, 15, 13, 9, 59, 2, 23, 10, 12, 1, 28, 0, 22, 6, 7}, {2, 11, 54, 7, 10, 3, 6, 26, 9, 0, 55, 24, 2, 7, 25, 8}, {10, 24, 15, 50, 4, 6, 4, 14, 1, 5, 1, 51, 7, 13, 11, 0}, {1, 9, 10, 2, 54, 55, 1, 26, 12, 1, 3, 7, 0, 22, 23, 8}, {10, 17, 2, 31, 22, 56, 30, 57, 3, 9, 0, 13, 29, 16, 12, 23}, {9, 3, 21, 0, 26, 8, 6, 7, 2, 7, 1, 11, 2, 12, 20, 27}, {2, 6, 7, 24, 3, 5, 21, 4, 7, 13, 0, 8, 11, 25, 9, 20}, {6, 10, 7, 0, 14, 1, 2, 6, 62, 63, 18, 22, 19, 23, 30, 8}, {12, 20, 4, 29, 2, 31, 0, 11, 15, 56, 6, 57, 30, 14, 13, 21}, {12, 3, 10, 0, 4, 7, 2, 10, 22, 4, 2, 11, 3, 13, 3, 23}, {3, 9, 5, 21, 7, 11, 13, 8, 3, 20, 24, 8, 0, 25, 2, 9}, {11, 2, 3, 7, 21, 0, 2, 9, 26, 3, 8, 12, 2, 3, 20, 27}, {2, 7, 7, 11, 8, 24, 13, 25, 6, 20, 0, 3, 21, 18, 2, 19}, {15, 0, 6, 12, 9, 14, 17, 23, 4, 13, 21, 5, 22, 7, 16, 20}, {0, 11, 15, 6, 14, 7, 10, 27, 12, 26, 4, 17, 5, 18, 19, 16}}, 
	{{1, 1, 7, 53, 0, 208, 27, 423, 2, 845, 209, 3378, 12, 1688, 210, 3379}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 2, 1, 6, 2, 5, 1, 1, 3, 8, 0, 18, 7, 38, 3, 39}, {1, 3, 0, 5, 19, 144, 8, 73, 150, 581, 148, 580, 303, 302, 149, 291}, {3, 4, 2, 6, 0, 21, 11, 40, 41, 250, 30, 249, 14, 251, 63, 248}, {0, 7, 4, 12, 13, 45, 23, 21, 41, 161, 179, 160, 88, 178, 163, 162}, {2, 8, 6, 9, 3, 244, 5, 123, 0, 981, 31, 491, 14, 1960, 60, 1961}, {7, 52, 2, 0, 1, 107, 1, 27, 106, 49, 48, 51, 50, 5, 4, 3}, {2, 1, 6, 6, 2, 59, 0, 28, 15, 234, 15, 470, 1, 116, 14, 471}, {1, 19, 1, 13, 5, 12, 0, 18, 16, 35, 29, 34, 28, 61, 31, 60}, {0, 224, 58, 459, 2, 902, 59, 228, 6, 450, 113, 1807, 15, 1806, 115, 458}, {1, 8, 5, 19, 0, 18, 3, 29, 28, 31, 30, 25, 24, 27, 2, 26}, {1, 22, 37, 36, 7, 10, 47, 39, 0, 46, 38, 33, 6, 32, 35, 34}, {14, 31, 30, 9, 6, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2}, {3, 86, 7, 81, 5, 80, 6, 165, 0, 83, 4, 87, 4, 42, 11, 164}, {14, 31, 30, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 6, 2}, {7, 47, 0, 46, 4, 22, 10, 13, 6, 12, 15, 14, 1, 9, 5, 8}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 0, 4, 11, 6, 61, 31, 43, 1, 83, 60, 80, 14, 81, 42, 82}, {3, 1, 5, 0, 3, 19, 8, 2, 74, 300, 151, 146, 147, 602, 72, 603}, {1, 6, 4, 14, 15, 23, 3, 20, 2, 45, 2, 7, 0, 44, 21, 6}, {0, 15, 4, 4, 6, 3, 14, 10, 46, 45, 23, 44, 22, 21, 47, 20}, {1, 1, 15, 22, 1, 20, 0, 21, 6, 47, 8, 46, 14, 36, 19, 37}, {0, 5, 3, 4, 14, 30, 4, 62, 10, 11, 13, 49, 25, 126, 48, 127}, {5, 6, 4, 25, 0, 4, 13, 7, 14, 5, 2, 24, 31, 7, 6, 30}, {5, 0, 2, 6, 12, 7, 17, 6, 15, 4, 14, 9, 13, 5, 7, 16}, {2, 48, 7, 102, 7, 103, 6, 101, 0, 100, 27, 198, 2, 199, 26, 98}, {5, 4, 7, 0, 3, 2, 6, 17, 16, 19, 1, 18, 13, 7, 12, 5}, {0, 59, 2, 117, 6, 116, 15, 20, 3, 56, 43, 115, 4, 42, 11, 114}, {13, 22, 12, 15, 14, 47, 46, 1, 10, 13, 4, 12, 5, 4, 7, 0}, {0, 14, 15, 57, 4, 31, 11, 59, 6, 56, 10, 30, 2, 116, 6, 117}, {0, 12, 21, 3, 3, 20, 23, 7, 2, 22, 13, 17, 2, 16, 19, 18}, {5, 8, 13, 10, 3, 15, 28, 4, 2, 29, 25, 24, 0, 9, 3, 11}, {5, 4, 11, 10, 17, 13, 16, 19, 1, 12, 18, 29, 0, 28, 3, 15}}, 
	{{1, 7, 1, 11, 2, 0, 6, 18, 6, 17, 1, 14, 10, 16, 19, 15}, {4, 3, 7, 0, 12, 2, 2, 10, 13, 46, 26, 47, 27, 12, 7, 22}, {0, 1, 24, 25, 3, 15, 8, 5, 4, 10, 18, 19, 11, 13, 29, 28}, {2, 13, 0, 16, 3, 10, 1, 31, 12, 30, 22, 17, 1, 14, 9, 23}, {10, 9, 3, 14, 17, 16, 1, 4, 12, 13, 15, 1, 22, 23, 0, 5}, {15, 7, 2, 13, 13, 48, 2, 49, 0, 3, 5, 14, 8, 25, 9, 12}, {12, 1, 0, 10, 5, 8, 8, 28, 15, 3, 9, 13, 1, 11, 9, 29}, {3, 5, 12, 8, 0, 38, 9, 39, 5, 14, 1, 13, 15, 8, 1, 18}, {4, 21, 15, 5, 6, 1, 1, 6, 4, 56, 29, 20, 11, 57, 7, 0}, {14, 10, 6, 1, 15, 7, 5, 6, 8, 22, 4, 23, 9, 1, 1, 0}, {12, 3, 0, 15, 2, 1, 17, 11, 14, 13, 5, 16, 9, 10, 4, 3}, {2, 2, 9, 1, 5, 13, 7, 7, 6, 14, 0, 16, 12, 6, 17, 15}, {10, 12, 1, 3, 27, 5, 4, 8, 9, 0, 15, 14, 22, 23, 26, 1}, {0, 8, 7, 11, 3, 23, 6, 2, 9, 20, 10, 44, 4, 21, 3, 45}, {2, 4, 25, 11, 15, 0, 24, 14, 3, 13, 20, 5, 7, 6, 4, 21}, {7, 1, 2, 1, 4, 0, 12, 27, 11, 43, 26, 84, 7, 20, 6, 85}}, 
	{{1, 0, 7, 4, 6, 26, 14, 25, 2, 31, 27, 49, 5, 60, 61, 48}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 7, 5, 6, 4, 11, 4, 55, 0, 26, 24, 51, 7, 54, 10, 50}, {3, 0, 5, 2, 7, 19, 6, 8, 9, 33, 5, 18, 17, 65, 3, 64}, {1, 6, 30, 29, 5, 1, 3, 2, 9, 0, 115, 112, 31, 8, 113, 114}, {7, 0, 9, 22, 6, 10, 23, 17, 2, 4, 5, 12, 3, 16, 7, 13}, {1, 9, 5, 8, 29, 123, 28, 12, 6, 31, 0, 2, 7, 13, 60, 122}, {6, 23, 7, 10, 19, 33, 22, 18, 3, 10, 0, 11, 9, 32, 8, 17}, {7, 6, 17, 1, 5, 16, 17, 37, 3, 5, 0, 19, 1, 9, 36, 16}, {7, 15, 12, 6, 10, 55, 26, 108, 0, 5, 9, 11, 4, 109, 8, 14}, {3, 9, 6, 16, 5, 1, 7, 0, 1, 35, 34, 16, 5, 18, 19, 17}, {0, 27, 5, 24, 7, 26, 4, 14, 6, 19, 25, 8, 15, 36, 5, 37}, {5, 2, 7, 1, 6, 3, 9, 8, 14, 0, 62, 126, 30, 2, 6, 127}, {7, 13, 11, 97, 1, 2, 1, 7, 4, 96, 6, 0, 10, 25, 49, 1}, {2, 7, 2, 1, 13, 119, 0, 13, 15, 12, 12, 2, 28, 118, 58, 3}, {1, 3, 2, 14, 31, 97, 30, 0, 13, 1, 5, 25, 4, 96, 49, 1}, {0, 1, 9, 29, 15, 26, 25, 28, 24, 11, 43, 85, 8, 27, 84, 20}, {7, 12, 0, 3, 11, 26, 2, 9, 10, 7, 109, 108, 8, 6, 55, 2}}, 
	{{2, 0, 12, 31, 13, 15, 30, 14, 1, 29, 28, 12, 4, 10, 13, 11}, {7, 8, 2, 3, 13, 13, 0, 19, 10, 12, 12, 5, 7, 4, 11, 18}, {3, 2, 28, 29, 1, 15, 19, 25, 10, 13, 17, 16, 11, 0, 18, 24}, {5, 12, 4, 27, 3, 9, 8, 26, 15, 11, 29, 10, 0, 3, 2, 28}, {3, 9, 0, 13, 29, 16, 23, 20, 2, 12, 1, 15, 28, 17, 22, 21}, {15, 1, 3, 8, 0, 59, 5, 18, 1, 4, 5, 13, 28, 58, 12, 19}, {4, 5, 2, 12, 6, 30, 26, 7, 0, 2, 29, 31, 28, 7, 6, 27}, {4, 14, 3, 4, 7, 10, 2, 24, 5, 6, 15, 1, 13, 25, 0, 11}, {7, 12, 0, 5, 3, 11, 13, 9, 4, 16, 20, 6, 2, 17, 21, 7}, {5, 30, 2, 7, 4, 29, 1, 13, 31, 0, 6, 1, 1, 24, 28, 25}, {3, 15, 29, 28, 0, 4, 2, 5, 4, 13, 20, 6, 11, 12, 7, 21}, {2, 10, 8, 28, 6, 1, 1, 7, 11, 29, 0, 39, 15, 6, 18, 38}, {2, 14, 4, 1, 30, 31, 1, 0, 7, 6, 12, 10, 26, 22, 27, 23}, {3, 12, 4, 14, 5, 21, 15, 1, 11, 20, 1, 4, 27, 52, 0, 53}, {3, 5, 4, 8, 12, 14, 27, 0, 9, 15, 11, 1, 2, 3, 10, 26}, {7, 0, 1, 11, 6, 5, 10, 26, 9, 4, 8, 25, 7, 55, 24, 54}}, 
	{{30, 5, 31, 10, 0, 1, 7, 12, 4, 8, 6, 13, 9, 11, 14, 1}, {5, 22, 12, 27, 6, 26, 1, 31, 7, 23, 0, 4, 14, 30, 4, 10}, {0, 11, 12, 13, 10, 1, 25, 1, 13, 2, 24, 28, 15, 4, 29, 7}, {8, 2, 31, 14, 0, 9, 4, 30, 14, 6, 3, 15, 5, 13, 12, 5}, {0, 7, 11, 15, 12, 27, 26, 4, 12, 14, 1, 4, 13, 1, 5, 10}, {8, 2, 0, 5, 3, 14, 9, 30, 13, 6, 5, 14, 4, 15, 12, 31}, {13, 15, 29, 6, 28, 7, 16, 17, 0, 5, 3, 9, 4, 12, 2, 5}, {13, 5, 4, 31, 7, 30, 2, 22, 4, 12, 14, 3, 0, 6, 10, 23}, {4, 10, 9, 14, 12, 15, 0, 3, 16, 17, 27, 2, 26, 3, 5, 11}, {7, 19, 0, 5, 13, 3, 5, 12, 2, 18, 6, 31, 8, 30, 14, 4}, {10, 0, 29, 31, 1, 3, 4, 12, 30, 11, 18, 28, 8, 13, 19, 5}, {14, 5, 10, 31, 4, 13, 12, 11, 6, 30, 2, 8, 0, 3, 7, 9}, {10, 15, 2, 4, 0, 3, 2, 13, 29, 6, 7, 12, 22, 28, 23, 1}, {0, 7, 4, 13, 11, 2, 12, 4, 5, 21, 15, 6, 29, 20, 3, 28}, {15, 4, 6, 12, 11, 13, 2, 3, 7, 0, 21, 5, 28, 4, 20, 29}, {4, 11, 14, 7, 13, 6, 5, 25, 0, 3, 2, 30, 10, 31, 4, 24}}, 
	{{0, 10, 30, 23, 31, 27, 59, 17, 12, 58, 28, 19, 22, 18, 16, 26}, {11, 6, 14, 26, 0, 31, 2, 9, 2, 7, 12, 27, 10, 30, 3, 8}, {5, 12, 22, 26, 9, 14, 23, 0, 10, 1, 27, 1, 15, 3, 4, 8}, {6, 0, 31, 18, 13, 5, 1, 19, 14, 4, 7, 30, 5, 1, 12, 8}, {1, 14, 7, 15, 18, 27, 19, 3, 6, 2, 12, 5, 26, 2, 0, 8}, {12, 2, 0, 9, 31, 22, 3, 30, 14, 5, 3, 10, 8, 23, 13, 4}, {8, 14, 2, 4, 31, 10, 22, 30, 0, 3, 3, 12, 9, 13, 23, 5}, {12, 3, 6, 0, 7, 23, 1, 22, 2, 14, 15, 10, 13, 8, 9, 2}, {2, 31, 0, 11, 10, 7, 2, 4, 13, 12, 3, 30, 28, 29, 12, 13}, {10, 2, 14, 5, 15, 8, 3, 11, 3, 1, 9, 26, 4, 0, 12, 27}, {10, 14, 2, 5, 15, 3, 4, 12, 0, 9, 23, 1, 8, 13, 22, 3}, {14, 3, 10, 1, 2, 12, 13, 7, 9, 0, 2, 30, 11, 6, 8, 31}, {6, 14, 13, 5, 19, 4, 3, 12, 2, 5, 7, 0, 18, 30, 31, 8}, {15, 8, 2, 11, 10, 2, 14, 7, 6, 0, 13, 3, 1, 24, 9, 25}, {13, 2, 9, 14, 8, 12, 0, 7, 3, 11, 31, 2, 1, 10, 30, 6}, {1, 10, 14, 12, 11, 7, 8, 1, 13, 6, 5, 0, 9, 31, 4, 30}}, 
	{{1, 6, 1, 9, 2, 0, 6, 23, 7, 16, 1, 15, 10, 14, 22, 17}, {6, 1, 4, 10, 2, 31, 1, 7, 28, 0, 30, 1, 29, 12, 11, 13}, {2, 1, 0, 7, 15, 14, 1, 6, 9, 13, 20, 21, 8, 11, 24, 25}, {0, 8, 7, 28, 2, 10, 9, 29, 12, 2, 3, 26, 15, 11, 6, 27}, {2, 9, 0, 10, 25, 16, 6, 24, 1, 13, 14, 11, 30, 17, 7, 31}, {13, 3, 0, 10, 7, 24, 2, 30, 14, 8, 2, 11, 9, 25, 6, 31}, {15, 1, 6, 5, 7, 8, 25, 28, 0, 13, 4, 9, 10, 11, 24, 29}, {0, 9, 11, 29, 7, 28, 30, 2, 2, 12, 13, 8, 10, 3, 6, 31}, {5, 2, 14, 0, 3, 1, 15, 9, 13, 8, 3, 16, 12, 9, 5, 17}, {14, 8, 0, 3, 15, 7, 2, 11, 2, 20, 6, 21, 9, 26, 12, 27}, {11, 15, 6, 5, 0, 1, 4, 7, 10, 9, 24, 28, 8, 13, 25, 29}, {0, 5, 10, 4, 3, 11, 14, 3, 8, 30, 31, 25, 13, 2, 9, 24}, {15, 9, 14, 2, 6, 27, 8, 7, 10, 1, 12, 11, 2, 26, 3, 0}, {2, 6, 1, 8, 14, 7, 12, 0, 9, 20, 15, 27, 1, 26, 11, 21}, {0, 1, 7, 12, 8, 13, 4, 6, 10, 14, 23, 30, 5, 9, 22, 31}, {2, 10, 12, 1, 14, 8, 9, 6, 13, 3, 7, 0, 11, 31, 2, 30}}, 
	{{1, 7, 4, 12, 3, 22, 4, 10, 0, 11, 23, 53, 10, 52, 55, 54}, {1, 5, 7, 13, 8, 0, 9, 24, 1, 11, 6, 51, 4, 10, 7, 50}, {6, 4, 11, 7, 1, 14, 1, 30, 6, 31, 10, 21, 4, 0, 11, 20}, {6, 15, 1, 7, 2, 10, 8, 1, 6, 28, 22, 1, 9, 29, 23, 0}, {6, 6, 1, 4, 15, 15, 5, 14, 4, 1, 11, 28, 10, 58, 0, 59}, {1, 0, 4, 12, 10, 12, 5, 23, 14, 4, 13, 30, 7, 13, 31, 22}, {3, 15, 11, 0, 10, 5, 1, 24, 13, 14, 9, 8, 2, 3, 25, 4}, {5, 15, 1, 9, 12, 26, 0, 27, 14, 7, 8, 6, 4, 11, 1, 10}, {2, 30, 14, 11, 3, 26, 4, 10, 1, 55, 1, 62, 12, 54, 0, 63}, {3, 1, 15, 12, 14, 0, 2, 9, 2, 20, 3, 26, 8, 27, 11, 21}, {1, 11, 8, 4, 0, 14, 7, 9, 15, 5, 26, 20, 12, 6, 21, 27}, {3, 1, 12, 11, 4, 10, 14, 4, 11, 26, 27, 0, 15, 3, 2, 10}, {6, 10, 1, 7, 15, 9, 9, 29, 0, 12, 11, 28, 8, 8, 5, 13}, {1, 9, 2, 11, 14, 7, 10, 30, 12, 0, 13, 6, 31, 17, 1, 16}, {2, 14, 9, 12, 10, 13, 6, 3, 0, 7, 2, 30, 11, 31, 16, 17}, {6, 8, 14, 2, 2, 1, 7, 3, 9, 30, 0, 21, 11, 20, 6, 31}}, 
	{{1, 0, 6, 8, 5, 61, 28, 60, 1, 59, 62, 117, 9, 116, 127, 126}, {0, 4, 6, 11, 28, 63, 30, 62, 59, 80, 58, 81, 43, 83, 42, 82}, {1, 5, 14, 0, 4, 13, 30, 3, 3, 2, 24, 125, 2, 63, 25, 124}, {2, 3, 0, 30, 1, 4, 12, 29, 31, 52, 10, 57, 27, 11, 56, 53}, {2, 11, 0, 10, 3, 10, 4, 11, 7, 51, 3, 4, 13, 100, 24, 101}, {3, 14, 5, 8, 4, 31, 5, 27, 1, 26, 12, 19, 0, 18, 1, 30}, {0, 7, 9, 25, 15, 24, 11, 35, 5, 4, 14, 10, 13, 16, 6, 34}, {1, 6, 0, 10, 7, 27, 26, 30, 2, 8, 14, 31, 12, 23, 9, 22}, {0, 58, 19, 32, 6, 36, 28, 34, 5, 75, 59, 66, 15, 67, 35, 74}, {5, 61, 14, 2, 2, 9, 0, 12, 8, 7, 6, 31, 27, 60, 3, 26}, {3, 15, 10, 28, 1, 2, 13, 0, 11, 59, 19, 8, 12, 1, 18, 58}, {15, 11, 14, 4, 0, 10, 9, 3, 13, 6, 8, 14, 12, 15, 2, 5}, {2, 11, 12, 26, 3, 125, 30, 20, 0, 21, 4, 127, 14, 124, 27, 126}, {15, 4, 5, 6, 8, 13, 12, 1, 5, 19, 14, 18, 15, 14, 1, 0}, {4, 1, 13, 20, 2, 11, 7, 12, 15, 6, 28, 2, 0, 29, 3, 21}, {3, 0, 13, 1, 10, 28, 9, 12, 15, 11, 10, 9, 11, 8, 8, 29}}, 
	{{1, 0, 6, 4, 7, 53, 5, 55, 2, 51, 24, 105, 7, 104, 54, 50}, {0, 5, 7, 13, 19, 48, 25, 36, 16, 99, 35, 197, 34, 196, 75, 74}, {3, 3, 0, 9, 2, 10, 6, 16, 2, 44, 35, 15, 23, 45, 14, 34}, {3, 3, 5, 0, 2, 19, 7, 4, 5, 34, 35, 64, 18, 65, 6, 33}, {0, 58, 4, 59, 11, 112, 57, 83, 6, 113, 30, 82, 31, 80, 21, 81}, {1, 12, 0, 11, 15, 8, 27, 57, 19, 56, 26, 18, 21, 40, 41, 29}, {4, 14, 10, 15, 6, 14, 2, 31, 6, 11, 0, 7, 2, 6, 1, 30}, {6, 1, 4, 5, 10, 60, 0, 8, 3, 29, 1, 11, 28, 9, 61, 31}, {0, 35, 25, 36, 7, 34, 19, 37, 5, 97, 49, 64, 13, 96, 33, 65}, {6, 4, 1, 21, 4, 20, 3, 31, 0, 44, 30, 91, 14, 90, 23, 5}, {0, 6, 20, 9, 7, 5, 8, 4, 23, 22, 27, 15, 12, 14, 21, 26}, {2, 0, 29, 28, 1, 7, 6, 9, 13, 12, 8, 11, 20, 43, 15, 42}, {3, 30, 6, 14, 4, 3, 11, 21, 5, 63, 4, 2, 1, 62, 0, 20}, {3, 19, 5, 16, 2, 0, 13, 12, 15, 18, 1, 29, 35, 34, 57, 56}, {5, 3, 0, 2, 2, 13, 9, 29, 12, 28, 17, 16, 61, 60, 31, 3}, {0, 14, 13, 12, 22, 63, 4, 10, 7, 62, 6, 46, 2, 95, 30, 94}}, 
	{{1, 7, 6, 3, 1, 5, 0, 13, 2, 12, 15, 18, 2, 19, 14, 8}, {1, 0, 2, 14, 30, 24, 27, 52, 124, 100, 63, 203, 51, 202, 53, 125}, {3, 1, 0, 45, 4, 2, 21, 20, 6, 89, 15, 29, 23, 28, 177, 176}, {7, 4, 13, 24, 0, 25, 5, 4, 7, 12, 21, 26, 11, 20, 55, 54}, {0, 43, 14, 45, 15, 92, 9, 93, 6, 177, 20, 42, 8, 176, 47, 89}, {1, 9, 0, 4, 3, 11, 7, 10, 25, 24, 27, 26, 21, 8, 11, 20}, {6, 5, 2, 0, 7, 3, 7, 8, 4, 2, 15, 5, 6, 14, 6, 9}, {1, 13, 0, 12, 3, 21, 20, 23, 2, 15, 22, 14, 17, 16, 19, 18}, {0, 64, 39, 36, 7, 65, 17, 74, 6, 301, 38, 601, 5, 600, 33, 151}, {9, 8, 6, 11, 10, 15, 5, 4, 7, 6, 1, 0, 3, 2, 29, 28}, {9, 8, 8, 11, 1, 19, 6, 15, 0, 3, 18, 57, 10, 29, 5, 56}, {1, 9, 8, 11, 0, 10, 29, 3, 2, 28, 31, 30, 25, 24, 27, 26}, {3, 9, 6, 23, 0, 28, 5, 8, 4, 58, 10, 118, 1, 119, 22, 15}, {5, 29, 4, 28, 31, 30, 25, 24, 1, 27, 0, 26, 5, 4, 7, 6}, {7, 2, 6, 0, 15, 14, 9, 3, 2, 6, 21, 20, 1, 23, 8, 22}, {3, 1, 0, 3, 2, 21, 2, 20, 7, 23, 22, 17, 6, 16, 19, 18}}, 
	{{1, 1, 0, 17, 5, 72, 16, 151, 3, 146, 150, 294, 19, 295, 148, 149}, {1, 1, 1, 2, 12, 27, 1, 26, 1, 0, 3, 2, 29, 28, 31, 30}, {3, 4, 2, 28, 5, 15, 0, 9, 6, 8, 59, 58, 3, 21, 11, 20}, {0, 5, 2, 6, 15, 14, 13, 17, 16, 19, 18, 29, 12, 28, 31, 30}, {2, 51, 0, 50, 2, 48, 14, 99, 6, 98, 7, 27, 15, 105, 53, 104}, {14, 31, 30, 9, 8, 11, 6, 10, 5, 4, 7, 6, 1, 0, 3, 2}, {2, 49, 2, 48, 1, 51, 0, 50, 7, 13, 29, 28, 13, 12, 31, 30}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {1, 252, 29, 507, 2, 506, 60, 62, 0, 245, 127, 244, 6, 247, 28, 246}, {9, 8, 11, 10, 5, 4, 6, 7, 6, 1, 0, 3, 2, 15, 29, 28}, {1, 0, 3, 3, 2, 29, 2, 28, 31, 30, 25, 24, 27, 26, 5, 4}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {3, 5, 1, 4, 2, 7, 12, 6, 5, 1, 7, 0, 4, 3, 13, 2}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {29, 28, 2, 31, 30, 25, 24, 27, 26, 5, 4, 7, 1, 6, 1, 0}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 7, 5, 75, 6, 297, 19, 596, 0, 296, 72, 1195, 8, 1194, 73, 299}, {1, 0, 29, 28, 31, 30, 25, 24, 27, 26, 21, 20, 23, 22, 9, 8}, {3, 5, 2, 4, 2, 7, 6, 1, 0, 3, 2, 29, 6, 28, 31, 30}, {14, 31, 30, 9, 6, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2}, {0, 126, 5, 255, 4, 254, 30, 105, 14, 104, 27, 107, 12, 106, 125, 124}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {2, 12, 27, 26, 5, 4, 7, 6, 1, 0, 3, 2, 29, 28, 31, 30}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {0, 33, 32, 35, 6, 34, 77, 76, 7, 79, 78, 73, 5, 72, 75, 74}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {3, 0, 3, 2, 13, 12, 15, 14, 2, 9, 8, 11, 3, 10, 5, 4}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 0, 2, 24, 2, 105, 27, 104, 3, 107, 106, 101, 7, 100, 103, 102}, {2, 12, 27, 26, 5, 4, 7, 6, 1, 0, 3, 2, 29, 28, 31, 30}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {7, 12, 27, 26, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {1, 2, 7, 6, 2, 29, 28, 31, 1, 30, 25, 24, 27, 26, 1, 0}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {2, 12, 27, 26, 5, 4, 7, 6, 1, 0, 3, 2, 29, 28, 31, 30}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 5, 13, 17, 1, 16, 19, 18, 1, 29, 28, 31, 0, 30, 25, 24}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {2, 12, 27, 26, 5, 4, 7, 6, 1, 0, 3, 2, 29, 28, 31, 30}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{1, 5, 4, 7, 6, 1, 0, 3, 2, 2, 29, 28, 31, 30, 13, 12}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}}, 
	{{5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}, {5, 4, 7, 6, 1, 0, 3, 2, 13, 12, 15, 14, 9, 8, 11, 10}} 
}; 
unsigned int codeBookLen[36][16][16] = { 
	{{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 3, 4, 6, 4, 6, 6, 7, 3, 7, 6, 9, 5, 8, 7, 9}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{3, 3, 4, 4, 4, 5, 4, 5, 3, 4, 4, 5, 4, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 3, 4, 5, 4, 7, 5, 8, 3, 8, 7, 10, 5, 9, 8, 10}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 4, 4, 5, 4, 6, 6, 6, 3, 6, 6, 6, 5, 7, 6, 7}, {2, 4, 2, 4, 4, 6, 4, 6, 5, 7, 4, 7, 5, 7, 4, 7}, {3, 3, 5, 4, 3, 3, 5, 4, 4, 4, 6, 6, 4, 4, 6, 6}, {2, 3, 4, 4, 3, 4, 4, 5, 4, 6, 6, 7, 4, 6, 5, 7}, {3, 4, 3, 4, 5, 6, 5, 6, 3, 4, 3, 4, 4, 6, 4, 6}, {3, 5, 2, 4, 6, 7, 5, 5, 3, 5, 3, 4, 6, 7, 4, 6}, {3, 3, 4, 4, 4, 5, 5, 6, 3, 3, 4, 5, 4, 5, 5, 6}, {2, 4, 3, 4, 4, 5, 5, 7, 3, 4, 4, 5, 5, 6, 5, 7}, {2, 5, 4, 5, 2, 4, 4, 4, 4, 7, 6, 7, 4, 7, 6, 7}, {3, 5, 3, 5, 3, 5, 2, 4, 5, 8, 5, 6, 4, 8, 4, 7}, {4, 4, 5, 6, 2, 2, 4, 4, 6, 6, 7, 7, 4, 4, 6, 6}, {3, 4, 4, 5, 2, 4, 3, 4, 5, 7, 8, 8, 4, 5, 4, 6}, {2, 4, 3, 4, 4, 6, 4, 5, 3, 5, 4, 5, 5, 7, 5, 7}, {3, 5, 2, 4, 4, 8, 3, 4, 4, 6, 3, 6, 7, 8, 5, 6}, {2, 3, 4, 5, 3, 4, 4, 5, 4, 4, 6, 6, 5, 5, 6, 6}, {2, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 6, 4, 5, 4, 6}}, 
	{{1, 4, 4, 5, 4, 6, 5, 7, 3, 6, 6, 7, 5, 7, 6, 7}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 8, 3, 7, 4, 7, 3, 7, 4, 8, 3, 7, 3, 7, 2, 6}, {4, 3, 8, 7, 4, 3, 7, 7, 4, 3, 8, 7, 3, 2, 7, 6}, {3, 5, 5, 7, 3, 5, 5, 6, 3, 5, 5, 7, 2, 4, 4, 5}, {4, 4, 4, 3, 8, 8, 7, 7, 3, 3, 3, 2, 7, 7, 7, 6}, {4, 6, 2, 5, 6, 8, 5, 8, 3, 5, 2, 4, 5, 7, 4, 6}, {4, 2, 6, 5, 6, 5, 7, 7, 3, 2, 6, 4, 5, 4, 6, 6}, {3, 5, 4, 5, 5, 7, 6, 7, 2, 3, 3, 5, 4, 6, 4, 6}, {4, 4, 4, 3, 3, 3, 3, 2, 8, 8, 7, 7, 7, 7, 7, 6}, {3, 7, 3, 6, 2, 6, 2, 4, 6, 9, 5, 8, 6, 9, 4, 6}, {4, 3, 6, 5, 2, 2, 5, 4, 6, 5, 8, 8, 5, 4, 7, 6}, {2, 5, 5, 7, 2, 3, 4, 5, 5, 6, 6, 7, 4, 5, 5, 6}, {3, 3, 3, 2, 6, 5, 5, 4, 5, 5, 4, 4, 7, 7, 6, 6}, {3, 6, 1, 4, 5, 7, 4, 6, 5, 8, 4, 6, 6, 8, 5, 6}, {3, 2, 5, 4, 5, 3, 6, 5, 4, 3, 7, 5, 6, 4, 7, 6}, {2, 3, 3, 5, 3, 5, 4, 5, 4, 5, 5, 6, 5, 6, 6, 6}}, 
	{{1, 3, 4, 6, 3, 8, 6, 9, 3, 10, 8, 11, 6, 12, 8, 12}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 3, 4, 5, 4, 7, 6, 7, 3, 7, 7, 8, 5, 9, 7, 9}, {1, 3, 2, 4, 6, 8, 6, 7, 8, 10, 8, 10, 8, 10, 8, 10}, {2, 2, 4, 4, 3, 4, 5, 5, 5, 6, 8, 8, 5, 5, 8, 8}, {1, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 6, 8, 7, 9}, {2, 5, 3, 5, 4, 7, 5, 6, 2, 6, 4, 6, 4, 8, 5, 8}, {3, 4, 2, 4, 4, 5, 3, 5, 5, 6, 3, 7, 6, 7, 5, 6}, {2, 3, 4, 4, 4, 4, 5, 5, 3, 5, 5, 6, 4, 7, 5, 7}, {2, 3, 3, 3, 4, 6, 4, 5, 4, 6, 5, 5, 6, 7, 5, 7}, {1, 6, 5, 7, 3, 7, 5, 7, 3, 9, 7, 9, 3, 9, 7, 9}, {3, 5, 2, 4, 3, 5, 3, 5, 5, 6, 6, 6, 5, 5, 4, 6}, {3, 4, 4, 6, 2, 4, 4, 5, 4, 6, 6, 7, 3, 5, 4, 7}, {3, 5, 5, 5, 3, 3, 4, 5, 5, 5, 5, 5, 3, 5, 3, 5}, {2, 7, 3, 5, 3, 8, 4, 8, 2, 8, 5, 7, 4, 9, 5, 9}, {3, 4, 3, 3, 4, 4, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5}, {2, 4, 3, 6, 3, 5, 3, 7, 4, 5, 4, 8, 4, 6, 6, 8}, {2, 3, 4, 5, 3, 5, 4, 5, 5, 5, 5, 5, 4, 5, 5, 5}}, 
	{{1, 4, 4, 5, 4, 5, 5, 6, 4, 6, 5, 6, 5, 6, 6, 6}, {2, 3, 3, 4, 4, 5, 4, 5, 5, 6, 4, 6, 5, 6, 4, 6}, {3, 3, 4, 5, 4, 3, 4, 5, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 4, 3, 4, 4, 4, 4, 5, 5, 5, 3, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 5, 5, 3, 4, 4, 4, 4, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 3, 4, 5, 5, 4, 5}, {3, 3, 4, 4, 5, 4, 6, 5, 3, 3, 5, 4, 5, 4, 6, 5}, {3, 4, 4, 5, 4, 5, 4, 6, 3, 4, 3, 4, 4, 5, 4, 6}, {2, 5, 4, 5, 3, 4, 4, 4, 4, 6, 4, 6, 4, 6, 4, 6}, {4, 5, 3, 4, 3, 5, 2, 4, 5, 7, 4, 7, 5, 5, 4, 6}, {3, 3, 4, 5, 3, 3, 5, 4, 4, 5, 5, 6, 4, 4, 6, 5}, {3, 4, 4, 5, 2, 4, 4, 4, 4, 5, 5, 6, 4, 6, 5, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 3, 5, 4, 5, 4, 5, 4, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 3, 5, 4, 5, 4, 5}, {3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 6, 4, 5, 4, 6}}, 
	{{1, 3, 4, 6, 4, 7, 6, 7, 3, 7, 6, 8, 5, 7, 7, 8}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{2, 3, 4, 5, 4, 5, 5, 5, 3, 5, 5, 5, 4, 5, 5, 5}, {2, 4, 3, 5, 4, 6, 3, 6, 4, 6, 4, 6, 4, 6, 4, 6}, {3, 3, 6, 6, 3, 3, 6, 5, 4, 4, 7, 7, 3, 3, 6, 6}, {3, 4, 5, 6, 3, 4, 5, 6, 3, 5, 5, 6, 2, 5, 5, 6}, {3, 4, 3, 4, 5, 6, 5, 6, 3, 4, 3, 3, 5, 6, 5, 6}, {3, 5, 3, 5, 5, 7, 4, 6, 3, 5, 2, 4, 5, 7, 5, 5}, {3, 3, 5, 4, 4, 5, 6, 6, 3, 3, 4, 4, 4, 4, 6, 6}, {3, 4, 4, 4, 5, 6, 6, 6, 2, 4, 3, 5, 4, 5, 5, 6}, {2, 4, 4, 4, 3, 4, 3, 4, 4, 6, 6, 6, 5, 6, 6, 6}, {3, 5, 3, 5, 3, 5, 2, 4, 5, 7, 5, 7, 4, 7, 4, 7}, {3, 3, 5, 5, 3, 2, 5, 4, 5, 5, 6, 7, 5, 4, 7, 5}, {3, 5, 4, 5, 2, 3, 3, 5, 4, 6, 7, 7, 4, 5, 6, 6}, {3, 3, 3, 3, 5, 5, 4, 4, 4, 4, 4, 5, 5, 6, 5, 6}, {3, 5, 2, 4, 3, 6, 3, 5, 4, 8, 4, 7, 6, 8, 4, 6}, {3, 2, 5, 5, 3, 3, 5, 5, 4, 4, 7, 5, 5, 5, 7, 6}, {2, 3, 4, 5, 4, 5, 4, 4, 3, 6, 6, 6, 4, 5, 5, 6}}, 
	{{5, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3}, {4, 6, 4, 5, 4, 6, 3, 5, 4, 5, 3, 5, 3, 5, 3, 4}, {4, 4, 6, 5, 4, 3, 5, 5, 4, 3, 6, 5, 3, 3, 5, 4}, {4, 5, 5, 6, 3, 4, 4, 5, 3, 4, 4, 6, 3, 4, 4, 4}, {4, 4, 4, 3, 6, 6, 5, 5, 4, 3, 3, 3, 5, 5, 5, 4}, {4, 5, 3, 5, 5, 6, 5, 6, 3, 4, 2, 4, 5, 5, 4, 5}, {4, 3, 5, 4, 5, 4, 5, 5, 3, 3, 4, 4, 4, 4, 5, 5}, {3, 4, 4, 5, 4, 5, 5, 5, 3, 4, 3, 4, 4, 5, 4, 5}, {4, 4, 4, 3, 4, 3, 3, 3, 6, 6, 5, 5, 5, 5, 5, 4}, {4, 5, 3, 5, 3, 5, 2, 4, 5, 6, 4, 6, 5, 5, 4, 5}, {4, 3, 5, 4, 3, 3, 4, 4, 5, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 5, 3, 4, 4, 4, 4, 5, 5, 5, 3, 5, 4, 5}, {4, 3, 3, 3, 5, 4, 4, 4, 5, 4, 4, 4, 5, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 4, 5, 3, 4, 5, 5, 4, 5}, {4, 2, 4, 4, 4, 4, 5, 5, 4, 4, 5, 4, 5, 4, 5, 5}, {2, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5}}, 
	{{1, 3, 4, 7, 3, 9, 6, 10, 3, 11, 9, 13, 5, 12, 9, 13}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 3, 4, 5, 4, 8, 5, 7, 3, 9, 7, 10, 5, 11, 7, 11}, {1, 3, 2, 4, 6, 9, 5, 8, 9, 11, 9, 11, 10, 10, 9, 10}, {2, 3, 3, 4, 2, 5, 4, 6, 6, 9, 6, 9, 5, 9, 7, 9}, {1, 3, 3, 4, 4, 6, 5, 5, 6, 8, 8, 8, 7, 8, 8, 8}, {2, 5, 3, 5, 3, 8, 4, 7, 2, 10, 5, 9, 4, 11, 6, 11}, {3, 6, 2, 4, 3, 7, 2, 5, 7, 6, 6, 6, 6, 6, 6, 5}, {2, 3, 3, 4, 3, 6, 4, 5, 4, 8, 5, 9, 4, 7, 5, 9}, {2, 5, 3, 4, 3, 4, 3, 5, 5, 6, 5, 6, 5, 6, 5, 6}, {1, 8, 6, 9, 2, 10, 6, 8, 3, 9, 7, 11, 4, 11, 7, 9}, {3, 4, 3, 5, 3, 5, 3, 5, 5, 5, 5, 5, 5, 5, 3, 5}, {2, 5, 6, 6, 3, 4, 6, 6, 2, 6, 6, 6, 3, 6, 6, 6}, {4, 5, 5, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 8, 4, 8, 3, 8, 4, 9, 2, 8, 4, 8, 3, 7, 5, 9}, {4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4}, {3, 6, 3, 6, 3, 5, 4, 6, 3, 6, 6, 6, 2, 6, 5, 6}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 3, 4, 5, 4, 7, 6, 7, 3, 8, 7, 8, 5, 8, 7, 8}, {2, 2, 3, 3, 4, 5, 4, 4, 7, 9, 8, 8, 8, 10, 7, 10}, {2, 3, 3, 4, 4, 5, 4, 5, 4, 6, 5, 6, 4, 6, 5, 6}, {2, 4, 3, 4, 3, 3, 4, 4, 6, 7, 6, 7, 5, 6, 6, 6}, {2, 4, 4, 5, 3, 5, 4, 5, 3, 6, 4, 6, 4, 6, 5, 6}, {2, 3, 3, 3, 4, 5, 4, 6, 5, 5, 4, 6, 5, 7, 6, 7}, {3, 4, 3, 5, 3, 4, 4, 5, 4, 4, 4, 5, 5, 4, 5, 5}, {3, 3, 3, 4, 4, 5, 5, 5, 4, 5, 4, 4, 4, 5, 4, 5}, {2, 6, 4, 7, 3, 7, 4, 7, 2, 7, 5, 8, 3, 8, 5, 7}, {4, 4, 3, 4, 5, 5, 3, 5, 5, 5, 3, 5, 5, 4, 5, 3}, {2, 6, 3, 7, 3, 7, 4, 5, 3, 6, 6, 7, 3, 6, 4, 7}, {4, 5, 4, 4, 4, 6, 6, 3, 4, 5, 3, 5, 4, 4, 4, 3}, {2, 5, 4, 6, 3, 6, 4, 6, 3, 6, 4, 6, 3, 7, 4, 7}, {3, 4, 5, 4, 3, 5, 5, 3, 3, 5, 4, 5, 4, 5, 5, 5}, {3, 4, 4, 6, 3, 4, 5, 5, 3, 5, 5, 5, 3, 4, 4, 6}, {3, 4, 5, 5, 5, 4, 5, 5, 3, 4, 5, 5, 3, 5, 3, 4}}, 
	{{1, 4, 4, 5, 4, 5, 5, 6, 4, 6, 5, 6, 5, 6, 6, 6}, {3, 4, 3, 3, 4, 4, 3, 4, 5, 6, 5, 6, 5, 5, 4, 5}, {3, 3, 5, 5, 3, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 5, 3, 4, 4, 5}, {4, 4, 3, 4, 5, 5, 4, 4, 4, 4, 4, 3, 5, 5, 4, 4}, {4, 4, 3, 4, 5, 6, 4, 6, 3, 4, 3, 4, 4, 5, 4, 5}, {4, 3, 4, 4, 4, 4, 5, 5, 4, 3, 4, 4, 4, 4, 5, 5}, {3, 4, 4, 4, 4, 6, 5, 6, 3, 4, 3, 4, 4, 5, 4, 5}, {3, 5, 4, 4, 3, 4, 3, 4, 4, 6, 5, 5, 4, 6, 4, 4}, {4, 5, 3, 4, 4, 4, 3, 4, 4, 6, 4, 6, 4, 5, 3, 5}, {4, 3, 4, 4, 3, 3, 5, 4, 4, 4, 6, 5, 4, 4, 6, 5}, {3, 4, 4, 4, 3, 4, 3, 4, 4, 6, 4, 5, 4, 5, 5, 6}, {4, 4, 3, 3, 5, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 4}, {3, 4, 3, 5, 3, 5, 3, 4, 4, 6, 4, 6, 4, 6, 4, 6}, {3, 3, 5, 4, 4, 3, 5, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 3, 3, 4, 3, 4, 4, 5, 4, 6, 5, 7, 4, 5, 4, 7}}, 
	{{1, 3, 4, 5, 4, 7, 6, 7, 3, 7, 7, 8, 5, 8, 8, 8}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 4, 4, 5, 4, 6, 5, 7, 3, 6, 6, 7, 5, 7, 6, 7}, {2, 3, 3, 4, 4, 6, 4, 5, 4, 6, 4, 6, 5, 7, 4, 7}, {2, 3, 5, 5, 3, 3, 5, 5, 4, 4, 7, 7, 5, 4, 7, 7}, {3, 3, 4, 5, 3, 4, 5, 5, 3, 5, 5, 6, 3, 5, 5, 6}, {2, 4, 3, 4, 5, 7, 5, 6, 3, 5, 3, 4, 5, 6, 6, 7}, {3, 5, 3, 4, 5, 7, 5, 5, 3, 5, 2, 5, 5, 7, 4, 6}, {3, 3, 5, 3, 4, 5, 6, 6, 3, 3, 4, 5, 4, 5, 6, 6}, {3, 5, 4, 4, 4, 6, 5, 7, 2, 4, 4, 4, 4, 7, 4, 5}, {2, 4, 4, 5, 3, 4, 4, 4, 3, 6, 6, 6, 4, 6, 6, 6}, {2, 5, 3, 5, 3, 5, 3, 5, 4, 6, 5, 5, 5, 7, 4, 7}, {3, 3, 5, 4, 3, 3, 4, 4, 4, 4, 6, 7, 5, 4, 5, 7}, {3, 4, 4, 7, 2, 4, 4, 5, 3, 7, 5, 5, 4, 5, 6, 5}, {2, 4, 3, 3, 4, 7, 4, 5, 4, 5, 4, 5, 5, 7, 6, 5}, {2, 4, 2, 4, 5, 7, 5, 5, 4, 4, 5, 5, 5, 7, 6, 5}, {2, 2, 4, 5, 4, 5, 5, 5, 5, 4, 6, 7, 4, 5, 7, 5}, {3, 4, 3, 3, 4, 5, 3, 4, 4, 5, 7, 7, 4, 5, 6, 4}}, 
	{{2, 3, 4, 5, 4, 5, 5, 5, 3, 5, 5, 5, 4, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 3, 5, 4, 5, 4, 5, 4, 5, 4, 5}, {3, 3, 5, 5, 3, 4, 5, 5, 4, 4, 5, 5, 4, 3, 5, 5}, {3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 5, 3, 4, 4, 5}, {3, 4, 3, 4, 5, 5, 5, 5, 3, 4, 3, 4, 5, 5, 5, 5}, {4, 4, 3, 4, 4, 6, 4, 5, 3, 4, 3, 4, 5, 6, 4, 5}, {3, 3, 4, 4, 4, 5, 5, 5, 3, 3, 5, 5, 5, 4, 5, 5}, {3, 4, 4, 4, 4, 5, 4, 5, 3, 4, 4, 4, 4, 5, 4, 5}, {3, 4, 3, 4, 3, 4, 4, 4, 4, 5, 5, 5, 4, 5, 5, 5}, {3, 5, 3, 4, 3, 5, 3, 4, 5, 5, 4, 5, 4, 5, 5, 5}, {3, 4, 5, 5, 3, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 5, 3, 3, 4, 4, 4, 5, 4, 6, 4, 4, 5, 6}, {3, 4, 3, 3, 5, 5, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 4, 4, 4, 5, 3, 4, 5, 6, 4, 6}, {3, 3, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 5}, {3, 3, 3, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 6, 5, 6}}, 
	{{5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3}, {4, 5, 4, 5, 4, 5, 3, 5, 4, 5, 3, 4, 4, 5, 3, 4}, {4, 4, 5, 5, 4, 3, 5, 4, 4, 3, 5, 5, 4, 3, 5, 4}, {4, 4, 5, 5, 3, 4, 4, 5, 4, 4, 4, 5, 3, 4, 4, 4}, {4, 4, 4, 4, 5, 5, 5, 4, 4, 4, 3, 3, 5, 4, 4, 4}, {4, 4, 3, 4, 4, 5, 4, 5, 4, 4, 3, 4, 4, 5, 4, 5}, {4, 4, 5, 4, 5, 4, 5, 5, 3, 3, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 5, 4, 5, 4, 5, 3, 4, 4, 4, 3, 4, 4, 5}, {4, 4, 4, 4, 4, 4, 3, 3, 5, 5, 5, 4, 5, 4, 4, 4}, {4, 5, 3, 4, 4, 4, 3, 4, 4, 5, 4, 5, 4, 5, 4, 4}, {4, 3, 5, 5, 3, 3, 4, 4, 5, 4, 5, 5, 4, 4, 5, 4}, {4, 4, 4, 5, 3, 4, 4, 4, 4, 5, 4, 5, 3, 4, 4, 5}, {4, 4, 3, 3, 4, 4, 4, 4, 5, 4, 4, 4, 5, 5, 5, 4}, {3, 4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 5, 4, 5}, {4, 3, 4, 4, 4, 4, 4, 4, 4, 3, 5, 4, 5, 4, 5, 5}, {3, 4, 4, 4, 4, 4, 4, 5, 3, 4, 4, 5, 4, 5, 4, 5}}, 
	{{1, 4, 5, 5, 5, 5, 6, 5, 4, 6, 5, 5, 5, 5, 5, 5}, {4, 5, 4, 5, 3, 5, 3, 4, 4, 5, 4, 5, 4, 5, 3, 4}, {4, 4, 5, 5, 4, 4, 5, 4, 4, 3, 5, 4, 4, 3, 4, 4}, {4, 4, 5, 5, 4, 4, 4, 5, 4, 4, 4, 5, 3, 3, 4, 4}, {4, 4, 4, 4, 5, 5, 5, 4, 4, 3, 4, 3, 5, 4, 4, 4}, {4, 4, 3, 4, 5, 5, 4, 5, 4, 4, 3, 4, 4, 5, 4, 4}, {4, 4, 4, 4, 5, 4, 5, 5, 3, 3, 4, 4, 4, 4, 5, 4}, {4, 4, 4, 4, 4, 5, 4, 5, 3, 4, 4, 4, 4, 4, 4, 4}, {4, 5, 3, 4, 4, 4, 3, 3, 5, 5, 4, 5, 5, 5, 4, 4}, {4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 5, 4, 4, 4, 5}, {4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4}, {4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 5}, {4, 4, 4, 3, 5, 4, 4, 4, 4, 4, 4, 3, 5, 5, 5, 4}, {4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5}, {4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4}, {3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5}}, 
	{{1, 4, 4, 5, 4, 5, 5, 6, 4, 6, 5, 6, 5, 6, 6, 6}, {3, 4, 3, 4, 3, 5, 3, 4, 5, 5, 5, 5, 5, 5, 4, 5}, {3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 5, 3, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5}, {3, 4, 3, 4, 5, 5, 4, 5, 3, 4, 4, 4, 5, 5, 4, 5}, {4, 4, 3, 4, 4, 5, 4, 5, 4, 4, 3, 4, 4, 5, 4, 5}, {4, 3, 4, 4, 4, 4, 5, 5, 3, 4, 4, 4, 4, 4, 5, 5}, {3, 4, 4, 5, 4, 5, 5, 4, 3, 4, 4, 4, 4, 4, 4, 5}, {3, 4, 4, 4, 3, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5}, {4, 4, 3, 4, 4, 4, 3, 4, 4, 5, 4, 5, 4, 5, 4, 5}, {4, 4, 4, 4, 3, 3, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 4, 3, 4, 4, 4, 4, 5, 5, 5, 4, 4, 4, 5}, {4, 4, 4, 3, 4, 5, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4}, {3, 4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5}, {3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5}}, 
	{{1, 4, 4, 5, 4, 6, 5, 6, 3, 6, 6, 7, 5, 7, 7, 7}, {2, 3, 3, 4, 4, 4, 4, 5, 4, 6, 5, 6, 5, 6, 5, 6}, {3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 5, 5, 4, 4, 5, 5}, {3, 4, 3, 4, 3, 4, 4, 4, 4, 5, 5, 5, 4, 5, 5, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 3, 4, 4, 5, 4, 6, 4, 6}, {3, 3, 3, 4, 4, 5, 4, 5, 4, 4, 4, 5, 4, 5, 5, 5}, {3, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 5, 4}, {3, 4, 3, 4, 4, 5, 4, 5, 4, 4, 4, 4, 4, 5, 4, 5}, {2, 5, 4, 5, 3, 5, 4, 5, 3, 6, 4, 6, 4, 6, 4, 6}, {3, 4, 4, 4, 4, 4, 3, 4, 4, 5, 4, 5, 4, 5, 4, 5}, {3, 4, 4, 4, 3, 4, 4, 4, 4, 4, 5, 5, 4, 4, 5, 5}, {3, 4, 4, 5, 3, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 5}, {3, 4, 3, 4, 4, 5, 4, 5, 3, 5, 4, 5, 4, 5, 4, 5}, {3, 4, 3, 4, 4, 4, 4, 5, 4, 4, 4, 4, 5, 5, 4, 5}, {3, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 5, 4, 5, 5, 5}, {3, 4, 4, 4, 3, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4, 5}}, 
	{{1, 3, 4, 5, 4, 7, 6, 7, 3, 7, 7, 8, 5, 8, 8, 8}, {1, 3, 3, 4, 5, 6, 5, 6, 6, 7, 6, 7, 6, 7, 6, 7}, {2, 3, 4, 4, 3, 4, 5, 5, 4, 5, 5, 7, 4, 6, 5, 7}, {2, 3, 3, 5, 3, 4, 4, 5, 5, 6, 5, 6, 5, 5, 6, 6}, {2, 5, 3, 5, 3, 6, 4, 6, 3, 6, 4, 5, 4, 7, 5, 7}, {3, 4, 3, 4, 4, 5, 4, 5, 3, 5, 4, 5, 4, 5, 4, 5}, {2, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 4, 6}, {3, 4, 3, 4, 4, 5, 5, 5, 3, 4, 4, 5, 4, 5, 4, 5}, {1, 6, 5, 6, 3, 6, 5, 6, 3, 7, 6, 7, 4, 7, 6, 7}, {3, 6, 4, 4, 3, 4, 3, 4, 4, 4, 4, 5, 5, 6, 4, 5}, {3, 4, 4, 5, 3, 3, 4, 4, 4, 6, 5, 4, 4, 4, 5, 6}, {4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 4}, {2, 5, 4, 5, 3, 7, 5, 6, 2, 6, 4, 7, 4, 7, 5, 7}, {4, 4, 3, 4, 4, 4, 4, 4, 4, 5, 4, 5, 5, 5, 3, 4}, {3, 3, 4, 5, 3, 4, 4, 4, 4, 4, 5, 5, 4, 5, 5, 5}, {3, 3, 4, 3, 4, 5, 4, 4, 4, 5, 5, 5, 4, 5, 4, 5}}, 
	{{1, 3, 4, 5, 4, 8, 5, 8, 3, 8, 7, 9, 5, 9, 8, 8}, {1, 3, 3, 4, 5, 6, 5, 6, 5, 7, 6, 8, 6, 8, 7, 7}, {2, 3, 3, 4, 3, 4, 5, 5, 4, 6, 6, 6, 5, 6, 6, 6}, {2, 3, 3, 3, 3, 5, 5, 5, 5, 6, 6, 7, 5, 7, 5, 6}, {1, 6, 3, 6, 4, 7, 6, 7, 3, 7, 5, 7, 5, 7, 5, 7}, {2, 4, 2, 4, 4, 4, 5, 6, 5, 6, 5, 5, 5, 6, 6, 5}, {3, 4, 4, 4, 4, 5, 4, 6, 3, 4, 4, 5, 3, 5, 4, 6}, {3, 4, 3, 4, 4, 6, 4, 5, 3, 5, 3, 4, 5, 5, 6, 5}, {1, 6, 5, 6, 3, 6, 5, 6, 3, 7, 6, 7, 4, 7, 6, 7}, {3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 5, 7, 4, 7, 5, 4}, {2, 4, 5, 4, 3, 4, 4, 4, 5, 5, 5, 5, 4, 5, 5, 5}, {3, 3, 5, 5, 3, 4, 4, 4, 4, 4, 4, 4, 5, 6, 4, 6}, {2, 6, 4, 5, 3, 5, 5, 6, 3, 7, 4, 5, 3, 7, 4, 6}, {3, 5, 3, 5, 3, 3, 4, 4, 4, 5, 3, 5, 6, 6, 6, 6}, {3, 3, 3, 4, 3, 4, 4, 5, 4, 5, 5, 5, 6, 6, 5, 4}, {2, 4, 4, 4, 5, 6, 3, 4, 4, 6, 4, 6, 3, 7, 5, 7}}, 
	{{1, 4, 4, 5, 3, 7, 5, 8, 3, 8, 8, 9, 5, 9, 8, 8}, {1, 2, 3, 5, 6, 6, 6, 7, 8, 8, 7, 9, 7, 9, 7, 8}, {2, 2, 3, 6, 3, 4, 5, 5, 5, 7, 6, 7, 5, 7, 8, 8}, {3, 3, 4, 5, 2, 5, 4, 4, 4, 5, 5, 6, 4, 5, 7, 7}, {1, 6, 4, 6, 4, 7, 4, 7, 3, 8, 5, 6, 4, 8, 6, 7}, {3, 4, 3, 4, 3, 5, 3, 5, 5, 5, 5, 5, 5, 4, 4, 5}, {3, 3, 3, 4, 3, 5, 5, 6, 3, 5, 5, 5, 4, 5, 5, 6}, {3, 4, 3, 4, 3, 5, 5, 5, 3, 4, 5, 4, 5, 5, 5, 5}, {1, 7, 6, 6, 3, 7, 5, 7, 3, 9, 6, 10, 3, 10, 6, 8}, {4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5}, {4, 5, 4, 4, 3, 6, 3, 4, 3, 3, 6, 6, 4, 5, 4, 6}, {3, 4, 4, 4, 3, 4, 5, 3, 3, 5, 5, 5, 5, 5, 5, 5}, {2, 5, 4, 5, 3, 6, 4, 5, 3, 7, 4, 8, 3, 8, 5, 5}, {3, 5, 3, 5, 5, 5, 5, 5, 3, 5, 3, 5, 4, 4, 4, 4}, {4, 3, 4, 4, 4, 4, 4, 5, 5, 3, 5, 5, 3, 5, 4, 5}, {2, 4, 4, 4, 4, 5, 3, 5, 4, 5, 5, 5, 4, 5, 5, 5}}, 
	{{1, 3, 3, 6, 4, 8, 6, 9, 3, 9, 9, 10, 6, 10, 9, 9}, {1, 2, 3, 5, 7, 8, 5, 8, 7, 7, 7, 7, 8, 8, 8, 8}, {2, 3, 3, 7, 3, 6, 3, 6, 5, 6, 8, 8, 3, 7, 6, 7}, {2, 3, 3, 4, 5, 5, 4, 5, 5, 5, 5, 5, 4, 5, 5, 5}, {2, 7, 2, 7, 3, 7, 4, 8, 3, 8, 4, 6, 4, 8, 7, 8}, {4, 5, 5, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 6, 3, 6, 3, 6, 3, 6, 3, 5, 6, 6, 4, 5, 6, 6}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {1, 9, 6, 10, 3, 10, 7, 7, 2, 9, 8, 9, 4, 9, 6, 9}, {4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5}, {4, 4, 3, 4, 4, 5, 2, 5, 5, 5, 5, 5, 5, 5, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 6, 3, 6, 3, 6, 5, 6, 3, 6, 4, 6, 3, 6, 5, 6}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {5, 5, 2, 5, 5, 5, 5, 5, 5, 4, 4, 4, 3, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 4, 4, 8, 4, 10, 6, 11, 2, 10, 8, 12, 5, 12, 8, 10}, {1, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5}, {2, 5, 3, 5, 2, 5, 5, 5, 5, 5, 5, 6, 4, 6, 6, 6}, {4, 5, 5, 4, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {1, 7, 3, 8, 3, 8, 5, 7, 4, 7, 5, 7, 4, 7, 7, 7}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {1, 6, 6, 6, 3, 6, 7, 7, 3, 7, 7, 7, 3, 7, 7, 7}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 4, 5, 5, 5, 5, 5, 5, 2, 5, 5, 5, 4, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 3, 4, 7, 3, 9, 7, 9, 3, 9, 9, 9, 5, 9, 9, 9}, {2, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {3, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {1, 5, 6, 6, 3, 6, 6, 6, 3, 6, 6, 6, 6, 6, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 5, 6, 7, 4, 7, 7, 7, 2, 7, 7, 7, 4, 7, 7, 7}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {2, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{1, 5, 5, 5, 5, 5, 5, 5, 3, 5, 6, 6, 6, 6, 5, 5}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}}, 
	{{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}} 
}; 
 
#define SI_NUM 30 
unsigned int codeBookSi[SI_NUM] = { 
	103653, 51827, 12957, 808, 504, 246, 121, 120, 203, 122, 247, 51, 127, 14, 13, 
		0, 4, 5, 24, 62, 100, 253, 405, 1011, 1010, 1618, 3238, 6479, 25912, 103652}; 
unsigned int codeBookLenSi[SI_NUM] = { 
	17, 16, 14, 10, 9, 8, 7, 7, 8, 7, 8, 6, 7, 4, 4, 1, 3, 3, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 15, 17}; 
 
#define SF_NUM 128 
unsigned int codeBookSf[SF_NUM] = { 
	61533, 61532, 61535, 61534, 61529, 61528, 61531, 61530, 153365, 153364, 153367, 153366, 153361, 153360, 153363, 153362, 
	153373, 153372, 153375, 153374, 153369, 153368, 153371, 153370, 15381, 15380, 19173, 19172, 4935, 9590, 4934, 2466, 
	2310, 960, 4794, 1217, 1219, 1232, 2311, 481, 1185, 617, 1199, 241, 312, 309, 598, 89, 
	153, 289, 33, 45, 79, 20, 31, 75, 14, 39, 8, 25, 8, 13, 3, 7, 
	1, 5, 0, 5, 24, 6, 38, 18, 9, 73, 23, 17, 145, 61, 43, 32, 
	297, 157, 155, 121, 88, 85, 597, 576, 313, 305, 169, 1192, 1186, 1193, 1187, 1184, 
	168, 2309, 2308, 1218, 1216, 1923, 9591, 3844, 19175, 153349, 76697, 153348, 153351, 153350, 153345, 153344, 
	153347, 153346, 153357, 153356, 153359, 153358, 153353, 153352, 153355, 153354, 153397, 153396, 153399, 153398, 153393, 153392}; 
unsigned int codeBookLenSf[SF_NUM] = { 
	19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 
	19, 19, 19, 19, 19, 19, 19, 19, 17, 17, 16, 16, 15, 15, 15, 14, 
	13, 13, 14, 13, 13, 13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 
	10, 10, 9, 9, 9, 8, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 
	1, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 
	10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12,	12, 12, 12, 12, 
	11, 13, 13, 13, 13, 14, 15, 15,	16, 19, 18, 19, 19, 19, 19, 19, 
	19, 19, 19, 19,	19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19 
}; 
 
extern unsigned int codeBookBin[2]; 
extern unsigned int codeBookLenBin[2]; 
 
void cbc_decode_init(int fsidx) 
{ 
	fsidx -= 3; 
 
	sampling_rate = (int)fs_tbl[fsidx]; 
} 
 
 
 
void cbc_decode( 
  int  windowSequence, 
  int  target, 
  int  sample_buf[][FRAMESIZE], 
  int  scalefactors[][8][MAX_SCFAC_BANDS], 
  int  maxSfb, 
  int  num_window_groups, 
  int  window_group_length[], 
 
  int  ps_mask[], 
 
 
  int  stereo_mode, 
  int  swb_offset[][52], 
  int  used_bits, 
  int  frameLength, 
  int  enc_top_layer, 
  int  base_snf, 
  int  base_band, 
  int  nch, 
  int  fill_length) 
{ 
	int		i, ch, g; 
	int		cband; 
	int		layer_reg[2][64]; 
	int		layer_max_freq[2][64]; 
	int		layer_max_cband[2][64]; 
	int		layer_max_qband[2][64]; 
	int		layer_bit_flush[64]; 
 
	int		layer_buf_offset[64]; 
 
	int		start_freq[2][64]; 
	int		start_qband[2][64]; 
	int		start_cband[2][64]; 
	int		end_freq[2][64]; 
	int		end_cband[2][64]; 
	int		end_qband[2][64]; 
	int		s_freq[2][64]; 
	int		e_freq[2][64]; 
 
	int		cw_len; 
	int		layer; 
	int		slayer_size; 
	int		available_len; 
	int		band_snf[2][8][32]; 
	int		ModelIndex[2][8][32]; 
	 
	int		*sample[2][8]; 
	int		*sign_is_coded[2][8]; 
	int		*coded_samp_bit[2][8]; 
	int		*cur_snf[2][8]; 
 
	int		sign_is_coded_buf[2][FRAMESIZE]; 
	int		coded_samp_bit_buf[2][FRAMESIZE]; 
	int		cur_snf_buf[2][FRAMESIZE]; 
 
    int     stereo_si_coded[MAX_SCFAC_BANDS]; 
	int		code_len; 
	int		layerBit; 
 
	///////////////////////////////////////////////////////// 
	//            Variable Initialization                  // 
	///////////////////////////////////////////////////////// 
 
	for (ch = 0; ch < nch; ch++) { 
		int		s; 
 
		s = 0; 
		for (g = 0; g < num_window_groups; g++) {  
			sample[ch][g] = &(sample_buf[ch][FRAMESIZE*s/8]); 
			sign_is_coded[ch][g] = &(sign_is_coded_buf[ch][FRAMESIZE*s/8]); 
			coded_samp_bit[ch][g] = &(coded_samp_bit_buf[ch][FRAMESIZE*s/8]); 
			cur_snf[ch][g] = &(cur_snf_buf[ch][FRAMESIZE*s/8]); 
			s += window_group_length[g]; 
    		for (i = 0; i < MAX_SCFAC_BANDS; i++)//except global gain 
			{ 
				if(i==0 && g==0) 
					continue; 
				scalefactors[ch][g][i] = 0; 
			} 
			for (i = 0; i < 32; i++) { 
				band_snf[ch][g][i] = 0; 
				ModelIndex[ch][g][i] = 0; 
			} 
		} 
		for (i = 0; i < FRAMESIZE; i++) { 
			sign_is_coded_buf[ch][i] = 0; 
			coded_samp_bit_buf[ch][i] = 0; 
			cur_snf_buf[ch][i] = 0; 
			sample_buf[ch][i] = 0; 
		} 
	} 
 
 
    for (i = 0; i < MAX_SCFAC_BANDS; i++) 
		stereo_si_coded[i] = 0; 
 
	/* Initialize 
		layer_max_freq 
		layer_max_cband 
		layer_max_qband 
		layer_bit_flush 
	*/ 
    slayer_size = initialize_layer_data(windowSequence, num_window_groups,  
					window_group_length, base_band, enc_top_layer, maxSfb, swb_offset, 
					layer_max_freq, layer_max_cband, layer_max_qband, 
					layer_bit_flush, layer_reg, nch); 
 
 
	/* ##################################################### */ 
	/* 	                CBC MAIN ROUTINE                    */ 
	/* ##################################################### */ 
 
	/* ***************************************************** */ 
	/*                  CBC_layer_stream()                  */ 
	/* ***************************************************** */ 
 
	/* to calculate core CBC data size */ 
	if(fill_length != 0) 
		frameLength -= fill_length*8; 
 
	/* calculate layer buffer position */ 
	layer_buf_offset[0] = (double)16.*(frameLength-used_bits)/(double)(enc_top_layer+16)/(double)slayer_size; 
 
	for (layer = 1; layer < slayer_size-1; layer++) 
	{ 
		layer_buf_offset[layer] = layer_buf_offset[layer-1] + (double)16.*(frameLength-used_bits)/(enc_top_layer+16)/slayer_size; 
	} 
 
	layer_buf_offset[slayer_size-1] = (double)16.*(frameLength-used_bits)/(enc_top_layer+16); 
	layerBit = (frameLength-used_bits) - layer_buf_offset[slayer_size-1]; 
 
	for (layer = slayer_size; layer < enc_top_layer+slayer_size-1; layer++) 
	{ 
		layer_buf_offset[layer] = layer_buf_offset[layer-1] + layerBit/(enc_top_layer); 
	} 
 
	layer_buf_offset[enc_top_layer+slayer_size-1] = (frameLength-used_bits); 
 
	for (layer = enc_top_layer+slayer_size; layer < 64; layer++) 
		layer_buf_offset[layer] = (frameLength-used_bits)*2; 
 
	/* ********************************************************* */ 
	/* 	    Split Input Bitstream into Layer Bitstreams 	     */ 
	/* ********************************************************* */ 
 
	init_layer_buf(); 
 
	setRBitBufPos(used_bits); 
 
	{ 
		unsigned data; 
		cw_len = frameLength - used_bits; 
		while(cw_len > 0) { 
			int len; 
			len = (cw_len > 8) ? 8 : cw_len; 
			data = getbits(len); 
			putbits2buf(data, len); 
			cw_len -= len; 
		} 
		putbits2buf(0x00, 32); 
	} 
 
	for(ch = 0; ch < nch; ch++) for(g = 0; g < num_window_groups; g++) { 
	   	start_qband[ch][g] = 0;; 
		start_cband[ch][g] = 0;; 
		start_freq[ch][g] = 0; 
	   	end_qband[ch][g] = 0;; 
		end_cband[ch][g] = 0;; 
		end_freq[ch][g] = 0; 
	} 
 
	code_len = 0; 
 
	setRBitBufPos(used_bits); 
	available_len = 0; 
 
	for(ch = 0; ch < nch; ch++) for(g = 0; g < num_window_groups; g++) 
		s_freq[ch][g] = 0; 
 
 
	if (windowSequence == 2) { 
		for (layer = 0; layer < slayer_size; layer++) { 
			for(ch = 0; ch < nch; ch++) { 
				g = layer_reg[ch][layer]; 
				e_freq[ch][g]  = layer_max_freq[ch][layer]; 
			} 
		} 
	} 
	/* ##################################################### */ 
	/* 	                CBC MAIN LOOP                       */ 
	/* ##################################################### */ 
 
	for (layer = 0; layer < target+slayer_size; layer++) { 
		int min_snf; 
 
		for(ch = 0; ch < nch; ch++) { 
			g = layer_reg[ch][layer]; 
 
			start_freq[ch][g]  = end_freq[ch][g]; 
	   		start_qband[ch][g] = end_qband[ch][g]; 
			start_cband[ch][g] = end_cband[ch][g]; 
 
			end_qband[ch][g] = layer_max_qband[ch][layer]; 
			end_cband[ch][g] = layer_max_cband[ch][layer]; 
			end_freq[ch][g]  = layer_max_freq[ch][layer]; 
		} 
 
		if (windowSequence == 2) { 
			if(layer >= slayer_size) { 
				for(ch = 0; ch < nch; ch++) { 
					g = layer_reg[ch][layer]; 
 
					e_freq[ch][g]  = layer_max_freq[ch][layer]; 
				} 
			} 
		} else { 
			for(ch = 0; ch < nch; ch++) { 
				if (layer >= slayer_size)  
					e_freq[ch][0] = layer_max_freq[ch][layer]; 
				else 
       				e_freq[ch][0] = layer_max_freq[ch][slayer_size-1]; 
			} 
		} 
 
		if(layer==0) 
			available_len = layer_buf_offset[0]; 
		else 
			available_len += layer_buf_offset[layer]-layer_buf_offset[layer-1]; 
		 
		/* coding band side infomation  */ 
		cw_len =  decode_cband_si(ModelIndex, start_cband, end_cband, g, nch); 
 
		for(ch = 0; ch < nch; ch++) { 
			g = layer_reg[ch][layer]; 
 
			for(cband = start_cband[ch][g]; cband < end_cband[ch][g]; cband++) { 
 
				if(ModelIndex[ch][g][cband] > 8) 
					band_snf[ch][g][cband] = ModelIndex[ch][g][cband] - 4; 
				else 
					band_snf[ch][g][cband] = (ModelIndex[ch][g][cband]+1) / 2; 
 
			} 
 
	    	for(i = start_freq[ch][g]; i < end_freq[ch][g]; i++)   
			{ 
				cur_snf[ch][g][i] = band_snf[ch][g][i/32]; 
			} 
 
		} 
 
		code_len += cw_len; 
		g = layer_reg[0][layer]; 
		available_len -= cw_len; 
		 
		/* side infomation : scalefactor */ 
		cw_len =  decode_scfband_si(scalefactors, start_qband, end_qband, 
						stereo_mode, ps_mask, maxSfb, stereo_si_coded, g, nch); 
 
		code_len += cw_len; 
		available_len -= cw_len; 
 
		min_snf = layer < slayer_size ? base_snf : 1; 
 
		/* Bit-Sliced Spectral Data Coding */ 
		cw_len = decode_spectra(sample, g, g+1, start_freq, end_freq,  
				min_snf, available_len, ModelIndex, cur_snf, coded_samp_bit,  
				sign_is_coded, nch); 
 
		code_len += cw_len; 
		available_len -= cw_len; 
 
		if(available_len > 0) { 
			cw_len = decode_spectra(sample, 0, num_window_groups, s_freq, e_freq, 1, 
			 		available_len, ModelIndex, cur_snf, coded_samp_bit,  
			 		sign_is_coded, nch); 
			code_len += cw_len; 
			available_len -= cw_len; 
		} 
 
	} /* for (layer = 0; layer <= top_layer; layer++) */ 
} 
 
/*--------------------------------------------------------------*/ 
/***************   coding band side infomation   ****************/ 
/*--------------------------------------------------------------*/ 
extern int siCodeMode; 
static int decode_cband_si( 
	int	model_index[][8][32], 
	int	start_cband[][64], 
	int end_cband[][64], 
	int g, 
	int nch) 
{ 
	int	ch; 
	int cband; 
	int si_cw_len; 
	//HUFF 
	static int prevSi[2][8]; 
	int res; 
	int decData; 
 
	si_cw_len = 0; 
	for(ch = 0; ch < nch; ch++) { 
		if(siCodeMode==0) 
		{ 
			if(g==0 && start_cband[ch][g]==0) 
				prevSi[ch][0] = 0; 
 
			for (cband = start_cband[ch][g]; cband < end_cband[ch][g]; cband++) { 
				res = BSHCDecHuff(codeBookSi,codeBookLenSi,SI_NUM,&decData); 
				if(res==-1) 
					return -1; 
				si_cw_len +=res; 
				model_index[ch][g][cband] = prevSi[ch][0] - decData + 15; 
				if(model_index[ch][g][cband] < 0) 
					fprintf(stderr,"\nMode Error"); 
				prevSi[ch][0] = model_index[ch][g][cband]; 
			} 
		} 
		else 
		{ 
			if(start_cband[ch][g]==0) 
				prevSi[ch][g] = 0; 
 
			for (cband = start_cband[ch][g]; cband < end_cband[ch][g]; cband++) { 
				res = BSHCDecHuff(codeBookSi,codeBookLenSi,SI_NUM,&decData); 
				if(res==-1) 
					return -1; 
				si_cw_len +=res; 
				model_index[ch][g][cband] = prevSi[ch][g] - decData + 15; 
				if(model_index[ch][g][cband] < 0) 
					fprintf(stderr,"\nMode Error"); 
				prevSi[ch][g] = model_index[ch][g][cband]; 
			}	 
		} 
	} 
 
	return si_cw_len; 
} 
 
/*--------------------------------------------------------------*/ 
/***********  scalefactor band side infomation   ****************/ 
/*--------------------------------------------------------------*/ 
static int decode_scfband_si( 
	int	scf[][8][MAX_SCFAC_BANDS], 
	int	start_sfb[][64], 
	int end_sfb[][64], 
	int	stereo_mode, 
 
	int ps_mask[],  
 
	int maxSfb, 
	int stereo_si_coded[], 
	int g, 
	int nch) 
{ 
	int ch; 
	int	m; 
	int sfb; 
	int si_cw_len; 
	static int prevSf[2][8]; 
 
	si_cw_len = 0; 
	for(ch = 0; ch < nch; ch++) { 
		if(start_sfb[ch][g]==0) 
			prevSf[ch][g] = scf[ch][0][0]; 
		 
		for(sfb = start_sfb[ch][g]; sfb < end_sfb[ch][g]; sfb++) {			 
			 
			if(nch == 1) { 
			} else if(stereo_si_coded[maxSfb*g+sfb] == 0) { 
				if(stereo_mode != 2) { 
					m = 0; 
					if(stereo_mode == 1) 
					{ 
						si_cw_len += BSHCDecHuff(codeBookBin,codeBookLenBin,2,&m); 
					} 
					else if(stereo_mode == 3) 
						; 
 
					switch(m) { 
					case 1: 
 
                        ps_mask[g*maxSfb + sfb + 1] = 1;       
 
						break; 
					case 2: 
						break; 
					case 3: 
						break; 
					} 
				} 
				stereo_si_coded[maxSfb*g+sfb] = 1; 
			} 
			{ 
				if(sfb==0 && g==0) 
				{ 
					continue; 
				} 
				si_cw_len += BSHCDecHuff(codeBookSf,codeBookLenSf,128,&m); 
				scf[ch][g][sfb] = m+prevSf[ch][g]-64; 
				prevSf[ch][g] = scf[ch][g][sfb]; 
			} 
			//no IS 
		} 
	} 
 
	return si_cw_len; 
} 
 
/*--------------------------------------------------------------*/ 
/***********     Bit-Sliced Spectral Data        ****************/ 
/*--------------------------------------------------------------*/ 
static int decode_spectra( 
	int	*sample[][8], 
	int s_reg, 
	int e_reg, 
	int s_freq[][64], 
	int e_freq[][64], 
	int min_bpl, 
	int available_len, 
	int model_index[][8][32], 
	int *cur_bpl[][8], 
	int *coded_samp_bit[][8], 
	int *sign_coded[][8], 
	int nch) 
{ 
	int ch, i, m, j; 
	int maxbpl; 
	int	bpl; 
	int	cband; 
	int	maxhalf; 
	int	cw_len; 
	int	reg; 
	int modelIdx; 
	int sign; 
 
	maxbpl = 0; 
	 
	for(ch = 0; ch < nch; ch++) 
	for (reg = s_reg; reg < e_reg; reg++) 
	for(i = s_freq[ch][reg]; i< e_freq[ch][reg]; i++)   
		if (maxbpl < cur_bpl[ch][reg][i]) maxbpl = cur_bpl[ch][reg][i]; 
 
	cw_len = available_len; 
	for (bpl=maxbpl; bpl>=min_bpl; bpl--) { 
 
		maxhalf = 1<<(bpl-1); 
		if (cw_len <= 0 ) return (available_len-cw_len); 
			 
		for (reg = s_reg; reg < e_reg; reg++) 
	    for (i=s_freq[0][reg]; i=0) 	 
								sample[ch][reg][i+j] += maxhalf; 
							else 					 
								sample[ch][reg][i+j] -= maxhalf; 
							coded_samp_bit[ch][reg][i+j] |= 0x01; 
						} 
				 
						if (coded_samp_bit[ch][reg][i+j] && sign_coded[ch][reg][i+j]==0) 
						{ 
							BSHCDecHuff(codeBookBin,codeBookLenBin,2,&sign); 
							if (sign) sample[ch][reg][i+j] *= -1; 
							cw_len--; 
							sign_coded[ch][reg][i+j] = 0x01; 
						} 
					} 
					 
				} 
				 
			} 
			cur_bpl[ch][reg][i]-=1; 
 
			if (cw_len <= 0 ) return (available_len-cw_len); 
		}  
	} 
	return (available_len-cw_len); 
} 
 
static int initialize_layer_data( 
	int windowSequence, 
	int num_window_groups,  
	int window_group_length[], 
	int base_band, 
	int enc_top_layer, 
	int maxSfb, 
	int	swb_offset[][52], 
	int layer_max_freq[][64], 
	int layer_max_cband[][64],  
	int layer_max_qband[][64], 
	int layer_bit_flush[], 
	int layer_reg[2][64], 
	int nch) 
{ 
	int		i, ch, g; 
	int		sfb, cband, reg; 
	int		last_freq[2][64]; 
	int		init_max_freq[2][8]; 
	int		end_freq[2][64]; 
	int		end_cband[2][64]; 
	int		layer; 
	int		slayer_size; 
 
 
	if (windowSequence == 2) { 
		for(ch = 0; ch < nch; ch++) { 
			slayer_size = 0; 
			for(g = 0; g < num_window_groups; g++) { 
 
				init_max_freq[ch][g] = base_band * window_group_length[g] * 4; 
 
				switch(sampling_rate) { 
				case 48000: 
				case 44100: 
					if ((init_max_freq[ch][g]%32) >= 16) 
						init_max_freq[ch][g] = (init_max_freq[ch][g] / 32) * 32 + 20; 
					else if ((init_max_freq[ch][g]%32) >= 4) 
						init_max_freq[ch][g] = (init_max_freq[ch][g] / 32) * 32 + 8; 
					break; 
				case 32000: 
				case 24000: 
				case 22050: 
					init_max_freq[ch][g] = (init_max_freq[ch][g] / 16) * 16; 
					break; 
				case 16000: 
				case 12000: 
				case 11025: 
					init_max_freq[ch][g] = (init_max_freq[ch][g] / 32) * 32; 
					break; 
				case  8000: 
					init_max_freq[ch][g] = (init_max_freq[ch][g] / 64) * 64; 
					break; 
				} 
 
				end_freq[ch][g] = init_max_freq[ch][g]; 
				end_cband[ch][g] = (end_freq[ch][g] + 31) / 32; 
				slayer_size += (init_max_freq[ch][g]+31)/32; 
			} 
 
			layer = 0; 
			for(g = 0; g < num_window_groups; g++) 
			for (cband = 1; cband <= end_cband[ch][g]; layer++, cband++) { 
 
				layer_reg[ch][layer] = g; 
				layer_max_freq[ch][layer] = cband * 32; 
				if (layer_max_freq[ch][layer] > init_max_freq[ch][g]) 
					layer_max_freq[ch][layer] = init_max_freq[ch][g]; 
 
				layer_max_cband[ch][layer] = cband; 
			} 
	 
			layer = slayer_size; 
			for(g = 0; g < num_window_groups; g++) { 
				for (i=0; i last_freq[ch][reg] ) 
					end_freq[ch][reg] = last_freq[ch][reg]; 
 
				layer_max_freq[ch][layer] = end_freq[ch][reg]; 
 
 
				layer_max_cband[ch][layer] = (layer_max_freq[ch][layer]+31)/32; 
			} 
 
			for (layer = 0; layer < (enc_top_layer+slayer_size-1); layer++) { 
				if (layer_max_cband[ch][layer] != layer_max_cband[ch][layer+1] || 
					layer_reg[ch][layer] != layer_reg[ch][layer+1] ) 
					layer_bit_flush[layer] = 1; 
				else 
					layer_bit_flush[layer] = 0; 
			} 
			for ( ; layer < 64; layer++) 
					layer_bit_flush[layer] = 1; 
 
			for (layer = 0; layer < 64; layer++) { 
				int	end_layer; 
 
 
				end_layer = layer; 
				while ( !layer_bit_flush[end_layer] )  
					end_layer++; 
 
				reg = layer_reg[ch][layer]; 
				for (sfb=0; sfb<14; sfb++) { 
					if (layer_max_freq[ch][end_layer] <= swb_offset[reg][sfb+1]) { 
						layer_max_qband[ch][layer] = sfb+1; 
						break; 
					} 
				} 
				if (layer_max_qband[ch][layer] > maxSfb) 
					layer_max_qband[ch][layer] = maxSfb; 
			} 
		} 
	} 
	else {		// for long type 
		for (ch = 0; ch < nch; ch++) { 
			g = 0; 
 
			for (layer = 0; layer < 64; layer++) 
				layer_reg[ch][layer] = 0; 
 
			last_freq[ch][g] = swb_offset[g][maxSfb]; 
 
			/************************************************/ 
			/* calculate layer_max_cband and layer_max_freq */ 
			/************************************************/ 
			init_max_freq[ch][g] = base_band * 32; 
 
			if (init_max_freq[ch][g] > last_freq[ch][g]) 
				init_max_freq[ch][g] = last_freq[ch][g]; 
			slayer_size = (init_max_freq[ch][g]+31) / 32; 
 
			cband = 1; 
			for (layer = 0; layer < slayer_size; layer++, cband++) { 
				layer_max_freq[ch][layer] = cband * 32; 
				if (layer_max_freq[ch][layer] > init_max_freq[ch][g]) 
					layer_max_freq[ch][layer] = init_max_freq[ch][g]; 
				layer_max_cband[ch][layer] = cband; 
			} 
 
			for (layer = slayer_size; layer < 64; layer++) { 
				switch(sampling_rate) { 
				case 48000: 
				case 44100: 
					layer_max_freq[ch][layer] = layer_max_freq[ch][layer-1] + 8; 
					if ((layer_max_freq[ch][layer]%32) != 0) 
						layer_max_freq[ch][layer] += 4; 
					break; 
 
				case 32000: 
				case 24000: 
				case 22050: 
					layer_max_freq[ch][layer] = layer_max_freq[ch][layer-1] + 16; 
					break; 
 
				case 16000: 
				case 12000: 
				case 11025: 
					layer_max_freq[ch][layer] = layer_max_freq[ch][layer-1] + 32; 
					break; 
 
				default: 
					layer_max_freq[ch][layer] = layer_max_freq[ch][layer-1] + 64; 
					break; 
				} 
				if (layer_max_freq[ch][layer] > last_freq[ch][g]) 
					layer_max_freq[ch][layer] = last_freq[ch][g]; 
 
				layer_max_cband[ch][layer] = (layer_max_freq[ch][layer]+31) / 32; 
			} 
 
			/*****************************/ 
			/* calculate layer_bit_flush */ 
			/*****************************/ 
			for (layer = 0; layer < (enc_top_layer+slayer_size-1); layer++) {  
				if (layer_max_cband[ch][layer] != layer_max_cband[ch][layer+1]) 
					layer_bit_flush[layer] = 1; 
				else 
					layer_bit_flush[layer] = 0; 
			} 
			for ( ; layer < 64; layer++) 
					layer_bit_flush[layer] = 1; 
 
			/*****************************/ 
			/* calculate layer_max_qband */ 
			/*****************************/ 
			for (layer = 0; layer < 64; layer++) { 
				int	end_layer; 
 
				end_layer = layer; 
				while (!layer_bit_flush[end_layer])  
					end_layer++; 
 
				for (sfb = 0; sfb < 49; sfb++) { 
					if (layer_max_freq[ch][end_layer] <= swb_offset[0][sfb+1]) { 
						layer_max_qband[ch][layer] = sfb+1; 
						break; 
					} 
				} 
				if (layer_max_qband[ch][layer] > maxSfb) 
					layer_max_qband[ch][layer] = maxSfb; 
			} 
		}		// for (ch = 0; ... 
	}		// else { 
 
	return slayer_size; 
}