pydpm_xl 0.1.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. py_dpm/AST/ASTConstructor.py +503 -0
  2. py_dpm/AST/ASTObjects.py +827 -0
  3. py_dpm/AST/ASTTemplate.py +101 -0
  4. py_dpm/AST/ASTVisitor.py +13 -0
  5. py_dpm/AST/MLGeneration.py +588 -0
  6. py_dpm/AST/ModuleAnalyzer.py +79 -0
  7. py_dpm/AST/ModuleDependencies.py +203 -0
  8. py_dpm/AST/WhereClauseChecker.py +12 -0
  9. py_dpm/AST/__init__.py +0 -0
  10. py_dpm/AST/check_operands.py +302 -0
  11. py_dpm/DataTypes/ScalarTypes.py +324 -0
  12. py_dpm/DataTypes/TimeClasses.py +370 -0
  13. py_dpm/DataTypes/TypePromotion.py +195 -0
  14. py_dpm/DataTypes/__init__.py +0 -0
  15. py_dpm/Exceptions/__init__.py +0 -0
  16. py_dpm/Exceptions/exceptions.py +84 -0
  17. py_dpm/Exceptions/messages.py +114 -0
  18. py_dpm/OperationScopes/OperationScopeService.py +247 -0
  19. py_dpm/OperationScopes/__init__.py +0 -0
  20. py_dpm/Operators/AggregateOperators.py +138 -0
  21. py_dpm/Operators/BooleanOperators.py +30 -0
  22. py_dpm/Operators/ClauseOperators.py +159 -0
  23. py_dpm/Operators/ComparisonOperators.py +69 -0
  24. py_dpm/Operators/ConditionalOperators.py +362 -0
  25. py_dpm/Operators/NumericOperators.py +101 -0
  26. py_dpm/Operators/Operator.py +388 -0
  27. py_dpm/Operators/StringOperators.py +27 -0
  28. py_dpm/Operators/TimeOperators.py +53 -0
  29. py_dpm/Operators/__init__.py +0 -0
  30. py_dpm/Utils/ValidationsGenerationUtils.py +429 -0
  31. py_dpm/Utils/__init__.py +0 -0
  32. py_dpm/Utils/operands_mapping.py +73 -0
  33. py_dpm/Utils/operator_mapping.py +89 -0
  34. py_dpm/Utils/tokens.py +172 -0
  35. py_dpm/Utils/utils.py +2 -0
  36. py_dpm/ValidationsGeneration/PropertiesConstraintsProcessor.py +190 -0
  37. py_dpm/ValidationsGeneration/Utils.py +364 -0
  38. py_dpm/ValidationsGeneration/VariantsProcessor.py +265 -0
  39. py_dpm/ValidationsGeneration/__init__.py +0 -0
  40. py_dpm/ValidationsGeneration/auxiliary_functions.py +98 -0
  41. py_dpm/__init__.py +61 -0
  42. py_dpm/api/__init__.py +140 -0
  43. py_dpm/api/ast_generator.py +438 -0
  44. py_dpm/api/complete_ast.py +241 -0
  45. py_dpm/api/data_dictionary_validation.py +577 -0
  46. py_dpm/api/migration.py +77 -0
  47. py_dpm/api/semantic.py +224 -0
  48. py_dpm/api/syntax.py +182 -0
  49. py_dpm/client.py +106 -0
  50. py_dpm/data_handlers.py +99 -0
  51. py_dpm/db_utils.py +117 -0
  52. py_dpm/grammar/__init__.py +0 -0
  53. py_dpm/grammar/dist/__init__.py +0 -0
  54. py_dpm/grammar/dist/dpm_xlLexer.interp +428 -0
  55. py_dpm/grammar/dist/dpm_xlLexer.py +804 -0
  56. py_dpm/grammar/dist/dpm_xlLexer.tokens +106 -0
  57. py_dpm/grammar/dist/dpm_xlParser.interp +249 -0
  58. py_dpm/grammar/dist/dpm_xlParser.py +5224 -0
  59. py_dpm/grammar/dist/dpm_xlParser.tokens +106 -0
  60. py_dpm/grammar/dist/dpm_xlParserListener.py +742 -0
  61. py_dpm/grammar/dist/dpm_xlParserVisitor.py +419 -0
  62. py_dpm/grammar/dist/listeners.py +10 -0
  63. py_dpm/grammar/dpm_xlLexer.g4 +435 -0
  64. py_dpm/grammar/dpm_xlParser.g4 +260 -0
  65. py_dpm/migration.py +282 -0
  66. py_dpm/models.py +2139 -0
  67. py_dpm/semantics/DAG/DAGAnalyzer.py +158 -0
  68. py_dpm/semantics/DAG/__init__.py +0 -0
  69. py_dpm/semantics/SemanticAnalyzer.py +320 -0
  70. py_dpm/semantics/Symbols.py +223 -0
  71. py_dpm/semantics/__init__.py +0 -0
  72. py_dpm/utils/__init__.py +0 -0
  73. py_dpm/utils/ast_serialization.py +481 -0
  74. py_dpm/views/data_types.sql +12 -0
  75. py_dpm/views/datapoints.sql +65 -0
  76. py_dpm/views/hierarchy_operand_reference.sql +11 -0
  77. py_dpm/views/hierarchy_preconditions.sql +13 -0
  78. py_dpm/views/hierarchy_variables.sql +26 -0
  79. py_dpm/views/hierarchy_variables_context.sql +14 -0
  80. py_dpm/views/key_components.sql +18 -0
  81. py_dpm/views/module_from_table.sql +11 -0
  82. py_dpm/views/open_keys.sql +13 -0
  83. py_dpm/views/operation_info.sql +27 -0
  84. py_dpm/views/operation_list.sql +18 -0
  85. py_dpm/views/operations_versions_from_module_version.sql +30 -0
  86. py_dpm/views/precondition_info.sql +17 -0
  87. py_dpm/views/report_type_operand_reference_info.sql +18 -0
  88. py_dpm/views/subcategory_info.sql +17 -0
  89. py_dpm/views/table_info.sql +19 -0
  90. pydpm_xl-0.1.10.dist-info/LICENSE +674 -0
  91. pydpm_xl-0.1.10.dist-info/METADATA +50 -0
  92. pydpm_xl-0.1.10.dist-info/RECORD +94 -0
  93. pydpm_xl-0.1.10.dist-info/WHEEL +4 -0
  94. pydpm_xl-0.1.10.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,106 @@
1
+ BOOLEAN_LITERAL=1
2
+ AND=2
3
+ OR=3
4
+ XOR=4
5
+ NOT=5
6
+ ASSIGN=6
7
+ PERSISTENT_ASSIGN=7
8
+ EQ=8
9
+ NE=9
10
+ LT=10
11
+ LE=11
12
+ GT=12
13
+ GE=13
14
+ MATCH=14
15
+ WITH=15
16
+ PLUS=16
17
+ MINUS=17
18
+ MULT=18
19
+ DIV=19
20
+ MAX_AGGR=20
21
+ MIN_AGGR=21
22
+ SUM=22
23
+ COUNT=23
24
+ AVG=24
25
+ MEDIAN=25
26
+ GROUP_BY=26
27
+ ABS=27
28
+ ISNULL=28
29
+ EXP=29
30
+ LN=30
31
+ SQRT=31
32
+ POWER=32
33
+ LOG=33
34
+ MAX=34
35
+ MIN=35
36
+ IN=36
37
+ COMMA=37
38
+ COLON=38
39
+ LPAREN=39
40
+ RPAREN=40
41
+ CURLY_BRACKET_LEFT=41
42
+ CURLY_BRACKET_RIGHT=42
43
+ SQUARE_BRACKET_LEFT=43
44
+ SQUARE_BRACKET_RIGHT=44
45
+ IF=45
46
+ ENDIF=46
47
+ THEN=47
48
+ ELSE=48
49
+ NVL=49
50
+ FILTER=50
51
+ WHERE=51
52
+ GET=52
53
+ RENAME=53
54
+ TO=54
55
+ TIME_SHIFT=55
56
+ LEN=56
57
+ CONCAT=57
58
+ TIME_PERIOD=58
59
+ EOL=59
60
+ INTEGER_LITERAL=60
61
+ DECIMAL_LITERAL=61
62
+ PERCENT_LITERAL=62
63
+ NULL_LITERAL=63
64
+ STRING_LITERAL=64
65
+ EMPTY_LITERAL=65
66
+ DATE_LITERAL=66
67
+ TIME_INTERVAL_LITERAL=67
68
+ TIME_PERIOD_LITERAL=68
69
+ CODE=69
70
+ WS=70
71
+ INTERVAL=71
72
+ DEFAULT=72
73
+ ROW=73
74
+ ROW_RANGE=74
75
+ ROW_ALL=75
76
+ COL=76
77
+ COL_RANGE=77
78
+ COL_ALL=78
79
+ SHEET=79
80
+ SHEET_RANGE=80
81
+ SHEET_ALL=81
82
+ TABLE_REFERENCE=82
83
+ TABLE_GROUP_REFERENCE=83
84
+ VAR_REFERENCE=84
85
+ OPERATION_REFERENCE=85
86
+ PRECONDITION_ELEMENT=86
87
+ SELECTION_MODE_WS=87
88
+ ROW_COMPONENT=88
89
+ COL_COMPONENT=89
90
+ SHEET_COMPONENT=90
91
+ ITEM_SIGNATURE=91
92
+ PROPERTY_CODE=92
93
+ CLAUSE_WS=93
94
+ GROUPING_WS=94
95
+ SET_OPERAND_MODE_WS=95
96
+ ':='=6
97
+ '<-'=7
98
+ 'with'=15
99
+ 'group by'=26
100
+ 'in'=36
101
+ '{'=41
102
+ '['=43
103
+ ';'=59
104
+ 'null'=63
105
+ 'interval'=71
106
+ 'default'=72
@@ -0,0 +1,249 @@
1
+ token literal names:
2
+ null
3
+ null
4
+ null
5
+ null
6
+ null
7
+ null
8
+ ':='
9
+ '<-'
10
+ null
11
+ null
12
+ null
13
+ null
14
+ null
15
+ null
16
+ null
17
+ 'with'
18
+ null
19
+ null
20
+ null
21
+ null
22
+ null
23
+ null
24
+ null
25
+ null
26
+ null
27
+ null
28
+ 'group by'
29
+ null
30
+ null
31
+ null
32
+ null
33
+ null
34
+ null
35
+ null
36
+ null
37
+ null
38
+ 'in'
39
+ null
40
+ null
41
+ null
42
+ null
43
+ '{'
44
+ null
45
+ '['
46
+ null
47
+ null
48
+ null
49
+ null
50
+ null
51
+ null
52
+ null
53
+ null
54
+ null
55
+ null
56
+ null
57
+ null
58
+ null
59
+ null
60
+ null
61
+ ';'
62
+ null
63
+ null
64
+ null
65
+ 'null'
66
+ null
67
+ null
68
+ null
69
+ null
70
+ null
71
+ null
72
+ null
73
+ 'interval'
74
+ 'default'
75
+ null
76
+ null
77
+ null
78
+ null
79
+ null
80
+ null
81
+ null
82
+ null
83
+ null
84
+ null
85
+ null
86
+ null
87
+ null
88
+ null
89
+ null
90
+ null
91
+ null
92
+ null
93
+ null
94
+ null
95
+ null
96
+ null
97
+ null
98
+
99
+ token symbolic names:
100
+ null
101
+ BOOLEAN_LITERAL
102
+ AND
103
+ OR
104
+ XOR
105
+ NOT
106
+ ASSIGN
107
+ PERSISTENT_ASSIGN
108
+ EQ
109
+ NE
110
+ LT
111
+ LE
112
+ GT
113
+ GE
114
+ MATCH
115
+ WITH
116
+ PLUS
117
+ MINUS
118
+ MULT
119
+ DIV
120
+ MAX_AGGR
121
+ MIN_AGGR
122
+ SUM
123
+ COUNT
124
+ AVG
125
+ MEDIAN
126
+ GROUP_BY
127
+ ABS
128
+ ISNULL
129
+ EXP
130
+ LN
131
+ SQRT
132
+ POWER
133
+ LOG
134
+ MAX
135
+ MIN
136
+ IN
137
+ COMMA
138
+ COLON
139
+ LPAREN
140
+ RPAREN
141
+ CURLY_BRACKET_LEFT
142
+ CURLY_BRACKET_RIGHT
143
+ SQUARE_BRACKET_LEFT
144
+ SQUARE_BRACKET_RIGHT
145
+ IF
146
+ ENDIF
147
+ THEN
148
+ ELSE
149
+ NVL
150
+ FILTER
151
+ WHERE
152
+ GET
153
+ RENAME
154
+ TO
155
+ TIME_SHIFT
156
+ LEN
157
+ CONCAT
158
+ TIME_PERIOD
159
+ EOL
160
+ INTEGER_LITERAL
161
+ DECIMAL_LITERAL
162
+ PERCENT_LITERAL
163
+ NULL_LITERAL
164
+ STRING_LITERAL
165
+ EMPTY_LITERAL
166
+ DATE_LITERAL
167
+ TIME_INTERVAL_LITERAL
168
+ TIME_PERIOD_LITERAL
169
+ CODE
170
+ WS
171
+ INTERVAL
172
+ DEFAULT
173
+ ROW
174
+ ROW_RANGE
175
+ ROW_ALL
176
+ COL
177
+ COL_RANGE
178
+ COL_ALL
179
+ SHEET
180
+ SHEET_RANGE
181
+ SHEET_ALL
182
+ TABLE_REFERENCE
183
+ TABLE_GROUP_REFERENCE
184
+ VAR_REFERENCE
185
+ OPERATION_REFERENCE
186
+ PRECONDITION_ELEMENT
187
+ SELECTION_MODE_WS
188
+ ROW_COMPONENT
189
+ COL_COMPONENT
190
+ SHEET_COMPONENT
191
+ ITEM_SIGNATURE
192
+ PROPERTY_CODE
193
+ CLAUSE_WS
194
+ GROUPING_WS
195
+ SET_OPERAND_MODE_WS
196
+
197
+ rule names:
198
+ start
199
+ statements
200
+ statement
201
+ persistentExpression
202
+ expressionWithoutAssignment
203
+ partialSelection
204
+ temporaryAssignmentExpression
205
+ persistentAssignmentExpression
206
+ expression
207
+ setOperand
208
+ setElements
209
+ functions
210
+ numericOperators
211
+ comparisonFunctionOperators
212
+ filterOperators
213
+ timeOperators
214
+ conditionalOperators
215
+ stringOperators
216
+ aggregateOperators
217
+ groupingClause
218
+ itemSignature
219
+ itemReference
220
+ rowElem
221
+ colElem
222
+ sheetElem
223
+ rowHandler
224
+ colHandler
225
+ sheetHandler
226
+ interval
227
+ default
228
+ argument
229
+ select
230
+ selectOperand
231
+ varID
232
+ cellRef
233
+ preconditionElem
234
+ varRef
235
+ operationRef
236
+ cellAddress
237
+ tableReference
238
+ clauseOperators
239
+ renameClause
240
+ comparisonOperators
241
+ literal
242
+ keyNames
243
+ propertyReference
244
+ propertyCode
245
+ temporaryIdentifier
246
+
247
+
248
+ atn:
249
+ [4, 1, 95, 468, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 101, 8, 0, 3, 0, 103, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 4, 1, 110, 8, 1, 11, 1, 12, 1, 111, 1, 2, 1, 2, 3, 2, 116, 8, 2, 1, 3, 1, 3, 3, 3, 120, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 128, 8, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 161, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 170, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 199, 8, 8, 10, 8, 12, 8, 202, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 5, 10, 211, 8, 10, 10, 10, 12, 10, 214, 9, 10, 1, 10, 1, 10, 1, 10, 5, 10, 219, 8, 10, 10, 10, 12, 10, 222, 9, 10, 3, 10, 224, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 233, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 4, 12, 252, 8, 12, 11, 12, 12, 12, 253, 1, 12, 1, 12, 3, 12, 258, 8, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 272, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 290, 8, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 310, 8, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 318, 8, 19, 10, 19, 12, 19, 321, 9, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 340, 8, 25, 10, 25, 12, 25, 343, 9, 25, 1, 25, 3, 25, 346, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 353, 8, 26, 10, 26, 12, 26, 356, 9, 26, 1, 26, 3, 26, 359, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 366, 8, 27, 10, 27, 12, 27, 369, 9, 27, 1, 27, 3, 27, 372, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 384, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 391, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 401, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 5, 38, 418, 8, 38, 10, 38, 12, 38, 421, 9, 38, 1, 38, 1, 38, 1, 38, 5, 38, 426, 8, 38, 10, 38, 12, 38, 429, 9, 38, 3, 38, 431, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 443, 8, 40, 10, 40, 12, 40, 446, 9, 40, 3, 40, 448, 8, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 0, 1, 16, 48, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 0, 15, 1, 0, 16, 17, 1, 0, 18, 19, 1, 0, 3, 4, 2, 0, 27, 27, 29, 31, 1, 0, 32, 33, 1, 0, 34, 35, 1, 0, 20, 25, 1, 0, 73, 75, 1, 0, 76, 78, 1, 0, 79, 81, 1, 0, 82, 83, 1, 0, 8, 13, 3, 0, 1, 1, 60, 62, 64, 68, 2, 0, 88, 90, 92, 92, 2, 0, 69, 69, 92, 92, 479, 0, 96, 1, 0, 0, 0, 2, 109, 1, 0, 0, 0, 4, 115, 1, 0, 0, 0, 6, 119, 1, 0, 0, 0, 8, 127, 1, 0, 0, 0, 10, 129, 1, 0, 0, 0, 12, 133, 1, 0, 0, 0, 14, 137, 1, 0, 0, 0, 16, 169, 1, 0, 0, 0, 18, 203, 1, 0, 0, 0, 20, 223, 1, 0, 0, 0, 22, 232, 1, 0, 0, 0, 24, 257, 1, 0, 0, 0, 26, 271, 1, 0, 0, 0, 28, 273, 1, 0, 0, 0, 30, 280, 1, 0, 0, 0, 32, 293, 1, 0, 0, 0, 34, 300, 1, 0, 0, 0, 36, 305, 1, 0, 0, 0, 38, 313, 1, 0, 0, 0, 40, 322, 1, 0, 0, 0, 42, 324, 1, 0, 0, 0, 44, 328, 1, 0, 0, 0, 46, 330, 1, 0, 0, 0, 48, 332, 1, 0, 0, 0, 50, 345, 1, 0, 0, 0, 52, 358, 1, 0, 0, 0, 54, 371, 1, 0, 0, 0, 56, 373, 1, 0, 0, 0, 58, 383, 1, 0, 0, 0, 60, 390, 1, 0, 0, 0, 62, 392, 1, 0, 0, 0, 64, 400, 1, 0, 0, 0, 66, 402, 1, 0, 0, 0, 68, 406, 1, 0, 0, 0, 70, 408, 1, 0, 0, 0, 72, 410, 1, 0, 0, 0, 74, 412, 1, 0, 0, 0, 76, 430, 1, 0, 0, 0, 78, 432, 1, 0, 0, 0, 80, 447, 1, 0, 0, 0, 82, 449, 1, 0, 0, 0, 84, 453, 1, 0, 0, 0, 86, 455, 1, 0, 0, 0, 88, 457, 1, 0, 0, 0, 90, 459, 1, 0, 0, 0, 92, 463, 1, 0, 0, 0, 94, 465, 1, 0, 0, 0, 96, 102, 3, 4, 2, 0, 97, 98, 5, 59, 0, 0, 98, 103, 3, 2, 1, 0, 99, 101, 5, 59, 0, 0, 100, 99, 1, 0, 0, 0, 100, 101, 1, 0, 0, 0, 101, 103, 1, 0, 0, 0, 102, 97, 1, 0, 0, 0, 102, 100, 1, 0, 0, 0, 103, 104, 1, 0, 0, 0, 104, 105, 5, 0, 0, 1, 105, 1, 1, 0, 0, 0, 106, 107, 3, 4, 2, 0, 107, 108, 5, 59, 0, 0, 108, 110, 1, 0, 0, 0, 109, 106, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 111, 112, 1, 0, 0, 0, 112, 3, 1, 0, 0, 0, 113, 116, 3, 8, 4, 0, 114, 116, 3, 12, 6, 0, 115, 113, 1, 0, 0, 0, 115, 114, 1, 0, 0, 0, 116, 5, 1, 0, 0, 0, 117, 120, 3, 14, 7, 0, 118, 120, 3, 8, 4, 0, 119, 117, 1, 0, 0, 0, 119, 118, 1, 0, 0, 0, 120, 7, 1, 0, 0, 0, 121, 128, 3, 16, 8, 0, 122, 123, 5, 15, 0, 0, 123, 124, 3, 10, 5, 0, 124, 125, 5, 38, 0, 0, 125, 126, 3, 16, 8, 0, 126, 128, 1, 0, 0, 0, 127, 121, 1, 0, 0, 0, 127, 122, 1, 0, 0, 0, 128, 9, 1, 0, 0, 0, 129, 130, 5, 41, 0, 0, 130, 131, 3, 68, 34, 0, 131, 132, 5, 42, 0, 0, 132, 11, 1, 0, 0, 0, 133, 134, 3, 94, 47, 0, 134, 135, 5, 6, 0, 0, 135, 136, 3, 6, 3, 0, 136, 13, 1, 0, 0, 0, 137, 138, 3, 66, 33, 0, 138, 139, 5, 7, 0, 0, 139, 140, 3, 8, 4, 0, 140, 15, 1, 0, 0, 0, 141, 142, 6, 8, -1, 0, 142, 143, 5, 39, 0, 0, 143, 144, 3, 16, 8, 0, 144, 145, 5, 40, 0, 0, 145, 170, 1, 0, 0, 0, 146, 170, 3, 22, 11, 0, 147, 148, 7, 0, 0, 0, 148, 170, 3, 16, 8, 15, 149, 150, 5, 5, 0, 0, 150, 151, 5, 39, 0, 0, 151, 152, 3, 16, 8, 0, 152, 153, 5, 40, 0, 0, 153, 170, 1, 0, 0, 0, 154, 155, 5, 45, 0, 0, 155, 156, 3, 16, 8, 0, 156, 157, 5, 47, 0, 0, 157, 160, 3, 16, 8, 0, 158, 159, 5, 48, 0, 0, 159, 161, 3, 16, 8, 0, 160, 158, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 163, 5, 46, 0, 0, 163, 170, 1, 0, 0, 0, 164, 170, 3, 42, 21, 0, 165, 170, 3, 90, 45, 0, 166, 170, 3, 88, 44, 0, 167, 170, 3, 86, 43, 0, 168, 170, 3, 62, 31, 0, 169, 141, 1, 0, 0, 0, 169, 146, 1, 0, 0, 0, 169, 147, 1, 0, 0, 0, 169, 149, 1, 0, 0, 0, 169, 154, 1, 0, 0, 0, 169, 164, 1, 0, 0, 0, 169, 165, 1, 0, 0, 0, 169, 166, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 168, 1, 0, 0, 0, 170, 200, 1, 0, 0, 0, 171, 172, 10, 13, 0, 0, 172, 173, 7, 1, 0, 0, 173, 199, 3, 16, 8, 14, 174, 175, 10, 12, 0, 0, 175, 176, 7, 0, 0, 0, 176, 199, 3, 16, 8, 13, 177, 178, 10, 11, 0, 0, 178, 179, 5, 57, 0, 0, 179, 199, 3, 16, 8, 12, 180, 181, 10, 10, 0, 0, 181, 182, 3, 84, 42, 0, 182, 183, 3, 16, 8, 11, 183, 199, 1, 0, 0, 0, 184, 185, 10, 8, 0, 0, 185, 186, 5, 2, 0, 0, 186, 199, 3, 16, 8, 9, 187, 188, 10, 7, 0, 0, 188, 189, 7, 2, 0, 0, 189, 199, 3, 16, 8, 8, 190, 191, 10, 16, 0, 0, 191, 192, 5, 43, 0, 0, 192, 193, 3, 80, 40, 0, 193, 194, 5, 44, 0, 0, 194, 199, 1, 0, 0, 0, 195, 196, 10, 9, 0, 0, 196, 197, 5, 36, 0, 0, 197, 199, 3, 18, 9, 0, 198, 171, 1, 0, 0, 0, 198, 174, 1, 0, 0, 0, 198, 177, 1, 0, 0, 0, 198, 180, 1, 0, 0, 0, 198, 184, 1, 0, 0, 0, 198, 187, 1, 0, 0, 0, 198, 190, 1, 0, 0, 0, 198, 195, 1, 0, 0, 0, 199, 202, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 17, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 203, 204, 5, 41, 0, 0, 204, 205, 3, 20, 10, 0, 205, 206, 5, 42, 0, 0, 206, 19, 1, 0, 0, 0, 207, 212, 3, 42, 21, 0, 208, 209, 5, 37, 0, 0, 209, 211, 3, 42, 21, 0, 210, 208, 1, 0, 0, 0, 211, 214, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 224, 1, 0, 0, 0, 214, 212, 1, 0, 0, 0, 215, 220, 3, 86, 43, 0, 216, 217, 5, 37, 0, 0, 217, 219, 3, 86, 43, 0, 218, 216, 1, 0, 0, 0, 219, 222, 1, 0, 0, 0, 220, 218, 1, 0, 0, 0, 220, 221, 1, 0, 0, 0, 221, 224, 1, 0, 0, 0, 222, 220, 1, 0, 0, 0, 223, 207, 1, 0, 0, 0, 223, 215, 1, 0, 0, 0, 224, 21, 1, 0, 0, 0, 225, 233, 3, 36, 18, 0, 226, 233, 3, 24, 12, 0, 227, 233, 3, 26, 13, 0, 228, 233, 3, 28, 14, 0, 229, 233, 3, 32, 16, 0, 230, 233, 3, 30, 15, 0, 231, 233, 3, 34, 17, 0, 232, 225, 1, 0, 0, 0, 232, 226, 1, 0, 0, 0, 232, 227, 1, 0, 0, 0, 232, 228, 1, 0, 0, 0, 232, 229, 1, 0, 0, 0, 232, 230, 1, 0, 0, 0, 232, 231, 1, 0, 0, 0, 233, 23, 1, 0, 0, 0, 234, 235, 7, 3, 0, 0, 235, 236, 5, 39, 0, 0, 236, 237, 3, 16, 8, 0, 237, 238, 5, 40, 0, 0, 238, 258, 1, 0, 0, 0, 239, 240, 7, 4, 0, 0, 240, 241, 5, 39, 0, 0, 241, 242, 3, 16, 8, 0, 242, 243, 5, 37, 0, 0, 243, 244, 3, 16, 8, 0, 244, 245, 5, 40, 0, 0, 245, 258, 1, 0, 0, 0, 246, 247, 7, 5, 0, 0, 247, 248, 5, 39, 0, 0, 248, 251, 3, 16, 8, 0, 249, 250, 5, 37, 0, 0, 250, 252, 3, 16, 8, 0, 251, 249, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 255, 1, 0, 0, 0, 255, 256, 5, 40, 0, 0, 256, 258, 1, 0, 0, 0, 257, 234, 1, 0, 0, 0, 257, 239, 1, 0, 0, 0, 257, 246, 1, 0, 0, 0, 258, 25, 1, 0, 0, 0, 259, 260, 5, 14, 0, 0, 260, 261, 5, 39, 0, 0, 261, 262, 3, 16, 8, 0, 262, 263, 5, 37, 0, 0, 263, 264, 3, 86, 43, 0, 264, 265, 5, 40, 0, 0, 265, 272, 1, 0, 0, 0, 266, 267, 5, 28, 0, 0, 267, 268, 5, 39, 0, 0, 268, 269, 3, 16, 8, 0, 269, 270, 5, 40, 0, 0, 270, 272, 1, 0, 0, 0, 271, 259, 1, 0, 0, 0, 271, 266, 1, 0, 0, 0, 272, 27, 1, 0, 0, 0, 273, 274, 5, 50, 0, 0, 274, 275, 5, 39, 0, 0, 275, 276, 3, 16, 8, 0, 276, 277, 5, 37, 0, 0, 277, 278, 3, 16, 8, 0, 278, 279, 5, 40, 0, 0, 279, 29, 1, 0, 0, 0, 280, 281, 5, 55, 0, 0, 281, 282, 5, 39, 0, 0, 282, 283, 3, 16, 8, 0, 283, 284, 5, 37, 0, 0, 284, 285, 5, 58, 0, 0, 285, 286, 5, 37, 0, 0, 286, 289, 5, 60, 0, 0, 287, 288, 5, 37, 0, 0, 288, 290, 3, 92, 46, 0, 289, 287, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 291, 1, 0, 0, 0, 291, 292, 5, 40, 0, 0, 292, 31, 1, 0, 0, 0, 293, 294, 5, 49, 0, 0, 294, 295, 5, 39, 0, 0, 295, 296, 3, 16, 8, 0, 296, 297, 5, 37, 0, 0, 297, 298, 3, 16, 8, 0, 298, 299, 5, 40, 0, 0, 299, 33, 1, 0, 0, 0, 300, 301, 5, 56, 0, 0, 301, 302, 5, 39, 0, 0, 302, 303, 3, 16, 8, 0, 303, 304, 5, 40, 0, 0, 304, 35, 1, 0, 0, 0, 305, 306, 7, 6, 0, 0, 306, 307, 5, 39, 0, 0, 307, 309, 3, 16, 8, 0, 308, 310, 3, 38, 19, 0, 309, 308, 1, 0, 0, 0, 309, 310, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 312, 5, 40, 0, 0, 312, 37, 1, 0, 0, 0, 313, 314, 5, 26, 0, 0, 314, 319, 3, 88, 44, 0, 315, 316, 5, 37, 0, 0, 316, 318, 3, 88, 44, 0, 317, 315, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 39, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 323, 5, 91, 0, 0, 323, 41, 1, 0, 0, 0, 324, 325, 5, 43, 0, 0, 325, 326, 3, 40, 20, 0, 326, 327, 5, 44, 0, 0, 327, 43, 1, 0, 0, 0, 328, 329, 7, 7, 0, 0, 329, 45, 1, 0, 0, 0, 330, 331, 7, 8, 0, 0, 331, 47, 1, 0, 0, 0, 332, 333, 7, 9, 0, 0, 333, 49, 1, 0, 0, 0, 334, 346, 3, 44, 22, 0, 335, 336, 5, 39, 0, 0, 336, 341, 5, 73, 0, 0, 337, 338, 5, 37, 0, 0, 338, 340, 5, 73, 0, 0, 339, 337, 1, 0, 0, 0, 340, 343, 1, 0, 0, 0, 341, 339, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 344, 1, 0, 0, 0, 343, 341, 1, 0, 0, 0, 344, 346, 5, 40, 0, 0, 345, 334, 1, 0, 0, 0, 345, 335, 1, 0, 0, 0, 346, 51, 1, 0, 0, 0, 347, 359, 3, 46, 23, 0, 348, 349, 5, 39, 0, 0, 349, 354, 5, 76, 0, 0, 350, 351, 5, 37, 0, 0, 351, 353, 5, 76, 0, 0, 352, 350, 1, 0, 0, 0, 353, 356, 1, 0, 0, 0, 354, 352, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 354, 1, 0, 0, 0, 357, 359, 5, 40, 0, 0, 358, 347, 1, 0, 0, 0, 358, 348, 1, 0, 0, 0, 359, 53, 1, 0, 0, 0, 360, 372, 3, 48, 24, 0, 361, 362, 5, 39, 0, 0, 362, 367, 5, 79, 0, 0, 363, 364, 5, 37, 0, 0, 364, 366, 5, 79, 0, 0, 365, 363, 1, 0, 0, 0, 366, 369, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 370, 1, 0, 0, 0, 369, 367, 1, 0, 0, 0, 370, 372, 5, 40, 0, 0, 371, 360, 1, 0, 0, 0, 371, 361, 1, 0, 0, 0, 372, 55, 1, 0, 0, 0, 373, 374, 5, 71, 0, 0, 374, 375, 5, 38, 0, 0, 375, 376, 5, 1, 0, 0, 376, 57, 1, 0, 0, 0, 377, 378, 5, 72, 0, 0, 378, 379, 5, 38, 0, 0, 379, 384, 3, 86, 43, 0, 380, 381, 5, 72, 0, 0, 381, 382, 5, 38, 0, 0, 382, 384, 5, 63, 0, 0, 383, 377, 1, 0, 0, 0, 383, 380, 1, 0, 0, 0, 384, 59, 1, 0, 0, 0, 385, 391, 3, 50, 25, 0, 386, 391, 3, 52, 26, 0, 387, 391, 3, 54, 27, 0, 388, 391, 3, 56, 28, 0, 389, 391, 3, 58, 29, 0, 390, 385, 1, 0, 0, 0, 390, 386, 1, 0, 0, 0, 390, 387, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 390, 389, 1, 0, 0, 0, 391, 61, 1, 0, 0, 0, 392, 393, 5, 41, 0, 0, 393, 394, 3, 64, 32, 0, 394, 395, 5, 42, 0, 0, 395, 63, 1, 0, 0, 0, 396, 401, 3, 68, 34, 0, 397, 401, 3, 72, 36, 0, 398, 401, 3, 74, 37, 0, 399, 401, 3, 70, 35, 0, 400, 396, 1, 0, 0, 0, 400, 397, 1, 0, 0, 0, 400, 398, 1, 0, 0, 0, 400, 399, 1, 0, 0, 0, 401, 65, 1, 0, 0, 0, 402, 403, 5, 41, 0, 0, 403, 404, 3, 72, 36, 0, 404, 405, 5, 42, 0, 0, 405, 67, 1, 0, 0, 0, 406, 407, 3, 76, 38, 0, 407, 69, 1, 0, 0, 0, 408, 409, 5, 86, 0, 0, 409, 71, 1, 0, 0, 0, 410, 411, 5, 84, 0, 0, 411, 73, 1, 0, 0, 0, 412, 413, 5, 85, 0, 0, 413, 75, 1, 0, 0, 0, 414, 419, 3, 78, 39, 0, 415, 416, 5, 37, 0, 0, 416, 418, 3, 60, 30, 0, 417, 415, 1, 0, 0, 0, 418, 421, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 431, 1, 0, 0, 0, 421, 419, 1, 0, 0, 0, 422, 427, 3, 60, 30, 0, 423, 424, 5, 37, 0, 0, 424, 426, 3, 60, 30, 0, 425, 423, 1, 0, 0, 0, 426, 429, 1, 0, 0, 0, 427, 425, 1, 0, 0, 0, 427, 428, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 430, 414, 1, 0, 0, 0, 430, 422, 1, 0, 0, 0, 431, 77, 1, 0, 0, 0, 432, 433, 7, 10, 0, 0, 433, 79, 1, 0, 0, 0, 434, 435, 5, 51, 0, 0, 435, 448, 3, 16, 8, 0, 436, 437, 5, 52, 0, 0, 437, 448, 3, 88, 44, 0, 438, 439, 5, 53, 0, 0, 439, 444, 3, 82, 41, 0, 440, 441, 5, 37, 0, 0, 441, 443, 3, 82, 41, 0, 442, 440, 1, 0, 0, 0, 443, 446, 1, 0, 0, 0, 444, 442, 1, 0, 0, 0, 444, 445, 1, 0, 0, 0, 445, 448, 1, 0, 0, 0, 446, 444, 1, 0, 0, 0, 447, 434, 1, 0, 0, 0, 447, 436, 1, 0, 0, 0, 447, 438, 1, 0, 0, 0, 448, 81, 1, 0, 0, 0, 449, 450, 3, 88, 44, 0, 450, 451, 5, 54, 0, 0, 451, 452, 3, 88, 44, 0, 452, 83, 1, 0, 0, 0, 453, 454, 7, 11, 0, 0, 454, 85, 1, 0, 0, 0, 455, 456, 7, 12, 0, 0, 456, 87, 1, 0, 0, 0, 457, 458, 7, 13, 0, 0, 458, 89, 1, 0, 0, 0, 459, 460, 5, 43, 0, 0, 460, 461, 3, 92, 46, 0, 461, 462, 5, 44, 0, 0, 462, 91, 1, 0, 0, 0, 463, 464, 7, 14, 0, 0, 464, 93, 1, 0, 0, 0, 465, 466, 5, 69, 0, 0, 466, 95, 1, 0, 0, 0, 34, 100, 102, 111, 115, 119, 127, 160, 169, 198, 200, 212, 220, 223, 232, 253, 257, 271, 289, 309, 319, 341, 345, 354, 358, 367, 371, 383, 390, 400, 419, 427, 430, 444, 447]