vscode-json-languageservice 3.4.12 → 3.7.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 (69) hide show
  1. package/.nyc_output/0abe3076-16a9-4975-87da-4ecfc24d9226.json +1 -0
  2. package/.nyc_output/5a0d1463-368f-4136-8a80-4c7fda7ca33b.json +1 -0
  3. package/.nyc_output/65e3530f-ee58-4bcb-8484-70eb1822427e.json +1 -0
  4. package/.nyc_output/a37c9066-0aa4-4d91-a56b-17754005a42d.json +1 -0
  5. package/.nyc_output/b7eb272f-3bf3-48c4-9a42-90600332b363.json +1 -0
  6. package/.nyc_output/cabc6994-64f7-4258-bb45-9bb5529b388e.json +1 -0
  7. package/.nyc_output/processinfo/0abe3076-16a9-4975-87da-4ecfc24d9226.json +1 -0
  8. package/.nyc_output/processinfo/5a0d1463-368f-4136-8a80-4c7fda7ca33b.json +1 -0
  9. package/.nyc_output/processinfo/65e3530f-ee58-4bcb-8484-70eb1822427e.json +1 -0
  10. package/.nyc_output/processinfo/a37c9066-0aa4-4d91-a56b-17754005a42d.json +1 -0
  11. package/.nyc_output/processinfo/b7eb272f-3bf3-48c4-9a42-90600332b363.json +1 -0
  12. package/.nyc_output/processinfo/cabc6994-64f7-4258-bb45-9bb5529b388e.json +1 -0
  13. package/.nyc_output/processinfo/index.json +1 -0
  14. package/CHANGELOG.md +13 -1
  15. package/coverage/lcov-report/base.css +224 -0
  16. package/coverage/lcov-report/block-navigation.js +79 -0
  17. package/coverage/lcov-report/favicon.png +0 -0
  18. package/coverage/lcov-report/index.html +156 -0
  19. package/coverage/lcov-report/prettify.css +1 -0
  20. package/coverage/lcov-report/prettify.js +2 -0
  21. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  22. package/coverage/lcov-report/sorter.js +170 -0
  23. package/coverage/lcov-report/src/index.html +126 -0
  24. package/coverage/lcov-report/src/jsonLanguageService.ts.html +383 -0
  25. package/coverage/lcov-report/src/jsonLanguageTypes.ts.html +968 -0
  26. package/coverage/lcov-report/src/parser/index.html +111 -0
  27. package/coverage/lcov-report/src/parser/jsonParser.ts.html +3860 -0
  28. package/coverage/lcov-report/src/services/configuration.ts.html +1679 -0
  29. package/coverage/lcov-report/src/services/index.html +216 -0
  30. package/coverage/lcov-report/src/services/jsonCompletion.ts.html +2843 -0
  31. package/coverage/lcov-report/src/services/jsonDocumentSymbols.ts.html +911 -0
  32. package/coverage/lcov-report/src/services/jsonFolding.ts.html +455 -0
  33. package/coverage/lcov-report/src/services/jsonHover.ts.html +461 -0
  34. package/coverage/lcov-report/src/services/jsonSchemaService.ts.html +1895 -0
  35. package/coverage/lcov-report/src/services/jsonSelectionRanges.ts.html +311 -0
  36. package/coverage/lcov-report/src/services/jsonValidation.ts.html +560 -0
  37. package/coverage/lcov-report/src/utils/colors.ts.html +299 -0
  38. package/coverage/lcov-report/src/utils/index.html +156 -0
  39. package/coverage/lcov-report/src/utils/json.ts.html +206 -0
  40. package/coverage/lcov-report/src/utils/objects.ts.html +296 -0
  41. package/coverage/lcov-report/src/utils/strings.ts.html +224 -0
  42. package/coverage/lcov.info +4219 -0
  43. package/lib/esm/jsonLanguageService.d.ts +2 -1
  44. package/lib/esm/jsonLanguageService.js +3 -1
  45. package/lib/esm/jsonLanguageTypes.d.ts +4 -2
  46. package/lib/esm/jsonSchema.d.ts +1 -0
  47. package/lib/esm/parser/jsonParser.js +31 -30
  48. package/lib/esm/services/configuration.js +2 -2
  49. package/lib/esm/services/jsonCompletion.js +39 -33
  50. package/lib/esm/services/jsonDefinition.js +83 -0
  51. package/lib/esm/services/jsonDocumentSymbols.js +4 -4
  52. package/lib/esm/services/jsonHover.js +5 -5
  53. package/lib/esm/services/jsonSchemaService.js +90 -79
  54. package/lib/esm/services/jsonValidation.js +9 -8
  55. package/lib/esm/utils/colors.js +2 -2
  56. package/lib/umd/jsonLanguageService.d.ts +2 -1
  57. package/lib/umd/jsonLanguageService.js +4 -2
  58. package/lib/umd/jsonLanguageTypes.d.ts +4 -2
  59. package/lib/umd/jsonSchema.d.ts +1 -0
  60. package/lib/umd/parser/jsonParser.js +31 -30
  61. package/lib/umd/services/configuration.js +2 -2
  62. package/lib/umd/services/jsonCompletion.js +39 -33
  63. package/lib/umd/services/jsonDefinition.js +96 -0
  64. package/lib/umd/services/jsonDocumentSymbols.js +4 -4
  65. package/lib/umd/services/jsonHover.js +5 -5
  66. package/lib/umd/services/jsonSchemaService.js +90 -79
  67. package/lib/umd/services/jsonValidation.js +9 -8
  68. package/lib/umd/utils/colors.js +2 -2
  69. package/package.json +19 -13
@@ -0,0 +1,3860 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/parser/jsonParser.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/parser</a> jsonParser.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">96.67% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>696/720</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">93.15% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>435/467</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">95.4% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>83/87</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">96.86% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>617/637</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
+ </div>
58
+ <div class='status-line high'></div>
59
+ <pre><table class="coverage">
60
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
+ <a name='L2'></a><a href='#L2'>2</a>
62
+ <a name='L3'></a><a href='#L3'>3</a>
63
+ <a name='L4'></a><a href='#L4'>4</a>
64
+ <a name='L5'></a><a href='#L5'>5</a>
65
+ <a name='L6'></a><a href='#L6'>6</a>
66
+ <a name='L7'></a><a href='#L7'>7</a>
67
+ <a name='L8'></a><a href='#L8'>8</a>
68
+ <a name='L9'></a><a href='#L9'>9</a>
69
+ <a name='L10'></a><a href='#L10'>10</a>
70
+ <a name='L11'></a><a href='#L11'>11</a>
71
+ <a name='L12'></a><a href='#L12'>12</a>
72
+ <a name='L13'></a><a href='#L13'>13</a>
73
+ <a name='L14'></a><a href='#L14'>14</a>
74
+ <a name='L15'></a><a href='#L15'>15</a>
75
+ <a name='L16'></a><a href='#L16'>16</a>
76
+ <a name='L17'></a><a href='#L17'>17</a>
77
+ <a name='L18'></a><a href='#L18'>18</a>
78
+ <a name='L19'></a><a href='#L19'>19</a>
79
+ <a name='L20'></a><a href='#L20'>20</a>
80
+ <a name='L21'></a><a href='#L21'>21</a>
81
+ <a name='L22'></a><a href='#L22'>22</a>
82
+ <a name='L23'></a><a href='#L23'>23</a>
83
+ <a name='L24'></a><a href='#L24'>24</a>
84
+ <a name='L25'></a><a href='#L25'>25</a>
85
+ <a name='L26'></a><a href='#L26'>26</a>
86
+ <a name='L27'></a><a href='#L27'>27</a>
87
+ <a name='L28'></a><a href='#L28'>28</a>
88
+ <a name='L29'></a><a href='#L29'>29</a>
89
+ <a name='L30'></a><a href='#L30'>30</a>
90
+ <a name='L31'></a><a href='#L31'>31</a>
91
+ <a name='L32'></a><a href='#L32'>32</a>
92
+ <a name='L33'></a><a href='#L33'>33</a>
93
+ <a name='L34'></a><a href='#L34'>34</a>
94
+ <a name='L35'></a><a href='#L35'>35</a>
95
+ <a name='L36'></a><a href='#L36'>36</a>
96
+ <a name='L37'></a><a href='#L37'>37</a>
97
+ <a name='L38'></a><a href='#L38'>38</a>
98
+ <a name='L39'></a><a href='#L39'>39</a>
99
+ <a name='L40'></a><a href='#L40'>40</a>
100
+ <a name='L41'></a><a href='#L41'>41</a>
101
+ <a name='L42'></a><a href='#L42'>42</a>
102
+ <a name='L43'></a><a href='#L43'>43</a>
103
+ <a name='L44'></a><a href='#L44'>44</a>
104
+ <a name='L45'></a><a href='#L45'>45</a>
105
+ <a name='L46'></a><a href='#L46'>46</a>
106
+ <a name='L47'></a><a href='#L47'>47</a>
107
+ <a name='L48'></a><a href='#L48'>48</a>
108
+ <a name='L49'></a><a href='#L49'>49</a>
109
+ <a name='L50'></a><a href='#L50'>50</a>
110
+ <a name='L51'></a><a href='#L51'>51</a>
111
+ <a name='L52'></a><a href='#L52'>52</a>
112
+ <a name='L53'></a><a href='#L53'>53</a>
113
+ <a name='L54'></a><a href='#L54'>54</a>
114
+ <a name='L55'></a><a href='#L55'>55</a>
115
+ <a name='L56'></a><a href='#L56'>56</a>
116
+ <a name='L57'></a><a href='#L57'>57</a>
117
+ <a name='L58'></a><a href='#L58'>58</a>
118
+ <a name='L59'></a><a href='#L59'>59</a>
119
+ <a name='L60'></a><a href='#L60'>60</a>
120
+ <a name='L61'></a><a href='#L61'>61</a>
121
+ <a name='L62'></a><a href='#L62'>62</a>
122
+ <a name='L63'></a><a href='#L63'>63</a>
123
+ <a name='L64'></a><a href='#L64'>64</a>
124
+ <a name='L65'></a><a href='#L65'>65</a>
125
+ <a name='L66'></a><a href='#L66'>66</a>
126
+ <a name='L67'></a><a href='#L67'>67</a>
127
+ <a name='L68'></a><a href='#L68'>68</a>
128
+ <a name='L69'></a><a href='#L69'>69</a>
129
+ <a name='L70'></a><a href='#L70'>70</a>
130
+ <a name='L71'></a><a href='#L71'>71</a>
131
+ <a name='L72'></a><a href='#L72'>72</a>
132
+ <a name='L73'></a><a href='#L73'>73</a>
133
+ <a name='L74'></a><a href='#L74'>74</a>
134
+ <a name='L75'></a><a href='#L75'>75</a>
135
+ <a name='L76'></a><a href='#L76'>76</a>
136
+ <a name='L77'></a><a href='#L77'>77</a>
137
+ <a name='L78'></a><a href='#L78'>78</a>
138
+ <a name='L79'></a><a href='#L79'>79</a>
139
+ <a name='L80'></a><a href='#L80'>80</a>
140
+ <a name='L81'></a><a href='#L81'>81</a>
141
+ <a name='L82'></a><a href='#L82'>82</a>
142
+ <a name='L83'></a><a href='#L83'>83</a>
143
+ <a name='L84'></a><a href='#L84'>84</a>
144
+ <a name='L85'></a><a href='#L85'>85</a>
145
+ <a name='L86'></a><a href='#L86'>86</a>
146
+ <a name='L87'></a><a href='#L87'>87</a>
147
+ <a name='L88'></a><a href='#L88'>88</a>
148
+ <a name='L89'></a><a href='#L89'>89</a>
149
+ <a name='L90'></a><a href='#L90'>90</a>
150
+ <a name='L91'></a><a href='#L91'>91</a>
151
+ <a name='L92'></a><a href='#L92'>92</a>
152
+ <a name='L93'></a><a href='#L93'>93</a>
153
+ <a name='L94'></a><a href='#L94'>94</a>
154
+ <a name='L95'></a><a href='#L95'>95</a>
155
+ <a name='L96'></a><a href='#L96'>96</a>
156
+ <a name='L97'></a><a href='#L97'>97</a>
157
+ <a name='L98'></a><a href='#L98'>98</a>
158
+ <a name='L99'></a><a href='#L99'>99</a>
159
+ <a name='L100'></a><a href='#L100'>100</a>
160
+ <a name='L101'></a><a href='#L101'>101</a>
161
+ <a name='L102'></a><a href='#L102'>102</a>
162
+ <a name='L103'></a><a href='#L103'>103</a>
163
+ <a name='L104'></a><a href='#L104'>104</a>
164
+ <a name='L105'></a><a href='#L105'>105</a>
165
+ <a name='L106'></a><a href='#L106'>106</a>
166
+ <a name='L107'></a><a href='#L107'>107</a>
167
+ <a name='L108'></a><a href='#L108'>108</a>
168
+ <a name='L109'></a><a href='#L109'>109</a>
169
+ <a name='L110'></a><a href='#L110'>110</a>
170
+ <a name='L111'></a><a href='#L111'>111</a>
171
+ <a name='L112'></a><a href='#L112'>112</a>
172
+ <a name='L113'></a><a href='#L113'>113</a>
173
+ <a name='L114'></a><a href='#L114'>114</a>
174
+ <a name='L115'></a><a href='#L115'>115</a>
175
+ <a name='L116'></a><a href='#L116'>116</a>
176
+ <a name='L117'></a><a href='#L117'>117</a>
177
+ <a name='L118'></a><a href='#L118'>118</a>
178
+ <a name='L119'></a><a href='#L119'>119</a>
179
+ <a name='L120'></a><a href='#L120'>120</a>
180
+ <a name='L121'></a><a href='#L121'>121</a>
181
+ <a name='L122'></a><a href='#L122'>122</a>
182
+ <a name='L123'></a><a href='#L123'>123</a>
183
+ <a name='L124'></a><a href='#L124'>124</a>
184
+ <a name='L125'></a><a href='#L125'>125</a>
185
+ <a name='L126'></a><a href='#L126'>126</a>
186
+ <a name='L127'></a><a href='#L127'>127</a>
187
+ <a name='L128'></a><a href='#L128'>128</a>
188
+ <a name='L129'></a><a href='#L129'>129</a>
189
+ <a name='L130'></a><a href='#L130'>130</a>
190
+ <a name='L131'></a><a href='#L131'>131</a>
191
+ <a name='L132'></a><a href='#L132'>132</a>
192
+ <a name='L133'></a><a href='#L133'>133</a>
193
+ <a name='L134'></a><a href='#L134'>134</a>
194
+ <a name='L135'></a><a href='#L135'>135</a>
195
+ <a name='L136'></a><a href='#L136'>136</a>
196
+ <a name='L137'></a><a href='#L137'>137</a>
197
+ <a name='L138'></a><a href='#L138'>138</a>
198
+ <a name='L139'></a><a href='#L139'>139</a>
199
+ <a name='L140'></a><a href='#L140'>140</a>
200
+ <a name='L141'></a><a href='#L141'>141</a>
201
+ <a name='L142'></a><a href='#L142'>142</a>
202
+ <a name='L143'></a><a href='#L143'>143</a>
203
+ <a name='L144'></a><a href='#L144'>144</a>
204
+ <a name='L145'></a><a href='#L145'>145</a>
205
+ <a name='L146'></a><a href='#L146'>146</a>
206
+ <a name='L147'></a><a href='#L147'>147</a>
207
+ <a name='L148'></a><a href='#L148'>148</a>
208
+ <a name='L149'></a><a href='#L149'>149</a>
209
+ <a name='L150'></a><a href='#L150'>150</a>
210
+ <a name='L151'></a><a href='#L151'>151</a>
211
+ <a name='L152'></a><a href='#L152'>152</a>
212
+ <a name='L153'></a><a href='#L153'>153</a>
213
+ <a name='L154'></a><a href='#L154'>154</a>
214
+ <a name='L155'></a><a href='#L155'>155</a>
215
+ <a name='L156'></a><a href='#L156'>156</a>
216
+ <a name='L157'></a><a href='#L157'>157</a>
217
+ <a name='L158'></a><a href='#L158'>158</a>
218
+ <a name='L159'></a><a href='#L159'>159</a>
219
+ <a name='L160'></a><a href='#L160'>160</a>
220
+ <a name='L161'></a><a href='#L161'>161</a>
221
+ <a name='L162'></a><a href='#L162'>162</a>
222
+ <a name='L163'></a><a href='#L163'>163</a>
223
+ <a name='L164'></a><a href='#L164'>164</a>
224
+ <a name='L165'></a><a href='#L165'>165</a>
225
+ <a name='L166'></a><a href='#L166'>166</a>
226
+ <a name='L167'></a><a href='#L167'>167</a>
227
+ <a name='L168'></a><a href='#L168'>168</a>
228
+ <a name='L169'></a><a href='#L169'>169</a>
229
+ <a name='L170'></a><a href='#L170'>170</a>
230
+ <a name='L171'></a><a href='#L171'>171</a>
231
+ <a name='L172'></a><a href='#L172'>172</a>
232
+ <a name='L173'></a><a href='#L173'>173</a>
233
+ <a name='L174'></a><a href='#L174'>174</a>
234
+ <a name='L175'></a><a href='#L175'>175</a>
235
+ <a name='L176'></a><a href='#L176'>176</a>
236
+ <a name='L177'></a><a href='#L177'>177</a>
237
+ <a name='L178'></a><a href='#L178'>178</a>
238
+ <a name='L179'></a><a href='#L179'>179</a>
239
+ <a name='L180'></a><a href='#L180'>180</a>
240
+ <a name='L181'></a><a href='#L181'>181</a>
241
+ <a name='L182'></a><a href='#L182'>182</a>
242
+ <a name='L183'></a><a href='#L183'>183</a>
243
+ <a name='L184'></a><a href='#L184'>184</a>
244
+ <a name='L185'></a><a href='#L185'>185</a>
245
+ <a name='L186'></a><a href='#L186'>186</a>
246
+ <a name='L187'></a><a href='#L187'>187</a>
247
+ <a name='L188'></a><a href='#L188'>188</a>
248
+ <a name='L189'></a><a href='#L189'>189</a>
249
+ <a name='L190'></a><a href='#L190'>190</a>
250
+ <a name='L191'></a><a href='#L191'>191</a>
251
+ <a name='L192'></a><a href='#L192'>192</a>
252
+ <a name='L193'></a><a href='#L193'>193</a>
253
+ <a name='L194'></a><a href='#L194'>194</a>
254
+ <a name='L195'></a><a href='#L195'>195</a>
255
+ <a name='L196'></a><a href='#L196'>196</a>
256
+ <a name='L197'></a><a href='#L197'>197</a>
257
+ <a name='L198'></a><a href='#L198'>198</a>
258
+ <a name='L199'></a><a href='#L199'>199</a>
259
+ <a name='L200'></a><a href='#L200'>200</a>
260
+ <a name='L201'></a><a href='#L201'>201</a>
261
+ <a name='L202'></a><a href='#L202'>202</a>
262
+ <a name='L203'></a><a href='#L203'>203</a>
263
+ <a name='L204'></a><a href='#L204'>204</a>
264
+ <a name='L205'></a><a href='#L205'>205</a>
265
+ <a name='L206'></a><a href='#L206'>206</a>
266
+ <a name='L207'></a><a href='#L207'>207</a>
267
+ <a name='L208'></a><a href='#L208'>208</a>
268
+ <a name='L209'></a><a href='#L209'>209</a>
269
+ <a name='L210'></a><a href='#L210'>210</a>
270
+ <a name='L211'></a><a href='#L211'>211</a>
271
+ <a name='L212'></a><a href='#L212'>212</a>
272
+ <a name='L213'></a><a href='#L213'>213</a>
273
+ <a name='L214'></a><a href='#L214'>214</a>
274
+ <a name='L215'></a><a href='#L215'>215</a>
275
+ <a name='L216'></a><a href='#L216'>216</a>
276
+ <a name='L217'></a><a href='#L217'>217</a>
277
+ <a name='L218'></a><a href='#L218'>218</a>
278
+ <a name='L219'></a><a href='#L219'>219</a>
279
+ <a name='L220'></a><a href='#L220'>220</a>
280
+ <a name='L221'></a><a href='#L221'>221</a>
281
+ <a name='L222'></a><a href='#L222'>222</a>
282
+ <a name='L223'></a><a href='#L223'>223</a>
283
+ <a name='L224'></a><a href='#L224'>224</a>
284
+ <a name='L225'></a><a href='#L225'>225</a>
285
+ <a name='L226'></a><a href='#L226'>226</a>
286
+ <a name='L227'></a><a href='#L227'>227</a>
287
+ <a name='L228'></a><a href='#L228'>228</a>
288
+ <a name='L229'></a><a href='#L229'>229</a>
289
+ <a name='L230'></a><a href='#L230'>230</a>
290
+ <a name='L231'></a><a href='#L231'>231</a>
291
+ <a name='L232'></a><a href='#L232'>232</a>
292
+ <a name='L233'></a><a href='#L233'>233</a>
293
+ <a name='L234'></a><a href='#L234'>234</a>
294
+ <a name='L235'></a><a href='#L235'>235</a>
295
+ <a name='L236'></a><a href='#L236'>236</a>
296
+ <a name='L237'></a><a href='#L237'>237</a>
297
+ <a name='L238'></a><a href='#L238'>238</a>
298
+ <a name='L239'></a><a href='#L239'>239</a>
299
+ <a name='L240'></a><a href='#L240'>240</a>
300
+ <a name='L241'></a><a href='#L241'>241</a>
301
+ <a name='L242'></a><a href='#L242'>242</a>
302
+ <a name='L243'></a><a href='#L243'>243</a>
303
+ <a name='L244'></a><a href='#L244'>244</a>
304
+ <a name='L245'></a><a href='#L245'>245</a>
305
+ <a name='L246'></a><a href='#L246'>246</a>
306
+ <a name='L247'></a><a href='#L247'>247</a>
307
+ <a name='L248'></a><a href='#L248'>248</a>
308
+ <a name='L249'></a><a href='#L249'>249</a>
309
+ <a name='L250'></a><a href='#L250'>250</a>
310
+ <a name='L251'></a><a href='#L251'>251</a>
311
+ <a name='L252'></a><a href='#L252'>252</a>
312
+ <a name='L253'></a><a href='#L253'>253</a>
313
+ <a name='L254'></a><a href='#L254'>254</a>
314
+ <a name='L255'></a><a href='#L255'>255</a>
315
+ <a name='L256'></a><a href='#L256'>256</a>
316
+ <a name='L257'></a><a href='#L257'>257</a>
317
+ <a name='L258'></a><a href='#L258'>258</a>
318
+ <a name='L259'></a><a href='#L259'>259</a>
319
+ <a name='L260'></a><a href='#L260'>260</a>
320
+ <a name='L261'></a><a href='#L261'>261</a>
321
+ <a name='L262'></a><a href='#L262'>262</a>
322
+ <a name='L263'></a><a href='#L263'>263</a>
323
+ <a name='L264'></a><a href='#L264'>264</a>
324
+ <a name='L265'></a><a href='#L265'>265</a>
325
+ <a name='L266'></a><a href='#L266'>266</a>
326
+ <a name='L267'></a><a href='#L267'>267</a>
327
+ <a name='L268'></a><a href='#L268'>268</a>
328
+ <a name='L269'></a><a href='#L269'>269</a>
329
+ <a name='L270'></a><a href='#L270'>270</a>
330
+ <a name='L271'></a><a href='#L271'>271</a>
331
+ <a name='L272'></a><a href='#L272'>272</a>
332
+ <a name='L273'></a><a href='#L273'>273</a>
333
+ <a name='L274'></a><a href='#L274'>274</a>
334
+ <a name='L275'></a><a href='#L275'>275</a>
335
+ <a name='L276'></a><a href='#L276'>276</a>
336
+ <a name='L277'></a><a href='#L277'>277</a>
337
+ <a name='L278'></a><a href='#L278'>278</a>
338
+ <a name='L279'></a><a href='#L279'>279</a>
339
+ <a name='L280'></a><a href='#L280'>280</a>
340
+ <a name='L281'></a><a href='#L281'>281</a>
341
+ <a name='L282'></a><a href='#L282'>282</a>
342
+ <a name='L283'></a><a href='#L283'>283</a>
343
+ <a name='L284'></a><a href='#L284'>284</a>
344
+ <a name='L285'></a><a href='#L285'>285</a>
345
+ <a name='L286'></a><a href='#L286'>286</a>
346
+ <a name='L287'></a><a href='#L287'>287</a>
347
+ <a name='L288'></a><a href='#L288'>288</a>
348
+ <a name='L289'></a><a href='#L289'>289</a>
349
+ <a name='L290'></a><a href='#L290'>290</a>
350
+ <a name='L291'></a><a href='#L291'>291</a>
351
+ <a name='L292'></a><a href='#L292'>292</a>
352
+ <a name='L293'></a><a href='#L293'>293</a>
353
+ <a name='L294'></a><a href='#L294'>294</a>
354
+ <a name='L295'></a><a href='#L295'>295</a>
355
+ <a name='L296'></a><a href='#L296'>296</a>
356
+ <a name='L297'></a><a href='#L297'>297</a>
357
+ <a name='L298'></a><a href='#L298'>298</a>
358
+ <a name='L299'></a><a href='#L299'>299</a>
359
+ <a name='L300'></a><a href='#L300'>300</a>
360
+ <a name='L301'></a><a href='#L301'>301</a>
361
+ <a name='L302'></a><a href='#L302'>302</a>
362
+ <a name='L303'></a><a href='#L303'>303</a>
363
+ <a name='L304'></a><a href='#L304'>304</a>
364
+ <a name='L305'></a><a href='#L305'>305</a>
365
+ <a name='L306'></a><a href='#L306'>306</a>
366
+ <a name='L307'></a><a href='#L307'>307</a>
367
+ <a name='L308'></a><a href='#L308'>308</a>
368
+ <a name='L309'></a><a href='#L309'>309</a>
369
+ <a name='L310'></a><a href='#L310'>310</a>
370
+ <a name='L311'></a><a href='#L311'>311</a>
371
+ <a name='L312'></a><a href='#L312'>312</a>
372
+ <a name='L313'></a><a href='#L313'>313</a>
373
+ <a name='L314'></a><a href='#L314'>314</a>
374
+ <a name='L315'></a><a href='#L315'>315</a>
375
+ <a name='L316'></a><a href='#L316'>316</a>
376
+ <a name='L317'></a><a href='#L317'>317</a>
377
+ <a name='L318'></a><a href='#L318'>318</a>
378
+ <a name='L319'></a><a href='#L319'>319</a>
379
+ <a name='L320'></a><a href='#L320'>320</a>
380
+ <a name='L321'></a><a href='#L321'>321</a>
381
+ <a name='L322'></a><a href='#L322'>322</a>
382
+ <a name='L323'></a><a href='#L323'>323</a>
383
+ <a name='L324'></a><a href='#L324'>324</a>
384
+ <a name='L325'></a><a href='#L325'>325</a>
385
+ <a name='L326'></a><a href='#L326'>326</a>
386
+ <a name='L327'></a><a href='#L327'>327</a>
387
+ <a name='L328'></a><a href='#L328'>328</a>
388
+ <a name='L329'></a><a href='#L329'>329</a>
389
+ <a name='L330'></a><a href='#L330'>330</a>
390
+ <a name='L331'></a><a href='#L331'>331</a>
391
+ <a name='L332'></a><a href='#L332'>332</a>
392
+ <a name='L333'></a><a href='#L333'>333</a>
393
+ <a name='L334'></a><a href='#L334'>334</a>
394
+ <a name='L335'></a><a href='#L335'>335</a>
395
+ <a name='L336'></a><a href='#L336'>336</a>
396
+ <a name='L337'></a><a href='#L337'>337</a>
397
+ <a name='L338'></a><a href='#L338'>338</a>
398
+ <a name='L339'></a><a href='#L339'>339</a>
399
+ <a name='L340'></a><a href='#L340'>340</a>
400
+ <a name='L341'></a><a href='#L341'>341</a>
401
+ <a name='L342'></a><a href='#L342'>342</a>
402
+ <a name='L343'></a><a href='#L343'>343</a>
403
+ <a name='L344'></a><a href='#L344'>344</a>
404
+ <a name='L345'></a><a href='#L345'>345</a>
405
+ <a name='L346'></a><a href='#L346'>346</a>
406
+ <a name='L347'></a><a href='#L347'>347</a>
407
+ <a name='L348'></a><a href='#L348'>348</a>
408
+ <a name='L349'></a><a href='#L349'>349</a>
409
+ <a name='L350'></a><a href='#L350'>350</a>
410
+ <a name='L351'></a><a href='#L351'>351</a>
411
+ <a name='L352'></a><a href='#L352'>352</a>
412
+ <a name='L353'></a><a href='#L353'>353</a>
413
+ <a name='L354'></a><a href='#L354'>354</a>
414
+ <a name='L355'></a><a href='#L355'>355</a>
415
+ <a name='L356'></a><a href='#L356'>356</a>
416
+ <a name='L357'></a><a href='#L357'>357</a>
417
+ <a name='L358'></a><a href='#L358'>358</a>
418
+ <a name='L359'></a><a href='#L359'>359</a>
419
+ <a name='L360'></a><a href='#L360'>360</a>
420
+ <a name='L361'></a><a href='#L361'>361</a>
421
+ <a name='L362'></a><a href='#L362'>362</a>
422
+ <a name='L363'></a><a href='#L363'>363</a>
423
+ <a name='L364'></a><a href='#L364'>364</a>
424
+ <a name='L365'></a><a href='#L365'>365</a>
425
+ <a name='L366'></a><a href='#L366'>366</a>
426
+ <a name='L367'></a><a href='#L367'>367</a>
427
+ <a name='L368'></a><a href='#L368'>368</a>
428
+ <a name='L369'></a><a href='#L369'>369</a>
429
+ <a name='L370'></a><a href='#L370'>370</a>
430
+ <a name='L371'></a><a href='#L371'>371</a>
431
+ <a name='L372'></a><a href='#L372'>372</a>
432
+ <a name='L373'></a><a href='#L373'>373</a>
433
+ <a name='L374'></a><a href='#L374'>374</a>
434
+ <a name='L375'></a><a href='#L375'>375</a>
435
+ <a name='L376'></a><a href='#L376'>376</a>
436
+ <a name='L377'></a><a href='#L377'>377</a>
437
+ <a name='L378'></a><a href='#L378'>378</a>
438
+ <a name='L379'></a><a href='#L379'>379</a>
439
+ <a name='L380'></a><a href='#L380'>380</a>
440
+ <a name='L381'></a><a href='#L381'>381</a>
441
+ <a name='L382'></a><a href='#L382'>382</a>
442
+ <a name='L383'></a><a href='#L383'>383</a>
443
+ <a name='L384'></a><a href='#L384'>384</a>
444
+ <a name='L385'></a><a href='#L385'>385</a>
445
+ <a name='L386'></a><a href='#L386'>386</a>
446
+ <a name='L387'></a><a href='#L387'>387</a>
447
+ <a name='L388'></a><a href='#L388'>388</a>
448
+ <a name='L389'></a><a href='#L389'>389</a>
449
+ <a name='L390'></a><a href='#L390'>390</a>
450
+ <a name='L391'></a><a href='#L391'>391</a>
451
+ <a name='L392'></a><a href='#L392'>392</a>
452
+ <a name='L393'></a><a href='#L393'>393</a>
453
+ <a name='L394'></a><a href='#L394'>394</a>
454
+ <a name='L395'></a><a href='#L395'>395</a>
455
+ <a name='L396'></a><a href='#L396'>396</a>
456
+ <a name='L397'></a><a href='#L397'>397</a>
457
+ <a name='L398'></a><a href='#L398'>398</a>
458
+ <a name='L399'></a><a href='#L399'>399</a>
459
+ <a name='L400'></a><a href='#L400'>400</a>
460
+ <a name='L401'></a><a href='#L401'>401</a>
461
+ <a name='L402'></a><a href='#L402'>402</a>
462
+ <a name='L403'></a><a href='#L403'>403</a>
463
+ <a name='L404'></a><a href='#L404'>404</a>
464
+ <a name='L405'></a><a href='#L405'>405</a>
465
+ <a name='L406'></a><a href='#L406'>406</a>
466
+ <a name='L407'></a><a href='#L407'>407</a>
467
+ <a name='L408'></a><a href='#L408'>408</a>
468
+ <a name='L409'></a><a href='#L409'>409</a>
469
+ <a name='L410'></a><a href='#L410'>410</a>
470
+ <a name='L411'></a><a href='#L411'>411</a>
471
+ <a name='L412'></a><a href='#L412'>412</a>
472
+ <a name='L413'></a><a href='#L413'>413</a>
473
+ <a name='L414'></a><a href='#L414'>414</a>
474
+ <a name='L415'></a><a href='#L415'>415</a>
475
+ <a name='L416'></a><a href='#L416'>416</a>
476
+ <a name='L417'></a><a href='#L417'>417</a>
477
+ <a name='L418'></a><a href='#L418'>418</a>
478
+ <a name='L419'></a><a href='#L419'>419</a>
479
+ <a name='L420'></a><a href='#L420'>420</a>
480
+ <a name='L421'></a><a href='#L421'>421</a>
481
+ <a name='L422'></a><a href='#L422'>422</a>
482
+ <a name='L423'></a><a href='#L423'>423</a>
483
+ <a name='L424'></a><a href='#L424'>424</a>
484
+ <a name='L425'></a><a href='#L425'>425</a>
485
+ <a name='L426'></a><a href='#L426'>426</a>
486
+ <a name='L427'></a><a href='#L427'>427</a>
487
+ <a name='L428'></a><a href='#L428'>428</a>
488
+ <a name='L429'></a><a href='#L429'>429</a>
489
+ <a name='L430'></a><a href='#L430'>430</a>
490
+ <a name='L431'></a><a href='#L431'>431</a>
491
+ <a name='L432'></a><a href='#L432'>432</a>
492
+ <a name='L433'></a><a href='#L433'>433</a>
493
+ <a name='L434'></a><a href='#L434'>434</a>
494
+ <a name='L435'></a><a href='#L435'>435</a>
495
+ <a name='L436'></a><a href='#L436'>436</a>
496
+ <a name='L437'></a><a href='#L437'>437</a>
497
+ <a name='L438'></a><a href='#L438'>438</a>
498
+ <a name='L439'></a><a href='#L439'>439</a>
499
+ <a name='L440'></a><a href='#L440'>440</a>
500
+ <a name='L441'></a><a href='#L441'>441</a>
501
+ <a name='L442'></a><a href='#L442'>442</a>
502
+ <a name='L443'></a><a href='#L443'>443</a>
503
+ <a name='L444'></a><a href='#L444'>444</a>
504
+ <a name='L445'></a><a href='#L445'>445</a>
505
+ <a name='L446'></a><a href='#L446'>446</a>
506
+ <a name='L447'></a><a href='#L447'>447</a>
507
+ <a name='L448'></a><a href='#L448'>448</a>
508
+ <a name='L449'></a><a href='#L449'>449</a>
509
+ <a name='L450'></a><a href='#L450'>450</a>
510
+ <a name='L451'></a><a href='#L451'>451</a>
511
+ <a name='L452'></a><a href='#L452'>452</a>
512
+ <a name='L453'></a><a href='#L453'>453</a>
513
+ <a name='L454'></a><a href='#L454'>454</a>
514
+ <a name='L455'></a><a href='#L455'>455</a>
515
+ <a name='L456'></a><a href='#L456'>456</a>
516
+ <a name='L457'></a><a href='#L457'>457</a>
517
+ <a name='L458'></a><a href='#L458'>458</a>
518
+ <a name='L459'></a><a href='#L459'>459</a>
519
+ <a name='L460'></a><a href='#L460'>460</a>
520
+ <a name='L461'></a><a href='#L461'>461</a>
521
+ <a name='L462'></a><a href='#L462'>462</a>
522
+ <a name='L463'></a><a href='#L463'>463</a>
523
+ <a name='L464'></a><a href='#L464'>464</a>
524
+ <a name='L465'></a><a href='#L465'>465</a>
525
+ <a name='L466'></a><a href='#L466'>466</a>
526
+ <a name='L467'></a><a href='#L467'>467</a>
527
+ <a name='L468'></a><a href='#L468'>468</a>
528
+ <a name='L469'></a><a href='#L469'>469</a>
529
+ <a name='L470'></a><a href='#L470'>470</a>
530
+ <a name='L471'></a><a href='#L471'>471</a>
531
+ <a name='L472'></a><a href='#L472'>472</a>
532
+ <a name='L473'></a><a href='#L473'>473</a>
533
+ <a name='L474'></a><a href='#L474'>474</a>
534
+ <a name='L475'></a><a href='#L475'>475</a>
535
+ <a name='L476'></a><a href='#L476'>476</a>
536
+ <a name='L477'></a><a href='#L477'>477</a>
537
+ <a name='L478'></a><a href='#L478'>478</a>
538
+ <a name='L479'></a><a href='#L479'>479</a>
539
+ <a name='L480'></a><a href='#L480'>480</a>
540
+ <a name='L481'></a><a href='#L481'>481</a>
541
+ <a name='L482'></a><a href='#L482'>482</a>
542
+ <a name='L483'></a><a href='#L483'>483</a>
543
+ <a name='L484'></a><a href='#L484'>484</a>
544
+ <a name='L485'></a><a href='#L485'>485</a>
545
+ <a name='L486'></a><a href='#L486'>486</a>
546
+ <a name='L487'></a><a href='#L487'>487</a>
547
+ <a name='L488'></a><a href='#L488'>488</a>
548
+ <a name='L489'></a><a href='#L489'>489</a>
549
+ <a name='L490'></a><a href='#L490'>490</a>
550
+ <a name='L491'></a><a href='#L491'>491</a>
551
+ <a name='L492'></a><a href='#L492'>492</a>
552
+ <a name='L493'></a><a href='#L493'>493</a>
553
+ <a name='L494'></a><a href='#L494'>494</a>
554
+ <a name='L495'></a><a href='#L495'>495</a>
555
+ <a name='L496'></a><a href='#L496'>496</a>
556
+ <a name='L497'></a><a href='#L497'>497</a>
557
+ <a name='L498'></a><a href='#L498'>498</a>
558
+ <a name='L499'></a><a href='#L499'>499</a>
559
+ <a name='L500'></a><a href='#L500'>500</a>
560
+ <a name='L501'></a><a href='#L501'>501</a>
561
+ <a name='L502'></a><a href='#L502'>502</a>
562
+ <a name='L503'></a><a href='#L503'>503</a>
563
+ <a name='L504'></a><a href='#L504'>504</a>
564
+ <a name='L505'></a><a href='#L505'>505</a>
565
+ <a name='L506'></a><a href='#L506'>506</a>
566
+ <a name='L507'></a><a href='#L507'>507</a>
567
+ <a name='L508'></a><a href='#L508'>508</a>
568
+ <a name='L509'></a><a href='#L509'>509</a>
569
+ <a name='L510'></a><a href='#L510'>510</a>
570
+ <a name='L511'></a><a href='#L511'>511</a>
571
+ <a name='L512'></a><a href='#L512'>512</a>
572
+ <a name='L513'></a><a href='#L513'>513</a>
573
+ <a name='L514'></a><a href='#L514'>514</a>
574
+ <a name='L515'></a><a href='#L515'>515</a>
575
+ <a name='L516'></a><a href='#L516'>516</a>
576
+ <a name='L517'></a><a href='#L517'>517</a>
577
+ <a name='L518'></a><a href='#L518'>518</a>
578
+ <a name='L519'></a><a href='#L519'>519</a>
579
+ <a name='L520'></a><a href='#L520'>520</a>
580
+ <a name='L521'></a><a href='#L521'>521</a>
581
+ <a name='L522'></a><a href='#L522'>522</a>
582
+ <a name='L523'></a><a href='#L523'>523</a>
583
+ <a name='L524'></a><a href='#L524'>524</a>
584
+ <a name='L525'></a><a href='#L525'>525</a>
585
+ <a name='L526'></a><a href='#L526'>526</a>
586
+ <a name='L527'></a><a href='#L527'>527</a>
587
+ <a name='L528'></a><a href='#L528'>528</a>
588
+ <a name='L529'></a><a href='#L529'>529</a>
589
+ <a name='L530'></a><a href='#L530'>530</a>
590
+ <a name='L531'></a><a href='#L531'>531</a>
591
+ <a name='L532'></a><a href='#L532'>532</a>
592
+ <a name='L533'></a><a href='#L533'>533</a>
593
+ <a name='L534'></a><a href='#L534'>534</a>
594
+ <a name='L535'></a><a href='#L535'>535</a>
595
+ <a name='L536'></a><a href='#L536'>536</a>
596
+ <a name='L537'></a><a href='#L537'>537</a>
597
+ <a name='L538'></a><a href='#L538'>538</a>
598
+ <a name='L539'></a><a href='#L539'>539</a>
599
+ <a name='L540'></a><a href='#L540'>540</a>
600
+ <a name='L541'></a><a href='#L541'>541</a>
601
+ <a name='L542'></a><a href='#L542'>542</a>
602
+ <a name='L543'></a><a href='#L543'>543</a>
603
+ <a name='L544'></a><a href='#L544'>544</a>
604
+ <a name='L545'></a><a href='#L545'>545</a>
605
+ <a name='L546'></a><a href='#L546'>546</a>
606
+ <a name='L547'></a><a href='#L547'>547</a>
607
+ <a name='L548'></a><a href='#L548'>548</a>
608
+ <a name='L549'></a><a href='#L549'>549</a>
609
+ <a name='L550'></a><a href='#L550'>550</a>
610
+ <a name='L551'></a><a href='#L551'>551</a>
611
+ <a name='L552'></a><a href='#L552'>552</a>
612
+ <a name='L553'></a><a href='#L553'>553</a>
613
+ <a name='L554'></a><a href='#L554'>554</a>
614
+ <a name='L555'></a><a href='#L555'>555</a>
615
+ <a name='L556'></a><a href='#L556'>556</a>
616
+ <a name='L557'></a><a href='#L557'>557</a>
617
+ <a name='L558'></a><a href='#L558'>558</a>
618
+ <a name='L559'></a><a href='#L559'>559</a>
619
+ <a name='L560'></a><a href='#L560'>560</a>
620
+ <a name='L561'></a><a href='#L561'>561</a>
621
+ <a name='L562'></a><a href='#L562'>562</a>
622
+ <a name='L563'></a><a href='#L563'>563</a>
623
+ <a name='L564'></a><a href='#L564'>564</a>
624
+ <a name='L565'></a><a href='#L565'>565</a>
625
+ <a name='L566'></a><a href='#L566'>566</a>
626
+ <a name='L567'></a><a href='#L567'>567</a>
627
+ <a name='L568'></a><a href='#L568'>568</a>
628
+ <a name='L569'></a><a href='#L569'>569</a>
629
+ <a name='L570'></a><a href='#L570'>570</a>
630
+ <a name='L571'></a><a href='#L571'>571</a>
631
+ <a name='L572'></a><a href='#L572'>572</a>
632
+ <a name='L573'></a><a href='#L573'>573</a>
633
+ <a name='L574'></a><a href='#L574'>574</a>
634
+ <a name='L575'></a><a href='#L575'>575</a>
635
+ <a name='L576'></a><a href='#L576'>576</a>
636
+ <a name='L577'></a><a href='#L577'>577</a>
637
+ <a name='L578'></a><a href='#L578'>578</a>
638
+ <a name='L579'></a><a href='#L579'>579</a>
639
+ <a name='L580'></a><a href='#L580'>580</a>
640
+ <a name='L581'></a><a href='#L581'>581</a>
641
+ <a name='L582'></a><a href='#L582'>582</a>
642
+ <a name='L583'></a><a href='#L583'>583</a>
643
+ <a name='L584'></a><a href='#L584'>584</a>
644
+ <a name='L585'></a><a href='#L585'>585</a>
645
+ <a name='L586'></a><a href='#L586'>586</a>
646
+ <a name='L587'></a><a href='#L587'>587</a>
647
+ <a name='L588'></a><a href='#L588'>588</a>
648
+ <a name='L589'></a><a href='#L589'>589</a>
649
+ <a name='L590'></a><a href='#L590'>590</a>
650
+ <a name='L591'></a><a href='#L591'>591</a>
651
+ <a name='L592'></a><a href='#L592'>592</a>
652
+ <a name='L593'></a><a href='#L593'>593</a>
653
+ <a name='L594'></a><a href='#L594'>594</a>
654
+ <a name='L595'></a><a href='#L595'>595</a>
655
+ <a name='L596'></a><a href='#L596'>596</a>
656
+ <a name='L597'></a><a href='#L597'>597</a>
657
+ <a name='L598'></a><a href='#L598'>598</a>
658
+ <a name='L599'></a><a href='#L599'>599</a>
659
+ <a name='L600'></a><a href='#L600'>600</a>
660
+ <a name='L601'></a><a href='#L601'>601</a>
661
+ <a name='L602'></a><a href='#L602'>602</a>
662
+ <a name='L603'></a><a href='#L603'>603</a>
663
+ <a name='L604'></a><a href='#L604'>604</a>
664
+ <a name='L605'></a><a href='#L605'>605</a>
665
+ <a name='L606'></a><a href='#L606'>606</a>
666
+ <a name='L607'></a><a href='#L607'>607</a>
667
+ <a name='L608'></a><a href='#L608'>608</a>
668
+ <a name='L609'></a><a href='#L609'>609</a>
669
+ <a name='L610'></a><a href='#L610'>610</a>
670
+ <a name='L611'></a><a href='#L611'>611</a>
671
+ <a name='L612'></a><a href='#L612'>612</a>
672
+ <a name='L613'></a><a href='#L613'>613</a>
673
+ <a name='L614'></a><a href='#L614'>614</a>
674
+ <a name='L615'></a><a href='#L615'>615</a>
675
+ <a name='L616'></a><a href='#L616'>616</a>
676
+ <a name='L617'></a><a href='#L617'>617</a>
677
+ <a name='L618'></a><a href='#L618'>618</a>
678
+ <a name='L619'></a><a href='#L619'>619</a>
679
+ <a name='L620'></a><a href='#L620'>620</a>
680
+ <a name='L621'></a><a href='#L621'>621</a>
681
+ <a name='L622'></a><a href='#L622'>622</a>
682
+ <a name='L623'></a><a href='#L623'>623</a>
683
+ <a name='L624'></a><a href='#L624'>624</a>
684
+ <a name='L625'></a><a href='#L625'>625</a>
685
+ <a name='L626'></a><a href='#L626'>626</a>
686
+ <a name='L627'></a><a href='#L627'>627</a>
687
+ <a name='L628'></a><a href='#L628'>628</a>
688
+ <a name='L629'></a><a href='#L629'>629</a>
689
+ <a name='L630'></a><a href='#L630'>630</a>
690
+ <a name='L631'></a><a href='#L631'>631</a>
691
+ <a name='L632'></a><a href='#L632'>632</a>
692
+ <a name='L633'></a><a href='#L633'>633</a>
693
+ <a name='L634'></a><a href='#L634'>634</a>
694
+ <a name='L635'></a><a href='#L635'>635</a>
695
+ <a name='L636'></a><a href='#L636'>636</a>
696
+ <a name='L637'></a><a href='#L637'>637</a>
697
+ <a name='L638'></a><a href='#L638'>638</a>
698
+ <a name='L639'></a><a href='#L639'>639</a>
699
+ <a name='L640'></a><a href='#L640'>640</a>
700
+ <a name='L641'></a><a href='#L641'>641</a>
701
+ <a name='L642'></a><a href='#L642'>642</a>
702
+ <a name='L643'></a><a href='#L643'>643</a>
703
+ <a name='L644'></a><a href='#L644'>644</a>
704
+ <a name='L645'></a><a href='#L645'>645</a>
705
+ <a name='L646'></a><a href='#L646'>646</a>
706
+ <a name='L647'></a><a href='#L647'>647</a>
707
+ <a name='L648'></a><a href='#L648'>648</a>
708
+ <a name='L649'></a><a href='#L649'>649</a>
709
+ <a name='L650'></a><a href='#L650'>650</a>
710
+ <a name='L651'></a><a href='#L651'>651</a>
711
+ <a name='L652'></a><a href='#L652'>652</a>
712
+ <a name='L653'></a><a href='#L653'>653</a>
713
+ <a name='L654'></a><a href='#L654'>654</a>
714
+ <a name='L655'></a><a href='#L655'>655</a>
715
+ <a name='L656'></a><a href='#L656'>656</a>
716
+ <a name='L657'></a><a href='#L657'>657</a>
717
+ <a name='L658'></a><a href='#L658'>658</a>
718
+ <a name='L659'></a><a href='#L659'>659</a>
719
+ <a name='L660'></a><a href='#L660'>660</a>
720
+ <a name='L661'></a><a href='#L661'>661</a>
721
+ <a name='L662'></a><a href='#L662'>662</a>
722
+ <a name='L663'></a><a href='#L663'>663</a>
723
+ <a name='L664'></a><a href='#L664'>664</a>
724
+ <a name='L665'></a><a href='#L665'>665</a>
725
+ <a name='L666'></a><a href='#L666'>666</a>
726
+ <a name='L667'></a><a href='#L667'>667</a>
727
+ <a name='L668'></a><a href='#L668'>668</a>
728
+ <a name='L669'></a><a href='#L669'>669</a>
729
+ <a name='L670'></a><a href='#L670'>670</a>
730
+ <a name='L671'></a><a href='#L671'>671</a>
731
+ <a name='L672'></a><a href='#L672'>672</a>
732
+ <a name='L673'></a><a href='#L673'>673</a>
733
+ <a name='L674'></a><a href='#L674'>674</a>
734
+ <a name='L675'></a><a href='#L675'>675</a>
735
+ <a name='L676'></a><a href='#L676'>676</a>
736
+ <a name='L677'></a><a href='#L677'>677</a>
737
+ <a name='L678'></a><a href='#L678'>678</a>
738
+ <a name='L679'></a><a href='#L679'>679</a>
739
+ <a name='L680'></a><a href='#L680'>680</a>
740
+ <a name='L681'></a><a href='#L681'>681</a>
741
+ <a name='L682'></a><a href='#L682'>682</a>
742
+ <a name='L683'></a><a href='#L683'>683</a>
743
+ <a name='L684'></a><a href='#L684'>684</a>
744
+ <a name='L685'></a><a href='#L685'>685</a>
745
+ <a name='L686'></a><a href='#L686'>686</a>
746
+ <a name='L687'></a><a href='#L687'>687</a>
747
+ <a name='L688'></a><a href='#L688'>688</a>
748
+ <a name='L689'></a><a href='#L689'>689</a>
749
+ <a name='L690'></a><a href='#L690'>690</a>
750
+ <a name='L691'></a><a href='#L691'>691</a>
751
+ <a name='L692'></a><a href='#L692'>692</a>
752
+ <a name='L693'></a><a href='#L693'>693</a>
753
+ <a name='L694'></a><a href='#L694'>694</a>
754
+ <a name='L695'></a><a href='#L695'>695</a>
755
+ <a name='L696'></a><a href='#L696'>696</a>
756
+ <a name='L697'></a><a href='#L697'>697</a>
757
+ <a name='L698'></a><a href='#L698'>698</a>
758
+ <a name='L699'></a><a href='#L699'>699</a>
759
+ <a name='L700'></a><a href='#L700'>700</a>
760
+ <a name='L701'></a><a href='#L701'>701</a>
761
+ <a name='L702'></a><a href='#L702'>702</a>
762
+ <a name='L703'></a><a href='#L703'>703</a>
763
+ <a name='L704'></a><a href='#L704'>704</a>
764
+ <a name='L705'></a><a href='#L705'>705</a>
765
+ <a name='L706'></a><a href='#L706'>706</a>
766
+ <a name='L707'></a><a href='#L707'>707</a>
767
+ <a name='L708'></a><a href='#L708'>708</a>
768
+ <a name='L709'></a><a href='#L709'>709</a>
769
+ <a name='L710'></a><a href='#L710'>710</a>
770
+ <a name='L711'></a><a href='#L711'>711</a>
771
+ <a name='L712'></a><a href='#L712'>712</a>
772
+ <a name='L713'></a><a href='#L713'>713</a>
773
+ <a name='L714'></a><a href='#L714'>714</a>
774
+ <a name='L715'></a><a href='#L715'>715</a>
775
+ <a name='L716'></a><a href='#L716'>716</a>
776
+ <a name='L717'></a><a href='#L717'>717</a>
777
+ <a name='L718'></a><a href='#L718'>718</a>
778
+ <a name='L719'></a><a href='#L719'>719</a>
779
+ <a name='L720'></a><a href='#L720'>720</a>
780
+ <a name='L721'></a><a href='#L721'>721</a>
781
+ <a name='L722'></a><a href='#L722'>722</a>
782
+ <a name='L723'></a><a href='#L723'>723</a>
783
+ <a name='L724'></a><a href='#L724'>724</a>
784
+ <a name='L725'></a><a href='#L725'>725</a>
785
+ <a name='L726'></a><a href='#L726'>726</a>
786
+ <a name='L727'></a><a href='#L727'>727</a>
787
+ <a name='L728'></a><a href='#L728'>728</a>
788
+ <a name='L729'></a><a href='#L729'>729</a>
789
+ <a name='L730'></a><a href='#L730'>730</a>
790
+ <a name='L731'></a><a href='#L731'>731</a>
791
+ <a name='L732'></a><a href='#L732'>732</a>
792
+ <a name='L733'></a><a href='#L733'>733</a>
793
+ <a name='L734'></a><a href='#L734'>734</a>
794
+ <a name='L735'></a><a href='#L735'>735</a>
795
+ <a name='L736'></a><a href='#L736'>736</a>
796
+ <a name='L737'></a><a href='#L737'>737</a>
797
+ <a name='L738'></a><a href='#L738'>738</a>
798
+ <a name='L739'></a><a href='#L739'>739</a>
799
+ <a name='L740'></a><a href='#L740'>740</a>
800
+ <a name='L741'></a><a href='#L741'>741</a>
801
+ <a name='L742'></a><a href='#L742'>742</a>
802
+ <a name='L743'></a><a href='#L743'>743</a>
803
+ <a name='L744'></a><a href='#L744'>744</a>
804
+ <a name='L745'></a><a href='#L745'>745</a>
805
+ <a name='L746'></a><a href='#L746'>746</a>
806
+ <a name='L747'></a><a href='#L747'>747</a>
807
+ <a name='L748'></a><a href='#L748'>748</a>
808
+ <a name='L749'></a><a href='#L749'>749</a>
809
+ <a name='L750'></a><a href='#L750'>750</a>
810
+ <a name='L751'></a><a href='#L751'>751</a>
811
+ <a name='L752'></a><a href='#L752'>752</a>
812
+ <a name='L753'></a><a href='#L753'>753</a>
813
+ <a name='L754'></a><a href='#L754'>754</a>
814
+ <a name='L755'></a><a href='#L755'>755</a>
815
+ <a name='L756'></a><a href='#L756'>756</a>
816
+ <a name='L757'></a><a href='#L757'>757</a>
817
+ <a name='L758'></a><a href='#L758'>758</a>
818
+ <a name='L759'></a><a href='#L759'>759</a>
819
+ <a name='L760'></a><a href='#L760'>760</a>
820
+ <a name='L761'></a><a href='#L761'>761</a>
821
+ <a name='L762'></a><a href='#L762'>762</a>
822
+ <a name='L763'></a><a href='#L763'>763</a>
823
+ <a name='L764'></a><a href='#L764'>764</a>
824
+ <a name='L765'></a><a href='#L765'>765</a>
825
+ <a name='L766'></a><a href='#L766'>766</a>
826
+ <a name='L767'></a><a href='#L767'>767</a>
827
+ <a name='L768'></a><a href='#L768'>768</a>
828
+ <a name='L769'></a><a href='#L769'>769</a>
829
+ <a name='L770'></a><a href='#L770'>770</a>
830
+ <a name='L771'></a><a href='#L771'>771</a>
831
+ <a name='L772'></a><a href='#L772'>772</a>
832
+ <a name='L773'></a><a href='#L773'>773</a>
833
+ <a name='L774'></a><a href='#L774'>774</a>
834
+ <a name='L775'></a><a href='#L775'>775</a>
835
+ <a name='L776'></a><a href='#L776'>776</a>
836
+ <a name='L777'></a><a href='#L777'>777</a>
837
+ <a name='L778'></a><a href='#L778'>778</a>
838
+ <a name='L779'></a><a href='#L779'>779</a>
839
+ <a name='L780'></a><a href='#L780'>780</a>
840
+ <a name='L781'></a><a href='#L781'>781</a>
841
+ <a name='L782'></a><a href='#L782'>782</a>
842
+ <a name='L783'></a><a href='#L783'>783</a>
843
+ <a name='L784'></a><a href='#L784'>784</a>
844
+ <a name='L785'></a><a href='#L785'>785</a>
845
+ <a name='L786'></a><a href='#L786'>786</a>
846
+ <a name='L787'></a><a href='#L787'>787</a>
847
+ <a name='L788'></a><a href='#L788'>788</a>
848
+ <a name='L789'></a><a href='#L789'>789</a>
849
+ <a name='L790'></a><a href='#L790'>790</a>
850
+ <a name='L791'></a><a href='#L791'>791</a>
851
+ <a name='L792'></a><a href='#L792'>792</a>
852
+ <a name='L793'></a><a href='#L793'>793</a>
853
+ <a name='L794'></a><a href='#L794'>794</a>
854
+ <a name='L795'></a><a href='#L795'>795</a>
855
+ <a name='L796'></a><a href='#L796'>796</a>
856
+ <a name='L797'></a><a href='#L797'>797</a>
857
+ <a name='L798'></a><a href='#L798'>798</a>
858
+ <a name='L799'></a><a href='#L799'>799</a>
859
+ <a name='L800'></a><a href='#L800'>800</a>
860
+ <a name='L801'></a><a href='#L801'>801</a>
861
+ <a name='L802'></a><a href='#L802'>802</a>
862
+ <a name='L803'></a><a href='#L803'>803</a>
863
+ <a name='L804'></a><a href='#L804'>804</a>
864
+ <a name='L805'></a><a href='#L805'>805</a>
865
+ <a name='L806'></a><a href='#L806'>806</a>
866
+ <a name='L807'></a><a href='#L807'>807</a>
867
+ <a name='L808'></a><a href='#L808'>808</a>
868
+ <a name='L809'></a><a href='#L809'>809</a>
869
+ <a name='L810'></a><a href='#L810'>810</a>
870
+ <a name='L811'></a><a href='#L811'>811</a>
871
+ <a name='L812'></a><a href='#L812'>812</a>
872
+ <a name='L813'></a><a href='#L813'>813</a>
873
+ <a name='L814'></a><a href='#L814'>814</a>
874
+ <a name='L815'></a><a href='#L815'>815</a>
875
+ <a name='L816'></a><a href='#L816'>816</a>
876
+ <a name='L817'></a><a href='#L817'>817</a>
877
+ <a name='L818'></a><a href='#L818'>818</a>
878
+ <a name='L819'></a><a href='#L819'>819</a>
879
+ <a name='L820'></a><a href='#L820'>820</a>
880
+ <a name='L821'></a><a href='#L821'>821</a>
881
+ <a name='L822'></a><a href='#L822'>822</a>
882
+ <a name='L823'></a><a href='#L823'>823</a>
883
+ <a name='L824'></a><a href='#L824'>824</a>
884
+ <a name='L825'></a><a href='#L825'>825</a>
885
+ <a name='L826'></a><a href='#L826'>826</a>
886
+ <a name='L827'></a><a href='#L827'>827</a>
887
+ <a name='L828'></a><a href='#L828'>828</a>
888
+ <a name='L829'></a><a href='#L829'>829</a>
889
+ <a name='L830'></a><a href='#L830'>830</a>
890
+ <a name='L831'></a><a href='#L831'>831</a>
891
+ <a name='L832'></a><a href='#L832'>832</a>
892
+ <a name='L833'></a><a href='#L833'>833</a>
893
+ <a name='L834'></a><a href='#L834'>834</a>
894
+ <a name='L835'></a><a href='#L835'>835</a>
895
+ <a name='L836'></a><a href='#L836'>836</a>
896
+ <a name='L837'></a><a href='#L837'>837</a>
897
+ <a name='L838'></a><a href='#L838'>838</a>
898
+ <a name='L839'></a><a href='#L839'>839</a>
899
+ <a name='L840'></a><a href='#L840'>840</a>
900
+ <a name='L841'></a><a href='#L841'>841</a>
901
+ <a name='L842'></a><a href='#L842'>842</a>
902
+ <a name='L843'></a><a href='#L843'>843</a>
903
+ <a name='L844'></a><a href='#L844'>844</a>
904
+ <a name='L845'></a><a href='#L845'>845</a>
905
+ <a name='L846'></a><a href='#L846'>846</a>
906
+ <a name='L847'></a><a href='#L847'>847</a>
907
+ <a name='L848'></a><a href='#L848'>848</a>
908
+ <a name='L849'></a><a href='#L849'>849</a>
909
+ <a name='L850'></a><a href='#L850'>850</a>
910
+ <a name='L851'></a><a href='#L851'>851</a>
911
+ <a name='L852'></a><a href='#L852'>852</a>
912
+ <a name='L853'></a><a href='#L853'>853</a>
913
+ <a name='L854'></a><a href='#L854'>854</a>
914
+ <a name='L855'></a><a href='#L855'>855</a>
915
+ <a name='L856'></a><a href='#L856'>856</a>
916
+ <a name='L857'></a><a href='#L857'>857</a>
917
+ <a name='L858'></a><a href='#L858'>858</a>
918
+ <a name='L859'></a><a href='#L859'>859</a>
919
+ <a name='L860'></a><a href='#L860'>860</a>
920
+ <a name='L861'></a><a href='#L861'>861</a>
921
+ <a name='L862'></a><a href='#L862'>862</a>
922
+ <a name='L863'></a><a href='#L863'>863</a>
923
+ <a name='L864'></a><a href='#L864'>864</a>
924
+ <a name='L865'></a><a href='#L865'>865</a>
925
+ <a name='L866'></a><a href='#L866'>866</a>
926
+ <a name='L867'></a><a href='#L867'>867</a>
927
+ <a name='L868'></a><a href='#L868'>868</a>
928
+ <a name='L869'></a><a href='#L869'>869</a>
929
+ <a name='L870'></a><a href='#L870'>870</a>
930
+ <a name='L871'></a><a href='#L871'>871</a>
931
+ <a name='L872'></a><a href='#L872'>872</a>
932
+ <a name='L873'></a><a href='#L873'>873</a>
933
+ <a name='L874'></a><a href='#L874'>874</a>
934
+ <a name='L875'></a><a href='#L875'>875</a>
935
+ <a name='L876'></a><a href='#L876'>876</a>
936
+ <a name='L877'></a><a href='#L877'>877</a>
937
+ <a name='L878'></a><a href='#L878'>878</a>
938
+ <a name='L879'></a><a href='#L879'>879</a>
939
+ <a name='L880'></a><a href='#L880'>880</a>
940
+ <a name='L881'></a><a href='#L881'>881</a>
941
+ <a name='L882'></a><a href='#L882'>882</a>
942
+ <a name='L883'></a><a href='#L883'>883</a>
943
+ <a name='L884'></a><a href='#L884'>884</a>
944
+ <a name='L885'></a><a href='#L885'>885</a>
945
+ <a name='L886'></a><a href='#L886'>886</a>
946
+ <a name='L887'></a><a href='#L887'>887</a>
947
+ <a name='L888'></a><a href='#L888'>888</a>
948
+ <a name='L889'></a><a href='#L889'>889</a>
949
+ <a name='L890'></a><a href='#L890'>890</a>
950
+ <a name='L891'></a><a href='#L891'>891</a>
951
+ <a name='L892'></a><a href='#L892'>892</a>
952
+ <a name='L893'></a><a href='#L893'>893</a>
953
+ <a name='L894'></a><a href='#L894'>894</a>
954
+ <a name='L895'></a><a href='#L895'>895</a>
955
+ <a name='L896'></a><a href='#L896'>896</a>
956
+ <a name='L897'></a><a href='#L897'>897</a>
957
+ <a name='L898'></a><a href='#L898'>898</a>
958
+ <a name='L899'></a><a href='#L899'>899</a>
959
+ <a name='L900'></a><a href='#L900'>900</a>
960
+ <a name='L901'></a><a href='#L901'>901</a>
961
+ <a name='L902'></a><a href='#L902'>902</a>
962
+ <a name='L903'></a><a href='#L903'>903</a>
963
+ <a name='L904'></a><a href='#L904'>904</a>
964
+ <a name='L905'></a><a href='#L905'>905</a>
965
+ <a name='L906'></a><a href='#L906'>906</a>
966
+ <a name='L907'></a><a href='#L907'>907</a>
967
+ <a name='L908'></a><a href='#L908'>908</a>
968
+ <a name='L909'></a><a href='#L909'>909</a>
969
+ <a name='L910'></a><a href='#L910'>910</a>
970
+ <a name='L911'></a><a href='#L911'>911</a>
971
+ <a name='L912'></a><a href='#L912'>912</a>
972
+ <a name='L913'></a><a href='#L913'>913</a>
973
+ <a name='L914'></a><a href='#L914'>914</a>
974
+ <a name='L915'></a><a href='#L915'>915</a>
975
+ <a name='L916'></a><a href='#L916'>916</a>
976
+ <a name='L917'></a><a href='#L917'>917</a>
977
+ <a name='L918'></a><a href='#L918'>918</a>
978
+ <a name='L919'></a><a href='#L919'>919</a>
979
+ <a name='L920'></a><a href='#L920'>920</a>
980
+ <a name='L921'></a><a href='#L921'>921</a>
981
+ <a name='L922'></a><a href='#L922'>922</a>
982
+ <a name='L923'></a><a href='#L923'>923</a>
983
+ <a name='L924'></a><a href='#L924'>924</a>
984
+ <a name='L925'></a><a href='#L925'>925</a>
985
+ <a name='L926'></a><a href='#L926'>926</a>
986
+ <a name='L927'></a><a href='#L927'>927</a>
987
+ <a name='L928'></a><a href='#L928'>928</a>
988
+ <a name='L929'></a><a href='#L929'>929</a>
989
+ <a name='L930'></a><a href='#L930'>930</a>
990
+ <a name='L931'></a><a href='#L931'>931</a>
991
+ <a name='L932'></a><a href='#L932'>932</a>
992
+ <a name='L933'></a><a href='#L933'>933</a>
993
+ <a name='L934'></a><a href='#L934'>934</a>
994
+ <a name='L935'></a><a href='#L935'>935</a>
995
+ <a name='L936'></a><a href='#L936'>936</a>
996
+ <a name='L937'></a><a href='#L937'>937</a>
997
+ <a name='L938'></a><a href='#L938'>938</a>
998
+ <a name='L939'></a><a href='#L939'>939</a>
999
+ <a name='L940'></a><a href='#L940'>940</a>
1000
+ <a name='L941'></a><a href='#L941'>941</a>
1001
+ <a name='L942'></a><a href='#L942'>942</a>
1002
+ <a name='L943'></a><a href='#L943'>943</a>
1003
+ <a name='L944'></a><a href='#L944'>944</a>
1004
+ <a name='L945'></a><a href='#L945'>945</a>
1005
+ <a name='L946'></a><a href='#L946'>946</a>
1006
+ <a name='L947'></a><a href='#L947'>947</a>
1007
+ <a name='L948'></a><a href='#L948'>948</a>
1008
+ <a name='L949'></a><a href='#L949'>949</a>
1009
+ <a name='L950'></a><a href='#L950'>950</a>
1010
+ <a name='L951'></a><a href='#L951'>951</a>
1011
+ <a name='L952'></a><a href='#L952'>952</a>
1012
+ <a name='L953'></a><a href='#L953'>953</a>
1013
+ <a name='L954'></a><a href='#L954'>954</a>
1014
+ <a name='L955'></a><a href='#L955'>955</a>
1015
+ <a name='L956'></a><a href='#L956'>956</a>
1016
+ <a name='L957'></a><a href='#L957'>957</a>
1017
+ <a name='L958'></a><a href='#L958'>958</a>
1018
+ <a name='L959'></a><a href='#L959'>959</a>
1019
+ <a name='L960'></a><a href='#L960'>960</a>
1020
+ <a name='L961'></a><a href='#L961'>961</a>
1021
+ <a name='L962'></a><a href='#L962'>962</a>
1022
+ <a name='L963'></a><a href='#L963'>963</a>
1023
+ <a name='L964'></a><a href='#L964'>964</a>
1024
+ <a name='L965'></a><a href='#L965'>965</a>
1025
+ <a name='L966'></a><a href='#L966'>966</a>
1026
+ <a name='L967'></a><a href='#L967'>967</a>
1027
+ <a name='L968'></a><a href='#L968'>968</a>
1028
+ <a name='L969'></a><a href='#L969'>969</a>
1029
+ <a name='L970'></a><a href='#L970'>970</a>
1030
+ <a name='L971'></a><a href='#L971'>971</a>
1031
+ <a name='L972'></a><a href='#L972'>972</a>
1032
+ <a name='L973'></a><a href='#L973'>973</a>
1033
+ <a name='L974'></a><a href='#L974'>974</a>
1034
+ <a name='L975'></a><a href='#L975'>975</a>
1035
+ <a name='L976'></a><a href='#L976'>976</a>
1036
+ <a name='L977'></a><a href='#L977'>977</a>
1037
+ <a name='L978'></a><a href='#L978'>978</a>
1038
+ <a name='L979'></a><a href='#L979'>979</a>
1039
+ <a name='L980'></a><a href='#L980'>980</a>
1040
+ <a name='L981'></a><a href='#L981'>981</a>
1041
+ <a name='L982'></a><a href='#L982'>982</a>
1042
+ <a name='L983'></a><a href='#L983'>983</a>
1043
+ <a name='L984'></a><a href='#L984'>984</a>
1044
+ <a name='L985'></a><a href='#L985'>985</a>
1045
+ <a name='L986'></a><a href='#L986'>986</a>
1046
+ <a name='L987'></a><a href='#L987'>987</a>
1047
+ <a name='L988'></a><a href='#L988'>988</a>
1048
+ <a name='L989'></a><a href='#L989'>989</a>
1049
+ <a name='L990'></a><a href='#L990'>990</a>
1050
+ <a name='L991'></a><a href='#L991'>991</a>
1051
+ <a name='L992'></a><a href='#L992'>992</a>
1052
+ <a name='L993'></a><a href='#L993'>993</a>
1053
+ <a name='L994'></a><a href='#L994'>994</a>
1054
+ <a name='L995'></a><a href='#L995'>995</a>
1055
+ <a name='L996'></a><a href='#L996'>996</a>
1056
+ <a name='L997'></a><a href='#L997'>997</a>
1057
+ <a name='L998'></a><a href='#L998'>998</a>
1058
+ <a name='L999'></a><a href='#L999'>999</a>
1059
+ <a name='L1000'></a><a href='#L1000'>1000</a>
1060
+ <a name='L1001'></a><a href='#L1001'>1001</a>
1061
+ <a name='L1002'></a><a href='#L1002'>1002</a>
1062
+ <a name='L1003'></a><a href='#L1003'>1003</a>
1063
+ <a name='L1004'></a><a href='#L1004'>1004</a>
1064
+ <a name='L1005'></a><a href='#L1005'>1005</a>
1065
+ <a name='L1006'></a><a href='#L1006'>1006</a>
1066
+ <a name='L1007'></a><a href='#L1007'>1007</a>
1067
+ <a name='L1008'></a><a href='#L1008'>1008</a>
1068
+ <a name='L1009'></a><a href='#L1009'>1009</a>
1069
+ <a name='L1010'></a><a href='#L1010'>1010</a>
1070
+ <a name='L1011'></a><a href='#L1011'>1011</a>
1071
+ <a name='L1012'></a><a href='#L1012'>1012</a>
1072
+ <a name='L1013'></a><a href='#L1013'>1013</a>
1073
+ <a name='L1014'></a><a href='#L1014'>1014</a>
1074
+ <a name='L1015'></a><a href='#L1015'>1015</a>
1075
+ <a name='L1016'></a><a href='#L1016'>1016</a>
1076
+ <a name='L1017'></a><a href='#L1017'>1017</a>
1077
+ <a name='L1018'></a><a href='#L1018'>1018</a>
1078
+ <a name='L1019'></a><a href='#L1019'>1019</a>
1079
+ <a name='L1020'></a><a href='#L1020'>1020</a>
1080
+ <a name='L1021'></a><a href='#L1021'>1021</a>
1081
+ <a name='L1022'></a><a href='#L1022'>1022</a>
1082
+ <a name='L1023'></a><a href='#L1023'>1023</a>
1083
+ <a name='L1024'></a><a href='#L1024'>1024</a>
1084
+ <a name='L1025'></a><a href='#L1025'>1025</a>
1085
+ <a name='L1026'></a><a href='#L1026'>1026</a>
1086
+ <a name='L1027'></a><a href='#L1027'>1027</a>
1087
+ <a name='L1028'></a><a href='#L1028'>1028</a>
1088
+ <a name='L1029'></a><a href='#L1029'>1029</a>
1089
+ <a name='L1030'></a><a href='#L1030'>1030</a>
1090
+ <a name='L1031'></a><a href='#L1031'>1031</a>
1091
+ <a name='L1032'></a><a href='#L1032'>1032</a>
1092
+ <a name='L1033'></a><a href='#L1033'>1033</a>
1093
+ <a name='L1034'></a><a href='#L1034'>1034</a>
1094
+ <a name='L1035'></a><a href='#L1035'>1035</a>
1095
+ <a name='L1036'></a><a href='#L1036'>1036</a>
1096
+ <a name='L1037'></a><a href='#L1037'>1037</a>
1097
+ <a name='L1038'></a><a href='#L1038'>1038</a>
1098
+ <a name='L1039'></a><a href='#L1039'>1039</a>
1099
+ <a name='L1040'></a><a href='#L1040'>1040</a>
1100
+ <a name='L1041'></a><a href='#L1041'>1041</a>
1101
+ <a name='L1042'></a><a href='#L1042'>1042</a>
1102
+ <a name='L1043'></a><a href='#L1043'>1043</a>
1103
+ <a name='L1044'></a><a href='#L1044'>1044</a>
1104
+ <a name='L1045'></a><a href='#L1045'>1045</a>
1105
+ <a name='L1046'></a><a href='#L1046'>1046</a>
1106
+ <a name='L1047'></a><a href='#L1047'>1047</a>
1107
+ <a name='L1048'></a><a href='#L1048'>1048</a>
1108
+ <a name='L1049'></a><a href='#L1049'>1049</a>
1109
+ <a name='L1050'></a><a href='#L1050'>1050</a>
1110
+ <a name='L1051'></a><a href='#L1051'>1051</a>
1111
+ <a name='L1052'></a><a href='#L1052'>1052</a>
1112
+ <a name='L1053'></a><a href='#L1053'>1053</a>
1113
+ <a name='L1054'></a><a href='#L1054'>1054</a>
1114
+ <a name='L1055'></a><a href='#L1055'>1055</a>
1115
+ <a name='L1056'></a><a href='#L1056'>1056</a>
1116
+ <a name='L1057'></a><a href='#L1057'>1057</a>
1117
+ <a name='L1058'></a><a href='#L1058'>1058</a>
1118
+ <a name='L1059'></a><a href='#L1059'>1059</a>
1119
+ <a name='L1060'></a><a href='#L1060'>1060</a>
1120
+ <a name='L1061'></a><a href='#L1061'>1061</a>
1121
+ <a name='L1062'></a><a href='#L1062'>1062</a>
1122
+ <a name='L1063'></a><a href='#L1063'>1063</a>
1123
+ <a name='L1064'></a><a href='#L1064'>1064</a>
1124
+ <a name='L1065'></a><a href='#L1065'>1065</a>
1125
+ <a name='L1066'></a><a href='#L1066'>1066</a>
1126
+ <a name='L1067'></a><a href='#L1067'>1067</a>
1127
+ <a name='L1068'></a><a href='#L1068'>1068</a>
1128
+ <a name='L1069'></a><a href='#L1069'>1069</a>
1129
+ <a name='L1070'></a><a href='#L1070'>1070</a>
1130
+ <a name='L1071'></a><a href='#L1071'>1071</a>
1131
+ <a name='L1072'></a><a href='#L1072'>1072</a>
1132
+ <a name='L1073'></a><a href='#L1073'>1073</a>
1133
+ <a name='L1074'></a><a href='#L1074'>1074</a>
1134
+ <a name='L1075'></a><a href='#L1075'>1075</a>
1135
+ <a name='L1076'></a><a href='#L1076'>1076</a>
1136
+ <a name='L1077'></a><a href='#L1077'>1077</a>
1137
+ <a name='L1078'></a><a href='#L1078'>1078</a>
1138
+ <a name='L1079'></a><a href='#L1079'>1079</a>
1139
+ <a name='L1080'></a><a href='#L1080'>1080</a>
1140
+ <a name='L1081'></a><a href='#L1081'>1081</a>
1141
+ <a name='L1082'></a><a href='#L1082'>1082</a>
1142
+ <a name='L1083'></a><a href='#L1083'>1083</a>
1143
+ <a name='L1084'></a><a href='#L1084'>1084</a>
1144
+ <a name='L1085'></a><a href='#L1085'>1085</a>
1145
+ <a name='L1086'></a><a href='#L1086'>1086</a>
1146
+ <a name='L1087'></a><a href='#L1087'>1087</a>
1147
+ <a name='L1088'></a><a href='#L1088'>1088</a>
1148
+ <a name='L1089'></a><a href='#L1089'>1089</a>
1149
+ <a name='L1090'></a><a href='#L1090'>1090</a>
1150
+ <a name='L1091'></a><a href='#L1091'>1091</a>
1151
+ <a name='L1092'></a><a href='#L1092'>1092</a>
1152
+ <a name='L1093'></a><a href='#L1093'>1093</a>
1153
+ <a name='L1094'></a><a href='#L1094'>1094</a>
1154
+ <a name='L1095'></a><a href='#L1095'>1095</a>
1155
+ <a name='L1096'></a><a href='#L1096'>1096</a>
1156
+ <a name='L1097'></a><a href='#L1097'>1097</a>
1157
+ <a name='L1098'></a><a href='#L1098'>1098</a>
1158
+ <a name='L1099'></a><a href='#L1099'>1099</a>
1159
+ <a name='L1100'></a><a href='#L1100'>1100</a>
1160
+ <a name='L1101'></a><a href='#L1101'>1101</a>
1161
+ <a name='L1102'></a><a href='#L1102'>1102</a>
1162
+ <a name='L1103'></a><a href='#L1103'>1103</a>
1163
+ <a name='L1104'></a><a href='#L1104'>1104</a>
1164
+ <a name='L1105'></a><a href='#L1105'>1105</a>
1165
+ <a name='L1106'></a><a href='#L1106'>1106</a>
1166
+ <a name='L1107'></a><a href='#L1107'>1107</a>
1167
+ <a name='L1108'></a><a href='#L1108'>1108</a>
1168
+ <a name='L1109'></a><a href='#L1109'>1109</a>
1169
+ <a name='L1110'></a><a href='#L1110'>1110</a>
1170
+ <a name='L1111'></a><a href='#L1111'>1111</a>
1171
+ <a name='L1112'></a><a href='#L1112'>1112</a>
1172
+ <a name='L1113'></a><a href='#L1113'>1113</a>
1173
+ <a name='L1114'></a><a href='#L1114'>1114</a>
1174
+ <a name='L1115'></a><a href='#L1115'>1115</a>
1175
+ <a name='L1116'></a><a href='#L1116'>1116</a>
1176
+ <a name='L1117'></a><a href='#L1117'>1117</a>
1177
+ <a name='L1118'></a><a href='#L1118'>1118</a>
1178
+ <a name='L1119'></a><a href='#L1119'>1119</a>
1179
+ <a name='L1120'></a><a href='#L1120'>1120</a>
1180
+ <a name='L1121'></a><a href='#L1121'>1121</a>
1181
+ <a name='L1122'></a><a href='#L1122'>1122</a>
1182
+ <a name='L1123'></a><a href='#L1123'>1123</a>
1183
+ <a name='L1124'></a><a href='#L1124'>1124</a>
1184
+ <a name='L1125'></a><a href='#L1125'>1125</a>
1185
+ <a name='L1126'></a><a href='#L1126'>1126</a>
1186
+ <a name='L1127'></a><a href='#L1127'>1127</a>
1187
+ <a name='L1128'></a><a href='#L1128'>1128</a>
1188
+ <a name='L1129'></a><a href='#L1129'>1129</a>
1189
+ <a name='L1130'></a><a href='#L1130'>1130</a>
1190
+ <a name='L1131'></a><a href='#L1131'>1131</a>
1191
+ <a name='L1132'></a><a href='#L1132'>1132</a>
1192
+ <a name='L1133'></a><a href='#L1133'>1133</a>
1193
+ <a name='L1134'></a><a href='#L1134'>1134</a>
1194
+ <a name='L1135'></a><a href='#L1135'>1135</a>
1195
+ <a name='L1136'></a><a href='#L1136'>1136</a>
1196
+ <a name='L1137'></a><a href='#L1137'>1137</a>
1197
+ <a name='L1138'></a><a href='#L1138'>1138</a>
1198
+ <a name='L1139'></a><a href='#L1139'>1139</a>
1199
+ <a name='L1140'></a><a href='#L1140'>1140</a>
1200
+ <a name='L1141'></a><a href='#L1141'>1141</a>
1201
+ <a name='L1142'></a><a href='#L1142'>1142</a>
1202
+ <a name='L1143'></a><a href='#L1143'>1143</a>
1203
+ <a name='L1144'></a><a href='#L1144'>1144</a>
1204
+ <a name='L1145'></a><a href='#L1145'>1145</a>
1205
+ <a name='L1146'></a><a href='#L1146'>1146</a>
1206
+ <a name='L1147'></a><a href='#L1147'>1147</a>
1207
+ <a name='L1148'></a><a href='#L1148'>1148</a>
1208
+ <a name='L1149'></a><a href='#L1149'>1149</a>
1209
+ <a name='L1150'></a><a href='#L1150'>1150</a>
1210
+ <a name='L1151'></a><a href='#L1151'>1151</a>
1211
+ <a name='L1152'></a><a href='#L1152'>1152</a>
1212
+ <a name='L1153'></a><a href='#L1153'>1153</a>
1213
+ <a name='L1154'></a><a href='#L1154'>1154</a>
1214
+ <a name='L1155'></a><a href='#L1155'>1155</a>
1215
+ <a name='L1156'></a><a href='#L1156'>1156</a>
1216
+ <a name='L1157'></a><a href='#L1157'>1157</a>
1217
+ <a name='L1158'></a><a href='#L1158'>1158</a>
1218
+ <a name='L1159'></a><a href='#L1159'>1159</a>
1219
+ <a name='L1160'></a><a href='#L1160'>1160</a>
1220
+ <a name='L1161'></a><a href='#L1161'>1161</a>
1221
+ <a name='L1162'></a><a href='#L1162'>1162</a>
1222
+ <a name='L1163'></a><a href='#L1163'>1163</a>
1223
+ <a name='L1164'></a><a href='#L1164'>1164</a>
1224
+ <a name='L1165'></a><a href='#L1165'>1165</a>
1225
+ <a name='L1166'></a><a href='#L1166'>1166</a>
1226
+ <a name='L1167'></a><a href='#L1167'>1167</a>
1227
+ <a name='L1168'></a><a href='#L1168'>1168</a>
1228
+ <a name='L1169'></a><a href='#L1169'>1169</a>
1229
+ <a name='L1170'></a><a href='#L1170'>1170</a>
1230
+ <a name='L1171'></a><a href='#L1171'>1171</a>
1231
+ <a name='L1172'></a><a href='#L1172'>1172</a>
1232
+ <a name='L1173'></a><a href='#L1173'>1173</a>
1233
+ <a name='L1174'></a><a href='#L1174'>1174</a>
1234
+ <a name='L1175'></a><a href='#L1175'>1175</a>
1235
+ <a name='L1176'></a><a href='#L1176'>1176</a>
1236
+ <a name='L1177'></a><a href='#L1177'>1177</a>
1237
+ <a name='L1178'></a><a href='#L1178'>1178</a>
1238
+ <a name='L1179'></a><a href='#L1179'>1179</a>
1239
+ <a name='L1180'></a><a href='#L1180'>1180</a>
1240
+ <a name='L1181'></a><a href='#L1181'>1181</a>
1241
+ <a name='L1182'></a><a href='#L1182'>1182</a>
1242
+ <a name='L1183'></a><a href='#L1183'>1183</a>
1243
+ <a name='L1184'></a><a href='#L1184'>1184</a>
1244
+ <a name='L1185'></a><a href='#L1185'>1185</a>
1245
+ <a name='L1186'></a><a href='#L1186'>1186</a>
1246
+ <a name='L1187'></a><a href='#L1187'>1187</a>
1247
+ <a name='L1188'></a><a href='#L1188'>1188</a>
1248
+ <a name='L1189'></a><a href='#L1189'>1189</a>
1249
+ <a name='L1190'></a><a href='#L1190'>1190</a>
1250
+ <a name='L1191'></a><a href='#L1191'>1191</a>
1251
+ <a name='L1192'></a><a href='#L1192'>1192</a>
1252
+ <a name='L1193'></a><a href='#L1193'>1193</a>
1253
+ <a name='L1194'></a><a href='#L1194'>1194</a>
1254
+ <a name='L1195'></a><a href='#L1195'>1195</a>
1255
+ <a name='L1196'></a><a href='#L1196'>1196</a>
1256
+ <a name='L1197'></a><a href='#L1197'>1197</a>
1257
+ <a name='L1198'></a><a href='#L1198'>1198</a>
1258
+ <a name='L1199'></a><a href='#L1199'>1199</a>
1259
+ <a name='L1200'></a><a href='#L1200'>1200</a>
1260
+ <a name='L1201'></a><a href='#L1201'>1201</a>
1261
+ <a name='L1202'></a><a href='#L1202'>1202</a>
1262
+ <a name='L1203'></a><a href='#L1203'>1203</a>
1263
+ <a name='L1204'></a><a href='#L1204'>1204</a>
1264
+ <a name='L1205'></a><a href='#L1205'>1205</a>
1265
+ <a name='L1206'></a><a href='#L1206'>1206</a>
1266
+ <a name='L1207'></a><a href='#L1207'>1207</a>
1267
+ <a name='L1208'></a><a href='#L1208'>1208</a>
1268
+ <a name='L1209'></a><a href='#L1209'>1209</a>
1269
+ <a name='L1210'></a><a href='#L1210'>1210</a>
1270
+ <a name='L1211'></a><a href='#L1211'>1211</a>
1271
+ <a name='L1212'></a><a href='#L1212'>1212</a>
1272
+ <a name='L1213'></a><a href='#L1213'>1213</a>
1273
+ <a name='L1214'></a><a href='#L1214'>1214</a>
1274
+ <a name='L1215'></a><a href='#L1215'>1215</a>
1275
+ <a name='L1216'></a><a href='#L1216'>1216</a>
1276
+ <a name='L1217'></a><a href='#L1217'>1217</a>
1277
+ <a name='L1218'></a><a href='#L1218'>1218</a>
1278
+ <a name='L1219'></a><a href='#L1219'>1219</a>
1279
+ <a name='L1220'></a><a href='#L1220'>1220</a>
1280
+ <a name='L1221'></a><a href='#L1221'>1221</a>
1281
+ <a name='L1222'></a><a href='#L1222'>1222</a>
1282
+ <a name='L1223'></a><a href='#L1223'>1223</a>
1283
+ <a name='L1224'></a><a href='#L1224'>1224</a>
1284
+ <a name='L1225'></a><a href='#L1225'>1225</a>
1285
+ <a name='L1226'></a><a href='#L1226'>1226</a>
1286
+ <a name='L1227'></a><a href='#L1227'>1227</a>
1287
+ <a name='L1228'></a><a href='#L1228'>1228</a>
1288
+ <a name='L1229'></a><a href='#L1229'>1229</a>
1289
+ <a name='L1230'></a><a href='#L1230'>1230</a>
1290
+ <a name='L1231'></a><a href='#L1231'>1231</a>
1291
+ <a name='L1232'></a><a href='#L1232'>1232</a>
1292
+ <a name='L1233'></a><a href='#L1233'>1233</a>
1293
+ <a name='L1234'></a><a href='#L1234'>1234</a>
1294
+ <a name='L1235'></a><a href='#L1235'>1235</a>
1295
+ <a name='L1236'></a><a href='#L1236'>1236</a>
1296
+ <a name='L1237'></a><a href='#L1237'>1237</a>
1297
+ <a name='L1238'></a><a href='#L1238'>1238</a>
1298
+ <a name='L1239'></a><a href='#L1239'>1239</a>
1299
+ <a name='L1240'></a><a href='#L1240'>1240</a>
1300
+ <a name='L1241'></a><a href='#L1241'>1241</a>
1301
+ <a name='L1242'></a><a href='#L1242'>1242</a>
1302
+ <a name='L1243'></a><a href='#L1243'>1243</a>
1303
+ <a name='L1244'></a><a href='#L1244'>1244</a>
1304
+ <a name='L1245'></a><a href='#L1245'>1245</a>
1305
+ <a name='L1246'></a><a href='#L1246'>1246</a>
1306
+ <a name='L1247'></a><a href='#L1247'>1247</a>
1307
+ <a name='L1248'></a><a href='#L1248'>1248</a>
1308
+ <a name='L1249'></a><a href='#L1249'>1249</a>
1309
+ <a name='L1250'></a><a href='#L1250'>1250</a>
1310
+ <a name='L1251'></a><a href='#L1251'>1251</a>
1311
+ <a name='L1252'></a><a href='#L1252'>1252</a>
1312
+ <a name='L1253'></a><a href='#L1253'>1253</a>
1313
+ <a name='L1254'></a><a href='#L1254'>1254</a>
1314
+ <a name='L1255'></a><a href='#L1255'>1255</a>
1315
+ <a name='L1256'></a><a href='#L1256'>1256</a>
1316
+ <a name='L1257'></a><a href='#L1257'>1257</a>
1317
+ <a name='L1258'></a><a href='#L1258'>1258</a>
1318
+ <a name='L1259'></a><a href='#L1259'>1259</a>
1319
+ <a name='L1260'></a><a href='#L1260'>1260</a>
1320
+ <a name='L1261'></a><a href='#L1261'>1261</a></td><td class="line-coverage quiet"><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-yes">1x</span>
1326
+ <span class="cline-any cline-neutral">&nbsp;</span>
1327
+ <span class="cline-any cline-yes">1x</span>
1328
+ <span class="cline-any cline-yes">1x</span>
1329
+ <span class="cline-any cline-neutral">&nbsp;</span>
1330
+ <span class="cline-any cline-yes">1x</span>
1331
+ <span class="cline-any cline-neutral">&nbsp;</span>
1332
+ <span class="cline-any cline-yes">1x</span>
1333
+ <span class="cline-any cline-neutral">&nbsp;</span>
1334
+ <span class="cline-any cline-neutral">&nbsp;</span>
1335
+ <span class="cline-any cline-neutral">&nbsp;</span>
1336
+ <span class="cline-any cline-neutral">&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">1x</span>
1340
+ <span class="cline-any cline-neutral">&nbsp;</span>
1341
+ <span class="cline-any cline-neutral">&nbsp;</span>
1342
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
1348
+ <span class="cline-any cline-neutral">&nbsp;</span>
1349
+ <span class="cline-any cline-neutral">&nbsp;</span>
1350
+ <span class="cline-any cline-neutral">&nbsp;</span>
1351
+ <span class="cline-any cline-neutral">&nbsp;</span>
1352
+ <span class="cline-any cline-neutral">&nbsp;</span>
1353
+ <span class="cline-any cline-neutral">&nbsp;</span>
1354
+ <span class="cline-any cline-yes">1x</span>
1355
+ <span class="cline-any cline-neutral">&nbsp;</span>
1356
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1361
+ <span class="cline-any cline-neutral">&nbsp;</span>
1362
+ <span class="cline-any cline-yes">6306x</span>
1363
+ <span class="cline-any cline-yes">3320x</span>
1364
+ <span class="cline-any cline-yes">3320x</span>
1365
+ <span class="cline-any cline-yes">3320x</span>
1366
+ <span class="cline-any cline-neutral">&nbsp;</span>
1367
+ <span class="cline-any cline-neutral">&nbsp;</span>
1368
+ <span class="cline-any cline-yes">1x</span>
1369
+ <span class="cline-any cline-yes">114x</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">1x</span>
1373
+ <span class="cline-any cline-no">&nbsp;</span>
1374
+ <span class="cline-any cline-neutral">&nbsp;</span>
1375
+ <span class="cline-any cline-yes">1x</span>
1376
+ <span class="cline-any cline-neutral">&nbsp;</span>
1377
+ <span class="cline-any cline-yes">1x</span>
1378
+ <span class="cline-any cline-neutral">&nbsp;</span>
1379
+ <span class="cline-any cline-yes">9x</span>
1380
+ <span class="cline-any cline-yes">9x</span>
1381
+ <span class="cline-any cline-neutral">&nbsp;</span>
1382
+ <span class="cline-any cline-yes">9x</span>
1383
+ <span class="cline-any cline-neutral">&nbsp;</span>
1384
+ <span class="cline-any cline-yes">1x</span>
1385
+ <span class="cline-any cline-neutral">&nbsp;</span>
1386
+ <span class="cline-any cline-yes">1x</span>
1387
+ <span class="cline-any cline-neutral">&nbsp;</span>
1388
+ <span class="cline-any cline-yes">73x</span>
1389
+ <span class="cline-any cline-neutral">&nbsp;</span>
1390
+ <span class="cline-any cline-neutral">&nbsp;</span>
1391
+ <span class="cline-any cline-neutral">&nbsp;</span>
1392
+ <span class="cline-any cline-yes">73x</span>
1393
+ <span class="cline-any cline-yes">73x</span>
1394
+ <span class="cline-any cline-neutral">&nbsp;</span>
1395
+ <span class="cline-any cline-yes">1x</span>
1396
+ <span class="cline-any cline-neutral">&nbsp;</span>
1397
+ <span class="cline-any cline-yes">1x</span>
1398
+ <span class="cline-any cline-neutral">&nbsp;</span>
1399
+ <span class="cline-any cline-yes">101x</span>
1400
+ <span class="cline-any cline-neutral">&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-yes">101x</span>
1404
+ <span class="cline-any cline-yes">101x</span>
1405
+ <span class="cline-any cline-neutral">&nbsp;</span>
1406
+ <span class="cline-any cline-neutral">&nbsp;</span>
1407
+ <span class="cline-any cline-yes">1x</span>
1408
+ <span class="cline-any cline-yes">71x</span>
1409
+ <span class="cline-any cline-neutral">&nbsp;</span>
1410
+ <span class="cline-any cline-yes">1x</span>
1411
+ <span class="cline-any cline-neutral">&nbsp;</span>
1412
+ <span class="cline-any cline-yes">1x</span>
1413
+ <span class="cline-any cline-neutral">&nbsp;</span>
1414
+ <span class="cline-any cline-yes">568x</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-neutral">&nbsp;</span>
1418
+ <span class="cline-any cline-neutral">&nbsp;</span>
1419
+ <span class="cline-any cline-yes">568x</span>
1420
+ <span class="cline-any cline-yes">568x</span>
1421
+ <span class="cline-any cline-yes">568x</span>
1422
+ <span class="cline-any cline-neutral">&nbsp;</span>
1423
+ <span class="cline-any cline-yes">1x</span>
1424
+ <span class="cline-any cline-neutral">&nbsp;</span>
1425
+ <span class="cline-any cline-yes">1x</span>
1426
+ <span class="cline-any cline-yes">1379x</span>
1427
+ <span class="cline-any cline-neutral">&nbsp;</span>
1428
+ <span class="cline-any cline-neutral">&nbsp;</span>
1429
+ <span class="cline-any cline-neutral">&nbsp;</span>
1430
+ <span class="cline-any cline-yes">1379x</span>
1431
+ <span class="cline-any cline-yes">1379x</span>
1432
+ <span class="cline-any cline-neutral">&nbsp;</span>
1433
+ <span class="cline-any cline-yes">1x</span>
1434
+ <span class="cline-any cline-neutral">&nbsp;</span>
1435
+ <span class="cline-any cline-yes">1x</span>
1436
+ <span class="cline-any cline-yes">844x</span>
1437
+ <span class="cline-any cline-neutral">&nbsp;</span>
1438
+ <span class="cline-any cline-neutral">&nbsp;</span>
1439
+ <span class="cline-any cline-neutral">&nbsp;</span>
1440
+ <span class="cline-any cline-neutral">&nbsp;</span>
1441
+ <span class="cline-any cline-neutral">&nbsp;</span>
1442
+ <span class="cline-any cline-yes">844x</span>
1443
+ <span class="cline-any cline-yes">844x</span>
1444
+ <span class="cline-any cline-yes">844x</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-yes">1x</span>
1448
+ <span class="cline-any cline-yes">178x</span>
1449
+ <span class="cline-any cline-neutral">&nbsp;</span>
1450
+ <span class="cline-any cline-yes">1x</span>
1451
+ <span class="cline-any cline-neutral">&nbsp;</span>
1452
+ <span class="cline-any cline-yes">1x</span>
1453
+ <span class="cline-any cline-yes">346x</span>
1454
+ <span class="cline-any cline-neutral">&nbsp;</span>
1455
+ <span class="cline-any cline-neutral">&nbsp;</span>
1456
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
+ <span class="cline-any cline-yes">346x</span>
1458
+ <span class="cline-any cline-neutral">&nbsp;</span>
1459
+ <span class="cline-any cline-yes">346x</span>
1460
+ <span class="cline-any cline-neutral">&nbsp;</span>
1461
+ <span class="cline-any cline-neutral">&nbsp;</span>
1462
+ <span class="cline-any cline-yes">1x</span>
1463
+ <span class="cline-any cline-yes">184x</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-yes">1x</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-yes">1x</span>
1470
+ <span class="cline-any cline-yes">2714x</span>
1471
+ <span class="cline-any cline-no">&nbsp;</span>
1472
+ <span class="cline-any cline-neutral">&nbsp;</span>
1473
+ <span class="cline-any cline-yes">2714x</span>
1474
+ <span class="cline-any cline-neutral">&nbsp;</span>
1475
+ <span class="cline-any cline-neutral">&nbsp;</span>
1476
+ <span class="cline-any cline-neutral">&nbsp;</span>
1477
+ <span class="cline-any cline-neutral">&nbsp;</span>
1478
+ <span class="cline-any cline-neutral">&nbsp;</span>
1479
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1485
+ <span class="cline-any cline-neutral">&nbsp;</span>
1486
+ <span class="cline-any cline-yes">1x</span>
1487
+ <span class="cline-any cline-yes">1x</span>
1488
+ <span class="cline-any cline-neutral">&nbsp;</span>
1489
+ <span class="cline-any cline-neutral">&nbsp;</span>
1490
+ <span class="cline-any cline-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-neutral">&nbsp;</span>
1494
+ <span class="cline-any cline-neutral">&nbsp;</span>
1495
+ <span class="cline-any cline-neutral">&nbsp;</span>
1496
+ <span class="cline-any cline-neutral">&nbsp;</span>
1497
+ <span class="cline-any cline-neutral">&nbsp;</span>
1498
+ <span class="cline-any cline-yes">1x</span>
1499
+ <span class="cline-any cline-yes">135x</span>
1500
+ <span class="cline-any cline-yes">135x</span>
1501
+ <span class="cline-any cline-neutral">&nbsp;</span>
1502
+ <span class="cline-any cline-yes">1x</span>
1503
+ <span class="cline-any cline-yes">195x</span>
1504
+ <span class="cline-any cline-neutral">&nbsp;</span>
1505
+ <span class="cline-any cline-yes">1x</span>
1506
+ <span class="cline-any cline-yes">39x</span>
1507
+ <span class="cline-any cline-neutral">&nbsp;</span>
1508
+ <span class="cline-any cline-yes">1x</span>
1509
+ <span class="cline-any cline-yes">227x</span>
1510
+ <span class="cline-any cline-neutral">&nbsp;</span>
1511
+ <span class="cline-any cline-yes">1x</span>
1512
+ <span class="cline-any cline-yes">50x</span>
1513
+ <span class="cline-any cline-neutral">&nbsp;</span>
1514
+ <span class="cline-any cline-yes">1x</span>
1515
+ <span class="cline-any cline-neutral">&nbsp;</span>
1516
+ <span class="cline-any cline-yes">1x</span>
1517
+ <span class="cline-any cline-neutral">&nbsp;</span>
1518
+ <span class="cline-any cline-yes">2x</span>
1519
+ <span class="cline-any cline-yes">1x</span>
1520
+ <span class="cline-any cline-yes">1x</span>
1521
+ <span class="cline-any cline-yes">721x</span>
1522
+ <span class="cline-any cline-yes">119x</span>
1523
+ <span class="cline-any cline-neutral">&nbsp;</span>
1524
+ <span class="cline-any cline-yes">1x</span>
1525
+ <span class="cline-any cline-yes">1x</span>
1526
+ <span class="cline-any cline-neutral">&nbsp;</span>
1527
+ <span class="cline-any cline-yes">1x</span>
1528
+ <span class="cline-any cline-neutral">&nbsp;</span>
1529
+ <span class="cline-any cline-neutral">&nbsp;</span>
1530
+ <span class="cline-any cline-neutral">&nbsp;</span>
1531
+ <span class="cline-any cline-neutral">&nbsp;</span>
1532
+ <span class="cline-any cline-neutral">&nbsp;</span>
1533
+ <span class="cline-any cline-neutral">&nbsp;</span>
1534
+ <span class="cline-any cline-neutral">&nbsp;</span>
1535
+ <span class="cline-any cline-neutral">&nbsp;</span>
1536
+ <span class="cline-any cline-neutral">&nbsp;</span>
1537
+ <span class="cline-any cline-yes">880x</span>
1538
+ <span class="cline-any cline-yes">880x</span>
1539
+ <span class="cline-any cline-yes">880x</span>
1540
+ <span class="cline-any cline-yes">880x</span>
1541
+ <span class="cline-any cline-yes">880x</span>
1542
+ <span class="cline-any cline-yes">880x</span>
1543
+ <span class="cline-any cline-neutral">&nbsp;</span>
1544
+ <span class="cline-any cline-neutral">&nbsp;</span>
1545
+ <span class="cline-any cline-yes">1x</span>
1546
+ <span class="cline-any cline-yes">746x</span>
1547
+ <span class="cline-any cline-neutral">&nbsp;</span>
1548
+ <span class="cline-any cline-neutral">&nbsp;</span>
1549
+ <span class="cline-any cline-yes">1x</span>
1550
+ <span class="cline-any cline-no">&nbsp;</span>
1551
+ <span class="cline-any cline-no">&nbsp;</span>
1552
+ <span class="cline-any cline-neutral">&nbsp;</span>
1553
+ <span class="cline-any cline-neutral">&nbsp;</span>
1554
+ <span class="cline-any cline-neutral">&nbsp;</span>
1555
+ <span class="cline-any cline-yes">1x</span>
1556
+ <span class="cline-any cline-yes">548x</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">1x</span>
1560
+ <span class="cline-any cline-yes">26x</span>
1561
+ <span class="cline-any cline-yes">3x</span>
1562
+ <span class="cline-any cline-yes">3x</span>
1563
+ <span class="cline-any cline-yes">3x</span>
1564
+ <span class="cline-any cline-yes">9x</span>
1565
+ <span class="cline-any cline-neutral">&nbsp;</span>
1566
+ <span class="cline-any cline-neutral">&nbsp;</span>
1567
+ <span class="cline-any cline-neutral">&nbsp;</span>
1568
+ <span class="cline-any cline-neutral">&nbsp;</span>
1569
+ <span class="cline-any cline-neutral">&nbsp;</span>
1570
+ <span class="cline-any cline-yes">1x</span>
1571
+ <span class="cline-any cline-yes">471x</span>
1572
+ <span class="cline-any cline-yes">471x</span>
1573
+ <span class="cline-any cline-yes">471x</span>
1574
+ <span class="cline-any cline-yes">59x</span>
1575
+ <span class="cline-any cline-neutral">&nbsp;</span>
1576
+ <span class="cline-any cline-yes">471x</span>
1577
+ <span class="cline-any cline-yes">20x</span>
1578
+ <span class="cline-any cline-neutral">&nbsp;</span>
1579
+ <span class="cline-any cline-neutral">&nbsp;</span>
1580
+ <span class="cline-any cline-neutral">&nbsp;</span>
1581
+ <span class="cline-any cline-yes">1x</span>
1582
+ <span class="cline-any cline-yes">58x</span>
1583
+ <span class="cline-any cline-yes">58x</span>
1584
+ <span class="cline-any cline-yes">18x</span>
1585
+ <span class="cline-any cline-neutral">&nbsp;</span>
1586
+ <span class="cline-any cline-yes">40x</span>
1587
+ <span class="cline-any cline-no">&nbsp;</span>
1588
+ <span class="cline-any cline-neutral">&nbsp;</span>
1589
+ <span class="cline-any cline-yes">40x</span>
1590
+ <span class="cline-any cline-yes">7x</span>
1591
+ <span class="cline-any cline-neutral">&nbsp;</span>
1592
+ <span class="cline-any cline-yes">33x</span>
1593
+ <span class="cline-any cline-yes">5x</span>
1594
+ <span class="cline-any cline-neutral">&nbsp;</span>
1595
+ <span class="cline-any cline-yes">28x</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-yes">1x</span>
1599
+ <span class="cline-any cline-neutral">&nbsp;</span>
1600
+ <span class="cline-any cline-yes">1x</span>
1601
+ <span class="cline-any cline-no">&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">1x</span>
1605
+ <span class="cline-any cline-yes">151x</span>
1606
+ <span class="cline-any cline-neutral">&nbsp;</span>
1607
+ <span class="cline-any cline-neutral">&nbsp;</span>
1608
+ <span class="cline-any cline-yes">1x</span>
1609
+ <span class="cline-any cline-yes">64x</span>
1610
+ <span class="cline-any cline-neutral">&nbsp;</span>
1611
+ <span class="cline-any cline-neutral">&nbsp;</span>
1612
+ <span class="cline-any cline-yes">275x</span>
1613
+ <span class="cline-any cline-yes">144x</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-yes">1x</span>
1617
+ <span class="cline-any cline-neutral">&nbsp;</span>
1618
+ <span class="cline-any cline-yes">350x</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-yes">185x</span>
1622
+ <span class="cline-any cline-yes">152x</span>
1623
+ <span class="cline-any cline-yes">149x</span>
1624
+ <span class="cline-any cline-neutral">&nbsp;</span>
1625
+ <span class="cline-any cline-yes">3x</span>
1626
+ <span class="cline-any cline-neutral">&nbsp;</span>
1627
+ <span class="cline-any cline-neutral">&nbsp;</span>
1628
+ <span class="cline-any cline-yes">1x</span>
1629
+ <span class="cline-any cline-yes">7x</span>
1630
+ <span class="cline-any cline-yes">7x</span>
1631
+ <span class="cline-any cline-yes">99x</span>
1632
+ <span class="cline-any cline-yes">99x</span>
1633
+ <span class="cline-any cline-yes">99x</span>
1634
+ <span class="cline-any cline-yes">99x</span>
1635
+ <span class="cline-any cline-yes">92x</span>
1636
+ <span class="cline-any cline-neutral">&nbsp;</span>
1637
+ <span class="cline-any cline-neutral">&nbsp;</span>
1638
+ <span class="cline-any cline-yes">99x</span>
1639
+ <span class="cline-any cline-neutral">&nbsp;</span>
1640
+ <span class="cline-any cline-yes">7x</span>
1641
+ <span class="cline-any cline-neutral">&nbsp;</span>
1642
+ <span class="cline-any cline-neutral">&nbsp;</span>
1643
+ <span class="cline-any cline-neutral">&nbsp;</span>
1644
+ <span class="cline-any cline-yes">1x</span>
1645
+ <span class="cline-any cline-yes">142x</span>
1646
+ <span class="cline-any cline-yes">142x</span>
1647
+ <span class="cline-any cline-yes">142x</span>
1648
+ <span class="cline-any cline-yes">142x</span>
1649
+ <span class="cline-any cline-yes">84x</span>
1650
+ <span class="cline-any cline-yes">84x</span>
1651
+ <span class="cline-any cline-neutral">&nbsp;</span>
1652
+ <span class="cline-any cline-neutral">&nbsp;</span>
1653
+ <span class="cline-any cline-no">&nbsp;</span>
1654
+ <span class="cline-any cline-neutral">&nbsp;</span>
1655
+ <span class="cline-any cline-neutral">&nbsp;</span>
1656
+ <span class="cline-any cline-yes">87x</span>
1657
+ <span class="cline-any cline-yes">85x</span>
1658
+ <span class="cline-any cline-yes">85x</span>
1659
+ <span class="cline-any cline-yes">85x</span>
1660
+ <span class="cline-any cline-neutral">&nbsp;</span>
1661
+ <span class="cline-any cline-yes">85x</span>
1662
+ <span class="cline-any cline-neutral">&nbsp;</span>
1663
+ <span class="cline-any cline-yes">1x</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-yes">948x</span>
1668
+ <span class="cline-any cline-yes">32x</span>
1669
+ <span class="cline-any cline-neutral">&nbsp;</span>
1670
+ <span class="cline-any cline-yes">916x</span>
1671
+ <span class="cline-any cline-yes">916x</span>
1672
+ <span class="cline-any cline-neutral">&nbsp;</span>
1673
+ <span class="cline-any cline-yes">484x</span>
1674
+ <span class="cline-any cline-yes">484x</span>
1675
+ <span class="cline-any cline-neutral">&nbsp;</span>
1676
+ <span class="cline-any cline-yes">44x</span>
1677
+ <span class="cline-any cline-yes">44x</span>
1678
+ <span class="cline-any cline-neutral">&nbsp;</span>
1679
+ <span class="cline-any cline-yes">246x</span>
1680
+ <span class="cline-any cline-yes">246x</span>
1681
+ <span class="cline-any cline-neutral">&nbsp;</span>
1682
+ <span class="cline-any cline-yes">99x</span>
1683
+ <span class="cline-any cline-yes">99x</span>
1684
+ <span class="cline-any cline-neutral">&nbsp;</span>
1685
+ <span class="cline-any cline-no">&nbsp;</span>
1686
+ <span class="cline-any cline-neutral">&nbsp;</span>
1687
+ <span class="cline-any cline-yes">916x</span>
1688
+ <span class="cline-any cline-neutral">&nbsp;</span>
1689
+ <span class="cline-any cline-yes">916x</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-neutral">&nbsp;</span>
1694
+ <span class="cline-any cline-yes">589x</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">916x</span>
1698
+ <span class="cline-any cline-yes">3x</span>
1699
+ <span class="cline-any cline-yes">1x</span>
1700
+ <span class="cline-any cline-neutral">&nbsp;</span>
1701
+ <span class="cline-any cline-neutral">&nbsp;</span>
1702
+ <span class="cline-any cline-neutral">&nbsp;</span>
1703
+ <span class="cline-any cline-neutral">&nbsp;</span>
1704
+ <span class="cline-any cline-neutral">&nbsp;</span>
1705
+ <span class="cline-any cline-neutral">&nbsp;</span>
1706
+ <span class="cline-any cline-yes">913x</span>
1707
+ <span class="cline-any cline-yes">584x</span>
1708
+ <span class="cline-any cline-yes">45x</span>
1709
+ <span class="cline-any cline-neutral">&nbsp;</span>
1710
+ <span class="cline-any cline-neutral">&nbsp;</span>
1711
+ <span class="cline-any cline-neutral">&nbsp;</span>
1712
+ <span class="cline-any cline-neutral">&nbsp;</span>
1713
+ <span class="cline-any cline-neutral">&nbsp;</span>
1714
+ <span class="cline-any cline-neutral">&nbsp;</span>
1715
+ <span class="cline-any cline-yes">916x</span>
1716
+ <span class="cline-any cline-yes">72x</span>
1717
+ <span class="cline-any cline-yes">72x</span>
1718
+ <span class="cline-any cline-neutral">&nbsp;</span>
1719
+ <span class="cline-any cline-neutral">&nbsp;</span>
1720
+ <span class="cline-any cline-yes">916x</span>
1721
+ <span class="cline-any cline-yes">916x</span>
1722
+ <span class="cline-any cline-yes">2x</span>
1723
+ <span class="cline-any cline-yes">2x</span>
1724
+ <span class="cline-any cline-yes">2x</span>
1725
+ <span class="cline-any cline-yes">2x</span>
1726
+ <span class="cline-any cline-yes">1x</span>
1727
+ <span class="cline-any cline-neutral">&nbsp;</span>
1728
+ <span class="cline-any cline-neutral">&nbsp;</span>
1729
+ <span class="cline-any cline-neutral">&nbsp;</span>
1730
+ <span class="cline-any cline-neutral">&nbsp;</span>
1731
+ <span class="cline-any cline-neutral">&nbsp;</span>
1732
+ <span class="cline-any cline-yes">2x</span>
1733
+ <span class="cline-any cline-no">&nbsp;</span>
1734
+ <span class="cline-any cline-no">&nbsp;</span>
1735
+ <span class="cline-any cline-neutral">&nbsp;</span>
1736
+ <span class="cline-any cline-neutral">&nbsp;</span>
1737
+ <span class="cline-any cline-neutral">&nbsp;</span>
1738
+ <span class="cline-any cline-yes">916x</span>
1739
+ <span class="cline-any cline-yes">61x</span>
1740
+ <span class="cline-any cline-neutral">&nbsp;</span>
1741
+ <span class="cline-any cline-neutral">&nbsp;</span>
1742
+ <span class="cline-any cline-yes">61x</span>
1743
+ <span class="cline-any cline-yes">133x</span>
1744
+ <span class="cline-any cline-yes">133x</span>
1745
+ <span class="cline-any cline-yes">133x</span>
1746
+ <span class="cline-any cline-yes">133x</span>
1747
+ <span class="cline-any cline-yes">133x</span>
1748
+ <span class="cline-any cline-yes">133x</span>
1749
+ <span class="cline-any cline-yes">58x</span>
1750
+ <span class="cline-any cline-neutral">&nbsp;</span>
1751
+ <span class="cline-any cline-yes">133x</span>
1752
+ <span class="cline-any cline-yes">61x</span>
1753
+ <span class="cline-any cline-neutral">&nbsp;</span>
1754
+ <span class="cline-any cline-yes">72x</span>
1755
+ <span class="cline-any cline-neutral">&nbsp;</span>
1756
+ <span class="cline-any cline-yes">14x</span>
1757
+ <span class="cline-any cline-yes">14x</span>
1758
+ <span class="cline-any cline-yes">14x</span>
1759
+ <span class="cline-any cline-neutral">&nbsp;</span>
1760
+ <span class="cline-any cline-yes">58x</span>
1761
+ <span class="cline-any cline-yes">58x</span>
1762
+ <span class="cline-any cline-neutral">&nbsp;</span>
1763
+ <span class="cline-any cline-yes">10x</span>
1764
+ <span class="cline-any cline-yes">48x</span>
1765
+ <span class="cline-any cline-neutral">&nbsp;</span>
1766
+ <span class="cline-any cline-yes">26x</span>
1767
+ <span class="cline-any cline-yes">26x</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-neutral">&nbsp;</span>
1771
+ <span class="cline-any cline-neutral">&nbsp;</span>
1772
+ <span class="cline-any cline-neutral">&nbsp;</span>
1773
+ <span class="cline-any cline-yes">61x</span>
1774
+ <span class="cline-any cline-yes">8x</span>
1775
+ <span class="cline-any cline-neutral">&nbsp;</span>
1776
+ <span class="cline-any cline-neutral">&nbsp;</span>
1777
+ <span class="cline-any cline-neutral">&nbsp;</span>
1778
+ <span class="cline-any cline-neutral">&nbsp;</span>
1779
+ <span class="cline-any cline-neutral">&nbsp;</span>
1780
+ <span class="cline-any cline-yes">61x</span>
1781
+ <span class="cline-any cline-yes">61x</span>
1782
+ <span class="cline-any cline-yes">61x</span>
1783
+ <span class="cline-any cline-yes">61x</span>
1784
+ <span class="cline-any cline-yes">61x</span>
1785
+ <span class="cline-any cline-neutral">&nbsp;</span>
1786
+ <span class="cline-any cline-yes">61x</span>
1787
+ <span class="cline-any cline-neutral">&nbsp;</span>
1788
+ <span class="cline-any cline-yes">916x</span>
1789
+ <span class="cline-any cline-yes">19x</span>
1790
+ <span class="cline-any cline-neutral">&nbsp;</span>
1791
+ <span class="cline-any cline-yes">916x</span>
1792
+ <span class="cline-any cline-yes">42x</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-yes">916x</span>
1796
+ <span class="cline-any cline-yes">16x</span>
1797
+ <span class="cline-any cline-yes">16x</span>
1798
+ <span class="cline-any cline-neutral">&nbsp;</span>
1799
+ <span class="cline-any cline-yes">16x</span>
1800
+ <span class="cline-any cline-neutral">&nbsp;</span>
1801
+ <span class="cline-any cline-yes">16x</span>
1802
+ <span class="cline-any cline-yes">16x</span>
1803
+ <span class="cline-any cline-yes">16x</span>
1804
+ <span class="cline-any cline-yes">16x</span>
1805
+ <span class="cline-any cline-neutral">&nbsp;</span>
1806
+ <span class="cline-any cline-neutral">&nbsp;</span>
1807
+ <span class="cline-any cline-yes">916x</span>
1808
+ <span class="cline-any cline-yes">18x</span>
1809
+ <span class="cline-any cline-yes">18x</span>
1810
+ <span class="cline-any cline-yes">18x</span>
1811
+ <span class="cline-any cline-neutral">&nbsp;</span>
1812
+ <span class="cline-any cline-yes">18x</span>
1813
+ <span class="cline-any cline-yes">18x</span>
1814
+ <span class="cline-any cline-neutral">&nbsp;</span>
1815
+ <span class="cline-any cline-yes">18x</span>
1816
+ <span class="cline-any cline-yes">9x</span>
1817
+ <span class="cline-any cline-yes">8x</span>
1818
+ <span class="cline-any cline-neutral">&nbsp;</span>
1819
+ <span class="cline-any cline-yes">9x</span>
1820
+ <span class="cline-any cline-yes">8x</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">916x</span>
1825
+ <span class="cline-any cline-yes">916x</span>
1826
+ <span class="cline-any cline-yes">18x</span>
1827
+ <span class="cline-any cline-neutral">&nbsp;</span>
1828
+ <span class="cline-any cline-neutral">&nbsp;</span>
1829
+ <span class="cline-any cline-yes">916x</span>
1830
+ <span class="cline-any cline-yes">94x</span>
1831
+ <span class="cline-any cline-yes">94x</span>
1832
+ <span class="cline-any cline-yes">142x</span>
1833
+ <span class="cline-any cline-yes">142x</span>
1834
+ <span class="cline-any cline-yes">32x</span>
1835
+ <span class="cline-any cline-yes">32x</span>
1836
+ <span class="cline-any cline-neutral">&nbsp;</span>
1837
+ <span class="cline-any cline-neutral">&nbsp;</span>
1838
+ <span class="cline-any cline-yes">94x</span>
1839
+ <span class="cline-any cline-yes">94x</span>
1840
+ <span class="cline-any cline-yes">94x</span>
1841
+ <span class="cline-any cline-yes">62x</span>
1842
+ <span class="cline-any cline-neutral">&nbsp;</span>
1843
+ <span class="cline-any cline-neutral">&nbsp;</span>
1844
+ <span class="cline-any cline-neutral">&nbsp;</span>
1845
+ <span class="cline-any cline-yes">72x</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-neutral">&nbsp;</span>
1850
+ <span class="cline-any cline-yes">916x</span>
1851
+ <span class="cline-any cline-yes">29x</span>
1852
+ <span class="cline-any cline-yes">29x</span>
1853
+ <span class="cline-any cline-yes">19x</span>
1854
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
1859
+ <span class="cline-any cline-yes">19x</span>
1860
+ <span class="cline-any cline-neutral">&nbsp;</span>
1861
+ <span class="cline-any cline-yes">10x</span>
1862
+ <span class="cline-any cline-neutral">&nbsp;</span>
1863
+ <span class="cline-any cline-yes">29x</span>
1864
+ <span class="cline-any cline-neutral">&nbsp;</span>
1865
+ <span class="cline-any cline-neutral">&nbsp;</span>
1866
+ <span class="cline-any cline-yes">916x</span>
1867
+ <span class="cline-any cline-yes">1x</span>
1868
+ <span class="cline-any cline-neutral">&nbsp;</span>
1869
+ <span class="cline-any cline-neutral">&nbsp;</span>
1870
+ <span class="cline-any cline-neutral">&nbsp;</span>
1871
+ <span class="cline-any cline-neutral">&nbsp;</span>
1872
+ <span class="cline-any cline-neutral">&nbsp;</span>
1873
+ <span class="cline-any cline-neutral">&nbsp;</span>
1874
+ <span class="cline-any cline-neutral">&nbsp;</span>
1875
+ <span class="cline-any cline-neutral">&nbsp;</span>
1876
+ <span class="cline-any cline-neutral">&nbsp;</span>
1877
+ <span class="cline-any cline-neutral">&nbsp;</span>
1878
+ <span class="cline-any cline-yes">99x</span>
1879
+ <span class="cline-any cline-neutral">&nbsp;</span>
1880
+ <span class="cline-any cline-yes">99x</span>
1881
+ <span class="cline-any cline-yes">2x</span>
1882
+ <span class="cline-any cline-yes">1x</span>
1883
+ <span class="cline-any cline-neutral">&nbsp;</span>
1884
+ <span class="cline-any cline-neutral">&nbsp;</span>
1885
+ <span class="cline-any cline-neutral">&nbsp;</span>
1886
+ <span class="cline-any cline-neutral">&nbsp;</span>
1887
+ <span class="cline-any cline-neutral">&nbsp;</span>
1888
+ <span class="cline-any cline-neutral">&nbsp;</span>
1889
+ <span class="cline-any cline-neutral">&nbsp;</span>
1890
+ <span class="cline-any cline-yes">198x</span>
1891
+ <span class="cline-any cline-yes">2x</span>
1892
+ <span class="cline-any cline-neutral">&nbsp;</span>
1893
+ <span class="cline-any cline-yes">196x</span>
1894
+ <span class="cline-any cline-yes">2x</span>
1895
+ <span class="cline-any cline-neutral">&nbsp;</span>
1896
+ <span class="cline-any cline-yes">194x</span>
1897
+ <span class="cline-any cline-neutral">&nbsp;</span>
1898
+ <span class="cline-any cline-neutral">&nbsp;</span>
1899
+ <span class="cline-any cline-yes">198x</span>
1900
+ <span class="cline-any cline-yes">196x</span>
1901
+ <span class="cline-any cline-neutral">&nbsp;</span>
1902
+ <span class="cline-any cline-yes">2x</span>
1903
+ <span class="cline-any cline-neutral">&nbsp;</span>
1904
+ <span class="cline-any cline-yes">99x</span>
1905
+ <span class="cline-any cline-yes">99x</span>
1906
+ <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
1910
+ <span class="cline-any cline-neutral">&nbsp;</span>
1911
+ <span class="cline-any cline-neutral">&nbsp;</span>
1912
+ <span class="cline-any cline-yes">99x</span>
1913
+ <span class="cline-any cline-yes">99x</span>
1914
+ <span class="cline-any cline-yes">2x</span>
1915
+ <span class="cline-any cline-neutral">&nbsp;</span>
1916
+ <span class="cline-any cline-neutral">&nbsp;</span>
1917
+ <span class="cline-any cline-neutral">&nbsp;</span>
1918
+ <span class="cline-any cline-neutral">&nbsp;</span>
1919
+ <span class="cline-any cline-neutral">&nbsp;</span>
1920
+ <span class="cline-any cline-yes">99x</span>
1921
+ <span class="cline-any cline-yes">99x</span>
1922
+ <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</span>
1927
+ <span class="cline-any cline-neutral">&nbsp;</span>
1928
+ <span class="cline-any cline-yes">99x</span>
1929
+ <span class="cline-any cline-yes">99x</span>
1930
+ <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</span>
1935
+ <span class="cline-any cline-neutral">&nbsp;</span>
1936
+ <span class="cline-any cline-neutral">&nbsp;</span>
1937
+ <span class="cline-any cline-neutral">&nbsp;</span>
1938
+ <span class="cline-any cline-neutral">&nbsp;</span>
1939
+ <span class="cline-any cline-yes">246x</span>
1940
+ <span class="cline-any cline-yes">1x</span>
1941
+ <span class="cline-any cline-neutral">&nbsp;</span>
1942
+ <span class="cline-any cline-neutral">&nbsp;</span>
1943
+ <span class="cline-any cline-neutral">&nbsp;</span>
1944
+ <span class="cline-any cline-neutral">&nbsp;</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">246x</span>
1948
+ <span class="cline-any cline-yes">2x</span>
1949
+ <span class="cline-any cline-neutral">&nbsp;</span>
1950
+ <span class="cline-any cline-neutral">&nbsp;</span>
1951
+ <span class="cline-any cline-neutral">&nbsp;</span>
1952
+ <span class="cline-any cline-neutral">&nbsp;</span>
1953
+ <span class="cline-any cline-neutral">&nbsp;</span>
1954
+ <span class="cline-any cline-neutral">&nbsp;</span>
1955
+ <span class="cline-any cline-yes">246x</span>
1956
+ <span class="cline-any cline-yes">5x</span>
1957
+ <span class="cline-any cline-yes">5x</span>
1958
+ <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</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">246x</span>
1967
+ <span class="cline-any cline-yes">23x</span>
1968
+ <span class="cline-any cline-neutral">&nbsp;</span>
1969
+ <span class="cline-any cline-neutral">&nbsp;</span>
1970
+ <span class="cline-any cline-yes">6x</span>
1971
+ <span class="cline-any cline-yes">6x</span>
1972
+ <span class="cline-any cline-yes">2x</span>
1973
+ <span class="cline-any cline-neutral">&nbsp;</span>
1974
+ <span class="cline-any cline-yes">4x</span>
1975
+ <span class="cline-any cline-yes">4x</span>
1976
+ <span class="cline-any cline-no">&nbsp;</span>
1977
+ <span class="cline-any cline-yes">4x</span>
1978
+ <span class="cline-any cline-yes">2x</span>
1979
+ <span class="cline-any cline-neutral">&nbsp;</span>
1980
+ <span class="cline-any cline-neutral">&nbsp;</span>
1981
+ <span class="cline-any cline-yes">6x</span>
1982
+ <span class="cline-any cline-yes">4x</span>
1983
+ <span class="cline-any cline-neutral">&nbsp;</span>
1984
+ <span class="cline-any cline-neutral">&nbsp;</span>
1985
+ <span class="cline-any cline-neutral">&nbsp;</span>
1986
+ <span class="cline-any cline-neutral">&nbsp;</span>
1987
+ <span class="cline-any cline-neutral">&nbsp;</span>
1988
+ <span class="cline-any cline-neutral">&nbsp;</span>
1989
+ <span class="cline-any cline-yes">6x</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-neutral">&nbsp;</span>
1994
+ <span class="cline-any cline-neutral">&nbsp;</span>
1995
+ <span class="cline-any cline-yes">15x</span>
1996
+ <span class="cline-any cline-yes">15x</span>
1997
+ <span class="cline-any cline-yes">7x</span>
1998
+ <span class="cline-any cline-neutral">&nbsp;</span>
1999
+ <span class="cline-any cline-neutral">&nbsp;</span>
2000
+ <span class="cline-any cline-neutral">&nbsp;</span>
2001
+ <span class="cline-any cline-neutral">&nbsp;</span>
2002
+ <span class="cline-any cline-neutral">&nbsp;</span>
2003
+ <span class="cline-any cline-neutral">&nbsp;</span>
2004
+ <span class="cline-any cline-neutral">&nbsp;</span>
2005
+ <span class="cline-any cline-neutral">&nbsp;</span>
2006
+ <span class="cline-any cline-neutral">&nbsp;</span>
2007
+ <span class="cline-any cline-neutral">&nbsp;</span>
2008
+ <span class="cline-any cline-neutral">&nbsp;</span>
2009
+ <span class="cline-any cline-yes">44x</span>
2010
+ <span class="cline-any cline-yes">12x</span>
2011
+ <span class="cline-any cline-yes">12x</span>
2012
+ <span class="cline-any cline-yes">36x</span>
2013
+ <span class="cline-any cline-yes">36x</span>
2014
+ <span class="cline-any cline-yes">36x</span>
2015
+ <span class="cline-any cline-yes">36x</span>
2016
+ <span class="cline-any cline-yes">36x</span>
2017
+ <span class="cline-any cline-yes">29x</span>
2018
+ <span class="cline-any cline-yes">29x</span>
2019
+ <span class="cline-any cline-yes">7x</span>
2020
+ <span class="cline-any cline-no">&nbsp;</span>
2021
+ <span class="cline-any cline-neutral">&nbsp;</span>
2022
+ <span class="cline-any cline-neutral">&nbsp;</span>
2023
+ <span class="cline-any cline-yes">12x</span>
2024
+ <span class="cline-any cline-yes">4x</span>
2025
+ <span class="cline-any cline-yes">2x</span>
2026
+ <span class="cline-any cline-yes">4x</span>
2027
+ <span class="cline-any cline-yes">4x</span>
2028
+ <span class="cline-any cline-yes">4x</span>
2029
+ <span class="cline-any cline-neutral">&nbsp;</span>
2030
+ <span class="cline-any cline-yes">2x</span>
2031
+ <span class="cline-any cline-yes">1x</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-yes">32x</span>
2040
+ <span class="cline-any cline-yes">32x</span>
2041
+ <span class="cline-any cline-yes">24x</span>
2042
+ <span class="cline-any cline-yes">24x</span>
2043
+ <span class="cline-any cline-yes">24x</span>
2044
+ <span class="cline-any cline-yes">24x</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-yes">44x</span>
2050
+ <span class="cline-any cline-yes">44x</span>
2051
+ <span class="cline-any cline-yes">2x</span>
2052
+ <span class="cline-any cline-yes">6x</span>
2053
+ <span class="cline-any cline-yes">6x</span>
2054
+ <span class="cline-any cline-yes">6x</span>
2055
+ <span class="cline-any cline-neutral">&nbsp;</span>
2056
+ <span class="cline-any cline-neutral">&nbsp;</span>
2057
+ <span class="cline-any cline-yes">2x</span>
2058
+ <span class="cline-any cline-yes">1x</span>
2059
+ <span class="cline-any cline-neutral">&nbsp;</span>
2060
+ <span class="cline-any cline-neutral">&nbsp;</span>
2061
+ <span class="cline-any cline-neutral">&nbsp;</span>
2062
+ <span class="cline-any cline-neutral">&nbsp;</span>
2063
+ <span class="cline-any cline-neutral">&nbsp;</span>
2064
+ <span class="cline-any cline-neutral">&nbsp;</span>
2065
+ <span class="cline-any cline-neutral">&nbsp;</span>
2066
+ <span class="cline-any cline-yes">44x</span>
2067
+ <span class="cline-any cline-yes">1x</span>
2068
+ <span class="cline-any cline-neutral">&nbsp;</span>
2069
+ <span class="cline-any cline-neutral">&nbsp;</span>
2070
+ <span class="cline-any cline-neutral">&nbsp;</span>
2071
+ <span class="cline-any cline-neutral">&nbsp;</span>
2072
+ <span class="cline-any cline-neutral">&nbsp;</span>
2073
+ <span class="cline-any cline-neutral">&nbsp;</span>
2074
+ <span class="cline-any cline-yes">44x</span>
2075
+ <span class="cline-any cline-yes">1x</span>
2076
+ <span class="cline-any cline-neutral">&nbsp;</span>
2077
+ <span class="cline-any cline-neutral">&nbsp;</span>
2078
+ <span class="cline-any cline-neutral">&nbsp;</span>
2079
+ <span class="cline-any cline-neutral">&nbsp;</span>
2080
+ <span class="cline-any cline-neutral">&nbsp;</span>
2081
+ <span class="cline-any cline-neutral">&nbsp;</span>
2082
+ <span class="cline-any cline-yes">44x</span>
2083
+ <span class="cline-any cline-yes">3x</span>
2084
+ <span class="cline-any cline-yes">3x</span>
2085
+ <span class="cline-any cline-yes">8x</span>
2086
+ <span class="cline-any cline-neutral">&nbsp;</span>
2087
+ <span class="cline-any cline-yes">3x</span>
2088
+ <span class="cline-any cline-yes">2x</span>
2089
+ <span class="cline-any cline-neutral">&nbsp;</span>
2090
+ <span class="cline-any cline-neutral">&nbsp;</span>
2091
+ <span class="cline-any cline-neutral">&nbsp;</span>
2092
+ <span class="cline-any cline-neutral">&nbsp;</span>
2093
+ <span class="cline-any cline-neutral">&nbsp;</span>
2094
+ <span class="cline-any cline-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">484x</span>
2100
+ <span class="cline-any cline-yes">484x</span>
2101
+ <span class="cline-any cline-yes">1140x</span>
2102
+ <span class="cline-any cline-yes">1140x</span>
2103
+ <span class="cline-any cline-yes">1140x</span>
2104
+ <span class="cline-any cline-yes">1140x</span>
2105
+ <span class="cline-any cline-neutral">&nbsp;</span>
2106
+ <span class="cline-any cline-neutral">&nbsp;</span>
2107
+ <span class="cline-any cline-yes">484x</span>
2108
+ <span class="cline-any cline-yes">199x</span>
2109
+ <span class="cline-any cline-yes">199x</span>
2110
+ <span class="cline-any cline-yes">45x</span>
2111
+ <span class="cline-any cline-yes">45x</span>
2112
+ <span class="cline-any cline-yes">45x</span>
2113
+ <span class="cline-any cline-neutral">&nbsp;</span>
2114
+ <span class="cline-any cline-neutral">&nbsp;</span>
2115
+ <span class="cline-any cline-neutral">&nbsp;</span>
2116
+ <span class="cline-any cline-neutral">&nbsp;</span>
2117
+ <span class="cline-any cline-neutral">&nbsp;</span>
2118
+ <span class="cline-any cline-neutral">&nbsp;</span>
2119
+ <span class="cline-any cline-neutral">&nbsp;</span>
2120
+ <span class="cline-any cline-neutral">&nbsp;</span>
2121
+ <span class="cline-any cline-yes">484x</span>
2122
+ <span class="cline-any cline-yes">750x</span>
2123
+ <span class="cline-any cline-yes">750x</span>
2124
+ <span class="cline-any cline-yes">434x</span>
2125
+ <span class="cline-any cline-yes">434x</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">484x</span>
2130
+ <span class="cline-any cline-yes">742x</span>
2131
+ <span class="cline-any cline-yes">742x</span>
2132
+ <span class="cline-any cline-yes">742x</span>
2133
+ <span class="cline-any cline-yes">742x</span>
2134
+ <span class="cline-any cline-yes">742x</span>
2135
+ <span class="cline-any cline-yes">402x</span>
2136
+ <span class="cline-any cline-yes">2x</span>
2137
+ <span class="cline-any cline-yes">1x</span>
2138
+ <span class="cline-any cline-yes">1x</span>
2139
+ <span class="cline-any cline-neutral">&nbsp;</span>
2140
+ <span class="cline-any cline-neutral">&nbsp;</span>
2141
+ <span class="cline-any cline-neutral">&nbsp;</span>
2142
+ <span class="cline-any cline-neutral">&nbsp;</span>
2143
+ <span class="cline-any cline-neutral">&nbsp;</span>
2144
+ <span class="cline-any cline-yes">1x</span>
2145
+ <span class="cline-any cline-yes">1x</span>
2146
+ <span class="cline-any cline-neutral">&nbsp;</span>
2147
+ <span class="cline-any cline-neutral">&nbsp;</span>
2148
+ <span class="cline-any cline-yes">400x</span>
2149
+ <span class="cline-any cline-yes">400x</span>
2150
+ <span class="cline-any cline-yes">400x</span>
2151
+ <span class="cline-any cline-neutral">&nbsp;</span>
2152
+ <span class="cline-any cline-neutral">&nbsp;</span>
2153
+ <span class="cline-any cline-neutral">&nbsp;</span>
2154
+ <span class="cline-any cline-neutral">&nbsp;</span>
2155
+ <span class="cline-any cline-neutral">&nbsp;</span>
2156
+ <span class="cline-any cline-neutral">&nbsp;</span>
2157
+ <span class="cline-any cline-yes">484x</span>
2158
+ <span class="cline-any cline-yes">7x</span>
2159
+ <span class="cline-any cline-yes">7x</span>
2160
+ <span class="cline-any cline-yes">10x</span>
2161
+ <span class="cline-any cline-yes">10x</span>
2162
+ <span class="cline-any cline-yes">8x</span>
2163
+ <span class="cline-any cline-yes">8x</span>
2164
+ <span class="cline-any cline-yes">8x</span>
2165
+ <span class="cline-any cline-yes">8x</span>
2166
+ <span class="cline-any cline-yes">8x</span>
2167
+ <span class="cline-any cline-yes">2x</span>
2168
+ <span class="cline-any cline-yes">1x</span>
2169
+ <span class="cline-any cline-yes">1x</span>
2170
+ <span class="cline-any cline-neutral">&nbsp;</span>
2171
+ <span class="cline-any cline-neutral">&nbsp;</span>
2172
+ <span class="cline-any cline-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-yes">1x</span>
2176
+ <span class="cline-any cline-yes">1x</span>
2177
+ <span class="cline-any cline-neutral">&nbsp;</span>
2178
+ <span class="cline-any cline-neutral">&nbsp;</span>
2179
+ <span class="cline-any cline-yes">6x</span>
2180
+ <span class="cline-any cline-yes">6x</span>
2181
+ <span class="cline-any cline-yes">6x</span>
2182
+ <span class="cline-any cline-neutral">&nbsp;</span>
2183
+ <span class="cline-any cline-neutral">&nbsp;</span>
2184
+ <span class="cline-any cline-neutral">&nbsp;</span>
2185
+ <span class="cline-any cline-neutral">&nbsp;</span>
2186
+ <span class="cline-any cline-neutral">&nbsp;</span>
2187
+ <span class="cline-any cline-neutral">&nbsp;</span>
2188
+ <span class="cline-any cline-neutral">&nbsp;</span>
2189
+ <span class="cline-any cline-yes">484x</span>
2190
+ <span class="cline-any cline-yes">6x</span>
2191
+ <span class="cline-any cline-yes">5x</span>
2192
+ <span class="cline-any cline-yes">5x</span>
2193
+ <span class="cline-any cline-yes">5x</span>
2194
+ <span class="cline-any cline-yes">5x</span>
2195
+ <span class="cline-any cline-yes">5x</span>
2196
+ <span class="cline-any cline-neutral">&nbsp;</span>
2197
+ <span class="cline-any cline-neutral">&nbsp;</span>
2198
+ <span class="cline-any cline-yes">481x</span>
2199
+ <span class="cline-any cline-yes">5x</span>
2200
+ <span class="cline-any cline-yes">2x</span>
2201
+ <span class="cline-any cline-yes">1x</span>
2202
+ <span class="cline-any cline-yes">1x</span>
2203
+ <span class="cline-any cline-yes">1x</span>
2204
+ <span class="cline-any cline-neutral">&nbsp;</span>
2205
+ <span class="cline-any cline-yes">1x</span>
2206
+ <span class="cline-any cline-neutral">&nbsp;</span>
2207
+ <span class="cline-any cline-neutral">&nbsp;</span>
2208
+ <span class="cline-any cline-neutral">&nbsp;</span>
2209
+ <span class="cline-any cline-neutral">&nbsp;</span>
2210
+ <span class="cline-any cline-neutral">&nbsp;</span>
2211
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
2215
+ <span class="cline-any cline-yes">484x</span>
2216
+ <span class="cline-any cline-yes">3x</span>
2217
+ <span class="cline-any cline-yes">1x</span>
2218
+ <span class="cline-any cline-neutral">&nbsp;</span>
2219
+ <span class="cline-any cline-neutral">&nbsp;</span>
2220
+ <span class="cline-any cline-neutral">&nbsp;</span>
2221
+ <span class="cline-any cline-neutral">&nbsp;</span>
2222
+ <span class="cline-any cline-neutral">&nbsp;</span>
2223
+ <span class="cline-any cline-neutral">&nbsp;</span>
2224
+ <span class="cline-any cline-neutral">&nbsp;</span>
2225
+ <span class="cline-any cline-yes">484x</span>
2226
+ <span class="cline-any cline-yes">3x</span>
2227
+ <span class="cline-any cline-yes">1x</span>
2228
+ <span class="cline-any cline-neutral">&nbsp;</span>
2229
+ <span class="cline-any cline-neutral">&nbsp;</span>
2230
+ <span class="cline-any cline-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-neutral">&nbsp;</span>
2235
+ <span class="cline-any cline-yes">484x</span>
2236
+ <span class="cline-any cline-yes">7x</span>
2237
+ <span class="cline-any cline-yes">7x</span>
2238
+ <span class="cline-any cline-yes">7x</span>
2239
+ <span class="cline-any cline-yes">5x</span>
2240
+ <span class="cline-any cline-yes">5x</span>
2241
+ <span class="cline-any cline-yes">4x</span>
2242
+ <span class="cline-any cline-yes">2x</span>
2243
+ <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</span>
2247
+ <span class="cline-any cline-neutral">&nbsp;</span>
2248
+ <span class="cline-any cline-neutral">&nbsp;</span>
2249
+ <span class="cline-any cline-yes">1x</span>
2250
+ <span class="cline-any cline-neutral">&nbsp;</span>
2251
+ <span class="cline-any cline-neutral">&nbsp;</span>
2252
+ <span class="cline-any cline-neutral">&nbsp;</span>
2253
+ <span class="cline-any cline-yes">3x</span>
2254
+ <span class="cline-any cline-yes">3x</span>
2255
+ <span class="cline-any cline-yes">3x</span>
2256
+ <span class="cline-any cline-yes">3x</span>
2257
+ <span class="cline-any cline-yes">3x</span>
2258
+ <span class="cline-any cline-neutral">&nbsp;</span>
2259
+ <span class="cline-any cline-neutral">&nbsp;</span>
2260
+ <span class="cline-any cline-neutral">&nbsp;</span>
2261
+ <span class="cline-any cline-neutral">&nbsp;</span>
2262
+ <span class="cline-any cline-neutral">&nbsp;</span>
2263
+ <span class="cline-any cline-neutral">&nbsp;</span>
2264
+ <span class="cline-any cline-yes">484x</span>
2265
+ <span class="cline-any cline-yes">484x</span>
2266
+ <span class="cline-any cline-yes">3x</span>
2267
+ <span class="cline-any cline-yes">3x</span>
2268
+ <span class="cline-any cline-yes">3x</span>
2269
+ <span class="cline-any cline-yes">3x</span>
2270
+ <span class="cline-any cline-neutral">&nbsp;</span>
2271
+ <span class="cline-any cline-neutral">&nbsp;</span>
2272
+ <span class="cline-any cline-neutral">&nbsp;</span>
2273
+ <span class="cline-any cline-neutral">&nbsp;</span>
2274
+ <span class="cline-any cline-neutral">&nbsp;</span>
2275
+ <span class="cline-any cline-neutral">&nbsp;</span>
2276
+ <span class="cline-any cline-neutral">&nbsp;</span>
2277
+ <span class="cline-any cline-neutral">&nbsp;</span>
2278
+ <span class="cline-any cline-yes">1x</span>
2279
+ <span class="cline-any cline-neutral">&nbsp;</span>
2280
+ <span class="cline-any cline-yes">330x</span>
2281
+ <span class="cline-any cline-yes">330x</span>
2282
+ <span class="cline-any cline-yes">330x</span>
2283
+ <span class="cline-any cline-yes">330x</span>
2284
+ <span class="cline-any cline-neutral">&nbsp;</span>
2285
+ <span class="cline-any cline-yes">330x</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-yes">4359x</span>
2289
+ <span class="cline-any cline-yes">5624x</span>
2290
+ <span class="cline-any cline-yes">5624x</span>
2291
+ <span class="cline-any cline-yes">5624x</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">10x</span>
2295
+ <span class="cline-any cline-yes">10x</span>
2296
+ <span class="cline-any cline-neutral">&nbsp;</span>
2297
+ <span class="cline-any cline-yes">10x</span>
2298
+ <span class="cline-any cline-neutral">&nbsp;</span>
2299
+ <span class="cline-any cline-neutral">&nbsp;</span>
2300
+ <span class="cline-any cline-yes">1255x</span>
2301
+ <span class="cline-any cline-neutral">&nbsp;</span>
2302
+ <span class="cline-any cline-yes">4359x</span>
2303
+ <span class="cline-any cline-neutral">&nbsp;</span>
2304
+ <span class="cline-any cline-neutral">&nbsp;</span>
2305
+ <span class="cline-any cline-neutral">&nbsp;</span>
2306
+ <span class="cline-any cline-neutral">&nbsp;</span>
2307
+ <span class="cline-any cline-neutral">&nbsp;</span>
2308
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
2314
+ <span class="cline-any cline-neutral">&nbsp;</span>
2315
+ <span class="cline-any cline-yes">421x</span>
2316
+ <span class="cline-any cline-neutral">&nbsp;</span>
2317
+ <span class="cline-any cline-yes">214x</span>
2318
+ <span class="cline-any cline-yes">165x</span>
2319
+ <span class="cline-any cline-yes">165x</span>
2320
+ <span class="cline-any cline-yes">165x</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-neutral">&nbsp;</span>
2324
+ <span class="cline-any cline-yes">296x</span>
2325
+ <span class="cline-any cline-yes">170x</span>
2326
+ <span class="cline-any cline-yes">170x</span>
2327
+ <span class="cline-any cline-yes">170x</span>
2328
+ <span class="cline-any cline-yes">93x</span>
2329
+ <span class="cline-any cline-yes">93x</span>
2330
+ <span class="cline-any cline-yes">38x</span>
2331
+ <span class="cline-any cline-neutral">&nbsp;</span>
2332
+ <span class="cline-any cline-yes">93x</span>
2333
+ <span class="cline-any cline-neutral">&nbsp;</span>
2334
+ <span class="cline-any cline-yes">170x</span>
2335
+ <span class="cline-any cline-neutral">&nbsp;</span>
2336
+ <span class="cline-any cline-yes">170x</span>
2337
+ <span class="cline-any cline-yes">101x</span>
2338
+ <span class="cline-any cline-neutral">&nbsp;</span>
2339
+ <span class="cline-any cline-yes">170x</span>
2340
+ <span class="cline-any cline-yes">44x</span>
2341
+ <span class="cline-any cline-yes">44x</span>
2342
+ <span class="cline-any cline-yes">32x</span>
2343
+ <span class="cline-any cline-no">&nbsp;</span>
2344
+ <span class="cline-any cline-no">&nbsp;</span>
2345
+ <span class="cline-any cline-yes">32x</span>
2346
+ <span class="cline-any cline-yes">23x</span>
2347
+ <span class="cline-any cline-neutral">&nbsp;</span>
2348
+ <span class="cline-any cline-yes">9x</span>
2349
+ <span class="cline-any cline-neutral">&nbsp;</span>
2350
+ <span class="cline-any cline-neutral">&nbsp;</span>
2351
+ <span class="cline-any cline-yes">170x</span>
2352
+ <span class="cline-any cline-neutral">&nbsp;</span>
2353
+ <span class="cline-any cline-neutral">&nbsp;</span>
2354
+ <span class="cline-any cline-neutral">&nbsp;</span>
2355
+ <span class="cline-any cline-yes">5624x</span>
2356
+ <span class="cline-any cline-neutral">&nbsp;</span>
2357
+ <span class="cline-any cline-yes">3x</span>
2358
+ <span class="cline-any cline-yes">3x</span>
2359
+ <span class="cline-any cline-neutral">&nbsp;</span>
2360
+ <span class="cline-any cline-yes">2x</span>
2361
+ <span class="cline-any cline-yes">2x</span>
2362
+ <span class="cline-any cline-neutral">&nbsp;</span>
2363
+ <span class="cline-any cline-yes">2x</span>
2364
+ <span class="cline-any cline-yes">2x</span>
2365
+ <span class="cline-any cline-neutral">&nbsp;</span>
2366
+ <span class="cline-any cline-yes">1x</span>
2367
+ <span class="cline-any cline-yes">1x</span>
2368
+ <span class="cline-any cline-neutral">&nbsp;</span>
2369
+ <span class="cline-any cline-yes">17x</span>
2370
+ <span class="cline-any cline-yes">17x</span>
2371
+ <span class="cline-any cline-neutral">&nbsp;</span>
2372
+ <span class="cline-any cline-yes">1x</span>
2373
+ <span class="cline-any cline-yes">1x</span>
2374
+ <span class="cline-any cline-neutral">&nbsp;</span>
2375
+ <span class="cline-any cline-yes">5598x</span>
2376
+ <span class="cline-any cline-neutral">&nbsp;</span>
2377
+ <span class="cline-any cline-neutral">&nbsp;</span>
2378
+ <span class="cline-any cline-neutral">&nbsp;</span>
2379
+ <span class="cline-any cline-yes">2178x</span>
2380
+ <span class="cline-any cline-neutral">&nbsp;</span>
2381
+ <span class="cline-any cline-yes">2178x</span>
2382
+ <span class="cline-any cline-yes">2077x</span>
2383
+ <span class="cline-any cline-neutral">&nbsp;</span>
2384
+ <span class="cline-any cline-neutral">&nbsp;</span>
2385
+ <span class="cline-any cline-yes">2178x</span>
2386
+ <span class="cline-any cline-neutral">&nbsp;</span>
2387
+ <span class="cline-any cline-neutral">&nbsp;</span>
2388
+ <span class="cline-any cline-neutral">&nbsp;</span>
2389
+ <span class="cline-any cline-yes">1347x</span>
2390
+ <span class="cline-any cline-yes">1246x</span>
2391
+ <span class="cline-any cline-neutral">&nbsp;</span>
2392
+ <span class="cline-any cline-yes">101x</span>
2393
+ <span class="cline-any cline-yes">101x</span>
2394
+ <span class="cline-any cline-neutral">&nbsp;</span>
2395
+ <span class="cline-any cline-yes">101x</span>
2396
+ <span class="cline-any cline-yes">101x</span>
2397
+ <span class="cline-any cline-yes">101x</span>
2398
+ <span class="cline-any cline-yes">196x</span>
2399
+ <span class="cline-any cline-yes">107x</span>
2400
+ <span class="cline-any cline-yes">1x</span>
2401
+ <span class="cline-any cline-neutral">&nbsp;</span>
2402
+ <span class="cline-any cline-yes">107x</span>
2403
+ <span class="cline-any cline-yes">107x</span>
2404
+ <span class="cline-any cline-yes">107x</span>
2405
+ <span class="cline-any cline-yes">7x</span>
2406
+ <span class="cline-any cline-yes">6x</span>
2407
+ <span class="cline-any cline-neutral">&nbsp;</span>
2408
+ <span class="cline-any cline-yes">7x</span>
2409
+ <span class="cline-any cline-neutral">&nbsp;</span>
2410
+ <span class="cline-any cline-yes">89x</span>
2411
+ <span class="cline-any cline-yes">4x</span>
2412
+ <span class="cline-any cline-neutral">&nbsp;</span>
2413
+ <span class="cline-any cline-yes">189x</span>
2414
+ <span class="cline-any cline-yes">189x</span>
2415
+ <span class="cline-any cline-yes">5x</span>
2416
+ <span class="cline-any cline-neutral">&nbsp;</span>
2417
+ <span class="cline-any cline-yes">184x</span>
2418
+ <span class="cline-any cline-neutral">&nbsp;</span>
2419
+ <span class="cline-any cline-yes">189x</span>
2420
+ <span class="cline-any cline-neutral">&nbsp;</span>
2421
+ <span class="cline-any cline-neutral">&nbsp;</span>
2422
+ <span class="cline-any cline-yes">101x</span>
2423
+ <span class="cline-any cline-yes">19x</span>
2424
+ <span class="cline-any cline-neutral">&nbsp;</span>
2425
+ <span class="cline-any cline-neutral">&nbsp;</span>
2426
+ <span class="cline-any cline-yes">82x</span>
2427
+ <span class="cline-any cline-neutral">&nbsp;</span>
2428
+ <span class="cline-any cline-neutral">&nbsp;</span>
2429
+ <span class="cline-any cline-yes">330x</span>
2430
+ <span class="cline-any cline-neutral">&nbsp;</span>
2431
+ <span class="cline-any cline-neutral">&nbsp;</span>
2432
+ <span class="cline-any cline-yes">844x</span>
2433
+ <span class="cline-any cline-yes">844x</span>
2434
+ <span class="cline-any cline-yes">844x</span>
2435
+ <span class="cline-any cline-yes">7x</span>
2436
+ <span class="cline-any cline-neutral">&nbsp;</span>
2437
+ <span class="cline-any cline-yes">4x</span>
2438
+ <span class="cline-any cline-yes">4x</span>
2439
+ <span class="cline-any cline-yes">4x</span>
2440
+ <span class="cline-any cline-yes">4x</span>
2441
+ <span class="cline-any cline-yes">4x</span>
2442
+ <span class="cline-any cline-neutral">&nbsp;</span>
2443
+ <span class="cline-any cline-yes">3x</span>
2444
+ <span class="cline-any cline-neutral">&nbsp;</span>
2445
+ <span class="cline-any cline-neutral">&nbsp;</span>
2446
+ <span class="cline-any cline-yes">841x</span>
2447
+ <span class="cline-any cline-neutral">&nbsp;</span>
2448
+ <span class="cline-any cline-yes">841x</span>
2449
+ <span class="cline-any cline-yes">841x</span>
2450
+ <span class="cline-any cline-yes">4x</span>
2451
+ <span class="cline-any cline-yes">4x</span>
2452
+ <span class="cline-any cline-yes">3x</span>
2453
+ <span class="cline-any cline-neutral">&nbsp;</span>
2454
+ <span class="cline-any cline-yes">4x</span>
2455
+ <span class="cline-any cline-neutral">&nbsp;</span>
2456
+ <span class="cline-any cline-yes">837x</span>
2457
+ <span class="cline-any cline-neutral">&nbsp;</span>
2458
+ <span class="cline-any cline-neutral">&nbsp;</span>
2459
+ <span class="cline-any cline-yes">841x</span>
2460
+ <span class="cline-any cline-yes">825x</span>
2461
+ <span class="cline-any cline-yes">825x</span>
2462
+ <span class="cline-any cline-neutral">&nbsp;</span>
2463
+ <span class="cline-any cline-yes">16x</span>
2464
+ <span class="cline-any cline-yes">16x</span>
2465
+ <span class="cline-any cline-yes">3x</span>
2466
+ <span class="cline-any cline-yes">3x</span>
2467
+ <span class="cline-any cline-neutral">&nbsp;</span>
2468
+ <span class="cline-any cline-neutral">&nbsp;</span>
2469
+ <span class="cline-any cline-yes">838x</span>
2470
+ <span class="cline-any cline-yes">838x</span>
2471
+ <span class="cline-any cline-yes">36x</span>
2472
+ <span class="cline-any cline-neutral">&nbsp;</span>
2473
+ <span class="cline-any cline-yes">802x</span>
2474
+ <span class="cline-any cline-yes">802x</span>
2475
+ <span class="cline-any cline-yes">802x</span>
2476
+ <span class="cline-any cline-neutral">&nbsp;</span>
2477
+ <span class="cline-any cline-neutral">&nbsp;</span>
2478
+ <span class="cline-any cline-neutral">&nbsp;</span>
2479
+ <span class="cline-any cline-yes">1246x</span>
2480
+ <span class="cline-any cline-yes">900x</span>
2481
+ <span class="cline-any cline-neutral">&nbsp;</span>
2482
+ <span class="cline-any cline-yes">346x</span>
2483
+ <span class="cline-any cline-yes">346x</span>
2484
+ <span class="cline-any cline-yes">346x</span>
2485
+ <span class="cline-any cline-yes">346x</span>
2486
+ <span class="cline-any cline-neutral">&nbsp;</span>
2487
+ <span class="cline-any cline-yes">346x</span>
2488
+ <span class="cline-any cline-yes">875x</span>
2489
+ <span class="cline-any cline-yes">560x</span>
2490
+ <span class="cline-any cline-yes">1x</span>
2491
+ <span class="cline-any cline-neutral">&nbsp;</span>
2492
+ <span class="cline-any cline-yes">560x</span>
2493
+ <span class="cline-any cline-yes">560x</span>
2494
+ <span class="cline-any cline-yes">560x</span>
2495
+ <span class="cline-any cline-yes">31x</span>
2496
+ <span class="cline-any cline-yes">31x</span>
2497
+ <span class="cline-any cline-neutral">&nbsp;</span>
2498
+ <span class="cline-any cline-yes">31x</span>
2499
+ <span class="cline-any cline-neutral">&nbsp;</span>
2500
+ <span class="cline-any cline-yes">315x</span>
2501
+ <span class="cline-any cline-yes">7x</span>
2502
+ <span class="cline-any cline-neutral">&nbsp;</span>
2503
+ <span class="cline-any cline-yes">844x</span>
2504
+ <span class="cline-any cline-yes">844x</span>
2505
+ <span class="cline-any cline-yes">3x</span>
2506
+ <span class="cline-any cline-neutral">&nbsp;</span>
2507
+ <span class="cline-any cline-yes">841x</span>
2508
+ <span class="cline-any cline-neutral">&nbsp;</span>
2509
+ <span class="cline-any cline-yes">844x</span>
2510
+ <span class="cline-any cline-neutral">&nbsp;</span>
2511
+ <span class="cline-any cline-neutral">&nbsp;</span>
2512
+ <span class="cline-any cline-yes">346x</span>
2513
+ <span class="cline-any cline-yes">46x</span>
2514
+ <span class="cline-any cline-neutral">&nbsp;</span>
2515
+ <span class="cline-any cline-yes">300x</span>
2516
+ <span class="cline-any cline-neutral">&nbsp;</span>
2517
+ <span class="cline-any cline-neutral">&nbsp;</span>
2518
+ <span class="cline-any cline-neutral">&nbsp;</span>
2519
+ <span class="cline-any cline-yes">1744x</span>
2520
+ <span class="cline-any cline-yes">699x</span>
2521
+ <span class="cline-any cline-neutral">&nbsp;</span>
2522
+ <span class="cline-any cline-neutral">&nbsp;</span>
2523
+ <span class="cline-any cline-yes">1045x</span>
2524
+ <span class="cline-any cline-yes">1045x</span>
2525
+ <span class="cline-any cline-neutral">&nbsp;</span>
2526
+ <span class="cline-any cline-yes">1045x</span>
2527
+ <span class="cline-any cline-neutral">&nbsp;</span>
2528
+ <span class="cline-any cline-neutral">&nbsp;</span>
2529
+ <span class="cline-any cline-neutral">&nbsp;</span>
2530
+ <span class="cline-any cline-yes">692x</span>
2531
+ <span class="cline-any cline-yes">124x</span>
2532
+ <span class="cline-any cline-neutral">&nbsp;</span>
2533
+ <span class="cline-any cline-neutral">&nbsp;</span>
2534
+ <span class="cline-any cline-yes">568x</span>
2535
+ <span class="cline-any cline-yes">568x</span>
2536
+ <span class="cline-any cline-yes">566x</span>
2537
+ <span class="cline-any cline-yes">566x</span>
2538
+ <span class="cline-any cline-yes">566x</span>
2539
+ <span class="cline-any cline-yes">566x</span>
2540
+ <span class="cline-any cline-no">&nbsp;</span>
2541
+ <span class="cline-any cline-neutral">&nbsp;</span>
2542
+ <span class="cline-any cline-yes">566x</span>
2543
+ <span class="cline-any cline-neutral">&nbsp;</span>
2544
+ <span class="cline-any cline-no">&nbsp;</span>
2545
+ <span class="cline-any cline-neutral">&nbsp;</span>
2546
+ <span class="cline-any cline-yes">566x</span>
2547
+ <span class="cline-any cline-neutral">&nbsp;</span>
2548
+ <span class="cline-any cline-yes">568x</span>
2549
+ <span class="cline-any cline-neutral">&nbsp;</span>
2550
+ <span class="cline-any cline-neutral">&nbsp;</span>
2551
+ <span class="cline-any cline-neutral">&nbsp;</span>
2552
+ <span class="cline-any cline-neutral">&nbsp;</span>
2553
+ <span class="cline-any cline-yes">124x</span>
2554
+ <span class="cline-any cline-neutral">&nbsp;</span>
2555
+ <span class="cline-any cline-yes">9x</span>
2556
+ <span class="cline-any cline-neutral">&nbsp;</span>
2557
+ <span class="cline-any cline-yes">59x</span>
2558
+ <span class="cline-any cline-neutral">&nbsp;</span>
2559
+ <span class="cline-any cline-yes">14x</span>
2560
+ <span class="cline-any cline-neutral">&nbsp;</span>
2561
+ <span class="cline-any cline-yes">42x</span>
2562
+ <span class="cline-any cline-neutral">&nbsp;</span>
2563
+ <span class="cline-any cline-neutral">&nbsp;</span>
2564
+ <span class="cline-any cline-neutral">&nbsp;</span>
2565
+ <span class="cline-any cline-neutral">&nbsp;</span>
2566
+ <span class="cline-any cline-yes">1347x</span>
2567
+ <span class="cline-any cline-neutral">&nbsp;</span>
2568
+ <span class="cline-any cline-neutral">&nbsp;</span>
2569
+ <span class="cline-any cline-yes">330x</span>
2570
+ <span class="cline-any cline-yes">330x</span>
2571
+ <span class="cline-any cline-yes">330x</span>
2572
+ <span class="cline-any cline-yes">320x</span>
2573
+ <span class="cline-any cline-yes">320x</span>
2574
+ <span class="cline-any cline-yes">1x</span>
2575
+ <span class="cline-any cline-yes">319x</span>
2576
+ <span class="cline-any cline-yes">1x</span>
2577
+ <span class="cline-any cline-neutral">&nbsp;</span>
2578
+ <span class="cline-any cline-neutral">&nbsp;</span>
2579
+ <span class="cline-any cline-yes">330x</span>
2580
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/*---------------------------------------------------------------------------------------------
2581
+ * Copyright (c) Microsoft Corporation. All rights reserved.
2582
+ * Licensed under the MIT License. See License.txt in the project root for license information.
2583
+ *--------------------------------------------------------------------------------------------*/
2584
+ &nbsp;
2585
+ import * as Json from 'jsonc-parser';
2586
+ import { JSONSchema, JSONSchemaRef } from '../jsonSchema';
2587
+ import { isNumber, equals, isBoolean, isString, isDefined } from '../utils/objects';
2588
+ import { TextDocument, ASTNode, ObjectASTNode, ArrayASTNode, BooleanASTNode, NumberASTNode, StringASTNode, NullASTNode, PropertyASTNode, JSONPath, ErrorCode, Diagnostic, DiagnosticSeverity, Range } from '../jsonLanguageTypes';
2589
+ &nbsp;
2590
+ import * as nls from 'vscode-nls';
2591
+ &nbsp;
2592
+ const localize = nls.loadMessageBundle();
2593
+ &nbsp;
2594
+ export interface IRange {
2595
+ offset: number;
2596
+ length: number;
2597
+ }
2598
+ &nbsp;
2599
+ const formats = {
2600
+ 'color-hex': { errorMessage: localize('colorHexFormatWarning', 'Invalid color format. Use #RGB, #RGBA, #RRGGBB or #RRGGBBAA.'), pattern: /^#([0-9A-Fa-f]{3,4}|([0-9A-Fa-f]{2}){3,4})$/ },
2601
+ 'date-time': { errorMessage: localize('dateTimeFormatWarning', 'String is not a RFC3339 date-time.'), pattern: /^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(Z|(\+|-)([01][0-9]|2[0-3]):([0-5][0-9]))$/i },
2602
+ 'date': { errorMessage: localize('dateFormatWarning', 'String is not a RFC3339 date.'), pattern: /^(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/i },
2603
+ 'time': { errorMessage: localize('timeFormatWarning', 'String is not a RFC3339 time.'), pattern: /^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(Z|(\+|-)([01][0-9]|2[0-3]):([0-5][0-9]))$/i },
2604
+ 'email': { errorMessage: localize('emailFormatWarning', 'String is not an e-mail address.'), pattern: /^(([^&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,}))$/ }
2605
+ };
2606
+ &nbsp;
2607
+ export interface IProblem {
2608
+ location: IRange;
2609
+ severity: DiagnosticSeverity;
2610
+ code?: ErrorCode;
2611
+ message: string;
2612
+ }
2613
+ &nbsp;
2614
+ export abstract class ASTNodeImpl {
2615
+ &nbsp;
2616
+ public readonly abstract type: 'object' | 'property' | 'array' | 'number' | 'boolean' | 'null' | 'string';
2617
+ &nbsp;
2618
+ public offset: number;
2619
+ public length: number;
2620
+ public readonly parent: ASTNode | undefined;
2621
+ &nbsp;
2622
+ constructor(parent: ASTNode | undefined, offset: number, length: number = 0) {
2623
+ this.offset = offset;
2624
+ this.length = length;
2625
+ this.parent = parent;
2626
+ }
2627
+ &nbsp;
2628
+ public get children(): ASTNode[] {
2629
+ return [];
2630
+ }
2631
+ &nbsp;
2632
+ <span class="fstat-no" title="function not covered" > public t</span>oString(): string {
2633
+ <span class="cstat-no" title="statement not covered" > return 'type: ' + this.type + ' (' + this.offset + '/' + this.length + ')' + (this.parent ? ' parent: {' + this.parent.toString() + '}' : '');</span>
2634
+ }
2635
+ }
2636
+ &nbsp;
2637
+ export class NullASTNodeImpl extends ASTNodeImpl implements NullASTNode {
2638
+ &nbsp;
2639
+ public type: 'null' = 'null';
2640
+ public value: null = null;
2641
+ constructor(parent: ASTNode | undefined, offset: number) {
2642
+ super(parent, offset);
2643
+ }
2644
+ }
2645
+ &nbsp;
2646
+ export class BooleanASTNodeImpl extends ASTNodeImpl implements BooleanASTNode {
2647
+ &nbsp;
2648
+ public type: 'boolean' = 'boolean';
2649
+ public value: boolean;
2650
+ &nbsp;
2651
+ constructor(parent: ASTNode | undefined, boolValue: boolean, offset: number) {
2652
+ super(parent, offset);
2653
+ this.value = boolValue;
2654
+ }
2655
+ }
2656
+ &nbsp;
2657
+ export class ArrayASTNodeImpl extends ASTNodeImpl implements ArrayASTNode {
2658
+ &nbsp;
2659
+ public type: 'array' = 'array';
2660
+ public items: ASTNode[];
2661
+ &nbsp;
2662
+ constructor(parent: ASTNode | undefined, offset: number) {
2663
+ super(parent, offset);
2664
+ this.items = [];
2665
+ }
2666
+ &nbsp;
2667
+ public get children(): ASTNode[] {
2668
+ return this.items;
2669
+ }
2670
+ }
2671
+ &nbsp;
2672
+ export class NumberASTNodeImpl extends ASTNodeImpl implements NumberASTNode {
2673
+ &nbsp;
2674
+ public type: 'number' = 'number';
2675
+ public isInteger: boolean;
2676
+ public value: number;
2677
+ &nbsp;
2678
+ constructor(parent: ASTNode | undefined, offset: number) {
2679
+ super(parent, offset);
2680
+ this.isInteger = true;
2681
+ this.value = Number.NaN;
2682
+ }
2683
+ }
2684
+ &nbsp;
2685
+ export class StringASTNodeImpl extends ASTNodeImpl implements StringASTNode {
2686
+ public type: 'string' = 'string';
2687
+ public value: string;
2688
+ &nbsp;
2689
+ constructor(parent: ASTNode | undefined, offset: number, length?: number) {
2690
+ super(parent, offset, length);
2691
+ this.value = '';
2692
+ }
2693
+ }
2694
+ &nbsp;
2695
+ export class PropertyASTNodeImpl extends ASTNodeImpl implements PropertyASTNode {
2696
+ public type: 'property' = 'property';
2697
+ public keyNode: StringASTNode;
2698
+ public valueNode?: ASTNode;
2699
+ public colonOffset: number;
2700
+ &nbsp;
2701
+ constructor(parent: ObjectASTNode | undefined, offset: number, keyNode: StringASTNode) {
2702
+ super(parent, offset);
2703
+ this.colonOffset = -1;
2704
+ this.keyNode = keyNode;
2705
+ }
2706
+ &nbsp;
2707
+ public get children(): ASTNode[] {
2708
+ return this.valueNode ? [this.keyNode, this.valueNode] : [this.keyNode];
2709
+ }
2710
+ }
2711
+ &nbsp;
2712
+ export class ObjectASTNodeImpl extends ASTNodeImpl implements ObjectASTNode {
2713
+ public type: 'object' = 'object';
2714
+ public properties: PropertyASTNode[];
2715
+ &nbsp;
2716
+ constructor(parent: ASTNode | undefined, offset: number) {
2717
+ super(parent, offset);
2718
+ &nbsp;
2719
+ this.properties = [];
2720
+ }
2721
+ &nbsp;
2722
+ public get children(): ASTNode[] {
2723
+ return this.properties;
2724
+ }
2725
+ &nbsp;
2726
+ }
2727
+ export function asSchema(schema: JSONSchemaRef): JSONSchema;
2728
+ export function asSchema(schema: JSONSchemaRef | undefined): JSONSchema | undefined;
2729
+ export function asSchema(schema: JSONSchemaRef | undefined): JSONSchema | undefined {
2730
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (isBoolean(schema)) {
2731
+ <span class="cstat-no" title="statement not covered" > return schema ? {} : { "not": {} };</span>
2732
+ }
2733
+ return schema;
2734
+ }
2735
+ &nbsp;
2736
+ export interface JSONDocumentConfig {
2737
+ collectComments?: boolean;
2738
+ }
2739
+ &nbsp;
2740
+ export interface IApplicableSchema {
2741
+ node: ASTNode;
2742
+ inverted?: boolean;
2743
+ schema: JSONSchema;
2744
+ }
2745
+ &nbsp;
2746
+ export enum EnumMatch {
2747
+ Key, Enum
2748
+ }
2749
+ &nbsp;
2750
+ export interface ISchemaCollector {
2751
+ schemas: IApplicableSchema[];
2752
+ add(schema: IApplicableSchema): void;
2753
+ merge(other: ISchemaCollector): void;
2754
+ include(node: ASTNode): boolean;
2755
+ newSub(): ISchemaCollector;
2756
+ }
2757
+ &nbsp;
2758
+ class SchemaCollector implements ISchemaCollector {
2759
+ schemas: IApplicableSchema[] = [];
2760
+ constructor(private <span class="missing-if-branch" title="if path not taken" >I</span>focusOffset = -1, private exclude?: ASTNode) {
2761
+ }
2762
+ add(schema: IApplicableSchema) {
2763
+ this.schemas.push(schema);
2764
+ }
2765
+ merge(other: ISchemaCollector) {
2766
+ Array.prototype.push.apply(this.schemas, other.schemas);
2767
+ }
2768
+ include(node: ASTNode) {
2769
+ return (this.focusOffset === -1 || contains(node, this.focusOffset)) &amp;&amp; (node !== this.exclude);
2770
+ }
2771
+ newSub(): ISchemaCollector {
2772
+ return new SchemaCollector(-1, this.exclude);
2773
+ }
2774
+ }
2775
+ &nbsp;
2776
+ class NoOpSchemaCollector implements ISchemaCollector {
2777
+ private constructor() { }
2778
+ get schemas() { return []; }
2779
+ add(schema: IApplicableSchema) { }
2780
+ merge(other: ISchemaCollector) { }
2781
+ include(node: ASTNode) { return true; }
2782
+ newSub(): ISchemaCollector { return this; }
2783
+ &nbsp;
2784
+ static instance = new NoOpSchemaCollector();
2785
+ }
2786
+ &nbsp;
2787
+ export class ValidationResult {
2788
+ public problems: IProblem[];
2789
+ &nbsp;
2790
+ public propertiesMatches: number;
2791
+ public propertiesValueMatches: number;
2792
+ public primaryValueMatches: number;
2793
+ public enumValueMatch: boolean;
2794
+ public enumValues: any[] | undefined;
2795
+ &nbsp;
2796
+ constructor() {
2797
+ this.problems = [];
2798
+ this.propertiesMatches = 0;
2799
+ this.propertiesValueMatches = 0;
2800
+ this.primaryValueMatches = 0;
2801
+ this.enumValueMatch = false;
2802
+ this.enumValues = undefined;
2803
+ }
2804
+ &nbsp;
2805
+ public hasProblems(): boolean {
2806
+ return !!this.problems.length;
2807
+ }
2808
+ &nbsp;
2809
+ <span class="fstat-no" title="function not covered" > public m</span>ergeAll(validationResults: ValidationResult[]): void {
2810
+ <span class="cstat-no" title="statement not covered" > for (const validationResult<span class="cstat-no" title="statement not covered" > of <span class="cstat-no" title="statement not covered" >v</span>alidationResults)</span> {</span>
2811
+ <span class="cstat-no" title="statement not covered" > this.merge(validationResult);</span>
2812
+ }
2813
+ }
2814
+ &nbsp;
2815
+ public merge(validationResult: ValidationResult): void {
2816
+ this.problems = this.problems.concat(validationResult.problems);
2817
+ }
2818
+ &nbsp;
2819
+ public mergeEnumValues(validationResult: ValidationResult): void {
2820
+ if (!this.enumValueMatch &amp;&amp; !validationResult.enumValueMatch &amp;&amp; this.enumValues &amp;&amp; validationResult.enumValues) {
2821
+ this.enumValues = this.enumValues.concat(validationResult.enumValues);
2822
+ for (const error of this.problems) {
2823
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (error.code === ErrorCode.EnumValueMismatch) {
2824
+ error.message = localize('enumWarning', 'Value is not accepted. Valid values: {0}.', this.enumValues.map(v =&gt; JSON.stringify(v)).join(', '));
2825
+ }
2826
+ }
2827
+ }
2828
+ }
2829
+ &nbsp;
2830
+ public mergePropertyMatch(propertyValidationResult: ValidationResult): void {
2831
+ this.merge(propertyValidationResult);
2832
+ this.propertiesMatches++;
2833
+ if (propertyValidationResult.enumValueMatch || !propertyValidationResult.hasProblems() &amp;&amp; propertyValidationResult.propertiesMatches) {
2834
+ this.propertiesValueMatches++;
2835
+ }
2836
+ if (propertyValidationResult.enumValueMatch &amp;&amp; propertyValidationResult.enumValues &amp;&amp; propertyValidationResult.enumValues.length === 1) {
2837
+ this.primaryValueMatches++;
2838
+ }
2839
+ }
2840
+ &nbsp;
2841
+ public compare(other: ValidationResult): number {
2842
+ const hasProblems = this.hasProblems();
2843
+ if (hasProblems !== other.hasProblems()) {
2844
+ return hasProblems ? -1 : 1;
2845
+ }
2846
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.enumValueMatch !== other.enumValueMatch) {
2847
+ <span class="cstat-no" title="statement not covered" > return other.enumValueMatch ? -1 : 1;</span>
2848
+ }
2849
+ if (this.primaryValueMatches !== other.primaryValueMatches) {
2850
+ return this.primaryValueMatches - other.primaryValueMatches;
2851
+ }
2852
+ if (this.propertiesValueMatches !== other.propertiesValueMatches) {
2853
+ return this.propertiesValueMatches - other.propertiesValueMatches;
2854
+ }
2855
+ return this.propertiesMatches - other.propertiesMatches;
2856
+ }
2857
+ &nbsp;
2858
+ }
2859
+ &nbsp;
2860
+ export function <span class="fstat-no" title="function not covered" >newJSONDocument(</span>root: ASTNode, <span class="cstat-no" title="statement not covered" >diagnostics: Diagnostic[] = []) {</span>
2861
+ <span class="cstat-no" title="statement not covered" > return new JSONDocument(root, diagnostics, []);</span>
2862
+ }
2863
+ &nbsp;
2864
+ export function getNodeValue(node: ASTNode): any {
2865
+ return Json.getNodeValue(node);
2866
+ }
2867
+ &nbsp;
2868
+ export function getNodePath(node: ASTNode): JSONPath {
2869
+ return Json.getNodePath(node);
2870
+ }
2871
+ &nbsp;
2872
+ export function contains(node: ASTNode, offset: number, includeRightBound = false): boolean {
2873
+ return offset &gt;= node.offset &amp;&amp; offset &lt; (node.offset + node.length) || includeRightBound &amp;&amp; offset === (node.offset + node.length);
2874
+ }
2875
+ &nbsp;
2876
+ export class JSONDocument {
2877
+ &nbsp;
2878
+ constructor(public readonly root: ASTNode | undefined, public readonly <span class="missing-if-branch" title="if path not taken" >I</span>syntaxErrors: Diagnostic[] = [], public readonly comments: Range[] = []) {
2879
+ }
2880
+ &nbsp;
2881
+ public getNodeFromOffset(offset: number, includeRightBound = false): ASTNode | undefined {
2882
+ if (this.root) {
2883
+ return &lt;ASTNode&gt;Json.findNodeAtOffset(this.root, offset, includeRightBound);
2884
+ }
2885
+ return undefined;
2886
+ }
2887
+ &nbsp;
2888
+ public visit(visitor: (node: ASTNode) =&gt; boolean): void {
2889
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (this.root) {
2890
+ const doVisit = (node: ASTNode): boolean =&gt; {
2891
+ let ctn = visitor(node);
2892
+ const children = node.children;
2893
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (Array.isArray(children)) {
2894
+ for (let i = 0; i &lt; children.length &amp;&amp; ctn; i++) {
2895
+ ctn = doVisit(children[i]);
2896
+ }
2897
+ }
2898
+ return ctn;
2899
+ };
2900
+ doVisit(this.root);
2901
+ }
2902
+ }
2903
+ &nbsp;
2904
+ public validate(textDocument: TextDocument, schema: JSONSchema | undefined): Diagnostic[] | undefined {
2905
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (this.root &amp;&amp; schema) {
2906
+ const validationResult = new ValidationResult();
2907
+ validate(this.root, schema, validationResult, NoOpSchemaCollector.instance);
2908
+ return validationResult.problems.map(p =&gt; {
2909
+ const range = Range.create(textDocument.positionAt(p.location.offset), textDocument.positionAt(p.location.offset + p.location.length));
2910
+ return Diagnostic.create(range, p.message, p.severity, p.code);
2911
+ });
2912
+ }
2913
+ <span class="cstat-no" title="statement not covered" > return undefined;</span>
2914
+ }
2915
+ &nbsp;
2916
+ public getMatchingSchemas(schema: JSONSchema, focusOffset: number = -1, exclude?: ASTNode): IApplicableSchema[] {
2917
+ const matchingSchemas = new SchemaCollector(focusOffset, exclude);
2918
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (this.root &amp;&amp; schema) {
2919
+ validate(this.root, schema, new ValidationResult(), matchingSchemas);
2920
+ }
2921
+ return matchingSchemas.schemas;
2922
+ }
2923
+ }
2924
+ &nbsp;
2925
+ function validate(n: ASTNode | undefined, schema: JSONSchema, validationResult: ValidationResult, matchingSchemas: ISchemaCollector): void {
2926
+ &nbsp;
2927
+ if (!n || !matchingSchemas.include(n)) {
2928
+ return;
2929
+ }
2930
+ const node = n;
2931
+ switch (node.type) {
2932
+ case 'object':
2933
+ _validateObjectNode(node, schema, validationResult, matchingSchemas);
2934
+ break;
2935
+ case 'array':
2936
+ _validateArrayNode(node, schema, validationResult, matchingSchemas);
2937
+ break;
2938
+ case 'string':
2939
+ _validateStringNode(node, schema, validationResult, matchingSchemas);
2940
+ break;
2941
+ case 'number':
2942
+ _validateNumberNode(node, schema, validationResult, matchingSchemas);
2943
+ break;
2944
+ <span class="branch-4 cbranch-no" title="branch not covered" > case 'property':</span>
2945
+ <span class="cstat-no" title="statement not covered" > return validate(node.valueNode, schema, validationResult, matchingSchemas);</span>
2946
+ }
2947
+ _validateNode();
2948
+ &nbsp;
2949
+ matchingSchemas.add({ node: node, schema: schema });
2950
+ &nbsp;
2951
+ function _validateNode() {
2952
+ &nbsp;
2953
+ function matchesType(type: string) {
2954
+ return node.type === type || (type === 'integer' &amp;&amp; node.type === 'number' &amp;&amp; node.isInteger);
2955
+ }
2956
+ &nbsp;
2957
+ if (Array.isArray(schema.type)) {
2958
+ if (!schema.type.some(matchesType)) {
2959
+ validationResult.problems.push({
2960
+ location: { offset: node.offset, length: node.length },
2961
+ severity: DiagnosticSeverity.Warning,
2962
+ message: schema.errorMessage || localize('typeArrayMismatchWarning', 'Incorrect type. Expected one of {0}.', (&lt;string[]&gt;schema.type).join(', '))
2963
+ });
2964
+ }
2965
+ }
2966
+ else if (schema.type) {
2967
+ if (!matchesType(schema.type)) {
2968
+ validationResult.problems.push({
2969
+ location: { offset: node.offset, length: node.length },
2970
+ severity: DiagnosticSeverity.Warning,
2971
+ message: schema.errorMessage || localize('typeMismatchWarning', 'Incorrect type. Expected "{0}".', schema.type)
2972
+ });
2973
+ }
2974
+ }
2975
+ if (Array.isArray(schema.allOf)) {
2976
+ for (const subSchemaRef of schema.allOf) {
2977
+ validate(node, asSchema(subSchemaRef), validationResult, matchingSchemas);
2978
+ }
2979
+ }
2980
+ const notSchema = asSchema(schema.not);
2981
+ if (notSchema) {
2982
+ const subValidationResult = new ValidationResult();
2983
+ const subMatchingSchemas = matchingSchemas.newSub();
2984
+ validate(node, notSchema, subValidationResult, subMatchingSchemas);
2985
+ if (!subValidationResult.hasProblems()) {
2986
+ validationResult.problems.push({
2987
+ location: { offset: node.offset, length: node.length },
2988
+ severity: DiagnosticSeverity.Warning,
2989
+ message: localize('notSchemaWarning', "Matches a schema that is not allowed.")
2990
+ });
2991
+ }
2992
+ for (const ms<span class="cstat-no" title="statement not covered" > of s</span>ubMatchingSchemas.schemas) {
2993
+ <span class="cstat-no" title="statement not covered" > ms.inverted = !ms.inverted;</span>
2994
+ <span class="cstat-no" title="statement not covered" > matchingSchemas.add(ms);</span>
2995
+ }
2996
+ }
2997
+ &nbsp;
2998
+ const testAlternatives = (alternatives: JSONSchemaRef[], maxOneMatch: boolean) =&gt; {
2999
+ const matches = [];
3000
+ &nbsp;
3001
+ // remember the best match that is used for error messages
3002
+ let bestMatch: { schema: JSONSchema; validationResult: ValidationResult; matchingSchemas: ISchemaCollector; } | undefined = undefined;
3003
+ for (const subSchemaRef of alternatives) {
3004
+ const subSchema = asSchema(subSchemaRef);
3005
+ const subValidationResult = new ValidationResult();
3006
+ const subMatchingSchemas = matchingSchemas.newSub();
3007
+ validate(node, subSchema, subValidationResult, subMatchingSchemas);
3008
+ if (!subValidationResult.hasProblems()) {
3009
+ matches.push(subSchema);
3010
+ }
3011
+ if (!bestMatch) {
3012
+ bestMatch = { schema: subSchema, validationResult: subValidationResult, matchingSchemas: subMatchingSchemas };
3013
+ } else {
3014
+ if (!maxOneMatch &amp;&amp; !subValidationResult.hasProblems() &amp;&amp; !bestMatch.validationResult.hasProblems()) {
3015
+ // no errors, both are equally good matches
3016
+ bestMatch.matchingSchemas.merge(subMatchingSchemas);
3017
+ bestMatch.validationResult.propertiesMatches += subValidationResult.propertiesMatches;
3018
+ bestMatch.validationResult.propertiesValueMatches += subValidationResult.propertiesValueMatches;
3019
+ } else {
3020
+ const compareResult = subValidationResult.compare(bestMatch.validationResult);
3021
+ if (compareResult &gt; 0) {
3022
+ // our node is the best matching so far
3023
+ bestMatch = { schema: subSchema, validationResult: subValidationResult, matchingSchemas: subMatchingSchemas };
3024
+ } else if (compareResult === 0) {
3025
+ // there's already a best matching but we are as good
3026
+ bestMatch.matchingSchemas.merge(subMatchingSchemas);
3027
+ bestMatch.validationResult.mergeEnumValues(subValidationResult);
3028
+ }
3029
+ }
3030
+ }
3031
+ }
3032
+ &nbsp;
3033
+ if (matches.length &gt; 1 &amp;&amp; maxOneMatch) {
3034
+ validationResult.problems.push({
3035
+ location: { offset: node.offset, length: 1 },
3036
+ severity: DiagnosticSeverity.Warning,
3037
+ message: localize('oneOfWarning', "Matches multiple schemas when only one must validate.")
3038
+ });
3039
+ }
3040
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (bestMatch) {
3041
+ validationResult.merge(bestMatch.validationResult);
3042
+ validationResult.propertiesMatches += bestMatch.validationResult.propertiesMatches;
3043
+ validationResult.propertiesValueMatches += bestMatch.validationResult.propertiesValueMatches;
3044
+ matchingSchemas.merge(bestMatch.matchingSchemas);
3045
+ }
3046
+ return matches.length;
3047
+ };
3048
+ if (Array.isArray(schema.anyOf)) {
3049
+ testAlternatives(schema.anyOf, false);
3050
+ }
3051
+ if (Array.isArray(schema.oneOf)) {
3052
+ testAlternatives(schema.oneOf, true);
3053
+ }
3054
+ &nbsp;
3055
+ const testBranch = (schema: JSONSchemaRef) =&gt; {
3056
+ const subValidationResult = new ValidationResult();
3057
+ const subMatchingSchemas = matchingSchemas.newSub();
3058
+ &nbsp;
3059
+ validate(node, asSchema(schema), subValidationResult, subMatchingSchemas);
3060
+ &nbsp;
3061
+ validationResult.merge(subValidationResult);
3062
+ validationResult.propertiesMatches += subValidationResult.propertiesMatches;
3063
+ validationResult.propertiesValueMatches += subValidationResult.propertiesValueMatches;
3064
+ matchingSchemas.merge(subMatchingSchemas);
3065
+ };
3066
+ &nbsp;
3067
+ const testCondition = (ifSchema: JSONSchemaRef, thenSchema?: JSONSchemaRef, elseSchema?: JSONSchemaRef) =&gt; {
3068
+ const subSchema = asSchema(ifSchema);
3069
+ const subValidationResult = new ValidationResult();
3070
+ const subMatchingSchemas = matchingSchemas.newSub();
3071
+ &nbsp;
3072
+ validate(node, subSchema, subValidationResult, subMatchingSchemas);
3073
+ matchingSchemas.merge(subMatchingSchemas);
3074
+ &nbsp;
3075
+ if (!subValidationResult.hasProblems()) {
3076
+ if (thenSchema) {
3077
+ testBranch(thenSchema);
3078
+ }
3079
+ } else if (elseSchema) {
3080
+ testBranch(elseSchema);
3081
+ }
3082
+ };
3083
+ &nbsp;
3084
+ const ifSchema = asSchema(schema.if);
3085
+ if (ifSchema) {
3086
+ testCondition(ifSchema, asSchema(schema.then), asSchema(schema.else));
3087
+ }
3088
+ &nbsp;
3089
+ if (Array.isArray(schema.enum)) {
3090
+ const val = getNodeValue(node);
3091
+ let enumValueMatch = false;
3092
+ for (const e of schema.enum) {
3093
+ if (equals(val, e)) {
3094
+ enumValueMatch = true;
3095
+ break;
3096
+ }
3097
+ }
3098
+ validationResult.enumValues = schema.enum;
3099
+ validationResult.enumValueMatch = enumValueMatch;
3100
+ if (!enumValueMatch) {
3101
+ validationResult.problems.push({
3102
+ location: { offset: node.offset, length: node.length },
3103
+ severity: DiagnosticSeverity.Warning,
3104
+ code: ErrorCode.EnumValueMismatch,
3105
+ message: schema.errorMessage || localize('enumWarning', 'Value is not accepted. Valid values: {0}.', schema.enum.map(v =&gt; JSON.stringify(v)).join(', '))
3106
+ });
3107
+ }
3108
+ }
3109
+ &nbsp;
3110
+ if (isDefined(schema.const)) {
3111
+ const val = getNodeValue(node);
3112
+ if (!equals(val, schema.const)) {
3113
+ validationResult.problems.push({
3114
+ location: { offset: node.offset, length: node.length },
3115
+ severity: DiagnosticSeverity.Warning,
3116
+ code: ErrorCode.EnumValueMismatch,
3117
+ message: schema.errorMessage || localize('constWarning', 'Value must be {0}.', JSON.stringify(schema.const))
3118
+ });
3119
+ validationResult.enumValueMatch = false;
3120
+ } else {
3121
+ validationResult.enumValueMatch = true;
3122
+ }
3123
+ validationResult.enumValues = [schema.const];
3124
+ }
3125
+ &nbsp;
3126
+ if (schema.deprecationMessage &amp;&amp; node.parent) {
3127
+ validationResult.problems.push({
3128
+ location: { offset: node.parent.offset, length: node.parent.length },
3129
+ severity: DiagnosticSeverity.Warning,
3130
+ message: schema.deprecationMessage
3131
+ });
3132
+ }
3133
+ }
3134
+ &nbsp;
3135
+ &nbsp;
3136
+ &nbsp;
3137
+ function _validateNumberNode(node: NumberASTNode, schema: JSONSchema, validationResult: ValidationResult, matchingSchemas: ISchemaCollector): void {
3138
+ const val = node.value;
3139
+ &nbsp;
3140
+ if (isNumber(schema.multipleOf)) {
3141
+ if (val % schema.multipleOf !== 0) {
3142
+ validationResult.problems.push({
3143
+ location: { offset: node.offset, length: node.length },
3144
+ severity: DiagnosticSeverity.Warning,
3145
+ message: localize('multipleOfWarning', 'Value is not divisible by {0}.', schema.multipleOf)
3146
+ });
3147
+ }
3148
+ }
3149
+ function getExclusiveLimit(limit: number | undefined, exclusive: boolean | number | undefined): number | undefined {
3150
+ if (isNumber(exclusive)) {
3151
+ return exclusive;
3152
+ }
3153
+ if (isBoolean(exclusive) &amp;&amp; exclusive) {
3154
+ return limit;
3155
+ }
3156
+ return undefined;
3157
+ }
3158
+ function getLimit(limit: number | undefined, exclusive: boolean | number | undefined): number | undefined {
3159
+ if (!isBoolean(exclusive) || !exclusive) {
3160
+ return limit;
3161
+ }
3162
+ return undefined;
3163
+ }
3164
+ const exclusiveMinimum = getExclusiveLimit(schema.minimum, schema.exclusiveMinimum);
3165
+ if (isNumber(exclusiveMinimum) &amp;&amp; val &lt;= exclusiveMinimum) {
3166
+ validationResult.problems.push({
3167
+ location: { offset: node.offset, length: node.length },
3168
+ severity: DiagnosticSeverity.Warning,
3169
+ message: localize('exclusiveMinimumWarning', 'Value is below the exclusive minimum of {0}.', exclusiveMinimum)
3170
+ });
3171
+ }
3172
+ const exclusiveMaximum = getExclusiveLimit(schema.maximum, schema.exclusiveMaximum);
3173
+ if (isNumber(exclusiveMaximum) &amp;&amp; val &gt;= exclusiveMaximum) {
3174
+ validationResult.problems.push({
3175
+ location: { offset: node.offset, length: node.length },
3176
+ severity: DiagnosticSeverity.Warning,
3177
+ message: localize('exclusiveMaximumWarning', 'Value is above the exclusive maximum of {0}.', exclusiveMaximum)
3178
+ });
3179
+ }
3180
+ const minimum = getLimit(schema.minimum, schema.exclusiveMinimum);
3181
+ if (isNumber(minimum) &amp;&amp; val &lt; minimum) {
3182
+ validationResult.problems.push({
3183
+ location: { offset: node.offset, length: node.length },
3184
+ severity: DiagnosticSeverity.Warning,
3185
+ message: localize('minimumWarning', 'Value is below the minimum of {0}.', minimum)
3186
+ });
3187
+ }
3188
+ const maximum = getLimit(schema.maximum, schema.exclusiveMaximum);
3189
+ if (isNumber(maximum) &amp;&amp; val &gt; maximum) {
3190
+ validationResult.problems.push({
3191
+ location: { offset: node.offset, length: node.length },
3192
+ severity: DiagnosticSeverity.Warning,
3193
+ message: localize('maximumWarning', 'Value is above the maximum of {0}.', maximum)
3194
+ });
3195
+ }
3196
+ }
3197
+ &nbsp;
3198
+ function _validateStringNode(node: StringASTNode, schema: JSONSchema, validationResult: ValidationResult, matchingSchemas: ISchemaCollector): void {
3199
+ if (isNumber(schema.minLength) &amp;&amp; node.value.length &lt; schema.minLength) {
3200
+ validationResult.problems.push({
3201
+ location: { offset: node.offset, length: node.length },
3202
+ severity: DiagnosticSeverity.Warning,
3203
+ message: localize('minLengthWarning', 'String is shorter than the minimum length of {0}.', schema.minLength)
3204
+ });
3205
+ }
3206
+ &nbsp;
3207
+ if (isNumber(schema.maxLength) &amp;&amp; node.value.length &gt; schema.maxLength) {
3208
+ validationResult.problems.push({
3209
+ location: { offset: node.offset, length: node.length },
3210
+ severity: DiagnosticSeverity.Warning,
3211
+ message: localize('maxLengthWarning', 'String is longer than the maximum length of {0}.', schema.maxLength)
3212
+ });
3213
+ }
3214
+ &nbsp;
3215
+ if (isString(schema.pattern)) {
3216
+ const regex = new RegExp(schema.pattern);
3217
+ if (!regex.test(node.value)) {
3218
+ validationResult.problems.push({
3219
+ location: { offset: node.offset, length: node.length },
3220
+ severity: DiagnosticSeverity.Warning,
3221
+ message: schema.patternErrorMessage || schema.errorMessage || localize('patternWarning', 'String does not match the pattern of "{0}".', schema.pattern)
3222
+ });
3223
+ }
3224
+ }
3225
+ &nbsp;
3226
+ if (schema.format) {
3227
+ switch (schema.format) {
3228
+ case 'uri':
3229
+ case 'uri-reference': {
3230
+ let errorMessage;
3231
+ if (!node.value) {
3232
+ errorMessage = localize('uriEmpty', 'URI expected.');
3233
+ } else {
3234
+ const match = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/.exec(node.value);
3235
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!match) {
3236
+ <span class="cstat-no" title="statement not covered" > errorMessage = localize('uriMissing', 'URI is expected.');</span>
3237
+ } else if (!match[2] &amp;&amp; schema.format === 'uri') {
3238
+ errorMessage = localize('uriSchemeMissing', 'URI with a scheme is expected.');
3239
+ }
3240
+ }
3241
+ if (errorMessage) {
3242
+ validationResult.problems.push({
3243
+ location: { offset: node.offset, length: node.length },
3244
+ severity: DiagnosticSeverity.Warning,
3245
+ message: schema.patternErrorMessage || schema.errorMessage || localize('uriFormatWarning', 'String is not a URI: {0}', errorMessage)
3246
+ });
3247
+ }
3248
+ }
3249
+ break;
3250
+ case 'color-hex':
3251
+ case 'date-time':
3252
+ case 'date':
3253
+ case 'time':
3254
+ case 'email':
3255
+ const format = formats[schema.format];
3256
+ if (!node.value || !format.pattern.exec(node.value)) {
3257
+ validationResult.problems.push({
3258
+ location: { offset: node.offset, length: node.length },
3259
+ severity: DiagnosticSeverity.Warning,
3260
+ message: schema.patternErrorMessage || schema.errorMessage || format.errorMessage
3261
+ });
3262
+ }
3263
+ default:
3264
+ }
3265
+ }
3266
+ &nbsp;
3267
+ }
3268
+ function _validateArrayNode(node: ArrayASTNode, schema: JSONSchema, validationResult: ValidationResult, matchingSchemas: ISchemaCollector): void {
3269
+ if (Array.isArray(schema.items)) {
3270
+ const subSchemas = schema.items;
3271
+ for (let index = 0; index &lt; subSchemas.length; index++) {
3272
+ const subSchemaRef = subSchemas[index];
3273
+ const subSchema = asSchema(subSchemaRef);
3274
+ const itemValidationResult = new ValidationResult();
3275
+ const item = node.items[index];
3276
+ if (item) {
3277
+ validate(item, subSchema, itemValidationResult, matchingSchemas);
3278
+ validationResult.mergePropertyMatch(itemValidationResult);
3279
+ } else <span class="missing-if-branch" title="if path not taken" >I</span>if (node.items.length &gt;= subSchemas.length) {
3280
+ <span class="cstat-no" title="statement not covered" > validationResult.propertiesValueMatches++;</span>
3281
+ }
3282
+ }
3283
+ if (node.items.length &gt; subSchemas.length) {
3284
+ if (typeof schema.additionalItems === 'object') {
3285
+ for (let i = subSchemas.length; i &lt; node.items.length; i++) {
3286
+ const itemValidationResult = new ValidationResult();
3287
+ validate(node.items[i], &lt;any&gt;schema.additionalItems, itemValidationResult, matchingSchemas);
3288
+ validationResult.mergePropertyMatch(itemValidationResult);
3289
+ }
3290
+ } else if (schema.additionalItems === false) {
3291
+ validationResult.problems.push({
3292
+ location: { offset: node.offset, length: node.length },
3293
+ severity: DiagnosticSeverity.Warning,
3294
+ message: localize('additionalItemsWarning', 'Array has too many items according to schema. Expected {0} or fewer.', subSchemas.length)
3295
+ });
3296
+ }
3297
+ }
3298
+ } else {
3299
+ const itemSchema = asSchema(schema.items);
3300
+ if (itemSchema) {
3301
+ for (const item of node.items) {
3302
+ const itemValidationResult = new ValidationResult();
3303
+ validate(item, itemSchema, itemValidationResult, matchingSchemas);
3304
+ validationResult.mergePropertyMatch(itemValidationResult);
3305
+ }
3306
+ }
3307
+ }
3308
+ &nbsp;
3309
+ const containsSchema = asSchema(schema.contains);
3310
+ if (containsSchema) {
3311
+ const doesContain = node.items.some(item =&gt; {
3312
+ const itemValidationResult = new ValidationResult();
3313
+ validate(item, containsSchema, itemValidationResult, NoOpSchemaCollector.instance);
3314
+ return !itemValidationResult.hasProblems();
3315
+ });
3316
+ &nbsp;
3317
+ if (!doesContain) {
3318
+ validationResult.problems.push({
3319
+ location: { offset: node.offset, length: node.length },
3320
+ severity: DiagnosticSeverity.Warning,
3321
+ message: schema.errorMessage || localize('requiredItemMissingWarning', 'Array does not contain required item.')
3322
+ });
3323
+ }
3324
+ }
3325
+ &nbsp;
3326
+ if (isNumber(schema.minItems) &amp;&amp; node.items.length &lt; schema.minItems) {
3327
+ validationResult.problems.push({
3328
+ location: { offset: node.offset, length: node.length },
3329
+ severity: DiagnosticSeverity.Warning,
3330
+ message: localize('minItemsWarning', 'Array has too few items. Expected {0} or more.', schema.minItems)
3331
+ });
3332
+ }
3333
+ &nbsp;
3334
+ if (isNumber(schema.maxItems) &amp;&amp; node.items.length &gt; schema.maxItems) {
3335
+ validationResult.problems.push({
3336
+ location: { offset: node.offset, length: node.length },
3337
+ severity: DiagnosticSeverity.Warning,
3338
+ message: localize('maxItemsWarning', 'Array has too many items. Expected {0} or fewer.', schema.maxItems)
3339
+ });
3340
+ }
3341
+ &nbsp;
3342
+ if (schema.uniqueItems === true) {
3343
+ const values = getNodeValue(node);
3344
+ const duplicates = values.some((value: any, index: number) =&gt; {
3345
+ return index !== values.lastIndexOf(value);
3346
+ });
3347
+ if (duplicates) {
3348
+ validationResult.problems.push({
3349
+ location: { offset: node.offset, length: node.length },
3350
+ severity: DiagnosticSeverity.Warning,
3351
+ message: localize('uniqueItemsWarning', 'Array has duplicate items.')
3352
+ });
3353
+ }
3354
+ }
3355
+ &nbsp;
3356
+ }
3357
+ &nbsp;
3358
+ function _validateObjectNode(node: ObjectASTNode, schema: JSONSchema, validationResult: ValidationResult, matchingSchemas: ISchemaCollector): void {
3359
+ const seenKeys: { [key: string]: ASTNode | undefined } = Object.create(null);
3360
+ const unprocessedProperties: string[] = [];
3361
+ for (const propertyNode of node.properties) {
3362
+ const key = propertyNode.keyNode.value;
3363
+ seenKeys[key] = propertyNode.valueNode;
3364
+ unprocessedProperties.push(key);
3365
+ }
3366
+ &nbsp;
3367
+ if (Array.isArray(schema.required)) {
3368
+ for (const propertyName of schema.required) {
3369
+ if (!seenKeys[propertyName]) {
3370
+ const keyNode = node.parent &amp;&amp; node.parent.type === 'property' &amp;&amp; node.parent.keyNode;
3371
+ const location = keyNode ? { offset: keyNode.offset, length: keyNode.length } : { offset: node.offset, length: 1 };
3372
+ validationResult.problems.push({
3373
+ location: location,
3374
+ severity: DiagnosticSeverity.Warning,
3375
+ message: localize('MissingRequiredPropWarning', 'Missing property "{0}".', propertyName)
3376
+ });
3377
+ }
3378
+ }
3379
+ }
3380
+ &nbsp;
3381
+ const propertyProcessed = (prop: string) =&gt; {
3382
+ let index = unprocessedProperties.indexOf(prop);
3383
+ while (index &gt;= 0) {
3384
+ unprocessedProperties.splice(index, 1);
3385
+ index = unprocessedProperties.indexOf(prop);
3386
+ }
3387
+ };
3388
+ &nbsp;
3389
+ if (schema.properties) {
3390
+ for (const propertyName of Object.keys(schema.properties)) {
3391
+ propertyProcessed(propertyName);
3392
+ const propertySchema = schema.properties[propertyName];
3393
+ const child = seenKeys[propertyName];
3394
+ if (child) {
3395
+ if (isBoolean(propertySchema)) {
3396
+ if (!propertySchema) {
3397
+ const propertyNode = &lt;PropertyASTNode&gt;child.parent;
3398
+ validationResult.problems.push({
3399
+ location: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },
3400
+ severity: DiagnosticSeverity.Warning,
3401
+ message: schema.errorMessage || localize('DisallowedExtraPropWarning', 'Property {0} is not allowed.', propertyName)
3402
+ });
3403
+ } else {
3404
+ validationResult.propertiesMatches++;
3405
+ validationResult.propertiesValueMatches++;
3406
+ }
3407
+ } else {
3408
+ const propertyValidationResult = new ValidationResult();
3409
+ validate(child, propertySchema, propertyValidationResult, matchingSchemas);
3410
+ validationResult.mergePropertyMatch(propertyValidationResult);
3411
+ }
3412
+ }
3413
+ &nbsp;
3414
+ }
3415
+ }
3416
+ &nbsp;
3417
+ if (schema.patternProperties) {
3418
+ for (const propertyPattern of Object.keys(schema.patternProperties)) {
3419
+ const regex = new RegExp(propertyPattern);
3420
+ for (const propertyName of unprocessedProperties.slice(0)) {
3421
+ if (regex.test(propertyName)) {
3422
+ propertyProcessed(propertyName);
3423
+ const child = seenKeys[propertyName];
3424
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (child) {
3425
+ const propertySchema = schema.patternProperties[propertyPattern];
3426
+ if (isBoolean(propertySchema)) {
3427
+ if (!propertySchema) {
3428
+ const propertyNode = &lt;PropertyASTNode&gt;child.parent;
3429
+ validationResult.problems.push({
3430
+ location: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },
3431
+ severity: DiagnosticSeverity.Warning,
3432
+ message: schema.errorMessage || localize('DisallowedExtraPropWarning', 'Property {0} is not allowed.', propertyName)
3433
+ });
3434
+ } else {
3435
+ validationResult.propertiesMatches++;
3436
+ validationResult.propertiesValueMatches++;
3437
+ }
3438
+ } else {
3439
+ const propertyValidationResult = new ValidationResult();
3440
+ validate(child, propertySchema, propertyValidationResult, matchingSchemas);
3441
+ validationResult.mergePropertyMatch(propertyValidationResult);
3442
+ }
3443
+ }
3444
+ }
3445
+ }
3446
+ }
3447
+ }
3448
+ &nbsp;
3449
+ if (typeof schema.additionalProperties === 'object') {
3450
+ for (const propertyName of unprocessedProperties) {
3451
+ const child = seenKeys[propertyName];
3452
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (child) {
3453
+ const propertyValidationResult = new ValidationResult();
3454
+ validate(child, &lt;any&gt;schema.additionalProperties, propertyValidationResult, matchingSchemas);
3455
+ validationResult.mergePropertyMatch(propertyValidationResult);
3456
+ }
3457
+ }
3458
+ } else if (schema.additionalProperties === false) {
3459
+ if (unprocessedProperties.length &gt; 0) {
3460
+ for (const propertyName of unprocessedProperties) {
3461
+ const child = seenKeys[propertyName];
3462
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (child) {
3463
+ const propertyNode = &lt;PropertyASTNode&gt;child.parent;
3464
+ &nbsp;
3465
+ validationResult.problems.push({
3466
+ location: { offset: propertyNode.keyNode.offset, length: propertyNode.keyNode.length },
3467
+ severity: DiagnosticSeverity.Warning,
3468
+ message: schema.errorMessage || localize('DisallowedExtraPropWarning', 'Property {0} is not allowed.', propertyName)
3469
+ });
3470
+ }
3471
+ }
3472
+ }
3473
+ }
3474
+ &nbsp;
3475
+ if (isNumber(schema.maxProperties)) {
3476
+ if (node.properties.length &gt; schema.maxProperties) {
3477
+ validationResult.problems.push({
3478
+ location: { offset: node.offset, length: node.length },
3479
+ severity: DiagnosticSeverity.Warning,
3480
+ message: localize('MaxPropWarning', 'Object has more properties than limit of {0}.', schema.maxProperties)
3481
+ });
3482
+ }
3483
+ }
3484
+ &nbsp;
3485
+ if (isNumber(schema.minProperties)) {
3486
+ if (node.properties.length &lt; schema.minProperties) {
3487
+ validationResult.problems.push({
3488
+ location: { offset: node.offset, length: node.length },
3489
+ severity: DiagnosticSeverity.Warning,
3490
+ message: localize('MinPropWarning', 'Object has fewer properties than the required number of {0}', schema.minProperties)
3491
+ });
3492
+ }
3493
+ }
3494
+ &nbsp;
3495
+ if (schema.dependencies) {
3496
+ for (const key of Object.keys(schema.dependencies)) {
3497
+ const prop = seenKeys[key];
3498
+ if (prop) {
3499
+ const propertyDep = schema.dependencies[key];
3500
+ if (Array.isArray(propertyDep)) {
3501
+ for (const requiredProp of propertyDep) {
3502
+ if (!seenKeys[requiredProp]) {
3503
+ validationResult.problems.push({
3504
+ location: { offset: node.offset, length: node.length },
3505
+ severity: DiagnosticSeverity.Warning,
3506
+ message: localize('RequiredDependentPropWarning', 'Object is missing property {0} required by property {1}.', requiredProp, key)
3507
+ });
3508
+ } else {
3509
+ validationResult.propertiesValueMatches++;
3510
+ }
3511
+ }
3512
+ } else {
3513
+ const propertySchema = asSchema(propertyDep);
3514
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (propertySchema) {
3515
+ const propertyValidationResult = new ValidationResult();
3516
+ validate(node, propertySchema, propertyValidationResult, matchingSchemas);
3517
+ validationResult.mergePropertyMatch(propertyValidationResult);
3518
+ }
3519
+ }
3520
+ }
3521
+ }
3522
+ }
3523
+ &nbsp;
3524
+ const propertyNames = asSchema(schema.propertyNames);
3525
+ if (propertyNames) {
3526
+ for (const f of node.properties) {
3527
+ const key = f.keyNode;
3528
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (key) {
3529
+ validate(key, propertyNames, validationResult, NoOpSchemaCollector.instance);
3530
+ }
3531
+ }
3532
+ }
3533
+ }
3534
+ &nbsp;
3535
+ }
3536
+ &nbsp;
3537
+ &nbsp;
3538
+ export function parse(textDocument: TextDocument, config?: JSONDocumentConfig): JSONDocument {
3539
+ &nbsp;
3540
+ const problems: Diagnostic[] = [];
3541
+ let lastProblemOffset = -1;
3542
+ const text = textDocument.getText();
3543
+ const scanner = Json.createScanner(text, false);
3544
+ &nbsp;
3545
+ const commentRanges: Range[] | undefined = config &amp;&amp; config.collectComments ? [] : undefined;
3546
+ &nbsp;
3547
+ function _scanNext(): Json.SyntaxKind {
3548
+ while (true) {
3549
+ const token = scanner.scan();
3550
+ _checkScanError();
3551
+ switch (token) {
3552
+ case Json.SyntaxKind.LineCommentTrivia:
3553
+ case Json.SyntaxKind.BlockCommentTrivia:
3554
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (Array.isArray(commentRanges)) {
3555
+ commentRanges.push(Range.create(textDocument.positionAt(scanner.getTokenOffset()), textDocument.positionAt(scanner.getTokenOffset() + scanner.getTokenLength())));
3556
+ }
3557
+ break;
3558
+ case Json.SyntaxKind.Trivia:
3559
+ case Json.SyntaxKind.LineBreakTrivia:
3560
+ break;
3561
+ default:
3562
+ return token;
3563
+ }
3564
+ }
3565
+ }
3566
+ &nbsp;
3567
+ function <span class="fstat-no" title="function not covered" >_accept(</span>token: Json.SyntaxKind): boolean {
3568
+ <span class="cstat-no" title="statement not covered" > if (scanner.getToken() === token) {</span>
3569
+ <span class="cstat-no" title="statement not covered" > _scanNext();</span>
3570
+ <span class="cstat-no" title="statement not covered" > return true;</span>
3571
+ }
3572
+ <span class="cstat-no" title="statement not covered" > return false;</span>
3573
+ }
3574
+ &nbsp;
3575
+ function _errorAtRange&lt;T extends ASTNode&gt;(message: string, code: ErrorCode, startOffset: number, endOffset: number, severity: DiagnosticSeverity = DiagnosticSeverity.Error): void {
3576
+ &nbsp;
3577
+ if (problems.length === 0 || startOffset !== lastProblemOffset) {
3578
+ const range = Range.create(textDocument.positionAt(startOffset), textDocument.positionAt(endOffset));
3579
+ problems.push(Diagnostic.create(range, message, severity, code, textDocument.languageId));
3580
+ lastProblemOffset = startOffset;
3581
+ }
3582
+ }
3583
+ &nbsp;
3584
+ function _error&lt;T extends ASTNodeImpl&gt;(message: string, code: ErrorCode, node: T | undefined = undefined, skipUntilAfter: Json.SyntaxKind[] = [], skipUntil: Json.SyntaxKind[] = []): T | undefined {
3585
+ let start = scanner.getTokenOffset();
3586
+ let end = scanner.getTokenOffset() + scanner.getTokenLength();
3587
+ if (start === end &amp;&amp; start &gt; 0) {
3588
+ start--;
3589
+ while (start &gt; 0 &amp;&amp; /\s/.test(text.charAt(start))) {
3590
+ start--;
3591
+ }
3592
+ end = start + 1;
3593
+ }
3594
+ _errorAtRange(message, code, start, end);
3595
+ &nbsp;
3596
+ if (node) {
3597
+ _finalize(node, false);
3598
+ }
3599
+ if (skipUntilAfter.length + skipUntil.length &gt; 0) {
3600
+ let token = scanner.getToken();
3601
+ while (token !== Json.SyntaxKind.EOF) {
3602
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (skipUntilAfter.indexOf(token) !== -1) {
3603
+ <span class="cstat-no" title="statement not covered" > _scanNext();</span>
3604
+ <span class="cstat-no" title="statement not covered" > break;</span>
3605
+ } else if (skipUntil.indexOf(token) !== -1) {
3606
+ break;
3607
+ }
3608
+ token = _scanNext();
3609
+ }
3610
+ }
3611
+ return node;
3612
+ }
3613
+ &nbsp;
3614
+ function _checkScanError(): boolean {
3615
+ switch (scanner.getTokenError()) {
3616
+ case Json.ScanError.InvalidUnicode:
3617
+ _error(localize('InvalidUnicode', 'Invalid unicode sequence in string.'), ErrorCode.InvalidUnicode);
3618
+ return true;
3619
+ case Json.ScanError.InvalidEscapeCharacter:
3620
+ _error(localize('InvalidEscapeCharacter', 'Invalid escape character in string.'), ErrorCode.InvalidEscapeCharacter);
3621
+ return true;
3622
+ case Json.ScanError.UnexpectedEndOfNumber:
3623
+ _error(localize('UnexpectedEndOfNumber', 'Unexpected end of number.'), ErrorCode.UnexpectedEndOfNumber);
3624
+ return true;
3625
+ case Json.ScanError.UnexpectedEndOfComment:
3626
+ _error(localize('UnexpectedEndOfComment', 'Unexpected end of comment.'), ErrorCode.UnexpectedEndOfComment);
3627
+ return true;
3628
+ case Json.ScanError.UnexpectedEndOfString:
3629
+ _error(localize('UnexpectedEndOfString', 'Unexpected end of string.'), ErrorCode.UnexpectedEndOfString);
3630
+ return true;
3631
+ case Json.ScanError.InvalidCharacter:
3632
+ _error(localize('InvalidCharacter', 'Invalid characters in string. Control characters must be escaped.'), ErrorCode.InvalidCharacter);
3633
+ return true;
3634
+ }
3635
+ return false;
3636
+ }
3637
+ &nbsp;
3638
+ function _finalize&lt;T extends ASTNodeImpl&gt;(node: T, scanNext: boolean): T {
3639
+ node.length = scanner.getTokenOffset() + scanner.getTokenLength() - node.offset;
3640
+ &nbsp;
3641
+ if (scanNext) {
3642
+ _scanNext();
3643
+ }
3644
+ &nbsp;
3645
+ return node;
3646
+ }
3647
+ &nbsp;
3648
+ function _parseArray(parent: ASTNode | undefined): ArrayASTNode | undefined {
3649
+ if (scanner.getToken() !== Json.SyntaxKind.OpenBracketToken) {
3650
+ return undefined;
3651
+ }
3652
+ const node = new ArrayASTNodeImpl(parent, scanner.getTokenOffset());
3653
+ _scanNext(); // consume OpenBracketToken
3654
+ &nbsp;
3655
+ const count = 0;
3656
+ let needsComma = false;
3657
+ while (scanner.getToken() !== Json.SyntaxKind.CloseBracketToken &amp;&amp; scanner.getToken() !== Json.SyntaxKind.EOF) {
3658
+ if (scanner.getToken() === Json.SyntaxKind.CommaToken) {
3659
+ if (!needsComma) {
3660
+ _error(localize('ValueExpected', 'Value expected'), ErrorCode.ValueExpected);
3661
+ }
3662
+ const commaOffset = scanner.getTokenOffset();
3663
+ _scanNext(); // consume comma
3664
+ if (scanner.getToken() === Json.SyntaxKind.CloseBracketToken) {
3665
+ if (needsComma) {
3666
+ _errorAtRange(localize('TrailingComma', 'Trailing comma'), ErrorCode.TrailingComma, commaOffset, commaOffset + 1);
3667
+ }
3668
+ continue;
3669
+ }
3670
+ } else if (needsComma) {
3671
+ _error(localize('ExpectedComma', 'Expected comma'), ErrorCode.CommaExpected);
3672
+ }
3673
+ const item = _parseValue(node);
3674
+ if (!item) {
3675
+ _error(localize('PropertyExpected', 'Value expected'), ErrorCode.ValueExpected, undefined, [], [Json.SyntaxKind.CloseBracketToken, Json.SyntaxKind.CommaToken]);
3676
+ } else {
3677
+ node.items.push(item);
3678
+ }
3679
+ needsComma = true;
3680
+ }
3681
+ &nbsp;
3682
+ if (scanner.getToken() !== Json.SyntaxKind.CloseBracketToken) {
3683
+ return _error(localize('ExpectedCloseBracket', 'Expected comma or closing bracket'), ErrorCode.CommaOrCloseBacketExpected, node);
3684
+ }
3685
+ &nbsp;
3686
+ return _finalize(node, true);
3687
+ }
3688
+ &nbsp;
3689
+ const keyPlaceholder = new StringASTNodeImpl(undefined, 0, 0);
3690
+ &nbsp;
3691
+ function _parseProperty(parent: ObjectASTNode | undefined, keysSeen: { [key: string]: (PropertyASTNode | boolean) }): PropertyASTNode | undefined {
3692
+ const node = new PropertyASTNodeImpl(parent, scanner.getTokenOffset(), keyPlaceholder);
3693
+ let key = _parseString(node);
3694
+ if (!key) {
3695
+ if (scanner.getToken() === Json.SyntaxKind.Unknown) {
3696
+ // give a more helpful error message
3697
+ _error(localize('DoubleQuotesExpected', 'Property keys must be doublequoted'), ErrorCode.Undefined);
3698
+ const keyNode = new StringASTNodeImpl(node, scanner.getTokenOffset(), scanner.getTokenLength());
3699
+ keyNode.value = scanner.getTokenValue();
3700
+ key = keyNode;
3701
+ _scanNext(); // consume Unknown
3702
+ } else {
3703
+ return undefined;
3704
+ }
3705
+ }
3706
+ node.keyNode = key;
3707
+ &nbsp;
3708
+ const seen = keysSeen[key.value];
3709
+ if (seen) {
3710
+ _errorAtRange(localize('DuplicateKeyWarning', "Duplicate object key"), ErrorCode.DuplicateKey, node.keyNode.offset, node.keyNode.offset + node.keyNode.length, DiagnosticSeverity.Warning);
3711
+ if (typeof seen === 'object') {
3712
+ _errorAtRange(localize('DuplicateKeyWarning', "Duplicate object key"), ErrorCode.DuplicateKey, seen.keyNode.offset, seen.keyNode.offset + seen.keyNode.length, DiagnosticSeverity.Warning);
3713
+ }
3714
+ keysSeen[key.value] = true; // if the same key is duplicate again, avoid duplicate error reporting
3715
+ } else {
3716
+ keysSeen[key.value] = node;
3717
+ }
3718
+ &nbsp;
3719
+ if (scanner.getToken() === Json.SyntaxKind.ColonToken) {
3720
+ node.colonOffset = scanner.getTokenOffset();
3721
+ _scanNext(); // consume ColonToken
3722
+ } else {
3723
+ _error(localize('ColonExpected', 'Colon expected'), ErrorCode.ColonExpected);
3724
+ if (scanner.getToken() === Json.SyntaxKind.StringLiteral &amp;&amp; textDocument.positionAt(key.offset + key.length).line &lt; textDocument.positionAt(scanner.getTokenOffset()).line) {
3725
+ node.length = key.length;
3726
+ return node;
3727
+ }
3728
+ }
3729
+ const value = _parseValue(node);
3730
+ if (!value) {
3731
+ return _error(localize('ValueExpected', 'Value expected'), ErrorCode.ValueExpected, node, [], [Json.SyntaxKind.CloseBraceToken, Json.SyntaxKind.CommaToken]);
3732
+ }
3733
+ node.valueNode = value;
3734
+ node.length = value.offset + value.length - node.offset;
3735
+ return node;
3736
+ }
3737
+ &nbsp;
3738
+ function _parseObject(parent: ASTNode | undefined): ObjectASTNode | undefined {
3739
+ if (scanner.getToken() !== Json.SyntaxKind.OpenBraceToken) {
3740
+ return undefined;
3741
+ }
3742
+ const node = new ObjectASTNodeImpl(parent, scanner.getTokenOffset());
3743
+ const keysSeen: any = Object.create(null);
3744
+ _scanNext(); // consume OpenBraceToken
3745
+ let needsComma = false;
3746
+ &nbsp;
3747
+ while (scanner.getToken() !== Json.SyntaxKind.CloseBraceToken &amp;&amp; scanner.getToken() !== Json.SyntaxKind.EOF) {
3748
+ if (scanner.getToken() === Json.SyntaxKind.CommaToken) {
3749
+ if (!needsComma) {
3750
+ _error(localize('PropertyExpected', 'Property expected'), ErrorCode.PropertyExpected);
3751
+ }
3752
+ const commaOffset = scanner.getTokenOffset();
3753
+ _scanNext(); // consume comma
3754
+ if (scanner.getToken() === Json.SyntaxKind.CloseBraceToken) {
3755
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (needsComma) {
3756
+ _errorAtRange(localize('TrailingComma', 'Trailing comma'), ErrorCode.TrailingComma, commaOffset, commaOffset + 1);
3757
+ }
3758
+ continue;
3759
+ }
3760
+ } else if (needsComma) {
3761
+ _error(localize('ExpectedComma', 'Expected comma'), ErrorCode.CommaExpected);
3762
+ }
3763
+ const property = _parseProperty(node, keysSeen);
3764
+ if (!property) {
3765
+ _error(localize('PropertyExpected', 'Property expected'), ErrorCode.PropertyExpected, undefined, [], [Json.SyntaxKind.CloseBraceToken, Json.SyntaxKind.CommaToken]);
3766
+ } else {
3767
+ node.properties.push(property);
3768
+ }
3769
+ needsComma = true;
3770
+ }
3771
+ &nbsp;
3772
+ if (scanner.getToken() !== Json.SyntaxKind.CloseBraceToken) {
3773
+ return _error(localize('ExpectedCloseBrace', 'Expected comma or closing brace'), ErrorCode.CommaOrCloseBraceExpected, node);
3774
+ }
3775
+ return _finalize(node, true);
3776
+ }
3777
+ &nbsp;
3778
+ function _parseString(parent: ASTNode | undefined): StringASTNode | undefined {
3779
+ if (scanner.getToken() !== Json.SyntaxKind.StringLiteral) {
3780
+ return undefined;
3781
+ }
3782
+ &nbsp;
3783
+ const node = new StringASTNodeImpl(parent, scanner.getTokenOffset());
3784
+ node.value = scanner.getTokenValue();
3785
+ &nbsp;
3786
+ return _finalize(node, true);
3787
+ }
3788
+ &nbsp;
3789
+ function _parseNumber(parent: ASTNode | undefined): NumberASTNode | undefined {
3790
+ if (scanner.getToken() !== Json.SyntaxKind.NumericLiteral) {
3791
+ return undefined;
3792
+ }
3793
+ &nbsp;
3794
+ const node = new NumberASTNodeImpl(parent, scanner.getTokenOffset());
3795
+ if (scanner.getTokenError() === Json.ScanError.None) {
3796
+ const tokenValue = scanner.getTokenValue();
3797
+ try {
3798
+ const numberValue = JSON.parse(tokenValue);
3799
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!isNumber(numberValue)) {
3800
+ <span class="cstat-no" title="statement not covered" > return _error(localize('InvalidNumberFormat', 'Invalid number format.'), ErrorCode.Undefined, node);</span>
3801
+ }
3802
+ node.value = numberValue;
3803
+ } catch (e) {
3804
+ <span class="cstat-no" title="statement not covered" > return _error(localize('InvalidNumberFormat', 'Invalid number format.'), ErrorCode.Undefined, node);</span>
3805
+ }
3806
+ node.isInteger = tokenValue.indexOf('.') === -1;
3807
+ }
3808
+ return _finalize(node, true);
3809
+ }
3810
+ &nbsp;
3811
+ function _parseLiteral(parent: ASTNode | undefined): ASTNode | undefined {
3812
+ let node: ASTNodeImpl;
3813
+ switch (scanner.getToken()) {
3814
+ case Json.SyntaxKind.NullKeyword:
3815
+ return _finalize(new NullASTNodeImpl(parent, scanner.getTokenOffset()), true);
3816
+ case Json.SyntaxKind.TrueKeyword:
3817
+ return _finalize(new BooleanASTNodeImpl(parent, true, scanner.getTokenOffset()), true);
3818
+ case Json.SyntaxKind.FalseKeyword:
3819
+ return _finalize(new BooleanASTNodeImpl(parent, false, scanner.getTokenOffset()), true);
3820
+ default:
3821
+ return undefined;
3822
+ }
3823
+ }
3824
+ &nbsp;
3825
+ function _parseValue(parent: ASTNode | undefined): ASTNode | undefined {
3826
+ return _parseArray(parent) || _parseObject(parent) || _parseString(parent) || _parseNumber(parent) || _parseLiteral(parent);
3827
+ }
3828
+ &nbsp;
3829
+ let _root: ASTNode | undefined = undefined;
3830
+ const token = _scanNext();
3831
+ if (token !== Json.SyntaxKind.EOF) {
3832
+ _root = _parseValue(_root);
3833
+ if (!_root) {
3834
+ _error(localize('Invalid symbol', 'Expected a JSON object, array or literal.'), ErrorCode.Undefined);
3835
+ } else if (scanner.getToken() !== Json.SyntaxKind.EOF) {
3836
+ _error(localize('End of file expected', 'End of file expected.'), ErrorCode.Undefined);
3837
+ }
3838
+ }
3839
+ return new JSONDocument(_root, problems, commentRanges);
3840
+ }</pre></td></tr></table></pre>
3841
+
3842
+ <div class='push'></div><!-- for sticky footer -->
3843
+ </div><!-- /wrapper -->
3844
+ <div class='footer quiet pad2 space-top1 center small'>
3845
+ Code coverage generated by
3846
+ <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
3847
+ at Mon Apr 27 2020 21:56:17 GMT+0200 (Central European Summer Time)
3848
+ </div>
3849
+ </div>
3850
+ <script src="../../prettify.js"></script>
3851
+ <script>
3852
+ window.onload = function () {
3853
+ prettyPrint();
3854
+ };
3855
+ </script>
3856
+ <script src="../../sorter.js"></script>
3857
+ <script src="../../block-navigation.js"></script>
3858
+ </body>
3859
+ </html>
3860
+