apostrophe 2.220.9 → 2.221.0

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 (194) hide show
  1. package/.nyc_output/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +1 -0
  2. package/.nyc_output/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +1 -0
  3. package/.nyc_output/99acae99-becc-463d-ba35-9333f88d2694.json +1 -0
  4. package/.nyc_output/d071f9e0-3b11-44e6-9817-69f184dd064d.json +1 -0
  5. package/.nyc_output/ed000bec-7ff7-49bf-a109-d17bfe883433.json +1 -0
  6. package/.nyc_output/processinfo/02d8fb44-f6bc-4ab4-8f47-22c7a42b887d.json +1 -0
  7. package/.nyc_output/processinfo/14b3f5f0-7e4e-461b-a7d9-4b735f510bd7.json +1 -0
  8. package/.nyc_output/processinfo/99acae99-becc-463d-ba35-9333f88d2694.json +1 -0
  9. package/.nyc_output/processinfo/d071f9e0-3b11-44e6-9817-69f184dd064d.json +1 -0
  10. package/.nyc_output/processinfo/ed000bec-7ff7-49bf-a109-d17bfe883433.json +1 -0
  11. package/.nyc_output/processinfo/index.json +1 -0
  12. package/CHANGELOG.md +12 -0
  13. package/coverage/a3/defaults.js.html +253 -0
  14. package/coverage/a3/index.html +131 -0
  15. package/coverage/a3/index.js.html +2338 -0
  16. package/coverage/a3/lib/escape-host.js.html +109 -0
  17. package/coverage/a3/lib/index.html +176 -0
  18. package/coverage/a3/lib/mongodb-connect.js.html +250 -0
  19. package/coverage/a3/lib/moog-require.js.html +790 -0
  20. package/coverage/a3/lib/moog.js.html +1711 -0
  21. package/coverage/a3/lib/opentelemetry.js.html +517 -0
  22. package/coverage/a3/modules/@apostrophecms/admin-bar/index.html +116 -0
  23. package/coverage/a3/modules/@apostrophecms/admin-bar/index.js.html +931 -0
  24. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.html +116 -0
  25. package/coverage/a3/modules/@apostrophecms/any-doc-type/index.js.html +115 -0
  26. package/coverage/a3/modules/@apostrophecms/any-page-type/index.html +116 -0
  27. package/coverage/a3/modules/@apostrophecms/any-page-type/index.js.html +1105 -0
  28. package/coverage/a3/modules/@apostrophecms/archive-page/index.html +116 -0
  29. package/coverage/a3/modules/@apostrophecms/archive-page/index.js.html +97 -0
  30. package/coverage/a3/modules/@apostrophecms/area/index.html +116 -0
  31. package/coverage/a3/modules/@apostrophecms/area/index.js.html +2104 -0
  32. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/area.js.html +469 -0
  33. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/index.html +131 -0
  34. package/coverage/a3/modules/@apostrophecms/area/lib/custom-tags/widget.js.html +286 -0
  35. package/coverage/a3/modules/@apostrophecms/asset/index.html +116 -0
  36. package/coverage/a3/modules/@apostrophecms/asset/index.js.html +3982 -0
  37. package/coverage/a3/modules/@apostrophecms/asset/lib/globalIcons.js.html +346 -0
  38. package/coverage/a3/modules/@apostrophecms/asset/lib/index.html +116 -0
  39. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/index.html +131 -0
  40. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.scss.js.html +289 -0
  41. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/apos/webpack.vue.js.html +148 -0
  42. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/index.html +116 -0
  43. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/index.html +131 -0
  44. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.es5.js.html +184 -0
  45. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/src/webpack.scss.js.html +238 -0
  46. package/coverage/a3/modules/@apostrophecms/asset/lib/webpack/utils.js.html +958 -0
  47. package/coverage/a3/modules/@apostrophecms/attachment/index.html +116 -0
  48. package/coverage/a3/modules/@apostrophecms/attachment/index.js.html +3676 -0
  49. package/coverage/a3/modules/@apostrophecms/attachment/lib/index.html +116 -0
  50. package/coverage/a3/modules/@apostrophecms/attachment/lib/legacy-migrations.js.html +205 -0
  51. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/index.html +116 -0
  52. package/coverage/a3/modules/@apostrophecms/attachment/lib/tasks/rescale.js.html +328 -0
  53. package/coverage/a3/modules/@apostrophecms/busy/index.html +116 -0
  54. package/coverage/a3/modules/@apostrophecms/busy/index.js.html +145 -0
  55. package/coverage/a3/modules/@apostrophecms/cache/index.html +116 -0
  56. package/coverage/a3/modules/@apostrophecms/cache/index.js.html +424 -0
  57. package/coverage/a3/modules/@apostrophecms/db/index.html +116 -0
  58. package/coverage/a3/modules/@apostrophecms/db/index.js.html +640 -0
  59. package/coverage/a3/modules/@apostrophecms/doc/index.html +116 -0
  60. package/coverage/a3/modules/@apostrophecms/doc/index.js.html +3937 -0
  61. package/coverage/a3/modules/@apostrophecms/doc/lib/index.html +116 -0
  62. package/coverage/a3/modules/@apostrophecms/doc/lib/legacy-migrations.js.html +622 -0
  63. package/coverage/a3/modules/@apostrophecms/doc-type/index.html +116 -0
  64. package/coverage/a3/modules/@apostrophecms/doc-type/index.js.html +8638 -0
  65. package/coverage/a3/modules/@apostrophecms/doc-type/lib/autocomplete.js.html +319 -0
  66. package/coverage/a3/modules/@apostrophecms/doc-type/lib/index.html +116 -0
  67. package/coverage/a3/modules/@apostrophecms/email/index.html +116 -0
  68. package/coverage/a3/modules/@apostrophecms/email/index.js.html +301 -0
  69. package/coverage/a3/modules/@apostrophecms/error/index.html +116 -0
  70. package/coverage/a3/modules/@apostrophecms/error/index.js.html +202 -0
  71. package/coverage/a3/modules/@apostrophecms/express/index.html +116 -0
  72. package/coverage/a3/modules/@apostrophecms/express/index.js.html +2116 -0
  73. package/coverage/a3/modules/@apostrophecms/file/index.html +116 -0
  74. package/coverage/a3/modules/@apostrophecms/file/index.js.html +367 -0
  75. package/coverage/a3/modules/@apostrophecms/file-tag/index.html +116 -0
  76. package/coverage/a3/modules/@apostrophecms/file-tag/index.js.html +127 -0
  77. package/coverage/a3/modules/@apostrophecms/global/index.html +116 -0
  78. package/coverage/a3/modules/@apostrophecms/global/index.js.html +535 -0
  79. package/coverage/a3/modules/@apostrophecms/home-page/index.html +116 -0
  80. package/coverage/a3/modules/@apostrophecms/home-page/index.js.html +94 -0
  81. package/coverage/a3/modules/@apostrophecms/html-widget/index.html +116 -0
  82. package/coverage/a3/modules/@apostrophecms/html-widget/index.js.html +271 -0
  83. package/coverage/a3/modules/@apostrophecms/http/index.html +116 -0
  84. package/coverage/a3/modules/@apostrophecms/http/index.js.html +976 -0
  85. package/coverage/a3/modules/@apostrophecms/i18n/index.html +116 -0
  86. package/coverage/a3/modules/@apostrophecms/i18n/index.js.html +2083 -0
  87. package/coverage/a3/modules/@apostrophecms/image/index.html +116 -0
  88. package/coverage/a3/modules/@apostrophecms/image/index.js.html +1486 -0
  89. package/coverage/a3/modules/@apostrophecms/image-tag/index.html +116 -0
  90. package/coverage/a3/modules/@apostrophecms/image-tag/index.js.html +127 -0
  91. package/coverage/a3/modules/@apostrophecms/image-widget/index.html +116 -0
  92. package/coverage/a3/modules/@apostrophecms/image-widget/index.js.html +145 -0
  93. package/coverage/a3/modules/@apostrophecms/job/index.html +116 -0
  94. package/coverage/a3/modules/@apostrophecms/job/index.js.html +1321 -0
  95. package/coverage/a3/modules/@apostrophecms/launder/index.html +116 -0
  96. package/coverage/a3/modules/@apostrophecms/launder/index.js.html +124 -0
  97. package/coverage/a3/modules/@apostrophecms/lock/index.html +116 -0
  98. package/coverage/a3/modules/@apostrophecms/lock/index.js.html +676 -0
  99. package/coverage/a3/modules/@apostrophecms/login/index.html +116 -0
  100. package/coverage/a3/modules/@apostrophecms/login/index.js.html +2617 -0
  101. package/coverage/a3/modules/@apostrophecms/migration/index.html +116 -0
  102. package/coverage/a3/modules/@apostrophecms/migration/index.js.html +970 -0
  103. package/coverage/a3/modules/@apostrophecms/modal/index.html +116 -0
  104. package/coverage/a3/modules/@apostrophecms/modal/index.js.html +193 -0
  105. package/coverage/a3/modules/@apostrophecms/module/index.html +116 -0
  106. package/coverage/a3/modules/@apostrophecms/module/index.js.html +2500 -0
  107. package/coverage/a3/modules/@apostrophecms/module/lib/events.js.html +547 -0
  108. package/coverage/a3/modules/@apostrophecms/module/lib/index.html +116 -0
  109. package/coverage/a3/modules/@apostrophecms/notification/index.html +116 -0
  110. package/coverage/a3/modules/@apostrophecms/notification/index.js.html +1315 -0
  111. package/coverage/a3/modules/@apostrophecms/oembed/index.html +116 -0
  112. package/coverage/a3/modules/@apostrophecms/oembed/index.js.html +781 -0
  113. package/coverage/a3/modules/@apostrophecms/oembed/lib/index.html +161 -0
  114. package/coverage/a3/modules/@apostrophecms/oembed/lib/infogram.js.html +178 -0
  115. package/coverage/a3/modules/@apostrophecms/oembed/lib/vimeo.js.html +124 -0
  116. package/coverage/a3/modules/@apostrophecms/oembed/lib/wufoo.js.html +256 -0
  117. package/coverage/a3/modules/@apostrophecms/oembed/lib/youtube.js.html +322 -0
  118. package/coverage/a3/modules/@apostrophecms/oembed-field/index.html +116 -0
  119. package/coverage/a3/modules/@apostrophecms/oembed-field/index.js.html +268 -0
  120. package/coverage/a3/modules/@apostrophecms/page/index.html +116 -0
  121. package/coverage/a3/modules/@apostrophecms/page/index.js.html +6955 -0
  122. package/coverage/a3/modules/@apostrophecms/page/lib/index.html +116 -0
  123. package/coverage/a3/modules/@apostrophecms/page/lib/legacy-migrations.js.html +568 -0
  124. package/coverage/a3/modules/@apostrophecms/page-type/index.html +116 -0
  125. package/coverage/a3/modules/@apostrophecms/page-type/index.js.html +1501 -0
  126. package/coverage/a3/modules/@apostrophecms/pager/index.html +116 -0
  127. package/coverage/a3/modules/@apostrophecms/pager/index.js.html +232 -0
  128. package/coverage/a3/modules/@apostrophecms/permission/index.html +116 -0
  129. package/coverage/a3/modules/@apostrophecms/permission/index.js.html +1057 -0
  130. package/coverage/a3/modules/@apostrophecms/permission/lib/index.html +116 -0
  131. package/coverage/a3/modules/@apostrophecms/permission/lib/legacy-migrations.js.html +160 -0
  132. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.html +116 -0
  133. package/coverage/a3/modules/@apostrophecms/piece-page-type/index.js.html +1051 -0
  134. package/coverage/a3/modules/@apostrophecms/piece-type/index.html +116 -0
  135. package/coverage/a3/modules/@apostrophecms/piece-type/index.js.html +3103 -0
  136. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.html +116 -0
  137. package/coverage/a3/modules/@apostrophecms/polymorphic-type/index.js.html +157 -0
  138. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.html +116 -0
  139. package/coverage/a3/modules/@apostrophecms/rich-text-widget/index.js.html +1363 -0
  140. package/coverage/a3/modules/@apostrophecms/schema/index.html +116 -0
  141. package/coverage/a3/modules/@apostrophecms/schema/index.js.html +4603 -0
  142. package/coverage/a3/modules/@apostrophecms/schema/lib/addFieldTypes.js.html +3502 -0
  143. package/coverage/a3/modules/@apostrophecms/schema/lib/index.html +131 -0
  144. package/coverage/a3/modules/@apostrophecms/schema/lib/joinr.js.html +703 -0
  145. package/coverage/a3/modules/@apostrophecms/search/index.html +116 -0
  146. package/coverage/a3/modules/@apostrophecms/search/index.js.html +1222 -0
  147. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.html +116 -0
  148. package/coverage/a3/modules/@apostrophecms/soft-redirect/index.js.html +343 -0
  149. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.html +116 -0
  150. package/coverage/a3/modules/@apostrophecms/submitted-draft/index.js.html +595 -0
  151. package/coverage/a3/modules/@apostrophecms/task/index.html +116 -0
  152. package/coverage/a3/modules/@apostrophecms/task/index.js.html +1147 -0
  153. package/coverage/a3/modules/@apostrophecms/template/index.html +116 -0
  154. package/coverage/a3/modules/@apostrophecms/template/index.js.html +2731 -0
  155. package/coverage/a3/modules/@apostrophecms/template/lib/bundlesLoader.js.html +559 -0
  156. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/component.js.html +310 -0
  157. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/fragment.js.html +325 -0
  158. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/index.html +146 -0
  159. package/coverage/a3/modules/@apostrophecms/template/lib/custom-tags/render.js.html +490 -0
  160. package/coverage/a3/modules/@apostrophecms/template/lib/index.html +131 -0
  161. package/coverage/a3/modules/@apostrophecms/template/lib/nunjucksLoader.js.html +658 -0
  162. package/coverage/a3/modules/@apostrophecms/ui/index.html +116 -0
  163. package/coverage/a3/modules/@apostrophecms/ui/index.js.html +181 -0
  164. package/coverage/a3/modules/@apostrophecms/uploadfs/index.html +116 -0
  165. package/coverage/a3/modules/@apostrophecms/uploadfs/index.js.html +286 -0
  166. package/coverage/a3/modules/@apostrophecms/url/index.html +116 -0
  167. package/coverage/a3/modules/@apostrophecms/url/index.js.html +733 -0
  168. package/coverage/a3/modules/@apostrophecms/user/index.html +116 -0
  169. package/coverage/a3/modules/@apostrophecms/user/index.js.html +1684 -0
  170. package/coverage/a3/modules/@apostrophecms/user/lib/index.html +116 -0
  171. package/coverage/a3/modules/@apostrophecms/user/lib/legacy-migrations.js.html +157 -0
  172. package/coverage/a3/modules/@apostrophecms/util/index.html +116 -0
  173. package/coverage/a3/modules/@apostrophecms/util/index.js.html +3424 -0
  174. package/coverage/a3/modules/@apostrophecms/util/lib/index.html +116 -0
  175. package/coverage/a3/modules/@apostrophecms/util/lib/logger.js.html +319 -0
  176. package/coverage/a3/modules/@apostrophecms/video-widget/index.html +116 -0
  177. package/coverage/a3/modules/@apostrophecms/video-widget/index.js.html +178 -0
  178. package/coverage/a3/modules/@apostrophecms/widget-type/index.html +116 -0
  179. package/coverage/a3/modules/@apostrophecms/widget-type/index.js.html +1225 -0
  180. package/coverage/a3/test-lib/index.html +131 -0
  181. package/coverage/a3/test-lib/test.js.html +232 -0
  182. package/coverage/a3/test-lib/util.js.html +373 -0
  183. package/coverage/base.css +224 -0
  184. package/coverage/block-navigation.js +87 -0
  185. package/coverage/favicon.png +0 -0
  186. package/coverage/index.html +1256 -0
  187. package/coverage/prettify.css +1 -0
  188. package/coverage/prettify.js +2 -0
  189. package/coverage/sort-arrow-sprite.png +0 -0
  190. package/coverage/sorter.js +196 -0
  191. package/lib/modules/apostrophe-assets/index.js +3 -1
  192. package/lib/modules/apostrophe-pages/lib/api.js +8 -6
  193. package/package.json +1 -1
  194. package/test/package.json +0 -75
@@ -0,0 +1,3502 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for a3/modules/@apostrophecms/schema/lib/addFieldTypes.js</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">a3/modules/@apostrophecms/schema/lib</a> addFieldTypes.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">53.29% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>283/531</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">45.82% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>214/467</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">49.48% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>48/97</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">53.21% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>281/528</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 oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line medium'></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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
1206
+ <span class="cline-any cline-yes">1x</span>
1207
+ <span class="cline-any cline-yes">1x</span>
1208
+ <span class="cline-any cline-yes">1x</span>
1209
+ <span class="cline-any cline-yes">1x</span>
1210
+ <span class="cline-any cline-yes">1x</span>
1211
+ <span class="cline-any cline-neutral">&nbsp;</span>
1212
+ <span class="cline-any cline-yes">1x</span>
1213
+ <span class="cline-any cline-neutral">&nbsp;</span>
1214
+ <span class="cline-any cline-yes">1x</span>
1215
+ <span class="cline-any cline-yes">90x</span>
1216
+ <span class="cline-any cline-neutral">&nbsp;</span>
1217
+ <span class="cline-any cline-neutral">&nbsp;</span>
1218
+ <span class="cline-any cline-yes">45x</span>
1219
+ <span class="cline-any cline-yes">45x</span>
1220
+ <span class="cline-any cline-yes">1x</span>
1221
+ <span class="cline-any cline-yes">1x</span>
1222
+ <span class="cline-any cline-neutral">&nbsp;</span>
1223
+ <span class="cline-any cline-yes">44x</span>
1224
+ <span class="cline-any cline-yes">2x</span>
1225
+ <span class="cline-any cline-neutral">&nbsp;</span>
1226
+ <span class="cline-any cline-neutral">&nbsp;</span>
1227
+ <span class="cline-any cline-neutral">&nbsp;</span>
1228
+ <span class="cline-any cline-neutral">&nbsp;</span>
1229
+ <span class="cline-any cline-yes">44x</span>
1230
+ <span class="cline-any cline-neutral">&nbsp;</span>
1231
+ <span class="cline-any cline-neutral">&nbsp;</span>
1232
+ <span class="cline-any cline-yes">44x</span>
1233
+ <span class="cline-any cline-yes">44x</span>
1234
+ <span class="cline-any cline-yes">35x</span>
1235
+ <span class="cline-any cline-no">&nbsp;</span>
1236
+ <span class="cline-any cline-neutral">&nbsp;</span>
1237
+ <span class="cline-any cline-neutral">&nbsp;</span>
1238
+ <span class="cline-any cline-neutral">&nbsp;</span>
1239
+ <span class="cline-any cline-yes">9x</span>
1240
+ <span class="cline-any cline-neutral">&nbsp;</span>
1241
+ <span class="cline-any cline-yes">44x</span>
1242
+ <span class="cline-any cline-yes">44x</span>
1243
+ <span class="cline-any cline-neutral">&nbsp;</span>
1244
+ <span class="cline-any cline-neutral">&nbsp;</span>
1245
+ <span class="cline-any cline-neutral">&nbsp;</span>
1246
+ <span class="cline-any cline-neutral">&nbsp;</span>
1247
+ <span class="cline-any cline-neutral">&nbsp;</span>
1248
+ <span class="cline-any cline-neutral">&nbsp;</span>
1249
+ <span class="cline-any cline-no">&nbsp;</span>
1250
+ <span class="cline-any cline-neutral">&nbsp;</span>
1251
+ <span class="cline-any cline-neutral">&nbsp;</span>
1252
+ <span class="cline-any cline-yes">22x</span>
1253
+ <span class="cline-any cline-yes">21x</span>
1254
+ <span class="cline-any cline-neutral">&nbsp;</span>
1255
+ <span class="cline-any cline-yes">1x</span>
1256
+ <span class="cline-any cline-neutral">&nbsp;</span>
1257
+ <span class="cline-any cline-neutral">&nbsp;</span>
1258
+ <span class="cline-any cline-yes">20x</span>
1259
+ <span class="cline-any cline-yes">19x</span>
1260
+ <span class="cline-any cline-yes">29x</span>
1261
+ <span class="cline-any cline-no">&nbsp;</span>
1262
+ <span class="cline-any cline-no">&nbsp;</span>
1263
+ <span class="cline-any cline-neutral">&nbsp;</span>
1264
+ <span class="cline-any cline-neutral">&nbsp;</span>
1265
+ <span class="cline-any cline-neutral">&nbsp;</span>
1266
+ <span class="cline-any cline-neutral">&nbsp;</span>
1267
+ <span class="cline-any cline-no">&nbsp;</span>
1268
+ <span class="cline-any cline-neutral">&nbsp;</span>
1269
+ <span class="cline-any cline-neutral">&nbsp;</span>
1270
+ <span class="cline-any cline-neutral">&nbsp;</span>
1271
+ <span class="cline-any cline-neutral">&nbsp;</span>
1272
+ <span class="cline-any cline-neutral">&nbsp;</span>
1273
+ <span class="cline-any cline-neutral">&nbsp;</span>
1274
+ <span class="cline-any cline-neutral">&nbsp;</span>
1275
+ <span class="cline-any cline-yes">90x</span>
1276
+ <span class="cline-any cline-neutral">&nbsp;</span>
1277
+ <span class="cline-any cline-neutral">&nbsp;</span>
1278
+ <span class="cline-any cline-yes">62x</span>
1279
+ <span class="cline-any cline-neutral">&nbsp;</span>
1280
+ <span class="cline-any cline-yes">62x</span>
1281
+ <span class="cline-any cline-neutral">&nbsp;</span>
1282
+ <span class="cline-any cline-neutral">&nbsp;</span>
1283
+ <span class="cline-any cline-neutral">&nbsp;</span>
1284
+ <span class="cline-any cline-yes">60x</span>
1285
+ <span class="cline-any cline-yes">1x</span>
1286
+ <span class="cline-any cline-neutral">&nbsp;</span>
1287
+ <span class="cline-any cline-neutral">&nbsp;</span>
1288
+ <span class="cline-any cline-neutral">&nbsp;</span>
1289
+ <span class="cline-any cline-no">&nbsp;</span>
1290
+ <span class="cline-any cline-no">&nbsp;</span>
1291
+ <span class="cline-any cline-neutral">&nbsp;</span>
1292
+ <span class="cline-any cline-neutral">&nbsp;</span>
1293
+ <span class="cline-any cline-neutral">&nbsp;</span>
1294
+ <span class="cline-any cline-neutral">&nbsp;</span>
1295
+ <span class="cline-any cline-neutral">&nbsp;</span>
1296
+ <span class="cline-any cline-neutral">&nbsp;</span>
1297
+ <span class="cline-any cline-no">&nbsp;</span>
1298
+ <span class="cline-any cline-neutral">&nbsp;</span>
1299
+ <span class="cline-any cline-neutral">&nbsp;</span>
1300
+ <span class="cline-any cline-yes">11348x</span>
1301
+ <span class="cline-any cline-neutral">&nbsp;</span>
1302
+ <span class="cline-any cline-yes">5297x</span>
1303
+ <span class="cline-any cline-no">&nbsp;</span>
1304
+ <span class="cline-any cline-no">&nbsp;</span>
1305
+ <span class="cline-any cline-no">&nbsp;</span>
1306
+ <span class="cline-any cline-neutral">&nbsp;</span>
1307
+ <span class="cline-any cline-neutral">&nbsp;</span>
1308
+ <span class="cline-any cline-neutral">&nbsp;</span>
1309
+ <span class="cline-any cline-no">&nbsp;</span>
1310
+ <span class="cline-any cline-neutral">&nbsp;</span>
1311
+ <span class="cline-any cline-neutral">&nbsp;</span>
1312
+ <span class="cline-any cline-yes">2x</span>
1313
+ <span class="cline-any cline-neutral">&nbsp;</span>
1314
+ <span class="cline-any cline-neutral">&nbsp;</span>
1315
+ <span class="cline-any cline-neutral">&nbsp;</span>
1316
+ <span class="cline-any cline-neutral">&nbsp;</span>
1317
+ <span class="cline-any cline-neutral">&nbsp;</span>
1318
+ <span class="cline-any cline-neutral">&nbsp;</span>
1319
+ <span class="cline-any cline-yes">90x</span>
1320
+ <span class="cline-any cline-neutral">&nbsp;</span>
1321
+ <span class="cline-any cline-neutral">&nbsp;</span>
1322
+ <span class="cline-any cline-neutral">&nbsp;</span>
1323
+ <span class="cline-any cline-neutral">&nbsp;</span>
1324
+ <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-neutral">&nbsp;</span>
1326
+ <span class="cline-any cline-yes">35x</span>
1327
+ <span class="cline-any cline-neutral">&nbsp;</span>
1328
+ <span class="cline-any cline-neutral">&nbsp;</span>
1329
+ <span class="cline-any cline-yes">35x</span>
1330
+ <span class="cline-any cline-yes">9x</span>
1331
+ <span class="cline-any cline-neutral">&nbsp;</span>
1332
+ <span class="cline-any cline-yes">35x</span>
1333
+ <span class="cline-any cline-neutral">&nbsp;</span>
1334
+ <span class="cline-any cline-yes">35x</span>
1335
+ <span class="cline-any cline-yes">9x</span>
1336
+ <span class="cline-any cline-no">&nbsp;</span>
1337
+ <span class="cline-any cline-neutral">&nbsp;</span>
1338
+ <span class="cline-any cline-neutral">&nbsp;</span>
1339
+ <span class="cline-any cline-yes">9x</span>
1340
+ <span class="cline-any cline-neutral">&nbsp;</span>
1341
+ <span class="cline-any cline-yes">9x</span>
1342
+ <span class="cline-any cline-yes">8x</span>
1343
+ <span class="cline-any cline-neutral">&nbsp;</span>
1344
+ <span class="cline-any cline-neutral">&nbsp;</span>
1345
+ <span class="cline-any cline-neutral">&nbsp;</span>
1346
+ <span class="cline-any cline-neutral">&nbsp;</span>
1347
+ <span class="cline-any cline-yes">8142x</span>
1348
+ <span class="cline-any cline-neutral">&nbsp;</span>
1349
+ <span class="cline-any cline-yes">3695x</span>
1350
+ <span class="cline-any cline-no">&nbsp;</span>
1351
+ <span class="cline-any cline-no">&nbsp;</span>
1352
+ <span class="cline-any cline-no">&nbsp;</span>
1353
+ <span class="cline-any cline-no">&nbsp;</span>
1354
+ <span class="cline-any cline-neutral">&nbsp;</span>
1355
+ <span class="cline-any cline-no">&nbsp;</span>
1356
+ <span class="cline-any cline-no">&nbsp;</span>
1357
+ <span class="cline-any cline-neutral">&nbsp;</span>
1358
+ <span class="cline-any cline-neutral">&nbsp;</span>
1359
+ <span class="cline-any cline-neutral">&nbsp;</span>
1360
+ <span class="cline-any cline-no">&nbsp;</span>
1361
+ <span class="cline-any cline-neutral">&nbsp;</span>
1362
+ <span class="cline-any cline-neutral">&nbsp;</span>
1363
+ <span class="cline-any cline-neutral">&nbsp;</span>
1364
+ <span class="cline-any cline-neutral">&nbsp;</span>
1365
+ <span class="cline-any cline-neutral">&nbsp;</span>
1366
+ <span class="cline-any cline-yes">90x</span>
1367
+ <span class="cline-any cline-neutral">&nbsp;</span>
1368
+ <span class="cline-any cline-neutral">&nbsp;</span>
1369
+ <span class="cline-any cline-yes">12x</span>
1370
+ <span class="cline-any cline-neutral">&nbsp;</span>
1371
+ <span class="cline-any cline-neutral">&nbsp;</span>
1372
+ <span class="cline-any cline-yes">4x</span>
1373
+ <span class="cline-any cline-neutral">&nbsp;</span>
1374
+ <span class="cline-any cline-neutral">&nbsp;</span>
1375
+ <span class="cline-any cline-neutral">&nbsp;</span>
1376
+ <span class="cline-any cline-no">&nbsp;</span>
1377
+ <span class="cline-any cline-neutral">&nbsp;</span>
1378
+ <span class="cline-any cline-neutral">&nbsp;</span>
1379
+ <span class="cline-any cline-neutral">&nbsp;</span>
1380
+ <span class="cline-any cline-neutral">&nbsp;</span>
1381
+ <span class="cline-any cline-yes">1482x</span>
1382
+ <span class="cline-any cline-neutral">&nbsp;</span>
1383
+ <span class="cline-any cline-yes">741x</span>
1384
+ <span class="cline-any cline-no">&nbsp;</span>
1385
+ <span class="cline-any cline-no">&nbsp;</span>
1386
+ <span class="cline-any cline-no">&nbsp;</span>
1387
+ <span class="cline-any cline-yes">741x</span>
1388
+ <span class="cline-any cline-no">&nbsp;</span>
1389
+ <span class="cline-any cline-no">&nbsp;</span>
1390
+ <span class="cline-any cline-no">&nbsp;</span>
1391
+ <span class="cline-any cline-neutral">&nbsp;</span>
1392
+ <span class="cline-any cline-neutral">&nbsp;</span>
1393
+ <span class="cline-any cline-neutral">&nbsp;</span>
1394
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1398
+ <span class="cline-any cline-no">&nbsp;</span>
1399
+ <span class="cline-any cline-no">&nbsp;</span>
1400
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
1406
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1412
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1416
+ <span class="cline-any cline-neutral">&nbsp;</span>
1417
+ <span class="cline-any cline-yes">90x</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-no">&nbsp;</span>
1421
+ <span class="cline-any cline-neutral">&nbsp;</span>
1422
+ <span class="cline-any cline-no">&nbsp;</span>
1423
+ <span class="cline-any cline-no">&nbsp;</span>
1424
+ <span class="cline-any cline-neutral">&nbsp;</span>
1425
+ <span class="cline-any cline-neutral">&nbsp;</span>
1426
+ <span class="cline-any cline-no">&nbsp;</span>
1427
+ <span class="cline-any cline-no">&nbsp;</span>
1428
+ <span class="cline-any cline-no">&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-no">&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-yes">90x</span>
1437
+ <span class="cline-any cline-neutral">&nbsp;</span>
1438
+ <span class="cline-any cline-neutral">&nbsp;</span>
1439
+ <span class="cline-any cline-no">&nbsp;</span>
1440
+ <span class="cline-any cline-no">&nbsp;</span>
1441
+ <span class="cline-any cline-neutral">&nbsp;</span>
1442
+ <span class="cline-any cline-no">&nbsp;</span>
1443
+ <span class="cline-any cline-no">&nbsp;</span>
1444
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1448
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1452
+ <span class="cline-any cline-no">&nbsp;</span>
1453
+ <span class="cline-any cline-neutral">&nbsp;</span>
1454
+ <span class="cline-any cline-no">&nbsp;</span>
1455
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1459
+ <span class="cline-any cline-neutral">&nbsp;</span>
1460
+ <span class="cline-any cline-neutral">&nbsp;</span>
1461
+ <span class="cline-any cline-no">&nbsp;</span>
1462
+ <span class="cline-any cline-no">&nbsp;</span>
1463
+ <span class="cline-any cline-neutral">&nbsp;</span>
1464
+ <span class="cline-any cline-neutral">&nbsp;</span>
1465
+ <span class="cline-any cline-neutral">&nbsp;</span>
1466
+ <span class="cline-any cline-neutral">&nbsp;</span>
1467
+ <span class="cline-any cline-neutral">&nbsp;</span>
1468
+ <span class="cline-any cline-neutral">&nbsp;</span>
1469
+ <span class="cline-any cline-no">&nbsp;</span>
1470
+ <span class="cline-any cline-neutral">&nbsp;</span>
1471
+ <span class="cline-any cline-no">&nbsp;</span>
1472
+ <span class="cline-any cline-no">&nbsp;</span>
1473
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1477
+ <span class="cline-any cline-neutral">&nbsp;</span>
1478
+ <span class="cline-any cline-no">&nbsp;</span>
1479
+ <span class="cline-any cline-no">&nbsp;</span>
1480
+ <span class="cline-any cline-neutral">&nbsp;</span>
1481
+ <span class="cline-any cline-neutral">&nbsp;</span>
1482
+ <span class="cline-any cline-neutral">&nbsp;</span>
1483
+ <span class="cline-any cline-neutral">&nbsp;</span>
1484
+ <span class="cline-any cline-no">&nbsp;</span>
1485
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1490
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1494
+ <span class="cline-any cline-no">&nbsp;</span>
1495
+ <span class="cline-any cline-no">&nbsp;</span>
1496
+ <span class="cline-any cline-no">&nbsp;</span>
1497
+ <span class="cline-any cline-neutral">&nbsp;</span>
1498
+ <span class="cline-any cline-neutral">&nbsp;</span>
1499
+ <span class="cline-any cline-neutral">&nbsp;</span>
1500
+ <span class="cline-any cline-neutral">&nbsp;</span>
1501
+ <span class="cline-any cline-no">&nbsp;</span>
1502
+ <span class="cline-any cline-no">&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-yes">90x</span>
1509
+ <span class="cline-any cline-neutral">&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-yes">63x</span>
1513
+ <span class="cline-any cline-no">&nbsp;</span>
1514
+ <span class="cline-any cline-neutral">&nbsp;</span>
1515
+ <span class="cline-any cline-yes">63x</span>
1516
+ <span class="cline-any cline-neutral">&nbsp;</span>
1517
+ <span class="cline-any cline-yes">63x</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-no">&nbsp;</span>
1521
+ <span class="cline-any cline-no">&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-yes">8366x</span>
1529
+ <span class="cline-any cline-neutral">&nbsp;</span>
1530
+ <span class="cline-any cline-yes">3807x</span>
1531
+ <span class="cline-any cline-yes">2x</span>
1532
+ <span class="cline-any cline-yes">2x</span>
1533
+ <span class="cline-any cline-neutral">&nbsp;</span>
1534
+ <span class="cline-any cline-yes">2x</span>
1535
+ <span class="cline-any cline-yes">1x</span>
1536
+ <span class="cline-any cline-neutral">&nbsp;</span>
1537
+ <span class="cline-any cline-yes">2x</span>
1538
+ <span class="cline-any cline-yes">2x</span>
1539
+ <span class="cline-any cline-neutral">&nbsp;</span>
1540
+ <span class="cline-any cline-neutral">&nbsp;</span>
1541
+ <span class="cline-any cline-neutral">&nbsp;</span>
1542
+ <span class="cline-any cline-neutral">&nbsp;</span>
1543
+ <span class="cline-any cline-no">&nbsp;</span>
1544
+ <span class="cline-any cline-no">&nbsp;</span>
1545
+ <span class="cline-any cline-no">&nbsp;</span>
1546
+ <span class="cline-any cline-neutral">&nbsp;</span>
1547
+ <span class="cline-any cline-neutral">&nbsp;</span>
1548
+ <span class="cline-any cline-no">&nbsp;</span>
1549
+ <span class="cline-any cline-neutral">&nbsp;</span>
1550
+ <span class="cline-any cline-neutral">&nbsp;</span>
1551
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1555
+ <span class="cline-any cline-neutral">&nbsp;</span>
1556
+ <span class="cline-any cline-neutral">&nbsp;</span>
1557
+ <span class="cline-any cline-neutral">&nbsp;</span>
1558
+ <span class="cline-any cline-neutral">&nbsp;</span>
1559
+ <span class="cline-any cline-yes">3x</span>
1560
+ <span class="cline-any cline-yes">3x</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-yes">3x</span>
1565
+ <span class="cline-any cline-neutral">&nbsp;</span>
1566
+ <span class="cline-any cline-yes">3x</span>
1567
+ <span class="cline-any cline-yes">6x</span>
1568
+ <span class="cline-any cline-yes">6x</span>
1569
+ <span class="cline-any cline-neutral">&nbsp;</span>
1570
+ <span class="cline-any cline-neutral">&nbsp;</span>
1571
+ <span class="cline-any cline-neutral">&nbsp;</span>
1572
+ <span class="cline-any cline-neutral">&nbsp;</span>
1573
+ <span class="cline-any cline-yes">3x</span>
1574
+ <span class="cline-any cline-yes">3x</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-yes">90x</span>
1581
+ <span class="cline-any cline-neutral">&nbsp;</span>
1582
+ <span class="cline-any cline-neutral">&nbsp;</span>
1583
+ <span class="cline-any cline-neutral">&nbsp;</span>
1584
+ <span class="cline-any cline-neutral">&nbsp;</span>
1585
+ <span class="cline-any cline-yes">90x</span>
1586
+ <span class="cline-any cline-neutral">&nbsp;</span>
1587
+ <span class="cline-any cline-neutral">&nbsp;</span>
1588
+ <span class="cline-any cline-neutral">&nbsp;</span>
1589
+ <span class="cline-any cline-yes">29x</span>
1590
+ <span class="cline-any cline-yes">29x</span>
1591
+ <span class="cline-any cline-yes">7x</span>
1592
+ <span class="cline-any cline-neutral">&nbsp;</span>
1593
+ <span class="cline-any cline-yes">22x</span>
1594
+ <span class="cline-any cline-yes">4x</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-yes">18x</span>
1600
+ <span class="cline-any cline-yes">7x</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-yes">4x</span>
1605
+ <span class="cline-any cline-neutral">&nbsp;</span>
1606
+ <span class="cline-any cline-neutral">&nbsp;</span>
1607
+ <span class="cline-any cline-yes">2x</span>
1608
+ <span class="cline-any cline-yes">2x</span>
1609
+ <span class="cline-any cline-no">&nbsp;</span>
1610
+ <span class="cline-any cline-no">&nbsp;</span>
1611
+ <span class="cline-any cline-no">&nbsp;</span>
1612
+ <span class="cline-any cline-neutral">&nbsp;</span>
1613
+ <span class="cline-any cline-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-no">&nbsp;</span>
1617
+ <span class="cline-any cline-no">&nbsp;</span>
1618
+ <span class="cline-any cline-no">&nbsp;</span>
1619
+ <span class="cline-any cline-neutral">&nbsp;</span>
1620
+ <span class="cline-any cline-neutral">&nbsp;</span>
1621
+ <span class="cline-any cline-neutral">&nbsp;</span>
1622
+ <span class="cline-any cline-neutral">&nbsp;</span>
1623
+ <span class="cline-any cline-no">&nbsp;</span>
1624
+ <span class="cline-any cline-neutral">&nbsp;</span>
1625
+ <span class="cline-any cline-neutral">&nbsp;</span>
1626
+ <span class="cline-any cline-no">&nbsp;</span>
1627
+ <span class="cline-any cline-neutral">&nbsp;</span>
1628
+ <span class="cline-any cline-neutral">&nbsp;</span>
1629
+ <span class="cline-any cline-neutral">&nbsp;</span>
1630
+ <span class="cline-any cline-neutral">&nbsp;</span>
1631
+ <span class="cline-any cline-neutral">&nbsp;</span>
1632
+ <span class="cline-any cline-yes">90x</span>
1633
+ <span class="cline-any cline-neutral">&nbsp;</span>
1634
+ <span class="cline-any cline-neutral">&nbsp;</span>
1635
+ <span class="cline-any cline-neutral">&nbsp;</span>
1636
+ <span class="cline-any cline-yes">17x</span>
1637
+ <span class="cline-any cline-yes">17x</span>
1638
+ <span class="cline-any cline-no">&nbsp;</span>
1639
+ <span class="cline-any cline-neutral">&nbsp;</span>
1640
+ <span class="cline-any cline-yes">17x</span>
1641
+ <span class="cline-any cline-yes">4x</span>
1642
+ <span class="cline-any cline-neutral">&nbsp;</span>
1643
+ <span class="cline-any cline-yes">13x</span>
1644
+ <span class="cline-any cline-yes">1x</span>
1645
+ <span class="cline-any cline-neutral">&nbsp;</span>
1646
+ <span class="cline-any cline-neutral">&nbsp;</span>
1647
+ <span class="cline-any cline-neutral">&nbsp;</span>
1648
+ <span class="cline-any cline-no">&nbsp;</span>
1649
+ <span class="cline-any cline-neutral">&nbsp;</span>
1650
+ <span class="cline-any cline-neutral">&nbsp;</span>
1651
+ <span class="cline-any cline-no">&nbsp;</span>
1652
+ <span class="cline-any cline-no">&nbsp;</span>
1653
+ <span class="cline-any cline-no">&nbsp;</span>
1654
+ <span class="cline-any cline-no">&nbsp;</span>
1655
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1661
+ <span class="cline-any cline-no">&nbsp;</span>
1662
+ <span class="cline-any cline-no">&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-no">&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-neutral">&nbsp;</span>
1673
+ <span class="cline-any cline-yes">90x</span>
1674
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1679
+ <span class="cline-any cline-no">&nbsp;</span>
1680
+ <span class="cline-any cline-no">&nbsp;</span>
1681
+ <span class="cline-any cline-neutral">&nbsp;</span>
1682
+ <span class="cline-any cline-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-no">&nbsp;</span>
1686
+ <span class="cline-any cline-no">&nbsp;</span>
1687
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1693
+ <span class="cline-any cline-yes">90x</span>
1694
+ <span class="cline-any cline-neutral">&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-yes">1x</span>
1698
+ <span class="cline-any cline-neutral">&nbsp;</span>
1699
+ <span class="cline-any cline-neutral">&nbsp;</span>
1700
+ <span class="cline-any cline-neutral">&nbsp;</span>
1701
+ <span class="cline-any cline-no">&nbsp;</span>
1702
+ <span class="cline-any cline-no">&nbsp;</span>
1703
+ <span class="cline-any cline-neutral">&nbsp;</span>
1704
+ <span class="cline-any cline-neutral">&nbsp;</span>
1705
+ <span class="cline-any cline-no">&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-yes">33x</span>
1709
+ <span class="cline-any cline-neutral">&nbsp;</span>
1710
+ <span class="cline-any cline-yes">16x</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-no">&nbsp;</span>
1714
+ <span class="cline-any cline-neutral">&nbsp;</span>
1715
+ <span class="cline-any cline-neutral">&nbsp;</span>
1716
+ <span class="cline-any cline-neutral">&nbsp;</span>
1717
+ <span class="cline-any cline-neutral">&nbsp;</span>
1718
+ <span class="cline-any cline-neutral">&nbsp;</span>
1719
+ <span class="cline-any cline-no">&nbsp;</span>
1720
+ <span class="cline-any cline-neutral">&nbsp;</span>
1721
+ <span class="cline-any cline-neutral">&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-neutral">&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-yes">90x</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-no">&nbsp;</span>
1733
+ <span class="cline-any cline-no">&nbsp;</span>
1734
+ <span class="cline-any cline-neutral">&nbsp;</span>
1735
+ <span class="cline-any cline-no">&nbsp;</span>
1736
+ <span class="cline-any cline-no">&nbsp;</span>
1737
+ <span class="cline-any cline-neutral">&nbsp;</span>
1738
+ <span class="cline-any cline-no">&nbsp;</span>
1739
+ <span class="cline-any cline-neutral">&nbsp;</span>
1740
+ <span class="cline-any cline-no">&nbsp;</span>
1741
+ <span class="cline-any cline-neutral">&nbsp;</span>
1742
+ <span class="cline-any cline-no">&nbsp;</span>
1743
+ <span class="cline-any cline-neutral">&nbsp;</span>
1744
+ <span class="cline-any cline-no">&nbsp;</span>
1745
+ <span class="cline-any cline-neutral">&nbsp;</span>
1746
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1751
+ <span class="cline-any cline-no">&nbsp;</span>
1752
+ <span class="cline-any cline-neutral">&nbsp;</span>
1753
+ <span class="cline-any cline-no">&nbsp;</span>
1754
+ <span class="cline-any cline-no">&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-no">&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-neutral">&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-no">&nbsp;</span>
1766
+ <span class="cline-any cline-neutral">&nbsp;</span>
1767
+ <span class="cline-any cline-neutral">&nbsp;</span>
1768
+ <span class="cline-any cline-neutral">&nbsp;</span>
1769
+ <span class="cline-any cline-neutral">&nbsp;</span>
1770
+ <span class="cline-any cline-no">&nbsp;</span>
1771
+ <span class="cline-any cline-no">&nbsp;</span>
1772
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1778
+ <span class="cline-any cline-no">&nbsp;</span>
1779
+ <span class="cline-any cline-no">&nbsp;</span>
1780
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1784
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
1789
+ <span class="cline-any cline-no">&nbsp;</span>
1790
+ <span class="cline-any cline-neutral">&nbsp;</span>
1791
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1795
+ <span class="cline-any cline-no">&nbsp;</span>
1796
+ <span class="cline-any cline-neutral">&nbsp;</span>
1797
+ <span class="cline-any cline-neutral">&nbsp;</span>
1798
+ <span class="cline-any cline-neutral">&nbsp;</span>
1799
+ <span class="cline-any cline-neutral">&nbsp;</span>
1800
+ <span class="cline-any cline-neutral">&nbsp;</span>
1801
+ <span class="cline-any cline-yes">90x</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-no">&nbsp;</span>
1806
+ <span class="cline-any cline-neutral">&nbsp;</span>
1807
+ <span class="cline-any cline-neutral">&nbsp;</span>
1808
+ <span class="cline-any cline-neutral">&nbsp;</span>
1809
+ <span class="cline-any cline-yes">90x</span>
1810
+ <span class="cline-any cline-neutral">&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-yes">2x</span>
1814
+ <span class="cline-any cline-neutral">&nbsp;</span>
1815
+ <span class="cline-any cline-neutral">&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-yes">90x</span>
1820
+ <span class="cline-any cline-neutral">&nbsp;</span>
1821
+ <span class="cline-any cline-neutral">&nbsp;</span>
1822
+ <span class="cline-any cline-neutral">&nbsp;</span>
1823
+ <span class="cline-any cline-neutral">&nbsp;</span>
1824
+ <span class="cline-any cline-yes">2x</span>
1825
+ <span class="cline-any cline-yes">1x</span>
1826
+ <span class="cline-any cline-neutral">&nbsp;</span>
1827
+ <span class="cline-any cline-yes">1x</span>
1828
+ <span class="cline-any cline-neutral">&nbsp;</span>
1829
+ <span class="cline-any cline-neutral">&nbsp;</span>
1830
+ <span class="cline-any cline-neutral">&nbsp;</span>
1831
+ <span class="cline-any cline-neutral">&nbsp;</span>
1832
+ <span class="cline-any cline-yes">90x</span>
1833
+ <span class="cline-any cline-neutral">&nbsp;</span>
1834
+ <span class="cline-any cline-neutral">&nbsp;</span>
1835
+ <span class="cline-any cline-neutral">&nbsp;</span>
1836
+ <span class="cline-any cline-yes">90x</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-no">&nbsp;</span>
1842
+ <span class="cline-any cline-no">&nbsp;</span>
1843
+ <span class="cline-any cline-neutral">&nbsp;</span>
1844
+ <span class="cline-any cline-no">&nbsp;</span>
1845
+ <span class="cline-any cline-no">&nbsp;</span>
1846
+ <span class="cline-any cline-neutral">&nbsp;</span>
1847
+ <span class="cline-any cline-neutral">&nbsp;</span>
1848
+ <span class="cline-any cline-neutral">&nbsp;</span>
1849
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
1856
+ <span class="cline-any cline-neutral">&nbsp;</span>
1857
+ <span class="cline-any cline-neutral">&nbsp;</span>
1858
+ <span class="cline-any cline-no">&nbsp;</span>
1859
+ <span class="cline-any cline-no">&nbsp;</span>
1860
+ <span class="cline-any cline-neutral">&nbsp;</span>
1861
+ <span class="cline-any cline-no">&nbsp;</span>
1862
+ <span class="cline-any cline-no">&nbsp;</span>
1863
+ <span class="cline-any cline-neutral">&nbsp;</span>
1864
+ <span class="cline-any cline-no">&nbsp;</span>
1865
+ <span class="cline-any cline-no">&nbsp;</span>
1866
+ <span class="cline-any cline-neutral">&nbsp;</span>
1867
+ <span class="cline-any cline-no">&nbsp;</span>
1868
+ <span class="cline-any cline-no">&nbsp;</span>
1869
+ <span class="cline-any cline-neutral">&nbsp;</span>
1870
+ <span class="cline-any cline-no">&nbsp;</span>
1871
+ <span class="cline-any cline-no">&nbsp;</span>
1872
+ <span class="cline-any cline-neutral">&nbsp;</span>
1873
+ <span class="cline-any cline-no">&nbsp;</span>
1874
+ <span class="cline-any cline-no">&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-yes">90x</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-yes">18x</span>
1883
+ <span class="cline-any cline-yes">18x</span>
1884
+ <span class="cline-any cline-yes">18x</span>
1885
+ <span class="cline-any cline-yes">15x</span>
1886
+ <span class="cline-any cline-neutral">&nbsp;</span>
1887
+ <span class="cline-any cline-yes">18x</span>
1888
+ <span class="cline-any cline-yes">18x</span>
1889
+ <span class="cline-any cline-no">&nbsp;</span>
1890
+ <span class="cline-any cline-neutral">&nbsp;</span>
1891
+ <span class="cline-any cline-yes">18x</span>
1892
+ <span class="cline-any cline-yes">18x</span>
1893
+ <span class="cline-any cline-yes">3x</span>
1894
+ <span class="cline-any cline-yes">3x</span>
1895
+ <span class="cline-any cline-yes">3x</span>
1896
+ <span class="cline-any cline-yes">3x</span>
1897
+ <span class="cline-any cline-yes">3x</span>
1898
+ <span class="cline-any cline-yes">3x</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-no">&nbsp;</span>
1903
+ <span class="cline-any cline-no">&nbsp;</span>
1904
+ <span class="cline-any cline-neutral">&nbsp;</span>
1905
+ <span class="cline-any cline-neutral">&nbsp;</span>
1906
+ <span class="cline-any cline-no">&nbsp;</span>
1907
+ <span class="cline-any cline-neutral">&nbsp;</span>
1908
+ <span class="cline-any cline-neutral">&nbsp;</span>
1909
+ <span class="cline-any cline-yes">3x</span>
1910
+ <span class="cline-any cline-neutral">&nbsp;</span>
1911
+ <span class="cline-any cline-yes">18x</span>
1912
+ <span class="cline-any cline-yes">18x</span>
1913
+ <span class="cline-any cline-no">&nbsp;</span>
1914
+ <span class="cline-any cline-neutral">&nbsp;</span>
1915
+ <span class="cline-any cline-yes">18x</span>
1916
+ <span class="cline-any cline-no">&nbsp;</span>
1917
+ <span class="cline-any cline-neutral">&nbsp;</span>
1918
+ <span class="cline-any cline-yes">18x</span>
1919
+ <span class="cline-any cline-no">&nbsp;</span>
1920
+ <span class="cline-any cline-neutral">&nbsp;</span>
1921
+ <span class="cline-any cline-yes">18x</span>
1922
+ <span class="cline-any cline-no">&nbsp;</span>
1923
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
1927
+ <span class="cline-any cline-neutral">&nbsp;</span>
1928
+ <span class="cline-any cline-neutral">&nbsp;</span>
1929
+ <span class="cline-any cline-no">&nbsp;</span>
1930
+ <span class="cline-any cline-no">&nbsp;</span>
1931
+ <span class="cline-any cline-neutral">&nbsp;</span>
1932
+ <span class="cline-any cline-neutral">&nbsp;</span>
1933
+ <span class="cline-any cline-neutral">&nbsp;</span>
1934
+ <span class="cline-any cline-yes">3x</span>
1935
+ <span class="cline-any cline-yes">3x</span>
1936
+ <span class="cline-any cline-neutral">&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-yes">3x</span>
1940
+ <span class="cline-any cline-yes">3x</span>
1941
+ <span class="cline-any cline-yes">3x</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-yes">3x</span>
1945
+ <span class="cline-any cline-neutral">&nbsp;</span>
1946
+ <span class="cline-any cline-neutral">&nbsp;</span>
1947
+ <span class="cline-any cline-yes">2x</span>
1948
+ <span class="cline-any cline-no">&nbsp;</span>
1949
+ <span class="cline-any cline-neutral">&nbsp;</span>
1950
+ <span class="cline-any cline-yes">2x</span>
1951
+ <span class="cline-any cline-no">&nbsp;</span>
1952
+ <span class="cline-any cline-neutral">&nbsp;</span>
1953
+ <span class="cline-any cline-yes">2x</span>
1954
+ <span class="cline-any cline-no">&nbsp;</span>
1955
+ <span class="cline-any cline-no">&nbsp;</span>
1956
+ <span class="cline-any cline-neutral">&nbsp;</span>
1957
+ <span class="cline-any cline-neutral">&nbsp;</span>
1958
+ <span class="cline-any cline-yes">2x</span>
1959
+ <span class="cline-any cline-neutral">&nbsp;</span>
1960
+ <span class="cline-any cline-neutral">&nbsp;</span>
1961
+ <span class="cline-any cline-neutral">&nbsp;</span>
1962
+ <span class="cline-any cline-neutral">&nbsp;</span>
1963
+ <span class="cline-any cline-yes">90x</span>
1964
+ <span class="cline-any cline-neutral">&nbsp;</span>
1965
+ <span class="cline-any cline-neutral">&nbsp;</span>
1966
+ <span class="cline-any cline-yes">17x</span>
1967
+ <span class="cline-any cline-yes">17x</span>
1968
+ <span class="cline-any cline-yes">17x</span>
1969
+ <span class="cline-any cline-yes">17x</span>
1970
+ <span class="cline-any cline-neutral">&nbsp;</span>
1971
+ <span class="cline-any cline-neutral">&nbsp;</span>
1972
+ <span class="cline-any cline-yes">17x</span>
1973
+ <span class="cline-any cline-yes">15x</span>
1974
+ <span class="cline-any cline-neutral">&nbsp;</span>
1975
+ <span class="cline-any cline-yes">17x</span>
1976
+ <span class="cline-any cline-yes">17x</span>
1977
+ <span class="cline-any cline-neutral">&nbsp;</span>
1978
+ <span class="cline-any cline-no">&nbsp;</span>
1979
+ <span class="cline-any cline-no">&nbsp;</span>
1980
+ <span class="cline-any cline-neutral">&nbsp;</span>
1981
+ <span class="cline-any cline-neutral">&nbsp;</span>
1982
+ <span class="cline-any cline-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-yes">17x</span>
1986
+ <span class="cline-any cline-yes">17x</span>
1987
+ <span class="cline-any cline-yes">17x</span>
1988
+ <span class="cline-any cline-yes">17x</span>
1989
+ <span class="cline-any cline-no">&nbsp;</span>
1990
+ <span class="cline-any cline-neutral">&nbsp;</span>
1991
+ <span class="cline-any cline-neutral">&nbsp;</span>
1992
+ <span class="cline-any cline-neutral">&nbsp;</span>
1993
+ <span class="cline-any cline-yes">1x</span>
1994
+ <span class="cline-any cline-yes">1x</span>
1995
+ <span class="cline-any cline-yes">1x</span>
1996
+ <span class="cline-any cline-neutral">&nbsp;</span>
1997
+ <span class="cline-any cline-neutral">&nbsp;</span>
1998
+ <span class="cline-any cline-yes">1x</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-yes">1x</span>
2002
+ <span class="cline-any cline-yes">1x</span>
2003
+ <span class="cline-any cline-neutral">&nbsp;</span>
2004
+ <span class="cline-any cline-neutral">&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-no">&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-neutral">&nbsp;</span>
2021
+ <span class="cline-any cline-no">&nbsp;</span>
2022
+ <span class="cline-any cline-no">&nbsp;</span>
2023
+ <span class="cline-any cline-neutral">&nbsp;</span>
2024
+ <span class="cline-any cline-no">&nbsp;</span>
2025
+ <span class="cline-any cline-neutral">&nbsp;</span>
2026
+ <span class="cline-any cline-neutral">&nbsp;</span>
2027
+ <span class="cline-any cline-neutral">&nbsp;</span>
2028
+ <span class="cline-any cline-neutral">&nbsp;</span>
2029
+ <span class="cline-any cline-yes">90x</span>
2030
+ <span class="cline-any cline-neutral">&nbsp;</span>
2031
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
2045
+ <span class="cline-any cline-neutral">&nbsp;</span>
2046
+ <span class="cline-any cline-neutral">&nbsp;</span>
2047
+ <span class="cline-any cline-neutral">&nbsp;</span>
2048
+ <span class="cline-any cline-neutral">&nbsp;</span>
2049
+ <span class="cline-any cline-neutral">&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-yes">41x</span>
2056
+ <span class="cline-any cline-yes">41x</span>
2057
+ <span class="cline-any cline-no">&nbsp;</span>
2058
+ <span class="cline-any cline-neutral">&nbsp;</span>
2059
+ <span class="cline-any cline-yes">41x</span>
2060
+ <span class="cline-any cline-yes">41x</span>
2061
+ <span class="cline-any cline-yes">31x</span>
2062
+ <span class="cline-any cline-neutral">&nbsp;</span>
2063
+ <span class="cline-any cline-yes">41x</span>
2064
+ <span class="cline-any cline-neutral">&nbsp;</span>
2065
+ <span class="cline-any cline-no">&nbsp;</span>
2066
+ <span class="cline-any cline-neutral">&nbsp;</span>
2067
+ <span class="cline-any cline-yes">41x</span>
2068
+ <span class="cline-any cline-no">&nbsp;</span>
2069
+ <span class="cline-any cline-neutral">&nbsp;</span>
2070
+ <span class="cline-any cline-yes">41x</span>
2071
+ <span class="cline-any cline-no">&nbsp;</span>
2072
+ <span class="cline-any cline-neutral">&nbsp;</span>
2073
+ <span class="cline-any cline-yes">41x</span>
2074
+ <span class="cline-any cline-yes">41x</span>
2075
+ <span class="cline-any cline-yes">41x</span>
2076
+ <span class="cline-any cline-yes">6x</span>
2077
+ <span class="cline-any cline-no">&nbsp;</span>
2078
+ <span class="cline-any cline-neutral">&nbsp;</span>
2079
+ <span class="cline-any cline-yes">6x</span>
2080
+ <span class="cline-any cline-yes">6x</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-yes">41x</span>
2085
+ <span class="cline-any cline-yes">41x</span>
2086
+ <span class="cline-any cline-no">&nbsp;</span>
2087
+ <span class="cline-any cline-neutral">&nbsp;</span>
2088
+ <span class="cline-any cline-no">&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-yes">41x</span>
2093
+ <span class="cline-any cline-yes">6x</span>
2094
+ <span class="cline-any cline-neutral">&nbsp;</span>
2095
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
2099
+ <span class="cline-any cline-yes">41x</span>
2100
+ <span class="cline-any cline-yes">35x</span>
2101
+ <span class="cline-any cline-yes">35x</span>
2102
+ <span class="cline-any cline-neutral">&nbsp;</span>
2103
+ <span class="cline-any cline-yes">6x</span>
2104
+ <span class="cline-any cline-neutral">&nbsp;</span>
2105
+ <span class="cline-any cline-yes">6x</span>
2106
+ <span class="cline-any cline-yes">6x</span>
2107
+ <span class="cline-any cline-yes">6x</span>
2108
+ <span class="cline-any cline-no">&nbsp;</span>
2109
+ <span class="cline-any cline-no">&nbsp;</span>
2110
+ <span class="cline-any cline-no">&nbsp;</span>
2111
+ <span class="cline-any cline-neutral">&nbsp;</span>
2112
+ <span class="cline-any cline-yes">6x</span>
2113
+ <span class="cline-any cline-yes">6x</span>
2114
+ <span class="cline-any cline-yes">6x</span>
2115
+ <span class="cline-any cline-yes">5x</span>
2116
+ <span class="cline-any cline-yes">5x</span>
2117
+ <span class="cline-any cline-yes">5x</span>
2118
+ <span class="cline-any cline-yes">4x</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-yes">5x</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-yes">6x</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-yes">266x</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-yes">433x</span>
2135
+ <span class="cline-any cline-yes">433x</span>
2136
+ <span class="cline-any cline-yes">433x</span>
2137
+ <span class="cline-any cline-yes">433x</span>
2138
+ <span class="cline-any cline-neutral">&nbsp;</span>
2139
+ <span class="cline-any cline-neutral">&nbsp;</span>
2140
+ <span class="cline-any cline-yes">866x</span>
2141
+ <span class="cline-any cline-neutral">&nbsp;</span>
2142
+ <span class="cline-any cline-neutral">&nbsp;</span>
2143
+ <span class="cline-any cline-yes">424x</span>
2144
+ <span class="cline-any cline-yes">409x</span>
2145
+ <span class="cline-any cline-neutral">&nbsp;</span>
2146
+ <span class="cline-any cline-neutral">&nbsp;</span>
2147
+ <span class="cline-any cline-yes">15x</span>
2148
+ <span class="cline-any cline-yes">15x</span>
2149
+ <span class="cline-any cline-neutral">&nbsp;</span>
2150
+ <span class="cline-any cline-neutral">&nbsp;</span>
2151
+ <span class="cline-any cline-yes">15x</span>
2152
+ <span class="cline-any cline-yes">9x</span>
2153
+ <span class="cline-any cline-yes">9x</span>
2154
+ <span class="cline-any cline-yes">6x</span>
2155
+ <span class="cline-any cline-yes">4x</span>
2156
+ <span class="cline-any cline-yes">4x</span>
2157
+ <span class="cline-any cline-yes">4x</span>
2158
+ <span class="cline-any cline-yes">4x</span>
2159
+ <span class="cline-any cline-yes">4x</span>
2160
+ <span class="cline-any cline-yes">4x</span>
2161
+ <span class="cline-any cline-yes">4x</span>
2162
+ <span class="cline-any cline-yes">4x</span>
2163
+ <span class="cline-any cline-yes">4x</span>
2164
+ <span class="cline-any cline-yes">4x</span>
2165
+ <span class="cline-any cline-neutral">&nbsp;</span>
2166
+ <span class="cline-any cline-yes">2x</span>
2167
+ <span class="cline-any cline-neutral">&nbsp;</span>
2168
+ <span class="cline-any cline-yes">15x</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-neutral">&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-yes">287x</span>
2177
+ <span class="cline-any cline-no">&nbsp;</span>
2178
+ <span class="cline-any cline-neutral">&nbsp;</span>
2179
+ <span class="cline-any cline-yes">287x</span>
2180
+ <span class="cline-any cline-neutral">&nbsp;</span>
2181
+ <span class="cline-any cline-yes">285x</span>
2182
+ <span class="cline-any cline-neutral">&nbsp;</span>
2183
+ <span class="cline-any cline-yes">287x</span>
2184
+ <span class="cline-any cline-neutral">&nbsp;</span>
2185
+ <span class="cline-any cline-neutral">&nbsp;</span>
2186
+ <span class="cline-any cline-yes">1x</span>
2187
+ <span class="cline-any cline-yes">1x</span>
2188
+ <span class="cline-any cline-no">&nbsp;</span>
2189
+ <span class="cline-any cline-neutral">&nbsp;</span>
2190
+ <span class="cline-any cline-yes">1x</span>
2191
+ <span class="cline-any cline-neutral">&nbsp;</span>
2192
+ <span class="cline-any cline-yes">287x</span>
2193
+ <span class="cline-any cline-no">&nbsp;</span>
2194
+ <span class="cline-any cline-neutral">&nbsp;</span>
2195
+ <span class="cline-any cline-yes">287x</span>
2196
+ <span class="cline-any cline-no">&nbsp;</span>
2197
+ <span class="cline-any cline-no">&nbsp;</span>
2198
+ <span class="cline-any cline-neutral">&nbsp;</span>
2199
+ <span class="cline-any cline-neutral">&nbsp;</span>
2200
+ <span class="cline-any cline-yes">287x</span>
2201
+ <span class="cline-any cline-yes">287x</span>
2202
+ <span class="cline-any cline-yes">287x</span>
2203
+ <span class="cline-any cline-yes">287x</span>
2204
+ <span class="cline-any cline-yes">287x</span>
2205
+ <span class="cline-any cline-yes">287x</span>
2206
+ <span class="cline-any cline-neutral">&nbsp;</span>
2207
+ <span class="cline-any cline-yes">287x</span>
2208
+ <span class="cline-any cline-yes">284x</span>
2209
+ <span class="cline-any cline-yes">284x</span>
2210
+ <span class="cline-any cline-yes">284x</span>
2211
+ <span class="cline-any cline-yes">284x</span>
2212
+ <span class="cline-any cline-neutral">&nbsp;</span>
2213
+ <span class="cline-any cline-neutral">&nbsp;</span>
2214
+ <span class="cline-any cline-yes">287x</span>
2215
+ <span class="cline-any cline-yes">287x</span>
2216
+ <span class="cline-any cline-neutral">&nbsp;</span>
2217
+ <span class="cline-any cline-yes">287x</span>
2218
+ <span class="cline-any cline-no">&nbsp;</span>
2219
+ <span class="cline-any cline-neutral">&nbsp;</span>
2220
+ <span class="cline-any cline-yes">287x</span>
2221
+ <span class="cline-any cline-no">&nbsp;</span>
2222
+ <span class="cline-any cline-neutral">&nbsp;</span>
2223
+ <span class="cline-any cline-yes">287x</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-neutral">&nbsp;</span>
2227
+ <span class="cline-any cline-yes">287x</span>
2228
+ <span class="cline-any cline-yes">287x</span>
2229
+ <span class="cline-any cline-no">&nbsp;</span>
2230
+ <span class="cline-any cline-neutral">&nbsp;</span>
2231
+ <span class="cline-any cline-neutral">&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-yes">13x</span>
2235
+ <span class="cline-any cline-yes">13x</span>
2236
+ <span class="cline-any cline-yes">13x</span>
2237
+ <span class="cline-any cline-yes">2x</span>
2238
+ <span class="cline-any cline-neutral">&nbsp;</span>
2239
+ <span class="cline-any cline-yes">11x</span>
2240
+ <span class="cline-any cline-yes">11x</span>
2241
+ <span class="cline-any cline-yes">11x</span>
2242
+ <span class="cline-any cline-yes">11x</span>
2243
+ <span class="cline-any cline-no">&nbsp;</span>
2244
+ <span class="cline-any cline-neutral">&nbsp;</span>
2245
+ <span class="cline-any cline-neutral">&nbsp;</span>
2246
+ <span class="cline-any cline-yes">11x</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-yes">90x</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-yes">10x</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-yes">4x</span>
2259
+ <span class="cline-any cline-no">&nbsp;</span>
2260
+ <span class="cline-any cline-neutral">&nbsp;</span>
2261
+ <span class="cline-any cline-yes">4x</span>
2262
+ <span class="cline-any cline-neutral">&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-yes">4x</span>
2270
+ <span class="cline-any cline-yes">4x</span>
2271
+ <span class="cline-any cline-no">&nbsp;</span>
2272
+ <span class="cline-any cline-neutral">&nbsp;</span>
2273
+ <span class="cline-any cline-yes">4x</span>
2274
+ <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
2278
+ <span class="cline-any cline-neutral">&nbsp;</span>
2279
+ <span class="cline-any cline-yes">2x</span>
2280
+ <span class="cline-any cline-yes">2x</span>
2281
+ <span class="cline-any cline-yes">2x</span>
2282
+ <span class="cline-any cline-neutral">&nbsp;</span>
2283
+ <span class="cline-any cline-neutral">&nbsp;</span>
2284
+ <span class="cline-any cline-yes">4x</span>
2285
+ <span class="cline-any cline-yes">4x</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-yes">4x</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-yes">4x</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-yes">4x</span>
2299
+ <span class="cline-any cline-yes">4x</span>
2300
+ <span class="cline-any cline-neutral">&nbsp;</span>
2301
+ <span class="cline-any cline-yes">4x</span>
2302
+ <span class="cline-any cline-no">&nbsp;</span>
2303
+ <span class="cline-any cline-neutral">&nbsp;</span>
2304
+ <span class="cline-any cline-yes">4x</span>
2305
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
2310
+ <span class="cline-any cline-no">&nbsp;</span>
2311
+ <span class="cline-any cline-neutral">&nbsp;</span>
2312
+ <span class="cline-any cline-no">&nbsp;</span>
2313
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
2319
+ <span class="cline-any cline-neutral">&nbsp;</span>
2320
+ <span class="cline-any cline-yes">63x</span>
2321
+ <span class="cline-any cline-neutral">&nbsp;</span>
2322
+ <span class="cline-any cline-neutral">&nbsp;</span>
2323
+ <span class="cline-any cline-yes">2x</span>
2324
+ <span class="cline-any cline-neutral">&nbsp;</span>
2325
+ <span class="cline-any cline-neutral">&nbsp;</span>
2326
+ <span class="cline-any cline-yes">61x</span>
2327
+ <span class="cline-any cline-yes">1x</span>
2328
+ <span class="cline-any cline-neutral">&nbsp;</span>
2329
+ <span class="cline-any cline-neutral">&nbsp;</span>
2330
+ <span class="cline-any cline-yes">60x</span>
2331
+ <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
2335
+ <span class="cline-any cline-no">&nbsp;</span>
2336
+ <span class="cline-any cline-no">&nbsp;</span>
2337
+ <span class="cline-any cline-no">&nbsp;</span>
2338
+ <span class="cline-any cline-no">&nbsp;</span>
2339
+ <span class="cline-any cline-no">&nbsp;</span>
2340
+ <span class="cline-any cline-neutral">&nbsp;</span>
2341
+ <span class="cline-any cline-no">&nbsp;</span>
2342
+ <span class="cline-any cline-neutral">&nbsp;</span>
2343
+ <span class="cline-any cline-neutral">&nbsp;</span>
2344
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const _ = require('lodash');
2345
+ const dayjs = require('dayjs');
2346
+ const tinycolor = require('tinycolor2');
2347
+ const { klona } = require('klona');
2348
+ const { stripIndents } = require('common-tags');
2349
+ const joinr = require('./joinr');
2350
+ &nbsp;
2351
+ const dateRegex = /^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/;
2352
+ &nbsp;
2353
+ module.exports = (self) =&gt; {
2354
+ self.addFieldType({
2355
+ name: 'area',
2356
+ async convert(req, field, data, destination) {
2357
+ const _id = self.apos.launder.id(data[field.name] &amp;&amp; data[field.name]._id) || self.apos.util.generateId();
2358
+ if (typeof data[field.name] === 'string') {
2359
+ destination[field.name] = self.apos.area.fromPlaintext(data[field.name]);
2360
+ return;
2361
+ }
2362
+ if (Array.isArray(data[field.name])) {
2363
+ data[field.name] = {
2364
+ metaType: 'area',
2365
+ items: data[field.name]
2366
+ };
2367
+ }
2368
+ let items = [];
2369
+ // accept either an array of items, or a complete
2370
+ // area object
2371
+ try {
2372
+ items = data[field.name].items || <span class="branch-1 cbranch-no" title="branch not covered" >[];</span>
2373
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(items)) {
2374
+ <span class="cstat-no" title="statement not covered" > items = [];</span>
2375
+ }
2376
+ } catch (e) {
2377
+ // Always recover graciously and import something reasonable, like an empty area
2378
+ items = [];
2379
+ }
2380
+ items = await self.apos.area.sanitizeItems(req, items, field.options || <span class="branch-1 cbranch-no" title="branch not covered" >{})</span>;
2381
+ destination[field.name] = {
2382
+ _id,
2383
+ items,
2384
+ metaType: 'area'
2385
+ };
2386
+ },
2387
+ isEmpty: <span class="fstat-no" title="function not covered" >fu</span>nction (field, value) {
2388
+ <span class="cstat-no" title="statement not covered" > return self.apos.area.isEmpty({ area: value });</span>
2389
+ },
2390
+ isEqual (req, field, one, two) {
2391
+ if (self.apos.area.isEmpty({ area: one[field.name] }) &amp;&amp; self.apos.area.isEmpty({ area: two[field.name] })) {
2392
+ return true;
2393
+ }
2394
+ return _.isEqual(one[field.name], two[field.name]);
2395
+ },
2396
+ validate: function (field, options, warn, fail) {
2397
+ if (field.options &amp;&amp; field.options.widgets) {
2398
+ for (const name of Object.keys(field.options.widgets)) {
2399
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!self.apos.modules[`${name}-widget`]) {
2400
+ <span class="cstat-no" title="statement not covered" > if (name.match(/-widget$/)) {</span>
2401
+ <span class="cstat-no" title="statement not covered" > warn(stripIndents`</span>
2402
+ Do not include "-widget" in the name when configuring a widget in an area field.
2403
+ Apostrophe will automatically add "-widget" when looking for the right module.
2404
+ `);
2405
+ } else {
2406
+ <span class="cstat-no" title="statement not covered" > warn(`Nonexistent widget type name ${name} in area field.`);</span>
2407
+ }
2408
+ }
2409
+ }
2410
+ }
2411
+ }
2412
+ });
2413
+ &nbsp;
2414
+ self.addFieldType({
2415
+ name: 'string',
2416
+ convert: function (req, field, data, destination) {
2417
+ destination[field.name] = self.apos.launder.string(data[field.name], field.def);
2418
+ &nbsp;
2419
+ destination[field.name] = checkStringLength(destination[field.name], field.min, field.max);
2420
+ // If field is required but empty (and client side didn't catch that)
2421
+ // This is new and until now if JS client side failed, then it would
2422
+ // allow the save with empty values -Lars
2423
+ if (field.required &amp;&amp; (_.isUndefined(data[field.name]) || !data[field.name].toString().length)) {
2424
+ throw self.apos.error('required');
2425
+ }
2426
+ },
2427
+ index: <span class="fstat-no" title="function not covered" >fu</span>nction (value, field, texts) {
2428
+ const silent = <span class="cstat-no" title="statement not covered" >field.silent === undefined ? true : field.silent;</span>
2429
+ <span class="cstat-no" title="statement not covered" > texts.push({</span>
2430
+ weight: field.weight || 15,
2431
+ text: value,
2432
+ silent: silent
2433
+ });
2434
+ },
2435
+ isEmpty: <span class="fstat-no" title="function not covered" >fu</span>nction (field, value) {
2436
+ <span class="cstat-no" title="statement not covered" > return !value.length;</span>
2437
+ },
2438
+ addQueryBuilder: function (field, query) {
2439
+ query.addBuilder(field.name, {
2440
+ finalize: function () {
2441
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (self.queryBuilderInterested(query, field.name)) {
2442
+ const criteria = <span class="cstat-no" title="statement not covered" >{};</span>
2443
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = new RegExp(self.apos.util.regExpQuote(query.get(field.name)), 'i');</span>
2444
+ <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2445
+ }
2446
+ },
2447
+ launder: <span class="fstat-no" title="function not covered" >fu</span>nction (s) {
2448
+ <span class="cstat-no" title="statement not covered" > return self.apos.launder.string(s);</span>
2449
+ },
2450
+ choices: async function () {
2451
+ return self.sortedDistinct(field.name, query);
2452
+ }
2453
+ });
2454
+ },
2455
+ def: ''
2456
+ });
2457
+ &nbsp;
2458
+ self.addFieldType({
2459
+ name: 'slug',
2460
+ extend: 'string',
2461
+ // if field.page is true, expect a page slug (slashes allowed,
2462
+ // leading slash required). Otherwise, expect a object-style slug
2463
+ // (no slashes at all)
2464
+ convert: function (req, field, data, destination) {
2465
+ const options = {
2466
+ def: field.def
2467
+ };
2468
+ if (field.page) {
2469
+ options.allow = '/';
2470
+ }
2471
+ destination[field.name] = self.apos.util.slugify(self.apos.launder.string(data[field.name], field.def), options);
2472
+ &nbsp;
2473
+ if (field.page) {
2474
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!(destination[field.name].charAt(0) === '/')) {
2475
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = '/' + destination[field.name];</span>
2476
+ }
2477
+ // No runs of slashes
2478
+ destination[field.name] = destination[field.name].replace(/\/+/g, '/');
2479
+ // No trailing slashes (except for root)
2480
+ if (destination[field.name] !== '/') {
2481
+ destination[field.name] = destination[field.name].replace(/\/$/, '');
2482
+ }
2483
+ }
2484
+ },
2485
+ addQueryBuilder(field, query) {
2486
+ query.addBuilder(field.name, {
2487
+ finalize: function () {
2488
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (self.queryBuilderInterested(query, field.name)) {
2489
+ const criteria = <span class="cstat-no" title="statement not covered" >{};</span>
2490
+ let slugifyOptions = <span class="cstat-no" title="statement not covered" >{};</span>
2491
+ <span class="cstat-no" title="statement not covered" > if (field.page) {</span>
2492
+ <span class="cstat-no" title="statement not covered" > slugifyOptions = { allow: '/' };</span>
2493
+ }
2494
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = new RegExp(self.apos.util.regExpQuote(self.apos.util.slugify(query.get(field.name), slugifyOptions)));</span>
2495
+ <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2496
+ }
2497
+ },
2498
+ choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2499
+ <span class="cstat-no" title="statement not covered" > return self.sortedDistinct(field.name, query);</span>
2500
+ }
2501
+ });
2502
+ }
2503
+ });
2504
+ &nbsp;
2505
+ self.addFieldType({
2506
+ name: 'boolean',
2507
+ convert: function (req, field, data, destination) {
2508
+ destination[field.name] = self.apos.launder.boolean(data[field.name], field.def);
2509
+ },
2510
+ isEmpty: function (field, value) {
2511
+ return !value;
2512
+ },
2513
+ exporters: {
2514
+ string: <span class="fstat-no" title="function not covered" >fu</span>nction (req, field, object, output) {
2515
+ <span class="cstat-no" title="statement not covered" > output[field.name] = self.apos.launder.boolean(object[field.name]).toString();</span>
2516
+ }
2517
+ },
2518
+ addQueryBuilder(field, query) {
2519
+ let criteria;
2520
+ query.addBuilder(field.name, {
2521
+ finalize: function () {
2522
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (query.get(field.name) === false) {
2523
+ <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2524
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = { $ne: true };</span>
2525
+ <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2526
+ } else <span class="missing-if-branch" title="if path not taken" >I</span>if (query.get(field.name) === true) {
2527
+ <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2528
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = true;</span>
2529
+ <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2530
+ }
2531
+ },
2532
+ launder: <span class="fstat-no" title="function not covered" >fu</span>nction (b) {
2533
+ <span class="cstat-no" title="statement not covered" > return self.apos.launder.booleanOrNull(b);</span>
2534
+ },
2535
+ choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2536
+ const values = <span class="cstat-no" title="statement not covered" >query.toDistinct(field.name);</span>
2537
+ const choices = <span class="cstat-no" title="statement not covered" >[];</span>
2538
+ <span class="cstat-no" title="statement not covered" > if (_.includes(values, true)) {</span>
2539
+ <span class="cstat-no" title="statement not covered" > choices.push({</span>
2540
+ value: '1',
2541
+ label: 'apostrophe:yes'
2542
+ });
2543
+ }
2544
+ <span class="cstat-no" title="statement not covered" > if (_.includes(values, true)) {</span>
2545
+ <span class="cstat-no" title="statement not covered" > choices.push({</span>
2546
+ value: '0',
2547
+ label: 'apostrophe:no'
2548
+ });
2549
+ }
2550
+ <span class="cstat-no" title="statement not covered" > return choices;</span>
2551
+ }
2552
+ });
2553
+ }
2554
+ });
2555
+ &nbsp;
2556
+ self.addFieldType({
2557
+ name: 'color',
2558
+ <span class="fstat-no" title="function not covered" > as</span>ync convert(req, field, data, destination) {
2559
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = self.apos.launder.string(data[field.name], field.def);</span>
2560
+ &nbsp;
2561
+ <span class="cstat-no" title="statement not covered" > if (field.required &amp;&amp; (_.isUndefined(destination[field.name]) || !destination[field.name].toString().length)) {</span>
2562
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('required');</span>
2563
+ }
2564
+ &nbsp;
2565
+ const test = <span class="cstat-no" title="statement not covered" >tinycolor(destination[field.name]);</span>
2566
+ <span class="cstat-no" title="statement not covered" > if (!tinycolor(test).isValid()) {</span>
2567
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = null;</span>
2568
+ }
2569
+ },
2570
+ isEmpty: <span class="fstat-no" title="function not covered" >fu</span>nction (field, value) {
2571
+ <span class="cstat-no" title="statement not covered" > return !value.length;</span>
2572
+ }
2573
+ });
2574
+ &nbsp;
2575
+ self.addFieldType({
2576
+ name: 'checkboxes',
2577
+ <span class="fstat-no" title="function not covered" > as</span>ync convert(req, field, data, destination) {
2578
+ <span class="cstat-no" title="statement not covered" > if (typeof data[field.name] === 'string') {</span>
2579
+ <span class="cstat-no" title="statement not covered" > data[field.name] = self.apos.launder.string(data[field.name]).split(',');</span>
2580
+ &nbsp;
2581
+ <span class="cstat-no" title="statement not covered" > if (!Array.isArray(data[field.name])) {</span>
2582
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = [];</span>
2583
+ <span class="cstat-no" title="statement not covered" > return;</span>
2584
+ }
2585
+ &nbsp;
2586
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = _.filter(data[field.name], <span class="fstat-no" title="function not covered" >fu</span>nction (choice) {</span>
2587
+ <span class="cstat-no" title="statement not covered" > return _.includes(_.map(field.choices, 'value'), choice);</span>
2588
+ });
2589
+ } else {
2590
+ <span class="cstat-no" title="statement not covered" > if (!Array.isArray(data[field.name])) {</span>
2591
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = [];</span>
2592
+ } else {
2593
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = _.filter(data[field.name], <span class="fstat-no" title="function not covered" >fu</span>nction (choice) {</span>
2594
+ <span class="cstat-no" title="statement not covered" > return _.includes(_.map(field.choices, 'value'), choice);</span>
2595
+ });
2596
+ }
2597
+ }
2598
+ },
2599
+ index: <span class="fstat-no" title="function not covered" >fu</span>nction (value, field, texts) {
2600
+ const silent = <span class="cstat-no" title="statement not covered" >field.silent === undefined ? true : field.silent;</span>
2601
+ <span class="cstat-no" title="statement not covered" > texts.push({</span>
2602
+ weight: field.weight || 15,
2603
+ text: (value || []).join(' '),
2604
+ silent: silent
2605
+ });
2606
+ },
2607
+ <span class="fstat-no" title="function not covered" > ad</span>dQueryBuilder(field, query) {
2608
+ <span class="cstat-no" title="statement not covered" > return query.addBuilder(field.name, {</span>
2609
+ finalize: <span class="fstat-no" title="function not covered" >fu</span>nction () {
2610
+ <span class="cstat-no" title="statement not covered" > if (self.queryBuilderInterested(query, field.name)) {</span>
2611
+ const criteria = <span class="cstat-no" title="statement not covered" >{};</span>
2612
+ let v = <span class="cstat-no" title="statement not covered" >query.get(field.name);</span>
2613
+ // Allow programmers to pass just one value too (sanitize doesn't apply to them)
2614
+ <span class="cstat-no" title="statement not covered" > if (!Array.isArray(v)) {</span>
2615
+ <span class="cstat-no" title="statement not covered" > v = [ v ];</span>
2616
+ }
2617
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = { $in: v };</span>
2618
+ <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2619
+ }
2620
+ },
2621
+ launder: <span class="fstat-no" title="function not covered" >fu</span>nction (value) {
2622
+ // Support one or many
2623
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(value)) {</span>
2624
+ <span class="cstat-no" title="statement not covered" > return _.map(value, <span class="fstat-no" title="function not covered" >fu</span>nction (v) {</span>
2625
+ <span class="cstat-no" title="statement not covered" > return self.apos.launder.select(v, field.choices, field.def);</span>
2626
+ });
2627
+ } else {
2628
+ <span class="cstat-no" title="statement not covered" > return [ self.apos.launder.select(value, field.choices, field.def) ];</span>
2629
+ }
2630
+ },
2631
+ choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2632
+ const values = <span class="cstat-no" title="statement not covered" >await query.toDistinct(field.name);</span>
2633
+ const choices = <span class="cstat-no" title="statement not covered" >_.map(values, <span class="fstat-no" title="function not covered" >fu</span>nction (value) {</span>
2634
+ const choice = <span class="cstat-no" title="statement not covered" >_.find(field.choices, { value: value });</span>
2635
+ <span class="cstat-no" title="statement not covered" > return {</span>
2636
+ value: value,
2637
+ label: choice &amp;&amp; (choice.label || value)
2638
+ };
2639
+ });
2640
+ <span class="cstat-no" title="statement not covered" > self.apos.util.insensitiveSortByProperty(choices, 'label');</span>
2641
+ <span class="cstat-no" title="statement not covered" > return choices;</span>
2642
+ }
2643
+ });
2644
+ }
2645
+ });
2646
+ &nbsp;
2647
+ self.addFieldType({
2648
+ name: 'select',
2649
+ async convert(req, field, data, destination) {
2650
+ let choices;
2651
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof field.choices) === 'string') {
2652
+ <span class="cstat-no" title="statement not covered" > choices = await self.apos.modules[field.moduleName][field.choices](req);</span>
2653
+ } else {
2654
+ choices = field.choices;
2655
+ }
2656
+ destination[field.name] = self.apos.launder.select(data[field.name], choices, field.def);
2657
+ },
2658
+ index: <span class="fstat-no" title="function not covered" >fu</span>nction (value, field, texts) {
2659
+ const silent = <span class="cstat-no" title="statement not covered" >field.silent === undefined ? true : field.silent;</span>
2660
+ <span class="cstat-no" title="statement not covered" > texts.push({</span>
2661
+ weight: field.weight || 15,
2662
+ text: value,
2663
+ silent: silent
2664
+ });
2665
+ },
2666
+ addQueryBuilder(field, query) {
2667
+ return query.addBuilder(field.name, {
2668
+ finalize: function () {
2669
+ if (self.queryBuilderInterested(query, field.name)) {
2670
+ const criteria = {};
2671
+ let v = query.get(field.name);
2672
+ // Allow programmers to pass just one value too (sanitize doesn't apply to them)
2673
+ if (!Array.isArray(v)) {
2674
+ v = [ v ];
2675
+ }
2676
+ criteria[field.name] = { $in: v };
2677
+ query.and(criteria);
2678
+ }
2679
+ },
2680
+ launder: <span class="fstat-no" title="function not covered" >fu</span>nction (value) {
2681
+ // Support one or many
2682
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(value)) {</span>
2683
+ <span class="cstat-no" title="statement not covered" > return _.map(value, <span class="fstat-no" title="function not covered" >fu</span>nction (v) {</span>
2684
+ <span class="cstat-no" title="statement not covered" > return self.apos.launder.select(v, field.choices, null);</span>
2685
+ });
2686
+ } else {
2687
+ <span class="cstat-no" title="statement not covered" > value = (typeof field.choices) === 'string'</span>
2688
+ ? self.apos.launder.string(value)
2689
+ : self.apos.launder.select(value, field.choices, null);
2690
+ <span class="cstat-no" title="statement not covered" > if (value === null) {</span>
2691
+ <span class="cstat-no" title="statement not covered" > return null;</span>
2692
+ }
2693
+ <span class="cstat-no" title="statement not covered" > return [ value ];</span>
2694
+ }
2695
+ },
2696
+ choices: async function () {
2697
+ let allChoices;
2698
+ const values = await query.toDistinct(field.name);
2699
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof field.choices) === 'string') {
2700
+ const req = <span class="cstat-no" title="statement not covered" >self.apos.task.getReq();</span>
2701
+ <span class="cstat-no" title="statement not covered" > allChoices = await self.apos.modules[field.moduleName][field.choices](req);</span>
2702
+ } else {
2703
+ allChoices = field.choices;
2704
+ }
2705
+ const choices = _.map(values, function (value) {
2706
+ const choice = _.find(allChoices, { value: value });
2707
+ return {
2708
+ value: value,
2709
+ label: choice &amp;&amp; (choice.label || <span class="branch-2 cbranch-no" title="branch not covered" >value)</span>
2710
+ };
2711
+ });
2712
+ self.apos.util.insensitiveSortByProperty(choices, 'label');
2713
+ return choices;
2714
+ }
2715
+ });
2716
+ }
2717
+ });
2718
+ &nbsp;
2719
+ self.addFieldType({
2720
+ name: 'radio',
2721
+ extend: 'select'
2722
+ });
2723
+ &nbsp;
2724
+ self.addFieldType({
2725
+ name: 'integer',
2726
+ vueComponent: 'AposInputString',
2727
+ async convert(req, field, data, destination) {
2728
+ destination[field.name] = self.apos.launder.integer(data[field.name], field.def, field.min, field.max);
2729
+ if (field.required &amp;&amp; ((data[field.name] == null) || !data[field.name].toString().length)) {
2730
+ throw self.apos.error('required');
2731
+ }
2732
+ if (data[field.name] &amp;&amp; isNaN(parseFloat(data[field.name]))) {
2733
+ throw self.apos.error('invalid');
2734
+ }
2735
+ // This makes it possible to have a field that is not required, but min / max defined.
2736
+ // This allows the form to be saved and sets the value to null if no value was given by
2737
+ // the user.
2738
+ if (!data[field.name] &amp;&amp; data[field.name] !== 0) {
2739
+ destination[field.name] = null;
2740
+ }
2741
+ },
2742
+ addQueryBuilder(field, query) {
2743
+ return query.addBuilder(field.name, {
2744
+ finalize: function () {
2745
+ let criteria;
2746
+ const value = query.get(field.name);
2747
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (value !== undefined &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >value !== null)</span> {
2748
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(value) &amp;&amp; value.length === 2) {</span>
2749
+ <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2750
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = {</span>
2751
+ $gte: value[0],
2752
+ $lte: value[1]
2753
+ };
2754
+ } else {
2755
+ <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2756
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = self.apos.launder.integer(value);</span>
2757
+ <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2758
+ }
2759
+ }
2760
+ },
2761
+ choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2762
+ <span class="cstat-no" title="statement not covered" > return self.sortedDistinct(field.name, query);</span>
2763
+ },
2764
+ launder: <span class="fstat-no" title="function not covered" >fu</span>nction (s) {
2765
+ <span class="cstat-no" title="statement not covered" > return self.apos.launder.integer(s, null);</span>
2766
+ }
2767
+ });
2768
+ }
2769
+ });
2770
+ &nbsp;
2771
+ self.addFieldType({
2772
+ name: 'float',
2773
+ vueComponent: 'AposInputString',
2774
+ async convert(req, field, data, destination) {
2775
+ destination[field.name] = self.apos.launder.float(data[field.name], field.def, field.min, field.max);
2776
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (field.required &amp;&amp; (_.isUndefined(data[field.name]) || !data[field.name].toString().length)) {
2777
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('required');</span>
2778
+ }
2779
+ if (data[field.name] &amp;&amp; isNaN(parseFloat(data[field.name]))) {
2780
+ throw self.apos.error('invalid');
2781
+ }
2782
+ if (!data[field.name] &amp;&amp; data[field.name] !== 0) {
2783
+ destination[field.name] = null;
2784
+ }
2785
+ },
2786
+ <span class="fstat-no" title="function not covered" > ad</span>dQueryBuilder(field, query) {
2787
+ <span class="cstat-no" title="statement not covered" > return query.addBuilder(field.name, {</span>
2788
+ finalize: <span class="fstat-no" title="function not covered" >fu</span>nction () {
2789
+ let criteria;
2790
+ const value = <span class="cstat-no" title="statement not covered" >query.get(field.name);</span>
2791
+ <span class="cstat-no" title="statement not covered" > if (value !== undefined &amp;&amp; value !== null) {</span>
2792
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(value) &amp;&amp; value.length === 2) {</span>
2793
+ <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2794
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = {</span>
2795
+ $gte: value[0],
2796
+ $lte: value[1]
2797
+ };
2798
+ } else {
2799
+ <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2800
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = self.apos.launder.float(value);</span>
2801
+ <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2802
+ }
2803
+ }
2804
+ },
2805
+ choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2806
+ <span class="cstat-no" title="statement not covered" > return self.sortedDistinct(field.name, query);</span>
2807
+ }
2808
+ });
2809
+ }
2810
+ });
2811
+ &nbsp;
2812
+ self.addFieldType({
2813
+ name: 'email',
2814
+ vueComponent: 'AposInputString',
2815
+ convert: <span class="fstat-no" title="function not covered" >fu</span>nction (req, field, data, destination) {
2816
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = self.apos.launder.string(data[field.name]);</span>
2817
+ <span class="cstat-no" title="statement not covered" > if (!data[field.name]) {</span>
2818
+ <span class="cstat-no" title="statement not covered" > if (field.required) {</span>
2819
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('required');</span>
2820
+ }
2821
+ } else {
2822
+ // regex source: https://emailregex.com/
2823
+ const matches = <span class="cstat-no" title="statement not covered" >data[field.name].match(/^(([^&lt;&gt;()[\]\\.,;:\s@"]+(\.[^&lt;&gt;()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);</span>
2824
+ <span class="cstat-no" title="statement not covered" > if (!matches) {</span>
2825
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('invalid');</span>
2826
+ }
2827
+ }
2828
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = data[field.name];</span>
2829
+ }
2830
+ });
2831
+ &nbsp;
2832
+ self.addFieldType({
2833
+ name: 'url',
2834
+ vueComponent: 'AposInputString',
2835
+ async convert(req, field, data, destination) {
2836
+ destination[field.name] = self.apos.launder.url(data[field.name], field.def, true);
2837
+ },
2838
+ diffable: <span class="fstat-no" title="function not covered" >fu</span>nction (value) {
2839
+ // URLs are fine to diff and display
2840
+ <span class="cstat-no" title="statement not covered" > if (typeof value === 'string') {</span>
2841
+ <span class="cstat-no" title="statement not covered" > return value;</span>
2842
+ }
2843
+ // always return a valid string
2844
+ <span class="cstat-no" title="statement not covered" > return '';</span>
2845
+ },
2846
+ addQueryBuilder(field, query) {
2847
+ query.addBuilder(field.name, {
2848
+ finalize: function () {
2849
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (self.queryBuilderInterested(query, field.name)) {
2850
+ const criteria = <span class="cstat-no" title="statement not covered" >{};</span>
2851
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = new RegExp(self.apos.util.regExpQuote(query.get(field.name)), 'i');</span>
2852
+ <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2853
+ }
2854
+ },
2855
+ launder: <span class="fstat-no" title="function not covered" >fu</span>nction (s) {
2856
+ // Don't be too strict, just enough that we can safely pass it to
2857
+ // regExpQuote, partial URLs are welcome
2858
+ <span class="cstat-no" title="statement not covered" > return self.apos.launder.string(s);</span>
2859
+ },
2860
+ choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2861
+ <span class="cstat-no" title="statement not covered" > return self.sortDistinct(field.name, query);</span>
2862
+ }
2863
+ });
2864
+ }
2865
+ });
2866
+ &nbsp;
2867
+ self.addFieldType({
2868
+ name: 'date',
2869
+ vueComponent: 'AposInputString',
2870
+ <span class="fstat-no" title="function not covered" > as</span>ync convert(req, field, data, destination) {
2871
+ const newDateVal = <span class="cstat-no" title="statement not covered" >data[field.name];</span>
2872
+ <span class="cstat-no" title="statement not covered" > if (!newDateVal &amp;&amp; destination[field.name]) {</span>
2873
+ // Allow date fields to be unset.
2874
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = null;</span>
2875
+ <span class="cstat-no" title="statement not covered" > return;</span>
2876
+ }
2877
+ <span class="cstat-no" title="statement not covered" > if (field.min &amp;&amp; newDateVal &amp;&amp; (newDateVal &lt; field.min)) {</span>
2878
+ // If the min requirement isn't met, leave as-is.
2879
+ <span class="cstat-no" title="statement not covered" > return;</span>
2880
+ }
2881
+ <span class="cstat-no" title="statement not covered" > if (field.max &amp;&amp; newDateVal &amp;&amp; (newDateVal &gt; field.max)) {</span>
2882
+ // If the max requirement isn't met, leave as-is.
2883
+ <span class="cstat-no" title="statement not covered" > return;</span>
2884
+ }
2885
+ &nbsp;
2886
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = self.apos.launder.date(newDateVal, field.def);</span>
2887
+ },
2888
+ validate: <span class="fstat-no" title="function not covered" >fu</span>nction (field, options, warn, fail) {
2889
+ <span class="cstat-no" title="statement not covered" > if (field.max &amp;&amp; !field.max.match(dateRegex)) {</span>
2890
+ <span class="cstat-no" title="statement not covered" > fail('Property "max" must be in the date format, YYYY-MM-DD');</span>
2891
+ }
2892
+ <span class="cstat-no" title="statement not covered" > if (field.min &amp;&amp; !field.min.match(dateRegex)) {</span>
2893
+ <span class="cstat-no" title="statement not covered" > fail('Property "min" must be in the date format, YYYY-MM-DD');</span>
2894
+ }
2895
+ },
2896
+ <span class="fstat-no" title="function not covered" > ad</span>dQueryBuilder(field, query) {
2897
+ <span class="cstat-no" title="statement not covered" > return query.addBuilder(field.name, {</span>
2898
+ finalize: <span class="fstat-no" title="function not covered" >fu</span>nction () {
2899
+ <span class="cstat-no" title="statement not covered" > if (self.queryBuilderInterested(query, field.name)) {</span>
2900
+ const value = <span class="cstat-no" title="statement not covered" >query.get(field.name);</span>
2901
+ let criteria;
2902
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(value)) {</span>
2903
+ <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2904
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = {</span>
2905
+ $gte: value[0],
2906
+ $lte: value[1]
2907
+ };
2908
+ } else {
2909
+ <span class="cstat-no" title="statement not covered" > criteria = {};</span>
2910
+ <span class="cstat-no" title="statement not covered" > criteria[field.name] = self.apos.launder.date(value);</span>
2911
+ <span class="cstat-no" title="statement not covered" > query.and(criteria);</span>
2912
+ }
2913
+ }
2914
+ },
2915
+ launder: <span class="fstat-no" title="function not covered" >fu</span>nction (value) {
2916
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(value) &amp;&amp; value.length === 2) {</span>
2917
+ <span class="cstat-no" title="statement not covered" > if (value[0] instanceof Date) {</span>
2918
+ <span class="cstat-no" title="statement not covered" > value[0] = dayjs(value[0]).format('YYYY-MM-DD');</span>
2919
+ }
2920
+ <span class="cstat-no" title="statement not covered" > if (value[1] instanceof Date) {</span>
2921
+ <span class="cstat-no" title="statement not covered" > value[1] = dayjs(value[1]).format('YYYY-MM-DD');</span>
2922
+ }
2923
+ <span class="cstat-no" title="statement not covered" > value[0] = self.apos.launder.date(value[0]);</span>
2924
+ <span class="cstat-no" title="statement not covered" > value[1] = self.apos.launder.date(value[1]);</span>
2925
+ <span class="cstat-no" title="statement not covered" > return value;</span>
2926
+ } else {
2927
+ <span class="cstat-no" title="statement not covered" > if (value instanceof Date) {</span>
2928
+ <span class="cstat-no" title="statement not covered" > value = dayjs(value).format('YYYY-MM-DD');</span>
2929
+ }
2930
+ <span class="cstat-no" title="statement not covered" > return self.apos.launder.date(value, null);</span>
2931
+ }
2932
+ },
2933
+ choices: <span class="fstat-no" title="function not covered" >as</span>ync function () {
2934
+ <span class="cstat-no" title="statement not covered" > return self.sortDistinct(field.name, query);</span>
2935
+ }
2936
+ });
2937
+ }
2938
+ });
2939
+ &nbsp;
2940
+ self.addFieldType({
2941
+ name: 'time',
2942
+ vueComponent: 'AposInputString',
2943
+ <span class="fstat-no" title="function not covered" > as</span>ync convert(req, field, data, destination) {
2944
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = self.apos.launder.time(data[field.name], field.def);</span>
2945
+ }
2946
+ });
2947
+ &nbsp;
2948
+ self.addFieldType({
2949
+ name: 'dateAndTime',
2950
+ vueComponent: 'AposInputDateAndTime',
2951
+ convert (req, field, data, destination) {
2952
+ destination[field.name] = data[field.name]
2953
+ ? self.apos.launder.date(data[field.name])
2954
+ : null;
2955
+ }
2956
+ });
2957
+ &nbsp;
2958
+ self.addFieldType({
2959
+ name: 'password',
2960
+ async convert(req, field, data, destination) {
2961
+ // This is the only field type that we never update unless
2962
+ // there is actually a new value — a blank password is not cool. -Tom
2963
+ if (data[field.name]) {
2964
+ destination[field.name] = self.apos.launder.string(data[field.name], field.def);
2965
+ &nbsp;
2966
+ destination[field.name] = checkStringLength(destination[field.name], field.min, field.max);
2967
+ }
2968
+ }
2969
+ });
2970
+ &nbsp;
2971
+ self.addFieldType({
2972
+ name: 'group' // visual grouping only
2973
+ });
2974
+ &nbsp;
2975
+ self.addFieldType({
2976
+ name: 'range',
2977
+ vueComponent: 'AposInputRange',
2978
+ <span class="fstat-no" title="function not covered" > as</span>ync convert(req, field, data, destination) {
2979
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = self.apos.launder.float(data[field.name], field.def, field.min, field.max);</span>
2980
+ <span class="cstat-no" title="statement not covered" > if (field.required &amp;&amp; (_.isUndefined(data[field.name]) || !data[field.name].toString().length)) {</span>
2981
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('required');</span>
2982
+ }
2983
+ <span class="cstat-no" title="statement not covered" > if (data[field.name] &amp;&amp; isNaN(parseFloat(data[field.name]))) {</span>
2984
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('invalid');</span>
2985
+ }
2986
+ // Allow for ranges to go unset
2987
+ // `min` here does not imply requirement, it is the minimum value the range UI will represent
2988
+ <span class="cstat-no" title="statement not covered" > if (</span>
2989
+ !data[field.name] ||
2990
+ data[field.name] &lt; field.min ||
2991
+ data[field.name] &gt; field.max
2992
+ ) {
2993
+ <span class="cstat-no" title="statement not covered" > destination[field.name] = null;</span>
2994
+ }
2995
+ },
2996
+ validate: <span class="fstat-no" title="function not covered" >fu</span>nction (field, options, warn, fail) {
2997
+ <span class="cstat-no" title="statement not covered" > if (!field.min &amp;&amp; field.min !== 0) {</span>
2998
+ <span class="cstat-no" title="statement not covered" > fail('Property "min" must be set.');</span>
2999
+ }
3000
+ <span class="cstat-no" title="statement not covered" > if (!field.max &amp;&amp; field.max !== 0) {</span>
3001
+ <span class="cstat-no" title="statement not covered" > fail('Property "max" must be set.');</span>
3002
+ }
3003
+ <span class="cstat-no" title="statement not covered" > if (typeof field.max !== 'number') {</span>
3004
+ <span class="cstat-no" title="statement not covered" > fail('Property "max" must be a number');</span>
3005
+ }
3006
+ <span class="cstat-no" title="statement not covered" > if (typeof field.min !== 'number') {</span>
3007
+ <span class="cstat-no" title="statement not covered" > fail('Property "min" must be a number');</span>
3008
+ }
3009
+ <span class="cstat-no" title="statement not covered" > if (field.step &amp;&amp; typeof field.step !== 'number') {</span>
3010
+ <span class="cstat-no" title="statement not covered" > fail('Property "step" must be a number.');</span>
3011
+ }
3012
+ <span class="cstat-no" title="statement not covered" > if (field.unit &amp;&amp; typeof field.unit !== 'string') {</span>
3013
+ <span class="cstat-no" title="statement not covered" > fail('Property "unit" must be a string.');</span>
3014
+ }
3015
+ }
3016
+ });
3017
+ &nbsp;
3018
+ self.addFieldType({
3019
+ name: 'array',
3020
+ async convert(req, field, data, destination) {
3021
+ const schema = field.schema;
3022
+ data = data[field.name];
3023
+ if (!Array.isArray(data)) {
3024
+ data = [];
3025
+ }
3026
+ const results = [];
3027
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (field.limit &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >data.length &gt; field.limit)</span> {
3028
+ <span class="cstat-no" title="statement not covered" > data = data.slice(0, field.limit);</span>
3029
+ }
3030
+ const errors = [];
3031
+ for (const datum of data) {
3032
+ const result = {};
3033
+ result._id = self.apos.launder.id(datum._id) || self.apos.util.generateId();
3034
+ result.metaType = 'arrayItem';
3035
+ result.scopedArrayName = field.scopedArrayName;
3036
+ try {
3037
+ await self.convert(req, schema, datum, result);
3038
+ } catch (e) {
3039
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(e)) {</span>
3040
+ <span class="cstat-no" title="statement not covered" > for (const error of e) {</span>
3041
+ <span class="cstat-no" title="statement not covered" > error.path = `${result._id}.${error.path}`;</span>
3042
+ <span class="cstat-no" title="statement not covered" > errors.push(error);</span>
3043
+ }
3044
+ } else {
3045
+ <span class="cstat-no" title="statement not covered" > throw e;</span>
3046
+ }
3047
+ }
3048
+ results.push(result);
3049
+ }
3050
+ destination[field.name] = results;
3051
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (field.required &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!results.length)</span> {
3052
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('required');</span>
3053
+ }
3054
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ((field.min !== undefined) &amp;&amp; (<span class="branch-1 cbranch-no" title="branch not covered" >results.length &lt; field.min)</span>) {
3055
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('min');</span>
3056
+ }
3057
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ((field.max !== undefined) &amp;&amp; (<span class="branch-1 cbranch-no" title="branch not covered" >results.length &gt; field.max)</span>) {
3058
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('max');</span>
3059
+ }
3060
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (errors.length) {
3061
+ <span class="cstat-no" title="statement not covered" > throw errors;</span>
3062
+ }
3063
+ },
3064
+ isEmpty: <span class="fstat-no" title="function not covered" >fu</span>nction (field, value) {
3065
+ <span class="cstat-no" title="statement not covered" > return (!Array.isArray(value)) || (!value.length);</span>
3066
+ },
3067
+ index: <span class="fstat-no" title="function not covered" >fu</span>nction (value, field, texts) {
3068
+ <span class="cstat-no" title="statement not covered" > _.each(value || [], <span class="fstat-no" title="function not covered" >fu</span>nction (item) {</span>
3069
+ <span class="cstat-no" title="statement not covered" > self.apos.schema.indexFields(field.schema, item, texts);</span>
3070
+ });
3071
+ },
3072
+ validate: function (field, options, warn, fail) {
3073
+ for (const subField of field.schema || <span class="branch-1 cbranch-no" title="branch not covered" >field.fields.add)</span> {
3074
+ self.validateField(subField, options);
3075
+ }
3076
+ },
3077
+ register: function (metaType, type, field) {
3078
+ const localArrayName = field.arrayName || field.name;
3079
+ field.scopedArrayName = `${metaType}.${type}.${localArrayName}`;
3080
+ self.arrayManagers[field.scopedArrayName] = {
3081
+ schema: field.schema
3082
+ };
3083
+ self.register(metaType, type, field.schema);
3084
+ },
3085
+ isEqual(req, field, one, two) {
3086
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!(one[field.name] &amp;&amp; two[field.name])) {
3087
+ <span class="cstat-no" title="statement not covered" > return !(one[field.name] || two[field.name]);</span>
3088
+ }
3089
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (one[field.name].length !== two[field.name].length) {
3090
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3091
+ }
3092
+ for (let i = 0; (i &lt; one.length); i++) {
3093
+ <span class="cstat-no" title="statement not covered" > if (!self.isEqual(req, field.schema, one[field.name][i], two[field.name][i])) {</span>
3094
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3095
+ }
3096
+ }
3097
+ return true;
3098
+ },
3099
+ def: []
3100
+ });
3101
+ &nbsp;
3102
+ self.addFieldType({
3103
+ name: 'object',
3104
+ async convert(req, field, data, destination) {
3105
+ data = data[field.name];
3106
+ const schema = field.schema;
3107
+ const errors = [];
3108
+ const result = {
3109
+ _id: self.apos.launder.id(data &amp;&amp; data._id) || self.apos.util.generateId()
3110
+ };
3111
+ if (data == null || typeof data !== 'object' || Array.isArray(data)) {
3112
+ data = {};
3113
+ }
3114
+ try {
3115
+ await self.convert(req, schema, data, result);
3116
+ } catch (e) {
3117
+ <span class="cstat-no" title="statement not covered" > for (const error of e) {</span>
3118
+ <span class="cstat-no" title="statement not covered" > errors.push({</span>
3119
+ path: error.path,
3120
+ error: error.error
3121
+ });
3122
+ }
3123
+ }
3124
+ result.metaType = 'objectItem';
3125
+ result.scopedObjectName = field.scopedObjectName;
3126
+ destination[field.name] = result;
3127
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (errors.length) {
3128
+ <span class="cstat-no" title="statement not covered" > throw errors;</span>
3129
+ }
3130
+ },
3131
+ register: function (metaType, type, field) {
3132
+ const localObjectName = field.objectName || field.name;
3133
+ field.scopedObjectName = `${metaType}.${type}.${localObjectName}`;
3134
+ self.objectManagers[field.scopedObjectName] = {
3135
+ schema: field.schema
3136
+ };
3137
+ self.register(metaType, type, field.schema);
3138
+ },
3139
+ validate: function (field, options, warn, fail) {
3140
+ for (const subField of field.schema || <span class="branch-1 cbranch-no" title="branch not covered" >field.fields.add)</span> {
3141
+ self.validateField(subField, options);
3142
+ }
3143
+ },
3144
+ <span class="fstat-no" title="function not covered" > is</span>Equal(req, field, one, two) {
3145
+ <span class="cstat-no" title="statement not covered" > if (one &amp;&amp; (!two)) {</span>
3146
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3147
+ }
3148
+ <span class="cstat-no" title="statement not covered" > if (two &amp;&amp; (!one)) {</span>
3149
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3150
+ }
3151
+ <span class="cstat-no" title="statement not covered" > if (!(one || two)) {</span>
3152
+ <span class="cstat-no" title="statement not covered" > return true;</span>
3153
+ }
3154
+ <span class="cstat-no" title="statement not covered" > if (one[field.name] &amp;&amp; (!two[field.name])) {</span>
3155
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3156
+ }
3157
+ <span class="cstat-no" title="statement not covered" > if (two[field.name] &amp;&amp; (!one[field.name])) {</span>
3158
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3159
+ }
3160
+ <span class="cstat-no" title="statement not covered" > if (!(one[field.name] || two[field.name])) {</span>
3161
+ <span class="cstat-no" title="statement not covered" > return true;</span>
3162
+ }
3163
+ <span class="cstat-no" title="statement not covered" > return self.isEqual(req, field.schema, one[field.name], two[field.name]);</span>
3164
+ },
3165
+ def: {}
3166
+ });
3167
+ &nbsp;
3168
+ self.addFieldType({
3169
+ name: 'relationship',
3170
+ // Validate a relationship field, copying from `data[field.name]` to
3171
+ // `object[field.name]`. If the relationship is named `_product`, then
3172
+ // `data._product` should be an array of product docs.
3173
+ // These doc objects must at least have an _id property.
3174
+ //
3175
+ // Alternatively, entries in `data._product` may simply be
3176
+ // `_id` strings or `title` strings. Titles are compared in a
3177
+ // tolerant manner. This is useful for CSV input. Strings may
3178
+ // be mixed with actual docs in a single array.
3179
+ //
3180
+ // If the relationship field has a `fields` option, then each
3181
+ // doc object may also have a `_fields` property which
3182
+ // will be validated against the schema in `fields`.
3183
+ //
3184
+ // The result in `object[field.name]` will always be an array
3185
+ // of zero or more related docs, containing only those that
3186
+ // actually exist in the database and can be fetched by this user,
3187
+ // in the same order specified in `data[field.name]`.
3188
+ //
3189
+ // Actual storage to the permanent idsStorage and fieldsStorage
3190
+ // properties is handled at a lower level in a beforeSave
3191
+ // handler of the doc-type module.
3192
+ &nbsp;
3193
+ async convert(req, field, data, destination) {
3194
+ const manager = self.apos.doc.getManager(field.withType);
3195
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!manager) {
3196
+ <span class="cstat-no" title="statement not covered" > throw Error('relationship with type ' + field.withType + ' unrecognized');</span>
3197
+ }
3198
+ let input = data[field.name];
3199
+ if (input == null) {
3200
+ input = [];
3201
+ }
3202
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof input) === 'string') {
3203
+ // Handy in CSV: allows titles or _ids
3204
+ <span class="cstat-no" title="statement not covered" > input = input.split(/\s*,\s*/);</span>
3205
+ }
3206
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (field.min &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >field.min &gt; input.length)</span> {
3207
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('min', `Minimum ${field.withType} required not reached.`);</span>
3208
+ }
3209
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (field.max &amp;&amp; field.max &lt; input.length) {
3210
+ <span class="cstat-no" title="statement not covered" > throw self.apos.error('max', `Maximum ${field.withType} required reached.`);</span>
3211
+ }
3212
+ const ids = [];
3213
+ const titlesOrIds = [];
3214
+ for (const item of input) {
3215
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof item) === 'string') {
3216
+ <span class="cstat-no" title="statement not covered" > titlesOrIds.push(item);</span>
3217
+ } else {
3218
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (item &amp;&amp; ((typeof item._id) === 'string')) {
3219
+ ids.push(item._id);
3220
+ }
3221
+ }
3222
+ }
3223
+ const clauses = [];
3224
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (titlesOrIds.length) {
3225
+ <span class="cstat-no" title="statement not covered" > clauses.push({</span>
3226
+ titleSortified: {
3227
+ $in: titlesOrIds.map(<span class="fstat-no" title="function not covered" >ti</span>tleOrId =&gt; <span class="cstat-no" title="statement not covered" >self.apos.util.sortify(titleOrId))</span>
3228
+ }
3229
+ });
3230
+ }
3231
+ if (ids.length) {
3232
+ clauses.push({
3233
+ _id: {
3234
+ $in: ids
3235
+ }
3236
+ });
3237
+ }
3238
+ if (!clauses.length) {
3239
+ destination[field.name] = [];
3240
+ return;
3241
+ }
3242
+ const results = await manager.find(req, { $or: clauses }).relationships(false).toArray();
3243
+ // Must maintain input order. Also discard things not actually found in the db
3244
+ const actualDocs = [];
3245
+ for (const item of input) {
3246
+ <span class="missing-if-branch" title="if path not taken" >I</span>if ((typeof item) === 'string') {
3247
+ const result = <span class="cstat-no" title="statement not covered" >results.find(<span class="fstat-no" title="function not covered" >re</span>sult =&gt; <span class="cstat-no" title="statement not covered" >(result.title === item) || (result._id === item))</span>;</span>
3248
+ <span class="cstat-no" title="statement not covered" > if (result) {</span>
3249
+ <span class="cstat-no" title="statement not covered" > actualDocs.push(result);</span>
3250
+ }
3251
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>if ((item &amp;&amp; ((typeof item._id) === 'string'))) {
3252
+ const result = results.find(doc =&gt; (doc._id === item._id));
3253
+ if (result) {
3254
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (field.schema) {
3255
+ result._fields = {};
3256
+ if (item &amp;&amp; ((typeof item._fields === 'object'))) {
3257
+ await self.convert(req, field.schema, item._fields || <span class="branch-1 cbranch-no" title="branch not covered" >{},</span> result._fields);
3258
+ }
3259
+ }
3260
+ actualDocs.push(result);
3261
+ }
3262
+ }
3263
+ }
3264
+ destination[field.name] = actualDocs;
3265
+ },
3266
+ &nbsp;
3267
+ relate: async function (req, field, objects, options) {
3268
+ return self.relationshipDriver(req, joinr.byArray, false, objects, field.idsStorage, field.fieldsStorage, field.name, options);
3269
+ },
3270
+ &nbsp;
3271
+ addQueryBuilder(field, query) {
3272
+ &nbsp;
3273
+ addOperationQueryBuilder('', '$in');
3274
+ addOperationQueryBuilder('And', '$all');
3275
+ self.addRelationshipSlugQueryBuilder(field, query, '');
3276
+ self.addRelationshipSlugQueryBuilder(field, query, 'And');
3277
+ &nbsp;
3278
+ function addOperationQueryBuilder(suffix, operator) {
3279
+ return query.addBuilder(field.name + suffix, {
3280
+ finalize: function () {
3281
+ &nbsp;
3282
+ if (!self.queryBuilderInterested(query, field.name + suffix)) {
3283
+ return;
3284
+ }
3285
+ &nbsp;
3286
+ const value = query.get(field.name + suffix);
3287
+ const criteria = {};
3288
+ // Even programmers appreciate shortcuts, so it's not enough that the
3289
+ // sanitizer (which doesn't apply to programmatic use) accepts these
3290
+ if (Array.isArray(value)) {
3291
+ criteria[field.idsStorage] = {};
3292
+ criteria[field.idsStorage][operator] = value.map(self.apos.doc.toAposDocId);
3293
+ } else if (value === 'none') {
3294
+ criteria.$or = [];
3295
+ let clause = {};
3296
+ clause[field.idsStorage] = null;
3297
+ criteria.$or.push(clause);
3298
+ clause = {};
3299
+ clause[field.idsStorage] = { $exists: 0 };
3300
+ criteria.$or.push(clause);
3301
+ clause = {};
3302
+ clause[field.idsStorage + '.0'] = { $exists: 0 };
3303
+ criteria.$or.push(clause);
3304
+ } else {
3305
+ criteria[field.idsStorage] = { $in: [ self.apos.doc.toAposDocId(value) ] };
3306
+ }
3307
+ query.and(criteria);
3308
+ },
3309
+ choices: self.relationshipQueryBuilderChoices(field, query, '_id'),
3310
+ launder: relationshipQueryBuilderLaunder
3311
+ });
3312
+ }
3313
+ },
3314
+ validate: function (field, options, warn, fail) {
3315
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!field.name.match(/^_/)) {
3316
+ <span class="cstat-no" title="statement not covered" > warn('Name of relationship field does not start with _. This is permitted for bc but it will fill your database with duplicate outdated data. Please fix it.');</span>
3317
+ }
3318
+ if (!field.idsStorage) {
3319
+ // Supply reasonable value
3320
+ field.idsStorage = field.name.replace(/^_/, '') + 'Ids';
3321
+ }
3322
+ if (!field.withType) {
3323
+ // Try to supply reasonable value based on relationship name. Relationship name will be plural,
3324
+ // so consider that too
3325
+ const withType = field.name.replace(/^_/, '').replace(/s$/, '');
3326
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!_.find(self.apos.doc.managers, { name: withType })) {
3327
+ <span class="cstat-no" title="statement not covered" > fail('withType property is missing. Hint: it must match the name of a doc type module. Or omit it and give your relationship the same name as the other type, with a leading _ and optional trailing s.');</span>
3328
+ }
3329
+ field.withType = withType;
3330
+ }
3331
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!field.withType) {
3332
+ <span class="cstat-no" title="statement not covered" > fail('withType property is missing. Hint: it must match the name of a doc type module.');</span>
3333
+ }
3334
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(field.withType)) {
3335
+ <span class="cstat-no" title="statement not covered" > _.each(field.withType, <span class="fstat-no" title="function not covered" >fu</span>nction (type) {</span>
3336
+ <span class="cstat-no" title="statement not covered" > lintType(type);</span>
3337
+ });
3338
+ } else {
3339
+ lintType(field.withType);
3340
+ const withTypeManager = self.apos.doc.getManager(field.withType);
3341
+ field.editor = field.editor || withTypeManager.options.relationshipEditor;
3342
+ field.postprocessor = field.postprocessor || withTypeManager.options.relationshipPostprocessor;
3343
+ field.editorLabel = field.editorLabel || withTypeManager.options.relationshipEditorLabel;
3344
+ field.editorIcon = field.editorIcon || withTypeManager.options.relationshipEditorIcon;
3345
+ &nbsp;
3346
+ if (!field.schema &amp;&amp; !Array.isArray(field.withType)) {
3347
+ const fieldsOption = withTypeManager.options.relationshipFields;
3348
+ const fields = fieldsOption &amp;&amp; fieldsOption.add;
3349
+ field.fields = fields &amp;&amp; klona(fields);
3350
+ field.schema = self.fieldsToArray(`Relationship field ${field.name}`, field.fields);
3351
+ }
3352
+ }
3353
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (field.schema &amp;&amp; !field.fieldsStorage) {
3354
+ field.fieldsStorage = field.name.replace(/^_/, '') + 'Fields';
3355
+ }
3356
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (field.schema &amp;&amp; !Array.isArray(field.schema)) {
3357
+ <span class="cstat-no" title="statement not covered" > fail('schema property should be an array if present at this stage');</span>
3358
+ }
3359
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (field.filters) {
3360
+ <span class="cstat-no" title="statement not covered" > fail('"filters" property should be changed to "builders" for 3.x');</span>
3361
+ }
3362
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (field.builders &amp;&amp; field.builders.projection) {
3363
+ <span class="cstat-no" title="statement not covered" > fail('"projection" sub-property should be changed to "project" for 3.x');</span>
3364
+ }
3365
+ function lintType(type) {
3366
+ type = self.apos.doc.normalizeType(type);
3367
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!_.find(self.apos.doc.managers, { name: type })) {
3368
+ <span class="cstat-no" title="statement not covered" > fail('withType property, ' + type + ', does not match the name of any piece or page type module.');</span>
3369
+ }
3370
+ }
3371
+ },
3372
+ isEqual(req, field, one, two) {
3373
+ const ids1 = one[field.idsStorage] || [];
3374
+ const ids2 = two[field.idsStorage] || [];
3375
+ if (!_.isEqual(ids1, ids2)) {
3376
+ return false;
3377
+ }
3378
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (field.fieldsStorage) {
3379
+ const fields1 = one[field.fieldsStorage] || {};
3380
+ const fields2 = two[field.fieldsStorage] || {};
3381
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!_.isEqual(fields1, fields2)) {
3382
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3383
+ }
3384
+ }
3385
+ return true;
3386
+ }
3387
+ });
3388
+ &nbsp;
3389
+ self.addFieldType({
3390
+ name: 'relationshipReverse',
3391
+ vueComponent: false,
3392
+ relate: async function (req, field, objects, options) {
3393
+ return self.relationshipDriver(req, joinr.byArrayReverse, true, objects, field.idsStorage, field.fieldsStorage, field.name, options);
3394
+ },
3395
+ validate: function (field, options, warn, fail) {
3396
+ let forwardRelationship;
3397
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!field.name.match(/^_/)) {
3398
+ <span class="cstat-no" title="statement not covered" > warn('Name of relationship field does not start with _. This is permitted for bc but it will fill your database with duplicate outdated data. Please fix it.');</span>
3399
+ }
3400
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!field.withType) {
3401
+ // Try to supply reasonable value based on relationship name
3402
+ const withType = <span class="cstat-no" title="statement not covered" >field.name.replace(/^_/, '').replace(/s$/, '');</span>
3403
+ <span class="cstat-no" title="statement not covered" > if (!_.find(self.apos.doc.managers, { name: withType })) {</span>
3404
+ <span class="cstat-no" title="statement not covered" > fail('withType property is missing. Hint: it must match the name of a piece or page type module. Or omit it and give your relationship the same name as the other type, with a leading _ and optional trailing s.');</span>
3405
+ }
3406
+ <span class="cstat-no" title="statement not covered" > field.withType = withType;</span>
3407
+ }
3408
+ const otherModule = _.find(self.apos.doc.managers, { name: self.apos.doc.normalizeType(field.withType) });
3409
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!otherModule) {
3410
+ <span class="cstat-no" title="statement not covered" > fail('withType property, ' + field.withType + ', does not match the name of a piece or page type module.');</span>
3411
+ }
3412
+ if (!(field.reverseOf || field.idsStorage)) {
3413
+ self.validate(otherModule.schema, {
3414
+ type: 'doc type',
3415
+ subtype: otherModule.name
3416
+ });
3417
+ // Look for a relationship with our type in the other type
3418
+ forwardRelationship = _.find(otherModule.schema, { withType: options.subtype });
3419
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (forwardRelationship) {
3420
+ field.reverseOf = forwardRelationship.name;
3421
+ }
3422
+ }
3423
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (field.reverseOf) {
3424
+ forwardRelationship = _.find(otherModule.schema, {
3425
+ type: 'relationship',
3426
+ name: field.reverseOf
3427
+ });
3428
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!forwardRelationship) {
3429
+ <span class="cstat-no" title="statement not covered" > fail('reverseOf property does not match the name property of any relationship in the schema for ' + field.withType + '. Hint: you are taking advantage of a relationship already being edited in the schema for that type, "reverse" must match "name".');</span>
3430
+ }
3431
+ // Make sure the other relationship has any missing fields auto-supplied before
3432
+ // trying to access them
3433
+ self.validate([ forwardRelationship ], {
3434
+ type: 'doc type',
3435
+ subtype: otherModule.name
3436
+ });
3437
+ field.idsStorage = forwardRelationship.idsStorage;
3438
+ field.fieldsStorage = forwardRelationship.fieldsStorage;
3439
+ }
3440
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!field.idsStorage) {
3441
+ <span class="cstat-no" title="statement not covered" > field.idsStorage = field.name.replace(/^_/, '') + 'Ids';</span>
3442
+ }
3443
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!forwardRelationship) {
3444
+ <span class="cstat-no" title="statement not covered" > forwardRelationship = _.find(otherModule.schema, {</span>
3445
+ type: 'relationship',
3446
+ idsStorage: field.idsStorage
3447
+ });
3448
+ <span class="cstat-no" title="statement not covered" > if (!forwardRelationship) {</span>
3449
+ <span class="cstat-no" title="statement not covered" > fail('idsStorage property does not match the idsStorage property of any relationship in the schema for ' + field.withType + '. Hint: you are taking advantage of a relationship already being edited in the schema for that type, your idsStorage must be the same to find the data there.');</span>
3450
+ }
3451
+ <span class="cstat-no" title="statement not covered" > if (forwardRelationship.fieldsStorage) {</span>
3452
+ <span class="cstat-no" title="statement not covered" > field.fieldsStorage = forwardRelationship.fieldsStorage;</span>
3453
+ }
3454
+ }
3455
+ }
3456
+ });
3457
+ &nbsp;
3458
+ function checkStringLength (string, min, max) {
3459
+ if (string &amp;&amp; min &amp;&amp; string.length &lt; min) {
3460
+ // Would be unpleasant, but shouldn't happen since the browser
3461
+ // also implements this. We're just checking for naughty scripts
3462
+ throw self.apos.error('min');
3463
+ }
3464
+ // If max is longer than allowed, trim the value down to the max length
3465
+ if (string &amp;&amp; max &amp;&amp; string.length &gt; max) {
3466
+ return string.substr(0, max);
3467
+ }
3468
+ &nbsp;
3469
+ return string;
3470
+ }
3471
+ &nbsp;
3472
+ function <span class="fstat-no" title="function not covered" >relationshipQueryBuilderLaunder(</span>v) {
3473
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(v)) {</span>
3474
+ <span class="cstat-no" title="statement not covered" > return self.apos.launder.ids(v);</span>
3475
+ } else <span class="cstat-no" title="statement not covered" >if (typeof v === 'string' &amp;&amp; v.length) {</span>
3476
+ <span class="cstat-no" title="statement not covered" > return [ self.apos.launder.id(v) ];</span>
3477
+ } else <span class="cstat-no" title="statement not covered" >if (v === 'none') {</span>
3478
+ <span class="cstat-no" title="statement not covered" > return 'none';</span>
3479
+ }
3480
+ <span class="cstat-no" title="statement not covered" > return undefined;</span>
3481
+ }
3482
+ };
3483
+ &nbsp;</pre></td></tr></table></pre>
3484
+
3485
+ <div class='push'></div><!-- for sticky footer -->
3486
+ </div><!-- /wrapper -->
3487
+ <div class='footer quiet pad2 space-top1 center small'>
3488
+ Code coverage generated by
3489
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
3490
+ at Wed Jun 08 2022 11:06:49 GMT+0200 (Central European Summer Time)
3491
+ </div>
3492
+ <script src="../../../../../prettify.js"></script>
3493
+ <script>
3494
+ window.onload = function () {
3495
+ prettyPrint();
3496
+ };
3497
+ </script>
3498
+ <script src="../../../../../sorter.js"></script>
3499
+ <script src="../../../../../block-navigation.js"></script>
3500
+ </body>
3501
+ </html>
3502
+