@tomei/sso 0.64.0 → 0.64.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.
Files changed (65) hide show
  1. package/coverage/clover.xml +1380 -0
  2. package/coverage/coverage-final.json +39 -0
  3. package/coverage/lcov-report/base.css +224 -0
  4. package/coverage/lcov-report/block-navigation.js +87 -0
  5. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.repository.ts.html +160 -0
  6. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.ts.html +919 -0
  7. package/coverage/lcov-report/components/group-object-privilege/index.html +131 -0
  8. package/coverage/lcov-report/components/group-privilege/group-privilege.repository.ts.html +172 -0
  9. package/coverage/lcov-report/components/group-privilege/group-privilege.ts.html +337 -0
  10. package/coverage/lcov-report/components/group-privilege/index.html +131 -0
  11. package/coverage/lcov-report/components/group-system-access/group-system-access.repository.ts.html +214 -0
  12. package/coverage/lcov-report/components/group-system-access/group-system-access.ts.html +355 -0
  13. package/coverage/lcov-report/components/group-system-access/index.html +131 -0
  14. package/coverage/lcov-report/components/password-hash/index.html +116 -0
  15. package/coverage/lcov-report/components/password-hash/password-hash.service.ts.html +127 -0
  16. package/coverage/lcov-report/components/system-privilege/index.html +116 -0
  17. package/coverage/lcov-report/components/system-privilege/system-privilege.repository.ts.html +139 -0
  18. package/coverage/lcov-report/components/user-group/index.html +131 -0
  19. package/coverage/lcov-report/components/user-group/user-group.repository.ts.html +142 -0
  20. package/coverage/lcov-report/components/user-group/user-group.ts.html +2377 -0
  21. package/coverage/lcov-report/components/user-object-privilege/index.html +131 -0
  22. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.repository.ts.html +118 -0
  23. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.ts.html +322 -0
  24. package/coverage/lcov-report/components/user-privilege/index.html +131 -0
  25. package/coverage/lcov-report/components/user-privilege/user-privilege.repository.ts.html +160 -0
  26. package/coverage/lcov-report/components/user-privilege/user-privilege.ts.html +2071 -0
  27. package/coverage/lcov-report/components/user-system-access/index.html +131 -0
  28. package/coverage/lcov-report/components/user-system-access/user-system-access.repository.ts.html +208 -0
  29. package/coverage/lcov-report/components/user-system-access/user-system-access.ts.html +2236 -0
  30. package/coverage/lcov-report/enum/api-key.enum.ts.html +100 -0
  31. package/coverage/lcov-report/enum/group-type.enum.ts.html +109 -0
  32. package/coverage/lcov-report/enum/index.html +206 -0
  33. package/coverage/lcov-report/enum/index.ts.html +103 -0
  34. package/coverage/lcov-report/enum/login-status.enum.ts.html +97 -0
  35. package/coverage/lcov-report/enum/object-status.enum.ts.html +97 -0
  36. package/coverage/lcov-report/enum/user-status.enum.ts.html +106 -0
  37. package/coverage/lcov-report/enum/yn.enum.ts.html +97 -0
  38. package/coverage/lcov-report/favicon.png +0 -0
  39. package/coverage/lcov-report/index.html +296 -0
  40. package/coverage/lcov-report/models/group-object-privilege.entity.ts.html +358 -0
  41. package/coverage/lcov-report/models/group-privilege.entity.ts.html +319 -0
  42. package/coverage/lcov-report/models/group-reporting-user.entity.ts.html +370 -0
  43. package/coverage/lcov-report/models/group-system-access.entity.ts.html +328 -0
  44. package/coverage/lcov-report/models/group.entity.ts.html +466 -0
  45. package/coverage/lcov-report/models/index.html +296 -0
  46. package/coverage/lcov-report/models/staff.entity.ts.html +358 -0
  47. package/coverage/lcov-report/models/system-privilege.entity.ts.html +355 -0
  48. package/coverage/lcov-report/models/system.entity.ts.html +424 -0
  49. package/coverage/lcov-report/models/user-group.entity.ts.html +358 -0
  50. package/coverage/lcov-report/models/user-object-privilege.entity.ts.html +355 -0
  51. package/coverage/lcov-report/models/user-privilege.entity.ts.html +319 -0
  52. package/coverage/lcov-report/models/user-system-access.entity.ts.html +346 -0
  53. package/coverage/lcov-report/models/user.entity.ts.html +685 -0
  54. package/coverage/lcov-report/prettify.css +1 -0
  55. package/coverage/lcov-report/prettify.js +2 -0
  56. package/coverage/lcov-report/redis-client/index.html +116 -0
  57. package/coverage/lcov-report/redis-client/redis.service.ts.html +310 -0
  58. package/coverage/lcov-report/session/index.html +116 -0
  59. package/coverage/lcov-report/session/session.service.ts.html +373 -0
  60. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  61. package/coverage/lcov-report/sorter.js +210 -0
  62. package/coverage/lcov.info +2223 -0
  63. package/coverage/test-report.xml +71 -0
  64. package/dist/tsconfig.tsbuildinfo +1 -1
  65. package/package.json +8 -8
@@ -0,0 +1,2377 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for components/user-group/user-group.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">components/user-group</a> user-group.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">28.74% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>48/167</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">13.15% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>5/38</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">42.85% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>6/14</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">28.74% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>48/167</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
627
+ <a name='L562'></a><a href='#L562'>562</a>
628
+ <a name='L563'></a><a href='#L563'>563</a>
629
+ <a name='L564'></a><a href='#L564'>564</a>
630
+ <a name='L565'></a><a href='#L565'>565</a>
631
+ <a name='L566'></a><a href='#L566'>566</a>
632
+ <a name='L567'></a><a href='#L567'>567</a>
633
+ <a name='L568'></a><a href='#L568'>568</a>
634
+ <a name='L569'></a><a href='#L569'>569</a>
635
+ <a name='L570'></a><a href='#L570'>570</a>
636
+ <a name='L571'></a><a href='#L571'>571</a>
637
+ <a name='L572'></a><a href='#L572'>572</a>
638
+ <a name='L573'></a><a href='#L573'>573</a>
639
+ <a name='L574'></a><a href='#L574'>574</a>
640
+ <a name='L575'></a><a href='#L575'>575</a>
641
+ <a name='L576'></a><a href='#L576'>576</a>
642
+ <a name='L577'></a><a href='#L577'>577</a>
643
+ <a name='L578'></a><a href='#L578'>578</a>
644
+ <a name='L579'></a><a href='#L579'>579</a>
645
+ <a name='L580'></a><a href='#L580'>580</a>
646
+ <a name='L581'></a><a href='#L581'>581</a>
647
+ <a name='L582'></a><a href='#L582'>582</a>
648
+ <a name='L583'></a><a href='#L583'>583</a>
649
+ <a name='L584'></a><a href='#L584'>584</a>
650
+ <a name='L585'></a><a href='#L585'>585</a>
651
+ <a name='L586'></a><a href='#L586'>586</a>
652
+ <a name='L587'></a><a href='#L587'>587</a>
653
+ <a name='L588'></a><a href='#L588'>588</a>
654
+ <a name='L589'></a><a href='#L589'>589</a>
655
+ <a name='L590'></a><a href='#L590'>590</a>
656
+ <a name='L591'></a><a href='#L591'>591</a>
657
+ <a name='L592'></a><a href='#L592'>592</a>
658
+ <a name='L593'></a><a href='#L593'>593</a>
659
+ <a name='L594'></a><a href='#L594'>594</a>
660
+ <a name='L595'></a><a href='#L595'>595</a>
661
+ <a name='L596'></a><a href='#L596'>596</a>
662
+ <a name='L597'></a><a href='#L597'>597</a>
663
+ <a name='L598'></a><a href='#L598'>598</a>
664
+ <a name='L599'></a><a href='#L599'>599</a>
665
+ <a name='L600'></a><a href='#L600'>600</a>
666
+ <a name='L601'></a><a href='#L601'>601</a>
667
+ <a name='L602'></a><a href='#L602'>602</a>
668
+ <a name='L603'></a><a href='#L603'>603</a>
669
+ <a name='L604'></a><a href='#L604'>604</a>
670
+ <a name='L605'></a><a href='#L605'>605</a>
671
+ <a name='L606'></a><a href='#L606'>606</a>
672
+ <a name='L607'></a><a href='#L607'>607</a>
673
+ <a name='L608'></a><a href='#L608'>608</a>
674
+ <a name='L609'></a><a href='#L609'>609</a>
675
+ <a name='L610'></a><a href='#L610'>610</a>
676
+ <a name='L611'></a><a href='#L611'>611</a>
677
+ <a name='L612'></a><a href='#L612'>612</a>
678
+ <a name='L613'></a><a href='#L613'>613</a>
679
+ <a name='L614'></a><a href='#L614'>614</a>
680
+ <a name='L615'></a><a href='#L615'>615</a>
681
+ <a name='L616'></a><a href='#L616'>616</a>
682
+ <a name='L617'></a><a href='#L617'>617</a>
683
+ <a name='L618'></a><a href='#L618'>618</a>
684
+ <a name='L619'></a><a href='#L619'>619</a>
685
+ <a name='L620'></a><a href='#L620'>620</a>
686
+ <a name='L621'></a><a href='#L621'>621</a>
687
+ <a name='L622'></a><a href='#L622'>622</a>
688
+ <a name='L623'></a><a href='#L623'>623</a>
689
+ <a name='L624'></a><a href='#L624'>624</a>
690
+ <a name='L625'></a><a href='#L625'>625</a>
691
+ <a name='L626'></a><a href='#L626'>626</a>
692
+ <a name='L627'></a><a href='#L627'>627</a>
693
+ <a name='L628'></a><a href='#L628'>628</a>
694
+ <a name='L629'></a><a href='#L629'>629</a>
695
+ <a name='L630'></a><a href='#L630'>630</a>
696
+ <a name='L631'></a><a href='#L631'>631</a>
697
+ <a name='L632'></a><a href='#L632'>632</a>
698
+ <a name='L633'></a><a href='#L633'>633</a>
699
+ <a name='L634'></a><a href='#L634'>634</a>
700
+ <a name='L635'></a><a href='#L635'>635</a>
701
+ <a name='L636'></a><a href='#L636'>636</a>
702
+ <a name='L637'></a><a href='#L637'>637</a>
703
+ <a name='L638'></a><a href='#L638'>638</a>
704
+ <a name='L639'></a><a href='#L639'>639</a>
705
+ <a name='L640'></a><a href='#L640'>640</a>
706
+ <a name='L641'></a><a href='#L641'>641</a>
707
+ <a name='L642'></a><a href='#L642'>642</a>
708
+ <a name='L643'></a><a href='#L643'>643</a>
709
+ <a name='L644'></a><a href='#L644'>644</a>
710
+ <a name='L645'></a><a href='#L645'>645</a>
711
+ <a name='L646'></a><a href='#L646'>646</a>
712
+ <a name='L647'></a><a href='#L647'>647</a>
713
+ <a name='L648'></a><a href='#L648'>648</a>
714
+ <a name='L649'></a><a href='#L649'>649</a>
715
+ <a name='L650'></a><a href='#L650'>650</a>
716
+ <a name='L651'></a><a href='#L651'>651</a>
717
+ <a name='L652'></a><a href='#L652'>652</a>
718
+ <a name='L653'></a><a href='#L653'>653</a>
719
+ <a name='L654'></a><a href='#L654'>654</a>
720
+ <a name='L655'></a><a href='#L655'>655</a>
721
+ <a name='L656'></a><a href='#L656'>656</a>
722
+ <a name='L657'></a><a href='#L657'>657</a>
723
+ <a name='L658'></a><a href='#L658'>658</a>
724
+ <a name='L659'></a><a href='#L659'>659</a>
725
+ <a name='L660'></a><a href='#L660'>660</a>
726
+ <a name='L661'></a><a href='#L661'>661</a>
727
+ <a name='L662'></a><a href='#L662'>662</a>
728
+ <a name='L663'></a><a href='#L663'>663</a>
729
+ <a name='L664'></a><a href='#L664'>664</a>
730
+ <a name='L665'></a><a href='#L665'>665</a>
731
+ <a name='L666'></a><a href='#L666'>666</a>
732
+ <a name='L667'></a><a href='#L667'>667</a>
733
+ <a name='L668'></a><a href='#L668'>668</a>
734
+ <a name='L669'></a><a href='#L669'>669</a>
735
+ <a name='L670'></a><a href='#L670'>670</a>
736
+ <a name='L671'></a><a href='#L671'>671</a>
737
+ <a name='L672'></a><a href='#L672'>672</a>
738
+ <a name='L673'></a><a href='#L673'>673</a>
739
+ <a name='L674'></a><a href='#L674'>674</a>
740
+ <a name='L675'></a><a href='#L675'>675</a>
741
+ <a name='L676'></a><a href='#L676'>676</a>
742
+ <a name='L677'></a><a href='#L677'>677</a>
743
+ <a name='L678'></a><a href='#L678'>678</a>
744
+ <a name='L679'></a><a href='#L679'>679</a>
745
+ <a name='L680'></a><a href='#L680'>680</a>
746
+ <a name='L681'></a><a href='#L681'>681</a>
747
+ <a name='L682'></a><a href='#L682'>682</a>
748
+ <a name='L683'></a><a href='#L683'>683</a>
749
+ <a name='L684'></a><a href='#L684'>684</a>
750
+ <a name='L685'></a><a href='#L685'>685</a>
751
+ <a name='L686'></a><a href='#L686'>686</a>
752
+ <a name='L687'></a><a href='#L687'>687</a>
753
+ <a name='L688'></a><a href='#L688'>688</a>
754
+ <a name='L689'></a><a href='#L689'>689</a>
755
+ <a name='L690'></a><a href='#L690'>690</a>
756
+ <a name='L691'></a><a href='#L691'>691</a>
757
+ <a name='L692'></a><a href='#L692'>692</a>
758
+ <a name='L693'></a><a href='#L693'>693</a>
759
+ <a name='L694'></a><a href='#L694'>694</a>
760
+ <a name='L695'></a><a href='#L695'>695</a>
761
+ <a name='L696'></a><a href='#L696'>696</a>
762
+ <a name='L697'></a><a href='#L697'>697</a>
763
+ <a name='L698'></a><a href='#L698'>698</a>
764
+ <a name='L699'></a><a href='#L699'>699</a>
765
+ <a name='L700'></a><a href='#L700'>700</a>
766
+ <a name='L701'></a><a href='#L701'>701</a>
767
+ <a name='L702'></a><a href='#L702'>702</a>
768
+ <a name='L703'></a><a href='#L703'>703</a>
769
+ <a name='L704'></a><a href='#L704'>704</a>
770
+ <a name='L705'></a><a href='#L705'>705</a>
771
+ <a name='L706'></a><a href='#L706'>706</a>
772
+ <a name='L707'></a><a href='#L707'>707</a>
773
+ <a name='L708'></a><a href='#L708'>708</a>
774
+ <a name='L709'></a><a href='#L709'>709</a>
775
+ <a name='L710'></a><a href='#L710'>710</a>
776
+ <a name='L711'></a><a href='#L711'>711</a>
777
+ <a name='L712'></a><a href='#L712'>712</a>
778
+ <a name='L713'></a><a href='#L713'>713</a>
779
+ <a name='L714'></a><a href='#L714'>714</a>
780
+ <a name='L715'></a><a href='#L715'>715</a>
781
+ <a name='L716'></a><a href='#L716'>716</a>
782
+ <a name='L717'></a><a href='#L717'>717</a>
783
+ <a name='L718'></a><a href='#L718'>718</a>
784
+ <a name='L719'></a><a href='#L719'>719</a>
785
+ <a name='L720'></a><a href='#L720'>720</a>
786
+ <a name='L721'></a><a href='#L721'>721</a>
787
+ <a name='L722'></a><a href='#L722'>722</a>
788
+ <a name='L723'></a><a href='#L723'>723</a>
789
+ <a name='L724'></a><a href='#L724'>724</a>
790
+ <a name='L725'></a><a href='#L725'>725</a>
791
+ <a name='L726'></a><a href='#L726'>726</a>
792
+ <a name='L727'></a><a href='#L727'>727</a>
793
+ <a name='L728'></a><a href='#L728'>728</a>
794
+ <a name='L729'></a><a href='#L729'>729</a>
795
+ <a name='L730'></a><a href='#L730'>730</a>
796
+ <a name='L731'></a><a href='#L731'>731</a>
797
+ <a name='L732'></a><a href='#L732'>732</a>
798
+ <a name='L733'></a><a href='#L733'>733</a>
799
+ <a name='L734'></a><a href='#L734'>734</a>
800
+ <a name='L735'></a><a href='#L735'>735</a>
801
+ <a name='L736'></a><a href='#L736'>736</a>
802
+ <a name='L737'></a><a href='#L737'>737</a>
803
+ <a name='L738'></a><a href='#L738'>738</a>
804
+ <a name='L739'></a><a href='#L739'>739</a>
805
+ <a name='L740'></a><a href='#L740'>740</a>
806
+ <a name='L741'></a><a href='#L741'>741</a>
807
+ <a name='L742'></a><a href='#L742'>742</a>
808
+ <a name='L743'></a><a href='#L743'>743</a>
809
+ <a name='L744'></a><a href='#L744'>744</a>
810
+ <a name='L745'></a><a href='#L745'>745</a>
811
+ <a name='L746'></a><a href='#L746'>746</a>
812
+ <a name='L747'></a><a href='#L747'>747</a>
813
+ <a name='L748'></a><a href='#L748'>748</a>
814
+ <a name='L749'></a><a href='#L749'>749</a>
815
+ <a name='L750'></a><a href='#L750'>750</a>
816
+ <a name='L751'></a><a href='#L751'>751</a>
817
+ <a name='L752'></a><a href='#L752'>752</a>
818
+ <a name='L753'></a><a href='#L753'>753</a>
819
+ <a name='L754'></a><a href='#L754'>754</a>
820
+ <a name='L755'></a><a href='#L755'>755</a>
821
+ <a name='L756'></a><a href='#L756'>756</a>
822
+ <a name='L757'></a><a href='#L757'>757</a>
823
+ <a name='L758'></a><a href='#L758'>758</a>
824
+ <a name='L759'></a><a href='#L759'>759</a>
825
+ <a name='L760'></a><a href='#L760'>760</a>
826
+ <a name='L761'></a><a href='#L761'>761</a>
827
+ <a name='L762'></a><a href='#L762'>762</a>
828
+ <a name='L763'></a><a href='#L763'>763</a>
829
+ <a name='L764'></a><a href='#L764'>764</a>
830
+ <a name='L765'></a><a href='#L765'>765</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
831
+ <span class="cline-any cline-yes">1x</span>
832
+ <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-neutral">&nbsp;</span>
834
+ <span class="cline-any cline-neutral">&nbsp;</span>
835
+ <span class="cline-any cline-yes">1x</span>
836
+ <span class="cline-any cline-yes">1x</span>
837
+ <span class="cline-any cline-yes">1x</span>
838
+ <span class="cline-any cline-yes">1x</span>
839
+ <span class="cline-any cline-yes">1x</span>
840
+ <span class="cline-any cline-yes">1x</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</span>
843
+ <span class="cline-any cline-yes">1x</span>
844
+ <span class="cline-any cline-yes">5x</span>
845
+ <span class="cline-any cline-yes">5x</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-neutral">&nbsp;</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
849
+ <span class="cline-any cline-neutral">&nbsp;</span>
850
+ <span class="cline-any cline-neutral">&nbsp;</span>
851
+ <span class="cline-any cline-yes">5x</span>
852
+ <span class="cline-any cline-yes">5x</span>
853
+ <span class="cline-any cline-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-neutral">&nbsp;</span>
855
+ <span class="cline-any cline-neutral">&nbsp;</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-neutral">&nbsp;</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-yes">1x</span>
860
+ <span class="cline-any cline-neutral">&nbsp;</span>
861
+ <span class="cline-any cline-neutral">&nbsp;</span>
862
+ <span class="cline-any cline-yes">2x</span>
863
+ <span class="cline-any cline-neutral">&nbsp;</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-yes">2x</span>
867
+ <span class="cline-any cline-neutral">&nbsp;</span>
868
+ <span class="cline-any cline-neutral">&nbsp;</span>
869
+ <span class="cline-any cline-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-yes">2x</span>
871
+ <span class="cline-any cline-neutral">&nbsp;</span>
872
+ <span class="cline-any cline-neutral">&nbsp;</span>
873
+ <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-yes">2x</span>
875
+ <span class="cline-any cline-neutral">&nbsp;</span>
876
+ <span class="cline-any cline-neutral">&nbsp;</span>
877
+ <span class="cline-any cline-neutral">&nbsp;</span>
878
+ <span class="cline-any cline-yes">5x</span>
879
+ <span class="cline-any cline-yes">5x</span>
880
+ <span class="cline-any cline-yes">3x</span>
881
+ <span class="cline-any cline-yes">3x</span>
882
+ <span class="cline-any cline-yes">3x</span>
883
+ <span class="cline-any cline-yes">3x</span>
884
+ <span class="cline-any cline-yes">3x</span>
885
+ <span class="cline-any cline-yes">3x</span>
886
+ <span class="cline-any cline-neutral">&nbsp;</span>
887
+ <span class="cline-any cline-yes">3x</span>
888
+ <span class="cline-any cline-yes">3x</span>
889
+ <span class="cline-any cline-yes">3x</span>
890
+ <span class="cline-any cline-yes">3x</span>
891
+ <span class="cline-any cline-neutral">&nbsp;</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-neutral">&nbsp;</span>
894
+ <span class="cline-any cline-neutral">&nbsp;</span>
895
+ <span class="cline-any cline-yes">2x</span>
896
+ <span class="cline-any cline-yes">2x</span>
897
+ <span class="cline-any cline-yes">2x</span>
898
+ <span class="cline-any cline-yes">2x</span>
899
+ <span class="cline-any cline-neutral">&nbsp;</span>
900
+ <span class="cline-any cline-neutral">&nbsp;</span>
901
+ <span class="cline-any cline-neutral">&nbsp;</span>
902
+ <span class="cline-any cline-yes">2x</span>
903
+ <span class="cline-any cline-yes">1x</span>
904
+ <span class="cline-any cline-yes">1x</span>
905
+ <span class="cline-any cline-yes">1x</span>
906
+ <span class="cline-any cline-yes">1x</span>
907
+ <span class="cline-any cline-yes">1x</span>
908
+ <span class="cline-any cline-neutral">&nbsp;</span>
909
+ <span class="cline-any cline-yes">1x</span>
910
+ <span class="cline-any cline-neutral">&nbsp;</span>
911
+ <span class="cline-any cline-yes">1x</span>
912
+ <span class="cline-any cline-yes">1x</span>
913
+ <span class="cline-any cline-yes">1x</span>
914
+ <span class="cline-any cline-yes">1x</span>
915
+ <span class="cline-any cline-neutral">&nbsp;</span>
916
+ <span class="cline-any cline-yes">1x</span>
917
+ <span class="cline-any cline-neutral">&nbsp;</span>
918
+ <span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-neutral">&nbsp;</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-neutral">&nbsp;</span>
923
+ <span class="cline-any cline-yes">1x</span>
924
+ <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-yes">1x</span>
926
+ <span class="cline-any cline-neutral">&nbsp;</span>
927
+ <span class="cline-any cline-neutral">&nbsp;</span>
928
+ <span class="cline-any cline-neutral">&nbsp;</span>
929
+ <span class="cline-any cline-neutral">&nbsp;</span>
930
+ <span class="cline-any cline-neutral">&nbsp;</span>
931
+ <span class="cline-any cline-neutral">&nbsp;</span>
932
+ <span class="cline-any cline-neutral">&nbsp;</span>
933
+ <span class="cline-any cline-neutral">&nbsp;</span>
934
+ <span class="cline-any cline-neutral">&nbsp;</span>
935
+ <span class="cline-any cline-neutral">&nbsp;</span>
936
+ <span class="cline-any cline-no">&nbsp;</span>
937
+ <span class="cline-any cline-neutral">&nbsp;</span>
938
+ <span class="cline-any cline-neutral">&nbsp;</span>
939
+ <span class="cline-any cline-neutral">&nbsp;</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
941
+ <span class="cline-any cline-neutral">&nbsp;</span>
942
+ <span class="cline-any cline-no">&nbsp;</span>
943
+ <span class="cline-any cline-no">&nbsp;</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-neutral">&nbsp;</span>
946
+ <span class="cline-any cline-neutral">&nbsp;</span>
947
+ <span class="cline-any cline-neutral">&nbsp;</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-no">&nbsp;</span>
950
+ <span class="cline-any cline-no">&nbsp;</span>
951
+ <span class="cline-any cline-neutral">&nbsp;</span>
952
+ <span class="cline-any cline-neutral">&nbsp;</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-neutral">&nbsp;</span>
955
+ <span class="cline-any cline-neutral">&nbsp;</span>
956
+ <span class="cline-any cline-neutral">&nbsp;</span>
957
+ <span class="cline-any cline-neutral">&nbsp;</span>
958
+ <span class="cline-any cline-neutral">&nbsp;</span>
959
+ <span class="cline-any cline-neutral">&nbsp;</span>
960
+ <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-neutral">&nbsp;</span>
962
+ <span class="cline-any cline-neutral">&nbsp;</span>
963
+ <span class="cline-any cline-no">&nbsp;</span>
964
+ <span class="cline-any cline-no">&nbsp;</span>
965
+ <span class="cline-any cline-neutral">&nbsp;</span>
966
+ <span class="cline-any cline-neutral">&nbsp;</span>
967
+ <span class="cline-any cline-neutral">&nbsp;</span>
968
+ <span class="cline-any cline-neutral">&nbsp;</span>
969
+ <span class="cline-any cline-neutral">&nbsp;</span>
970
+ <span class="cline-any cline-neutral">&nbsp;</span>
971
+ <span class="cline-any cline-neutral">&nbsp;</span>
972
+ <span class="cline-any cline-neutral">&nbsp;</span>
973
+ <span class="cline-any cline-neutral">&nbsp;</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-neutral">&nbsp;</span>
976
+ <span class="cline-any cline-no">&nbsp;</span>
977
+ <span class="cline-any cline-no">&nbsp;</span>
978
+ <span class="cline-any cline-neutral">&nbsp;</span>
979
+ <span class="cline-any cline-neutral">&nbsp;</span>
980
+ <span class="cline-any cline-neutral">&nbsp;</span>
981
+ <span class="cline-any cline-neutral">&nbsp;</span>
982
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
+ <span class="cline-any cline-neutral">&nbsp;</span>
984
+ <span class="cline-any cline-neutral">&nbsp;</span>
985
+ <span class="cline-any cline-neutral">&nbsp;</span>
986
+ <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-neutral">&nbsp;</span>
989
+ <span class="cline-any cline-no">&nbsp;</span>
990
+ <span class="cline-any cline-neutral">&nbsp;</span>
991
+ <span class="cline-any cline-neutral">&nbsp;</span>
992
+ <span class="cline-any cline-neutral">&nbsp;</span>
993
+ <span class="cline-any cline-neutral">&nbsp;</span>
994
+ <span class="cline-any cline-neutral">&nbsp;</span>
995
+ <span class="cline-any cline-neutral">&nbsp;</span>
996
+ <span class="cline-any cline-no">&nbsp;</span>
997
+ <span class="cline-any cline-no">&nbsp;</span>
998
+ <span class="cline-any cline-neutral">&nbsp;</span>
999
+ <span class="cline-any cline-neutral">&nbsp;</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-neutral">&nbsp;</span>
1002
+ <span class="cline-any cline-neutral">&nbsp;</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
+ <span class="cline-any cline-neutral">&nbsp;</span>
1006
+ <span class="cline-any cline-neutral">&nbsp;</span>
1007
+ <span class="cline-any cline-neutral">&nbsp;</span>
1008
+ <span class="cline-any cline-neutral">&nbsp;</span>
1009
+ <span class="cline-any cline-neutral">&nbsp;</span>
1010
+ <span class="cline-any cline-no">&nbsp;</span>
1011
+ <span class="cline-any cline-no">&nbsp;</span>
1012
+ <span class="cline-any cline-no">&nbsp;</span>
1013
+ <span class="cline-any cline-no">&nbsp;</span>
1014
+ <span class="cline-any cline-no">&nbsp;</span>
1015
+ <span class="cline-any cline-no">&nbsp;</span>
1016
+ <span class="cline-any cline-no">&nbsp;</span>
1017
+ <span class="cline-any cline-neutral">&nbsp;</span>
1018
+ <span class="cline-any cline-neutral">&nbsp;</span>
1019
+ <span class="cline-any cline-neutral">&nbsp;</span>
1020
+ <span class="cline-any cline-neutral">&nbsp;</span>
1021
+ <span class="cline-any cline-neutral">&nbsp;</span>
1022
+ <span class="cline-any cline-no">&nbsp;</span>
1023
+ <span class="cline-any cline-neutral">&nbsp;</span>
1024
+ <span class="cline-any cline-neutral">&nbsp;</span>
1025
+ <span class="cline-any cline-neutral">&nbsp;</span>
1026
+ <span class="cline-any cline-neutral">&nbsp;</span>
1027
+ <span class="cline-any cline-neutral">&nbsp;</span>
1028
+ <span class="cline-any cline-neutral">&nbsp;</span>
1029
+ <span class="cline-any cline-neutral">&nbsp;</span>
1030
+ <span class="cline-any cline-neutral">&nbsp;</span>
1031
+ <span class="cline-any cline-neutral">&nbsp;</span>
1032
+ <span class="cline-any cline-neutral">&nbsp;</span>
1033
+ <span class="cline-any cline-neutral">&nbsp;</span>
1034
+ <span class="cline-any cline-neutral">&nbsp;</span>
1035
+ <span class="cline-any cline-neutral">&nbsp;</span>
1036
+ <span class="cline-any cline-neutral">&nbsp;</span>
1037
+ <span class="cline-any cline-neutral">&nbsp;</span>
1038
+ <span class="cline-any cline-neutral">&nbsp;</span>
1039
+ <span class="cline-any cline-no">&nbsp;</span>
1040
+ <span class="cline-any cline-neutral">&nbsp;</span>
1041
+ <span class="cline-any cline-neutral">&nbsp;</span>
1042
+ <span class="cline-any cline-neutral">&nbsp;</span>
1043
+ <span class="cline-any cline-no">&nbsp;</span>
1044
+ <span class="cline-any cline-neutral">&nbsp;</span>
1045
+ <span class="cline-any cline-neutral">&nbsp;</span>
1046
+ <span class="cline-any cline-neutral">&nbsp;</span>
1047
+ <span class="cline-any cline-neutral">&nbsp;</span>
1048
+ <span class="cline-any cline-neutral">&nbsp;</span>
1049
+ <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-neutral">&nbsp;</span>
1051
+ <span class="cline-any cline-neutral">&nbsp;</span>
1052
+ <span class="cline-any cline-neutral">&nbsp;</span>
1053
+ <span class="cline-any cline-neutral">&nbsp;</span>
1054
+ <span class="cline-any cline-neutral">&nbsp;</span>
1055
+ <span class="cline-any cline-neutral">&nbsp;</span>
1056
+ <span class="cline-any cline-neutral">&nbsp;</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-neutral">&nbsp;</span>
1059
+ <span class="cline-any cline-neutral">&nbsp;</span>
1060
+ <span class="cline-any cline-neutral">&nbsp;</span>
1061
+ <span class="cline-any cline-neutral">&nbsp;</span>
1062
+ <span class="cline-any cline-no">&nbsp;</span>
1063
+ <span class="cline-any cline-no">&nbsp;</span>
1064
+ <span class="cline-any cline-no">&nbsp;</span>
1065
+ <span class="cline-any cline-no">&nbsp;</span>
1066
+ <span class="cline-any cline-no">&nbsp;</span>
1067
+ <span class="cline-any cline-no">&nbsp;</span>
1068
+ <span class="cline-any cline-no">&nbsp;</span>
1069
+ <span class="cline-any cline-no">&nbsp;</span>
1070
+ <span class="cline-any cline-neutral">&nbsp;</span>
1071
+ <span class="cline-any cline-neutral">&nbsp;</span>
1072
+ <span class="cline-any cline-neutral">&nbsp;</span>
1073
+ <span class="cline-any cline-neutral">&nbsp;</span>
1074
+ <span class="cline-any cline-no">&nbsp;</span>
1075
+ <span class="cline-any cline-neutral">&nbsp;</span>
1076
+ <span class="cline-any cline-no">&nbsp;</span>
1077
+ <span class="cline-any cline-neutral">&nbsp;</span>
1078
+ <span class="cline-any cline-no">&nbsp;</span>
1079
+ <span class="cline-any cline-neutral">&nbsp;</span>
1080
+ <span class="cline-any cline-neutral">&nbsp;</span>
1081
+ <span class="cline-any cline-neutral">&nbsp;</span>
1082
+ <span class="cline-any cline-neutral">&nbsp;</span>
1083
+ <span class="cline-any cline-neutral">&nbsp;</span>
1084
+ <span class="cline-any cline-neutral">&nbsp;</span>
1085
+ <span class="cline-any cline-neutral">&nbsp;</span>
1086
+ <span class="cline-any cline-neutral">&nbsp;</span>
1087
+ <span class="cline-any cline-neutral">&nbsp;</span>
1088
+ <span class="cline-any cline-no">&nbsp;</span>
1089
+ <span class="cline-any cline-neutral">&nbsp;</span>
1090
+ <span class="cline-any cline-neutral">&nbsp;</span>
1091
+ <span class="cline-any cline-neutral">&nbsp;</span>
1092
+ <span class="cline-any cline-neutral">&nbsp;</span>
1093
+ <span class="cline-any cline-neutral">&nbsp;</span>
1094
+ <span class="cline-any cline-no">&nbsp;</span>
1095
+ <span class="cline-any cline-no">&nbsp;</span>
1096
+ <span class="cline-any cline-neutral">&nbsp;</span>
1097
+ <span class="cline-any cline-neutral">&nbsp;</span>
1098
+ <span class="cline-any cline-neutral">&nbsp;</span>
1099
+ <span class="cline-any cline-neutral">&nbsp;</span>
1100
+ <span class="cline-any cline-neutral">&nbsp;</span>
1101
+ <span class="cline-any cline-no">&nbsp;</span>
1102
+ <span class="cline-any cline-no">&nbsp;</span>
1103
+ <span class="cline-any cline-neutral">&nbsp;</span>
1104
+ <span class="cline-any cline-neutral">&nbsp;</span>
1105
+ <span class="cline-any cline-neutral">&nbsp;</span>
1106
+ <span class="cline-any cline-neutral">&nbsp;</span>
1107
+ <span class="cline-any cline-neutral">&nbsp;</span>
1108
+ <span class="cline-any cline-neutral">&nbsp;</span>
1109
+ <span class="cline-any cline-neutral">&nbsp;</span>
1110
+ <span class="cline-any cline-neutral">&nbsp;</span>
1111
+ <span class="cline-any cline-neutral">&nbsp;</span>
1112
+ <span class="cline-any cline-neutral">&nbsp;</span>
1113
+ <span class="cline-any cline-neutral">&nbsp;</span>
1114
+ <span class="cline-any cline-neutral">&nbsp;</span>
1115
+ <span class="cline-any cline-neutral">&nbsp;</span>
1116
+ <span class="cline-any cline-no">&nbsp;</span>
1117
+ <span class="cline-any cline-neutral">&nbsp;</span>
1118
+ <span class="cline-any cline-neutral">&nbsp;</span>
1119
+ <span class="cline-any cline-neutral">&nbsp;</span>
1120
+ <span class="cline-any cline-neutral">&nbsp;</span>
1121
+ <span class="cline-any cline-neutral">&nbsp;</span>
1122
+ <span class="cline-any cline-neutral">&nbsp;</span>
1123
+ <span class="cline-any cline-neutral">&nbsp;</span>
1124
+ <span class="cline-any cline-no">&nbsp;</span>
1125
+ <span class="cline-any cline-no">&nbsp;</span>
1126
+ <span class="cline-any cline-neutral">&nbsp;</span>
1127
+ <span class="cline-any cline-neutral">&nbsp;</span>
1128
+ <span class="cline-any cline-no">&nbsp;</span>
1129
+ <span class="cline-any cline-neutral">&nbsp;</span>
1130
+ <span class="cline-any cline-no">&nbsp;</span>
1131
+ <span class="cline-any cline-neutral">&nbsp;</span>
1132
+ <span class="cline-any cline-neutral">&nbsp;</span>
1133
+ <span class="cline-any cline-neutral">&nbsp;</span>
1134
+ <span class="cline-any cline-neutral">&nbsp;</span>
1135
+ <span class="cline-any cline-neutral">&nbsp;</span>
1136
+ <span class="cline-any cline-neutral">&nbsp;</span>
1137
+ <span class="cline-any cline-neutral">&nbsp;</span>
1138
+ <span class="cline-any cline-neutral">&nbsp;</span>
1139
+ <span class="cline-any cline-no">&nbsp;</span>
1140
+ <span class="cline-any cline-neutral">&nbsp;</span>
1141
+ <span class="cline-any cline-neutral">&nbsp;</span>
1142
+ <span class="cline-any cline-neutral">&nbsp;</span>
1143
+ <span class="cline-any cline-neutral">&nbsp;</span>
1144
+ <span class="cline-any cline-neutral">&nbsp;</span>
1145
+ <span class="cline-any cline-no">&nbsp;</span>
1146
+ <span class="cline-any cline-no">&nbsp;</span>
1147
+ <span class="cline-any cline-neutral">&nbsp;</span>
1148
+ <span class="cline-any cline-neutral">&nbsp;</span>
1149
+ <span class="cline-any cline-neutral">&nbsp;</span>
1150
+ <span class="cline-any cline-neutral">&nbsp;</span>
1151
+ <span class="cline-any cline-neutral">&nbsp;</span>
1152
+ <span class="cline-any cline-no">&nbsp;</span>
1153
+ <span class="cline-any cline-no">&nbsp;</span>
1154
+ <span class="cline-any cline-neutral">&nbsp;</span>
1155
+ <span class="cline-any cline-neutral">&nbsp;</span>
1156
+ <span class="cline-any cline-neutral">&nbsp;</span>
1157
+ <span class="cline-any cline-neutral">&nbsp;</span>
1158
+ <span class="cline-any cline-neutral">&nbsp;</span>
1159
+ <span class="cline-any cline-neutral">&nbsp;</span>
1160
+ <span class="cline-any cline-neutral">&nbsp;</span>
1161
+ <span class="cline-any cline-neutral">&nbsp;</span>
1162
+ <span class="cline-any cline-neutral">&nbsp;</span>
1163
+ <span class="cline-any cline-neutral">&nbsp;</span>
1164
+ <span class="cline-any cline-neutral">&nbsp;</span>
1165
+ <span class="cline-any cline-no">&nbsp;</span>
1166
+ <span class="cline-any cline-neutral">&nbsp;</span>
1167
+ <span class="cline-any cline-neutral">&nbsp;</span>
1168
+ <span class="cline-any cline-neutral">&nbsp;</span>
1169
+ <span class="cline-any cline-neutral">&nbsp;</span>
1170
+ <span class="cline-any cline-neutral">&nbsp;</span>
1171
+ <span class="cline-any cline-neutral">&nbsp;</span>
1172
+ <span class="cline-any cline-neutral">&nbsp;</span>
1173
+ <span class="cline-any cline-neutral">&nbsp;</span>
1174
+ <span class="cline-any cline-neutral">&nbsp;</span>
1175
+ <span class="cline-any cline-neutral">&nbsp;</span>
1176
+ <span class="cline-any cline-neutral">&nbsp;</span>
1177
+ <span class="cline-any cline-neutral">&nbsp;</span>
1178
+ <span class="cline-any cline-neutral">&nbsp;</span>
1179
+ <span class="cline-any cline-no">&nbsp;</span>
1180
+ <span class="cline-any cline-neutral">&nbsp;</span>
1181
+ <span class="cline-any cline-no">&nbsp;</span>
1182
+ <span class="cline-any cline-neutral">&nbsp;</span>
1183
+ <span class="cline-any cline-no">&nbsp;</span>
1184
+ <span class="cline-any cline-neutral">&nbsp;</span>
1185
+ <span class="cline-any cline-neutral">&nbsp;</span>
1186
+ <span class="cline-any cline-neutral">&nbsp;</span>
1187
+ <span class="cline-any cline-neutral">&nbsp;</span>
1188
+ <span class="cline-any cline-neutral">&nbsp;</span>
1189
+ <span class="cline-any cline-neutral">&nbsp;</span>
1190
+ <span class="cline-any cline-neutral">&nbsp;</span>
1191
+ <span class="cline-any cline-neutral">&nbsp;</span>
1192
+ <span class="cline-any cline-neutral">&nbsp;</span>
1193
+ <span class="cline-any cline-neutral">&nbsp;</span>
1194
+ <span class="cline-any cline-neutral">&nbsp;</span>
1195
+ <span class="cline-any cline-neutral">&nbsp;</span>
1196
+ <span class="cline-any cline-neutral">&nbsp;</span>
1197
+ <span class="cline-any cline-neutral">&nbsp;</span>
1198
+ <span class="cline-any cline-neutral">&nbsp;</span>
1199
+ <span class="cline-any cline-neutral">&nbsp;</span>
1200
+ <span class="cline-any cline-neutral">&nbsp;</span>
1201
+ <span class="cline-any cline-neutral">&nbsp;</span>
1202
+ <span class="cline-any cline-neutral">&nbsp;</span>
1203
+ <span class="cline-any cline-neutral">&nbsp;</span>
1204
+ <span class="cline-any cline-neutral">&nbsp;</span>
1205
+ <span class="cline-any cline-neutral">&nbsp;</span>
1206
+ <span class="cline-any cline-neutral">&nbsp;</span>
1207
+ <span class="cline-any cline-neutral">&nbsp;</span>
1208
+ <span class="cline-any cline-no">&nbsp;</span>
1209
+ <span class="cline-any cline-neutral">&nbsp;</span>
1210
+ <span class="cline-any cline-neutral">&nbsp;</span>
1211
+ <span class="cline-any cline-neutral">&nbsp;</span>
1212
+ <span class="cline-any cline-neutral">&nbsp;</span>
1213
+ <span class="cline-any cline-neutral">&nbsp;</span>
1214
+ <span class="cline-any cline-neutral">&nbsp;</span>
1215
+ <span class="cline-any cline-no">&nbsp;</span>
1216
+ <span class="cline-any cline-no">&nbsp;</span>
1217
+ <span class="cline-any cline-neutral">&nbsp;</span>
1218
+ <span class="cline-any cline-neutral">&nbsp;</span>
1219
+ <span class="cline-any cline-neutral">&nbsp;</span>
1220
+ <span class="cline-any cline-no">&nbsp;</span>
1221
+ <span class="cline-any cline-no">&nbsp;</span>
1222
+ <span class="cline-any cline-neutral">&nbsp;</span>
1223
+ <span class="cline-any cline-neutral">&nbsp;</span>
1224
+ <span class="cline-any cline-neutral">&nbsp;</span>
1225
+ <span class="cline-any cline-neutral">&nbsp;</span>
1226
+ <span class="cline-any cline-neutral">&nbsp;</span>
1227
+ <span class="cline-any cline-neutral">&nbsp;</span>
1228
+ <span class="cline-any cline-neutral">&nbsp;</span>
1229
+ <span class="cline-any cline-neutral">&nbsp;</span>
1230
+ <span class="cline-any cline-neutral">&nbsp;</span>
1231
+ <span class="cline-any cline-neutral">&nbsp;</span>
1232
+ <span class="cline-any cline-neutral">&nbsp;</span>
1233
+ <span class="cline-any cline-neutral">&nbsp;</span>
1234
+ <span class="cline-any cline-neutral">&nbsp;</span>
1235
+ <span class="cline-any cline-neutral">&nbsp;</span>
1236
+ <span class="cline-any cline-neutral">&nbsp;</span>
1237
+ <span class="cline-any cline-neutral">&nbsp;</span>
1238
+ <span class="cline-any cline-neutral">&nbsp;</span>
1239
+ <span class="cline-any cline-neutral">&nbsp;</span>
1240
+ <span class="cline-any cline-no">&nbsp;</span>
1241
+ <span class="cline-any cline-neutral">&nbsp;</span>
1242
+ <span class="cline-any cline-neutral">&nbsp;</span>
1243
+ <span class="cline-any cline-neutral">&nbsp;</span>
1244
+ <span class="cline-any cline-neutral">&nbsp;</span>
1245
+ <span class="cline-any cline-neutral">&nbsp;</span>
1246
+ <span class="cline-any cline-neutral">&nbsp;</span>
1247
+ <span class="cline-any cline-neutral">&nbsp;</span>
1248
+ <span class="cline-any cline-neutral">&nbsp;</span>
1249
+ <span class="cline-any cline-neutral">&nbsp;</span>
1250
+ <span class="cline-any cline-neutral">&nbsp;</span>
1251
+ <span class="cline-any cline-neutral">&nbsp;</span>
1252
+ <span class="cline-any cline-neutral">&nbsp;</span>
1253
+ <span class="cline-any cline-neutral">&nbsp;</span>
1254
+ <span class="cline-any cline-neutral">&nbsp;</span>
1255
+ <span class="cline-any cline-neutral">&nbsp;</span>
1256
+ <span class="cline-any cline-neutral">&nbsp;</span>
1257
+ <span class="cline-any cline-neutral">&nbsp;</span>
1258
+ <span class="cline-any cline-neutral">&nbsp;</span>
1259
+ <span class="cline-any cline-neutral">&nbsp;</span>
1260
+ <span class="cline-any cline-neutral">&nbsp;</span>
1261
+ <span class="cline-any cline-neutral">&nbsp;</span>
1262
+ <span class="cline-any cline-neutral">&nbsp;</span>
1263
+ <span class="cline-any cline-neutral">&nbsp;</span>
1264
+ <span class="cline-any cline-neutral">&nbsp;</span>
1265
+ <span class="cline-any cline-neutral">&nbsp;</span>
1266
+ <span class="cline-any cline-neutral">&nbsp;</span>
1267
+ <span class="cline-any cline-neutral">&nbsp;</span>
1268
+ <span class="cline-any cline-neutral">&nbsp;</span>
1269
+ <span class="cline-any cline-neutral">&nbsp;</span>
1270
+ <span class="cline-any cline-neutral">&nbsp;</span>
1271
+ <span class="cline-any cline-neutral">&nbsp;</span>
1272
+ <span class="cline-any cline-neutral">&nbsp;</span>
1273
+ <span class="cline-any cline-neutral">&nbsp;</span>
1274
+ <span class="cline-any cline-neutral">&nbsp;</span>
1275
+ <span class="cline-any cline-neutral">&nbsp;</span>
1276
+ <span class="cline-any cline-neutral">&nbsp;</span>
1277
+ <span class="cline-any cline-neutral">&nbsp;</span>
1278
+ <span class="cline-any cline-neutral">&nbsp;</span>
1279
+ <span class="cline-any cline-neutral">&nbsp;</span>
1280
+ <span class="cline-any cline-neutral">&nbsp;</span>
1281
+ <span class="cline-any cline-neutral">&nbsp;</span>
1282
+ <span class="cline-any cline-neutral">&nbsp;</span>
1283
+ <span class="cline-any cline-no">&nbsp;</span>
1284
+ <span class="cline-any cline-no">&nbsp;</span>
1285
+ <span class="cline-any cline-neutral">&nbsp;</span>
1286
+ <span class="cline-any cline-neutral">&nbsp;</span>
1287
+ <span class="cline-any cline-neutral">&nbsp;</span>
1288
+ <span class="cline-any cline-neutral">&nbsp;</span>
1289
+ <span class="cline-any cline-neutral">&nbsp;</span>
1290
+ <span class="cline-any cline-neutral">&nbsp;</span>
1291
+ <span class="cline-any cline-neutral">&nbsp;</span>
1292
+ <span class="cline-any cline-neutral">&nbsp;</span>
1293
+ <span class="cline-any cline-neutral">&nbsp;</span>
1294
+ <span class="cline-any cline-neutral">&nbsp;</span>
1295
+ <span class="cline-any cline-neutral">&nbsp;</span>
1296
+ <span class="cline-any cline-neutral">&nbsp;</span>
1297
+ <span class="cline-any cline-neutral">&nbsp;</span>
1298
+ <span class="cline-any cline-neutral">&nbsp;</span>
1299
+ <span class="cline-any cline-neutral">&nbsp;</span>
1300
+ <span class="cline-any cline-neutral">&nbsp;</span>
1301
+ <span class="cline-any cline-neutral">&nbsp;</span>
1302
+ <span class="cline-any cline-neutral">&nbsp;</span>
1303
+ <span class="cline-any cline-neutral">&nbsp;</span>
1304
+ <span class="cline-any cline-neutral">&nbsp;</span>
1305
+ <span class="cline-any cline-neutral">&nbsp;</span>
1306
+ <span class="cline-any cline-neutral">&nbsp;</span>
1307
+ <span class="cline-any cline-neutral">&nbsp;</span>
1308
+ <span class="cline-any cline-neutral">&nbsp;</span>
1309
+ <span class="cline-any cline-neutral">&nbsp;</span>
1310
+ <span class="cline-any cline-neutral">&nbsp;</span>
1311
+ <span class="cline-any cline-no">&nbsp;</span>
1312
+ <span class="cline-any cline-neutral">&nbsp;</span>
1313
+ <span class="cline-any cline-neutral">&nbsp;</span>
1314
+ <span class="cline-any cline-neutral">&nbsp;</span>
1315
+ <span class="cline-any cline-neutral">&nbsp;</span>
1316
+ <span class="cline-any cline-neutral">&nbsp;</span>
1317
+ <span class="cline-any cline-neutral">&nbsp;</span>
1318
+ <span class="cline-any cline-neutral">&nbsp;</span>
1319
+ <span class="cline-any cline-neutral">&nbsp;</span>
1320
+ <span class="cline-any cline-neutral">&nbsp;</span>
1321
+ <span class="cline-any cline-no">&nbsp;</span>
1322
+ <span class="cline-any cline-no">&nbsp;</span>
1323
+ <span class="cline-any cline-neutral">&nbsp;</span>
1324
+ <span class="cline-any cline-no">&nbsp;</span>
1325
+ <span class="cline-any cline-neutral">&nbsp;</span>
1326
+ <span class="cline-any cline-neutral">&nbsp;</span>
1327
+ <span class="cline-any cline-neutral">&nbsp;</span>
1328
+ <span class="cline-any cline-neutral">&nbsp;</span>
1329
+ <span class="cline-any cline-neutral">&nbsp;</span>
1330
+ <span class="cline-any cline-neutral">&nbsp;</span>
1331
+ <span class="cline-any cline-neutral">&nbsp;</span>
1332
+ <span class="cline-any cline-neutral">&nbsp;</span>
1333
+ <span class="cline-any cline-neutral">&nbsp;</span>
1334
+ <span class="cline-any cline-neutral">&nbsp;</span>
1335
+ <span class="cline-any cline-no">&nbsp;</span>
1336
+ <span class="cline-any cline-neutral">&nbsp;</span>
1337
+ <span class="cline-any cline-neutral">&nbsp;</span>
1338
+ <span class="cline-any cline-neutral">&nbsp;</span>
1339
+ <span class="cline-any cline-neutral">&nbsp;</span>
1340
+ <span class="cline-any cline-no">&nbsp;</span>
1341
+ <span class="cline-any cline-neutral">&nbsp;</span>
1342
+ <span class="cline-any cline-no">&nbsp;</span>
1343
+ <span class="cline-any cline-neutral">&nbsp;</span>
1344
+ <span class="cline-any cline-neutral">&nbsp;</span>
1345
+ <span class="cline-any cline-neutral">&nbsp;</span>
1346
+ <span class="cline-any cline-neutral">&nbsp;</span>
1347
+ <span class="cline-any cline-neutral">&nbsp;</span>
1348
+ <span class="cline-any cline-neutral">&nbsp;</span>
1349
+ <span class="cline-any cline-neutral">&nbsp;</span>
1350
+ <span class="cline-any cline-neutral">&nbsp;</span>
1351
+ <span class="cline-any cline-neutral">&nbsp;</span>
1352
+ <span class="cline-any cline-neutral">&nbsp;</span>
1353
+ <span class="cline-any cline-neutral">&nbsp;</span>
1354
+ <span class="cline-any cline-no">&nbsp;</span>
1355
+ <span class="cline-any cline-neutral">&nbsp;</span>
1356
+ <span class="cline-any cline-neutral">&nbsp;</span>
1357
+ <span class="cline-any cline-neutral">&nbsp;</span>
1358
+ <span class="cline-any cline-neutral">&nbsp;</span>
1359
+ <span class="cline-any cline-neutral">&nbsp;</span>
1360
+ <span class="cline-any cline-no">&nbsp;</span>
1361
+ <span class="cline-any cline-no">&nbsp;</span>
1362
+ <span class="cline-any cline-neutral">&nbsp;</span>
1363
+ <span class="cline-any cline-neutral">&nbsp;</span>
1364
+ <span class="cline-any cline-neutral">&nbsp;</span>
1365
+ <span class="cline-any cline-neutral">&nbsp;</span>
1366
+ <span class="cline-any cline-no">&nbsp;</span>
1367
+ <span class="cline-any cline-no">&nbsp;</span>
1368
+ <span class="cline-any cline-neutral">&nbsp;</span>
1369
+ <span class="cline-any cline-neutral">&nbsp;</span>
1370
+ <span class="cline-any cline-neutral">&nbsp;</span>
1371
+ <span class="cline-any cline-neutral">&nbsp;</span>
1372
+ <span class="cline-any cline-neutral">&nbsp;</span>
1373
+ <span class="cline-any cline-neutral">&nbsp;</span>
1374
+ <span class="cline-any cline-neutral">&nbsp;</span>
1375
+ <span class="cline-any cline-neutral">&nbsp;</span>
1376
+ <span class="cline-any cline-neutral">&nbsp;</span>
1377
+ <span class="cline-any cline-no">&nbsp;</span>
1378
+ <span class="cline-any cline-neutral">&nbsp;</span>
1379
+ <span class="cline-any cline-neutral">&nbsp;</span>
1380
+ <span class="cline-any cline-neutral">&nbsp;</span>
1381
+ <span class="cline-any cline-no">&nbsp;</span>
1382
+ <span class="cline-any cline-neutral">&nbsp;</span>
1383
+ <span class="cline-any cline-neutral">&nbsp;</span>
1384
+ <span class="cline-any cline-neutral">&nbsp;</span>
1385
+ <span class="cline-any cline-neutral">&nbsp;</span>
1386
+ <span class="cline-any cline-neutral">&nbsp;</span>
1387
+ <span class="cline-any cline-neutral">&nbsp;</span>
1388
+ <span class="cline-any cline-neutral">&nbsp;</span>
1389
+ <span class="cline-any cline-neutral">&nbsp;</span>
1390
+ <span class="cline-any cline-neutral">&nbsp;</span>
1391
+ <span class="cline-any cline-neutral">&nbsp;</span>
1392
+ <span class="cline-any cline-neutral">&nbsp;</span>
1393
+ <span class="cline-any cline-neutral">&nbsp;</span>
1394
+ <span class="cline-any cline-neutral">&nbsp;</span>
1395
+ <span class="cline-any cline-neutral">&nbsp;</span>
1396
+ <span class="cline-any cline-no">&nbsp;</span>
1397
+ <span class="cline-any cline-neutral">&nbsp;</span>
1398
+ <span class="cline-any cline-neutral">&nbsp;</span>
1399
+ <span class="cline-any cline-neutral">&nbsp;</span>
1400
+ <span class="cline-any cline-neutral">&nbsp;</span>
1401
+ <span class="cline-any cline-neutral">&nbsp;</span>
1402
+ <span class="cline-any cline-neutral">&nbsp;</span>
1403
+ <span class="cline-any cline-neutral">&nbsp;</span>
1404
+ <span class="cline-any cline-neutral">&nbsp;</span>
1405
+ <span class="cline-any cline-neutral">&nbsp;</span>
1406
+ <span class="cline-any cline-neutral">&nbsp;</span>
1407
+ <span class="cline-any cline-neutral">&nbsp;</span>
1408
+ <span class="cline-any cline-neutral">&nbsp;</span>
1409
+ <span class="cline-any cline-no">&nbsp;</span>
1410
+ <span class="cline-any cline-no">&nbsp;</span>
1411
+ <span class="cline-any cline-no">&nbsp;</span>
1412
+ <span class="cline-any cline-no">&nbsp;</span>
1413
+ <span class="cline-any cline-neutral">&nbsp;</span>
1414
+ <span class="cline-any cline-neutral">&nbsp;</span>
1415
+ <span class="cline-any cline-no">&nbsp;</span>
1416
+ <span class="cline-any cline-no">&nbsp;</span>
1417
+ <span class="cline-any cline-neutral">&nbsp;</span>
1418
+ <span class="cline-any cline-neutral">&nbsp;</span>
1419
+ <span class="cline-any cline-neutral">&nbsp;</span>
1420
+ <span class="cline-any cline-no">&nbsp;</span>
1421
+ <span class="cline-any cline-neutral">&nbsp;</span>
1422
+ <span class="cline-any cline-neutral">&nbsp;</span>
1423
+ <span class="cline-any cline-neutral">&nbsp;</span>
1424
+ <span class="cline-any cline-neutral">&nbsp;</span>
1425
+ <span class="cline-any cline-neutral">&nbsp;</span>
1426
+ <span class="cline-any cline-neutral">&nbsp;</span>
1427
+ <span class="cline-any cline-neutral">&nbsp;</span>
1428
+ <span class="cline-any cline-neutral">&nbsp;</span>
1429
+ <span class="cline-any cline-neutral">&nbsp;</span>
1430
+ <span class="cline-any cline-neutral">&nbsp;</span>
1431
+ <span class="cline-any cline-neutral">&nbsp;</span>
1432
+ <span class="cline-any cline-neutral">&nbsp;</span>
1433
+ <span class="cline-any cline-neutral">&nbsp;</span>
1434
+ <span class="cline-any cline-neutral">&nbsp;</span>
1435
+ <span class="cline-any cline-neutral">&nbsp;</span>
1436
+ <span class="cline-any cline-neutral">&nbsp;</span>
1437
+ <span class="cline-any cline-no">&nbsp;</span>
1438
+ <span class="cline-any cline-neutral">&nbsp;</span>
1439
+ <span class="cline-any cline-neutral">&nbsp;</span>
1440
+ <span class="cline-any cline-neutral">&nbsp;</span>
1441
+ <span class="cline-any cline-neutral">&nbsp;</span>
1442
+ <span class="cline-any cline-neutral">&nbsp;</span>
1443
+ <span class="cline-any cline-neutral">&nbsp;</span>
1444
+ <span class="cline-any cline-neutral">&nbsp;</span>
1445
+ <span class="cline-any cline-neutral">&nbsp;</span>
1446
+ <span class="cline-any cline-neutral">&nbsp;</span>
1447
+ <span class="cline-any cline-neutral">&nbsp;</span>
1448
+ <span class="cline-any cline-neutral">&nbsp;</span>
1449
+ <span class="cline-any cline-neutral">&nbsp;</span>
1450
+ <span class="cline-any cline-neutral">&nbsp;</span>
1451
+ <span class="cline-any cline-neutral">&nbsp;</span>
1452
+ <span class="cline-any cline-neutral">&nbsp;</span>
1453
+ <span class="cline-any cline-neutral">&nbsp;</span>
1454
+ <span class="cline-any cline-neutral">&nbsp;</span>
1455
+ <span class="cline-any cline-neutral">&nbsp;</span>
1456
+ <span class="cline-any cline-neutral">&nbsp;</span>
1457
+ <span class="cline-any cline-no">&nbsp;</span>
1458
+ <span class="cline-any cline-no">&nbsp;</span>
1459
+ <span class="cline-any cline-no">&nbsp;</span>
1460
+ <span class="cline-any cline-no">&nbsp;</span>
1461
+ <span class="cline-any cline-no">&nbsp;</span>
1462
+ <span class="cline-any cline-no">&nbsp;</span>
1463
+ <span class="cline-any cline-no">&nbsp;</span>
1464
+ <span class="cline-any cline-no">&nbsp;</span>
1465
+ <span class="cline-any cline-neutral">&nbsp;</span>
1466
+ <span class="cline-any cline-neutral">&nbsp;</span>
1467
+ <span class="cline-any cline-neutral">&nbsp;</span>
1468
+ <span class="cline-any cline-neutral">&nbsp;</span>
1469
+ <span class="cline-any cline-neutral">&nbsp;</span>
1470
+ <span class="cline-any cline-neutral">&nbsp;</span>
1471
+ <span class="cline-any cline-no">&nbsp;</span>
1472
+ <span class="cline-any cline-neutral">&nbsp;</span>
1473
+ <span class="cline-any cline-no">&nbsp;</span>
1474
+ <span class="cline-any cline-neutral">&nbsp;</span>
1475
+ <span class="cline-any cline-no">&nbsp;</span>
1476
+ <span class="cline-any cline-neutral">&nbsp;</span>
1477
+ <span class="cline-any cline-neutral">&nbsp;</span>
1478
+ <span class="cline-any cline-neutral">&nbsp;</span>
1479
+ <span class="cline-any cline-neutral">&nbsp;</span>
1480
+ <span class="cline-any cline-neutral">&nbsp;</span>
1481
+ <span class="cline-any cline-neutral">&nbsp;</span>
1482
+ <span class="cline-any cline-neutral">&nbsp;</span>
1483
+ <span class="cline-any cline-neutral">&nbsp;</span>
1484
+ <span class="cline-any cline-neutral">&nbsp;</span>
1485
+ <span class="cline-any cline-no">&nbsp;</span>
1486
+ <span class="cline-any cline-neutral">&nbsp;</span>
1487
+ <span class="cline-any cline-neutral">&nbsp;</span>
1488
+ <span class="cline-any cline-neutral">&nbsp;</span>
1489
+ <span class="cline-any cline-neutral">&nbsp;</span>
1490
+ <span class="cline-any cline-neutral">&nbsp;</span>
1491
+ <span class="cline-any cline-no">&nbsp;</span>
1492
+ <span class="cline-any cline-no">&nbsp;</span>
1493
+ <span class="cline-any cline-neutral">&nbsp;</span>
1494
+ <span class="cline-any cline-neutral">&nbsp;</span>
1495
+ <span class="cline-any cline-neutral">&nbsp;</span>
1496
+ <span class="cline-any cline-neutral">&nbsp;</span>
1497
+ <span class="cline-any cline-no">&nbsp;</span>
1498
+ <span class="cline-any cline-no">&nbsp;</span>
1499
+ <span class="cline-any cline-neutral">&nbsp;</span>
1500
+ <span class="cline-any cline-neutral">&nbsp;</span>
1501
+ <span class="cline-any cline-neutral">&nbsp;</span>
1502
+ <span class="cline-any cline-neutral">&nbsp;</span>
1503
+ <span class="cline-any cline-neutral">&nbsp;</span>
1504
+ <span class="cline-any cline-neutral">&nbsp;</span>
1505
+ <span class="cline-any cline-neutral">&nbsp;</span>
1506
+ <span class="cline-any cline-neutral">&nbsp;</span>
1507
+ <span class="cline-any cline-neutral">&nbsp;</span>
1508
+ <span class="cline-any cline-neutral">&nbsp;</span>
1509
+ <span class="cline-any cline-no">&nbsp;</span>
1510
+ <span class="cline-any cline-neutral">&nbsp;</span>
1511
+ <span class="cline-any cline-neutral">&nbsp;</span>
1512
+ <span class="cline-any cline-neutral">&nbsp;</span>
1513
+ <span class="cline-any cline-neutral">&nbsp;</span>
1514
+ <span class="cline-any cline-neutral">&nbsp;</span>
1515
+ <span class="cline-any cline-no">&nbsp;</span>
1516
+ <span class="cline-any cline-neutral">&nbsp;</span>
1517
+ <span class="cline-any cline-no">&nbsp;</span>
1518
+ <span class="cline-any cline-neutral">&nbsp;</span>
1519
+ <span class="cline-any cline-neutral">&nbsp;</span>
1520
+ <span class="cline-any cline-neutral">&nbsp;</span>
1521
+ <span class="cline-any cline-neutral">&nbsp;</span>
1522
+ <span class="cline-any cline-neutral">&nbsp;</span>
1523
+ <span class="cline-any cline-neutral">&nbsp;</span>
1524
+ <span class="cline-any cline-neutral">&nbsp;</span>
1525
+ <span class="cline-any cline-no">&nbsp;</span>
1526
+ <span class="cline-any cline-neutral">&nbsp;</span>
1527
+ <span class="cline-any cline-neutral">&nbsp;</span>
1528
+ <span class="cline-any cline-neutral">&nbsp;</span>
1529
+ <span class="cline-any cline-neutral">&nbsp;</span>
1530
+ <span class="cline-any cline-neutral">&nbsp;</span>
1531
+ <span class="cline-any cline-no">&nbsp;</span>
1532
+ <span class="cline-any cline-no">&nbsp;</span>
1533
+ <span class="cline-any cline-neutral">&nbsp;</span>
1534
+ <span class="cline-any cline-neutral">&nbsp;</span>
1535
+ <span class="cline-any cline-neutral">&nbsp;</span>
1536
+ <span class="cline-any cline-neutral">&nbsp;</span>
1537
+ <span class="cline-any cline-no">&nbsp;</span>
1538
+ <span class="cline-any cline-no">&nbsp;</span>
1539
+ <span class="cline-any cline-neutral">&nbsp;</span>
1540
+ <span class="cline-any cline-neutral">&nbsp;</span>
1541
+ <span class="cline-any cline-neutral">&nbsp;</span>
1542
+ <span class="cline-any cline-neutral">&nbsp;</span>
1543
+ <span class="cline-any cline-neutral">&nbsp;</span>
1544
+ <span class="cline-any cline-neutral">&nbsp;</span>
1545
+ <span class="cline-any cline-neutral">&nbsp;</span>
1546
+ <span class="cline-any cline-neutral">&nbsp;</span>
1547
+ <span class="cline-any cline-neutral">&nbsp;</span>
1548
+ <span class="cline-any cline-neutral">&nbsp;</span>
1549
+ <span class="cline-any cline-no">&nbsp;</span>
1550
+ <span class="cline-any cline-neutral">&nbsp;</span>
1551
+ <span class="cline-any cline-neutral">&nbsp;</span>
1552
+ <span class="cline-any cline-neutral">&nbsp;</span>
1553
+ <span class="cline-any cline-neutral">&nbsp;</span>
1554
+ <span class="cline-any cline-neutral">&nbsp;</span>
1555
+ <span class="cline-any cline-neutral">&nbsp;</span>
1556
+ <span class="cline-any cline-neutral">&nbsp;</span>
1557
+ <span class="cline-any cline-no">&nbsp;</span>
1558
+ <span class="cline-any cline-neutral">&nbsp;</span>
1559
+ <span class="cline-any cline-neutral">&nbsp;</span>
1560
+ <span class="cline-any cline-neutral">&nbsp;</span>
1561
+ <span class="cline-any cline-neutral">&nbsp;</span>
1562
+ <span class="cline-any cline-neutral">&nbsp;</span>
1563
+ <span class="cline-any cline-neutral">&nbsp;</span>
1564
+ <span class="cline-any cline-neutral">&nbsp;</span>
1565
+ <span class="cline-any cline-neutral">&nbsp;</span>
1566
+ <span class="cline-any cline-neutral">&nbsp;</span>
1567
+ <span class="cline-any cline-neutral">&nbsp;</span>
1568
+ <span class="cline-any cline-neutral">&nbsp;</span>
1569
+ <span class="cline-any cline-neutral">&nbsp;</span>
1570
+ <span class="cline-any cline-neutral">&nbsp;</span>
1571
+ <span class="cline-any cline-neutral">&nbsp;</span>
1572
+ <span class="cline-any cline-neutral">&nbsp;</span>
1573
+ <span class="cline-any cline-neutral">&nbsp;</span>
1574
+ <span class="cline-any cline-neutral">&nbsp;</span>
1575
+ <span class="cline-any cline-neutral">&nbsp;</span>
1576
+ <span class="cline-any cline-neutral">&nbsp;</span>
1577
+ <span class="cline-any cline-no">&nbsp;</span>
1578
+ <span class="cline-any cline-no">&nbsp;</span>
1579
+ <span class="cline-any cline-no">&nbsp;</span>
1580
+ <span class="cline-any cline-no">&nbsp;</span>
1581
+ <span class="cline-any cline-no">&nbsp;</span>
1582
+ <span class="cline-any cline-no">&nbsp;</span>
1583
+ <span class="cline-any cline-no">&nbsp;</span>
1584
+ <span class="cline-any cline-no">&nbsp;</span>
1585
+ <span class="cline-any cline-neutral">&nbsp;</span>
1586
+ <span class="cline-any cline-neutral">&nbsp;</span>
1587
+ <span class="cline-any cline-neutral">&nbsp;</span>
1588
+ <span class="cline-any cline-no">&nbsp;</span>
1589
+ <span class="cline-any cline-neutral">&nbsp;</span>
1590
+ <span class="cline-any cline-no">&nbsp;</span>
1591
+ <span class="cline-any cline-neutral">&nbsp;</span>
1592
+ <span class="cline-any cline-neutral">&nbsp;</span>
1593
+ <span class="cline-any cline-neutral">&nbsp;</span>
1594
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { ClassError, ObjectBase } from '@tomei/general';
1595
+ import { UserGroupRepository } from './user-group.repository';
1596
+ import { IUserGroupAttr } from '../../interfaces/user-group.interface';
1597
+ import { LoginUser, User } from '../../components/login-user';
1598
+ import { Group } from '../../components/group';
1599
+ import { ApplicationConfig } from '@tomei/config';
1600
+ import { ActionEnum, Activity } from '@tomei/activity-history';
1601
+ import GroupSystemAccessModel from '../../models/group-system-access.entity';
1602
+ import GroupModel from '../../models/group.entity';
1603
+ import SystemModel from '../../models/system.entity';
1604
+ import UserModel from '../../models/user.entity';
1605
+ import { Transaction } from 'sequelize';
1606
+ &nbsp;
1607
+ export class UserGroup extends ObjectBase {
1608
+ ObjectType = 'UserGroup';
1609
+ TableName = 'sso_UserGroup';
1610
+ ObjectName: string;
1611
+ ObjectId: string;
1612
+ UserGroupId: number;
1613
+ UserId: number;
1614
+ GroupCode: string;
1615
+ InheritGroupPrivilegeYN = 'Y';
1616
+ InheritGroupSystemAccessYN = 'Y';
1617
+ Status: string;
1618
+ private _CreatedAt: Date;
1619
+ private _UpdatedAt: Date;
1620
+ private _CreatedById: number;
1621
+ private _UpdatedById: number;
1622
+ &nbsp;
1623
+ protected static _Repository = new UserGroupRepository();
1624
+ &nbsp;
1625
+ get CreatedAt() {
1626
+ return this._CreatedAt;
1627
+ }
1628
+ &nbsp;
1629
+ get UpdatedAt() {
1630
+ return this._UpdatedAt;
1631
+ }
1632
+ &nbsp;
1633
+ get CreatedById() {
1634
+ return this._CreatedById;
1635
+ }
1636
+ &nbsp;
1637
+ get UpdatedById() {
1638
+ return this._UpdatedById;
1639
+ }
1640
+ &nbsp;
1641
+ private constructor(userGroupAttr?: IUserGroupAttr) {
1642
+ super();
1643
+ if (userGroupAttr) {
1644
+ this.UserGroupId = userGroupAttr.UserGroupId;
1645
+ this.UserId = userGroupAttr.UserId;
1646
+ this.GroupCode = userGroupAttr.GroupCode;
1647
+ this.Status = userGroupAttr.Status;
1648
+ this.InheritGroupPrivilegeYN = userGroupAttr.InheritGroupPrivilegeYN;
1649
+ this.InheritGroupSystemAccessYN =
1650
+ userGroupAttr.InheritGroupSystemAccessYN;
1651
+ this._CreatedById = userGroupAttr.CreatedById;
1652
+ this._CreatedAt = userGroupAttr.CreatedAt;
1653
+ this._UpdatedById = userGroupAttr.UpdatedById;
1654
+ this._UpdatedAt = userGroupAttr.UpdatedAt;
1655
+ }
1656
+ }
1657
+ &nbsp;
1658
+ static async init(dbTransaction: any, UserGroupId?: number) {
1659
+ try {
1660
+ const userGroup = new UserGroup();
1661
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (UserGroupId) {
1662
+ const userGroupAttr = await this._Repository.findOne({
1663
+ where: { UserGroupId },
1664
+ transaction: dbTransaction,
1665
+ });
1666
+ if (userGroupAttr) {
1667
+ userGroup.UserGroupId = userGroupAttr.UserGroupId;
1668
+ userGroup.UserId = userGroupAttr.UserId;
1669
+ userGroup.GroupCode = userGroupAttr.GroupCode;
1670
+ userGroup.Status = userGroupAttr.Status;
1671
+ userGroup.InheritGroupPrivilegeYN =
1672
+ userGroupAttr.InheritGroupPrivilegeYN;
1673
+ userGroup.InheritGroupSystemAccessYN =
1674
+ userGroupAttr.InheritGroupSystemAccessYN;
1675
+ userGroup._CreatedById = userGroupAttr.CreatedById;
1676
+ userGroup._CreatedAt = userGroupAttr.CreatedAt;
1677
+ userGroup._UpdatedById = userGroupAttr.UpdatedById;
1678
+ userGroup._UpdatedAt = userGroupAttr.UpdatedAt;
1679
+ } else {
1680
+ throw new ClassError(
1681
+ 'UserGroup',
1682
+ 'UserGroupErrMsg00',
1683
+ 'UserGroup Not Found',
1684
+ );
1685
+ }
1686
+ }
1687
+ return userGroup;
1688
+ } catch (error) {
1689
+ throw error;
1690
+ }
1691
+ }
1692
+ &nbsp;
1693
+ async <span class="fstat-no" title="function not covered" >create(</span>
1694
+ loginUser: LoginUser,
1695
+ dbTransaction: any,
1696
+ group: Group,
1697
+ user: User,
1698
+ ) {
1699
+ //This method will create a user group record.
1700
+ <span class="cstat-no" title="statement not covered" > try {</span>
1701
+ // Part 1: Privilege Checking
1702
+ // Call loginUser.checkPrivileges() by passing:
1703
+ // SystemCode: "&lt;get_from_app_config&gt;"
1704
+ // PrivilegeCode: "USER_GROUP_CREATE"
1705
+ const systemCode =
1706
+ <span class="cstat-no" title="statement not covered" > ApplicationConfig.getComponentConfigValue('system-code');</span>
1707
+ const isPrivileged = <span class="cstat-no" title="statement not covered" >await loginUser.checkPrivileges(</span>
1708
+ systemCode,
1709
+ 'USER_GROUP_CREATE',
1710
+ );
1711
+ &nbsp;
1712
+ // If user does not have privilege to update user, throw a ClassError
1713
+ <span class="cstat-no" title="statement not covered" > if (!isPrivileged) {</span>
1714
+ <span class="cstat-no" title="statement not covered" > throw new ClassError(</span>
1715
+ 'UserGroup',
1716
+ 'UserGroupErrMsg0X',
1717
+ 'User does not have privilege to create user group.',
1718
+ );
1719
+ }
1720
+ &nbsp;
1721
+ // Part 2: Validation
1722
+ // Make sure group.GroupCode exists, if not throw new ClassError by passing:
1723
+ // Classname: "UserGroup"
1724
+ // MethodName: "create"
1725
+ // MessageCode: "UserGroupErrMsg02"
1726
+ // Message: "GroupCode is required."
1727
+ <span class="cstat-no" title="statement not covered" > if (!group.GroupCode) {</span>
1728
+ <span class="cstat-no" title="statement not covered" > throw new ClassError(</span>
1729
+ 'UserGroup',
1730
+ 'UserGroupErrMsg02',
1731
+ 'GroupCode is required.',
1732
+ );
1733
+ }
1734
+ &nbsp;
1735
+ // Make sure user.UserId exists, if not throw new ClassError by passing:
1736
+ // Classname: "UserGroup"
1737
+ // MethodName: "create"
1738
+ // MessageCode: "UserGroupErrMsg03"
1739
+ // Message: "UserId is required."
1740
+ <span class="cstat-no" title="statement not covered" > if (!user.UserId) {</span>
1741
+ <span class="cstat-no" title="statement not covered" > throw new ClassError(</span>
1742
+ 'UserGroup',
1743
+ 'UserGroupErrMsg03',
1744
+ 'UserId is required.',
1745
+ );
1746
+ }
1747
+ &nbsp;
1748
+ // Call UserGroup.findOne static method by passing:
1749
+ // loginUser
1750
+ // dbTransaction
1751
+ // GroupCode: group.GroupCode
1752
+ // UserId: user.UserId
1753
+ const userGroup = <span class="cstat-no" title="statement not covered" >await UserGroup.findOne(</span>
1754
+ dbTransaction,
1755
+ loginUser,
1756
+ group.GroupCode,
1757
+ user.UserId,
1758
+ );
1759
+ &nbsp;
1760
+ <span class="cstat-no" title="statement not covered" > if (userGroup) {</span>
1761
+ <span class="cstat-no" title="statement not covered" > return userGroup;</span>
1762
+ }
1763
+ &nbsp;
1764
+ // Part 3: Create
1765
+ // Set below attributes:
1766
+ // UserGroupId: this.createId()
1767
+ // UserId: Params.user.UserId
1768
+ // GroupCode: Params.group.GroupCode
1769
+ // Status: "Active"
1770
+ // CreatedById: loginUser.ObjectId
1771
+ // CreatedAt: current timestamp
1772
+ // UpdatedById: loginUser.ObjectId
1773
+ // UpdatedAt: current timestamp
1774
+ <span class="cstat-no" title="statement not covered" > this.UserId = user.UserId;</span>
1775
+ <span class="cstat-no" title="statement not covered" > this.GroupCode = group.GroupCode;</span>
1776
+ <span class="cstat-no" title="statement not covered" > this.Status = 'Active';</span>
1777
+ <span class="cstat-no" title="statement not covered" > this._CreatedById = loginUser.UserId;</span>
1778
+ <span class="cstat-no" title="statement not covered" > this._CreatedAt = new Date();</span>
1779
+ <span class="cstat-no" title="statement not covered" > this._UpdatedById = loginUser.UserId;</span>
1780
+ <span class="cstat-no" title="statement not covered" > this._UpdatedAt = new Date();</span>
1781
+ &nbsp;
1782
+ // Call UserGroup._Repo create() method by passing:
1783
+ // populate this instance attributes
1784
+ // dbTransaction
1785
+ &nbsp;
1786
+ const userData = <span class="cstat-no" title="statement not covered" >await UserGroup._Repository.create(</span>
1787
+ {
1788
+ UserId: this.UserId,
1789
+ GroupCode: this.GroupCode,
1790
+ Status: this.Status,
1791
+ CreatedById: this._CreatedById,
1792
+ CreatedAt: this._CreatedAt,
1793
+ UpdatedById: this._UpdatedById,
1794
+ UpdatedAt: this._UpdatedAt,
1795
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
1796
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
1797
+ },
1798
+ {
1799
+ transaction: dbTransaction,
1800
+ },
1801
+ );
1802
+ &nbsp;
1803
+ <span class="cstat-no" title="statement not covered" > this.UserGroupId = userData.UserGroupId;</span>
1804
+ &nbsp;
1805
+ // Part 4: Record Create UserGroup Activity
1806
+ // Initialise EntityValueAfter variable and set to this instance
1807
+ const EntityValueAfter = <span class="cstat-no" title="statement not covered" >{</span>
1808
+ UserGroupId: this.UserGroupId,
1809
+ UserId: this.UserId,
1810
+ GroupCode: this.GroupCode,
1811
+ Status: this.Status,
1812
+ CreatedById: this._CreatedById,
1813
+ CreatedAt: this._CreatedAt,
1814
+ UpdatedById: this._UpdatedById,
1815
+ UpdatedAt: this._UpdatedAt,
1816
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
1817
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
1818
+ };
1819
+ // Instantiate new activity from Activity class, call createId() method, then set:
1820
+ // Action: ActionEnum.Create
1821
+ // Description: Assign user to group.
1822
+ // EntityType: "UserGroup"
1823
+ // EntityId: this.UserGroupId
1824
+ // EntityValueBefore: &lt;stringify of empty object&gt;
1825
+ // EntityValueAfter: EntityValueAfter
1826
+ const activity = <span class="cstat-no" title="statement not covered" >new Activity();</span>
1827
+ <span class="cstat-no" title="statement not covered" > activity.ActivityId = activity.createId();</span>
1828
+ <span class="cstat-no" title="statement not covered" > activity.Action = ActionEnum.CREATE;</span>
1829
+ <span class="cstat-no" title="statement not covered" > activity.Description = 'Assign user to group.';</span>
1830
+ <span class="cstat-no" title="statement not covered" > activity.EntityType = 'UserGroup';</span>
1831
+ <span class="cstat-no" title="statement not covered" > activity.EntityId = this.UserGroupId.toString();</span>
1832
+ <span class="cstat-no" title="statement not covered" > activity.EntityValueBefore = JSON.stringify({});</span>
1833
+ <span class="cstat-no" title="statement not covered" > activity.EntityValueAfter = JSON.stringify(EntityValueAfter);</span>
1834
+ // Call new activity create method by passing:
1835
+ // dbTransaction
1836
+ // userId: loginUser.ObjectId
1837
+ // return this instance
1838
+ <span class="cstat-no" title="statement not covered" > await activity.create(loginUser.ObjectId, dbTransaction);</span>
1839
+ &nbsp;
1840
+ <span class="cstat-no" title="statement not covered" > return this;</span>
1841
+ } catch (error) {
1842
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
1843
+ }
1844
+ }
1845
+ &nbsp;
1846
+ public <span class="fstat-no" title="function not covered" >static </span>async findOne(
1847
+ dbTransaction: any,
1848
+ loginUser: LoginUser,
1849
+ GroupCode: string,
1850
+ UserId: number,
1851
+ ): Promise&lt;UserGroup&gt; {
1852
+ <span class="cstat-no" title="statement not covered" > try {</span>
1853
+ // Part 1: Privilege Checking
1854
+ // Call loginUser.checkPrivileges() by passing:
1855
+ // SystemCode: "&lt;get_from_app_config&gt;"
1856
+ // PrivilegeCode: "USER_GROUP_VIEW"
1857
+ const systemCode =
1858
+ <span class="cstat-no" title="statement not covered" > ApplicationConfig.getComponentConfigValue('system-code');</span>
1859
+ const isPrivileged = <span class="cstat-no" title="statement not covered" >await loginUser.checkPrivileges(</span>
1860
+ systemCode,
1861
+ 'USER_GROUP_VIEW',
1862
+ );
1863
+ &nbsp;
1864
+ // If user does not have privilege to view user group, throw a ClassError
1865
+ <span class="cstat-no" title="statement not covered" > if (!isPrivileged) {</span>
1866
+ <span class="cstat-no" title="statement not covered" > throw new ClassError(</span>
1867
+ 'UserGroup',
1868
+ 'UserGroupErrMsg0X',
1869
+ 'User does not have privilege to view user group.',
1870
+ );
1871
+ }
1872
+ &nbsp;
1873
+ // Part 2: Retrieve Record
1874
+ // Call UserGroup._Repo findOne method by passing:
1875
+ // where:
1876
+ // [Op.AND]:
1877
+ // UserId: Params.UserId
1878
+ // GroupCode: Params.GroupCode
1879
+ // dbTransaction
1880
+ const userGroupAttr = <span class="cstat-no" title="statement not covered" >await UserGroup._Repository.findOne({</span>
1881
+ where: {
1882
+ UserId,
1883
+ GroupCode,
1884
+ },
1885
+ transaction: dbTransaction,
1886
+ });
1887
+ // If record exists, instantiate UserGroup by calling the private constructor and passing the attributes. Then, returns the instance
1888
+ <span class="cstat-no" title="statement not covered" > if (userGroupAttr) {</span>
1889
+ <span class="cstat-no" title="statement not covered" > return new UserGroup(userGroupAttr.get({ plain: true }));</span>
1890
+ }
1891
+ // If record not exists, return null.
1892
+ <span class="cstat-no" title="statement not covered" > return null;</span>
1893
+ } catch (error) {
1894
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
1895
+ }
1896
+ }
1897
+ &nbsp;
1898
+ public <span class="fstat-no" title="function not covered" >static </span>async getUser(
1899
+ dbTransaction: any,
1900
+ loginUser: LoginUser,
1901
+ GroupCode: string,
1902
+ ) {
1903
+ <span class="cstat-no" title="statement not covered" > try {</span>
1904
+ // Part 1: Privilege Checking
1905
+ // Call loginUser.checkPrivileges() by passing:
1906
+ // SystemCode: "&lt;get_from_app_config&gt;"
1907
+ // PrivilegeCode: "USER_GROUP_VIEW"
1908
+ const systemCode =
1909
+ <span class="cstat-no" title="statement not covered" > ApplicationConfig.getComponentConfigValue('system-code');</span>
1910
+ const isPrivileged = <span class="cstat-no" title="statement not covered" >await loginUser.checkPrivileges(</span>
1911
+ systemCode,
1912
+ 'USER_GROUP_VIEW',
1913
+ );
1914
+ &nbsp;
1915
+ // If user does not have privilege to view user group, throw a ClassError
1916
+ <span class="cstat-no" title="statement not covered" > if (!isPrivileged) {</span>
1917
+ <span class="cstat-no" title="statement not covered" > throw new ClassError(</span>
1918
+ 'UserGroup',
1919
+ 'UserGroupErrMsg0X',
1920
+ 'User does not have privilege to view user group.',
1921
+ );
1922
+ }
1923
+ &nbsp;
1924
+ // Part 2: Retrieve Record
1925
+ // Call UserGroup._Repo findAll method by passing:
1926
+ // where:
1927
+ // GroupCode: Params.GroupCode
1928
+ // dbTransaction
1929
+ const userGroup = <span class="cstat-no" title="statement not covered" >await UserGroup._Repository.findAll({</span>
1930
+ where: {
1931
+ GroupCode,
1932
+ },
1933
+ include: [
1934
+ {
1935
+ model: UserModel,
1936
+ as: 'User',
1937
+ attributes: ['UserId', 'FullName', 'Email'],
1938
+ },
1939
+ ],
1940
+ transaction: dbTransaction,
1941
+ });
1942
+ // If record exists, instantiate UserGroup by calling the private constructor and passing the attributes. Then, returns the instance
1943
+ <span class="cstat-no" title="statement not covered" > return userGroup;</span>
1944
+ // If record not exists, return null.
1945
+ <span class="cstat-no" title="statement not covered" > return null;</span>
1946
+ } catch (error) {
1947
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
1948
+ }
1949
+ }
1950
+ &nbsp;
1951
+ <span class="fstat-no" title="function not covered" > static </span>async findAllInheritedSystemAccesses(
1952
+ UserId: number,
1953
+ loginUser: User,
1954
+ dbTransaction: any,
1955
+ ): Promise&lt;
1956
+ {
1957
+ UserGroupId: number;
1958
+ GroupCode: string;
1959
+ GroupName: string;
1960
+ InheritGroupSystemAccessYN: string;
1961
+ CreatedAt: Date;
1962
+ UpdatedAt: Date;
1963
+ Systems: {
1964
+ SystemCode: string;
1965
+ SystemName: string;
1966
+ AccessStatus: string;
1967
+ CreatedAt: Date;
1968
+ UpdatedAt: Date;
1969
+ }[];
1970
+ }[]
1971
+ &gt; {
1972
+ <span class="cstat-no" title="statement not covered" > try {</span>
1973
+ // Part 1: Privilege Checking
1974
+ // Call loginUser.checkPrivileges() to ensure the user has permission to retrieve system access information.
1975
+ // SystemCode: Retrieve from app config.
1976
+ // PrivilegeCode: 'USER_SYSTEM_ACCESS_LIST'.
1977
+ // If the privilege check fails, throw an error with a 403 Forbidden status.
1978
+ const systemCode =
1979
+ <span class="cstat-no" title="statement not covered" > ApplicationConfig.getComponentConfigValue('system-code');</span>
1980
+ const isPrivileged = <span class="cstat-no" title="statement not covered" >await loginUser.checkPrivileges(</span>
1981
+ systemCode,
1982
+ 'USER_SYSTEM_ACCESS_LIST',
1983
+ );
1984
+ <span class="cstat-no" title="statement not covered" > if (!isPrivileged) {</span>
1985
+ <span class="cstat-no" title="statement not covered" > throw new ClassError(</span>
1986
+ 'UserGroup',
1987
+ 'UserGroupErrMsg0X',
1988
+ 'User does not have privilege to view user system access.',
1989
+ 'findAllInheritedSystemAccesses',
1990
+ 403,
1991
+ );
1992
+ }
1993
+ // Part 2: Retrieve User Groups
1994
+ // Query the sso_UserGroup table to find all active groups the user belongs to.
1995
+ // Join with the sso_Group table to retrieve the GroupCode, GroupName, and InheritGroupSystemAccessYNfields.
1996
+ // Ensure that the value of InheritGroupSystemAccessYN is explicitly 'Y' or 'N' for each group.
1997
+ // If InheritGroupSystemAccessYN is not set, default it to 'N'.
1998
+ // Return only active groups (based on Status field).
1999
+ // The query should return the following fields for each group:
2000
+ // GroupCode
2001
+ // GroupName
2002
+ // InheritGroupSystemAccessYN
2003
+ &nbsp;
2004
+ const userGroups = <span class="cstat-no" title="statement not covered" >await UserGroup._Repository.findAll({</span>
2005
+ where: {
2006
+ UserId,
2007
+ Status: 'Active',
2008
+ },
2009
+ include: [
2010
+ {
2011
+ model: GroupModel,
2012
+ required: true,
2013
+ where: {
2014
+ Status: 'Active',
2015
+ },
2016
+ include: [
2017
+ {
2018
+ model: GroupSystemAccessModel,
2019
+ where: {
2020
+ Status: 'Active',
2021
+ },
2022
+ include: [
2023
+ {
2024
+ model: SystemModel,
2025
+ },
2026
+ ],
2027
+ },
2028
+ ],
2029
+ },
2030
+ ],
2031
+ transaction: dbTransaction,
2032
+ });
2033
+ const result: {
2034
+ UserGroupId: number;
2035
+ GroupCode: string;
2036
+ GroupName: string;
2037
+ InheritGroupSystemAccessYN: string;
2038
+ CreatedAt: Date;
2039
+ UpdatedAt: Date;
2040
+ Systems: {
2041
+ SystemCode: string;
2042
+ SystemName: string;
2043
+ AccessStatus: string;
2044
+ CreatedAt: Date;
2045
+ UpdatedAt: Date;
2046
+ }[];
2047
+ }[] = <span class="cstat-no" title="statement not covered" >[];</span>
2048
+ <span class="cstat-no" title="statement not covered" > for (const userGroup of userGroups) {</span>
2049
+ // Part 3: Retrieve System Access for Groups with Inheritance
2050
+ // For each group where InheritGroupSystemAccessYN = 'Y', query the sso_GroupSystemAccess table to retrieve system access details.
2051
+ // Join with the sso_System table to fetch system details (SystemName, SystemCode).
2052
+ // Ensure only active system accesses (AccessStatus = 'Active') are included.
2053
+ // For each system access, retrieve the following fields:
2054
+ // SystemName (from sso_System.Name)
2055
+ // SystemCode (from sso_System.SystemCode)
2056
+ // AccessStatus (from sso_GroupSystemAccess.Status)
2057
+ // CreatedAt (from sso_GroupSystemAccess.CreatedAt)
2058
+ // UpdatedAt (from sso_GroupSystemAccess.UpdatedAt)
2059
+ // Part 4: Handling Non-Inherited Groups
2060
+ // For groups where InheritGroupSystemAccessYN = 'N', return the group details without system access records.
2061
+ // Set the Systems field to an empty array or null to indicate no inherited access for those groups.
2062
+ // Part 5: Grouping Results
2063
+ // Group the results by GroupCode and GroupName.
2064
+ // For each group, create an object with the following structure:
2065
+ // GroupCode: Code of the group.
2066
+ // GroupName: Name of the group.
2067
+ // InheritGroupSystemAccessYN: 'Y' or 'N', indicating whether the user inherits system access from the group.
2068
+ // Systems: An array of system access objects (for groups where InheritGroupSystemAccessYN = 'Y'), each including:
2069
+ // SystemName
2070
+ // SystemCode
2071
+ // AccessStatus
2072
+ // CreatedAt
2073
+ // UpdatedAt
2074
+ // For groups where InheritGroupSystemAccessYN = 'N', Systems will be an empty array.
2075
+ const groupData = <span class="cstat-no" title="statement not covered" >{</span>
2076
+ UserGroupId: userGroup.UserGroupId,
2077
+ GroupCode: userGroup.GroupCode,
2078
+ GroupName: userGroup.Group.Name,
2079
+ InheritGroupSystemAccessYN: userGroup.InheritGroupSystemAccessYN,
2080
+ CreatedAt: userGroup.CreatedAt,
2081
+ UpdatedAt: userGroup.UpdatedAt,
2082
+ Systems: [],
2083
+ };
2084
+ &nbsp;
2085
+ <span class="cstat-no" title="statement not covered" > if (userGroup.InheritGroupSystemAccessYN === 'Y') {</span>
2086
+ <span class="cstat-no" title="statement not covered" > groupData.Systems = userGroup.Group.GroupSystemAccesses.map(</span>
2087
+ <span class="fstat-no" title="function not covered" > (g</span>roupSystemAccess) =&gt; {
2088
+ <span class="cstat-no" title="statement not covered" > return {</span>
2089
+ SystemCode: groupSystemAccess.System.SystemCode,
2090
+ SystemName: groupSystemAccess.System.Name,
2091
+ AccessStatus: groupSystemAccess.Status,
2092
+ CreatedAt: groupSystemAccess.CreatedAt,
2093
+ UpdatedAt: groupSystemAccess.UpdatedAt,
2094
+ };
2095
+ },
2096
+ );
2097
+ }
2098
+ &nbsp;
2099
+ <span class="cstat-no" title="statement not covered" > result.push(groupData);</span>
2100
+ }
2101
+ &nbsp;
2102
+ // Part 6: Return Grouped Data
2103
+ // Return the array of grouped system accesses for the user's groups, including both inherited ('Y') and non-inherited ('N') system accesses.
2104
+ <span class="cstat-no" title="statement not covered" > return result;</span>
2105
+ } catch (error) {
2106
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
2107
+ }
2108
+ }
2109
+ &nbsp;
2110
+ public async <span class="fstat-no" title="function not covered" >update(</span>
2111
+ loginUser: LoginUser,
2112
+ dbTransaction: Transaction,
2113
+ UpdatedProperties: {
2114
+ InheritGroupPrivilegeYN?: string;
2115
+ InheritGroupSystemAccessYN?: string;
2116
+ },
2117
+ ): Promise&lt;UserGroup&gt; {
2118
+ <span class="cstat-no" title="statement not covered" > try {</span>
2119
+ // Part 1: Privilege Checking
2120
+ // Call loginUser.checkPrivileges() to ensure the user has permission to retrieve system access information.
2121
+ // SystemCode: Retrieve from app config.
2122
+ // PrivilegeCode: 'USER_GROUP_UPDATE'.
2123
+ const systemCode =
2124
+ <span class="cstat-no" title="statement not covered" > ApplicationConfig.getComponentConfigValue('system-code');</span>
2125
+ const isPrivileged = <span class="cstat-no" title="statement not covered" >await loginUser.checkPrivileges(</span>
2126
+ systemCode,
2127
+ 'USER_GROUP_UPDATE',
2128
+ );
2129
+ // If the privilege check fails, throw an error with a 403 Forbidden status.
2130
+ <span class="cstat-no" title="statement not covered" > if (!isPrivileged) {</span>
2131
+ <span class="cstat-no" title="statement not covered" > throw new ClassError(</span>
2132
+ 'UserGroup',
2133
+ 'UserGroupErrMsg0X',
2134
+ 'User does not have privilege to update user group.',
2135
+ 'update',
2136
+ 403,
2137
+ );
2138
+ }
2139
+ // Part 2: Validation
2140
+ // Check to make sure that at least one of the UpdatedProperties is exist if not throw error.
2141
+ <span class="cstat-no" title="statement not covered" > if (</span>
2142
+ !UpdatedProperties.InheritGroupPrivilegeYN &amp;&amp;
2143
+ !UpdatedProperties.InheritGroupSystemAccessYN
2144
+ ) {
2145
+ <span class="cstat-no" title="statement not covered" > throw new ClassError(</span>
2146
+ 'UserGroup',
2147
+ 'UserGroupErrMsg04',
2148
+ 'At least one of the properties to update is required.',
2149
+ 'update',
2150
+ 400,
2151
+ );
2152
+ }
2153
+ // Part 3: Update User Group
2154
+ // Call the UserGroup._Repo.update() method to perform the update operation, passing:
2155
+ // InheritGroupPrivilegeYN (if exist): updatedProperties.InheritGroupPrivilegeYN
2156
+ // InheritGroupSystemAccessYN (if exist): updatedProperties.InheritGroupSystemAccessYN
2157
+ // UpdatedById: loginUser.UserId (to indicate who updated the record).
2158
+ // UpdatedAt: Set to the current date and time.
2159
+ // dbTransaction: The database transaction instance.
2160
+ const entityValueBefore = <span class="cstat-no" title="statement not covered" >{</span>
2161
+ UserGroupId: this.UserGroupId,
2162
+ UserId: this.UserId,
2163
+ GroupCode: this.GroupCode,
2164
+ Status: this.Status,
2165
+ CreatedById: this._CreatedById,
2166
+ CreatedAt: this._CreatedAt,
2167
+ UpdatedById: this._UpdatedById,
2168
+ UpdatedAt: this._UpdatedAt,
2169
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
2170
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
2171
+ };
2172
+ &nbsp;
2173
+ <span class="cstat-no" title="statement not covered" > this._UpdatedById = loginUser.UserId;</span>
2174
+ <span class="cstat-no" title="statement not covered" > this._UpdatedAt = new Date();</span>
2175
+ <span class="cstat-no" title="statement not covered" > if (UpdatedProperties.InheritGroupPrivilegeYN) {</span>
2176
+ <span class="cstat-no" title="statement not covered" > this.InheritGroupPrivilegeYN =</span>
2177
+ UpdatedProperties.InheritGroupPrivilegeYN;
2178
+ }
2179
+ <span class="cstat-no" title="statement not covered" > if (UpdatedProperties.InheritGroupSystemAccessYN) {</span>
2180
+ <span class="cstat-no" title="statement not covered" > this.InheritGroupSystemAccessYN =</span>
2181
+ UpdatedProperties.InheritGroupSystemAccessYN;
2182
+ }
2183
+ &nbsp;
2184
+ <span class="cstat-no" title="statement not covered" > await UserGroup._Repository.update(</span>
2185
+ {
2186
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
2187
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
2188
+ UpdatedById: this._UpdatedById,
2189
+ UpdatedAt: this._UpdatedAt,
2190
+ },
2191
+ {
2192
+ where: {
2193
+ UserGroupId: this.UserGroupId,
2194
+ },
2195
+ transaction: dbTransaction,
2196
+ },
2197
+ );
2198
+ &nbsp;
2199
+ // Part 2: Record Activity History
2200
+ // Initialize a variable entityValueBefore to store the current state of the record before the update.
2201
+ const entityValueAfter = <span class="cstat-no" title="statement not covered" >{</span>
2202
+ UserGroupId: this.UserGroupId,
2203
+ UserId: this.UserId,
2204
+ GroupCode: this.GroupCode,
2205
+ Status: this.Status,
2206
+ CreatedById: this._CreatedById,
2207
+ CreatedAt: this._CreatedAt,
2208
+ UpdatedById: this._UpdatedById,
2209
+ UpdatedAt: this._UpdatedAt,
2210
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
2211
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
2212
+ };
2213
+ // Create an instance of the Activity class and set the following properties:
2214
+ // ActivityId: Call activity.createId().
2215
+ // Action: Set to ActionEnum.Update.
2216
+ // Description: Set to Update User Group.
2217
+ // EntityType: Set to UserGroup.
2218
+ // EntityId: Use the ID of the updated record.
2219
+ // EntityValueBefore: Stringify entityValueBefore to capture the state before the update.
2220
+ // EntityValueAfter: Stringify the updated record to capture the new state after the update.
2221
+ const activity = <span class="cstat-no" title="statement not covered" >new Activity();</span>
2222
+ <span class="cstat-no" title="statement not covered" > activity.ActivityId = activity.createId();</span>
2223
+ <span class="cstat-no" title="statement not covered" > activity.Action = ActionEnum.UPDATE;</span>
2224
+ <span class="cstat-no" title="statement not covered" > activity.Description = 'Update User Group';</span>
2225
+ <span class="cstat-no" title="statement not covered" > activity.EntityType = 'UserGroup';</span>
2226
+ <span class="cstat-no" title="statement not covered" > activity.EntityId = this.UserGroupId.toString();</span>
2227
+ <span class="cstat-no" title="statement not covered" > activity.EntityValueBefore = JSON.stringify(entityValueBefore);</span>
2228
+ <span class="cstat-no" title="statement not covered" > activity.EntityValueAfter = JSON.stringify(entityValueAfter);</span>
2229
+ &nbsp;
2230
+ // Call the activity create a method with the following parameters:
2231
+ // dbTransaction
2232
+ // userId: loginUser.UserId
2233
+ // Part 3: Return Updated Record
2234
+ &nbsp;
2235
+ <span class="cstat-no" title="statement not covered" > await activity.create(loginUser.ObjectId, dbTransaction);</span>
2236
+ // Retrieve the updated user group record from the database or return the updated instance as needed.
2237
+ <span class="cstat-no" title="statement not covered" > return this;</span>
2238
+ } catch (error) {
2239
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
2240
+ }
2241
+ }
2242
+ &nbsp;
2243
+ public <span class="fstat-no" title="function not covered" >static </span>async isUserMemberOfGroup(
2244
+ dbTransaction: any,
2245
+ loginUser: LoginUser,
2246
+ UserId: number,
2247
+ GroupCode: string,
2248
+ ): Promise&lt;boolean&gt; {
2249
+ <span class="cstat-no" title="statement not covered" > try {</span>
2250
+ // Part 1: Privilege Checking
2251
+ // Call loginUser.checkPrivileges() to ensure the user has permission to retrieve system access information.
2252
+ // SystemCode: Retrieve from app config.
2253
+ // PrivilegeCode: 'USER_GROUP_VIEW'.
2254
+ const systemCode =
2255
+ <span class="cstat-no" title="statement not covered" > ApplicationConfig.getComponentConfigValue('system-code');</span>
2256
+ const isPrivileged = <span class="cstat-no" title="statement not covered" >await loginUser.checkPrivileges(</span>
2257
+ systemCode,
2258
+ 'USER_GROUP_VIEW',
2259
+ );
2260
+ // If the privilege check fails, throw an error with a 403 Forbidden status.
2261
+ <span class="cstat-no" title="statement not covered" > if (!isPrivileged) {</span>
2262
+ <span class="cstat-no" title="statement not covered" > throw new ClassError(</span>
2263
+ 'UserGroup',
2264
+ 'UserGroupErrMsg0X',
2265
+ 'User does not have privilege to view user group.',
2266
+ 'isUserMemberOfGroup',
2267
+ 403,
2268
+ );
2269
+ }
2270
+ // Part 2: Retrieve User Group
2271
+ // Query the sso_UserGroup table to find the user group record with the given UserId and GroupCode.
2272
+ // If the record exists, return true; otherwise, return false.
2273
+ const userGroup = <span class="cstat-no" title="statement not covered" >await UserGroup.findOne(</span>
2274
+ dbTransaction,
2275
+ loginUser,
2276
+ GroupCode,
2277
+ UserId,
2278
+ );
2279
+ <span class="cstat-no" title="statement not covered" > return !!userGroup;</span>
2280
+ } catch (error) {
2281
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
2282
+ }
2283
+ }
2284
+ &nbsp;
2285
+ public async <span class="fstat-no" title="function not covered" >delete(</span>
2286
+ loginUser: LoginUser,
2287
+ dbTransaction: Transaction,
2288
+ ): Promise&lt;void&gt; {
2289
+ <span class="cstat-no" title="statement not covered" > try {</span>
2290
+ // Part 1: Privilege Checking
2291
+ // Call loginUser.checkPrivileges() to ensure the user has permission to delete user group records.
2292
+ // SystemCode: Retrieve from app config.
2293
+ // PrivilegeCode: 'USER_GROUP_DELETE'.
2294
+ const systemCode =
2295
+ <span class="cstat-no" title="statement not covered" > ApplicationConfig.getComponentConfigValue('system-code');</span>
2296
+ const isPrivileged = <span class="cstat-no" title="statement not covered" >await loginUser.checkPrivileges(</span>
2297
+ systemCode,
2298
+ 'USER_GROUP_DELETE',
2299
+ );
2300
+ // If the privilege check fails, throw an error with a 403 Forbidden status.
2301
+ <span class="cstat-no" title="statement not covered" > if (!isPrivileged) {</span>
2302
+ <span class="cstat-no" title="statement not covered" > throw new ClassError(</span>
2303
+ 'UserGroup',
2304
+ 'UserGroupErrMsg0X',
2305
+ 'User does not have privilege to delete user group.',
2306
+ 'delete',
2307
+ 403,
2308
+ );
2309
+ }
2310
+ // Part 2: Delete User Group
2311
+ // Call the UserGroup._Repo.destroy() method to delete the user group record with the given UserGroupId.
2312
+ // Pass the dbTransaction parameter to ensure the operation is part of the current transaction.
2313
+ <span class="cstat-no" title="statement not covered" > await UserGroup._Repository.delete({</span>
2314
+ where: {
2315
+ UserGroupId: this.UserGroupId,
2316
+ },
2317
+ transaction: dbTransaction,
2318
+ });
2319
+ // Part 3: Record Activity History
2320
+ // Initialize a variable entityValueBefore to store the current state of the record before the update.
2321
+ const entityValueBefore = <span class="cstat-no" title="statement not covered" >{</span>
2322
+ UserGroupId: this.UserGroupId,
2323
+ UserId: this.UserId,
2324
+ GroupCode: this.GroupCode,
2325
+ Status: this.Status,
2326
+ CreatedById: this._CreatedById,
2327
+ CreatedAt: this._CreatedAt,
2328
+ UpdatedById: this._UpdatedById,
2329
+ UpdatedAt: this._UpdatedAt,
2330
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
2331
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
2332
+ };
2333
+ // Create an instance of the Activity class and set the following properties:
2334
+ // ActivityId: Call activity.createId().
2335
+ // Action: Set to ActionEnum.Delete.
2336
+ // Description: Set to Delete User Group.
2337
+ // EntityType: Set to UserGroup.
2338
+ // EntityId: Use the ID of the deleted record.
2339
+ // EntityValueBefore: Stringify entityValueBefore to capture the state before the delete.
2340
+ // EntityValueAfter: Set to an empty string to indicate the record has been deleted.
2341
+ const activity = <span class="cstat-no" title="statement not covered" >new Activity();</span>
2342
+ <span class="cstat-no" title="statement not covered" > activity.ActivityId = activity.createId();</span>
2343
+ <span class="cstat-no" title="statement not covered" > activity.Action = ActionEnum.DELETE;</span>
2344
+ <span class="cstat-no" title="statement not covered" > activity.Description = `Delete User Group ${this.UserGroupId}`;</span>
2345
+ <span class="cstat-no" title="statement not covered" > activity.EntityType = 'UserGroup';</span>
2346
+ <span class="cstat-no" title="statement not covered" > activity.EntityId = this.UserGroupId.toString();</span>
2347
+ <span class="cstat-no" title="statement not covered" > activity.EntityValueBefore = JSON.stringify(entityValueBefore);</span>
2348
+ <span class="cstat-no" title="statement not covered" > activity.EntityValueAfter = JSON.stringify({});</span>
2349
+ // Call the activity create method with the following parameters:
2350
+ // dbTransaction
2351
+ // userId: loginUser.UserId
2352
+ <span class="cstat-no" title="statement not covered" > await activity.create(loginUser.ObjectId, dbTransaction);</span>
2353
+ } catch (error) {
2354
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
2355
+ }
2356
+ }
2357
+ }
2358
+ &nbsp;</pre></td></tr></table></pre>
2359
+
2360
+ <div class='push'></div><!-- for sticky footer -->
2361
+ </div><!-- /wrapper -->
2362
+ <div class='footer quiet pad2 space-top1 center small'>
2363
+ Code coverage generated by
2364
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2365
+ at 2025-09-18T18:22:10.462Z
2366
+ </div>
2367
+ <script src="../../prettify.js"></script>
2368
+ <script>
2369
+ window.onload = function () {
2370
+ prettyPrint();
2371
+ };
2372
+ </script>
2373
+ <script src="../../sorter.js"></script>
2374
+ <script src="../../block-navigation.js"></script>
2375
+ </body>
2376
+ </html>
2377
+