@contractkit/plugin-typescript 0.28.0 → 0.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$ci.log +4 -4
- package/.turbo/turbo-test$colon$ci.log +19 -18
- package/CHANGELOG.md +8 -0
- package/dist/codegen-contract.d.ts.map +1 -1
- package/dist/codegen-sdk.d.ts.map +1 -1
- package/dist/index.js +234 -210
- package/dist/index.js.map +1 -1
- package/dist/path-utils.d.ts.map +1 -1
- package/dist/ts-render.d.ts +6 -0
- package/dist/ts-render.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/codegen-contract.ts +7 -4
- package/src/codegen-operation.ts +4 -4
- package/src/codegen-plain-types.ts +17 -14
- package/src/codegen-sdk.ts +5 -4
- package/src/path-utils.ts +37 -20
- package/src/ts-render.ts +21 -6
- package/tests/codegen-contract.test.ts +4 -0
- package/tests/codegen-sdk.test.ts +8 -0
- package/tests/escaping-security.test.ts +143 -0
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/clover.xml +0 -2213
- package/coverage/coverage-final.json +0 -9
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -131
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -210
- package/coverage/src/codegen-contract.ts.html +0 -3661
- package/coverage/src/codegen-operation.ts.html +0 -2584
- package/coverage/src/codegen-plain-types.ts.html +0 -997
- package/coverage/src/codegen-sdk.ts.html +0 -3901
- package/coverage/src/index.html +0 -206
- package/coverage/src/index.ts.html +0 -2761
- package/coverage/src/path-utils.ts.html +0 -745
- package/coverage/src/ts-render.ts.html +0 -592
- package/coverage/tests/helpers.ts.html +0 -826
- package/coverage/tests/index.html +0 -116
|
@@ -1,2761 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for src/index.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</a> index.ts</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">70.05% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>241/344</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">60.38% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>93/154</span>
|
|
36
|
-
</div>
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">75% </span>
|
|
41
|
-
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>36/48</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">74.74% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>216/289</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 medium'></div>
|
|
65
|
-
<pre><table class="coverage">
|
|
66
|
-
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
-
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
-
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
-
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
-
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
-
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
-
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
-
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
-
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
-
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
-
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
-
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
-
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
-
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
-
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
-
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
-
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
-
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
-
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
-
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
-
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
-
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
-
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
-
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
-
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
-
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
-
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
-
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
-
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
-
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
-
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
-
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
-
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
-
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
-
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
-
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
-
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
-
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
-
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
-
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
-
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
-
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
-
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
-
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
-
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
-
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
-
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
-
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
-
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
-
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
-
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
-
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
-
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
-
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
-
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
-
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
-
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
-
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
-
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
-
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
-
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
-
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
-
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
-
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
-
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
-
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
-
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
-
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
-
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
-
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
-
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
-
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
-
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
-
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
-
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
-
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
-
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
-
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
-
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
-
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
-
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
-
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
-
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
-
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
-
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
-
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
-
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
-
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
-
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
-
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
-
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
-
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
-
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
-
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
-
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
-
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
-
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
-
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
-
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
-
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
-
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
-
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
-
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
-
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
-
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
-
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
-
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
-
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
-
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
-
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
-
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
-
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
-
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
-
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
-
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
-
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
-
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
-
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
-
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
-
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
-
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
-
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
-
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
-
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
-
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
-
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
-
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
-
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
-
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
-
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
-
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
-
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
-
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
-
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
-
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
-
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
-
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
-
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
-
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
-
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
-
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
-
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
-
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
-
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
-
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
-
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
-
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
-
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
-
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
-
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
-
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
-
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
-
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
-
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
-
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
-
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
-
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
-
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
-
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
-
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
-
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
-
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
-
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
-
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
-
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
-
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
-
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
-
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
-
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
-
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
-
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
-
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
-
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
-
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
-
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
-
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
-
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
-
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
-
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
-
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
-
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
-
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
-
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
-
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
-
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
-
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
-
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
-
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
-
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
-
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
-
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
-
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
-
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
-
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
-
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
-
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
-
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
-
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
-
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
-
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
-
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
-
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
-
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
-
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
-
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
-
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
-
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
-
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
-
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
-
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
-
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
-
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
-
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
-
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
-
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
-
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
-
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
-
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
-
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
-
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
-
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
-
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
-
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
-
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
-
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
-
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
-
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
-
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
-
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
-
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
-
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
-
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
-
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
-
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
-
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
-
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
-
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
-
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
-
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
-
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
-
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
-
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
-
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
-
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
-
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
-
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
-
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
-
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
-
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
-
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
-
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
-
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
-
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
-
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
-
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
-
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
-
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
-
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
-
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
-
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
-
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
-
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
-
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
-
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
-
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
-
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
-
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
-
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
-
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
-
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
-
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
-
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
-
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
-
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
-
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
-
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
-
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
-
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
-
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
-
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
-
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
-
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
-
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
-
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
-
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
-
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
-
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
-
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
-
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
-
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
-
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
-
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
-
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
-
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
-
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
-
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
-
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
-
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
-
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
-
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
-
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
-
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
-
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
-
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
-
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
-
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
-
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
-
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
-
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
-
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
-
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
-
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
-
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
-
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
-
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
-
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
-
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
-
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
-
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
-
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
-
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
-
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
-
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
-
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
-
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
-
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
-
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
-
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
-
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
-
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
-
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
-
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
-
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
-
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
-
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
-
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
-
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
-
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
-
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
-
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
-
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
-
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
-
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
-
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
-
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
-
<a name='L348'></a><a href='#L348'>348</a>
|
|
414
|
-
<a name='L349'></a><a href='#L349'>349</a>
|
|
415
|
-
<a name='L350'></a><a href='#L350'>350</a>
|
|
416
|
-
<a name='L351'></a><a href='#L351'>351</a>
|
|
417
|
-
<a name='L352'></a><a href='#L352'>352</a>
|
|
418
|
-
<a name='L353'></a><a href='#L353'>353</a>
|
|
419
|
-
<a name='L354'></a><a href='#L354'>354</a>
|
|
420
|
-
<a name='L355'></a><a href='#L355'>355</a>
|
|
421
|
-
<a name='L356'></a><a href='#L356'>356</a>
|
|
422
|
-
<a name='L357'></a><a href='#L357'>357</a>
|
|
423
|
-
<a name='L358'></a><a href='#L358'>358</a>
|
|
424
|
-
<a name='L359'></a><a href='#L359'>359</a>
|
|
425
|
-
<a name='L360'></a><a href='#L360'>360</a>
|
|
426
|
-
<a name='L361'></a><a href='#L361'>361</a>
|
|
427
|
-
<a name='L362'></a><a href='#L362'>362</a>
|
|
428
|
-
<a name='L363'></a><a href='#L363'>363</a>
|
|
429
|
-
<a name='L364'></a><a href='#L364'>364</a>
|
|
430
|
-
<a name='L365'></a><a href='#L365'>365</a>
|
|
431
|
-
<a name='L366'></a><a href='#L366'>366</a>
|
|
432
|
-
<a name='L367'></a><a href='#L367'>367</a>
|
|
433
|
-
<a name='L368'></a><a href='#L368'>368</a>
|
|
434
|
-
<a name='L369'></a><a href='#L369'>369</a>
|
|
435
|
-
<a name='L370'></a><a href='#L370'>370</a>
|
|
436
|
-
<a name='L371'></a><a href='#L371'>371</a>
|
|
437
|
-
<a name='L372'></a><a href='#L372'>372</a>
|
|
438
|
-
<a name='L373'></a><a href='#L373'>373</a>
|
|
439
|
-
<a name='L374'></a><a href='#L374'>374</a>
|
|
440
|
-
<a name='L375'></a><a href='#L375'>375</a>
|
|
441
|
-
<a name='L376'></a><a href='#L376'>376</a>
|
|
442
|
-
<a name='L377'></a><a href='#L377'>377</a>
|
|
443
|
-
<a name='L378'></a><a href='#L378'>378</a>
|
|
444
|
-
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
|
-
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
|
-
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
-
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
-
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
-
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
-
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
-
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
-
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
-
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
-
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
-
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
-
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
-
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
-
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
-
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
-
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
-
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
-
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
-
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
-
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
-
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
-
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
-
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
-
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
-
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
-
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
-
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
-
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
-
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
-
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
-
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
-
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
-
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
-
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
-
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
-
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
-
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
-
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
-
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
-
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
-
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
-
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
-
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
-
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
-
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
-
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
-
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
-
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
-
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
-
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
-
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
-
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
-
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
-
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
-
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
-
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
-
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
-
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
-
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
-
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
-
<a name='L440'></a><a href='#L440'>440</a>
|
|
506
|
-
<a name='L441'></a><a href='#L441'>441</a>
|
|
507
|
-
<a name='L442'></a><a href='#L442'>442</a>
|
|
508
|
-
<a name='L443'></a><a href='#L443'>443</a>
|
|
509
|
-
<a name='L444'></a><a href='#L444'>444</a>
|
|
510
|
-
<a name='L445'></a><a href='#L445'>445</a>
|
|
511
|
-
<a name='L446'></a><a href='#L446'>446</a>
|
|
512
|
-
<a name='L447'></a><a href='#L447'>447</a>
|
|
513
|
-
<a name='L448'></a><a href='#L448'>448</a>
|
|
514
|
-
<a name='L449'></a><a href='#L449'>449</a>
|
|
515
|
-
<a name='L450'></a><a href='#L450'>450</a>
|
|
516
|
-
<a name='L451'></a><a href='#L451'>451</a>
|
|
517
|
-
<a name='L452'></a><a href='#L452'>452</a>
|
|
518
|
-
<a name='L453'></a><a href='#L453'>453</a>
|
|
519
|
-
<a name='L454'></a><a href='#L454'>454</a>
|
|
520
|
-
<a name='L455'></a><a href='#L455'>455</a>
|
|
521
|
-
<a name='L456'></a><a href='#L456'>456</a>
|
|
522
|
-
<a name='L457'></a><a href='#L457'>457</a>
|
|
523
|
-
<a name='L458'></a><a href='#L458'>458</a>
|
|
524
|
-
<a name='L459'></a><a href='#L459'>459</a>
|
|
525
|
-
<a name='L460'></a><a href='#L460'>460</a>
|
|
526
|
-
<a name='L461'></a><a href='#L461'>461</a>
|
|
527
|
-
<a name='L462'></a><a href='#L462'>462</a>
|
|
528
|
-
<a name='L463'></a><a href='#L463'>463</a>
|
|
529
|
-
<a name='L464'></a><a href='#L464'>464</a>
|
|
530
|
-
<a name='L465'></a><a href='#L465'>465</a>
|
|
531
|
-
<a name='L466'></a><a href='#L466'>466</a>
|
|
532
|
-
<a name='L467'></a><a href='#L467'>467</a>
|
|
533
|
-
<a name='L468'></a><a href='#L468'>468</a>
|
|
534
|
-
<a name='L469'></a><a href='#L469'>469</a>
|
|
535
|
-
<a name='L470'></a><a href='#L470'>470</a>
|
|
536
|
-
<a name='L471'></a><a href='#L471'>471</a>
|
|
537
|
-
<a name='L472'></a><a href='#L472'>472</a>
|
|
538
|
-
<a name='L473'></a><a href='#L473'>473</a>
|
|
539
|
-
<a name='L474'></a><a href='#L474'>474</a>
|
|
540
|
-
<a name='L475'></a><a href='#L475'>475</a>
|
|
541
|
-
<a name='L476'></a><a href='#L476'>476</a>
|
|
542
|
-
<a name='L477'></a><a href='#L477'>477</a>
|
|
543
|
-
<a name='L478'></a><a href='#L478'>478</a>
|
|
544
|
-
<a name='L479'></a><a href='#L479'>479</a>
|
|
545
|
-
<a name='L480'></a><a href='#L480'>480</a>
|
|
546
|
-
<a name='L481'></a><a href='#L481'>481</a>
|
|
547
|
-
<a name='L482'></a><a href='#L482'>482</a>
|
|
548
|
-
<a name='L483'></a><a href='#L483'>483</a>
|
|
549
|
-
<a name='L484'></a><a href='#L484'>484</a>
|
|
550
|
-
<a name='L485'></a><a href='#L485'>485</a>
|
|
551
|
-
<a name='L486'></a><a href='#L486'>486</a>
|
|
552
|
-
<a name='L487'></a><a href='#L487'>487</a>
|
|
553
|
-
<a name='L488'></a><a href='#L488'>488</a>
|
|
554
|
-
<a name='L489'></a><a href='#L489'>489</a>
|
|
555
|
-
<a name='L490'></a><a href='#L490'>490</a>
|
|
556
|
-
<a name='L491'></a><a href='#L491'>491</a>
|
|
557
|
-
<a name='L492'></a><a href='#L492'>492</a>
|
|
558
|
-
<a name='L493'></a><a href='#L493'>493</a>
|
|
559
|
-
<a name='L494'></a><a href='#L494'>494</a>
|
|
560
|
-
<a name='L495'></a><a href='#L495'>495</a>
|
|
561
|
-
<a name='L496'></a><a href='#L496'>496</a>
|
|
562
|
-
<a name='L497'></a><a href='#L497'>497</a>
|
|
563
|
-
<a name='L498'></a><a href='#L498'>498</a>
|
|
564
|
-
<a name='L499'></a><a href='#L499'>499</a>
|
|
565
|
-
<a name='L500'></a><a href='#L500'>500</a>
|
|
566
|
-
<a name='L501'></a><a href='#L501'>501</a>
|
|
567
|
-
<a name='L502'></a><a href='#L502'>502</a>
|
|
568
|
-
<a name='L503'></a><a href='#L503'>503</a>
|
|
569
|
-
<a name='L504'></a><a href='#L504'>504</a>
|
|
570
|
-
<a name='L505'></a><a href='#L505'>505</a>
|
|
571
|
-
<a name='L506'></a><a href='#L506'>506</a>
|
|
572
|
-
<a name='L507'></a><a href='#L507'>507</a>
|
|
573
|
-
<a name='L508'></a><a href='#L508'>508</a>
|
|
574
|
-
<a name='L509'></a><a href='#L509'>509</a>
|
|
575
|
-
<a name='L510'></a><a href='#L510'>510</a>
|
|
576
|
-
<a name='L511'></a><a href='#L511'>511</a>
|
|
577
|
-
<a name='L512'></a><a href='#L512'>512</a>
|
|
578
|
-
<a name='L513'></a><a href='#L513'>513</a>
|
|
579
|
-
<a name='L514'></a><a href='#L514'>514</a>
|
|
580
|
-
<a name='L515'></a><a href='#L515'>515</a>
|
|
581
|
-
<a name='L516'></a><a href='#L516'>516</a>
|
|
582
|
-
<a name='L517'></a><a href='#L517'>517</a>
|
|
583
|
-
<a name='L518'></a><a href='#L518'>518</a>
|
|
584
|
-
<a name='L519'></a><a href='#L519'>519</a>
|
|
585
|
-
<a name='L520'></a><a href='#L520'>520</a>
|
|
586
|
-
<a name='L521'></a><a href='#L521'>521</a>
|
|
587
|
-
<a name='L522'></a><a href='#L522'>522</a>
|
|
588
|
-
<a name='L523'></a><a href='#L523'>523</a>
|
|
589
|
-
<a name='L524'></a><a href='#L524'>524</a>
|
|
590
|
-
<a name='L525'></a><a href='#L525'>525</a>
|
|
591
|
-
<a name='L526'></a><a href='#L526'>526</a>
|
|
592
|
-
<a name='L527'></a><a href='#L527'>527</a>
|
|
593
|
-
<a name='L528'></a><a href='#L528'>528</a>
|
|
594
|
-
<a name='L529'></a><a href='#L529'>529</a>
|
|
595
|
-
<a name='L530'></a><a href='#L530'>530</a>
|
|
596
|
-
<a name='L531'></a><a href='#L531'>531</a>
|
|
597
|
-
<a name='L532'></a><a href='#L532'>532</a>
|
|
598
|
-
<a name='L533'></a><a href='#L533'>533</a>
|
|
599
|
-
<a name='L534'></a><a href='#L534'>534</a>
|
|
600
|
-
<a name='L535'></a><a href='#L535'>535</a>
|
|
601
|
-
<a name='L536'></a><a href='#L536'>536</a>
|
|
602
|
-
<a name='L537'></a><a href='#L537'>537</a>
|
|
603
|
-
<a name='L538'></a><a href='#L538'>538</a>
|
|
604
|
-
<a name='L539'></a><a href='#L539'>539</a>
|
|
605
|
-
<a name='L540'></a><a href='#L540'>540</a>
|
|
606
|
-
<a name='L541'></a><a href='#L541'>541</a>
|
|
607
|
-
<a name='L542'></a><a href='#L542'>542</a>
|
|
608
|
-
<a name='L543'></a><a href='#L543'>543</a>
|
|
609
|
-
<a name='L544'></a><a href='#L544'>544</a>
|
|
610
|
-
<a name='L545'></a><a href='#L545'>545</a>
|
|
611
|
-
<a name='L546'></a><a href='#L546'>546</a>
|
|
612
|
-
<a name='L547'></a><a href='#L547'>547</a>
|
|
613
|
-
<a name='L548'></a><a href='#L548'>548</a>
|
|
614
|
-
<a name='L549'></a><a href='#L549'>549</a>
|
|
615
|
-
<a name='L550'></a><a href='#L550'>550</a>
|
|
616
|
-
<a name='L551'></a><a href='#L551'>551</a>
|
|
617
|
-
<a name='L552'></a><a href='#L552'>552</a>
|
|
618
|
-
<a name='L553'></a><a href='#L553'>553</a>
|
|
619
|
-
<a name='L554'></a><a href='#L554'>554</a>
|
|
620
|
-
<a name='L555'></a><a href='#L555'>555</a>
|
|
621
|
-
<a name='L556'></a><a href='#L556'>556</a>
|
|
622
|
-
<a name='L557'></a><a href='#L557'>557</a>
|
|
623
|
-
<a name='L558'></a><a href='#L558'>558</a>
|
|
624
|
-
<a name='L559'></a><a href='#L559'>559</a>
|
|
625
|
-
<a name='L560'></a><a href='#L560'>560</a>
|
|
626
|
-
<a name='L561'></a><a href='#L561'>561</a>
|
|
627
|
-
<a name='L562'></a><a href='#L562'>562</a>
|
|
628
|
-
<a name='L563'></a><a href='#L563'>563</a>
|
|
629
|
-
<a name='L564'></a><a href='#L564'>564</a>
|
|
630
|
-
<a name='L565'></a><a href='#L565'>565</a>
|
|
631
|
-
<a name='L566'></a><a href='#L566'>566</a>
|
|
632
|
-
<a name='L567'></a><a href='#L567'>567</a>
|
|
633
|
-
<a name='L568'></a><a href='#L568'>568</a>
|
|
634
|
-
<a name='L569'></a><a href='#L569'>569</a>
|
|
635
|
-
<a name='L570'></a><a href='#L570'>570</a>
|
|
636
|
-
<a name='L571'></a><a href='#L571'>571</a>
|
|
637
|
-
<a name='L572'></a><a href='#L572'>572</a>
|
|
638
|
-
<a name='L573'></a><a href='#L573'>573</a>
|
|
639
|
-
<a name='L574'></a><a href='#L574'>574</a>
|
|
640
|
-
<a name='L575'></a><a href='#L575'>575</a>
|
|
641
|
-
<a name='L576'></a><a href='#L576'>576</a>
|
|
642
|
-
<a name='L577'></a><a href='#L577'>577</a>
|
|
643
|
-
<a name='L578'></a><a href='#L578'>578</a>
|
|
644
|
-
<a name='L579'></a><a href='#L579'>579</a>
|
|
645
|
-
<a name='L580'></a><a href='#L580'>580</a>
|
|
646
|
-
<a name='L581'></a><a href='#L581'>581</a>
|
|
647
|
-
<a name='L582'></a><a href='#L582'>582</a>
|
|
648
|
-
<a name='L583'></a><a href='#L583'>583</a>
|
|
649
|
-
<a name='L584'></a><a href='#L584'>584</a>
|
|
650
|
-
<a name='L585'></a><a href='#L585'>585</a>
|
|
651
|
-
<a name='L586'></a><a href='#L586'>586</a>
|
|
652
|
-
<a name='L587'></a><a href='#L587'>587</a>
|
|
653
|
-
<a name='L588'></a><a href='#L588'>588</a>
|
|
654
|
-
<a name='L589'></a><a href='#L589'>589</a>
|
|
655
|
-
<a name='L590'></a><a href='#L590'>590</a>
|
|
656
|
-
<a name='L591'></a><a href='#L591'>591</a>
|
|
657
|
-
<a name='L592'></a><a href='#L592'>592</a>
|
|
658
|
-
<a name='L593'></a><a href='#L593'>593</a>
|
|
659
|
-
<a name='L594'></a><a href='#L594'>594</a>
|
|
660
|
-
<a name='L595'></a><a href='#L595'>595</a>
|
|
661
|
-
<a name='L596'></a><a href='#L596'>596</a>
|
|
662
|
-
<a name='L597'></a><a href='#L597'>597</a>
|
|
663
|
-
<a name='L598'></a><a href='#L598'>598</a>
|
|
664
|
-
<a name='L599'></a><a href='#L599'>599</a>
|
|
665
|
-
<a name='L600'></a><a href='#L600'>600</a>
|
|
666
|
-
<a name='L601'></a><a href='#L601'>601</a>
|
|
667
|
-
<a name='L602'></a><a href='#L602'>602</a>
|
|
668
|
-
<a name='L603'></a><a href='#L603'>603</a>
|
|
669
|
-
<a name='L604'></a><a href='#L604'>604</a>
|
|
670
|
-
<a name='L605'></a><a href='#L605'>605</a>
|
|
671
|
-
<a name='L606'></a><a href='#L606'>606</a>
|
|
672
|
-
<a name='L607'></a><a href='#L607'>607</a>
|
|
673
|
-
<a name='L608'></a><a href='#L608'>608</a>
|
|
674
|
-
<a name='L609'></a><a href='#L609'>609</a>
|
|
675
|
-
<a name='L610'></a><a href='#L610'>610</a>
|
|
676
|
-
<a name='L611'></a><a href='#L611'>611</a>
|
|
677
|
-
<a name='L612'></a><a href='#L612'>612</a>
|
|
678
|
-
<a name='L613'></a><a href='#L613'>613</a>
|
|
679
|
-
<a name='L614'></a><a href='#L614'>614</a>
|
|
680
|
-
<a name='L615'></a><a href='#L615'>615</a>
|
|
681
|
-
<a name='L616'></a><a href='#L616'>616</a>
|
|
682
|
-
<a name='L617'></a><a href='#L617'>617</a>
|
|
683
|
-
<a name='L618'></a><a href='#L618'>618</a>
|
|
684
|
-
<a name='L619'></a><a href='#L619'>619</a>
|
|
685
|
-
<a name='L620'></a><a href='#L620'>620</a>
|
|
686
|
-
<a name='L621'></a><a href='#L621'>621</a>
|
|
687
|
-
<a name='L622'></a><a href='#L622'>622</a>
|
|
688
|
-
<a name='L623'></a><a href='#L623'>623</a>
|
|
689
|
-
<a name='L624'></a><a href='#L624'>624</a>
|
|
690
|
-
<a name='L625'></a><a href='#L625'>625</a>
|
|
691
|
-
<a name='L626'></a><a href='#L626'>626</a>
|
|
692
|
-
<a name='L627'></a><a href='#L627'>627</a>
|
|
693
|
-
<a name='L628'></a><a href='#L628'>628</a>
|
|
694
|
-
<a name='L629'></a><a href='#L629'>629</a>
|
|
695
|
-
<a name='L630'></a><a href='#L630'>630</a>
|
|
696
|
-
<a name='L631'></a><a href='#L631'>631</a>
|
|
697
|
-
<a name='L632'></a><a href='#L632'>632</a>
|
|
698
|
-
<a name='L633'></a><a href='#L633'>633</a>
|
|
699
|
-
<a name='L634'></a><a href='#L634'>634</a>
|
|
700
|
-
<a name='L635'></a><a href='#L635'>635</a>
|
|
701
|
-
<a name='L636'></a><a href='#L636'>636</a>
|
|
702
|
-
<a name='L637'></a><a href='#L637'>637</a>
|
|
703
|
-
<a name='L638'></a><a href='#L638'>638</a>
|
|
704
|
-
<a name='L639'></a><a href='#L639'>639</a>
|
|
705
|
-
<a name='L640'></a><a href='#L640'>640</a>
|
|
706
|
-
<a name='L641'></a><a href='#L641'>641</a>
|
|
707
|
-
<a name='L642'></a><a href='#L642'>642</a>
|
|
708
|
-
<a name='L643'></a><a href='#L643'>643</a>
|
|
709
|
-
<a name='L644'></a><a href='#L644'>644</a>
|
|
710
|
-
<a name='L645'></a><a href='#L645'>645</a>
|
|
711
|
-
<a name='L646'></a><a href='#L646'>646</a>
|
|
712
|
-
<a name='L647'></a><a href='#L647'>647</a>
|
|
713
|
-
<a name='L648'></a><a href='#L648'>648</a>
|
|
714
|
-
<a name='L649'></a><a href='#L649'>649</a>
|
|
715
|
-
<a name='L650'></a><a href='#L650'>650</a>
|
|
716
|
-
<a name='L651'></a><a href='#L651'>651</a>
|
|
717
|
-
<a name='L652'></a><a href='#L652'>652</a>
|
|
718
|
-
<a name='L653'></a><a href='#L653'>653</a>
|
|
719
|
-
<a name='L654'></a><a href='#L654'>654</a>
|
|
720
|
-
<a name='L655'></a><a href='#L655'>655</a>
|
|
721
|
-
<a name='L656'></a><a href='#L656'>656</a>
|
|
722
|
-
<a name='L657'></a><a href='#L657'>657</a>
|
|
723
|
-
<a name='L658'></a><a href='#L658'>658</a>
|
|
724
|
-
<a name='L659'></a><a href='#L659'>659</a>
|
|
725
|
-
<a name='L660'></a><a href='#L660'>660</a>
|
|
726
|
-
<a name='L661'></a><a href='#L661'>661</a>
|
|
727
|
-
<a name='L662'></a><a href='#L662'>662</a>
|
|
728
|
-
<a name='L663'></a><a href='#L663'>663</a>
|
|
729
|
-
<a name='L664'></a><a href='#L664'>664</a>
|
|
730
|
-
<a name='L665'></a><a href='#L665'>665</a>
|
|
731
|
-
<a name='L666'></a><a href='#L666'>666</a>
|
|
732
|
-
<a name='L667'></a><a href='#L667'>667</a>
|
|
733
|
-
<a name='L668'></a><a href='#L668'>668</a>
|
|
734
|
-
<a name='L669'></a><a href='#L669'>669</a>
|
|
735
|
-
<a name='L670'></a><a href='#L670'>670</a>
|
|
736
|
-
<a name='L671'></a><a href='#L671'>671</a>
|
|
737
|
-
<a name='L672'></a><a href='#L672'>672</a>
|
|
738
|
-
<a name='L673'></a><a href='#L673'>673</a>
|
|
739
|
-
<a name='L674'></a><a href='#L674'>674</a>
|
|
740
|
-
<a name='L675'></a><a href='#L675'>675</a>
|
|
741
|
-
<a name='L676'></a><a href='#L676'>676</a>
|
|
742
|
-
<a name='L677'></a><a href='#L677'>677</a>
|
|
743
|
-
<a name='L678'></a><a href='#L678'>678</a>
|
|
744
|
-
<a name='L679'></a><a href='#L679'>679</a>
|
|
745
|
-
<a name='L680'></a><a href='#L680'>680</a>
|
|
746
|
-
<a name='L681'></a><a href='#L681'>681</a>
|
|
747
|
-
<a name='L682'></a><a href='#L682'>682</a>
|
|
748
|
-
<a name='L683'></a><a href='#L683'>683</a>
|
|
749
|
-
<a name='L684'></a><a href='#L684'>684</a>
|
|
750
|
-
<a name='L685'></a><a href='#L685'>685</a>
|
|
751
|
-
<a name='L686'></a><a href='#L686'>686</a>
|
|
752
|
-
<a name='L687'></a><a href='#L687'>687</a>
|
|
753
|
-
<a name='L688'></a><a href='#L688'>688</a>
|
|
754
|
-
<a name='L689'></a><a href='#L689'>689</a>
|
|
755
|
-
<a name='L690'></a><a href='#L690'>690</a>
|
|
756
|
-
<a name='L691'></a><a href='#L691'>691</a>
|
|
757
|
-
<a name='L692'></a><a href='#L692'>692</a>
|
|
758
|
-
<a name='L693'></a><a href='#L693'>693</a>
|
|
759
|
-
<a name='L694'></a><a href='#L694'>694</a>
|
|
760
|
-
<a name='L695'></a><a href='#L695'>695</a>
|
|
761
|
-
<a name='L696'></a><a href='#L696'>696</a>
|
|
762
|
-
<a name='L697'></a><a href='#L697'>697</a>
|
|
763
|
-
<a name='L698'></a><a href='#L698'>698</a>
|
|
764
|
-
<a name='L699'></a><a href='#L699'>699</a>
|
|
765
|
-
<a name='L700'></a><a href='#L700'>700</a>
|
|
766
|
-
<a name='L701'></a><a href='#L701'>701</a>
|
|
767
|
-
<a name='L702'></a><a href='#L702'>702</a>
|
|
768
|
-
<a name='L703'></a><a href='#L703'>703</a>
|
|
769
|
-
<a name='L704'></a><a href='#L704'>704</a>
|
|
770
|
-
<a name='L705'></a><a href='#L705'>705</a>
|
|
771
|
-
<a name='L706'></a><a href='#L706'>706</a>
|
|
772
|
-
<a name='L707'></a><a href='#L707'>707</a>
|
|
773
|
-
<a name='L708'></a><a href='#L708'>708</a>
|
|
774
|
-
<a name='L709'></a><a href='#L709'>709</a>
|
|
775
|
-
<a name='L710'></a><a href='#L710'>710</a>
|
|
776
|
-
<a name='L711'></a><a href='#L711'>711</a>
|
|
777
|
-
<a name='L712'></a><a href='#L712'>712</a>
|
|
778
|
-
<a name='L713'></a><a href='#L713'>713</a>
|
|
779
|
-
<a name='L714'></a><a href='#L714'>714</a>
|
|
780
|
-
<a name='L715'></a><a href='#L715'>715</a>
|
|
781
|
-
<a name='L716'></a><a href='#L716'>716</a>
|
|
782
|
-
<a name='L717'></a><a href='#L717'>717</a>
|
|
783
|
-
<a name='L718'></a><a href='#L718'>718</a>
|
|
784
|
-
<a name='L719'></a><a href='#L719'>719</a>
|
|
785
|
-
<a name='L720'></a><a href='#L720'>720</a>
|
|
786
|
-
<a name='L721'></a><a href='#L721'>721</a>
|
|
787
|
-
<a name='L722'></a><a href='#L722'>722</a>
|
|
788
|
-
<a name='L723'></a><a href='#L723'>723</a>
|
|
789
|
-
<a name='L724'></a><a href='#L724'>724</a>
|
|
790
|
-
<a name='L725'></a><a href='#L725'>725</a>
|
|
791
|
-
<a name='L726'></a><a href='#L726'>726</a>
|
|
792
|
-
<a name='L727'></a><a href='#L727'>727</a>
|
|
793
|
-
<a name='L728'></a><a href='#L728'>728</a>
|
|
794
|
-
<a name='L729'></a><a href='#L729'>729</a>
|
|
795
|
-
<a name='L730'></a><a href='#L730'>730</a>
|
|
796
|
-
<a name='L731'></a><a href='#L731'>731</a>
|
|
797
|
-
<a name='L732'></a><a href='#L732'>732</a>
|
|
798
|
-
<a name='L733'></a><a href='#L733'>733</a>
|
|
799
|
-
<a name='L734'></a><a href='#L734'>734</a>
|
|
800
|
-
<a name='L735'></a><a href='#L735'>735</a>
|
|
801
|
-
<a name='L736'></a><a href='#L736'>736</a>
|
|
802
|
-
<a name='L737'></a><a href='#L737'>737</a>
|
|
803
|
-
<a name='L738'></a><a href='#L738'>738</a>
|
|
804
|
-
<a name='L739'></a><a href='#L739'>739</a>
|
|
805
|
-
<a name='L740'></a><a href='#L740'>740</a>
|
|
806
|
-
<a name='L741'></a><a href='#L741'>741</a>
|
|
807
|
-
<a name='L742'></a><a href='#L742'>742</a>
|
|
808
|
-
<a name='L743'></a><a href='#L743'>743</a>
|
|
809
|
-
<a name='L744'></a><a href='#L744'>744</a>
|
|
810
|
-
<a name='L745'></a><a href='#L745'>745</a>
|
|
811
|
-
<a name='L746'></a><a href='#L746'>746</a>
|
|
812
|
-
<a name='L747'></a><a href='#L747'>747</a>
|
|
813
|
-
<a name='L748'></a><a href='#L748'>748</a>
|
|
814
|
-
<a name='L749'></a><a href='#L749'>749</a>
|
|
815
|
-
<a name='L750'></a><a href='#L750'>750</a>
|
|
816
|
-
<a name='L751'></a><a href='#L751'>751</a>
|
|
817
|
-
<a name='L752'></a><a href='#L752'>752</a>
|
|
818
|
-
<a name='L753'></a><a href='#L753'>753</a>
|
|
819
|
-
<a name='L754'></a><a href='#L754'>754</a>
|
|
820
|
-
<a name='L755'></a><a href='#L755'>755</a>
|
|
821
|
-
<a name='L756'></a><a href='#L756'>756</a>
|
|
822
|
-
<a name='L757'></a><a href='#L757'>757</a>
|
|
823
|
-
<a name='L758'></a><a href='#L758'>758</a>
|
|
824
|
-
<a name='L759'></a><a href='#L759'>759</a>
|
|
825
|
-
<a name='L760'></a><a href='#L760'>760</a>
|
|
826
|
-
<a name='L761'></a><a href='#L761'>761</a>
|
|
827
|
-
<a name='L762'></a><a href='#L762'>762</a>
|
|
828
|
-
<a name='L763'></a><a href='#L763'>763</a>
|
|
829
|
-
<a name='L764'></a><a href='#L764'>764</a>
|
|
830
|
-
<a name='L765'></a><a href='#L765'>765</a>
|
|
831
|
-
<a name='L766'></a><a href='#L766'>766</a>
|
|
832
|
-
<a name='L767'></a><a href='#L767'>767</a>
|
|
833
|
-
<a name='L768'></a><a href='#L768'>768</a>
|
|
834
|
-
<a name='L769'></a><a href='#L769'>769</a>
|
|
835
|
-
<a name='L770'></a><a href='#L770'>770</a>
|
|
836
|
-
<a name='L771'></a><a href='#L771'>771</a>
|
|
837
|
-
<a name='L772'></a><a href='#L772'>772</a>
|
|
838
|
-
<a name='L773'></a><a href='#L773'>773</a>
|
|
839
|
-
<a name='L774'></a><a href='#L774'>774</a>
|
|
840
|
-
<a name='L775'></a><a href='#L775'>775</a>
|
|
841
|
-
<a name='L776'></a><a href='#L776'>776</a>
|
|
842
|
-
<a name='L777'></a><a href='#L777'>777</a>
|
|
843
|
-
<a name='L778'></a><a href='#L778'>778</a>
|
|
844
|
-
<a name='L779'></a><a href='#L779'>779</a>
|
|
845
|
-
<a name='L780'></a><a href='#L780'>780</a>
|
|
846
|
-
<a name='L781'></a><a href='#L781'>781</a>
|
|
847
|
-
<a name='L782'></a><a href='#L782'>782</a>
|
|
848
|
-
<a name='L783'></a><a href='#L783'>783</a>
|
|
849
|
-
<a name='L784'></a><a href='#L784'>784</a>
|
|
850
|
-
<a name='L785'></a><a href='#L785'>785</a>
|
|
851
|
-
<a name='L786'></a><a href='#L786'>786</a>
|
|
852
|
-
<a name='L787'></a><a href='#L787'>787</a>
|
|
853
|
-
<a name='L788'></a><a href='#L788'>788</a>
|
|
854
|
-
<a name='L789'></a><a href='#L789'>789</a>
|
|
855
|
-
<a name='L790'></a><a href='#L790'>790</a>
|
|
856
|
-
<a name='L791'></a><a href='#L791'>791</a>
|
|
857
|
-
<a name='L792'></a><a href='#L792'>792</a>
|
|
858
|
-
<a name='L793'></a><a href='#L793'>793</a>
|
|
859
|
-
<a name='L794'></a><a href='#L794'>794</a>
|
|
860
|
-
<a name='L795'></a><a href='#L795'>795</a>
|
|
861
|
-
<a name='L796'></a><a href='#L796'>796</a>
|
|
862
|
-
<a name='L797'></a><a href='#L797'>797</a>
|
|
863
|
-
<a name='L798'></a><a href='#L798'>798</a>
|
|
864
|
-
<a name='L799'></a><a href='#L799'>799</a>
|
|
865
|
-
<a name='L800'></a><a href='#L800'>800</a>
|
|
866
|
-
<a name='L801'></a><a href='#L801'>801</a>
|
|
867
|
-
<a name='L802'></a><a href='#L802'>802</a>
|
|
868
|
-
<a name='L803'></a><a href='#L803'>803</a>
|
|
869
|
-
<a name='L804'></a><a href='#L804'>804</a>
|
|
870
|
-
<a name='L805'></a><a href='#L805'>805</a>
|
|
871
|
-
<a name='L806'></a><a href='#L806'>806</a>
|
|
872
|
-
<a name='L807'></a><a href='#L807'>807</a>
|
|
873
|
-
<a name='L808'></a><a href='#L808'>808</a>
|
|
874
|
-
<a name='L809'></a><a href='#L809'>809</a>
|
|
875
|
-
<a name='L810'></a><a href='#L810'>810</a>
|
|
876
|
-
<a name='L811'></a><a href='#L811'>811</a>
|
|
877
|
-
<a name='L812'></a><a href='#L812'>812</a>
|
|
878
|
-
<a name='L813'></a><a href='#L813'>813</a>
|
|
879
|
-
<a name='L814'></a><a href='#L814'>814</a>
|
|
880
|
-
<a name='L815'></a><a href='#L815'>815</a>
|
|
881
|
-
<a name='L816'></a><a href='#L816'>816</a>
|
|
882
|
-
<a name='L817'></a><a href='#L817'>817</a>
|
|
883
|
-
<a name='L818'></a><a href='#L818'>818</a>
|
|
884
|
-
<a name='L819'></a><a href='#L819'>819</a>
|
|
885
|
-
<a name='L820'></a><a href='#L820'>820</a>
|
|
886
|
-
<a name='L821'></a><a href='#L821'>821</a>
|
|
887
|
-
<a name='L822'></a><a href='#L822'>822</a>
|
|
888
|
-
<a name='L823'></a><a href='#L823'>823</a>
|
|
889
|
-
<a name='L824'></a><a href='#L824'>824</a>
|
|
890
|
-
<a name='L825'></a><a href='#L825'>825</a>
|
|
891
|
-
<a name='L826'></a><a href='#L826'>826</a>
|
|
892
|
-
<a name='L827'></a><a href='#L827'>827</a>
|
|
893
|
-
<a name='L828'></a><a href='#L828'>828</a>
|
|
894
|
-
<a name='L829'></a><a href='#L829'>829</a>
|
|
895
|
-
<a name='L830'></a><a href='#L830'>830</a>
|
|
896
|
-
<a name='L831'></a><a href='#L831'>831</a>
|
|
897
|
-
<a name='L832'></a><a href='#L832'>832</a>
|
|
898
|
-
<a name='L833'></a><a href='#L833'>833</a>
|
|
899
|
-
<a name='L834'></a><a href='#L834'>834</a>
|
|
900
|
-
<a name='L835'></a><a href='#L835'>835</a>
|
|
901
|
-
<a name='L836'></a><a href='#L836'>836</a>
|
|
902
|
-
<a name='L837'></a><a href='#L837'>837</a>
|
|
903
|
-
<a name='L838'></a><a href='#L838'>838</a>
|
|
904
|
-
<a name='L839'></a><a href='#L839'>839</a>
|
|
905
|
-
<a name='L840'></a><a href='#L840'>840</a>
|
|
906
|
-
<a name='L841'></a><a href='#L841'>841</a>
|
|
907
|
-
<a name='L842'></a><a href='#L842'>842</a>
|
|
908
|
-
<a name='L843'></a><a href='#L843'>843</a>
|
|
909
|
-
<a name='L844'></a><a href='#L844'>844</a>
|
|
910
|
-
<a name='L845'></a><a href='#L845'>845</a>
|
|
911
|
-
<a name='L846'></a><a href='#L846'>846</a>
|
|
912
|
-
<a name='L847'></a><a href='#L847'>847</a>
|
|
913
|
-
<a name='L848'></a><a href='#L848'>848</a>
|
|
914
|
-
<a name='L849'></a><a href='#L849'>849</a>
|
|
915
|
-
<a name='L850'></a><a href='#L850'>850</a>
|
|
916
|
-
<a name='L851'></a><a href='#L851'>851</a>
|
|
917
|
-
<a name='L852'></a><a href='#L852'>852</a>
|
|
918
|
-
<a name='L853'></a><a href='#L853'>853</a>
|
|
919
|
-
<a name='L854'></a><a href='#L854'>854</a>
|
|
920
|
-
<a name='L855'></a><a href='#L855'>855</a>
|
|
921
|
-
<a name='L856'></a><a href='#L856'>856</a>
|
|
922
|
-
<a name='L857'></a><a href='#L857'>857</a>
|
|
923
|
-
<a name='L858'></a><a href='#L858'>858</a>
|
|
924
|
-
<a name='L859'></a><a href='#L859'>859</a>
|
|
925
|
-
<a name='L860'></a><a href='#L860'>860</a>
|
|
926
|
-
<a name='L861'></a><a href='#L861'>861</a>
|
|
927
|
-
<a name='L862'></a><a href='#L862'>862</a>
|
|
928
|
-
<a name='L863'></a><a href='#L863'>863</a>
|
|
929
|
-
<a name='L864'></a><a href='#L864'>864</a>
|
|
930
|
-
<a name='L865'></a><a href='#L865'>865</a>
|
|
931
|
-
<a name='L866'></a><a href='#L866'>866</a>
|
|
932
|
-
<a name='L867'></a><a href='#L867'>867</a>
|
|
933
|
-
<a name='L868'></a><a href='#L868'>868</a>
|
|
934
|
-
<a name='L869'></a><a href='#L869'>869</a>
|
|
935
|
-
<a name='L870'></a><a href='#L870'>870</a>
|
|
936
|
-
<a name='L871'></a><a href='#L871'>871</a>
|
|
937
|
-
<a name='L872'></a><a href='#L872'>872</a>
|
|
938
|
-
<a name='L873'></a><a href='#L873'>873</a>
|
|
939
|
-
<a name='L874'></a><a href='#L874'>874</a>
|
|
940
|
-
<a name='L875'></a><a href='#L875'>875</a>
|
|
941
|
-
<a name='L876'></a><a href='#L876'>876</a>
|
|
942
|
-
<a name='L877'></a><a href='#L877'>877</a>
|
|
943
|
-
<a name='L878'></a><a href='#L878'>878</a>
|
|
944
|
-
<a name='L879'></a><a href='#L879'>879</a>
|
|
945
|
-
<a name='L880'></a><a href='#L880'>880</a>
|
|
946
|
-
<a name='L881'></a><a href='#L881'>881</a>
|
|
947
|
-
<a name='L882'></a><a href='#L882'>882</a>
|
|
948
|
-
<a name='L883'></a><a href='#L883'>883</a>
|
|
949
|
-
<a name='L884'></a><a href='#L884'>884</a>
|
|
950
|
-
<a name='L885'></a><a href='#L885'>885</a>
|
|
951
|
-
<a name='L886'></a><a href='#L886'>886</a>
|
|
952
|
-
<a name='L887'></a><a href='#L887'>887</a>
|
|
953
|
-
<a name='L888'></a><a href='#L888'>888</a>
|
|
954
|
-
<a name='L889'></a><a href='#L889'>889</a>
|
|
955
|
-
<a name='L890'></a><a href='#L890'>890</a>
|
|
956
|
-
<a name='L891'></a><a href='#L891'>891</a>
|
|
957
|
-
<a name='L892'></a><a href='#L892'>892</a>
|
|
958
|
-
<a name='L893'></a><a href='#L893'>893</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
959
|
-
<span class="cline-any cline-neutral"> </span>
|
|
960
|
-
<span class="cline-any cline-neutral"> </span>
|
|
961
|
-
<span class="cline-any cline-neutral"> </span>
|
|
962
|
-
<span class="cline-any cline-neutral"> </span>
|
|
963
|
-
<span class="cline-any cline-neutral"> </span>
|
|
964
|
-
<span class="cline-any cline-neutral"> </span>
|
|
965
|
-
<span class="cline-any cline-neutral"> </span>
|
|
966
|
-
<span class="cline-any cline-neutral"> </span>
|
|
967
|
-
<span class="cline-any cline-neutral"> </span>
|
|
968
|
-
<span class="cline-any cline-neutral"> </span>
|
|
969
|
-
<span class="cline-any cline-neutral"> </span>
|
|
970
|
-
<span class="cline-any cline-neutral"> </span>
|
|
971
|
-
<span class="cline-any cline-neutral"> </span>
|
|
972
|
-
<span class="cline-any cline-neutral"> </span>
|
|
973
|
-
<span class="cline-any cline-neutral"> </span>
|
|
974
|
-
<span class="cline-any cline-neutral"> </span>
|
|
975
|
-
<span class="cline-any cline-neutral"> </span>
|
|
976
|
-
<span class="cline-any cline-neutral"> </span>
|
|
977
|
-
<span class="cline-any cline-neutral"> </span>
|
|
978
|
-
<span class="cline-any cline-neutral"> </span>
|
|
979
|
-
<span class="cline-any cline-neutral"> </span>
|
|
980
|
-
<span class="cline-any cline-neutral"> </span>
|
|
981
|
-
<span class="cline-any cline-neutral"> </span>
|
|
982
|
-
<span class="cline-any cline-neutral"> </span>
|
|
983
|
-
<span class="cline-any cline-neutral"> </span>
|
|
984
|
-
<span class="cline-any cline-neutral"> </span>
|
|
985
|
-
<span class="cline-any cline-neutral"> </span>
|
|
986
|
-
<span class="cline-any cline-neutral"> </span>
|
|
987
|
-
<span class="cline-any cline-neutral"> </span>
|
|
988
|
-
<span class="cline-any cline-neutral"> </span>
|
|
989
|
-
<span class="cline-any cline-neutral"> </span>
|
|
990
|
-
<span class="cline-any cline-neutral"> </span>
|
|
991
|
-
<span class="cline-any cline-neutral"> </span>
|
|
992
|
-
<span class="cline-any cline-neutral"> </span>
|
|
993
|
-
<span class="cline-any cline-neutral"> </span>
|
|
994
|
-
<span class="cline-any cline-neutral"> </span>
|
|
995
|
-
<span class="cline-any cline-neutral"> </span>
|
|
996
|
-
<span class="cline-any cline-neutral"> </span>
|
|
997
|
-
<span class="cline-any cline-neutral"> </span>
|
|
998
|
-
<span class="cline-any cline-neutral"> </span>
|
|
999
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1000
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1001
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1002
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1003
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1004
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1005
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1006
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1007
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1008
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1009
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1010
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1011
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1012
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1013
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1014
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1015
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1016
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1017
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1018
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1019
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1020
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1021
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1022
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1023
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1024
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1025
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1026
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1027
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1028
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1029
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1030
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1031
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1032
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1033
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1034
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1035
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1036
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1037
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1038
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1039
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1040
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1041
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1042
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1043
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1044
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1045
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1046
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1047
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1048
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1049
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1050
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1051
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1052
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1053
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1054
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1055
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1056
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1057
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1058
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1059
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1060
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1061
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1062
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1063
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1064
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1065
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1066
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1067
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1068
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1069
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1070
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1071
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1072
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1073
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1074
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1075
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1076
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1077
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1078
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1079
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1080
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1081
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1082
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1083
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
1087
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1088
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1089
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1090
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1091
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1092
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1093
|
-
<span class="cline-any cline-yes">20x</span>
|
|
1094
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1095
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1096
|
-
<span class="cline-any cline-yes">20x</span>
|
|
1097
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1098
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1099
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1100
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1101
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1102
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1103
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1104
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1105
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1106
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1107
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1108
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1109
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1110
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1111
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1112
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1113
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1114
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1115
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1116
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1117
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1118
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1119
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1120
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1121
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1122
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1123
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1124
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1125
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1126
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1127
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1128
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1129
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1130
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1131
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1132
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1133
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1134
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1135
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1136
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1137
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1138
|
-
<span class="cline-any cline-yes">56x</span>
|
|
1139
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1140
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1141
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1142
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1143
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1144
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1145
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1146
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1147
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1148
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1149
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1150
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1151
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1152
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1153
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1154
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1155
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1156
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1157
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1158
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1159
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1160
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1161
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1162
|
-
<span class="cline-any cline-no"> </span>
|
|
1163
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1164
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1165
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1166
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1167
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1168
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1169
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1170
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1171
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1172
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1173
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1174
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1175
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1176
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1177
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1178
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1179
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1180
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1181
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1182
|
-
<span class="cline-any cline-no"> </span>
|
|
1183
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1184
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1185
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1186
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1187
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1188
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1189
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1190
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1191
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1192
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1193
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1194
|
-
<span class="cline-any cline-no"> </span>
|
|
1195
|
-
<span class="cline-any cline-no"> </span>
|
|
1196
|
-
<span class="cline-any cline-no"> </span>
|
|
1197
|
-
<span class="cline-any cline-no"> </span>
|
|
1198
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1199
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1200
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1201
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1202
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1203
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1204
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1205
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1206
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1207
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1208
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1209
|
-
<span class="cline-any cline-no"> </span>
|
|
1210
|
-
<span class="cline-any cline-no"> </span>
|
|
1211
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1212
|
-
<span class="cline-any cline-yes">5x</span>
|
|
1213
|
-
<span class="cline-any cline-no"> </span>
|
|
1214
|
-
<span class="cline-any cline-no"> </span>
|
|
1215
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1216
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1217
|
-
<span class="cline-any cline-yes">28x</span>
|
|
1218
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1219
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1220
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1221
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1222
|
-
<span class="cline-any cline-yes">56x</span>
|
|
1223
|
-
<span class="cline-any cline-yes">56x</span>
|
|
1224
|
-
<span class="cline-any cline-no"> </span>
|
|
1225
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1226
|
-
<span class="cline-any cline-yes">56x</span>
|
|
1227
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1228
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1229
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1230
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1231
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1232
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1233
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1234
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1235
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1236
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1237
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1238
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1239
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1240
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1241
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1242
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1243
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1244
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1245
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1246
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1247
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1248
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1249
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1250
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1251
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1252
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1253
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1254
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1255
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1256
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1257
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1258
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1259
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1260
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1261
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1262
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1263
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1264
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1265
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1266
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1267
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1268
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1269
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1270
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1271
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1272
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1273
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1274
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1275
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1276
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1277
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1278
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1279
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1280
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1281
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1282
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1283
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1284
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1285
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1286
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1287
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1288
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1289
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1290
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1291
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1292
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1293
|
-
<span class="cline-any cline-yes">14x</span>
|
|
1294
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1295
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1296
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1297
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1298
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1299
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1300
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1301
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1302
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1303
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1304
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1305
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1306
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1307
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1308
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1309
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1310
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1311
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1312
|
-
<span class="cline-any cline-yes">13x</span>
|
|
1313
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1314
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1315
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1316
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1317
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1318
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1319
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1320
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1321
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1322
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1323
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1324
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1325
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1326
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1327
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1328
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1329
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1330
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1331
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1332
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1333
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1334
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1335
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1336
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1337
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1338
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1339
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1340
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1341
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1342
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1343
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1344
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1345
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1346
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1347
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1348
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1349
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1350
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1351
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1352
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1353
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1354
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1355
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1356
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1357
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1358
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1359
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1360
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1361
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1362
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1363
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1364
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1365
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1366
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1367
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1368
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1369
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1370
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1371
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1372
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1373
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1374
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1375
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1376
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1377
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1378
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1379
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1380
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1381
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1382
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1383
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1384
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1385
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1386
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1387
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1388
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1389
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1390
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1391
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1392
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1393
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1394
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1395
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1396
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1397
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1398
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1399
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1400
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1401
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1402
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1403
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1404
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1405
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1406
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1407
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1408
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1409
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1410
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1411
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1412
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1413
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1414
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1415
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1416
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1417
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1418
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1419
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1420
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1421
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1422
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1423
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1424
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1425
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1426
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1427
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1428
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1429
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1430
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1431
|
-
<span class="cline-any cline-yes">8x</span>
|
|
1432
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1433
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1434
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1435
|
-
<span class="cline-any cline-yes">6x</span>
|
|
1436
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1437
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1438
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1439
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1440
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1441
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1442
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1443
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1444
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1445
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1446
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1447
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1448
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1449
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1450
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1451
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1452
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1453
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1454
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1455
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1456
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1457
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1458
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1459
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1460
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1461
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1462
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1463
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1464
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1465
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1466
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1467
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1468
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1469
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1470
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1471
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1472
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1473
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1474
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1475
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1476
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1477
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1478
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1479
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1480
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1481
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1482
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1483
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1484
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1485
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1486
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1487
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1488
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1489
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1490
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1491
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1492
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1493
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1494
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1495
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1496
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1497
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1498
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1499
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1500
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1501
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1502
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1503
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1504
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1505
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1506
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1507
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1508
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1509
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1510
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1511
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1512
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1513
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1514
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1515
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1516
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1517
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1518
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1519
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1520
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1521
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1522
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1523
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1524
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1525
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1526
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1527
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1528
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1529
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1530
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1531
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1532
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1533
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1534
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1535
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1536
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1537
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1538
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1539
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1540
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1541
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1542
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1543
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1544
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1545
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1546
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1547
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1548
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1549
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1550
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1551
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1552
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1553
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1554
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1555
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1556
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1557
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1558
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1559
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1560
|
-
<span class="cline-any cline-yes">3x</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">3x</span>
|
|
1565
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1566
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1567
|
-
<span class="cline-any cline-no"> </span>
|
|
1568
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1569
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1570
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1571
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1572
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1573
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1574
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1575
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1576
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1577
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1578
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1579
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1580
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1581
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1582
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1583
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1584
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1585
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1586
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1587
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1588
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1589
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1590
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1591
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1592
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1593
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1594
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1595
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1596
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1597
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1598
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1599
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1600
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1601
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1602
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1603
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1604
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1605
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1606
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1607
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1608
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1609
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1610
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1611
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1612
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1613
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1614
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1615
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1616
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1617
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1618
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1619
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1620
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1621
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1622
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1623
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1624
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1625
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1626
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1627
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1628
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1629
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1630
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1631
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1632
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1633
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1634
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1635
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1636
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1637
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1638
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1639
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1640
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1641
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1642
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1643
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1644
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1645
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1646
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1647
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1648
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1649
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1650
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1651
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1652
|
-
<span class="cline-any cline-yes">9x</span>
|
|
1653
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1654
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1655
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1656
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1657
|
-
<span class="cline-any cline-yes">3x</span>
|
|
1658
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1659
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1660
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1661
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1662
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1663
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1664
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1665
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1666
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1667
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1668
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1669
|
-
<span class="cline-any cline-yes">7x</span>
|
|
1670
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1671
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1672
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1673
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1674
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1675
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1676
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1677
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1678
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1679
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1680
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1681
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1682
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1683
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1684
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1685
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1686
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1687
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1688
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1689
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1690
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1691
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1692
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1693
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1694
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1695
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1696
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1697
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1698
|
-
<span class="cline-any cline-no"> </span>
|
|
1699
|
-
<span class="cline-any cline-no"> </span>
|
|
1700
|
-
<span class="cline-any cline-no"> </span>
|
|
1701
|
-
<span class="cline-any cline-no"> </span>
|
|
1702
|
-
<span class="cline-any cline-no"> </span>
|
|
1703
|
-
<span class="cline-any cline-no"> </span>
|
|
1704
|
-
<span class="cline-any cline-no"> </span>
|
|
1705
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1706
|
-
<span class="cline-any cline-no"> </span>
|
|
1707
|
-
<span class="cline-any cline-no"> </span>
|
|
1708
|
-
<span class="cline-any cline-no"> </span>
|
|
1709
|
-
<span class="cline-any cline-no"> </span>
|
|
1710
|
-
<span class="cline-any cline-no"> </span>
|
|
1711
|
-
<span class="cline-any cline-no"> </span>
|
|
1712
|
-
<span class="cline-any cline-no"> </span>
|
|
1713
|
-
<span class="cline-any cline-no"> </span>
|
|
1714
|
-
<span class="cline-any cline-no"> </span>
|
|
1715
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1716
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1717
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1718
|
-
<span class="cline-any cline-no"> </span>
|
|
1719
|
-
<span class="cline-any cline-no"> </span>
|
|
1720
|
-
<span class="cline-any cline-no"> </span>
|
|
1721
|
-
<span class="cline-any cline-no"> </span>
|
|
1722
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1723
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1724
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1725
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1726
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1727
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1728
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1729
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1730
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1731
|
-
<span class="cline-any cline-no"> </span>
|
|
1732
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1733
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1734
|
-
<span class="cline-any cline-no"> </span>
|
|
1735
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1736
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1737
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1738
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1739
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1740
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1741
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1742
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1743
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1744
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1745
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1746
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1747
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1748
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1749
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1750
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1751
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1752
|
-
<span class="cline-any cline-no"> </span>
|
|
1753
|
-
<span class="cline-any cline-no"> </span>
|
|
1754
|
-
<span class="cline-any cline-no"> </span>
|
|
1755
|
-
<span class="cline-any cline-no"> </span>
|
|
1756
|
-
<span class="cline-any cline-no"> </span>
|
|
1757
|
-
<span class="cline-any cline-no"> </span>
|
|
1758
|
-
<span class="cline-any cline-no"> </span>
|
|
1759
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1760
|
-
<span class="cline-any cline-no"> </span>
|
|
1761
|
-
<span class="cline-any cline-no"> </span>
|
|
1762
|
-
<span class="cline-any cline-no"> </span>
|
|
1763
|
-
<span class="cline-any cline-no"> </span>
|
|
1764
|
-
<span class="cline-any cline-no"> </span>
|
|
1765
|
-
<span class="cline-any cline-no"> </span>
|
|
1766
|
-
<span class="cline-any cline-no"> </span>
|
|
1767
|
-
<span class="cline-any cline-no"> </span>
|
|
1768
|
-
<span class="cline-any cline-no"> </span>
|
|
1769
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1770
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1771
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1772
|
-
<span class="cline-any cline-no"> </span>
|
|
1773
|
-
<span class="cline-any cline-no"> </span>
|
|
1774
|
-
<span class="cline-any cline-no"> </span>
|
|
1775
|
-
<span class="cline-any cline-no"> </span>
|
|
1776
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1777
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1778
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1779
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1780
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1781
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1782
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1783
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1784
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1785
|
-
<span class="cline-any cline-no"> </span>
|
|
1786
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1787
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1788
|
-
<span class="cline-any cline-no"> </span>
|
|
1789
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1790
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1791
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1792
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1793
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1794
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1795
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1796
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1797
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1798
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1799
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1800
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1801
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1802
|
-
<span class="cline-any cline-no"> </span>
|
|
1803
|
-
<span class="cline-any cline-no"> </span>
|
|
1804
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1805
|
-
<span class="cline-any cline-no"> </span>
|
|
1806
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1807
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1808
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1809
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1810
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1811
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1812
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1813
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1814
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1815
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1816
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1817
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1818
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1819
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1820
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1821
|
-
<span class="cline-any cline-no"> </span>
|
|
1822
|
-
<span class="cline-any cline-no"> </span>
|
|
1823
|
-
<span class="cline-any cline-no"> </span>
|
|
1824
|
-
<span class="cline-any cline-no"> </span>
|
|
1825
|
-
<span class="cline-any cline-no"> </span>
|
|
1826
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1827
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1828
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1829
|
-
<span class="cline-any cline-no"> </span>
|
|
1830
|
-
<span class="cline-any cline-no"> </span>
|
|
1831
|
-
<span class="cline-any cline-no"> </span>
|
|
1832
|
-
<span class="cline-any cline-no"> </span>
|
|
1833
|
-
<span class="cline-any cline-no"> </span>
|
|
1834
|
-
<span class="cline-any cline-no"> </span>
|
|
1835
|
-
<span class="cline-any cline-no"> </span>
|
|
1836
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1837
|
-
<span class="cline-any cline-no"> </span>
|
|
1838
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1839
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1840
|
-
<span class="cline-any cline-no"> </span>
|
|
1841
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1842
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1843
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1844
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1845
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1846
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1847
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1848
|
-
<span class="cline-any cline-yes">21x</span>
|
|
1849
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1850
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { resolve, join, relative, dirname, basename } from 'node:path';
|
|
1851
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, readdirSync, rmdirSync } from 'node:fs';
|
|
1852
|
-
import { generateContract, rootNeedsScalar } from './codegen-contract.js';
|
|
1853
|
-
import { generateOp } from './codegen-operation.js';
|
|
1854
|
-
import type {
|
|
1855
|
-
ContractKitPlugin,
|
|
1856
|
-
PluginContext,
|
|
1857
|
-
ContractRootNode,
|
|
1858
|
-
OpRootNode,
|
|
1859
|
-
ModelNode,
|
|
1860
|
-
IncrementalManifest,
|
|
1861
|
-
IncrementalUnit,
|
|
1862
|
-
IncrementalOutputFile,
|
|
1863
|
-
} from '@contractkit/core';
|
|
1864
|
-
import {
|
|
1865
|
-
runIncrementalCodegen,
|
|
1866
|
-
parseIncrementalManifest,
|
|
1867
|
-
emptyIncrementalManifest,
|
|
1868
|
-
serializeIncrementalManifest,
|
|
1869
|
-
hashFingerprint,
|
|
1870
|
-
collectTransitiveModelRefs,
|
|
1871
|
-
collectTypeRefs,
|
|
1872
|
-
} from '@contractkit/core';
|
|
1873
|
-
import {
|
|
1874
|
-
generateSdk,
|
|
1875
|
-
generateSdkOptions,
|
|
1876
|
-
generateSdkAggregator,
|
|
1877
|
-
generateAreaClient,
|
|
1878
|
-
deriveClientClassName,
|
|
1879
|
-
deriveClientPropertyName,
|
|
1880
|
-
deriveAreaClientClassName,
|
|
1881
|
-
deriveAreaPropertyName,
|
|
1882
|
-
deriveSubareaClientClassName,
|
|
1883
|
-
deriveSubareaPropertyName,
|
|
1884
|
-
getAreaSubarea,
|
|
1885
|
-
hasPublicOperations,
|
|
1886
|
-
generateSdkPackageJson,
|
|
1887
|
-
generateSdkTsconfig,
|
|
1888
|
-
type SdkClientInfo,
|
|
1889
|
-
type SdkAreaInfo,
|
|
1890
|
-
type SdkScaffoldDeps,
|
|
1891
|
-
} from './codegen-sdk.js';
|
|
1892
|
-
import { generatePlainTypes } from './codegen-plain-types.js';
|
|
1893
|
-
import {
|
|
1894
|
-
TEMPLATE_VAR_RE,
|
|
1895
|
-
resolveTemplate,
|
|
1896
|
-
commonDir,
|
|
1897
|
-
computeOpOutPath,
|
|
1898
|
-
computeContractOutPath,
|
|
1899
|
-
computeSdkOutPath,
|
|
1900
|
-
computeSdkAreaClientOutPath,
|
|
1901
|
-
computeSdkTypeOutPath,
|
|
1902
|
-
generateBarrelFiles,
|
|
1903
|
-
computePubliclyReachableTypes,
|
|
1904
|
-
} from './path-utils.js';
|
|
1905
|
-
|
|
1906
|
-
// ─── Sub-config interfaces ─────────────────────────────────────────────────
|
|
1907
|
-
|
|
1908
|
-
export interface ServerConfig {
|
|
1909
|
-
/** Directory (relative to rootDir) where server files are written. Default: rootDir. */
|
|
1910
|
-
baseDir?: string;
|
|
1911
|
-
/** When true, `output.types` emits Zod schema files (via `generateContract`). When false/omitted, emits plain TypeScript. */
|
|
1912
|
-
zod?: boolean;
|
|
1913
|
-
output?: {
|
|
1914
|
-
/** Path template for Koa router files. Supports {filename}, {dir}, {area}. */
|
|
1915
|
-
routes?: string;
|
|
1916
|
-
/** Path template for type/schema files. Supports {filename}, {dir}, {area}. */
|
|
1917
|
-
types?: string;
|
|
1918
|
-
};
|
|
1919
|
-
/** Import path template for service implementations. */
|
|
1920
|
-
servicePathTemplate?: string;
|
|
1921
|
-
/** Whether to emit handlers for `internal` operations. Default true. */
|
|
1922
|
-
includeInternal?: boolean;
|
|
1923
|
-
}
|
|
1924
|
-
|
|
1925
|
-
export interface SdkConfig {
|
|
1926
|
-
baseDir?: string;
|
|
1927
|
-
name?: string;
|
|
1928
|
-
zod?: boolean;
|
|
1929
|
-
output?: {
|
|
1930
|
-
sdk?: string;
|
|
1931
|
-
types?: string;
|
|
1932
|
-
clients?: string;
|
|
1933
|
-
};
|
|
1934
|
-
includeInternal?: boolean;
|
|
1935
|
-
/**
|
|
1936
|
-
* Emit a starter `package.json` and `tsconfig.json` at the SDK `baseDir` so the
|
|
1937
|
-
* generated output is a buildable, publishable package on its own. Opt-in and
|
|
1938
|
-
* write-once: the files are created only when absent and are never overwritten or
|
|
1939
|
-
* cleaned up on later builds, so any edits you make to them are preserved.
|
|
1940
|
-
* Dependency ranges are derived from the contracts (always `zod` when `zod: true`;
|
|
1941
|
-
* `luxon` when any covered model uses a date/time/datetime/interval scalar).
|
|
1942
|
-
*/
|
|
1943
|
-
scaffold?: boolean;
|
|
1944
|
-
}
|
|
1945
|
-
|
|
1946
|
-
export interface ZodConfig {
|
|
1947
|
-
baseDir?: string;
|
|
1948
|
-
output?: string;
|
|
1949
|
-
}
|
|
1950
|
-
|
|
1951
|
-
export interface TypesConfig {
|
|
1952
|
-
baseDir?: string;
|
|
1953
|
-
output?: string;
|
|
1954
|
-
}
|
|
1955
|
-
|
|
1956
|
-
export interface TypescriptPluginConfig {
|
|
1957
|
-
server?: ServerConfig;
|
|
1958
|
-
sdk?: SdkConfig;
|
|
1959
|
-
zod?: ZodConfig;
|
|
1960
|
-
types?: TypesConfig;
|
|
1961
|
-
}
|
|
1962
|
-
|
|
1963
|
-
// ─── Caching constants ─────────────────────────────────────────────────────
|
|
1964
|
-
|
|
1965
|
-
/** Bumped when the codegen output shape changes in a way that should bust every per-file fingerprint. */
|
|
1966
|
-
export const TYPESCRIPT_CODEGEN_VERSION = '1';
|
|
1967
|
-
|
|
1968
|
-
/** Filename for the persisted TypeScript manifest under the CLI cache directory. */
|
|
1969
|
-
const CACHE_MANIFEST_FILENAME = 'typescript-manifest.json';
|
|
1970
|
-
|
|
1971
|
-
// ─── Plugin entry points ──────────────────────────────────────────────────
|
|
1972
|
-
|
|
1973
|
-
const plugin: ContractKitPlugin = {
|
|
1974
|
-
name: 'typescript',
|
|
1975
|
-
async generateTargets(inputs, ctx) {
|
|
1976
|
-
const config = ctx.options as TypescriptPluginConfig;
|
|
1977
|
-
await runTypescriptCodegen(inputs, ctx, config, ctx.rootDir);
|
|
1978
|
-
},
|
|
1979
|
-
};
|
|
1980
|
-
|
|
1981
|
-
export default plugin;
|
|
1982
|
-
|
|
1983
|
-
/** Build a `@contractkit/plugin-typescript` instance with explicit configuration, for programmatic use. */
|
|
1984
|
-
export function createTypescriptPlugin(config: TypescriptPluginConfig, rootDir: string): ContractKitPlugin {
|
|
1985
|
-
return {
|
|
1986
|
-
name: 'typescript',
|
|
1987
|
-
async generateTargets(inputs, ctx) {
|
|
1988
|
-
await runTypescriptCodegen(inputs, ctx, config, rootDir);
|
|
1989
|
-
},
|
|
1990
|
-
};
|
|
1991
|
-
}
|
|
1992
|
-
|
|
1993
|
-
/**
|
|
1994
|
-
* Shared orchestration. Each sub-generator (server / sdk / zod / types) contributes a
|
|
1995
|
-
* set of cacheable units (per-file fingerprints) plus a set of always-regenerated global
|
|
1996
|
-
* files (aggregators, barrels, sdk-options). Units share a single manifest so the cache
|
|
1997
|
-
* survives cross-cutting reads — the manifest lives at `<rootDir>/.contractkit-typescript-manifest.json`.
|
|
1998
|
-
*
|
|
1999
|
-
* Honors `ctx.cacheEnabled` — `--force` bypasses the manifest entirely.
|
|
2000
|
-
*/
|
|
2001
|
-
async function runTypescriptCodegen(
|
|
2002
|
-
inputs: Parameters<NonNullable<ContractKitPlugin['generateTargets']>>[0],
|
|
2003
|
-
ctx: PluginContext,
|
|
2004
|
-
config: TypescriptPluginConfig,
|
|
2005
|
-
rootDir: string,
|
|
2006
|
-
): Promise<void> {
|
|
2007
|
-
const manifestPath = resolve(ctx.cacheDir, CACHE_MANIFEST_FILENAME);
|
|
2008
|
-
const prevManifest: IncrementalManifest = ctx.cacheEnabled ? readManifest(<span class="branch-1 cbranch-no" title="branch not covered" >manifestPath) : emptyIncrementalManifest(TYPESCRIPT_CODEGEN_VERSION);</span>
|
|
2009
|
-
|
|
2010
|
-
const units: IncrementalUnit[] = [];
|
|
2011
|
-
const globalFiles: IncrementalOutputFile[] = [];
|
|
2012
|
-
|
|
2013
|
-
if (config.server) collectServerOutput(config.server, rootDir, inputs, units);
|
|
2014
|
-
if (config.sdk) collectSdkOutput(config.sdk, rootDir, inputs, units, globalFiles);
|
|
2015
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (config.zod) <span class="cstat-no" title="statement not covered" >collectZodOutput(config.zod, rootDir, inputs, units);</span>
|
|
2016
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (config.types) <span class="cstat-no" title="statement not covered" >collectTypesOutput(config.types, rootDir, inputs, units);</span>
|
|
2017
|
-
|
|
2018
|
-
const result = runIncrementalCodegen({
|
|
2019
|
-
codegenVersion: TYPESCRIPT_CODEGEN_VERSION,
|
|
2020
|
-
prevManifest,
|
|
2021
|
-
globalFiles,
|
|
2022
|
-
units,
|
|
2023
|
-
// Paths are absolute, so existsSync works directly.
|
|
2024
|
-
fileExists: existsSync,
|
|
2025
|
-
});
|
|
2026
|
-
|
|
2027
|
-
deleteStalePaths(result.deletedPaths);
|
|
2028
|
-
|
|
2029
|
-
for (const { relativePath, content, ifAbsent } of result.filesToWrite) {
|
|
2030
|
-
ctx.emitFile(relativePath, content, ifAbsent ? { ifAbsent: true } : undefined);
|
|
2031
|
-
}
|
|
2032
|
-
|
|
2033
|
-
writeManifest(manifestPath, result.manifest);
|
|
2034
|
-
}
|
|
2035
|
-
|
|
2036
|
-
// ─── Cross-file dependency analysis ────────────────────────────────────────
|
|
2037
|
-
|
|
2038
|
-
/** Build a quick lookup from model name → its definition. */
|
|
2039
|
-
function buildModelMap(contractRoots: readonly ContractRootNode[]): Map<string, ModelNode> {
|
|
2040
|
-
const map = new Map<string, ModelNode>();
|
|
2041
|
-
for (const root of contractRoots) {
|
|
2042
|
-
for (const model of root.models) map.set(model.name, model);
|
|
2043
|
-
}
|
|
2044
|
-
return map;
|
|
2045
|
-
}
|
|
2046
|
-
|
|
2047
|
-
/** Collect every model referenced by this contract root (own models' fields + bases). Used to slice cross-file fingerprint inputs to just what this file actually depends on. */
|
|
2048
|
-
function collectContractRootRefs(root: ContractRootNode, modelMap: Map<string, ModelNode>): Set<string> {
|
|
2049
|
-
const seeds: Parameters<typeof collectTypeRefs>[0][] = [];
|
|
2050
|
-
for (const m of root.models) {
|
|
2051
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (m.type) <span class="cstat-no" title="statement not covered" >seeds.push(m.type);</span>
|
|
2052
|
-
for (const f of m.fields) seeds.push(f.type);
|
|
2053
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (m.bases) {
|
|
2054
|
-
<span class="cstat-no" title="statement not covered" > for (const b of m.bases) <span class="cstat-no" title="statement not covered" >seeds.push({ kind: 'ref', name: b } as Parameters<typeof collectTypeRefs>[0]);</span></span>
|
|
2055
|
-
}
|
|
2056
|
-
}
|
|
2057
|
-
return collectTransitiveModelRefs(seeds, modelMap);
|
|
2058
|
-
}
|
|
2059
|
-
|
|
2060
|
-
/** Collect every model referenced by an op root's routes/operations (transitive). */
|
|
2061
|
-
function collectOpRootRefs(root: OpRootNode, modelMap: Map<string, ModelNode>): Set<string> {
|
|
2062
|
-
const seeds: Parameters<typeof collectTypeRefs>[0][] = [];
|
|
2063
|
-
for (const route of root.routes) {
|
|
2064
|
-
if (route.params) seeds.push(...paramSourceTypes(route.params));
|
|
2065
|
-
for (const op of route.operations) {
|
|
2066
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (op.query) <span class="cstat-no" title="statement not covered" >seeds.push(...paramSourceTypes(op.query));</span>
|
|
2067
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (op.headers) <span class="cstat-no" title="statement not covered" >seeds.push(...paramSourceTypes(op.headers));</span>
|
|
2068
|
-
if (op.request) {
|
|
2069
|
-
for (const body of op.request.bodies) seeds.push(body.bodyType);
|
|
2070
|
-
}
|
|
2071
|
-
for (const resp of op.responses) {
|
|
2072
|
-
if (resp.bodyType) seeds.push(resp.bodyType);
|
|
2073
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (resp.headers) {
|
|
2074
|
-
<span class="cstat-no" title="statement not covered" > for (const h of resp.headers) <span class="cstat-no" title="statement not covered" >seeds.push(h.type);</span></span>
|
|
2075
|
-
}
|
|
2076
|
-
}
|
|
2077
|
-
}
|
|
2078
|
-
}
|
|
2079
|
-
return collectTransitiveModelRefs(seeds, modelMap);
|
|
2080
|
-
}
|
|
2081
|
-
|
|
2082
|
-
function paramSourceTypes(src: NonNullable<OpRootNode['routes'][number]['params']>): Parameters<typeof collectTypeRefs>[0][] {
|
|
2083
|
-
const out: Parameters<typeof collectTypeRefs>[0][] = [];
|
|
2084
|
-
if (src.kind === 'params') {
|
|
2085
|
-
for (const n of src.nodes) out.push(n.type);
|
|
2086
|
-
} else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (src.kind === 'ref') {</span>
|
|
2087
|
-
<span class="cstat-no" title="statement not covered" > out.push({ kind: 'ref', name: src.name } as Parameters<typeof collectTypeRefs>[0]);</span>
|
|
2088
|
-
} else <span class="cstat-no" title="statement not covered" >if (src.kind === 'type') {</span>
|
|
2089
|
-
<span class="cstat-no" title="statement not covered" > out.push(src.node);</span>
|
|
2090
|
-
}
|
|
2091
|
-
return out;
|
|
2092
|
-
}
|
|
2093
|
-
|
|
2094
|
-
/** Build a sorted, JSON-stable record of (modelName -> outPath) for refs this unit depends on. */
|
|
2095
|
-
function sliceOutPathMap(refs: Set<string>, modelOutPaths: Map<string, string>, modelsWithInput: Set<string>, modelsWithOutput: Set<string>): Record<string, string> {
|
|
2096
|
-
const slice: Record<string, string> = {};
|
|
2097
|
-
for (const ref of [...refs].sort()) {
|
|
2098
|
-
const p = modelOutPaths.get(ref);
|
|
2099
|
-
if (p) slice[ref] = p;
|
|
2100
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (modelsWithInput.has(ref)) {
|
|
2101
|
-
const ip = <span class="cstat-no" title="statement not covered" >modelOutPaths.get(`${ref}Input`);</span>
|
|
2102
|
-
<span class="cstat-no" title="statement not covered" > if (ip) <span class="cstat-no" title="statement not covered" >slice[`${ref}Input`] = ip;</span></span>
|
|
2103
|
-
}
|
|
2104
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (modelsWithOutput.has(ref)) {
|
|
2105
|
-
const op = <span class="cstat-no" title="statement not covered" >modelOutPaths.get(`${ref}Output`);</span>
|
|
2106
|
-
<span class="cstat-no" title="statement not covered" > if (op) <span class="cstat-no" title="statement not covered" >slice[`${ref}Output`] = op;</span></span>
|
|
2107
|
-
}
|
|
2108
|
-
}
|
|
2109
|
-
return slice;
|
|
2110
|
-
}
|
|
2111
|
-
|
|
2112
|
-
/** Slice modelsWithInput/Output to only the names relevant to this unit. */
|
|
2113
|
-
function sliceModelSet(refs: Set<string>, ownNames: Set<string>, set: Set<string>): string[] {
|
|
2114
|
-
const result: string[] = [];
|
|
2115
|
-
for (const name of set) {
|
|
2116
|
-
<span class="cstat-no" title="statement not covered" > if (refs.has(name) || ownNames.has(name)) <span class="cstat-no" title="statement not covered" >result.push(name);</span></span>
|
|
2117
|
-
}
|
|
2118
|
-
return result.sort();
|
|
2119
|
-
}
|
|
2120
|
-
|
|
2121
|
-
// ─── Server sub-generator ──────────────────────────────────────────────────
|
|
2122
|
-
|
|
2123
|
-
function collectServerOutput(
|
|
2124
|
-
config: ServerConfig,
|
|
2125
|
-
rootDir: string,
|
|
2126
|
-
inputs: Parameters<NonNullable<ContractKitPlugin['generateTargets']>>[0],
|
|
2127
|
-
units: IncrementalUnit[],
|
|
2128
|
-
): void {
|
|
2129
|
-
const serverBase = resolve(rootDir, config.baseDir ?? '.');
|
|
2130
|
-
const modelsWithInput = inputs.modelsWithInput as Set<string>;
|
|
2131
|
-
const modelsWithOutput = inputs.modelsWithOutput as Set<string>;
|
|
2132
|
-
const modelMap = buildModelMap(inputs.contractRoots);
|
|
2133
|
-
const allFiles = [...inputs.contractRoots.map(r => r.file), ...inputs.opRoots.map(r => r.file)];
|
|
2134
|
-
const commonRoot = commonDir(allFiles, rootDir);
|
|
2135
|
-
const subConfigKey = stableSubConfig(config);
|
|
2136
|
-
|
|
2137
|
-
// Pre-pass: register all model → outPath. Cross-file refs need to resolve correctly,
|
|
2138
|
-
// which means we need the COMPLETE map (not a slice) — even though each unit's fingerprint
|
|
2139
|
-
// only includes its own slice.
|
|
2140
|
-
const serverModelOutPaths = new Map<string, string>();
|
|
2141
|
-
const typeEntries: { ast: ContractRootNode; typeOutPath: string }[] = [];
|
|
2142
|
-
if (config.output?.types) {
|
|
2143
|
-
for (const ast of inputs.contractRoots) {
|
|
2144
|
-
const typeOutPath = computeContractOutPath(ast.file, serverBase, config.output.types, '.ts', commonRoot, ast.meta);
|
|
2145
|
-
typeEntries.push({ ast, typeOutPath });
|
|
2146
|
-
for (const model of ast.models) {
|
|
2147
|
-
serverModelOutPaths.set(model.name, typeOutPath);
|
|
2148
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (modelsWithInput.has(model.name)) <span class="cstat-no" title="statement not covered" >serverModelOutPaths.set(`${model.name}Input`, typeOutPath);</span>
|
|
2149
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (modelsWithOutput.has(model.name)) <span class="cstat-no" title="statement not covered" >serverModelOutPaths.set(`${model.name}Output`, typeOutPath);</span>
|
|
2150
|
-
}
|
|
2151
|
-
}
|
|
2152
|
-
}
|
|
2153
|
-
|
|
2154
|
-
// ── Per-contract-root types unit ──
|
|
2155
|
-
for (const { ast, typeOutPath } of typeEntries) {
|
|
2156
|
-
const refs = collectContractRootRefs(ast, modelMap);
|
|
2157
|
-
const ownNames = new Set(ast.models.map(m => m.name));
|
|
2158
|
-
const fingerprint = hashFingerprint({
|
|
2159
|
-
kind: 'server-types',
|
|
2160
|
-
v: TYPESCRIPT_CODEGEN_VERSION,
|
|
2161
|
-
outPath: typeOutPath,
|
|
2162
|
-
root: ast,
|
|
2163
|
-
outPathSlice: sliceOutPathMap(refs, serverModelOutPaths, modelsWithInput, modelsWithOutput),
|
|
2164
|
-
modelsWithInput: sliceModelSet(refs, ownNames, modelsWithInput),
|
|
2165
|
-
modelsWithOutput: sliceModelSet(refs, ownNames, modelsWithOutput),
|
|
2166
|
-
sub: subConfigKey,
|
|
2167
|
-
});
|
|
2168
|
-
units.push({
|
|
2169
|
-
key: `server-types::${typeOutPath}`,
|
|
2170
|
-
fingerprint,
|
|
2171
|
-
render: () => {
|
|
2172
|
-
const renderCtx = {
|
|
2173
|
-
modelOutPaths: serverModelOutPaths,
|
|
2174
|
-
currentOutPath: typeOutPath,
|
|
2175
|
-
modelsWithInput,
|
|
2176
|
-
modelsWithOutput,
|
|
2177
|
-
};
|
|
2178
|
-
const content = config.zod ? generateContract(ast, renderCtx) : generatePlainTypes(ast, renderCtx);
|
|
2179
|
-
return [{ relativePath: typeOutPath, content }];
|
|
2180
|
-
},
|
|
2181
|
-
});
|
|
2182
|
-
}
|
|
2183
|
-
|
|
2184
|
-
// ── Per-op-root router unit ──
|
|
2185
|
-
for (const ast of inputs.opRoots) {
|
|
2186
|
-
const outPath = computeOpOutPath(ast.file, serverBase, config.output?.routes, '.router.ts', commonRoot, ast.meta);
|
|
2187
|
-
const refs = collectOpRootRefs(ast, modelMap);
|
|
2188
|
-
const fingerprint = hashFingerprint({
|
|
2189
|
-
kind: 'server-router',
|
|
2190
|
-
v: TYPESCRIPT_CODEGEN_VERSION,
|
|
2191
|
-
outPath,
|
|
2192
|
-
root: ast,
|
|
2193
|
-
// The router imports types from each contract root's type file; the slice covers exactly that.
|
|
2194
|
-
outPathSlice: sliceOutPathMap(refs, serverModelOutPaths, modelsWithInput, modelsWithOutput),
|
|
2195
|
-
modelsWithInput: sliceModelSet(refs, new Set(), modelsWithInput),
|
|
2196
|
-
modelsWithOutput: sliceModelSet(refs, new Set(), modelsWithOutput),
|
|
2197
|
-
servicePathTemplate: config.servicePathTemplate ?? null,
|
|
2198
|
-
includeInternal: config.includeInternal ?? true,
|
|
2199
|
-
sub: subConfigKey,
|
|
2200
|
-
});
|
|
2201
|
-
units.push({
|
|
2202
|
-
key: `server-router::${outPath}`,
|
|
2203
|
-
fingerprint,
|
|
2204
|
-
render: () => [
|
|
2205
|
-
{
|
|
2206
|
-
relativePath: outPath,
|
|
2207
|
-
content: generateOp(ast, {
|
|
2208
|
-
servicePathTemplate: config.servicePathTemplate,
|
|
2209
|
-
outPath,
|
|
2210
|
-
modelOutPaths: serverModelOutPaths,
|
|
2211
|
-
modelsWithInput,
|
|
2212
|
-
modelsWithOutput,
|
|
2213
|
-
includeInternal: config.includeInternal,
|
|
2214
|
-
}),
|
|
2215
|
-
},
|
|
2216
|
-
],
|
|
2217
|
-
});
|
|
2218
|
-
}
|
|
2219
|
-
}
|
|
2220
|
-
|
|
2221
|
-
// ─── SDK sub-generator ─────────────────────────────────────────────────────
|
|
2222
|
-
|
|
2223
|
-
function collectSdkOutput(
|
|
2224
|
-
config: SdkConfig,
|
|
2225
|
-
rootDir: string,
|
|
2226
|
-
inputs: Parameters<NonNullable<ContractKitPlugin['generateTargets']>>[0],
|
|
2227
|
-
units: IncrementalUnit[],
|
|
2228
|
-
globalFiles: IncrementalOutputFile[],
|
|
2229
|
-
): void {
|
|
2230
|
-
const sdkBase = config.baseDir ? resolve(rootDir, config.baseDir) : rootDir;
|
|
2231
|
-
const sdkName = config.name;
|
|
2232
|
-
const sdkOutput = config.output?.sdk;
|
|
2233
|
-
const sdkEntryPath = sdkOutput
|
|
2234
|
-
? join(sdkBase, TEMPLATE_VAR_RE.test(<span class="branch-0 cbranch-no" title="branch not covered" >sdkOutput) ? resolveTemplate(sdkOutput, { name: sdkName ?? 'sdk' }) : <span class="branch-1 cbranch-no" title="branch not covered" >s</span>dkOutput)</span>
|
|
2235
|
-
: join(sdkBase, 'sdk.ts');
|
|
2236
|
-
const sdkOptionsPath = join(dirname(sdkEntryPath), 'sdk-options.ts');
|
|
2237
|
-
const subConfigKey = stableSubConfig(config);
|
|
2238
|
-
|
|
2239
|
-
const modelsWithInput = inputs.modelsWithInput as Set<string>;
|
|
2240
|
-
const modelsWithOutput = inputs.modelsWithOutput as Set<string>;
|
|
2241
|
-
const modelMap = buildModelMap(inputs.contractRoots);
|
|
2242
|
-
const allFiles = [...inputs.contractRoots.map(r => r.file), ...inputs.opRoots.map(r => r.file)];
|
|
2243
|
-
const ckCommonRoot = commonDir(allFiles, rootDir);
|
|
2244
|
-
|
|
2245
|
-
const sdkModelOutPaths = new Map<string, string>();
|
|
2246
|
-
const sdkTypePaths: string[] = [];
|
|
2247
|
-
const sdkClientInfos: { outPath: string; className: string; propertyName: string }[] = [];
|
|
2248
|
-
|
|
2249
|
-
// ── Pre-pass: SDK type files ──
|
|
2250
|
-
const sdkContractEntries: { ast: ContractRootNode; typeOutPath: string }[] = [];
|
|
2251
|
-
if (config.output?.types) {
|
|
2252
|
-
const publicTypes = computePubliclyReachableTypes(inputs.opRoots, inputs.contractRoots, modelsWithInput, modelsWithOutput);
|
|
2253
|
-
for (const ast of inputs.contractRoots) {
|
|
2254
|
-
const typeOutPath = computeSdkTypeOutPath(ast.file, sdkBase, config.output.types, ckCommonRoot, ast.meta);
|
|
2255
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!typeOutPath) <span class="cstat-no" title="statement not covered" >continue;</span>
|
|
2256
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (publicTypes !== null && !ast.models.some(m => publicTypes.has(m.name))) <span class="cstat-no" title="statement not covered" >continue;</span>
|
|
2257
|
-
sdkTypePaths.push(typeOutPath);
|
|
2258
|
-
sdkContractEntries.push({ ast, typeOutPath });
|
|
2259
|
-
for (const model of ast.models) {
|
|
2260
|
-
sdkModelOutPaths.set(model.name, typeOutPath);
|
|
2261
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (modelsWithInput.has(model.name)) <span class="cstat-no" title="statement not covered" >sdkModelOutPaths.set(`${model.name}Input`, typeOutPath);</span>
|
|
2262
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (modelsWithOutput.has(model.name)) <span class="cstat-no" title="statement not covered" >sdkModelOutPaths.set(`${model.name}Output`, typeOutPath);</span>
|
|
2263
|
-
}
|
|
2264
|
-
}
|
|
2265
|
-
}
|
|
2266
|
-
|
|
2267
|
-
// ── SDK type units ──
|
|
2268
|
-
for (const { ast, typeOutPath } of sdkContractEntries) {
|
|
2269
|
-
const refs = collectContractRootRefs(ast, modelMap);
|
|
2270
|
-
const ownNames = new Set(ast.models.map(m => m.name));
|
|
2271
|
-
const fingerprint = hashFingerprint({
|
|
2272
|
-
kind: 'sdk-types',
|
|
2273
|
-
v: TYPESCRIPT_CODEGEN_VERSION,
|
|
2274
|
-
outPath: typeOutPath,
|
|
2275
|
-
root: ast,
|
|
2276
|
-
outPathSlice: sliceOutPathMap(refs, sdkModelOutPaths, modelsWithInput, modelsWithOutput),
|
|
2277
|
-
modelsWithInput: sliceModelSet(refs, ownNames, modelsWithInput),
|
|
2278
|
-
modelsWithOutput: sliceModelSet(refs, ownNames, modelsWithOutput),
|
|
2279
|
-
sdkOptionsPath,
|
|
2280
|
-
sub: subConfigKey,
|
|
2281
|
-
});
|
|
2282
|
-
units.push({
|
|
2283
|
-
key: `sdk-types::${typeOutPath}`,
|
|
2284
|
-
fingerprint,
|
|
2285
|
-
render: () => {
|
|
2286
|
-
let content: string;
|
|
2287
|
-
if (config.zod) {
|
|
2288
|
-
content = generateContract(ast, {
|
|
2289
|
-
modelOutPaths: sdkModelOutPaths,
|
|
2290
|
-
currentOutPath: typeOutPath,
|
|
2291
|
-
modelsWithInput,
|
|
2292
|
-
modelsWithOutput,
|
|
2293
|
-
});
|
|
2294
|
-
} else {
|
|
2295
|
-
let rel = relative(dirname(typeOutPath), sdkOptionsPath).replace(/\.ts$/, '.js');
|
|
2296
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!rel.startsWith('.')) <span class="cstat-no" title="statement not covered" >rel = './' + rel;</span>
|
|
2297
|
-
content = generatePlainTypes(ast, {
|
|
2298
|
-
modelOutPaths: sdkModelOutPaths,
|
|
2299
|
-
currentOutPath: typeOutPath,
|
|
2300
|
-
modelsWithInput,
|
|
2301
|
-
modelsWithOutput,
|
|
2302
|
-
jsonValueImportPath: rel,
|
|
2303
|
-
});
|
|
2304
|
-
}
|
|
2305
|
-
return [{ relativePath: typeOutPath, content }];
|
|
2306
|
-
},
|
|
2307
|
-
});
|
|
2308
|
-
}
|
|
2309
|
-
|
|
2310
|
-
// ── Bucket op roots by area/subarea ──
|
|
2311
|
-
interface AreaBucket {
|
|
2312
|
-
leaves: { ast: OpRootNode; outPath: string; subarea: string }[];
|
|
2313
|
-
inlineRoots: OpRootNode[];
|
|
2314
|
-
}
|
|
2315
|
-
const areaBuckets = new Map<string, AreaBucket>();
|
|
2316
|
-
const topLevelEntries: { ast: OpRootNode; outPath: string }[] = [];
|
|
2317
|
-
|
|
2318
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (config.output?.clients) {
|
|
2319
|
-
for (const ast of inputs.opRoots) {
|
|
2320
|
-
const sdkOutPath = computeSdkOutPath(ast.file, sdkBase, config.output.clients, ckCommonRoot, ast.meta);
|
|
2321
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!sdkOutPath || !hasPublicOperations(ast, config.includeInternal)) <span class="cstat-no" title="statement not covered" >continue;</span>
|
|
2322
|
-
const { area, subarea } = getAreaSubarea(ast);
|
|
2323
|
-
if (area && subarea) {
|
|
2324
|
-
const bucket = areaBuckets.get(area) ?? { leaves: [], inlineRoots: [] };
|
|
2325
|
-
bucket.leaves.push({ ast, outPath: sdkOutPath, subarea });
|
|
2326
|
-
areaBuckets.set(area, bucket);
|
|
2327
|
-
} else if (area) {
|
|
2328
|
-
const bucket = areaBuckets.get(area) ?? { leaves: [], inlineRoots: [] };
|
|
2329
|
-
bucket.inlineRoots.push(ast);
|
|
2330
|
-
areaBuckets.set(area, bucket);
|
|
2331
|
-
} else {
|
|
2332
|
-
topLevelEntries.push({ ast, outPath: sdkOutPath });
|
|
2333
|
-
}
|
|
2334
|
-
}
|
|
2335
|
-
|
|
2336
|
-
// ── Per-leaf-client (area+subarea) units ──
|
|
2337
|
-
for (const [area, bucket] of areaBuckets.entries()) {
|
|
2338
|
-
for (const leaf of bucket.leaves) {
|
|
2339
|
-
const className = deriveSubareaClientClassName(area, leaf.subarea);
|
|
2340
|
-
sdkClientInfos.push({ outPath: leaf.outPath, className, propertyName: deriveSubareaPropertyName(leaf.subarea) });
|
|
2341
|
-
const refs = collectOpRootRefs(leaf.ast, modelMap);
|
|
2342
|
-
const fingerprint = hashFingerprint({
|
|
2343
|
-
kind: 'sdk-leaf-client',
|
|
2344
|
-
v: TYPESCRIPT_CODEGEN_VERSION,
|
|
2345
|
-
outPath: leaf.outPath,
|
|
2346
|
-
root: leaf.ast,
|
|
2347
|
-
outPathSlice: sliceOutPathMap(refs, sdkModelOutPaths, modelsWithInput, modelsWithOutput),
|
|
2348
|
-
modelsWithInput: sliceModelSet(refs, new Set(), modelsWithInput),
|
|
2349
|
-
modelsWithOutput: sliceModelSet(refs, new Set(), modelsWithOutput),
|
|
2350
|
-
sdkOptionsPath,
|
|
2351
|
-
className,
|
|
2352
|
-
includeInternal: config.includeInternal ?? false,
|
|
2353
|
-
sub: subConfigKey,
|
|
2354
|
-
});
|
|
2355
|
-
units.push({
|
|
2356
|
-
key: `sdk-leaf-client::${leaf.outPath}`,
|
|
2357
|
-
fingerprint,
|
|
2358
|
-
render: () => [
|
|
2359
|
-
{
|
|
2360
|
-
relativePath: leaf.outPath,
|
|
2361
|
-
content: generateSdk(leaf.ast, {
|
|
2362
|
-
typeImportPathTemplate: undefined,
|
|
2363
|
-
outPath: leaf.outPath,
|
|
2364
|
-
modelOutPaths: sdkModelOutPaths,
|
|
2365
|
-
sdkOptionsPath,
|
|
2366
|
-
modelsWithInput,
|
|
2367
|
-
modelsWithOutput,
|
|
2368
|
-
includeInternal: config.includeInternal,
|
|
2369
|
-
clientClassName: className,
|
|
2370
|
-
}),
|
|
2371
|
-
},
|
|
2372
|
-
],
|
|
2373
|
-
});
|
|
2374
|
-
}
|
|
2375
|
-
}
|
|
2376
|
-
|
|
2377
|
-
// ── Top-level (no area) client units ──
|
|
2378
|
-
for (const { ast, outPath } of topLevelEntries) {
|
|
2379
|
-
const className = deriveClientClassName(ast.file);
|
|
2380
|
-
sdkClientInfos.push({ outPath, className, propertyName: deriveClientPropertyName(ast.file) });
|
|
2381
|
-
const refs = collectOpRootRefs(ast, modelMap);
|
|
2382
|
-
const fingerprint = hashFingerprint({
|
|
2383
|
-
kind: 'sdk-top-client',
|
|
2384
|
-
v: TYPESCRIPT_CODEGEN_VERSION,
|
|
2385
|
-
outPath,
|
|
2386
|
-
root: ast,
|
|
2387
|
-
outPathSlice: sliceOutPathMap(refs, sdkModelOutPaths, modelsWithInput, modelsWithOutput),
|
|
2388
|
-
modelsWithInput: sliceModelSet(refs, new Set(), modelsWithInput),
|
|
2389
|
-
modelsWithOutput: sliceModelSet(refs, new Set(), modelsWithOutput),
|
|
2390
|
-
sdkOptionsPath,
|
|
2391
|
-
includeInternal: config.includeInternal ?? false,
|
|
2392
|
-
sub: subConfigKey,
|
|
2393
|
-
});
|
|
2394
|
-
units.push({
|
|
2395
|
-
key: `sdk-top-client::${outPath}`,
|
|
2396
|
-
fingerprint,
|
|
2397
|
-
render: () => [
|
|
2398
|
-
{
|
|
2399
|
-
relativePath: outPath,
|
|
2400
|
-
content: generateSdk(ast, {
|
|
2401
|
-
typeImportPathTemplate: undefined,
|
|
2402
|
-
outPath,
|
|
2403
|
-
modelOutPaths: sdkModelOutPaths,
|
|
2404
|
-
sdkOptionsPath,
|
|
2405
|
-
modelsWithInput,
|
|
2406
|
-
modelsWithOutput,
|
|
2407
|
-
includeInternal: config.includeInternal,
|
|
2408
|
-
}),
|
|
2409
|
-
},
|
|
2410
|
-
],
|
|
2411
|
-
});
|
|
2412
|
-
}
|
|
2413
|
-
}
|
|
2414
|
-
|
|
2415
|
-
// ── Global files: sdk-options, aggregator, barrels, root index ──
|
|
2416
|
-
// sdk-options.ts is a constant; the aggregator is small (just imports + a wrapper class)
|
|
2417
|
-
// and depends on the cross-cutting client list, so it's cheap to regenerate every run.
|
|
2418
|
-
// Per-area `<area>.client.ts` files are cached as their own units below.
|
|
2419
|
-
globalFiles.push({ relativePath: sdkOptionsPath, content: generateSdkOptions() });
|
|
2420
|
-
|
|
2421
|
-
const hasAnything = sdkClientInfos.length > 0 || areaBuckets.size > 0;
|
|
2422
|
-
const areaClientOutPaths = new Map<string, string>(); // area → absolute outPath of <area>.client.ts
|
|
2423
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (hasAnything) {
|
|
2424
|
-
const sdkEntryDir = dirname(sdkEntryPath);
|
|
2425
|
-
const sdkOptionsRel = relative(sdkEntryDir, sdkOptionsPath).replace(/\.ts$/, '.js');
|
|
2426
|
-
const sdkOptionsImportPath = sdkOptionsRel.startsWith('.') ? <span class="branch-0 cbranch-no" title="branch not covered" >sdkOptionsRel : '</span>./' + sdkOptionsRel;
|
|
2427
|
-
const sdkClassName = sdkName
|
|
2428
|
-
? sdkName
|
|
2429
|
-
.split(/[-._\s]+/)
|
|
2430
|
-
.map(s => s.charAt(0).toUpperCase() + s.slice(1))
|
|
2431
|
-
.join('') + 'Sdk'
|
|
2432
|
-
: 'Sdk';
|
|
2433
|
-
|
|
2434
|
-
const toClientImport = (sourceDir: string, info: { outPath: string; className: string; propertyName: string }): SdkClientInfo => {
|
|
2435
|
-
let rel = relative(sourceDir, info.outPath).replace(/\.ts$/, '.js');
|
|
2436
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (!rel.startsWith('.')) rel = './' + rel;
|
|
2437
|
-
return { className: info.className, propertyName: info.propertyName, importPath: rel };
|
|
2438
|
-
};
|
|
2439
|
-
|
|
2440
|
-
const topLevelClients: SdkClientInfo[] = topLevelEntries.map(e =>
|
|
2441
|
-
toClientImport(sdkEntryDir, {
|
|
2442
|
-
outPath: e.outPath,
|
|
2443
|
-
className: deriveClientClassName(e.ast.file),
|
|
2444
|
-
propertyName: deriveClientPropertyName(e.ast.file),
|
|
2445
|
-
}),
|
|
2446
|
-
);
|
|
2447
|
-
|
|
2448
|
-
// ── Per-area `<area>.client.ts` units ──
|
|
2449
|
-
const areaInfos: SdkAreaInfo[] = [];
|
|
2450
|
-
const sortedAreas = [...areaBuckets.entries()].sort(<span class="fstat-no" title="function not covered" >([</span>a], [b]) => <span class="cstat-no" title="statement not covered" >a.localeCompare(b));</span>
|
|
2451
|
-
for (const [area, bucket] of sortedAreas) {
|
|
2452
|
-
const areaClientOutPath = computeSdkAreaClientOutPath(area, sdkBase, config.output!.clients);
|
|
2453
|
-
areaClientOutPaths.set(area, areaClientOutPath);
|
|
2454
|
-
const areaClassName = deriveAreaClientClassName(area);
|
|
2455
|
-
const areaPropertyName = deriveAreaPropertyName(area);
|
|
2456
|
-
sdkClientInfos.push({ outPath: areaClientOutPath, className: areaClassName, propertyName: areaPropertyName });
|
|
2457
|
-
|
|
2458
|
-
const subareaClients = bucket.leaves
|
|
2459
|
-
.sort(<span class="fstat-no" title="function not covered" >(a</span>, b) => <span class="cstat-no" title="statement not covered" >a.subarea.localeCompare(b.subarea))</span>
|
|
2460
|
-
.map(l => ({
|
|
2461
|
-
propertyName: deriveSubareaPropertyName(l.subarea),
|
|
2462
|
-
client: toClientImport(dirname(areaClientOutPath), {
|
|
2463
|
-
outPath: l.outPath,
|
|
2464
|
-
className: deriveSubareaClientClassName(area, l.subarea),
|
|
2465
|
-
propertyName: deriveSubareaPropertyName(l.subarea),
|
|
2466
|
-
}),
|
|
2467
|
-
}));
|
|
2468
|
-
|
|
2469
|
-
// Fingerprint covers every input the area client depends on:
|
|
2470
|
-
// - all inline roots (full AST)
|
|
2471
|
-
// - subarea client metadata (className / propertyName / import path)
|
|
2472
|
-
// - the modelOutPaths slice for refs across all inline roots
|
|
2473
|
-
// - modelsWithInput/Output slices
|
|
2474
|
-
const allInlineRefs = new Set<string>();
|
|
2475
|
-
for (const r of bucket.inlineRoots) {
|
|
2476
|
-
for (const ref of collectOpRootRefs(r, modelMap)) <span class="cstat-no" title="statement not covered" >allInlineRefs.add(ref);</span>
|
|
2477
|
-
}
|
|
2478
|
-
const fingerprint = hashFingerprint({
|
|
2479
|
-
kind: 'sdk-area-client',
|
|
2480
|
-
v: TYPESCRIPT_CODEGEN_VERSION,
|
|
2481
|
-
outPath: areaClientOutPath,
|
|
2482
|
-
area,
|
|
2483
|
-
inlineRoots: bucket.inlineRoots,
|
|
2484
|
-
subareaClients,
|
|
2485
|
-
outPathSlice: sliceOutPathMap(allInlineRefs, sdkModelOutPaths, modelsWithInput, modelsWithOutput),
|
|
2486
|
-
modelsWithInput: sliceModelSet(allInlineRefs, new Set(), modelsWithInput),
|
|
2487
|
-
modelsWithOutput: sliceModelSet(allInlineRefs, new Set(), modelsWithOutput),
|
|
2488
|
-
sdkOptionsPath,
|
|
2489
|
-
includeInternal: config.includeInternal ?? false,
|
|
2490
|
-
sub: subConfigKey,
|
|
2491
|
-
});
|
|
2492
|
-
|
|
2493
|
-
const inlineFilesForGen = bucket.inlineRoots.map(root => ({
|
|
2494
|
-
root,
|
|
2495
|
-
codegenOptions: {
|
|
2496
|
-
typeImportPathTemplate: undefined,
|
|
2497
|
-
outPath: areaClientOutPath,
|
|
2498
|
-
modelOutPaths: sdkModelOutPaths,
|
|
2499
|
-
sdkOptionsPath,
|
|
2500
|
-
modelsWithInput,
|
|
2501
|
-
modelsWithOutput,
|
|
2502
|
-
includeInternal: config.includeInternal,
|
|
2503
|
-
},
|
|
2504
|
-
}));
|
|
2505
|
-
|
|
2506
|
-
units.push({
|
|
2507
|
-
key: `sdk-area-client::${areaClientOutPath}`,
|
|
2508
|
-
fingerprint,
|
|
2509
|
-
render: () => [
|
|
2510
|
-
{
|
|
2511
|
-
relativePath: areaClientOutPath,
|
|
2512
|
-
content: generateAreaClient({
|
|
2513
|
-
area,
|
|
2514
|
-
outPath: areaClientOutPath,
|
|
2515
|
-
inlineFiles: inlineFilesForGen,
|
|
2516
|
-
subareaClients,
|
|
2517
|
-
sdkOptionsPath,
|
|
2518
|
-
}),
|
|
2519
|
-
},
|
|
2520
|
-
],
|
|
2521
|
-
});
|
|
2522
|
-
|
|
2523
|
-
areaInfos.push({
|
|
2524
|
-
area,
|
|
2525
|
-
client: toClientImport(sdkEntryDir, { outPath: areaClientOutPath, className: areaClassName, propertyName: areaPropertyName }),
|
|
2526
|
-
});
|
|
2527
|
-
}
|
|
2528
|
-
|
|
2529
|
-
globalFiles.push({
|
|
2530
|
-
relativePath: sdkEntryPath,
|
|
2531
|
-
content: generateSdkAggregator({ topLevelClients, areas: areaInfos, sdkOptionsImportPath, sdkClassName }),
|
|
2532
|
-
});
|
|
2533
|
-
}
|
|
2534
|
-
|
|
2535
|
-
const sdkSrcDir = dirname(sdkEntryPath);
|
|
2536
|
-
const sdkTypeBarrels = generateBarrelFiles(sdkTypePaths);
|
|
2537
|
-
for (const barrel of sdkTypeBarrels) globalFiles.push({ relativePath: barrel.outPath, content: barrel.content });
|
|
2538
|
-
|
|
2539
|
-
const rootExports: string[] = [`export * from './${basename(sdkOptionsPath).replace(/\.ts$/, '.js')}';`];
|
|
2540
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (hasAnything) rootExports.push(`export * from './${basename(sdkEntryPath).replace(/\.ts$/, '.js')}';`);
|
|
2541
|
-
for (const c of sdkClientInfos) {
|
|
2542
|
-
let rel = relative(sdkSrcDir, c.outPath).replace(/\.ts$/, '.js');
|
|
2543
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (!rel.startsWith('.')) rel = './' + rel;
|
|
2544
|
-
rootExports.push(`export * from '${rel}';`);
|
|
2545
|
-
}
|
|
2546
|
-
for (const barrel of sdkTypeBarrels) {
|
|
2547
|
-
let rel = relative(sdkSrcDir, barrel.outPath).replace(/\.ts$/, '.js');
|
|
2548
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (!rel.startsWith('.')) rel = './' + rel;
|
|
2549
|
-
rootExports.push(`export * from '${rel}';`);
|
|
2550
|
-
}
|
|
2551
|
-
globalFiles.push({
|
|
2552
|
-
relativePath: join(sdkSrcDir, 'index.ts'),
|
|
2553
|
-
content: `// Auto-generated barrel file\n${rootExports.sort().join('\n')}\n`,
|
|
2554
|
-
});
|
|
2555
|
-
|
|
2556
|
-
// ── Scaffold files (opt-in, write-once) ──
|
|
2557
|
-
// Emitted at the SDK package root with `ifAbsent` so they're created once and
|
|
2558
|
-
// then owned by the user. Deps are derived from the contracts actually surfaced
|
|
2559
|
-
// into the SDK: zod when schema output is on, luxon when any covered model uses a
|
|
2560
|
-
// date/time/datetime/interval scalar.
|
|
2561
|
-
if (config.scaffold) {
|
|
2562
|
-
const coveredRoots = sdkContractEntries.map(e => e.ast);
|
|
2563
|
-
const deps: SdkScaffoldDeps = {
|
|
2564
|
-
zod: !!config.zod,
|
|
2565
|
-
luxon: coveredRoots.some(
|
|
2566
|
-
r => rootNeedsScalar(r, 'datetime') || rootNeedsScalar(r, 'date') || rootNeedsScalar(r, 'time') || rootNeedsScalar(r, 'interval'),
|
|
2567
|
-
),
|
|
2568
|
-
};
|
|
2569
|
-
globalFiles.push({
|
|
2570
|
-
relativePath: join(sdkBase, 'package.json'),
|
|
2571
|
-
content: generateSdkPackageJson({ name: sdkName ?? 'sdk', deps }),
|
|
2572
|
-
ifAbsent: true,
|
|
2573
|
-
});
|
|
2574
|
-
globalFiles.push({
|
|
2575
|
-
relativePath: join(sdkBase, 'tsconfig.json'),
|
|
2576
|
-
content: generateSdkTsconfig(),
|
|
2577
|
-
ifAbsent: true,
|
|
2578
|
-
});
|
|
2579
|
-
}
|
|
2580
|
-
}
|
|
2581
|
-
|
|
2582
|
-
// ─── Zod sub-generator ─────────────────────────────────────────────────────
|
|
2583
|
-
|
|
2584
|
-
function <span class="fstat-no" title="function not covered" >collectZodOutput(</span>
|
|
2585
|
-
config: ZodConfig,
|
|
2586
|
-
rootDir: string,
|
|
2587
|
-
inputs: Parameters<NonNullable<ContractKitPlugin['generateTargets']>>[0],
|
|
2588
|
-
units: IncrementalUnit[],
|
|
2589
|
-
): void {
|
|
2590
|
-
const <span class="cstat-no" title="statement not covered" >zodBase = resolve(rootDir, config.baseDir ?? '.');</span>
|
|
2591
|
-
const allFiles = <span class="cstat-no" title="statement not covered" >[...inputs.contractRoots.map(<span class="fstat-no" title="function not covered" >r => <span class="cstat-no" title="statement not covered" >r</span>.file)</span>, ...inputs.opRoots.map(<span class="fstat-no" title="function not covered" >r => <span class="cstat-no" title="statement not covered" >r</span>.file)</span>];</span>
|
|
2592
|
-
const <span class="cstat-no" title="statement not covered" >commonRoot = commonDir(allFiles, rootDir);</span>
|
|
2593
|
-
const modelsWithInput = <span class="cstat-no" title="statement not covered" >inputs.modelsWithInput </span>as Set<string>;
|
|
2594
|
-
const modelsWithOutput = <span class="cstat-no" title="statement not covered" >inputs.modelsWithOutput </span>as Set<string>;
|
|
2595
|
-
const modelMap = <span class="cstat-no" title="statement not covered" >buildModelMap(inputs.contractRoots);</span>
|
|
2596
|
-
const subConfigKey = <span class="cstat-no" title="statement not covered" >stableSubConfig(config);</span>
|
|
2597
|
-
|
|
2598
|
-
const modelOutPaths = <span class="cstat-no" title="statement not covered" >new Map<string, string>();</span>
|
|
2599
|
-
const entries: { ast: ContractRootNode; outPath: string }[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2600
|
-
<span class="cstat-no" title="statement not covered" > for (const ast of inputs.contractRoots) {</span>
|
|
2601
|
-
const <span class="cstat-no" title="statement not covered" >outPath = computeContractOutPath(ast.file, zodBase, config.output, '.schema.ts', commonRoot, ast.meta);</span>
|
|
2602
|
-
<span class="cstat-no" title="statement not covered" > entries.push({ ast, outPath });</span>
|
|
2603
|
-
<span class="cstat-no" title="statement not covered" > for (const model of ast.models) {</span>
|
|
2604
|
-
<span class="cstat-no" title="statement not covered" > modelOutPaths.set(model.name, outPath);</span>
|
|
2605
|
-
<span class="cstat-no" title="statement not covered" > if (modelsWithInput.has(model.name)) <span class="cstat-no" title="statement not covered" >modelOutPaths.set(`${model.name}Input`, outPath);</span></span>
|
|
2606
|
-
<span class="cstat-no" title="statement not covered" > if (modelsWithOutput.has(model.name)) <span class="cstat-no" title="statement not covered" >modelOutPaths.set(`${model.name}Output`, outPath);</span></span>
|
|
2607
|
-
}
|
|
2608
|
-
}
|
|
2609
|
-
|
|
2610
|
-
<span class="cstat-no" title="statement not covered" > for (const { ast, outPath } of entries) {</span>
|
|
2611
|
-
const refs = <span class="cstat-no" title="statement not covered" >collectContractRootRefs(ast, modelMap);</span>
|
|
2612
|
-
const ownNames = <span class="cstat-no" title="statement not covered" >new Set(ast.models.map(<span class="fstat-no" title="function not covered" >m => <span class="cstat-no" title="statement not covered" >m</span>.name)</span>);</span>
|
|
2613
|
-
const <span class="cstat-no" title="statement not covered" >fingerprint = hashFingerprint({</span>
|
|
2614
|
-
kind: 'zod',
|
|
2615
|
-
v: TYPESCRIPT_CODEGEN_VERSION,
|
|
2616
|
-
outPath,
|
|
2617
|
-
root: ast,
|
|
2618
|
-
outPathSlice: sliceOutPathMap(refs, modelOutPaths, modelsWithInput, modelsWithOutput),
|
|
2619
|
-
modelsWithInput: sliceModelSet(refs, ownNames, modelsWithInput),
|
|
2620
|
-
modelsWithOutput: sliceModelSet(refs, ownNames, modelsWithOutput),
|
|
2621
|
-
sub: subConfigKey,
|
|
2622
|
-
});
|
|
2623
|
-
<span class="cstat-no" title="statement not covered" > units.push({</span>
|
|
2624
|
-
key: `zod::${outPath}`,
|
|
2625
|
-
fingerprint,
|
|
2626
|
-
render: <span class="fstat-no" title="function not covered" >() => <span class="cstat-no" title="statement not covered" >[</span></span>
|
|
2627
|
-
{
|
|
2628
|
-
relativePath: outPath,
|
|
2629
|
-
content: generateContract(ast, { modelOutPaths, currentOutPath: outPath, modelsWithInput, modelsWithOutput }),
|
|
2630
|
-
},
|
|
2631
|
-
],
|
|
2632
|
-
});
|
|
2633
|
-
}
|
|
2634
|
-
}
|
|
2635
|
-
|
|
2636
|
-
// ─── Plain types sub-generator ─────────────────────────────────────────────
|
|
2637
|
-
|
|
2638
|
-
function <span class="fstat-no" title="function not covered" >collectTypesOutput(</span>
|
|
2639
|
-
config: TypesConfig,
|
|
2640
|
-
rootDir: string,
|
|
2641
|
-
inputs: Parameters<NonNullable<ContractKitPlugin['generateTargets']>>[0],
|
|
2642
|
-
units: IncrementalUnit[],
|
|
2643
|
-
): void {
|
|
2644
|
-
const <span class="cstat-no" title="statement not covered" >typesBase = resolve(rootDir, config.baseDir ?? '.');</span>
|
|
2645
|
-
const allFiles = <span class="cstat-no" title="statement not covered" >[...inputs.contractRoots.map(<span class="fstat-no" title="function not covered" >r => <span class="cstat-no" title="statement not covered" >r</span>.file)</span>, ...inputs.opRoots.map(<span class="fstat-no" title="function not covered" >r => <span class="cstat-no" title="statement not covered" >r</span>.file)</span>];</span>
|
|
2646
|
-
const <span class="cstat-no" title="statement not covered" >commonRoot = commonDir(allFiles, rootDir);</span>
|
|
2647
|
-
const modelsWithInput = <span class="cstat-no" title="statement not covered" >inputs.modelsWithInput </span>as Set<string>;
|
|
2648
|
-
const modelsWithOutput = <span class="cstat-no" title="statement not covered" >inputs.modelsWithOutput </span>as Set<string>;
|
|
2649
|
-
const modelMap = <span class="cstat-no" title="statement not covered" >buildModelMap(inputs.contractRoots);</span>
|
|
2650
|
-
const subConfigKey = <span class="cstat-no" title="statement not covered" >stableSubConfig(config);</span>
|
|
2651
|
-
|
|
2652
|
-
const modelOutPaths = <span class="cstat-no" title="statement not covered" >new Map<string, string>();</span>
|
|
2653
|
-
const entries: { ast: ContractRootNode; outPath: string }[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2654
|
-
<span class="cstat-no" title="statement not covered" > for (const ast of inputs.contractRoots) {</span>
|
|
2655
|
-
const <span class="cstat-no" title="statement not covered" >outPath = computeContractOutPath(ast.file, typesBase, config.output, '.types.ts', commonRoot, ast.meta);</span>
|
|
2656
|
-
<span class="cstat-no" title="statement not covered" > entries.push({ ast, outPath });</span>
|
|
2657
|
-
<span class="cstat-no" title="statement not covered" > for (const model of ast.models) {</span>
|
|
2658
|
-
<span class="cstat-no" title="statement not covered" > modelOutPaths.set(model.name, outPath);</span>
|
|
2659
|
-
<span class="cstat-no" title="statement not covered" > if (modelsWithInput.has(model.name)) <span class="cstat-no" title="statement not covered" >modelOutPaths.set(`${model.name}Input`, outPath);</span></span>
|
|
2660
|
-
<span class="cstat-no" title="statement not covered" > if (modelsWithOutput.has(model.name)) <span class="cstat-no" title="statement not covered" >modelOutPaths.set(`${model.name}Output`, outPath);</span></span>
|
|
2661
|
-
}
|
|
2662
|
-
}
|
|
2663
|
-
|
|
2664
|
-
<span class="cstat-no" title="statement not covered" > for (const { ast, outPath } of entries) {</span>
|
|
2665
|
-
const refs = <span class="cstat-no" title="statement not covered" >collectContractRootRefs(ast, modelMap);</span>
|
|
2666
|
-
const ownNames = <span class="cstat-no" title="statement not covered" >new Set(ast.models.map(<span class="fstat-no" title="function not covered" >m => <span class="cstat-no" title="statement not covered" >m</span>.name)</span>);</span>
|
|
2667
|
-
const <span class="cstat-no" title="statement not covered" >fingerprint = hashFingerprint({</span>
|
|
2668
|
-
kind: 'plain-types',
|
|
2669
|
-
v: TYPESCRIPT_CODEGEN_VERSION,
|
|
2670
|
-
outPath,
|
|
2671
|
-
root: ast,
|
|
2672
|
-
outPathSlice: sliceOutPathMap(refs, modelOutPaths, modelsWithInput, modelsWithOutput),
|
|
2673
|
-
modelsWithInput: sliceModelSet(refs, ownNames, modelsWithInput),
|
|
2674
|
-
modelsWithOutput: sliceModelSet(refs, ownNames, modelsWithOutput),
|
|
2675
|
-
sub: subConfigKey,
|
|
2676
|
-
});
|
|
2677
|
-
<span class="cstat-no" title="statement not covered" > units.push({</span>
|
|
2678
|
-
key: `plain-types::${outPath}`,
|
|
2679
|
-
fingerprint,
|
|
2680
|
-
render: <span class="fstat-no" title="function not covered" >() => <span class="cstat-no" title="statement not covered" >[</span></span>
|
|
2681
|
-
{
|
|
2682
|
-
relativePath: outPath,
|
|
2683
|
-
content: generatePlainTypes(ast, { modelOutPaths, currentOutPath: outPath, modelsWithInput, modelsWithOutput }),
|
|
2684
|
-
},
|
|
2685
|
-
],
|
|
2686
|
-
});
|
|
2687
|
-
}
|
|
2688
|
-
}
|
|
2689
|
-
|
|
2690
|
-
// ─── Manifest IO + cleanup ─────────────────────────────────────────────────
|
|
2691
|
-
|
|
2692
|
-
function readManifest(manifestPath: string): IncrementalManifest {
|
|
2693
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (!existsSync(manifestPath)) return emptyIncrementalManifest(TYPESCRIPT_CODEGEN_VERSION);
|
|
2694
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2695
|
-
<span class="cstat-no" title="statement not covered" > return parseIncrementalManifest(readFileSync(manifestPath, 'utf-8'));</span>
|
|
2696
|
-
} catch {
|
|
2697
|
-
<span class="cstat-no" title="statement not covered" > return emptyIncrementalManifest(TYPESCRIPT_CODEGEN_VERSION);</span>
|
|
2698
|
-
}
|
|
2699
|
-
}
|
|
2700
|
-
|
|
2701
|
-
/** Write the manifest to `manifestPath`. Creates parent dirs as needed. Errors are swallowed so a broken cache never blocks the build. */
|
|
2702
|
-
function writeManifest(manifestPath: string, manifest: IncrementalManifest): void {
|
|
2703
|
-
try {
|
|
2704
|
-
mkdirSync(dirname(manifestPath), { recursive: true });
|
|
2705
|
-
writeFileSync(manifestPath, serializeIncrementalManifest(manifest), 'utf-8');
|
|
2706
|
-
} catch {
|
|
2707
|
-
// best-effort
|
|
2708
|
-
}
|
|
2709
|
-
}
|
|
2710
|
-
|
|
2711
|
-
function deleteStalePaths(absPaths: string[]): void {
|
|
2712
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (absPaths.length === 0) return;
|
|
2713
|
-
const removedDirs = <span class="cstat-no" title="statement not covered" >new Set<string>();</span>
|
|
2714
|
-
<span class="cstat-no" title="statement not covered" > for (const abs of absPaths) {</span>
|
|
2715
|
-
<span class="cstat-no" title="statement not covered" > if (existsSync(abs)) {</span>
|
|
2716
|
-
<span class="cstat-no" title="statement not covered" > rmSync(abs, { force: true });</span>
|
|
2717
|
-
<span class="cstat-no" title="statement not covered" > removedDirs.add(dirname(abs));</span>
|
|
2718
|
-
}
|
|
2719
|
-
}
|
|
2720
|
-
// Walk up affected dirs and remove if empty. Bounded — stops at filesystem root or first non-empty dir.
|
|
2721
|
-
<span class="cstat-no" title="statement not covered" > for (const dir of removedDirs) {</span>
|
|
2722
|
-
let current = <span class="cstat-no" title="statement not covered" >dir;</span>
|
|
2723
|
-
<span class="cstat-no" title="statement not covered" > while (current.length > 1) {</span>
|
|
2724
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2725
|
-
<span class="cstat-no" title="statement not covered" > if (readdirSync(current).length === 0) {</span>
|
|
2726
|
-
<span class="cstat-no" title="statement not covered" > rmdirSync(current);</span>
|
|
2727
|
-
<span class="cstat-no" title="statement not covered" > current = dirname(current);</span>
|
|
2728
|
-
} else {
|
|
2729
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2730
|
-
}
|
|
2731
|
-
} catch {
|
|
2732
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2733
|
-
}
|
|
2734
|
-
}
|
|
2735
|
-
}
|
|
2736
|
-
}
|
|
2737
|
-
|
|
2738
|
-
/** Stringify a sub-config so it can participate in fingerprints. JSON.stringify gives stable output for typical config shapes. */
|
|
2739
|
-
function stableSubConfig(config: unknown): string {
|
|
2740
|
-
return JSON.stringify(config ?? <span class="branch-1 cbranch-no" title="branch not covered" >null);</span>
|
|
2741
|
-
}
|
|
2742
|
-
</pre></td></tr></table></pre>
|
|
2743
|
-
|
|
2744
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
2745
|
-
</div><!-- /wrapper -->
|
|
2746
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
2747
|
-
Code coverage generated by
|
|
2748
|
-
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2749
|
-
at 2026-07-07T16:24:11.130Z
|
|
2750
|
-
</div>
|
|
2751
|
-
<script src="../prettify.js"></script>
|
|
2752
|
-
<script>
|
|
2753
|
-
window.onload = function () {
|
|
2754
|
-
prettyPrint();
|
|
2755
|
-
};
|
|
2756
|
-
</script>
|
|
2757
|
-
<script src="../sorter.js"></script>
|
|
2758
|
-
<script src="../block-navigation.js"></script>
|
|
2759
|
-
</body>
|
|
2760
|
-
</html>
|
|
2761
|
-
|