File indexing completed on 2024-09-07 04:35:43
0001 #include "CondTools/Ecal/interface/EcalDAQHandler.h"
0002 #include "DataFormats/EcalDetId/interface/EcalSubdetector.h"
0003
0004 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h"
0005
0006 #include <iostream>
0007
0008
0009
0010
0011
0012
0013 const int iphiEB[36][68] = {
0014 {1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2,
0015 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4},
0016 {5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6,
0017 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8, 5, 6, 7, 8},
0018 {9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11,
0019 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10,
0020 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12, 9, 10, 11, 12},
0021 {13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15,
0022 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14,
0023 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16, 13, 14, 15, 16},
0024 {17, 18, 19, 20, 17, 18, 19, 20, 17, 18, 19, 20, 17, 18, 19, 20, 17, 18, 19, 20, 17, 18, 19,
0025 20, 17, 18, 19, 20, 17, 18, 19, 20, 17, 18, 19, 20, 17, 18, 19, 20, 17, 18, 19, 20, 17, 18,
0026 19, 20, 17, 18, 19, 20, 17, 18, 19, 20, 17, 18, 19, 20, 17, 18, 19, 20, 17, 18, 19, 20},
0027 {21, 22, 23, 24, 21, 22, 23, 24, 21, 22, 23, 24, 21, 22, 23, 24, 21, 22, 23, 24, 21, 22, 23,
0028 24, 21, 22, 23, 24, 21, 22, 23, 24, 21, 22, 23, 24, 21, 22, 23, 24, 21, 22, 23, 24, 21, 22,
0029 23, 24, 21, 22, 23, 24, 21, 22, 23, 24, 21, 22, 23, 24, 21, 22, 23, 24, 21, 22, 23, 24},
0030 {25, 26, 27, 28, 25, 26, 27, 28, 25, 26, 27, 28, 25, 26, 27, 28, 25, 26, 27, 28, 25, 26, 27,
0031 28, 25, 26, 27, 28, 25, 26, 27, 28, 25, 26, 27, 28, 25, 26, 27, 28, 25, 26, 27, 28, 25, 26,
0032 27, 28, 25, 26, 27, 28, 25, 26, 27, 28, 25, 26, 27, 28, 25, 26, 27, 28, 25, 26, 27, 28},
0033 {29, 30, 31, 32, 29, 30, 31, 32, 29, 30, 31, 32, 29, 30, 31, 32, 29, 30, 31, 32, 29, 30, 31,
0034 32, 29, 30, 31, 32, 29, 30, 31, 32, 29, 30, 31, 32, 29, 30, 31, 32, 29, 30, 31, 32, 29, 30,
0035 31, 32, 29, 30, 31, 32, 29, 30, 31, 32, 29, 30, 31, 32, 29, 30, 31, 32, 29, 30, 31, 32},
0036 {33, 34, 35, 36, 33, 34, 35, 36, 33, 34, 35, 36, 33, 34, 35, 36, 33, 34, 35, 36, 33, 34, 35,
0037 36, 33, 34, 35, 36, 33, 34, 35, 36, 33, 34, 35, 36, 33, 34, 35, 36, 33, 34, 35, 36, 33, 34,
0038 35, 36, 33, 34, 35, 36, 33, 34, 35, 36, 33, 34, 35, 36, 33, 34, 35, 36, 33, 34, 35, 36},
0039 {37, 38, 39, 40, 37, 38, 39, 40, 37, 38, 39, 40, 37, 38, 39, 40, 37, 38, 39, 40, 37, 38, 39,
0040 40, 37, 38, 39, 40, 37, 38, 39, 40, 37, 38, 39, 40, 37, 38, 39, 40, 37, 38, 39, 40, 37, 38,
0041 39, 40, 37, 38, 39, 40, 37, 38, 39, 40, 37, 38, 39, 40, 37, 38, 39, 40, 37, 38, 39, 40},
0042 {41, 42, 43, 44, 41, 42, 43, 44, 41, 42, 43, 44, 41, 42, 43, 44, 41, 42, 43, 44, 41, 42, 43,
0043 44, 41, 42, 43, 44, 41, 42, 43, 44, 41, 42, 43, 44, 41, 42, 43, 44, 41, 42, 43, 44, 41, 42,
0044 43, 44, 41, 42, 43, 44, 41, 42, 43, 44, 41, 42, 43, 44, 41, 42, 43, 44, 41, 42, 43, 44},
0045 {45, 46, 47, 48, 45, 46, 47, 48, 45, 46, 47, 48, 45, 46, 47, 48, 45, 46, 47, 48, 45, 46, 47,
0046 48, 45, 46, 47, 48, 45, 46, 47, 48, 45, 46, 47, 48, 45, 46, 47, 48, 45, 46, 47, 48, 45, 46,
0047 47, 48, 45, 46, 47, 48, 45, 46, 47, 48, 45, 46, 47, 48, 45, 46, 47, 48, 45, 46, 47, 48},
0048 {49, 50, 51, 52, 49, 50, 51, 52, 49, 50, 51, 52, 49, 50, 51, 52, 49, 50, 51, 52, 49, 50, 51,
0049 52, 49, 50, 51, 52, 49, 50, 51, 52, 49, 50, 51, 52, 49, 50, 51, 52, 49, 50, 51, 52, 49, 50,
0050 51, 52, 49, 50, 51, 52, 49, 50, 51, 52, 49, 50, 51, 52, 49, 50, 51, 52, 49, 50, 51, 52},
0051 {53, 54, 55, 56, 53, 54, 55, 56, 53, 54, 55, 56, 53, 54, 55, 56, 53, 54, 55, 56, 53, 54, 55,
0052 56, 53, 54, 55, 56, 53, 54, 55, 56, 53, 54, 55, 56, 53, 54, 55, 56, 53, 54, 55, 56, 53, 54,
0053 55, 56, 53, 54, 55, 56, 53, 54, 55, 56, 53, 54, 55, 56, 53, 54, 55, 56, 53, 54, 55, 56},
0054 {57, 58, 59, 60, 57, 58, 59, 60, 57, 58, 59, 60, 57, 58, 59, 60, 57, 58, 59, 60, 57, 58, 59,
0055 60, 57, 58, 59, 60, 57, 58, 59, 60, 57, 58, 59, 60, 57, 58, 59, 60, 57, 58, 59, 60, 57, 58,
0056 59, 60, 57, 58, 59, 60, 57, 58, 59, 60, 57, 58, 59, 60, 57, 58, 59, 60, 57, 58, 59, 60},
0057 {61, 62, 63, 64, 61, 62, 63, 64, 61, 62, 63, 64, 61, 62, 63, 64, 61, 62, 63, 64, 61, 62, 63,
0058 64, 61, 62, 63, 64, 61, 62, 63, 64, 61, 62, 63, 64, 61, 62, 63, 64, 61, 62, 63, 64, 61, 62,
0059 63, 64, 61, 62, 63, 64, 61, 62, 63, 64, 61, 62, 63, 64, 61, 62, 63, 64, 61, 62, 63, 64},
0060 {65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67,
0061 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66,
0062 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68, 65, 66, 67, 68},
0063 {69, 70, 71, 72, 69, 70, 71, 72, 69, 70, 71, 72, 69, 70, 71, 72, 69, 70, 71, 72, 69, 70, 71,
0064 72, 69, 70, 71, 72, 69, 70, 71, 72, 69, 70, 71, 72, 69, 70, 71, 72, 69, 70, 71, 72, 69, 70,
0065 71, 72, 69, 70, 71, 72, 69, 70, 71, 72, 69, 70, 71, 72, 69, 70, 71, 72, 69, 70, 71, 72},
0066 {4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3,
0067 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1},
0068 {8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7,
0069 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5, 8, 7, 6, 5},
0070 {12, 11, 10, 9, 12, 11, 10, 9, 12, 11, 10, 9, 12, 11, 10, 9, 12, 11, 10, 9, 12, 11, 10,
0071 9, 12, 11, 10, 9, 12, 11, 10, 9, 12, 11, 10, 9, 12, 11, 10, 9, 12, 11, 10, 9, 12, 11,
0072 10, 9, 12, 11, 10, 9, 12, 11, 10, 9, 12, 11, 10, 9, 12, 11, 10, 9, 12, 11, 10, 9},
0073 {16, 15, 14, 13, 16, 15, 14, 13, 16, 15, 14, 13, 16, 15, 14, 13, 16, 15, 14, 13, 16, 15, 14,
0074 13, 16, 15, 14, 13, 16, 15, 14, 13, 16, 15, 14, 13, 16, 15, 14, 13, 16, 15, 14, 13, 16, 15,
0075 14, 13, 16, 15, 14, 13, 16, 15, 14, 13, 16, 15, 14, 13, 16, 15, 14, 13, 16, 15, 14, 13},
0076 {20, 19, 18, 17, 20, 19, 18, 17, 20, 19, 18, 17, 20, 19, 18, 17, 20, 19, 18, 17, 20, 19, 18,
0077 17, 20, 19, 18, 17, 20, 19, 18, 17, 20, 19, 18, 17, 20, 19, 18, 17, 20, 19, 18, 17, 20, 19,
0078 18, 17, 20, 19, 18, 17, 20, 19, 18, 17, 20, 19, 18, 17, 20, 19, 18, 17, 20, 19, 18, 17},
0079 {24, 23, 22, 21, 24, 23, 22, 21, 24, 23, 22, 21, 24, 23, 22, 21, 24, 23, 22, 21, 24, 23, 22,
0080 21, 24, 23, 22, 21, 24, 23, 22, 21, 24, 23, 22, 21, 24, 23, 22, 21, 24, 23, 22, 21, 24, 23,
0081 22, 21, 24, 23, 22, 21, 24, 23, 22, 21, 24, 23, 22, 21, 24, 23, 22, 21, 24, 23, 22, 21},
0082 {28, 27, 26, 25, 28, 27, 26, 25, 28, 27, 26, 25, 28, 27, 26, 25, 28, 27, 26, 25, 28, 27, 26,
0083 25, 28, 27, 26, 25, 28, 27, 26, 25, 28, 27, 26, 25, 28, 27, 26, 25, 28, 27, 26, 25, 28, 27,
0084 26, 25, 28, 27, 26, 25, 28, 27, 26, 25, 28, 27, 26, 25, 28, 27, 26, 25, 28, 27, 26, 25},
0085 {32, 31, 30, 29, 32, 31, 30, 29, 32, 31, 30, 29, 32, 31, 30, 29, 32, 31, 30, 29, 32, 31, 30,
0086 29, 32, 31, 30, 29, 32, 31, 30, 29, 32, 31, 30, 29, 32, 31, 30, 29, 32, 31, 30, 29, 32, 31,
0087 30, 29, 32, 31, 30, 29, 32, 31, 30, 29, 32, 31, 30, 29, 32, 31, 30, 29, 32, 31, 30, 29},
0088 {36, 35, 34, 33, 36, 35, 34, 33, 36, 35, 34, 33, 36, 35, 34, 33, 36, 35, 34, 33, 36, 35, 34,
0089 33, 36, 35, 34, 33, 36, 35, 34, 33, 36, 35, 34, 33, 36, 35, 34, 33, 36, 35, 34, 33, 36, 35,
0090 34, 33, 36, 35, 34, 33, 36, 35, 34, 33, 36, 35, 34, 33, 36, 35, 34, 33, 36, 35, 34, 33},
0091 {40, 39, 38, 37, 40, 39, 38, 37, 40, 39, 38, 37, 40, 39, 38, 37, 40, 39, 38, 37, 40, 39, 38,
0092 37, 40, 39, 38, 37, 40, 39, 38, 37, 40, 39, 38, 37, 40, 39, 38, 37, 40, 39, 38, 37, 40, 39,
0093 38, 37, 40, 39, 38, 37, 40, 39, 38, 37, 40, 39, 38, 37, 40, 39, 38, 37, 40, 39, 38, 37},
0094 {44, 43, 42, 41, 44, 43, 42, 41, 44, 43, 42, 41, 44, 43, 42, 41, 44, 43, 42, 41, 44, 43, 42,
0095 41, 44, 43, 42, 41, 44, 43, 42, 41, 44, 43, 42, 41, 44, 43, 42, 41, 44, 43, 42, 41, 44, 43,
0096 42, 41, 44, 43, 42, 41, 44, 43, 42, 41, 44, 43, 42, 41, 44, 43, 42, 41, 44, 43, 42, 41},
0097 {48, 47, 46, 45, 48, 47, 46, 45, 48, 47, 46, 45, 48, 47, 46, 45, 48, 47, 46, 45, 48, 47, 46,
0098 45, 48, 47, 46, 45, 48, 47, 46, 45, 48, 47, 46, 45, 48, 47, 46, 45, 48, 47, 46, 45, 48, 47,
0099 46, 45, 48, 47, 46, 45, 48, 47, 46, 45, 48, 47, 46, 45, 48, 47, 46, 45, 48, 47, 46, 45},
0100 {52, 51, 50, 49, 52, 51, 50, 49, 52, 51, 50, 49, 52, 51, 50, 49, 52, 51, 50, 49, 52, 51, 50,
0101 49, 52, 51, 50, 49, 52, 51, 50, 49, 52, 51, 50, 49, 52, 51, 50, 49, 52, 51, 50, 49, 52, 51,
0102 50, 49, 52, 51, 50, 49, 52, 51, 50, 49, 52, 51, 50, 49, 52, 51, 50, 49, 52, 51, 50, 49},
0103 {56, 55, 54, 53, 56, 55, 54, 53, 56, 55, 54, 53, 56, 55, 54, 53, 56, 55, 54, 53, 56, 55, 54,
0104 53, 56, 55, 54, 53, 56, 55, 54, 53, 56, 55, 54, 53, 56, 55, 54, 53, 56, 55, 54, 53, 56, 55,
0105 54, 53, 56, 55, 54, 53, 56, 55, 54, 53, 56, 55, 54, 53, 56, 55, 54, 53, 56, 55, 54, 53},
0106 {60, 59, 58, 57, 60, 59, 58, 57, 60, 59, 58, 57, 60, 59, 58, 57, 60, 59, 58, 57, 60, 59, 58,
0107 57, 60, 59, 58, 57, 60, 59, 58, 57, 60, 59, 58, 57, 60, 59, 58, 57, 60, 59, 58, 57, 60, 59,
0108 58, 57, 60, 59, 58, 57, 60, 59, 58, 57, 60, 59, 58, 57, 60, 59, 58, 57, 60, 59, 58, 57},
0109 {64, 63, 62, 61, 64, 63, 62, 61, 64, 63, 62, 61, 64, 63, 62, 61, 64, 63, 62, 61, 64, 63, 62,
0110 61, 64, 63, 62, 61, 64, 63, 62, 61, 64, 63, 62, 61, 64, 63, 62, 61, 64, 63, 62, 61, 64, 63,
0111 62, 61, 64, 63, 62, 61, 64, 63, 62, 61, 64, 63, 62, 61, 64, 63, 62, 61, 64, 63, 62, 61},
0112 {68, 67, 66, 65, 68, 67, 66, 65, 68, 67, 66, 65, 68, 67, 66, 65, 68, 67, 66, 65, 68, 67, 66,
0113 65, 68, 67, 66, 65, 68, 67, 66, 65, 68, 67, 66, 65, 68, 67, 66, 65, 68, 67, 66, 65, 68, 67,
0114 66, 65, 68, 67, 66, 65, 68, 67, 66, 65, 68, 67, 66, 65, 68, 67, 66, 65, 68, 67, 66, 65},
0115 {72, 71, 70, 69, 72, 71, 70, 69, 72, 71, 70, 69, 72, 71, 70, 69, 72, 71, 70, 69, 72, 71, 70,
0116 69, 72, 71, 70, 69, 72, 71, 70, 69, 72, 71, 70, 69, 72, 71, 70, 69, 72, 71, 70, 69, 72, 71,
0117 70, 69, 72, 71, 70, 69, 72, 71, 70, 69, 72, 71, 70, 69, 72, 71, 70, 69, 72, 71, 70, 69}};
0118 const int ietaEB[36][68] = {{1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0119 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0120 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0121 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0122 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0123 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0124 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0125 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0126 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0127 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0128 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0129 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0130 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0131 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0132 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0133 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0134 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0135 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0136 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0137 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0138 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0139 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0140 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0141 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0142 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0143 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0144 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0145 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0146 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0147 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0148 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0149 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0150 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0151 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0152 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0153 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0154 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0155 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0156 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0157 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0158 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0159 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0160 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0161 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0162 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0163 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0164 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0165 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0166 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0167 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0168 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0169 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0170 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0171 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0172 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0173 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0174 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0175 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0176 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0177 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0178 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0179 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0180 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0181 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0182 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0183 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0184 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0185 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0186 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0187 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0188 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0189 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0190 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0191 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0192 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0193 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0194 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0195 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0196 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0197 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0198 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0199 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0200 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0201 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0202 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0203 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0204 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0205 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0206 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0207 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0208 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0209 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0210 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0211 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0212 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0213 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0214 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0215 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0216 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0217 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0218 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0219 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0220 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0221 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0222 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17},
0223 {1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6,
0224 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12,
0225 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17}};
0226 const int ixx[18][41][3] = {
0227 {{19, 0, 0}, {20, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {20, 0, 0},
0228 {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {20, 0, 0}, {14, 0, 0},
0229 {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {20, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0},
0230 {18, 0, 0}, {19, 0, 0}, {19, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {20, 0, 0}, {0, 0, 0}, {0, 0, 0},
0231 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0232 {{16, 0, 0}, {17, 0, 0}, {18, 17, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0},
0233 {18, 0, 0}, {19, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {13, 0, 0},
0234 {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {12, 20, 19}, {13, 0, 0}, {14, 0, 0},
0235 {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {13, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0236 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0237 {{11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {11, 0, 0},
0238 {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {13, 0, 0}, {14, 0, 0},
0239 {15, 0, 0}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {13, 0, 0},
0240 {14, 0, 0}, {15, 0, 0}, {16, 13, 0}, {13, 0, 0}, {14, 0, 0}, {13, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0241 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0242 {{10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {10, 0, 0},
0243 {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {8, 0, 0}, {7, 0, 0},
0244 {6, 0, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {8, 0, 0},
0245 {7, 0, 0}, {6, 0, 0}, {5, 8, 0}, {8, 0, 0}, {7, 0, 0}, {8, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0246 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0247 {{5, 0, 0}, {4, 0, 0}, {3, 4, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0},
0248 {3, 0, 0}, {2, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {8, 0, 0},
0249 {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {9, 1, 2}, {8, 0, 0}, {7, 0, 0},
0250 {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {8, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0251 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0252 {{2, 0, 0}, {1, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0},
0253 {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {7, 0, 0},
0254 {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0},
0255 {3, 0, 0}, {2, 0, 0}, {2, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {0, 0, 0}, {0, 0, 0},
0256 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0257 {{8, 0, 0}, {8, 0, 0}, {7, 0, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {8, 0, 0}, {7, 0, 0},
0258 {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {3, 2, 9}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0},
0259 {4, 0, 0}, {3, 0, 0}, {5, 4, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {5, 0, 0},
0260 {7, 0, 0}, {7, 0, 0}, {6, 0, 0}, {6, 0, 0}, {9, 0, 0}, {9, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0261 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0262 {{8, 0, 0}, {8, 0, 0}, {8, 0, 0}, {9, 0, 0}, {9, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0},
0263 {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {0, 0, 0},
0264 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0},
0265 {12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0},
0266 {12, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}},
0267 {{13, 0, 0}, {13, 0, 0}, {14, 0, 0}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {13, 0, 0}, {14, 0, 0},
0268 {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {18, 19, 12}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0},
0269 {17, 0, 0}, {18, 0, 0}, {16, 17, 0}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {16, 0, 0},
0270 {14, 0, 0}, {14, 0, 0}, {15, 0, 0}, {15, 0, 0}, {12, 0, 0}, {12, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0271 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0272 {{19, 0, 0}, {20, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {20, 0, 0},
0273 {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {20, 0, 0}, {14, 0, 0},
0274 {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {20, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0},
0275 {18, 0, 0}, {19, 0, 0}, {19, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {20, 0, 0}, {0, 0, 0}, {0, 0, 0},
0276 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0277 {{16, 0, 0}, {17, 0, 0}, {18, 17, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0},
0278 {18, 0, 0}, {19, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {13, 0, 0},
0279 {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {19, 0, 0}, {12, 20, 19}, {13, 0, 0}, {14, 0, 0},
0280 {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {13, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0281 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0282 {{11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {11, 0, 0},
0283 {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {13, 0, 0}, {14, 0, 0},
0284 {15, 0, 0}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {13, 0, 0},
0285 {14, 0, 0}, {15, 0, 0}, {16, 13, 0}, {13, 0, 0}, {14, 0, 0}, {13, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0286 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0287 {{10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {10, 0, 0},
0288 {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {8, 0, 0}, {7, 0, 0},
0289 {6, 0, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {8, 0, 0},
0290 {7, 0, 0}, {6, 0, 0}, {5, 8, 0}, {8, 0, 0}, {7, 0, 0}, {8, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0291 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0292 {{5, 0, 0}, {4, 0, 0}, {3, 4, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0},
0293 {3, 0, 0}, {2, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {8, 0, 0},
0294 {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {9, 1, 2}, {8, 0, 0}, {7, 0, 0},
0295 {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {8, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0296 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0297 {{2, 0, 0}, {1, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0},
0298 {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {7, 0, 0},
0299 {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0},
0300 {3, 0, 0}, {2, 0, 0}, {2, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {0, 0, 0}, {0, 0, 0},
0301 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0302 {{8, 0, 0}, {8, 0, 0}, {7, 0, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {8, 0, 0}, {7, 0, 0},
0303 {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {3, 2, 9}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0},
0304 {4, 0, 0}, {3, 0, 0}, {5, 4, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {5, 0, 0},
0305 {7, 0, 0}, {7, 0, 0}, {6, 0, 0}, {6, 0, 0}, {9, 0, 0}, {9, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0306 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0307 {{13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0},
0308 {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {0, 0, 0},
0309 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {8, 0, 0}, {8, 0, 0}, {8, 0, 0},
0310 {9, 0, 0}, {9, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0},
0311 {9, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}},
0312 {{13, 0, 0}, {13, 0, 0}, {14, 0, 0}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {13, 0, 0}, {14, 0, 0},
0313 {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {18, 0, 0}, {18, 19, 12}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0},
0314 {17, 0, 0}, {18, 0, 0}, {16, 17, 0}, {13, 0, 0}, {14, 0, 0}, {15, 0, 0}, {16, 0, 0}, {17, 0, 0}, {16, 0, 0},
0315 {14, 0, 0}, {14, 0, 0}, {15, 0, 0}, {15, 0, 0}, {12, 0, 0}, {12, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0316 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}};
0317 const int iyy[18][41][3] = {
0318 {{12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0},
0319 {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {9, 0, 0},
0320 {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {8, 0, 0}, {8, 0, 0}, {8, 0, 0},
0321 {8, 0, 0}, {8, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {6, 0, 0}, {8, 0, 0}, {0, 0, 0}, {0, 0, 0},
0322 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0323 {{17, 0, 0}, {17, 0, 0}, {17, 18, 0}, {16, 0, 0}, {16, 0, 0}, {16, 0, 0}, {15, 0, 0}, {15, 0, 0}, {15, 0, 0},
0324 {15, 0, 0}, {15, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {13, 0, 0},
0325 {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {12, 13, 16}, {12, 0, 0}, {12, 0, 0},
0326 {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0327 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0328 {{20, 0, 0}, {19, 0, 0}, {18, 0, 0}, {17, 0, 0}, {20, 0, 0}, {19, 0, 0}, {18, 0, 0}, {17, 0, 0}, {16, 0, 0},
0329 {15, 0, 0}, {14, 0, 0}, {13, 0, 0}, {16, 0, 0}, {15, 0, 0}, {14, 0, 0}, {13, 0, 0}, {19, 0, 0}, {19, 0, 0},
0330 {19, 0, 0}, {18, 0, 0}, {18, 0, 0}, {18, 0, 0}, {18, 0, 0}, {17, 0, 0}, {17, 0, 0}, {17, 0, 0}, {16, 0, 0},
0331 {16, 0, 0}, {16, 0, 0}, {19, 20, 0}, {15, 0, 0}, {15, 0, 0}, {14, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0332 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0333 {{20, 0, 0}, {19, 0, 0}, {18, 0, 0}, {17, 0, 0}, {20, 0, 0}, {19, 0, 0}, {18, 0, 0}, {17, 0, 0}, {16, 0, 0},
0334 {15, 0, 0}, {14, 0, 0}, {13, 0, 0}, {16, 0, 0}, {15, 0, 0}, {14, 0, 0}, {13, 0, 0}, {19, 0, 0}, {19, 0, 0},
0335 {19, 0, 0}, {18, 0, 0}, {18, 0, 0}, {18, 0, 0}, {18, 0, 0}, {17, 0, 0}, {17, 0, 0}, {17, 0, 0}, {16, 0, 0},
0336 {16, 0, 0}, {16, 0, 0}, {19, 20, 0}, {15, 0, 0}, {15, 0, 0}, {14, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0337 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0338 {{17, 0, 0}, {17, 0, 0}, {17, 18, 0}, {16, 0, 0}, {16, 0, 0}, {16, 0, 0}, {15, 0, 0}, {15, 0, 0}, {15, 0, 0},
0339 {15, 0, 0}, {15, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {13, 0, 0},
0340 {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {12, 13, 16}, {12, 0, 0}, {12, 0, 0},
0341 {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0342 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0343 {{12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0},
0344 {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {9, 0, 0},
0345 {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {8, 0, 0}, {8, 0, 0}, {8, 0, 0},
0346 {8, 0, 0}, {8, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {6, 0, 0}, {8, 0, 0}, {0, 0, 0}, {0, 0, 0},
0347 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0348 {{9, 0, 0}, {8, 0, 0}, {8, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {6, 0, 0}, {6, 0, 0},
0349 {6, 0, 0}, {6, 0, 0}, {6, 0, 0}, {6, 0, 0}, {4, 5, 9}, {5, 0, 0}, {5, 0, 0}, {5, 0, 0}, {5, 0, 0},
0350 {5, 0, 0}, {5, 0, 0}, {2, 3, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {3, 0, 0},
0351 {3, 0, 0}, {2, 0, 0}, {3, 0, 0}, {2, 0, 0}, {8, 0, 0}, {7, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0352 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0353 {{3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {6, 0, 0}, {5, 0, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0},
0354 {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {0, 0, 0},
0355 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0},
0356 {6, 0, 0}, {5, 0, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0},
0357 {1, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}},
0358 {{9, 0, 0}, {8, 0, 0}, {8, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {6, 0, 0}, {6, 0, 0},
0359 {6, 0, 0}, {6, 0, 0}, {6, 0, 0}, {6, 0, 0}, {4, 5, 9}, {5, 0, 0}, {5, 0, 0}, {5, 0, 0}, {5, 0, 0},
0360 {5, 0, 0}, {5, 0, 0}, {2, 3, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {3, 0, 0},
0361 {3, 0, 0}, {2, 0, 0}, {3, 0, 0}, {2, 0, 0}, {8, 0, 0}, {7, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0362 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0363 {{12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0},
0364 {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {9, 0, 0},
0365 {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {8, 0, 0}, {8, 0, 0}, {8, 0, 0},
0366 {8, 0, 0}, {8, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {6, 0, 0}, {8, 0, 0}, {0, 0, 0}, {0, 0, 0},
0367 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0368 {{17, 0, 0}, {17, 0, 0}, {17, 18, 0}, {16, 0, 0}, {16, 0, 0}, {16, 0, 0}, {15, 0, 0}, {15, 0, 0}, {15, 0, 0},
0369 {15, 0, 0}, {15, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {13, 0, 0},
0370 {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {12, 13, 16}, {12, 0, 0}, {12, 0, 0},
0371 {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0372 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0373 {{20, 0, 0}, {19, 0, 0}, {18, 0, 0}, {17, 0, 0}, {20, 0, 0}, {19, 0, 0}, {18, 0, 0}, {17, 0, 0}, {16, 0, 0},
0374 {15, 0, 0}, {14, 0, 0}, {13, 0, 0}, {16, 0, 0}, {15, 0, 0}, {14, 0, 0}, {13, 0, 0}, {19, 0, 0}, {19, 0, 0},
0375 {19, 0, 0}, {18, 0, 0}, {18, 0, 0}, {18, 0, 0}, {18, 0, 0}, {17, 0, 0}, {17, 0, 0}, {17, 0, 0}, {16, 0, 0},
0376 {16, 0, 0}, {16, 0, 0}, {19, 20, 0}, {15, 0, 0}, {15, 0, 0}, {14, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0377 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0378 {{20, 0, 0}, {19, 0, 0}, {18, 0, 0}, {17, 0, 0}, {20, 0, 0}, {19, 0, 0}, {18, 0, 0}, {17, 0, 0}, {16, 0, 0},
0379 {15, 0, 0}, {14, 0, 0}, {13, 0, 0}, {16, 0, 0}, {15, 0, 0}, {14, 0, 0}, {13, 0, 0}, {19, 0, 0}, {19, 0, 0},
0380 {19, 0, 0}, {18, 0, 0}, {18, 0, 0}, {18, 0, 0}, {18, 0, 0}, {17, 0, 0}, {17, 0, 0}, {17, 0, 0}, {16, 0, 0},
0381 {16, 0, 0}, {16, 0, 0}, {19, 20, 0}, {15, 0, 0}, {15, 0, 0}, {14, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0382 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0383 {{17, 0, 0}, {17, 0, 0}, {17, 18, 0}, {16, 0, 0}, {16, 0, 0}, {16, 0, 0}, {15, 0, 0}, {15, 0, 0}, {15, 0, 0},
0384 {15, 0, 0}, {15, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {14, 0, 0}, {13, 0, 0},
0385 {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {13, 0, 0}, {12, 13, 16}, {12, 0, 0}, {12, 0, 0},
0386 {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0387 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0388 {{12, 0, 0}, {12, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0}, {11, 0, 0},
0389 {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {10, 0, 0}, {9, 0, 0},
0390 {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {9, 0, 0}, {8, 0, 0}, {8, 0, 0}, {8, 0, 0},
0391 {8, 0, 0}, {8, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {6, 0, 0}, {8, 0, 0}, {0, 0, 0}, {0, 0, 0},
0392 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0393 {{9, 0, 0}, {8, 0, 0}, {8, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {6, 0, 0}, {6, 0, 0},
0394 {6, 0, 0}, {6, 0, 0}, {6, 0, 0}, {6, 0, 0}, {4, 5, 9}, {5, 0, 0}, {5, 0, 0}, {5, 0, 0}, {5, 0, 0},
0395 {5, 0, 0}, {5, 0, 0}, {2, 3, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {3, 0, 0},
0396 {3, 0, 0}, {2, 0, 0}, {3, 0, 0}, {2, 0, 0}, {8, 0, 0}, {7, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0397 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},
0398 {{3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {6, 0, 0}, {5, 0, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0},
0399 {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}, {0, 0, 0},
0400 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0},
0401 {6, 0, 0}, {5, 0, 0}, {8, 0, 0}, {7, 0, 0}, {6, 0, 0}, {5, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0},
0402 {1, 0, 0}, {4, 0, 0}, {3, 0, 0}, {2, 0, 0}, {1, 0, 0}},
0403 {{9, 0, 0}, {8, 0, 0}, {8, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {7, 0, 0}, {6, 0, 0}, {6, 0, 0},
0404 {6, 0, 0}, {6, 0, 0}, {6, 0, 0}, {6, 0, 0}, {4, 5, 9}, {5, 0, 0}, {5, 0, 0}, {5, 0, 0}, {5, 0, 0},
0405 {5, 0, 0}, {5, 0, 0}, {2, 3, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {4, 0, 0}, {3, 0, 0},
0406 {3, 0, 0}, {2, 0, 0}, {3, 0, 0}, {2, 0, 0}, {8, 0, 0}, {7, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
0407 {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}};
0408
0409 popcon::EcalDAQHandler::EcalDAQHandler(const edm::ParameterSet& ps)
0410 : m_name(ps.getUntrackedParameter<std::string>("name", "EcalDAQHandler")) {
0411 std::cout << "EcalDAQ Source handler constructor\n" << std::endl;
0412 m_firstRun = (unsigned long)atoi(ps.getParameter<std::string>("firstRun").c_str());
0413 m_lastRun = (unsigned long)atoi(ps.getParameter<std::string>("lastRun").c_str());
0414 m_sid = ps.getParameter<std::string>("OnlineDBSID");
0415 m_user = ps.getParameter<std::string>("OnlineDBUser");
0416 m_pass = ps.getParameter<std::string>("OnlineDBPassword");
0417 m_location = ps.getParameter<std::string>("location");
0418 m_runtype = ps.getParameter<std::string>("runtype");
0419 m_gentag = ps.getParameter<std::string>("gentag");
0420 m_debug = ps.getParameter<bool>("debug");
0421
0422 std::cout << m_sid << "/" << m_user << std::endl;
0423 }
0424
0425 popcon::EcalDAQHandler::~EcalDAQHandler() {}
0426
0427 uint16_t popcon::EcalDAQHandler::OffDBStatus(uint16_t dbStatus, int pos) {
0428 uint16_t hv_off_dbstatus = (dbStatus & (1 << pos));
0429 if (hv_off_dbstatus > 0)
0430 hv_off_dbstatus = 1;
0431 return hv_off_dbstatus;
0432 }
0433
0434 void popcon::EcalDAQHandler::getNewObjects() {
0435 if (m_debug)
0436 std::cout << "------- Ecal DAQ - > getNewObjects\n";
0437
0438 std::ostringstream ss;
0439 ss << "ECAL ";
0440
0441 unsigned long long max_since = 1;
0442
0443
0444 max_since = tagInfo().lastInterval.since;
0445
0446
0447 std::cout << " max_since : " << max_since << std::endl;
0448
0449 uint16_t oldEBStatus[72][17][2];
0450 uint16_t newEBStatus[72][17][2];
0451 uint16_t oldEEStatus[20][20][2];
0452 uint16_t newEEStatus[20][20][2];
0453
0454
0455 EcalDAQTowerStatus* daq_temp = new EcalDAQTowerStatus();
0456
0457 if (tagInfo().size) {
0458 Ref daq_db = lastPayload();
0459 if (m_debug)
0460 std::cout << "retrieved last payload " << std::endl;
0461
0462
0463 int iz = -1;
0464 for (int k = 0; k < 2; k++) {
0465 if (k == 1)
0466 iz = 1;
0467 for (int iphi = 1; iphi < 73; iphi++) {
0468 for (int ieta = 1; ieta < 18; ieta++) {
0469 if (EcalTrigTowerDetId::validDetId(iz, EcalBarrel, ieta, iphi)) {
0470 EcalTrigTowerDetId ebid(iz, EcalBarrel, ieta, iphi);
0471
0472 uint16_t dbStatus = 0;
0473 dbStatus = (daq_db->barrel(ebid.hashedIndex())).getStatusCode();
0474 oldEBStatus[iphi - 1][ieta - 1][k] = dbStatus;
0475
0476 EcalDAQTowerStatus::const_iterator it = daq_db->find(ebid.rawId());
0477 if (it != daq_db->end()) {
0478 } else {
0479 std::cout << "*** error channel not found: eta/phi =" << ieta << "/" << iphi << std::endl;
0480 }
0481 daq_temp->setValue(ebid, dbStatus);
0482 if (m_debug && dbStatus != 0)
0483 std::cout << "barrel side " << k << " phi " << iphi << " eta " << ieta << " status " << dbStatus
0484 << std::endl;
0485 }
0486 }
0487 }
0488
0489
0490 for (int ix = 1; ix < 21; ix++) {
0491 for (int iy = 1; iy < 21; iy++) {
0492 if (EcalScDetId::validDetId(ix, iy, iz)) {
0493 EcalScDetId eeid(ix, iy, iz);
0494
0495 EcalDAQTowerStatus::const_iterator it = daq_db->find(eeid.rawId());
0496
0497 uint16_t dbStatus = 0;
0498 if (it != daq_db->end()) {
0499 dbStatus = it->getStatusCode();
0500 }
0501 oldEEStatus[ix - 1][iy - 1][k] = dbStatus;
0502 daq_temp->setValue(eeid, dbStatus);
0503 if (m_debug && dbStatus != 0)
0504 std::cout << "endcap side " << k << " x " << ix << " y " << iy << " status " << dbStatus << std::endl;
0505 }
0506 }
0507 }
0508 }
0509 }
0510 else {
0511 if (m_debug)
0512 std::cout << " No db found : set default values " << std::endl;
0513
0514 int iz = -1;
0515 for (int k = 0; k < 2; k++) {
0516 if (k == 1)
0517 iz = 1;
0518 for (int iphi = 1; iphi < 73; iphi++) {
0519 for (int ieta = 1; ieta < 18; ieta++) {
0520 if (EcalTrigTowerDetId::validDetId(iz, EcalBarrel, ieta, iphi)) {
0521 EcalTrigTowerDetId ebid(iz, EcalBarrel, ieta, iphi);
0522
0523 uint16_t dbStatus = 0;
0524 oldEBStatus[iphi - 1][ieta - 1][k] = dbStatus;
0525 daq_temp->setValue(ebid, dbStatus);
0526 }
0527 }
0528 }
0529
0530 for (int ix = 1; ix < 21; ix++) {
0531 for (int iy = 1; iy < 21; iy++) {
0532 if (EcalScDetId::validDetId(ix, iy, iz)) {
0533 EcalScDetId eeid(ix, iy, iz);
0534 uint16_t dbStatus = 0;
0535 oldEEStatus[ix - 1][iy - 1][k] = dbStatus;
0536 daq_temp->setValue(eeid, dbStatus);
0537 }
0538 }
0539 }
0540 }
0541 }
0542
0543
0544
0545 if (m_debug)
0546 std::cout << "Retrieving DAQ status from OMDS DB ... " << std::endl;
0547 econn = new EcalCondDBInterface(m_sid, m_user, m_pass);
0548 if (m_debug)
0549 std::cout << "Connection done" << std::endl;
0550
0551 if (!econn) {
0552 std::cout << " Problem with OMDS: connection parameters " << m_sid << "/" << m_user << "/" << m_pass << std::endl;
0553 throw cms::Exception("OMDS not available");
0554 }
0555
0556
0557 LocationDef my_locdef;
0558 my_locdef.setLocation(m_location);
0559
0560 RunTypeDef my_rundef;
0561 my_rundef.setRunType(m_runtype);
0562
0563 RunTag my_runtag;
0564 my_runtag.setLocationDef(my_locdef);
0565 my_runtag.setRunTypeDef(my_rundef);
0566 my_runtag.setGeneralTag(m_gentag);
0567
0568
0569 int min_run = 0;
0570 if (m_firstRun < (unsigned long)max_since) {
0571 min_run = (int)max_since + 1;
0572 } else {
0573 min_run = (int)m_firstRun;
0574 }
0575 int max_run = (int)m_lastRun;
0576 std::cout << "min_run " << min_run << " max_run " << max_run << std::endl;
0577
0578 RunList my_list;
0579 my_list = econn->fetchRunListByLocation(my_runtag, min_run, max_run, my_locdef);
0580
0581 std::vector<RunIOV> run_vec = my_list.getRuns();
0582 int num_runs = run_vec.size();
0583
0584 std::cout << " number of runs is : " << num_runs << std::endl;
0585
0586 unsigned long irun = 0;
0587 if (num_runs > 0) {
0588
0589
0590
0591
0592
0593
0594 for (int kr = num_runs - 1; kr < num_runs; kr++) {
0595
0596
0597
0598
0599 if (run_vec[kr].getRunTag().getGeneralTag() != "GLOBAL")
0600 continue;
0601 bool somediff = false;
0602
0603 irun = (unsigned long)run_vec[kr].getRunNumber();
0604 for (int k = 0; k < 2; k++) {
0605 for (int iphi = 0; iphi < 72; iphi++) {
0606 for (int ieta = 0; ieta < 17; ieta++) {
0607 newEBStatus[iphi][ieta][k] = 0;
0608 }
0609 }
0610 for (int ix = 0; ix < 20; ix++) {
0611 for (int iy = 0; iy < 20; iy++) {
0612 newEEStatus[ix][iy][k] = 0;
0613 }
0614 }
0615 }
0616
0617
0618 std::map<EcalLogicID, RunDat> fed_dat;
0619 econn->fetchDataSet(&fed_dat, &run_vec[kr]);
0620
0621
0622 typedef std::map<EcalLogicID, RunDat>::const_iterator fedIter;
0623
0624 RunDat rdat_fe;
0625 EcalLogicID idfed;
0626
0627 std::map<EcalLogicID, RunFEConfigDat> feconfig;
0628 econn->fetchDataSet(&feconfig, &run_vec[kr]);
0629
0630 if (fed_dat.empty() || feconfig.empty()) {
0631 std::cout << " run " << irun << " tag " << run_vec[kr].getRunTag().getGeneralTag() << " Run type "
0632 << run_vec[kr].getRunTag().getRunTypeDef().getRunType()
0633 << " feconfig and/or read FED size = 0, leaving..." << std::endl;
0634 continue;
0635 }
0636
0637 if (fed_dat.size() != 54) {
0638 int SM[36] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0639 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
0640 int Sect[2][9] = {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}};
0641 for (fedIter p = fed_dat.begin(); p != fed_dat.end(); p++) {
0642 idfed = p->first;
0643 int sm = 0;
0644 int z = 0;
0645 if (idfed.getLogicID() < 2000000000) {
0646 sm = idfed.getID1();
0647
0648 SM[sm - 1] = 1;
0649 } else {
0650 z = idfed.getID1();
0651 sm = idfed.getID2();
0652
0653 int izz = z;
0654 if (z == -1)
0655 izz = 0;
0656 Sect[izz][sm - 1] = 1;
0657 }
0658 }
0659
0660
0661
0662
0663
0664
0665
0666 for (int sm = 0; sm < 36; sm++)
0667 if (SM[sm] != 1) {
0668
0669 if (sm < 18)
0670 for (int tt = 0; tt < 68; tt++)
0671 newEBStatus[iphiEB[sm][tt] - 1][ietaEB[sm][tt] - 1][0] = 1;
0672 else
0673 for (int tt = 0; tt < 68; tt++)
0674 newEBStatus[iphiEB[sm - 18][tt] - 1][ietaEB[sm - 18][tt] - 1][1] = 1;
0675 }
0676 for (int z = 0; z < 2; z++)
0677 for (int sec = 0; sec < 9; sec++)
0678 if (Sect[z][sec] != 1) {
0679
0680 int sec18 = sec;
0681 if (z == 1)
0682 sec18 = sec + 9;
0683 for (int sc = 0; sc < 41; sc++) {
0684 if (ixx[sec18][sc][0] != 0) {
0685 newEEStatus[ixx[sec18][sc][0] - 1][iyy[sec18][sc][0] - 1][z] = 1;
0686 if (ixx[sec18][sc][1] != 0) {
0687 newEEStatus[ixx[sec18][sc][1] - 1][iyy[sec18][sc][1] - 1][z] = 1;
0688 if (ixx[sec18][sc][2] != 0) {
0689 newEEStatus[ixx[sec18][sc][2] - 1][iyy[sec18][sc][2] - 1][z] = 1;
0690 }
0691 }
0692 }
0693 }
0694 }
0695 }
0696
0697 typedef std::map<EcalLogicID, RunFEConfigDat>::const_iterator feConfIter;
0698
0699 RunFEConfigDat rd_fe;
0700
0701 int fe_conf_id = 0;
0702 for (feConfIter p = feconfig.begin(); p != feconfig.end(); p++) {
0703
0704 rd_fe = p->second;
0705 fe_conf_id = rd_fe.getConfigId();
0706 }
0707
0708
0709 ODFEDAQConfig myconfig;
0710 myconfig.setId(fe_conf_id);
0711 econn->fetchConfigSet(&myconfig);
0712
0713
0714 int myTT = myconfig.getBadTTId();
0715 ODBadTTInfo mybadTT;
0716 std::vector<ODBadTTDat> badTT_dat;
0717 unsigned NbadTT = 0;
0718
0719
0720
0721
0722
0723
0724
0725 if (myTT != 0) {
0726 mybadTT.setId(myTT);
0727 econn->fetchConfigSet(&mybadTT);
0728
0729 econn->fetchConfigDataSet(&badTT_dat, &mybadTT);
0730 NbadTT = badTT_dat.size();
0731 }
0732
0733
0734
0735
0736
0737
0738
0739
0740
0741 for (size_t iTT = 0; iTT < NbadTT; iTT++) {
0742 int fed_id = badTT_dat[iTT].getFedId();
0743 int tt_id = badTT_dat[iTT].getTTId();
0744
0745 int side = 0;
0746
0747
0748
0749 if (fed_id >= 610 && fed_id <= 645) {
0750 if (tt_id > 68) {
0751
0752 continue;
0753 }
0754 if (fed_id > 627)
0755 side = +1;
0756 if (m_debug)
0757 std::cout << " phi " << iphiEB[fed_id - 610][tt_id - 1] << " eta " << ietaEB[fed_id - 610][tt_id - 1]
0758 << " side " << side << std::endl;
0759 newEBStatus[iphiEB[fed_id - 610][tt_id - 1] - 1][ietaEB[fed_id - 610][tt_id - 1] - 1][side] = 1;
0760 } else if (fed_id <= 609 || (fed_id >= 646 && fed_id <= 654)) {
0761 if (tt_id > 41) {
0762
0763 continue;
0764 }
0765 if (fed_id < 610) {
0766 if (m_debug)
0767 std::cout << " x " << ixx[fed_id - 601][tt_id - 1][0] << " y " << iyy[fed_id - 601][tt_id - 1][0];
0768 newEEStatus[ixx[fed_id - 601][tt_id - 1][0] - 1][iyy[fed_id - 601][tt_id - 1][0] - 1][side] = 1;
0769 if (ixx[fed_id - 601][tt_id - 1][1] != 0) {
0770 if (m_debug)
0771 std::cout << " x2 " << ixx[fed_id - 601][tt_id - 1][1] << " y2 " << iyy[fed_id - 601][tt_id - 1][1];
0772 newEEStatus[ixx[fed_id - 601][tt_id - 1][1] - 1][iyy[fed_id - 601][tt_id - 1][1] - 1][side] = 1;
0773 if (ixx[fed_id - 601][tt_id - 1][2] != 0) {
0774 if (m_debug)
0775 std::cout << " x3 " << ixx[fed_id - 601][tt_id - 1][2] << " y3 " << iyy[fed_id - 601][tt_id - 1][2];
0776 newEEStatus[ixx[fed_id - 601][tt_id - 1][2] - 1][iyy[fed_id - 601][tt_id - 1][2] - 1][side] = 1;
0777 }
0778 }
0779 if (m_debug)
0780 std::cout << " side " << side << std::endl;
0781 } else {
0782 side = +1;
0783 if (m_debug)
0784 std::cout << " x " << ixx[fed_id - 637][tt_id - 1][0] << " y " << iyy[fed_id - 637][tt_id - 1][0];
0785 newEEStatus[ixx[fed_id - 637][tt_id - 1][0] - 1][iyy[fed_id - 637][tt_id - 1][0] - 1][side] = 1;
0786 if (ixx[fed_id - 637][tt_id - 1][1] != 0) {
0787 if (m_debug)
0788 std::cout << " x2 " << ixx[fed_id - 637][tt_id - 1][1] << " y2 " << iyy[fed_id - 637][tt_id - 1][1];
0789 newEEStatus[ixx[fed_id - 637][tt_id - 1][1] - 1][iyy[fed_id - 637][tt_id - 1][1] - 1][side] = 1;
0790 if (ixx[fed_id - 637][tt_id - 1][2] != 0) {
0791 if (m_debug)
0792 std::cout << " x3 " << ixx[fed_id - 637][tt_id - 1][2] << " y3 " << iyy[fed_id - 637][tt_id - 1][2];
0793 newEEStatus[ixx[fed_id - 637][tt_id - 1][2] - 1][iyy[fed_id - 637][tt_id - 1][2] - 1][side] = 1;
0794 }
0795 }
0796 if (m_debug)
0797 std::cout << " side " << side << std::endl;
0798 }
0799 } else {
0800 std::cout << " Strange Fed " << fed_id << " TT/SC " << tt_id << " Give up " << std::endl;
0801 continue;
0802 }
0803 }
0804 if (m_debug)
0805 std::cout << std::endl;
0806
0807 for (int k = 0; k < 2; k++) {
0808 int iz = -1;
0809 if (k == 1)
0810 iz = 1;
0811 if (m_debug)
0812 std::cout << " Side : " << k << " barrel " << std::endl;
0813 for (int iphi = 0; iphi < 72; iphi++) {
0814 for (int ieta = 0; ieta < 17; ieta++) {
0815 if (newEBStatus[iphi][ieta][k] != oldEBStatus[iphi][ieta][k]) {
0816 somediff = true;
0817 EcalTrigTowerDetId ebid(iz, EcalBarrel, ieta + 1, iphi + 1);
0818 daq_temp->setValue(ebid, newEBStatus[iphi][ieta][k]);
0819 if (m_debug)
0820 std::cout << " change in EB side " << iz << " phi " << iphi + 1 << " eta " << ieta + 1 << std::endl;
0821 }
0822 if (m_debug)
0823 std::cout << newEBStatus[iphi][ieta][k] << " ";
0824 oldEBStatus[iphi][ieta][k] = newEBStatus[iphi][ieta][k];
0825 }
0826 if (m_debug)
0827 std::cout << std::endl;
0828 }
0829 if (m_debug)
0830 std::cout << " endcaps " << std::endl;
0831 for (int iy = 0; iy < 20; iy++) {
0832 for (int ix = 0; ix < 20; ix++) {
0833 if (EcalScDetId::validDetId(ix + 1, iy + 1, iz)) {
0834 if (newEEStatus[ix][iy][k] != oldEEStatus[ix][iy][k]) {
0835 somediff = true;
0836 EcalScDetId eeid(ix + 1, iy + 1, iz);
0837 daq_temp->setValue(eeid, newEEStatus[ix][iy][k]);
0838 if (m_debug)
0839 std::cout << " change in EE side " << iz << " x " << ix + 1 << " y " << iy + 1 << std::endl;
0840 }
0841 if (m_debug)
0842 std::cout << newEEStatus[ix][iy][k] << " ";
0843 oldEEStatus[ix][iy][k] = newEEStatus[ix][iy][k];
0844 }
0845 else {
0846 if (m_debug)
0847 std::cout << ". ";
0848 }
0849 }
0850 if (m_debug)
0851 std::cout << std::endl;
0852 }
0853 }
0854
0855 if (somediff) {
0856
0857 EcalDAQTowerStatus* daq_pop = new EcalDAQTowerStatus();
0858
0859 int iz = -1;
0860 for (int k = 0; k < 2; k++) {
0861 if (k == 1)
0862 iz = 1;
0863 for (int iphi = 1; iphi < 73; iphi++) {
0864 for (int ieta = 1; ieta < 18; ieta++) {
0865 if (EcalTrigTowerDetId::validDetId(iz, EcalBarrel, ieta, iphi)) {
0866 EcalTrigTowerDetId ebid(iz, EcalBarrel, ieta, iphi);
0867 uint16_t dbStatus = 0;
0868 dbStatus = (daq_temp->barrel(ebid.hashedIndex())).getStatusCode();
0869 daq_pop->setValue(ebid, dbStatus);
0870 }
0871 }
0872 }
0873
0874
0875 for (int ix = 1; ix < 21; ix++) {
0876 for (int iy = 1; iy < 21; iy++) {
0877 if (EcalScDetId::validDetId(ix, iy, iz)) {
0878 EcalScDetId eeid(ix, iy, iz);
0879
0880 EcalDAQTowerStatus::const_iterator it = daq_temp->find(eeid.rawId());
0881 uint16_t dbStatus = 0;
0882 if (it != daq_temp->end()) {
0883 dbStatus = it->getStatusCode();
0884 }
0885 daq_pop->setValue(eeid, dbStatus);
0886 }
0887 }
0888 }
0889 }
0890
0891 std::cout << "Generating popcon record for run " << irun << std::endl;
0892
0893 m_to_transfer.push_back(std::make_pair((EcalDAQTowerStatus*)daq_pop, irun));
0894
0895 ss << "Run=" << irun << "_DAQchanged_" << std::endl;
0896 m_userTextLog = ss.str() + ";";
0897 }
0898 else {
0899 std::cout << "Run" << irun << " DAQ record was the same as previous run " << std::endl;
0900 ss << "Run=" << irun << "_DAQunchanged_" << std::endl;
0901 m_userTextLog = ss.str() + ";";
0902
0903 }
0904
0905
0906 }
0907 }
0908
0909
0910 delete econn;
0911 delete daq_temp;
0912 if (m_debug)
0913 std::cout << "Ecal - > end of getNewObjects -----------\n";
0914 }