dsl-to-sql 1.0.0-fabric-1p-development.1

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 (225) hide show
  1. package/.turbo/turbo-build.log +9 -0
  2. package/.turbo/turbo-check-types.log +4 -0
  3. package/.turbo/turbo-lint.log +126 -0
  4. package/README.md +45 -0
  5. package/coverage/base.css +224 -0
  6. package/coverage/block-navigation.js +87 -0
  7. package/coverage/favicon.png +0 -0
  8. package/coverage/index.html +236 -0
  9. package/coverage/prettify.css +1 -0
  10. package/coverage/prettify.js +2 -0
  11. package/coverage/sort-arrow-sprite.png +0 -0
  12. package/coverage/sorter.js +210 -0
  13. package/coverage/src/constants.ts.html +826 -0
  14. package/coverage/src/database_types.ts.html +136 -0
  15. package/coverage/src/epm-query-builder/EpmQueryBuilder.ts.html +166 -0
  16. package/coverage/src/epm-query-builder/base/BaseAdvancedAggregations.ts.html +568 -0
  17. package/coverage/src/epm-query-builder/base/BaseAnalyticalFunctions.ts.html +694 -0
  18. package/coverage/src/epm-query-builder/base/BaseCTEGenerator.ts.html +1459 -0
  19. package/coverage/src/epm-query-builder/base/BaseCountQueryBuilder.ts.html +400 -0
  20. package/coverage/src/epm-query-builder/base/BaseMeasureBuilder.ts.html +295 -0
  21. package/coverage/src/epm-query-builder/base/BaseOrderBuilder.ts.html +670 -0
  22. package/coverage/src/epm-query-builder/base/BasePaginationBuilder.ts.html +364 -0
  23. package/coverage/src/epm-query-builder/base/BaseQueryBuilder.ts.html +238 -0
  24. package/coverage/src/epm-query-builder/base/BaseRollupBuilder.ts.html +532 -0
  25. package/coverage/src/epm-query-builder/base/BaseSqlBuilder.ts.html +601 -0
  26. package/coverage/src/epm-query-builder/base/BaseSuperFilterBuilder.ts.html +1966 -0
  27. package/coverage/src/epm-query-builder/base/BaseUtilities.ts.html +1798 -0
  28. package/coverage/src/epm-query-builder/base/ColumnRefUtils.ts.html +211 -0
  29. package/coverage/src/epm-query-builder/base/RelationshipResolver.ts.html +706 -0
  30. package/coverage/src/epm-query-builder/base/SharedFilterBuilder.ts.html +1717 -0
  31. package/coverage/src/epm-query-builder/base/index.html +326 -0
  32. package/coverage/src/epm-query-builder/constants/Aggregations.ts.html +133 -0
  33. package/coverage/src/epm-query-builder/constants/Database.ts.html +103 -0
  34. package/coverage/src/epm-query-builder/constants/Source.ts.html +106 -0
  35. package/coverage/src/epm-query-builder/constants/index.html +146 -0
  36. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbAdvancedAggregations.ts.html +286 -0
  37. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbJoinBuilder.ts.html +280 -0
  38. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbMeasureBuilder.ts.html +1924 -0
  39. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbOrderBuilder.ts.html +769 -0
  40. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbPaginationBuilder.ts.html +643 -0
  41. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbQueryBuilder.ts.html +2644 -0
  42. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbRollupBuilder.ts.html +478 -0
  43. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbSuperFilterBuilder.ts.html +1195 -0
  44. package/coverage/src/epm-query-builder/dialects/duckdb/index.html +221 -0
  45. package/coverage/src/epm-query-builder/errors/QueryBuilderErrors.ts.html +280 -0
  46. package/coverage/src/epm-query-builder/errors/index.html +116 -0
  47. package/coverage/src/epm-query-builder/index.html +116 -0
  48. package/coverage/src/epm-query-builder/interfaces/IDatabaseQueryBuilder.ts.html +100 -0
  49. package/coverage/src/epm-query-builder/interfaces/index.html +131 -0
  50. package/coverage/src/epm-query-builder/interfaces/index.ts.html +88 -0
  51. package/coverage/src/epm-query-builder/utils/format.ts.html +151 -0
  52. package/coverage/src/epm-query-builder/utils/index.html +146 -0
  53. package/coverage/src/epm-query-builder/utils/sql.ts.html +247 -0
  54. package/coverage/src/epm-query-builder/utils/validation.ts.html +124 -0
  55. package/coverage/src/epm-query-builder/validation/QueryOptionsValidator.ts.html +631 -0
  56. package/coverage/src/epm-query-builder/validation/SqlQueryValidator.ts.html +475 -0
  57. package/coverage/src/epm-query-builder/validation/index.html +131 -0
  58. package/coverage/src/filters/FilterConditionBuilder.ts.html +427 -0
  59. package/coverage/src/filters/filter-types.ts.html +484 -0
  60. package/coverage/src/filters/index.html +131 -0
  61. package/coverage/src/index.html +176 -0
  62. package/coverage/src/index.ts.html +103 -0
  63. package/coverage/src/js-lib/JsToSqlParser.ts.html +736 -0
  64. package/coverage/src/js-lib/ParseContext.ts.html +532 -0
  65. package/coverage/src/js-lib/db/azuresql/AzureSqlCallExpressionVisitor.ts.html +196 -0
  66. package/coverage/src/js-lib/db/azuresql/index.html +116 -0
  67. package/coverage/src/js-lib/db/base/ArrayExpressionVisitor.ts.html +133 -0
  68. package/coverage/src/js-lib/db/base/AssignmentExpressionVisitor.ts.html +187 -0
  69. package/coverage/src/js-lib/db/base/BinaryExpressionVisitor.ts.html +223 -0
  70. package/coverage/src/js-lib/db/base/CallExpressionVisitor.ts.html +5479 -0
  71. package/coverage/src/js-lib/db/base/IdentifierVisitor.ts.html +283 -0
  72. package/coverage/src/js-lib/db/base/LiteralVisitor.ts.html +199 -0
  73. package/coverage/src/js-lib/db/base/MemberExpressionVisitor.ts.html +193 -0
  74. package/coverage/src/js-lib/db/base/ProgramVisitor.ts.html +139 -0
  75. package/coverage/src/js-lib/db/base/UnaryExpressionVisitor.ts.html +181 -0
  76. package/coverage/src/js-lib/db/base/VisitorInterface.ts.html +103 -0
  77. package/coverage/src/js-lib/db/base/index.html +251 -0
  78. package/coverage/src/js-lib/db/bigquery/BigQueryCallExpressionVisitor.ts.html +1747 -0
  79. package/coverage/src/js-lib/db/bigquery/index.html +116 -0
  80. package/coverage/src/js-lib/db/commonTransforms.ts.html +2074 -0
  81. package/coverage/src/js-lib/db/databricks/DatabricksCallExpressionVisitor.ts.html +1303 -0
  82. package/coverage/src/js-lib/db/databricks/index.html +116 -0
  83. package/coverage/src/js-lib/db/fabricsql/FabricSqlCallExpressionVisitor.ts.html +196 -0
  84. package/coverage/src/js-lib/db/fabricsql/index.html +116 -0
  85. package/coverage/src/js-lib/db/fabricwarehouse/FabricWarehouseCallExpressionVisitor.ts.html +292 -0
  86. package/coverage/src/js-lib/db/fabricwarehouse/index.html +116 -0
  87. package/coverage/src/js-lib/db/index.html +116 -0
  88. package/coverage/src/js-lib/db/postgresql/PostgreSqlCallExpressionVisitor.ts.html +985 -0
  89. package/coverage/src/js-lib/db/postgresql/index.html +116 -0
  90. package/coverage/src/js-lib/db/redshift/RedshiftCallExpressionVisitor.ts.html +685 -0
  91. package/coverage/src/js-lib/db/redshift/index.html +116 -0
  92. package/coverage/src/js-lib/db/sample/SampleCallExpressionVisitor.ts.html +196 -0
  93. package/coverage/src/js-lib/db/sample/index.html +116 -0
  94. package/coverage/src/js-lib/db/snowflake/SnowflakeCallExpressionVisitor.ts.html +1447 -0
  95. package/coverage/src/js-lib/db/snowflake/index.html +116 -0
  96. package/coverage/src/js-lib/db/validator/FormulaValidator.ts.html +4162 -0
  97. package/coverage/src/js-lib/db/validator/index.html +116 -0
  98. package/coverage/src/js-lib/index.html +131 -0
  99. package/coverage/src/js-lib/objects/BaseObject.ts.html +169 -0
  100. package/coverage/src/js-lib/objects/DateObject.ts.html +169 -0
  101. package/coverage/src/js-lib/objects/PctObject.ts.html +178 -0
  102. package/coverage/src/js-lib/objects/index.html +146 -0
  103. package/coverage/src/query-builder/PaginationBuilder.ts.html +142 -0
  104. package/coverage/src/query-builder/QueryBuilder.ts.html +3118 -0
  105. package/coverage/src/query-builder/SuperFilterBuilder.ts.html +1969 -0
  106. package/coverage/src/query-builder/index.html +146 -0
  107. package/coverage/src/runtime_var.ts.html +109 -0
  108. package/coverage/src/sql-lib/binary_expr.ts.html +133 -0
  109. package/coverage/src/sql-lib/case.ts.html +133 -0
  110. package/coverage/src/sql-lib/column.ts.html +139 -0
  111. package/coverage/src/sql-lib/else.ts.html +124 -0
  112. package/coverage/src/sql-lib/function.ts.html +112 -0
  113. package/coverage/src/sql-lib/index.html +251 -0
  114. package/coverage/src/sql-lib/join.ts.html +127 -0
  115. package/coverage/src/sql-lib/literal.ts.html +130 -0
  116. package/coverage/src/sql-lib/select.ts.html +547 -0
  117. package/coverage/src/sql-lib/unary_expr.ts.html +112 -0
  118. package/coverage/src/sql-lib/when.ts.html +130 -0
  119. package/coverage/src/sql_query_gen.ts.html +535 -0
  120. package/coverage/src/superFilter/DateFilterFactory.ts.html +625 -0
  121. package/coverage/src/superFilter/dateFunction.ts.html +193 -0
  122. package/coverage/src/superFilter/index.html +131 -0
  123. package/coverage/src/utils.ts.html +571 -0
  124. package/dist/index.cjs +8440 -0
  125. package/dist/index.d.cts +927 -0
  126. package/dist/index.d.cts.map +1 -0
  127. package/dist/index.d.ts +927 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +8387 -0
  130. package/dist/index.js.map +1 -0
  131. package/eslint.config.js +4 -0
  132. package/jest.config.ts +44 -0
  133. package/package.json +45 -0
  134. package/src/constants.ts +247 -0
  135. package/src/epm-query-builder/EpmQueryBuilder.ts +27 -0
  136. package/src/epm-query-builder/base/BaseAdvancedAggregations.ts +161 -0
  137. package/src/epm-query-builder/base/BaseAnalyticalFunctions.ts +203 -0
  138. package/src/epm-query-builder/base/BaseCTEGenerator.ts +458 -0
  139. package/src/epm-query-builder/base/BaseCountQueryBuilder.ts +105 -0
  140. package/src/epm-query-builder/base/BaseMeasureBuilder.ts +87 -0
  141. package/src/epm-query-builder/base/BaseOrderBuilder.ts +195 -0
  142. package/src/epm-query-builder/base/BasePaginationBuilder.ts +93 -0
  143. package/src/epm-query-builder/base/BaseQueryBuilder.ts +51 -0
  144. package/src/epm-query-builder/base/BaseRollupBuilder.ts +149 -0
  145. package/src/epm-query-builder/base/BaseSqlBuilder.ts +172 -0
  146. package/src/epm-query-builder/base/BaseSuperFilterBuilder.ts +627 -0
  147. package/src/epm-query-builder/base/BaseUtilities.ts +571 -0
  148. package/src/epm-query-builder/base/ColumnRefUtils.ts +42 -0
  149. package/src/epm-query-builder/base/RelationshipResolver.ts +207 -0
  150. package/src/epm-query-builder/base/SharedFilterBuilder.ts +544 -0
  151. package/src/epm-query-builder/constants/Aggregations.ts +16 -0
  152. package/src/epm-query-builder/constants/Database.ts +6 -0
  153. package/src/epm-query-builder/constants/Source.ts +7 -0
  154. package/src/epm-query-builder/dialects/duckdb/DuckDbAdvancedAggregations.ts +67 -0
  155. package/src/epm-query-builder/dialects/duckdb/DuckDbJoinBuilder.ts +65 -0
  156. package/src/epm-query-builder/dialects/duckdb/DuckDbMeasureBuilder.ts +626 -0
  157. package/src/epm-query-builder/dialects/duckdb/DuckDbOrderBuilder.ts +228 -0
  158. package/src/epm-query-builder/dialects/duckdb/DuckDbPaginationBuilder.ts +186 -0
  159. package/src/epm-query-builder/dialects/duckdb/DuckDbQueryBuilder.ts +853 -0
  160. package/src/epm-query-builder/dialects/duckdb/DuckDbRollupBuilder.ts +131 -0
  161. package/src/epm-query-builder/dialects/duckdb/DuckDbSuperFilterBuilder.ts +370 -0
  162. package/src/epm-query-builder/errors/QueryBuilderErrors.ts +65 -0
  163. package/src/epm-query-builder/interfaces/IDatabaseQueryBuilder.ts +5 -0
  164. package/src/epm-query-builder/interfaces/index.ts +1 -0
  165. package/src/epm-query-builder/types/query-builder-types.d.ts +289 -0
  166. package/src/epm-query-builder/utils/format.ts +22 -0
  167. package/src/epm-query-builder/utils/sql.ts +54 -0
  168. package/src/epm-query-builder/utils/validation.ts +13 -0
  169. package/src/epm-query-builder/validation/QueryOptionsValidator.ts +182 -0
  170. package/src/epm-query-builder/validation/SqlQueryValidator.ts +130 -0
  171. package/src/filters/FilterConditionBuilder.ts +114 -0
  172. package/src/filters/filter-types.ts +133 -0
  173. package/src/index.ts +10 -0
  174. package/src/js-lib/JsToSqlParser.ts +217 -0
  175. package/src/js-lib/ParseContext.ts +149 -0
  176. package/src/js-lib/db/base/ArrayExpressionVisitor.ts +16 -0
  177. package/src/js-lib/db/base/AssignmentExpressionVisitor.ts +34 -0
  178. package/src/js-lib/db/base/BinaryExpressionVisitor.ts +46 -0
  179. package/src/js-lib/db/base/CallExpressionVisitor.ts +1798 -0
  180. package/src/js-lib/db/base/IdentifierVisitor.ts +66 -0
  181. package/src/js-lib/db/base/LiteralVisitor.ts +38 -0
  182. package/src/js-lib/db/base/MemberExpressionVisitor.ts +36 -0
  183. package/src/js-lib/db/base/ProgramVisitor.ts +18 -0
  184. package/src/js-lib/db/base/UnaryExpressionVisitor.ts +32 -0
  185. package/src/js-lib/db/base/VisitorInterface.ts +6 -0
  186. package/src/js-lib/db/validator/FormulaValidator.ts +1235 -0
  187. package/src/js-lib/objects/BaseObject.ts +28 -0
  188. package/src/js-lib/objects/DateObject.ts +28 -0
  189. package/src/js-lib/objects/PctObject.ts +31 -0
  190. package/src/query-builder/PaginationBuilder.ts +19 -0
  191. package/src/query-builder/QueryBuilder.ts +1035 -0
  192. package/src/query-builder/SuperFilterBuilder.ts +628 -0
  193. package/src/runtime_var.ts +8 -0
  194. package/src/sql-lib/binary_expr.ts +16 -0
  195. package/src/sql-lib/case.ts +16 -0
  196. package/src/sql-lib/column.ts +18 -0
  197. package/src/sql-lib/else.ts +13 -0
  198. package/src/sql-lib/function.ts +9 -0
  199. package/src/sql-lib/join.ts +14 -0
  200. package/src/sql-lib/literal.ts +15 -0
  201. package/src/sql-lib/select.ts +154 -0
  202. package/src/sql-lib/unary_expr.ts +9 -0
  203. package/src/sql-lib/when.ts +15 -0
  204. package/src/sql-types.d.ts +565 -0
  205. package/src/sql_query_gen.ts +150 -0
  206. package/src/superFilter/DateFilterFactory.ts +180 -0
  207. package/src/superFilter/dateFunction.ts +36 -0
  208. package/src/utils.ts +354 -0
  209. package/test-output/report/junit.xml +329 -0
  210. package/tests/JsToSqlParser.test.ts +163 -0
  211. package/tests/QueryBuilder.test.ts +1320 -0
  212. package/tests/js-lib/CallExpressionVisitor.test.ts +820 -0
  213. package/tests/mocks/MockQueryResolver.ts +14 -0
  214. package/tests/sanity.test.ts +146 -0
  215. package/tests/sql-lib/binary_expr.test.ts +75 -0
  216. package/tests/sql-lib/case.test.ts +117 -0
  217. package/tests/sql-lib/column.test.ts +87 -0
  218. package/tests/sql-lib/else.test.ts +56 -0
  219. package/tests/sql-lib/function.test.ts +96 -0
  220. package/tests/sql-lib/literal.test.ts +75 -0
  221. package/tests/sql-lib/select.test.ts +245 -0
  222. package/tests/sql-lib/unary_expr.test.ts +32 -0
  223. package/tests/utils.test.ts +13 -0
  224. package/tsconfig.json +24 -0
  225. package/tsdown.config.ts +23 -0
@@ -0,0 +1,4162 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/js-lib/db/validator/FormulaValidator.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">src/js-lib/db/validator</a> FormulaValidator.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">49.5% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>451/911</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">51.81% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>228/440</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">88.88% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>80/90</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">48.47% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>429/885</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
627
+ <a name='L562'></a><a href='#L562'>562</a>
628
+ <a name='L563'></a><a href='#L563'>563</a>
629
+ <a name='L564'></a><a href='#L564'>564</a>
630
+ <a name='L565'></a><a href='#L565'>565</a>
631
+ <a name='L566'></a><a href='#L566'>566</a>
632
+ <a name='L567'></a><a href='#L567'>567</a>
633
+ <a name='L568'></a><a href='#L568'>568</a>
634
+ <a name='L569'></a><a href='#L569'>569</a>
635
+ <a name='L570'></a><a href='#L570'>570</a>
636
+ <a name='L571'></a><a href='#L571'>571</a>
637
+ <a name='L572'></a><a href='#L572'>572</a>
638
+ <a name='L573'></a><a href='#L573'>573</a>
639
+ <a name='L574'></a><a href='#L574'>574</a>
640
+ <a name='L575'></a><a href='#L575'>575</a>
641
+ <a name='L576'></a><a href='#L576'>576</a>
642
+ <a name='L577'></a><a href='#L577'>577</a>
643
+ <a name='L578'></a><a href='#L578'>578</a>
644
+ <a name='L579'></a><a href='#L579'>579</a>
645
+ <a name='L580'></a><a href='#L580'>580</a>
646
+ <a name='L581'></a><a href='#L581'>581</a>
647
+ <a name='L582'></a><a href='#L582'>582</a>
648
+ <a name='L583'></a><a href='#L583'>583</a>
649
+ <a name='L584'></a><a href='#L584'>584</a>
650
+ <a name='L585'></a><a href='#L585'>585</a>
651
+ <a name='L586'></a><a href='#L586'>586</a>
652
+ <a name='L587'></a><a href='#L587'>587</a>
653
+ <a name='L588'></a><a href='#L588'>588</a>
654
+ <a name='L589'></a><a href='#L589'>589</a>
655
+ <a name='L590'></a><a href='#L590'>590</a>
656
+ <a name='L591'></a><a href='#L591'>591</a>
657
+ <a name='L592'></a><a href='#L592'>592</a>
658
+ <a name='L593'></a><a href='#L593'>593</a>
659
+ <a name='L594'></a><a href='#L594'>594</a>
660
+ <a name='L595'></a><a href='#L595'>595</a>
661
+ <a name='L596'></a><a href='#L596'>596</a>
662
+ <a name='L597'></a><a href='#L597'>597</a>
663
+ <a name='L598'></a><a href='#L598'>598</a>
664
+ <a name='L599'></a><a href='#L599'>599</a>
665
+ <a name='L600'></a><a href='#L600'>600</a>
666
+ <a name='L601'></a><a href='#L601'>601</a>
667
+ <a name='L602'></a><a href='#L602'>602</a>
668
+ <a name='L603'></a><a href='#L603'>603</a>
669
+ <a name='L604'></a><a href='#L604'>604</a>
670
+ <a name='L605'></a><a href='#L605'>605</a>
671
+ <a name='L606'></a><a href='#L606'>606</a>
672
+ <a name='L607'></a><a href='#L607'>607</a>
673
+ <a name='L608'></a><a href='#L608'>608</a>
674
+ <a name='L609'></a><a href='#L609'>609</a>
675
+ <a name='L610'></a><a href='#L610'>610</a>
676
+ <a name='L611'></a><a href='#L611'>611</a>
677
+ <a name='L612'></a><a href='#L612'>612</a>
678
+ <a name='L613'></a><a href='#L613'>613</a>
679
+ <a name='L614'></a><a href='#L614'>614</a>
680
+ <a name='L615'></a><a href='#L615'>615</a>
681
+ <a name='L616'></a><a href='#L616'>616</a>
682
+ <a name='L617'></a><a href='#L617'>617</a>
683
+ <a name='L618'></a><a href='#L618'>618</a>
684
+ <a name='L619'></a><a href='#L619'>619</a>
685
+ <a name='L620'></a><a href='#L620'>620</a>
686
+ <a name='L621'></a><a href='#L621'>621</a>
687
+ <a name='L622'></a><a href='#L622'>622</a>
688
+ <a name='L623'></a><a href='#L623'>623</a>
689
+ <a name='L624'></a><a href='#L624'>624</a>
690
+ <a name='L625'></a><a href='#L625'>625</a>
691
+ <a name='L626'></a><a href='#L626'>626</a>
692
+ <a name='L627'></a><a href='#L627'>627</a>
693
+ <a name='L628'></a><a href='#L628'>628</a>
694
+ <a name='L629'></a><a href='#L629'>629</a>
695
+ <a name='L630'></a><a href='#L630'>630</a>
696
+ <a name='L631'></a><a href='#L631'>631</a>
697
+ <a name='L632'></a><a href='#L632'>632</a>
698
+ <a name='L633'></a><a href='#L633'>633</a>
699
+ <a name='L634'></a><a href='#L634'>634</a>
700
+ <a name='L635'></a><a href='#L635'>635</a>
701
+ <a name='L636'></a><a href='#L636'>636</a>
702
+ <a name='L637'></a><a href='#L637'>637</a>
703
+ <a name='L638'></a><a href='#L638'>638</a>
704
+ <a name='L639'></a><a href='#L639'>639</a>
705
+ <a name='L640'></a><a href='#L640'>640</a>
706
+ <a name='L641'></a><a href='#L641'>641</a>
707
+ <a name='L642'></a><a href='#L642'>642</a>
708
+ <a name='L643'></a><a href='#L643'>643</a>
709
+ <a name='L644'></a><a href='#L644'>644</a>
710
+ <a name='L645'></a><a href='#L645'>645</a>
711
+ <a name='L646'></a><a href='#L646'>646</a>
712
+ <a name='L647'></a><a href='#L647'>647</a>
713
+ <a name='L648'></a><a href='#L648'>648</a>
714
+ <a name='L649'></a><a href='#L649'>649</a>
715
+ <a name='L650'></a><a href='#L650'>650</a>
716
+ <a name='L651'></a><a href='#L651'>651</a>
717
+ <a name='L652'></a><a href='#L652'>652</a>
718
+ <a name='L653'></a><a href='#L653'>653</a>
719
+ <a name='L654'></a><a href='#L654'>654</a>
720
+ <a name='L655'></a><a href='#L655'>655</a>
721
+ <a name='L656'></a><a href='#L656'>656</a>
722
+ <a name='L657'></a><a href='#L657'>657</a>
723
+ <a name='L658'></a><a href='#L658'>658</a>
724
+ <a name='L659'></a><a href='#L659'>659</a>
725
+ <a name='L660'></a><a href='#L660'>660</a>
726
+ <a name='L661'></a><a href='#L661'>661</a>
727
+ <a name='L662'></a><a href='#L662'>662</a>
728
+ <a name='L663'></a><a href='#L663'>663</a>
729
+ <a name='L664'></a><a href='#L664'>664</a>
730
+ <a name='L665'></a><a href='#L665'>665</a>
731
+ <a name='L666'></a><a href='#L666'>666</a>
732
+ <a name='L667'></a><a href='#L667'>667</a>
733
+ <a name='L668'></a><a href='#L668'>668</a>
734
+ <a name='L669'></a><a href='#L669'>669</a>
735
+ <a name='L670'></a><a href='#L670'>670</a>
736
+ <a name='L671'></a><a href='#L671'>671</a>
737
+ <a name='L672'></a><a href='#L672'>672</a>
738
+ <a name='L673'></a><a href='#L673'>673</a>
739
+ <a name='L674'></a><a href='#L674'>674</a>
740
+ <a name='L675'></a><a href='#L675'>675</a>
741
+ <a name='L676'></a><a href='#L676'>676</a>
742
+ <a name='L677'></a><a href='#L677'>677</a>
743
+ <a name='L678'></a><a href='#L678'>678</a>
744
+ <a name='L679'></a><a href='#L679'>679</a>
745
+ <a name='L680'></a><a href='#L680'>680</a>
746
+ <a name='L681'></a><a href='#L681'>681</a>
747
+ <a name='L682'></a><a href='#L682'>682</a>
748
+ <a name='L683'></a><a href='#L683'>683</a>
749
+ <a name='L684'></a><a href='#L684'>684</a>
750
+ <a name='L685'></a><a href='#L685'>685</a>
751
+ <a name='L686'></a><a href='#L686'>686</a>
752
+ <a name='L687'></a><a href='#L687'>687</a>
753
+ <a name='L688'></a><a href='#L688'>688</a>
754
+ <a name='L689'></a><a href='#L689'>689</a>
755
+ <a name='L690'></a><a href='#L690'>690</a>
756
+ <a name='L691'></a><a href='#L691'>691</a>
757
+ <a name='L692'></a><a href='#L692'>692</a>
758
+ <a name='L693'></a><a href='#L693'>693</a>
759
+ <a name='L694'></a><a href='#L694'>694</a>
760
+ <a name='L695'></a><a href='#L695'>695</a>
761
+ <a name='L696'></a><a href='#L696'>696</a>
762
+ <a name='L697'></a><a href='#L697'>697</a>
763
+ <a name='L698'></a><a href='#L698'>698</a>
764
+ <a name='L699'></a><a href='#L699'>699</a>
765
+ <a name='L700'></a><a href='#L700'>700</a>
766
+ <a name='L701'></a><a href='#L701'>701</a>
767
+ <a name='L702'></a><a href='#L702'>702</a>
768
+ <a name='L703'></a><a href='#L703'>703</a>
769
+ <a name='L704'></a><a href='#L704'>704</a>
770
+ <a name='L705'></a><a href='#L705'>705</a>
771
+ <a name='L706'></a><a href='#L706'>706</a>
772
+ <a name='L707'></a><a href='#L707'>707</a>
773
+ <a name='L708'></a><a href='#L708'>708</a>
774
+ <a name='L709'></a><a href='#L709'>709</a>
775
+ <a name='L710'></a><a href='#L710'>710</a>
776
+ <a name='L711'></a><a href='#L711'>711</a>
777
+ <a name='L712'></a><a href='#L712'>712</a>
778
+ <a name='L713'></a><a href='#L713'>713</a>
779
+ <a name='L714'></a><a href='#L714'>714</a>
780
+ <a name='L715'></a><a href='#L715'>715</a>
781
+ <a name='L716'></a><a href='#L716'>716</a>
782
+ <a name='L717'></a><a href='#L717'>717</a>
783
+ <a name='L718'></a><a href='#L718'>718</a>
784
+ <a name='L719'></a><a href='#L719'>719</a>
785
+ <a name='L720'></a><a href='#L720'>720</a>
786
+ <a name='L721'></a><a href='#L721'>721</a>
787
+ <a name='L722'></a><a href='#L722'>722</a>
788
+ <a name='L723'></a><a href='#L723'>723</a>
789
+ <a name='L724'></a><a href='#L724'>724</a>
790
+ <a name='L725'></a><a href='#L725'>725</a>
791
+ <a name='L726'></a><a href='#L726'>726</a>
792
+ <a name='L727'></a><a href='#L727'>727</a>
793
+ <a name='L728'></a><a href='#L728'>728</a>
794
+ <a name='L729'></a><a href='#L729'>729</a>
795
+ <a name='L730'></a><a href='#L730'>730</a>
796
+ <a name='L731'></a><a href='#L731'>731</a>
797
+ <a name='L732'></a><a href='#L732'>732</a>
798
+ <a name='L733'></a><a href='#L733'>733</a>
799
+ <a name='L734'></a><a href='#L734'>734</a>
800
+ <a name='L735'></a><a href='#L735'>735</a>
801
+ <a name='L736'></a><a href='#L736'>736</a>
802
+ <a name='L737'></a><a href='#L737'>737</a>
803
+ <a name='L738'></a><a href='#L738'>738</a>
804
+ <a name='L739'></a><a href='#L739'>739</a>
805
+ <a name='L740'></a><a href='#L740'>740</a>
806
+ <a name='L741'></a><a href='#L741'>741</a>
807
+ <a name='L742'></a><a href='#L742'>742</a>
808
+ <a name='L743'></a><a href='#L743'>743</a>
809
+ <a name='L744'></a><a href='#L744'>744</a>
810
+ <a name='L745'></a><a href='#L745'>745</a>
811
+ <a name='L746'></a><a href='#L746'>746</a>
812
+ <a name='L747'></a><a href='#L747'>747</a>
813
+ <a name='L748'></a><a href='#L748'>748</a>
814
+ <a name='L749'></a><a href='#L749'>749</a>
815
+ <a name='L750'></a><a href='#L750'>750</a>
816
+ <a name='L751'></a><a href='#L751'>751</a>
817
+ <a name='L752'></a><a href='#L752'>752</a>
818
+ <a name='L753'></a><a href='#L753'>753</a>
819
+ <a name='L754'></a><a href='#L754'>754</a>
820
+ <a name='L755'></a><a href='#L755'>755</a>
821
+ <a name='L756'></a><a href='#L756'>756</a>
822
+ <a name='L757'></a><a href='#L757'>757</a>
823
+ <a name='L758'></a><a href='#L758'>758</a>
824
+ <a name='L759'></a><a href='#L759'>759</a>
825
+ <a name='L760'></a><a href='#L760'>760</a>
826
+ <a name='L761'></a><a href='#L761'>761</a>
827
+ <a name='L762'></a><a href='#L762'>762</a>
828
+ <a name='L763'></a><a href='#L763'>763</a>
829
+ <a name='L764'></a><a href='#L764'>764</a>
830
+ <a name='L765'></a><a href='#L765'>765</a>
831
+ <a name='L766'></a><a href='#L766'>766</a>
832
+ <a name='L767'></a><a href='#L767'>767</a>
833
+ <a name='L768'></a><a href='#L768'>768</a>
834
+ <a name='L769'></a><a href='#L769'>769</a>
835
+ <a name='L770'></a><a href='#L770'>770</a>
836
+ <a name='L771'></a><a href='#L771'>771</a>
837
+ <a name='L772'></a><a href='#L772'>772</a>
838
+ <a name='L773'></a><a href='#L773'>773</a>
839
+ <a name='L774'></a><a href='#L774'>774</a>
840
+ <a name='L775'></a><a href='#L775'>775</a>
841
+ <a name='L776'></a><a href='#L776'>776</a>
842
+ <a name='L777'></a><a href='#L777'>777</a>
843
+ <a name='L778'></a><a href='#L778'>778</a>
844
+ <a name='L779'></a><a href='#L779'>779</a>
845
+ <a name='L780'></a><a href='#L780'>780</a>
846
+ <a name='L781'></a><a href='#L781'>781</a>
847
+ <a name='L782'></a><a href='#L782'>782</a>
848
+ <a name='L783'></a><a href='#L783'>783</a>
849
+ <a name='L784'></a><a href='#L784'>784</a>
850
+ <a name='L785'></a><a href='#L785'>785</a>
851
+ <a name='L786'></a><a href='#L786'>786</a>
852
+ <a name='L787'></a><a href='#L787'>787</a>
853
+ <a name='L788'></a><a href='#L788'>788</a>
854
+ <a name='L789'></a><a href='#L789'>789</a>
855
+ <a name='L790'></a><a href='#L790'>790</a>
856
+ <a name='L791'></a><a href='#L791'>791</a>
857
+ <a name='L792'></a><a href='#L792'>792</a>
858
+ <a name='L793'></a><a href='#L793'>793</a>
859
+ <a name='L794'></a><a href='#L794'>794</a>
860
+ <a name='L795'></a><a href='#L795'>795</a>
861
+ <a name='L796'></a><a href='#L796'>796</a>
862
+ <a name='L797'></a><a href='#L797'>797</a>
863
+ <a name='L798'></a><a href='#L798'>798</a>
864
+ <a name='L799'></a><a href='#L799'>799</a>
865
+ <a name='L800'></a><a href='#L800'>800</a>
866
+ <a name='L801'></a><a href='#L801'>801</a>
867
+ <a name='L802'></a><a href='#L802'>802</a>
868
+ <a name='L803'></a><a href='#L803'>803</a>
869
+ <a name='L804'></a><a href='#L804'>804</a>
870
+ <a name='L805'></a><a href='#L805'>805</a>
871
+ <a name='L806'></a><a href='#L806'>806</a>
872
+ <a name='L807'></a><a href='#L807'>807</a>
873
+ <a name='L808'></a><a href='#L808'>808</a>
874
+ <a name='L809'></a><a href='#L809'>809</a>
875
+ <a name='L810'></a><a href='#L810'>810</a>
876
+ <a name='L811'></a><a href='#L811'>811</a>
877
+ <a name='L812'></a><a href='#L812'>812</a>
878
+ <a name='L813'></a><a href='#L813'>813</a>
879
+ <a name='L814'></a><a href='#L814'>814</a>
880
+ <a name='L815'></a><a href='#L815'>815</a>
881
+ <a name='L816'></a><a href='#L816'>816</a>
882
+ <a name='L817'></a><a href='#L817'>817</a>
883
+ <a name='L818'></a><a href='#L818'>818</a>
884
+ <a name='L819'></a><a href='#L819'>819</a>
885
+ <a name='L820'></a><a href='#L820'>820</a>
886
+ <a name='L821'></a><a href='#L821'>821</a>
887
+ <a name='L822'></a><a href='#L822'>822</a>
888
+ <a name='L823'></a><a href='#L823'>823</a>
889
+ <a name='L824'></a><a href='#L824'>824</a>
890
+ <a name='L825'></a><a href='#L825'>825</a>
891
+ <a name='L826'></a><a href='#L826'>826</a>
892
+ <a name='L827'></a><a href='#L827'>827</a>
893
+ <a name='L828'></a><a href='#L828'>828</a>
894
+ <a name='L829'></a><a href='#L829'>829</a>
895
+ <a name='L830'></a><a href='#L830'>830</a>
896
+ <a name='L831'></a><a href='#L831'>831</a>
897
+ <a name='L832'></a><a href='#L832'>832</a>
898
+ <a name='L833'></a><a href='#L833'>833</a>
899
+ <a name='L834'></a><a href='#L834'>834</a>
900
+ <a name='L835'></a><a href='#L835'>835</a>
901
+ <a name='L836'></a><a href='#L836'>836</a>
902
+ <a name='L837'></a><a href='#L837'>837</a>
903
+ <a name='L838'></a><a href='#L838'>838</a>
904
+ <a name='L839'></a><a href='#L839'>839</a>
905
+ <a name='L840'></a><a href='#L840'>840</a>
906
+ <a name='L841'></a><a href='#L841'>841</a>
907
+ <a name='L842'></a><a href='#L842'>842</a>
908
+ <a name='L843'></a><a href='#L843'>843</a>
909
+ <a name='L844'></a><a href='#L844'>844</a>
910
+ <a name='L845'></a><a href='#L845'>845</a>
911
+ <a name='L846'></a><a href='#L846'>846</a>
912
+ <a name='L847'></a><a href='#L847'>847</a>
913
+ <a name='L848'></a><a href='#L848'>848</a>
914
+ <a name='L849'></a><a href='#L849'>849</a>
915
+ <a name='L850'></a><a href='#L850'>850</a>
916
+ <a name='L851'></a><a href='#L851'>851</a>
917
+ <a name='L852'></a><a href='#L852'>852</a>
918
+ <a name='L853'></a><a href='#L853'>853</a>
919
+ <a name='L854'></a><a href='#L854'>854</a>
920
+ <a name='L855'></a><a href='#L855'>855</a>
921
+ <a name='L856'></a><a href='#L856'>856</a>
922
+ <a name='L857'></a><a href='#L857'>857</a>
923
+ <a name='L858'></a><a href='#L858'>858</a>
924
+ <a name='L859'></a><a href='#L859'>859</a>
925
+ <a name='L860'></a><a href='#L860'>860</a>
926
+ <a name='L861'></a><a href='#L861'>861</a>
927
+ <a name='L862'></a><a href='#L862'>862</a>
928
+ <a name='L863'></a><a href='#L863'>863</a>
929
+ <a name='L864'></a><a href='#L864'>864</a>
930
+ <a name='L865'></a><a href='#L865'>865</a>
931
+ <a name='L866'></a><a href='#L866'>866</a>
932
+ <a name='L867'></a><a href='#L867'>867</a>
933
+ <a name='L868'></a><a href='#L868'>868</a>
934
+ <a name='L869'></a><a href='#L869'>869</a>
935
+ <a name='L870'></a><a href='#L870'>870</a>
936
+ <a name='L871'></a><a href='#L871'>871</a>
937
+ <a name='L872'></a><a href='#L872'>872</a>
938
+ <a name='L873'></a><a href='#L873'>873</a>
939
+ <a name='L874'></a><a href='#L874'>874</a>
940
+ <a name='L875'></a><a href='#L875'>875</a>
941
+ <a name='L876'></a><a href='#L876'>876</a>
942
+ <a name='L877'></a><a href='#L877'>877</a>
943
+ <a name='L878'></a><a href='#L878'>878</a>
944
+ <a name='L879'></a><a href='#L879'>879</a>
945
+ <a name='L880'></a><a href='#L880'>880</a>
946
+ <a name='L881'></a><a href='#L881'>881</a>
947
+ <a name='L882'></a><a href='#L882'>882</a>
948
+ <a name='L883'></a><a href='#L883'>883</a>
949
+ <a name='L884'></a><a href='#L884'>884</a>
950
+ <a name='L885'></a><a href='#L885'>885</a>
951
+ <a name='L886'></a><a href='#L886'>886</a>
952
+ <a name='L887'></a><a href='#L887'>887</a>
953
+ <a name='L888'></a><a href='#L888'>888</a>
954
+ <a name='L889'></a><a href='#L889'>889</a>
955
+ <a name='L890'></a><a href='#L890'>890</a>
956
+ <a name='L891'></a><a href='#L891'>891</a>
957
+ <a name='L892'></a><a href='#L892'>892</a>
958
+ <a name='L893'></a><a href='#L893'>893</a>
959
+ <a name='L894'></a><a href='#L894'>894</a>
960
+ <a name='L895'></a><a href='#L895'>895</a>
961
+ <a name='L896'></a><a href='#L896'>896</a>
962
+ <a name='L897'></a><a href='#L897'>897</a>
963
+ <a name='L898'></a><a href='#L898'>898</a>
964
+ <a name='L899'></a><a href='#L899'>899</a>
965
+ <a name='L900'></a><a href='#L900'>900</a>
966
+ <a name='L901'></a><a href='#L901'>901</a>
967
+ <a name='L902'></a><a href='#L902'>902</a>
968
+ <a name='L903'></a><a href='#L903'>903</a>
969
+ <a name='L904'></a><a href='#L904'>904</a>
970
+ <a name='L905'></a><a href='#L905'>905</a>
971
+ <a name='L906'></a><a href='#L906'>906</a>
972
+ <a name='L907'></a><a href='#L907'>907</a>
973
+ <a name='L908'></a><a href='#L908'>908</a>
974
+ <a name='L909'></a><a href='#L909'>909</a>
975
+ <a name='L910'></a><a href='#L910'>910</a>
976
+ <a name='L911'></a><a href='#L911'>911</a>
977
+ <a name='L912'></a><a href='#L912'>912</a>
978
+ <a name='L913'></a><a href='#L913'>913</a>
979
+ <a name='L914'></a><a href='#L914'>914</a>
980
+ <a name='L915'></a><a href='#L915'>915</a>
981
+ <a name='L916'></a><a href='#L916'>916</a>
982
+ <a name='L917'></a><a href='#L917'>917</a>
983
+ <a name='L918'></a><a href='#L918'>918</a>
984
+ <a name='L919'></a><a href='#L919'>919</a>
985
+ <a name='L920'></a><a href='#L920'>920</a>
986
+ <a name='L921'></a><a href='#L921'>921</a>
987
+ <a name='L922'></a><a href='#L922'>922</a>
988
+ <a name='L923'></a><a href='#L923'>923</a>
989
+ <a name='L924'></a><a href='#L924'>924</a>
990
+ <a name='L925'></a><a href='#L925'>925</a>
991
+ <a name='L926'></a><a href='#L926'>926</a>
992
+ <a name='L927'></a><a href='#L927'>927</a>
993
+ <a name='L928'></a><a href='#L928'>928</a>
994
+ <a name='L929'></a><a href='#L929'>929</a>
995
+ <a name='L930'></a><a href='#L930'>930</a>
996
+ <a name='L931'></a><a href='#L931'>931</a>
997
+ <a name='L932'></a><a href='#L932'>932</a>
998
+ <a name='L933'></a><a href='#L933'>933</a>
999
+ <a name='L934'></a><a href='#L934'>934</a>
1000
+ <a name='L935'></a><a href='#L935'>935</a>
1001
+ <a name='L936'></a><a href='#L936'>936</a>
1002
+ <a name='L937'></a><a href='#L937'>937</a>
1003
+ <a name='L938'></a><a href='#L938'>938</a>
1004
+ <a name='L939'></a><a href='#L939'>939</a>
1005
+ <a name='L940'></a><a href='#L940'>940</a>
1006
+ <a name='L941'></a><a href='#L941'>941</a>
1007
+ <a name='L942'></a><a href='#L942'>942</a>
1008
+ <a name='L943'></a><a href='#L943'>943</a>
1009
+ <a name='L944'></a><a href='#L944'>944</a>
1010
+ <a name='L945'></a><a href='#L945'>945</a>
1011
+ <a name='L946'></a><a href='#L946'>946</a>
1012
+ <a name='L947'></a><a href='#L947'>947</a>
1013
+ <a name='L948'></a><a href='#L948'>948</a>
1014
+ <a name='L949'></a><a href='#L949'>949</a>
1015
+ <a name='L950'></a><a href='#L950'>950</a>
1016
+ <a name='L951'></a><a href='#L951'>951</a>
1017
+ <a name='L952'></a><a href='#L952'>952</a>
1018
+ <a name='L953'></a><a href='#L953'>953</a>
1019
+ <a name='L954'></a><a href='#L954'>954</a>
1020
+ <a name='L955'></a><a href='#L955'>955</a>
1021
+ <a name='L956'></a><a href='#L956'>956</a>
1022
+ <a name='L957'></a><a href='#L957'>957</a>
1023
+ <a name='L958'></a><a href='#L958'>958</a>
1024
+ <a name='L959'></a><a href='#L959'>959</a>
1025
+ <a name='L960'></a><a href='#L960'>960</a>
1026
+ <a name='L961'></a><a href='#L961'>961</a>
1027
+ <a name='L962'></a><a href='#L962'>962</a>
1028
+ <a name='L963'></a><a href='#L963'>963</a>
1029
+ <a name='L964'></a><a href='#L964'>964</a>
1030
+ <a name='L965'></a><a href='#L965'>965</a>
1031
+ <a name='L966'></a><a href='#L966'>966</a>
1032
+ <a name='L967'></a><a href='#L967'>967</a>
1033
+ <a name='L968'></a><a href='#L968'>968</a>
1034
+ <a name='L969'></a><a href='#L969'>969</a>
1035
+ <a name='L970'></a><a href='#L970'>970</a>
1036
+ <a name='L971'></a><a href='#L971'>971</a>
1037
+ <a name='L972'></a><a href='#L972'>972</a>
1038
+ <a name='L973'></a><a href='#L973'>973</a>
1039
+ <a name='L974'></a><a href='#L974'>974</a>
1040
+ <a name='L975'></a><a href='#L975'>975</a>
1041
+ <a name='L976'></a><a href='#L976'>976</a>
1042
+ <a name='L977'></a><a href='#L977'>977</a>
1043
+ <a name='L978'></a><a href='#L978'>978</a>
1044
+ <a name='L979'></a><a href='#L979'>979</a>
1045
+ <a name='L980'></a><a href='#L980'>980</a>
1046
+ <a name='L981'></a><a href='#L981'>981</a>
1047
+ <a name='L982'></a><a href='#L982'>982</a>
1048
+ <a name='L983'></a><a href='#L983'>983</a>
1049
+ <a name='L984'></a><a href='#L984'>984</a>
1050
+ <a name='L985'></a><a href='#L985'>985</a>
1051
+ <a name='L986'></a><a href='#L986'>986</a>
1052
+ <a name='L987'></a><a href='#L987'>987</a>
1053
+ <a name='L988'></a><a href='#L988'>988</a>
1054
+ <a name='L989'></a><a href='#L989'>989</a>
1055
+ <a name='L990'></a><a href='#L990'>990</a>
1056
+ <a name='L991'></a><a href='#L991'>991</a>
1057
+ <a name='L992'></a><a href='#L992'>992</a>
1058
+ <a name='L993'></a><a href='#L993'>993</a>
1059
+ <a name='L994'></a><a href='#L994'>994</a>
1060
+ <a name='L995'></a><a href='#L995'>995</a>
1061
+ <a name='L996'></a><a href='#L996'>996</a>
1062
+ <a name='L997'></a><a href='#L997'>997</a>
1063
+ <a name='L998'></a><a href='#L998'>998</a>
1064
+ <a name='L999'></a><a href='#L999'>999</a>
1065
+ <a name='L1000'></a><a href='#L1000'>1000</a>
1066
+ <a name='L1001'></a><a href='#L1001'>1001</a>
1067
+ <a name='L1002'></a><a href='#L1002'>1002</a>
1068
+ <a name='L1003'></a><a href='#L1003'>1003</a>
1069
+ <a name='L1004'></a><a href='#L1004'>1004</a>
1070
+ <a name='L1005'></a><a href='#L1005'>1005</a>
1071
+ <a name='L1006'></a><a href='#L1006'>1006</a>
1072
+ <a name='L1007'></a><a href='#L1007'>1007</a>
1073
+ <a name='L1008'></a><a href='#L1008'>1008</a>
1074
+ <a name='L1009'></a><a href='#L1009'>1009</a>
1075
+ <a name='L1010'></a><a href='#L1010'>1010</a>
1076
+ <a name='L1011'></a><a href='#L1011'>1011</a>
1077
+ <a name='L1012'></a><a href='#L1012'>1012</a>
1078
+ <a name='L1013'></a><a href='#L1013'>1013</a>
1079
+ <a name='L1014'></a><a href='#L1014'>1014</a>
1080
+ <a name='L1015'></a><a href='#L1015'>1015</a>
1081
+ <a name='L1016'></a><a href='#L1016'>1016</a>
1082
+ <a name='L1017'></a><a href='#L1017'>1017</a>
1083
+ <a name='L1018'></a><a href='#L1018'>1018</a>
1084
+ <a name='L1019'></a><a href='#L1019'>1019</a>
1085
+ <a name='L1020'></a><a href='#L1020'>1020</a>
1086
+ <a name='L1021'></a><a href='#L1021'>1021</a>
1087
+ <a name='L1022'></a><a href='#L1022'>1022</a>
1088
+ <a name='L1023'></a><a href='#L1023'>1023</a>
1089
+ <a name='L1024'></a><a href='#L1024'>1024</a>
1090
+ <a name='L1025'></a><a href='#L1025'>1025</a>
1091
+ <a name='L1026'></a><a href='#L1026'>1026</a>
1092
+ <a name='L1027'></a><a href='#L1027'>1027</a>
1093
+ <a name='L1028'></a><a href='#L1028'>1028</a>
1094
+ <a name='L1029'></a><a href='#L1029'>1029</a>
1095
+ <a name='L1030'></a><a href='#L1030'>1030</a>
1096
+ <a name='L1031'></a><a href='#L1031'>1031</a>
1097
+ <a name='L1032'></a><a href='#L1032'>1032</a>
1098
+ <a name='L1033'></a><a href='#L1033'>1033</a>
1099
+ <a name='L1034'></a><a href='#L1034'>1034</a>
1100
+ <a name='L1035'></a><a href='#L1035'>1035</a>
1101
+ <a name='L1036'></a><a href='#L1036'>1036</a>
1102
+ <a name='L1037'></a><a href='#L1037'>1037</a>
1103
+ <a name='L1038'></a><a href='#L1038'>1038</a>
1104
+ <a name='L1039'></a><a href='#L1039'>1039</a>
1105
+ <a name='L1040'></a><a href='#L1040'>1040</a>
1106
+ <a name='L1041'></a><a href='#L1041'>1041</a>
1107
+ <a name='L1042'></a><a href='#L1042'>1042</a>
1108
+ <a name='L1043'></a><a href='#L1043'>1043</a>
1109
+ <a name='L1044'></a><a href='#L1044'>1044</a>
1110
+ <a name='L1045'></a><a href='#L1045'>1045</a>
1111
+ <a name='L1046'></a><a href='#L1046'>1046</a>
1112
+ <a name='L1047'></a><a href='#L1047'>1047</a>
1113
+ <a name='L1048'></a><a href='#L1048'>1048</a>
1114
+ <a name='L1049'></a><a href='#L1049'>1049</a>
1115
+ <a name='L1050'></a><a href='#L1050'>1050</a>
1116
+ <a name='L1051'></a><a href='#L1051'>1051</a>
1117
+ <a name='L1052'></a><a href='#L1052'>1052</a>
1118
+ <a name='L1053'></a><a href='#L1053'>1053</a>
1119
+ <a name='L1054'></a><a href='#L1054'>1054</a>
1120
+ <a name='L1055'></a><a href='#L1055'>1055</a>
1121
+ <a name='L1056'></a><a href='#L1056'>1056</a>
1122
+ <a name='L1057'></a><a href='#L1057'>1057</a>
1123
+ <a name='L1058'></a><a href='#L1058'>1058</a>
1124
+ <a name='L1059'></a><a href='#L1059'>1059</a>
1125
+ <a name='L1060'></a><a href='#L1060'>1060</a>
1126
+ <a name='L1061'></a><a href='#L1061'>1061</a>
1127
+ <a name='L1062'></a><a href='#L1062'>1062</a>
1128
+ <a name='L1063'></a><a href='#L1063'>1063</a>
1129
+ <a name='L1064'></a><a href='#L1064'>1064</a>
1130
+ <a name='L1065'></a><a href='#L1065'>1065</a>
1131
+ <a name='L1066'></a><a href='#L1066'>1066</a>
1132
+ <a name='L1067'></a><a href='#L1067'>1067</a>
1133
+ <a name='L1068'></a><a href='#L1068'>1068</a>
1134
+ <a name='L1069'></a><a href='#L1069'>1069</a>
1135
+ <a name='L1070'></a><a href='#L1070'>1070</a>
1136
+ <a name='L1071'></a><a href='#L1071'>1071</a>
1137
+ <a name='L1072'></a><a href='#L1072'>1072</a>
1138
+ <a name='L1073'></a><a href='#L1073'>1073</a>
1139
+ <a name='L1074'></a><a href='#L1074'>1074</a>
1140
+ <a name='L1075'></a><a href='#L1075'>1075</a>
1141
+ <a name='L1076'></a><a href='#L1076'>1076</a>
1142
+ <a name='L1077'></a><a href='#L1077'>1077</a>
1143
+ <a name='L1078'></a><a href='#L1078'>1078</a>
1144
+ <a name='L1079'></a><a href='#L1079'>1079</a>
1145
+ <a name='L1080'></a><a href='#L1080'>1080</a>
1146
+ <a name='L1081'></a><a href='#L1081'>1081</a>
1147
+ <a name='L1082'></a><a href='#L1082'>1082</a>
1148
+ <a name='L1083'></a><a href='#L1083'>1083</a>
1149
+ <a name='L1084'></a><a href='#L1084'>1084</a>
1150
+ <a name='L1085'></a><a href='#L1085'>1085</a>
1151
+ <a name='L1086'></a><a href='#L1086'>1086</a>
1152
+ <a name='L1087'></a><a href='#L1087'>1087</a>
1153
+ <a name='L1088'></a><a href='#L1088'>1088</a>
1154
+ <a name='L1089'></a><a href='#L1089'>1089</a>
1155
+ <a name='L1090'></a><a href='#L1090'>1090</a>
1156
+ <a name='L1091'></a><a href='#L1091'>1091</a>
1157
+ <a name='L1092'></a><a href='#L1092'>1092</a>
1158
+ <a name='L1093'></a><a href='#L1093'>1093</a>
1159
+ <a name='L1094'></a><a href='#L1094'>1094</a>
1160
+ <a name='L1095'></a><a href='#L1095'>1095</a>
1161
+ <a name='L1096'></a><a href='#L1096'>1096</a>
1162
+ <a name='L1097'></a><a href='#L1097'>1097</a>
1163
+ <a name='L1098'></a><a href='#L1098'>1098</a>
1164
+ <a name='L1099'></a><a href='#L1099'>1099</a>
1165
+ <a name='L1100'></a><a href='#L1100'>1100</a>
1166
+ <a name='L1101'></a><a href='#L1101'>1101</a>
1167
+ <a name='L1102'></a><a href='#L1102'>1102</a>
1168
+ <a name='L1103'></a><a href='#L1103'>1103</a>
1169
+ <a name='L1104'></a><a href='#L1104'>1104</a>
1170
+ <a name='L1105'></a><a href='#L1105'>1105</a>
1171
+ <a name='L1106'></a><a href='#L1106'>1106</a>
1172
+ <a name='L1107'></a><a href='#L1107'>1107</a>
1173
+ <a name='L1108'></a><a href='#L1108'>1108</a>
1174
+ <a name='L1109'></a><a href='#L1109'>1109</a>
1175
+ <a name='L1110'></a><a href='#L1110'>1110</a>
1176
+ <a name='L1111'></a><a href='#L1111'>1111</a>
1177
+ <a name='L1112'></a><a href='#L1112'>1112</a>
1178
+ <a name='L1113'></a><a href='#L1113'>1113</a>
1179
+ <a name='L1114'></a><a href='#L1114'>1114</a>
1180
+ <a name='L1115'></a><a href='#L1115'>1115</a>
1181
+ <a name='L1116'></a><a href='#L1116'>1116</a>
1182
+ <a name='L1117'></a><a href='#L1117'>1117</a>
1183
+ <a name='L1118'></a><a href='#L1118'>1118</a>
1184
+ <a name='L1119'></a><a href='#L1119'>1119</a>
1185
+ <a name='L1120'></a><a href='#L1120'>1120</a>
1186
+ <a name='L1121'></a><a href='#L1121'>1121</a>
1187
+ <a name='L1122'></a><a href='#L1122'>1122</a>
1188
+ <a name='L1123'></a><a href='#L1123'>1123</a>
1189
+ <a name='L1124'></a><a href='#L1124'>1124</a>
1190
+ <a name='L1125'></a><a href='#L1125'>1125</a>
1191
+ <a name='L1126'></a><a href='#L1126'>1126</a>
1192
+ <a name='L1127'></a><a href='#L1127'>1127</a>
1193
+ <a name='L1128'></a><a href='#L1128'>1128</a>
1194
+ <a name='L1129'></a><a href='#L1129'>1129</a>
1195
+ <a name='L1130'></a><a href='#L1130'>1130</a>
1196
+ <a name='L1131'></a><a href='#L1131'>1131</a>
1197
+ <a name='L1132'></a><a href='#L1132'>1132</a>
1198
+ <a name='L1133'></a><a href='#L1133'>1133</a>
1199
+ <a name='L1134'></a><a href='#L1134'>1134</a>
1200
+ <a name='L1135'></a><a href='#L1135'>1135</a>
1201
+ <a name='L1136'></a><a href='#L1136'>1136</a>
1202
+ <a name='L1137'></a><a href='#L1137'>1137</a>
1203
+ <a name='L1138'></a><a href='#L1138'>1138</a>
1204
+ <a name='L1139'></a><a href='#L1139'>1139</a>
1205
+ <a name='L1140'></a><a href='#L1140'>1140</a>
1206
+ <a name='L1141'></a><a href='#L1141'>1141</a>
1207
+ <a name='L1142'></a><a href='#L1142'>1142</a>
1208
+ <a name='L1143'></a><a href='#L1143'>1143</a>
1209
+ <a name='L1144'></a><a href='#L1144'>1144</a>
1210
+ <a name='L1145'></a><a href='#L1145'>1145</a>
1211
+ <a name='L1146'></a><a href='#L1146'>1146</a>
1212
+ <a name='L1147'></a><a href='#L1147'>1147</a>
1213
+ <a name='L1148'></a><a href='#L1148'>1148</a>
1214
+ <a name='L1149'></a><a href='#L1149'>1149</a>
1215
+ <a name='L1150'></a><a href='#L1150'>1150</a>
1216
+ <a name='L1151'></a><a href='#L1151'>1151</a>
1217
+ <a name='L1152'></a><a href='#L1152'>1152</a>
1218
+ <a name='L1153'></a><a href='#L1153'>1153</a>
1219
+ <a name='L1154'></a><a href='#L1154'>1154</a>
1220
+ <a name='L1155'></a><a href='#L1155'>1155</a>
1221
+ <a name='L1156'></a><a href='#L1156'>1156</a>
1222
+ <a name='L1157'></a><a href='#L1157'>1157</a>
1223
+ <a name='L1158'></a><a href='#L1158'>1158</a>
1224
+ <a name='L1159'></a><a href='#L1159'>1159</a>
1225
+ <a name='L1160'></a><a href='#L1160'>1160</a>
1226
+ <a name='L1161'></a><a href='#L1161'>1161</a>
1227
+ <a name='L1162'></a><a href='#L1162'>1162</a>
1228
+ <a name='L1163'></a><a href='#L1163'>1163</a>
1229
+ <a name='L1164'></a><a href='#L1164'>1164</a>
1230
+ <a name='L1165'></a><a href='#L1165'>1165</a>
1231
+ <a name='L1166'></a><a href='#L1166'>1166</a>
1232
+ <a name='L1167'></a><a href='#L1167'>1167</a>
1233
+ <a name='L1168'></a><a href='#L1168'>1168</a>
1234
+ <a name='L1169'></a><a href='#L1169'>1169</a>
1235
+ <a name='L1170'></a><a href='#L1170'>1170</a>
1236
+ <a name='L1171'></a><a href='#L1171'>1171</a>
1237
+ <a name='L1172'></a><a href='#L1172'>1172</a>
1238
+ <a name='L1173'></a><a href='#L1173'>1173</a>
1239
+ <a name='L1174'></a><a href='#L1174'>1174</a>
1240
+ <a name='L1175'></a><a href='#L1175'>1175</a>
1241
+ <a name='L1176'></a><a href='#L1176'>1176</a>
1242
+ <a name='L1177'></a><a href='#L1177'>1177</a>
1243
+ <a name='L1178'></a><a href='#L1178'>1178</a>
1244
+ <a name='L1179'></a><a href='#L1179'>1179</a>
1245
+ <a name='L1180'></a><a href='#L1180'>1180</a>
1246
+ <a name='L1181'></a><a href='#L1181'>1181</a>
1247
+ <a name='L1182'></a><a href='#L1182'>1182</a>
1248
+ <a name='L1183'></a><a href='#L1183'>1183</a>
1249
+ <a name='L1184'></a><a href='#L1184'>1184</a>
1250
+ <a name='L1185'></a><a href='#L1185'>1185</a>
1251
+ <a name='L1186'></a><a href='#L1186'>1186</a>
1252
+ <a name='L1187'></a><a href='#L1187'>1187</a>
1253
+ <a name='L1188'></a><a href='#L1188'>1188</a>
1254
+ <a name='L1189'></a><a href='#L1189'>1189</a>
1255
+ <a name='L1190'></a><a href='#L1190'>1190</a>
1256
+ <a name='L1191'></a><a href='#L1191'>1191</a>
1257
+ <a name='L1192'></a><a href='#L1192'>1192</a>
1258
+ <a name='L1193'></a><a href='#L1193'>1193</a>
1259
+ <a name='L1194'></a><a href='#L1194'>1194</a>
1260
+ <a name='L1195'></a><a href='#L1195'>1195</a>
1261
+ <a name='L1196'></a><a href='#L1196'>1196</a>
1262
+ <a name='L1197'></a><a href='#L1197'>1197</a>
1263
+ <a name='L1198'></a><a href='#L1198'>1198</a>
1264
+ <a name='L1199'></a><a href='#L1199'>1199</a>
1265
+ <a name='L1200'></a><a href='#L1200'>1200</a>
1266
+ <a name='L1201'></a><a href='#L1201'>1201</a>
1267
+ <a name='L1202'></a><a href='#L1202'>1202</a>
1268
+ <a name='L1203'></a><a href='#L1203'>1203</a>
1269
+ <a name='L1204'></a><a href='#L1204'>1204</a>
1270
+ <a name='L1205'></a><a href='#L1205'>1205</a>
1271
+ <a name='L1206'></a><a href='#L1206'>1206</a>
1272
+ <a name='L1207'></a><a href='#L1207'>1207</a>
1273
+ <a name='L1208'></a><a href='#L1208'>1208</a>
1274
+ <a name='L1209'></a><a href='#L1209'>1209</a>
1275
+ <a name='L1210'></a><a href='#L1210'>1210</a>
1276
+ <a name='L1211'></a><a href='#L1211'>1211</a>
1277
+ <a name='L1212'></a><a href='#L1212'>1212</a>
1278
+ <a name='L1213'></a><a href='#L1213'>1213</a>
1279
+ <a name='L1214'></a><a href='#L1214'>1214</a>
1280
+ <a name='L1215'></a><a href='#L1215'>1215</a>
1281
+ <a name='L1216'></a><a href='#L1216'>1216</a>
1282
+ <a name='L1217'></a><a href='#L1217'>1217</a>
1283
+ <a name='L1218'></a><a href='#L1218'>1218</a>
1284
+ <a name='L1219'></a><a href='#L1219'>1219</a>
1285
+ <a name='L1220'></a><a href='#L1220'>1220</a>
1286
+ <a name='L1221'></a><a href='#L1221'>1221</a>
1287
+ <a name='L1222'></a><a href='#L1222'>1222</a>
1288
+ <a name='L1223'></a><a href='#L1223'>1223</a>
1289
+ <a name='L1224'></a><a href='#L1224'>1224</a>
1290
+ <a name='L1225'></a><a href='#L1225'>1225</a>
1291
+ <a name='L1226'></a><a href='#L1226'>1226</a>
1292
+ <a name='L1227'></a><a href='#L1227'>1227</a>
1293
+ <a name='L1228'></a><a href='#L1228'>1228</a>
1294
+ <a name='L1229'></a><a href='#L1229'>1229</a>
1295
+ <a name='L1230'></a><a href='#L1230'>1230</a>
1296
+ <a name='L1231'></a><a href='#L1231'>1231</a>
1297
+ <a name='L1232'></a><a href='#L1232'>1232</a>
1298
+ <a name='L1233'></a><a href='#L1233'>1233</a>
1299
+ <a name='L1234'></a><a href='#L1234'>1234</a>
1300
+ <a name='L1235'></a><a href='#L1235'>1235</a>
1301
+ <a name='L1236'></a><a href='#L1236'>1236</a>
1302
+ <a name='L1237'></a><a href='#L1237'>1237</a>
1303
+ <a name='L1238'></a><a href='#L1238'>1238</a>
1304
+ <a name='L1239'></a><a href='#L1239'>1239</a>
1305
+ <a name='L1240'></a><a href='#L1240'>1240</a>
1306
+ <a name='L1241'></a><a href='#L1241'>1241</a>
1307
+ <a name='L1242'></a><a href='#L1242'>1242</a>
1308
+ <a name='L1243'></a><a href='#L1243'>1243</a>
1309
+ <a name='L1244'></a><a href='#L1244'>1244</a>
1310
+ <a name='L1245'></a><a href='#L1245'>1245</a>
1311
+ <a name='L1246'></a><a href='#L1246'>1246</a>
1312
+ <a name='L1247'></a><a href='#L1247'>1247</a>
1313
+ <a name='L1248'></a><a href='#L1248'>1248</a>
1314
+ <a name='L1249'></a><a href='#L1249'>1249</a>
1315
+ <a name='L1250'></a><a href='#L1250'>1250</a>
1316
+ <a name='L1251'></a><a href='#L1251'>1251</a>
1317
+ <a name='L1252'></a><a href='#L1252'>1252</a>
1318
+ <a name='L1253'></a><a href='#L1253'>1253</a>
1319
+ <a name='L1254'></a><a href='#L1254'>1254</a>
1320
+ <a name='L1255'></a><a href='#L1255'>1255</a>
1321
+ <a name='L1256'></a><a href='#L1256'>1256</a>
1322
+ <a name='L1257'></a><a href='#L1257'>1257</a>
1323
+ <a name='L1258'></a><a href='#L1258'>1258</a>
1324
+ <a name='L1259'></a><a href='#L1259'>1259</a>
1325
+ <a name='L1260'></a><a href='#L1260'>1260</a>
1326
+ <a name='L1261'></a><a href='#L1261'>1261</a>
1327
+ <a name='L1262'></a><a href='#L1262'>1262</a>
1328
+ <a name='L1263'></a><a href='#L1263'>1263</a>
1329
+ <a name='L1264'></a><a href='#L1264'>1264</a>
1330
+ <a name='L1265'></a><a href='#L1265'>1265</a>
1331
+ <a name='L1266'></a><a href='#L1266'>1266</a>
1332
+ <a name='L1267'></a><a href='#L1267'>1267</a>
1333
+ <a name='L1268'></a><a href='#L1268'>1268</a>
1334
+ <a name='L1269'></a><a href='#L1269'>1269</a>
1335
+ <a name='L1270'></a><a href='#L1270'>1270</a>
1336
+ <a name='L1271'></a><a href='#L1271'>1271</a>
1337
+ <a name='L1272'></a><a href='#L1272'>1272</a>
1338
+ <a name='L1273'></a><a href='#L1273'>1273</a>
1339
+ <a name='L1274'></a><a href='#L1274'>1274</a>
1340
+ <a name='L1275'></a><a href='#L1275'>1275</a>
1341
+ <a name='L1276'></a><a href='#L1276'>1276</a>
1342
+ <a name='L1277'></a><a href='#L1277'>1277</a>
1343
+ <a name='L1278'></a><a href='#L1278'>1278</a>
1344
+ <a name='L1279'></a><a href='#L1279'>1279</a>
1345
+ <a name='L1280'></a><a href='#L1280'>1280</a>
1346
+ <a name='L1281'></a><a href='#L1281'>1281</a>
1347
+ <a name='L1282'></a><a href='#L1282'>1282</a>
1348
+ <a name='L1283'></a><a href='#L1283'>1283</a>
1349
+ <a name='L1284'></a><a href='#L1284'>1284</a>
1350
+ <a name='L1285'></a><a href='#L1285'>1285</a>
1351
+ <a name='L1286'></a><a href='#L1286'>1286</a>
1352
+ <a name='L1287'></a><a href='#L1287'>1287</a>
1353
+ <a name='L1288'></a><a href='#L1288'>1288</a>
1354
+ <a name='L1289'></a><a href='#L1289'>1289</a>
1355
+ <a name='L1290'></a><a href='#L1290'>1290</a>
1356
+ <a name='L1291'></a><a href='#L1291'>1291</a>
1357
+ <a name='L1292'></a><a href='#L1292'>1292</a>
1358
+ <a name='L1293'></a><a href='#L1293'>1293</a>
1359
+ <a name='L1294'></a><a href='#L1294'>1294</a>
1360
+ <a name='L1295'></a><a href='#L1295'>1295</a>
1361
+ <a name='L1296'></a><a href='#L1296'>1296</a>
1362
+ <a name='L1297'></a><a href='#L1297'>1297</a>
1363
+ <a name='L1298'></a><a href='#L1298'>1298</a>
1364
+ <a name='L1299'></a><a href='#L1299'>1299</a>
1365
+ <a name='L1300'></a><a href='#L1300'>1300</a>
1366
+ <a name='L1301'></a><a href='#L1301'>1301</a>
1367
+ <a name='L1302'></a><a href='#L1302'>1302</a>
1368
+ <a name='L1303'></a><a href='#L1303'>1303</a>
1369
+ <a name='L1304'></a><a href='#L1304'>1304</a>
1370
+ <a name='L1305'></a><a href='#L1305'>1305</a>
1371
+ <a name='L1306'></a><a href='#L1306'>1306</a>
1372
+ <a name='L1307'></a><a href='#L1307'>1307</a>
1373
+ <a name='L1308'></a><a href='#L1308'>1308</a>
1374
+ <a name='L1309'></a><a href='#L1309'>1309</a>
1375
+ <a name='L1310'></a><a href='#L1310'>1310</a>
1376
+ <a name='L1311'></a><a href='#L1311'>1311</a>
1377
+ <a name='L1312'></a><a href='#L1312'>1312</a>
1378
+ <a name='L1313'></a><a href='#L1313'>1313</a>
1379
+ <a name='L1314'></a><a href='#L1314'>1314</a>
1380
+ <a name='L1315'></a><a href='#L1315'>1315</a>
1381
+ <a name='L1316'></a><a href='#L1316'>1316</a>
1382
+ <a name='L1317'></a><a href='#L1317'>1317</a>
1383
+ <a name='L1318'></a><a href='#L1318'>1318</a>
1384
+ <a name='L1319'></a><a href='#L1319'>1319</a>
1385
+ <a name='L1320'></a><a href='#L1320'>1320</a>
1386
+ <a name='L1321'></a><a href='#L1321'>1321</a>
1387
+ <a name='L1322'></a><a href='#L1322'>1322</a>
1388
+ <a name='L1323'></a><a href='#L1323'>1323</a>
1389
+ <a name='L1324'></a><a href='#L1324'>1324</a>
1390
+ <a name='L1325'></a><a href='#L1325'>1325</a>
1391
+ <a name='L1326'></a><a href='#L1326'>1326</a>
1392
+ <a name='L1327'></a><a href='#L1327'>1327</a>
1393
+ <a name='L1328'></a><a href='#L1328'>1328</a>
1394
+ <a name='L1329'></a><a href='#L1329'>1329</a>
1395
+ <a name='L1330'></a><a href='#L1330'>1330</a>
1396
+ <a name='L1331'></a><a href='#L1331'>1331</a>
1397
+ <a name='L1332'></a><a href='#L1332'>1332</a>
1398
+ <a name='L1333'></a><a href='#L1333'>1333</a>
1399
+ <a name='L1334'></a><a href='#L1334'>1334</a>
1400
+ <a name='L1335'></a><a href='#L1335'>1335</a>
1401
+ <a name='L1336'></a><a href='#L1336'>1336</a>
1402
+ <a name='L1337'></a><a href='#L1337'>1337</a>
1403
+ <a name='L1338'></a><a href='#L1338'>1338</a>
1404
+ <a name='L1339'></a><a href='#L1339'>1339</a>
1405
+ <a name='L1340'></a><a href='#L1340'>1340</a>
1406
+ <a name='L1341'></a><a href='#L1341'>1341</a>
1407
+ <a name='L1342'></a><a href='#L1342'>1342</a>
1408
+ <a name='L1343'></a><a href='#L1343'>1343</a>
1409
+ <a name='L1344'></a><a href='#L1344'>1344</a>
1410
+ <a name='L1345'></a><a href='#L1345'>1345</a>
1411
+ <a name='L1346'></a><a href='#L1346'>1346</a>
1412
+ <a name='L1347'></a><a href='#L1347'>1347</a>
1413
+ <a name='L1348'></a><a href='#L1348'>1348</a>
1414
+ <a name='L1349'></a><a href='#L1349'>1349</a>
1415
+ <a name='L1350'></a><a href='#L1350'>1350</a>
1416
+ <a name='L1351'></a><a href='#L1351'>1351</a>
1417
+ <a name='L1352'></a><a href='#L1352'>1352</a>
1418
+ <a name='L1353'></a><a href='#L1353'>1353</a>
1419
+ <a name='L1354'></a><a href='#L1354'>1354</a>
1420
+ <a name='L1355'></a><a href='#L1355'>1355</a>
1421
+ <a name='L1356'></a><a href='#L1356'>1356</a>
1422
+ <a name='L1357'></a><a href='#L1357'>1357</a>
1423
+ <a name='L1358'></a><a href='#L1358'>1358</a>
1424
+ <a name='L1359'></a><a href='#L1359'>1359</a>
1425
+ <a name='L1360'></a><a href='#L1360'>1360</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
1426
+ <span class="cline-any cline-neutral">&nbsp;</span>
1427
+ <span class="cline-any cline-neutral">&nbsp;</span>
1428
+ <span class="cline-any cline-neutral">&nbsp;</span>
1429
+ <span class="cline-any cline-neutral">&nbsp;</span>
1430
+ <span class="cline-any cline-neutral">&nbsp;</span>
1431
+ <span class="cline-any cline-neutral">&nbsp;</span>
1432
+ <span class="cline-any cline-neutral">&nbsp;</span>
1433
+ <span class="cline-any cline-neutral">&nbsp;</span>
1434
+ <span class="cline-any cline-neutral">&nbsp;</span>
1435
+ <span class="cline-any cline-neutral">&nbsp;</span>
1436
+ <span class="cline-any cline-neutral">&nbsp;</span>
1437
+ <span class="cline-any cline-neutral">&nbsp;</span>
1438
+ <span class="cline-any cline-neutral">&nbsp;</span>
1439
+ <span class="cline-any cline-neutral">&nbsp;</span>
1440
+ <span class="cline-any cline-neutral">&nbsp;</span>
1441
+ <span class="cline-any cline-neutral">&nbsp;</span>
1442
+ <span class="cline-any cline-yes">3x</span>
1443
+ <span class="cline-any cline-yes">3x</span>
1444
+ <span class="cline-any cline-yes">3x</span>
1445
+ <span class="cline-any cline-yes">3x</span>
1446
+ <span class="cline-any cline-yes">3x</span>
1447
+ <span class="cline-any cline-yes">3x</span>
1448
+ <span class="cline-any cline-yes">3x</span>
1449
+ <span class="cline-any cline-yes">3x</span>
1450
+ <span class="cline-any cline-yes">3x</span>
1451
+ <span class="cline-any cline-yes">3x</span>
1452
+ <span class="cline-any cline-yes">3x</span>
1453
+ <span class="cline-any cline-yes">3x</span>
1454
+ <span class="cline-any cline-yes">3x</span>
1455
+ <span class="cline-any cline-yes">3x</span>
1456
+ <span class="cline-any cline-yes">3x</span>
1457
+ <span class="cline-any cline-yes">3x</span>
1458
+ <span class="cline-any cline-yes">3x</span>
1459
+ <span class="cline-any cline-yes">3x</span>
1460
+ <span class="cline-any cline-yes">3x</span>
1461
+ <span class="cline-any cline-yes">3x</span>
1462
+ <span class="cline-any cline-yes">3x</span>
1463
+ <span class="cline-any cline-yes">3x</span>
1464
+ <span class="cline-any cline-yes">3x</span>
1465
+ <span class="cline-any cline-yes">3x</span>
1466
+ <span class="cline-any cline-yes">3x</span>
1467
+ <span class="cline-any cline-yes">3x</span>
1468
+ <span class="cline-any cline-yes">3x</span>
1469
+ <span class="cline-any cline-yes">3x</span>
1470
+ <span class="cline-any cline-yes">3x</span>
1471
+ <span class="cline-any cline-yes">3x</span>
1472
+ <span class="cline-any cline-yes">3x</span>
1473
+ <span class="cline-any cline-yes">3x</span>
1474
+ <span class="cline-any cline-yes">3x</span>
1475
+ <span class="cline-any cline-yes">3x</span>
1476
+ <span class="cline-any cline-yes">3x</span>
1477
+ <span class="cline-any cline-yes">3x</span>
1478
+ <span class="cline-any cline-yes">3x</span>
1479
+ <span class="cline-any cline-yes">3x</span>
1480
+ <span class="cline-any cline-yes">3x</span>
1481
+ <span class="cline-any cline-yes">3x</span>
1482
+ <span class="cline-any cline-yes">3x</span>
1483
+ <span class="cline-any cline-yes">3x</span>
1484
+ <span class="cline-any cline-yes">3x</span>
1485
+ <span class="cline-any cline-yes">3x</span>
1486
+ <span class="cline-any cline-yes">3x</span>
1487
+ <span class="cline-any cline-yes">3x</span>
1488
+ <span class="cline-any cline-yes">3x</span>
1489
+ <span class="cline-any cline-yes">3x</span>
1490
+ <span class="cline-any cline-yes">3x</span>
1491
+ <span class="cline-any cline-yes">3x</span>
1492
+ <span class="cline-any cline-yes">3x</span>
1493
+ <span class="cline-any cline-yes">3x</span>
1494
+ <span class="cline-any cline-yes">3x</span>
1495
+ <span class="cline-any cline-yes">3x</span>
1496
+ <span class="cline-any cline-yes">3x</span>
1497
+ <span class="cline-any cline-yes">3x</span>
1498
+ <span class="cline-any cline-yes">3x</span>
1499
+ <span class="cline-any cline-yes">3x</span>
1500
+ <span class="cline-any cline-yes">3x</span>
1501
+ <span class="cline-any cline-yes">3x</span>
1502
+ <span class="cline-any cline-yes">3x</span>
1503
+ <span class="cline-any cline-yes">3x</span>
1504
+ <span class="cline-any cline-yes">3x</span>
1505
+ <span class="cline-any cline-yes">3x</span>
1506
+ <span class="cline-any cline-yes">3x</span>
1507
+ <span class="cline-any cline-yes">3x</span>
1508
+ <span class="cline-any cline-yes">3x</span>
1509
+ <span class="cline-any cline-yes">3x</span>
1510
+ <span class="cline-any cline-yes">3x</span>
1511
+ <span class="cline-any cline-neutral">&nbsp;</span>
1512
+ <span class="cline-any cline-yes">506x</span>
1513
+ <span class="cline-any cline-yes">228x</span>
1514
+ <span class="cline-any cline-yes">228x</span>
1515
+ <span class="cline-any cline-yes">228x</span>
1516
+ <span class="cline-any cline-no">&nbsp;</span>
1517
+ <span class="cline-any cline-neutral">&nbsp;</span>
1518
+ <span class="cline-any cline-yes">228x</span>
1519
+ <span class="cline-any cline-no">&nbsp;</span>
1520
+ <span class="cline-any cline-no">&nbsp;</span>
1521
+ <span class="cline-any cline-neutral">&nbsp;</span>
1522
+ <span class="cline-any cline-yes">228x</span>
1523
+ <span class="cline-any cline-neutral">&nbsp;</span>
1524
+ <span class="cline-any cline-yes">278x</span>
1525
+ <span class="cline-any cline-yes">72x</span>
1526
+ <span class="cline-any cline-neutral">&nbsp;</span>
1527
+ <span class="cline-any cline-yes">206x</span>
1528
+ <span class="cline-any cline-yes">149x</span>
1529
+ <span class="cline-any cline-yes">57x</span>
1530
+ <span class="cline-any cline-no">&nbsp;</span>
1531
+ <span class="cline-any cline-yes">57x</span>
1532
+ <span class="cline-any cline-no">&nbsp;</span>
1533
+ <span class="cline-any cline-yes">57x</span>
1534
+ <span class="cline-any cline-yes">37x</span>
1535
+ <span class="cline-any cline-neutral">&nbsp;</span>
1536
+ <span class="cline-any cline-neutral">&nbsp;</span>
1537
+ <span class="cline-any cline-yes">14x</span>
1538
+ <span class="cline-any cline-yes">14x</span>
1539
+ <span class="cline-any cline-neutral">&nbsp;</span>
1540
+ <span class="cline-any cline-yes">43x</span>
1541
+ <span class="cline-any cline-yes">19x</span>
1542
+ <span class="cline-any cline-yes">19x</span>
1543
+ <span class="cline-any cline-yes">19x</span>
1544
+ <span class="cline-any cline-neutral">&nbsp;</span>
1545
+ <span class="cline-any cline-yes">19x</span>
1546
+ <span class="cline-any cline-yes">7x</span>
1547
+ <span class="cline-any cline-yes">2x</span>
1548
+ <span class="cline-any cline-yes">2x</span>
1549
+ <span class="cline-any cline-neutral">&nbsp;</span>
1550
+ <span class="cline-any cline-yes">7x</span>
1551
+ <span class="cline-any cline-neutral">&nbsp;</span>
1552
+ <span class="cline-any cline-neutral">&nbsp;</span>
1553
+ <span class="cline-any cline-yes">12x</span>
1554
+ <span class="cline-any cline-yes">12x</span>
1555
+ <span class="cline-any cline-yes">3x</span>
1556
+ <span class="cline-any cline-yes">3x</span>
1557
+ <span class="cline-any cline-neutral">&nbsp;</span>
1558
+ <span class="cline-any cline-yes">12x</span>
1559
+ <span class="cline-any cline-neutral">&nbsp;</span>
1560
+ <span class="cline-any cline-no">&nbsp;</span>
1561
+ <span class="cline-any cline-neutral">&nbsp;</span>
1562
+ <span class="cline-any cline-yes">24x</span>
1563
+ <span class="cline-any cline-no">&nbsp;</span>
1564
+ <span class="cline-any cline-no">&nbsp;</span>
1565
+ <span class="cline-any cline-neutral">&nbsp;</span>
1566
+ <span class="cline-any cline-yes">24x</span>
1567
+ <span class="cline-any cline-yes">16x</span>
1568
+ <span class="cline-any cline-yes">16x</span>
1569
+ <span class="cline-any cline-neutral">&nbsp;</span>
1570
+ <span class="cline-any cline-neutral">&nbsp;</span>
1571
+ <span class="cline-any cline-neutral">&nbsp;</span>
1572
+ <span class="cline-any cline-yes">16x</span>
1573
+ <span class="cline-any cline-yes">24x</span>
1574
+ <span class="cline-any cline-yes">13x</span>
1575
+ <span class="cline-any cline-neutral">&nbsp;</span>
1576
+ <span class="cline-any cline-neutral">&nbsp;</span>
1577
+ <span class="cline-any cline-yes">4x</span>
1578
+ <span class="cline-any cline-yes">4x</span>
1579
+ <span class="cline-any cline-no">&nbsp;</span>
1580
+ <span class="cline-any cline-yes">4x</span>
1581
+ <span class="cline-any cline-neutral">&nbsp;</span>
1582
+ <span class="cline-any cline-neutral">&nbsp;</span>
1583
+ <span class="cline-any cline-yes">8x</span>
1584
+ <span class="cline-any cline-yes">8x</span>
1585
+ <span class="cline-any cline-yes">8x</span>
1586
+ <span class="cline-any cline-yes">6x</span>
1587
+ <span class="cline-any cline-yes">2x</span>
1588
+ <span class="cline-any cline-no">&nbsp;</span>
1589
+ <span class="cline-any cline-yes">6x</span>
1590
+ <span class="cline-any cline-no">&nbsp;</span>
1591
+ <span class="cline-any cline-yes">2x</span>
1592
+ <span class="cline-any cline-neutral">&nbsp;</span>
1593
+ <span class="cline-any cline-no">&nbsp;</span>
1594
+ <span class="cline-any cline-neutral">&nbsp;</span>
1595
+ <span class="cline-any cline-neutral">&nbsp;</span>
1596
+ <span class="cline-any cline-yes">72x</span>
1597
+ <span class="cline-any cline-no">&nbsp;</span>
1598
+ <span class="cline-any cline-yes">72x</span>
1599
+ <span class="cline-any cline-yes">72x</span>
1600
+ <span class="cline-any cline-yes">72x</span>
1601
+ <span class="cline-any cline-no">&nbsp;</span>
1602
+ <span class="cline-any cline-no">&nbsp;</span>
1603
+ <span class="cline-any cline-no">&nbsp;</span>
1604
+ <span class="cline-any cline-no">&nbsp;</span>
1605
+ <span class="cline-any cline-no">&nbsp;</span>
1606
+ <span class="cline-any cline-neutral">&nbsp;</span>
1607
+ <span class="cline-any cline-neutral">&nbsp;</span>
1608
+ <span class="cline-any cline-yes">17x</span>
1609
+ <span class="cline-any cline-no">&nbsp;</span>
1610
+ <span class="cline-any cline-no">&nbsp;</span>
1611
+ <span class="cline-any cline-no">&nbsp;</span>
1612
+ <span class="cline-any cline-neutral">&nbsp;</span>
1613
+ <span class="cline-any cline-yes">17x</span>
1614
+ <span class="cline-any cline-yes">17x</span>
1615
+ <span class="cline-any cline-yes">17x</span>
1616
+ <span class="cline-any cline-no">&nbsp;</span>
1617
+ <span class="cline-any cline-no">&nbsp;</span>
1618
+ <span class="cline-any cline-no">&nbsp;</span>
1619
+ <span class="cline-any cline-neutral">&nbsp;</span>
1620
+ <span class="cline-any cline-yes">17x</span>
1621
+ <span class="cline-any cline-yes">17x</span>
1622
+ <span class="cline-any cline-neutral">&nbsp;</span>
1623
+ <span class="cline-any cline-neutral">&nbsp;</span>
1624
+ <span class="cline-any cline-yes">7x</span>
1625
+ <span class="cline-any cline-neutral">&nbsp;</span>
1626
+ <span class="cline-any cline-neutral">&nbsp;</span>
1627
+ <span class="cline-any cline-yes">1x</span>
1628
+ <span class="cline-any cline-neutral">&nbsp;</span>
1629
+ <span class="cline-any cline-neutral">&nbsp;</span>
1630
+ <span class="cline-any cline-yes">2x</span>
1631
+ <span class="cline-any cline-no">&nbsp;</span>
1632
+ <span class="cline-any cline-no">&nbsp;</span>
1633
+ <span class="cline-any cline-no">&nbsp;</span>
1634
+ <span class="cline-any cline-neutral">&nbsp;</span>
1635
+ <span class="cline-any cline-yes">2x</span>
1636
+ <span class="cline-any cline-neutral">&nbsp;</span>
1637
+ <span class="cline-any cline-neutral">&nbsp;</span>
1638
+ <span class="cline-any cline-yes">1x</span>
1639
+ <span class="cline-any cline-no">&nbsp;</span>
1640
+ <span class="cline-any cline-no">&nbsp;</span>
1641
+ <span class="cline-any cline-no">&nbsp;</span>
1642
+ <span class="cline-any cline-neutral">&nbsp;</span>
1643
+ <span class="cline-any cline-yes">1x</span>
1644
+ <span class="cline-any cline-yes">1x</span>
1645
+ <span class="cline-any cline-yes">1x</span>
1646
+ <span class="cline-any cline-yes">1x</span>
1647
+ <span class="cline-any cline-neutral">&nbsp;</span>
1648
+ <span class="cline-any cline-no">&nbsp;</span>
1649
+ <span class="cline-any cline-neutral">&nbsp;</span>
1650
+ <span class="cline-any cline-neutral">&nbsp;</span>
1651
+ <span class="cline-any cline-no">&nbsp;</span>
1652
+ <span class="cline-any cline-no">&nbsp;</span>
1653
+ <span class="cline-any cline-no">&nbsp;</span>
1654
+ <span class="cline-any cline-no">&nbsp;</span>
1655
+ <span class="cline-any cline-neutral">&nbsp;</span>
1656
+ <span class="cline-any cline-no">&nbsp;</span>
1657
+ <span class="cline-any cline-no">&nbsp;</span>
1658
+ <span class="cline-any cline-no">&nbsp;</span>
1659
+ <span class="cline-any cline-no">&nbsp;</span>
1660
+ <span class="cline-any cline-neutral">&nbsp;</span>
1661
+ <span class="cline-any cline-no">&nbsp;</span>
1662
+ <span class="cline-any cline-neutral">&nbsp;</span>
1663
+ <span class="cline-any cline-neutral">&nbsp;</span>
1664
+ <span class="cline-any cline-yes">1x</span>
1665
+ <span class="cline-any cline-no">&nbsp;</span>
1666
+ <span class="cline-any cline-no">&nbsp;</span>
1667
+ <span class="cline-any cline-no">&nbsp;</span>
1668
+ <span class="cline-any cline-neutral">&nbsp;</span>
1669
+ <span class="cline-any cline-yes">1x</span>
1670
+ <span class="cline-any cline-yes">1x</span>
1671
+ <span class="cline-any cline-yes">1x</span>
1672
+ <span class="cline-any cline-yes">1x</span>
1673
+ <span class="cline-any cline-neutral">&nbsp;</span>
1674
+ <span class="cline-any cline-no">&nbsp;</span>
1675
+ <span class="cline-any cline-neutral">&nbsp;</span>
1676
+ <span class="cline-any cline-neutral">&nbsp;</span>
1677
+ <span class="cline-any cline-yes">1x</span>
1678
+ <span class="cline-any cline-no">&nbsp;</span>
1679
+ <span class="cline-any cline-no">&nbsp;</span>
1680
+ <span class="cline-any cline-no">&nbsp;</span>
1681
+ <span class="cline-any cline-neutral">&nbsp;</span>
1682
+ <span class="cline-any cline-yes">1x</span>
1683
+ <span class="cline-any cline-yes">1x</span>
1684
+ <span class="cline-any cline-yes">1x</span>
1685
+ <span class="cline-any cline-yes">1x</span>
1686
+ <span class="cline-any cline-neutral">&nbsp;</span>
1687
+ <span class="cline-any cline-no">&nbsp;</span>
1688
+ <span class="cline-any cline-neutral">&nbsp;</span>
1689
+ <span class="cline-any cline-neutral">&nbsp;</span>
1690
+ <span class="cline-any cline-yes">2x</span>
1691
+ <span class="cline-any cline-no">&nbsp;</span>
1692
+ <span class="cline-any cline-no">&nbsp;</span>
1693
+ <span class="cline-any cline-no">&nbsp;</span>
1694
+ <span class="cline-any cline-neutral">&nbsp;</span>
1695
+ <span class="cline-any cline-yes">2x</span>
1696
+ <span class="cline-any cline-yes">2x</span>
1697
+ <span class="cline-any cline-yes">2x</span>
1698
+ <span class="cline-any cline-yes">2x</span>
1699
+ <span class="cline-any cline-neutral">&nbsp;</span>
1700
+ <span class="cline-any cline-no">&nbsp;</span>
1701
+ <span class="cline-any cline-neutral">&nbsp;</span>
1702
+ <span class="cline-any cline-neutral">&nbsp;</span>
1703
+ <span class="cline-any cline-yes">2x</span>
1704
+ <span class="cline-any cline-no">&nbsp;</span>
1705
+ <span class="cline-any cline-no">&nbsp;</span>
1706
+ <span class="cline-any cline-no">&nbsp;</span>
1707
+ <span class="cline-any cline-neutral">&nbsp;</span>
1708
+ <span class="cline-any cline-yes">2x</span>
1709
+ <span class="cline-any cline-yes">2x</span>
1710
+ <span class="cline-any cline-yes">2x</span>
1711
+ <span class="cline-any cline-yes">2x</span>
1712
+ <span class="cline-any cline-neutral">&nbsp;</span>
1713
+ <span class="cline-any cline-no">&nbsp;</span>
1714
+ <span class="cline-any cline-no">&nbsp;</span>
1715
+ <span class="cline-any cline-no">&nbsp;</span>
1716
+ <span class="cline-any cline-no">&nbsp;</span>
1717
+ <span class="cline-any cline-neutral">&nbsp;</span>
1718
+ <span class="cline-any cline-no">&nbsp;</span>
1719
+ <span class="cline-any cline-neutral">&nbsp;</span>
1720
+ <span class="cline-any cline-neutral">&nbsp;</span>
1721
+ <span class="cline-any cline-yes">1x</span>
1722
+ <span class="cline-any cline-no">&nbsp;</span>
1723
+ <span class="cline-any cline-no">&nbsp;</span>
1724
+ <span class="cline-any cline-no">&nbsp;</span>
1725
+ <span class="cline-any cline-neutral">&nbsp;</span>
1726
+ <span class="cline-any cline-yes">1x</span>
1727
+ <span class="cline-any cline-yes">1x</span>
1728
+ <span class="cline-any cline-yes">1x</span>
1729
+ <span class="cline-any cline-yes">1x</span>
1730
+ <span class="cline-any cline-neutral">&nbsp;</span>
1731
+ <span class="cline-any cline-no">&nbsp;</span>
1732
+ <span class="cline-any cline-no">&nbsp;</span>
1733
+ <span class="cline-any cline-no">&nbsp;</span>
1734
+ <span class="cline-any cline-no">&nbsp;</span>
1735
+ <span class="cline-any cline-neutral">&nbsp;</span>
1736
+ <span class="cline-any cline-no">&nbsp;</span>
1737
+ <span class="cline-any cline-neutral">&nbsp;</span>
1738
+ <span class="cline-any cline-neutral">&nbsp;</span>
1739
+ <span class="cline-any cline-yes">1x</span>
1740
+ <span class="cline-any cline-yes">1x</span>
1741
+ <span class="cline-any cline-no">&nbsp;</span>
1742
+ <span class="cline-any cline-no">&nbsp;</span>
1743
+ <span class="cline-any cline-no">&nbsp;</span>
1744
+ <span class="cline-any cline-neutral">&nbsp;</span>
1745
+ <span class="cline-any cline-yes">1x</span>
1746
+ <span class="cline-any cline-yes">4x</span>
1747
+ <span class="cline-any cline-yes">1x</span>
1748
+ <span class="cline-any cline-yes">1x</span>
1749
+ <span class="cline-any cline-yes">1x</span>
1750
+ <span class="cline-any cline-neutral">&nbsp;</span>
1751
+ <span class="cline-any cline-neutral">&nbsp;</span>
1752
+ <span class="cline-any cline-yes">1x</span>
1753
+ <span class="cline-any cline-neutral">&nbsp;</span>
1754
+ <span class="cline-any cline-neutral">&nbsp;</span>
1755
+ <span class="cline-any cline-yes">1x</span>
1756
+ <span class="cline-any cline-yes">1x</span>
1757
+ <span class="cline-any cline-no">&nbsp;</span>
1758
+ <span class="cline-any cline-no">&nbsp;</span>
1759
+ <span class="cline-any cline-no">&nbsp;</span>
1760
+ <span class="cline-any cline-neutral">&nbsp;</span>
1761
+ <span class="cline-any cline-yes">1x</span>
1762
+ <span class="cline-any cline-yes">2x</span>
1763
+ <span class="cline-any cline-no">&nbsp;</span>
1764
+ <span class="cline-any cline-no">&nbsp;</span>
1765
+ <span class="cline-any cline-no">&nbsp;</span>
1766
+ <span class="cline-any cline-neutral">&nbsp;</span>
1767
+ <span class="cline-any cline-neutral">&nbsp;</span>
1768
+ <span class="cline-any cline-yes">1x</span>
1769
+ <span class="cline-any cline-neutral">&nbsp;</span>
1770
+ <span class="cline-any cline-neutral">&nbsp;</span>
1771
+ <span class="cline-any cline-yes">1x</span>
1772
+ <span class="cline-any cline-yes">1x</span>
1773
+ <span class="cline-any cline-no">&nbsp;</span>
1774
+ <span class="cline-any cline-no">&nbsp;</span>
1775
+ <span class="cline-any cline-no">&nbsp;</span>
1776
+ <span class="cline-any cline-neutral">&nbsp;</span>
1777
+ <span class="cline-any cline-yes">1x</span>
1778
+ <span class="cline-any cline-yes">2x</span>
1779
+ <span class="cline-any cline-yes">1x</span>
1780
+ <span class="cline-any cline-yes">1x</span>
1781
+ <span class="cline-any cline-yes">1x</span>
1782
+ <span class="cline-any cline-neutral">&nbsp;</span>
1783
+ <span class="cline-any cline-neutral">&nbsp;</span>
1784
+ <span class="cline-any cline-yes">1x</span>
1785
+ <span class="cline-any cline-neutral">&nbsp;</span>
1786
+ <span class="cline-any cline-neutral">&nbsp;</span>
1787
+ <span class="cline-any cline-yes">2x</span>
1788
+ <span class="cline-any cline-no">&nbsp;</span>
1789
+ <span class="cline-any cline-no">&nbsp;</span>
1790
+ <span class="cline-any cline-no">&nbsp;</span>
1791
+ <span class="cline-any cline-neutral">&nbsp;</span>
1792
+ <span class="cline-any cline-yes">2x</span>
1793
+ <span class="cline-any cline-yes">1x</span>
1794
+ <span class="cline-any cline-yes">1x</span>
1795
+ <span class="cline-any cline-yes">1x</span>
1796
+ <span class="cline-any cline-neutral">&nbsp;</span>
1797
+ <span class="cline-any cline-yes">1x</span>
1798
+ <span class="cline-any cline-no">&nbsp;</span>
1799
+ <span class="cline-any cline-no">&nbsp;</span>
1800
+ <span class="cline-any cline-no">&nbsp;</span>
1801
+ <span class="cline-any cline-neutral">&nbsp;</span>
1802
+ <span class="cline-any cline-yes">1x</span>
1803
+ <span class="cline-any cline-neutral">&nbsp;</span>
1804
+ <span class="cline-any cline-neutral">&nbsp;</span>
1805
+ <span class="cline-any cline-yes">3x</span>
1806
+ <span class="cline-any cline-no">&nbsp;</span>
1807
+ <span class="cline-any cline-no">&nbsp;</span>
1808
+ <span class="cline-any cline-no">&nbsp;</span>
1809
+ <span class="cline-any cline-neutral">&nbsp;</span>
1810
+ <span class="cline-any cline-yes">3x</span>
1811
+ <span class="cline-any cline-yes">3x</span>
1812
+ <span class="cline-any cline-yes">6x</span>
1813
+ <span class="cline-any cline-yes">3x</span>
1814
+ <span class="cline-any cline-yes">3x</span>
1815
+ <span class="cline-any cline-yes">3x</span>
1816
+ <span class="cline-any cline-neutral">&nbsp;</span>
1817
+ <span class="cline-any cline-neutral">&nbsp;</span>
1818
+ <span class="cline-any cline-yes">3x</span>
1819
+ <span class="cline-any cline-neutral">&nbsp;</span>
1820
+ <span class="cline-any cline-neutral">&nbsp;</span>
1821
+ <span class="cline-any cline-yes">1x</span>
1822
+ <span class="cline-any cline-no">&nbsp;</span>
1823
+ <span class="cline-any cline-no">&nbsp;</span>
1824
+ <span class="cline-any cline-no">&nbsp;</span>
1825
+ <span class="cline-any cline-neutral">&nbsp;</span>
1826
+ <span class="cline-any cline-yes">1x</span>
1827
+ <span class="cline-any cline-yes">1x</span>
1828
+ <span class="cline-any cline-yes">1x</span>
1829
+ <span class="cline-any cline-yes">1x</span>
1830
+ <span class="cline-any cline-neutral">&nbsp;</span>
1831
+ <span class="cline-any cline-no">&nbsp;</span>
1832
+ <span class="cline-any cline-neutral">&nbsp;</span>
1833
+ <span class="cline-any cline-neutral">&nbsp;</span>
1834
+ <span class="cline-any cline-yes">1x</span>
1835
+ <span class="cline-any cline-no">&nbsp;</span>
1836
+ <span class="cline-any cline-no">&nbsp;</span>
1837
+ <span class="cline-any cline-no">&nbsp;</span>
1838
+ <span class="cline-any cline-neutral">&nbsp;</span>
1839
+ <span class="cline-any cline-yes">1x</span>
1840
+ <span class="cline-any cline-yes">1x</span>
1841
+ <span class="cline-any cline-yes">1x</span>
1842
+ <span class="cline-any cline-yes">1x</span>
1843
+ <span class="cline-any cline-neutral">&nbsp;</span>
1844
+ <span class="cline-any cline-no">&nbsp;</span>
1845
+ <span class="cline-any cline-neutral">&nbsp;</span>
1846
+ <span class="cline-any cline-neutral">&nbsp;</span>
1847
+ <span class="cline-any cline-yes">1x</span>
1848
+ <span class="cline-any cline-no">&nbsp;</span>
1849
+ <span class="cline-any cline-no">&nbsp;</span>
1850
+ <span class="cline-any cline-no">&nbsp;</span>
1851
+ <span class="cline-any cline-neutral">&nbsp;</span>
1852
+ <span class="cline-any cline-yes">1x</span>
1853
+ <span class="cline-any cline-yes">1x</span>
1854
+ <span class="cline-any cline-yes">1x</span>
1855
+ <span class="cline-any cline-yes">1x</span>
1856
+ <span class="cline-any cline-neutral">&nbsp;</span>
1857
+ <span class="cline-any cline-no">&nbsp;</span>
1858
+ <span class="cline-any cline-neutral">&nbsp;</span>
1859
+ <span class="cline-any cline-neutral">&nbsp;</span>
1860
+ <span class="cline-any cline-yes">1x</span>
1861
+ <span class="cline-any cline-no">&nbsp;</span>
1862
+ <span class="cline-any cline-no">&nbsp;</span>
1863
+ <span class="cline-any cline-no">&nbsp;</span>
1864
+ <span class="cline-any cline-neutral">&nbsp;</span>
1865
+ <span class="cline-any cline-yes">1x</span>
1866
+ <span class="cline-any cline-yes">1x</span>
1867
+ <span class="cline-any cline-yes">1x</span>
1868
+ <span class="cline-any cline-yes">1x</span>
1869
+ <span class="cline-any cline-neutral">&nbsp;</span>
1870
+ <span class="cline-any cline-no">&nbsp;</span>
1871
+ <span class="cline-any cline-no">&nbsp;</span>
1872
+ <span class="cline-any cline-no">&nbsp;</span>
1873
+ <span class="cline-any cline-no">&nbsp;</span>
1874
+ <span class="cline-any cline-neutral">&nbsp;</span>
1875
+ <span class="cline-any cline-no">&nbsp;</span>
1876
+ <span class="cline-any cline-neutral">&nbsp;</span>
1877
+ <span class="cline-any cline-neutral">&nbsp;</span>
1878
+ <span class="cline-any cline-yes">1x</span>
1879
+ <span class="cline-any cline-no">&nbsp;</span>
1880
+ <span class="cline-any cline-no">&nbsp;</span>
1881
+ <span class="cline-any cline-no">&nbsp;</span>
1882
+ <span class="cline-any cline-neutral">&nbsp;</span>
1883
+ <span class="cline-any cline-yes">1x</span>
1884
+ <span class="cline-any cline-yes">1x</span>
1885
+ <span class="cline-any cline-yes">2x</span>
1886
+ <span class="cline-any cline-no">&nbsp;</span>
1887
+ <span class="cline-any cline-no">&nbsp;</span>
1888
+ <span class="cline-any cline-no">&nbsp;</span>
1889
+ <span class="cline-any cline-neutral">&nbsp;</span>
1890
+ <span class="cline-any cline-neutral">&nbsp;</span>
1891
+ <span class="cline-any cline-yes">1x</span>
1892
+ <span class="cline-any cline-neutral">&nbsp;</span>
1893
+ <span class="cline-any cline-neutral">&nbsp;</span>
1894
+ <span class="cline-any cline-yes">3x</span>
1895
+ <span class="cline-any cline-no">&nbsp;</span>
1896
+ <span class="cline-any cline-no">&nbsp;</span>
1897
+ <span class="cline-any cline-no">&nbsp;</span>
1898
+ <span class="cline-any cline-neutral">&nbsp;</span>
1899
+ <span class="cline-any cline-yes">3x</span>
1900
+ <span class="cline-any cline-yes">7x</span>
1901
+ <span class="cline-any cline-no">&nbsp;</span>
1902
+ <span class="cline-any cline-no">&nbsp;</span>
1903
+ <span class="cline-any cline-no">&nbsp;</span>
1904
+ <span class="cline-any cline-neutral">&nbsp;</span>
1905
+ <span class="cline-any cline-neutral">&nbsp;</span>
1906
+ <span class="cline-any cline-yes">3x</span>
1907
+ <span class="cline-any cline-neutral">&nbsp;</span>
1908
+ <span class="cline-any cline-neutral">&nbsp;</span>
1909
+ <span class="cline-any cline-yes">1x</span>
1910
+ <span class="cline-any cline-no">&nbsp;</span>
1911
+ <span class="cline-any cline-no">&nbsp;</span>
1912
+ <span class="cline-any cline-no">&nbsp;</span>
1913
+ <span class="cline-any cline-neutral">&nbsp;</span>
1914
+ <span class="cline-any cline-yes">1x</span>
1915
+ <span class="cline-any cline-yes">2x</span>
1916
+ <span class="cline-any cline-no">&nbsp;</span>
1917
+ <span class="cline-any cline-no">&nbsp;</span>
1918
+ <span class="cline-any cline-no">&nbsp;</span>
1919
+ <span class="cline-any cline-neutral">&nbsp;</span>
1920
+ <span class="cline-any cline-neutral">&nbsp;</span>
1921
+ <span class="cline-any cline-yes">1x</span>
1922
+ <span class="cline-any cline-neutral">&nbsp;</span>
1923
+ <span class="cline-any cline-neutral">&nbsp;</span>
1924
+ <span class="cline-any cline-yes">1x</span>
1925
+ <span class="cline-any cline-no">&nbsp;</span>
1926
+ <span class="cline-any cline-no">&nbsp;</span>
1927
+ <span class="cline-any cline-no">&nbsp;</span>
1928
+ <span class="cline-any cline-neutral">&nbsp;</span>
1929
+ <span class="cline-any cline-yes">1x</span>
1930
+ <span class="cline-any cline-no">&nbsp;</span>
1931
+ <span class="cline-any cline-no">&nbsp;</span>
1932
+ <span class="cline-any cline-no">&nbsp;</span>
1933
+ <span class="cline-any cline-neutral">&nbsp;</span>
1934
+ <span class="cline-any cline-yes">1x</span>
1935
+ <span class="cline-any cline-neutral">&nbsp;</span>
1936
+ <span class="cline-any cline-neutral">&nbsp;</span>
1937
+ <span class="cline-any cline-yes">1x</span>
1938
+ <span class="cline-any cline-no">&nbsp;</span>
1939
+ <span class="cline-any cline-no">&nbsp;</span>
1940
+ <span class="cline-any cline-no">&nbsp;</span>
1941
+ <span class="cline-any cline-neutral">&nbsp;</span>
1942
+ <span class="cline-any cline-yes">1x</span>
1943
+ <span class="cline-any cline-no">&nbsp;</span>
1944
+ <span class="cline-any cline-no">&nbsp;</span>
1945
+ <span class="cline-any cline-no">&nbsp;</span>
1946
+ <span class="cline-any cline-neutral">&nbsp;</span>
1947
+ <span class="cline-any cline-yes">1x</span>
1948
+ <span class="cline-any cline-neutral">&nbsp;</span>
1949
+ <span class="cline-any cline-neutral">&nbsp;</span>
1950
+ <span class="cline-any cline-yes">1x</span>
1951
+ <span class="cline-any cline-no">&nbsp;</span>
1952
+ <span class="cline-any cline-no">&nbsp;</span>
1953
+ <span class="cline-any cline-no">&nbsp;</span>
1954
+ <span class="cline-any cline-neutral">&nbsp;</span>
1955
+ <span class="cline-any cline-yes">1x</span>
1956
+ <span class="cline-any cline-no">&nbsp;</span>
1957
+ <span class="cline-any cline-no">&nbsp;</span>
1958
+ <span class="cline-any cline-no">&nbsp;</span>
1959
+ <span class="cline-any cline-neutral">&nbsp;</span>
1960
+ <span class="cline-any cline-yes">1x</span>
1961
+ <span class="cline-any cline-neutral">&nbsp;</span>
1962
+ <span class="cline-any cline-neutral">&nbsp;</span>
1963
+ <span class="cline-any cline-yes">1x</span>
1964
+ <span class="cline-any cline-no">&nbsp;</span>
1965
+ <span class="cline-any cline-no">&nbsp;</span>
1966
+ <span class="cline-any cline-no">&nbsp;</span>
1967
+ <span class="cline-any cline-neutral">&nbsp;</span>
1968
+ <span class="cline-any cline-yes">1x</span>
1969
+ <span class="cline-any cline-yes">1x</span>
1970
+ <span class="cline-any cline-no">&nbsp;</span>
1971
+ <span class="cline-any cline-no">&nbsp;</span>
1972
+ <span class="cline-any cline-no">&nbsp;</span>
1973
+ <span class="cline-any cline-neutral">&nbsp;</span>
1974
+ <span class="cline-any cline-yes">1x</span>
1975
+ <span class="cline-any cline-yes">1x</span>
1976
+ <span class="cline-any cline-yes">1x</span>
1977
+ <span class="cline-any cline-no">&nbsp;</span>
1978
+ <span class="cline-any cline-no">&nbsp;</span>
1979
+ <span class="cline-any cline-no">&nbsp;</span>
1980
+ <span class="cline-any cline-neutral">&nbsp;</span>
1981
+ <span class="cline-any cline-neutral">&nbsp;</span>
1982
+ <span class="cline-any cline-yes">1x</span>
1983
+ <span class="cline-any cline-neutral">&nbsp;</span>
1984
+ <span class="cline-any cline-neutral">&nbsp;</span>
1985
+ <span class="cline-any cline-yes">1x</span>
1986
+ <span class="cline-any cline-no">&nbsp;</span>
1987
+ <span class="cline-any cline-no">&nbsp;</span>
1988
+ <span class="cline-any cline-no">&nbsp;</span>
1989
+ <span class="cline-any cline-neutral">&nbsp;</span>
1990
+ <span class="cline-any cline-yes">1x</span>
1991
+ <span class="cline-any cline-yes">1x</span>
1992
+ <span class="cline-any cline-no">&nbsp;</span>
1993
+ <span class="cline-any cline-no">&nbsp;</span>
1994
+ <span class="cline-any cline-no">&nbsp;</span>
1995
+ <span class="cline-any cline-neutral">&nbsp;</span>
1996
+ <span class="cline-any cline-yes">1x</span>
1997
+ <span class="cline-any cline-neutral">&nbsp;</span>
1998
+ <span class="cline-any cline-neutral">&nbsp;</span>
1999
+ <span class="cline-any cline-yes">1x</span>
2000
+ <span class="cline-any cline-no">&nbsp;</span>
2001
+ <span class="cline-any cline-no">&nbsp;</span>
2002
+ <span class="cline-any cline-no">&nbsp;</span>
2003
+ <span class="cline-any cline-neutral">&nbsp;</span>
2004
+ <span class="cline-any cline-yes">1x</span>
2005
+ <span class="cline-any cline-yes">1x</span>
2006
+ <span class="cline-any cline-yes">2x</span>
2007
+ <span class="cline-any cline-no">&nbsp;</span>
2008
+ <span class="cline-any cline-no">&nbsp;</span>
2009
+ <span class="cline-any cline-no">&nbsp;</span>
2010
+ <span class="cline-any cline-neutral">&nbsp;</span>
2011
+ <span class="cline-any cline-neutral">&nbsp;</span>
2012
+ <span class="cline-any cline-yes">1x</span>
2013
+ <span class="cline-any cline-neutral">&nbsp;</span>
2014
+ <span class="cline-any cline-neutral">&nbsp;</span>
2015
+ <span class="cline-any cline-yes">1x</span>
2016
+ <span class="cline-any cline-no">&nbsp;</span>
2017
+ <span class="cline-any cline-no">&nbsp;</span>
2018
+ <span class="cline-any cline-no">&nbsp;</span>
2019
+ <span class="cline-any cline-neutral">&nbsp;</span>
2020
+ <span class="cline-any cline-yes">1x</span>
2021
+ <span class="cline-any cline-yes">1x</span>
2022
+ <span class="cline-any cline-no">&nbsp;</span>
2023
+ <span class="cline-any cline-no">&nbsp;</span>
2024
+ <span class="cline-any cline-no">&nbsp;</span>
2025
+ <span class="cline-any cline-neutral">&nbsp;</span>
2026
+ <span class="cline-any cline-neutral">&nbsp;</span>
2027
+ <span class="cline-any cline-yes">1x</span>
2028
+ <span class="cline-any cline-neutral">&nbsp;</span>
2029
+ <span class="cline-any cline-neutral">&nbsp;</span>
2030
+ <span class="cline-any cline-yes">1x</span>
2031
+ <span class="cline-any cline-no">&nbsp;</span>
2032
+ <span class="cline-any cline-no">&nbsp;</span>
2033
+ <span class="cline-any cline-no">&nbsp;</span>
2034
+ <span class="cline-any cline-neutral">&nbsp;</span>
2035
+ <span class="cline-any cline-yes">1x</span>
2036
+ <span class="cline-any cline-no">&nbsp;</span>
2037
+ <span class="cline-any cline-no">&nbsp;</span>
2038
+ <span class="cline-any cline-no">&nbsp;</span>
2039
+ <span class="cline-any cline-neutral">&nbsp;</span>
2040
+ <span class="cline-any cline-yes">1x</span>
2041
+ <span class="cline-any cline-neutral">&nbsp;</span>
2042
+ <span class="cline-any cline-neutral">&nbsp;</span>
2043
+ <span class="cline-any cline-no">&nbsp;</span>
2044
+ <span class="cline-any cline-no">&nbsp;</span>
2045
+ <span class="cline-any cline-no">&nbsp;</span>
2046
+ <span class="cline-any cline-no">&nbsp;</span>
2047
+ <span class="cline-any cline-neutral">&nbsp;</span>
2048
+ <span class="cline-any cline-no">&nbsp;</span>
2049
+ <span class="cline-any cline-no">&nbsp;</span>
2050
+ <span class="cline-any cline-no">&nbsp;</span>
2051
+ <span class="cline-any cline-no">&nbsp;</span>
2052
+ <span class="cline-any cline-no">&nbsp;</span>
2053
+ <span class="cline-any cline-no">&nbsp;</span>
2054
+ <span class="cline-any cline-neutral">&nbsp;</span>
2055
+ <span class="cline-any cline-neutral">&nbsp;</span>
2056
+ <span class="cline-any cline-no">&nbsp;</span>
2057
+ <span class="cline-any cline-neutral">&nbsp;</span>
2058
+ <span class="cline-any cline-neutral">&nbsp;</span>
2059
+ <span class="cline-any cline-yes">1x</span>
2060
+ <span class="cline-any cline-no">&nbsp;</span>
2061
+ <span class="cline-any cline-no">&nbsp;</span>
2062
+ <span class="cline-any cline-no">&nbsp;</span>
2063
+ <span class="cline-any cline-neutral">&nbsp;</span>
2064
+ <span class="cline-any cline-yes">1x</span>
2065
+ <span class="cline-any cline-no">&nbsp;</span>
2066
+ <span class="cline-any cline-no">&nbsp;</span>
2067
+ <span class="cline-any cline-no">&nbsp;</span>
2068
+ <span class="cline-any cline-neutral">&nbsp;</span>
2069
+ <span class="cline-any cline-yes">1x</span>
2070
+ <span class="cline-any cline-neutral">&nbsp;</span>
2071
+ <span class="cline-any cline-neutral">&nbsp;</span>
2072
+ <span class="cline-any cline-yes">1x</span>
2073
+ <span class="cline-any cline-neutral">&nbsp;</span>
2074
+ <span class="cline-any cline-neutral">&nbsp;</span>
2075
+ <span class="cline-any cline-yes">1x</span>
2076
+ <span class="cline-any cline-no">&nbsp;</span>
2077
+ <span class="cline-any cline-no">&nbsp;</span>
2078
+ <span class="cline-any cline-no">&nbsp;</span>
2079
+ <span class="cline-any cline-neutral">&nbsp;</span>
2080
+ <span class="cline-any cline-yes">1x</span>
2081
+ <span class="cline-any cline-yes">1x</span>
2082
+ <span class="cline-any cline-yes">2x</span>
2083
+ <span class="cline-any cline-no">&nbsp;</span>
2084
+ <span class="cline-any cline-no">&nbsp;</span>
2085
+ <span class="cline-any cline-no">&nbsp;</span>
2086
+ <span class="cline-any cline-neutral">&nbsp;</span>
2087
+ <span class="cline-any cline-neutral">&nbsp;</span>
2088
+ <span class="cline-any cline-yes">1x</span>
2089
+ <span class="cline-any cline-neutral">&nbsp;</span>
2090
+ <span class="cline-any cline-neutral">&nbsp;</span>
2091
+ <span class="cline-any cline-yes">1x</span>
2092
+ <span class="cline-any cline-no">&nbsp;</span>
2093
+ <span class="cline-any cline-no">&nbsp;</span>
2094
+ <span class="cline-any cline-no">&nbsp;</span>
2095
+ <span class="cline-any cline-neutral">&nbsp;</span>
2096
+ <span class="cline-any cline-yes">1x</span>
2097
+ <span class="cline-any cline-yes">3x</span>
2098
+ <span class="cline-any cline-no">&nbsp;</span>
2099
+ <span class="cline-any cline-no">&nbsp;</span>
2100
+ <span class="cline-any cline-no">&nbsp;</span>
2101
+ <span class="cline-any cline-neutral">&nbsp;</span>
2102
+ <span class="cline-any cline-neutral">&nbsp;</span>
2103
+ <span class="cline-any cline-yes">1x</span>
2104
+ <span class="cline-any cline-neutral">&nbsp;</span>
2105
+ <span class="cline-any cline-neutral">&nbsp;</span>
2106
+ <span class="cline-any cline-no">&nbsp;</span>
2107
+ <span class="cline-any cline-no">&nbsp;</span>
2108
+ <span class="cline-any cline-no">&nbsp;</span>
2109
+ <span class="cline-any cline-no">&nbsp;</span>
2110
+ <span class="cline-any cline-neutral">&nbsp;</span>
2111
+ <span class="cline-any cline-no">&nbsp;</span>
2112
+ <span class="cline-any cline-no">&nbsp;</span>
2113
+ <span class="cline-any cline-no">&nbsp;</span>
2114
+ <span class="cline-any cline-no">&nbsp;</span>
2115
+ <span class="cline-any cline-no">&nbsp;</span>
2116
+ <span class="cline-any cline-neutral">&nbsp;</span>
2117
+ <span class="cline-any cline-neutral">&nbsp;</span>
2118
+ <span class="cline-any cline-no">&nbsp;</span>
2119
+ <span class="cline-any cline-no">&nbsp;</span>
2120
+ <span class="cline-any cline-no">&nbsp;</span>
2121
+ <span class="cline-any cline-neutral">&nbsp;</span>
2122
+ <span class="cline-any cline-no">&nbsp;</span>
2123
+ <span class="cline-any cline-neutral">&nbsp;</span>
2124
+ <span class="cline-any cline-no">&nbsp;</span>
2125
+ <span class="cline-any cline-neutral">&nbsp;</span>
2126
+ <span class="cline-any cline-neutral">&nbsp;</span>
2127
+ <span class="cline-any cline-yes">1x</span>
2128
+ <span class="cline-any cline-no">&nbsp;</span>
2129
+ <span class="cline-any cline-no">&nbsp;</span>
2130
+ <span class="cline-any cline-no">&nbsp;</span>
2131
+ <span class="cline-any cline-neutral">&nbsp;</span>
2132
+ <span class="cline-any cline-yes">1x</span>
2133
+ <span class="cline-any cline-yes">3x</span>
2134
+ <span class="cline-any cline-no">&nbsp;</span>
2135
+ <span class="cline-any cline-no">&nbsp;</span>
2136
+ <span class="cline-any cline-no">&nbsp;</span>
2137
+ <span class="cline-any cline-neutral">&nbsp;</span>
2138
+ <span class="cline-any cline-neutral">&nbsp;</span>
2139
+ <span class="cline-any cline-yes">1x</span>
2140
+ <span class="cline-any cline-neutral">&nbsp;</span>
2141
+ <span class="cline-any cline-neutral">&nbsp;</span>
2142
+ <span class="cline-any cline-yes">2x</span>
2143
+ <span class="cline-any cline-no">&nbsp;</span>
2144
+ <span class="cline-any cline-no">&nbsp;</span>
2145
+ <span class="cline-any cline-no">&nbsp;</span>
2146
+ <span class="cline-any cline-neutral">&nbsp;</span>
2147
+ <span class="cline-any cline-yes">2x</span>
2148
+ <span class="cline-any cline-yes">6x</span>
2149
+ <span class="cline-any cline-no">&nbsp;</span>
2150
+ <span class="cline-any cline-no">&nbsp;</span>
2151
+ <span class="cline-any cline-no">&nbsp;</span>
2152
+ <span class="cline-any cline-neutral">&nbsp;</span>
2153
+ <span class="cline-any cline-neutral">&nbsp;</span>
2154
+ <span class="cline-any cline-yes">2x</span>
2155
+ <span class="cline-any cline-neutral">&nbsp;</span>
2156
+ <span class="cline-any cline-neutral">&nbsp;</span>
2157
+ <span class="cline-any cline-yes">1x</span>
2158
+ <span class="cline-any cline-no">&nbsp;</span>
2159
+ <span class="cline-any cline-no">&nbsp;</span>
2160
+ <span class="cline-any cline-no">&nbsp;</span>
2161
+ <span class="cline-any cline-neutral">&nbsp;</span>
2162
+ <span class="cline-any cline-yes">1x</span>
2163
+ <span class="cline-any cline-yes">3x</span>
2164
+ <span class="cline-any cline-no">&nbsp;</span>
2165
+ <span class="cline-any cline-no">&nbsp;</span>
2166
+ <span class="cline-any cline-no">&nbsp;</span>
2167
+ <span class="cline-any cline-neutral">&nbsp;</span>
2168
+ <span class="cline-any cline-neutral">&nbsp;</span>
2169
+ <span class="cline-any cline-yes">1x</span>
2170
+ <span class="cline-any cline-neutral">&nbsp;</span>
2171
+ <span class="cline-any cline-neutral">&nbsp;</span>
2172
+ <span class="cline-any cline-yes">1x</span>
2173
+ <span class="cline-any cline-no">&nbsp;</span>
2174
+ <span class="cline-any cline-no">&nbsp;</span>
2175
+ <span class="cline-any cline-no">&nbsp;</span>
2176
+ <span class="cline-any cline-neutral">&nbsp;</span>
2177
+ <span class="cline-any cline-yes">1x</span>
2178
+ <span class="cline-any cline-no">&nbsp;</span>
2179
+ <span class="cline-any cline-no">&nbsp;</span>
2180
+ <span class="cline-any cline-no">&nbsp;</span>
2181
+ <span class="cline-any cline-neutral">&nbsp;</span>
2182
+ <span class="cline-any cline-yes">1x</span>
2183
+ <span class="cline-any cline-no">&nbsp;</span>
2184
+ <span class="cline-any cline-no">&nbsp;</span>
2185
+ <span class="cline-any cline-no">&nbsp;</span>
2186
+ <span class="cline-any cline-neutral">&nbsp;</span>
2187
+ <span class="cline-any cline-yes">1x</span>
2188
+ <span class="cline-any cline-no">&nbsp;</span>
2189
+ <span class="cline-any cline-no">&nbsp;</span>
2190
+ <span class="cline-any cline-no">&nbsp;</span>
2191
+ <span class="cline-any cline-neutral">&nbsp;</span>
2192
+ <span class="cline-any cline-yes">1x</span>
2193
+ <span class="cline-any cline-neutral">&nbsp;</span>
2194
+ <span class="cline-any cline-neutral">&nbsp;</span>
2195
+ <span class="cline-any cline-yes">1x</span>
2196
+ <span class="cline-any cline-no">&nbsp;</span>
2197
+ <span class="cline-any cline-no">&nbsp;</span>
2198
+ <span class="cline-any cline-no">&nbsp;</span>
2199
+ <span class="cline-any cline-neutral">&nbsp;</span>
2200
+ <span class="cline-any cline-yes">1x</span>
2201
+ <span class="cline-any cline-no">&nbsp;</span>
2202
+ <span class="cline-any cline-no">&nbsp;</span>
2203
+ <span class="cline-any cline-no">&nbsp;</span>
2204
+ <span class="cline-any cline-neutral">&nbsp;</span>
2205
+ <span class="cline-any cline-yes">1x</span>
2206
+ <span class="cline-any cline-neutral">&nbsp;</span>
2207
+ <span class="cline-any cline-neutral">&nbsp;</span>
2208
+ <span class="cline-any cline-no">&nbsp;</span>
2209
+ <span class="cline-any cline-no">&nbsp;</span>
2210
+ <span class="cline-any cline-no">&nbsp;</span>
2211
+ <span class="cline-any cline-no">&nbsp;</span>
2212
+ <span class="cline-any cline-neutral">&nbsp;</span>
2213
+ <span class="cline-any cline-no">&nbsp;</span>
2214
+ <span class="cline-any cline-no">&nbsp;</span>
2215
+ <span class="cline-any cline-no">&nbsp;</span>
2216
+ <span class="cline-any cline-no">&nbsp;</span>
2217
+ <span class="cline-any cline-neutral">&nbsp;</span>
2218
+ <span class="cline-any cline-no">&nbsp;</span>
2219
+ <span class="cline-any cline-neutral">&nbsp;</span>
2220
+ <span class="cline-any cline-neutral">&nbsp;</span>
2221
+ <span class="cline-any cline-yes">1x</span>
2222
+ <span class="cline-any cline-no">&nbsp;</span>
2223
+ <span class="cline-any cline-no">&nbsp;</span>
2224
+ <span class="cline-any cline-no">&nbsp;</span>
2225
+ <span class="cline-any cline-neutral">&nbsp;</span>
2226
+ <span class="cline-any cline-yes">1x</span>
2227
+ <span class="cline-any cline-yes">1x</span>
2228
+ <span class="cline-any cline-yes">1x</span>
2229
+ <span class="cline-any cline-no">&nbsp;</span>
2230
+ <span class="cline-any cline-no">&nbsp;</span>
2231
+ <span class="cline-any cline-neutral">&nbsp;</span>
2232
+ <span class="cline-any cline-no">&nbsp;</span>
2233
+ <span class="cline-any cline-neutral">&nbsp;</span>
2234
+ <span class="cline-any cline-yes">1x</span>
2235
+ <span class="cline-any cline-yes">1x</span>
2236
+ <span class="cline-any cline-yes">1x</span>
2237
+ <span class="cline-any cline-yes">1x</span>
2238
+ <span class="cline-any cline-neutral">&nbsp;</span>
2239
+ <span class="cline-any cline-no">&nbsp;</span>
2240
+ <span class="cline-any cline-neutral">&nbsp;</span>
2241
+ <span class="cline-any cline-neutral">&nbsp;</span>
2242
+ <span class="cline-any cline-yes">1x</span>
2243
+ <span class="cline-any cline-no">&nbsp;</span>
2244
+ <span class="cline-any cline-no">&nbsp;</span>
2245
+ <span class="cline-any cline-no">&nbsp;</span>
2246
+ <span class="cline-any cline-neutral">&nbsp;</span>
2247
+ <span class="cline-any cline-yes">1x</span>
2248
+ <span class="cline-any cline-yes">3x</span>
2249
+ <span class="cline-any cline-yes">3x</span>
2250
+ <span class="cline-any cline-no">&nbsp;</span>
2251
+ <span class="cline-any cline-no">&nbsp;</span>
2252
+ <span class="cline-any cline-no">&nbsp;</span>
2253
+ <span class="cline-any cline-neutral">&nbsp;</span>
2254
+ <span class="cline-any cline-neutral">&nbsp;</span>
2255
+ <span class="cline-any cline-yes">1x</span>
2256
+ <span class="cline-any cline-neutral">&nbsp;</span>
2257
+ <span class="cline-any cline-neutral">&nbsp;</span>
2258
+ <span class="cline-any cline-yes">1x</span>
2259
+ <span class="cline-any cline-no">&nbsp;</span>
2260
+ <span class="cline-any cline-no">&nbsp;</span>
2261
+ <span class="cline-any cline-no">&nbsp;</span>
2262
+ <span class="cline-any cline-neutral">&nbsp;</span>
2263
+ <span class="cline-any cline-yes">1x</span>
2264
+ <span class="cline-any cline-no">&nbsp;</span>
2265
+ <span class="cline-any cline-no">&nbsp;</span>
2266
+ <span class="cline-any cline-no">&nbsp;</span>
2267
+ <span class="cline-any cline-neutral">&nbsp;</span>
2268
+ <span class="cline-any cline-yes">1x</span>
2269
+ <span class="cline-any cline-yes">3x</span>
2270
+ <span class="cline-any cline-yes">3x</span>
2271
+ <span class="cline-any cline-no">&nbsp;</span>
2272
+ <span class="cline-any cline-no">&nbsp;</span>
2273
+ <span class="cline-any cline-no">&nbsp;</span>
2274
+ <span class="cline-any cline-neutral">&nbsp;</span>
2275
+ <span class="cline-any cline-neutral">&nbsp;</span>
2276
+ <span class="cline-any cline-yes">1x</span>
2277
+ <span class="cline-any cline-yes">1x</span>
2278
+ <span class="cline-any cline-no">&nbsp;</span>
2279
+ <span class="cline-any cline-no">&nbsp;</span>
2280
+ <span class="cline-any cline-no">&nbsp;</span>
2281
+ <span class="cline-any cline-neutral">&nbsp;</span>
2282
+ <span class="cline-any cline-yes">1x</span>
2283
+ <span class="cline-any cline-neutral">&nbsp;</span>
2284
+ <span class="cline-any cline-neutral">&nbsp;</span>
2285
+ <span class="cline-any cline-yes">2x</span>
2286
+ <span class="cline-any cline-no">&nbsp;</span>
2287
+ <span class="cline-any cline-no">&nbsp;</span>
2288
+ <span class="cline-any cline-no">&nbsp;</span>
2289
+ <span class="cline-any cline-neutral">&nbsp;</span>
2290
+ <span class="cline-any cline-yes">2x</span>
2291
+ <span class="cline-any cline-yes">2x</span>
2292
+ <span class="cline-any cline-yes">2x</span>
2293
+ <span class="cline-any cline-yes">2x</span>
2294
+ <span class="cline-any cline-yes">2x</span>
2295
+ <span class="cline-any cline-neutral">&nbsp;</span>
2296
+ <span class="cline-any cline-no">&nbsp;</span>
2297
+ <span class="cline-any cline-neutral">&nbsp;</span>
2298
+ <span class="cline-any cline-neutral">&nbsp;</span>
2299
+ <span class="cline-any cline-yes">1x</span>
2300
+ <span class="cline-any cline-no">&nbsp;</span>
2301
+ <span class="cline-any cline-no">&nbsp;</span>
2302
+ <span class="cline-any cline-no">&nbsp;</span>
2303
+ <span class="cline-any cline-neutral">&nbsp;</span>
2304
+ <span class="cline-any cline-yes">1x</span>
2305
+ <span class="cline-any cline-yes">1x</span>
2306
+ <span class="cline-any cline-no">&nbsp;</span>
2307
+ <span class="cline-any cline-no">&nbsp;</span>
2308
+ <span class="cline-any cline-no">&nbsp;</span>
2309
+ <span class="cline-any cline-neutral">&nbsp;</span>
2310
+ <span class="cline-any cline-yes">1x</span>
2311
+ <span class="cline-any cline-neutral">&nbsp;</span>
2312
+ <span class="cline-any cline-neutral">&nbsp;</span>
2313
+ <span class="cline-any cline-yes">1x</span>
2314
+ <span class="cline-any cline-no">&nbsp;</span>
2315
+ <span class="cline-any cline-no">&nbsp;</span>
2316
+ <span class="cline-any cline-no">&nbsp;</span>
2317
+ <span class="cline-any cline-neutral">&nbsp;</span>
2318
+ <span class="cline-any cline-yes">1x</span>
2319
+ <span class="cline-any cline-yes">3x</span>
2320
+ <span class="cline-any cline-yes">3x</span>
2321
+ <span class="cline-any cline-no">&nbsp;</span>
2322
+ <span class="cline-any cline-no">&nbsp;</span>
2323
+ <span class="cline-any cline-no">&nbsp;</span>
2324
+ <span class="cline-any cline-neutral">&nbsp;</span>
2325
+ <span class="cline-any cline-neutral">&nbsp;</span>
2326
+ <span class="cline-any cline-yes">1x</span>
2327
+ <span class="cline-any cline-neutral">&nbsp;</span>
2328
+ <span class="cline-any cline-neutral">&nbsp;</span>
2329
+ <span class="cline-any cline-yes">1x</span>
2330
+ <span class="cline-any cline-no">&nbsp;</span>
2331
+ <span class="cline-any cline-no">&nbsp;</span>
2332
+ <span class="cline-any cline-no">&nbsp;</span>
2333
+ <span class="cline-any cline-neutral">&nbsp;</span>
2334
+ <span class="cline-any cline-yes">1x</span>
2335
+ <span class="cline-any cline-yes">3x</span>
2336
+ <span class="cline-any cline-yes">3x</span>
2337
+ <span class="cline-any cline-no">&nbsp;</span>
2338
+ <span class="cline-any cline-no">&nbsp;</span>
2339
+ <span class="cline-any cline-no">&nbsp;</span>
2340
+ <span class="cline-any cline-neutral">&nbsp;</span>
2341
+ <span class="cline-any cline-neutral">&nbsp;</span>
2342
+ <span class="cline-any cline-yes">1x</span>
2343
+ <span class="cline-any cline-neutral">&nbsp;</span>
2344
+ <span class="cline-any cline-neutral">&nbsp;</span>
2345
+ <span class="cline-any cline-yes">2x</span>
2346
+ <span class="cline-any cline-no">&nbsp;</span>
2347
+ <span class="cline-any cline-no">&nbsp;</span>
2348
+ <span class="cline-any cline-no">&nbsp;</span>
2349
+ <span class="cline-any cline-neutral">&nbsp;</span>
2350
+ <span class="cline-any cline-yes">2x</span>
2351
+ <span class="cline-any cline-yes">2x</span>
2352
+ <span class="cline-any cline-yes">2x</span>
2353
+ <span class="cline-any cline-yes">2x</span>
2354
+ <span class="cline-any cline-yes">2x</span>
2355
+ <span class="cline-any cline-neutral">&nbsp;</span>
2356
+ <span class="cline-any cline-no">&nbsp;</span>
2357
+ <span class="cline-any cline-no">&nbsp;</span>
2358
+ <span class="cline-any cline-no">&nbsp;</span>
2359
+ <span class="cline-any cline-no">&nbsp;</span>
2360
+ <span class="cline-any cline-neutral">&nbsp;</span>
2361
+ <span class="cline-any cline-no">&nbsp;</span>
2362
+ <span class="cline-any cline-no">&nbsp;</span>
2363
+ <span class="cline-any cline-no">&nbsp;</span>
2364
+ <span class="cline-any cline-no">&nbsp;</span>
2365
+ <span class="cline-any cline-neutral">&nbsp;</span>
2366
+ <span class="cline-any cline-no">&nbsp;</span>
2367
+ <span class="cline-any cline-neutral">&nbsp;</span>
2368
+ <span class="cline-any cline-neutral">&nbsp;</span>
2369
+ <span class="cline-any cline-yes">1x</span>
2370
+ <span class="cline-any cline-no">&nbsp;</span>
2371
+ <span class="cline-any cline-no">&nbsp;</span>
2372
+ <span class="cline-any cline-no">&nbsp;</span>
2373
+ <span class="cline-any cline-neutral">&nbsp;</span>
2374
+ <span class="cline-any cline-yes">1x</span>
2375
+ <span class="cline-any cline-yes">3x</span>
2376
+ <span class="cline-any cline-yes">3x</span>
2377
+ <span class="cline-any cline-no">&nbsp;</span>
2378
+ <span class="cline-any cline-no">&nbsp;</span>
2379
+ <span class="cline-any cline-no">&nbsp;</span>
2380
+ <span class="cline-any cline-neutral">&nbsp;</span>
2381
+ <span class="cline-any cline-neutral">&nbsp;</span>
2382
+ <span class="cline-any cline-yes">1x</span>
2383
+ <span class="cline-any cline-neutral">&nbsp;</span>
2384
+ <span class="cline-any cline-neutral">&nbsp;</span>
2385
+ <span class="cline-any cline-yes">1x</span>
2386
+ <span class="cline-any cline-no">&nbsp;</span>
2387
+ <span class="cline-any cline-no">&nbsp;</span>
2388
+ <span class="cline-any cline-no">&nbsp;</span>
2389
+ <span class="cline-any cline-neutral">&nbsp;</span>
2390
+ <span class="cline-any cline-yes">1x</span>
2391
+ <span class="cline-any cline-yes">2x</span>
2392
+ <span class="cline-any cline-yes">2x</span>
2393
+ <span class="cline-any cline-no">&nbsp;</span>
2394
+ <span class="cline-any cline-no">&nbsp;</span>
2395
+ <span class="cline-any cline-no">&nbsp;</span>
2396
+ <span class="cline-any cline-neutral">&nbsp;</span>
2397
+ <span class="cline-any cline-neutral">&nbsp;</span>
2398
+ <span class="cline-any cline-yes">1x</span>
2399
+ <span class="cline-any cline-neutral">&nbsp;</span>
2400
+ <span class="cline-any cline-neutral">&nbsp;</span>
2401
+ <span class="cline-any cline-yes">1x</span>
2402
+ <span class="cline-any cline-no">&nbsp;</span>
2403
+ <span class="cline-any cline-no">&nbsp;</span>
2404
+ <span class="cline-any cline-no">&nbsp;</span>
2405
+ <span class="cline-any cline-neutral">&nbsp;</span>
2406
+ <span class="cline-any cline-yes">1x</span>
2407
+ <span class="cline-any cline-yes">1x</span>
2408
+ <span class="cline-any cline-no">&nbsp;</span>
2409
+ <span class="cline-any cline-no">&nbsp;</span>
2410
+ <span class="cline-any cline-no">&nbsp;</span>
2411
+ <span class="cline-any cline-neutral">&nbsp;</span>
2412
+ <span class="cline-any cline-yes">1x</span>
2413
+ <span class="cline-any cline-neutral">&nbsp;</span>
2414
+ <span class="cline-any cline-neutral">&nbsp;</span>
2415
+ <span class="cline-any cline-yes">1x</span>
2416
+ <span class="cline-any cline-no">&nbsp;</span>
2417
+ <span class="cline-any cline-no">&nbsp;</span>
2418
+ <span class="cline-any cline-no">&nbsp;</span>
2419
+ <span class="cline-any cline-neutral">&nbsp;</span>
2420
+ <span class="cline-any cline-yes">1x</span>
2421
+ <span class="cline-any cline-yes">1x</span>
2422
+ <span class="cline-any cline-no">&nbsp;</span>
2423
+ <span class="cline-any cline-no">&nbsp;</span>
2424
+ <span class="cline-any cline-no">&nbsp;</span>
2425
+ <span class="cline-any cline-neutral">&nbsp;</span>
2426
+ <span class="cline-any cline-yes">1x</span>
2427
+ <span class="cline-any cline-neutral">&nbsp;</span>
2428
+ <span class="cline-any cline-neutral">&nbsp;</span>
2429
+ <span class="cline-any cline-yes">1x</span>
2430
+ <span class="cline-any cline-no">&nbsp;</span>
2431
+ <span class="cline-any cline-no">&nbsp;</span>
2432
+ <span class="cline-any cline-no">&nbsp;</span>
2433
+ <span class="cline-any cline-neutral">&nbsp;</span>
2434
+ <span class="cline-any cline-yes">2x</span>
2435
+ <span class="cline-any cline-yes">1x</span>
2436
+ <span class="cline-any cline-no">&nbsp;</span>
2437
+ <span class="cline-any cline-no">&nbsp;</span>
2438
+ <span class="cline-any cline-no">&nbsp;</span>
2439
+ <span class="cline-any cline-neutral">&nbsp;</span>
2440
+ <span class="cline-any cline-yes">1x</span>
2441
+ <span class="cline-any cline-neutral">&nbsp;</span>
2442
+ <span class="cline-any cline-neutral">&nbsp;</span>
2443
+ <span class="cline-any cline-yes">3x</span>
2444
+ <span class="cline-any cline-no">&nbsp;</span>
2445
+ <span class="cline-any cline-no">&nbsp;</span>
2446
+ <span class="cline-any cline-no">&nbsp;</span>
2447
+ <span class="cline-any cline-neutral">&nbsp;</span>
2448
+ <span class="cline-any cline-yes">6x</span>
2449
+ <span class="cline-any cline-yes">3x</span>
2450
+ <span class="cline-any cline-no">&nbsp;</span>
2451
+ <span class="cline-any cline-no">&nbsp;</span>
2452
+ <span class="cline-any cline-no">&nbsp;</span>
2453
+ <span class="cline-any cline-neutral">&nbsp;</span>
2454
+ <span class="cline-any cline-yes">3x</span>
2455
+ <span class="cline-any cline-no">&nbsp;</span>
2456
+ <span class="cline-any cline-no">&nbsp;</span>
2457
+ <span class="cline-any cline-no">&nbsp;</span>
2458
+ <span class="cline-any cline-neutral">&nbsp;</span>
2459
+ <span class="cline-any cline-yes">3x</span>
2460
+ <span class="cline-any cline-no">&nbsp;</span>
2461
+ <span class="cline-any cline-no">&nbsp;</span>
2462
+ <span class="cline-any cline-no">&nbsp;</span>
2463
+ <span class="cline-any cline-neutral">&nbsp;</span>
2464
+ <span class="cline-any cline-yes">3x</span>
2465
+ <span class="cline-any cline-neutral">&nbsp;</span>
2466
+ <span class="cline-any cline-neutral">&nbsp;</span>
2467
+ <span class="cline-any cline-yes">1x</span>
2468
+ <span class="cline-any cline-neutral">&nbsp;</span>
2469
+ <span class="cline-any cline-neutral">&nbsp;</span>
2470
+ <span class="cline-any cline-no">&nbsp;</span>
2471
+ <span class="cline-any cline-no">&nbsp;</span>
2472
+ <span class="cline-any cline-no">&nbsp;</span>
2473
+ <span class="cline-any cline-no">&nbsp;</span>
2474
+ <span class="cline-any cline-neutral">&nbsp;</span>
2475
+ <span class="cline-any cline-no">&nbsp;</span>
2476
+ <span class="cline-any cline-no">&nbsp;</span>
2477
+ <span class="cline-any cline-no">&nbsp;</span>
2478
+ <span class="cline-any cline-no">&nbsp;</span>
2479
+ <span class="cline-any cline-no">&nbsp;</span>
2480
+ <span class="cline-any cline-neutral">&nbsp;</span>
2481
+ <span class="cline-any cline-no">&nbsp;</span>
2482
+ <span class="cline-any cline-neutral">&nbsp;</span>
2483
+ <span class="cline-any cline-neutral">&nbsp;</span>
2484
+ <span class="cline-any cline-yes">1x</span>
2485
+ <span class="cline-any cline-no">&nbsp;</span>
2486
+ <span class="cline-any cline-no">&nbsp;</span>
2487
+ <span class="cline-any cline-no">&nbsp;</span>
2488
+ <span class="cline-any cline-neutral">&nbsp;</span>
2489
+ <span class="cline-any cline-yes">1x</span>
2490
+ <span class="cline-any cline-yes">1x</span>
2491
+ <span class="cline-any cline-no">&nbsp;</span>
2492
+ <span class="cline-any cline-no">&nbsp;</span>
2493
+ <span class="cline-any cline-no">&nbsp;</span>
2494
+ <span class="cline-any cline-neutral">&nbsp;</span>
2495
+ <span class="cline-any cline-yes">1x</span>
2496
+ <span class="cline-any cline-neutral">&nbsp;</span>
2497
+ <span class="cline-any cline-neutral">&nbsp;</span>
2498
+ <span class="cline-any cline-yes">1x</span>
2499
+ <span class="cline-any cline-no">&nbsp;</span>
2500
+ <span class="cline-any cline-no">&nbsp;</span>
2501
+ <span class="cline-any cline-no">&nbsp;</span>
2502
+ <span class="cline-any cline-neutral">&nbsp;</span>
2503
+ <span class="cline-any cline-yes">1x</span>
2504
+ <span class="cline-any cline-yes">1x</span>
2505
+ <span class="cline-any cline-yes">2x</span>
2506
+ <span class="cline-any cline-yes">2x</span>
2507
+ <span class="cline-any cline-no">&nbsp;</span>
2508
+ <span class="cline-any cline-no">&nbsp;</span>
2509
+ <span class="cline-any cline-no">&nbsp;</span>
2510
+ <span class="cline-any cline-neutral">&nbsp;</span>
2511
+ <span class="cline-any cline-neutral">&nbsp;</span>
2512
+ <span class="cline-any cline-yes">1x</span>
2513
+ <span class="cline-any cline-neutral">&nbsp;</span>
2514
+ <span class="cline-any cline-neutral">&nbsp;</span>
2515
+ <span class="cline-any cline-yes">1x</span>
2516
+ <span class="cline-any cline-no">&nbsp;</span>
2517
+ <span class="cline-any cline-no">&nbsp;</span>
2518
+ <span class="cline-any cline-no">&nbsp;</span>
2519
+ <span class="cline-any cline-neutral">&nbsp;</span>
2520
+ <span class="cline-any cline-yes">1x</span>
2521
+ <span class="cline-any cline-no">&nbsp;</span>
2522
+ <span class="cline-any cline-no">&nbsp;</span>
2523
+ <span class="cline-any cline-no">&nbsp;</span>
2524
+ <span class="cline-any cline-neutral">&nbsp;</span>
2525
+ <span class="cline-any cline-yes">1x</span>
2526
+ <span class="cline-any cline-yes">1x</span>
2527
+ <span class="cline-any cline-yes">1x</span>
2528
+ <span class="cline-any cline-yes">2x</span>
2529
+ <span class="cline-any cline-neutral">&nbsp;</span>
2530
+ <span class="cline-any cline-neutral">&nbsp;</span>
2531
+ <span class="cline-any cline-no">&nbsp;</span>
2532
+ <span class="cline-any cline-neutral">&nbsp;</span>
2533
+ <span class="cline-any cline-neutral">&nbsp;</span>
2534
+ <span class="cline-any cline-yes">1x</span>
2535
+ <span class="cline-any cline-yes">2x</span>
2536
+ <span class="cline-any cline-yes">2x</span>
2537
+ <span class="cline-any cline-yes">4x</span>
2538
+ <span class="cline-any cline-yes">4x</span>
2539
+ <span class="cline-any cline-no">&nbsp;</span>
2540
+ <span class="cline-any cline-no">&nbsp;</span>
2541
+ <span class="cline-any cline-no">&nbsp;</span>
2542
+ <span class="cline-any cline-neutral">&nbsp;</span>
2543
+ <span class="cline-any cline-neutral">&nbsp;</span>
2544
+ <span class="cline-any cline-neutral">&nbsp;</span>
2545
+ <span class="cline-any cline-yes">1x</span>
2546
+ <span class="cline-any cline-neutral">&nbsp;</span>
2547
+ <span class="cline-any cline-neutral">&nbsp;</span>
2548
+ <span class="cline-any cline-no">&nbsp;</span>
2549
+ <span class="cline-any cline-no">&nbsp;</span>
2550
+ <span class="cline-any cline-no">&nbsp;</span>
2551
+ <span class="cline-any cline-no">&nbsp;</span>
2552
+ <span class="cline-any cline-no">&nbsp;</span>
2553
+ <span class="cline-any cline-neutral">&nbsp;</span>
2554
+ <span class="cline-any cline-no">&nbsp;</span>
2555
+ <span class="cline-any cline-no">&nbsp;</span>
2556
+ <span class="cline-any cline-no">&nbsp;</span>
2557
+ <span class="cline-any cline-no">&nbsp;</span>
2558
+ <span class="cline-any cline-neutral">&nbsp;</span>
2559
+ <span class="cline-any cline-no">&nbsp;</span>
2560
+ <span class="cline-any cline-neutral">&nbsp;</span>
2561
+ <span class="cline-any cline-neutral">&nbsp;</span>
2562
+ <span class="cline-any cline-yes">1x</span>
2563
+ <span class="cline-any cline-yes">1x</span>
2564
+ <span class="cline-any cline-no">&nbsp;</span>
2565
+ <span class="cline-any cline-no">&nbsp;</span>
2566
+ <span class="cline-any cline-no">&nbsp;</span>
2567
+ <span class="cline-any cline-neutral">&nbsp;</span>
2568
+ <span class="cline-any cline-yes">1x</span>
2569
+ <span class="cline-any cline-yes">1x</span>
2570
+ <span class="cline-any cline-no">&nbsp;</span>
2571
+ <span class="cline-any cline-no">&nbsp;</span>
2572
+ <span class="cline-any cline-no">&nbsp;</span>
2573
+ <span class="cline-any cline-neutral">&nbsp;</span>
2574
+ <span class="cline-any cline-yes">1x</span>
2575
+ <span class="cline-any cline-no">&nbsp;</span>
2576
+ <span class="cline-any cline-no">&nbsp;</span>
2577
+ <span class="cline-any cline-no">&nbsp;</span>
2578
+ <span class="cline-any cline-no">&nbsp;</span>
2579
+ <span class="cline-any cline-no">&nbsp;</span>
2580
+ <span class="cline-any cline-neutral">&nbsp;</span>
2581
+ <span class="cline-any cline-neutral">&nbsp;</span>
2582
+ <span class="cline-any cline-yes">1x</span>
2583
+ <span class="cline-any cline-neutral">&nbsp;</span>
2584
+ <span class="cline-any cline-neutral">&nbsp;</span>
2585
+ <span class="cline-any cline-yes">1x</span>
2586
+ <span class="cline-any cline-no">&nbsp;</span>
2587
+ <span class="cline-any cline-no">&nbsp;</span>
2588
+ <span class="cline-any cline-no">&nbsp;</span>
2589
+ <span class="cline-any cline-neutral">&nbsp;</span>
2590
+ <span class="cline-any cline-yes">1x</span>
2591
+ <span class="cline-any cline-yes">1x</span>
2592
+ <span class="cline-any cline-no">&nbsp;</span>
2593
+ <span class="cline-any cline-no">&nbsp;</span>
2594
+ <span class="cline-any cline-no">&nbsp;</span>
2595
+ <span class="cline-any cline-neutral">&nbsp;</span>
2596
+ <span class="cline-any cline-yes">1x</span>
2597
+ <span class="cline-any cline-yes">1x</span>
2598
+ <span class="cline-any cline-no">&nbsp;</span>
2599
+ <span class="cline-any cline-no">&nbsp;</span>
2600
+ <span class="cline-any cline-no">&nbsp;</span>
2601
+ <span class="cline-any cline-neutral">&nbsp;</span>
2602
+ <span class="cline-any cline-yes">1x</span>
2603
+ <span class="cline-any cline-yes">2x</span>
2604
+ <span class="cline-any cline-yes">2x</span>
2605
+ <span class="cline-any cline-no">&nbsp;</span>
2606
+ <span class="cline-any cline-no">&nbsp;</span>
2607
+ <span class="cline-any cline-no">&nbsp;</span>
2608
+ <span class="cline-any cline-neutral">&nbsp;</span>
2609
+ <span class="cline-any cline-neutral">&nbsp;</span>
2610
+ <span class="cline-any cline-yes">1x</span>
2611
+ <span class="cline-any cline-yes">1x</span>
2612
+ <span class="cline-any cline-yes">2x</span>
2613
+ <span class="cline-any cline-yes">2x</span>
2614
+ <span class="cline-any cline-no">&nbsp;</span>
2615
+ <span class="cline-any cline-no">&nbsp;</span>
2616
+ <span class="cline-any cline-no">&nbsp;</span>
2617
+ <span class="cline-any cline-neutral">&nbsp;</span>
2618
+ <span class="cline-any cline-yes">2x</span>
2619
+ <span class="cline-any cline-neutral">&nbsp;</span>
2620
+ <span class="cline-any cline-yes">1x</span>
2621
+ <span class="cline-any cline-yes">1x</span>
2622
+ <span class="cline-any cline-yes">1x</span>
2623
+ <span class="cline-any cline-no">&nbsp;</span>
2624
+ <span class="cline-any cline-no">&nbsp;</span>
2625
+ <span class="cline-any cline-no">&nbsp;</span>
2626
+ <span class="cline-any cline-neutral">&nbsp;</span>
2627
+ <span class="cline-any cline-yes">1x</span>
2628
+ <span class="cline-any cline-neutral">&nbsp;</span>
2629
+ <span class="cline-any cline-yes">1x</span>
2630
+ <span class="cline-any cline-yes">1x</span>
2631
+ <span class="cline-any cline-no">&nbsp;</span>
2632
+ <span class="cline-any cline-no">&nbsp;</span>
2633
+ <span class="cline-any cline-no">&nbsp;</span>
2634
+ <span class="cline-any cline-neutral">&nbsp;</span>
2635
+ <span class="cline-any cline-yes">1x</span>
2636
+ <span class="cline-any cline-neutral">&nbsp;</span>
2637
+ <span class="cline-any cline-neutral">&nbsp;</span>
2638
+ <span class="cline-any cline-yes">1x</span>
2639
+ <span class="cline-any cline-no">&nbsp;</span>
2640
+ <span class="cline-any cline-no">&nbsp;</span>
2641
+ <span class="cline-any cline-no">&nbsp;</span>
2642
+ <span class="cline-any cline-neutral">&nbsp;</span>
2643
+ <span class="cline-any cline-yes">1x</span>
2644
+ <span class="cline-any cline-no">&nbsp;</span>
2645
+ <span class="cline-any cline-no">&nbsp;</span>
2646
+ <span class="cline-any cline-no">&nbsp;</span>
2647
+ <span class="cline-any cline-neutral">&nbsp;</span>
2648
+ <span class="cline-any cline-yes">1x</span>
2649
+ <span class="cline-any cline-yes">2x</span>
2650
+ <span class="cline-any cline-yes">2x</span>
2651
+ <span class="cline-any cline-no">&nbsp;</span>
2652
+ <span class="cline-any cline-no">&nbsp;</span>
2653
+ <span class="cline-any cline-no">&nbsp;</span>
2654
+ <span class="cline-any cline-neutral">&nbsp;</span>
2655
+ <span class="cline-any cline-neutral">&nbsp;</span>
2656
+ <span class="cline-any cline-yes">1x</span>
2657
+ <span class="cline-any cline-yes">1x</span>
2658
+ <span class="cline-any cline-no">&nbsp;</span>
2659
+ <span class="cline-any cline-no">&nbsp;</span>
2660
+ <span class="cline-any cline-no">&nbsp;</span>
2661
+ <span class="cline-any cline-neutral">&nbsp;</span>
2662
+ <span class="cline-any cline-yes">1x</span>
2663
+ <span class="cline-any cline-yes">2x</span>
2664
+ <span class="cline-any cline-yes">2x</span>
2665
+ <span class="cline-any cline-no">&nbsp;</span>
2666
+ <span class="cline-any cline-no">&nbsp;</span>
2667
+ <span class="cline-any cline-no">&nbsp;</span>
2668
+ <span class="cline-any cline-neutral">&nbsp;</span>
2669
+ <span class="cline-any cline-neutral">&nbsp;</span>
2670
+ <span class="cline-any cline-neutral">&nbsp;</span>
2671
+ <span class="cline-any cline-yes">1x</span>
2672
+ <span class="cline-any cline-neutral">&nbsp;</span>
2673
+ <span class="cline-any cline-neutral">&nbsp;</span>
2674
+ <span class="cline-any cline-neutral">&nbsp;</span>
2675
+ <span class="cline-any cline-neutral">&nbsp;</span>
2676
+ <span class="cline-any cline-neutral">&nbsp;</span>
2677
+ <span class="cline-any cline-neutral">&nbsp;</span>
2678
+ <span class="cline-any cline-neutral">&nbsp;</span>
2679
+ <span class="cline-any cline-neutral">&nbsp;</span>
2680
+ <span class="cline-any cline-neutral">&nbsp;</span>
2681
+ <span class="cline-any cline-neutral">&nbsp;</span>
2682
+ <span class="cline-any cline-neutral">&nbsp;</span>
2683
+ <span class="cline-any cline-neutral">&nbsp;</span>
2684
+ <span class="cline-any cline-neutral">&nbsp;</span>
2685
+ <span class="cline-any cline-neutral">&nbsp;</span>
2686
+ <span class="cline-any cline-neutral">&nbsp;</span>
2687
+ <span class="cline-any cline-neutral">&nbsp;</span>
2688
+ <span class="cline-any cline-neutral">&nbsp;</span>
2689
+ <span class="cline-any cline-neutral">&nbsp;</span>
2690
+ <span class="cline-any cline-neutral">&nbsp;</span>
2691
+ <span class="cline-any cline-neutral">&nbsp;</span>
2692
+ <span class="cline-any cline-neutral">&nbsp;</span>
2693
+ <span class="cline-any cline-neutral">&nbsp;</span>
2694
+ <span class="cline-any cline-neutral">&nbsp;</span>
2695
+ <span class="cline-any cline-neutral">&nbsp;</span>
2696
+ <span class="cline-any cline-neutral">&nbsp;</span>
2697
+ <span class="cline-any cline-neutral">&nbsp;</span>
2698
+ <span class="cline-any cline-neutral">&nbsp;</span>
2699
+ <span class="cline-any cline-neutral">&nbsp;</span>
2700
+ <span class="cline-any cline-neutral">&nbsp;</span>
2701
+ <span class="cline-any cline-neutral">&nbsp;</span>
2702
+ <span class="cline-any cline-neutral">&nbsp;</span>
2703
+ <span class="cline-any cline-neutral">&nbsp;</span>
2704
+ <span class="cline-any cline-neutral">&nbsp;</span>
2705
+ <span class="cline-any cline-neutral">&nbsp;</span>
2706
+ <span class="cline-any cline-neutral">&nbsp;</span>
2707
+ <span class="cline-any cline-neutral">&nbsp;</span>
2708
+ <span class="cline-any cline-neutral">&nbsp;</span>
2709
+ <span class="cline-any cline-neutral">&nbsp;</span>
2710
+ <span class="cline-any cline-neutral">&nbsp;</span>
2711
+ <span class="cline-any cline-neutral">&nbsp;</span>
2712
+ <span class="cline-any cline-neutral">&nbsp;</span>
2713
+ <span class="cline-any cline-neutral">&nbsp;</span>
2714
+ <span class="cline-any cline-neutral">&nbsp;</span>
2715
+ <span class="cline-any cline-neutral">&nbsp;</span>
2716
+ <span class="cline-any cline-neutral">&nbsp;</span>
2717
+ <span class="cline-any cline-neutral">&nbsp;</span>
2718
+ <span class="cline-any cline-neutral">&nbsp;</span>
2719
+ <span class="cline-any cline-neutral">&nbsp;</span>
2720
+ <span class="cline-any cline-neutral">&nbsp;</span>
2721
+ <span class="cline-any cline-neutral">&nbsp;</span>
2722
+ <span class="cline-any cline-neutral">&nbsp;</span>
2723
+ <span class="cline-any cline-neutral">&nbsp;</span>
2724
+ <span class="cline-any cline-neutral">&nbsp;</span>
2725
+ <span class="cline-any cline-neutral">&nbsp;</span>
2726
+ <span class="cline-any cline-neutral">&nbsp;</span>
2727
+ <span class="cline-any cline-neutral">&nbsp;</span>
2728
+ <span class="cline-any cline-neutral">&nbsp;</span>
2729
+ <span class="cline-any cline-neutral">&nbsp;</span>
2730
+ <span class="cline-any cline-neutral">&nbsp;</span>
2731
+ <span class="cline-any cline-neutral">&nbsp;</span>
2732
+ <span class="cline-any cline-neutral">&nbsp;</span>
2733
+ <span class="cline-any cline-neutral">&nbsp;</span>
2734
+ <span class="cline-any cline-neutral">&nbsp;</span>
2735
+ <span class="cline-any cline-neutral">&nbsp;</span>
2736
+ <span class="cline-any cline-neutral">&nbsp;</span>
2737
+ <span class="cline-any cline-neutral">&nbsp;</span>
2738
+ <span class="cline-any cline-neutral">&nbsp;</span>
2739
+ <span class="cline-any cline-neutral">&nbsp;</span>
2740
+ <span class="cline-any cline-neutral">&nbsp;</span>
2741
+ <span class="cline-any cline-neutral">&nbsp;</span>
2742
+ <span class="cline-any cline-neutral">&nbsp;</span>
2743
+ <span class="cline-any cline-neutral">&nbsp;</span>
2744
+ <span class="cline-any cline-neutral">&nbsp;</span>
2745
+ <span class="cline-any cline-neutral">&nbsp;</span>
2746
+ <span class="cline-any cline-neutral">&nbsp;</span>
2747
+ <span class="cline-any cline-neutral">&nbsp;</span>
2748
+ <span class="cline-any cline-neutral">&nbsp;</span>
2749
+ <span class="cline-any cline-neutral">&nbsp;</span>
2750
+ <span class="cline-any cline-neutral">&nbsp;</span>
2751
+ <span class="cline-any cline-neutral">&nbsp;</span>
2752
+ <span class="cline-any cline-neutral">&nbsp;</span>
2753
+ <span class="cline-any cline-neutral">&nbsp;</span>
2754
+ <span class="cline-any cline-neutral">&nbsp;</span>
2755
+ <span class="cline-any cline-neutral">&nbsp;</span>
2756
+ <span class="cline-any cline-neutral">&nbsp;</span>
2757
+ <span class="cline-any cline-neutral">&nbsp;</span>
2758
+ <span class="cline-any cline-neutral">&nbsp;</span>
2759
+ <span class="cline-any cline-neutral">&nbsp;</span>
2760
+ <span class="cline-any cline-neutral">&nbsp;</span>
2761
+ <span class="cline-any cline-neutral">&nbsp;</span>
2762
+ <span class="cline-any cline-neutral">&nbsp;</span>
2763
+ <span class="cline-any cline-neutral">&nbsp;</span>
2764
+ <span class="cline-any cline-neutral">&nbsp;</span>
2765
+ <span class="cline-any cline-neutral">&nbsp;</span>
2766
+ <span class="cline-any cline-neutral">&nbsp;</span>
2767
+ <span class="cline-any cline-neutral">&nbsp;</span>
2768
+ <span class="cline-any cline-neutral">&nbsp;</span>
2769
+ <span class="cline-any cline-neutral">&nbsp;</span>
2770
+ <span class="cline-any cline-neutral">&nbsp;</span>
2771
+ <span class="cline-any cline-neutral">&nbsp;</span>
2772
+ <span class="cline-any cline-neutral">&nbsp;</span>
2773
+ <span class="cline-any cline-neutral">&nbsp;</span>
2774
+ <span class="cline-any cline-neutral">&nbsp;</span>
2775
+ <span class="cline-any cline-neutral">&nbsp;</span>
2776
+ <span class="cline-any cline-neutral">&nbsp;</span>
2777
+ <span class="cline-any cline-neutral">&nbsp;</span>
2778
+ <span class="cline-any cline-neutral">&nbsp;</span>
2779
+ <span class="cline-any cline-neutral">&nbsp;</span>
2780
+ <span class="cline-any cline-neutral">&nbsp;</span>
2781
+ <span class="cline-any cline-neutral">&nbsp;</span>
2782
+ <span class="cline-any cline-neutral">&nbsp;</span>
2783
+ <span class="cline-any cline-neutral">&nbsp;</span>
2784
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
2785
+ * validators.ts
2786
+ *
2787
+ * This file contains reusable validation functions for transform argument checking.
2788
+ * Each validator accepts the parsing context and arguments to validate types, argument count, etc.
2789
+ *
2790
+ * These functions help keep transform functions clean by centralizing validation logic,
2791
+ * providing consistent error handling and context updates.
2792
+ *
2793
+ * Usage:
2794
+ * import { concatenateTransformValidator, dateArgumentValidator } from './validators';
2795
+ *
2796
+ * // In your transform function:
2797
+ * concatenateTransformValidator(context, args);
2798
+ * dateArgumentValidator(context, dateArg, 'MONTH');
2799
+ */
2800
+ &nbsp;
2801
+ import { ParseContext } from '../../ParseContext';
2802
+ import {
2803
+ COLUMN_TYPE_TO_STRING,
2804
+ COMPARISON_OPERATORS,
2805
+ ESqlDateExpression,
2806
+ ESqlMathExpression,
2807
+ ESqlWindowExpression,
2808
+ EDataType,
2809
+ MATH_OPERATORS,
2810
+ NullableValueType,
2811
+ OPERATOR_MAP,
2812
+ FUNCTION_RETURN_TYPE,
2813
+ ECustomColumnType,
2814
+ } from '../../../constants';
2815
+ import { Case, ExpressionValue, Binary, SqlFunction } from '../../../sql-types';
2816
+ &nbsp;
2817
+ export function getArgType(arg: ExpressionValue, context: ParseContext): NullableValueType {
2818
+ if (arg.type === 'column_ref') {
2819
+ const columnName = (arg as Record&lt;string, string&gt;).column.replace(/[`[\]"]/g, '');
2820
+ const column = context.columnConfigMap[columnName];
2821
+ if (!column) return null;
2822
+ // Handle formula columns by returning their resolved data type
2823
+ if ((column.columnType as number) === ECustomColumnType.FORMULA) {
2824
+ const dataType = column.columnMeta?.formulaColumnDetails?.dataType;
2825
+ return dataType ?? null;
2826
+ }
2827
+ return COLUMN_TYPE_TO_STRING[column.columnType] ?? null;
2828
+ }
2829
+ &nbsp;
2830
+ if (arg.type === EDataType.STRING) {
2831
+ return isValidDate(arg.value) ? EDataType.DATE : EDataType.STRING;
2832
+ }
2833
+ if (arg.type === EDataType.NUMBER) return EDataType.NUMBER;
2834
+ if (arg.type === EDataType.BOOLEAN) return EDataType.BOOLEAN;
2835
+ if (arg.type === EDataType.NULL) return null;
2836
+ &nbsp;
2837
+ if (arg.type === 'case') {
2838
+ const resultTypes = (arg as Case).args.map((branch) =&gt;
2839
+ branch.type === 'when' || branch.type === 'else'
2840
+ ? getArgType(branch.result as ExpressionValue, context)
2841
+ : null,
2842
+ );
2843
+ &nbsp;
2844
+ const unique = [...new Set(resultTypes)];
2845
+ return unique.length === 1 ? unique[0] : null;
2846
+ }
2847
+ &nbsp;
2848
+ if (arg.type === 'binary_expr') {
2849
+ const operator = OPERATOR_MAP.get((arg as Binary).operator) ?? (arg as Binary).operator;
2850
+ &nbsp;
2851
+ const leftType = getArgType((arg as Binary).left, context);
2852
+ const rightType = getArgType((arg as Binary).right, context);
2853
+ &nbsp;
2854
+ // Math operators
2855
+ if (MATH_OPERATORS.has(operator)) {
2856
+ if (leftType !== EDataType.NUMBER || rightType !== EDataType.NUMBER) {
2857
+ context.isValid = false;
2858
+ context.error = `Operator "${operator}" requires both operands to be numbers`;
2859
+ }
2860
+ return EDataType.NUMBER;
2861
+ }
2862
+ &nbsp;
2863
+ // Comparison operators
2864
+ if (COMPARISON_OPERATORS.has(operator)) {
2865
+ if (leftType !== rightType &amp;&amp; leftType !== null &amp;&amp; rightType !== null) {
2866
+ context.isValid = false;
2867
+ context.error = `Please ensure both sides of the comparison are of the same type`;
2868
+ }
2869
+ return EDataType.BOOLEAN;
2870
+ }
2871
+ &nbsp;
2872
+ return null;
2873
+ }
2874
+ <span class="missing-if-branch" title="if path not taken" >I</span>
2875
+ if (arg.ty<span class="cstat-no" title="statement not covered" >pe === 'expr_</span>list') {
2876
+ const types = (arg.value as ExpressionValue[]).map((v) =&gt; getArgType(v, context));
2877
+ retu<span class="missing-if-branch" title="if path not taken" >I</span>rn types.find((t) =&gt; t !== null) || null;
2878
+ }<span class="cstat-no" title="statement not covered" ></span>
2879
+ <span class="cstat-no" title="statement not covered" ></span>
2880
+ if (arg.type === 'function') {
2881
+ const fnName = (arg as SqlFunction).name.name[0].value.toUpperCase(<span class="branch-1 cbranch-no" title="branch not covered" >);</span>
2882
+ const args =
2883
+ (arg as SqlFunction).args?.type === 'expr_list'
2884
+ ? (arg as SqlFunction).args.valu<span class="branch-0 cbranch-no" title="branch not covered" >e</span>
2885
+ : [(arg as SqlFunction).args];
2886
+ &nbsp;
2887
+ // Handle specific SQL functions
2888
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (fnName === 'COALESCE') {
2889
+ co<span class="cstat-no" title="statement not covered" >nst types = args.map((a) =&gt; getArgType</span>(a, context));
2890
+ <span class="missing-if-branch" title="if path not taken" >I</span> return types.find((t) =&gt; t !== null) || null;
2891
+ }<span class="cstat-no" title="statement not covered" ></span>
2892
+ &nbsp;
2893
+ // Resolve return type for precomputed functions
2894
+ const returnType = FUNCTION_RETURN_TYPE[fnName];
2895
+ if (return<span class="branch-1 cbranch-no" title="branch not covered" >Type)</span> return returnType;
2896
+ &nbsp;
2897
+ return null;<span class="branch-1 cbranch-no" title="branch not covered" ></span>
2898
+ }
2899
+ &nbsp;
2900
+ // Handle SQL expressions
2901
+ if (arg.type === 'sql_expr') {
2902
+ const sqlValue = (arg as any).value;
2903
+ &nbsp;
2904
+ if (Object.values(ESqlDateExpression).includes(sqlValue)) return EDataType.DATE;
2905
+ if (Object.values(ESqlMathExpression).includes(sqlValue)) return EDataType.NUMBER;
2906
+ if (Object.values(ESqlWindowExpression).some((expr) =&gt; sqlValue.includes(expr)))
2907
+ return EDataType.NUMBER;
2908
+ &nbsp;
2909
+ return null;
2910
+ }
2911
+ &nbsp;
2912
+ return<span class="missing-if-branch" title="else path not taken" >E</span> null;
2913
+ }
2914
+ &nbsp;
2915
+ function isValidDate(value: string): boolean {
2916
+ if (typeof value !== 'string') return false;
2917
+ const isoDateRegex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;
2918
+ if (!isoDateRegex.test(value)) return false;
2919
+ <span class="cstat-no" title="statement not covered" ></span>
2920
+ const date = new Date(value);
2921
+ if<span class="missing-if-branch" title="if path not taken" >I</span> (isNaN(date.getTime())) return false;
2922
+ <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
2923
+ const <span class="cstat-no" title="statement not covered" >[year, month, day]<span class="fstat-no" title="function not covered" > =</span> valu<span class="cstat-no" title="statement not covered" >e.split('-'</span>).map(Numb</span>er);
2924
+ return (
2925
+ date.getUTCFullYear() === year &amp;&amp; date.getUTCMonth() + 1 === month &amp;&amp; date.getUTCDate() === day
2926
+ );
2927
+ }
2928
+ &nbsp;
2929
+ export functio<span class="branch-1 cbranch-no" title="branch not covered" >n ifTransfo</span>rmValidator(context: ParseContext, args: ExpressionValue[]) {
2930
+ if (args.length &lt; 3) {
2931
+ context.isValid = false;
2932
+ context.error = 'IF() requires 3 arguments';
2933
+ return;<span class="branch-1 cbranch-no" title="branch not covered" ></span>
2934
+ }
2935
+ const trueValueType = getArgType(args[1], context);
2936
+ const falseValueType = getArgType(args[2], context);
2937
+ if (tr<span class="missing-if-branch" title="if path not taken" >I</span>ueValueType !== falseValueType) {
2938
+ context.<span class="cstat-no" title="statement not covered" >isValid = false;</span>
2939
+ context.error = `Both true value and false value should of same type`;
2940
+ return;
2941
+ }
2942
+ if<span class="missing-if-branch" title="else path not taken" >E</span> (falseValueType) context.returnType = falseValueType;
2943
+ }
2944
+ &nbsp;
2945
+ export function todayTransformValidator(context: ParseContext): void {
2946
+ contex<span class="missing-if-branch" title="if path not taken" >I</span>t.returnType = 'date';
2947
+ }<span class="cstat-no" title="statement not covered" ></span>
2948
+ <span class="missing-if-branch" title="if path not taken" >I</span>
2949
+ export funct<span class="cstat-no" title="statement not covered" >ion nowTransformValidator(context: Pa</span>rseContext): void {
2950
+ context.returnType = 'datetime';
2951
+ }
2952
+ <span class="cstat-no" title="statement not covered" ></span>
2953
+ export function concatenateTransformValidator(context: ParseContext, args: ExpressionValue[]) {
2954
+ if (args.length &lt; 2) {
2955
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
2956
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'C</span>ONCATENATE() requires at least 2 arguments';
2957
+ return;
2958
+ }<span class="missing-if-branch" title="else path not taken" >E</span>
2959
+ context.returnType = 'string';
2960
+ }<span class="cstat-no" title="statement not covered" ></span>
2961
+ <span class="cstat-no" title="statement not covered" ></span>
2962
+ export f<span class="cstat-no" title="statement not covered" >unction lowerT</span>ransformValidator(context: ParseContext, arg: ExpressionValue) {
2963
+ if (!arg) {<span class="cstat-no" title="statement not covered" ></span>
2964
+ <span class="cstat-no" title="statement not covered" > context.isValid = false;</span>
2965
+ context.error = 'LOWER() requires 1 argument';
2966
+ return;
2967
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
2968
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType(arg, context) !=</span>= 'string') {
2969
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
2970
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'Argument to LOWER must be of type string';
2971
+ return;
2972
+ }
2973
+ context.returnType = 'string';
2974
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
2975
+ <span class="cstat-no" title="statement not covered" ></span>
2976
+ export f<span class="cstat-no" title="statement not covered" >unction dateArgumentValidator(context: ParseContext, arg: ExpressionVal</span>ue, fnName: string) {
2977
+ if (!a<span class="cstat-no" title="statement not covered" >rg) {</span>
2978
+ context.isValid = false;
2979
+ <span class="missing-if-branch" title="else path not taken" >E</span>context.error = `${fnName}() requires 1 argument`;
2980
+ return;
2981
+ }
2982
+ if (getArgType(arg, context) !== 'date') {
2983
+ context.isValid = false;
2984
+ context.error = `Argument to ${fnName} must be of type date in format 'YYYY-MM-DD'`;
2985
+ return;
2986
+ }
2987
+ context.returnType = 'number';
2988
+ }
2989
+ <span class="missing-if-branch" title="if path not taken" >I</span>
2990
+ export f<span class="cstat-no" title="statement not covered" >unction trimTransformVali</span>dator(context: ParseContext, arg: ExpressionValue) {
2991
+ if (!a<span class="cstat-no" title="statement not covered" >rg) {</span>
2992
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
2993
+ context.error = 'TRIM() requires 1 argument';
2994
+ return;
2995
+ }
2996
+ if (getArgType(arg, context) !== 'string') {
2997
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
2998
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'Argument to </span>TRIM must be of type string';
2999
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3000
+ }<span class="cstat-no" title="statement not covered" ></span>
3001
+ context.returnType = 'string';
3002
+ }<span class="missing-if-branch" title="else path not taken" >E</span>
3003
+ &nbsp;
3004
+ export function upperTransformValidator(context: ParseContext, arg: ExpressionValue) {
3005
+ if (!arg) {
3006
+ context.isValid = false;
3007
+ <span class="cstat-no" title="statement not covered" > context.error = 'UPPER() requir</span>es 1 argument';
3008
+ return;
3009
+ }<span class="fstat-no" title="function not covered" ></span>
3010
+ if<span class="cstat-no" title="statement not covered" > (getArgType(arg, context) !== 'string') {</span>
3011
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3012
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'Argument to UPPER must be of type stri</span>ng';
3013
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3014
+ }
3015
+ co<span class="cstat-no" title="statement not covered" >ntext.returnType = 'string';</span>
3016
+ }<span class="cstat-no" title="statement not covered" ></span>
3017
+ <span class="cstat-no" title="statement not covered" ></span>
3018
+ export f<span class="cstat-no" title="statement not covered" >unction </span>lenTransformValidator(context: ParseContext, arg: ExpressionValue) {
3019
+ if (!arg) {
3020
+ <span class="cstat-no" title="statement not covered" > context.isValid = false;</span>
3021
+ context.error = 'LEN() requires exactly 1 argument';
3022
+ return;
3023
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3024
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType(arg, context) !=</span>= 'string') {
3025
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3026
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'Argument to LEN must be of type string';
3027
+ return;
3028
+ }<span class="missing-if-branch" title="else path not taken" >E</span>
3029
+ context.returnType = 'number';
3030
+ }
3031
+ &nbsp;
3032
+ export function leftTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3033
+ if<span class="cstat-no" title="statement not covered" > (args.length !== 2) {</span>
3034
+ context.isValid = false;
3035
+ context.error = 'LEFT() requires exactly 2 arguments';
3036
+ <span class="missing-if-branch" title="if path not taken" >I</span>return;
3037
+ }<span class="cstat-no" title="statement not covered" ></span>
3038
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType(args[0], context) !== 'string') {</span>
3039
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3040
+ context.error = 'First argument to LEFT must be of type string';
3041
+ <span class="missing-if-branch" title="else path not taken" >E</span>return;
3042
+ }
3043
+ if (getArgType(args[1], context) !== 'number') {
3044
+ context.isValid = false;
3045
+ context.error = 'Second argument to LEFT must be of type number';
3046
+ <span class="cstat-no" title="statement not covered" > return;</span>
3047
+ }
3048
+ context.returnType = 'string';
3049
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3050
+ <span class="cstat-no" title="statement not covered" ></span>
3051
+ export f<span class="cstat-no" title="statement not covered" >unction rightTransformValidator(context: ParseContext</span>, args: ExpressionValue[]) {
3052
+ if (ar<span class="cstat-no" title="statement not covered" >gs.lengt</span>h !== 2) {
3053
+ context.isValid = false;
3054
+ <span class="missing-if-branch" title="else path not taken" >E</span>context.error = 'RIGHT() requires exactly 2 arguments';
3055
+ return;
3056
+ }
3057
+ if (getArgType(args[0], context) !== 'string') {
3058
+ context.isValid = false;
3059
+ <span class="cstat-no" title="statement not covered" > context.error = 'First argument</span> to RIGHT must be of type string';
3060
+ return;
3061
+ }
3062
+ if<span class="missing-if-branch" title="if path not taken" >I</span> (getArgType(args[1], context) !== 'number') {
3063
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3064
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'Second argument to RIGHT must be of type n</span>umber';
3065
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3066
+ }
3067
+ co<span class="missing-if-branch" title="else path not taken" >E</span>ntext.returnType = 'string';
3068
+ }
3069
+ &nbsp;
3070
+ export function replaceTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3071
+ const types = ['string', 'number', 'number', 'string'];
3072
+ if<span class="cstat-no" title="statement not covered" > (args.length !== types.length) {</span>
3073
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3074
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'REPLACE() requires 4 arguments';</span>
3075
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3076
+ }
3077
+ ar<span class="cstat-no" title="statement not covered" >gs.forEach((arg, i) =&gt; {</span>
3078
+ if (getArgType(arg, context) !== types[i]) {
3079
+ context.isValid = false;
3080
+ <span class="missing-if-branch" title="if path not taken" >I</span> context.error = `Argument ${i + 1} to REPLACE must be of type ${types[i]}`;
3081
+ re<span class="cstat-no" title="statement not covered" >turn;</span>
3082
+ }<span class="cstat-no" title="statement not covered" ></span>
3083
+ });<span class="cstat-no" title="statement not covered" ></span>
3084
+ context.returnType = 'string';
3085
+ }<span class="missing-if-branch" title="else path not taken" >E</span>
3086
+ &nbsp;
3087
+ export function reptTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3088
+ const types = ['string', 'number'];
3089
+ if (args.length !== types.length) {
3090
+ <span class="cstat-no" title="statement not covered" > context.isValid = false;</span>
3091
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'REPT() requi</span>res 2 arguments';
3092
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3093
+ }<span class="cstat-no" title="statement not covered" ></span>
3094
+ args.forEach((arg, i) =&gt; {
3095
+ <span class="cstat-no" title="statement not covered" > if (getArgType(arg, context) !=</span>= types[i]) {
3096
+ context.isValid = false;
3097
+ context.error = `Argument ${i + 1} to REPT must be of type ${types[i]}`;
3098
+ return;
3099
+ <span class="missing-if-branch" title="if path not taken" >I</span>}
3100
+ });<span class="cstat-no" title="statement not covered" ></span>
3101
+ contex<span class="cstat-no" title="statement not covered" >t.returnType = 'string';</span>
3102
+ }<span class="cstat-no" title="statement not covered" ></span>
3103
+ &nbsp;
3104
+ export function matchTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3105
+ const types = ['string', 'string'];
3106
+ if (args.length !== types.length) {
3107
+ context.isValid = false;
3108
+ context.error = 'MATCH() requires 2 arguments';
3109
+ return;
3110
+ }
3111
+ args.forEach((arg, i) =&gt; {
3112
+ if (getArgType(arg, context) !== types[i]) {
3113
+ context.isValid = false;
3114
+ context.error = `Argument ${i + 1} to MATCH must be of type ${types[i]}`;
3115
+ <span class="missing-if-branch" title="if path not taken" >I</span> return;
3116
+ }<span class="cstat-no" title="statement not covered" ></span>
3117
+ });<span class="cstat-no" title="statement not covered" ></span>
3118
+ contex<span class="cstat-no" title="statement not covered" >t.return</span>Type = 'boolean';
3119
+ }
3120
+ &nbsp;
3121
+ export f<span class="missing-if-branch" title="if path not taken" >I</span>unction dateAddTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3122
+ if (args.l<span class="cstat-no" title="statement not covered" >ength !== 2) {</span>
3123
+ context.<span class="cstat-no" title="statement not covered" >isValid = false;</span>
3124
+ context.<span class="cstat-no" title="statement not covered" >error = </span>'DATEADD() requires 2 arguments';
3125
+ return;
3126
+ }
3127
+ if (getArgType(args[0], context) !== 'date') {
3128
+ context.isValid = false;
3129
+ context.error = "First argument to DATEADD must be of type date in format 'YYYY-MM-DD'";
3130
+ return;
3131
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3132
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType(args[1], context</span>) !== 'number') {
3133
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3134
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'Second argument to DATEADD must be of type number';
3135
+ return;
3136
+ }
3137
+ context.returnType = 'date';
3138
+ }
3139
+ &nbsp;
3140
+ export function dateDiffTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3141
+ if (args.length !== 2) {
3142
+ context.isValid = false;
3143
+ context.error = 'DATEDIFF() requires 2 arguments';
3144
+ return;
3145
+ }
3146
+ co<span class="missing-if-branch" title="if path not taken" >I</span>nst types = ['date', 'date'];
3147
+ args.f<span class="cstat-no" title="statement not covered" >orEach((arg, i) =&gt; {</span>
3148
+ if (<span class="cstat-no" title="statement not covered" >getArgType(arg, context) !== types[i]) {</span>
3149
+ co<span class="cstat-no" title="statement not covered" >ntext.is</span>Valid = false;
3150
+ context.error = `Argument ${i + 1} to DATEDIFF must be of type ${types[i]} in format 'YYYY-MM-DD'`;
3151
+ return;
3152
+ }
3153
+ });
3154
+ context.returnType = 'number';
3155
+ }
3156
+ <span class="missing-if-branch" title="if path not taken" >I</span>
3157
+ export f<span class="cstat-no" title="statement not covered" >unction dayTransformValid</span>ator(context: ParseContext, arg: ExpressionValue) {
3158
+ if (!a<span class="cstat-no" title="statement not covered" >rg) {</span>
3159
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3160
+ context.error = 'DAY() requires 1 argument';
3161
+ return;
3162
+ }
3163
+ if (getArgType(arg, context) !== 'date') {
3164
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
3165
+ cont<span class="cstat-no" title="statement not covered" >ext.error = "Argument to </span>DAY must be of type date in format 'YYYY-MM-DD'";
3166
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3167
+ }<span class="cstat-no" title="statement not covered" ></span>
3168
+ context.returnType = 'number';
3169
+ }
3170
+ &nbsp;
3171
+ export function monthTransformValidator(context: ParseContext, arg: ExpressionValue) {
3172
+ if (!arg) {
3173
+ context.isValid = false;
3174
+ context.error = 'MONTH() requires 1 argument';
3175
+ return;
3176
+ }
3177
+ if (getArgType(arg, context) !== 'date') {
3178
+ context.isValid = false;
3179
+ context.error = "Argument to MONTH must be of type date in format 'YYYY-MM-DD'";
3180
+ <span class="missing-if-branch" title="if path not taken" >I</span>return;
3181
+ }<span class="cstat-no" title="statement not covered" ></span>
3182
+ contex<span class="cstat-no" title="statement not covered" >t.returnType = 'number';</span>
3183
+ }<span class="cstat-no" title="statement not covered" ></span>
3184
+ &nbsp;
3185
+ expo<span class="missing-if-branch" title="else path not taken" >E</span>rt function yearTransformValidator(context: ParseContext, arg: ExpressionValue) {
3186
+ if (!arg) {
3187
+ context.isValid = false;
3188
+ context.error = 'YEAR() requires 1 argument';
3189
+ return;
3190
+ }<span class="cstat-no" title="statement not covered" ></span>
3191
+ if (getArgType(arg, context) !== 'date') {
3192
+ context.isValid = false;
3193
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.error = "Argument to YEAR must be of type date in format 'YYYY-MM-DD'";
3194
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3195
+ }<span class="cstat-no" title="statement not covered" ></span>
3196
+ contex<span class="cstat-no" title="statement not covered" >t.return</span>Type = 'number';
3197
+ }
3198
+ <span class="missing-if-branch" title="else path not taken" >E</span>
3199
+ export function eomonthTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3200
+ if (args.length &lt; 1 || args.length &gt; 2) {
3201
+ context.isValid = false;
3202
+ context.error = 'EOMONTH() requires 1 or 2 arguments';
3203
+ <span class="cstat-no" title="statement not covered" > return;</span>
3204
+ }
3205
+ &nbsp;
3206
+ if<span class="missing-if-branch" title="if path not taken" >I</span> (getArgType(args[0], context) !== 'date') {
3207
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3208
+ cont<span class="cstat-no" title="statement not covered" >ext.error = "First argument to EOMONTH must be</span> of type date in format 'YYYY-MM-DD'";
3209
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3210
+ }
3211
+ <span class="missing-if-branch" title="else path not taken" >E</span>
3212
+ if (args.length === 2 &amp;&amp; getArgType(args[1], context) !== 'number') {
3213
+ context.isValid = false;
3214
+ context.error = 'Second argument to EOMONTH must be of type number';
3215
+ return;
3216
+ }<span class="cstat-no" title="statement not covered" ></span>
3217
+ &nbsp;
3218
+ context.returnType = 'date';
3219
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3220
+ <span class="cstat-no" title="statement not covered" ></span>
3221
+ export f<span class="cstat-no" title="statement not covered" >unction divideTransformValidator(context: ParseContext,</span> args: ExpressionValue[]) {
3222
+ if (ar<span class="cstat-no" title="statement not covered" >gs.lengt</span>h !== 2) {
3223
+ context.isValid = false;
3224
+ <span class="missing-if-branch" title="else path not taken" >E</span>context.error = 'DIVIDE() requires 2 arguments';
3225
+ return;
3226
+ }
3227
+ &nbsp;
3228
+ const types = ['number', 'number'];
3229
+ ar<span class="cstat-no" title="statement not covered" >gs.forEach((arg, i) =&gt; {</span>
3230
+ if (<span class="cstat-no" title="statement not covered" >getArgType(arg, context) </span>!== types[i]) {
3231
+ co<span class="cstat-no" title="statement not covered" >ntext.isValid = false;</span>
3232
+ co<span class="cstat-no" title="statement not covered" >ntext.er</span>ror = `Argument ${i + 1} to DIVIDE must be of type ${types[i]}`;
3233
+ return;
3234
+ <span class="cstat-no" title="statement not covered" > }</span>
3235
+ });
3236
+ &nbsp;
3237
+ co<span class="missing-if-branch" title="if path not taken" >I</span>ntext.returnType = 'number';
3238
+ }<span class="cstat-no" title="statement not covered" ></span>
3239
+ <span class="cstat-no" title="statement not covered" ></span>
3240
+ export f<span class="cstat-no" title="statement not covered" >unction </span>andTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3241
+ if (args.length &lt; 2) {
3242
+ context.isValid = false;
3243
+ context.error = 'AND() requires at least 2 arguments';
3244
+ retu<span class="missing-if-branch" title="if path not taken" >I</span>rn;
3245
+ }<span class="cstat-no" title="statement not covered" ></span>
3246
+ <span class="cstat-no" title="statement not covered" ></span>
3247
+ args.forEa<span class="cstat-no" title="statement not covered" >ch((arg,</span> i) =&gt; {
3248
+ if (getArgType(arg, context) !== 'boolean') {
3249
+ context.isValid = false;
3250
+ context.error = `Argument ${i + 1} to AND must be of type boolean`;
3251
+ return;
3252
+ }
3253
+ })<span class="missing-if-branch" title="if path not taken" >I</span>;
3254
+ <span class="cstat-no" title="statement not covered" ></span>
3255
+ contex<span class="cstat-no" title="statement not covered" >t.returnType = 'boolean';</span>
3256
+ }<span class="cstat-no" title="statement not covered" ></span>
3257
+ &nbsp;
3258
+ export function orTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3259
+ if (ar<span class="missing-if-branch" title="if path not taken" >I</span>gs.length &lt; 2) {
3260
+ context.<span class="cstat-no" title="statement not covered" >isValid = false;</span>
3261
+ context.<span class="cstat-no" title="statement not covered" >error = 'OR() requires at least 2 arguments';</span>
3262
+ return;<span class="cstat-no" title="statement not covered" ></span>
3263
+ }
3264
+ &nbsp;
3265
+ args.forEach((arg, i) =&gt; {
3266
+ if (getArgType(arg, context) !== 'boolean') {
3267
+ context.isValid = false;
3268
+ <span class="missing-if-branch" title="if path not taken" >I</span> context.error = `Argument ${i + 1} to OR must be of type boolean`;
3269
+ re<span class="cstat-no" title="statement not covered" >turn;</span>
3270
+ }<span class="cstat-no" title="statement not covered" ></span>
3271
+ });<span class="cstat-no" title="statement not covered" ></span>
3272
+ &nbsp;
3273
+ context.returnType = 'boolean';
3274
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3275
+ <span class="cstat-no" title="statement not covered" ></span>
3276
+ export funct<span class="cstat-no" title="statement not covered" >ion ceilTransformValidator(context: ParseContext, arg: ExpressionVa</span>lue) {
3277
+ if (!arg) <span class="cstat-no" title="statement not covered" >{</span>
3278
+ context.isValid = false;
3279
+ context.error = 'CEIL() requires 1 argument';
3280
+ return;
3281
+ }
3282
+ &nbsp;
3283
+ if<span class="missing-if-branch" title="if path not taken" >I</span> (getArgType(arg, context) !== 'number') {
3284
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3285
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'Argument to CEIL must be of type </span>number';
3286
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3287
+ }
3288
+ <span class="missing-if-branch" title="if path not taken" >I</span>
3289
+ contex<span class="cstat-no" title="statement not covered" >t.returnType = 'number';</span>
3290
+ }<span class="cstat-no" title="statement not covered" ></span>
3291
+ <span class="cstat-no" title="statement not covered" ></span>
3292
+ export function floorTransformValidator(context: ParseContext, arg: ExpressionValue) {
3293
+ if (!arg) {
3294
+ context.isValid = false;
3295
+ context.error = 'FLOOR() requires 1 argument';
3296
+ <span class="missing-if-branch" title="if path not taken" >I</span>return;
3297
+ }<span class="cstat-no" title="statement not covered" ></span>
3298
+ <span class="cstat-no" title="statement not covered" ></span>
3299
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType</span>(arg, context) !== 'number') {
3300
+ context.isValid = false;
3301
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.error = 'Argument to FLOOR must be of type number';
3302
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3303
+ }<span class="cstat-no" title="statement not covered" ></span>
3304
+ <span class="cstat-no" title="statement not covered" ></span>
3305
+ context.returnType = 'number';
3306
+ }
3307
+ &nbsp;
3308
+ export function absTransformValidator(context: ParseContext, arg: ExpressionValue) {
3309
+ if<span class="missing-if-branch" title="if path not taken" >I</span> (!arg) {
3310
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3311
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'ABS() requires 1 argument';</span>
3312
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3313
+ }
3314
+ <span class="missing-if-branch" title="if path not taken" >I</span>
3315
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType(arg, context) !=</span>= 'number') {
3316
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3317
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'Argument to ABS must be of type number';
3318
+ return;
3319
+ }
3320
+ &nbsp;
3321
+ context.returnType = 'number';
3322
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3323
+ <span class="cstat-no" title="statement not covered" ></span>
3324
+ export f<span class="cstat-no" title="statement not covered" >unction roundTransformValidator(context: ParseContext</span>, args: ExpressionValue[]) {
3325
+ if (ar<span class="cstat-no" title="statement not covered" >gs.lengt</span>h &lt; 1 || args.length &gt; 2) {
3326
+ context.isValid = false;
3327
+ context.error = 'ROUND() requires 1 or 2 arguments';
3328
+ <span class="missing-if-branch" title="if path not taken" >I</span>return;
3329
+ }<span class="cstat-no" title="statement not covered" ></span>
3330
+ <span class="cstat-no" title="statement not covered" ></span>
3331
+ const <span class="cstat-no" title="statement not covered" >valueTyp</span>e = getArgType(args[0], context);
3332
+ if (valueType !== 'number') {
3333
+ <span class="missing-if-branch" title="else path not taken" >E</span>context.isValid = false;
3334
+ context.error = 'First argument to ROUND must be of type number';
3335
+ retu<span class="missing-if-branch" title="if path not taken" >I</span>rn;
3336
+ }<span class="cstat-no" title="statement not covered" ></span>
3337
+ <span class="cstat-no" title="statement not covered" ></span>
3338
+ if (args[1<span class="cstat-no" title="statement not covered" >]) {</span>
3339
+ const decimalType = getArgType(args[1], context);
3340
+ if (decimalType !== 'number') {
3341
+ context.isValid = false;
3342
+ context.error = 'Second argument to ROUND must be of type number';
3343
+ return;
3344
+ <span class="missing-if-branch" title="if path not taken" >I</span>}
3345
+ }<span class="cstat-no" title="statement not covered" ></span>
3346
+ <span class="cstat-no" title="statement not covered" ></span>
3347
+ contex<span class="cstat-no" title="statement not covered" >t.return</span>Type = 'number';
3348
+ }
3349
+ &nbsp;
3350
+ expo<span class="missing-if-branch" title="if path not taken" >I</span>rt function expTransformValidator(context: ParseContext, arg: ExpressionValue) {
3351
+ if (!a<span class="cstat-no" title="statement not covered" >rg) {</span>
3352
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3353
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'EXP() requires exactly 1 argument';
3354
+ return;
3355
+ }
3356
+ const type = getArgType(arg, context);
3357
+ if (type !== 'number') {
3358
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
3359
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'Argument to </span>EXP must be of type number';
3360
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3361
+ }<span class="cstat-no" title="statement not covered" ></span>
3362
+ context.returnType = 'number';
3363
+ }
3364
+ &nbsp;
3365
+ export f<span class="missing-if-branch" title="if path not taken" >I</span>unction powTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3366
+ if (args.l<span class="cstat-no" title="statement not covered" >ength !== 2) {</span>
3367
+ context.<span class="cstat-no" title="statement not covered" >isValid = false;</span>
3368
+ context.<span class="cstat-no" title="statement not covered" >error = </span>'POW() requires exactly 2 arguments';
3369
+ return;
3370
+ }
3371
+ const types = ['number', 'number'];
3372
+ args.forEach((arg, i) =&gt; {
3373
+ if (getArgType(arg, context) !== types[i]) {
3374
+ <span class="missing-if-branch" title="if path not taken" >I</span> context.isValid = false;
3375
+ co<span class="cstat-no" title="statement not covered" >ntext.error = `Argument $</span>{i + 1} to POW must be of type ${types[i]}`;
3376
+ re<span class="cstat-no" title="statement not covered" >turn;</span>
3377
+ }<span class="cstat-no" title="statement not covered" ></span>
3378
+ });
3379
+ context.returnType = 'number';
3380
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3381
+ <span class="cstat-no" title="statement not covered" ></span>
3382
+ export funct<span class="cstat-no" title="statement not covered" >ion logTransformValidator(context: ParseContext, args: ExpressionVa</span>lue[]) {
3383
+ if (args.l<span class="cstat-no" title="statement not covered" >ength &lt; </span>1 || args.length &gt; 2) {
3384
+ context.isValid = false;
3385
+ context.error = 'LOG() requires 1 or 2 arguments';
3386
+ return;
3387
+ }
3388
+ args.forEach((arg, i) =&gt; {
3389
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (getArgType(arg, context) !== 'number') {
3390
+ co<span class="cstat-no" title="statement not covered" >ntext.isValid = false;</span>
3391
+ co<span class="cstat-no" title="statement not covered" >ntext.error = `Argument ${i + 1} to LOG must be of type</span> number`;
3392
+ re<span class="cstat-no" title="statement not covered" >turn;</span>
3393
+ }
3394
+ })<span class="missing-if-branch" title="if path not taken" >I</span>;
3395
+ contex<span class="cstat-no" title="statement not covered" >t.returnType = 'number';</span>
3396
+ }<span class="cstat-no" title="statement not covered" ></span>
3397
+ <span class="cstat-no" title="statement not covered" ></span>
3398
+ export function sqrtTransformValidator(context: ParseContext, arg: ExpressionValue) {
3399
+ if (!arg) {
3400
+ context.isValid = false;
3401
+ conte<span class="fstat-no" title="function not covered" >xt.error = 'SQRT() req</span>uires exactly 1 arguments';
3402
+ <span class="cstat-no" title="statement not covered" > return;</span>
3403
+ }<span class="cstat-no" title="statement not covered" ></span>
3404
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType(arg, context) !== 'number') {</span>
3405
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3406
+ context.error = 'Argument to SQRT must be of type number';
3407
+ return;<span class="cstat-no" title="statement not covered" ></span>
3408
+ }<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
3409
+ contex<span class="cstat-no" title="statement not covered" >t.returnType = 'number';</span>
3410
+ }<span class="cstat-no" title="statement not covered" ></span>
3411
+ <span class="cstat-no" title="statement not covered" ></span>
3412
+ export funct<span class="cstat-no" title="statement not covered" >ion modT</span>ransformValidator(context: ParseContext, args: ExpressionValue[]) {
3413
+ if (args.length !== 2) {
3414
+ context.isValid = false;
3415
+ <span class="cstat-no" title="statement not covered" > context.error = 'MOD() requires</span> exactly 2 arguments';
3416
+ return;
3417
+ }
3418
+ co<span class="missing-if-branch" title="if path not taken" >I</span>nst types = ['number', 'number'];
3419
+ args.f<span class="cstat-no" title="statement not covered" >orEach((arg, i) =&gt; {</span>
3420
+ if (<span class="cstat-no" title="statement not covered" >getArgType(arg, context) !== types[i]) {</span>
3421
+ co<span class="cstat-no" title="statement not covered" >ntext.is</span>Valid = false;
3422
+ context.error = `Argument ${i + 1} to MOD must be of type ${types[i]}`;
3423
+ <span class="missing-if-branch" title="if path not taken" >I</span> return;
3424
+ }<span class="cstat-no" title="statement not covered" ></span>
3425
+ });<span class="cstat-no" title="statement not covered" ></span>
3426
+ contex<span class="cstat-no" title="statement not covered" >t.return</span>Type = 'number';
3427
+ }
3428
+ &nbsp;
3429
+ export function notTransformValidator(context: ParseContext, arg: ExpressionValue) {
3430
+ if (!arg) {
3431
+ context.isValid = false;
3432
+ context.error = 'NOT() requires exactly 1 argument';
3433
+ return;
3434
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3435
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType(arg, context) !=</span>= 'boolean') {
3436
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3437
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'Argument to NOT must be of type boolean';
3438
+ return;
3439
+ }
3440
+ context.returnType = 'boolean';
3441
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3442
+ <span class="cstat-no" title="statement not covered" ></span>
3443
+ export funct<span class="cstat-no" title="statement not covered" >ion randTransformValidator(context: ParseContext) {</span>
3444
+ context.re<span class="cstat-no" title="statement not covered" >turnType</span> = 'number';
3445
+ }
3446
+ &nbsp;
3447
+ export function randBetweenTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3448
+ if (args.length !== 2) {
3449
+ context.isValid = false;
3450
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.error = 'RAND_BETWEEN() requires exactly 2 arguments';
3451
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3452
+ }<span class="cstat-no" title="statement not covered" ></span>
3453
+ const <span class="cstat-no" title="statement not covered" >types = </span>['number', 'number'];
3454
+ args.forEach((arg, i) =&gt; {
3455
+ if (getArgType(arg, context) !== types[i]) {
3456
+ co<span class="missing-if-branch" title="if path not taken" >I</span>ntext.isValid = false;
3457
+ contex<span class="cstat-no" title="statement not covered" >t.error = `Argument ${i +</span> 1} to RAND_BETWEEN must be of type ${types[i]}`;
3458
+ return<span class="cstat-no" title="statement not covered" >;</span>
3459
+ }<span class="cstat-no" title="statement not covered" ></span>
3460
+ });
3461
+ context.returnType = 'number';
3462
+ }
3463
+ &nbsp;
3464
+ export fu<span class="fstat-no" title="function not covered" >nction averageTransformValid</span>ator(context: ParseContext, args: ExpressionValue[]) {
3465
+ if<span class="cstat-no" title="statement not covered" > (args.length &lt; 1) {</span>
3466
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3467
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'AVERAGE() requires at least 1 argument';</span>
3468
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3469
+ }
3470
+ fo<span class="cstat-no" title="statement not covered" >r (let i = 0;<span class="cstat-no" title="statement not covered" > i</span> &lt; args.length; i++) {</span>
3471
+ if (<span class="cstat-no" title="statement not covered" >getArgType(args[i], context) !== 'number') {</span>
3472
+ contex<span class="cstat-no" title="statement not covered" >t.isValid = false;</span>
3473
+ contex<span class="cstat-no" title="statement not covered" >t.error = `Argument ${i + 1} to AVERAGE must be of type number`;</span>
3474
+ return<span class="cstat-no" title="statement not covered" >;</span>
3475
+ }
3476
+ }
3477
+ co<span class="cstat-no" title="statement not covered" >ntext.returnType = 'number';</span>
3478
+ }<span class="cstat-no" title="statement not covered" ></span>
3479
+ <span class="cstat-no" title="statement not covered" ></span>
3480
+ export function averageIfTransformValidator(
3481
+ contex<span class="cstat-no" title="statement not covered" >t: Parse</span>Context,
3482
+ valueList: ExpressionValue[],
3483
+ co<span class="cstat-no" title="statement not covered" >ndition: ExpressionValue,</span>
3484
+ ) {
3485
+ if (valueList.length &lt; 1) {
3486
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
3487
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'AVERAGE_IF()</span> requires at least one value to average';
3488
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3489
+ }<span class="cstat-no" title="statement not covered" ></span>
3490
+ &nbsp;
3491
+ for (let i = 0; i &lt; valueList.length; i++) {
3492
+ if (<span class="missing-if-branch" title="if path not taken" >I</span>getArgType(valueList[i], context) !== 'number') {
3493
+ contex<span class="cstat-no" title="statement not covered" >t.isValid = false;</span>
3494
+ contex<span class="cstat-no" title="statement not covered" >t.error = `Argument ${i + 1} in value list must be of type number`;</span>
3495
+ return<span class="cstat-no" title="statement not covered" >;</span>
3496
+ }
3497
+ }
3498
+ &nbsp;
3499
+ if (condition.type !== 'string') {
3500
+ context.isValid = false;
3501
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.error =
3502
+ 'T<span class="cstat-no" title="statement not covered" >he first argument in AVER</span>AGE_IF must be a string representing a condition expression';
3503
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3504
+ }<span class="cstat-no" title="statement not covered" ></span>
3505
+ &nbsp;
3506
+ context.returnType = 'number';
3507
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3508
+ <span class="cstat-no" title="statement not covered" ></span>
3509
+ export funct<span class="cstat-no" title="statement not covered" >ion averageXNegTransformValidator(context: ParseContext, valueList: Expression</span>Value[]) {
3510
+ if (valueL<span class="cstat-no" title="statement not covered" >ist.leng</span>th &lt; 1) {
3511
+ context.isValid = false;
3512
+ context.error = 'AVERAGE_X_NEG() requires at least one numeric argument';
3513
+ return;
3514
+ }
3515
+ for (let i = 0; i &lt; valueList.length; i++) {
3516
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (getArgType(valueList[i], context) !== 'number') {
3517
+ co<span class="cstat-no" title="statement not covered" >ntext.isValid = false;</span>
3518
+ co<span class="cstat-no" title="statement not covered" >ntext.error = `Argument ${i + 1} to AVERAGE_X_NEG must be of type number`;</span>
3519
+ re<span class="cstat-no" title="statement not covered" >turn;</span>
3520
+ }
3521
+ }
3522
+ contex<span class="missing-if-branch" title="if path not taken" >I</span>t.returnType = 'number';
3523
+ }<span class="cstat-no" title="statement not covered" ></span>
3524
+ <span class="cstat-no" title="statement not covered" ></span>
3525
+ export funct<span class="cstat-no" title="statement not covered" >ion aver</span>ageXZeroTransformValidator(
3526
+ context: ParseContext,
3527
+ valueList: ExpressionValue[],
3528
+ ) {
3529
+ if (valueList.length &lt; 1) {
3530
+ context.isValid = false;
3531
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.error = 'AVERAGE_X_ZERO() requires at least one numeric argument';
3532
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3533
+ }<span class="cstat-no" title="statement not covered" ></span>
3534
+ for (l<span class="cstat-no" title="statement not covered" >et i = 0</span>; i &lt; valueList.length; i++) {
3535
+ if (getArgType(valueList[i], context) !== 'number') {
3536
+ <span class="missing-if-branch" title="if path not taken" >I</span> context.isValid = false;
3537
+ co<span class="cstat-no" title="statement not covered" >ntext.error = `Argument $</span>{i + 1} to AVERAGE_X_ZERO must be of type number`;
3538
+ re<span class="cstat-no" title="statement not covered" >turn;</span>
3539
+ }<span class="cstat-no" title="statement not covered" ></span>
3540
+ }
3541
+ co<span class="missing-if-branch" title="if path not taken" >I</span>ntext.returnTyp<span class="branch-1 cbranch-no" title="branch not covered" >e = 'number';</span>
3542
+ }<span class="cstat-no" title="statement not covered" ></span>
3543
+ <span class="cstat-no" title="statement not covered" ></span>
3544
+ export f<span class="cstat-no" title="statement not covered" >unction </span>averageXZeroNegTransformValidator(
3545
+ context: ParseContext,
3546
+ va<span class="missing-if-branch" title="if path not taken" >I</span>lueList: Expres<span class="branch-1 cbranch-no" title="branch not covered" >sionValue[],</span>
3547
+ ) {<span class="cstat-no" title="statement not covered" ></span>
3548
+ if (va<span class="cstat-no" title="statement not covered" >lueList.length &lt; 1) {</span>
3549
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3550
+ context.error = 'AVERAGE_X_ZERO_NEG() requires at least one numeric argument';
3551
+ return;
3552
+ }
3553
+ for (let i = 0; i &lt; valueList.length; i++) {
3554
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (getArgType(valueList[i], context) !== 'number') {
3555
+ co<span class="cstat-no" title="statement not covered" >ntext.isValid = false;</span>
3556
+ co<span class="cstat-no" title="statement not covered" >ntext.error = `Argument ${i + 1} to AVERAGE_X</span>_ZERO_NEG must be of type number`;
3557
+ re<span class="cstat-no" title="statement not covered" >turn;</span>
3558
+ }
3559
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3560
+ contex<span class="cstat-no" title="statement not covered" >t.returnType = 'number';</span>
3561
+ }<span class="cstat-no" title="statement not covered" ></span>
3562
+ <span class="cstat-no" title="statement not covered" ></span>
3563
+ export function numberValueTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3564
+ if (args.length &lt; 1 || args.length &gt; 3) {
3565
+ context.isValid = false;
3566
+ conte<span class="fstat-no" title="function not covered" >xt.error = 'NUMBERVALUE</span>() requires 1, 2, or 3 arguments';
3567
+ <span class="cstat-no" title="statement not covered" > return;</span>
3568
+ }<span class="cstat-no" title="statement not covered" ></span>
3569
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType(args[0], context) !== 'string' &amp;&amp; get</span>ArgType(args[0], context) !== 'number') {
3570
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3571
+ context.error = 'First argument to NUMBERVALUE must be string or number';
3572
+ <span class="cstat-no" title="statement not covered" > return;</span>
3573
+ }<span class="cstat-no" title="statement not covered" ></span>
3574
+ if (ar<span class="cstat-no" title="statement not covered" >gs[1] &amp;&amp; getArgType(args[1], context) !== 'string') {</span>
3575
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3576
+ context.error = 'Second argument to NUMBERVALUE must be string';
3577
+ <span class="cstat-no" title="statement not covered" > return;</span>
3578
+ }
3579
+ if (args[2] &amp;&amp; getArgType(args[2], context) !== 'string') {
3580
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
3581
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'Third argume</span>nt to NUMBERVALUE must be string';
3582
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3583
+ }<span class="cstat-no" title="statement not covered" ></span>
3584
+ context.returnType = 'number';
3585
+ }
3586
+ &nbsp;
3587
+ expo<span class="missing-if-branch" title="if path not taken" >I</span>rt function oddTransformValidator(context: ParseContext, arg: ExpressionValue) {
3588
+ if (!a<span class="cstat-no" title="statement not covered" >rg) {</span>
3589
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3590
+ context.error = 'ODD() requires 1 argument';
3591
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3592
+ }
3593
+ if<span class="missing-if-branch" title="else path not taken" >E</span> (getArgType(arg, context) !== 'num<span class="branch-1 cbranch-no" title="branch not covered" >ber') {</span>
3594
+ context.isValid = false;
3595
+ context.error = 'Argument to ODD must be of type number';
3596
+ return;
3597
+ }
3598
+ co<span class="cstat-no" title="statement not covered" >ntext.returnType = 'number';</span>
3599
+ }
3600
+ &nbsp;
3601
+ expo<span class="missing-if-branch" title="if path not taken" >I</span>rt function evenTransformValidator(context: ParseContext, arg: ExpressionValue) {
3602
+ if (!a<span class="cstat-no" title="statement not covered" >rg) {</span>
3603
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3604
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'EVEN() requires 1 argument';
3605
+ return;
3606
+ }
3607
+ if (getArgType(arg, context) !== 'number') {
3608
+ cont<span class="missing-if-branch" title="if path not taken" >I</span>ext.isValid = false;
3609
+ context.<span class="cstat-no" title="statement not covered" >error = 'Argument to EVEN</span> must be of type number';
3610
+ return;<span class="cstat-no" title="statement not covered" ></span>
3611
+ }<span class="cstat-no" title="statement not covered" ></span>
3612
+ context.returnType = 'number';
3613
+ }
3614
+ &nbsp;
3615
+ export function inTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3616
+ if (args.length !== 2) {
3617
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
3618
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'IN() require</span>s exactly 2 arguments: column and an array of values';
3619
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3620
+ }<span class="cstat-no" title="statement not covered" ></span>
3621
+ const [column, values] = args;
3622
+ co<span class="missing-if-branch" title="if path not taken" >I</span>nst columnType = getArgType(column, context);
3623
+ if (co<span class="cstat-no" title="statement not covered" >lumnType === null || !['s</span>tring', 'number'].includes(columnType)) {
3624
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3625
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r =
3626
+ 'First argument to IN must be a string or number or column reference of type string or number';
3627
+ return;
3628
+ }
3629
+ if (va<span class="missing-if-branch" title="if path not taken" >I</span>lues.type !== 'expr_list' || !Array.isArray(values.value)) {
3630
+ context.<span class="cstat-no" title="statement not covered" >isValid = false;</span>
3631
+ context.<span class="cstat-no" title="statement not covered" >error = 'Second argument to IN must be an array of values';</span>
3632
+ return;<span class="cstat-no" title="statement not covered" ></span>
3633
+ }
3634
+ context.returnType = 'boolean';
3635
+ }
3636
+ <span class="missing-if-branch" title="if path not taken" >I</span>
3637
+ export f<span class="cstat-no" title="statement not covered" >unction sumTransformValid</span>ator(context: ParseContext, args: ExpressionValue[]) {
3638
+ if (ar<span class="cstat-no" title="statement not covered" >gs.length &lt; 1) {</span>
3639
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3640
+ context.error = 'SUM() requires 1 or more arguments';
3641
+ return;
3642
+ }
3643
+ for (let i = 0; i &lt; args.length; i++) {
3644
+ <span class="missing-if-branch" title="if path not taken" >I</span>const argType = getArgType(args[i], context);
3645
+ if (<span class="cstat-no" title="statement not covered" >argType !== 'number') {</span>
3646
+ co<span class="cstat-no" title="statement not covered" >ntext.isValid = false;</span>
3647
+ co<span class="cstat-no" title="statement not covered" >ntext.er</span>ror = `Argument ${i + 1} to SUM must be of type number`;
3648
+ return;
3649
+ }
3650
+ }<span class="branch-1 cbranch-no" title="branch not covered" ><span class="missing-if-branch" title="else path not taken" >E</span></span>
3651
+ context.returnType = 'number';
3652
+ }
3653
+ &nbsp;
3654
+ export function indexOfTransformValidator(
3655
+ co<span class="cstat-no" title="statement not covered" >ntext: ParseContext,</span>
3656
+ valueList: ExpressionValue[],
3657
+ valueToFind: ExpressionValue,
3658
+ ) {<span class="missing-if-branch" title="if path not taken" >I</span>
3659
+ if (!v<span class="cstat-no" title="statement not covered" >alueList || !valueToFind)</span> {
3660
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3661
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'INDEXOF() requires 2 arguments';
3662
+ return;
3663
+ }
3664
+ if<span class="missing-if-branch" title="if path not taken" >I</span> (!Array.isArray(valueList) || valueList.length === 0) {
3665
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3666
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'First argument to INDEXOF must be a non-empty array';</span>
3667
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3668
+ }
3669
+ for (let i = 0; i &lt; valueList.length; i++) {
3670
+ const t = getArgType(valueList[i], context);
3671
+ if (t !== 'string' &amp;&amp; t !== 'number') {
3672
+ <span class="missing-if-branch" title="if path not taken" >I</span> context.isValid = false;
3673
+ co<span class="cstat-no" title="statement not covered" >ntext.error = `Argument $</span>{i + 1} in valueList must be string or number`;
3674
+ re<span class="cstat-no" title="statement not covered" >turn;</span>
3675
+ }<span class="cstat-no" title="statement not covered" ></span>
3676
+ }
3677
+ const searchType = getArgType(valueToFind, context);
3678
+ if (searchType !== 'string' &amp;&amp; searchType !== 'number') {
3679
+ cont<span class="missing-if-branch" title="if path not taken" >I</span>ext.isValid = false;
3680
+ context.<span class="cstat-no" title="statement not covered" >error = 'Second argument </span>to INDEXOF must be string or number';
3681
+ return;<span class="cstat-no" title="statement not covered" ></span>
3682
+ }<span class="cstat-no" title="statement not covered" ></span>
3683
+ context.returnType = 'number';
3684
+ }
3685
+ &nbsp;
3686
+ export function isEmptyTransformValidator(context: ParseContext, arg: ExpressionValue) {
3687
+ if (!arg) {
3688
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
3689
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'ISEMPTY() re</span>quires exactly 1 argument';
3690
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3691
+ }<span class="cstat-no" title="statement not covered" ></span>
3692
+ const type = getArgType(arg, context);
3693
+ if (!['string', 'null'].includes(type || '')) {
3694
+ context.isValid = false;
3695
+ cont<span class="missing-if-branch" title="if path not taken" >I</span>ext.error = 'Argument to ISEMPTY must be of type string or null';
3696
+ return;<span class="cstat-no" title="statement not covered" ></span>
3697
+ }<span class="cstat-no" title="statement not covered" ></span>
3698
+ context.re<span class="cstat-no" title="statement not covered" >turnType</span> = 'boolean';
3699
+ }
3700
+ &nbsp;
3701
+ export function isNumberTransformValidator(context: ParseContext, arg: ExpressionValue) {
3702
+ if (!arg) {
3703
+ context.isValid = false;
3704
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.error = 'ISNUMBER() requires exactly 1 argument';
3705
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3706
+ }<span class="cstat-no" title="statement not covered" ></span>
3707
+ const <span class="cstat-no" title="statement not covered" >type = g</span>etArgType(arg, context);
3708
+ if (type !== 'string' &amp;&amp; type !== 'number') {
3709
+ context.isValid = false;
3710
+ <span class="missing-if-branch" title="else path not taken" >E</span>context.error = 'Argument to ISNUMBER must be of type string or number';
3711
+ return;
3712
+ }
3713
+ context.returnType = 'boolean';
3714
+ }
3715
+ <span class="cstat-no" title="statement not covered" ></span>
3716
+ export f<span class="cstat-no" title="statement not covered" >unction maxAggregateTrans</span>formValidator(context: ParseContext, args: ExpressionValue[]) {
3717
+ if (ar<span class="cstat-no" title="statement not covered" >gs.length &lt; 1) {</span>
3718
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3719
+ context.error = 'GREATEST() requires 1 or more arguments';
3720
+ <span class="cstat-no" title="statement not covered" > return;</span>
3721
+ }<span class="cstat-no" title="statement not covered" ></span>
3722
+ for (l<span class="cstat-no" title="statement not covered" >et i = 0; i &lt; args.length; i++) {</span>
3723
+ cons<span class="cstat-no" title="statement not covered" >t type =</span> getArgType(args[i], context);
3724
+ if (type !== 'number') {
3725
+ <span class="cstat-no" title="statement not covered" > context.isValid = false;</span>
3726
+ context.error = `Argument ${i + 1} to GREATEST must be of type number`;
3727
+ return;
3728
+ <span class="missing-if-branch" title="if path not taken" >I</span>}
3729
+ }<span class="cstat-no" title="statement not covered" ></span>
3730
+ contex<span class="cstat-no" title="statement not covered" >t.returnType = 'number';</span>
3731
+ }<span class="cstat-no" title="statement not covered" ></span>
3732
+ &nbsp;
3733
+ export function minAggregateTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3734
+ if (args.length &lt; 1) {
3735
+ cont<span class="missing-if-branch" title="if path not taken" >I</span>ext.isValid = false;
3736
+ context.<span class="cstat-no" title="statement not covered" >error = 'LEAST() requires</span> 1 or more arguments';
3737
+ return;<span class="cstat-no" title="statement not covered" ></span>
3738
+ }<span class="cstat-no" title="statement not covered" ></span>
3739
+ for (let i = 0; i &lt; args.length; i++) {
3740
+ const type = getArgType(args[i], context);
3741
+ if (type !== 'number') {
3742
+ context.isValid = false;
3743
+ context.error = `Argument ${i + 1} to LEAST must be of type number`;
3744
+ <span class="missing-if-branch" title="if path not taken" >I</span> return;
3745
+ }<span class="cstat-no" title="statement not covered" ></span>
3746
+ }<span class="cstat-no" title="statement not covered" ></span>
3747
+ contex<span class="cstat-no" title="statement not covered" >t.return</span>Type = 'number';
3748
+ }
3749
+ &nbsp;
3750
+ export function midTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3751
+ if (ar<span class="missing-if-branch" title="if path not taken" >I</span>gs.length !== 3) {
3752
+ context.<span class="cstat-no" title="statement not covered" >isValid = false;</span>
3753
+ context.<span class="cstat-no" title="statement not covered" >error = 'MID() requires exactly 3 arguments';</span>
3754
+ return;<span class="cstat-no" title="statement not covered" ></span>
3755
+ }
3756
+ const [strArg, startArg, lengthArg] = args;
3757
+ if (getArgType(strArg, context) !== 'string') {
3758
+ context.isValid = false;
3759
+ context.error = 'First argument to MID must be of type string';
3760
+ <span class="missing-if-branch" title="if path not taken" >I</span>return;
3761
+ }<span class="cstat-no" title="statement not covered" ></span>
3762
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType(startArg, context) !== 'number') {</span>
3763
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3764
+ context.error = 'Second argument to MID must be of type number';
3765
+ return;
3766
+ }<span class="branch-1 cbranch-no" title="branch not covered" ><span class="missing-if-branch" title="if path not taken" >I</span></span>
3767
+ if (ge<span class="cstat-no" title="statement not covered" >tArgType(lengthArg, conte</span>xt) !== 'number') {
3768
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3769
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'Third argument to MID must be of type number';
3770
+ return;
3771
+ }
3772
+ context.returnType = 'string';
3773
+ }
3774
+ <span class="missing-if-branch" title="if path not taken" >I</span>
3775
+ export f<span class="cstat-no" title="statement not covered" >unction medianTransformVa</span>lidator(context: ParseContext, args: ExpressionValue[]) {
3776
+ if (ar<span class="cstat-no" title="statement not covered" >gs.length &lt; 1) {</span>
3777
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3778
+ context.error = 'MEDIAN() requires 1 or more arguments';
3779
+ return;
3780
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3781
+ for (l<span class="cstat-no" title="statement not covered" >et i = 0; i &lt; args.length</span>; i++) {
3782
+ cons<span class="cstat-no" title="statement not covered" >t type = getArgType(args[i], context);</span>
3783
+ if (<span class="cstat-no" title="statement not covered" >type !==</span> 'number') {
3784
+ context.isValid = false;
3785
+ context.error = `Argument ${i + 1} to MEDIAN must be of type number`;
3786
+ return;
3787
+ }
3788
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3789
+ contex<span class="cstat-no" title="statement not covered" >t.returnType = 'number';</span>
3790
+ }<span class="cstat-no" title="statement not covered" ></span>
3791
+ <span class="cstat-no" title="statement not covered" ></span>
3792
+ export function modeTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3793
+ if (args.length &lt; 1) {
3794
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
3795
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'MODE() requi</span>res 1 or more arguments';
3796
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3797
+ }<span class="cstat-no" title="statement not covered" ></span>
3798
+ for (let i = 0; i &lt; args.length; i++) {
3799
+ const type = getArgType(args[i], context);
3800
+ if (type !== 'number') {
3801
+ context.isValid = false;
3802
+ <span class="missing-if-branch" title="if path not taken" >I</span> context.error = `Argument ${i + 1} to MODE must be of type number`;
3803
+ re<span class="cstat-no" title="statement not covered" >turn;</span>
3804
+ }<span class="cstat-no" title="statement not covered" ></span>
3805
+ }<span class="cstat-no" title="statement not covered" ></span>
3806
+ context.returnType = 'number';
3807
+ }
3808
+ <span class="branch-1 cbranch-no" title="branch not covered" ><span class="missing-if-branch" title="if path not taken" >I</span></span>
3809
+ export f<span class="cstat-no" title="statement not covered" >unction valueTransformVal</span>idator(context: ParseContext, arg: ExpressionValue) {
3810
+ if (!a<span class="cstat-no" title="statement not covered" >rg) {</span>
3811
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3812
+ context.error = 'VALUE() requires exactly 1 argument';
3813
+ <span class="missing-if-branch" title="if path not taken" >I</span>return;
3814
+ }<span class="cstat-no" title="statement not covered" ></span>
3815
+ <span class="cstat-no" title="statement not covered" ></span>
3816
+ const <span class="cstat-no" title="statement not covered" >type = g</span>etArgType(arg, context);
3817
+ if (!['string', 'number'].includes(type || '')) {
3818
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid<span class="branch-1 cbranch-no" title="branch not covered" > = false;</span>
3819
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'VALUE() acce</span>pts only string or number as input';
3820
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3821
+ }<span class="cstat-no" title="statement not covered" ></span>
3822
+ &nbsp;
3823
+ context.returnType = 'number';
3824
+ }
3825
+ &nbsp;
3826
+ export function pctTransformValidator(context: ParseContext, arg: ExpressionValue) {
3827
+ if (!arg) {
3828
+ conte<span class="fstat-no" title="function not covered" >xt.isValid = false;</span>
3829
+ <span class="cstat-no" title="statement not covered" > context.error = 'PCT() requires exactly 1 argument';</span>
3830
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3831
+ }<span class="cstat-no" title="statement not covered" ></span>
3832
+ <span class="cstat-no" title="statement not covered" ></span>
3833
+ const type = getArgType(arg, context);
3834
+ if (type !== 'number') {<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
3835
+ <span class="cstat-no" title="statement not covered" > context.isValid = false;</span>
3836
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'PCT() argume</span>nt must be of type number';
3837
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3838
+ }<span class="cstat-no" title="statement not covered" ></span>
3839
+ &nbsp;
3840
+ co<span class="cstat-no" title="statement not covered" >ntext.returnType = 'number';</span>
3841
+ }
3842
+ &nbsp;
3843
+ expo<span class="missing-if-branch" title="if path not taken" >I</span>rt function xorTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3844
+ if (ar<span class="cstat-no" title="statement not covered" >gs.length !== 2) {</span>
3845
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3846
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'XOR() requires exactly 2 arguments';
3847
+ return;
3848
+ }
3849
+ <span class="missing-if-branch" title="if path not taken" >I</span>
3850
+ const <span class="cstat-no" title="statement not covered" >[arg1Type, arg2Type] = ar</span>gs.map((arg) =&gt; getArgType(arg, context));
3851
+ if (ar<span class="cstat-no" title="statement not covered" >g1Type !== 'boolean' || arg2Type !== 'boolean') {</span>
3852
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3853
+ context.error = 'XOR() arguments must both be of type boolean';
3854
+ return;
3855
+ }
3856
+ &nbsp;
3857
+ co<span class="missing-if-branch" title="if path not taken" >I</span>ntext.returnType = 'boolean';
3858
+ }<span class="cstat-no" title="statement not covered" ></span>
3859
+ <span class="cstat-no" title="statement not covered" ></span>
3860
+ export f<span class="cstat-no" title="statement not covered" >unction </span>textTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3861
+ if (args.length &lt; 2 || args.length &gt; 3) {
3862
+ context.isValid = false;
3863
+ context.error = 'TEXT() requires 2 or 3 arguments';
3864
+ return;
3865
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3866
+ <span class="cstat-no" title="statement not covered" ></span>
3867
+ const [val<span class="cstat-no" title="statement not covered" >ueType, formatType, localeType] = args.map((arg) =&gt; getArgType(arg, context));</span>
3868
+ if (!['num<span class="cstat-no" title="statement not covered" >ber', 'd</span>ate'].includes(valueType || '')) {
3869
+ context.isValid = false;
3870
+ context.error = 'First argument to TEXT() must be of type number or date';
3871
+ return;
3872
+ }
3873
+ if (formatType !== 'string') {
3874
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
3875
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'Second argum</span>ent to TEXT() must be a string format pattern';
3876
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3877
+ }<span class="cstat-no" title="statement not covered" ></span>
3878
+ if (args[2] &amp;&amp; localeType !== 'string') {
3879
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.isValid = false;
3880
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'Third argume</span>nt to TEXT() (locale) must be a string';
3881
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3882
+ }<span class="cstat-no" title="statement not covered" ></span>
3883
+ &nbsp;
3884
+ context.returnType = 'string';
3885
+ }
3886
+ &nbsp;
3887
+ export function uuidTransformValidator(context: ParseContext) {
3888
+ context.returnType = 'string';
3889
+ }<span class="missing-if-branch" title="else path not taken" >E</span>
3890
+ <span class="cstat-no" title="statement not covered" ></span>
3891
+ export function ifNullTransformValidator(context: ParseContext, args: ExpressionValue[]) {
3892
+ if (args.length !== 2) {
3893
+ context.isValid = false;
3894
+ context.error = 'IFNA() requires exactly 2 arguments';
3895
+ return;
3896
+ }
3897
+ <span class="missing-if-branch" title="if path not taken" >I</span>
3898
+ const [valueTy<span class="cstat-no" title="statement not covered" >pe, fallbackType] = args.</span>map((arg) =&gt; getArgType(arg, context));
3899
+ if (valueType <span class="cstat-no" title="statement not covered" >!== fallbackType &amp;&amp; valueType !== null &amp;&amp; fallbackType !== null) {</span>
3900
+ context.isVa<span class="cstat-no" title="statement not covered" >lid = fa</span>lse;
3901
+ context.error = 'Both arguments to IFNA() must be of the same type';
3902
+ return;
3903
+ }
3904
+ &nbsp;
3905
+ context.returnType = valueType || fallbackType || 'string';
3906
+ }<span class="fstat-no" title="function not covered" ></span>
3907
+ <span class="cstat-no" title="statement not covered" ></span>
3908
+ expo<span class="cstat-no" title="statement not covered" >rt function fromExcelDateTransformValidator(context: ParseContext, arg: ExpressionValue) {</span>
3909
+ if (!a<span class="cstat-no" title="statement not covered" >rg) {</span>
3910
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3911
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'FROMEXCELDATE() requires exactly 1 argument';
3912
+ return;
3913
+ }<span class="cstat-no" title="statement not covered" ></span>
3914
+ const <span class="cstat-no" title="statement not covered" >argType = getArgType(arg,</span> context);
3915
+ if (ar<span class="cstat-no" title="statement not covered" >gType !== 'number') {</span>
3916
+ cont<span class="cstat-no" title="statement not covered" >ext.isVa</span>lid = false;
3917
+ context.error = 'FROMEXCELDATE() argument must be a number';
3918
+ <span class="cstat-no" title="statement not covered" > return;</span>
3919
+ }
3920
+ context.returnType = 'date';
3921
+ }
3922
+ <span class="missing-if-branch" title="if path not taken" >I</span>
3923
+ export f<span class="cstat-no" title="statement not covered" >unction hasTransformValid</span>ator(
3924
+ contex<span class="cstat-no" title="statement not covered" >t: ParseContext,</span>
3925
+ args: <span class="cstat-no" title="statement not covered" >Expressi</span>onValue[],
3926
+ searchValue: ExpressionValue,
3927
+ ) {
3928
+ if<span class="missing-if-branch" title="if path not taken" >I</span> (args.length === 0) {
3929
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3930
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'HAS() requires at least one column to check against';</span>
3931
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3932
+ }
3933
+ <span class="missing-if-branch" title="if path not taken" >I</span>
3934
+ const searchType = getA<span class="cstat-no" title="statement not covered" >rgType(searchValue, contex</span>t);
3935
+ for (l<span class="cstat-no" title="statement not covered" >et i = 0; i &lt; args.length; i++) {</span>
3936
+ const ar<span class="cstat-no" title="statement not covered" >gType = getArgType(args[i</span>], context);
3937
+ if (argT<span class="cstat-no" title="statement not covered" >ype !== searchType) {</span>
3938
+ contex<span class="cstat-no" title="statement not covered" >t.isVali</span>d = false;
3939
+ context.error = `Argument ${i + 1} to HAS must be of the same type as searchValue (${searchType})`;
3940
+ return;
3941
+ }
3942
+ }
3943
+ context.returnType = 'number';
3944
+ }<span class="missing-if-branch" title="if path not taken" >I</span>
3945
+ <span class="cstat-no" title="statement not covered" ></span>
3946
+ export f<span class="cstat-no" title="statement not covered" >unction hasSomeTransformValidator(</span>
3947
+ contex<span class="cstat-no" title="statement not covered" >t: Parse</span>Context,
3948
+ args: ExpressionValue[],
3949
+ valueArray: ExpressionValue[],
3950
+ ) {<span class="missing-if-branch" title="if path not taken" >I</span>
3951
+ if (ar<span class="cstat-no" title="statement not covered" >gs.length === 0) {</span>
3952
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3953
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'HAS_SOME() requires at least one column to check against';
3954
+ return;
3955
+ }
3956
+ if<span class="missing-if-branch" title="if path not taken" >I</span> (valueArray.length === 0) {
3957
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3958
+ cont<span class="cstat-no" title="statement not covered" >ext.error = 'HAS_SOME() requires at least one search value';</span>
3959
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3960
+ }
3961
+ const flattenedValues: ExpressionValue[] = [];
3962
+ valueArray.forEach((valGroup) =&gt; {
3963
+ if (<span class="missing-if-branch" title="if path not taken" >I</span>Array.isArray(valGroup)) {
3964
+ valGro<span class="cstat-no" title="statement not covered" >up.forEach((val) =&gt; flatt</span>enedValues.push(val));
3965
+ } else {<span class="cstat-no" title="statement not covered" ></span>
3966
+ flatte<span class="cstat-no" title="statement not covered" >nedValue</span>s.push(valGroup);
3967
+ }
3968
+ });
3969
+ for (let i = 0; i &lt; args.length; i++) {
3970
+ const colType = getArgType(args[i], context);
3971
+ for (let j = 0; j &lt; flattenedValues.length; j++) {
3972
+ co<span class="missing-if-branch" title="if path not taken" >I</span>nst valType = getArgType(flattenedValues[j], context);
3973
+ if (co<span class="cstat-no" title="statement not covered" >lType !== valType) {</span>
3974
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3975
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = `Argument ${i + 1} and value ${j + 1} to HAS_SOME must be of the same type (${colType} vs ${valType})`;
3976
+ return;
3977
+ }
3978
+ }
3979
+ }<span class="missing-if-branch" title="else path not taken" >E</span>
3980
+ &nbsp;
3981
+ contex<span class="missing-if-branch" title="if path not taken" >I</span>t.returnType = 'number';
3982
+ }<span class="cstat-no" title="statement not covered" ></span>
3983
+ <span class="cstat-no" title="statement not covered" ></span>
3984
+ export funct<span class="cstat-no" title="statement not covered" >ion filt</span>erIfTransformValidator(
3985
+ context: ParseContext,
3986
+ columnArg: ExpressionValue,
3987
+ conditionArg: ExpressionValue,
3988
+ ) {
3989
+ co<span class="missing-if-branch" title="if path not taken" >I</span>nst colType = getArgType(columnArg, context);
3990
+ if (co<span class="cstat-no" title="statement not covered" >lType !== 'string' &amp;&amp; col</span>Type !== 'number') {
3991
+ cont<span class="cstat-no" title="statement not covered" >ext.isValid = false;</span>
3992
+ cont<span class="cstat-no" title="statement not covered" >ext.erro</span>r = 'First argument to FILTER_IF must be a column reference or a valid column';
3993
+ return;
3994
+ }
3995
+ if (getArgType(conditionArg, context) !== 'string') {
3996
+ context.isValid = false;
3997
+ <span class="missing-if-branch" title="if path not taken" >I</span>context.error = 'Second argument to FILTER_IF must be of type string';
3998
+ retu<span class="cstat-no" title="statement not covered" >rn;</span>
3999
+ }<span class="cstat-no" title="statement not covered" ></span>
4000
+ contex<span class="cstat-no" title="statement not covered" >t.return</span>Type = colType;
4001
+ }
4002
+ <span class="missing-if-branch" title="if path not taken" >I</span>
4003
+ export f<span class="cstat-no" title="statement not covered" >unction dateTransformVali</span>dator(
4004
+ contex<span class="cstat-no" title="statement not covered" >t: ParseContext,</span>
4005
+ date: <span class="cstat-no" title="statement not covered" >Expressi</span>onValue,
4006
+ format: ExpressionValue,
4007
+ year?: ExpressionValue,
4008
+ ) {
4009
+ const <span class="missing-if-branch" title="if path not taken" >I</span>dateType = getArgType(date, context);
4010
+ if (dateTy<span class="cstat-no" title="statement not covered" >pe !== 'date' &amp;&amp; dateType</span> !== 'string') {
4011
+ context.<span class="cstat-no" title="statement not covered" >isValid = false;</span>
4012
+ context.<span class="cstat-no" title="statement not covered" >error = </span>'First argument to DATE must be of type date or string';
4013
+ return;
4014
+ }
4015
+ &nbsp;
4016
+ const <span class="missing-if-branch" title="if path not taken" >I</span>formatType = getArgType(format, context);
4017
+ if (format<span class="cstat-no" title="statement not covered" >Type !== 'string') {</span>
4018
+ context.<span class="cstat-no" title="statement not covered" >isValid = false;</span>
4019
+ context.<span class="cstat-no" title="statement not covered" >error = </span>'Second argument (format) to DATE must be of type string';
4020
+ return;
4021
+ }
4022
+ &nbsp;
4023
+ if (year !<span class="missing-if-branch" title="if path not taken" >I</span>== undefined) {
4024
+ const yearTy<span class="cstat-no" title="statement not covered" >pe = getArgType(year, con</span>text);
4025
+ if (yearType<span class="cstat-no" title="statement not covered" > !== 'number') {</span>
4026
+ context.is<span class="cstat-no" title="statement not covered" >Valid = </span>false;
4027
+ context.error = 'Third argument (year) to DATE must be of type number';
4028
+ return;
4029
+ }
4030
+ }
4031
+ &nbsp;
4032
+ context.returnType = 'date';
4033
+ }
4034
+ &nbsp;
4035
+ export function switchTransformValidator(context: ParseContext, args: ExpressionValue[]) {
4036
+ if (args.length &lt; 3) {
4037
+ context.isValid = false;
4038
+ context.error = 'SWITCH() requires at least 3 arguments';
4039
+ return;
4040
+ }
4041
+ &nbsp;
4042
+ const switchExprType = getArgType(args[0], context);
4043
+ if (switchExprType === null) {
4044
+ context.isValid = false;
4045
+ context.error = 'Switch expression has invalid type';
4046
+ return;
4047
+ }
4048
+ &nbsp;
4049
+ const remainingArgs = args.slice(1);
4050
+ &nbsp;
4051
+ if (remainingArgs.length % 2 !== 0 &amp;&amp; remainingArgs.length &lt; 3) {
4052
+ context.isValid = false;
4053
+ context.error = 'SWITCH() requires at least one condition-result pair';
4054
+ return;
4055
+ }
4056
+ &nbsp;
4057
+ for (let i = 0; i &lt; remainingArgs.length - (remainingArgs.length % 2); i += 2) {
4058
+ const condType = getArgType(remainingArgs[i], context);
4059
+ if (condType === null || condType !== switchExprType) {
4060
+ context.isValid = false;
4061
+ context.error = `Condition argument ${i + 2} must be of the same type as switch expression (${switchExprType})`;
4062
+ return;
4063
+ }
4064
+ }
4065
+ &nbsp;
4066
+ const resultTypes: string[] = [];
4067
+ &nbsp;
4068
+ for (let i = 1; i &lt; remainingArgs.length - (remainingArgs.length % 2); i += 2) {
4069
+ const resultType = getArgType(remainingArgs[i], context);
4070
+ if (resultType === null) {
4071
+ context.isValid = false;
4072
+ context.error = `Result argument ${i + 2} has invalid type`;
4073
+ return;
4074
+ }
4075
+ resultTypes.push(resultType);
4076
+ }
4077
+ &nbsp;
4078
+ if (remainingArgs.length % 2 === 1) {
4079
+ const elseType = getArgType(remainingArgs[remainingArgs.length - 1], context);
4080
+ if (elseType === null) {
4081
+ context.isValid = false;
4082
+ context.error = 'Else argument has invalid type';
4083
+ return;
4084
+ }
4085
+ resultTypes.push(elseType);
4086
+ }
4087
+ &nbsp;
4088
+ const uniqueResultTypes = new Set(resultTypes);
4089
+ if (uniqueResultTypes.size &gt; 1) {
4090
+ context.isValid = false;
4091
+ context.error = 'All result arguments to SWITCH() must be of the same type';
4092
+ return;
4093
+ }
4094
+ &nbsp;
4095
+ context.returnType = resultTypes[0];
4096
+ }
4097
+ &nbsp;
4098
+ export function hasAllTransformValidator(
4099
+ context: ParseContext,
4100
+ args: ExpressionValue[],
4101
+ valueArray: ExpressionValue[][],
4102
+ ) {
4103
+ if (args.length === 0) {
4104
+ context.isValid = false;
4105
+ context.error = 'HAS_ALL() requires at least one column to check against';
4106
+ return;
4107
+ }
4108
+ &nbsp;
4109
+ if (valueArray.length === 0) {
4110
+ context.isValid = false;
4111
+ context.error = 'HAS_ALL() requires at least one search value array';
4112
+ return;
4113
+ }
4114
+ &nbsp;
4115
+ for (const col of args) {
4116
+ const colType = getArgType(col, context);
4117
+ if (colType === null) {
4118
+ context.isValid = false;
4119
+ context.error = 'One or more columns have invalid type';
4120
+ return;
4121
+ }
4122
+ }
4123
+ &nbsp;
4124
+ for (const valGroup of valueArray) {
4125
+ if (!Array.isArray(valGroup) || valGroup.length === 0) {
4126
+ context.isValid = false;
4127
+ context.error = 'Each search value group must be a non-empty array';
4128
+ return;
4129
+ }
4130
+ &nbsp;
4131
+ for (const val of valGroup) {
4132
+ const valType = getArgType(val, context);
4133
+ if (valType === null) {
4134
+ context.isValid = false;
4135
+ context.error = 'One or more search values have invalid type';
4136
+ return;
4137
+ }
4138
+ }
4139
+ }
4140
+ &nbsp;
4141
+ context.returnType = 'number';
4142
+ }
4143
+ &nbsp;</pre></td></tr></table></pre>
4144
+
4145
+ <div class='push'></div><!-- for sticky footer -->
4146
+ </div><!-- /wrapper -->
4147
+ <div class='footer quiet pad2 space-top1 center small'>
4148
+ Code coverage generated by
4149
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
4150
+ at 2025-12-06T06:36:03.131Z
4151
+ </div>
4152
+ <script src="../../../../prettify.js"></script>
4153
+ <script>
4154
+ window.onload = function () {
4155
+ prettyPrint();
4156
+ };
4157
+ </script>
4158
+ <script src="../../../../sorter.js"></script>
4159
+ <script src="../../../../block-navigation.js"></script>
4160
+ </body>
4161
+ </html>
4162
+