@rebasepro/server-core 0.0.1-canary.4d4fb3e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +40 -0
  3. package/build-errors.txt +52 -0
  4. package/coverage/clover.xml +3739 -0
  5. package/coverage/coverage-final.json +31 -0
  6. package/coverage/lcov-report/base.css +224 -0
  7. package/coverage/lcov-report/block-navigation.js +87 -0
  8. package/coverage/lcov-report/favicon.png +0 -0
  9. package/coverage/lcov-report/index.html +266 -0
  10. package/coverage/lcov-report/prettify.css +1 -0
  11. package/coverage/lcov-report/prettify.js +2 -0
  12. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  13. package/coverage/lcov-report/sorter.js +210 -0
  14. package/coverage/lcov-report/src/api/ast-schema-editor.ts.html +952 -0
  15. package/coverage/lcov-report/src/api/errors.ts.html +472 -0
  16. package/coverage/lcov-report/src/api/graphql/graphql-schema-generator.ts.html +1069 -0
  17. package/coverage/lcov-report/src/api/graphql/index.html +116 -0
  18. package/coverage/lcov-report/src/api/index.html +176 -0
  19. package/coverage/lcov-report/src/api/openapi-generator.ts.html +565 -0
  20. package/coverage/lcov-report/src/api/rest/api-generator.ts.html +994 -0
  21. package/coverage/lcov-report/src/api/rest/index.html +131 -0
  22. package/coverage/lcov-report/src/api/rest/query-parser.ts.html +550 -0
  23. package/coverage/lcov-report/src/api/schema-editor-routes.ts.html +202 -0
  24. package/coverage/lcov-report/src/api/server.ts.html +823 -0
  25. package/coverage/lcov-report/src/auth/admin-routes.ts.html +973 -0
  26. package/coverage/lcov-report/src/auth/index.html +176 -0
  27. package/coverage/lcov-report/src/auth/jwt.ts.html +574 -0
  28. package/coverage/lcov-report/src/auth/middleware.ts.html +745 -0
  29. package/coverage/lcov-report/src/auth/password.ts.html +310 -0
  30. package/coverage/lcov-report/src/auth/services.ts.html +2074 -0
  31. package/coverage/lcov-report/src/collections/index.html +116 -0
  32. package/coverage/lcov-report/src/collections/loader.ts.html +232 -0
  33. package/coverage/lcov-report/src/db/auth-schema.ts.html +523 -0
  34. package/coverage/lcov-report/src/db/data-transformer.ts.html +1753 -0
  35. package/coverage/lcov-report/src/db/entityService.ts.html +700 -0
  36. package/coverage/lcov-report/src/db/index.html +146 -0
  37. package/coverage/lcov-report/src/db/services/EntityFetchService.ts.html +4048 -0
  38. package/coverage/lcov-report/src/db/services/EntityPersistService.ts.html +883 -0
  39. package/coverage/lcov-report/src/db/services/RelationService.ts.html +3121 -0
  40. package/coverage/lcov-report/src/db/services/entity-helpers.ts.html +442 -0
  41. package/coverage/lcov-report/src/db/services/index.html +176 -0
  42. package/coverage/lcov-report/src/db/services/index.ts.html +124 -0
  43. package/coverage/lcov-report/src/generate-drizzle-schema-logic.ts.html +1960 -0
  44. package/coverage/lcov-report/src/index.html +116 -0
  45. package/coverage/lcov-report/src/services/driver-registry.ts.html +631 -0
  46. package/coverage/lcov-report/src/services/index.html +131 -0
  47. package/coverage/lcov-report/src/services/postgresDataDriver.ts.html +3025 -0
  48. package/coverage/lcov-report/src/storage/LocalStorageController.ts.html +1189 -0
  49. package/coverage/lcov-report/src/storage/S3StorageController.ts.html +970 -0
  50. package/coverage/lcov-report/src/storage/index.html +161 -0
  51. package/coverage/lcov-report/src/storage/storage-registry.ts.html +646 -0
  52. package/coverage/lcov-report/src/storage/types.ts.html +451 -0
  53. package/coverage/lcov-report/src/utils/drizzle-conditions.ts.html +3082 -0
  54. package/coverage/lcov-report/src/utils/index.html +116 -0
  55. package/coverage/lcov.info +7179 -0
  56. package/dist/common/src/collections/CollectionRegistry.d.ts +48 -0
  57. package/dist/common/src/collections/index.d.ts +1 -0
  58. package/dist/common/src/data/buildRebaseData.d.ts +14 -0
  59. package/dist/common/src/index.d.ts +3 -0
  60. package/dist/common/src/util/builders.d.ts +57 -0
  61. package/dist/common/src/util/callbacks.d.ts +6 -0
  62. package/dist/common/src/util/collections.d.ts +11 -0
  63. package/dist/common/src/util/common.d.ts +2 -0
  64. package/dist/common/src/util/conditions.d.ts +26 -0
  65. package/dist/common/src/util/entities.d.ts +36 -0
  66. package/dist/common/src/util/enums.d.ts +3 -0
  67. package/dist/common/src/util/index.d.ts +16 -0
  68. package/dist/common/src/util/navigation_from_path.d.ts +34 -0
  69. package/dist/common/src/util/navigation_utils.d.ts +20 -0
  70. package/dist/common/src/util/parent_references_from_path.d.ts +6 -0
  71. package/dist/common/src/util/paths.d.ts +14 -0
  72. package/dist/common/src/util/permissions.d.ts +5 -0
  73. package/dist/common/src/util/references.d.ts +2 -0
  74. package/dist/common/src/util/relations.d.ts +12 -0
  75. package/dist/common/src/util/resolutions.d.ts +72 -0
  76. package/dist/common/src/util/storage.d.ts +24 -0
  77. package/dist/index-BeMqpmfQ.js +239 -0
  78. package/dist/index-BeMqpmfQ.js.map +1 -0
  79. package/dist/index-bl4J3lNb.js +55823 -0
  80. package/dist/index-bl4J3lNb.js.map +1 -0
  81. package/dist/index.es.js +58 -0
  82. package/dist/index.es.js.map +1 -0
  83. package/dist/index.umd.js +56062 -0
  84. package/dist/index.umd.js.map +1 -0
  85. package/dist/server-core/src/api/ast-schema-editor.d.ts +21 -0
  86. package/dist/server-core/src/api/collections_for_test/callbacks_test_collection.d.ts +2 -0
  87. package/dist/server-core/src/api/errors.d.ts +35 -0
  88. package/dist/server-core/src/api/graphql/graphql-schema-generator.d.ts +35 -0
  89. package/dist/server-core/src/api/graphql/index.d.ts +1 -0
  90. package/dist/server-core/src/api/index.d.ts +9 -0
  91. package/dist/server-core/src/api/openapi-generator.d.ts +2 -0
  92. package/dist/server-core/src/api/rest/api-generator.d.ts +64 -0
  93. package/dist/server-core/src/api/rest/index.d.ts +1 -0
  94. package/dist/server-core/src/api/rest/query-parser.d.ts +9 -0
  95. package/dist/server-core/src/api/schema-editor-routes.d.ts +3 -0
  96. package/dist/server-core/src/api/server.d.ts +40 -0
  97. package/dist/server-core/src/api/types.d.ts +90 -0
  98. package/dist/server-core/src/auth/admin-routes.d.ts +7 -0
  99. package/dist/server-core/src/auth/google-oauth.d.ts +20 -0
  100. package/dist/server-core/src/auth/index.d.ts +12 -0
  101. package/dist/server-core/src/auth/interfaces.d.ts +270 -0
  102. package/dist/server-core/src/auth/jwt.d.ts +42 -0
  103. package/dist/server-core/src/auth/middleware.d.ts +56 -0
  104. package/dist/server-core/src/auth/password.d.ts +22 -0
  105. package/dist/server-core/src/auth/rate-limiter.d.ts +31 -0
  106. package/dist/server-core/src/auth/routes.d.ts +17 -0
  107. package/dist/server-core/src/bootstrappers/index.d.ts +0 -0
  108. package/dist/server-core/src/collections/BackendCollectionRegistry.d.ts +13 -0
  109. package/dist/server-core/src/collections/loader.d.ts +5 -0
  110. package/dist/server-core/src/db/interfaces.d.ts +18 -0
  111. package/dist/server-core/src/email/index.d.ts +6 -0
  112. package/dist/server-core/src/email/smtp-email-service.d.ts +25 -0
  113. package/dist/server-core/src/email/templates.d.ts +33 -0
  114. package/dist/server-core/src/email/types.d.ts +110 -0
  115. package/dist/server-core/src/functions/function-loader.d.ts +17 -0
  116. package/dist/server-core/src/functions/function-routes.d.ts +10 -0
  117. package/dist/server-core/src/functions/index.d.ts +3 -0
  118. package/dist/server-core/src/history/history-routes.d.ts +23 -0
  119. package/dist/server-core/src/history/index.d.ts +1 -0
  120. package/dist/server-core/src/index.d.ts +24 -0
  121. package/dist/server-core/src/init.d.ts +49 -0
  122. package/dist/server-core/src/serve-spa.d.ts +30 -0
  123. package/dist/server-core/src/services/driver-registry.d.ts +78 -0
  124. package/dist/server-core/src/storage/LocalStorageController.d.ts +46 -0
  125. package/dist/server-core/src/storage/S3StorageController.d.ts +36 -0
  126. package/dist/server-core/src/storage/index.d.ts +18 -0
  127. package/dist/server-core/src/storage/routes.d.ts +38 -0
  128. package/dist/server-core/src/storage/storage-registry.d.ts +78 -0
  129. package/dist/server-core/src/storage/types.d.ts +91 -0
  130. package/dist/server-core/src/types/index.d.ts +11 -0
  131. package/dist/server-core/src/utils/logging.d.ts +9 -0
  132. package/dist/server-core/src/utils/sql.d.ts +27 -0
  133. package/dist/types/src/controllers/analytics_controller.d.ts +7 -0
  134. package/dist/types/src/controllers/auth.d.ts +117 -0
  135. package/dist/types/src/controllers/client.d.ts +58 -0
  136. package/dist/types/src/controllers/collection_registry.d.ts +44 -0
  137. package/dist/types/src/controllers/customization_controller.d.ts +54 -0
  138. package/dist/types/src/controllers/data.d.ts +141 -0
  139. package/dist/types/src/controllers/data_driver.d.ts +168 -0
  140. package/dist/types/src/controllers/database_admin.d.ts +11 -0
  141. package/dist/types/src/controllers/dialogs_controller.d.ts +36 -0
  142. package/dist/types/src/controllers/effective_role.d.ts +4 -0
  143. package/dist/types/src/controllers/index.d.ts +17 -0
  144. package/dist/types/src/controllers/local_config_persistence.d.ts +20 -0
  145. package/dist/types/src/controllers/navigation.d.ts +213 -0
  146. package/dist/types/src/controllers/registry.d.ts +51 -0
  147. package/dist/types/src/controllers/side_dialogs_controller.d.ts +67 -0
  148. package/dist/types/src/controllers/side_entity_controller.d.ts +89 -0
  149. package/dist/types/src/controllers/snackbar.d.ts +24 -0
  150. package/dist/types/src/controllers/storage.d.ts +173 -0
  151. package/dist/types/src/index.d.ts +4 -0
  152. package/dist/types/src/rebase_context.d.ts +101 -0
  153. package/dist/types/src/types/backend.d.ts +533 -0
  154. package/dist/types/src/types/builders.d.ts +14 -0
  155. package/dist/types/src/types/chips.d.ts +5 -0
  156. package/dist/types/src/types/collections.d.ts +812 -0
  157. package/dist/types/src/types/data_source.d.ts +64 -0
  158. package/dist/types/src/types/entities.d.ts +145 -0
  159. package/dist/types/src/types/entity_actions.d.ts +98 -0
  160. package/dist/types/src/types/entity_callbacks.d.ts +173 -0
  161. package/dist/types/src/types/entity_link_builder.d.ts +7 -0
  162. package/dist/types/src/types/entity_overrides.d.ts +9 -0
  163. package/dist/types/src/types/entity_views.d.ts +61 -0
  164. package/dist/types/src/types/export_import.d.ts +21 -0
  165. package/dist/types/src/types/index.d.ts +22 -0
  166. package/dist/types/src/types/locales.d.ts +4 -0
  167. package/dist/types/src/types/modify_collections.d.ts +5 -0
  168. package/dist/types/src/types/plugins.d.ts +225 -0
  169. package/dist/types/src/types/properties.d.ts +1091 -0
  170. package/dist/types/src/types/property_config.d.ts +70 -0
  171. package/dist/types/src/types/relations.d.ts +336 -0
  172. package/dist/types/src/types/slots.d.ts +228 -0
  173. package/dist/types/src/types/translations.d.ts +826 -0
  174. package/dist/types/src/types/user_management_delegate.d.ts +120 -0
  175. package/dist/types/src/types/websockets.d.ts +78 -0
  176. package/dist/types/src/users/index.d.ts +2 -0
  177. package/dist/types/src/users/roles.d.ts +22 -0
  178. package/dist/types/src/users/user.d.ts +46 -0
  179. package/history_diff.log +385 -0
  180. package/jest.config.cjs +16 -0
  181. package/package.json +86 -0
  182. package/scratch.ts +8 -0
  183. package/src/api/ast-schema-editor.ts +289 -0
  184. package/src/api/collections_for_test/callbacks_test_collection.ts +57 -0
  185. package/src/api/errors.ts +155 -0
  186. package/src/api/graphql/graphql-schema-generator.ts +334 -0
  187. package/src/api/graphql/index.ts +2 -0
  188. package/src/api/index.ts +11 -0
  189. package/src/api/openapi-generator.ts +160 -0
  190. package/src/api/rest/api-generator.ts +466 -0
  191. package/src/api/rest/index.ts +2 -0
  192. package/src/api/rest/query-parser.ts +155 -0
  193. package/src/api/schema-editor-routes.ts +39 -0
  194. package/src/api/server.ts +245 -0
  195. package/src/api/types.ts +90 -0
  196. package/src/auth/admin-routes.ts +488 -0
  197. package/src/auth/google-oauth.ts +60 -0
  198. package/src/auth/index.ts +21 -0
  199. package/src/auth/interfaces.ts +316 -0
  200. package/src/auth/jwt.ts +164 -0
  201. package/src/auth/middleware.ts +235 -0
  202. package/src/auth/password.ts +75 -0
  203. package/src/auth/rate-limiter.ts +129 -0
  204. package/src/auth/routes.ts +730 -0
  205. package/src/bootstrappers/index.ts +1 -0
  206. package/src/collections/BackendCollectionRegistry.ts +20 -0
  207. package/src/collections/loader.ts +49 -0
  208. package/src/db/interfaces.ts +60 -0
  209. package/src/email/index.ts +17 -0
  210. package/src/email/smtp-email-service.ts +88 -0
  211. package/src/email/templates.ts +301 -0
  212. package/src/email/types.ts +112 -0
  213. package/src/functions/function-loader.ts +91 -0
  214. package/src/functions/function-routes.ts +31 -0
  215. package/src/functions/index.ts +3 -0
  216. package/src/history/history-routes.ts +128 -0
  217. package/src/history/index.ts +2 -0
  218. package/src/index.ts +56 -0
  219. package/src/init.ts +309 -0
  220. package/src/serve-spa.ts +81 -0
  221. package/src/services/driver-registry.ts +182 -0
  222. package/src/storage/LocalStorageController.ts +368 -0
  223. package/src/storage/S3StorageController.ts +295 -0
  224. package/src/storage/index.ts +32 -0
  225. package/src/storage/routes.ts +247 -0
  226. package/src/storage/storage-registry.ts +187 -0
  227. package/src/storage/types.ts +122 -0
  228. package/src/types/index.ts +27 -0
  229. package/src/utils/logging.ts +35 -0
  230. package/src/utils/sql.ts +38 -0
  231. package/test/admin-routes.test.ts +591 -0
  232. package/test/api-generator.test.ts +458 -0
  233. package/test/ast-schema-editor.test.ts +61 -0
  234. package/test/auth-middleware-hono.test.ts +321 -0
  235. package/test/auth-routes.test.ts +868 -0
  236. package/test/driver-registry.test.ts +280 -0
  237. package/test/errors-hono.test.ts +133 -0
  238. package/test/errors.test.ts +150 -0
  239. package/test/jwt-security.test.ts +173 -0
  240. package/test/jwt.test.ts +311 -0
  241. package/test/middleware.test.ts +295 -0
  242. package/test/password.test.ts +165 -0
  243. package/test/query-parser.test.ts +258 -0
  244. package/test/rate-limiter.test.ts +102 -0
  245. package/test/storage-local.test.ts +278 -0
  246. package/test/storage-registry.test.ts +280 -0
  247. package/test/storage-routes.test.ts +218 -0
  248. package/test/storage-s3.test.ts +301 -0
  249. package/test-ast.ts +28 -0
  250. package/test_output.txt +1133 -0
  251. package/tsconfig.json +49 -0
  252. package/tsconfig.prod.json +20 -0
  253. package/vite.config.ts +78 -0
  254. package/vite.config.ts.timestamp-1775065397568-8a853255edf6e.mjs +46 -0
@@ -0,0 +1,4048 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/db/services/EntityFetchService.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/db/services</a> EntityFetchService.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">2.45% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>13/530</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/286</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">5.17% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>3/58</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">2.51% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>12/477</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
627
+ <a name='L562'></a><a href='#L562'>562</a>
628
+ <a name='L563'></a><a href='#L563'>563</a>
629
+ <a name='L564'></a><a href='#L564'>564</a>
630
+ <a name='L565'></a><a href='#L565'>565</a>
631
+ <a name='L566'></a><a href='#L566'>566</a>
632
+ <a name='L567'></a><a href='#L567'>567</a>
633
+ <a name='L568'></a><a href='#L568'>568</a>
634
+ <a name='L569'></a><a href='#L569'>569</a>
635
+ <a name='L570'></a><a href='#L570'>570</a>
636
+ <a name='L571'></a><a href='#L571'>571</a>
637
+ <a name='L572'></a><a href='#L572'>572</a>
638
+ <a name='L573'></a><a href='#L573'>573</a>
639
+ <a name='L574'></a><a href='#L574'>574</a>
640
+ <a name='L575'></a><a href='#L575'>575</a>
641
+ <a name='L576'></a><a href='#L576'>576</a>
642
+ <a name='L577'></a><a href='#L577'>577</a>
643
+ <a name='L578'></a><a href='#L578'>578</a>
644
+ <a name='L579'></a><a href='#L579'>579</a>
645
+ <a name='L580'></a><a href='#L580'>580</a>
646
+ <a name='L581'></a><a href='#L581'>581</a>
647
+ <a name='L582'></a><a href='#L582'>582</a>
648
+ <a name='L583'></a><a href='#L583'>583</a>
649
+ <a name='L584'></a><a href='#L584'>584</a>
650
+ <a name='L585'></a><a href='#L585'>585</a>
651
+ <a name='L586'></a><a href='#L586'>586</a>
652
+ <a name='L587'></a><a href='#L587'>587</a>
653
+ <a name='L588'></a><a href='#L588'>588</a>
654
+ <a name='L589'></a><a href='#L589'>589</a>
655
+ <a name='L590'></a><a href='#L590'>590</a>
656
+ <a name='L591'></a><a href='#L591'>591</a>
657
+ <a name='L592'></a><a href='#L592'>592</a>
658
+ <a name='L593'></a><a href='#L593'>593</a>
659
+ <a name='L594'></a><a href='#L594'>594</a>
660
+ <a name='L595'></a><a href='#L595'>595</a>
661
+ <a name='L596'></a><a href='#L596'>596</a>
662
+ <a name='L597'></a><a href='#L597'>597</a>
663
+ <a name='L598'></a><a href='#L598'>598</a>
664
+ <a name='L599'></a><a href='#L599'>599</a>
665
+ <a name='L600'></a><a href='#L600'>600</a>
666
+ <a name='L601'></a><a href='#L601'>601</a>
667
+ <a name='L602'></a><a href='#L602'>602</a>
668
+ <a name='L603'></a><a href='#L603'>603</a>
669
+ <a name='L604'></a><a href='#L604'>604</a>
670
+ <a name='L605'></a><a href='#L605'>605</a>
671
+ <a name='L606'></a><a href='#L606'>606</a>
672
+ <a name='L607'></a><a href='#L607'>607</a>
673
+ <a name='L608'></a><a href='#L608'>608</a>
674
+ <a name='L609'></a><a href='#L609'>609</a>
675
+ <a name='L610'></a><a href='#L610'>610</a>
676
+ <a name='L611'></a><a href='#L611'>611</a>
677
+ <a name='L612'></a><a href='#L612'>612</a>
678
+ <a name='L613'></a><a href='#L613'>613</a>
679
+ <a name='L614'></a><a href='#L614'>614</a>
680
+ <a name='L615'></a><a href='#L615'>615</a>
681
+ <a name='L616'></a><a href='#L616'>616</a>
682
+ <a name='L617'></a><a href='#L617'>617</a>
683
+ <a name='L618'></a><a href='#L618'>618</a>
684
+ <a name='L619'></a><a href='#L619'>619</a>
685
+ <a name='L620'></a><a href='#L620'>620</a>
686
+ <a name='L621'></a><a href='#L621'>621</a>
687
+ <a name='L622'></a><a href='#L622'>622</a>
688
+ <a name='L623'></a><a href='#L623'>623</a>
689
+ <a name='L624'></a><a href='#L624'>624</a>
690
+ <a name='L625'></a><a href='#L625'>625</a>
691
+ <a name='L626'></a><a href='#L626'>626</a>
692
+ <a name='L627'></a><a href='#L627'>627</a>
693
+ <a name='L628'></a><a href='#L628'>628</a>
694
+ <a name='L629'></a><a href='#L629'>629</a>
695
+ <a name='L630'></a><a href='#L630'>630</a>
696
+ <a name='L631'></a><a href='#L631'>631</a>
697
+ <a name='L632'></a><a href='#L632'>632</a>
698
+ <a name='L633'></a><a href='#L633'>633</a>
699
+ <a name='L634'></a><a href='#L634'>634</a>
700
+ <a name='L635'></a><a href='#L635'>635</a>
701
+ <a name='L636'></a><a href='#L636'>636</a>
702
+ <a name='L637'></a><a href='#L637'>637</a>
703
+ <a name='L638'></a><a href='#L638'>638</a>
704
+ <a name='L639'></a><a href='#L639'>639</a>
705
+ <a name='L640'></a><a href='#L640'>640</a>
706
+ <a name='L641'></a><a href='#L641'>641</a>
707
+ <a name='L642'></a><a href='#L642'>642</a>
708
+ <a name='L643'></a><a href='#L643'>643</a>
709
+ <a name='L644'></a><a href='#L644'>644</a>
710
+ <a name='L645'></a><a href='#L645'>645</a>
711
+ <a name='L646'></a><a href='#L646'>646</a>
712
+ <a name='L647'></a><a href='#L647'>647</a>
713
+ <a name='L648'></a><a href='#L648'>648</a>
714
+ <a name='L649'></a><a href='#L649'>649</a>
715
+ <a name='L650'></a><a href='#L650'>650</a>
716
+ <a name='L651'></a><a href='#L651'>651</a>
717
+ <a name='L652'></a><a href='#L652'>652</a>
718
+ <a name='L653'></a><a href='#L653'>653</a>
719
+ <a name='L654'></a><a href='#L654'>654</a>
720
+ <a name='L655'></a><a href='#L655'>655</a>
721
+ <a name='L656'></a><a href='#L656'>656</a>
722
+ <a name='L657'></a><a href='#L657'>657</a>
723
+ <a name='L658'></a><a href='#L658'>658</a>
724
+ <a name='L659'></a><a href='#L659'>659</a>
725
+ <a name='L660'></a><a href='#L660'>660</a>
726
+ <a name='L661'></a><a href='#L661'>661</a>
727
+ <a name='L662'></a><a href='#L662'>662</a>
728
+ <a name='L663'></a><a href='#L663'>663</a>
729
+ <a name='L664'></a><a href='#L664'>664</a>
730
+ <a name='L665'></a><a href='#L665'>665</a>
731
+ <a name='L666'></a><a href='#L666'>666</a>
732
+ <a name='L667'></a><a href='#L667'>667</a>
733
+ <a name='L668'></a><a href='#L668'>668</a>
734
+ <a name='L669'></a><a href='#L669'>669</a>
735
+ <a name='L670'></a><a href='#L670'>670</a>
736
+ <a name='L671'></a><a href='#L671'>671</a>
737
+ <a name='L672'></a><a href='#L672'>672</a>
738
+ <a name='L673'></a><a href='#L673'>673</a>
739
+ <a name='L674'></a><a href='#L674'>674</a>
740
+ <a name='L675'></a><a href='#L675'>675</a>
741
+ <a name='L676'></a><a href='#L676'>676</a>
742
+ <a name='L677'></a><a href='#L677'>677</a>
743
+ <a name='L678'></a><a href='#L678'>678</a>
744
+ <a name='L679'></a><a href='#L679'>679</a>
745
+ <a name='L680'></a><a href='#L680'>680</a>
746
+ <a name='L681'></a><a href='#L681'>681</a>
747
+ <a name='L682'></a><a href='#L682'>682</a>
748
+ <a name='L683'></a><a href='#L683'>683</a>
749
+ <a name='L684'></a><a href='#L684'>684</a>
750
+ <a name='L685'></a><a href='#L685'>685</a>
751
+ <a name='L686'></a><a href='#L686'>686</a>
752
+ <a name='L687'></a><a href='#L687'>687</a>
753
+ <a name='L688'></a><a href='#L688'>688</a>
754
+ <a name='L689'></a><a href='#L689'>689</a>
755
+ <a name='L690'></a><a href='#L690'>690</a>
756
+ <a name='L691'></a><a href='#L691'>691</a>
757
+ <a name='L692'></a><a href='#L692'>692</a>
758
+ <a name='L693'></a><a href='#L693'>693</a>
759
+ <a name='L694'></a><a href='#L694'>694</a>
760
+ <a name='L695'></a><a href='#L695'>695</a>
761
+ <a name='L696'></a><a href='#L696'>696</a>
762
+ <a name='L697'></a><a href='#L697'>697</a>
763
+ <a name='L698'></a><a href='#L698'>698</a>
764
+ <a name='L699'></a><a href='#L699'>699</a>
765
+ <a name='L700'></a><a href='#L700'>700</a>
766
+ <a name='L701'></a><a href='#L701'>701</a>
767
+ <a name='L702'></a><a href='#L702'>702</a>
768
+ <a name='L703'></a><a href='#L703'>703</a>
769
+ <a name='L704'></a><a href='#L704'>704</a>
770
+ <a name='L705'></a><a href='#L705'>705</a>
771
+ <a name='L706'></a><a href='#L706'>706</a>
772
+ <a name='L707'></a><a href='#L707'>707</a>
773
+ <a name='L708'></a><a href='#L708'>708</a>
774
+ <a name='L709'></a><a href='#L709'>709</a>
775
+ <a name='L710'></a><a href='#L710'>710</a>
776
+ <a name='L711'></a><a href='#L711'>711</a>
777
+ <a name='L712'></a><a href='#L712'>712</a>
778
+ <a name='L713'></a><a href='#L713'>713</a>
779
+ <a name='L714'></a><a href='#L714'>714</a>
780
+ <a name='L715'></a><a href='#L715'>715</a>
781
+ <a name='L716'></a><a href='#L716'>716</a>
782
+ <a name='L717'></a><a href='#L717'>717</a>
783
+ <a name='L718'></a><a href='#L718'>718</a>
784
+ <a name='L719'></a><a href='#L719'>719</a>
785
+ <a name='L720'></a><a href='#L720'>720</a>
786
+ <a name='L721'></a><a href='#L721'>721</a>
787
+ <a name='L722'></a><a href='#L722'>722</a>
788
+ <a name='L723'></a><a href='#L723'>723</a>
789
+ <a name='L724'></a><a href='#L724'>724</a>
790
+ <a name='L725'></a><a href='#L725'>725</a>
791
+ <a name='L726'></a><a href='#L726'>726</a>
792
+ <a name='L727'></a><a href='#L727'>727</a>
793
+ <a name='L728'></a><a href='#L728'>728</a>
794
+ <a name='L729'></a><a href='#L729'>729</a>
795
+ <a name='L730'></a><a href='#L730'>730</a>
796
+ <a name='L731'></a><a href='#L731'>731</a>
797
+ <a name='L732'></a><a href='#L732'>732</a>
798
+ <a name='L733'></a><a href='#L733'>733</a>
799
+ <a name='L734'></a><a href='#L734'>734</a>
800
+ <a name='L735'></a><a href='#L735'>735</a>
801
+ <a name='L736'></a><a href='#L736'>736</a>
802
+ <a name='L737'></a><a href='#L737'>737</a>
803
+ <a name='L738'></a><a href='#L738'>738</a>
804
+ <a name='L739'></a><a href='#L739'>739</a>
805
+ <a name='L740'></a><a href='#L740'>740</a>
806
+ <a name='L741'></a><a href='#L741'>741</a>
807
+ <a name='L742'></a><a href='#L742'>742</a>
808
+ <a name='L743'></a><a href='#L743'>743</a>
809
+ <a name='L744'></a><a href='#L744'>744</a>
810
+ <a name='L745'></a><a href='#L745'>745</a>
811
+ <a name='L746'></a><a href='#L746'>746</a>
812
+ <a name='L747'></a><a href='#L747'>747</a>
813
+ <a name='L748'></a><a href='#L748'>748</a>
814
+ <a name='L749'></a><a href='#L749'>749</a>
815
+ <a name='L750'></a><a href='#L750'>750</a>
816
+ <a name='L751'></a><a href='#L751'>751</a>
817
+ <a name='L752'></a><a href='#L752'>752</a>
818
+ <a name='L753'></a><a href='#L753'>753</a>
819
+ <a name='L754'></a><a href='#L754'>754</a>
820
+ <a name='L755'></a><a href='#L755'>755</a>
821
+ <a name='L756'></a><a href='#L756'>756</a>
822
+ <a name='L757'></a><a href='#L757'>757</a>
823
+ <a name='L758'></a><a href='#L758'>758</a>
824
+ <a name='L759'></a><a href='#L759'>759</a>
825
+ <a name='L760'></a><a href='#L760'>760</a>
826
+ <a name='L761'></a><a href='#L761'>761</a>
827
+ <a name='L762'></a><a href='#L762'>762</a>
828
+ <a name='L763'></a><a href='#L763'>763</a>
829
+ <a name='L764'></a><a href='#L764'>764</a>
830
+ <a name='L765'></a><a href='#L765'>765</a>
831
+ <a name='L766'></a><a href='#L766'>766</a>
832
+ <a name='L767'></a><a href='#L767'>767</a>
833
+ <a name='L768'></a><a href='#L768'>768</a>
834
+ <a name='L769'></a><a href='#L769'>769</a>
835
+ <a name='L770'></a><a href='#L770'>770</a>
836
+ <a name='L771'></a><a href='#L771'>771</a>
837
+ <a name='L772'></a><a href='#L772'>772</a>
838
+ <a name='L773'></a><a href='#L773'>773</a>
839
+ <a name='L774'></a><a href='#L774'>774</a>
840
+ <a name='L775'></a><a href='#L775'>775</a>
841
+ <a name='L776'></a><a href='#L776'>776</a>
842
+ <a name='L777'></a><a href='#L777'>777</a>
843
+ <a name='L778'></a><a href='#L778'>778</a>
844
+ <a name='L779'></a><a href='#L779'>779</a>
845
+ <a name='L780'></a><a href='#L780'>780</a>
846
+ <a name='L781'></a><a href='#L781'>781</a>
847
+ <a name='L782'></a><a href='#L782'>782</a>
848
+ <a name='L783'></a><a href='#L783'>783</a>
849
+ <a name='L784'></a><a href='#L784'>784</a>
850
+ <a name='L785'></a><a href='#L785'>785</a>
851
+ <a name='L786'></a><a href='#L786'>786</a>
852
+ <a name='L787'></a><a href='#L787'>787</a>
853
+ <a name='L788'></a><a href='#L788'>788</a>
854
+ <a name='L789'></a><a href='#L789'>789</a>
855
+ <a name='L790'></a><a href='#L790'>790</a>
856
+ <a name='L791'></a><a href='#L791'>791</a>
857
+ <a name='L792'></a><a href='#L792'>792</a>
858
+ <a name='L793'></a><a href='#L793'>793</a>
859
+ <a name='L794'></a><a href='#L794'>794</a>
860
+ <a name='L795'></a><a href='#L795'>795</a>
861
+ <a name='L796'></a><a href='#L796'>796</a>
862
+ <a name='L797'></a><a href='#L797'>797</a>
863
+ <a name='L798'></a><a href='#L798'>798</a>
864
+ <a name='L799'></a><a href='#L799'>799</a>
865
+ <a name='L800'></a><a href='#L800'>800</a>
866
+ <a name='L801'></a><a href='#L801'>801</a>
867
+ <a name='L802'></a><a href='#L802'>802</a>
868
+ <a name='L803'></a><a href='#L803'>803</a>
869
+ <a name='L804'></a><a href='#L804'>804</a>
870
+ <a name='L805'></a><a href='#L805'>805</a>
871
+ <a name='L806'></a><a href='#L806'>806</a>
872
+ <a name='L807'></a><a href='#L807'>807</a>
873
+ <a name='L808'></a><a href='#L808'>808</a>
874
+ <a name='L809'></a><a href='#L809'>809</a>
875
+ <a name='L810'></a><a href='#L810'>810</a>
876
+ <a name='L811'></a><a href='#L811'>811</a>
877
+ <a name='L812'></a><a href='#L812'>812</a>
878
+ <a name='L813'></a><a href='#L813'>813</a>
879
+ <a name='L814'></a><a href='#L814'>814</a>
880
+ <a name='L815'></a><a href='#L815'>815</a>
881
+ <a name='L816'></a><a href='#L816'>816</a>
882
+ <a name='L817'></a><a href='#L817'>817</a>
883
+ <a name='L818'></a><a href='#L818'>818</a>
884
+ <a name='L819'></a><a href='#L819'>819</a>
885
+ <a name='L820'></a><a href='#L820'>820</a>
886
+ <a name='L821'></a><a href='#L821'>821</a>
887
+ <a name='L822'></a><a href='#L822'>822</a>
888
+ <a name='L823'></a><a href='#L823'>823</a>
889
+ <a name='L824'></a><a href='#L824'>824</a>
890
+ <a name='L825'></a><a href='#L825'>825</a>
891
+ <a name='L826'></a><a href='#L826'>826</a>
892
+ <a name='L827'></a><a href='#L827'>827</a>
893
+ <a name='L828'></a><a href='#L828'>828</a>
894
+ <a name='L829'></a><a href='#L829'>829</a>
895
+ <a name='L830'></a><a href='#L830'>830</a>
896
+ <a name='L831'></a><a href='#L831'>831</a>
897
+ <a name='L832'></a><a href='#L832'>832</a>
898
+ <a name='L833'></a><a href='#L833'>833</a>
899
+ <a name='L834'></a><a href='#L834'>834</a>
900
+ <a name='L835'></a><a href='#L835'>835</a>
901
+ <a name='L836'></a><a href='#L836'>836</a>
902
+ <a name='L837'></a><a href='#L837'>837</a>
903
+ <a name='L838'></a><a href='#L838'>838</a>
904
+ <a name='L839'></a><a href='#L839'>839</a>
905
+ <a name='L840'></a><a href='#L840'>840</a>
906
+ <a name='L841'></a><a href='#L841'>841</a>
907
+ <a name='L842'></a><a href='#L842'>842</a>
908
+ <a name='L843'></a><a href='#L843'>843</a>
909
+ <a name='L844'></a><a href='#L844'>844</a>
910
+ <a name='L845'></a><a href='#L845'>845</a>
911
+ <a name='L846'></a><a href='#L846'>846</a>
912
+ <a name='L847'></a><a href='#L847'>847</a>
913
+ <a name='L848'></a><a href='#L848'>848</a>
914
+ <a name='L849'></a><a href='#L849'>849</a>
915
+ <a name='L850'></a><a href='#L850'>850</a>
916
+ <a name='L851'></a><a href='#L851'>851</a>
917
+ <a name='L852'></a><a href='#L852'>852</a>
918
+ <a name='L853'></a><a href='#L853'>853</a>
919
+ <a name='L854'></a><a href='#L854'>854</a>
920
+ <a name='L855'></a><a href='#L855'>855</a>
921
+ <a name='L856'></a><a href='#L856'>856</a>
922
+ <a name='L857'></a><a href='#L857'>857</a>
923
+ <a name='L858'></a><a href='#L858'>858</a>
924
+ <a name='L859'></a><a href='#L859'>859</a>
925
+ <a name='L860'></a><a href='#L860'>860</a>
926
+ <a name='L861'></a><a href='#L861'>861</a>
927
+ <a name='L862'></a><a href='#L862'>862</a>
928
+ <a name='L863'></a><a href='#L863'>863</a>
929
+ <a name='L864'></a><a href='#L864'>864</a>
930
+ <a name='L865'></a><a href='#L865'>865</a>
931
+ <a name='L866'></a><a href='#L866'>866</a>
932
+ <a name='L867'></a><a href='#L867'>867</a>
933
+ <a name='L868'></a><a href='#L868'>868</a>
934
+ <a name='L869'></a><a href='#L869'>869</a>
935
+ <a name='L870'></a><a href='#L870'>870</a>
936
+ <a name='L871'></a><a href='#L871'>871</a>
937
+ <a name='L872'></a><a href='#L872'>872</a>
938
+ <a name='L873'></a><a href='#L873'>873</a>
939
+ <a name='L874'></a><a href='#L874'>874</a>
940
+ <a name='L875'></a><a href='#L875'>875</a>
941
+ <a name='L876'></a><a href='#L876'>876</a>
942
+ <a name='L877'></a><a href='#L877'>877</a>
943
+ <a name='L878'></a><a href='#L878'>878</a>
944
+ <a name='L879'></a><a href='#L879'>879</a>
945
+ <a name='L880'></a><a href='#L880'>880</a>
946
+ <a name='L881'></a><a href='#L881'>881</a>
947
+ <a name='L882'></a><a href='#L882'>882</a>
948
+ <a name='L883'></a><a href='#L883'>883</a>
949
+ <a name='L884'></a><a href='#L884'>884</a>
950
+ <a name='L885'></a><a href='#L885'>885</a>
951
+ <a name='L886'></a><a href='#L886'>886</a>
952
+ <a name='L887'></a><a href='#L887'>887</a>
953
+ <a name='L888'></a><a href='#L888'>888</a>
954
+ <a name='L889'></a><a href='#L889'>889</a>
955
+ <a name='L890'></a><a href='#L890'>890</a>
956
+ <a name='L891'></a><a href='#L891'>891</a>
957
+ <a name='L892'></a><a href='#L892'>892</a>
958
+ <a name='L893'></a><a href='#L893'>893</a>
959
+ <a name='L894'></a><a href='#L894'>894</a>
960
+ <a name='L895'></a><a href='#L895'>895</a>
961
+ <a name='L896'></a><a href='#L896'>896</a>
962
+ <a name='L897'></a><a href='#L897'>897</a>
963
+ <a name='L898'></a><a href='#L898'>898</a>
964
+ <a name='L899'></a><a href='#L899'>899</a>
965
+ <a name='L900'></a><a href='#L900'>900</a>
966
+ <a name='L901'></a><a href='#L901'>901</a>
967
+ <a name='L902'></a><a href='#L902'>902</a>
968
+ <a name='L903'></a><a href='#L903'>903</a>
969
+ <a name='L904'></a><a href='#L904'>904</a>
970
+ <a name='L905'></a><a href='#L905'>905</a>
971
+ <a name='L906'></a><a href='#L906'>906</a>
972
+ <a name='L907'></a><a href='#L907'>907</a>
973
+ <a name='L908'></a><a href='#L908'>908</a>
974
+ <a name='L909'></a><a href='#L909'>909</a>
975
+ <a name='L910'></a><a href='#L910'>910</a>
976
+ <a name='L911'></a><a href='#L911'>911</a>
977
+ <a name='L912'></a><a href='#L912'>912</a>
978
+ <a name='L913'></a><a href='#L913'>913</a>
979
+ <a name='L914'></a><a href='#L914'>914</a>
980
+ <a name='L915'></a><a href='#L915'>915</a>
981
+ <a name='L916'></a><a href='#L916'>916</a>
982
+ <a name='L917'></a><a href='#L917'>917</a>
983
+ <a name='L918'></a><a href='#L918'>918</a>
984
+ <a name='L919'></a><a href='#L919'>919</a>
985
+ <a name='L920'></a><a href='#L920'>920</a>
986
+ <a name='L921'></a><a href='#L921'>921</a>
987
+ <a name='L922'></a><a href='#L922'>922</a>
988
+ <a name='L923'></a><a href='#L923'>923</a>
989
+ <a name='L924'></a><a href='#L924'>924</a>
990
+ <a name='L925'></a><a href='#L925'>925</a>
991
+ <a name='L926'></a><a href='#L926'>926</a>
992
+ <a name='L927'></a><a href='#L927'>927</a>
993
+ <a name='L928'></a><a href='#L928'>928</a>
994
+ <a name='L929'></a><a href='#L929'>929</a>
995
+ <a name='L930'></a><a href='#L930'>930</a>
996
+ <a name='L931'></a><a href='#L931'>931</a>
997
+ <a name='L932'></a><a href='#L932'>932</a>
998
+ <a name='L933'></a><a href='#L933'>933</a>
999
+ <a name='L934'></a><a href='#L934'>934</a>
1000
+ <a name='L935'></a><a href='#L935'>935</a>
1001
+ <a name='L936'></a><a href='#L936'>936</a>
1002
+ <a name='L937'></a><a href='#L937'>937</a>
1003
+ <a name='L938'></a><a href='#L938'>938</a>
1004
+ <a name='L939'></a><a href='#L939'>939</a>
1005
+ <a name='L940'></a><a href='#L940'>940</a>
1006
+ <a name='L941'></a><a href='#L941'>941</a>
1007
+ <a name='L942'></a><a href='#L942'>942</a>
1008
+ <a name='L943'></a><a href='#L943'>943</a>
1009
+ <a name='L944'></a><a href='#L944'>944</a>
1010
+ <a name='L945'></a><a href='#L945'>945</a>
1011
+ <a name='L946'></a><a href='#L946'>946</a>
1012
+ <a name='L947'></a><a href='#L947'>947</a>
1013
+ <a name='L948'></a><a href='#L948'>948</a>
1014
+ <a name='L949'></a><a href='#L949'>949</a>
1015
+ <a name='L950'></a><a href='#L950'>950</a>
1016
+ <a name='L951'></a><a href='#L951'>951</a>
1017
+ <a name='L952'></a><a href='#L952'>952</a>
1018
+ <a name='L953'></a><a href='#L953'>953</a>
1019
+ <a name='L954'></a><a href='#L954'>954</a>
1020
+ <a name='L955'></a><a href='#L955'>955</a>
1021
+ <a name='L956'></a><a href='#L956'>956</a>
1022
+ <a name='L957'></a><a href='#L957'>957</a>
1023
+ <a name='L958'></a><a href='#L958'>958</a>
1024
+ <a name='L959'></a><a href='#L959'>959</a>
1025
+ <a name='L960'></a><a href='#L960'>960</a>
1026
+ <a name='L961'></a><a href='#L961'>961</a>
1027
+ <a name='L962'></a><a href='#L962'>962</a>
1028
+ <a name='L963'></a><a href='#L963'>963</a>
1029
+ <a name='L964'></a><a href='#L964'>964</a>
1030
+ <a name='L965'></a><a href='#L965'>965</a>
1031
+ <a name='L966'></a><a href='#L966'>966</a>
1032
+ <a name='L967'></a><a href='#L967'>967</a>
1033
+ <a name='L968'></a><a href='#L968'>968</a>
1034
+ <a name='L969'></a><a href='#L969'>969</a>
1035
+ <a name='L970'></a><a href='#L970'>970</a>
1036
+ <a name='L971'></a><a href='#L971'>971</a>
1037
+ <a name='L972'></a><a href='#L972'>972</a>
1038
+ <a name='L973'></a><a href='#L973'>973</a>
1039
+ <a name='L974'></a><a href='#L974'>974</a>
1040
+ <a name='L975'></a><a href='#L975'>975</a>
1041
+ <a name='L976'></a><a href='#L976'>976</a>
1042
+ <a name='L977'></a><a href='#L977'>977</a>
1043
+ <a name='L978'></a><a href='#L978'>978</a>
1044
+ <a name='L979'></a><a href='#L979'>979</a>
1045
+ <a name='L980'></a><a href='#L980'>980</a>
1046
+ <a name='L981'></a><a href='#L981'>981</a>
1047
+ <a name='L982'></a><a href='#L982'>982</a>
1048
+ <a name='L983'></a><a href='#L983'>983</a>
1049
+ <a name='L984'></a><a href='#L984'>984</a>
1050
+ <a name='L985'></a><a href='#L985'>985</a>
1051
+ <a name='L986'></a><a href='#L986'>986</a>
1052
+ <a name='L987'></a><a href='#L987'>987</a>
1053
+ <a name='L988'></a><a href='#L988'>988</a>
1054
+ <a name='L989'></a><a href='#L989'>989</a>
1055
+ <a name='L990'></a><a href='#L990'>990</a>
1056
+ <a name='L991'></a><a href='#L991'>991</a>
1057
+ <a name='L992'></a><a href='#L992'>992</a>
1058
+ <a name='L993'></a><a href='#L993'>993</a>
1059
+ <a name='L994'></a><a href='#L994'>994</a>
1060
+ <a name='L995'></a><a href='#L995'>995</a>
1061
+ <a name='L996'></a><a href='#L996'>996</a>
1062
+ <a name='L997'></a><a href='#L997'>997</a>
1063
+ <a name='L998'></a><a href='#L998'>998</a>
1064
+ <a name='L999'></a><a href='#L999'>999</a>
1065
+ <a name='L1000'></a><a href='#L1000'>1000</a>
1066
+ <a name='L1001'></a><a href='#L1001'>1001</a>
1067
+ <a name='L1002'></a><a href='#L1002'>1002</a>
1068
+ <a name='L1003'></a><a href='#L1003'>1003</a>
1069
+ <a name='L1004'></a><a href='#L1004'>1004</a>
1070
+ <a name='L1005'></a><a href='#L1005'>1005</a>
1071
+ <a name='L1006'></a><a href='#L1006'>1006</a>
1072
+ <a name='L1007'></a><a href='#L1007'>1007</a>
1073
+ <a name='L1008'></a><a href='#L1008'>1008</a>
1074
+ <a name='L1009'></a><a href='#L1009'>1009</a>
1075
+ <a name='L1010'></a><a href='#L1010'>1010</a>
1076
+ <a name='L1011'></a><a href='#L1011'>1011</a>
1077
+ <a name='L1012'></a><a href='#L1012'>1012</a>
1078
+ <a name='L1013'></a><a href='#L1013'>1013</a>
1079
+ <a name='L1014'></a><a href='#L1014'>1014</a>
1080
+ <a name='L1015'></a><a href='#L1015'>1015</a>
1081
+ <a name='L1016'></a><a href='#L1016'>1016</a>
1082
+ <a name='L1017'></a><a href='#L1017'>1017</a>
1083
+ <a name='L1018'></a><a href='#L1018'>1018</a>
1084
+ <a name='L1019'></a><a href='#L1019'>1019</a>
1085
+ <a name='L1020'></a><a href='#L1020'>1020</a>
1086
+ <a name='L1021'></a><a href='#L1021'>1021</a>
1087
+ <a name='L1022'></a><a href='#L1022'>1022</a>
1088
+ <a name='L1023'></a><a href='#L1023'>1023</a>
1089
+ <a name='L1024'></a><a href='#L1024'>1024</a>
1090
+ <a name='L1025'></a><a href='#L1025'>1025</a>
1091
+ <a name='L1026'></a><a href='#L1026'>1026</a>
1092
+ <a name='L1027'></a><a href='#L1027'>1027</a>
1093
+ <a name='L1028'></a><a href='#L1028'>1028</a>
1094
+ <a name='L1029'></a><a href='#L1029'>1029</a>
1095
+ <a name='L1030'></a><a href='#L1030'>1030</a>
1096
+ <a name='L1031'></a><a href='#L1031'>1031</a>
1097
+ <a name='L1032'></a><a href='#L1032'>1032</a>
1098
+ <a name='L1033'></a><a href='#L1033'>1033</a>
1099
+ <a name='L1034'></a><a href='#L1034'>1034</a>
1100
+ <a name='L1035'></a><a href='#L1035'>1035</a>
1101
+ <a name='L1036'></a><a href='#L1036'>1036</a>
1102
+ <a name='L1037'></a><a href='#L1037'>1037</a>
1103
+ <a name='L1038'></a><a href='#L1038'>1038</a>
1104
+ <a name='L1039'></a><a href='#L1039'>1039</a>
1105
+ <a name='L1040'></a><a href='#L1040'>1040</a>
1106
+ <a name='L1041'></a><a href='#L1041'>1041</a>
1107
+ <a name='L1042'></a><a href='#L1042'>1042</a>
1108
+ <a name='L1043'></a><a href='#L1043'>1043</a>
1109
+ <a name='L1044'></a><a href='#L1044'>1044</a>
1110
+ <a name='L1045'></a><a href='#L1045'>1045</a>
1111
+ <a name='L1046'></a><a href='#L1046'>1046</a>
1112
+ <a name='L1047'></a><a href='#L1047'>1047</a>
1113
+ <a name='L1048'></a><a href='#L1048'>1048</a>
1114
+ <a name='L1049'></a><a href='#L1049'>1049</a>
1115
+ <a name='L1050'></a><a href='#L1050'>1050</a>
1116
+ <a name='L1051'></a><a href='#L1051'>1051</a>
1117
+ <a name='L1052'></a><a href='#L1052'>1052</a>
1118
+ <a name='L1053'></a><a href='#L1053'>1053</a>
1119
+ <a name='L1054'></a><a href='#L1054'>1054</a>
1120
+ <a name='L1055'></a><a href='#L1055'>1055</a>
1121
+ <a name='L1056'></a><a href='#L1056'>1056</a>
1122
+ <a name='L1057'></a><a href='#L1057'>1057</a>
1123
+ <a name='L1058'></a><a href='#L1058'>1058</a>
1124
+ <a name='L1059'></a><a href='#L1059'>1059</a>
1125
+ <a name='L1060'></a><a href='#L1060'>1060</a>
1126
+ <a name='L1061'></a><a href='#L1061'>1061</a>
1127
+ <a name='L1062'></a><a href='#L1062'>1062</a>
1128
+ <a name='L1063'></a><a href='#L1063'>1063</a>
1129
+ <a name='L1064'></a><a href='#L1064'>1064</a>
1130
+ <a name='L1065'></a><a href='#L1065'>1065</a>
1131
+ <a name='L1066'></a><a href='#L1066'>1066</a>
1132
+ <a name='L1067'></a><a href='#L1067'>1067</a>
1133
+ <a name='L1068'></a><a href='#L1068'>1068</a>
1134
+ <a name='L1069'></a><a href='#L1069'>1069</a>
1135
+ <a name='L1070'></a><a href='#L1070'>1070</a>
1136
+ <a name='L1071'></a><a href='#L1071'>1071</a>
1137
+ <a name='L1072'></a><a href='#L1072'>1072</a>
1138
+ <a name='L1073'></a><a href='#L1073'>1073</a>
1139
+ <a name='L1074'></a><a href='#L1074'>1074</a>
1140
+ <a name='L1075'></a><a href='#L1075'>1075</a>
1141
+ <a name='L1076'></a><a href='#L1076'>1076</a>
1142
+ <a name='L1077'></a><a href='#L1077'>1077</a>
1143
+ <a name='L1078'></a><a href='#L1078'>1078</a>
1144
+ <a name='L1079'></a><a href='#L1079'>1079</a>
1145
+ <a name='L1080'></a><a href='#L1080'>1080</a>
1146
+ <a name='L1081'></a><a href='#L1081'>1081</a>
1147
+ <a name='L1082'></a><a href='#L1082'>1082</a>
1148
+ <a name='L1083'></a><a href='#L1083'>1083</a>
1149
+ <a name='L1084'></a><a href='#L1084'>1084</a>
1150
+ <a name='L1085'></a><a href='#L1085'>1085</a>
1151
+ <a name='L1086'></a><a href='#L1086'>1086</a>
1152
+ <a name='L1087'></a><a href='#L1087'>1087</a>
1153
+ <a name='L1088'></a><a href='#L1088'>1088</a>
1154
+ <a name='L1089'></a><a href='#L1089'>1089</a>
1155
+ <a name='L1090'></a><a href='#L1090'>1090</a>
1156
+ <a name='L1091'></a><a href='#L1091'>1091</a>
1157
+ <a name='L1092'></a><a href='#L1092'>1092</a>
1158
+ <a name='L1093'></a><a href='#L1093'>1093</a>
1159
+ <a name='L1094'></a><a href='#L1094'>1094</a>
1160
+ <a name='L1095'></a><a href='#L1095'>1095</a>
1161
+ <a name='L1096'></a><a href='#L1096'>1096</a>
1162
+ <a name='L1097'></a><a href='#L1097'>1097</a>
1163
+ <a name='L1098'></a><a href='#L1098'>1098</a>
1164
+ <a name='L1099'></a><a href='#L1099'>1099</a>
1165
+ <a name='L1100'></a><a href='#L1100'>1100</a>
1166
+ <a name='L1101'></a><a href='#L1101'>1101</a>
1167
+ <a name='L1102'></a><a href='#L1102'>1102</a>
1168
+ <a name='L1103'></a><a href='#L1103'>1103</a>
1169
+ <a name='L1104'></a><a href='#L1104'>1104</a>
1170
+ <a name='L1105'></a><a href='#L1105'>1105</a>
1171
+ <a name='L1106'></a><a href='#L1106'>1106</a>
1172
+ <a name='L1107'></a><a href='#L1107'>1107</a>
1173
+ <a name='L1108'></a><a href='#L1108'>1108</a>
1174
+ <a name='L1109'></a><a href='#L1109'>1109</a>
1175
+ <a name='L1110'></a><a href='#L1110'>1110</a>
1176
+ <a name='L1111'></a><a href='#L1111'>1111</a>
1177
+ <a name='L1112'></a><a href='#L1112'>1112</a>
1178
+ <a name='L1113'></a><a href='#L1113'>1113</a>
1179
+ <a name='L1114'></a><a href='#L1114'>1114</a>
1180
+ <a name='L1115'></a><a href='#L1115'>1115</a>
1181
+ <a name='L1116'></a><a href='#L1116'>1116</a>
1182
+ <a name='L1117'></a><a href='#L1117'>1117</a>
1183
+ <a name='L1118'></a><a href='#L1118'>1118</a>
1184
+ <a name='L1119'></a><a href='#L1119'>1119</a>
1185
+ <a name='L1120'></a><a href='#L1120'>1120</a>
1186
+ <a name='L1121'></a><a href='#L1121'>1121</a>
1187
+ <a name='L1122'></a><a href='#L1122'>1122</a>
1188
+ <a name='L1123'></a><a href='#L1123'>1123</a>
1189
+ <a name='L1124'></a><a href='#L1124'>1124</a>
1190
+ <a name='L1125'></a><a href='#L1125'>1125</a>
1191
+ <a name='L1126'></a><a href='#L1126'>1126</a>
1192
+ <a name='L1127'></a><a href='#L1127'>1127</a>
1193
+ <a name='L1128'></a><a href='#L1128'>1128</a>
1194
+ <a name='L1129'></a><a href='#L1129'>1129</a>
1195
+ <a name='L1130'></a><a href='#L1130'>1130</a>
1196
+ <a name='L1131'></a><a href='#L1131'>1131</a>
1197
+ <a name='L1132'></a><a href='#L1132'>1132</a>
1198
+ <a name='L1133'></a><a href='#L1133'>1133</a>
1199
+ <a name='L1134'></a><a href='#L1134'>1134</a>
1200
+ <a name='L1135'></a><a href='#L1135'>1135</a>
1201
+ <a name='L1136'></a><a href='#L1136'>1136</a>
1202
+ <a name='L1137'></a><a href='#L1137'>1137</a>
1203
+ <a name='L1138'></a><a href='#L1138'>1138</a>
1204
+ <a name='L1139'></a><a href='#L1139'>1139</a>
1205
+ <a name='L1140'></a><a href='#L1140'>1140</a>
1206
+ <a name='L1141'></a><a href='#L1141'>1141</a>
1207
+ <a name='L1142'></a><a href='#L1142'>1142</a>
1208
+ <a name='L1143'></a><a href='#L1143'>1143</a>
1209
+ <a name='L1144'></a><a href='#L1144'>1144</a>
1210
+ <a name='L1145'></a><a href='#L1145'>1145</a>
1211
+ <a name='L1146'></a><a href='#L1146'>1146</a>
1212
+ <a name='L1147'></a><a href='#L1147'>1147</a>
1213
+ <a name='L1148'></a><a href='#L1148'>1148</a>
1214
+ <a name='L1149'></a><a href='#L1149'>1149</a>
1215
+ <a name='L1150'></a><a href='#L1150'>1150</a>
1216
+ <a name='L1151'></a><a href='#L1151'>1151</a>
1217
+ <a name='L1152'></a><a href='#L1152'>1152</a>
1218
+ <a name='L1153'></a><a href='#L1153'>1153</a>
1219
+ <a name='L1154'></a><a href='#L1154'>1154</a>
1220
+ <a name='L1155'></a><a href='#L1155'>1155</a>
1221
+ <a name='L1156'></a><a href='#L1156'>1156</a>
1222
+ <a name='L1157'></a><a href='#L1157'>1157</a>
1223
+ <a name='L1158'></a><a href='#L1158'>1158</a>
1224
+ <a name='L1159'></a><a href='#L1159'>1159</a>
1225
+ <a name='L1160'></a><a href='#L1160'>1160</a>
1226
+ <a name='L1161'></a><a href='#L1161'>1161</a>
1227
+ <a name='L1162'></a><a href='#L1162'>1162</a>
1228
+ <a name='L1163'></a><a href='#L1163'>1163</a>
1229
+ <a name='L1164'></a><a href='#L1164'>1164</a>
1230
+ <a name='L1165'></a><a href='#L1165'>1165</a>
1231
+ <a name='L1166'></a><a href='#L1166'>1166</a>
1232
+ <a name='L1167'></a><a href='#L1167'>1167</a>
1233
+ <a name='L1168'></a><a href='#L1168'>1168</a>
1234
+ <a name='L1169'></a><a href='#L1169'>1169</a>
1235
+ <a name='L1170'></a><a href='#L1170'>1170</a>
1236
+ <a name='L1171'></a><a href='#L1171'>1171</a>
1237
+ <a name='L1172'></a><a href='#L1172'>1172</a>
1238
+ <a name='L1173'></a><a href='#L1173'>1173</a>
1239
+ <a name='L1174'></a><a href='#L1174'>1174</a>
1240
+ <a name='L1175'></a><a href='#L1175'>1175</a>
1241
+ <a name='L1176'></a><a href='#L1176'>1176</a>
1242
+ <a name='L1177'></a><a href='#L1177'>1177</a>
1243
+ <a name='L1178'></a><a href='#L1178'>1178</a>
1244
+ <a name='L1179'></a><a href='#L1179'>1179</a>
1245
+ <a name='L1180'></a><a href='#L1180'>1180</a>
1246
+ <a name='L1181'></a><a href='#L1181'>1181</a>
1247
+ <a name='L1182'></a><a href='#L1182'>1182</a>
1248
+ <a name='L1183'></a><a href='#L1183'>1183</a>
1249
+ <a name='L1184'></a><a href='#L1184'>1184</a>
1250
+ <a name='L1185'></a><a href='#L1185'>1185</a>
1251
+ <a name='L1186'></a><a href='#L1186'>1186</a>
1252
+ <a name='L1187'></a><a href='#L1187'>1187</a>
1253
+ <a name='L1188'></a><a href='#L1188'>1188</a>
1254
+ <a name='L1189'></a><a href='#L1189'>1189</a>
1255
+ <a name='L1190'></a><a href='#L1190'>1190</a>
1256
+ <a name='L1191'></a><a href='#L1191'>1191</a>
1257
+ <a name='L1192'></a><a href='#L1192'>1192</a>
1258
+ <a name='L1193'></a><a href='#L1193'>1193</a>
1259
+ <a name='L1194'></a><a href='#L1194'>1194</a>
1260
+ <a name='L1195'></a><a href='#L1195'>1195</a>
1261
+ <a name='L1196'></a><a href='#L1196'>1196</a>
1262
+ <a name='L1197'></a><a href='#L1197'>1197</a>
1263
+ <a name='L1198'></a><a href='#L1198'>1198</a>
1264
+ <a name='L1199'></a><a href='#L1199'>1199</a>
1265
+ <a name='L1200'></a><a href='#L1200'>1200</a>
1266
+ <a name='L1201'></a><a href='#L1201'>1201</a>
1267
+ <a name='L1202'></a><a href='#L1202'>1202</a>
1268
+ <a name='L1203'></a><a href='#L1203'>1203</a>
1269
+ <a name='L1204'></a><a href='#L1204'>1204</a>
1270
+ <a name='L1205'></a><a href='#L1205'>1205</a>
1271
+ <a name='L1206'></a><a href='#L1206'>1206</a>
1272
+ <a name='L1207'></a><a href='#L1207'>1207</a>
1273
+ <a name='L1208'></a><a href='#L1208'>1208</a>
1274
+ <a name='L1209'></a><a href='#L1209'>1209</a>
1275
+ <a name='L1210'></a><a href='#L1210'>1210</a>
1276
+ <a name='L1211'></a><a href='#L1211'>1211</a>
1277
+ <a name='L1212'></a><a href='#L1212'>1212</a>
1278
+ <a name='L1213'></a><a href='#L1213'>1213</a>
1279
+ <a name='L1214'></a><a href='#L1214'>1214</a>
1280
+ <a name='L1215'></a><a href='#L1215'>1215</a>
1281
+ <a name='L1216'></a><a href='#L1216'>1216</a>
1282
+ <a name='L1217'></a><a href='#L1217'>1217</a>
1283
+ <a name='L1218'></a><a href='#L1218'>1218</a>
1284
+ <a name='L1219'></a><a href='#L1219'>1219</a>
1285
+ <a name='L1220'></a><a href='#L1220'>1220</a>
1286
+ <a name='L1221'></a><a href='#L1221'>1221</a>
1287
+ <a name='L1222'></a><a href='#L1222'>1222</a>
1288
+ <a name='L1223'></a><a href='#L1223'>1223</a>
1289
+ <a name='L1224'></a><a href='#L1224'>1224</a>
1290
+ <a name='L1225'></a><a href='#L1225'>1225</a>
1291
+ <a name='L1226'></a><a href='#L1226'>1226</a>
1292
+ <a name='L1227'></a><a href='#L1227'>1227</a>
1293
+ <a name='L1228'></a><a href='#L1228'>1228</a>
1294
+ <a name='L1229'></a><a href='#L1229'>1229</a>
1295
+ <a name='L1230'></a><a href='#L1230'>1230</a>
1296
+ <a name='L1231'></a><a href='#L1231'>1231</a>
1297
+ <a name='L1232'></a><a href='#L1232'>1232</a>
1298
+ <a name='L1233'></a><a href='#L1233'>1233</a>
1299
+ <a name='L1234'></a><a href='#L1234'>1234</a>
1300
+ <a name='L1235'></a><a href='#L1235'>1235</a>
1301
+ <a name='L1236'></a><a href='#L1236'>1236</a>
1302
+ <a name='L1237'></a><a href='#L1237'>1237</a>
1303
+ <a name='L1238'></a><a href='#L1238'>1238</a>
1304
+ <a name='L1239'></a><a href='#L1239'>1239</a>
1305
+ <a name='L1240'></a><a href='#L1240'>1240</a>
1306
+ <a name='L1241'></a><a href='#L1241'>1241</a>
1307
+ <a name='L1242'></a><a href='#L1242'>1242</a>
1308
+ <a name='L1243'></a><a href='#L1243'>1243</a>
1309
+ <a name='L1244'></a><a href='#L1244'>1244</a>
1310
+ <a name='L1245'></a><a href='#L1245'>1245</a>
1311
+ <a name='L1246'></a><a href='#L1246'>1246</a>
1312
+ <a name='L1247'></a><a href='#L1247'>1247</a>
1313
+ <a name='L1248'></a><a href='#L1248'>1248</a>
1314
+ <a name='L1249'></a><a href='#L1249'>1249</a>
1315
+ <a name='L1250'></a><a href='#L1250'>1250</a>
1316
+ <a name='L1251'></a><a href='#L1251'>1251</a>
1317
+ <a name='L1252'></a><a href='#L1252'>1252</a>
1318
+ <a name='L1253'></a><a href='#L1253'>1253</a>
1319
+ <a name='L1254'></a><a href='#L1254'>1254</a>
1320
+ <a name='L1255'></a><a href='#L1255'>1255</a>
1321
+ <a name='L1256'></a><a href='#L1256'>1256</a>
1322
+ <a name='L1257'></a><a href='#L1257'>1257</a>
1323
+ <a name='L1258'></a><a href='#L1258'>1258</a>
1324
+ <a name='L1259'></a><a href='#L1259'>1259</a>
1325
+ <a name='L1260'></a><a href='#L1260'>1260</a>
1326
+ <a name='L1261'></a><a href='#L1261'>1261</a>
1327
+ <a name='L1262'></a><a href='#L1262'>1262</a>
1328
+ <a name='L1263'></a><a href='#L1263'>1263</a>
1329
+ <a name='L1264'></a><a href='#L1264'>1264</a>
1330
+ <a name='L1265'></a><a href='#L1265'>1265</a>
1331
+ <a name='L1266'></a><a href='#L1266'>1266</a>
1332
+ <a name='L1267'></a><a href='#L1267'>1267</a>
1333
+ <a name='L1268'></a><a href='#L1268'>1268</a>
1334
+ <a name='L1269'></a><a href='#L1269'>1269</a>
1335
+ <a name='L1270'></a><a href='#L1270'>1270</a>
1336
+ <a name='L1271'></a><a href='#L1271'>1271</a>
1337
+ <a name='L1272'></a><a href='#L1272'>1272</a>
1338
+ <a name='L1273'></a><a href='#L1273'>1273</a>
1339
+ <a name='L1274'></a><a href='#L1274'>1274</a>
1340
+ <a name='L1275'></a><a href='#L1275'>1275</a>
1341
+ <a name='L1276'></a><a href='#L1276'>1276</a>
1342
+ <a name='L1277'></a><a href='#L1277'>1277</a>
1343
+ <a name='L1278'></a><a href='#L1278'>1278</a>
1344
+ <a name='L1279'></a><a href='#L1279'>1279</a>
1345
+ <a name='L1280'></a><a href='#L1280'>1280</a>
1346
+ <a name='L1281'></a><a href='#L1281'>1281</a>
1347
+ <a name='L1282'></a><a href='#L1282'>1282</a>
1348
+ <a name='L1283'></a><a href='#L1283'>1283</a>
1349
+ <a name='L1284'></a><a href='#L1284'>1284</a>
1350
+ <a name='L1285'></a><a href='#L1285'>1285</a>
1351
+ <a name='L1286'></a><a href='#L1286'>1286</a>
1352
+ <a name='L1287'></a><a href='#L1287'>1287</a>
1353
+ <a name='L1288'></a><a href='#L1288'>1288</a>
1354
+ <a name='L1289'></a><a href='#L1289'>1289</a>
1355
+ <a name='L1290'></a><a href='#L1290'>1290</a>
1356
+ <a name='L1291'></a><a href='#L1291'>1291</a>
1357
+ <a name='L1292'></a><a href='#L1292'>1292</a>
1358
+ <a name='L1293'></a><a href='#L1293'>1293</a>
1359
+ <a name='L1294'></a><a href='#L1294'>1294</a>
1360
+ <a name='L1295'></a><a href='#L1295'>1295</a>
1361
+ <a name='L1296'></a><a href='#L1296'>1296</a>
1362
+ <a name='L1297'></a><a href='#L1297'>1297</a>
1363
+ <a name='L1298'></a><a href='#L1298'>1298</a>
1364
+ <a name='L1299'></a><a href='#L1299'>1299</a>
1365
+ <a name='L1300'></a><a href='#L1300'>1300</a>
1366
+ <a name='L1301'></a><a href='#L1301'>1301</a>
1367
+ <a name='L1302'></a><a href='#L1302'>1302</a>
1368
+ <a name='L1303'></a><a href='#L1303'>1303</a>
1369
+ <a name='L1304'></a><a href='#L1304'>1304</a>
1370
+ <a name='L1305'></a><a href='#L1305'>1305</a>
1371
+ <a name='L1306'></a><a href='#L1306'>1306</a>
1372
+ <a name='L1307'></a><a href='#L1307'>1307</a>
1373
+ <a name='L1308'></a><a href='#L1308'>1308</a>
1374
+ <a name='L1309'></a><a href='#L1309'>1309</a>
1375
+ <a name='L1310'></a><a href='#L1310'>1310</a>
1376
+ <a name='L1311'></a><a href='#L1311'>1311</a>
1377
+ <a name='L1312'></a><a href='#L1312'>1312</a>
1378
+ <a name='L1313'></a><a href='#L1313'>1313</a>
1379
+ <a name='L1314'></a><a href='#L1314'>1314</a>
1380
+ <a name='L1315'></a><a href='#L1315'>1315</a>
1381
+ <a name='L1316'></a><a href='#L1316'>1316</a>
1382
+ <a name='L1317'></a><a href='#L1317'>1317</a>
1383
+ <a name='L1318'></a><a href='#L1318'>1318</a>
1384
+ <a name='L1319'></a><a href='#L1319'>1319</a>
1385
+ <a name='L1320'></a><a href='#L1320'>1320</a>
1386
+ <a name='L1321'></a><a href='#L1321'>1321</a>
1387
+ <a name='L1322'></a><a href='#L1322'>1322</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
1388
+ <span class="cline-any cline-neutral">&nbsp;</span>
1389
+ <span class="cline-any cline-neutral">&nbsp;</span>
1390
+ <span class="cline-any cline-yes">3x</span>
1391
+ <span class="cline-any cline-yes">3x</span>
1392
+ <span class="cline-any cline-yes">3x</span>
1393
+ <span class="cline-any cline-neutral">&nbsp;</span>
1394
+ <span class="cline-any cline-neutral">&nbsp;</span>
1395
+ <span class="cline-any cline-neutral">&nbsp;</span>
1396
+ <span class="cline-any cline-neutral">&nbsp;</span>
1397
+ <span class="cline-any cline-neutral">&nbsp;</span>
1398
+ <span class="cline-any cline-neutral">&nbsp;</span>
1399
+ <span class="cline-any cline-yes">3x</span>
1400
+ <span class="cline-any cline-yes">3x</span>
1401
+ <span class="cline-any cline-neutral">&nbsp;</span>
1402
+ <span class="cline-any cline-neutral">&nbsp;</span>
1403
+ <span class="cline-any cline-neutral">&nbsp;</span>
1404
+ <span class="cline-any cline-neutral">&nbsp;</span>
1405
+ <span class="cline-any cline-neutral">&nbsp;</span>
1406
+ <span class="cline-any cline-neutral">&nbsp;</span>
1407
+ <span class="cline-any cline-neutral">&nbsp;</span>
1408
+ <span class="cline-any cline-neutral">&nbsp;</span>
1409
+ <span class="cline-any cline-neutral">&nbsp;</span>
1410
+ <span class="cline-any cline-neutral">&nbsp;</span>
1411
+ <span class="cline-any cline-neutral">&nbsp;</span>
1412
+ <span class="cline-any cline-yes">3x</span>
1413
+ <span class="cline-any cline-neutral">&nbsp;</span>
1414
+ <span class="cline-any cline-neutral">&nbsp;</span>
1415
+ <span class="cline-any cline-yes">146x</span>
1416
+ <span class="cline-any cline-yes">146x</span>
1417
+ <span class="cline-any cline-neutral">&nbsp;</span>
1418
+ <span class="cline-any cline-neutral">&nbsp;</span>
1419
+ <span class="cline-any cline-neutral">&nbsp;</span>
1420
+ <span class="cline-any cline-neutral">&nbsp;</span>
1421
+ <span class="cline-any cline-neutral">&nbsp;</span>
1422
+ <span class="cline-any cline-neutral">&nbsp;</span>
1423
+ <span class="cline-any cline-neutral">&nbsp;</span>
1424
+ <span class="cline-any cline-no">&nbsp;</span>
1425
+ <span class="cline-any cline-no">&nbsp;</span>
1426
+ <span class="cline-any cline-neutral">&nbsp;</span>
1427
+ <span class="cline-any cline-neutral">&nbsp;</span>
1428
+ <span class="cline-any cline-neutral">&nbsp;</span>
1429
+ <span class="cline-any cline-neutral">&nbsp;</span>
1430
+ <span class="cline-any cline-neutral">&nbsp;</span>
1431
+ <span class="cline-any cline-neutral">&nbsp;</span>
1432
+ <span class="cline-any cline-neutral">&nbsp;</span>
1433
+ <span class="cline-any cline-neutral">&nbsp;</span>
1434
+ <span class="cline-any cline-neutral">&nbsp;</span>
1435
+ <span class="cline-any cline-neutral">&nbsp;</span>
1436
+ <span class="cline-any cline-neutral">&nbsp;</span>
1437
+ <span class="cline-any cline-no">&nbsp;</span>
1438
+ <span class="cline-any cline-neutral">&nbsp;</span>
1439
+ <span class="cline-any cline-neutral">&nbsp;</span>
1440
+ <span class="cline-any cline-neutral">&nbsp;</span>
1441
+ <span class="cline-any cline-neutral">&nbsp;</span>
1442
+ <span class="cline-any cline-neutral">&nbsp;</span>
1443
+ <span class="cline-any cline-neutral">&nbsp;</span>
1444
+ <span class="cline-any cline-neutral">&nbsp;</span>
1445
+ <span class="cline-any cline-neutral">&nbsp;</span>
1446
+ <span class="cline-any cline-neutral">&nbsp;</span>
1447
+ <span class="cline-any cline-neutral">&nbsp;</span>
1448
+ <span class="cline-any cline-neutral">&nbsp;</span>
1449
+ <span class="cline-any cline-neutral">&nbsp;</span>
1450
+ <span class="cline-any cline-neutral">&nbsp;</span>
1451
+ <span class="cline-any cline-neutral">&nbsp;</span>
1452
+ <span class="cline-any cline-neutral">&nbsp;</span>
1453
+ <span class="cline-any cline-neutral">&nbsp;</span>
1454
+ <span class="cline-any cline-neutral">&nbsp;</span>
1455
+ <span class="cline-any cline-neutral">&nbsp;</span>
1456
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
+ <span class="cline-any cline-neutral">&nbsp;</span>
1458
+ <span class="cline-any cline-no">&nbsp;</span>
1459
+ <span class="cline-any cline-no">&nbsp;</span>
1460
+ <span class="cline-any cline-no">&nbsp;</span>
1461
+ <span class="cline-any cline-neutral">&nbsp;</span>
1462
+ <span class="cline-any cline-no">&nbsp;</span>
1463
+ <span class="cline-any cline-no">&nbsp;</span>
1464
+ <span class="cline-any cline-neutral">&nbsp;</span>
1465
+ <span class="cline-any cline-no">&nbsp;</span>
1466
+ <span class="cline-any cline-no">&nbsp;</span>
1467
+ <span class="cline-any cline-neutral">&nbsp;</span>
1468
+ <span class="cline-any cline-no">&nbsp;</span>
1469
+ <span class="cline-any cline-neutral">&nbsp;</span>
1470
+ <span class="cline-any cline-no">&nbsp;</span>
1471
+ <span class="cline-any cline-neutral">&nbsp;</span>
1472
+ <span class="cline-any cline-neutral">&nbsp;</span>
1473
+ <span class="cline-any cline-neutral">&nbsp;</span>
1474
+ <span class="cline-any cline-neutral">&nbsp;</span>
1475
+ <span class="cline-any cline-no">&nbsp;</span>
1476
+ <span class="cline-any cline-neutral">&nbsp;</span>
1477
+ <span class="cline-any cline-neutral">&nbsp;</span>
1478
+ <span class="cline-any cline-neutral">&nbsp;</span>
1479
+ <span class="cline-any cline-no">&nbsp;</span>
1480
+ <span class="cline-any cline-no">&nbsp;</span>
1481
+ <span class="cline-any cline-no">&nbsp;</span>
1482
+ <span class="cline-any cline-neutral">&nbsp;</span>
1483
+ <span class="cline-any cline-no">&nbsp;</span>
1484
+ <span class="cline-any cline-neutral">&nbsp;</span>
1485
+ <span class="cline-any cline-neutral">&nbsp;</span>
1486
+ <span class="cline-any cline-no">&nbsp;</span>
1487
+ <span class="cline-any cline-neutral">&nbsp;</span>
1488
+ <span class="cline-any cline-neutral">&nbsp;</span>
1489
+ <span class="cline-any cline-neutral">&nbsp;</span>
1490
+ <span class="cline-any cline-no">&nbsp;</span>
1491
+ <span class="cline-any cline-neutral">&nbsp;</span>
1492
+ <span class="cline-any cline-neutral">&nbsp;</span>
1493
+ <span class="cline-any cline-neutral">&nbsp;</span>
1494
+ <span class="cline-any cline-neutral">&nbsp;</span>
1495
+ <span class="cline-any cline-neutral">&nbsp;</span>
1496
+ <span class="cline-any cline-neutral">&nbsp;</span>
1497
+ <span class="cline-any cline-neutral">&nbsp;</span>
1498
+ <span class="cline-any cline-no">&nbsp;</span>
1499
+ <span class="cline-any cline-neutral">&nbsp;</span>
1500
+ <span class="cline-any cline-no">&nbsp;</span>
1501
+ <span class="cline-any cline-no">&nbsp;</span>
1502
+ <span class="cline-any cline-neutral">&nbsp;</span>
1503
+ <span class="cline-any cline-neutral">&nbsp;</span>
1504
+ <span class="cline-any cline-neutral">&nbsp;</span>
1505
+ <span class="cline-any cline-neutral">&nbsp;</span>
1506
+ <span class="cline-any cline-neutral">&nbsp;</span>
1507
+ <span class="cline-any cline-neutral">&nbsp;</span>
1508
+ <span class="cline-any cline-neutral">&nbsp;</span>
1509
+ <span class="cline-any cline-no">&nbsp;</span>
1510
+ <span class="cline-any cline-neutral">&nbsp;</span>
1511
+ <span class="cline-any cline-neutral">&nbsp;</span>
1512
+ <span class="cline-any cline-no">&nbsp;</span>
1513
+ <span class="cline-any cline-neutral">&nbsp;</span>
1514
+ <span class="cline-any cline-no">&nbsp;</span>
1515
+ <span class="cline-any cline-neutral">&nbsp;</span>
1516
+ <span class="cline-any cline-neutral">&nbsp;</span>
1517
+ <span class="cline-any cline-neutral">&nbsp;</span>
1518
+ <span class="cline-any cline-neutral">&nbsp;</span>
1519
+ <span class="cline-any cline-neutral">&nbsp;</span>
1520
+ <span class="cline-any cline-neutral">&nbsp;</span>
1521
+ <span class="cline-any cline-neutral">&nbsp;</span>
1522
+ <span class="cline-any cline-neutral">&nbsp;</span>
1523
+ <span class="cline-any cline-neutral">&nbsp;</span>
1524
+ <span class="cline-any cline-neutral">&nbsp;</span>
1525
+ <span class="cline-any cline-neutral">&nbsp;</span>
1526
+ <span class="cline-any cline-neutral">&nbsp;</span>
1527
+ <span class="cline-any cline-neutral">&nbsp;</span>
1528
+ <span class="cline-any cline-neutral">&nbsp;</span>
1529
+ <span class="cline-any cline-neutral">&nbsp;</span>
1530
+ <span class="cline-any cline-neutral">&nbsp;</span>
1531
+ <span class="cline-any cline-neutral">&nbsp;</span>
1532
+ <span class="cline-any cline-no">&nbsp;</span>
1533
+ <span class="cline-any cline-no">&nbsp;</span>
1534
+ <span class="cline-any cline-neutral">&nbsp;</span>
1535
+ <span class="cline-any cline-neutral">&nbsp;</span>
1536
+ <span class="cline-any cline-no">&nbsp;</span>
1537
+ <span class="cline-any cline-neutral">&nbsp;</span>
1538
+ <span class="cline-any cline-neutral">&nbsp;</span>
1539
+ <span class="cline-any cline-no">&nbsp;</span>
1540
+ <span class="cline-any cline-no">&nbsp;</span>
1541
+ <span class="cline-any cline-no">&nbsp;</span>
1542
+ <span class="cline-any cline-no">&nbsp;</span>
1543
+ <span class="cline-any cline-neutral">&nbsp;</span>
1544
+ <span class="cline-any cline-no">&nbsp;</span>
1545
+ <span class="cline-any cline-neutral">&nbsp;</span>
1546
+ <span class="cline-any cline-no">&nbsp;</span>
1547
+ <span class="cline-any cline-no">&nbsp;</span>
1548
+ <span class="cline-any cline-no">&nbsp;</span>
1549
+ <span class="cline-any cline-no">&nbsp;</span>
1550
+ <span class="cline-any cline-no">&nbsp;</span>
1551
+ <span class="cline-any cline-neutral">&nbsp;</span>
1552
+ <span class="cline-any cline-no">&nbsp;</span>
1553
+ <span class="cline-any cline-neutral">&nbsp;</span>
1554
+ <span class="cline-any cline-neutral">&nbsp;</span>
1555
+ <span class="cline-any cline-no">&nbsp;</span>
1556
+ <span class="cline-any cline-no">&nbsp;</span>
1557
+ <span class="cline-any cline-neutral">&nbsp;</span>
1558
+ <span class="cline-any cline-no">&nbsp;</span>
1559
+ <span class="cline-any cline-no">&nbsp;</span>
1560
+ <span class="cline-any cline-neutral">&nbsp;</span>
1561
+ <span class="cline-any cline-no">&nbsp;</span>
1562
+ <span class="cline-any cline-no">&nbsp;</span>
1563
+ <span class="cline-any cline-neutral">&nbsp;</span>
1564
+ <span class="cline-any cline-neutral">&nbsp;</span>
1565
+ <span class="cline-any cline-neutral">&nbsp;</span>
1566
+ <span class="cline-any cline-no">&nbsp;</span>
1567
+ <span class="cline-any cline-no">&nbsp;</span>
1568
+ <span class="cline-any cline-neutral">&nbsp;</span>
1569
+ <span class="cline-any cline-no">&nbsp;</span>
1570
+ <span class="cline-any cline-neutral">&nbsp;</span>
1571
+ <span class="cline-any cline-neutral">&nbsp;</span>
1572
+ <span class="cline-any cline-neutral">&nbsp;</span>
1573
+ <span class="cline-any cline-neutral">&nbsp;</span>
1574
+ <span class="cline-any cline-neutral">&nbsp;</span>
1575
+ <span class="cline-any cline-neutral">&nbsp;</span>
1576
+ <span class="cline-any cline-neutral">&nbsp;</span>
1577
+ <span class="cline-any cline-neutral">&nbsp;</span>
1578
+ <span class="cline-any cline-neutral">&nbsp;</span>
1579
+ <span class="cline-any cline-neutral">&nbsp;</span>
1580
+ <span class="cline-any cline-neutral">&nbsp;</span>
1581
+ <span class="cline-any cline-no">&nbsp;</span>
1582
+ <span class="cline-any cline-no">&nbsp;</span>
1583
+ <span class="cline-any cline-no">&nbsp;</span>
1584
+ <span class="cline-any cline-no">&nbsp;</span>
1585
+ <span class="cline-any cline-no">&nbsp;</span>
1586
+ <span class="cline-any cline-no">&nbsp;</span>
1587
+ <span class="cline-any cline-neutral">&nbsp;</span>
1588
+ <span class="cline-any cline-no">&nbsp;</span>
1589
+ <span class="cline-any cline-no">&nbsp;</span>
1590
+ <span class="cline-any cline-neutral">&nbsp;</span>
1591
+ <span class="cline-any cline-no">&nbsp;</span>
1592
+ <span class="cline-any cline-neutral">&nbsp;</span>
1593
+ <span class="cline-any cline-neutral">&nbsp;</span>
1594
+ <span class="cline-any cline-neutral">&nbsp;</span>
1595
+ <span class="cline-any cline-neutral">&nbsp;</span>
1596
+ <span class="cline-any cline-neutral">&nbsp;</span>
1597
+ <span class="cline-any cline-neutral">&nbsp;</span>
1598
+ <span class="cline-any cline-neutral">&nbsp;</span>
1599
+ <span class="cline-any cline-neutral">&nbsp;</span>
1600
+ <span class="cline-any cline-neutral">&nbsp;</span>
1601
+ <span class="cline-any cline-neutral">&nbsp;</span>
1602
+ <span class="cline-any cline-neutral">&nbsp;</span>
1603
+ <span class="cline-any cline-neutral">&nbsp;</span>
1604
+ <span class="cline-any cline-neutral">&nbsp;</span>
1605
+ <span class="cline-any cline-no">&nbsp;</span>
1606
+ <span class="cline-any cline-neutral">&nbsp;</span>
1607
+ <span class="cline-any cline-neutral">&nbsp;</span>
1608
+ <span class="cline-any cline-neutral">&nbsp;</span>
1609
+ <span class="cline-any cline-neutral">&nbsp;</span>
1610
+ <span class="cline-any cline-neutral">&nbsp;</span>
1611
+ <span class="cline-any cline-neutral">&nbsp;</span>
1612
+ <span class="cline-any cline-neutral">&nbsp;</span>
1613
+ <span class="cline-any cline-neutral">&nbsp;</span>
1614
+ <span class="cline-any cline-neutral">&nbsp;</span>
1615
+ <span class="cline-any cline-neutral">&nbsp;</span>
1616
+ <span class="cline-any cline-neutral">&nbsp;</span>
1617
+ <span class="cline-any cline-neutral">&nbsp;</span>
1618
+ <span class="cline-any cline-neutral">&nbsp;</span>
1619
+ <span class="cline-any cline-neutral">&nbsp;</span>
1620
+ <span class="cline-any cline-neutral">&nbsp;</span>
1621
+ <span class="cline-any cline-no">&nbsp;</span>
1622
+ <span class="cline-any cline-no">&nbsp;</span>
1623
+ <span class="cline-any cline-neutral">&nbsp;</span>
1624
+ <span class="cline-any cline-no">&nbsp;</span>
1625
+ <span class="cline-any cline-no">&nbsp;</span>
1626
+ <span class="cline-any cline-neutral">&nbsp;</span>
1627
+ <span class="cline-any cline-no">&nbsp;</span>
1628
+ <span class="cline-any cline-no">&nbsp;</span>
1629
+ <span class="cline-any cline-neutral">&nbsp;</span>
1630
+ <span class="cline-any cline-no">&nbsp;</span>
1631
+ <span class="cline-any cline-no">&nbsp;</span>
1632
+ <span class="cline-any cline-no">&nbsp;</span>
1633
+ <span class="cline-any cline-no">&nbsp;</span>
1634
+ <span class="cline-any cline-neutral">&nbsp;</span>
1635
+ <span class="cline-any cline-no">&nbsp;</span>
1636
+ <span class="cline-any cline-no">&nbsp;</span>
1637
+ <span class="cline-any cline-no">&nbsp;</span>
1638
+ <span class="cline-any cline-neutral">&nbsp;</span>
1639
+ <span class="cline-any cline-neutral">&nbsp;</span>
1640
+ <span class="cline-any cline-no">&nbsp;</span>
1641
+ <span class="cline-any cline-neutral">&nbsp;</span>
1642
+ <span class="cline-any cline-no">&nbsp;</span>
1643
+ <span class="cline-any cline-neutral">&nbsp;</span>
1644
+ <span class="cline-any cline-no">&nbsp;</span>
1645
+ <span class="cline-any cline-no">&nbsp;</span>
1646
+ <span class="cline-any cline-neutral">&nbsp;</span>
1647
+ <span class="cline-any cline-no">&nbsp;</span>
1648
+ <span class="cline-any cline-neutral">&nbsp;</span>
1649
+ <span class="cline-any cline-neutral">&nbsp;</span>
1650
+ <span class="cline-any cline-no">&nbsp;</span>
1651
+ <span class="cline-any cline-neutral">&nbsp;</span>
1652
+ <span class="cline-any cline-neutral">&nbsp;</span>
1653
+ <span class="cline-any cline-neutral">&nbsp;</span>
1654
+ <span class="cline-any cline-neutral">&nbsp;</span>
1655
+ <span class="cline-any cline-neutral">&nbsp;</span>
1656
+ <span class="cline-any cline-neutral">&nbsp;</span>
1657
+ <span class="cline-any cline-neutral">&nbsp;</span>
1658
+ <span class="cline-any cline-neutral">&nbsp;</span>
1659
+ <span class="cline-any cline-neutral">&nbsp;</span>
1660
+ <span class="cline-any cline-neutral">&nbsp;</span>
1661
+ <span class="cline-any cline-neutral">&nbsp;</span>
1662
+ <span class="cline-any cline-neutral">&nbsp;</span>
1663
+ <span class="cline-any cline-neutral">&nbsp;</span>
1664
+ <span class="cline-any cline-neutral">&nbsp;</span>
1665
+ <span class="cline-any cline-neutral">&nbsp;</span>
1666
+ <span class="cline-any cline-neutral">&nbsp;</span>
1667
+ <span class="cline-any cline-neutral">&nbsp;</span>
1668
+ <span class="cline-any cline-neutral">&nbsp;</span>
1669
+ <span class="cline-any cline-neutral">&nbsp;</span>
1670
+ <span class="cline-any cline-neutral">&nbsp;</span>
1671
+ <span class="cline-any cline-neutral">&nbsp;</span>
1672
+ <span class="cline-any cline-no">&nbsp;</span>
1673
+ <span class="cline-any cline-neutral">&nbsp;</span>
1674
+ <span class="cline-any cline-no">&nbsp;</span>
1675
+ <span class="cline-any cline-neutral">&nbsp;</span>
1676
+ <span class="cline-any cline-neutral">&nbsp;</span>
1677
+ <span class="cline-any cline-no">&nbsp;</span>
1678
+ <span class="cline-any cline-neutral">&nbsp;</span>
1679
+ <span class="cline-any cline-no">&nbsp;</span>
1680
+ <span class="cline-any cline-no">&nbsp;</span>
1681
+ <span class="cline-any cline-no">&nbsp;</span>
1682
+ <span class="cline-any cline-neutral">&nbsp;</span>
1683
+ <span class="cline-any cline-neutral">&nbsp;</span>
1684
+ <span class="cline-any cline-no">&nbsp;</span>
1685
+ <span class="cline-any cline-neutral">&nbsp;</span>
1686
+ <span class="cline-any cline-no">&nbsp;</span>
1687
+ <span class="cline-any cline-no">&nbsp;</span>
1688
+ <span class="cline-any cline-neutral">&nbsp;</span>
1689
+ <span class="cline-any cline-no">&nbsp;</span>
1690
+ <span class="cline-any cline-neutral">&nbsp;</span>
1691
+ <span class="cline-any cline-neutral">&nbsp;</span>
1692
+ <span class="cline-any cline-no">&nbsp;</span>
1693
+ <span class="cline-any cline-no">&nbsp;</span>
1694
+ <span class="cline-any cline-no">&nbsp;</span>
1695
+ <span class="cline-any cline-neutral">&nbsp;</span>
1696
+ <span class="cline-any cline-neutral">&nbsp;</span>
1697
+ <span class="cline-any cline-neutral">&nbsp;</span>
1698
+ <span class="cline-any cline-no">&nbsp;</span>
1699
+ <span class="cline-any cline-no">&nbsp;</span>
1700
+ <span class="cline-any cline-no">&nbsp;</span>
1701
+ <span class="cline-any cline-neutral">&nbsp;</span>
1702
+ <span class="cline-any cline-neutral">&nbsp;</span>
1703
+ <span class="cline-any cline-no">&nbsp;</span>
1704
+ <span class="cline-any cline-no">&nbsp;</span>
1705
+ <span class="cline-any cline-neutral">&nbsp;</span>
1706
+ <span class="cline-any cline-neutral">&nbsp;</span>
1707
+ <span class="cline-any cline-neutral">&nbsp;</span>
1708
+ <span class="cline-any cline-no">&nbsp;</span>
1709
+ <span class="cline-any cline-no">&nbsp;</span>
1710
+ <span class="cline-any cline-no">&nbsp;</span>
1711
+ <span class="cline-any cline-no">&nbsp;</span>
1712
+ <span class="cline-any cline-no">&nbsp;</span>
1713
+ <span class="cline-any cline-neutral">&nbsp;</span>
1714
+ <span class="cline-any cline-neutral">&nbsp;</span>
1715
+ <span class="cline-any cline-no">&nbsp;</span>
1716
+ <span class="cline-any cline-no">&nbsp;</span>
1717
+ <span class="cline-any cline-no">&nbsp;</span>
1718
+ <span class="cline-any cline-neutral">&nbsp;</span>
1719
+ <span class="cline-any cline-neutral">&nbsp;</span>
1720
+ <span class="cline-any cline-neutral">&nbsp;</span>
1721
+ <span class="cline-any cline-no">&nbsp;</span>
1722
+ <span class="cline-any cline-no">&nbsp;</span>
1723
+ <span class="cline-any cline-neutral">&nbsp;</span>
1724
+ <span class="cline-any cline-no">&nbsp;</span>
1725
+ <span class="cline-any cline-neutral">&nbsp;</span>
1726
+ <span class="cline-any cline-neutral">&nbsp;</span>
1727
+ <span class="cline-any cline-neutral">&nbsp;</span>
1728
+ <span class="cline-any cline-neutral">&nbsp;</span>
1729
+ <span class="cline-any cline-neutral">&nbsp;</span>
1730
+ <span class="cline-any cline-neutral">&nbsp;</span>
1731
+ <span class="cline-any cline-neutral">&nbsp;</span>
1732
+ <span class="cline-any cline-neutral">&nbsp;</span>
1733
+ <span class="cline-any cline-neutral">&nbsp;</span>
1734
+ <span class="cline-any cline-neutral">&nbsp;</span>
1735
+ <span class="cline-any cline-neutral">&nbsp;</span>
1736
+ <span class="cline-any cline-no">&nbsp;</span>
1737
+ <span class="cline-any cline-no">&nbsp;</span>
1738
+ <span class="cline-any cline-neutral">&nbsp;</span>
1739
+ <span class="cline-any cline-no">&nbsp;</span>
1740
+ <span class="cline-any cline-no">&nbsp;</span>
1741
+ <span class="cline-any cline-no">&nbsp;</span>
1742
+ <span class="cline-any cline-no">&nbsp;</span>
1743
+ <span class="cline-any cline-no">&nbsp;</span>
1744
+ <span class="cline-any cline-neutral">&nbsp;</span>
1745
+ <span class="cline-any cline-no">&nbsp;</span>
1746
+ <span class="cline-any cline-no">&nbsp;</span>
1747
+ <span class="cline-any cline-no">&nbsp;</span>
1748
+ <span class="cline-any cline-neutral">&nbsp;</span>
1749
+ <span class="cline-any cline-neutral">&nbsp;</span>
1750
+ <span class="cline-any cline-neutral">&nbsp;</span>
1751
+ <span class="cline-any cline-neutral">&nbsp;</span>
1752
+ <span class="cline-any cline-no">&nbsp;</span>
1753
+ <span class="cline-any cline-neutral">&nbsp;</span>
1754
+ <span class="cline-any cline-neutral">&nbsp;</span>
1755
+ <span class="cline-any cline-neutral">&nbsp;</span>
1756
+ <span class="cline-any cline-neutral">&nbsp;</span>
1757
+ <span class="cline-any cline-neutral">&nbsp;</span>
1758
+ <span class="cline-any cline-neutral">&nbsp;</span>
1759
+ <span class="cline-any cline-neutral">&nbsp;</span>
1760
+ <span class="cline-any cline-no">&nbsp;</span>
1761
+ <span class="cline-any cline-no">&nbsp;</span>
1762
+ <span class="cline-any cline-no">&nbsp;</span>
1763
+ <span class="cline-any cline-no">&nbsp;</span>
1764
+ <span class="cline-any cline-no">&nbsp;</span>
1765
+ <span class="cline-any cline-neutral">&nbsp;</span>
1766
+ <span class="cline-any cline-neutral">&nbsp;</span>
1767
+ <span class="cline-any cline-neutral">&nbsp;</span>
1768
+ <span class="cline-any cline-no">&nbsp;</span>
1769
+ <span class="cline-any cline-neutral">&nbsp;</span>
1770
+ <span class="cline-any cline-neutral">&nbsp;</span>
1771
+ <span class="cline-any cline-neutral">&nbsp;</span>
1772
+ <span class="cline-any cline-neutral">&nbsp;</span>
1773
+ <span class="cline-any cline-neutral">&nbsp;</span>
1774
+ <span class="cline-any cline-neutral">&nbsp;</span>
1775
+ <span class="cline-any cline-neutral">&nbsp;</span>
1776
+ <span class="cline-any cline-neutral">&nbsp;</span>
1777
+ <span class="cline-any cline-neutral">&nbsp;</span>
1778
+ <span class="cline-any cline-neutral">&nbsp;</span>
1779
+ <span class="cline-any cline-no">&nbsp;</span>
1780
+ <span class="cline-any cline-no">&nbsp;</span>
1781
+ <span class="cline-any cline-no">&nbsp;</span>
1782
+ <span class="cline-any cline-no">&nbsp;</span>
1783
+ <span class="cline-any cline-no">&nbsp;</span>
1784
+ <span class="cline-any cline-neutral">&nbsp;</span>
1785
+ <span class="cline-any cline-no">&nbsp;</span>
1786
+ <span class="cline-any cline-no">&nbsp;</span>
1787
+ <span class="cline-any cline-neutral">&nbsp;</span>
1788
+ <span class="cline-any cline-neutral">&nbsp;</span>
1789
+ <span class="cline-any cline-no">&nbsp;</span>
1790
+ <span class="cline-any cline-no">&nbsp;</span>
1791
+ <span class="cline-any cline-neutral">&nbsp;</span>
1792
+ <span class="cline-any cline-neutral">&nbsp;</span>
1793
+ <span class="cline-any cline-neutral">&nbsp;</span>
1794
+ <span class="cline-any cline-no">&nbsp;</span>
1795
+ <span class="cline-any cline-neutral">&nbsp;</span>
1796
+ <span class="cline-any cline-no">&nbsp;</span>
1797
+ <span class="cline-any cline-no">&nbsp;</span>
1798
+ <span class="cline-any cline-no">&nbsp;</span>
1799
+ <span class="cline-any cline-no">&nbsp;</span>
1800
+ <span class="cline-any cline-neutral">&nbsp;</span>
1801
+ <span class="cline-any cline-no">&nbsp;</span>
1802
+ <span class="cline-any cline-neutral">&nbsp;</span>
1803
+ <span class="cline-any cline-neutral">&nbsp;</span>
1804
+ <span class="cline-any cline-neutral">&nbsp;</span>
1805
+ <span class="cline-any cline-neutral">&nbsp;</span>
1806
+ <span class="cline-any cline-no">&nbsp;</span>
1807
+ <span class="cline-any cline-neutral">&nbsp;</span>
1808
+ <span class="cline-any cline-no">&nbsp;</span>
1809
+ <span class="cline-any cline-neutral">&nbsp;</span>
1810
+ <span class="cline-any cline-no">&nbsp;</span>
1811
+ <span class="cline-any cline-neutral">&nbsp;</span>
1812
+ <span class="cline-any cline-neutral">&nbsp;</span>
1813
+ <span class="cline-any cline-neutral">&nbsp;</span>
1814
+ <span class="cline-any cline-neutral">&nbsp;</span>
1815
+ <span class="cline-any cline-no">&nbsp;</span>
1816
+ <span class="cline-any cline-neutral">&nbsp;</span>
1817
+ <span class="cline-any cline-neutral">&nbsp;</span>
1818
+ <span class="cline-any cline-neutral">&nbsp;</span>
1819
+ <span class="cline-any cline-neutral">&nbsp;</span>
1820
+ <span class="cline-any cline-neutral">&nbsp;</span>
1821
+ <span class="cline-any cline-no">&nbsp;</span>
1822
+ <span class="cline-any cline-neutral">&nbsp;</span>
1823
+ <span class="cline-any cline-no">&nbsp;</span>
1824
+ <span class="cline-any cline-no">&nbsp;</span>
1825
+ <span class="cline-any cline-neutral">&nbsp;</span>
1826
+ <span class="cline-any cline-neutral">&nbsp;</span>
1827
+ <span class="cline-any cline-no">&nbsp;</span>
1828
+ <span class="cline-any cline-no">&nbsp;</span>
1829
+ <span class="cline-any cline-neutral">&nbsp;</span>
1830
+ <span class="cline-any cline-no">&nbsp;</span>
1831
+ <span class="cline-any cline-no">&nbsp;</span>
1832
+ <span class="cline-any cline-neutral">&nbsp;</span>
1833
+ <span class="cline-any cline-no">&nbsp;</span>
1834
+ <span class="cline-any cline-no">&nbsp;</span>
1835
+ <span class="cline-any cline-neutral">&nbsp;</span>
1836
+ <span class="cline-any cline-neutral">&nbsp;</span>
1837
+ <span class="cline-any cline-neutral">&nbsp;</span>
1838
+ <span class="cline-any cline-neutral">&nbsp;</span>
1839
+ <span class="cline-any cline-neutral">&nbsp;</span>
1840
+ <span class="cline-any cline-no">&nbsp;</span>
1841
+ <span class="cline-any cline-neutral">&nbsp;</span>
1842
+ <span class="cline-any cline-neutral">&nbsp;</span>
1843
+ <span class="cline-any cline-neutral">&nbsp;</span>
1844
+ <span class="cline-any cline-neutral">&nbsp;</span>
1845
+ <span class="cline-any cline-no">&nbsp;</span>
1846
+ <span class="cline-any cline-no">&nbsp;</span>
1847
+ <span class="cline-any cline-no">&nbsp;</span>
1848
+ <span class="cline-any cline-no">&nbsp;</span>
1849
+ <span class="cline-any cline-neutral">&nbsp;</span>
1850
+ <span class="cline-any cline-neutral">&nbsp;</span>
1851
+ <span class="cline-any cline-neutral">&nbsp;</span>
1852
+ <span class="cline-any cline-neutral">&nbsp;</span>
1853
+ <span class="cline-any cline-neutral">&nbsp;</span>
1854
+ <span class="cline-any cline-no">&nbsp;</span>
1855
+ <span class="cline-any cline-no">&nbsp;</span>
1856
+ <span class="cline-any cline-no">&nbsp;</span>
1857
+ <span class="cline-any cline-neutral">&nbsp;</span>
1858
+ <span class="cline-any cline-neutral">&nbsp;</span>
1859
+ <span class="cline-any cline-neutral">&nbsp;</span>
1860
+ <span class="cline-any cline-neutral">&nbsp;</span>
1861
+ <span class="cline-any cline-neutral">&nbsp;</span>
1862
+ <span class="cline-any cline-neutral">&nbsp;</span>
1863
+ <span class="cline-any cline-no">&nbsp;</span>
1864
+ <span class="cline-any cline-neutral">&nbsp;</span>
1865
+ <span class="cline-any cline-neutral">&nbsp;</span>
1866
+ <span class="cline-any cline-neutral">&nbsp;</span>
1867
+ <span class="cline-any cline-neutral">&nbsp;</span>
1868
+ <span class="cline-any cline-neutral">&nbsp;</span>
1869
+ <span class="cline-any cline-no">&nbsp;</span>
1870
+ <span class="cline-any cline-neutral">&nbsp;</span>
1871
+ <span class="cline-any cline-no">&nbsp;</span>
1872
+ <span class="cline-any cline-neutral">&nbsp;</span>
1873
+ <span class="cline-any cline-neutral">&nbsp;</span>
1874
+ <span class="cline-any cline-neutral">&nbsp;</span>
1875
+ <span class="cline-any cline-neutral">&nbsp;</span>
1876
+ <span class="cline-any cline-neutral">&nbsp;</span>
1877
+ <span class="cline-any cline-neutral">&nbsp;</span>
1878
+ <span class="cline-any cline-neutral">&nbsp;</span>
1879
+ <span class="cline-any cline-neutral">&nbsp;</span>
1880
+ <span class="cline-any cline-neutral">&nbsp;</span>
1881
+ <span class="cline-any cline-neutral">&nbsp;</span>
1882
+ <span class="cline-any cline-neutral">&nbsp;</span>
1883
+ <span class="cline-any cline-neutral">&nbsp;</span>
1884
+ <span class="cline-any cline-neutral">&nbsp;</span>
1885
+ <span class="cline-any cline-neutral">&nbsp;</span>
1886
+ <span class="cline-any cline-neutral">&nbsp;</span>
1887
+ <span class="cline-any cline-neutral">&nbsp;</span>
1888
+ <span class="cline-any cline-neutral">&nbsp;</span>
1889
+ <span class="cline-any cline-neutral">&nbsp;</span>
1890
+ <span class="cline-any cline-neutral">&nbsp;</span>
1891
+ <span class="cline-any cline-neutral">&nbsp;</span>
1892
+ <span class="cline-any cline-neutral">&nbsp;</span>
1893
+ <span class="cline-any cline-neutral">&nbsp;</span>
1894
+ <span class="cline-any cline-yes">2x</span>
1895
+ <span class="cline-any cline-no">&nbsp;</span>
1896
+ <span class="cline-any cline-no">&nbsp;</span>
1897
+ <span class="cline-any cline-no">&nbsp;</span>
1898
+ <span class="cline-any cline-no">&nbsp;</span>
1899
+ <span class="cline-any cline-neutral">&nbsp;</span>
1900
+ <span class="cline-any cline-no">&nbsp;</span>
1901
+ <span class="cline-any cline-no">&nbsp;</span>
1902
+ <span class="cline-any cline-neutral">&nbsp;</span>
1903
+ <span class="cline-any cline-neutral">&nbsp;</span>
1904
+ <span class="cline-any cline-neutral">&nbsp;</span>
1905
+ <span class="cline-any cline-neutral">&nbsp;</span>
1906
+ <span class="cline-any cline-no">&nbsp;</span>
1907
+ <span class="cline-any cline-neutral">&nbsp;</span>
1908
+ <span class="cline-any cline-no">&nbsp;</span>
1909
+ <span class="cline-any cline-no">&nbsp;</span>
1910
+ <span class="cline-any cline-no">&nbsp;</span>
1911
+ <span class="cline-any cline-no">&nbsp;</span>
1912
+ <span class="cline-any cline-no">&nbsp;</span>
1913
+ <span class="cline-any cline-neutral">&nbsp;</span>
1914
+ <span class="cline-any cline-neutral">&nbsp;</span>
1915
+ <span class="cline-any cline-neutral">&nbsp;</span>
1916
+ <span class="cline-any cline-neutral">&nbsp;</span>
1917
+ <span class="cline-any cline-no">&nbsp;</span>
1918
+ <span class="cline-any cline-neutral">&nbsp;</span>
1919
+ <span class="cline-any cline-no">&nbsp;</span>
1920
+ <span class="cline-any cline-no">&nbsp;</span>
1921
+ <span class="cline-any cline-neutral">&nbsp;</span>
1922
+ <span class="cline-any cline-neutral">&nbsp;</span>
1923
+ <span class="cline-any cline-no">&nbsp;</span>
1924
+ <span class="cline-any cline-neutral">&nbsp;</span>
1925
+ <span class="cline-any cline-neutral">&nbsp;</span>
1926
+ <span class="cline-any cline-neutral">&nbsp;</span>
1927
+ <span class="cline-any cline-neutral">&nbsp;</span>
1928
+ <span class="cline-any cline-no">&nbsp;</span>
1929
+ <span class="cline-any cline-no">&nbsp;</span>
1930
+ <span class="cline-any cline-neutral">&nbsp;</span>
1931
+ <span class="cline-any cline-no">&nbsp;</span>
1932
+ <span class="cline-any cline-no">&nbsp;</span>
1933
+ <span class="cline-any cline-neutral">&nbsp;</span>
1934
+ <span class="cline-any cline-neutral">&nbsp;</span>
1935
+ <span class="cline-any cline-no">&nbsp;</span>
1936
+ <span class="cline-any cline-no">&nbsp;</span>
1937
+ <span class="cline-any cline-neutral">&nbsp;</span>
1938
+ <span class="cline-any cline-neutral">&nbsp;</span>
1939
+ <span class="cline-any cline-no">&nbsp;</span>
1940
+ <span class="cline-any cline-no">&nbsp;</span>
1941
+ <span class="cline-any cline-no">&nbsp;</span>
1942
+ <span class="cline-any cline-neutral">&nbsp;</span>
1943
+ <span class="cline-any cline-neutral">&nbsp;</span>
1944
+ <span class="cline-any cline-no">&nbsp;</span>
1945
+ <span class="cline-any cline-no">&nbsp;</span>
1946
+ <span class="cline-any cline-no">&nbsp;</span>
1947
+ <span class="cline-any cline-neutral">&nbsp;</span>
1948
+ <span class="cline-any cline-neutral">&nbsp;</span>
1949
+ <span class="cline-any cline-no">&nbsp;</span>
1950
+ <span class="cline-any cline-no">&nbsp;</span>
1951
+ <span class="cline-any cline-no">&nbsp;</span>
1952
+ <span class="cline-any cline-no">&nbsp;</span>
1953
+ <span class="cline-any cline-no">&nbsp;</span>
1954
+ <span class="cline-any cline-neutral">&nbsp;</span>
1955
+ <span class="cline-any cline-neutral">&nbsp;</span>
1956
+ <span class="cline-any cline-no">&nbsp;</span>
1957
+ <span class="cline-any cline-no">&nbsp;</span>
1958
+ <span class="cline-any cline-neutral">&nbsp;</span>
1959
+ <span class="cline-any cline-no">&nbsp;</span>
1960
+ <span class="cline-any cline-no">&nbsp;</span>
1961
+ <span class="cline-any cline-no">&nbsp;</span>
1962
+ <span class="cline-any cline-no">&nbsp;</span>
1963
+ <span class="cline-any cline-no">&nbsp;</span>
1964
+ <span class="cline-any cline-no">&nbsp;</span>
1965
+ <span class="cline-any cline-neutral">&nbsp;</span>
1966
+ <span class="cline-any cline-neutral">&nbsp;</span>
1967
+ <span class="cline-any cline-neutral">&nbsp;</span>
1968
+ <span class="cline-any cline-no">&nbsp;</span>
1969
+ <span class="cline-any cline-no">&nbsp;</span>
1970
+ <span class="cline-any cline-neutral">&nbsp;</span>
1971
+ <span class="cline-any cline-no">&nbsp;</span>
1972
+ <span class="cline-any cline-neutral">&nbsp;</span>
1973
+ <span class="cline-any cline-no">&nbsp;</span>
1974
+ <span class="cline-any cline-neutral">&nbsp;</span>
1975
+ <span class="cline-any cline-neutral">&nbsp;</span>
1976
+ <span class="cline-any cline-neutral">&nbsp;</span>
1977
+ <span class="cline-any cline-neutral">&nbsp;</span>
1978
+ <span class="cline-any cline-neutral">&nbsp;</span>
1979
+ <span class="cline-any cline-neutral">&nbsp;</span>
1980
+ <span class="cline-any cline-neutral">&nbsp;</span>
1981
+ <span class="cline-any cline-neutral">&nbsp;</span>
1982
+ <span class="cline-any cline-neutral">&nbsp;</span>
1983
+ <span class="cline-any cline-neutral">&nbsp;</span>
1984
+ <span class="cline-any cline-neutral">&nbsp;</span>
1985
+ <span class="cline-any cline-neutral">&nbsp;</span>
1986
+ <span class="cline-any cline-neutral">&nbsp;</span>
1987
+ <span class="cline-any cline-neutral">&nbsp;</span>
1988
+ <span class="cline-any cline-neutral">&nbsp;</span>
1989
+ <span class="cline-any cline-neutral">&nbsp;</span>
1990
+ <span class="cline-any cline-neutral">&nbsp;</span>
1991
+ <span class="cline-any cline-no">&nbsp;</span>
1992
+ <span class="cline-any cline-neutral">&nbsp;</span>
1993
+ <span class="cline-any cline-neutral">&nbsp;</span>
1994
+ <span class="cline-any cline-no">&nbsp;</span>
1995
+ <span class="cline-any cline-no">&nbsp;</span>
1996
+ <span class="cline-any cline-no">&nbsp;</span>
1997
+ <span class="cline-any cline-neutral">&nbsp;</span>
1998
+ <span class="cline-any cline-neutral">&nbsp;</span>
1999
+ <span class="cline-any cline-neutral">&nbsp;</span>
2000
+ <span class="cline-any cline-neutral">&nbsp;</span>
2001
+ <span class="cline-any cline-neutral">&nbsp;</span>
2002
+ <span class="cline-any cline-neutral">&nbsp;</span>
2003
+ <span class="cline-any cline-neutral">&nbsp;</span>
2004
+ <span class="cline-any cline-no">&nbsp;</span>
2005
+ <span class="cline-any cline-neutral">&nbsp;</span>
2006
+ <span class="cline-any cline-no">&nbsp;</span>
2007
+ <span class="cline-any cline-no">&nbsp;</span>
2008
+ <span class="cline-any cline-neutral">&nbsp;</span>
2009
+ <span class="cline-any cline-no">&nbsp;</span>
2010
+ <span class="cline-any cline-no">&nbsp;</span>
2011
+ <span class="cline-any cline-neutral">&nbsp;</span>
2012
+ <span class="cline-any cline-no">&nbsp;</span>
2013
+ <span class="cline-any cline-no">&nbsp;</span>
2014
+ <span class="cline-any cline-neutral">&nbsp;</span>
2015
+ <span class="cline-any cline-neutral">&nbsp;</span>
2016
+ <span class="cline-any cline-no">&nbsp;</span>
2017
+ <span class="cline-any cline-neutral">&nbsp;</span>
2018
+ <span class="cline-any cline-no">&nbsp;</span>
2019
+ <span class="cline-any cline-no">&nbsp;</span>
2020
+ <span class="cline-any cline-no">&nbsp;</span>
2021
+ <span class="cline-any cline-neutral">&nbsp;</span>
2022
+ <span class="cline-any cline-neutral">&nbsp;</span>
2023
+ <span class="cline-any cline-neutral">&nbsp;</span>
2024
+ <span class="cline-any cline-neutral">&nbsp;</span>
2025
+ <span class="cline-any cline-neutral">&nbsp;</span>
2026
+ <span class="cline-any cline-neutral">&nbsp;</span>
2027
+ <span class="cline-any cline-no">&nbsp;</span>
2028
+ <span class="cline-any cline-no">&nbsp;</span>
2029
+ <span class="cline-any cline-no">&nbsp;</span>
2030
+ <span class="cline-any cline-no">&nbsp;</span>
2031
+ <span class="cline-any cline-no">&nbsp;</span>
2032
+ <span class="cline-any cline-neutral">&nbsp;</span>
2033
+ <span class="cline-any cline-neutral">&nbsp;</span>
2034
+ <span class="cline-any cline-neutral">&nbsp;</span>
2035
+ <span class="cline-any cline-neutral">&nbsp;</span>
2036
+ <span class="cline-any cline-neutral">&nbsp;</span>
2037
+ <span class="cline-any cline-neutral">&nbsp;</span>
2038
+ <span class="cline-any cline-neutral">&nbsp;</span>
2039
+ <span class="cline-any cline-no">&nbsp;</span>
2040
+ <span class="cline-any cline-neutral">&nbsp;</span>
2041
+ <span class="cline-any cline-neutral">&nbsp;</span>
2042
+ <span class="cline-any cline-neutral">&nbsp;</span>
2043
+ <span class="cline-any cline-neutral">&nbsp;</span>
2044
+ <span class="cline-any cline-no">&nbsp;</span>
2045
+ <span class="cline-any cline-no">&nbsp;</span>
2046
+ <span class="cline-any cline-no">&nbsp;</span>
2047
+ <span class="cline-any cline-neutral">&nbsp;</span>
2048
+ <span class="cline-any cline-no">&nbsp;</span>
2049
+ <span class="cline-any cline-no">&nbsp;</span>
2050
+ <span class="cline-any cline-neutral">&nbsp;</span>
2051
+ <span class="cline-any cline-neutral">&nbsp;</span>
2052
+ <span class="cline-any cline-neutral">&nbsp;</span>
2053
+ <span class="cline-any cline-neutral">&nbsp;</span>
2054
+ <span class="cline-any cline-neutral">&nbsp;</span>
2055
+ <span class="cline-any cline-no">&nbsp;</span>
2056
+ <span class="cline-any cline-neutral">&nbsp;</span>
2057
+ <span class="cline-any cline-neutral">&nbsp;</span>
2058
+ <span class="cline-any cline-neutral">&nbsp;</span>
2059
+ <span class="cline-any cline-neutral">&nbsp;</span>
2060
+ <span class="cline-any cline-neutral">&nbsp;</span>
2061
+ <span class="cline-any cline-no">&nbsp;</span>
2062
+ <span class="cline-any cline-neutral">&nbsp;</span>
2063
+ <span class="cline-any cline-neutral">&nbsp;</span>
2064
+ <span class="cline-any cline-no">&nbsp;</span>
2065
+ <span class="cline-any cline-neutral">&nbsp;</span>
2066
+ <span class="cline-any cline-neutral">&nbsp;</span>
2067
+ <span class="cline-any cline-no">&nbsp;</span>
2068
+ <span class="cline-any cline-neutral">&nbsp;</span>
2069
+ <span class="cline-any cline-neutral">&nbsp;</span>
2070
+ <span class="cline-any cline-no">&nbsp;</span>
2071
+ <span class="cline-any cline-neutral">&nbsp;</span>
2072
+ <span class="cline-any cline-neutral">&nbsp;</span>
2073
+ <span class="cline-any cline-neutral">&nbsp;</span>
2074
+ <span class="cline-any cline-neutral">&nbsp;</span>
2075
+ <span class="cline-any cline-neutral">&nbsp;</span>
2076
+ <span class="cline-any cline-neutral">&nbsp;</span>
2077
+ <span class="cline-any cline-neutral">&nbsp;</span>
2078
+ <span class="cline-any cline-neutral">&nbsp;</span>
2079
+ <span class="cline-any cline-neutral">&nbsp;</span>
2080
+ <span class="cline-any cline-neutral">&nbsp;</span>
2081
+ <span class="cline-any cline-neutral">&nbsp;</span>
2082
+ <span class="cline-any cline-neutral">&nbsp;</span>
2083
+ <span class="cline-any cline-neutral">&nbsp;</span>
2084
+ <span class="cline-any cline-neutral">&nbsp;</span>
2085
+ <span class="cline-any cline-neutral">&nbsp;</span>
2086
+ <span class="cline-any cline-neutral">&nbsp;</span>
2087
+ <span class="cline-any cline-neutral">&nbsp;</span>
2088
+ <span class="cline-any cline-neutral">&nbsp;</span>
2089
+ <span class="cline-any cline-neutral">&nbsp;</span>
2090
+ <span class="cline-any cline-neutral">&nbsp;</span>
2091
+ <span class="cline-any cline-neutral">&nbsp;</span>
2092
+ <span class="cline-any cline-neutral">&nbsp;</span>
2093
+ <span class="cline-any cline-neutral">&nbsp;</span>
2094
+ <span class="cline-any cline-yes">2x</span>
2095
+ <span class="cline-any cline-no">&nbsp;</span>
2096
+ <span class="cline-any cline-neutral">&nbsp;</span>
2097
+ <span class="cline-any cline-neutral">&nbsp;</span>
2098
+ <span class="cline-any cline-yes">2x</span>
2099
+ <span class="cline-any cline-neutral">&nbsp;</span>
2100
+ <span class="cline-any cline-neutral">&nbsp;</span>
2101
+ <span class="cline-any cline-neutral">&nbsp;</span>
2102
+ <span class="cline-any cline-neutral">&nbsp;</span>
2103
+ <span class="cline-any cline-neutral">&nbsp;</span>
2104
+ <span class="cline-any cline-neutral">&nbsp;</span>
2105
+ <span class="cline-any cline-neutral">&nbsp;</span>
2106
+ <span class="cline-any cline-neutral">&nbsp;</span>
2107
+ <span class="cline-any cline-neutral">&nbsp;</span>
2108
+ <span class="cline-any cline-neutral">&nbsp;</span>
2109
+ <span class="cline-any cline-neutral">&nbsp;</span>
2110
+ <span class="cline-any cline-neutral">&nbsp;</span>
2111
+ <span class="cline-any cline-neutral">&nbsp;</span>
2112
+ <span class="cline-any cline-neutral">&nbsp;</span>
2113
+ <span class="cline-any cline-neutral">&nbsp;</span>
2114
+ <span class="cline-any cline-neutral">&nbsp;</span>
2115
+ <span class="cline-any cline-no">&nbsp;</span>
2116
+ <span class="cline-any cline-neutral">&nbsp;</span>
2117
+ <span class="cline-any cline-neutral">&nbsp;</span>
2118
+ <span class="cline-any cline-neutral">&nbsp;</span>
2119
+ <span class="cline-any cline-neutral">&nbsp;</span>
2120
+ <span class="cline-any cline-neutral">&nbsp;</span>
2121
+ <span class="cline-any cline-neutral">&nbsp;</span>
2122
+ <span class="cline-any cline-neutral">&nbsp;</span>
2123
+ <span class="cline-any cline-neutral">&nbsp;</span>
2124
+ <span class="cline-any cline-neutral">&nbsp;</span>
2125
+ <span class="cline-any cline-neutral">&nbsp;</span>
2126
+ <span class="cline-any cline-neutral">&nbsp;</span>
2127
+ <span class="cline-any cline-neutral">&nbsp;</span>
2128
+ <span class="cline-any cline-neutral">&nbsp;</span>
2129
+ <span class="cline-any cline-neutral">&nbsp;</span>
2130
+ <span class="cline-any cline-neutral">&nbsp;</span>
2131
+ <span class="cline-any cline-neutral">&nbsp;</span>
2132
+ <span class="cline-any cline-neutral">&nbsp;</span>
2133
+ <span class="cline-any cline-neutral">&nbsp;</span>
2134
+ <span class="cline-any cline-neutral">&nbsp;</span>
2135
+ <span class="cline-any cline-neutral">&nbsp;</span>
2136
+ <span class="cline-any cline-no">&nbsp;</span>
2137
+ <span class="cline-any cline-neutral">&nbsp;</span>
2138
+ <span class="cline-any cline-no">&nbsp;</span>
2139
+ <span class="cline-any cline-no">&nbsp;</span>
2140
+ <span class="cline-any cline-neutral">&nbsp;</span>
2141
+ <span class="cline-any cline-neutral">&nbsp;</span>
2142
+ <span class="cline-any cline-no">&nbsp;</span>
2143
+ <span class="cline-any cline-no">&nbsp;</span>
2144
+ <span class="cline-any cline-no">&nbsp;</span>
2145
+ <span class="cline-any cline-neutral">&nbsp;</span>
2146
+ <span class="cline-any cline-no">&nbsp;</span>
2147
+ <span class="cline-any cline-no">&nbsp;</span>
2148
+ <span class="cline-any cline-no">&nbsp;</span>
2149
+ <span class="cline-any cline-no">&nbsp;</span>
2150
+ <span class="cline-any cline-neutral">&nbsp;</span>
2151
+ <span class="cline-any cline-no">&nbsp;</span>
2152
+ <span class="cline-any cline-no">&nbsp;</span>
2153
+ <span class="cline-any cline-neutral">&nbsp;</span>
2154
+ <span class="cline-any cline-neutral">&nbsp;</span>
2155
+ <span class="cline-any cline-no">&nbsp;</span>
2156
+ <span class="cline-any cline-no">&nbsp;</span>
2157
+ <span class="cline-any cline-neutral">&nbsp;</span>
2158
+ <span class="cline-any cline-neutral">&nbsp;</span>
2159
+ <span class="cline-any cline-neutral">&nbsp;</span>
2160
+ <span class="cline-any cline-neutral">&nbsp;</span>
2161
+ <span class="cline-any cline-neutral">&nbsp;</span>
2162
+ <span class="cline-any cline-neutral">&nbsp;</span>
2163
+ <span class="cline-any cline-neutral">&nbsp;</span>
2164
+ <span class="cline-any cline-no">&nbsp;</span>
2165
+ <span class="cline-any cline-no">&nbsp;</span>
2166
+ <span class="cline-any cline-no">&nbsp;</span>
2167
+ <span class="cline-any cline-no">&nbsp;</span>
2168
+ <span class="cline-any cline-neutral">&nbsp;</span>
2169
+ <span class="cline-any cline-neutral">&nbsp;</span>
2170
+ <span class="cline-any cline-neutral">&nbsp;</span>
2171
+ <span class="cline-any cline-no">&nbsp;</span>
2172
+ <span class="cline-any cline-neutral">&nbsp;</span>
2173
+ <span class="cline-any cline-neutral">&nbsp;</span>
2174
+ <span class="cline-any cline-neutral">&nbsp;</span>
2175
+ <span class="cline-any cline-neutral">&nbsp;</span>
2176
+ <span class="cline-any cline-neutral">&nbsp;</span>
2177
+ <span class="cline-any cline-neutral">&nbsp;</span>
2178
+ <span class="cline-any cline-neutral">&nbsp;</span>
2179
+ <span class="cline-any cline-neutral">&nbsp;</span>
2180
+ <span class="cline-any cline-neutral">&nbsp;</span>
2181
+ <span class="cline-any cline-neutral">&nbsp;</span>
2182
+ <span class="cline-any cline-neutral">&nbsp;</span>
2183
+ <span class="cline-any cline-neutral">&nbsp;</span>
2184
+ <span class="cline-any cline-no">&nbsp;</span>
2185
+ <span class="cline-any cline-no">&nbsp;</span>
2186
+ <span class="cline-any cline-neutral">&nbsp;</span>
2187
+ <span class="cline-any cline-neutral">&nbsp;</span>
2188
+ <span class="cline-any cline-no">&nbsp;</span>
2189
+ <span class="cline-any cline-no">&nbsp;</span>
2190
+ <span class="cline-any cline-neutral">&nbsp;</span>
2191
+ <span class="cline-any cline-no">&nbsp;</span>
2192
+ <span class="cline-any cline-neutral">&nbsp;</span>
2193
+ <span class="cline-any cline-no">&nbsp;</span>
2194
+ <span class="cline-any cline-no">&nbsp;</span>
2195
+ <span class="cline-any cline-no">&nbsp;</span>
2196
+ <span class="cline-any cline-no">&nbsp;</span>
2197
+ <span class="cline-any cline-neutral">&nbsp;</span>
2198
+ <span class="cline-any cline-neutral">&nbsp;</span>
2199
+ <span class="cline-any cline-neutral">&nbsp;</span>
2200
+ <span class="cline-any cline-no">&nbsp;</span>
2201
+ <span class="cline-any cline-no">&nbsp;</span>
2202
+ <span class="cline-any cline-neutral">&nbsp;</span>
2203
+ <span class="cline-any cline-neutral">&nbsp;</span>
2204
+ <span class="cline-any cline-neutral">&nbsp;</span>
2205
+ <span class="cline-any cline-neutral">&nbsp;</span>
2206
+ <span class="cline-any cline-neutral">&nbsp;</span>
2207
+ <span class="cline-any cline-neutral">&nbsp;</span>
2208
+ <span class="cline-any cline-neutral">&nbsp;</span>
2209
+ <span class="cline-any cline-neutral">&nbsp;</span>
2210
+ <span class="cline-any cline-neutral">&nbsp;</span>
2211
+ <span class="cline-any cline-no">&nbsp;</span>
2212
+ <span class="cline-any cline-neutral">&nbsp;</span>
2213
+ <span class="cline-any cline-no">&nbsp;</span>
2214
+ <span class="cline-any cline-no">&nbsp;</span>
2215
+ <span class="cline-any cline-neutral">&nbsp;</span>
2216
+ <span class="cline-any cline-neutral">&nbsp;</span>
2217
+ <span class="cline-any cline-no">&nbsp;</span>
2218
+ <span class="cline-any cline-no">&nbsp;</span>
2219
+ <span class="cline-any cline-no">&nbsp;</span>
2220
+ <span class="cline-any cline-neutral">&nbsp;</span>
2221
+ <span class="cline-any cline-no">&nbsp;</span>
2222
+ <span class="cline-any cline-no">&nbsp;</span>
2223
+ <span class="cline-any cline-no">&nbsp;</span>
2224
+ <span class="cline-any cline-no">&nbsp;</span>
2225
+ <span class="cline-any cline-neutral">&nbsp;</span>
2226
+ <span class="cline-any cline-no">&nbsp;</span>
2227
+ <span class="cline-any cline-no">&nbsp;</span>
2228
+ <span class="cline-any cline-neutral">&nbsp;</span>
2229
+ <span class="cline-any cline-neutral">&nbsp;</span>
2230
+ <span class="cline-any cline-no">&nbsp;</span>
2231
+ <span class="cline-any cline-no">&nbsp;</span>
2232
+ <span class="cline-any cline-neutral">&nbsp;</span>
2233
+ <span class="cline-any cline-neutral">&nbsp;</span>
2234
+ <span class="cline-any cline-neutral">&nbsp;</span>
2235
+ <span class="cline-any cline-neutral">&nbsp;</span>
2236
+ <span class="cline-any cline-neutral">&nbsp;</span>
2237
+ <span class="cline-any cline-neutral">&nbsp;</span>
2238
+ <span class="cline-any cline-neutral">&nbsp;</span>
2239
+ <span class="cline-any cline-no">&nbsp;</span>
2240
+ <span class="cline-any cline-no">&nbsp;</span>
2241
+ <span class="cline-any cline-no">&nbsp;</span>
2242
+ <span class="cline-any cline-neutral">&nbsp;</span>
2243
+ <span class="cline-any cline-neutral">&nbsp;</span>
2244
+ <span class="cline-any cline-neutral">&nbsp;</span>
2245
+ <span class="cline-any cline-no">&nbsp;</span>
2246
+ <span class="cline-any cline-neutral">&nbsp;</span>
2247
+ <span class="cline-any cline-neutral">&nbsp;</span>
2248
+ <span class="cline-any cline-neutral">&nbsp;</span>
2249
+ <span class="cline-any cline-neutral">&nbsp;</span>
2250
+ <span class="cline-any cline-neutral">&nbsp;</span>
2251
+ <span class="cline-any cline-neutral">&nbsp;</span>
2252
+ <span class="cline-any cline-neutral">&nbsp;</span>
2253
+ <span class="cline-any cline-neutral">&nbsp;</span>
2254
+ <span class="cline-any cline-neutral">&nbsp;</span>
2255
+ <span class="cline-any cline-neutral">&nbsp;</span>
2256
+ <span class="cline-any cline-neutral">&nbsp;</span>
2257
+ <span class="cline-any cline-neutral">&nbsp;</span>
2258
+ <span class="cline-any cline-no">&nbsp;</span>
2259
+ <span class="cline-any cline-neutral">&nbsp;</span>
2260
+ <span class="cline-any cline-no">&nbsp;</span>
2261
+ <span class="cline-any cline-no">&nbsp;</span>
2262
+ <span class="cline-any cline-no">&nbsp;</span>
2263
+ <span class="cline-any cline-no">&nbsp;</span>
2264
+ <span class="cline-any cline-no">&nbsp;</span>
2265
+ <span class="cline-any cline-no">&nbsp;</span>
2266
+ <span class="cline-any cline-neutral">&nbsp;</span>
2267
+ <span class="cline-any cline-no">&nbsp;</span>
2268
+ <span class="cline-any cline-neutral">&nbsp;</span>
2269
+ <span class="cline-any cline-no">&nbsp;</span>
2270
+ <span class="cline-any cline-no">&nbsp;</span>
2271
+ <span class="cline-any cline-neutral">&nbsp;</span>
2272
+ <span class="cline-any cline-neutral">&nbsp;</span>
2273
+ <span class="cline-any cline-neutral">&nbsp;</span>
2274
+ <span class="cline-any cline-neutral">&nbsp;</span>
2275
+ <span class="cline-any cline-neutral">&nbsp;</span>
2276
+ <span class="cline-any cline-neutral">&nbsp;</span>
2277
+ <span class="cline-any cline-no">&nbsp;</span>
2278
+ <span class="cline-any cline-neutral">&nbsp;</span>
2279
+ <span class="cline-any cline-neutral">&nbsp;</span>
2280
+ <span class="cline-any cline-neutral">&nbsp;</span>
2281
+ <span class="cline-any cline-neutral">&nbsp;</span>
2282
+ <span class="cline-any cline-no">&nbsp;</span>
2283
+ <span class="cline-any cline-no">&nbsp;</span>
2284
+ <span class="cline-any cline-neutral">&nbsp;</span>
2285
+ <span class="cline-any cline-neutral">&nbsp;</span>
2286
+ <span class="cline-any cline-neutral">&nbsp;</span>
2287
+ <span class="cline-any cline-neutral">&nbsp;</span>
2288
+ <span class="cline-any cline-neutral">&nbsp;</span>
2289
+ <span class="cline-any cline-neutral">&nbsp;</span>
2290
+ <span class="cline-any cline-no">&nbsp;</span>
2291
+ <span class="cline-any cline-neutral">&nbsp;</span>
2292
+ <span class="cline-any cline-neutral">&nbsp;</span>
2293
+ <span class="cline-any cline-neutral">&nbsp;</span>
2294
+ <span class="cline-any cline-neutral">&nbsp;</span>
2295
+ <span class="cline-any cline-neutral">&nbsp;</span>
2296
+ <span class="cline-any cline-neutral">&nbsp;</span>
2297
+ <span class="cline-any cline-neutral">&nbsp;</span>
2298
+ <span class="cline-any cline-neutral">&nbsp;</span>
2299
+ <span class="cline-any cline-neutral">&nbsp;</span>
2300
+ <span class="cline-any cline-neutral">&nbsp;</span>
2301
+ <span class="cline-any cline-neutral">&nbsp;</span>
2302
+ <span class="cline-any cline-neutral">&nbsp;</span>
2303
+ <span class="cline-any cline-neutral">&nbsp;</span>
2304
+ <span class="cline-any cline-neutral">&nbsp;</span>
2305
+ <span class="cline-any cline-neutral">&nbsp;</span>
2306
+ <span class="cline-any cline-neutral">&nbsp;</span>
2307
+ <span class="cline-any cline-neutral">&nbsp;</span>
2308
+ <span class="cline-any cline-neutral">&nbsp;</span>
2309
+ <span class="cline-any cline-neutral">&nbsp;</span>
2310
+ <span class="cline-any cline-neutral">&nbsp;</span>
2311
+ <span class="cline-any cline-neutral">&nbsp;</span>
2312
+ <span class="cline-any cline-neutral">&nbsp;</span>
2313
+ <span class="cline-any cline-neutral">&nbsp;</span>
2314
+ <span class="cline-any cline-neutral">&nbsp;</span>
2315
+ <span class="cline-any cline-neutral">&nbsp;</span>
2316
+ <span class="cline-any cline-neutral">&nbsp;</span>
2317
+ <span class="cline-any cline-neutral">&nbsp;</span>
2318
+ <span class="cline-any cline-no">&nbsp;</span>
2319
+ <span class="cline-any cline-no">&nbsp;</span>
2320
+ <span class="cline-any cline-no">&nbsp;</span>
2321
+ <span class="cline-any cline-no">&nbsp;</span>
2322
+ <span class="cline-any cline-no">&nbsp;</span>
2323
+ <span class="cline-any cline-neutral">&nbsp;</span>
2324
+ <span class="cline-any cline-neutral">&nbsp;</span>
2325
+ <span class="cline-any cline-neutral">&nbsp;</span>
2326
+ <span class="cline-any cline-no">&nbsp;</span>
2327
+ <span class="cline-any cline-neutral">&nbsp;</span>
2328
+ <span class="cline-any cline-no">&nbsp;</span>
2329
+ <span class="cline-any cline-no">&nbsp;</span>
2330
+ <span class="cline-any cline-no">&nbsp;</span>
2331
+ <span class="cline-any cline-no">&nbsp;</span>
2332
+ <span class="cline-any cline-neutral">&nbsp;</span>
2333
+ <span class="cline-any cline-neutral">&nbsp;</span>
2334
+ <span class="cline-any cline-neutral">&nbsp;</span>
2335
+ <span class="cline-any cline-no">&nbsp;</span>
2336
+ <span class="cline-any cline-neutral">&nbsp;</span>
2337
+ <span class="cline-any cline-neutral">&nbsp;</span>
2338
+ <span class="cline-any cline-neutral">&nbsp;</span>
2339
+ <span class="cline-any cline-neutral">&nbsp;</span>
2340
+ <span class="cline-any cline-no">&nbsp;</span>
2341
+ <span class="cline-any cline-neutral">&nbsp;</span>
2342
+ <span class="cline-any cline-no">&nbsp;</span>
2343
+ <span class="cline-any cline-no">&nbsp;</span>
2344
+ <span class="cline-any cline-neutral">&nbsp;</span>
2345
+ <span class="cline-any cline-neutral">&nbsp;</span>
2346
+ <span class="cline-any cline-no">&nbsp;</span>
2347
+ <span class="cline-any cline-neutral">&nbsp;</span>
2348
+ <span class="cline-any cline-neutral">&nbsp;</span>
2349
+ <span class="cline-any cline-neutral">&nbsp;</span>
2350
+ <span class="cline-any cline-neutral">&nbsp;</span>
2351
+ <span class="cline-any cline-no">&nbsp;</span>
2352
+ <span class="cline-any cline-neutral">&nbsp;</span>
2353
+ <span class="cline-any cline-no">&nbsp;</span>
2354
+ <span class="cline-any cline-no">&nbsp;</span>
2355
+ <span class="cline-any cline-neutral">&nbsp;</span>
2356
+ <span class="cline-any cline-neutral">&nbsp;</span>
2357
+ <span class="cline-any cline-neutral">&nbsp;</span>
2358
+ <span class="cline-any cline-neutral">&nbsp;</span>
2359
+ <span class="cline-any cline-neutral">&nbsp;</span>
2360
+ <span class="cline-any cline-neutral">&nbsp;</span>
2361
+ <span class="cline-any cline-no">&nbsp;</span>
2362
+ <span class="cline-any cline-no">&nbsp;</span>
2363
+ <span class="cline-any cline-no">&nbsp;</span>
2364
+ <span class="cline-any cline-no">&nbsp;</span>
2365
+ <span class="cline-any cline-neutral">&nbsp;</span>
2366
+ <span class="cline-any cline-no">&nbsp;</span>
2367
+ <span class="cline-any cline-neutral">&nbsp;</span>
2368
+ <span class="cline-any cline-no">&nbsp;</span>
2369
+ <span class="cline-any cline-no">&nbsp;</span>
2370
+ <span class="cline-any cline-no">&nbsp;</span>
2371
+ <span class="cline-any cline-no">&nbsp;</span>
2372
+ <span class="cline-any cline-neutral">&nbsp;</span>
2373
+ <span class="cline-any cline-neutral">&nbsp;</span>
2374
+ <span class="cline-any cline-no">&nbsp;</span>
2375
+ <span class="cline-any cline-no">&nbsp;</span>
2376
+ <span class="cline-any cline-no">&nbsp;</span>
2377
+ <span class="cline-any cline-no">&nbsp;</span>
2378
+ <span class="cline-any cline-no">&nbsp;</span>
2379
+ <span class="cline-any cline-neutral">&nbsp;</span>
2380
+ <span class="cline-any cline-neutral">&nbsp;</span>
2381
+ <span class="cline-any cline-neutral">&nbsp;</span>
2382
+ <span class="cline-any cline-no">&nbsp;</span>
2383
+ <span class="cline-any cline-neutral">&nbsp;</span>
2384
+ <span class="cline-any cline-neutral">&nbsp;</span>
2385
+ <span class="cline-any cline-neutral">&nbsp;</span>
2386
+ <span class="cline-any cline-no">&nbsp;</span>
2387
+ <span class="cline-any cline-no">&nbsp;</span>
2388
+ <span class="cline-any cline-no">&nbsp;</span>
2389
+ <span class="cline-any cline-no">&nbsp;</span>
2390
+ <span class="cline-any cline-neutral">&nbsp;</span>
2391
+ <span class="cline-any cline-neutral">&nbsp;</span>
2392
+ <span class="cline-any cline-no">&nbsp;</span>
2393
+ <span class="cline-any cline-no">&nbsp;</span>
2394
+ <span class="cline-any cline-no">&nbsp;</span>
2395
+ <span class="cline-any cline-no">&nbsp;</span>
2396
+ <span class="cline-any cline-neutral">&nbsp;</span>
2397
+ <span class="cline-any cline-neutral">&nbsp;</span>
2398
+ <span class="cline-any cline-neutral">&nbsp;</span>
2399
+ <span class="cline-any cline-neutral">&nbsp;</span>
2400
+ <span class="cline-any cline-no">&nbsp;</span>
2401
+ <span class="cline-any cline-neutral">&nbsp;</span>
2402
+ <span class="cline-any cline-neutral">&nbsp;</span>
2403
+ <span class="cline-any cline-neutral">&nbsp;</span>
2404
+ <span class="cline-any cline-no">&nbsp;</span>
2405
+ <span class="cline-any cline-neutral">&nbsp;</span>
2406
+ <span class="cline-any cline-neutral">&nbsp;</span>
2407
+ <span class="cline-any cline-neutral">&nbsp;</span>
2408
+ <span class="cline-any cline-neutral">&nbsp;</span>
2409
+ <span class="cline-any cline-neutral">&nbsp;</span>
2410
+ <span class="cline-any cline-neutral">&nbsp;</span>
2411
+ <span class="cline-any cline-neutral">&nbsp;</span>
2412
+ <span class="cline-any cline-neutral">&nbsp;</span>
2413
+ <span class="cline-any cline-neutral">&nbsp;</span>
2414
+ <span class="cline-any cline-neutral">&nbsp;</span>
2415
+ <span class="cline-any cline-neutral">&nbsp;</span>
2416
+ <span class="cline-any cline-neutral">&nbsp;</span>
2417
+ <span class="cline-any cline-neutral">&nbsp;</span>
2418
+ <span class="cline-any cline-neutral">&nbsp;</span>
2419
+ <span class="cline-any cline-no">&nbsp;</span>
2420
+ <span class="cline-any cline-no">&nbsp;</span>
2421
+ <span class="cline-any cline-no">&nbsp;</span>
2422
+ <span class="cline-any cline-no">&nbsp;</span>
2423
+ <span class="cline-any cline-no">&nbsp;</span>
2424
+ <span class="cline-any cline-neutral">&nbsp;</span>
2425
+ <span class="cline-any cline-no">&nbsp;</span>
2426
+ <span class="cline-any cline-no">&nbsp;</span>
2427
+ <span class="cline-any cline-neutral">&nbsp;</span>
2428
+ <span class="cline-any cline-neutral">&nbsp;</span>
2429
+ <span class="cline-any cline-neutral">&nbsp;</span>
2430
+ <span class="cline-any cline-no">&nbsp;</span>
2431
+ <span class="cline-any cline-neutral">&nbsp;</span>
2432
+ <span class="cline-any cline-no">&nbsp;</span>
2433
+ <span class="cline-any cline-no">&nbsp;</span>
2434
+ <span class="cline-any cline-no">&nbsp;</span>
2435
+ <span class="cline-any cline-no">&nbsp;</span>
2436
+ <span class="cline-any cline-neutral">&nbsp;</span>
2437
+ <span class="cline-any cline-neutral">&nbsp;</span>
2438
+ <span class="cline-any cline-neutral">&nbsp;</span>
2439
+ <span class="cline-any cline-neutral">&nbsp;</span>
2440
+ <span class="cline-any cline-no">&nbsp;</span>
2441
+ <span class="cline-any cline-neutral">&nbsp;</span>
2442
+ <span class="cline-any cline-neutral">&nbsp;</span>
2443
+ <span class="cline-any cline-neutral">&nbsp;</span>
2444
+ <span class="cline-any cline-neutral">&nbsp;</span>
2445
+ <span class="cline-any cline-no">&nbsp;</span>
2446
+ <span class="cline-any cline-neutral">&nbsp;</span>
2447
+ <span class="cline-any cline-no">&nbsp;</span>
2448
+ <span class="cline-any cline-neutral">&nbsp;</span>
2449
+ <span class="cline-any cline-no">&nbsp;</span>
2450
+ <span class="cline-any cline-neutral">&nbsp;</span>
2451
+ <span class="cline-any cline-neutral">&nbsp;</span>
2452
+ <span class="cline-any cline-neutral">&nbsp;</span>
2453
+ <span class="cline-any cline-neutral">&nbsp;</span>
2454
+ <span class="cline-any cline-no">&nbsp;</span>
2455
+ <span class="cline-any cline-neutral">&nbsp;</span>
2456
+ <span class="cline-any cline-neutral">&nbsp;</span>
2457
+ <span class="cline-any cline-neutral">&nbsp;</span>
2458
+ <span class="cline-any cline-neutral">&nbsp;</span>
2459
+ <span class="cline-any cline-neutral">&nbsp;</span>
2460
+ <span class="cline-any cline-no">&nbsp;</span>
2461
+ <span class="cline-any cline-neutral">&nbsp;</span>
2462
+ <span class="cline-any cline-no">&nbsp;</span>
2463
+ <span class="cline-any cline-no">&nbsp;</span>
2464
+ <span class="cline-any cline-neutral">&nbsp;</span>
2465
+ <span class="cline-any cline-no">&nbsp;</span>
2466
+ <span class="cline-any cline-no">&nbsp;</span>
2467
+ <span class="cline-any cline-neutral">&nbsp;</span>
2468
+ <span class="cline-any cline-neutral">&nbsp;</span>
2469
+ <span class="cline-any cline-neutral">&nbsp;</span>
2470
+ <span class="cline-any cline-no">&nbsp;</span>
2471
+ <span class="cline-any cline-no">&nbsp;</span>
2472
+ <span class="cline-any cline-no">&nbsp;</span>
2473
+ <span class="cline-any cline-no">&nbsp;</span>
2474
+ <span class="cline-any cline-neutral">&nbsp;</span>
2475
+ <span class="cline-any cline-no">&nbsp;</span>
2476
+ <span class="cline-any cline-no">&nbsp;</span>
2477
+ <span class="cline-any cline-neutral">&nbsp;</span>
2478
+ <span class="cline-any cline-no">&nbsp;</span>
2479
+ <span class="cline-any cline-no">&nbsp;</span>
2480
+ <span class="cline-any cline-neutral">&nbsp;</span>
2481
+ <span class="cline-any cline-neutral">&nbsp;</span>
2482
+ <span class="cline-any cline-neutral">&nbsp;</span>
2483
+ <span class="cline-any cline-no">&nbsp;</span>
2484
+ <span class="cline-any cline-no">&nbsp;</span>
2485
+ <span class="cline-any cline-no">&nbsp;</span>
2486
+ <span class="cline-any cline-no">&nbsp;</span>
2487
+ <span class="cline-any cline-neutral">&nbsp;</span>
2488
+ <span class="cline-any cline-neutral">&nbsp;</span>
2489
+ <span class="cline-any cline-no">&nbsp;</span>
2490
+ <span class="cline-any cline-neutral">&nbsp;</span>
2491
+ <span class="cline-any cline-neutral">&nbsp;</span>
2492
+ <span class="cline-any cline-neutral">&nbsp;</span>
2493
+ <span class="cline-any cline-neutral">&nbsp;</span>
2494
+ <span class="cline-any cline-no">&nbsp;</span>
2495
+ <span class="cline-any cline-neutral">&nbsp;</span>
2496
+ <span class="cline-any cline-neutral">&nbsp;</span>
2497
+ <span class="cline-any cline-neutral">&nbsp;</span>
2498
+ <span class="cline-any cline-no">&nbsp;</span>
2499
+ <span class="cline-any cline-neutral">&nbsp;</span>
2500
+ <span class="cline-any cline-neutral">&nbsp;</span>
2501
+ <span class="cline-any cline-neutral">&nbsp;</span>
2502
+ <span class="cline-any cline-neutral">&nbsp;</span>
2503
+ <span class="cline-any cline-neutral">&nbsp;</span>
2504
+ <span class="cline-any cline-neutral">&nbsp;</span>
2505
+ <span class="cline-any cline-neutral">&nbsp;</span>
2506
+ <span class="cline-any cline-neutral">&nbsp;</span>
2507
+ <span class="cline-any cline-neutral">&nbsp;</span>
2508
+ <span class="cline-any cline-neutral">&nbsp;</span>
2509
+ <span class="cline-any cline-neutral">&nbsp;</span>
2510
+ <span class="cline-any cline-neutral">&nbsp;</span>
2511
+ <span class="cline-any cline-neutral">&nbsp;</span>
2512
+ <span class="cline-any cline-neutral">&nbsp;</span>
2513
+ <span class="cline-any cline-neutral">&nbsp;</span>
2514
+ <span class="cline-any cline-neutral">&nbsp;</span>
2515
+ <span class="cline-any cline-no">&nbsp;</span>
2516
+ <span class="cline-any cline-no">&nbsp;</span>
2517
+ <span class="cline-any cline-no">&nbsp;</span>
2518
+ <span class="cline-any cline-no">&nbsp;</span>
2519
+ <span class="cline-any cline-no">&nbsp;</span>
2520
+ <span class="cline-any cline-neutral">&nbsp;</span>
2521
+ <span class="cline-any cline-no">&nbsp;</span>
2522
+ <span class="cline-any cline-no">&nbsp;</span>
2523
+ <span class="cline-any cline-neutral">&nbsp;</span>
2524
+ <span class="cline-any cline-no">&nbsp;</span>
2525
+ <span class="cline-any cline-no">&nbsp;</span>
2526
+ <span class="cline-any cline-neutral">&nbsp;</span>
2527
+ <span class="cline-any cline-neutral">&nbsp;</span>
2528
+ <span class="cline-any cline-no">&nbsp;</span>
2529
+ <span class="cline-any cline-no">&nbsp;</span>
2530
+ <span class="cline-any cline-neutral">&nbsp;</span>
2531
+ <span class="cline-any cline-neutral">&nbsp;</span>
2532
+ <span class="cline-any cline-no">&nbsp;</span>
2533
+ <span class="cline-any cline-no">&nbsp;</span>
2534
+ <span class="cline-any cline-no">&nbsp;</span>
2535
+ <span class="cline-any cline-neutral">&nbsp;</span>
2536
+ <span class="cline-any cline-neutral">&nbsp;</span>
2537
+ <span class="cline-any cline-no">&nbsp;</span>
2538
+ <span class="cline-any cline-no">&nbsp;</span>
2539
+ <span class="cline-any cline-no">&nbsp;</span>
2540
+ <span class="cline-any cline-neutral">&nbsp;</span>
2541
+ <span class="cline-any cline-neutral">&nbsp;</span>
2542
+ <span class="cline-any cline-no">&nbsp;</span>
2543
+ <span class="cline-any cline-no">&nbsp;</span>
2544
+ <span class="cline-any cline-no">&nbsp;</span>
2545
+ <span class="cline-any cline-no">&nbsp;</span>
2546
+ <span class="cline-any cline-no">&nbsp;</span>
2547
+ <span class="cline-any cline-neutral">&nbsp;</span>
2548
+ <span class="cline-any cline-neutral">&nbsp;</span>
2549
+ <span class="cline-any cline-no">&nbsp;</span>
2550
+ <span class="cline-any cline-no">&nbsp;</span>
2551
+ <span class="cline-any cline-neutral">&nbsp;</span>
2552
+ <span class="cline-any cline-no">&nbsp;</span>
2553
+ <span class="cline-any cline-no">&nbsp;</span>
2554
+ <span class="cline-any cline-neutral">&nbsp;</span>
2555
+ <span class="cline-any cline-no">&nbsp;</span>
2556
+ <span class="cline-any cline-neutral">&nbsp;</span>
2557
+ <span class="cline-any cline-neutral">&nbsp;</span>
2558
+ <span class="cline-any cline-neutral">&nbsp;</span>
2559
+ <span class="cline-any cline-neutral">&nbsp;</span>
2560
+ <span class="cline-any cline-neutral">&nbsp;</span>
2561
+ <span class="cline-any cline-neutral">&nbsp;</span>
2562
+ <span class="cline-any cline-neutral">&nbsp;</span>
2563
+ <span class="cline-any cline-neutral">&nbsp;</span>
2564
+ <span class="cline-any cline-neutral">&nbsp;</span>
2565
+ <span class="cline-any cline-neutral">&nbsp;</span>
2566
+ <span class="cline-any cline-neutral">&nbsp;</span>
2567
+ <span class="cline-any cline-no">&nbsp;</span>
2568
+ <span class="cline-any cline-no">&nbsp;</span>
2569
+ <span class="cline-any cline-neutral">&nbsp;</span>
2570
+ <span class="cline-any cline-no">&nbsp;</span>
2571
+ <span class="cline-any cline-neutral">&nbsp;</span>
2572
+ <span class="cline-any cline-no">&nbsp;</span>
2573
+ <span class="cline-any cline-no">&nbsp;</span>
2574
+ <span class="cline-any cline-no">&nbsp;</span>
2575
+ <span class="cline-any cline-no">&nbsp;</span>
2576
+ <span class="cline-any cline-neutral">&nbsp;</span>
2577
+ <span class="cline-any cline-neutral">&nbsp;</span>
2578
+ <span class="cline-any cline-neutral">&nbsp;</span>
2579
+ <span class="cline-any cline-neutral">&nbsp;</span>
2580
+ <span class="cline-any cline-neutral">&nbsp;</span>
2581
+ <span class="cline-any cline-neutral">&nbsp;</span>
2582
+ <span class="cline-any cline-neutral">&nbsp;</span>
2583
+ <span class="cline-any cline-neutral">&nbsp;</span>
2584
+ <span class="cline-any cline-neutral">&nbsp;</span>
2585
+ <span class="cline-any cline-neutral">&nbsp;</span>
2586
+ <span class="cline-any cline-neutral">&nbsp;</span>
2587
+ <span class="cline-any cline-neutral">&nbsp;</span>
2588
+ <span class="cline-any cline-neutral">&nbsp;</span>
2589
+ <span class="cline-any cline-neutral">&nbsp;</span>
2590
+ <span class="cline-any cline-neutral">&nbsp;</span>
2591
+ <span class="cline-any cline-neutral">&nbsp;</span>
2592
+ <span class="cline-any cline-neutral">&nbsp;</span>
2593
+ <span class="cline-any cline-neutral">&nbsp;</span>
2594
+ <span class="cline-any cline-neutral">&nbsp;</span>
2595
+ <span class="cline-any cline-neutral">&nbsp;</span>
2596
+ <span class="cline-any cline-neutral">&nbsp;</span>
2597
+ <span class="cline-any cline-neutral">&nbsp;</span>
2598
+ <span class="cline-any cline-neutral">&nbsp;</span>
2599
+ <span class="cline-any cline-no">&nbsp;</span>
2600
+ <span class="cline-any cline-neutral">&nbsp;</span>
2601
+ <span class="cline-any cline-no">&nbsp;</span>
2602
+ <span class="cline-any cline-no">&nbsp;</span>
2603
+ <span class="cline-any cline-no">&nbsp;</span>
2604
+ <span class="cline-any cline-neutral">&nbsp;</span>
2605
+ <span class="cline-any cline-no">&nbsp;</span>
2606
+ <span class="cline-any cline-neutral">&nbsp;</span>
2607
+ <span class="cline-any cline-neutral">&nbsp;</span>
2608
+ <span class="cline-any cline-no">&nbsp;</span>
2609
+ <span class="cline-any cline-no">&nbsp;</span>
2610
+ <span class="cline-any cline-no">&nbsp;</span>
2611
+ <span class="cline-any cline-no">&nbsp;</span>
2612
+ <span class="cline-any cline-neutral">&nbsp;</span>
2613
+ <span class="cline-any cline-no">&nbsp;</span>
2614
+ <span class="cline-any cline-no">&nbsp;</span>
2615
+ <span class="cline-any cline-neutral">&nbsp;</span>
2616
+ <span class="cline-any cline-neutral">&nbsp;</span>
2617
+ <span class="cline-any cline-neutral">&nbsp;</span>
2618
+ <span class="cline-any cline-neutral">&nbsp;</span>
2619
+ <span class="cline-any cline-no">&nbsp;</span>
2620
+ <span class="cline-any cline-no">&nbsp;</span>
2621
+ <span class="cline-any cline-neutral">&nbsp;</span>
2622
+ <span class="cline-any cline-neutral">&nbsp;</span>
2623
+ <span class="cline-any cline-no">&nbsp;</span>
2624
+ <span class="cline-any cline-no">&nbsp;</span>
2625
+ <span class="cline-any cline-neutral">&nbsp;</span>
2626
+ <span class="cline-any cline-neutral">&nbsp;</span>
2627
+ <span class="cline-any cline-no">&nbsp;</span>
2628
+ <span class="cline-any cline-no">&nbsp;</span>
2629
+ <span class="cline-any cline-neutral">&nbsp;</span>
2630
+ <span class="cline-any cline-neutral">&nbsp;</span>
2631
+ <span class="cline-any cline-neutral">&nbsp;</span>
2632
+ <span class="cline-any cline-neutral">&nbsp;</span>
2633
+ <span class="cline-any cline-no">&nbsp;</span>
2634
+ <span class="cline-any cline-no">&nbsp;</span>
2635
+ <span class="cline-any cline-no">&nbsp;</span>
2636
+ <span class="cline-any cline-no">&nbsp;</span>
2637
+ <span class="cline-any cline-neutral">&nbsp;</span>
2638
+ <span class="cline-any cline-neutral">&nbsp;</span>
2639
+ <span class="cline-any cline-neutral">&nbsp;</span>
2640
+ <span class="cline-any cline-neutral">&nbsp;</span>
2641
+ <span class="cline-any cline-no">&nbsp;</span>
2642
+ <span class="cline-any cline-neutral">&nbsp;</span>
2643
+ <span class="cline-any cline-neutral">&nbsp;</span>
2644
+ <span class="cline-any cline-no">&nbsp;</span>
2645
+ <span class="cline-any cline-no">&nbsp;</span>
2646
+ <span class="cline-any cline-no">&nbsp;</span>
2647
+ <span class="cline-any cline-no">&nbsp;</span>
2648
+ <span class="cline-any cline-no">&nbsp;</span>
2649
+ <span class="cline-any cline-neutral">&nbsp;</span>
2650
+ <span class="cline-any cline-no">&nbsp;</span>
2651
+ <span class="cline-any cline-neutral">&nbsp;</span>
2652
+ <span class="cline-any cline-no">&nbsp;</span>
2653
+ <span class="cline-any cline-neutral">&nbsp;</span>
2654
+ <span class="cline-any cline-no">&nbsp;</span>
2655
+ <span class="cline-any cline-no">&nbsp;</span>
2656
+ <span class="cline-any cline-no">&nbsp;</span>
2657
+ <span class="cline-any cline-no">&nbsp;</span>
2658
+ <span class="cline-any cline-neutral">&nbsp;</span>
2659
+ <span class="cline-any cline-no">&nbsp;</span>
2660
+ <span class="cline-any cline-neutral">&nbsp;</span>
2661
+ <span class="cline-any cline-no">&nbsp;</span>
2662
+ <span class="cline-any cline-neutral">&nbsp;</span>
2663
+ <span class="cline-any cline-no">&nbsp;</span>
2664
+ <span class="cline-any cline-no">&nbsp;</span>
2665
+ <span class="cline-any cline-neutral">&nbsp;</span>
2666
+ <span class="cline-any cline-no">&nbsp;</span>
2667
+ <span class="cline-any cline-neutral">&nbsp;</span>
2668
+ <span class="cline-any cline-neutral">&nbsp;</span>
2669
+ <span class="cline-any cline-no">&nbsp;</span>
2670
+ <span class="cline-any cline-neutral">&nbsp;</span>
2671
+ <span class="cline-any cline-neutral">&nbsp;</span>
2672
+ <span class="cline-any cline-no">&nbsp;</span>
2673
+ <span class="cline-any cline-no">&nbsp;</span>
2674
+ <span class="cline-any cline-neutral">&nbsp;</span>
2675
+ <span class="cline-any cline-neutral">&nbsp;</span>
2676
+ <span class="cline-any cline-neutral">&nbsp;</span>
2677
+ <span class="cline-any cline-neutral">&nbsp;</span>
2678
+ <span class="cline-any cline-neutral">&nbsp;</span>
2679
+ <span class="cline-any cline-neutral">&nbsp;</span>
2680
+ <span class="cline-any cline-neutral">&nbsp;</span>
2681
+ <span class="cline-any cline-neutral">&nbsp;</span>
2682
+ <span class="cline-any cline-neutral">&nbsp;</span>
2683
+ <span class="cline-any cline-neutral">&nbsp;</span>
2684
+ <span class="cline-any cline-neutral">&nbsp;</span>
2685
+ <span class="cline-any cline-neutral">&nbsp;</span>
2686
+ <span class="cline-any cline-neutral">&nbsp;</span>
2687
+ <span class="cline-any cline-neutral">&nbsp;</span>
2688
+ <span class="cline-any cline-neutral">&nbsp;</span>
2689
+ <span class="cline-any cline-neutral">&nbsp;</span>
2690
+ <span class="cline-any cline-no">&nbsp;</span>
2691
+ <span class="cline-any cline-neutral">&nbsp;</span>
2692
+ <span class="cline-any cline-neutral">&nbsp;</span>
2693
+ <span class="cline-any cline-no">&nbsp;</span>
2694
+ <span class="cline-any cline-no">&nbsp;</span>
2695
+ <span class="cline-any cline-no">&nbsp;</span>
2696
+ <span class="cline-any cline-neutral">&nbsp;</span>
2697
+ <span class="cline-any cline-neutral">&nbsp;</span>
2698
+ <span class="cline-any cline-no">&nbsp;</span>
2699
+ <span class="cline-any cline-neutral">&nbsp;</span>
2700
+ <span class="cline-any cline-no">&nbsp;</span>
2701
+ <span class="cline-any cline-neutral">&nbsp;</span>
2702
+ <span class="cline-any cline-neutral">&nbsp;</span>
2703
+ <span class="cline-any cline-neutral">&nbsp;</span>
2704
+ <span class="cline-any cline-no">&nbsp;</span>
2705
+ <span class="cline-any cline-no">&nbsp;</span>
2706
+ <span class="cline-any cline-neutral">&nbsp;</span>
2707
+ <span class="cline-any cline-neutral">&nbsp;</span>
2708
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { and, asc, count, desc, eq, getTableName, gt, lt, or, SQL } from "drizzle-orm";
2709
+ import { AnyPgColumn, PgTable } from "drizzle-orm/pg-core";
2710
+ import { Entity, EntityCollection, FilterValues, Relation } from "@rebasepro/types";
2711
+ import { resolveCollectionRelations } from "@rebasepro/common";
2712
+ import { DrizzleConditionBuilder } from "../../utils/drizzle-conditions";
2713
+ import {
2714
+ getCollectionByPath,
2715
+ getTableForCollection,
2716
+ getPrimaryKeys,
2717
+ parseIdValues,
2718
+ buildCompositeId
2719
+ } from "./entity-helpers";
2720
+ import { parseDataFromServer, normalizeDbValues } from "../data-transformer";
2721
+ import { RelationService } from "./RelationService";
2722
+ import { RelationalQueryBuilder } from "drizzle-orm/pg-core/query-builders/query";
2723
+ import { DrizzleClient } from "../interfaces";
2724
+ import { BackendCollectionRegistry } from "../../collections/BackendCollectionRegistry";
2725
+ &nbsp;
2726
+ /** Type-safe accessor for Drizzle's relational query API via dynamic table name */
2727
+ type DbQueryAccessor = Record&lt;string, RelationalQueryBuilder&lt;any, any&gt;&gt; | undefined;
2728
+ &nbsp;
2729
+ /**
2730
+ * Service for handling all entity read operations.
2731
+ * Handles fetching, searching, counting, and filtering entities.
2732
+ */
2733
+ export class EntityFetchService {
2734
+ private relationService: RelationService;
2735
+ &nbsp;
2736
+ constructor(private db: DrizzleClient, private registry: BackendCollectionRegistry) {
2737
+ this.relationService = new RelationService(db, registry);
2738
+ }
2739
+ &nbsp;
2740
+ /**
2741
+ * Get the relational query builder for a given table name.
2742
+ * Safely narrows the DrizzleClient union type to access db.query[tableName].
2743
+ */
2744
+ private <span class="fstat-no" title="function not covered" >getQueryBuilder(</span>tableName: string): RelationalQueryBuilder&lt;any, any&gt; | undefined {
2745
+ const query = (<span class="cstat-no" title="statement not covered" >this.db as { query?: DbQueryAccessor }).query;</span>
2746
+ <span class="cstat-no" title="statement not covered" > return query?.[tableName];</span>
2747
+ }
2748
+ &nbsp;
2749
+ /**
2750
+ * Build filter conditions from FilterValues
2751
+ * Delegates to DrizzleConditionBuilder.buildFilterConditions
2752
+ */
2753
+ <span class="fstat-no" title="function not covered" > buildFilterConditions&lt;</span>M extends Record&lt;string, any&gt;&gt;(
2754
+ filter: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;,
2755
+ table: PgTable&lt;any&gt;,
2756
+ collectionPath: string
2757
+ ): SQL[] {
2758
+ <span class="cstat-no" title="statement not covered" > return DrizzleConditionBuilder.buildFilterConditions(filter, table, collectionPath);</span>
2759
+ }
2760
+ &nbsp;
2761
+ // =============================================================
2762
+ // DRIZZLE QUERY HELPERS
2763
+ // =============================================================
2764
+ &nbsp;
2765
+ /**
2766
+ * Build the `with` config for Drizzle's relational query API.
2767
+ * Converts collection relations to a Drizzle-compatible `with` object.
2768
+ *
2769
+ * When `include` is provided, only those relations are loaded.
2770
+ * When `include` is absent, ALL relations are loaded (CMS path).
2771
+ *
2772
+ * Automatically detects many-to-many junction tables and nests
2773
+ * the target relation so actual entity data is returned.
2774
+ */
2775
+ private <span class="fstat-no" title="function not covered" >buildWithConfig(</span>
2776
+ collection: EntityCollection,
2777
+ include?: string[]
2778
+ ): Record&lt;string, boolean | { with: Record&lt;string, boolean&gt; }&gt; {
2779
+ const resolvedRelations = <span class="cstat-no" title="statement not covered" >resolveCollectionRelations(collection);</span>
2780
+ const propertyKeys = <span class="cstat-no" title="statement not covered" >new Set(Object.keys(collection.properties || {}));</span>
2781
+ const withConfig: Record&lt;string, boolean | { with: Record&lt;string, boolean&gt; }&gt; = <span class="cstat-no" title="statement not covered" >{};</span>
2782
+ &nbsp;
2783
+ const shouldInclude = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(k</span>ey: string) =&gt;</span>
2784
+ <span class="cstat-no" title="statement not covered" > !include || include.length === 0 || include[0] === "*" || include.includes(key);</span>
2785
+ &nbsp;
2786
+ <span class="cstat-no" title="statement not covered" > for (const [key, relation] of Object.entries(resolvedRelations)) {</span>
2787
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!shouldInclude(key)) <span class="cstat-no" title="statement not covered" >continue;</span></span>
2788
+ // Only include relations that map to actual properties (or include all for REST)
2789
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!include &amp;&amp; !propertyKeys.has(key)) <span class="cstat-no" title="statement not covered" >continue;</span></span>
2790
+ &nbsp;
2791
+ const drizzleRelName = <span class="cstat-no" title="statement not covered" >relation.relationName || key;</span>
2792
+ &nbsp;
2793
+ // Detect many-to-many junction tables:
2794
+ // If the relation goes through a junction table (relation.through exists or
2795
+ // the Drizzle schema maps to a junction table), we need two-level with.
2796
+ <span class="cstat-no" title="statement not covered" > if (relation.cardinality === "many" &amp;&amp; this.isJunctionRelation(relation, collection)) {</span>
2797
+ // The Drizzle relation points to the junction table.
2798
+ // We need: { [junctionRelName]: { with: { [targetFkName]: true } } }
2799
+ // The target FK name is the relation on the junction table that points to the actual target.
2800
+ const targetFkName = <span class="cstat-no" title="statement not covered" >this.getJunctionTargetRelationName(relation, collection);</span>
2801
+ <span class="cstat-no" title="statement not covered" > if (targetFkName) {</span>
2802
+ <span class="cstat-no" title="statement not covered" > withConfig[drizzleRelName] = { with: { [targetFkName]: true } };</span>
2803
+ } else {
2804
+ <span class="cstat-no" title="statement not covered" > withConfig[drizzleRelName] = true;</span>
2805
+ }
2806
+ } else {
2807
+ <span class="cstat-no" title="statement not covered" > withConfig[drizzleRelName] = true;</span>
2808
+ }
2809
+ }
2810
+ &nbsp;
2811
+ <span class="cstat-no" title="statement not covered" > return withConfig;</span>
2812
+ }
2813
+ &nbsp;
2814
+ /**
2815
+ * Detect if a many-to-many relation uses a junction table in the Drizzle schema.
2816
+ */
2817
+ private <span class="fstat-no" title="function not covered" >isJunctionRelation(</span>relation: Relation, _collection: EntityCollection): boolean {
2818
+ // If `through` is defined, it's explicitly a junction relation
2819
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (relation.through) <span class="cstat-no" title="statement not covered" >return true;</span></span>
2820
+ // If joinPath has an intermediate table, it's likely junction-based
2821
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (relation.joinPath &amp;&amp; relation.joinPath.length &gt; 1) <span class="cstat-no" title="statement not covered" >return true;</span></span>
2822
+ <span class="cstat-no" title="statement not covered" > return false;</span>
2823
+ }
2824
+ &nbsp;
2825
+ /**
2826
+ * Get the Drizzle relation name on the junction table that points to the actual target entity.
2827
+ * For example, for posts_tags junction, this returns "tag_id" (the relation pointing to tags).
2828
+ */
2829
+ private <span class="fstat-no" title="function not covered" >getJunctionTargetRelationName(</span>relation: Relation, _collection: EntityCollection): string | null {
2830
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (relation.through) {</span>
2831
+ // The junction relation on the junction table pointing to the target
2832
+ // uses the targetColumn name as the Drizzle relation name
2833
+ <span class="cstat-no" title="statement not covered" > return relation.through.targetColumn.replace(/_id$/, "_id");</span>
2834
+ }
2835
+ <span class="cstat-no" title="statement not covered" > return null;</span>
2836
+ }
2837
+ &nbsp;
2838
+ /**
2839
+ * Convert a db.query result row (with nested relation objects) to an Entity&lt;M&gt;.
2840
+ * Handles:
2841
+ * - The { id, path, values } wrapping
2842
+ * - Type normalization (dates, numbers, NaN) via normalizeDbValues
2843
+ * - Converting nested relation objects to { id, path, __type: "relation" } for CMS
2844
+ * - Flattening junction-table many-to-many results
2845
+ */
2846
+ private <span class="fstat-no" title="function not covered" >drizzleResultToEntity&lt;</span>M extends Record&lt;string, any&gt;&gt;(
2847
+ row: Record&lt;string, unknown&gt;,
2848
+ collection: EntityCollection,
2849
+ collectionPath: string,
2850
+ idInfo: { fieldName: string; type: "string" | "number" },
2851
+ databaseId?: string
2852
+ ): Entity&lt;M&gt; {
2853
+ const resolvedRelations = <span class="cstat-no" title="statement not covered" >resolveCollectionRelations(collection);</span>
2854
+ const propertyKeys = <span class="cstat-no" title="statement not covered" >new Set(Object.keys(collection.properties || {}));</span>
2855
+ &nbsp;
2856
+ // Normalize non-relation values (dates, numbers, etc.)
2857
+ const normalizedValues = <span class="cstat-no" title="statement not covered" >normalizeDbValues(row as M, collection);</span>
2858
+ &nbsp;
2859
+ // Convert nested relation objects to CMS-style { id, path, __type: "relation" }
2860
+ <span class="cstat-no" title="statement not covered" > for (const [key, relation] of Object.entries(resolvedRelations)) {</span>
2861
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!propertyKeys.has(key)) <span class="cstat-no" title="statement not covered" >continue;</span></span>
2862
+ const drizzleRelName = <span class="cstat-no" title="statement not covered" >relation.relationName || key;</span>
2863
+ const relData = <span class="cstat-no" title="statement not covered" >row[drizzleRelName];</span>
2864
+ &nbsp;
2865
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (relData === undefined || relData === null) <span class="cstat-no" title="statement not covered" >continue;</span></span>
2866
+ &nbsp;
2867
+ <span class="cstat-no" title="statement not covered" > if (relation.cardinality === "many" &amp;&amp; Array.isArray(relData)) {</span>
2868
+ const targetCollection = <span class="cstat-no" title="statement not covered" >relation.target();</span>
2869
+ const targetPath = <span class="cstat-no" title="statement not covered" >targetCollection.slug || targetCollection.dbPath;</span>
2870
+ const targetPks = <span class="cstat-no" title="statement not covered" >getPrimaryKeys(targetCollection, this.registry);</span>
2871
+ const targetIdField = <span class="cstat-no" title="statement not covered" >targetPks[0].fieldName;</span>
2872
+ &nbsp;
2873
+ (<span class="cstat-no" title="statement not covered" >normalizedValues as Record&lt;string, unknown&gt;)[key] = relData.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Record&lt;string, unknown&gt;) =&gt; {</span>
2874
+ // Handle junction table flattening:
2875
+ // Junction rows look like { post_id: 1, tag_id: { id: 5, name: "ts" } }
2876
+ let targetEntity = <span class="cstat-no" title="statement not covered" >item;</span>
2877
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.isJunctionRelation(relation, collection)) {</span>
2878
+ // Find the nested target object in the junction row
2879
+ const nestedKey = <span class="cstat-no" title="statement not covered" >Object.keys(item).find(</span>
2880
+ <span class="fstat-no" title="function not covered" > nk </span>=&gt; <span class="cstat-no" title="statement not covered" >typeof item[nk] === "object" &amp;&amp; item[nk] !== null &amp;&amp; !Array.isArray(item[nk])</span>
2881
+ );
2882
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (nestedKey) {</span>
2883
+ <span class="cstat-no" title="statement not covered" > targetEntity = item[nestedKey] as Record&lt;string, unknown&gt;;</span>
2884
+ }
2885
+ }
2886
+ &nbsp;
2887
+ const relId = <span class="cstat-no" title="statement not covered" >String(targetEntity[targetIdField] ?? targetEntity.id ?? targetEntity[Object.keys(targetEntity)[0]]);</span>
2888
+ const targetValues = <span class="cstat-no" title="statement not covered" >normalizeDbValues(targetEntity, targetCollection);</span>
2889
+ &nbsp;
2890
+ <span class="cstat-no" title="statement not covered" > return {</span>
2891
+ id: relId,
2892
+ path: targetPath,
2893
+ __type: "relation" as const,
2894
+ data: {
2895
+ id: relId,
2896
+ path: targetPath,
2897
+ values: targetValues,
2898
+ databaseId
2899
+ }
2900
+ };
2901
+ });
2902
+ } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (relation.cardinality === "one" &amp;&amp; typeof relData === "object" &amp;&amp; !Array.isArray(relData)) {</span>
2903
+ const targetCollection = <span class="cstat-no" title="statement not covered" >relation.target();</span>
2904
+ const targetPath = <span class="cstat-no" title="statement not covered" >targetCollection.slug || targetCollection.dbPath;</span>
2905
+ const targetPks = <span class="cstat-no" title="statement not covered" >getPrimaryKeys(targetCollection, this.registry);</span>
2906
+ const targetIdField = <span class="cstat-no" title="statement not covered" >targetPks[0].fieldName;</span>
2907
+ const relObj = <span class="cstat-no" title="statement not covered" >relData as Record&lt;string, unknown&gt;;</span>
2908
+ &nbsp;
2909
+ const relId = <span class="cstat-no" title="statement not covered" >String(relObj[targetIdField] ?? relObj.id ?? relObj[Object.keys(relObj)[0]]);</span>
2910
+ const targetValues = <span class="cstat-no" title="statement not covered" >normalizeDbValues(relObj, targetCollection);</span>
2911
+ &nbsp;
2912
+ (<span class="cstat-no" title="statement not covered" >normalizedValues as Record&lt;string, unknown&gt;)[key] = {</span>
2913
+ id: relId,
2914
+ path: targetPath,
2915
+ __type: "relation" as const,
2916
+ data: {
2917
+ id: relId,
2918
+ path: targetPath,
2919
+ values: targetValues,
2920
+ databaseId
2921
+ }
2922
+ };
2923
+ }
2924
+ }
2925
+ &nbsp;
2926
+ <span class="cstat-no" title="statement not covered" > return {</span>
2927
+ id: String(row[idInfo.fieldName]),
2928
+ path: collectionPath,
2929
+ values: normalizedValues as M,
2930
+ databaseId
2931
+ };
2932
+ }
2933
+ &nbsp;
2934
+ /**
2935
+ * Convert a db.query result row to a flat REST-style object with populated relations.
2936
+ */
2937
+ private <span class="fstat-no" title="function not covered" >drizzleResultToRestRow(</span>
2938
+ row: Record&lt;string, unknown&gt;,
2939
+ collection: EntityCollection,
2940
+ idInfo: { fieldName: string; type: "string" | "number" }
2941
+ ): Record&lt;string, unknown&gt; {
2942
+ const flat: Record&lt;string, unknown&gt; = <span class="cstat-no" title="statement not covered" >{ id: String(row[idInfo.fieldName]) };</span>
2943
+ const resolvedRelations = <span class="cstat-no" title="statement not covered" >resolveCollectionRelations(collection);</span>
2944
+ &nbsp;
2945
+ <span class="cstat-no" title="statement not covered" > for (const [k, v] of Object.entries(row)) {</span>
2946
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (k === idInfo.fieldName) <span class="cstat-no" title="statement not covered" >continue;</span></span>
2947
+ &nbsp;
2948
+ const relation = <span class="cstat-no" title="statement not covered" >resolvedRelations[k];</span>
2949
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(v) &amp;&amp; relation) {</span>
2950
+ // Many relation — flatten each nested entity, handling junction tables
2951
+ <span class="cstat-no" title="statement not covered" > flat[k] = v.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Record&lt;string, unknown&gt;) =&gt; {</span>
2952
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.isJunctionRelation(relation, collection)) {</span>
2953
+ const nestedKey = <span class="cstat-no" title="statement not covered" >Object.keys(item).find(</span>
2954
+ <span class="fstat-no" title="function not covered" > nk </span>=&gt; <span class="cstat-no" title="statement not covered" >typeof item[nk] === "object" &amp;&amp; item[nk] !== null &amp;&amp; !Array.isArray(item[nk])</span>
2955
+ );
2956
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (nestedKey) {</span>
2957
+ const nested = <span class="cstat-no" title="statement not covered" >item[nestedKey] as Record&lt;string, unknown&gt;;</span>
2958
+ <span class="cstat-no" title="statement not covered" > return { id: String(nested.id ?? nested[Object.keys(nested)[0]]), ...nested };</span>
2959
+ }
2960
+ }
2961
+ <span class="cstat-no" title="statement not covered" > return { id: String(item.id ?? item[Object.keys(item)[0]]), ...item };</span>
2962
+ });
2963
+ } else <span class="cstat-no" title="statement not covered" >if (typeof v === "object" &amp;&amp; v !== null &amp;&amp; !Array.isArray(v) &amp;&amp; relation) {</span>
2964
+ // One-to-one relation — inline the object
2965
+ const relObj = <span class="cstat-no" title="statement not covered" >v as Record&lt;string, unknown&gt;;</span>
2966
+ <span class="cstat-no" title="statement not covered" > flat[k] = { id: String(relObj.id ?? relObj[Object.keys(relObj)[0]]), ...relObj };</span>
2967
+ } else {
2968
+ <span class="cstat-no" title="statement not covered" > flat[k] = v;</span>
2969
+ }
2970
+ }
2971
+ <span class="cstat-no" title="statement not covered" > return flat;</span>
2972
+ }
2973
+ &nbsp;
2974
+ /**
2975
+ * Build db.query-compatible options from standard fetch options.
2976
+ * Handles filter, search, orderBy, limit, and cursor-based pagination.
2977
+ */
2978
+ private <span class="fstat-no" title="function not covered" >buildDrizzleQueryOptions&lt;</span>M extends Record&lt;string, any&gt;&gt;(
2979
+ table: PgTable&lt;any&gt;,
2980
+ idField: AnyPgColumn,
2981
+ idInfo: { fieldName: string; type: "string" | "number" },
2982
+ options: {
2983
+ filter?: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;;
2984
+ orderBy?: string;
2985
+ order?: "desc" | "asc";
2986
+ limit?: number;
2987
+ startAfter?: Record&lt;string, unknown&gt;;
2988
+ searchString?: string;
2989
+ },
2990
+ collectionPath: string,
2991
+ withConfig?: Record&lt;string, any&gt;
2992
+ ): Record&lt;string, unknown&gt; {
2993
+ const queryOpts: Record&lt;string, unknown&gt; = <span class="cstat-no" title="statement not covered" >{};</span>
2994
+ &nbsp;
2995
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (withConfig) <span class="cstat-no" title="statement not covered" >queryOpts.with = withConfig;</span></span>
2996
+ &nbsp;
2997
+ // Build where conditions
2998
+ const allConditions: SQL[] = <span class="cstat-no" title="statement not covered" >[];</span>
2999
+ &nbsp;
3000
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.searchString) {</span>
3001
+ const collection = <span class="cstat-no" title="statement not covered" >getCollectionByPath(collectionPath, this.registry);</span>
3002
+ const searchConditions = <span class="cstat-no" title="statement not covered" >DrizzleConditionBuilder.buildSearchConditions(</span>
3003
+ options.searchString, collection.properties, table
3004
+ );
3005
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (searchConditions.length === 0) {</span>
3006
+ // Return options that will produce empty results
3007
+ <span class="cstat-no" title="statement not covered" > queryOpts.where = and(eq(idField, -99999999)); </span>// impossible condition
3008
+ <span class="cstat-no" title="statement not covered" > return queryOpts;</span>
3009
+ }
3010
+ <span class="cstat-no" title="statement not covered" > allConditions.push(DrizzleConditionBuilder.combineConditionsWithOr(searchConditions)!);</span>
3011
+ }
3012
+ &nbsp;
3013
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.filter) {</span>
3014
+ const filterConditions = <span class="cstat-no" title="statement not covered" >this.buildFilterConditions(options.filter, table, collectionPath);</span>
3015
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (filterConditions.length &gt; 0) <span class="cstat-no" title="statement not covered" >allConditions.push(...filterConditions);</span></span>
3016
+ }
3017
+ &nbsp;
3018
+ // Cursor-based pagination (startAfter)
3019
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.startAfter) {</span>
3020
+ const cursorConditions = <span class="cstat-no" title="statement not covered" >this.buildCursorConditions(table, idField, idInfo, options);</span>
3021
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (cursorConditions.length &gt; 0) <span class="cstat-no" title="statement not covered" >allConditions.push(...cursorConditions);</span></span>
3022
+ }
3023
+ &nbsp;
3024
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (allConditions.length &gt; 0) {</span>
3025
+ <span class="cstat-no" title="statement not covered" > queryOpts.where = and(...allConditions);</span>
3026
+ }
3027
+ &nbsp;
3028
+ // OrderBy
3029
+ const orderExpressions: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
3030
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.orderBy) {</span>
3031
+ const orderByField = <span class="cstat-no" title="statement not covered" >table[options.orderBy as keyof typeof table] as AnyPgColumn;</span>
3032
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (orderByField) {</span>
3033
+ <span class="cstat-no" title="statement not covered" > orderExpressions.push(options.order === "asc" ? asc(orderByField) : desc(orderByField));</span>
3034
+ }
3035
+ }
3036
+ <span class="cstat-no" title="statement not covered" > orderExpressions.push(desc(idField));</span>
3037
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (orderExpressions.length &gt; 0) {</span>
3038
+ <span class="cstat-no" title="statement not covered" > queryOpts.orderBy = orderExpressions;</span>
3039
+ }
3040
+ &nbsp;
3041
+ // Limit
3042
+ const limitValue = <span class="cstat-no" title="statement not covered" >options.searchString ? (options.limit || 50) : options.limit;</span>
3043
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (limitValue) <span class="cstat-no" title="statement not covered" >queryOpts.limit = limitValue;</span></span>
3044
+ &nbsp;
3045
+ <span class="cstat-no" title="statement not covered" > return queryOpts;</span>
3046
+ }
3047
+ &nbsp;
3048
+ /**
3049
+ * Extract cursor pagination conditions from startAfter options.
3050
+ */
3051
+ private <span class="fstat-no" title="function not covered" >buildCursorConditions(</span>
3052
+ table: PgTable&lt;any&gt;,
3053
+ idField: AnyPgColumn,
3054
+ idInfo: { fieldName: string; type: "string" | "number" },
3055
+ options: { orderBy?: string; order?: "desc" | "asc"; startAfter?: Record&lt;string, unknown&gt; }
3056
+ ): SQL[] {
3057
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!options.startAfter) <span class="cstat-no" title="statement not covered" >return [];</span></span>
3058
+ const cursor = <span class="cstat-no" title="statement not covered" >options.startAfter;</span>
3059
+ &nbsp;
3060
+ <span class="cstat-no" title="statement not covered" > if (options.orderBy) {</span>
3061
+ const orderByField = <span class="cstat-no" title="statement not covered" >table[options.orderBy as keyof typeof table] as AnyPgColumn;</span>
3062
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (orderByField) {</span>
3063
+ const startAfterOrderValue = (<span class="cstat-no" title="statement not covered" >cursor.values as Record&lt;string, unknown&gt; | undefined)?.[options.orderBy] ?? cursor[options.orderBy];</span>
3064
+ const startAfterId = <span class="cstat-no" title="statement not covered" >cursor.id ?? cursor[idInfo.fieldName];</span>
3065
+ &nbsp;
3066
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startAfterOrderValue !== undefined &amp;&amp; startAfterId !== undefined) {</span>
3067
+ <span class="cstat-no" title="statement not covered" > if (options.order === "asc") {</span>
3068
+ <span class="cstat-no" title="statement not covered" > return [or(</span>
3069
+ gt(orderByField, startAfterOrderValue),
3070
+ and(eq(orderByField, startAfterOrderValue), gt(idField, startAfterId))
3071
+ )!];
3072
+ } else {
3073
+ <span class="cstat-no" title="statement not covered" > return [or(</span>
3074
+ lt(orderByField, startAfterOrderValue),
3075
+ and(eq(orderByField, startAfterOrderValue), lt(idField, startAfterId))
3076
+ )!];
3077
+ }
3078
+ }
3079
+ }
3080
+ } else {
3081
+ const startAfterId = <span class="cstat-no" title="statement not covered" >cursor.id ?? cursor[idInfo.fieldName];</span>
3082
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startAfterId !== undefined &amp;&amp; startAfterId !== null) {</span>
3083
+ const idInfoArray = <span class="cstat-no" title="statement not covered" >[idInfo] as Array&lt;{ fieldName: string; type: "string" | "number" }&gt;;</span>
3084
+ const parsedStartAfterIdObj = <span class="cstat-no" title="statement not covered" >parseIdValues(startAfterId as string | number, idInfoArray);</span>
3085
+ <span class="cstat-no" title="statement not covered" > return [lt(idField, parsedStartAfterIdObj[idInfo.fieldName])];</span>
3086
+ }
3087
+ }
3088
+ &nbsp;
3089
+ <span class="cstat-no" title="statement not covered" > return [];</span>
3090
+ }
3091
+ &nbsp;
3092
+ /**
3093
+ * Fetch a single entity by ID
3094
+ */
3095
+ <span class="fstat-no" title="function not covered" > async </span>fetchEntity&lt;M extends Record&lt;string, any&gt;&gt;(
3096
+ collectionPath: string,
3097
+ entityId: string | number,
3098
+ databaseId?: string
3099
+ ): Promise&lt;Entity&lt;M&gt; | undefined&gt; {
3100
+ const collection = <span class="cstat-no" title="statement not covered" >getCollectionByPath(collectionPath, this.registry);</span>
3101
+ const table = <span class="cstat-no" title="statement not covered" >getTableForCollection(collection, this.registry);</span>
3102
+ const idInfoArray = <span class="cstat-no" title="statement not covered" >getPrimaryKeys(collection, this.registry);</span>
3103
+ const idInfo = <span class="cstat-no" title="statement not covered" >idInfoArray[0];</span>
3104
+ const idField = <span class="cstat-no" title="statement not covered" >table[idInfo.fieldName as keyof typeof table] as AnyPgColumn;</span>
3105
+ &nbsp;
3106
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!idField) {</span>
3107
+ <span class="cstat-no" title="statement not covered" > throw new Error(`ID field '${idInfo.fieldName}' not found in table for collection '${collectionPath}'`);</span>
3108
+ }
3109
+ &nbsp;
3110
+ const parsedIdObj = <span class="cstat-no" title="statement not covered" >parseIdValues(entityId, idInfoArray);</span>
3111
+ const parsedId = <span class="cstat-no" title="statement not covered" >parsedIdObj[idInfo.fieldName];</span>
3112
+ &nbsp;
3113
+ // Primary path: use db.query.findFirst with relation loading
3114
+
3115
+ const tableName = <span class="cstat-no" title="statement not covered" >getTableName(table);</span>
3116
+ &nbsp;
3117
+ const qb = <span class="cstat-no" title="statement not covered" >this.getQueryBuilder(tableName);</span>
3118
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (qb) {</span>
3119
+ <span class="cstat-no" title="statement not covered" > try {</span>
3120
+ const withConfig = <span class="cstat-no" title="statement not covered" >this.buildWithConfig(collection);</span>
3121
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic query config
3122
+ const row = <span class="cstat-no" title="statement not covered" >await qb.findFirst({</span>
3123
+ where: eq(idField, parsedId),
3124
+ with: withConfig
3125
+ } as any);
3126
+ &nbsp;
3127
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!row) <span class="cstat-no" title="statement not covered" >return undefined;</span></span>
3128
+ &nbsp;
3129
+ <span class="cstat-no" title="statement not covered" > return this.drizzleResultToEntity&lt;M&gt;(row, collection, collectionPath, idInfo, databaseId);</span>
3130
+ } catch (e) {
3131
+ <span class="cstat-no" title="statement not covered" > console.warn(`[EntityFetchService] db.query.findFirst failed for ${collectionPath}, falling back to db.select:`, e);</span>
3132
+ }
3133
+ }
3134
+ &nbsp;
3135
+ // Fallback: db.select + N+1 relation loading
3136
+ const result = <span class="cstat-no" title="statement not covered" >await this.db</span>
3137
+ .select()
3138
+ .from(table)
3139
+ .where(eq(idField, parsedId))
3140
+ .limit(1);
3141
+ &nbsp;
3142
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (result.length === 0) <span class="cstat-no" title="statement not covered" >return undefined;</span></span>
3143
+ &nbsp;
3144
+ const raw = <span class="cstat-no" title="statement not covered" >result[0] as M;</span>
3145
+ const values = <span class="cstat-no" title="statement not covered" >await parseDataFromServer(raw, collection, this.db, this.registry);</span>
3146
+ &nbsp;
3147
+ // Load relations based on cardinality (N+1 — only used in fallback)
3148
+ const resolvedRelations = <span class="cstat-no" title="statement not covered" >resolveCollectionRelations(collection);</span>
3149
+ const propertyKeys = <span class="cstat-no" title="statement not covered" >new Set(Object.keys(collection.properties));</span>
3150
+ &nbsp;
3151
+ const relationPromises = <span class="cstat-no" title="statement not covered" >Object.entries(resolvedRelations)</span>
3152
+ .filter(<span class="fstat-no" title="function not covered" >([</span>key]) =&gt; <span class="cstat-no" title="statement not covered" >propertyKeys.has(key))</span>
3153
+ .map(<span class="fstat-no" title="function not covered" >async </span>([key, relation]) =&gt; {
3154
+ <span class="cstat-no" title="statement not covered" > if (relation.cardinality === "many") {</span>
3155
+ const relatedEntities = <span class="cstat-no" title="statement not covered" >await this.relationService.fetchRelatedEntities(</span>
3156
+ collectionPath,
3157
+ parsedId,
3158
+ key,
3159
+ {}
3160
+ );
3161
+ (<span class="cstat-no" title="statement not covered" >values as Record&lt;string, unknown&gt;)[key] = relatedEntities.map(<span class="fstat-no" title="function not covered" >e </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3162
+ id: e.id,
3163
+ path: e.path,
3164
+ __type: "relation"
3165
+ }));
3166
+ } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (relation.cardinality === "one") {</span>
3167
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if ((values as Record&lt;string, unknown&gt;)[key] == null) {</span>
3168
+ <span class="cstat-no" title="statement not covered" > try {</span>
3169
+ const relatedEntities = <span class="cstat-no" title="statement not covered" >await this.relationService.fetchRelatedEntities(</span>
3170
+ collectionPath,
3171
+ parsedId,
3172
+ key,
3173
+ { limit: 1 }
3174
+ );
3175
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (relatedEntities.length &gt; 0) {</span>
3176
+ const e = <span class="cstat-no" title="statement not covered" >relatedEntities[0];</span>
3177
+ (<span class="cstat-no" title="statement not covered" >values as Record&lt;string, unknown&gt;)[key] = {</span>
3178
+ id: e.id,
3179
+ path: e.path,
3180
+ __type: "relation"
3181
+ };
3182
+ }
3183
+ } catch (e) {
3184
+ <span class="cstat-no" title="statement not covered" > console.warn(`Could not resolve one-to-one relation property: ${key}`, e);</span>
3185
+ }
3186
+ }
3187
+ }
3188
+ });
3189
+ &nbsp;
3190
+ <span class="cstat-no" title="statement not covered" > await Promise.all(relationPromises);</span>
3191
+ &nbsp;
3192
+ <span class="cstat-no" title="statement not covered" > return {</span>
3193
+ id: entityId.toString(),
3194
+ path: collectionPath,
3195
+ values: values as M,
3196
+ databaseId
3197
+ };
3198
+ }
3199
+ &nbsp;
3200
+ /**
3201
+ * Unified method to fetch entities with optional search functionality
3202
+ */
3203
+ async fetchEntitiesWithConditions&lt;M extends Record&lt;string, any&gt;&gt;(
3204
+ collectionPath: string,
3205
+ options: {
3206
+ filter?: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;;
3207
+ orderBy?: string;
3208
+ order?: "desc" | "asc";
3209
+ limit?: number;
3210
+ startAfter?: Record&lt;string, unknown&gt;;
3211
+ searchString?: string;
3212
+ databaseId?: string;
3213
+ } = <span class="branch-0 cbranch-no" title="branch not covered" >{}</span>
3214
+ ): Promise&lt;Entity&lt;M&gt;[]&gt; {
3215
+ const collection = getCollectionByPath(collectionPath, this.registry);
3216
+ const table = <span class="cstat-no" title="statement not covered" >getTableForCollection(collection, this.registry);</span>
3217
+ const idInfoArray = <span class="cstat-no" title="statement not covered" >getPrimaryKeys(collection, this.registry);</span>
3218
+ const idInfo = <span class="cstat-no" title="statement not covered" >idInfoArray[0];</span>
3219
+ const idField = <span class="cstat-no" title="statement not covered" >table[idInfo.fieldName as keyof typeof table] as AnyPgColumn;</span>
3220
+ &nbsp;
3221
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!idField) {</span>
3222
+ <span class="cstat-no" title="statement not covered" > throw new Error(`ID field '${idInfo.fieldName}' not found in table for collection '${collectionPath}'`);</span>
3223
+ }
3224
+ &nbsp;
3225
+ // Primary path: use db.query.findMany with relation loading
3226
+
3227
+ const tableName = <span class="cstat-no" title="statement not covered" >getTableName(table);</span>
3228
+ &nbsp;
3229
+ const qb = <span class="cstat-no" title="statement not covered" >this.getQueryBuilder(tableName);</span>
3230
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (qb) {</span>
3231
+ <span class="cstat-no" title="statement not covered" > try {</span>
3232
+ const withConfig = <span class="cstat-no" title="statement not covered" >this.buildWithConfig(collection);</span>
3233
+ const queryOpts = <span class="cstat-no" title="statement not covered" >this.buildDrizzleQueryOptions&lt;M&gt;(</span>
3234
+ table, idField, idInfo, options, collectionPath, withConfig
3235
+ );
3236
+ &nbsp;
3237
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic query config
3238
+ const results = <span class="cstat-no" title="statement not covered" >await qb.findMany(queryOpts as any);</span>
3239
+ &nbsp;
3240
+ <span class="cstat-no" title="statement not covered" > return (results as Record&lt;string, unknown&gt;[]).map(<span class="fstat-no" title="function not covered" >row </span>=&gt;</span>
3241
+ <span class="cstat-no" title="statement not covered" > this.drizzleResultToEntity&lt;M&gt;(row, collection, collectionPath, idInfo, options.databaseId)</span>
3242
+ );
3243
+ } catch (e) {
3244
+ <span class="cstat-no" title="statement not covered" > console.warn(`[EntityFetchService] db.query.findMany failed for ${collectionPath}, falling back to db.select:`, e);</span>
3245
+ }
3246
+ }
3247
+ &nbsp;
3248
+ // Fallback: db.select + processEntityResults (N+1 for relations)
3249
+ let query = <span class="cstat-no" title="statement not covered" >this.db.select().from(table).$dynamic();</span>
3250
+ const allConditions: SQL[] = <span class="cstat-no" title="statement not covered" >[];</span>
3251
+ &nbsp;
3252
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.searchString) {</span>
3253
+ const searchConditions = <span class="cstat-no" title="statement not covered" >DrizzleConditionBuilder.buildSearchConditions(</span>
3254
+ options.searchString, collection.properties, table
3255
+ );
3256
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (searchConditions.length === 0) <span class="cstat-no" title="statement not covered" >return [];</span></span>
3257
+ <span class="cstat-no" title="statement not covered" > allConditions.push(DrizzleConditionBuilder.combineConditionsWithOr(searchConditions)!);</span>
3258
+ }
3259
+ &nbsp;
3260
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.filter) {</span>
3261
+ const filterConditions = <span class="cstat-no" title="statement not covered" >this.buildFilterConditions(options.filter, table, collectionPath);</span>
3262
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (filterConditions.length &gt; 0) <span class="cstat-no" title="statement not covered" >allConditions.push(...filterConditions);</span></span>
3263
+ }
3264
+ &nbsp;
3265
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (allConditions.length &gt; 0) {</span>
3266
+ const finalCondition = <span class="cstat-no" title="statement not covered" >DrizzleConditionBuilder.combineConditionsWithAnd(allConditions);</span>
3267
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (finalCondition) <span class="cstat-no" title="statement not covered" >query = query.where(finalCondition);</span></span>
3268
+ }
3269
+ &nbsp;
3270
+ const orderExpressions = <span class="cstat-no" title="statement not covered" >[];</span>
3271
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.orderBy) {</span>
3272
+ const orderByField = <span class="cstat-no" title="statement not covered" >table[options.orderBy as keyof typeof table] as AnyPgColumn;</span>
3273
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (orderByField) {</span>
3274
+ <span class="cstat-no" title="statement not covered" > orderExpressions.push(options.order === "asc" ? asc(orderByField) : desc(orderByField));</span>
3275
+ }
3276
+ }
3277
+ <span class="cstat-no" title="statement not covered" > orderExpressions.push(desc(idField));</span>
3278
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (orderExpressions.length &gt; 0) <span class="cstat-no" title="statement not covered" >query = query.orderBy(...orderExpressions);</span></span>
3279
+ &nbsp;
3280
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.startAfter) {</span>
3281
+ const cursorConditions = <span class="cstat-no" title="statement not covered" >this.buildCursorConditions(table, idField, idInfo, options);</span>
3282
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (cursorConditions.length &gt; 0) {</span>
3283
+ <span class="cstat-no" title="statement not covered" > allConditions.push(...cursorConditions);</span>
3284
+ const finalCondition = <span class="cstat-no" title="statement not covered" >DrizzleConditionBuilder.combineConditionsWithAnd(allConditions);</span>
3285
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (finalCondition) <span class="cstat-no" title="statement not covered" >query = query.where(finalCondition);</span></span>
3286
+ }
3287
+ }
3288
+ &nbsp;
3289
+ const limitValue = <span class="cstat-no" title="statement not covered" >options.searchString ? (options.limit || 50) : options.limit;</span>
3290
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (limitValue) <span class="cstat-no" title="statement not covered" >query = query.limit(limitValue);</span></span>
3291
+ &nbsp;
3292
+ const results = <span class="cstat-no" title="statement not covered" >await query;</span>
3293
+ &nbsp;
3294
+ <span class="cstat-no" title="statement not covered" > return this.processEntityResults&lt;M&gt;(results, collection, collectionPath, idInfo, options.databaseId, false);</span>
3295
+ }
3296
+ &nbsp;
3297
+ /**
3298
+ * @deprecated Only used in the fallback path when db.query is unavailable.
3299
+ * The primary path uses drizzleResultToEntity which handles relation
3300
+ * mapping without N+1 queries.
3301
+ *
3302
+ * Process raw database results into Entity objects with relations.
3303
+ */
3304
+ private <span class="fstat-no" title="function not covered" >async </span>processEntityResults&lt;M extends Record&lt;string, any&gt;&gt;(
3305
+ results: Record&lt;string, unknown&gt;[],
3306
+ collection: EntityCollection,
3307
+ collectionPath: string,
3308
+ idInfo: { fieldName: string; type: "string" | "number" },
3309
+ databaseId?: string,
3310
+ skipRelations: boolean = <span class="branch-0 cbranch-no" title="branch not covered" >false</span>
3311
+ ): Promise&lt;Entity&lt;M&gt;[]&gt; {
3312
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (results.length === 0) <span class="cstat-no" title="statement not covered" >return [];</span></span>
3313
+ &nbsp;
3314
+ // First pass: parse all entities
3315
+ const entitiesWithValues = <span class="cstat-no" title="statement not covered" >await Promise.all(results.map(<span class="fstat-no" title="function not covered" >async </span>(entity: Record&lt;string, unknown&gt;) =&gt; {</span>
3316
+ const values = <span class="cstat-no" title="statement not covered" >await parseDataFromServer(entity as M, collection, this.db, this.registry);</span>
3317
+ <span class="cstat-no" title="statement not covered" > return {</span>
3318
+ entity,
3319
+ values,
3320
+ id: String(entity[idInfo.fieldName]),
3321
+ path: collectionPath
3322
+ };
3323
+ }));
3324
+ &nbsp;
3325
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!skipRelations) {</span>
3326
+ // Second pass: batch load missing one-to-one relations
3327
+ const resolvedRelations = <span class="cstat-no" title="statement not covered" >resolveCollectionRelations(collection);</span>
3328
+ const propertyKeys = <span class="cstat-no" title="statement not covered" >new Set(Object.keys(collection.properties));</span>
3329
+ &nbsp;
3330
+ <span class="cstat-no" title="statement not covered" > for (const [key, relation] of Object.entries(resolvedRelations)) {</span>
3331
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!propertyKeys.has(key) || relation.cardinality !== "one") <span class="cstat-no" title="statement not covered" >continue;</span></span>
3332
+ &nbsp;
3333
+ const entitiesMissingRelation = <span class="cstat-no" title="statement not covered" >entitiesWithValues.filter(<span class="fstat-no" title="function not covered" >item </span>=&gt;</span>
3334
+ (<span class="cstat-no" title="statement not covered" >item.values as Record&lt;string, unknown&gt;)[key] == null</span>
3335
+ );
3336
+ &nbsp;
3337
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (entitiesMissingRelation.length === 0) <span class="cstat-no" title="statement not covered" >continue;</span></span>
3338
+ &nbsp;
3339
+ <span class="cstat-no" title="statement not covered" > try {</span>
3340
+ const entityIds = <span class="cstat-no" title="statement not covered" >entitiesMissingRelation.map(<span class="fstat-no" title="function not covered" >item </span>=&gt; <span class="cstat-no" title="statement not covered" >item.entity[idInfo.fieldName] as string | number)</span>;</span>
3341
+ const relationResults = <span class="cstat-no" title="statement not covered" >await this.relationService.batchFetchRelatedEntities(</span>
3342
+ collectionPath,
3343
+ entityIds,
3344
+ key,
3345
+ relation
3346
+ );
3347
+ &nbsp;
3348
+ <span class="cstat-no" title="statement not covered" > entitiesMissingRelation.forEach(<span class="fstat-no" title="function not covered" >item </span>=&gt; {</span>
3349
+ const entityId = <span class="cstat-no" title="statement not covered" >item.entity[idInfo.fieldName] as string | number;</span>
3350
+ const relatedEntity = <span class="cstat-no" title="statement not covered" >relationResults.get(entityId);</span>
3351
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (relatedEntity) {</span>
3352
+ (<span class="cstat-no" title="statement not covered" >item.values as Record&lt;string, unknown&gt;)[key] = {</span>
3353
+ id: relatedEntity.id,
3354
+ path: relatedEntity.path,
3355
+ __type: "relation"
3356
+ };
3357
+ }
3358
+ });
3359
+ } catch (e) {
3360
+ <span class="cstat-no" title="statement not covered" > console.warn(`Could not batch load one-to-one relation property: ${key}`, e);</span>
3361
+ }
3362
+ }
3363
+ &nbsp;
3364
+ // Handle many relations
3365
+ const manyRelationPromises = <span class="cstat-no" title="statement not covered" >entitiesWithValues.map(<span class="fstat-no" title="function not covered" >async </span>(item) =&gt; {</span>
3366
+ const manyRelationQueries = <span class="cstat-no" title="statement not covered" >Object.entries(resolvedRelations)</span>
3367
+ .filter(<span class="fstat-no" title="function not covered" >([</span>key, relation]) =&gt; <span class="cstat-no" title="statement not covered" >propertyKeys.has(key) &amp;&amp; relation.cardinality === "many")</span>
3368
+ .map(<span class="fstat-no" title="function not covered" >async </span>([key]) =&gt; {
3369
+ <span class="cstat-no" title="statement not covered" > try {</span>
3370
+ const relatedEntities = <span class="cstat-no" title="statement not covered" >await this.relationService.fetchRelatedEntities(</span>
3371
+ collectionPath,
3372
+ item.entity[idInfo.fieldName] as string | number,
3373
+ key,
3374
+ {}
3375
+ );
3376
+ (<span class="cstat-no" title="statement not covered" >item.values as Record&lt;string, unknown&gt;)[key] = relatedEntities.map(<span class="fstat-no" title="function not covered" >e </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3377
+ id: e.id,
3378
+ path: e.path,
3379
+ __type: "relation"
3380
+ }));
3381
+ } catch (e) {
3382
+ <span class="cstat-no" title="statement not covered" > console.warn(`Could not resolve many relation property: ${key}`, e);</span>
3383
+ }
3384
+ });
3385
+ <span class="cstat-no" title="statement not covered" > await Promise.all(manyRelationQueries);</span>
3386
+ });
3387
+ &nbsp;
3388
+ <span class="cstat-no" title="statement not covered" > await Promise.all(manyRelationPromises);</span>
3389
+ }
3390
+ &nbsp;
3391
+ <span class="cstat-no" title="statement not covered" > return entitiesWithValues.map(<span class="fstat-no" title="function not covered" >item </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3392
+ id: item.id,
3393
+ path: item.path,
3394
+ values: item.values as M,
3395
+ databaseId
3396
+ }));
3397
+ }
3398
+ &nbsp;
3399
+ /**
3400
+ * Fetch a collection of entities
3401
+ */
3402
+ async fetchCollection&lt;M extends Record&lt;string, any&gt;&gt;(
3403
+ collectionPath: string,
3404
+ options: {
3405
+ filter?: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;;
3406
+ orderBy?: string;
3407
+ order?: "desc" | "asc";
3408
+ limit?: number;
3409
+ startAfter?: Record&lt;string, unknown&gt;;
3410
+ searchString?: string;
3411
+ databaseId?: string;
3412
+ } = <span class="branch-0 cbranch-no" title="branch not covered" >{}</span>
3413
+ ): Promise&lt;Entity&lt;M&gt;[]&gt; {
3414
+ // Handle multi-segment paths by resolving through relations
3415
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (collectionPath.includes("/")) {
3416
+ <span class="cstat-no" title="statement not covered" > return this.fetchCollectionFromPath&lt;M&gt;(collectionPath, options);</span>
3417
+ }
3418
+ &nbsp;
3419
+ return this.fetchEntitiesWithConditions&lt;M&gt;(collectionPath, options);
3420
+ }
3421
+ &nbsp;
3422
+ /**
3423
+ * Search entities by text
3424
+ */
3425
+ <span class="fstat-no" title="function not covered" > async </span>searchEntities&lt;M extends Record&lt;string, any&gt;&gt;(
3426
+ collectionPath: string,
3427
+ searchString: string,
3428
+ options: {
3429
+ filter?: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;;
3430
+ orderBy?: string;
3431
+ order?: "desc" | "asc";
3432
+ limit?: number;
3433
+ databaseId?: string;
3434
+ } = <span class="branch-0 cbranch-no" title="branch not covered" >{}</span>
3435
+ ): Promise&lt;Entity&lt;M&gt;[]&gt; {
3436
+ <span class="cstat-no" title="statement not covered" > return this.fetchEntitiesWithConditions&lt;M&gt;(collectionPath, {</span>
3437
+ ...options,
3438
+ searchString
3439
+ });
3440
+ }
3441
+ &nbsp;
3442
+ /**
3443
+ * Fetch collection from multi-segment path
3444
+ */
3445
+ private <span class="fstat-no" title="function not covered" >async </span>fetchCollectionFromPath&lt;M extends Record&lt;string, any&gt;&gt;(
3446
+ path: string,
3447
+ options: {
3448
+ filter?: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;;
3449
+ orderBy?: string;
3450
+ order?: "desc" | "asc";
3451
+ limit?: number;
3452
+ startAfter?: Record&lt;string, unknown&gt;;
3453
+ searchString?: string;
3454
+ databaseId?: string;
3455
+ } = <span class="branch-0 cbranch-no" title="branch not covered" >{}</span>
3456
+ ): Promise&lt;Entity&lt;M&gt;[]&gt; {
3457
+ const pathSegments = <span class="cstat-no" title="statement not covered" >path.split("/").filter(<span class="fstat-no" title="function not covered" >p </span>=&gt; <span class="cstat-no" title="statement not covered" >p)</span>;</span>
3458
+ &nbsp;
3459
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (pathSegments.length &lt; 3 || pathSegments.length % 2 === 0) {</span>
3460
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Invalid relation path: ${path}. Expected format: collection/id/relation`);</span>
3461
+ }
3462
+ &nbsp;
3463
+ const rootCollectionPath = <span class="cstat-no" title="statement not covered" >pathSegments[0];</span>
3464
+ let currentCollection = <span class="cstat-no" title="statement not covered" >getCollectionByPath(rootCollectionPath, this.registry);</span>
3465
+ let currentEntityId: string | number = <span class="cstat-no" title="statement not covered" >pathSegments[1];</span>
3466
+ &nbsp;
3467
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >2;</span> i &lt; pathSegments.length; i += 2) {</span>
3468
+ const relationKey = <span class="cstat-no" title="statement not covered" >pathSegments[i];</span>
3469
+ const resolvedRelations = <span class="cstat-no" title="statement not covered" >resolveCollectionRelations(currentCollection);</span>
3470
+ const relation = <span class="cstat-no" title="statement not covered" >resolvedRelations[relationKey];</span>
3471
+ &nbsp;
3472
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!relation) {</span>
3473
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Relation '${relationKey}' not found in collection '${currentCollection.slug || currentCollection.dbPath}'`);</span>
3474
+ }
3475
+ &nbsp;
3476
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (i === pathSegments.length - 1) {</span>
3477
+ <span class="cstat-no" title="statement not covered" > return this.relationService.fetchRelatedEntities&lt;M&gt;(</span>
3478
+ currentCollection.slug ?? currentCollection.dbPath,
3479
+ currentEntityId,
3480
+ relationKey,
3481
+ options
3482
+ );
3483
+ }
3484
+ &nbsp;
3485
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (i + 1 &lt; pathSegments.length) {</span>
3486
+ const nextEntityId = <span class="cstat-no" title="statement not covered" >pathSegments[i + 1];</span>
3487
+ <span class="cstat-no" title="statement not covered" > currentCollection = relation.target();</span>
3488
+ <span class="cstat-no" title="statement not covered" > currentEntityId = nextEntityId;</span>
3489
+ }
3490
+ }
3491
+ &nbsp;
3492
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Unable to resolve path: ${path}`);</span>
3493
+ }
3494
+ &nbsp;
3495
+ /**
3496
+ * Count entities in a collection
3497
+ */
3498
+ <span class="fstat-no" title="function not covered" > async </span>countEntities&lt;M extends Record&lt;string, any&gt;&gt;(
3499
+ collectionPath: string,
3500
+ options: {
3501
+ filter?: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;;
3502
+ databaseId?: string;
3503
+ } = <span class="branch-0 cbranch-no" title="branch not covered" >{}</span>
3504
+ ): Promise&lt;number&gt; {
3505
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (collectionPath.includes("/")) {</span>
3506
+ <span class="cstat-no" title="statement not covered" > return this.countEntitiesFromPath&lt;M&gt;(collectionPath, options);</span>
3507
+ }
3508
+ &nbsp;
3509
+ const collection = <span class="cstat-no" title="statement not covered" >getCollectionByPath(collectionPath, this.registry);</span>
3510
+ const table = <span class="cstat-no" title="statement not covered" >getTableForCollection(collection, this.registry);</span>
3511
+ &nbsp;
3512
+ let query = <span class="cstat-no" title="statement not covered" >this.db.select({ count: count() }).from(table).$dynamic();</span>
3513
+ &nbsp;
3514
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.filter) {</span>
3515
+ const filterConditions = <span class="cstat-no" title="statement not covered" >this.buildFilterConditions(options.filter, table, collectionPath);</span>
3516
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (filterConditions.length &gt; 0) {</span>
3517
+ <span class="cstat-no" title="statement not covered" > query = query.where(and(...filterConditions));</span>
3518
+ }
3519
+ }
3520
+ &nbsp;
3521
+ const result = <span class="cstat-no" title="statement not covered" >await query;</span>
3522
+ <span class="cstat-no" title="statement not covered" > return Number(result[0]?.count || 0);</span>
3523
+ }
3524
+ &nbsp;
3525
+ /**
3526
+ * Count entities from multi-segment path
3527
+ */
3528
+ private <span class="fstat-no" title="function not covered" >async </span>countEntitiesFromPath&lt;M extends Record&lt;string, any&gt;&gt;(
3529
+ path: string,
3530
+ options: { filter?: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;; databaseId?: string } = <span class="branch-0 cbranch-no" title="branch not covered" >{}</span>
3531
+ ): Promise&lt;number&gt; {
3532
+ const pathSegments = <span class="cstat-no" title="statement not covered" >path.split("/").filter(<span class="fstat-no" title="function not covered" >p </span>=&gt; <span class="cstat-no" title="statement not covered" >p)</span>;</span>
3533
+ &nbsp;
3534
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (pathSegments.length &lt; 3 || pathSegments.length % 2 === 0) {</span>
3535
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Invalid relation path: ${path}`);</span>
3536
+ }
3537
+ &nbsp;
3538
+ const rootCollectionPath = <span class="cstat-no" title="statement not covered" >pathSegments[0];</span>
3539
+ let currentCollection = <span class="cstat-no" title="statement not covered" >getCollectionByPath(rootCollectionPath, this.registry);</span>
3540
+ let currentEntityId: string | number = <span class="cstat-no" title="statement not covered" >pathSegments[1];</span>
3541
+ &nbsp;
3542
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >2;</span> i &lt; pathSegments.length; i += 2) {</span>
3543
+ const relationKey = <span class="cstat-no" title="statement not covered" >pathSegments[i];</span>
3544
+ const resolvedRelations = <span class="cstat-no" title="statement not covered" >resolveCollectionRelations(currentCollection);</span>
3545
+ const relation = <span class="cstat-no" title="statement not covered" >resolvedRelations[relationKey];</span>
3546
+ &nbsp;
3547
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!relation) {</span>
3548
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Relation '${relationKey}' not found`);</span>
3549
+ }
3550
+ &nbsp;
3551
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (i === pathSegments.length - 1) {</span>
3552
+ <span class="cstat-no" title="statement not covered" > return this.relationService.countRelatedEntities(</span>
3553
+ currentCollection.slug ?? currentCollection.dbPath,
3554
+ currentEntityId,
3555
+ relationKey,
3556
+ options
3557
+ );
3558
+ }
3559
+ &nbsp;
3560
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (i + 1 &lt; pathSegments.length) {</span>
3561
+ <span class="cstat-no" title="statement not covered" > currentCollection = relation.target();</span>
3562
+ <span class="cstat-no" title="statement not covered" > currentEntityId = pathSegments[i + 1];</span>
3563
+ }
3564
+ }
3565
+ &nbsp;
3566
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Unable to count for path: ${path}`);</span>
3567
+ }
3568
+ &nbsp;
3569
+ /**
3570
+ * Check if a field value is unique
3571
+ */
3572
+ <span class="fstat-no" title="function not covered" > async </span>checkUniqueField(
3573
+ collectionPath: string,
3574
+ fieldName: string,
3575
+ value: unknown,
3576
+ excludeEntityId?: string,
3577
+ _databaseId?: string
3578
+ ): Promise&lt;boolean&gt; {
3579
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (value === undefined || value === null) <span class="cstat-no" title="statement not covered" >return true;</span></span>
3580
+ &nbsp;
3581
+ const collection = <span class="cstat-no" title="statement not covered" >getCollectionByPath(collectionPath, this.registry);</span>
3582
+ const table = <span class="cstat-no" title="statement not covered" >getTableForCollection(collection, this.registry);</span>
3583
+ const idInfoArray = <span class="cstat-no" title="statement not covered" >getPrimaryKeys(collection, this.registry);</span>
3584
+ const idInfo = <span class="cstat-no" title="statement not covered" >idInfoArray[0];</span>
3585
+ const idField = <span class="cstat-no" title="statement not covered" >table[idInfo.fieldName as keyof typeof table] as AnyPgColumn;</span>
3586
+ const field = <span class="cstat-no" title="statement not covered" >table[fieldName as keyof typeof table] as AnyPgColumn;</span>
3587
+ &nbsp;
3588
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!field) <span class="cstat-no" title="statement not covered" >return true;</span></span>
3589
+ &nbsp;
3590
+ const parsedExcludeId = <span class="cstat-no" title="statement not covered" >excludeEntityId ? parseIdValues(excludeEntityId, idInfoArray)[idInfo.fieldName] : undefined;</span>
3591
+ const conditions = <span class="cstat-no" title="statement not covered" >DrizzleConditionBuilder.buildUniqueFieldCondition(</span>
3592
+ field,
3593
+ value,
3594
+ idField,
3595
+ parsedExcludeId
3596
+ );
3597
+ &nbsp;
3598
+ const result = <span class="cstat-no" title="statement not covered" >await this.db</span>
3599
+ .select({ count: count() })
3600
+ .from(table)
3601
+ .where(and(...conditions));
3602
+ &nbsp;
3603
+ const countResult = <span class="cstat-no" title="statement not covered" >Number(result[0]?.count || 0);</span>
3604
+ <span class="cstat-no" title="statement not covered" > return countResult === 0;</span>
3605
+ }
3606
+ &nbsp;
3607
+ /**
3608
+ * Get the RelationService instance for external use
3609
+ */
3610
+ <span class="fstat-no" title="function not covered" > getRelationService(</span>): RelationService {
3611
+ <span class="cstat-no" title="statement not covered" > return this.relationService;</span>
3612
+ }
3613
+ &nbsp;
3614
+ // =============================================================
3615
+ // REST API INCLUDE-AWARE METHODS
3616
+ // =============================================================
3617
+ &nbsp;
3618
+ /**
3619
+ * Fetch a collection of entities with optional relation includes.
3620
+ * When `include` is provided, only the specified relations are populated
3621
+ * with full entity data (not just { id, path, __type }).
3622
+ * When `include` is absent, no relation queries are made (fast path).
3623
+ *
3624
+ * @param include - Array of relation keys to populate, or ["*"] for all
3625
+ */
3626
+ <span class="fstat-no" title="function not covered" > async </span>fetchCollectionForRest&lt;M extends Record&lt;string, any&gt;&gt;(
3627
+ collectionPath: string,
3628
+ options: {
3629
+ filter?: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;;
3630
+ orderBy?: string;
3631
+ order?: "desc" | "asc";
3632
+ limit?: number;
3633
+ startAfter?: Record&lt;string, unknown&gt;;
3634
+ searchString?: string;
3635
+ databaseId?: string;
3636
+ } = <span class="branch-0 cbranch-no" title="branch not covered" >{},</span>
3637
+ include?: string[]
3638
+ ): Promise&lt;Record&lt;string, unknown&gt;[]&gt; {
3639
+ const collection = <span class="cstat-no" title="statement not covered" >getCollectionByPath(collectionPath, this.registry);</span>
3640
+ const table = <span class="cstat-no" title="statement not covered" >getTableForCollection(collection, this.registry);</span>
3641
+ const idInfoArray = <span class="cstat-no" title="statement not covered" >getPrimaryKeys(collection, this.registry);</span>
3642
+ const idInfo = <span class="cstat-no" title="statement not covered" >idInfoArray[0];</span>
3643
+ const idField = <span class="cstat-no" title="statement not covered" >table[idInfo.fieldName as keyof typeof table] as AnyPgColumn;</span>
3644
+ &nbsp;
3645
+ // Primary path: use db.query.findMany
3646
+
3647
+ const tableName = <span class="cstat-no" title="statement not covered" >getTableName(table);</span>
3648
+ &nbsp;
3649
+ const qb = <span class="cstat-no" title="statement not covered" >this.getQueryBuilder(tableName);</span>
3650
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (qb) {</span>
3651
+ <span class="cstat-no" title="statement not covered" > try {</span>
3652
+ const withConfig = <span class="cstat-no" title="statement not covered" >(include &amp;&amp; include.length &gt; 0)</span>
3653
+ ? this.buildWithConfig(collection, include)
3654
+ : undefined;
3655
+ &nbsp;
3656
+ const queryOpts = <span class="cstat-no" title="statement not covered" >this.buildDrizzleQueryOptions&lt;M&gt;(</span>
3657
+ table, idField, idInfo, options, collectionPath, withConfig
3658
+ );
3659
+ &nbsp;
3660
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic query config
3661
+ const results = <span class="cstat-no" title="statement not covered" >await qb.findMany(queryOpts as any);</span>
3662
+ &nbsp;
3663
+ <span class="cstat-no" title="statement not covered" > return (results as Record&lt;string, unknown&gt;[]).map(<span class="fstat-no" title="function not covered" >row </span>=&gt;</span>
3664
+ <span class="cstat-no" title="statement not covered" > this.drizzleResultToRestRow(row, collection, idInfo)</span>
3665
+ );
3666
+ } catch (e) {
3667
+ <span class="cstat-no" title="statement not covered" > console.warn(`[fetchCollectionForRest] db.query.findMany failed for ${collectionPath}, falling back:`, e);</span>
3668
+ }
3669
+ }
3670
+ &nbsp;
3671
+ // Fallback: fetch base entities without relations
3672
+ const entities = <span class="cstat-no" title="statement not covered" >await this.fetchEntitiesWithConditionsRaw&lt;M&gt;(collectionPath, options);</span>
3673
+ &nbsp;
3674
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!include || include.length === 0) {</span>
3675
+ <span class="cstat-no" title="statement not covered" > return entities.map(<span class="fstat-no" title="function not covered" >entity </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3676
+ id: String(entity[idInfo.fieldName]),
3677
+ ...entity
3678
+ }));
3679
+ }
3680
+ &nbsp;
3681
+ // Fallback relation loading via batch
3682
+ const resolvedRelations = <span class="cstat-no" title="statement not covered" >resolveCollectionRelations(collection);</span>
3683
+ const propertyKeys = <span class="cstat-no" title="statement not covered" >new Set(Object.keys(collection.properties || {}));</span>
3684
+ const shouldInclude = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(k</span>ey: string) =&gt;</span>
3685
+ <span class="cstat-no" title="statement not covered" > include[0] === "*" || include.includes(key);</span>
3686
+ &nbsp;
3687
+ const entityIds = <span class="cstat-no" title="statement not covered" >entities.map(<span class="fstat-no" title="function not covered" >e </span>=&gt; <span class="cstat-no" title="statement not covered" >e[idInfo.fieldName] as string | number)</span>;</span>
3688
+ &nbsp;
3689
+ <span class="cstat-no" title="statement not covered" > for (const [key, relation] of Object.entries(resolvedRelations)) {</span>
3690
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!propertyKeys.has(key) || !shouldInclude(key) || relation.cardinality !== "one") <span class="cstat-no" title="statement not covered" >continue;</span></span>
3691
+ <span class="cstat-no" title="statement not covered" > try {</span>
3692
+ const batchResults = <span class="cstat-no" title="statement not covered" >await this.relationService.batchFetchRelatedEntities(</span>
3693
+ collectionPath, entityIds, key, relation
3694
+ );
3695
+ <span class="cstat-no" title="statement not covered" > for (const entity of entities) {</span>
3696
+ const eid = <span class="cstat-no" title="statement not covered" >entity[idInfo.fieldName] as string | number;</span>
3697
+ const related = <span class="cstat-no" title="statement not covered" >batchResults.get(eid);</span>
3698
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (related) {</span>
3699
+ (<span class="cstat-no" title="statement not covered" >entity as Record&lt;string, unknown&gt;)[key] = { id: related.id, ...related.values };</span>
3700
+ }
3701
+ }
3702
+ } catch (e) {
3703
+ <span class="cstat-no" title="statement not covered" > console.warn(`[include] Failed to batch load one-to-one '${key}':`, e);</span>
3704
+ }
3705
+ }
3706
+ &nbsp;
3707
+ <span class="cstat-no" title="statement not covered" > for (const [key, relation] of Object.entries(resolvedRelations)) {</span>
3708
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!propertyKeys.has(key) || !shouldInclude(key) || relation.cardinality !== "many") <span class="cstat-no" title="statement not covered" >continue;</span></span>
3709
+ <span class="cstat-no" title="statement not covered" > try {</span>
3710
+ const batchResults = <span class="cstat-no" title="statement not covered" >await this.batchFetchManyRelatedEntities(</span>
3711
+ collectionPath, entityIds, key
3712
+ );
3713
+ <span class="cstat-no" title="statement not covered" > for (const entity of entities) {</span>
3714
+ const eid = <span class="cstat-no" title="statement not covered" >entity[idInfo.fieldName] as string | number;</span>
3715
+ const relatedList = <span class="cstat-no" title="statement not covered" >batchResults.get(String(eid)) || [];</span>
3716
+ (<span class="cstat-no" title="statement not covered" >entity as Record&lt;string, unknown&gt;)[key] = relatedList.map(<span class="fstat-no" title="function not covered" >e </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3717
+ id: e.id, ...e.values
3718
+ }));
3719
+ }
3720
+ } catch (e) {
3721
+ <span class="cstat-no" title="statement not covered" > console.warn(`[include] Failed to batch load many '${key}':`, e);</span>
3722
+ }
3723
+ }
3724
+ &nbsp;
3725
+ <span class="cstat-no" title="statement not covered" > return entities.map(<span class="fstat-no" title="function not covered" >entity </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3726
+ id: String(entity[idInfo.fieldName]),
3727
+ ...entity
3728
+ }));
3729
+ }
3730
+ &nbsp;
3731
+ /**
3732
+ * Fetch a single entity with optional relation includes for REST API.
3733
+ */
3734
+ <span class="fstat-no" title="function not covered" > async </span>fetchEntityForRest&lt;M extends Record&lt;string, any&gt;&gt;(
3735
+ collectionPath: string,
3736
+ entityId: string | number,
3737
+ include?: string[],
3738
+ databaseId?: string
3739
+ ): Promise&lt;Record&lt;string, unknown&gt; | null&gt; {
3740
+ const collection = <span class="cstat-no" title="statement not covered" >getCollectionByPath(collectionPath, this.registry);</span>
3741
+ const table = <span class="cstat-no" title="statement not covered" >getTableForCollection(collection, this.registry);</span>
3742
+ const idInfoArray = <span class="cstat-no" title="statement not covered" >getPrimaryKeys(collection, this.registry);</span>
3743
+ const idInfo = <span class="cstat-no" title="statement not covered" >idInfoArray[0];</span>
3744
+ const idField = <span class="cstat-no" title="statement not covered" >table[idInfo.fieldName as keyof typeof table] as AnyPgColumn;</span>
3745
+ &nbsp;
3746
+ const parsedIdObj = <span class="cstat-no" title="statement not covered" >parseIdValues(entityId, idInfoArray);</span>
3747
+ const parsedId = <span class="cstat-no" title="statement not covered" >parsedIdObj[idInfo.fieldName];</span>
3748
+ &nbsp;
3749
+ // Primary path: use db.query.findFirst
3750
+
3751
+ const tableName = <span class="cstat-no" title="statement not covered" >getTableName(table);</span>
3752
+ &nbsp;
3753
+ const qb = <span class="cstat-no" title="statement not covered" >this.getQueryBuilder(tableName);</span>
3754
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (qb) {</span>
3755
+ <span class="cstat-no" title="statement not covered" > try {</span>
3756
+ const withConfig = <span class="cstat-no" title="statement not covered" >(include &amp;&amp; include.length &gt; 0)</span>
3757
+ ? this.buildWithConfig(collection, include)
3758
+ : undefined;
3759
+ &nbsp;
3760
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic query config
3761
+ const row = <span class="cstat-no" title="statement not covered" >await qb.findFirst({</span>
3762
+ where: eq(idField, parsedId),
3763
+ ...(withConfig ? { with: withConfig } : {})
3764
+ } as any);
3765
+ &nbsp;
3766
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!row) <span class="cstat-no" title="statement not covered" >return null;</span></span>
3767
+ &nbsp;
3768
+ <span class="cstat-no" title="statement not covered" > return this.drizzleResultToRestRow(row, collection, idInfo);</span>
3769
+ } catch (e) {
3770
+ <span class="cstat-no" title="statement not covered" > console.warn(`[fetchEntityForRest] db.query.findFirst failed for ${collectionPath}, falling back:`, e);</span>
3771
+ }
3772
+ }
3773
+ &nbsp;
3774
+ // Fallback: db.select + N+1 relation loading
3775
+ const result = <span class="cstat-no" title="statement not covered" >await this.db</span>
3776
+ .select()
3777
+ .from(table)
3778
+ .where(eq(idField, parsedId))
3779
+ .limit(1);
3780
+ &nbsp;
3781
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (result.length === 0) <span class="cstat-no" title="statement not covered" >return null;</span></span>
3782
+ &nbsp;
3783
+ const raw = <span class="cstat-no" title="statement not covered" >result[0] as Record&lt;string, unknown&gt;;</span>
3784
+ const flatEntity: Record&lt;string, unknown&gt; = <span class="cstat-no" title="statement not covered" >{ id: String(raw[idInfo.fieldName]), ...raw };</span>
3785
+ &nbsp;
3786
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!include || include.length === 0) {</span>
3787
+ <span class="cstat-no" title="statement not covered" > return flatEntity;</span>
3788
+ }
3789
+ &nbsp;
3790
+ // Fallback relation population
3791
+ const resolvedRelations = <span class="cstat-no" title="statement not covered" >resolveCollectionRelations(collection);</span>
3792
+ const propertyKeys = <span class="cstat-no" title="statement not covered" >new Set(Object.keys(collection.properties || {}));</span>
3793
+ const shouldInclude = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(k</span>ey: string) =&gt;</span>
3794
+ <span class="cstat-no" title="statement not covered" > include[0] === "*" || include.includes(key);</span>
3795
+ &nbsp;
3796
+ <span class="cstat-no" title="statement not covered" > for (const [key, relation] of Object.entries(resolvedRelations)) {</span>
3797
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!propertyKeys.has(key) || !shouldInclude(key)) <span class="cstat-no" title="statement not covered" >continue;</span></span>
3798
+ &nbsp;
3799
+ <span class="cstat-no" title="statement not covered" > try {</span>
3800
+ const relatedEntities = <span class="cstat-no" title="statement not covered" >await this.relationService.fetchRelatedEntities(</span>
3801
+ collectionPath, parsedId, key, {}
3802
+ );
3803
+ &nbsp;
3804
+ <span class="cstat-no" title="statement not covered" > if (relation.cardinality === "one") {</span>
3805
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (relatedEntities.length &gt; 0) {</span>
3806
+ const e = <span class="cstat-no" title="statement not covered" >relatedEntities[0];</span>
3807
+ <span class="cstat-no" title="statement not covered" > flatEntity[key] = { id: e.id, ...e.values };</span>
3808
+ }
3809
+ } else {
3810
+ <span class="cstat-no" title="statement not covered" > flatEntity[key] = relatedEntities.map(<span class="fstat-no" title="function not covered" >e </span>=&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
3811
+ id: e.id, ...e.values
3812
+ }));
3813
+ }
3814
+ } catch (e) {
3815
+ <span class="cstat-no" title="statement not covered" > console.warn(`[include] Failed to load relation '${key}':`, e);</span>
3816
+ }
3817
+ }
3818
+ &nbsp;
3819
+ <span class="cstat-no" title="statement not covered" > return flatEntity;</span>
3820
+ }
3821
+ &nbsp;
3822
+ /**
3823
+ * Fetch raw rows without any relation processing (for REST fast path)
3824
+ */
3825
+ private <span class="fstat-no" title="function not covered" >async </span>fetchEntitiesWithConditionsRaw&lt;M extends Record&lt;string, any&gt;&gt;(
3826
+ collectionPath: string,
3827
+ options: {
3828
+ filter?: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;;
3829
+ orderBy?: string;
3830
+ order?: "desc" | "asc";
3831
+ limit?: number;
3832
+ startAfter?: Record&lt;string, unknown&gt;;
3833
+ searchString?: string;
3834
+ } = <span class="branch-0 cbranch-no" title="branch not covered" >{}</span>
3835
+ ): Promise&lt;Record&lt;string, unknown&gt;[]&gt; {
3836
+ const collection = <span class="cstat-no" title="statement not covered" >getCollectionByPath(collectionPath, this.registry);</span>
3837
+ const table = <span class="cstat-no" title="statement not covered" >getTableForCollection(collection, this.registry);</span>
3838
+ const idInfoArray = <span class="cstat-no" title="statement not covered" >getPrimaryKeys(collection, this.registry);</span>
3839
+ const idInfo = <span class="cstat-no" title="statement not covered" >idInfoArray[0];</span>
3840
+ const idField = <span class="cstat-no" title="statement not covered" >table[idInfo.fieldName as keyof typeof table] as AnyPgColumn;</span>
3841
+ &nbsp;
3842
+ let query = <span class="cstat-no" title="statement not covered" >this.db.select().from(table).$dynamic();</span>
3843
+ const allConditions: SQL[] = <span class="cstat-no" title="statement not covered" >[];</span>
3844
+ &nbsp;
3845
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.searchString) {</span>
3846
+ const searchConditions = <span class="cstat-no" title="statement not covered" >DrizzleConditionBuilder.buildSearchConditions(</span>
3847
+ options.searchString, collection.properties, table
3848
+ );
3849
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (searchConditions.length === 0) <span class="cstat-no" title="statement not covered" >return [];</span></span>
3850
+ <span class="cstat-no" title="statement not covered" > allConditions.push(DrizzleConditionBuilder.combineConditionsWithOr(searchConditions)!);</span>
3851
+ }
3852
+ &nbsp;
3853
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.filter) {</span>
3854
+ const filterConditions = <span class="cstat-no" title="statement not covered" >this.buildFilterConditions(options.filter, table, collectionPath);</span>
3855
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (filterConditions.length &gt; 0) <span class="cstat-no" title="statement not covered" >allConditions.push(...filterConditions);</span></span>
3856
+ }
3857
+ &nbsp;
3858
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (allConditions.length &gt; 0) {</span>
3859
+ const finalCondition = <span class="cstat-no" title="statement not covered" >DrizzleConditionBuilder.combineConditionsWithAnd(allConditions);</span>
3860
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (finalCondition) <span class="cstat-no" title="statement not covered" >query = query.where(finalCondition);</span></span>
3861
+ }
3862
+ &nbsp;
3863
+ const orderExpressions = <span class="cstat-no" title="statement not covered" >[];</span>
3864
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.orderBy) {</span>
3865
+ const orderByField = <span class="cstat-no" title="statement not covered" >table[options.orderBy as keyof typeof table] as AnyPgColumn;</span>
3866
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (orderByField) {</span>
3867
+ <span class="cstat-no" title="statement not covered" > orderExpressions.push(options.order === "asc" ? asc(orderByField) : desc(orderByField));</span>
3868
+ }
3869
+ }
3870
+ <span class="cstat-no" title="statement not covered" > orderExpressions.push(desc(idField));</span>
3871
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (orderExpressions.length &gt; 0) <span class="cstat-no" title="statement not covered" >query = query.orderBy(...orderExpressions);</span></span>
3872
+ &nbsp;
3873
+ const limitValue = <span class="cstat-no" title="statement not covered" >options.searchString ? (options.limit || 50) : options.limit;</span>
3874
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (limitValue) <span class="cstat-no" title="statement not covered" >query = query.limit(limitValue);</span></span>
3875
+ &nbsp;
3876
+ <span class="cstat-no" title="statement not covered" > return await query as Record&lt;string, unknown&gt;[];</span>
3877
+ }
3878
+ &nbsp;
3879
+ /**
3880
+ * @deprecated Superseded by inline `this.db.query?.[tableName]` checks in fetchCollectionForRest/fetchEntityForRest.
3881
+ * Kept for backward compatibility only.
3882
+ *
3883
+ * Check if the Drizzle instance has the relational query API available
3884
+ * for a given collection path.
3885
+ */
3886
+ private <span class="fstat-no" title="function not covered" >hasDrizzleQueryAPI(</span>collectionPath: string): boolean {
3887
+
3888
+ const qb = <span class="cstat-no" title="statement not covered" >this.getQueryBuilder("__probe__");</span>
3889
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!qb) {</span>
3890
+ // If getQueryBuilder returns undefined even for a probe, query API is not available
3891
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3892
+ }
3893
+ const collection = <span class="cstat-no" title="statement not covered" >getCollectionByPath(collectionPath, this.registry);</span>
3894
+ const table = <span class="cstat-no" title="statement not covered" >getTableForCollection(collection, this.registry);</span>
3895
+ const tableName = <span class="cstat-no" title="statement not covered" >getTableName(table);</span>
3896
+ <span class="cstat-no" title="statement not covered" > return !!this.getQueryBuilder(tableName);</span>
3897
+ }
3898
+ &nbsp;
3899
+ /**
3900
+ * @deprecated Superseded by the new `buildWithConfig` + `buildDrizzleQueryOptions` approach
3901
+ * used directly in fetchCollectionForRest/fetchEntityForRest.
3902
+ * Kept for backward compatibility only.
3903
+ *
3904
+ * Attempt to use Drizzle's relational query API (db.query.&lt;table&gt;.findMany)
3905
+ * for efficient JOIN-based relation loading.
3906
+ * Returns null if the API is not available or the query fails.
3907
+ */
3908
+ private <span class="fstat-no" title="function not covered" >async </span>fetchWithDrizzleQuery&lt;M extends Record&lt;string, any&gt;&gt;(
3909
+ collectionPath: string,
3910
+ collection: EntityCollection,
3911
+ options: {
3912
+ filter?: FilterValues&lt;Extract&lt;keyof M, string&gt;&gt;;
3913
+ orderBy?: string;
3914
+ order?: "desc" | "asc";
3915
+ limit?: number;
3916
+ },
3917
+ include: string[],
3918
+ idInfo: { fieldName: string; type: "string" | "number" }
3919
+ ): Promise&lt;Record&lt;string, unknown&gt;[] | null&gt; {
3920
+ <span class="cstat-no" title="statement not covered" > try {</span>
3921
+
3922
+ const table = <span class="cstat-no" title="statement not covered" >getTableForCollection(collection, this.registry);</span>
3923
+ const tableName = <span class="cstat-no" title="statement not covered" >getTableName(table);</span>
3924
+ const queryTarget = <span class="cstat-no" title="statement not covered" >this.getQueryBuilder(tableName);</span>
3925
+ &nbsp;
3926
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!queryTarget?.findMany) <span class="cstat-no" title="statement not covered" >return null;</span></span>
3927
+ &nbsp;
3928
+ // Build the `with` config from include array
3929
+ const resolvedRelations = <span class="cstat-no" title="statement not covered" >resolveCollectionRelations(collection);</span>
3930
+ const withConfig: Record&lt;string, boolean&gt; = <span class="cstat-no" title="statement not covered" >{};</span>
3931
+ <span class="cstat-no" title="statement not covered" > for (const [key, relation] of Object.entries(resolvedRelations)) {</span>
3932
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (include[0] === "*" || include.includes(key)) {</span>
3933
+ // Use the Drizzle relation name (from the schema)
3934
+ const drizzleRelName = <span class="cstat-no" title="statement not covered" >relation.relationName || key;</span>
3935
+ <span class="cstat-no" title="statement not covered" > withConfig[drizzleRelName] = true;</span>
3936
+ }
3937
+ }
3938
+ &nbsp;
3939
+ // Build query options
3940
+ const queryOpts: Record&lt;string, unknown&gt; = <span class="cstat-no" title="statement not covered" >{ with: withConfig };</span>
3941
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.limit) <span class="cstat-no" title="statement not covered" >queryOpts.limit = options.limit;</span></span>
3942
+ &nbsp;
3943
+ // Build where clause
3944
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.filter) {</span>
3945
+ const filterConditions = <span class="cstat-no" title="statement not covered" >this.buildFilterConditions(</span>
3946
+ options.filter, table, collectionPath
3947
+ );
3948
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (filterConditions.length &gt; 0) {</span>
3949
+ <span class="cstat-no" title="statement not covered" > queryOpts.where = and(...filterConditions);</span>
3950
+ }
3951
+ }
3952
+ &nbsp;
3953
+ // Build orderBy
3954
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (options.orderBy) {</span>
3955
+ const orderByField = <span class="cstat-no" title="statement not covered" >table[options.orderBy as keyof typeof table] as AnyPgColumn;</span>
3956
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (orderByField) {</span>
3957
+ <span class="cstat-no" title="statement not covered" > queryOpts.orderBy = options.order === "asc" ? asc(orderByField) : desc(orderByField);</span>
3958
+ }
3959
+ }
3960
+ &nbsp;
3961
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- deprecated method, will be removed
3962
+ const results = <span class="cstat-no" title="statement not covered" >await queryTarget.findMany(queryOpts as any);</span>
3963
+ &nbsp;
3964
+ // Flatten the nested Drizzle results into REST format
3965
+ <span class="cstat-no" title="statement not covered" > return results.map(<span class="fstat-no" title="function not covered" >(r</span>ow: Record&lt;string, unknown&gt;) =&gt; {</span>
3966
+ const flat: Record&lt;string, unknown&gt; = <span class="cstat-no" title="statement not covered" >{ id: String(row[idInfo.fieldName]) };</span>
3967
+ <span class="cstat-no" title="statement not covered" > for (const [k, v] of Object.entries(row)) {</span>
3968
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (k === idInfo.fieldName) <span class="cstat-no" title="statement not covered" >continue;</span></span>
3969
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(v)) {</span>
3970
+ // Many relation — flatten each nested entity
3971
+ <span class="cstat-no" title="statement not covered" > flat[k] = v.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Record&lt;string, unknown&gt;) =&gt; {</span>
3972
+ // Junction table rows may have the target nested, flatten those
3973
+ const keys = <span class="cstat-no" title="statement not covered" >Object.keys(item);</span>
3974
+ // If it looks like a junction row (only FKs + nested objects), extract nested
3975
+ const nestedObj = <span class="cstat-no" title="statement not covered" >keys.find(<span class="fstat-no" title="function not covered" >nk </span>=&gt; <span class="cstat-no" title="statement not covered" >typeof item[nk] === "object" &amp;&amp; item[nk] !== null &amp;&amp; !Array.isArray(item[nk]))</span>;</span>
3976
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (nestedObj &amp;&amp; keys.length &lt;= 3) {</span>
3977
+ const nested = <span class="cstat-no" title="statement not covered" >item[nestedObj] as Record&lt;string, unknown&gt;;</span>
3978
+ <span class="cstat-no" title="statement not covered" > return { id: String(nested.id ?? nested[Object.keys(nested)[0]]), ...nested };</span>
3979
+ }
3980
+ <span class="cstat-no" title="statement not covered" > return { id: String(item.id ?? item[Object.keys(item)[0]]), ...item };</span>
3981
+ });
3982
+ } else <span class="cstat-no" title="statement not covered" >if (typeof v === "object" &amp;&amp; v !== null) {</span>
3983
+ // One-to-one relation — inline the object
3984
+ const relObj = <span class="cstat-no" title="statement not covered" >v as Record&lt;string, unknown&gt;;</span>
3985
+ <span class="cstat-no" title="statement not covered" > flat[k] = { id: String(relObj.id ?? relObj[Object.keys(relObj)[0]]), ...relObj };</span>
3986
+ } else {
3987
+ <span class="cstat-no" title="statement not covered" > flat[k] = v;</span>
3988
+ }
3989
+ }
3990
+ <span class="cstat-no" title="statement not covered" > return flat;</span>
3991
+ });
3992
+ } catch (e) {
3993
+ <span class="cstat-no" title="statement not covered" > console.warn(`[include] Drizzle relational query failed for '${collectionPath}', falling back:`, e);</span>
3994
+ <span class="cstat-no" title="statement not covered" > return null;</span>
3995
+ }
3996
+ }
3997
+ &nbsp;
3998
+ /**
3999
+ * @deprecated Only used in the fallback path when db.query is unavailable.
4000
+ * The primary path uses db.query.findMany with `with` config, which
4001
+ * loads all relations in a single query.
4002
+ *
4003
+ * Batch fetch many-to-many related entities for multiple parent IDs.
4004
+ * Groups results by parent ID to avoid N+1.
4005
+ */
4006
+ private <span class="fstat-no" title="function not covered" >async </span>batchFetchManyRelatedEntities(
4007
+ parentCollectionPath: string,
4008
+ parentIds: (string | number)[],
4009
+ relationKey: string
4010
+ ): Promise&lt;Map&lt;string, Entity[]&gt;&gt; {
4011
+ const resultMap = <span class="cstat-no" title="statement not covered" >new Map&lt;string, Entity[]&gt;();</span>
4012
+ &nbsp;
4013
+ // Fetch for all parents using Promise.all (limited batch)
4014
+ const batchPromises = <span class="cstat-no" title="statement not covered" >parentIds.map(<span class="fstat-no" title="function not covered" >async </span>(parentId) =&gt; {</span>
4015
+ <span class="cstat-no" title="statement not covered" > try {</span>
4016
+ const related = <span class="cstat-no" title="statement not covered" >await this.relationService.fetchRelatedEntities(</span>
4017
+ parentCollectionPath, parentId, relationKey, {}
4018
+ );
4019
+ <span class="cstat-no" title="statement not covered" > resultMap.set(String(parentId), related);</span>
4020
+ } catch (e) {
4021
+ <span class="cstat-no" title="statement not covered" > resultMap.set(String(parentId), []);</span>
4022
+ }
4023
+ });
4024
+ &nbsp;
4025
+ <span class="cstat-no" title="statement not covered" > await Promise.all(batchPromises);</span>
4026
+ <span class="cstat-no" title="statement not covered" > return resultMap;</span>
4027
+ }
4028
+ }
4029
+ &nbsp;</pre></td></tr></table></pre>
4030
+
4031
+ <div class='push'></div><!-- for sticky footer -->
4032
+ </div><!-- /wrapper -->
4033
+ <div class='footer quiet pad2 space-top1 center small'>
4034
+ Code coverage generated by
4035
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
4036
+ at 2026-04-06T04:35:23.770Z
4037
+ </div>
4038
+ <script src="../../../prettify.js"></script>
4039
+ <script>
4040
+ window.onload = function () {
4041
+ prettyPrint();
4042
+ };
4043
+ </script>
4044
+ <script src="../../../sorter.js"></script>
4045
+ <script src="../../../block-navigation.js"></script>
4046
+ </body>
4047
+ </html>
4048
+