/* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__zipimport[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,4,0,0,0,64,0,0,0,115,68,1,0,0,100,0, 90,0,100,1,100,2,108,1,90,2,100,1,100,3,108,1, 109,3,90,3,109,4,90,4,1,0,100,1,100,2,108,5, 90,6,100,1,100,2,108,7,90,7,100,1,100,2,108,8, 90,8,100,1,100,2,108,9,90,9,100,1,100,2,108,10, 90,10,100,1,100,2,108,11,90,11,100,4,100,5,103,2, 90,12,101,2,106,13,90,13,101,2,106,14,100,6,100,2, 133,2,25,0,90,15,71,0,100,7,100,4,132,0,100,4, 101,16,131,3,90,17,105,0,90,18,101,19,101,10,131,1, 90,20,100,8,90,21,100,9,90,22,100,10,90,23,71,0, 100,11,100,5,132,0,100,5,131,2,90,24,101,13,100,12, 23,0,100,13,100,13,102,3,101,13,100,14,23,0,100,15, 100,13,102,3,100,16,100,17,102,4,90,25,100,18,100,19, 132,0,90,26,100,20,100,21,132,0,90,27,100,22,100,23, 132,0,90,28,100,24,100,25,132,0,90,29,100,26,90,30, 100,15,97,31,100,27,100,28,132,0,90,32,100,29,100,30, 132,0,90,33,100,31,100,32,132,0,90,34,100,33,100,34, 132,0,90,35,101,19,101,35,106,36,131,1,90,37,100,35, 100,36,132,0,90,38,100,37,100,38,132,0,90,39,100,39, 100,40,132,0,90,40,100,41,100,42,132,0,90,41,100,43, 100,44,132,0,90,42,100,45,100,46,132,0,90,43,100,2, 83,0,41,47,97,80,2,0,0,122,105,112,105,109,112,111, 114,116,32,112,114,111,118,105,100,101,115,32,115,117,112,112, 111,114,116,32,102,111,114,32,105,109,112,111,114,116,105,110, 103,32,80,121,116,104,111,110,32,109,111,100,117,108,101,115, 32,102,114,111,109,32,90,105,112,32,97,114,99,104,105,118, 101,115,46,10,10,84,104,105,115,32,109,111,100,117,108,101, 32,101,120,112,111,114,116,115,32,116,104,114,101,101,32,111, 98,106,101,99,116,115,58,10,45,32,122,105,112,105,109,112, 111,114,116,101,114,58,32,97,32,99,108,97,115,115,59,32, 105,116,115,32,99,111,110,115,116,114,117,99,116,111,114,32, 116,97,107,101,115,32,97,32,112,97,116,104,32,116,111,32, 97,32,90,105,112,32,97,114,99,104,105,118,101,46,10,45, 32,90,105,112,73,109,112,111,114,116,69,114,114,111,114,58, 32,101,120,99,101,112,116,105,111,110,32,114,97,105,115,101, 100,32,98,121,32,122,105,112,105,109,112,111,114,116,101,114, 32,111,98,106,101,99,116,115,46,32,73,116,39,115,32,97, 10,32,32,115,117,98,99,108,97,115,115,32,111,102,32,73, 109,112,111,114,116,69,114,114,111,114,44,32,115,111,32,105, 116,32,99,97,110,32,98,101,32,99,97,117,103,104,116,32, 97,115,32,73,109,112,111,114,116,69,114,114,111,114,44,32, 116,111,111,46,10,45,32,95,122,105,112,95,100,105,114,101, 99,116,111,114,121,95,99,97,99,104,101,58,32,97,32,100, 105,99,116,44,32,109,97,112,112,105,110,103,32,97,114,99, 104,105,118,101,32,112,97,116,104,115,32,116,111,32,122,105, 112,32,100,105,114,101,99,116,111,114,121,10,32,32,105,110, 102,111,32,100,105,99,116,115,44,32,97,115,32,117,115,101, 100,32,105,110,32,122,105,112,105,109,112,111,114,116,101,114, 46,95,102,105,108,101,115,46,10,10,73,116,32,105,115,32, 117,115,117,97,108,108,121,32,110,111,116,32,110,101,101,100, 101,100,32,116,111,32,117,115,101,32,116,104,101,32,122,105, 112,105,109,112,111,114,116,32,109,111,100,117,108,101,32,101, 120,112,108,105,99,105,116,108,121,59,32,105,116,32,105,115, 10,117,115,101,100,32,98,121,32,116,104,101,32,98,117,105, 108,116,105,110,32,105,109,112,111,114,116,32,109,101,99,104, 97,110,105,115,109,32,102,111,114,32,115,121,115,46,112,97, 116,104,32,105,116,101,109,115,32,116,104,97,116,32,97,114, 101,32,112,97,116,104,115,10,116,111,32,90,105,112,32,97, 114,99,104,105,118,101,115,46,10,233,0,0,0,0,78,41, 2,218,14,95,117,110,112,97,99,107,95,117,105,110,116,49, 54,218,14,95,117,110,112,97,99,107,95,117,105,110,116,51, 50,218,14,90,105,112,73,109,112,111,114,116,69,114,114,111, 114,218,11,122,105,112,105,109,112,111,114,116,101,114,233,1, 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,64,0,0,0,115,12,0,0, 0,101,0,90,1,100,0,90,2,100,1,83,0,41,2,114, 3,0,0,0,78,41,3,218,8,95,95,110,97,109,101,95, 95,218,10,95,95,109,111,100,117,108,101,95,95,218,12,95, 95,113,117,97,108,110,97,109,101,95,95,169,0,114,9,0, 0,0,114,9,0,0,0,250,18,60,102,114,111,122,101,110, 32,122,105,112,105,109,112,111,114,116,62,114,3,0,0,0, 33,0,0,0,115,2,0,0,0,8,1,233,22,0,0,0, 115,4,0,0,0,80,75,5,6,105,255,255,0,0,99,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3, 0,0,0,64,0,0,0,115,108,0,0,0,101,0,90,1, 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, 100,25,100,5,100,6,132,1,90,5,100,26,100,7,100,8, 132,1,90,6,100,9,100,10,132,0,90,7,100,11,100,12, 132,0,90,8,100,13,100,14,132,0,90,9,100,15,100,16, 132,0,90,10,100,17,100,18,132,0,90,11,100,19,100,20, 132,0,90,12,100,21,100,22,132,0,90,13,100,23,100,24, 132,0,90,14,100,4,83,0,41,27,114,4,0,0,0,97, 255,1,0,0,122,105,112,105,109,112,111,114,116,101,114,40, 97,114,99,104,105,118,101,112,97,116,104,41,32,45,62,32, 122,105,112,105,109,112,111,114,116,101,114,32,111,98,106,101, 99,116,10,10,32,32,32,32,67,114,101,97,116,101,32,97, 32,110,101,119,32,122,105,112,105,109,112,111,114,116,101,114, 32,105,110,115,116,97,110,99,101,46,32,39,97,114,99,104, 105,118,101,112,97,116,104,39,32,109,117,115,116,32,98,101, 32,97,32,112,97,116,104,32,116,111,10,32,32,32,32,97, 32,122,105,112,102,105,108,101,44,32,111,114,32,116,111,32, 97,32,115,112,101,99,105,102,105,99,32,112,97,116,104,32, 105,110,115,105,100,101,32,97,32,122,105,112,102,105,108,101, 46,32,70,111,114,32,101,120,97,109,112,108,101,44,32,105, 116,32,99,97,110,32,98,101,10,32,32,32,32,39,47,116, 109,112,47,109,121,105,109,112,111,114,116,46,122,105,112,39, 44,32,111,114,32,39,47,116,109,112,47,109,121,105,109,112, 111,114,116,46,122,105,112,47,109,121,100,105,114,101,99,116, 111,114,121,39,44,32,105,102,32,109,121,100,105,114,101,99, 116,111,114,121,32,105,115,32,97,10,32,32,32,32,118,97, 108,105,100,32,100,105,114,101,99,116,111,114,121,32,105,110, 115,105,100,101,32,116,104,101,32,97,114,99,104,105,118,101, 46,10,10,32,32,32,32,39,90,105,112,73,109,112,111,114, 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, 32,105,102,32,39,97,114,99,104,105,118,101,112,97,116,104, 39,32,100,111,101,115,110,39,116,32,112,111,105,110,116,32, 116,111,32,97,32,118,97,108,105,100,32,90,105,112,10,32, 32,32,32,97,114,99,104,105,118,101,46,10,10,32,32,32, 32,84,104,101,32,39,97,114,99,104,105,118,101,39,32,97, 116,116,114,105,98,117,116,101,32,111,102,32,122,105,112,105, 109,112,111,114,116,101,114,32,111,98,106,101,99,116,115,32, 99,111,110,116,97,105,110,115,32,116,104,101,32,110,97,109, 101,32,111,102,32,116,104,101,10,32,32,32,32,122,105,112, 102,105,108,101,32,116,97,114,103,101,116,101,100,46,10,32, 32,32,32,99,2,0,0,0,0,0,0,0,0,0,0,0, 8,0,0,0,9,0,0,0,67,0,0,0,115,32,1,0, 0,116,0,124,1,116,1,131,2,115,28,100,1,100,0,108, 2,125,2,124,2,160,3,124,1,161,1,125,1,124,1,115, 44,116,4,100,2,124,1,100,3,141,2,130,1,116,5,114, 60,124,1,160,6,116,5,116,7,161,2,125,1,103,0,125, 3,122,14,116,8,160,9,124,1,161,1,125,4,87,0,110, 70,4,0,116,10,116,11,102,2,121,148,1,0,1,0,1, 0,116,8,160,12,124,1,161,1,92,2,125,5,125,6,124, 5,124,1,107,2,114,130,116,4,100,4,124,1,100,3,141, 2,130,1,124,5,125,1,124,3,160,13,124,6,161,1,1, 0,89,0,113,64,48,0,124,4,106,14,100,5,64,0,100, 6,107,3,114,180,116,4,100,4,124,1,100,3,141,2,130, 1,113,180,113,64,122,12,116,15,124,1,25,0,125,7,87, 0,110,34,4,0,116,16,121,226,1,0,1,0,1,0,116, 17,124,1,131,1,125,7,124,7,116,15,124,1,60,0,89, 0,110,2,48,0,124,7,124,0,95,18,124,1,124,0,95, 19,116,8,106,20,124,3,100,0,100,0,100,7,133,3,25, 0,142,0,124,0,95,21,124,0,106,21,144,1,114,28,124, 0,4,0,106,21,116,7,55,0,2,0,95,21,100,0,83, 0,41,8,78,114,0,0,0,0,122,21,97,114,99,104,105, 118,101,32,112,97,116,104,32,105,115,32,101,109,112,116,121, 169,1,218,4,112,97,116,104,122,14,110,111,116,32,97,32, 90,105,112,32,102,105,108,101,105,0,240,0,0,105,0,128, 0,0,233,255,255,255,255,41,22,218,10,105,115,105,110,115, 116,97,110,99,101,218,3,115,116,114,218,2,111,115,90,8, 102,115,100,101,99,111,100,101,114,3,0,0,0,218,12,97, 108,116,95,112,97,116,104,95,115,101,112,218,7,114,101,112, 108,97,99,101,218,8,112,97,116,104,95,115,101,112,218,19, 95,98,111,111,116,115,116,114,97,112,95,101,120,116,101,114, 110,97,108,90,10,95,112,97,116,104,95,115,116,97,116,218, 7,79,83,69,114,114,111,114,218,10,86,97,108,117,101,69, 114,114,111,114,90,11,95,112,97,116,104,95,115,112,108,105, 116,218,6,97,112,112,101,110,100,90,7,115,116,95,109,111, 100,101,218,20,95,122,105,112,95,100,105,114,101,99,116,111, 114,121,95,99,97,99,104,101,218,8,75,101,121,69,114,114, 111,114,218,15,95,114,101,97,100,95,100,105,114,101,99,116, 111,114,121,218,6,95,102,105,108,101,115,218,7,97,114,99, 104,105,118,101,218,10,95,112,97,116,104,95,106,111,105,110, 218,6,112,114,101,102,105,120,41,8,218,4,115,101,108,102, 114,13,0,0,0,114,17,0,0,0,114,31,0,0,0,90, 2,115,116,90,7,100,105,114,110,97,109,101,90,8,98,97, 115,101,110,97,109,101,218,5,102,105,108,101,115,114,9,0, 0,0,114,9,0,0,0,114,10,0,0,0,218,8,95,95, 105,110,105,116,95,95,63,0,0,0,115,58,0,0,0,0, 1,10,1,8,1,10,1,4,1,12,1,4,1,12,2,4, 2,2,1,14,1,16,3,14,1,8,1,12,1,4,1,16, 3,14,2,12,1,4,2,2,1,12,1,12,1,8,1,14, 1,6,1,6,2,22,1,8,1,122,20,122,105,112,105,109, 112,111,114,116,101,114,46,95,95,105,110,105,116,95,95,78, 99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,0, 0,4,0,0,0,67,0,0,0,115,78,0,0,0,116,0, 124,0,124,1,131,2,125,3,124,3,100,1,117,1,114,26, 124,0,103,0,102,2,83,0,116,1,124,0,124,1,131,2, 125,4,116,2,124,0,124,4,131,2,114,70,100,1,124,0, 106,3,155,0,116,4,155,0,124,4,155,0,157,3,103,1, 102,2,83,0,100,1,103,0,102,2,83,0,41,2,97,239, 1,0,0,102,105,110,100,95,108,111,97,100,101,114,40,102, 117,108,108,110,97,109,101,44,32,112,97,116,104,61,78,111, 110,101,41,32,45,62,32,115,101,108,102,44,32,115,116,114, 32,111,114,32,78,111,110,101,46,10,10,32,32,32,32,32, 32,32,32,83,101,97,114,99,104,32,102,111,114,32,97,32, 109,111,100,117,108,101,32,115,112,101,99,105,102,105,101,100, 32,98,121,32,39,102,117,108,108,110,97,109,101,39,46,32, 39,102,117,108,108,110,97,109,101,39,32,109,117,115,116,32, 98,101,32,116,104,101,10,32,32,32,32,32,32,32,32,102, 117,108,108,121,32,113,117,97,108,105,102,105,101,100,32,40, 100,111,116,116,101,100,41,32,109,111,100,117,108,101,32,110, 97,109,101,46,32,73,116,32,114,101,116,117,114,110,115,32, 116,104,101,32,122,105,112,105,109,112,111,114,116,101,114,10, 32,32,32,32,32,32,32,32,105,110,115,116,97,110,99,101, 32,105,116,115,101,108,102,32,105,102,32,116,104,101,32,109, 111,100,117,108,101,32,119,97,115,32,102,111,117,110,100,44, 32,97,32,115,116,114,105,110,103,32,99,111,110,116,97,105, 110,105,110,103,32,116,104,101,10,32,32,32,32,32,32,32, 32,102,117,108,108,32,112,97,116,104,32,110,97,109,101,32, 105,102,32,105,116,39,115,32,112,111,115,115,105,98,108,121, 32,97,32,112,111,114,116,105,111,110,32,111,102,32,97,32, 110,97,109,101,115,112,97,99,101,32,112,97,99,107,97,103, 101,44,10,32,32,32,32,32,32,32,32,111,114,32,78,111, 110,101,32,111,116,104,101,114,119,105,115,101,46,32,84,104, 101,32,111,112,116,105,111,110,97,108,32,39,112,97,116,104, 39,32,97,114,103,117,109,101,110,116,32,105,115,32,105,103, 110,111,114,101,100,32,45,45,32,105,116,39,115,10,32,32, 32,32,32,32,32,32,116,104,101,114,101,32,102,111,114,32, 99,111,109,112,97,116,105,98,105,108,105,116,121,32,119,105, 116,104,32,116,104,101,32,105,109,112,111,114,116,101,114,32, 112,114,111,116,111,99,111,108,46,10,32,32,32,32,32,32, 32,32,78,41,5,218,16,95,103,101,116,95,109,111,100,117, 108,101,95,105,110,102,111,218,16,95,103,101,116,95,109,111, 100,117,108,101,95,112,97,116,104,218,7,95,105,115,95,100, 105,114,114,29,0,0,0,114,20,0,0,0,41,5,114,32, 0,0,0,218,8,102,117,108,108,110,97,109,101,114,13,0, 0,0,218,2,109,105,218,7,109,111,100,112,97,116,104,114, 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,11, 102,105,110,100,95,108,111,97,100,101,114,109,0,0,0,115, 14,0,0,0,0,10,10,1,8,2,8,7,10,1,10,4, 24,2,122,23,122,105,112,105,109,112,111,114,116,101,114,46, 102,105,110,100,95,108,111,97,100,101,114,99,3,0,0,0, 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0, 67,0,0,0,115,16,0,0,0,124,0,160,0,124,1,124, 2,161,2,100,1,25,0,83,0,41,2,97,139,1,0,0, 102,105,110,100,95,109,111,100,117,108,101,40,102,117,108,108, 110,97,109,101,44,32,112,97,116,104,61,78,111,110,101,41, 32,45,62,32,115,101,108,102,32,111,114,32,78,111,110,101, 46,10,10,32,32,32,32,32,32,32,32,83,101,97,114,99, 104,32,102,111,114,32,97,32,109,111,100,117,108,101,32,115, 112,101,99,105,102,105,101,100,32,98,121,32,39,102,117,108, 108,110,97,109,101,39,46,32,39,102,117,108,108,110,97,109, 101,39,32,109,117,115,116,32,98,101,32,116,104,101,10,32, 32,32,32,32,32,32,32,102,117,108,108,121,32,113,117,97, 108,105,102,105,101,100,32,40,100,111,116,116,101,100,41,32, 109,111,100,117,108,101,32,110,97,109,101,46,32,73,116,32, 114,101,116,117,114,110,115,32,116,104,101,32,122,105,112,105, 109,112,111,114,116,101,114,10,32,32,32,32,32,32,32,32, 105,110,115,116,97,110,99,101,32,105,116,115,101,108,102,32, 105,102,32,116,104,101,32,109,111,100,117,108,101,32,119,97, 115,32,102,111,117,110,100,44,32,111,114,32,78,111,110,101, 32,105,102,32,105,116,32,119,97,115,110,39,116,46,10,32, 32,32,32,32,32,32,32,84,104,101,32,111,112,116,105,111, 110,97,108,32,39,112,97,116,104,39,32,97,114,103,117,109, 101,110,116,32,105,115,32,105,103,110,111,114,101,100,32,45, 45,32,105,116,39,115,32,116,104,101,114,101,32,102,111,114, 32,99,111,109,112,97,116,105,98,105,108,105,116,121,10,32, 32,32,32,32,32,32,32,119,105,116,104,32,116,104,101,32, 105,109,112,111,114,116,101,114,32,112,114,111,116,111,99,111, 108,46,10,32,32,32,32,32,32,32,32,114,0,0,0,0, 41,1,114,41,0,0,0,41,3,114,32,0,0,0,114,38, 0,0,0,114,13,0,0,0,114,9,0,0,0,114,9,0, 0,0,114,10,0,0,0,218,11,102,105,110,100,95,109,111, 100,117,108,101,141,0,0,0,115,2,0,0,0,0,9,122, 23,122,105,112,105,109,112,111,114,116,101,114,46,102,105,110, 100,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, 0,0,0,0,0,5,0,0,0,3,0,0,0,67,0,0, 0,115,20,0,0,0,116,0,124,0,124,1,131,2,92,3, 125,2,125,3,125,4,124,2,83,0,41,1,122,163,103,101, 116,95,99,111,100,101,40,102,117,108,108,110,97,109,101,41, 32,45,62,32,99,111,100,101,32,111,98,106,101,99,116,46, 10,10,32,32,32,32,32,32,32,32,82,101,116,117,114,110, 32,116,104,101,32,99,111,100,101,32,111,98,106,101,99,116, 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, 101,100,32,109,111,100,117,108,101,46,32,82,97,105,115,101, 32,90,105,112,73,109,112,111,114,116,69,114,114,111,114,10, 32,32,32,32,32,32,32,32,105,102,32,116,104,101,32,109, 111,100,117,108,101,32,99,111,117,108,100,110,39,116,32,98, 101,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32, 32,169,1,218,16,95,103,101,116,95,109,111,100,117,108,101, 95,99,111,100,101,169,5,114,32,0,0,0,114,38,0,0, 0,218,4,99,111,100,101,218,9,105,115,112,97,99,107,97, 103,101,114,40,0,0,0,114,9,0,0,0,114,9,0,0, 0,114,10,0,0,0,218,8,103,101,116,95,99,111,100,101, 153,0,0,0,115,4,0,0,0,0,6,16,1,122,20,122, 105,112,105,109,112,111,114,116,101,114,46,103,101,116,95,99, 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0, 4,0,0,0,8,0,0,0,67,0,0,0,115,116,0,0, 0,116,0,114,16,124,1,160,1,116,0,116,2,161,2,125, 1,124,1,125,2,124,1,160,3,124,0,106,4,116,2,23, 0,161,1,114,58,124,1,116,5,124,0,106,4,116,2,23, 0,131,1,100,1,133,2,25,0,125,2,122,14,124,0,106, 6,124,2,25,0,125,3,87,0,110,30,4,0,116,7,121, 102,1,0,1,0,1,0,116,8,100,2,100,3,124,2,131, 3,130,1,89,0,110,2,48,0,116,9,124,0,106,4,124, 3,131,2,83,0,41,4,122,154,103,101,116,95,100,97,116, 97,40,112,97,116,104,110,97,109,101,41,32,45,62,32,115, 116,114,105,110,103,32,119,105,116,104,32,102,105,108,101,32, 100,97,116,97,46,10,10,32,32,32,32,32,32,32,32,82, 101,116,117,114,110,32,116,104,101,32,100,97,116,97,32,97, 115,115,111,99,105,97,116,101,100,32,119,105,116,104,32,39, 112,97,116,104,110,97,109,101,39,46,32,82,97,105,115,101, 32,79,83,69,114,114,111,114,32,105,102,10,32,32,32,32, 32,32,32,32,116,104,101,32,102,105,108,101,32,119,97,115, 110,39,116,32,102,111,117,110,100,46,10,32,32,32,32,32, 32,32,32,78,114,0,0,0,0,218,0,41,10,114,18,0, 0,0,114,19,0,0,0,114,20,0,0,0,218,10,115,116, 97,114,116,115,119,105,116,104,114,29,0,0,0,218,3,108, 101,110,114,28,0,0,0,114,26,0,0,0,114,22,0,0, 0,218,9,95,103,101,116,95,100,97,116,97,41,4,114,32, 0,0,0,218,8,112,97,116,104,110,97,109,101,90,3,107, 101,121,218,9,116,111,99,95,101,110,116,114,121,114,9,0, 0,0,114,9,0,0,0,114,10,0,0,0,218,8,103,101, 116,95,100,97,116,97,163,0,0,0,115,20,0,0,0,0, 6,4,1,12,2,4,1,16,1,22,2,2,1,14,1,12, 1,18,1,122,20,122,105,112,105,109,112,111,114,116,101,114, 46,103,101,116,95,100,97,116,97,99,2,0,0,0,0,0, 0,0,0,0,0,0,5,0,0,0,3,0,0,0,67,0, 0,0,115,20,0,0,0,116,0,124,0,124,1,131,2,92, 3,125,2,125,3,125,4,124,4,83,0,41,1,122,106,103, 101,116,95,102,105,108,101,110,97,109,101,40,102,117,108,108, 110,97,109,101,41,32,45,62,32,102,105,108,101,110,97,109, 101,32,115,116,114,105,110,103,46,10,10,32,32,32,32,32, 32,32,32,82,101,116,117,114,110,32,116,104,101,32,102,105, 108,101,110,97,109,101,32,102,111,114,32,116,104,101,32,115, 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,46, 10,32,32,32,32,32,32,32,32,114,43,0,0,0,114,45, 0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0, 0,0,218,12,103,101,116,95,102,105,108,101,110,97,109,101, 184,0,0,0,115,4,0,0,0,0,7,16,1,122,24,122, 105,112,105,109,112,111,114,116,101,114,46,103,101,116,95,102, 105,108,101,110,97,109,101,99,2,0,0,0,0,0,0,0, 0,0,0,0,6,0,0,0,8,0,0,0,67,0,0,0, 115,126,0,0,0,116,0,124,0,124,1,131,2,125,2,124, 2,100,1,117,0,114,36,116,1,100,2,124,1,155,2,157, 2,124,1,100,3,141,2,130,1,116,2,124,0,124,1,131, 2,125,3,124,2,114,64,116,3,160,4,124,3,100,4,161, 2,125,4,110,10,124,3,155,0,100,5,157,2,125,4,122, 14,124,0,106,5,124,4,25,0,125,5,87,0,110,20,4, 0,116,6,121,108,1,0,1,0,1,0,89,0,100,1,83, 0,48,0,116,7,124,0,106,8,124,5,131,2,160,9,161, 0,83,0,41,6,122,253,103,101,116,95,115,111,117,114,99, 101,40,102,117,108,108,110,97,109,101,41,32,45,62,32,115, 111,117,114,99,101,32,115,116,114,105,110,103,46,10,10,32, 32,32,32,32,32,32,32,82,101,116,117,114,110,32,116,104, 101,32,115,111,117,114,99,101,32,99,111,100,101,32,102,111, 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, 109,111,100,117,108,101,46,32,82,97,105,115,101,32,90,105, 112,73,109,112,111,114,116,69,114,114,111,114,10,32,32,32, 32,32,32,32,32,105,102,32,116,104,101,32,109,111,100,117, 108,101,32,99,111,117,108,100,110,39,116,32,98,101,32,102, 111,117,110,100,44,32,114,101,116,117,114,110,32,78,111,110, 101,32,105,102,32,116,104,101,32,97,114,99,104,105,118,101, 32,100,111,101,115,10,32,32,32,32,32,32,32,32,99,111, 110,116,97,105,110,32,116,104,101,32,109,111,100,117,108,101, 44,32,98,117,116,32,104,97,115,32,110,111,32,115,111,117, 114,99,101,32,102,111,114,32,105,116,46,10,32,32,32,32, 32,32,32,32,78,250,18,99,97,110,39,116,32,102,105,110, 100,32,109,111,100,117,108,101,32,169,1,218,4,110,97,109, 101,250,11,95,95,105,110,105,116,95,95,46,112,121,250,3, 46,112,121,41,10,114,35,0,0,0,114,3,0,0,0,114, 36,0,0,0,114,21,0,0,0,114,30,0,0,0,114,28, 0,0,0,114,26,0,0,0,114,52,0,0,0,114,29,0, 0,0,218,6,100,101,99,111,100,101,41,6,114,32,0,0, 0,114,38,0,0,0,114,39,0,0,0,114,13,0,0,0, 218,8,102,117,108,108,112,97,116,104,114,54,0,0,0,114, 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,10, 103,101,116,95,115,111,117,114,99,101,195,0,0,0,115,24, 0,0,0,0,7,10,1,8,1,18,2,10,1,4,1,14, 2,10,2,2,1,14,1,12,2,8,1,122,22,122,105,112, 105,109,112,111,114,116,101,114,46,103,101,116,95,115,111,117, 114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,4,0,0,0,67,0,0,0,115,40,0,0, 0,116,0,124,0,124,1,131,2,125,2,124,2,100,1,117, 0,114,36,116,1,100,2,124,1,155,2,157,2,124,1,100, 3,141,2,130,1,124,2,83,0,41,4,122,171,105,115,95, 112,97,99,107,97,103,101,40,102,117,108,108,110,97,109,101, 41,32,45,62,32,98,111,111,108,46,10,10,32,32,32,32, 32,32,32,32,82,101,116,117,114,110,32,84,114,117,101,32, 105,102,32,116,104,101,32,109,111,100,117,108,101,32,115,112, 101,99,105,102,105,101,100,32,98,121,32,102,117,108,108,110, 97,109,101,32,105,115,32,97,32,112,97,99,107,97,103,101, 46,10,32,32,32,32,32,32,32,32,82,97,105,115,101,32, 90,105,112,73,109,112,111,114,116,69,114,114,111,114,32,105, 102,32,116,104,101,32,109,111,100,117,108,101,32,99,111,117, 108,100,110,39,116,32,98,101,32,102,111,117,110,100,46,10, 32,32,32,32,32,32,32,32,78,114,57,0,0,0,114,58, 0,0,0,41,2,114,35,0,0,0,114,3,0,0,0,41, 3,114,32,0,0,0,114,38,0,0,0,114,39,0,0,0, 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218, 10,105,115,95,112,97,99,107,97,103,101,221,0,0,0,115, 8,0,0,0,0,6,10,1,8,1,18,1,122,22,122,105, 112,105,109,112,111,114,116,101,114,46,105,115,95,112,97,99, 107,97,103,101,99,2,0,0,0,0,0,0,0,0,0,0, 0,8,0,0,0,8,0,0,0,67,0,0,0,115,246,0, 0,0,116,0,124,0,124,1,131,2,92,3,125,2,125,3, 125,4,116,1,106,2,160,3,124,1,161,1,125,5,124,5, 100,1,117,0,115,46,116,4,124,5,116,5,131,2,115,64, 116,5,124,1,131,1,125,5,124,5,116,1,106,2,124,1, 60,0,124,0,124,5,95,6,122,84,124,3,114,108,116,7, 124,0,124,1,131,2,125,6,116,8,160,9,124,0,106,10, 124,6,161,2,125,7,124,7,103,1,124,5,95,11,116,12, 124,5,100,2,131,2,115,124,116,13,124,5,95,13,116,8, 160,14,124,5,106,15,124,1,124,4,161,3,1,0,116,16, 124,2,124,5,106,15,131,2,1,0,87,0,110,22,1,0, 1,0,1,0,116,1,106,2,124,1,61,0,130,0,89,0, 110,2,48,0,122,14,116,1,106,2,124,1,25,0,125,5, 87,0,110,34,4,0,116,17,121,226,1,0,1,0,1,0, 116,18,100,3,124,1,155,2,100,4,157,3,131,1,130,1, 89,0,110,2,48,0,116,19,160,20,100,5,124,1,124,4, 161,3,1,0,124,5,83,0,41,6,122,245,108,111,97,100, 95,109,111,100,117,108,101,40,102,117,108,108,110,97,109,101, 41,32,45,62,32,109,111,100,117,108,101,46,10,10,32,32, 32,32,32,32,32,32,76,111,97,100,32,116,104,101,32,109, 111,100,117,108,101,32,115,112,101,99,105,102,105,101,100,32, 98,121,32,39,102,117,108,108,110,97,109,101,39,46,32,39, 102,117,108,108,110,97,109,101,39,32,109,117,115,116,32,98, 101,32,116,104,101,10,32,32,32,32,32,32,32,32,102,117, 108,108,121,32,113,117,97,108,105,102,105,101,100,32,40,100, 111,116,116,101,100,41,32,109,111,100,117,108,101,32,110,97, 109,101,46,32,73,116,32,114,101,116,117,114,110,115,32,116, 104,101,32,105,109,112,111,114,116,101,100,10,32,32,32,32, 32,32,32,32,109,111,100,117,108,101,44,32,111,114,32,114, 97,105,115,101,115,32,90,105,112,73,109,112,111,114,116,69, 114,114,111,114,32,105,102,32,105,116,32,119,97,115,110,39, 116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32, 32,78,218,12,95,95,98,117,105,108,116,105,110,115,95,95, 122,14,76,111,97,100,101,100,32,109,111,100,117,108,101,32, 122,25,32,110,111,116,32,102,111,117,110,100,32,105,110,32, 115,121,115,46,109,111,100,117,108,101,115,122,30,105,109,112, 111,114,116,32,123,125,32,35,32,108,111,97,100,101,100,32, 102,114,111,109,32,90,105,112,32,123,125,41,21,114,44,0, 0,0,218,3,115,121,115,218,7,109,111,100,117,108,101,115, 218,3,103,101,116,114,15,0,0,0,218,12,95,109,111,100, 117,108,101,95,116,121,112,101,218,10,95,95,108,111,97,100, 101,114,95,95,114,36,0,0,0,114,21,0,0,0,114,30, 0,0,0,114,29,0,0,0,90,8,95,95,112,97,116,104, 95,95,218,7,104,97,115,97,116,116,114,114,66,0,0,0, 90,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, 218,8,95,95,100,105,99,116,95,95,218,4,101,120,101,99, 114,26,0,0,0,218,11,73,109,112,111,114,116,69,114,114, 111,114,218,10,95,98,111,111,116,115,116,114,97,112,218,16, 95,118,101,114,98,111,115,101,95,109,101,115,115,97,103,101, 41,8,114,32,0,0,0,114,38,0,0,0,114,46,0,0, 0,114,47,0,0,0,114,40,0,0,0,90,3,109,111,100, 114,13,0,0,0,114,63,0,0,0,114,9,0,0,0,114, 9,0,0,0,114,10,0,0,0,218,11,108,111,97,100,95, 109,111,100,117,108,101,234,0,0,0,115,48,0,0,0,0, 7,16,1,12,1,18,1,8,1,10,1,6,2,2,1,4, 3,10,1,14,1,8,2,10,1,6,1,16,1,16,1,6, 1,8,1,8,2,2,1,14,1,12,1,22,1,14,1,122, 23,122,105,112,105,109,112,111,114,116,101,114,46,108,111,97, 100,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, 0,0,0,0,0,3,0,0,0,8,0,0,0,67,0,0, 0,115,64,0,0,0,122,20,124,0,160,0,124,1,161,1, 115,18,87,0,100,1,83,0,87,0,110,20,4,0,116,1, 121,40,1,0,1,0,1,0,89,0,100,1,83,0,48,0, 100,2,100,3,108,2,109,3,125,2,1,0,124,2,124,0, 124,1,131,2,83,0,41,4,122,204,82,101,116,117,114,110, 32,116,104,101,32,82,101,115,111,117,114,99,101,82,101,97, 100,101,114,32,102,111,114,32,97,32,112,97,99,107,97,103, 101,32,105,110,32,97,32,122,105,112,32,102,105,108,101,46, 10,10,32,32,32,32,32,32,32,32,73,102,32,39,102,117, 108,108,110,97,109,101,39,32,105,115,32,97,32,112,97,99, 107,97,103,101,32,119,105,116,104,105,110,32,116,104,101,32, 122,105,112,32,102,105,108,101,44,32,114,101,116,117,114,110, 32,116,104,101,10,32,32,32,32,32,32,32,32,39,82,101, 115,111,117,114,99,101,82,101,97,100,101,114,39,32,111,98, 106,101,99,116,32,102,111,114,32,116,104,101,32,112,97,99, 107,97,103,101,46,32,32,79,116,104,101,114,119,105,115,101, 32,114,101,116,117,114,110,32,78,111,110,101,46,10,32,32, 32,32,32,32,32,32,78,114,0,0,0,0,41,1,218,9, 90,105,112,82,101,97,100,101,114,41,4,114,65,0,0,0, 114,3,0,0,0,90,17,105,109,112,111,114,116,108,105,98, 46,114,101,97,100,101,114,115,114,79,0,0,0,41,3,114, 32,0,0,0,114,38,0,0,0,114,79,0,0,0,114,9, 0,0,0,114,9,0,0,0,114,10,0,0,0,218,19,103, 101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100, 101,114,16,1,0,0,115,14,0,0,0,0,6,2,1,10, 1,10,1,12,1,8,1,12,1,122,31,122,105,112,105,109, 112,111,114,116,101,114,46,103,101,116,95,114,101,115,111,117, 114,99,101,95,114,101,97,100,101,114,99,1,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,67, 0,0,0,115,24,0,0,0,100,1,124,0,106,0,155,0, 116,1,155,0,124,0,106,2,155,0,100,2,157,5,83,0, 41,3,78,122,21,60,122,105,112,105,109,112,111,114,116,101, 114,32,111,98,106,101,99,116,32,34,122,2,34,62,41,3, 114,29,0,0,0,114,20,0,0,0,114,31,0,0,0,41, 1,114,32,0,0,0,114,9,0,0,0,114,9,0,0,0, 114,10,0,0,0,218,8,95,95,114,101,112,114,95,95,31, 1,0,0,115,2,0,0,0,0,1,122,20,122,105,112,105, 109,112,111,114,116,101,114,46,95,95,114,101,112,114,95,95, 41,1,78,41,1,78,41,15,114,6,0,0,0,114,7,0, 0,0,114,8,0,0,0,218,7,95,95,100,111,99,95,95, 114,34,0,0,0,114,41,0,0,0,114,42,0,0,0,114, 48,0,0,0,114,55,0,0,0,114,56,0,0,0,114,64, 0,0,0,114,65,0,0,0,114,78,0,0,0,114,80,0, 0,0,114,81,0,0,0,114,9,0,0,0,114,9,0,0, 0,114,9,0,0,0,114,10,0,0,0,114,4,0,0,0, 45,0,0,0,115,24,0,0,0,8,1,4,17,8,46,10, 32,10,12,8,10,8,21,8,11,8,26,8,13,8,38,8, 15,122,12,95,95,105,110,105,116,95,95,46,112,121,99,84, 114,60,0,0,0,70,41,3,122,4,46,112,121,99,84,70, 41,3,114,61,0,0,0,70,70,99,2,0,0,0,0,0, 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, 0,0,115,20,0,0,0,124,0,106,0,124,1,160,1,100, 1,161,1,100,2,25,0,23,0,83,0,41,3,78,218,1, 46,233,2,0,0,0,41,2,114,31,0,0,0,218,10,114, 112,97,114,116,105,116,105,111,110,41,2,114,32,0,0,0, 114,38,0,0,0,114,9,0,0,0,114,9,0,0,0,114, 10,0,0,0,114,36,0,0,0,49,1,0,0,115,2,0, 0,0,0,1,114,36,0,0,0,99,2,0,0,0,0,0, 0,0,0,0,0,0,3,0,0,0,2,0,0,0,67,0, 0,0,115,18,0,0,0,124,1,116,0,23,0,125,2,124, 2,124,0,106,1,118,0,83,0,169,1,78,41,2,114,20, 0,0,0,114,28,0,0,0,41,3,114,32,0,0,0,114, 13,0,0,0,90,7,100,105,114,112,97,116,104,114,9,0, 0,0,114,9,0,0,0,114,10,0,0,0,114,37,0,0, 0,53,1,0,0,115,4,0,0,0,0,4,8,2,114,37, 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, 7,0,0,0,4,0,0,0,67,0,0,0,115,56,0,0, 0,116,0,124,0,124,1,131,2,125,2,116,1,68,0,93, 36,92,3,125,3,125,4,125,5,124,2,124,3,23,0,125, 6,124,6,124,0,106,2,118,0,114,14,124,5,2,0,1, 0,83,0,113,14,100,0,83,0,114,86,0,0,0,41,3, 114,36,0,0,0,218,16,95,122,105,112,95,115,101,97,114, 99,104,111,114,100,101,114,114,28,0,0,0,41,7,114,32, 0,0,0,114,38,0,0,0,114,13,0,0,0,218,6,115, 117,102,102,105,120,218,10,105,115,98,121,116,101,99,111,100, 101,114,47,0,0,0,114,63,0,0,0,114,9,0,0,0, 114,9,0,0,0,114,10,0,0,0,114,35,0,0,0,62, 1,0,0,115,12,0,0,0,0,1,10,1,14,1,8,1, 10,1,10,1,114,35,0,0,0,99,1,0,0,0,0,0, 0,0,0,0,0,0,26,0,0,0,9,0,0,0,67,0, 0,0,115,2,5,0,0,122,14,116,0,160,1,124,0,161, 1,125,1,87,0,110,36,4,0,116,2,121,50,1,0,1, 0,1,0,116,3,100,1,124,0,155,2,157,2,124,0,100, 2,141,2,130,1,89,0,110,2,48,0,124,1,144,4,143, 164,1,0,122,36,124,1,160,4,116,5,11,0,100,3,161, 2,1,0,124,1,160,6,161,0,125,2,124,1,160,7,116, 5,161,1,125,3,87,0,110,36,4,0,116,2,121,132,1, 0,1,0,1,0,116,3,100,4,124,0,155,2,157,2,124, 0,100,2,141,2,130,1,89,0,110,2,48,0,116,8,124, 3,131,1,116,5,107,3,114,164,116,3,100,4,124,0,155, 2,157,2,124,0,100,2,141,2,130,1,124,3,100,0,100, 5,133,2,25,0,116,9,107,3,144,1,114,170,122,24,124, 1,160,4,100,6,100,3,161,2,1,0,124,1,160,6,161, 0,125,4,87,0,110,36,4,0,116,2,121,242,1,0,1, 0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,100, 2,141,2,130,1,89,0,110,2,48,0,116,10,124,4,116, 11,24,0,116,5,24,0,100,6,131,2,125,5,122,22,124, 1,160,4,124,5,161,1,1,0,124,1,160,7,161,0,125, 6,87,0,110,38,4,0,116,2,144,1,121,66,1,0,1, 0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,100, 2,141,2,130,1,89,0,110,2,48,0,124,6,160,12,116, 9,161,1,125,7,124,7,100,6,107,0,144,1,114,106,116, 3,100,7,124,0,155,2,157,2,124,0,100,2,141,2,130, 1,124,6,124,7,124,7,116,5,23,0,133,2,25,0,125, 3,116,8,124,3,131,1,116,5,107,3,144,1,114,154,116, 3,100,8,124,0,155,2,157,2,124,0,100,2,141,2,130, 1,124,4,116,8,124,6,131,1,24,0,124,7,23,0,125, 2,116,13,124,3,100,9,100,10,133,2,25,0,131,1,125, 8,116,13,124,3,100,10,100,11,133,2,25,0,131,1,125, 9,124,2,124,8,107,0,144,1,114,230,116,3,100,12,124, 0,155,2,157,2,124,0,100,2,141,2,130,1,124,2,124, 9,107,0,144,2,114,2,116,3,100,13,124,0,155,2,157, 2,124,0,100,2,141,2,130,1,124,2,124,8,56,0,125, 2,124,2,124,9,24,0,125,10,124,10,100,6,107,0,144, 2,114,46,116,3,100,14,124,0,155,2,157,2,124,0,100, 2,141,2,130,1,105,0,125,11,100,6,125,12,122,14,124, 1,160,4,124,2,161,1,1,0,87,0,110,38,4,0,116, 2,144,2,121,106,1,0,1,0,1,0,116,3,100,4,124, 0,155,2,157,2,124,0,100,2,141,2,130,1,89,0,110, 2,48,0,124,1,160,7,100,15,161,1,125,3,116,8,124, 3,131,1,100,5,107,0,144,2,114,140,116,14,100,16,131, 1,130,1,124,3,100,0,100,5,133,2,25,0,100,17,107, 3,144,2,114,162,144,4,113,208,116,8,124,3,131,1,100, 15,107,3,144,2,114,184,116,14,100,16,131,1,130,1,116, 15,124,3,100,18,100,19,133,2,25,0,131,1,125,13,116, 15,124,3,100,19,100,9,133,2,25,0,131,1,125,14,116, 15,124,3,100,9,100,20,133,2,25,0,131,1,125,15,116, 15,124,3,100,20,100,10,133,2,25,0,131,1,125,16,116, 13,124,3,100,10,100,11,133,2,25,0,131,1,125,17,116, 13,124,3,100,11,100,21,133,2,25,0,131,1,125,18,116, 13,124,3,100,21,100,22,133,2,25,0,131,1,125,4,116, 15,124,3,100,22,100,23,133,2,25,0,131,1,125,19,116, 15,124,3,100,23,100,24,133,2,25,0,131,1,125,20,116, 15,124,3,100,24,100,25,133,2,25,0,131,1,125,21,116, 13,124,3,100,26,100,15,133,2,25,0,131,1,125,22,124, 19,124,20,23,0,124,21,23,0,125,8,124,22,124,9,107, 4,144,3,114,144,116,3,100,27,124,0,155,2,157,2,124, 0,100,2,141,2,130,1,124,22,124,10,55,0,125,22,122, 14,124,1,160,7,124,19,161,1,125,23,87,0,110,38,4, 0,116,2,144,3,121,204,1,0,1,0,1,0,116,3,100, 4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,89, 0,110,2,48,0,116,8,124,23,131,1,124,19,107,3,144, 3,114,238,116,3,100,4,124,0,155,2,157,2,124,0,100, 2,141,2,130,1,122,50,116,8,124,1,160,7,124,8,124, 19,24,0,161,1,131,1,124,8,124,19,24,0,107,3,144, 4,114,30,116,3,100,4,124,0,155,2,157,2,124,0,100, 2,141,2,130,1,87,0,110,38,4,0,116,2,144,4,121, 70,1,0,1,0,1,0,116,3,100,4,124,0,155,2,157, 2,124,0,100,2,141,2,130,1,89,0,110,2,48,0,124, 13,100,28,64,0,144,4,114,92,124,23,160,16,161,0,125, 23,110,52,122,14,124,23,160,16,100,29,161,1,125,23,87, 0,110,36,4,0,116,17,144,4,121,142,1,0,1,0,1, 0,124,23,160,16,100,30,161,1,160,18,116,19,161,1,125, 23,89,0,110,2,48,0,124,23,160,20,100,31,116,21,161, 2,125,23,116,22,160,23,124,0,124,23,161,2,125,24,124, 24,124,14,124,18,124,4,124,22,124,15,124,16,124,17,102, 8,125,25,124,25,124,11,124,23,60,0,124,12,100,32,55, 0,125,12,144,2,113,108,87,0,100,0,4,0,4,0,131, 3,1,0,110,18,49,0,144,4,115,230,48,0,1,0,1, 0,1,0,89,0,1,0,116,24,160,25,100,33,124,12,124, 0,161,3,1,0,124,11,83,0,41,34,78,122,21,99,97, 110,39,116,32,111,112,101,110,32,90,105,112,32,102,105,108, 101,58,32,114,12,0,0,0,114,84,0,0,0,250,21,99, 97,110,39,116,32,114,101,97,100,32,90,105,112,32,102,105, 108,101,58,32,233,4,0,0,0,114,0,0,0,0,122,16, 110,111,116,32,97,32,90,105,112,32,102,105,108,101,58,32, 122,18,99,111,114,114,117,112,116,32,90,105,112,32,102,105, 108,101,58,32,233,12,0,0,0,233,16,0,0,0,233,20, 0,0,0,122,28,98,97,100,32,99,101,110,116,114,97,108, 32,100,105,114,101,99,116,111,114,121,32,115,105,122,101,58, 32,122,30,98,97,100,32,99,101,110,116,114,97,108,32,100, 105,114,101,99,116,111,114,121,32,111,102,102,115,101,116,58, 32,122,38,98,97,100,32,99,101,110,116,114,97,108,32,100, 105,114,101,99,116,111,114,121,32,115,105,122,101,32,111,114, 32,111,102,102,115,101,116,58,32,233,46,0,0,0,250,27, 69,79,70,32,114,101,97,100,32,119,104,101,114,101,32,110, 111,116,32,101,120,112,101,99,116,101,100,115,4,0,0,0, 80,75,1,2,233,8,0,0,0,233,10,0,0,0,233,14, 0,0,0,233,24,0,0,0,233,28,0,0,0,233,30,0, 0,0,233,32,0,0,0,233,34,0,0,0,233,42,0,0, 0,122,25,98,97,100,32,108,111,99,97,108,32,104,101,97, 100,101,114,32,111,102,102,115,101,116,58,32,105,0,8,0, 0,218,5,97,115,99,105,105,90,6,108,97,116,105,110,49, 250,1,47,114,5,0,0,0,122,33,122,105,112,105,109,112, 111,114,116,58,32,102,111,117,110,100,32,123,125,32,110,97, 109,101,115,32,105,110,32,123,33,114,125,41,26,218,3,95, 105,111,218,9,111,112,101,110,95,99,111,100,101,114,22,0, 0,0,114,3,0,0,0,218,4,115,101,101,107,218,20,69, 78,68,95,67,69,78,84,82,65,76,95,68,73,82,95,83, 73,90,69,90,4,116,101,108,108,218,4,114,101,97,100,114, 51,0,0,0,218,18,83,84,82,73,78,71,95,69,78,68, 95,65,82,67,72,73,86,69,218,3,109,97,120,218,15,77, 65,88,95,67,79,77,77,69,78,84,95,76,69,78,218,5, 114,102,105,110,100,114,2,0,0,0,218,8,69,79,70,69, 114,114,111,114,114,1,0,0,0,114,62,0,0,0,218,18, 85,110,105,99,111,100,101,68,101,99,111,100,101,69,114,114, 111,114,218,9,116,114,97,110,115,108,97,116,101,218,11,99, 112,52,51,55,95,116,97,98,108,101,114,19,0,0,0,114, 20,0,0,0,114,21,0,0,0,114,30,0,0,0,114,76, 0,0,0,114,77,0,0,0,41,26,114,29,0,0,0,218, 2,102,112,90,15,104,101,97,100,101,114,95,112,111,115,105, 116,105,111,110,218,6,98,117,102,102,101,114,218,9,102,105, 108,101,95,115,105,122,101,90,17,109,97,120,95,99,111,109, 109,101,110,116,95,115,116,97,114,116,218,4,100,97,116,97, 90,3,112,111,115,218,11,104,101,97,100,101,114,95,115,105, 122,101,90,13,104,101,97,100,101,114,95,111,102,102,115,101, 116,90,10,97,114,99,95,111,102,102,115,101,116,114,33,0, 0,0,218,5,99,111,117,110,116,218,5,102,108,97,103,115, 218,8,99,111,109,112,114,101,115,115,218,4,116,105,109,101, 218,4,100,97,116,101,218,3,99,114,99,218,9,100,97,116, 97,95,115,105,122,101,218,9,110,97,109,101,95,115,105,122, 101,218,10,101,120,116,114,97,95,115,105,122,101,90,12,99, 111,109,109,101,110,116,95,115,105,122,101,218,11,102,105,108, 101,95,111,102,102,115,101,116,114,59,0,0,0,114,13,0, 0,0,218,1,116,114,9,0,0,0,114,9,0,0,0,114, 10,0,0,0,114,27,0,0,0,93,1,0,0,115,212,0, 0,0,0,1,2,1,14,1,12,1,24,2,8,1,2,1, 14,1,8,1,14,1,12,1,24,1,12,1,18,1,18,3, 2,1,12,1,12,1,12,1,10,1,2,255,12,2,8,1, 2,255,2,1,2,255,4,2,2,1,10,1,12,1,14,1, 10,1,2,255,12,2,10,1,10,1,10,1,2,255,6,2, 16,1,14,1,10,1,2,255,6,2,16,2,16,1,16,1, 10,1,18,1,10,1,18,1,8,1,8,1,10,1,18,2, 4,2,4,1,2,1,14,1,14,1,24,2,10,1,14,1, 8,2,18,1,4,1,14,1,8,1,16,1,16,1,16,1, 16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1, 12,1,10,1,18,1,8,2,2,1,14,1,14,1,24,1, 14,1,18,4,2,1,28,1,22,1,14,1,24,2,10,2, 10,3,2,1,14,1,14,1,22,2,12,1,12,1,20,1, 8,1,44,1,14,1,114,27,0,0,0,117,190,1,0,0, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31, 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95, 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111, 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127, 195,135,195,188,195,169,195,162,195,164,195,160,195,165,195,167, 195,170,195,171,195,168,195,175,195,174,195,172,195,132,195,133, 195,137,195,166,195,134,195,180,195,182,195,178,195,187,195,185, 195,191,195,150,195,156,194,162,194,163,194,165,226,130,167,198, 146,195,161,195,173,195,179,195,186,195,177,195,145,194,170,194, 186,194,191,226,140,144,194,172,194,189,194,188,194,161,194,171, 194,187,226,150,145,226,150,146,226,150,147,226,148,130,226,148, 164,226,149,161,226,149,162,226,149,150,226,149,149,226,149,163, 226,149,145,226,149,151,226,149,157,226,149,156,226,149,155,226, 148,144,226,148,148,226,148,180,226,148,172,226,148,156,226,148, 128,226,148,188,226,149,158,226,149,159,226,149,154,226,149,148, 226,149,169,226,149,166,226,149,160,226,149,144,226,149,172,226, 149,167,226,149,168,226,149,164,226,149,165,226,149,153,226,149, 152,226,149,146,226,149,147,226,149,171,226,149,170,226,148,152, 226,148,140,226,150,136,226,150,132,226,150,140,226,150,144,226, 150,128,206,177,195,159,206,147,207,128,206,163,207,131,194,181, 207,132,206,166,206,152,206,169,206,180,226,136,158,207,134,206, 181,226,136,169,226,137,161,194,177,226,137,165,226,137,164,226, 140,160,226,140,161,195,183,226,137,136,194,176,226,136,153,194, 183,226,136,154,226,129,191,194,178,226,150,160,194,160,99,0, 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8, 0,0,0,67,0,0,0,115,110,0,0,0,116,0,114,22, 116,1,160,2,100,1,161,1,1,0,116,3,100,2,131,1, 130,1,100,3,97,0,122,62,122,16,100,4,100,5,108,4, 109,5,125,0,1,0,87,0,110,36,4,0,116,6,121,80, 1,0,1,0,1,0,116,1,160,2,100,1,161,1,1,0, 116,3,100,2,131,1,130,1,89,0,110,2,48,0,87,0, 100,6,97,0,110,6,100,6,97,0,48,0,116,1,160,2, 100,7,161,1,1,0,124,0,83,0,41,8,78,122,27,122, 105,112,105,109,112,111,114,116,58,32,122,108,105,98,32,85, 78,65,86,65,73,76,65,66,76,69,250,41,99,97,110,39, 116,32,100,101,99,111,109,112,114,101,115,115,32,100,97,116, 97,59,32,122,108,105,98,32,110,111,116,32,97,118,97,105, 108,97,98,108,101,84,114,0,0,0,0,169,1,218,10,100, 101,99,111,109,112,114,101,115,115,70,122,25,122,105,112,105, 109,112,111,114,116,58,32,122,108,105,98,32,97,118,97,105, 108,97,98,108,101,41,7,218,15,95,105,109,112,111,114,116, 105,110,103,95,122,108,105,98,114,76,0,0,0,114,77,0, 0,0,114,3,0,0,0,90,4,122,108,105,98,114,139,0, 0,0,218,9,69,120,99,101,112,116,105,111,110,114,138,0, 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0, 0,218,20,95,103,101,116,95,100,101,99,111,109,112,114,101, 115,115,95,102,117,110,99,251,1,0,0,115,24,0,0,0, 0,2,4,3,10,1,8,2,4,1,4,1,16,1,12,1, 10,1,16,2,12,2,10,1,114,142,0,0,0,99,2,0, 0,0,0,0,0,0,0,0,0,0,17,0,0,0,9,0, 0,0,67,0,0,0,115,144,1,0,0,124,1,92,8,125, 2,125,3,125,4,125,5,125,6,125,7,125,8,125,9,124, 4,100,1,107,0,114,36,116,0,100,2,131,1,130,1,116, 1,160,2,124,0,161,1,144,1,143,14,125,10,122,14,124, 10,160,3,124,6,161,1,1,0,87,0,110,36,4,0,116, 4,121,100,1,0,1,0,1,0,116,0,100,3,124,0,155, 2,157,2,124,0,100,4,141,2,130,1,89,0,110,2,48, 0,124,10,160,5,100,5,161,1,125,11,116,6,124,11,131, 1,100,5,107,3,114,132,116,7,100,6,131,1,130,1,124, 11,100,0,100,7,133,2,25,0,100,8,107,3,114,166,116, 0,100,9,124,0,155,2,157,2,124,0,100,4,141,2,130, 1,116,8,124,11,100,10,100,11,133,2,25,0,131,1,125, 12,116,8,124,11,100,11,100,5,133,2,25,0,131,1,125, 13,100,5,124,12,23,0,124,13,23,0,125,14,124,6,124, 14,55,0,125,6,122,14,124,10,160,3,124,6,161,1,1, 0,87,0,110,38,4,0,116,4,144,1,121,14,1,0,1, 0,1,0,116,0,100,3,124,0,155,2,157,2,124,0,100, 4,141,2,130,1,89,0,110,2,48,0,124,10,160,5,124, 4,161,1,125,15,116,6,124,15,131,1,124,4,107,3,144, 1,114,48,116,4,100,12,131,1,130,1,87,0,100,0,4, 0,4,0,131,3,1,0,110,18,49,0,144,1,115,70,48, 0,1,0,1,0,1,0,89,0,1,0,124,3,100,1,107, 2,144,1,114,94,124,15,83,0,122,10,116,9,131,0,125, 16,87,0,110,28,4,0,116,10,144,1,121,132,1,0,1, 0,1,0,116,0,100,13,131,1,130,1,89,0,110,2,48, 0,124,16,124,15,100,14,131,2,83,0,41,15,78,114,0, 0,0,0,122,18,110,101,103,97,116,105,118,101,32,100,97, 116,97,32,115,105,122,101,114,90,0,0,0,114,12,0,0, 0,114,102,0,0,0,114,96,0,0,0,114,91,0,0,0, 115,4,0,0,0,80,75,3,4,122,23,98,97,100,32,108, 111,99,97,108,32,102,105,108,101,32,104,101,97,100,101,114, 58,32,233,26,0,0,0,114,101,0,0,0,122,26,122,105, 112,105,109,112,111,114,116,58,32,99,97,110,39,116,32,114, 101,97,100,32,100,97,116,97,114,137,0,0,0,105,241,255, 255,255,41,11,114,3,0,0,0,114,108,0,0,0,114,109, 0,0,0,114,110,0,0,0,114,22,0,0,0,114,112,0, 0,0,114,51,0,0,0,114,117,0,0,0,114,1,0,0, 0,114,142,0,0,0,114,141,0,0,0,41,17,114,29,0, 0,0,114,54,0,0,0,90,8,100,97,116,97,112,97,116, 104,114,128,0,0,0,114,132,0,0,0,114,123,0,0,0, 114,135,0,0,0,114,129,0,0,0,114,130,0,0,0,114, 131,0,0,0,114,121,0,0,0,114,122,0,0,0,114,133, 0,0,0,114,134,0,0,0,114,125,0,0,0,90,8,114, 97,119,95,100,97,116,97,114,139,0,0,0,114,9,0,0, 0,114,9,0,0,0,114,10,0,0,0,114,52,0,0,0, 16,2,0,0,115,62,0,0,0,0,1,20,1,8,1,8, 2,14,2,2,1,14,1,12,1,24,1,10,1,12,1,8, 2,16,2,18,2,16,1,16,1,12,1,8,1,2,1,14, 1,14,1,24,1,10,1,14,1,40,2,10,2,4,3,2, 1,10,1,14,1,14,1,114,52,0,0,0,99,2,0,0, 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, 0,67,0,0,0,115,16,0,0,0,116,0,124,0,124,1, 24,0,131,1,100,1,107,1,83,0,41,2,78,114,5,0, 0,0,41,1,218,3,97,98,115,41,2,90,2,116,49,90, 2,116,50,114,9,0,0,0,114,9,0,0,0,114,10,0, 0,0,218,9,95,101,113,95,109,116,105,109,101,62,2,0, 0,115,2,0,0,0,0,2,114,145,0,0,0,99,5,0, 0,0,0,0,0,0,0,0,0,0,14,0,0,0,8,0, 0,0,67,0,0,0,115,56,1,0,0,124,3,124,2,100, 1,156,2,125,5,122,18,116,0,160,1,124,4,124,3,124, 5,161,3,125,6,87,0,110,20,4,0,116,2,121,48,1, 0,1,0,1,0,89,0,100,0,83,0,48,0,124,6,100, 2,64,0,100,3,107,3,125,7,124,7,114,178,124,6,100, 4,64,0,100,3,107,3,125,8,116,3,106,4,100,5,107, 3,114,176,124,8,115,102,116,3,106,4,100,6,107,2,114, 176,116,5,124,0,124,2,131,2,125,9,124,9,100,0,117, 1,114,176,116,3,160,6,116,0,106,7,124,9,161,2,125, 10,122,20,116,0,160,8,124,4,124,10,124,3,124,5,161, 4,1,0,87,0,110,20,4,0,116,2,121,174,1,0,1, 0,1,0,89,0,100,0,83,0,48,0,110,84,116,9,124, 0,124,2,131,2,92,2,125,11,125,12,124,11,144,1,114, 6,116,10,116,11,124,4,100,7,100,8,133,2,25,0,131, 1,124,11,131,2,114,242,116,11,124,4,100,8,100,9,133, 2,25,0,131,1,124,12,107,3,144,1,114,6,116,12,160, 13,100,10,124,3,155,2,157,2,161,1,1,0,100,0,83, 0,116,14,160,15,124,4,100,9,100,0,133,2,25,0,161, 1,125,13,116,16,124,13,116,17,131,2,144,1,115,52,116, 18,100,11,124,1,155,2,100,12,157,3,131,1,130,1,124, 13,83,0,41,13,78,41,2,114,59,0,0,0,114,13,0, 0,0,114,5,0,0,0,114,0,0,0,0,114,84,0,0, 0,90,5,110,101,118,101,114,90,6,97,108,119,97,121,115, 114,97,0,0,0,114,92,0,0,0,114,93,0,0,0,122, 22,98,121,116,101,99,111,100,101,32,105,115,32,115,116,97, 108,101,32,102,111,114,32,122,16,99,111,109,112,105,108,101, 100,32,109,111,100,117,108,101,32,122,21,32,105,115,32,110, 111,116,32,97,32,99,111,100,101,32,111,98,106,101,99,116, 41,19,114,21,0,0,0,90,13,95,99,108,97,115,115,105, 102,121,95,112,121,99,114,75,0,0,0,218,4,95,105,109, 112,90,21,99,104,101,99,107,95,104,97,115,104,95,98,97, 115,101,100,95,112,121,99,115,218,15,95,103,101,116,95,112, 121,99,95,115,111,117,114,99,101,218,11,115,111,117,114,99, 101,95,104,97,115,104,90,17,95,82,65,87,95,77,65,71, 73,67,95,78,85,77,66,69,82,90,18,95,118,97,108,105, 100,97,116,101,95,104,97,115,104,95,112,121,99,218,29,95, 103,101,116,95,109,116,105,109,101,95,97,110,100,95,115,105, 122,101,95,111,102,95,115,111,117,114,99,101,114,145,0,0, 0,114,2,0,0,0,114,76,0,0,0,114,77,0,0,0, 218,7,109,97,114,115,104,97,108,90,5,108,111,97,100,115, 114,15,0,0,0,218,10,95,99,111,100,101,95,116,121,112, 101,218,9,84,121,112,101,69,114,114,111,114,41,14,114,32, 0,0,0,114,53,0,0,0,114,63,0,0,0,114,38,0, 0,0,114,124,0,0,0,90,11,101,120,99,95,100,101,116, 97,105,108,115,114,127,0,0,0,90,10,104,97,115,104,95, 98,97,115,101,100,90,12,99,104,101,99,107,95,115,111,117, 114,99,101,90,12,115,111,117,114,99,101,95,98,121,116,101, 115,114,148,0,0,0,90,12,115,111,117,114,99,101,95,109, 116,105,109,101,90,11,115,111,117,114,99,101,95,115,105,122, 101,114,46,0,0,0,114,9,0,0,0,114,9,0,0,0, 114,10,0,0,0,218,15,95,117,110,109,97,114,115,104,97, 108,95,99,111,100,101,72,2,0,0,115,82,0,0,0,0, 2,2,1,2,254,6,5,2,1,18,1,12,1,8,2,12, 1,4,1,12,1,10,1,2,255,2,1,8,255,2,2,10, 1,8,1,4,1,4,1,2,254,4,5,2,1,4,1,8, 255,8,2,12,1,10,3,8,255,6,3,6,3,22,1,18, 255,4,2,4,1,8,255,4,2,4,2,18,1,12,1,16, 1,114,153,0,0,0,99,1,0,0,0,0,0,0,0,0, 0,0,0,1,0,0,0,4,0,0,0,67,0,0,0,115, 28,0,0,0,124,0,160,0,100,1,100,2,161,2,125,0, 124,0,160,0,100,3,100,2,161,2,125,0,124,0,83,0, 41,4,78,115,2,0,0,0,13,10,243,1,0,0,0,10, 243,1,0,0,0,13,41,1,114,19,0,0,0,41,1,218, 6,115,111,117,114,99,101,114,9,0,0,0,114,9,0,0, 0,114,10,0,0,0,218,23,95,110,111,114,109,97,108,105, 122,101,95,108,105,110,101,95,101,110,100,105,110,103,115,123, 2,0,0,115,6,0,0,0,0,1,12,1,12,1,114,157, 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,6,0,0,0,67,0,0,0,115,24,0,0, 0,116,0,124,1,131,1,125,1,116,1,124,1,124,0,100, 1,100,2,100,3,141,4,83,0,41,4,78,114,74,0,0, 0,84,41,1,90,12,100,111,110,116,95,105,110,104,101,114, 105,116,41,2,114,157,0,0,0,218,7,99,111,109,112,105, 108,101,41,2,114,53,0,0,0,114,156,0,0,0,114,9, 0,0,0,114,9,0,0,0,114,10,0,0,0,218,15,95, 99,111,109,112,105,108,101,95,115,111,117,114,99,101,130,2, 0,0,115,4,0,0,0,0,1,8,1,114,159,0,0,0, 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, 0,11,0,0,0,67,0,0,0,115,68,0,0,0,116,0, 160,1,124,0,100,1,63,0,100,2,23,0,124,0,100,3, 63,0,100,4,64,0,124,0,100,5,64,0,124,1,100,6, 63,0,124,1,100,3,63,0,100,7,64,0,124,1,100,5, 64,0,100,8,20,0,100,9,100,9,100,9,102,9,161,1, 83,0,41,10,78,233,9,0,0,0,105,188,7,0,0,233, 5,0,0,0,233,15,0,0,0,233,31,0,0,0,233,11, 0,0,0,233,63,0,0,0,114,84,0,0,0,114,14,0, 0,0,41,2,114,129,0,0,0,90,6,109,107,116,105,109, 101,41,2,218,1,100,114,136,0,0,0,114,9,0,0,0, 114,9,0,0,0,114,10,0,0,0,218,14,95,112,97,114, 115,101,95,100,111,115,116,105,109,101,136,2,0,0,115,18, 0,0,0,0,1,4,1,10,1,10,1,6,1,6,1,10, 1,10,1,6,249,114,167,0,0,0,99,2,0,0,0,0, 0,0,0,0,0,0,0,6,0,0,0,10,0,0,0,67, 0,0,0,115,114,0,0,0,122,82,124,1,100,1,100,0, 133,2,25,0,100,2,118,0,115,22,74,0,130,1,124,1, 100,0,100,1,133,2,25,0,125,1,124,0,106,0,124,1, 25,0,125,2,124,2,100,3,25,0,125,3,124,2,100,4, 25,0,125,4,124,2,100,5,25,0,125,5,116,1,124,4, 124,3,131,2,124,5,102,2,87,0,83,0,4,0,116,2, 116,3,116,4,102,3,121,108,1,0,1,0,1,0,89,0, 100,6,83,0,48,0,100,0,83,0,41,7,78,114,14,0, 0,0,169,2,218,1,99,218,1,111,114,161,0,0,0,233, 6,0,0,0,233,3,0,0,0,41,2,114,0,0,0,0, 114,0,0,0,0,41,5,114,28,0,0,0,114,167,0,0, 0,114,26,0,0,0,218,10,73,110,100,101,120,69,114,114, 111,114,114,152,0,0,0,41,6,114,32,0,0,0,114,13, 0,0,0,114,54,0,0,0,114,129,0,0,0,114,130,0, 0,0,90,17,117,110,99,111,109,112,114,101,115,115,101,100, 95,115,105,122,101,114,9,0,0,0,114,9,0,0,0,114, 10,0,0,0,114,149,0,0,0,149,2,0,0,115,20,0, 0,0,0,1,2,2,20,1,12,1,10,3,8,1,8,1, 8,1,16,1,18,1,114,149,0,0,0,99,2,0,0,0, 0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,0, 67,0,0,0,115,84,0,0,0,124,1,100,1,100,0,133, 2,25,0,100,2,118,0,115,20,74,0,130,1,124,1,100, 0,100,1,133,2,25,0,125,1,122,14,124,0,106,0,124, 1,25,0,125,2,87,0,110,20,4,0,116,1,121,66,1, 0,1,0,1,0,89,0,100,0,83,0,48,0,116,2,124, 0,106,3,124,2,131,2,83,0,100,0,83,0,41,3,78, 114,14,0,0,0,114,168,0,0,0,41,4,114,28,0,0, 0,114,26,0,0,0,114,52,0,0,0,114,29,0,0,0, 41,3,114,32,0,0,0,114,13,0,0,0,114,54,0,0, 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, 114,147,0,0,0,168,2,0,0,115,14,0,0,0,0,2, 20,1,12,2,2,1,14,1,12,1,8,2,114,147,0,0, 0,99,2,0,0,0,0,0,0,0,0,0,0,0,11,0, 0,0,9,0,0,0,67,0,0,0,115,196,0,0,0,116, 0,124,0,124,1,131,2,125,2,116,1,68,0,93,158,92, 3,125,3,125,4,125,5,124,2,124,3,23,0,125,6,116, 2,106,3,100,1,124,0,106,4,116,5,124,6,100,2,100, 3,141,5,1,0,122,14,124,0,106,6,124,6,25,0,125, 7,87,0,110,18,4,0,116,7,121,86,1,0,1,0,1, 0,89,0,113,14,48,0,124,7,100,4,25,0,125,8,116, 8,124,0,106,4,124,7,131,2,125,9,124,4,114,130,116, 9,124,0,124,8,124,6,124,1,124,9,131,5,125,10,110, 10,116,10,124,8,124,9,131,2,125,10,124,10,100,0,117, 0,114,150,113,14,124,7,100,4,25,0,125,8,124,10,124, 5,124,8,102,3,2,0,1,0,83,0,113,14,116,11,100, 5,124,1,155,2,157,2,124,1,100,6,141,2,130,1,100, 0,83,0,41,7,78,122,13,116,114,121,105,110,103,32,123, 125,123,125,123,125,114,84,0,0,0,41,1,90,9,118,101, 114,98,111,115,105,116,121,114,0,0,0,0,114,57,0,0, 0,114,58,0,0,0,41,12,114,36,0,0,0,114,87,0, 0,0,114,76,0,0,0,114,77,0,0,0,114,29,0,0, 0,114,20,0,0,0,114,28,0,0,0,114,26,0,0,0, 114,52,0,0,0,114,153,0,0,0,114,159,0,0,0,114, 3,0,0,0,41,11,114,32,0,0,0,114,38,0,0,0, 114,13,0,0,0,114,88,0,0,0,114,89,0,0,0,114, 47,0,0,0,114,63,0,0,0,114,54,0,0,0,114,40, 0,0,0,114,124,0,0,0,114,46,0,0,0,114,9,0, 0,0,114,9,0,0,0,114,10,0,0,0,114,44,0,0, 0,183,2,0,0,115,36,0,0,0,0,1,10,1,14,1, 8,1,22,1,2,1,14,1,12,1,6,2,8,1,12,1, 4,1,18,2,10,1,8,3,2,1,8,1,16,2,114,44, 0,0,0,41,44,114,82,0,0,0,90,26,95,102,114,111, 122,101,110,95,105,109,112,111,114,116,108,105,98,95,101,120, 116,101,114,110,97,108,114,21,0,0,0,114,1,0,0,0, 114,2,0,0,0,90,17,95,102,114,111,122,101,110,95,105, 109,112,111,114,116,108,105,98,114,76,0,0,0,114,146,0, 0,0,114,108,0,0,0,114,150,0,0,0,114,67,0,0, 0,114,129,0,0,0,90,7,95,95,97,108,108,95,95,114, 20,0,0,0,90,15,112,97,116,104,95,115,101,112,97,114, 97,116,111,114,115,114,18,0,0,0,114,75,0,0,0,114, 3,0,0,0,114,25,0,0,0,218,4,116,121,112,101,114, 70,0,0,0,114,111,0,0,0,114,113,0,0,0,114,115, 0,0,0,114,4,0,0,0,114,87,0,0,0,114,36,0, 0,0,114,37,0,0,0,114,35,0,0,0,114,27,0,0, 0,114,120,0,0,0,114,140,0,0,0,114,142,0,0,0, 114,52,0,0,0,114,145,0,0,0,114,153,0,0,0,218, 8,95,95,99,111,100,101,95,95,114,151,0,0,0,114,157, 0,0,0,114,159,0,0,0,114,167,0,0,0,114,149,0, 0,0,114,147,0,0,0,114,44,0,0,0,114,9,0,0, 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, 218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,84, 0,0,0,4,16,8,1,16,1,8,1,8,1,8,1,8, 1,8,1,8,2,8,3,6,1,14,3,16,4,4,2,8, 2,4,1,4,1,4,2,14,127,0,125,12,1,12,1,2, 1,2,252,4,9,8,4,8,9,8,31,8,126,2,254,2, 29,4,5,8,21,8,46,8,10,8,46,10,5,8,7,8, 6,8,13,8,19,8,15, }; >raise_catch(RecursionError, "RecursionError") self.raise_catch(SyntaxError, "SyntaxError") try: exec('/\n') except SyntaxError: pass self.raise_catch(IndentationError, "IndentationError") self.raise_catch(TabError, "TabError") try: compile("try:\n\t1/0\n \t1/0\nfinally:\n pass\n", '<string>', 'exec') except TabError: pass else: self.fail("TabError not raised") self.raise_catch(SystemError, "SystemError") self.raise_catch(SystemExit, "SystemExit") self.assertRaises(SystemExit, sys.exit, 0) self.raise_catch(TypeError, "TypeError") try: [] + () except TypeError: pass self.raise_catch(ValueError, "ValueError") self.assertRaises(ValueError, chr, 17<<16) self.raise_catch(ZeroDivisionError, "ZeroDivisionError") try: x = 1/0 except ZeroDivisionError: pass self.raise_catch(Exception, "Exception") try: x = 1/0 except Exception as e: pass self.raise_catch(StopAsyncIteration, "StopAsyncIteration") def testSyntaxErrorMessage(self): # make sure the right exception message is raised for each of # these code fragments def ckmsg(src, msg): try: compile(src, '<fragment>', 'exec') except SyntaxError as e: if e.msg != msg: self.fail("expected %s, got %s" % (msg, e.msg)) else: self.fail("failed to get expected SyntaxError") s = '''while 1: try: pass finally: continue''' if not sys.platform.startswith('java'): ckmsg(s, "'continue' not supported inside 'finally' clause") s = '''if 1: try: continue except: pass''' ckmsg(s, "'continue' not properly in loop") ckmsg("continue\n", "'continue' not properly in loop") def testSyntaxErrorOffset(self): def check(src, lineno, offset): with self.assertRaises(SyntaxError) as cm: compile(src, '<fragment>', 'exec') self.assertEqual(cm.exception.lineno, lineno) self.assertEqual(cm.exception.offset, offset) check('def fact(x):\n\treturn x!\n', 2, 10) check('1 +\n', 1, 4) check('def spam():\n print(1)\n print(2)', 3, 10) check('Python = "Python" +', 1, 20) check('Python = "\u1e54\xfd\u0163\u0125\xf2\xf1" +', 1, 20) @cpython_only def testSettingException(self): # test that setting an exception at the C level works even if the # exception object can't be constructed. class BadException(Exception): def __init__(self_): raise RuntimeError("can't instantiate BadException") class InvalidException: pass def test_capi1(): import _testcapi try: _testcapi.raise_exception(BadException, 1) except TypeError as err: exc, err, tb = sys.exc_info() co = tb.tb_frame.f_code self.assertEqual(co.co_name, "test_capi1") self.assertTrue(co.co_filename.endswith('test_exceptions.py')) else: self.fail("Expected exception") def test_capi2(): import _testcapi try: _testcapi.raise_exception(BadException, 0) except RuntimeError as err: exc, err, tb = sys.exc_info() co = tb.tb_frame.f_code self.assertEqual(co.co_name, "__init__") self.assertTrue(co.co_filename.endswith('test_exceptions.py')) co2 = tb.tb_frame.f_back.f_code self.assertEqual(co2.co_name, "test_capi2") else: self.fail("Expected exception") def test_capi3(): import _testcapi self.assertRaises(SystemError, _testcapi.raise_exception, InvalidException, 1) if not sys.platform.startswith('java'): test_capi1() test_capi2() test_capi3() def test_WindowsError(self): try: WindowsError except NameError: pass else: self.assertIs(WindowsError, OSError) self.assertEqual(str(OSError(1001)), "1001") self.assertEqual(str(OSError(1001, "message")), "[Errno 1001] message") # POSIX errno (9 aka EBADF) is untranslated w = OSError(9, 'foo', 'bar') self.assertEqual(w.errno, 9) self.assertEqual(w.winerror, None) self.assertEqual(str(w), "[Errno 9] foo: 'bar'") # ERROR_PATH_NOT_FOUND (win error 3) becomes ENOENT (2) w = OSError(0, 'foo', 'bar', 3) self.assertEqual(w.errno, 2) self.assertEqual(w.winerror, 3) self.assertEqual(w.strerror, 'foo') self.assertEqual(w.filename, 'bar') self.assertEqual(w.filename2, None) self.assertEqual(str(w), "[WinError 3] foo: 'bar'") # Unknown win error becomes EINVAL (22) w = OSError(0, 'foo', None, 1001) self.assertEqual(w.errno, 22) self.assertEqual(w.winerror, 1001) self.assertEqual(w.strerror, 'foo') self.assertEqual(w.filename, None) self.assertEqual(w.filename2, None) self.assertEqual(str(w), "[WinError 1001] foo") # Non-numeric "errno" w = OSError('bar', 'foo') self.assertEqual(w.errno, 'bar') self.assertEqual(w.winerror, None) self.assertEqual(w.strerror, 'foo') self.assertEqual(w.filename, None) self.assertEqual(w.filename2, None) @unittest.skipUnless(sys.platform == 'win32', 'test specific to Windows') def test_windows_message(self): """Should fill in unknown error code in Windows error message""" ctypes = import_module('ctypes') # this error code has no message, Python formats it as hexadecimal code = 3765269347 with self.assertRaisesRegex(OSError, 'Windows Error 0x%x' % code): ctypes.pythonapi.PyErr_SetFromWindowsErr(code) def testAttributes(self): # test that exception attributes are happy exceptionList = [ (BaseException, (), {'args' : ()}), (BaseException, (1, ), {'args' : (1,)}), (BaseException, ('foo',), {'args' : ('foo',)}), (BaseException, ('foo', 1), {'args' : ('foo', 1)}), (SystemExit, ('foo',), {'args' : ('foo',), 'code' : 'foo'}), (OSError, ('foo',), {'args' : ('foo',), 'filename' : None, 'filename2' : None, 'errno' : None, 'strerror' : None}), (OSError, ('foo', 'bar'), {'args' : ('foo', 'bar'), 'filename' : None, 'filename2' : None, 'errno' : 'foo', 'strerror' : 'bar'}), (OSError, ('foo', 'bar', 'baz'), {'args' : ('foo', 'bar'), 'filename' : 'baz', 'filename2' : None, 'errno' : 'foo', 'strerror' : 'bar'}), (OSError, ('foo', 'bar', 'baz', None, 'quux'), {'args' : ('foo', 'bar'), 'filename' : 'baz', 'filename2': 'quux'}), (OSError, ('errnoStr', 'strErrorStr', 'filenameStr'), {'args' : ('errnoStr', 'strErrorStr'), 'strerror' : 'strErrorStr', 'errno' : 'errnoStr', 'filename' : 'filenameStr'}), (OSError, (1, 'strErrorStr', 'filenameStr'), {'args' : (1, 'strErrorStr'), 'errno' : 1, 'strerror' : 'strErrorStr', 'filename' : 'filenameStr', 'filename2' : None}), (SyntaxError, (), {'msg' : None, 'text' : None, 'filename' : None, 'lineno' : None, 'offset' : None, 'print_file_and_line' : None}), (SyntaxError, ('msgStr',), {'args' : ('msgStr',), 'text' : None, 'print_file_and_line' : None, 'msg' : 'msgStr', 'filename' : None, 'lineno' : None, 'offset' : None}), (SyntaxError, ('msgStr', ('filenameStr', 'linenoStr', 'offsetStr', 'textStr')), {'offset' : 'offsetStr', 'text' : 'textStr', 'args' : ('msgStr', ('filenameStr', 'linenoStr', 'offsetStr', 'textStr')), 'print_file_and_line' : None, 'msg' : 'msgStr', 'filename' : 'filenameStr', 'lineno' : 'linenoStr'}), (SyntaxError, ('msgStr', 'filenameStr', 'linenoStr', 'offsetStr', 'textStr', 'print_file_and_lineStr'), {'text' : None, 'args' : ('msgStr', 'filenameStr', 'linenoStr', 'offsetStr', 'textStr', 'print_file_and_lineStr'), 'print_file_and_line' : None, 'msg' : 'msgStr', 'filename' : None, 'lineno' : None, 'offset' : None}), (UnicodeError, (), {'args' : (),}), (UnicodeEncodeError, ('ascii', 'a', 0, 1, 'ordinal not in range'), {'args' : ('ascii', 'a', 0, 1, 'ordinal not in range'), 'encoding' : 'ascii', 'object' : 'a', 'start' : 0, 'reason' : 'ordinal not in range'}), (UnicodeDecodeError, ('ascii', bytearray(b'\xff'), 0, 1, 'ordinal not in range'), {'args' : ('ascii', bytearray(b'\xff'), 0, 1, 'ordinal not in range'), 'encoding' : 'ascii', 'object' : b'\xff', 'start' : 0, 'reason' : 'ordinal not in range'}), (UnicodeDecodeError, ('ascii', b'\xff', 0, 1, 'ordinal not in range'), {'args' : ('ascii', b'\xff', 0, 1, 'ordinal not in range'), 'encoding' : 'ascii', 'object' : b'\xff', 'start' : 0, 'reason' : 'ordinal not in range'}), (UnicodeTranslateError, ("\u3042", 0, 1, "ouch"), {'args' : ('\u3042', 0, 1, 'ouch'), 'object' : '\u3042', 'reason' : 'ouch', 'start' : 0, 'end' : 1}), (NaiveException, ('foo',), {'args': ('foo',), 'x': 'foo'}), (SlottedNaiveException, ('foo',), {'args': ('foo',), 'x': 'foo'}), ] try: # More tests are in test_WindowsError exceptionList.append( (WindowsError, (1, 'strErrorStr', 'filenameStr'), {'args' : (1, 'strErrorStr'), 'strerror' : 'strErrorStr', 'winerror' : None, 'errno' : 1, 'filename' : 'filenameStr', 'filename2' : None}) ) except NameError: pass for exc, args, expected in exceptionList: try: e = exc(*args) except: print("\nexc=%r, args=%r" % (exc, args), file=sys.stderr) raise else: # Verify module name if not type(e).__name__.endswith('NaiveException'): self.assertEqual(type(e).__module__, 'builtins') # Verify no ref leaks in Exc_str() s = str(e) for checkArgName in expected: value = getattr(e, checkArgName) self.assertEqual(repr(value), repr(expected[checkArgName]), '%r.%s == %r, expected %r' % ( e, checkArgName, value, expected[checkArgName])) # test for pickling support for p in [pickle]: for protocol in range(p.HIGHEST_PROTOCOL + 1): s = p.dumps(e, protocol) new = p.loads(s) for checkArgName in expected: got = repr(getattr(new, checkArgName)) want = repr(expected[checkArgName]) self.assertEqual(got, want, 'pickled "%r", attribute "%s' % (e, checkArgName)) def testWithTraceback(self): try: raise IndexError(4) except: tb = sys.exc_info()[2] e = BaseException().with_traceback(tb) self.assertIsInstance(e, BaseException) self.assertEqual(e.__traceback__, tb) e = IndexError(5).with_traceback(tb) self.assertIsInstance(e, IndexError) self.assertEqual(e.__traceback__, tb) class MyException(Exception): pass e = MyException().with_traceback(tb) self.assertIsInstance(e, MyException) self.assertEqual(e.__traceback__, tb) def testInvalidTraceback(self): try: Exception().__traceback__ = 5 except TypeError as e: self.assertIn("__traceback__ must be a traceback", str(e)) else: self.fail("No exception raised") def testInvalidAttrs(self): self.assertRaises(TypeError, setattr, Exception(), '__cause__', 1) self.assertRaises(TypeError, delattr, Exception(), '__cause__') self.assertRaises(TypeError, setattr, Exception(), '__context__', 1) self.assertRaises(TypeError, delattr, Exception(), '__context__') def testNoneClearsTracebackAttr(self): try: raise IndexError(4) except: tb = sys.exc_info()[2] e = Exception() e.__traceback__ = tb e.__traceback__ = None self.assertEqual(e.__traceback__, None) def testChainingAttrs(self): e = Exception() self.assertIsNone(e.__context__) self.assertIsNone(e.__cause__) e = TypeError() self.assertIsNone(e.__context__) self.assertIsNone(e.__cause__) class MyException(OSError): pass e = MyException() self.assertIsNone(e.__context__) self.assertIsNone(e.__cause__) def testChainingDescriptors(self): try: raise Exception() except Exception as exc: e = exc self.assertIsNone(e.__context__) self.assertIsNone(e.__cause__) self.assertFalse(e.__suppress_context__) e.__context__ = NameError() e.__cause__ = None self.assertIsInstance(e.__context__, NameError) self.assertIsNone(e.__cause__) self.assertTrue(e.__suppress_context__) e.__suppress_context__ = False self.assertFalse(e.__suppress_context__) def testKeywordArgs(self): # test that builtin exception don't take keyword args, # but user-defined subclasses can if they want self.assertRaises(TypeError, BaseException, a=1) class DerivedException(BaseException): def __init__(self, fancy_arg): BaseException.__init__(self) self.fancy_arg = fancy_arg x = DerivedException(fancy_arg=42) self.assertEqual(x.fancy_arg, 42) @no_tracing def testInfiniteRecursion(self): def f(): return f() self.assertRaises(RecursionError, f) def g(): try: return g() except ValueError: return -1 self.assertRaises(RecursionError, g) def test_str(self): # Make sure both instances and classes have a str representation. self.assertTrue(str(Exception)) self.assertTrue(str(Exception('a'))) self.assertTrue(str(Exception('a', 'b'))) def testExceptionCleanupNames(self): # Make sure the local variable bound to the exception instance by # an "except" statement is only visible inside the except block. try: raise Exception() except Exception as e: self.assertTrue(e) del e self.assertNotIn('e', locals()) def testExceptionCleanupState(self): # Make sure exception state is cleaned up as soon as the except # block is left. See #2507 class MyException(Exception): def __init__(self, obj): self.obj = obj class MyObj: pass def inner_raising_func(): # Create some references in exception value and traceback local_ref = obj raise MyException(obj) # Qualified "except" with "as" obj = MyObj() wr = weakref.ref(obj) try: inner_raising_func() except MyException as e: pass obj = None obj = wr() self.assertTrue(obj is None, "%s" % obj) # Qualified "except" without "as" obj = MyObj() wr = weakref.ref(obj) try: inner_raising_func() except MyException: pass obj = None obj = wr() self.assertTrue(obj is None, "%s" % obj) # Bare "except" obj = MyObj() wr = weakref.ref(obj) try: inner_raising_func() except: pass obj = None obj = wr() self.assertTrue(obj is None, "%s" % obj) # "except" with premature block leave obj = MyObj() wr = weakref.ref(obj) for i in [0]: try: inner_raising_func() except: break obj = None obj = wr() self.assertTrue(obj is None, "%s" % obj) # "except" block raising another exception obj = MyObj() wr = weakref.ref(obj) try: try: inner_raising_func() except: raise KeyError except KeyError as e: # We want to test that the except block above got rid of # the exception raised in inner_raising_func(), but it # also ends up in the __context__ of the KeyError, so we # must clear the latter manually for our test to succeed. e.__context__ = None obj = None obj = wr() # guarantee no ref cycles on CPython (don't gc_collect) if check_impl_detail(cpython=False): gc_collect() self.assertTrue(obj is None, "%s" % obj) # Some complicated construct obj = MyObj() wr = weakref.ref(obj) try: inner_raising_func() except MyException: try: try: raise finally: raise except MyException: pass obj = None if check_impl_detail(cpython=False): gc_collect() obj = wr() self.assertTrue(obj is None, "%s" % obj) # Inside an exception-silencing "with" block class Context: def __enter__(self): return self def __exit__ (self, exc_type, exc_value, exc_tb): return True obj = MyObj() wr = weakref.ref(obj) with Context(): inner_raising_func() obj = None if check_impl_detail(cpython=False): gc_collect() obj = wr() self.assertTrue(obj is None, "%s" % obj) def test_exception_target_in_nested_scope(self): # issue 4617: This used to raise a SyntaxError # "can not delete variable 'e' referenced in nested scope" def print_error(): e try: something except Exception as e: print_error() # implicit "del e" here def test_generator_leaking(self): # Test that generator exception state doesn't leak into the calling # frame def yield_raise(): try: raise KeyError("caught") except KeyError: yield sys.exc_info()[0] yield sys.exc_info()[0] yield sys.exc_info()[0] g = yield_raise() self.assertEqual(next(g), KeyError) self.assertEqual(sys.exc_info()[0], None) self.assertEqual(next(g), KeyError) self.assertEqual(sys.exc_info()[0], None) self.assertEqual(next(g), None) # Same test, but inside an exception handler try: raise TypeError("foo") except TypeError: g = yield_raise() self.assertEqual(next(g), KeyError) self.assertEqual(sys.exc_info()[0], TypeError) self.assertEqual(next(g), KeyError) self.assertEqual(sys.exc_info()[0], TypeError) self.assertEqual(next(g), TypeError) del g self.assertEqual(sys.exc_info()[0], TypeError) def test_generator_leaking2(self): # See issue 12475. def g(): yield try: raise RuntimeError except RuntimeError: it = g() next(it) try: next(it) except StopIteration: pass self.assertEqual(sys.exc_info(), (None, None, None)) def test_generator_leaking3(self): # See issue #23353. When gen.throw() is called, the caller's # exception state should be save and restored. def g(): try: yield except ZeroDivisionError: yield sys.exc_info()[1] it = g() next(it) try: 1/0 except ZeroDivisionError as e: self.assertIs(sys.exc_info()[1], e) gen_exc = it.throw(e) self.assertIs(sys.exc_info()[1], e) self.assertIs(gen_exc, e) self.assertEqual(sys.exc_info(), (None, None, None)) def test_generator_leaking4(self): # See issue #23353. When an exception is raised by a generator, # the caller's exception state should still be restored. def g(): try: 1/0 except ZeroDivisionError: yield sys.exc_info()[0] raise it = g() try: raise TypeError except TypeError: # The caller's exception state (TypeError) is temporarily # saved in the generator. tp = next(it) self.assertIs(tp, ZeroDivisionError) try: next(it) # We can't check it immediately, but while next() returns # with an exception, it shouldn't have restored the old # exception state (TypeError). except ZeroDivisionError as e: self.assertIs(sys.exc_info()[1], e) # We used to find TypeError here. self.assertEqual(sys.exc_info(), (None, None, None)) def test_generator_doesnt_retain_old_exc(self): def g(): self.assertIsInstance(sys.exc_info()[1], RuntimeError) yield self.assertEqual(sys.exc_info(), (None, None, None)) it = g() try: raise RuntimeError except RuntimeError: next(it) self.assertRaises(StopIteration, next, it) def test_generator_finalizing_and_exc_info(self): # See #7173 def simple_gen(): yield 1 def run_gen(): gen = simple_gen() try: raise RuntimeError except RuntimeError: return next(gen) run_gen() gc_collect() self.assertEqual(sys.exc_info(), (None, None, None)) def _check_generator_cleanup_exc_state(self, testfunc): # Issue #12791: exception state is cleaned up as soon as a generator # is closed (reference cycles are broken). class MyException(Exception): def __init__(self, obj): self.obj = obj class MyObj: pass def raising_gen(): try: raise MyException(obj) except MyException: yield obj = MyObj() wr = weakref.ref(obj) g = raising_gen() next(g) testfunc(g) g = obj = None obj = wr() self.assertIs(obj, None) def test_generator_throw_cleanup_exc_state(self): def do_throw(g): try: g.throw(RuntimeError()) except RuntimeError: pass self._check_generator_cleanup_exc_state(do_throw) def test_generator_close_cleanup_exc_state(self): def do_close(g): g.close() self._check_generator_cleanup_exc_state(do_close) def test_generator_del_cleanup_exc_state(self): def do_del(g): g = None self._check_generator_cleanup_exc_state(do_del) def test_generator_next_cleanup_exc_state(self): def do_next(g): try: next(g) except StopIteration: pass else: self.fail("should have raised StopIteration") self._check_generator_cleanup_exc_state(do_next) def test_generator_send_cleanup_exc_state(self): def do_send(g): try: g.send(None) except StopIteration: pass else: self.fail("should have raised StopIteration") self._check_generator_cleanup_exc_state(do_send) def test_3114(self): # Bug #3114: in its destructor, MyObject retrieves a pointer to # obsolete and/or deallocated objects. class MyObject: def __del__(self): nonlocal e e = sys.exc_info() e = () try: raise Exception(MyObject()) except: pass self.assertEqual(e, (None, None, None)) def test_unicode_change_attributes(self): # See issue 7309. This was a crasher. u = UnicodeEncodeError('baz', 'xxxxx', 1, 5, 'foo') self.assertEqual(str(u), "'baz' codec can't encode characters in position 1-4: foo") u.end = 2 self.assertEqual(str(u), "'baz' codec can't encode character '\\x78' in position 1: foo") u.end = 5 u.reason = 0x345345345345345345 self.assertEqual(str(u), "'baz' codec can't encode characters in position 1-4: 965230951443685724997") u.encoding = 4000 self.assertEqual(str(u), "'4000' codec can't encode characters in position 1-4: 965230951443685724997") u.start = 1000 self.assertEqual(str(u), "'4000' codec can't encode characters in position 1000-4: 965230951443685724997") u = UnicodeDecodeError('baz', b'xxxxx', 1, 5, 'foo') self.assertEqual(str(u), "'baz' codec can't decode bytes in position 1-4: foo") u.end = 2 self.assertEqual(str(u), "'baz' codec can't decode byte 0x78 in position 1: foo") u.end = 5 u.reason = 0x345345345345345345 self.assertEqual(str(u), "'baz' codec can't decode bytes in position 1-4: 965230951443685724997") u.encoding = 4000 self.assertEqual(str(u), "'4000' codec can't decode bytes in position 1-4: 965230951443685724997") u.start = 1000 self.assertEqual(str(u), "'4000' codec can't decode bytes in position 1000-4: 965230951443685724997") u = UnicodeTranslateError('xxxx', 1, 5, 'foo') self.assertEqual(str(u), "can't translate characters in position 1-4: foo") u.end = 2 self.assertEqual(str(u), "can't translate character '\\x78' in position 1: foo") u.end = 5 u.reason = 0x345345345345345345 self.assertEqual(str(u), "can't translate characters in position 1-4: 965230951443685724997") u.start = 1000 self.assertEqual(str(u), "can't translate characters in position 1000-4: 965230951443685724997") def test_unicode_errors_no_object(self): # See issue #21134. klasses = UnicodeEncodeError, UnicodeDecodeError, UnicodeTranslateError for klass in klasses: self.assertEqual(str(klass.__new__(klass)), "") @no_tracing def test_badisinstance(self): # Bug #2542: if issubclass(e, MyException) raises an exception, # it should be ignored class Meta(type): def __subclasscheck__(cls, subclass): raise ValueError() class MyException(Exception, metaclass=Meta): pass with captured_stderr() as stderr: try: raise KeyError() except MyException as e: self.fail("exception should not be a MyException") except KeyError: pass except: self.fail("Should have raised KeyError") else: self.fail("Should have raised KeyError") def g(): try: return g() except RecursionError: return sys.exc_info() e, v, tb = g() self.assertTrue(isinstance(v, RecursionError), type(v)) self.assertIn("maximum recursion depth exceeded", str(v)) @cpython_only def test_MemoryError(self): # PyErr_NoMemory always raises the same exception instance. # Check that the traceback is not doubled. import traceback from _testcapi import raise_memoryerror def raiseMemError(): try: raise_memoryerror() except MemoryError as e: tb = e.__traceback__ else: self.fail("Should have raises a MemoryError") return traceback.format_tb(tb) tb1 = raiseMemError() tb2 = raiseMemError() self.assertEqual(tb1, tb2) @cpython_only def test_exception_with_doc(self): import _testcapi doc2 = "This is a test docstring." doc4 = "This is another test docstring." self.assertRaises(SystemError, _testcapi.make_exception_with_doc, "error1") # test basic usage of PyErr_NewException error1 = _testcapi.make_exception_with_doc("_testcapi.error1") self.assertIs(type(error1), type) self.assertTrue(issubclass(error1, Exception)) self.assertIsNone(error1.__doc__) # test with given docstring error2 = _testcapi.make_exception_with_doc("_testcapi.error2", doc2) self.assertEqual(error2.__doc__, doc2) # test with explicit base (without docstring) error3 = _testcapi.make_exception_with_doc("_testcapi.error3", base=error2) self.assertTrue(issubclass(error3, error2)) # test with explicit base tuple class C(object): pass error4 = _testcapi.make_exception_with_doc("_testcapi.error4", doc4, (error3, C)) self.assertTrue(issubclass(error4, error3)) self.assertTrue(issubclass(error4, C)) self.assertEqual(error4.__doc__, doc4) # test with explicit dictionary error5 = _testcapi.make_exception_with_doc("_testcapi.error5", "", error4, {'a': 1}) self.assertTrue(issubclass(error5, error4)) self.assertEqual(error5.a, 1) self.assertEqual(error5.__doc__, "") @cpython_only def test_memory_error_cleanup(self): # Issue #5437: preallocated MemoryError instances should not keep # traceback objects alive. from _testcapi import raise_memoryerror class C: pass wr = None def inner(): nonlocal wr c = C() wr = weakref.ref(c) raise_memoryerror() # We cannot use assertRaises since it manually deletes the traceback try: inner() except MemoryError as e: self.assertNotEqual(wr(), None) else: self.fail("MemoryError not raised") self.assertEqual(wr(), None) @no_tracing def test_recursion_error_cleanup(self): # Same test as above, but with "recursion exceeded" errors class C: pass wr = None def inner(): nonlocal wr c = C() wr = weakref.ref(c) inner() # We cannot use assertRaises since it manually deletes the traceback try: inner() except RecursionError as e: self.assertNotEqual(wr(), None) else: self.fail("RecursionError not raised") self.assertEqual(wr(), None) def test_errno_ENOTDIR(self): # Issue #12802: "not a directory" errors are ENOTDIR even on Windows with self.assertRaises(OSError) as cm: os.listdir(__file__) self.assertEqual(cm.exception.errno, errno.ENOTDIR, cm.exception) def test_unraisable(self): # Issue #22836: PyErr_WriteUnraisable() should give sensible reports class BrokenDel: def __del__(self): exc = ValueError("del is broken") # The following line is included in the traceback report: raise exc class BrokenRepr(BrokenDel): def __repr__(self): raise AttributeError("repr() is broken") class BrokenExceptionDel: def __del__(self): exc = BrokenStrException() # The following line is included in the traceback report: raise exc for test_class in (BrokenDel, BrokenRepr, BrokenExceptionDel): with self.subTest(test_class): obj = test_class() with captured_stderr() as stderr: del obj report = stderr.getvalue() self.assertIn("Exception ignored", report) if test_class is BrokenRepr: self.assertIn("<object repr() failed>", report) else: self.assertIn(test_class.__del__.__qualname__, report) self.assertIn("test_exceptions.py", report) self.assertIn("raise exc", report) if test_class is BrokenExceptionDel: self.assertIn("BrokenStrException", report) self.assertIn("<exception str() failed>", report) else: self.assertIn("ValueError", report) self.assertIn("del is broken", report) self.assertTrue(report.endswith("\n")) def test_unhandled(self): # Check for sensible reporting of unhandled exceptions for exc_type in (ValueError, BrokenStrException): with self.subTest(exc_type): try: exc = exc_type("test message") # The following line is included in the traceback report: raise exc except exc_type: with captured_stderr() as stderr: sys.__excepthook__(*sys.exc_info()) report = stderr.getvalue() self.assertIn("test_exceptions.py", report) self.assertIn("raise exc", report) self.assertIn(exc_type.__name__, report) if exc_type is BrokenStrException: self.assertIn("<exception str() failed>", report) else: self.assertIn("test message", report) self.assertTrue(report.endswith("\n")) class ImportErrorTests(unittest.TestCase): def test_attributes(self): # Setting 'name' and 'path' should not be a problem. exc = ImportError('test') self.assertIsNone(exc.name) self.assertIsNone(exc.path) exc = ImportError('test', name='somemodule') self.assertEqual(exc.name, 'somemodule') self.assertIsNone(exc.path) exc = ImportError('test', path='somepath') self.assertEqual(exc.path, 'somepath') self.assertIsNone(exc.name) exc = ImportError('test', path='somepath', name='somename') self.assertEqual(exc.name, 'somename') self.assertEqual(exc.path, 'somepath') def test_non_str_argument(self): # Issue #15778 with check_warnings(('', BytesWarning), quiet=True): arg = b'abc' exc = ImportError(arg) self.assertEqual(str(arg), str(exc)) if __name__ == '__main__': unittest.main()