mqtt-plus 1.4.13 → 1.4.15

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 (92) hide show
  1. package/AGENTS.md +0 -1
  2. package/CHANGELOG.md +18 -0
  3. package/dst-stage1/mqtt-plus-api.js +1 -0
  4. package/dst-stage1/mqtt-plus-api.js.map +1 -0
  5. package/dst-stage1/mqtt-plus-auth.js +1 -0
  6. package/dst-stage1/mqtt-plus-auth.js.map +1 -0
  7. package/dst-stage1/mqtt-plus-base.js +1 -0
  8. package/dst-stage1/mqtt-plus-base.js.map +1 -0
  9. package/dst-stage1/mqtt-plus-codec.js +1 -0
  10. package/dst-stage1/mqtt-plus-codec.js.map +1 -0
  11. package/dst-stage1/mqtt-plus-encode.js +1 -0
  12. package/dst-stage1/mqtt-plus-encode.js.map +1 -0
  13. package/dst-stage1/mqtt-plus-error.js +1 -0
  14. package/dst-stage1/mqtt-plus-error.js.map +1 -0
  15. package/dst-stage1/mqtt-plus-event.js +1 -0
  16. package/dst-stage1/mqtt-plus-event.js.map +1 -0
  17. package/dst-stage1/mqtt-plus-info.js +1 -0
  18. package/dst-stage1/mqtt-plus-info.js.map +1 -0
  19. package/dst-stage1/mqtt-plus-meta.js +1 -0
  20. package/dst-stage1/mqtt-plus-meta.js.map +1 -0
  21. package/dst-stage1/mqtt-plus-msg.js +1 -0
  22. package/dst-stage1/mqtt-plus-msg.js.map +1 -0
  23. package/dst-stage1/mqtt-plus-options.js +1 -0
  24. package/dst-stage1/mqtt-plus-options.js.map +1 -0
  25. package/dst-stage1/mqtt-plus-service.js +1 -0
  26. package/dst-stage1/mqtt-plus-service.js.map +1 -0
  27. package/dst-stage1/mqtt-plus-sink.js +14 -2
  28. package/dst-stage1/mqtt-plus-sink.js.map +1 -0
  29. package/dst-stage1/mqtt-plus-source.js +27 -16
  30. package/dst-stage1/mqtt-plus-source.js.map +1 -0
  31. package/dst-stage1/mqtt-plus-subscription.js +1 -0
  32. package/dst-stage1/mqtt-plus-subscription.js.map +1 -0
  33. package/dst-stage1/mqtt-plus-timer.js +1 -0
  34. package/dst-stage1/mqtt-plus-timer.js.map +1 -0
  35. package/dst-stage1/mqtt-plus-trace.js +1 -0
  36. package/dst-stage1/mqtt-plus-trace.js.map +1 -0
  37. package/dst-stage1/mqtt-plus-util.js +1 -0
  38. package/dst-stage1/mqtt-plus-util.js.map +1 -0
  39. package/dst-stage1/mqtt-plus-version.d.ts +1 -1
  40. package/dst-stage1/mqtt-plus-version.js +3 -1
  41. package/dst-stage1/mqtt-plus-version.js.map +1 -0
  42. package/dst-stage1/mqtt-plus.js +1 -0
  43. package/dst-stage1/mqtt-plus.js.map +1 -0
  44. package/dst-stage2/mqtt-plus.cjs.js +1972 -2161
  45. package/dst-stage2/mqtt-plus.esm.js +1934 -2131
  46. package/dst-stage2/mqtt-plus.umd.js +13 -14
  47. package/etc/c8.json +16 -0
  48. package/etc/knip.jsonc +7 -1
  49. package/etc/stx.conf +36 -4
  50. package/etc/tsc.json +1 -1
  51. package/etc/vite.mts +11 -5
  52. package/package.d/vite+8.0.0.patch +12 -0
  53. package/package.json +12 -3
  54. package/src/mqtt-plus-sink.ts +14 -2
  55. package/src/mqtt-plus-source.ts +27 -16
  56. package/src/mqtt-plus-version.ts +2 -3
  57. package/tst/.c8/base.css +224 -0
  58. package/tst/.c8/block-navigation.js +87 -0
  59. package/tst/.c8/favicon.png +0 -0
  60. package/tst/.c8/index.html +371 -0
  61. package/tst/.c8/mqtt-plus-auth.ts.html +538 -0
  62. package/tst/.c8/mqtt-plus-base.ts.html +826 -0
  63. package/tst/.c8/mqtt-plus-codec.ts.html +457 -0
  64. package/tst/.c8/mqtt-plus-encode.ts.html +310 -0
  65. package/tst/.c8/mqtt-plus-error.ts.html +1186 -0
  66. package/tst/.c8/mqtt-plus-event.ts.html +733 -0
  67. package/tst/.c8/mqtt-plus-meta.ts.html +271 -0
  68. package/tst/.c8/mqtt-plus-msg.ts.html +1693 -0
  69. package/tst/.c8/mqtt-plus-options.ts.html +319 -0
  70. package/tst/.c8/mqtt-plus-service.ts.html +865 -0
  71. package/tst/.c8/mqtt-plus-sink.ts.html +1645 -0
  72. package/tst/.c8/mqtt-plus-source.ts.html +1585 -0
  73. package/tst/.c8/mqtt-plus-subscription.ts.html +706 -0
  74. package/tst/.c8/mqtt-plus-timer.ts.html +286 -0
  75. package/tst/.c8/mqtt-plus-trace.ts.html +463 -0
  76. package/tst/.c8/mqtt-plus-util.ts.html +823 -0
  77. package/tst/.c8/mqtt-plus-version.ts.html +205 -0
  78. package/tst/.c8/mqtt-plus.ts.html +193 -0
  79. package/tst/.c8/prettify.css +1 -0
  80. package/tst/.c8/prettify.js +2 -0
  81. package/tst/.c8/sort-arrow-sprite.png +0 -0
  82. package/tst/.c8/sorter.js +210 -0
  83. package/tst/.c8/tmp/coverage-6577-1773528098323-2.json +1 -0
  84. package/tst/.c8/tmp/coverage-6577-1773528098331-1.json +1 -0
  85. package/tst/.c8/tmp/coverage-6577-1773528098353-0.json +1 -0
  86. package/tst/.c8/tmp/coverage-6578-1773528089194-0.json +1 -0
  87. package/tst/mqtt-plus-2-event.spec.ts +29 -0
  88. package/tst/mqtt-plus-6-misc.spec.ts +79 -2
  89. package/tst/mqtt-plus-7-spool.spec.ts +101 -0
  90. package/tst/mqtt-plus-8-run.spec.ts +115 -0
  91. package/tst/{tsc.json → tsc.cov.json} +4 -3
  92. package/tst/tsc.std.json +31 -0
@@ -0,0 +1,1693 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for mqtt-plus-msg.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> mqtt-plus-msg.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">99.81% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>535/536</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">88.17% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>82/93</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">81.66% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>49/60</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">99.81% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>535/536</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
603
+ <span class="cline-any cline-yes">1x</span>
604
+ <span class="cline-any cline-yes">1x</span>
605
+ <span class="cline-any cline-yes">1x</span>
606
+ <span class="cline-any cline-yes">1x</span>
607
+ <span class="cline-any cline-yes">1x</span>
608
+ <span class="cline-any cline-yes">1x</span>
609
+ <span class="cline-any cline-yes">1x</span>
610
+ <span class="cline-any cline-yes">1x</span>
611
+ <span class="cline-any cline-yes">1x</span>
612
+ <span class="cline-any cline-yes">1x</span>
613
+ <span class="cline-any cline-yes">1x</span>
614
+ <span class="cline-any cline-yes">1x</span>
615
+ <span class="cline-any cline-yes">1x</span>
616
+ <span class="cline-any cline-yes">1x</span>
617
+ <span class="cline-any cline-yes">1x</span>
618
+ <span class="cline-any cline-yes">1x</span>
619
+ <span class="cline-any cline-yes">1x</span>
620
+ <span class="cline-any cline-yes">1x</span>
621
+ <span class="cline-any cline-yes">1x</span>
622
+ <span class="cline-any cline-yes">1x</span>
623
+ <span class="cline-any cline-yes">1x</span>
624
+ <span class="cline-any cline-yes">1x</span>
625
+ <span class="cline-any cline-yes">1x</span>
626
+ <span class="cline-any cline-yes">1x</span>
627
+ <span class="cline-any cline-yes">1x</span>
628
+ <span class="cline-any cline-yes">1x</span>
629
+ <span class="cline-any cline-yes">1x</span>
630
+ <span class="cline-any cline-yes">1x</span>
631
+ <span class="cline-any cline-yes">1x</span>
632
+ <span class="cline-any cline-yes">1x</span>
633
+ <span class="cline-any cline-yes">1x</span>
634
+ <span class="cline-any cline-yes">1x</span>
635
+ <span class="cline-any cline-yes">1x</span>
636
+ <span class="cline-any cline-yes">1x</span>
637
+ <span class="cline-any cline-yes">1x</span>
638
+ <span class="cline-any cline-yes">1x</span>
639
+ <span class="cline-any cline-yes">1x</span>
640
+ <span class="cline-any cline-yes">1x</span>
641
+ <span class="cline-any cline-yes">1x</span>
642
+ <span class="cline-any cline-yes">1x</span>
643
+ <span class="cline-any cline-yes">1x</span>
644
+ <span class="cline-any cline-yes">1x</span>
645
+ <span class="cline-any cline-yes">1x</span>
646
+ <span class="cline-any cline-yes">1x</span>
647
+ <span class="cline-any cline-yes">1x</span>
648
+ <span class="cline-any cline-yes">1x</span>
649
+ <span class="cline-any cline-yes">1x</span>
650
+ <span class="cline-any cline-yes">1x</span>
651
+ <span class="cline-any cline-yes">1x</span>
652
+ <span class="cline-any cline-yes">1x</span>
653
+ <span class="cline-any cline-yes">1x</span>
654
+ <span class="cline-any cline-yes">1x</span>
655
+ <span class="cline-any cline-yes">1x</span>
656
+ <span class="cline-any cline-yes">1x</span>
657
+ <span class="cline-any cline-yes">1x</span>
658
+ <span class="cline-any cline-yes">1x</span>
659
+ <span class="cline-any cline-yes">1x</span>
660
+ <span class="cline-any cline-yes">1x</span>
661
+ <span class="cline-any cline-yes">1x</span>
662
+ <span class="cline-any cline-yes">1x</span>
663
+ <span class="cline-any cline-yes">1x</span>
664
+ <span class="cline-any cline-yes">1x</span>
665
+ <span class="cline-any cline-yes">1x</span>
666
+ <span class="cline-any cline-yes">1x</span>
667
+ <span class="cline-any cline-yes">1x</span>
668
+ <span class="cline-any cline-yes">1x</span>
669
+ <span class="cline-any cline-yes">1x</span>
670
+ <span class="cline-any cline-yes">1x</span>
671
+ <span class="cline-any cline-yes">1x</span>
672
+ <span class="cline-any cline-yes">1x</span>
673
+ <span class="cline-any cline-yes">1x</span>
674
+ <span class="cline-any cline-yes">1x</span>
675
+ <span class="cline-any cline-yes">1x</span>
676
+ <span class="cline-any cline-yes">1x</span>
677
+ <span class="cline-any cline-yes">1x</span>
678
+ <span class="cline-any cline-yes">1x</span>
679
+ <span class="cline-any cline-yes">1x</span>
680
+ <span class="cline-any cline-yes">1x</span>
681
+ <span class="cline-any cline-yes">1x</span>
682
+ <span class="cline-any cline-yes">1x</span>
683
+ <span class="cline-any cline-yes">1x</span>
684
+ <span class="cline-any cline-yes">1x</span>
685
+ <span class="cline-any cline-yes">1x</span>
686
+ <span class="cline-any cline-yes">1x</span>
687
+ <span class="cline-any cline-yes">1x</span>
688
+ <span class="cline-any cline-yes">1x</span>
689
+ <span class="cline-any cline-yes">1x</span>
690
+ <span class="cline-any cline-yes">1x</span>
691
+ <span class="cline-any cline-yes">1x</span>
692
+ <span class="cline-any cline-yes">1x</span>
693
+ <span class="cline-any cline-yes">1x</span>
694
+ <span class="cline-any cline-yes">1x</span>
695
+ <span class="cline-any cline-yes">1x</span>
696
+ <span class="cline-any cline-yes">1x</span>
697
+ <span class="cline-any cline-yes">1x</span>
698
+ <span class="cline-any cline-yes">1x</span>
699
+ <span class="cline-any cline-yes">1x</span>
700
+ <span class="cline-any cline-yes">1x</span>
701
+ <span class="cline-any cline-yes">1x</span>
702
+ <span class="cline-any cline-yes">1x</span>
703
+ <span class="cline-any cline-yes">1x</span>
704
+ <span class="cline-any cline-yes">1x</span>
705
+ <span class="cline-any cline-yes">1x</span>
706
+ <span class="cline-any cline-yes">1x</span>
707
+ <span class="cline-any cline-yes">1x</span>
708
+ <span class="cline-any cline-yes">1x</span>
709
+ <span class="cline-any cline-yes">1x</span>
710
+ <span class="cline-any cline-yes">1x</span>
711
+ <span class="cline-any cline-yes">1x</span>
712
+ <span class="cline-any cline-yes">1x</span>
713
+ <span class="cline-any cline-yes">1x</span>
714
+ <span class="cline-any cline-yes">1x</span>
715
+ <span class="cline-any cline-yes">1x</span>
716
+ <span class="cline-any cline-yes">1x</span>
717
+ <span class="cline-any cline-yes">1x</span>
718
+ <span class="cline-any cline-yes">1x</span>
719
+ <span class="cline-any cline-yes">1x</span>
720
+ <span class="cline-any cline-yes">1x</span>
721
+ <span class="cline-any cline-yes">1x</span>
722
+ <span class="cline-any cline-yes">1x</span>
723
+ <span class="cline-any cline-yes">1x</span>
724
+ <span class="cline-any cline-yes">1x</span>
725
+ <span class="cline-any cline-yes">1x</span>
726
+ <span class="cline-any cline-yes">1x</span>
727
+ <span class="cline-any cline-yes">1x</span>
728
+ <span class="cline-any cline-yes">1x</span>
729
+ <span class="cline-any cline-yes">1x</span>
730
+ <span class="cline-any cline-yes">1x</span>
731
+ <span class="cline-any cline-yes">1x</span>
732
+ <span class="cline-any cline-yes">1x</span>
733
+ <span class="cline-any cline-yes">1x</span>
734
+ <span class="cline-any cline-yes">1x</span>
735
+ <span class="cline-any cline-yes">1x</span>
736
+ <span class="cline-any cline-yes">1x</span>
737
+ <span class="cline-any cline-yes">1x</span>
738
+ <span class="cline-any cline-yes">1x</span>
739
+ <span class="cline-any cline-yes">1x</span>
740
+ <span class="cline-any cline-yes">1x</span>
741
+ <span class="cline-any cline-yes">1x</span>
742
+ <span class="cline-any cline-yes">1x</span>
743
+ <span class="cline-any cline-yes">1x</span>
744
+ <span class="cline-any cline-yes">1x</span>
745
+ <span class="cline-any cline-yes">1x</span>
746
+ <span class="cline-any cline-yes">1x</span>
747
+ <span class="cline-any cline-yes">1x</span>
748
+ <span class="cline-any cline-yes">1x</span>
749
+ <span class="cline-any cline-yes">1x</span>
750
+ <span class="cline-any cline-yes">1x</span>
751
+ <span class="cline-any cline-yes">1x</span>
752
+ <span class="cline-any cline-yes">1x</span>
753
+ <span class="cline-any cline-yes">1x</span>
754
+ <span class="cline-any cline-yes">1x</span>
755
+ <span class="cline-any cline-yes">1x</span>
756
+ <span class="cline-any cline-yes">1x</span>
757
+ <span class="cline-any cline-yes">1x</span>
758
+ <span class="cline-any cline-yes">1x</span>
759
+ <span class="cline-any cline-yes">1x</span>
760
+ <span class="cline-any cline-yes">1x</span>
761
+ <span class="cline-any cline-yes">1x</span>
762
+ <span class="cline-any cline-yes">1x</span>
763
+ <span class="cline-any cline-yes">1x</span>
764
+ <span class="cline-any cline-yes">1x</span>
765
+ <span class="cline-any cline-yes">1x</span>
766
+ <span class="cline-any cline-yes">1x</span>
767
+ <span class="cline-any cline-yes">1x</span>
768
+ <span class="cline-any cline-yes">1x</span>
769
+ <span class="cline-any cline-yes">1x</span>
770
+ <span class="cline-any cline-yes">1x</span>
771
+ <span class="cline-any cline-yes">1x</span>
772
+ <span class="cline-any cline-yes">1x</span>
773
+ <span class="cline-any cline-yes">1x</span>
774
+ <span class="cline-any cline-yes">1x</span>
775
+ <span class="cline-any cline-yes">1x</span>
776
+ <span class="cline-any cline-yes">1x</span>
777
+ <span class="cline-any cline-yes">1x</span>
778
+ <span class="cline-any cline-yes">1x</span>
779
+ <span class="cline-any cline-yes">1x</span>
780
+ <span class="cline-any cline-yes">1x</span>
781
+ <span class="cline-any cline-yes">1x</span>
782
+ <span class="cline-any cline-yes">1x</span>
783
+ <span class="cline-any cline-yes">1x</span>
784
+ <span class="cline-any cline-yes">1x</span>
785
+ <span class="cline-any cline-yes">1x</span>
786
+ <span class="cline-any cline-yes">1x</span>
787
+ <span class="cline-any cline-yes">1x</span>
788
+ <span class="cline-any cline-yes">1x</span>
789
+ <span class="cline-any cline-yes">1x</span>
790
+ <span class="cline-any cline-yes">1x</span>
791
+ <span class="cline-any cline-yes">1x</span>
792
+ <span class="cline-any cline-yes">1x</span>
793
+ <span class="cline-any cline-yes">1x</span>
794
+ <span class="cline-any cline-yes">1x</span>
795
+ <span class="cline-any cline-yes">1x</span>
796
+ <span class="cline-any cline-yes">1x</span>
797
+ <span class="cline-any cline-yes">1x</span>
798
+ <span class="cline-any cline-yes">1x</span>
799
+ <span class="cline-any cline-yes">1x</span>
800
+ <span class="cline-any cline-yes">1x</span>
801
+ <span class="cline-any cline-yes">1x</span>
802
+ <span class="cline-any cline-yes">1x</span>
803
+ <span class="cline-any cline-yes">1x</span>
804
+ <span class="cline-any cline-yes">1x</span>
805
+ <span class="cline-any cline-yes">1x</span>
806
+ <span class="cline-any cline-yes">1x</span>
807
+ <span class="cline-any cline-yes">1x</span>
808
+ <span class="cline-any cline-yes">1x</span>
809
+ <span class="cline-any cline-yes">1x</span>
810
+ <span class="cline-any cline-yes">1x</span>
811
+ <span class="cline-any cline-yes">1x</span>
812
+ <span class="cline-any cline-yes">1x</span>
813
+ <span class="cline-any cline-yes">1x</span>
814
+ <span class="cline-any cline-yes">1x</span>
815
+ <span class="cline-any cline-yes">1x</span>
816
+ <span class="cline-any cline-yes">1x</span>
817
+ <span class="cline-any cline-yes">1x</span>
818
+ <span class="cline-any cline-yes">1x</span>
819
+ <span class="cline-any cline-yes">1x</span>
820
+ <span class="cline-any cline-yes">1x</span>
821
+ <span class="cline-any cline-yes">1x</span>
822
+ <span class="cline-any cline-yes">1x</span>
823
+ <span class="cline-any cline-yes">1x</span>
824
+ <span class="cline-any cline-yes">1x</span>
825
+ <span class="cline-any cline-yes">1x</span>
826
+ <span class="cline-any cline-yes">1x</span>
827
+ <span class="cline-any cline-yes">1x</span>
828
+ <span class="cline-any cline-yes">1x</span>
829
+ <span class="cline-any cline-yes">1x</span>
830
+ <span class="cline-any cline-yes">1x</span>
831
+ <span class="cline-any cline-yes">1x</span>
832
+ <span class="cline-any cline-yes">1x</span>
833
+ <span class="cline-any cline-yes">1x</span>
834
+ <span class="cline-any cline-yes">1x</span>
835
+ <span class="cline-any cline-yes">1x</span>
836
+ <span class="cline-any cline-yes">1x</span>
837
+ <span class="cline-any cline-yes">1x</span>
838
+ <span class="cline-any cline-yes">1x</span>
839
+ <span class="cline-any cline-yes">1x</span>
840
+ <span class="cline-any cline-yes">1x</span>
841
+ <span class="cline-any cline-yes">1x</span>
842
+ <span class="cline-any cline-yes">1x</span>
843
+ <span class="cline-any cline-yes">1x</span>
844
+ <span class="cline-any cline-yes">1x</span>
845
+ <span class="cline-any cline-yes">1x</span>
846
+ <span class="cline-any cline-yes">1x</span>
847
+ <span class="cline-any cline-yes">1x</span>
848
+ <span class="cline-any cline-yes">1x</span>
849
+ <span class="cline-any cline-yes">1x</span>
850
+ <span class="cline-any cline-yes">1x</span>
851
+ <span class="cline-any cline-yes">1x</span>
852
+ <span class="cline-any cline-yes">1x</span>
853
+ <span class="cline-any cline-yes">1x</span>
854
+ <span class="cline-any cline-yes">1x</span>
855
+ <span class="cline-any cline-yes">1x</span>
856
+ <span class="cline-any cline-yes">1x</span>
857
+ <span class="cline-any cline-yes">1x</span>
858
+ <span class="cline-any cline-yes">1x</span>
859
+ <span class="cline-any cline-yes">1x</span>
860
+ <span class="cline-any cline-yes">1x</span>
861
+ <span class="cline-any cline-yes">1x</span>
862
+ <span class="cline-any cline-yes">1x</span>
863
+ <span class="cline-any cline-yes">1x</span>
864
+ <span class="cline-any cline-yes">1x</span>
865
+ <span class="cline-any cline-yes">1x</span>
866
+ <span class="cline-any cline-yes">1x</span>
867
+ <span class="cline-any cline-yes">1x</span>
868
+ <span class="cline-any cline-yes">1x</span>
869
+ <span class="cline-any cline-yes">1x</span>
870
+ <span class="cline-any cline-yes">1x</span>
871
+ <span class="cline-any cline-yes">1x</span>
872
+ <span class="cline-any cline-yes">1x</span>
873
+ <span class="cline-any cline-yes">1x</span>
874
+ <span class="cline-any cline-yes">1x</span>
875
+ <span class="cline-any cline-yes">1x</span>
876
+ <span class="cline-any cline-yes">1x</span>
877
+ <span class="cline-any cline-yes">1x</span>
878
+ <span class="cline-any cline-yes">1x</span>
879
+ <span class="cline-any cline-yes">1x</span>
880
+ <span class="cline-any cline-yes">1x</span>
881
+ <span class="cline-any cline-yes">1x</span>
882
+ <span class="cline-any cline-yes">1x</span>
883
+ <span class="cline-any cline-yes">1x</span>
884
+ <span class="cline-any cline-yes">1x</span>
885
+ <span class="cline-any cline-yes">1x</span>
886
+ <span class="cline-any cline-yes">1x</span>
887
+ <span class="cline-any cline-yes">1x</span>
888
+ <span class="cline-any cline-yes">1x</span>
889
+ <span class="cline-any cline-yes">1x</span>
890
+ <span class="cline-any cline-yes">1x</span>
891
+ <span class="cline-any cline-yes">1x</span>
892
+ <span class="cline-any cline-yes">1x</span>
893
+ <span class="cline-any cline-yes">1x</span>
894
+ <span class="cline-any cline-yes">1x</span>
895
+ <span class="cline-any cline-yes">1x</span>
896
+ <span class="cline-any cline-yes">1x</span>
897
+ <span class="cline-any cline-yes">1x</span>
898
+ <span class="cline-any cline-yes">1x</span>
899
+ <span class="cline-any cline-yes">1x</span>
900
+ <span class="cline-any cline-yes">1x</span>
901
+ <span class="cline-any cline-yes">1x</span>
902
+ <span class="cline-any cline-yes">1x</span>
903
+ <span class="cline-any cline-yes">1x</span>
904
+ <span class="cline-any cline-yes">1x</span>
905
+ <span class="cline-any cline-yes">1x</span>
906
+ <span class="cline-any cline-yes">1x</span>
907
+ <span class="cline-any cline-yes">1x</span>
908
+ <span class="cline-any cline-yes">1x</span>
909
+ <span class="cline-any cline-yes">1x</span>
910
+ <span class="cline-any cline-yes">1x</span>
911
+ <span class="cline-any cline-yes">1x</span>
912
+ <span class="cline-any cline-yes">1x</span>
913
+ <span class="cline-any cline-yes">1x</span>
914
+ <span class="cline-any cline-yes">1x</span>
915
+ <span class="cline-any cline-yes">1x</span>
916
+ <span class="cline-any cline-yes">1x</span>
917
+ <span class="cline-any cline-yes">1x</span>
918
+ <span class="cline-any cline-yes">1x</span>
919
+ <span class="cline-any cline-yes">1x</span>
920
+ <span class="cline-any cline-yes">1x</span>
921
+ <span class="cline-any cline-yes">1x</span>
922
+ <span class="cline-any cline-yes">1x</span>
923
+ <span class="cline-any cline-yes">1x</span>
924
+ <span class="cline-any cline-yes">1x</span>
925
+ <span class="cline-any cline-yes">1x</span>
926
+ <span class="cline-any cline-yes">1x</span>
927
+ <span class="cline-any cline-yes">1x</span>
928
+ <span class="cline-any cline-yes">1x</span>
929
+ <span class="cline-any cline-yes">1x</span>
930
+ <span class="cline-any cline-yes">1x</span>
931
+ <span class="cline-any cline-yes">1x</span>
932
+ <span class="cline-any cline-yes">1x</span>
933
+ <span class="cline-any cline-yes">1x</span>
934
+ <span class="cline-any cline-yes">1x</span>
935
+ <span class="cline-any cline-yes">1x</span>
936
+ <span class="cline-any cline-yes">1x</span>
937
+ <span class="cline-any cline-yes">1x</span>
938
+ <span class="cline-any cline-yes">1x</span>
939
+ <span class="cline-any cline-yes">1x</span>
940
+ <span class="cline-any cline-yes">1x</span>
941
+ <span class="cline-any cline-yes">1x</span>
942
+ <span class="cline-any cline-yes">1x</span>
943
+ <span class="cline-any cline-yes">1x</span>
944
+ <span class="cline-any cline-yes">1x</span>
945
+ <span class="cline-any cline-yes">1x</span>
946
+ <span class="cline-any cline-yes">1x</span>
947
+ <span class="cline-any cline-yes">1x</span>
948
+ <span class="cline-any cline-yes">1x</span>
949
+ <span class="cline-any cline-yes">1x</span>
950
+ <span class="cline-any cline-yes">1x</span>
951
+ <span class="cline-any cline-yes">1x</span>
952
+ <span class="cline-any cline-yes">1x</span>
953
+ <span class="cline-any cline-yes">1x</span>
954
+ <span class="cline-any cline-yes">1x</span>
955
+ <span class="cline-any cline-yes">1x</span>
956
+ <span class="cline-any cline-yes">1x</span>
957
+ <span class="cline-any cline-yes">1x</span>
958
+ <span class="cline-any cline-yes">1x</span>
959
+ <span class="cline-any cline-yes">1x</span>
960
+ <span class="cline-any cline-yes">1x</span>
961
+ <span class="cline-any cline-yes">1x</span>
962
+ <span class="cline-any cline-yes">1x</span>
963
+ <span class="cline-any cline-yes">1x</span>
964
+ <span class="cline-any cline-yes">1x</span>
965
+ <span class="cline-any cline-yes">1x</span>
966
+ <span class="cline-any cline-yes">1x</span>
967
+ <span class="cline-any cline-yes">1x</span>
968
+ <span class="cline-any cline-yes">1x</span>
969
+ <span class="cline-any cline-yes">1x</span>
970
+ <span class="cline-any cline-yes">1x</span>
971
+ <span class="cline-any cline-yes">1x</span>
972
+ <span class="cline-any cline-yes">1x</span>
973
+ <span class="cline-any cline-yes">1x</span>
974
+ <span class="cline-any cline-yes">1x</span>
975
+ <span class="cline-any cline-yes">1x</span>
976
+ <span class="cline-any cline-yes">1x</span>
977
+ <span class="cline-any cline-yes">1x</span>
978
+ <span class="cline-any cline-yes">1x</span>
979
+ <span class="cline-any cline-yes">1x</span>
980
+ <span class="cline-any cline-yes">1x</span>
981
+ <span class="cline-any cline-yes">1x</span>
982
+ <span class="cline-any cline-yes">1x</span>
983
+ <span class="cline-any cline-yes">1x</span>
984
+ <span class="cline-any cline-yes">1x</span>
985
+ <span class="cline-any cline-yes">1x</span>
986
+ <span class="cline-any cline-yes">1x</span>
987
+ <span class="cline-any cline-yes">1x</span>
988
+ <span class="cline-any cline-yes">1x</span>
989
+ <span class="cline-any cline-yes">1x</span>
990
+ <span class="cline-any cline-yes">1x</span>
991
+ <span class="cline-any cline-yes">1x</span>
992
+ <span class="cline-any cline-yes">1x</span>
993
+ <span class="cline-any cline-yes">1x</span>
994
+ <span class="cline-any cline-yes">1x</span>
995
+ <span class="cline-any cline-yes">1x</span>
996
+ <span class="cline-any cline-yes">1x</span>
997
+ <span class="cline-any cline-yes">1x</span>
998
+ <span class="cline-any cline-yes">1x</span>
999
+ <span class="cline-any cline-yes">1x</span>
1000
+ <span class="cline-any cline-yes">1x</span>
1001
+ <span class="cline-any cline-yes">1x</span>
1002
+ <span class="cline-any cline-yes">1x</span>
1003
+ <span class="cline-any cline-yes">1x</span>
1004
+ <span class="cline-any cline-yes">1x</span>
1005
+ <span class="cline-any cline-yes">1x</span>
1006
+ <span class="cline-any cline-yes">1x</span>
1007
+ <span class="cline-any cline-yes">1x</span>
1008
+ <span class="cline-any cline-yes">1x</span>
1009
+ <span class="cline-any cline-yes">1x</span>
1010
+ <span class="cline-any cline-yes">1x</span>
1011
+ <span class="cline-any cline-yes">1x</span>
1012
+ <span class="cline-any cline-yes">1x</span>
1013
+ <span class="cline-any cline-yes">1x</span>
1014
+ <span class="cline-any cline-yes">1x</span>
1015
+ <span class="cline-any cline-yes">1x</span>
1016
+ <span class="cline-any cline-yes">1x</span>
1017
+ <span class="cline-any cline-yes">1x</span>
1018
+ <span class="cline-any cline-yes">1x</span>
1019
+ <span class="cline-any cline-yes">1x</span>
1020
+ <span class="cline-any cline-yes">1x</span>
1021
+ <span class="cline-any cline-yes">1x</span>
1022
+ <span class="cline-any cline-yes">1x</span>
1023
+ <span class="cline-any cline-yes">1x</span>
1024
+ <span class="cline-any cline-yes">1x</span>
1025
+ <span class="cline-any cline-yes">1x</span>
1026
+ <span class="cline-any cline-yes">1x</span>
1027
+ <span class="cline-any cline-yes">1x</span>
1028
+ <span class="cline-any cline-yes">1x</span>
1029
+ <span class="cline-any cline-yes">1x</span>
1030
+ <span class="cline-any cline-yes">1x</span>
1031
+ <span class="cline-any cline-yes">1x</span>
1032
+ <span class="cline-any cline-yes">1x</span>
1033
+ <span class="cline-any cline-yes">1x</span>
1034
+ <span class="cline-any cline-yes">1x</span>
1035
+ <span class="cline-any cline-yes">1x</span>
1036
+ <span class="cline-any cline-yes">1x</span>
1037
+ <span class="cline-any cline-yes">1x</span>
1038
+ <span class="cline-any cline-yes">1x</span>
1039
+ <span class="cline-any cline-yes">1x</span>
1040
+ <span class="cline-any cline-yes">1x</span>
1041
+ <span class="cline-any cline-yes">1x</span>
1042
+ <span class="cline-any cline-yes">1x</span>
1043
+ <span class="cline-any cline-yes">1x</span>
1044
+ <span class="cline-any cline-yes">1x</span>
1045
+ <span class="cline-any cline-yes">1x</span>
1046
+ <span class="cline-any cline-yes">1x</span>
1047
+ <span class="cline-any cline-yes">1x</span>
1048
+ <span class="cline-any cline-yes">1x</span>
1049
+ <span class="cline-any cline-yes">1x</span>
1050
+ <span class="cline-any cline-yes">1x</span>
1051
+ <span class="cline-any cline-yes">1x</span>
1052
+ <span class="cline-any cline-yes">1x</span>
1053
+ <span class="cline-any cline-yes">1x</span>
1054
+ <span class="cline-any cline-yes">1x</span>
1055
+ <span class="cline-any cline-yes">1x</span>
1056
+ <span class="cline-any cline-yes">1x</span>
1057
+ <span class="cline-any cline-yes">1x</span>
1058
+ <span class="cline-any cline-yes">1x</span>
1059
+ <span class="cline-any cline-yes">1x</span>
1060
+ <span class="cline-any cline-yes">1x</span>
1061
+ <span class="cline-any cline-yes">1x</span>
1062
+ <span class="cline-any cline-yes">1x</span>
1063
+ <span class="cline-any cline-yes">1x</span>
1064
+ <span class="cline-any cline-yes">1x</span>
1065
+ <span class="cline-any cline-yes">1x</span>
1066
+ <span class="cline-any cline-yes">1x</span>
1067
+ <span class="cline-any cline-yes">1x</span>
1068
+ <span class="cline-any cline-yes">1x</span>
1069
+ <span class="cline-any cline-yes">1x</span>
1070
+ <span class="cline-any cline-yes">1x</span>
1071
+ <span class="cline-any cline-yes">1x</span>
1072
+ <span class="cline-any cline-yes">1x</span>
1073
+ <span class="cline-any cline-yes">1x</span>
1074
+ <span class="cline-any cline-yes">1x</span>
1075
+ <span class="cline-any cline-yes">1x</span>
1076
+ <span class="cline-any cline-yes">1x</span>
1077
+ <span class="cline-any cline-yes">1x</span>
1078
+ <span class="cline-any cline-yes">1x</span>
1079
+ <span class="cline-any cline-yes">1x</span>
1080
+ <span class="cline-any cline-yes">1x</span>
1081
+ <span class="cline-any cline-yes">1x</span>
1082
+ <span class="cline-any cline-yes">1x</span>
1083
+ <span class="cline-any cline-yes">1x</span>
1084
+ <span class="cline-any cline-yes">1x</span>
1085
+ <span class="cline-any cline-yes">1x</span>
1086
+ <span class="cline-any cline-yes">1x</span>
1087
+ <span class="cline-any cline-yes">1x</span>
1088
+ <span class="cline-any cline-yes">1x</span>
1089
+ <span class="cline-any cline-yes">1x</span>
1090
+ <span class="cline-any cline-yes">1x</span>
1091
+ <span class="cline-any cline-yes">1x</span>
1092
+ <span class="cline-any cline-yes">1x</span>
1093
+ <span class="cline-any cline-yes">1x</span>
1094
+ <span class="cline-any cline-yes">1x</span>
1095
+ <span class="cline-any cline-yes">1x</span>
1096
+ <span class="cline-any cline-yes">1x</span>
1097
+ <span class="cline-any cline-yes">1x</span>
1098
+ <span class="cline-any cline-yes">1x</span>
1099
+ <span class="cline-any cline-yes">1x</span>
1100
+ <span class="cline-any cline-yes">1x</span>
1101
+ <span class="cline-any cline-yes">1x</span>
1102
+ <span class="cline-any cline-yes">1x</span>
1103
+ <span class="cline-any cline-yes">1x</span>
1104
+ <span class="cline-any cline-yes">1x</span>
1105
+ <span class="cline-any cline-yes">1x</span>
1106
+ <span class="cline-any cline-yes">1x</span>
1107
+ <span class="cline-any cline-yes">1x</span>
1108
+ <span class="cline-any cline-yes">1x</span>
1109
+ <span class="cline-any cline-yes">1x</span>
1110
+ <span class="cline-any cline-yes">1x</span>
1111
+ <span class="cline-any cline-yes">1x</span>
1112
+ <span class="cline-any cline-yes">1x</span>
1113
+ <span class="cline-any cline-yes">1x</span>
1114
+ <span class="cline-any cline-yes">1x</span>
1115
+ <span class="cline-any cline-yes">1x</span>
1116
+ <span class="cline-any cline-yes">1x</span>
1117
+ <span class="cline-any cline-yes">1x</span>
1118
+ <span class="cline-any cline-yes">1x</span>
1119
+ <span class="cline-any cline-yes">1x</span>
1120
+ <span class="cline-any cline-yes">1x</span>
1121
+ <span class="cline-any cline-yes">1x</span>
1122
+ <span class="cline-any cline-yes">1x</span>
1123
+ <span class="cline-any cline-yes">1x</span>
1124
+ <span class="cline-any cline-yes">1x</span>
1125
+ <span class="cline-any cline-yes">1x</span>
1126
+ <span class="cline-any cline-yes">1x</span>
1127
+ <span class="cline-any cline-yes">1x</span>
1128
+ <span class="cline-any cline-yes">1x</span>
1129
+ <span class="cline-any cline-yes">1x</span>
1130
+ <span class="cline-any cline-yes">1x</span>
1131
+ <span class="cline-any cline-yes">1x</span>
1132
+ <span class="cline-any cline-yes">1x</span>
1133
+ <span class="cline-any cline-yes">1x</span>
1134
+ <span class="cline-any cline-yes">1x</span>
1135
+ <span class="cline-any cline-yes">1x</span>
1136
+ <span class="cline-any cline-yes">1x</span>
1137
+ <span class="cline-any cline-no">&nbsp;</span>
1138
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >/*</span></span></span></span></span></span></span></span></span></span></span></span></span></span>
1139
+ ** MQTT+ -- MQTT Communication Patterns
1140
+ ** Copyright (c) 2018-2026 Dr. Ralf S. Engelschall &lt;rse@engelschall.com&gt;
1141
+ **
1142
+ ** Permission is hereby granted, free of charge, to any person obtaining
1143
+ ** a copy of this software and associated documentation files (the
1144
+ ** "Software"), to deal in the Software without restriction, including
1145
+ ** without limitation the rights to use, copy, modify, merge, publish,
1146
+ ** distribute, sublicense, and/or sell copies of the Software, and to
1147
+ ** permit persons to whom the Software is furnished to do so, subject to
1148
+ ** the following conditions:
1149
+ **
1150
+ ** The above copyright notice and this permission notice shall be included
1151
+ ** in all copies or substantial portions of the Software.
1152
+ **
1153
+ ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
1154
+ ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1155
+ ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
1156
+ ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
1157
+ ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
1158
+ ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
1159
+ ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1160
+ */
1161
+ &nbsp;
1162
+ /* external requirements */
1163
+ import * as v from "valibot"
1164
+ &nbsp;
1165
+ /* internal requirements */
1166
+ import type { APISchema } from "./mqtt-plus-api"
1167
+ import { EncodeTrait } from "./mqtt-plus-encode"
1168
+ import { version, VERSION, versionToNum } from "./mqtt-plus-version"
1169
+ &nbsp;
1170
+ /* message types */
1171
+ type MessageType =
1172
+ | "event-emission"
1173
+ | "service-call-request"
1174
+ | "service-call-response"
1175
+ | "sink-push-request"
1176
+ | "sink-push-response"
1177
+ | "sink-push-chunk"
1178
+ | "sink-push-credit"
1179
+ | "source-fetch-request"
1180
+ | "source-fetch-response"
1181
+ | "source-fetch-chunk"
1182
+ | "source-fetch-credit"
1183
+ &nbsp;
1184
+ /* meta validation schema (non-array plain object) */
1185
+ const MetaSchema = v.pipe(
1186
+ v.record(v.string(), v.unknown()),
1187
+ v.check((data) =&gt; !Array.isArray(data)))
1188
+ &nbsp;
1189
+ /* reusable auth validation schema (max 8 tokens, max 8192 chars each) */
1190
+ const AuthSchema = v.pipe(
1191
+ v.array(v.pipe(v.string(), v.maxLength(8192))),
1192
+ v.maxLength(8))
1193
+ &nbsp;
1194
+ /* base class */
1195
+ class Base {
1196
+ public version = `MQTT+/${VERSION}`
1197
+ constructor (
1198
+ public type: MessageType,
1199
+ public id: string,
1200
+ public sender?: string,
1201
+ public receiver?: string
1202
+ ) {}
1203
+ }
1204
+ const BaseSchema = {
1205
+ version: v.pipe(v.string(), v.regex(/^MQTT\+\/\d+\.\d+$/)),
1206
+ type: v.string(),
1207
+ id: v.string(),
1208
+ sender: v.optional(v.string()),
1209
+ receiver: v.optional(v.string())
1210
+ }
1211
+ &nbsp;
1212
+ /* event emission */
1213
+ export class EventEmission extends Base {
1214
+ constructor (
1215
+ id: string,
1216
+ public name: string,
1217
+ public params?: any[],
1218
+ sender?: string,
1219
+ receiver?: string,
1220
+ public auth?: string[],
1221
+ public meta?: Record&lt;string, any&gt;
1222
+ ) { super("event-emission", id, sender, receiver) }
1223
+ }
1224
+ const EventEmissionSchema = v.strictObject({
1225
+ ...BaseSchema,
1226
+ type: v.literal("event-emission"),
1227
+ name: v.string(),
1228
+ params: v.optional(v.pipe(v.array(v.unknown()), v.maxLength(64))),
1229
+ auth: v.optional(AuthSchema),
1230
+ meta: v.optional(MetaSchema)
1231
+ })
1232
+ &nbsp;
1233
+ /* service request */
1234
+ export class ServiceCallRequest extends Base {
1235
+ constructor (
1236
+ id: string,
1237
+ public name: string,
1238
+ public params?: any[],
1239
+ sender?: string,
1240
+ receiver?: string,
1241
+ public auth?: string[],
1242
+ public meta?: Record&lt;string, any&gt;
1243
+ ) { super("service-call-request", id, sender, receiver) }
1244
+ }
1245
+ const ServiceCallRequestSchema = v.strictObject({
1246
+ ...BaseSchema,
1247
+ type: v.literal("service-call-request"),
1248
+ name: v.string(),
1249
+ params: v.optional(v.pipe(v.array(v.unknown()), v.maxLength(64))),
1250
+ auth: v.optional(AuthSchema),
1251
+ meta: v.optional(MetaSchema)
1252
+ })
1253
+ &nbsp;
1254
+ /* service response */
1255
+ export class ServiceCallResponse extends Base {
1256
+ constructor (
1257
+ id: string,
1258
+ public result?: any,
1259
+ public error?: string,
1260
+ sender?: string,
1261
+ receiver?: string
1262
+ ) { super("service-call-response", id, sender, receiver) }
1263
+ }
1264
+ const ServiceCallResponseSchema = v.strictObject({
1265
+ ...BaseSchema,
1266
+ type: v.literal("service-call-response"),
1267
+ result: v.optional(v.unknown()),
1268
+ error: v.optional(v.string())
1269
+ })
1270
+ &nbsp;
1271
+ /* sink push request */
1272
+ export class SinkPushRequest extends Base {
1273
+ constructor (
1274
+ id: string,
1275
+ public name: string,
1276
+ public params?: any[],
1277
+ sender?: string,
1278
+ receiver?: string,
1279
+ public auth?: string[],
1280
+ public meta?: Record&lt;string, any&gt;
1281
+ ) { super("sink-push-request", id, sender, receiver) }
1282
+ }
1283
+ const SinkPushRequestSchema = v.strictObject({
1284
+ ...BaseSchema,
1285
+ type: v.literal("sink-push-request"),
1286
+ name: v.string(),
1287
+ params: v.optional(v.pipe(v.array(v.unknown()), v.maxLength(64))),
1288
+ auth: v.optional(AuthSchema),
1289
+ meta: v.optional(MetaSchema)
1290
+ })
1291
+ &nbsp;
1292
+ /* sink push response (ack/nak) */
1293
+ export class SinkPushResponse extends Base {
1294
+ constructor (
1295
+ id: string,
1296
+ public name: string,
1297
+ public error?: string,
1298
+ sender?: string,
1299
+ receiver?: string,
1300
+ public credit?: number
1301
+ ) { super("sink-push-response", id, sender, receiver) }
1302
+ }
1303
+ const SinkPushResponseSchema = v.strictObject({
1304
+ ...BaseSchema,
1305
+ type: v.literal("sink-push-response"),
1306
+ name: v.string(),
1307
+ error: v.optional(v.string()),
1308
+ credit: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)))
1309
+ })
1310
+ &nbsp;
1311
+ /* sink push chunk (actual data transfer) */
1312
+ export class SinkPushChunk extends Base {
1313
+ constructor (
1314
+ id: string,
1315
+ public name: string,
1316
+ public chunk?: Uint8Array,
1317
+ public error?: string,
1318
+ public final?: boolean,
1319
+ sender?: string,
1320
+ receiver?: string
1321
+ ) { super("sink-push-chunk", id, sender, receiver) }
1322
+ }
1323
+ const SinkPushChunkSchema = v.strictObject({
1324
+ ...BaseSchema,
1325
+ type: v.literal("sink-push-chunk"),
1326
+ name: v.string(),
1327
+ chunk: v.optional(v.instance(Uint8Array)),
1328
+ error: v.optional(v.string()),
1329
+ final: v.optional(v.boolean())
1330
+ })
1331
+ &nbsp;
1332
+ /* sink push credit (credit replenishment for push flow control) */
1333
+ export class SinkPushCredit extends Base {
1334
+ constructor (
1335
+ id: string,
1336
+ public name: string,
1337
+ public credit: number,
1338
+ sender?: string,
1339
+ receiver?: string
1340
+ ) { super("sink-push-credit", id, sender, receiver) }
1341
+ }
1342
+ const SinkPushCreditSchema = v.strictObject({
1343
+ ...BaseSchema,
1344
+ type: v.literal("sink-push-credit"),
1345
+ name: v.string(),
1346
+ credit: v.pipe(v.number(), v.integer(), v.minValue(1))
1347
+ })
1348
+ &nbsp;
1349
+ /* source fetch request */
1350
+ export class SourceFetchRequest extends Base {
1351
+ constructor (
1352
+ id: string,
1353
+ public name: string,
1354
+ public params?: any[],
1355
+ sender?: string,
1356
+ receiver?: string,
1357
+ public auth?: string[],
1358
+ public meta?: Record&lt;string, any&gt;,
1359
+ public credit?: number
1360
+ ) { super("source-fetch-request", id, sender, receiver) }
1361
+ }
1362
+ const SourceFetchRequestSchema = v.strictObject({
1363
+ ...BaseSchema,
1364
+ type: v.literal("source-fetch-request"),
1365
+ name: v.string(),
1366
+ params: v.optional(v.pipe(v.array(v.unknown()), v.maxLength(64))),
1367
+ auth: v.optional(AuthSchema),
1368
+ meta: v.optional(MetaSchema),
1369
+ credit: v.optional(v.pipe(v.number(), v.integer(), v.minValue(1)))
1370
+ })
1371
+ &nbsp;
1372
+ /* source fetch response (ack/nak) */
1373
+ export class SourceFetchResponse extends Base {
1374
+ constructor (
1375
+ id: string,
1376
+ public name: string,
1377
+ public error?: string,
1378
+ sender?: string,
1379
+ receiver?: string,
1380
+ public meta?: Record&lt;string, any&gt;
1381
+ ) { super("source-fetch-response", id, sender, receiver) }
1382
+ }
1383
+ const SourceFetchResponseSchema = v.strictObject({
1384
+ ...BaseSchema,
1385
+ type: v.literal("source-fetch-response"),
1386
+ name: v.string(),
1387
+ error: v.optional(v.string()),
1388
+ meta: v.optional(MetaSchema)
1389
+ })
1390
+ &nbsp;
1391
+ /* source fetch chunk (actual data transfer) */
1392
+ export class SourceFetchChunk extends Base {
1393
+ constructor (
1394
+ id: string,
1395
+ public name: string,
1396
+ public chunk?: Uint8Array,
1397
+ public error?: string,
1398
+ public final?: boolean,
1399
+ sender?: string,
1400
+ receiver?: string
1401
+ ) { super("source-fetch-chunk", id, sender, receiver) }
1402
+ }
1403
+ const SourceFetchChunkSchema = v.strictObject({
1404
+ ...BaseSchema,
1405
+ type: v.literal("source-fetch-chunk"),
1406
+ name: v.string(),
1407
+ chunk: v.optional(v.instance(Uint8Array)),
1408
+ error: v.optional(v.string()),
1409
+ final: v.optional(v.boolean())
1410
+ })
1411
+ &nbsp;
1412
+ /* source fetch credit (credit replenishment for fetch flow control) */
1413
+ export class SourceFetchCredit extends Base {
1414
+ constructor (
1415
+ id: string,
1416
+ public name: string,
1417
+ public credit: number,
1418
+ sender?: string,
1419
+ receiver?: string
1420
+ ) { super("source-fetch-credit", id, sender, receiver) }
1421
+ }
1422
+ const SourceFetchCreditSchema = v.strictObject({
1423
+ ...BaseSchema,
1424
+ type: v.literal("source-fetch-credit"),
1425
+ name: v.string(),
1426
+ credit: v.pipe(v.number(), v.integer(), v.minValue(0))
1427
+ })
1428
+ &nbsp;
1429
+ /* utility class */
1430
+ class Msg {
1431
+ /* factories for creating objects */
1432
+ makeEventEmission (
1433
+ id: string,
1434
+ name: string,
1435
+ params?: any[],
1436
+ sender?: string,
1437
+ receiver?: string,
1438
+ auth?: string[],
1439
+ meta?: Record&lt;string, any&gt;
1440
+ ) {
1441
+ return new EventEmission(id, name, params, sender, receiver, auth, meta)
1442
+ }
1443
+ makeServiceCallRequest (
1444
+ id: string,
1445
+ name: string,
1446
+ params?: any[],
1447
+ sender?: string,
1448
+ receiver?: string,
1449
+ auth?: string[],
1450
+ meta?: Record&lt;string, any&gt;
1451
+ ) {
1452
+ return new ServiceCallRequest(id, name, params, sender, receiver, auth, meta)
1453
+ }
1454
+ makeServiceCallResponse (
1455
+ id: string,
1456
+ result?: any,
1457
+ error?: string,
1458
+ sender?: string,
1459
+ receiver?: string
1460
+ ) {
1461
+ return new ServiceCallResponse(id, result, error, sender, receiver)
1462
+ }
1463
+ makeSinkPushRequest (
1464
+ id: string,
1465
+ name: string,
1466
+ params?: any[],
1467
+ sender?: string,
1468
+ receiver?: string,
1469
+ auth?: string[],
1470
+ meta?: Record&lt;string, any&gt;
1471
+ ) {
1472
+ return new SinkPushRequest(id, name, params, sender, receiver, auth, meta)
1473
+ }
1474
+ makeSinkPushResponse (
1475
+ id: string,
1476
+ name: string,
1477
+ error?: string,
1478
+ sender?: string,
1479
+ receiver?: string,
1480
+ credit?: number
1481
+ ) {
1482
+ return new SinkPushResponse(id, name, error, sender, receiver, credit)
1483
+ }
1484
+ makeSinkPushChunk (
1485
+ id: string,
1486
+ name: string,
1487
+ chunk?: Uint8Array,
1488
+ error?: string,
1489
+ final?: boolean,
1490
+ sender?: string,
1491
+ receiver?: string
1492
+ ) {
1493
+ return new SinkPushChunk(id, name, chunk, error, final, sender, receiver)
1494
+ }
1495
+ makeSinkPushCredit (
1496
+ id: string,
1497
+ name: string,
1498
+ credit: number,
1499
+ sender?: string,
1500
+ receiver?: string
1501
+ ) {
1502
+ return new SinkPushCredit(id, name, credit, sender, receiver)
1503
+ }
1504
+ makeSourceFetchRequest (
1505
+ id: string,
1506
+ name: string,
1507
+ params?: any[],
1508
+ sender?: string,
1509
+ receiver?: string,
1510
+ auth?: string[],
1511
+ meta?: Record&lt;string, any&gt;,
1512
+ credit?: number
1513
+ ) {
1514
+ return new SourceFetchRequest(id, name, params, sender, receiver, auth, meta, credit)
1515
+ }
1516
+ makeSourceFetchResponse (
1517
+ id: string,
1518
+ name: string,
1519
+ error?: string,
1520
+ sender?: string,
1521
+ receiver?: string,
1522
+ meta?: Record&lt;string, any&gt;
1523
+ ) {
1524
+ return new SourceFetchResponse(id, name, error, sender, receiver, meta)
1525
+ }
1526
+ makeSourceFetchChunk (
1527
+ id: string,
1528
+ name: string,
1529
+ chunk?: Uint8Array,
1530
+ error?: string,
1531
+ final?: boolean,
1532
+ sender?: string,
1533
+ receiver?: string
1534
+ ) {
1535
+ return new SourceFetchChunk(id, name, chunk, error, final, sender, receiver)
1536
+ }
1537
+ makeSourceFetchCredit (
1538
+ id: string,
1539
+ name: string,
1540
+ credit: number,
1541
+ sender?: string,
1542
+ receiver?: string
1543
+ ) {
1544
+ return new SourceFetchCredit(id, name, credit, sender, receiver)
1545
+ }
1546
+ &nbsp;
1547
+ /* parse any object into typed object */
1548
+ parse (obj: any):
1549
+ EventEmission |
1550
+ ServiceCallRequest |
1551
+ ServiceCallResponse |
1552
+ SinkPushRequest |
1553
+ SinkPushResponse |
1554
+ SinkPushChunk |
1555
+ SinkPushCredit |
1556
+ SourceFetchRequest |
1557
+ SourceFetchResponse |
1558
+ SourceFetchChunk |
1559
+ SourceFetchCredit {
1560
+ /* sanity check input */
1561
+ if (typeof obj !== "object" || obj === null)
1562
+ <span class="branch-0 cbranch-no" title="branch not covered" > throw new Error("invalid argument: not an object")</span>
1563
+ &nbsp;
1564
+ /* sanity check version */
1565
+ if (typeof obj.version !== "string")
1566
+ <span class="branch-0 cbranch-no" title="branch not covered" > throw new Error("invalid object: missing or invalid \"version\" field")</span>
1567
+ const match = obj.version.match(/^MQTT\+\/(\d+\.\d+)$/)
1568
+ const versionNum = match !== null ? versionToNum(match[1]<span class="branch-0 cbranch-no" title="branch not covered" >) : 0</span>
1569
+ if (versionNum !== version)
1570
+ <span class="branch-0 cbranch-no" title="branch not covered" > throw new Error(`protocol version mismatch (expected version ${VERSION}, got version ${obj.version})`)</span>
1571
+ &nbsp;
1572
+ /* helper function for Valibot-based validation */
1573
+ const parseObject = &lt;R&gt;(obj: unknown, name: string, schema: v.BaseSchema&lt;any, any, any&gt;): R =&gt; {
1574
+ const res = v.safeParse(schema, obj)
1575
+ if (!res.success) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1576
+ const issues = res.issues.map((issue) =&gt; issue.message).join("; ")
1577
+ throw new Error(`invalid ${name} object: ${issues}`)
1578
+ }
1579
+ return res.output
1580
+ }
1581
+ &nbsp;
1582
+ /* dispatch according to type indication by field */
1583
+ if (typeof obj.type !== "string")
1584
+ <span class="branch-0 cbranch-no" title="branch not covered" > throw new Error("invalid object: missing or invalid \"type\" field")</span>
1585
+ if (obj.type === "event-emission") {
1586
+ const out = parseObject&lt;EventEmission&gt;(obj, "EventEmission", EventEmissionSchema)
1587
+ return this.makeEventEmission(out.id, out.name, out.params, out.sender, out.receiver,
1588
+ out.auth, out.meta)
1589
+ }
1590
+ else if (obj.type === "service-call-request") {
1591
+ const out = parseObject&lt;ServiceCallRequest&gt;(obj, "ServiceCallRequest", ServiceCallRequestSchema)
1592
+ return this.makeServiceCallRequest(out.id, out.name, out.params, out.sender, out.receiver,
1593
+ out.auth, out.meta)
1594
+ }
1595
+ else if (obj.type === "service-call-response") {
1596
+ const out = parseObject&lt;ServiceCallResponse&gt;(obj, "ServiceCallResponse", ServiceCallResponseSchema)
1597
+ return this.makeServiceCallResponse(out.id, out.result, out.error, out.sender, out.receiver)
1598
+ }
1599
+ else if (obj.type === "sink-push-request") {
1600
+ const out = parseObject&lt;SinkPushRequest&gt;(obj, "SinkPushRequest", SinkPushRequestSchema)
1601
+ return this.makeSinkPushRequest(out.id, out.name, out.params, out.sender, out.receiver,
1602
+ out.auth, out.meta)
1603
+ }
1604
+ else if (obj.type === "sink-push-response") {
1605
+ const out = parseObject&lt;SinkPushResponse&gt;(obj, "SinkPushResponse", SinkPushResponseSchema)
1606
+ return this.makeSinkPushResponse(out.id, out.name, out.error, out.sender, out.receiver,
1607
+ out.credit)
1608
+ }
1609
+ else if (obj.type === "sink-push-chunk") {
1610
+ const out = parseObject&lt;SinkPushChunk&gt;(obj, "SinkPushChunk", SinkPushChunkSchema)
1611
+ return this.makeSinkPushChunk(out.id, out.name, out.chunk, out.error,
1612
+ out.final, out.sender, out.receiver)
1613
+ }
1614
+ else if (obj.type === "sink-push-credit") {
1615
+ const out = parseObject&lt;SinkPushCredit&gt;(obj, "SinkPushCredit", SinkPushCreditSchema)
1616
+ return this.makeSinkPushCredit(out.id, out.name, out.credit, out.sender, out.receiver)
1617
+ }
1618
+ else if (obj.type === "source-fetch-request") {
1619
+ const out = parseObject&lt;SourceFetchRequest&gt;(obj, "SourceFetchRequest", SourceFetchRequestSchema)
1620
+ return this.makeSourceFetchRequest(out.id, out.name, out.params, out.sender, out.receiver,
1621
+ out.auth, out.meta, out.credit)
1622
+ }
1623
+ else if (obj.type === "source-fetch-response") {
1624
+ const out = parseObject&lt;SourceFetchResponse&gt;(obj, "SourceFetchResponse", SourceFetchResponseSchema)
1625
+ return this.makeSourceFetchResponse(out.id, out.name, out.error, out.sender, out.receiver,
1626
+ out.meta)
1627
+ }
1628
+ else if (obj.type === "source-fetch-chunk") {
1629
+ const out = parseObject&lt;SourceFetchChunk&gt;(obj, "SourceFetchChunk", SourceFetchChunkSchema)
1630
+ return this.makeSourceFetchChunk(out.id, out.name, out.chunk, out.error,
1631
+ out.final, out.sender, out.receiver)
1632
+ }
1633
+ else if (obj.type === "source-fetch-credit") {
1634
+ const out = parseObject&lt;SourceFetchCredit&gt;(obj, "SourceFetchCredit", SourceFetchCreditSchema)
1635
+ return this.makeSourceFetchCredit(out.id, out.name, out.credit, out.sender, out.receiver)
1636
+ <span class="branch-0 cbranch-no" title="branch not covered" > }</span>
1637
+ else
1638
+ throw new Error("invalid object: not of any known type")
1639
+ }
1640
+ &nbsp;
1641
+ /* guard for request messages */
1642
+ isRequest (msg: any): msg is (
1643
+ EventEmission | ServiceCallRequest | SourceFetchRequest | SinkPushRequest
1644
+ ) {
1645
+ return (
1646
+ msg instanceof EventEmission
1647
+ || msg instanceof ServiceCallRequest
1648
+ || msg instanceof SourceFetchRequest
1649
+ || msg instanceof SinkPushRequest
1650
+ )
1651
+ }
1652
+ &nbsp;
1653
+ /* guard for response messages */
1654
+ isResponse (msg: any): msg is (
1655
+ ServiceCallResponse | SinkPushResponse | SinkPushChunk | SinkPushCredit |
1656
+ SourceFetchResponse | SourceFetchChunk | SourceFetchCredit
1657
+ ) {
1658
+ return (
1659
+ msg instanceof ServiceCallResponse
1660
+ || msg instanceof SinkPushResponse
1661
+ || msg instanceof SinkPushChunk
1662
+ || msg instanceof SinkPushCredit
1663
+ || msg instanceof SourceFetchResponse
1664
+ || msg instanceof SourceFetchChunk
1665
+ || msg instanceof SourceFetchCredit
1666
+ )
1667
+ }
1668
+ }
1669
+ &nbsp;
1670
+ /* message trait */
1671
+ export class MsgTrait&lt;T extends APISchema = APISchema&gt; extends EncodeTrait&lt;T&gt; {
1672
+ protected msg = new Msg()
1673
+ <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" >}</span></span>
1674
+ &nbsp;</pre></td></tr></table></pre>
1675
+
1676
+ <div class='push'></div><!-- for sticky footer -->
1677
+ </div><!-- /wrapper -->
1678
+ <div class='footer quiet pad2 space-top1 center small'>
1679
+ Code coverage generated by
1680
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1681
+ at 2026-03-14T22:41:38.599Z
1682
+ </div>
1683
+ <script src="prettify.js"></script>
1684
+ <script>
1685
+ window.onload = function () {
1686
+ prettyPrint();
1687
+ };
1688
+ </script>
1689
+ <script src="sorter.js"></script>
1690
+ <script src="block-navigation.js"></script>
1691
+ </body>
1692
+ </html>
1693
+