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.
- package/.turbo/turbo-build.log +9 -0
- package/.turbo/turbo-check-types.log +4 -0
- package/.turbo/turbo-lint.log +126 -0
- package/README.md +45 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +236 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/src/constants.ts.html +826 -0
- package/coverage/src/database_types.ts.html +136 -0
- package/coverage/src/epm-query-builder/EpmQueryBuilder.ts.html +166 -0
- package/coverage/src/epm-query-builder/base/BaseAdvancedAggregations.ts.html +568 -0
- package/coverage/src/epm-query-builder/base/BaseAnalyticalFunctions.ts.html +694 -0
- package/coverage/src/epm-query-builder/base/BaseCTEGenerator.ts.html +1459 -0
- package/coverage/src/epm-query-builder/base/BaseCountQueryBuilder.ts.html +400 -0
- package/coverage/src/epm-query-builder/base/BaseMeasureBuilder.ts.html +295 -0
- package/coverage/src/epm-query-builder/base/BaseOrderBuilder.ts.html +670 -0
- package/coverage/src/epm-query-builder/base/BasePaginationBuilder.ts.html +364 -0
- package/coverage/src/epm-query-builder/base/BaseQueryBuilder.ts.html +238 -0
- package/coverage/src/epm-query-builder/base/BaseRollupBuilder.ts.html +532 -0
- package/coverage/src/epm-query-builder/base/BaseSqlBuilder.ts.html +601 -0
- package/coverage/src/epm-query-builder/base/BaseSuperFilterBuilder.ts.html +1966 -0
- package/coverage/src/epm-query-builder/base/BaseUtilities.ts.html +1798 -0
- package/coverage/src/epm-query-builder/base/ColumnRefUtils.ts.html +211 -0
- package/coverage/src/epm-query-builder/base/RelationshipResolver.ts.html +706 -0
- package/coverage/src/epm-query-builder/base/SharedFilterBuilder.ts.html +1717 -0
- package/coverage/src/epm-query-builder/base/index.html +326 -0
- package/coverage/src/epm-query-builder/constants/Aggregations.ts.html +133 -0
- package/coverage/src/epm-query-builder/constants/Database.ts.html +103 -0
- package/coverage/src/epm-query-builder/constants/Source.ts.html +106 -0
- package/coverage/src/epm-query-builder/constants/index.html +146 -0
- package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbAdvancedAggregations.ts.html +286 -0
- package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbJoinBuilder.ts.html +280 -0
- package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbMeasureBuilder.ts.html +1924 -0
- package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbOrderBuilder.ts.html +769 -0
- package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbPaginationBuilder.ts.html +643 -0
- package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbQueryBuilder.ts.html +2644 -0
- package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbRollupBuilder.ts.html +478 -0
- package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbSuperFilterBuilder.ts.html +1195 -0
- package/coverage/src/epm-query-builder/dialects/duckdb/index.html +221 -0
- package/coverage/src/epm-query-builder/errors/QueryBuilderErrors.ts.html +280 -0
- package/coverage/src/epm-query-builder/errors/index.html +116 -0
- package/coverage/src/epm-query-builder/index.html +116 -0
- package/coverage/src/epm-query-builder/interfaces/IDatabaseQueryBuilder.ts.html +100 -0
- package/coverage/src/epm-query-builder/interfaces/index.html +131 -0
- package/coverage/src/epm-query-builder/interfaces/index.ts.html +88 -0
- package/coverage/src/epm-query-builder/utils/format.ts.html +151 -0
- package/coverage/src/epm-query-builder/utils/index.html +146 -0
- package/coverage/src/epm-query-builder/utils/sql.ts.html +247 -0
- package/coverage/src/epm-query-builder/utils/validation.ts.html +124 -0
- package/coverage/src/epm-query-builder/validation/QueryOptionsValidator.ts.html +631 -0
- package/coverage/src/epm-query-builder/validation/SqlQueryValidator.ts.html +475 -0
- package/coverage/src/epm-query-builder/validation/index.html +131 -0
- package/coverage/src/filters/FilterConditionBuilder.ts.html +427 -0
- package/coverage/src/filters/filter-types.ts.html +484 -0
- package/coverage/src/filters/index.html +131 -0
- package/coverage/src/index.html +176 -0
- package/coverage/src/index.ts.html +103 -0
- package/coverage/src/js-lib/JsToSqlParser.ts.html +736 -0
- package/coverage/src/js-lib/ParseContext.ts.html +532 -0
- package/coverage/src/js-lib/db/azuresql/AzureSqlCallExpressionVisitor.ts.html +196 -0
- package/coverage/src/js-lib/db/azuresql/index.html +116 -0
- package/coverage/src/js-lib/db/base/ArrayExpressionVisitor.ts.html +133 -0
- package/coverage/src/js-lib/db/base/AssignmentExpressionVisitor.ts.html +187 -0
- package/coverage/src/js-lib/db/base/BinaryExpressionVisitor.ts.html +223 -0
- package/coverage/src/js-lib/db/base/CallExpressionVisitor.ts.html +5479 -0
- package/coverage/src/js-lib/db/base/IdentifierVisitor.ts.html +283 -0
- package/coverage/src/js-lib/db/base/LiteralVisitor.ts.html +199 -0
- package/coverage/src/js-lib/db/base/MemberExpressionVisitor.ts.html +193 -0
- package/coverage/src/js-lib/db/base/ProgramVisitor.ts.html +139 -0
- package/coverage/src/js-lib/db/base/UnaryExpressionVisitor.ts.html +181 -0
- package/coverage/src/js-lib/db/base/VisitorInterface.ts.html +103 -0
- package/coverage/src/js-lib/db/base/index.html +251 -0
- package/coverage/src/js-lib/db/bigquery/BigQueryCallExpressionVisitor.ts.html +1747 -0
- package/coverage/src/js-lib/db/bigquery/index.html +116 -0
- package/coverage/src/js-lib/db/commonTransforms.ts.html +2074 -0
- package/coverage/src/js-lib/db/databricks/DatabricksCallExpressionVisitor.ts.html +1303 -0
- package/coverage/src/js-lib/db/databricks/index.html +116 -0
- package/coverage/src/js-lib/db/fabricsql/FabricSqlCallExpressionVisitor.ts.html +196 -0
- package/coverage/src/js-lib/db/fabricsql/index.html +116 -0
- package/coverage/src/js-lib/db/fabricwarehouse/FabricWarehouseCallExpressionVisitor.ts.html +292 -0
- package/coverage/src/js-lib/db/fabricwarehouse/index.html +116 -0
- package/coverage/src/js-lib/db/index.html +116 -0
- package/coverage/src/js-lib/db/postgresql/PostgreSqlCallExpressionVisitor.ts.html +985 -0
- package/coverage/src/js-lib/db/postgresql/index.html +116 -0
- package/coverage/src/js-lib/db/redshift/RedshiftCallExpressionVisitor.ts.html +685 -0
- package/coverage/src/js-lib/db/redshift/index.html +116 -0
- package/coverage/src/js-lib/db/sample/SampleCallExpressionVisitor.ts.html +196 -0
- package/coverage/src/js-lib/db/sample/index.html +116 -0
- package/coverage/src/js-lib/db/snowflake/SnowflakeCallExpressionVisitor.ts.html +1447 -0
- package/coverage/src/js-lib/db/snowflake/index.html +116 -0
- package/coverage/src/js-lib/db/validator/FormulaValidator.ts.html +4162 -0
- package/coverage/src/js-lib/db/validator/index.html +116 -0
- package/coverage/src/js-lib/index.html +131 -0
- package/coverage/src/js-lib/objects/BaseObject.ts.html +169 -0
- package/coverage/src/js-lib/objects/DateObject.ts.html +169 -0
- package/coverage/src/js-lib/objects/PctObject.ts.html +178 -0
- package/coverage/src/js-lib/objects/index.html +146 -0
- package/coverage/src/query-builder/PaginationBuilder.ts.html +142 -0
- package/coverage/src/query-builder/QueryBuilder.ts.html +3118 -0
- package/coverage/src/query-builder/SuperFilterBuilder.ts.html +1969 -0
- package/coverage/src/query-builder/index.html +146 -0
- package/coverage/src/runtime_var.ts.html +109 -0
- package/coverage/src/sql-lib/binary_expr.ts.html +133 -0
- package/coverage/src/sql-lib/case.ts.html +133 -0
- package/coverage/src/sql-lib/column.ts.html +139 -0
- package/coverage/src/sql-lib/else.ts.html +124 -0
- package/coverage/src/sql-lib/function.ts.html +112 -0
- package/coverage/src/sql-lib/index.html +251 -0
- package/coverage/src/sql-lib/join.ts.html +127 -0
- package/coverage/src/sql-lib/literal.ts.html +130 -0
- package/coverage/src/sql-lib/select.ts.html +547 -0
- package/coverage/src/sql-lib/unary_expr.ts.html +112 -0
- package/coverage/src/sql-lib/when.ts.html +130 -0
- package/coverage/src/sql_query_gen.ts.html +535 -0
- package/coverage/src/superFilter/DateFilterFactory.ts.html +625 -0
- package/coverage/src/superFilter/dateFunction.ts.html +193 -0
- package/coverage/src/superFilter/index.html +131 -0
- package/coverage/src/utils.ts.html +571 -0
- package/dist/index.cjs +8440 -0
- package/dist/index.d.cts +927 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +927 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8387 -0
- package/dist/index.js.map +1 -0
- package/eslint.config.js +4 -0
- package/jest.config.ts +44 -0
- package/package.json +45 -0
- package/src/constants.ts +247 -0
- package/src/epm-query-builder/EpmQueryBuilder.ts +27 -0
- package/src/epm-query-builder/base/BaseAdvancedAggregations.ts +161 -0
- package/src/epm-query-builder/base/BaseAnalyticalFunctions.ts +203 -0
- package/src/epm-query-builder/base/BaseCTEGenerator.ts +458 -0
- package/src/epm-query-builder/base/BaseCountQueryBuilder.ts +105 -0
- package/src/epm-query-builder/base/BaseMeasureBuilder.ts +87 -0
- package/src/epm-query-builder/base/BaseOrderBuilder.ts +195 -0
- package/src/epm-query-builder/base/BasePaginationBuilder.ts +93 -0
- package/src/epm-query-builder/base/BaseQueryBuilder.ts +51 -0
- package/src/epm-query-builder/base/BaseRollupBuilder.ts +149 -0
- package/src/epm-query-builder/base/BaseSqlBuilder.ts +172 -0
- package/src/epm-query-builder/base/BaseSuperFilterBuilder.ts +627 -0
- package/src/epm-query-builder/base/BaseUtilities.ts +571 -0
- package/src/epm-query-builder/base/ColumnRefUtils.ts +42 -0
- package/src/epm-query-builder/base/RelationshipResolver.ts +207 -0
- package/src/epm-query-builder/base/SharedFilterBuilder.ts +544 -0
- package/src/epm-query-builder/constants/Aggregations.ts +16 -0
- package/src/epm-query-builder/constants/Database.ts +6 -0
- package/src/epm-query-builder/constants/Source.ts +7 -0
- package/src/epm-query-builder/dialects/duckdb/DuckDbAdvancedAggregations.ts +67 -0
- package/src/epm-query-builder/dialects/duckdb/DuckDbJoinBuilder.ts +65 -0
- package/src/epm-query-builder/dialects/duckdb/DuckDbMeasureBuilder.ts +626 -0
- package/src/epm-query-builder/dialects/duckdb/DuckDbOrderBuilder.ts +228 -0
- package/src/epm-query-builder/dialects/duckdb/DuckDbPaginationBuilder.ts +186 -0
- package/src/epm-query-builder/dialects/duckdb/DuckDbQueryBuilder.ts +853 -0
- package/src/epm-query-builder/dialects/duckdb/DuckDbRollupBuilder.ts +131 -0
- package/src/epm-query-builder/dialects/duckdb/DuckDbSuperFilterBuilder.ts +370 -0
- package/src/epm-query-builder/errors/QueryBuilderErrors.ts +65 -0
- package/src/epm-query-builder/interfaces/IDatabaseQueryBuilder.ts +5 -0
- package/src/epm-query-builder/interfaces/index.ts +1 -0
- package/src/epm-query-builder/types/query-builder-types.d.ts +289 -0
- package/src/epm-query-builder/utils/format.ts +22 -0
- package/src/epm-query-builder/utils/sql.ts +54 -0
- package/src/epm-query-builder/utils/validation.ts +13 -0
- package/src/epm-query-builder/validation/QueryOptionsValidator.ts +182 -0
- package/src/epm-query-builder/validation/SqlQueryValidator.ts +130 -0
- package/src/filters/FilterConditionBuilder.ts +114 -0
- package/src/filters/filter-types.ts +133 -0
- package/src/index.ts +10 -0
- package/src/js-lib/JsToSqlParser.ts +217 -0
- package/src/js-lib/ParseContext.ts +149 -0
- package/src/js-lib/db/base/ArrayExpressionVisitor.ts +16 -0
- package/src/js-lib/db/base/AssignmentExpressionVisitor.ts +34 -0
- package/src/js-lib/db/base/BinaryExpressionVisitor.ts +46 -0
- package/src/js-lib/db/base/CallExpressionVisitor.ts +1798 -0
- package/src/js-lib/db/base/IdentifierVisitor.ts +66 -0
- package/src/js-lib/db/base/LiteralVisitor.ts +38 -0
- package/src/js-lib/db/base/MemberExpressionVisitor.ts +36 -0
- package/src/js-lib/db/base/ProgramVisitor.ts +18 -0
- package/src/js-lib/db/base/UnaryExpressionVisitor.ts +32 -0
- package/src/js-lib/db/base/VisitorInterface.ts +6 -0
- package/src/js-lib/db/validator/FormulaValidator.ts +1235 -0
- package/src/js-lib/objects/BaseObject.ts +28 -0
- package/src/js-lib/objects/DateObject.ts +28 -0
- package/src/js-lib/objects/PctObject.ts +31 -0
- package/src/query-builder/PaginationBuilder.ts +19 -0
- package/src/query-builder/QueryBuilder.ts +1035 -0
- package/src/query-builder/SuperFilterBuilder.ts +628 -0
- package/src/runtime_var.ts +8 -0
- package/src/sql-lib/binary_expr.ts +16 -0
- package/src/sql-lib/case.ts +16 -0
- package/src/sql-lib/column.ts +18 -0
- package/src/sql-lib/else.ts +13 -0
- package/src/sql-lib/function.ts +9 -0
- package/src/sql-lib/join.ts +14 -0
- package/src/sql-lib/literal.ts +15 -0
- package/src/sql-lib/select.ts +154 -0
- package/src/sql-lib/unary_expr.ts +9 -0
- package/src/sql-lib/when.ts +15 -0
- package/src/sql-types.d.ts +565 -0
- package/src/sql_query_gen.ts +150 -0
- package/src/superFilter/DateFilterFactory.ts +180 -0
- package/src/superFilter/dateFunction.ts +36 -0
- package/src/utils.ts +354 -0
- package/test-output/report/junit.xml +329 -0
- package/tests/JsToSqlParser.test.ts +163 -0
- package/tests/QueryBuilder.test.ts +1320 -0
- package/tests/js-lib/CallExpressionVisitor.test.ts +820 -0
- package/tests/mocks/MockQueryResolver.ts +14 -0
- package/tests/sanity.test.ts +146 -0
- package/tests/sql-lib/binary_expr.test.ts +75 -0
- package/tests/sql-lib/case.test.ts +117 -0
- package/tests/sql-lib/column.test.ts +87 -0
- package/tests/sql-lib/else.test.ts +56 -0
- package/tests/sql-lib/function.test.ts +96 -0
- package/tests/sql-lib/literal.test.ts +75 -0
- package/tests/sql-lib/select.test.ts +245 -0
- package/tests/sql-lib/unary_expr.test.ts +32 -0
- package/tests/utils.test.ts +13 -0
- package/tsconfig.json +24 -0
- package/tsdown.config.ts +23 -0
|
@@ -0,0 +1,1717 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/epm-query-builder/base/SharedFilterBuilder.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/epm-query-builder/base</a> SharedFilterBuilder.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">0% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>0/245</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/247</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>0/28</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">0% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>0/242</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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
611
|
+
<span class="cline-any cline-neutral"> </span>
|
|
612
|
+
<span class="cline-any cline-neutral"> </span>
|
|
613
|
+
<span class="cline-any cline-neutral"> </span>
|
|
614
|
+
<span class="cline-any cline-no"> </span>
|
|
615
|
+
<span class="cline-any cline-neutral"> </span>
|
|
616
|
+
<span class="cline-any cline-neutral"> </span>
|
|
617
|
+
<span class="cline-any cline-neutral"> </span>
|
|
618
|
+
<span class="cline-any cline-no"> </span>
|
|
619
|
+
<span class="cline-any cline-neutral"> </span>
|
|
620
|
+
<span class="cline-any cline-no"> </span>
|
|
621
|
+
<span class="cline-any cline-neutral"> </span>
|
|
622
|
+
<span class="cline-any cline-neutral"> </span>
|
|
623
|
+
<span class="cline-any cline-neutral"> </span>
|
|
624
|
+
<span class="cline-any cline-neutral"> </span>
|
|
625
|
+
<span class="cline-any cline-no"> </span>
|
|
626
|
+
<span class="cline-any cline-neutral"> </span>
|
|
627
|
+
<span class="cline-any cline-no"> </span>
|
|
628
|
+
<span class="cline-any cline-neutral"> </span>
|
|
629
|
+
<span class="cline-any cline-neutral"> </span>
|
|
630
|
+
<span class="cline-any cline-neutral"> </span>
|
|
631
|
+
<span class="cline-any cline-neutral"> </span>
|
|
632
|
+
<span class="cline-any cline-no"> </span>
|
|
633
|
+
<span class="cline-any cline-neutral"> </span>
|
|
634
|
+
<span class="cline-any cline-no"> </span>
|
|
635
|
+
<span class="cline-any cline-neutral"> </span>
|
|
636
|
+
<span class="cline-any cline-neutral"> </span>
|
|
637
|
+
<span class="cline-any cline-neutral"> </span>
|
|
638
|
+
<span class="cline-any cline-no"> </span>
|
|
639
|
+
<span class="cline-any cline-neutral"> </span>
|
|
640
|
+
<span class="cline-any cline-neutral"> </span>
|
|
641
|
+
<span class="cline-any cline-neutral"> </span>
|
|
642
|
+
<span class="cline-any cline-no"> </span>
|
|
643
|
+
<span class="cline-any cline-neutral"> </span>
|
|
644
|
+
<span class="cline-any cline-neutral"> </span>
|
|
645
|
+
<span class="cline-any cline-neutral"> </span>
|
|
646
|
+
<span class="cline-any cline-no"> </span>
|
|
647
|
+
<span class="cline-any cline-neutral"> </span>
|
|
648
|
+
<span class="cline-any cline-neutral"> </span>
|
|
649
|
+
<span class="cline-any cline-no"> </span>
|
|
650
|
+
<span class="cline-any cline-neutral"> </span>
|
|
651
|
+
<span class="cline-any cline-neutral"> </span>
|
|
652
|
+
<span class="cline-any cline-no"> </span>
|
|
653
|
+
<span class="cline-any cline-neutral"> </span>
|
|
654
|
+
<span class="cline-any cline-no"> </span>
|
|
655
|
+
<span class="cline-any cline-neutral"> </span>
|
|
656
|
+
<span class="cline-any cline-neutral"> </span>
|
|
657
|
+
<span class="cline-any cline-neutral"> </span>
|
|
658
|
+
<span class="cline-any cline-no"> </span>
|
|
659
|
+
<span class="cline-any cline-no"> </span>
|
|
660
|
+
<span class="cline-any cline-no"> </span>
|
|
661
|
+
<span class="cline-any cline-neutral"> </span>
|
|
662
|
+
<span class="cline-any cline-no"> </span>
|
|
663
|
+
<span class="cline-any cline-no"> </span>
|
|
664
|
+
<span class="cline-any cline-neutral"> </span>
|
|
665
|
+
<span class="cline-any cline-no"> </span>
|
|
666
|
+
<span class="cline-any cline-no"> </span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-no"> </span>
|
|
669
|
+
<span class="cline-any cline-no"> </span>
|
|
670
|
+
<span class="cline-any cline-no"> </span>
|
|
671
|
+
<span class="cline-any cline-no"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-no"> </span>
|
|
675
|
+
<span class="cline-any cline-no"> </span>
|
|
676
|
+
<span class="cline-any cline-no"> </span>
|
|
677
|
+
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-no"> </span>
|
|
679
|
+
<span class="cline-any cline-neutral"> </span>
|
|
680
|
+
<span class="cline-any cline-neutral"> </span>
|
|
681
|
+
<span class="cline-any cline-neutral"> </span>
|
|
682
|
+
<span class="cline-any cline-no"> </span>
|
|
683
|
+
<span class="cline-any cline-neutral"> </span>
|
|
684
|
+
<span class="cline-any cline-no"> </span>
|
|
685
|
+
<span class="cline-any cline-neutral"> </span>
|
|
686
|
+
<span class="cline-any cline-neutral"> </span>
|
|
687
|
+
<span class="cline-any cline-neutral"> </span>
|
|
688
|
+
<span class="cline-any cline-no"> </span>
|
|
689
|
+
<span class="cline-any cline-neutral"> </span>
|
|
690
|
+
<span class="cline-any cline-no"> </span>
|
|
691
|
+
<span class="cline-any cline-neutral"> </span>
|
|
692
|
+
<span class="cline-any cline-neutral"> </span>
|
|
693
|
+
<span class="cline-any cline-neutral"> </span>
|
|
694
|
+
<span class="cline-any cline-no"> </span>
|
|
695
|
+
<span class="cline-any cline-neutral"> </span>
|
|
696
|
+
<span class="cline-any cline-neutral"> </span>
|
|
697
|
+
<span class="cline-any cline-neutral"> </span>
|
|
698
|
+
<span class="cline-any cline-no"> </span>
|
|
699
|
+
<span class="cline-any cline-neutral"> </span>
|
|
700
|
+
<span class="cline-any cline-neutral"> </span>
|
|
701
|
+
<span class="cline-any cline-neutral"> </span>
|
|
702
|
+
<span class="cline-any cline-no"> </span>
|
|
703
|
+
<span class="cline-any cline-neutral"> </span>
|
|
704
|
+
<span class="cline-any cline-no"> </span>
|
|
705
|
+
<span class="cline-any cline-neutral"> </span>
|
|
706
|
+
<span class="cline-any cline-no"> </span>
|
|
707
|
+
<span class="cline-any cline-neutral"> </span>
|
|
708
|
+
<span class="cline-any cline-no"> </span>
|
|
709
|
+
<span class="cline-any cline-neutral"> </span>
|
|
710
|
+
<span class="cline-any cline-no"> </span>
|
|
711
|
+
<span class="cline-any cline-neutral"> </span>
|
|
712
|
+
<span class="cline-any cline-no"> </span>
|
|
713
|
+
<span class="cline-any cline-neutral"> </span>
|
|
714
|
+
<span class="cline-any cline-no"> </span>
|
|
715
|
+
<span class="cline-any cline-neutral"> </span>
|
|
716
|
+
<span class="cline-any cline-no"> </span>
|
|
717
|
+
<span class="cline-any cline-neutral"> </span>
|
|
718
|
+
<span class="cline-any cline-no"> </span>
|
|
719
|
+
<span class="cline-any cline-neutral"> </span>
|
|
720
|
+
<span class="cline-any cline-no"> </span>
|
|
721
|
+
<span class="cline-any cline-neutral"> </span>
|
|
722
|
+
<span class="cline-any cline-neutral"> </span>
|
|
723
|
+
<span class="cline-any cline-neutral"> </span>
|
|
724
|
+
<span class="cline-any cline-no"> </span>
|
|
725
|
+
<span class="cline-any cline-no"> </span>
|
|
726
|
+
<span class="cline-any cline-neutral"> </span>
|
|
727
|
+
<span class="cline-any cline-no"> </span>
|
|
728
|
+
<span class="cline-any cline-no"> </span>
|
|
729
|
+
<span class="cline-any cline-no"> </span>
|
|
730
|
+
<span class="cline-any cline-no"> </span>
|
|
731
|
+
<span class="cline-any cline-no"> </span>
|
|
732
|
+
<span class="cline-any cline-neutral"> </span>
|
|
733
|
+
<span class="cline-any cline-neutral"> </span>
|
|
734
|
+
<span class="cline-any cline-no"> </span>
|
|
735
|
+
<span class="cline-any cline-no"> </span>
|
|
736
|
+
<span class="cline-any cline-neutral"> </span>
|
|
737
|
+
<span class="cline-any cline-no"> </span>
|
|
738
|
+
<span class="cline-any cline-no"> </span>
|
|
739
|
+
<span class="cline-any cline-no"> </span>
|
|
740
|
+
<span class="cline-any cline-no"> </span>
|
|
741
|
+
<span class="cline-any cline-no"> </span>
|
|
742
|
+
<span class="cline-any cline-no"> </span>
|
|
743
|
+
<span class="cline-any cline-no"> </span>
|
|
744
|
+
<span class="cline-any cline-no"> </span>
|
|
745
|
+
<span class="cline-any cline-no"> </span>
|
|
746
|
+
<span class="cline-any cline-neutral"> </span>
|
|
747
|
+
<span class="cline-any cline-neutral"> </span>
|
|
748
|
+
<span class="cline-any cline-no"> </span>
|
|
749
|
+
<span class="cline-any cline-no"> </span>
|
|
750
|
+
<span class="cline-any cline-no"> </span>
|
|
751
|
+
<span class="cline-any cline-neutral"> </span>
|
|
752
|
+
<span class="cline-any cline-no"> </span>
|
|
753
|
+
<span class="cline-any cline-no"> </span>
|
|
754
|
+
<span class="cline-any cline-neutral"> </span>
|
|
755
|
+
<span class="cline-any cline-neutral"> </span>
|
|
756
|
+
<span class="cline-any cline-no"> </span>
|
|
757
|
+
<span class="cline-any cline-no"> </span>
|
|
758
|
+
<span class="cline-any cline-no"> </span>
|
|
759
|
+
<span class="cline-any cline-neutral"> </span>
|
|
760
|
+
<span class="cline-any cline-no"> </span>
|
|
761
|
+
<span class="cline-any cline-no"> </span>
|
|
762
|
+
<span class="cline-any cline-neutral"> </span>
|
|
763
|
+
<span class="cline-any cline-neutral"> </span>
|
|
764
|
+
<span class="cline-any cline-no"> </span>
|
|
765
|
+
<span class="cline-any cline-no"> </span>
|
|
766
|
+
<span class="cline-any cline-no"> </span>
|
|
767
|
+
<span class="cline-any cline-no"> </span>
|
|
768
|
+
<span class="cline-any cline-no"> </span>
|
|
769
|
+
<span class="cline-any cline-no"> </span>
|
|
770
|
+
<span class="cline-any cline-neutral"> </span>
|
|
771
|
+
<span class="cline-any cline-neutral"> </span>
|
|
772
|
+
<span class="cline-any cline-no"> </span>
|
|
773
|
+
<span class="cline-any cline-neutral"> </span>
|
|
774
|
+
<span class="cline-any cline-neutral"> </span>
|
|
775
|
+
<span class="cline-any cline-neutral"> </span>
|
|
776
|
+
<span class="cline-any cline-no"> </span>
|
|
777
|
+
<span class="cline-any cline-no"> </span>
|
|
778
|
+
<span class="cline-any cline-neutral"> </span>
|
|
779
|
+
<span class="cline-any cline-no"> </span>
|
|
780
|
+
<span class="cline-any cline-no"> </span>
|
|
781
|
+
<span class="cline-any cline-no"> </span>
|
|
782
|
+
<span class="cline-any cline-no"> </span>
|
|
783
|
+
<span class="cline-any cline-no"> </span>
|
|
784
|
+
<span class="cline-any cline-no"> </span>
|
|
785
|
+
<span class="cline-any cline-neutral"> </span>
|
|
786
|
+
<span class="cline-any cline-no"> </span>
|
|
787
|
+
<span class="cline-any cline-neutral"> </span>
|
|
788
|
+
<span class="cline-any cline-no"> </span>
|
|
789
|
+
<span class="cline-any cline-neutral"> </span>
|
|
790
|
+
<span class="cline-any cline-no"> </span>
|
|
791
|
+
<span class="cline-any cline-neutral"> </span>
|
|
792
|
+
<span class="cline-any cline-no"> </span>
|
|
793
|
+
<span class="cline-any cline-neutral"> </span>
|
|
794
|
+
<span class="cline-any cline-no"> </span>
|
|
795
|
+
<span class="cline-any cline-neutral"> </span>
|
|
796
|
+
<span class="cline-any cline-no"> </span>
|
|
797
|
+
<span class="cline-any cline-neutral"> </span>
|
|
798
|
+
<span class="cline-any cline-no"> </span>
|
|
799
|
+
<span class="cline-any cline-neutral"> </span>
|
|
800
|
+
<span class="cline-any cline-no"> </span>
|
|
801
|
+
<span class="cline-any cline-neutral"> </span>
|
|
802
|
+
<span class="cline-any cline-no"> </span>
|
|
803
|
+
<span class="cline-any cline-neutral"> </span>
|
|
804
|
+
<span class="cline-any cline-no"> </span>
|
|
805
|
+
<span class="cline-any cline-neutral"> </span>
|
|
806
|
+
<span class="cline-any cline-no"> </span>
|
|
807
|
+
<span class="cline-any cline-neutral"> </span>
|
|
808
|
+
<span class="cline-any cline-no"> </span>
|
|
809
|
+
<span class="cline-any cline-neutral"> </span>
|
|
810
|
+
<span class="cline-any cline-no"> </span>
|
|
811
|
+
<span class="cline-any cline-neutral"> </span>
|
|
812
|
+
<span class="cline-any cline-neutral"> </span>
|
|
813
|
+
<span class="cline-any cline-no"> </span>
|
|
814
|
+
<span class="cline-any cline-neutral"> </span>
|
|
815
|
+
<span class="cline-any cline-neutral"> </span>
|
|
816
|
+
<span class="cline-any cline-no"> </span>
|
|
817
|
+
<span class="cline-any cline-no"> </span>
|
|
818
|
+
<span class="cline-any cline-neutral"> </span>
|
|
819
|
+
<span class="cline-any cline-no"> </span>
|
|
820
|
+
<span class="cline-any cline-no"> </span>
|
|
821
|
+
<span class="cline-any cline-no"> </span>
|
|
822
|
+
<span class="cline-any cline-no"> </span>
|
|
823
|
+
<span class="cline-any cline-no"> </span>
|
|
824
|
+
<span class="cline-any cline-neutral"> </span>
|
|
825
|
+
<span class="cline-any cline-neutral"> </span>
|
|
826
|
+
<span class="cline-any cline-no"> </span>
|
|
827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
828
|
+
<span class="cline-any cline-neutral"> </span>
|
|
829
|
+
<span class="cline-any cline-neutral"> </span>
|
|
830
|
+
<span class="cline-any cline-no"> </span>
|
|
831
|
+
<span class="cline-any cline-no"> </span>
|
|
832
|
+
<span class="cline-any cline-neutral"> </span>
|
|
833
|
+
<span class="cline-any cline-neutral"> </span>
|
|
834
|
+
<span class="cline-any cline-no"> </span>
|
|
835
|
+
<span class="cline-any cline-neutral"> </span>
|
|
836
|
+
<span class="cline-any cline-neutral"> </span>
|
|
837
|
+
<span class="cline-any cline-neutral"> </span>
|
|
838
|
+
<span class="cline-any cline-neutral"> </span>
|
|
839
|
+
<span class="cline-any cline-no"> </span>
|
|
840
|
+
<span class="cline-any cline-no"> </span>
|
|
841
|
+
<span class="cline-any cline-neutral"> </span>
|
|
842
|
+
<span class="cline-any cline-no"> </span>
|
|
843
|
+
<span class="cline-any cline-no"> </span>
|
|
844
|
+
<span class="cline-any cline-no"> </span>
|
|
845
|
+
<span class="cline-any cline-no"> </span>
|
|
846
|
+
<span class="cline-any cline-no"> </span>
|
|
847
|
+
<span class="cline-any cline-no"> </span>
|
|
848
|
+
<span class="cline-any cline-neutral"> </span>
|
|
849
|
+
<span class="cline-any cline-no"> </span>
|
|
850
|
+
<span class="cline-any cline-neutral"> </span>
|
|
851
|
+
<span class="cline-any cline-neutral"> </span>
|
|
852
|
+
<span class="cline-any cline-no"> </span>
|
|
853
|
+
<span class="cline-any cline-no"> </span>
|
|
854
|
+
<span class="cline-any cline-no"> </span>
|
|
855
|
+
<span class="cline-any cline-no"> </span>
|
|
856
|
+
<span class="cline-any cline-no"> </span>
|
|
857
|
+
<span class="cline-any cline-neutral"> </span>
|
|
858
|
+
<span class="cline-any cline-no"> </span>
|
|
859
|
+
<span class="cline-any cline-no"> </span>
|
|
860
|
+
<span class="cline-any cline-no"> </span>
|
|
861
|
+
<span class="cline-any cline-neutral"> </span>
|
|
862
|
+
<span class="cline-any cline-neutral"> </span>
|
|
863
|
+
<span class="cline-any cline-no"> </span>
|
|
864
|
+
<span class="cline-any cline-no"> </span>
|
|
865
|
+
<span class="cline-any cline-neutral"> </span>
|
|
866
|
+
<span class="cline-any cline-no"> </span>
|
|
867
|
+
<span class="cline-any cline-no"> </span>
|
|
868
|
+
<span class="cline-any cline-neutral"> </span>
|
|
869
|
+
<span class="cline-any cline-neutral"> </span>
|
|
870
|
+
<span class="cline-any cline-no"> </span>
|
|
871
|
+
<span class="cline-any cline-no"> </span>
|
|
872
|
+
<span class="cline-any cline-neutral"> </span>
|
|
873
|
+
<span class="cline-any cline-no"> </span>
|
|
874
|
+
<span class="cline-any cline-no"> </span>
|
|
875
|
+
<span class="cline-any cline-no"> </span>
|
|
876
|
+
<span class="cline-any cline-no"> </span>
|
|
877
|
+
<span class="cline-any cline-no"> </span>
|
|
878
|
+
<span class="cline-any cline-neutral"> </span>
|
|
879
|
+
<span class="cline-any cline-no"> </span>
|
|
880
|
+
<span class="cline-any cline-neutral"> </span>
|
|
881
|
+
<span class="cline-any cline-no"> </span>
|
|
882
|
+
<span class="cline-any cline-neutral"> </span>
|
|
883
|
+
<span class="cline-any cline-no"> </span>
|
|
884
|
+
<span class="cline-any cline-no"> </span>
|
|
885
|
+
<span class="cline-any cline-neutral"> </span>
|
|
886
|
+
<span class="cline-any cline-no"> </span>
|
|
887
|
+
<span class="cline-any cline-no"> </span>
|
|
888
|
+
<span class="cline-any cline-neutral"> </span>
|
|
889
|
+
<span class="cline-any cline-no"> </span>
|
|
890
|
+
<span class="cline-any cline-no"> </span>
|
|
891
|
+
<span class="cline-any cline-neutral"> </span>
|
|
892
|
+
<span class="cline-any cline-no"> </span>
|
|
893
|
+
<span class="cline-any cline-no"> </span>
|
|
894
|
+
<span class="cline-any cline-neutral"> </span>
|
|
895
|
+
<span class="cline-any cline-no"> </span>
|
|
896
|
+
<span class="cline-any cline-no"> </span>
|
|
897
|
+
<span class="cline-any cline-neutral"> </span>
|
|
898
|
+
<span class="cline-any cline-no"> </span>
|
|
899
|
+
<span class="cline-any cline-no"> </span>
|
|
900
|
+
<span class="cline-any cline-neutral"> </span>
|
|
901
|
+
<span class="cline-any cline-no"> </span>
|
|
902
|
+
<span class="cline-any cline-neutral"> </span>
|
|
903
|
+
<span class="cline-any cline-no"> </span>
|
|
904
|
+
<span class="cline-any cline-neutral"> </span>
|
|
905
|
+
<span class="cline-any cline-neutral"> </span>
|
|
906
|
+
<span class="cline-any cline-no"> </span>
|
|
907
|
+
<span class="cline-any cline-neutral"> </span>
|
|
908
|
+
<span class="cline-any cline-no"> </span>
|
|
909
|
+
<span class="cline-any cline-no"> </span>
|
|
910
|
+
<span class="cline-any cline-neutral"> </span>
|
|
911
|
+
<span class="cline-any cline-no"> </span>
|
|
912
|
+
<span class="cline-any cline-no"> </span>
|
|
913
|
+
<span class="cline-any cline-neutral"> </span>
|
|
914
|
+
<span class="cline-any cline-no"> </span>
|
|
915
|
+
<span class="cline-any cline-no"> </span>
|
|
916
|
+
<span class="cline-any cline-neutral"> </span>
|
|
917
|
+
<span class="cline-any cline-no"> </span>
|
|
918
|
+
<span class="cline-any cline-no"> </span>
|
|
919
|
+
<span class="cline-any cline-neutral"> </span>
|
|
920
|
+
<span class="cline-any cline-no"> </span>
|
|
921
|
+
<span class="cline-any cline-no"> </span>
|
|
922
|
+
<span class="cline-any cline-neutral"> </span>
|
|
923
|
+
<span class="cline-any cline-no"> </span>
|
|
924
|
+
<span class="cline-any cline-no"> </span>
|
|
925
|
+
<span class="cline-any cline-neutral"> </span>
|
|
926
|
+
<span class="cline-any cline-no"> </span>
|
|
927
|
+
<span class="cline-any cline-neutral"> </span>
|
|
928
|
+
<span class="cline-any cline-no"> </span>
|
|
929
|
+
<span class="cline-any cline-no"> </span>
|
|
930
|
+
<span class="cline-any cline-neutral"> </span>
|
|
931
|
+
<span class="cline-any cline-neutral"> </span>
|
|
932
|
+
<span class="cline-any cline-no"> </span>
|
|
933
|
+
<span class="cline-any cline-no"> </span>
|
|
934
|
+
<span class="cline-any cline-neutral"> </span>
|
|
935
|
+
<span class="cline-any cline-neutral"> </span>
|
|
936
|
+
<span class="cline-any cline-neutral"> </span>
|
|
937
|
+
<span class="cline-any cline-no"> </span>
|
|
938
|
+
<span class="cline-any cline-no"> </span>
|
|
939
|
+
<span class="cline-any cline-neutral"> </span>
|
|
940
|
+
<span class="cline-any cline-no"> </span>
|
|
941
|
+
<span class="cline-any cline-no"> </span>
|
|
942
|
+
<span class="cline-any cline-no"> </span>
|
|
943
|
+
<span class="cline-any cline-neutral"> </span>
|
|
944
|
+
<span class="cline-any cline-no"> </span>
|
|
945
|
+
<span class="cline-any cline-no"> </span>
|
|
946
|
+
<span class="cline-any cline-no"> </span>
|
|
947
|
+
<span class="cline-any cline-no"> </span>
|
|
948
|
+
<span class="cline-any cline-no"> </span>
|
|
949
|
+
<span class="cline-any cline-neutral"> </span>
|
|
950
|
+
<span class="cline-any cline-neutral"> </span>
|
|
951
|
+
<span class="cline-any cline-no"> </span>
|
|
952
|
+
<span class="cline-any cline-no"> </span>
|
|
953
|
+
<span class="cline-any cline-neutral"> </span>
|
|
954
|
+
<span class="cline-any cline-neutral"> </span>
|
|
955
|
+
<span class="cline-any cline-no"> </span>
|
|
956
|
+
<span class="cline-any cline-neutral"> </span>
|
|
957
|
+
<span class="cline-any cline-neutral"> </span>
|
|
958
|
+
<span class="cline-any cline-no"> </span>
|
|
959
|
+
<span class="cline-any cline-no"> </span>
|
|
960
|
+
<span class="cline-any cline-no"> </span>
|
|
961
|
+
<span class="cline-any cline-no"> </span>
|
|
962
|
+
<span class="cline-any cline-no"> </span>
|
|
963
|
+
<span class="cline-any cline-no"> </span>
|
|
964
|
+
<span class="cline-any cline-no"> </span>
|
|
965
|
+
<span class="cline-any cline-neutral"> </span>
|
|
966
|
+
<span class="cline-any cline-no"> </span>
|
|
967
|
+
<span class="cline-any cline-neutral"> </span>
|
|
968
|
+
<span class="cline-any cline-neutral"> </span>
|
|
969
|
+
<span class="cline-any cline-no"> </span>
|
|
970
|
+
<span class="cline-any cline-no"> </span>
|
|
971
|
+
<span class="cline-any cline-no"> </span>
|
|
972
|
+
<span class="cline-any cline-neutral"> </span>
|
|
973
|
+
<span class="cline-any cline-no"> </span>
|
|
974
|
+
<span class="cline-any cline-no"> </span>
|
|
975
|
+
<span class="cline-any cline-no"> </span>
|
|
976
|
+
<span class="cline-any cline-no"> </span>
|
|
977
|
+
<span class="cline-any cline-neutral"> </span>
|
|
978
|
+
<span class="cline-any cline-neutral"> </span>
|
|
979
|
+
<span class="cline-any cline-neutral"> </span>
|
|
980
|
+
<span class="cline-any cline-no"> </span>
|
|
981
|
+
<span class="cline-any cline-no"> </span>
|
|
982
|
+
<span class="cline-any cline-neutral"> </span>
|
|
983
|
+
<span class="cline-any cline-neutral"> </span>
|
|
984
|
+
<span class="cline-any cline-neutral"> </span>
|
|
985
|
+
<span class="cline-any cline-no"> </span>
|
|
986
|
+
<span class="cline-any cline-neutral"> </span>
|
|
987
|
+
<span class="cline-any cline-neutral"> </span>
|
|
988
|
+
<span class="cline-any cline-no"> </span>
|
|
989
|
+
<span class="cline-any cline-no"> </span>
|
|
990
|
+
<span class="cline-any cline-no"> </span>
|
|
991
|
+
<span class="cline-any cline-neutral"> </span>
|
|
992
|
+
<span class="cline-any cline-no"> </span>
|
|
993
|
+
<span class="cline-any cline-neutral"> </span>
|
|
994
|
+
<span class="cline-any cline-no"> </span>
|
|
995
|
+
<span class="cline-any cline-neutral"> </span>
|
|
996
|
+
<span class="cline-any cline-neutral"> </span>
|
|
997
|
+
<span class="cline-any cline-no"> </span>
|
|
998
|
+
<span class="cline-any cline-neutral"> </span>
|
|
999
|
+
<span class="cline-any cline-no"> </span>
|
|
1000
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1001
|
+
<span class="cline-any cline-no"> </span>
|
|
1002
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1003
|
+
<span class="cline-any cline-no"> </span>
|
|
1004
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1005
|
+
<span class="cline-any cline-no"> </span>
|
|
1006
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1007
|
+
<span class="cline-any cline-no"> </span>
|
|
1008
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1009
|
+
<span class="cline-any cline-no"> </span>
|
|
1010
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1011
|
+
<span class="cline-any cline-no"> </span>
|
|
1012
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1013
|
+
<span class="cline-any cline-no"> </span>
|
|
1014
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1015
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1016
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1017
|
+
<span class="cline-any cline-no"> </span>
|
|
1018
|
+
<span class="cline-any cline-no"> </span>
|
|
1019
|
+
<span class="cline-any cline-no"> </span>
|
|
1020
|
+
<span class="cline-any cline-no"> </span>
|
|
1021
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1022
|
+
<span class="cline-any cline-no"> </span>
|
|
1023
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1024
|
+
<span class="cline-any cline-no"> </span>
|
|
1025
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1026
|
+
<span class="cline-any cline-no"> </span>
|
|
1027
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1028
|
+
<span class="cline-any cline-no"> </span>
|
|
1029
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1030
|
+
<span class="cline-any cline-no"> </span>
|
|
1031
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1032
|
+
<span class="cline-any cline-no"> </span>
|
|
1033
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1034
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1035
|
+
<span class="cline-any cline-no"> </span>
|
|
1036
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1037
|
+
<span class="cline-any cline-no"> </span>
|
|
1038
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1039
|
+
<span class="cline-any cline-no"> </span>
|
|
1040
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1041
|
+
<span class="cline-any cline-no"> </span>
|
|
1042
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1043
|
+
<span class="cline-any cline-no"> </span>
|
|
1044
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1045
|
+
<span class="cline-any cline-no"> </span>
|
|
1046
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1047
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1048
|
+
<span class="cline-any cline-no"> </span>
|
|
1049
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1050
|
+
<span class="cline-any cline-no"> </span>
|
|
1051
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1052
|
+
<span class="cline-any cline-no"> </span>
|
|
1053
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1054
|
+
<span class="cline-any cline-no"> </span>
|
|
1055
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1056
|
+
<span class="cline-any cline-no"> </span>
|
|
1057
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1058
|
+
<span class="cline-any cline-no"> </span>
|
|
1059
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1060
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1061
|
+
<span class="cline-any cline-no"> </span>
|
|
1062
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1063
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1064
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1065
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1066
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1067
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1068
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1069
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1070
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1071
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1072
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1073
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1074
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1075
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1076
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1077
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1078
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1079
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1080
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1081
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1082
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1083
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1084
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1085
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1086
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1087
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1088
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1089
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1090
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1091
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1092
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1093
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1094
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1095
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1096
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1097
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1098
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1099
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1100
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1101
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1102
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1103
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1104
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1105
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1106
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1107
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1108
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1109
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1110
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1111
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1112
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1113
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1114
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1115
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1116
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1117
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1118
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1119
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1120
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1121
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1122
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1123
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1124
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1125
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1126
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1127
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1128
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1129
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1130
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1131
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1132
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1133
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1134
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1135
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1136
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1137
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1138
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1139
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1140
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1141
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1142
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1143
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1144
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1145
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1146
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1147
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1148
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1149
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1150
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1151
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1152
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1153
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1154
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import {
|
|
1155
|
+
FilterConfig,
|
|
1156
|
+
RangeFilter,
|
|
1157
|
+
Ra<span class="fstat-no" title="function not covered" >nk</span>ingConfig,
|
|
1158
|
+
} from '@epm-query-bu<span class="cstat-no" title="statement not covered" >ilder/types/query-builder-types';</span>
|
|
1159
|
+
import { BaseUtilities } from '@epm-query-builder/base/BaseUtilities';
|
|
1160
|
+
import * as ColumnRefUtils from '@epm-query-builder/base/ColumnRefUtils';
|
|
1161
|
+
|
|
1162
|
+
export c<span class="cstat-no" title="statement not covered" >lass SharedFilterBuilder {</span>
|
|
1163
|
+
private static mapToCanonicalOperator(op: string): string {
|
|
1164
|
+
const norm =<span class="cstat-no" title="statement not covered" > (op || '')</span>
|
|
1165
|
+
.toLowerCase()
|
|
1166
|
+
.replace(/[^a-z0-9]+/g, '_')
|
|
1167
|
+
.replace(/^_+|_+$/g, '');
|
|
1168
|
+
switch (norm) {
|
|
1169
|
+
case 'cont<span class="cstat-no" title="statement not covered" >ains':</span>
|
|
1170
|
+
return 'CONTAINS';
|
|
1171
|
+
case 'does<span class="cstat-no" title="statement not covered" >_not_contain':</span>
|
|
1172
|
+
case 'does_not_contains':
|
|
1173
|
+
case 'not_contains':
|
|
1174
|
+
case 'not_contain':
|
|
1175
|
+
return 'DOES_NOT_CONTAIN';
|
|
1176
|
+
case 'star<span class="cstat-no" title="statement not covered" >ts_with':</span>
|
|
1177
|
+
return 'STARTS_WITH';
|
|
1178
|
+
case 'does<span class="cstat-no" title="statement not covered" >_not_start_with':</span>
|
|
1179
|
+
case 'does_not_starts_with':
|
|
1180
|
+
case 'not_starts_with':
|
|
1181
|
+
case 'not_start_with':
|
|
1182
|
+
return '<span class="cstat-no" title="statement not covered" >DOES_NOT_START_WITH';</span>
|
|
1183
|
+
case 'ends_with':
|
|
1184
|
+
return 'ENDS_WITH';
|
|
1185
|
+
case 'does_not_end_with':
|
|
1186
|
+
case 'not_<span class="cstat-no" title="statement not covered" >ends_with':</span>
|
|
1187
|
+
case 'not_end_with':
|
|
1188
|
+
return 'DOES_NOT_END_WITH';
|
|
1189
|
+
case 'equals':
|
|
1190
|
+
case 'is_e<span class="cstat-no" title="statement not covered" >qual_to':</span>
|
|
1191
|
+
case 'is':
|
|
1192
|
+
return 'EQUALS';
|
|
1193
|
+
case 'not_<span class="cstat-no" title="statement not covered" >equals':</span>
|
|
1194
|
+
case 'is_not_equal_to':
|
|
1195
|
+
case 'is_not':
|
|
1196
|
+
return '<span class="cstat-no" title="statement not covered" >NOT_EQUALS';</span>
|
|
1197
|
+
case 'is_blank':
|
|
1198
|
+
case 'blan<span class="cstat-no" title="statement not covered" >k':</span>
|
|
1199
|
+
return 'IS_BLANK';
|
|
1200
|
+
case 'is_not_blank':
|
|
1201
|
+
<span class="fstat-no" title="function not covered" ></span> case 'not_blank':
|
|
1202
|
+
return 'IS_NOT<span class="cstat-no" title="statement not covered" >_BL</span>ANK';
|
|
1203
|
+
de<span class="cstat-no" title="statement not covered" >fault:</span>
|
|
1204
|
+
retu<span class="cstat-no" title="statement not covered" >rn norm.toUpperCase();</span>
|
|
1205
|
+
}
|
|
1206
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1207
|
+
static bui<span class="cstat-no" title="statement not covered" >ldRangeCondition(column: string, range: RangeFilter): string {</span>
|
|
1208
|
+
const parts: string[] = [];
|
|
1209
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1210
|
+
if (rang<span class="cstat-no" title="statement not covered" >e.from !== undefined && range.fromCondition) {</span>
|
|
1211
|
+
parts.push(this.buildRangeOperatorCondition(column, range.fromCondition, range.from));
|
|
1212
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1213
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1214
|
+
if (range.to !== un<span class="cstat-no" title="statement not covered" >defined && range.toCondition) {</span>
|
|
1215
|
+
pa<span class="cstat-no" title="statement not covered" >rts.push(this.buildRangeOperatorCondition(column, range.toCondition, rang</span>e.to));
|
|
1216
|
+
}
|
|
1217
|
+
<span class="fstat-no" title="function not covered" ></span>
|
|
1218
|
+
if (range.operator && ran<span class="cstat-no" title="statement not covered" >ge.value !== undefined) {</span>
|
|
1219
|
+
parts.push(this.buildRa<span class="cstat-no" title="statement not covered" >ngeOperatorCondition(column, range</span>.operator, range.value));
|
|
1220
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1221
|
+
|
|
1222
|
+
if (parts.le<span class="cstat-no" title="statement not covered" >ngth === 0) return '';</span>
|
|
1223
|
+
|
|
1224
|
+
const joiner = (range.logicalOperator || 'AND').toUpperCase() === 'OR' ? 'OR' : 'AND';
|
|
1225
|
+
return parts.length === 1 ? parts[0] : `(${parts.join(` ${joiner} `)})`;
|
|
1226
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1227
|
+
|
|
1228
|
+
private static<span class="cstat-no" title="statement not covered" > buildRangeOperatorCondition(</span>
|
|
1229
|
+
column: string,
|
|
1230
|
+
operator: string,
|
|
1231
|
+
value: string | number | boolean,
|
|
1232
|
+
): string {<span class="cstat-no" title="statement not covered" ></span>
|
|
1233
|
+
const operatorCode = this.mapToCanonicalOperator(operator);
|
|
1234
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1235
|
+
const escapedValue = String(value).replace(/'/g, "''");
|
|
1236
|
+
|
|
1237
|
+
switch (operatorCode) {
|
|
1238
|
+
case 'CONT<span class="cstat-no" title="statement not covered" >AINS':</span>
|
|
1239
|
+
return `LOWER(${column}) LIKE LOWER('%${escapedValue}%')`;
|
|
1240
|
+
case 'DOES_NOT_CONTAIN':
|
|
1241
|
+
case 'NOT_CONTAINS':
|
|
1242
|
+
case 'NOT <span class="cstat-no" title="statement not covered" >CONTAINS':</span>
|
|
1243
|
+
return `LOWER(${column}) NOT LIKE LOWER('%${escapedValue}%')`;
|
|
1244
|
+
case 'STARTS_WITH':
|
|
1245
|
+
return `LOWER(${column}) LIKE LOWER('${escapedValue}%')`;
|
|
1246
|
+
case 'DOES<span class="cstat-no" title="statement not covered" >_NOT_START_WITH':</span>
|
|
1247
|
+
case 'NOT_STARTS_WITH':
|
|
1248
|
+
case 'NOT <span class="cstat-no" title="statement not covered" >STARTS WITH':</span>
|
|
1249
|
+
return `LOWER(${column}) NOT LIKE LOWER('${escapedValue}%')`;
|
|
1250
|
+
case 'ENDS<span class="cstat-no" title="statement not covered" >_WITH':</span>
|
|
1251
|
+
return `LOWER(${column}) LIKE LOWER('%${escapedValue}')`;
|
|
1252
|
+
case 'DOES<span class="cstat-no" title="statement not covered" >_NOT_END_WITH':</span>
|
|
1253
|
+
case 'NOT_ENDS_WITH':
|
|
1254
|
+
case 'NOT <span class="cstat-no" title="statement not covered" >ENDS WITH':</span>
|
|
1255
|
+
return `LOWER(${column}) NOT LIKE LOWER('%${escapedValue}')`;
|
|
1256
|
+
case 'EQUA<span class="cstat-no" title="statement not covered" >LS':</span>
|
|
1257
|
+
case 'IS_EQUAL_TO':
|
|
1258
|
+
case 'IS':<span class="cstat-no" title="statement not covered" ></span>
|
|
1259
|
+
return BaseUtilities.buildFilterConditionForOperator(column, 'IS_EQUAL_TO', value);
|
|
1260
|
+
case 'NOT_<span class="cstat-no" title="statement not covered" >EQUALS':</span>
|
|
1261
|
+
case 'IS_NOT_EQUAL_TO':
|
|
1262
|
+
case 'IS_N<span class="cstat-no" title="statement not covered" >OT':</span>
|
|
1263
|
+
return BaseUtilities.buildFilterConditionForOperator(column, 'IS_NOT_EQUAL_TO', value);
|
|
1264
|
+
case 'IS_G<span class="cstat-no" title="statement not covered" >REATER_THAN':</span>
|
|
1265
|
+
return BaseUtilities.buildFilterConditionForOperator(column, 'IS_GREATER_THAN', value);
|
|
1266
|
+
case 'IS_GREATER_THAN_OR_EQUAL_TO':
|
|
1267
|
+
<span class="fstat-no" title="function not covered" ></span> return BaseUtilities.buildFilterConditionForOperator(
|
|
1268
|
+
<span class="cstat-no" title="statement not covered" > column,</span>
|
|
1269
|
+
'I<span class="cstat-no" title="statement not covered" >S_GREATER_T</span>HAN_OR_EQUAL_TO',
|
|
1270
|
+
value,
|
|
1271
|
+
);<span class="cstat-no" title="statement not covered" ></span>
|
|
1272
|
+
case 'IS_LESS_THAN':<span class="cstat-no" title="statement not covered" ></span>
|
|
1273
|
+
return Ba<span class="fstat-no" title="function not covered" >se</span>Utilities<span class="cstat-no" title="statement not covered" >.buildFilterConditionForOperator(column,</span> 'IS_LESS_THAN', value);
|
|
1274
|
+
case 'IS_LESS_<span class="fstat-no" title="function not covered" >TH</span>AN_OR_EQUAL_T<span class="cstat-no" title="statement not covered" >O':</span>
|
|
1275
|
+
<span class="cstat-no" title="statement not covered" > return BaseUtilities.buildFilterConditionForOperator(</span>
|
|
1276
|
+
column,
|
|
1277
|
+
<span class="fstat-no" title="function not covered" ></span> 'IS_LESS_THAN_OR_EQUAL_TO',
|
|
1278
|
+
<span class="cstat-no" title="statement not covered" > value,</span>
|
|
1279
|
+
);<span class="cstat-no" title="statement not covered" ></span>
|
|
1280
|
+
case 'IS_BLANK':
|
|
1281
|
+
return BaseUtil<span class="cstat-no" title="statement not covered" >ities.buildFilterConditionForOpe</span>rator(column, 'IS_BLANK', '');
|
|
1282
|
+
case 'IS_NOT_BLAN<span class="cstat-no" title="statement not covered" >K':</span>
|
|
1283
|
+
return BaseUt<span class="fstat-no" title="function not covered" >il</span>ities.b<span class="cstat-no" title="statement not covered" >uildFilterConditionForOperator(column, </span>'IS_NOT_BLANK', '');
|
|
1284
|
+
case 'IS_EMPTY<span class="fstat-no" title="function not covered" >':<span class="cstat-no" title="statement not covered" ></span></span>
|
|
1285
|
+
<span class="cstat-no" title="statement not covered" > return `TRIM(${column}) = ''`;</span>
|
|
1286
|
+
case '<span class="cstat-no" title="statement not covered" >IS_NOT_EMPT</span>Y':
|
|
1287
|
+
return `TRIM(${co<span class="cstat-no" title="statement not covered" >lumn}) != ''`;</span>
|
|
1288
|
+
default:<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>
|
|
1289
|
+
<span class="cstat-no" title="statement not covered" > return `LOWER(${column}) LIKE LOWER('%${escaped</span>Value}%')`;
|
|
1290
|
+
}
|
|
1291
|
+
}<span class="fstat-no" title="function not covered" ></span>
|
|
1292
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1293
|
+
static<span class="cstat-no" title="statement not covered" > buildRangeFilter(filter: FilterConfig): string {</span>
|
|
1294
|
+
if (!fil<span class="cstat-no" title="statement not covered" >ter.columnN</span>ames?.length || !filter.rangeFilter?.length) {
|
|
1295
|
+
return '';
|
|
1296
|
+
}<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>
|
|
1297
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1298
|
+
const column = this.getColumnReference(filter);
|
|
1299
|
+
<span class="fstat-no" title="function not covered" > co</span>nst conditions = filter.rangeFilter
|
|
1300
|
+
.map((range) => t<span class="cstat-no" title="statement not covered" >his.buildRangeConditio</span>n(column, range))
|
|
1301
|
+
.filter((condition) <span class="cstat-no" title="statement not covered" >=> condition);</span>
|
|
1302
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1303
|
+
return BaseUtilities.combineConditions(
|
|
1304
|
+
conditions,<span class="cstat-no" title="statement not covered" ></span>
|
|
1305
|
+
(filter.logicalOperator as<span class="cstat-no" title="statement not covered" > 'AND' | 'OR') || 'AND',</span>
|
|
1306
|
+
);
|
|
1307
|
+
}
|
|
1308
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1309
|
+
static buildValuesFilter(filt<span class="cstat-no" title="statement not covered" >er: FilterConfig): string {</span>
|
|
1310
|
+
if (!filter.columnNames?.lengt<span class="cstat-no" title="statement not covered" >h || !filter.valuesFilter?.length) {</span>
|
|
1311
|
+
re<span class="cstat-no" title="statement not covered" >turn '';</span>
|
|
1312
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1313
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1314
|
+
const column = this.getColumnReference(filter);
|
|
1315
|
+
const values = filter.valuesFilter
|
|
1316
|
+
.flatM<span class="cstat-no" title="statement not covered" >ap((vf) => (Array.isArray(vf.id) ? vf.id : [vf.id]))</span>
|
|
1317
|
+
.filter((v) => v !== undefined);
|
|
1318
|
+
|
|
1319
|
+
<span class="fstat-no" title="function not covered" > if</span> (values.length === 0) return '';
|
|
1320
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1321
|
+
const op<span class="cstat-no" title="statement not covered" >erator =</span>
|
|
1322
|
+
filter.valuesFilterApplicationType?.toUpperCase() === 'EXCLUDE' ? 'NOT IN' : 'IN';
|
|
1323
|
+
const valueList = v<span class="cstat-no" title="statement not covered" >alues.map((v) => BaseUtilities.f</span>ormatValue(v.toString())).join(',');
|
|
1324
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
|
|
1325
|
+
return `${column} ${operator}<span class="cstat-no" title="statement not covered" > (${valueList})`;</span>
|
|
1326
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1327
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1328
|
+
static bui<span class="cstat-no" title="statement not covered" >ldRankingFilter(filter: FilterConfig): string {</span>
|
|
1329
|
+
const rankingConfigs =
|
|
1330
|
+
filter.ranking<span class="cstat-no" title="statement not covered" >Filter || (filter.rankingConfig ? [filter.rankingConfig] : </span>[]);
|
|
1331
|
+
|
|
1332
|
+
if (!rankingConf<span class="cstat-no" title="statement not covered" >igs.length || !filter.columnNames?.length) {</span>
|
|
1333
|
+
return '';
|
|
1334
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1335
|
+
|
|
1336
|
+
const conditions<span class="cstat-no" title="statement not covered" > = rankingConfigs.map((rankingConfig) =></span>
|
|
1337
|
+
this.buildSingleRankingCondition(filter, rankingConfig),
|
|
1338
|
+
);<span class="cstat-no" title="statement not covered" ></span>
|
|
1339
|
+
|
|
1340
|
+
return BaseUtili<span class="cstat-no" title="statement not covered" >ties.combineConditions(</span>
|
|
1341
|
+
conditions,
|
|
1342
|
+
(filter.logica<span class="cstat-no" title="statement not covered" >lOperator as 'AND' | 'OR') || 'AND',</span>
|
|
1343
|
+
);
|
|
1344
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1345
|
+
|
|
1346
|
+
private static bui<span class="cstat-no" title="statement not covered" >ldSingleRankingCondition(</span>
|
|
1347
|
+
filter: FilterConfig,
|
|
1348
|
+
rankingConfig: R<span class="cstat-no" title="statement not covered" >ankingConfig,</span>
|
|
1349
|
+
): string {
|
|
1350
|
+
const column = f<span class="cstat-no" title="statement not covered" >ilter.columnNames![0];</span>
|
|
1351
|
+
const tableName = filter.tableNames?.[0] || rankingConfig.rankByTableName || '';
|
|
1352
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1353
|
+
const rankByColumnId =
|
|
1354
|
+
rankingConfig.<span class="cstat-no" title="statement not covered" >rankByColumnId ||</span>
|
|
1355
|
+
`${rankingConfig.rankByTableName || ''}[${rankingConfig.rankByColumnName || column}]`;
|
|
1356
|
+
const actualColumnId = BaseUtilities.extractColumnIdFromHierarchy(rankByColumnId);
|
|
1357
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1358
|
+
const rankByColumnRef = tableName
|
|
1359
|
+
<span class="fstat-no" title="function not covered" ></span> ? BaseUtilities.buildColumnReference(tableName, actualColumnId)
|
|
1360
|
+
: <span class="cstat-no" title="statement not covered" >`"${actualColumnId}"`;</span>
|
|
1361
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1362
|
+
const aggregationType = BaseUtilities.mapAggregationType(
|
|
1363
|
+
rankingConfig.ran<span class="cstat-no" title="statement not covered" >kByAggregationType || 'SUM',</span>
|
|
1364
|
+
);<span class="cstat-no" title="statement not covered" ></span>
|
|
1365
|
+
cons<span class="cstat-no" title="statement not covered" >t orderDirection = rankingConfig.type === 'TOP' ? 'DESC' : 'ASC';</span>
|
|
1366
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1367
|
+
const measur<span class="cstat-no" title="statement not covered" >eExpression =</span>
|
|
1368
|
+
aggregationType !== 'NONE' ? `${aggregationType}(${rankByColumnRef})` : rankByColumnRef;
|
|
1369
|
+
|
|
1370
|
+
if (rankingC<span class="cstat-no" title="statement not covered" >onfig.isPercentage) {</span>
|
|
1371
|
+
const percentileValue = rankingConfig.value / 100;
|
|
1372
|
+
return `PERCENT_RANK() OVER (ORDER BY ${measureExpression} ${orderDirection}) <= ${percentileValue}`;
|
|
1373
|
+
} else {
|
|
1374
|
+
return<span class="cstat-no" title="statement not covered" > `ROW_NUMBER() OVER (ORDER BY ${measureExpression} ${orderDirection}) <= ${rankingConfig.value}`;</span>
|
|
1375
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
static buildSe<span class="cstat-no" title="statement not covered" >archFilter(filter: FilterConfig)</span>: string {
|
|
1379
|
+
if (!filter.columnNames?.length || !filter.searchConditions?.length) {
|
|
1380
|
+
return '';
|
|
1381
|
+
}
|
|
1382
|
+
<span class="fstat-no" title="function not covered" ></span>
|
|
1383
|
+
cons<span class="cstat-no" title="statement not covered" >t column = this.getColumnReference(filter);</span>
|
|
1384
|
+
const co<span class="cstat-no" title="statement not covered" >nditions = </span>filter.searchConditions.map((condition) => {
|
|
1385
|
+
const operatorCode = this.mapToCanonicalOperator(condition.operator || '');
|
|
1386
|
+
const rawValue = S<span class="cstat-no" title="statement not covered" >tring(condition.val</span>ue ?? '');
|
|
1387
|
+
const escapedValue = rawVa<span class="cstat-no" title="statement not covered" >lue</span>.replace(/'/g, "''");
|
|
1388
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
|
|
1389
|
+
switch<span class="cstat-no" title="statement not covered" > (operatorCode) {</span>
|
|
1390
|
+
case 'CONTAINS':<span class="cstat-no" title="statement not covered" ></span>
|
|
1391
|
+
return `LOWER($<span class="fstat-no" title="function not covered" >{c</span>olumn}) LIKE <span class="cstat-no" title="statement not covered" >LOWER('%${escapedValue}%')`;</span>
|
|
1392
|
+
case 'DOES_NOT_CONTAIN':
|
|
1393
|
+
return<span class="cstat-no" title="statement not covered" > `LOWER(${column}) NOT LIKE LOWER('%${esca</span>pedValue}%')`;
|
|
1394
|
+
case 'STARTS_WITH':
|
|
1395
|
+
return `LOWER(${column}) LIKE LOWER('${escapedValue}%')`;
|
|
1396
|
+
<span class="cstat-no" title="statement not covered" > case 'DOES_NOT_START_WITH':</span>
|
|
1397
|
+
re<span class="cstat-no" title="statement not covered" >turn `LOWER</span>(${column}) NOT LIKE LOWER('${escapedValue}%')`;
|
|
1398
|
+
case 'ENDS_WITH':<span class="cstat-no" title="statement not covered" ></span>
|
|
1399
|
+
<span class="cstat-no" title="statement not covered" > return `LOWER(${column}) LIKE LOWER('%${escapedValue}')`;</span>
|
|
1400
|
+
case<span class="cstat-no" title="statement not covered" > 'DOES_NOT_END_WITH':</span>
|
|
1401
|
+
return `LOWER(${column}) NOT LIKE LOWER('%${escapedValue}')`;
|
|
1402
|
+
case 'EQUALS':<span class="cstat-no" title="statement not covered" ></span>
|
|
1403
|
+
return `${colum<span class="cstat-no" title="statement not covered" >n} = ${BaseUtilities.formatVa</span>lue(rawValue)}`;
|
|
1404
|
+
<span class="cstat-no" title="statement not covered" > case 'NOT_EQUALS':</span>
|
|
1405
|
+
return `${column} != ${BaseUtilities.formatValue(rawValue)}`;
|
|
1406
|
+
<span class="fstat-no" title="function not covered" ></span> case 'IS_BLANK':
|
|
1407
|
+
<span class="cstat-no" title="statement not covered" > return `${column} IS NULL`;</span>
|
|
1408
|
+
case<span class="cstat-no" title="statement not covered" > 'IS_NOT_BL</span>ANK':
|
|
1409
|
+
return `${column} IS NOT NULL`;
|
|
1410
|
+
case 'IS_EMPTY'<span class="cstat-no" title="statement not covered" >:</span>
|
|
1411
|
+
<span class="cstat-no" title="statement not covered" > return `TRIM(${column}) = ''`;</span>
|
|
1412
|
+
case 'IS_NOT_EMPTY':
|
|
1413
|
+
<span class="fstat-no" title="function not covered" ></span> return `TRIM(${column}) != ''`;
|
|
1414
|
+
<span class="cstat-no" title="statement not covered" > default:</span>
|
|
1415
|
+
re<span class="cstat-no" title="statement not covered" >turn `LOWER</span>(${column}) LIKE LOWER('%${escapedValue}%')`;
|
|
1416
|
+
}
|
|
1417
|
+
});<span class="cstat-no" title="statement not covered" ></span>
|
|
1418
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1419
|
+
return BaseUtilities.combine<span class="cstat-no" title="statement not covered" >Conditions(conditions, 'AND</span>');
|
|
1420
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1421
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1422
|
+
static buildBlankFilter(filter: FilterConfig): string {
|
|
1423
|
+
if (<span class="cstat-no" title="statement not covered" >!filter.columnNames?.length || !filter.blankFilterConfig) {</span>
|
|
1424
|
+
return '';
|
|
1425
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1426
|
+
|
|
1427
|
+
const column = t<span class="cstat-no" title="statement not covered" >his.getColumnReference(filter);</span>
|
|
1428
|
+
const blankConfi<span class="cstat-no" title="statement not covered" >g = fil</span>ter.blankFilterConfig;
|
|
1429
|
+
|
|
1430
|
+
if (blankConfig.<span class="cstat-no" title="statement not covered" >operator === 'IS_BLANK') {</span>
|
|
1431
|
+
if (blankConfi<span class="cstat-no" title="statement not covered" >g.treat</span>EmptyStringAsBlank) {
|
|
1432
|
+
return `(${column} IS NULL OR TRIM(${column}) = '')`;
|
|
1433
|
+
} else {<span class="cstat-no" title="statement not covered" ></span>
|
|
1434
|
+
return `${co<span class="cstat-no" title="statement not covered" >lumn} I</span>S NULL`;
|
|
1435
|
+
}
|
|
1436
|
+
} else {<span class="cstat-no" title="statement not covered" ></span>
|
|
1437
|
+
if (blankConfi<span class="cstat-no" title="statement not covered" >g.treat</span>EmptyStringAsBlank) {
|
|
1438
|
+
return `(${column} IS NOT NULL AND TRIM(${column}) != '')`;
|
|
1439
|
+
} else {<span class="cstat-no" title="statement not covered" ></span>
|
|
1440
|
+
return `${co<span class="cstat-no" title="statement not covered" >lumn} I</span>S NOT NULL`;
|
|
1441
|
+
}
|
|
1442
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1443
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1444
|
+
|
|
1445
|
+
static buildTupleF<span class="cstat-no" title="statement not covered" >ilter(filter: FilterConfig): str</span>ing {
|
|
1446
|
+
if (!filter.columnNames?.length || !filter.valuesFilter?.length) {
|
|
1447
|
+
return<span class="cstat-no" title="statement not covered" > '';</span>
|
|
1448
|
+
}
|
|
1449
|
+
|
|
1450
|
+
cons<span class="cstat-no" title="statement not covered" >t columns = filter.columnNames;</span>
|
|
1451
|
+
const tupleConditions: string[] = [];
|
|
1452
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1453
|
+
filter.value<span class="cstat-no" title="statement not covered" >sFilter</span>.forEach((valueItem) => {
|
|
1454
|
+
if (Array.isArray(valueItem.id)) {
|
|
1455
|
+
const tu<span class="cstat-no" title="statement not covered" >pleValues = valueItem.id</span>
|
|
1456
|
+
.map((<span class="cstat-no" title="statement not covered" >id, ind</span>ex) => `${columns[index]} = ${BaseUtilities.formatValue(id.toString())}`)
|
|
1457
|
+
.join(' AND ');
|
|
1458
|
+
tupleCon<span class="cstat-no" title="statement not covered" >ditions.push(`(${tupleValues})`);</span>
|
|
1459
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1460
|
+
});
|
|
1461
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1462
|
+
if (tupleCon<span class="cstat-no" title="statement not covered" >ditions</span>.length === 0) return '';
|
|
1463
|
+
|
|
1464
|
+
const isIncl<span class="cstat-no" title="statement not covered" >ude = filter.valuesFilterApplicationType === 'INCLUD</span>E';
|
|
1465
|
+
if (tupleCon<span class="cstat-no" title="statement not covered" >ditions</span>.length === 1) {
|
|
1466
|
+
return tupleConditions[0];
|
|
1467
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1468
|
+
const joiner<span class="cstat-no" title="statement not covered" > = isIn</span>clude ? ' OR ' : ' AND NOT ';
|
|
1469
|
+
const combined = tupleConditions.join(joiner);
|
|
1470
|
+
return `(${c<span class="cstat-no" title="statement not covered" >ombined})`;</span>
|
|
1471
|
+
}
|
|
1472
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1473
|
+
static bui<span class="cstat-no" title="statement not covered" >ldRelativePeriodFilter(filter: FilterConfig): string {</span>
|
|
1474
|
+
if (!filter.columnNames?.length || !filter.relativePeriodFilter) {
|
|
1475
|
+
return '';
|
|
1476
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1477
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1478
|
+
const column = this.getColumnReference(filter);
|
|
1479
|
+
return this.buildRelativePeriodCondition(column, filter.relativePeriodFilter);
|
|
1480
|
+
}<span class="fstat-no" title="function not covered" ></span>
|
|
1481
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1482
|
+
static bui<span class="cstat-no" title="statement not covered" >ldDateHiera</span>rchyFilter(filter: FilterConfig): string {
|
|
1483
|
+
if (!filter.columnNames?.length || !filter.dateHierarchyConfig) {
|
|
1484
|
+
return '';<span class="cstat-no" title="statement not covered" ></span>
|
|
1485
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1486
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1487
|
+
const tableName = filter.tableNames?.[0];
|
|
1488
|
+
const column = BaseUti<span class="cstat-no" title="statement not covered" >lities.buildColumnRe</span>ference(tableName, filter.columnNames[0]);
|
|
1489
|
+
const hierarchyConf<span class="cstat-no" title="statement not covered" >ig = filter.dateHierarchyConfig;</span>
|
|
1490
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1491
|
+
if (!hie<span class="cstat-no" title="statement not covered" >rarchyConfig.level) {</span>
|
|
1492
|
+
return `${<span class="cstat-no" title="statement not covered" >column} IS NOT NULL`;</span>
|
|
1493
|
+
}
|
|
1494
|
+
|
|
1495
|
+
if (!hierarchyConfig.values?.le<span class="cstat-no" title="statement not covered" >ngth) {<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
1496
|
+
let hierar<span class="cstat-no" title="statement not covered" >chyFunction: string;</span>
|
|
1497
|
+
switch (hierarchyConfig.level) {
|
|
1498
|
+
case 'YEAR':
|
|
1499
|
+
<span class="cstat-no" title="statement not covered" > hierarchyFunction = `EXTRACT(Y</span>EAR FROM ${column})`;
|
|
1500
|
+
break;
|
|
1501
|
+
<span class="fstat-no" title="function not covered" ></span> case 'QUARTER':
|
|
1502
|
+
<span class="cstat-no" title="statement not covered" > hierarchyFunction = `EXTRACT(QUARTER FROM ${column})`;</span>
|
|
1503
|
+
br<span class="cstat-no" title="statement not covered" >eak;</span>
|
|
1504
|
+
case 'MONTH':<span class="cstat-no" title="statement not covered" ></span>
|
|
1505
|
+
hierarchyFunction<span class="cstat-no" title="statement not covered" > = `EXTRACT(MONTH FROM ${co<span class="fstat-no" title="function not covered" >lu</span>mn})`;</span>
|
|
1506
|
+
break;<span class="cstat-no" title="statement not covered" ></span>
|
|
1507
|
+
case 'DAY':<span class="cstat-no" title="statement not covered" ></span>
|
|
1508
|
+
hi<span class="cstat-no" title="statement not covered" >erarchyFunction = `EXTRACT(DAY FROM ${column})`;</span>
|
|
1509
|
+
break;
|
|
1510
|
+
<span class="cstat-no" title="statement not covered" > case 'WEEK':</span>
|
|
1511
|
+
hierarchyFunction = `EXTRACT(WEEK FROM ${column})`;
|
|
1512
|
+
<span class="fstat-no" title="function not covered" ></span> break;
|
|
1513
|
+
case 'DAYOFWEEK':<span class="cstat-no" title="statement not covered" ></span>
|
|
1514
|
+
hierarchyFunction = `<span class="cstat-no" title="statement not covered" >EXTRACT(DAYOFWEEK FROM $</span>{column})`;
|
|
1515
|
+
break;<span class="cstat-no" title="statement not covered" ></span>
|
|
1516
|
+
default:
|
|
1517
|
+
<span class="cstat-no" title="statement not covered" > return `${column} IS NOT NULL`;</span>
|
|
1518
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1519
|
+
return `${hierarchyFuncti<span class="cstat-no" title="statement not covered" >on} IS NOT NULL`;</span>
|
|
1520
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1521
|
+
|
|
1522
|
+
let hierarchyFunction: string;
|
|
1523
|
+
switch (hierarchyConfig.level) {
|
|
1524
|
+
ca<span class="cstat-no" title="statement not covered" >se 'YEAR':</span>
|
|
1525
|
+
hier<span class="cstat-no" title="statement not covered" >archyFunction = `EXTRACT(YEAR FROM ${column})`;</span>
|
|
1526
|
+
break;
|
|
1527
|
+
case 'QUARTER':
|
|
1528
|
+
hierarchyFunction = `EXTRACT(QUARTER FROM ${column})`;
|
|
1529
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1530
|
+
case 'MONTH':
|
|
1531
|
+
<span class="fstat-no" title="function not covered" ></span> hierarchyFunction = `EXTRACT(MONTH FROM ${column})`;
|
|
1532
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1533
|
+
case '<span class="cstat-no" title="statement not covered" >DAY':</span>
|
|
1534
|
+
<span class="cstat-no" title="statement not covered" > hierarchyFunction = `EXTRACT(DAY FROM ${column})`;</span>
|
|
1535
|
+
break;
|
|
1536
|
+
case 'WEEK<span class="cstat-no" title="statement not covered" >':</span>
|
|
1537
|
+
hierarchyFunction = `EXTRACT(WEEK FROM ${column})`;
|
|
1538
|
+
break;<span class="cstat-no" title="statement not covered" ></span>
|
|
1539
|
+
case 'DAYOFWEEK':
|
|
1540
|
+
hierarchyFunction = `EXTRACT(DAYOFWEEK FROM ${column})`;
|
|
1541
|
+
break;<span class="cstat-no" title="statement not covered" ></span>
|
|
1542
|
+
default:
|
|
1543
|
+
return `<span class="cstat-no" title="statement not covered" >${column} IS NOT NULL`;</span>
|
|
1544
|
+
}
|
|
1545
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1546
|
+
if (hierarchyConfig.values.length === 1) {
|
|
1547
|
+
return `${<span class="cstat-no" title="statement not covered" >hierarchyFunction} = ${hierarchyConfig</span>.values[0]}`;
|
|
1548
|
+
} else {
|
|
1549
|
+
const valu<span class="cstat-no" title="statement not covered" >esList = hierarchyConfig.values.join('</span>, ');
|
|
1550
|
+
return `${hierarchyFunction} IN (${valuesList})`;
|
|
1551
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1552
|
+
}
|
|
1553
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1554
|
+
static buildFieldParameterFilter(filter: FilterConfig): string {
|
|
1555
|
+
if (!filter.<span class="cstat-no" title="statement not covered" >fieldParameterMapping) {</span>
|
|
1556
|
+
return '';
|
|
1557
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1558
|
+
|
|
1559
|
+
const mapping = filter.fieldParameterMapping;
|
|
1560
|
+
<span class="fstat-no" title="function not covered" > if</span> (!mapping.targetField) {
|
|
1561
|
+
return '';<span class="cstat-no" title="statement not covered" ></span>
|
|
1562
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1563
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1564
|
+
cons<span class="cstat-no" title="statement not covered" >t tableName = mapping.targetTable;</span>
|
|
1565
|
+
const column = BaseUtilities.buildColumnReference(tableName, mapping.targetField);
|
|
1566
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1567
|
+
if (mapping.filterValues?.length) {
|
|
1568
|
+
if (mapping.filter<span class="cstat-no" title="statement not covered" >Values.length === 1) {</span>
|
|
1569
|
+
return `${column} = '${mapping.filterValues[0]}'`;
|
|
1570
|
+
} else {<span class="cstat-no" title="statement not covered" ></span>
|
|
1571
|
+
const valuesList = mapping.filterValues.map((v) => `'${v}'`).join(', ');
|
|
1572
|
+
return `${column<span class="cstat-no" title="statement not covered" >} IN (${valuesList})`;</span>
|
|
1573
|
+
}
|
|
1574
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1575
|
+
|
|
1576
|
+
return `${column} IS<span class="cstat-no" title="statement not covered" > NOT NULL`;</span>
|
|
1577
|
+
}
|
|
1578
|
+
|
|
1579
|
+
static buildDa<span class="cstat-no" title="statement not covered" >teFilter(filter: FilterConfig): string {</span>
|
|
1580
|
+
if (!filter.dateRangeFilter?.length) return '';
|
|
1581
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1582
|
+
const column = this.getColumnReference(filter);
|
|
1583
|
+
const conditions = f<span class="cstat-no" title="statement not covered" >ilter.dateRangeFilter.map((dateRange) => {</span>
|
|
1584
|
+
const startDate = BaseUtilities.stringToDate(dateRange.startDate);
|
|
1585
|
+
const endDate = Ba<span class="cstat-no" title="statement not covered" >seUtilities.stringToDate(dateRange.endDate);</span>
|
|
1586
|
+
return `${column} BETWEEN ${startDate} AND ${endDate}`;
|
|
1587
|
+
});<span class="cstat-no" title="statement not covered" ></span>
|
|
1588
|
+
|
|
1589
|
+
return BaseUtilities<span class="cstat-no" title="statement not covered" >.combineConditions(conditions, 'AND');</span>
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1592
|
+
private static<span class="cstat-no" title="statement not covered" > getColumnReference(filter: FilterConfig): string {</span>
|
|
1593
|
+
const columnId = filter.columnIds?.[0];
|
|
1594
|
+
const columnFromName<span class="cstat-no" title="statement not covered" > = filter.columnNames?.[0];</span>
|
|
1595
|
+
const tableName =
|
|
1596
|
+
filter.tableNames?<span class="cstat-no" title="statement not covered" >.[0] ||</span>
|
|
1597
|
+
(columnId ? ColumnRefUtils.getTableNameFromId(columnId) || undefined : undefined);
|
|
1598
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1599
|
+
if (columnId) {
|
|
1600
|
+
const actualId = B<span class="cstat-no" title="statement not covered" >aseUtilities.extractColumnIdFromHierarchy(columnId);</span>
|
|
1601
|
+
const columnOnly = ColumnRefUtils.getColumnNameFromId(actualId);
|
|
1602
|
+
return tableName<span class="cstat-no" title="statement not covered" ></span>
|
|
1603
|
+
? BaseUtilities.buildColumnReference(tableName, columnOnly)
|
|
1604
|
+
: `"${columnOnly}"`;
|
|
1605
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1606
|
+
|
|
1607
|
+
if (columnFromName) {
|
|
1608
|
+
return tableName
|
|
1609
|
+
? BaseUtilities.buildColumnReference(tableName, columnFromName)
|
|
1610
|
+
: `"${columnFromName}"`;
|
|
1611
|
+
}
|
|
1612
|
+
return '';
|
|
1613
|
+
}
|
|
1614
|
+
|
|
1615
|
+
static buildFilterCondition(filter: FilterConfig): string {
|
|
1616
|
+
if (!filter) return '';
|
|
1617
|
+
|
|
1618
|
+
switch (filter.filterType?.toUpperCase()) {
|
|
1619
|
+
case 'VALUES':
|
|
1620
|
+
return this.buildValuesFilter(filter);
|
|
1621
|
+
case 'RANGE':
|
|
1622
|
+
return this.buildRangeFilter(filter);
|
|
1623
|
+
case 'DATE':
|
|
1624
|
+
case 'DATE_RANGE':
|
|
1625
|
+
return this.buildDateFilter(filter);
|
|
1626
|
+
case 'RANKING':
|
|
1627
|
+
return this.buildRankingFilter(filter);
|
|
1628
|
+
case 'SEARCH':
|
|
1629
|
+
return this.buildSearchFilter(filter);
|
|
1630
|
+
case 'BLANK':
|
|
1631
|
+
return this.buildBlankFilter(filter);
|
|
1632
|
+
case 'TUPLE':
|
|
1633
|
+
return this.buildTupleFilter(filter);
|
|
1634
|
+
case 'RELATIVE_PERIOD':
|
|
1635
|
+
return this.buildRelativePeriodFilter(filter);
|
|
1636
|
+
case 'DATE_HIERARCHY':
|
|
1637
|
+
return this.buildDateHierarchyFilter(filter);
|
|
1638
|
+
case 'FIELD_PARAMETER':
|
|
1639
|
+
return this.buildFieldParameterFilter(filter);
|
|
1640
|
+
default:
|
|
1641
|
+
return '';
|
|
1642
|
+
}
|
|
1643
|
+
}
|
|
1644
|
+
|
|
1645
|
+
static buildRelativePeriodCondition(
|
|
1646
|
+
column: string,
|
|
1647
|
+
config: { duration: number; period: string; relativeDateFilter: string },
|
|
1648
|
+
): string {
|
|
1649
|
+
const now = 'CURRENT_DATE';
|
|
1650
|
+
const duration = config.duration;
|
|
1651
|
+
const period = config.period;
|
|
1652
|
+
|
|
1653
|
+
switch (config.relativeDateFilter) {
|
|
1654
|
+
case 'IS_IN_THE_LAST':
|
|
1655
|
+
switch (period) {
|
|
1656
|
+
case 'DAYS':
|
|
1657
|
+
return `${column} >= ${now} - INTERVAL '${duration} days'`;
|
|
1658
|
+
case 'WEEKS':
|
|
1659
|
+
return `${column} >= ${now} - INTERVAL '${duration} weeks'`;
|
|
1660
|
+
case 'MONTHS':
|
|
1661
|
+
return `${column} >= ${now} - INTERVAL '${duration} months'`;
|
|
1662
|
+
case 'YEARS':
|
|
1663
|
+
return `${column} >= ${now} - INTERVAL '${duration} years'`;
|
|
1664
|
+
default:
|
|
1665
|
+
return `${column} >= ${now} - INTERVAL '${duration} days'`;
|
|
1666
|
+
}
|
|
1667
|
+
case 'IS_IN_THE_NEXT':
|
|
1668
|
+
switch (period) {
|
|
1669
|
+
case 'DAYS':
|
|
1670
|
+
return `${column} <= ${now} + INTERVAL '${duration} days'`;
|
|
1671
|
+
case 'WEEKS':
|
|
1672
|
+
return `${column} <= ${now} + INTERVAL '${duration} weeks'`;
|
|
1673
|
+
case 'MONTHS':
|
|
1674
|
+
return `${column} <= ${now} + INTERVAL '${duration} months'`;
|
|
1675
|
+
case 'YEARS':
|
|
1676
|
+
return `${column} <= ${now} + INTERVAL '${duration} years'`;
|
|
1677
|
+
default:
|
|
1678
|
+
return `${column} <= ${now} + INTERVAL '${duration} days'`;
|
|
1679
|
+
}
|
|
1680
|
+
case 'IS_IN_THIS':
|
|
1681
|
+
switch (period) {
|
|
1682
|
+
case 'DAYS':
|
|
1683
|
+
return `DATE_TRUNC('day', ${column}) = DATE_TRUNC('day', ${now})`;
|
|
1684
|
+
case 'WEEKS':
|
|
1685
|
+
return `DATE_TRUNC('week', ${column}) = DATE_TRUNC('week', ${now})`;
|
|
1686
|
+
case 'MONTHS':
|
|
1687
|
+
return `DATE_TRUNC('month', ${column}) = DATE_TRUNC('month', ${now})`;
|
|
1688
|
+
case 'YEARS':
|
|
1689
|
+
return `DATE_TRUNC('year', ${column}) = DATE_TRUNC('year', ${now})`;
|
|
1690
|
+
default:
|
|
1691
|
+
return `DATE_TRUNC('day', ${column}) = DATE_TRUNC('day', ${now})`;
|
|
1692
|
+
}
|
|
1693
|
+
default:
|
|
1694
|
+
return `${column} = ${now}`;
|
|
1695
|
+
}
|
|
1696
|
+
}
|
|
1697
|
+
}
|
|
1698
|
+
</pre></td></tr></table></pre>
|
|
1699
|
+
|
|
1700
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1701
|
+
</div><!-- /wrapper -->
|
|
1702
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1703
|
+
Code coverage generated by
|
|
1704
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1705
|
+
at 2025-12-03T07:39:44.024Z
|
|
1706
|
+
</div>
|
|
1707
|
+
<script src="../../../prettify.js"></script>
|
|
1708
|
+
<script>
|
|
1709
|
+
window.onload = function () {
|
|
1710
|
+
prettyPrint();
|
|
1711
|
+
};
|
|
1712
|
+
</script>
|
|
1713
|
+
<script src="../../../sorter.js"></script>
|
|
1714
|
+
<script src="../../../block-navigation.js"></script>
|
|
1715
|
+
</body>
|
|
1716
|
+
</html>
|
|
1717
|
+
|