@claude-flow/memory 3.0.0-alpha.1 → 3.0.0-alpha.11

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 (163) hide show
  1. package/README.md +356 -18
  2. package/dist/agent-memory-scope.d.ts +131 -0
  3. package/dist/agent-memory-scope.d.ts.map +1 -0
  4. package/dist/agent-memory-scope.js +215 -0
  5. package/dist/agent-memory-scope.js.map +1 -0
  6. package/dist/agent-memory-scope.test.d.ts +8 -0
  7. package/dist/agent-memory-scope.test.d.ts.map +1 -0
  8. package/dist/agent-memory-scope.test.js +463 -0
  9. package/dist/agent-memory-scope.test.js.map +1 -0
  10. package/dist/agentdb-adapter.d.ts +22 -3
  11. package/dist/agentdb-adapter.d.ts.map +1 -1
  12. package/dist/agentdb-adapter.js +135 -8
  13. package/dist/agentdb-adapter.js.map +1 -1
  14. package/dist/auto-memory-bridge.d.ts +226 -0
  15. package/dist/auto-memory-bridge.d.ts.map +1 -0
  16. package/dist/auto-memory-bridge.js +709 -0
  17. package/dist/auto-memory-bridge.js.map +1 -0
  18. package/dist/auto-memory-bridge.test.d.ts +8 -0
  19. package/dist/auto-memory-bridge.test.d.ts.map +1 -0
  20. package/dist/auto-memory-bridge.test.js +754 -0
  21. package/dist/auto-memory-bridge.test.js.map +1 -0
  22. package/dist/benchmark.test.d.ts +2 -0
  23. package/dist/benchmark.test.d.ts.map +1 -0
  24. package/dist/benchmark.test.js +277 -0
  25. package/dist/benchmark.test.js.map +1 -0
  26. package/dist/hybrid-backend.d.ts.map +1 -1
  27. package/dist/hybrid-backend.js +29 -4
  28. package/dist/hybrid-backend.js.map +1 -1
  29. package/dist/index.d.ts +8 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +8 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/learning-bridge.d.ts +137 -0
  34. package/dist/learning-bridge.d.ts.map +1 -0
  35. package/dist/learning-bridge.js +335 -0
  36. package/dist/learning-bridge.js.map +1 -0
  37. package/dist/learning-bridge.test.d.ts +8 -0
  38. package/dist/learning-bridge.test.d.ts.map +1 -0
  39. package/dist/learning-bridge.test.js +578 -0
  40. package/dist/learning-bridge.test.js.map +1 -0
  41. package/dist/memory-graph.d.ts +100 -0
  42. package/dist/memory-graph.d.ts.map +1 -0
  43. package/dist/memory-graph.js +333 -0
  44. package/dist/memory-graph.js.map +1 -0
  45. package/dist/memory-graph.test.d.ts +8 -0
  46. package/dist/memory-graph.test.d.ts.map +1 -0
  47. package/dist/memory-graph.test.js +609 -0
  48. package/dist/memory-graph.test.js.map +1 -0
  49. package/dist/sqlite-backend.js +3 -3
  50. package/dist/sqljs-backend.d.ts.map +1 -1
  51. package/dist/sqljs-backend.js +5 -2
  52. package/dist/sqljs-backend.js.map +1 -1
  53. package/dist/types.d.ts +3 -0
  54. package/dist/types.d.ts.map +1 -1
  55. package/package.json +20 -5
  56. package/.agentic-flow/intelligence.json +0 -16
  57. package/__tests__/coverage/base.css +0 -224
  58. package/__tests__/coverage/block-navigation.js +0 -87
  59. package/__tests__/coverage/coverage-final.json +0 -19
  60. package/__tests__/coverage/favicon.png +0 -0
  61. package/__tests__/coverage/index.html +0 -206
  62. package/__tests__/coverage/lcov-report/base.css +0 -224
  63. package/__tests__/coverage/lcov-report/block-navigation.js +0 -87
  64. package/__tests__/coverage/lcov-report/favicon.png +0 -0
  65. package/__tests__/coverage/lcov-report/index.html +0 -206
  66. package/__tests__/coverage/lcov-report/prettify.css +0 -1
  67. package/__tests__/coverage/lcov-report/prettify.js +0 -2
  68. package/__tests__/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  69. package/__tests__/coverage/lcov-report/sorter.js +0 -210
  70. package/__tests__/coverage/lcov-report/src/agentdb-adapter.ts.html +0 -2737
  71. package/__tests__/coverage/lcov-report/src/agentdb-backend.ts.html +0 -3130
  72. package/__tests__/coverage/lcov-report/src/application/commands/delete-memory.command.ts.html +0 -601
  73. package/__tests__/coverage/lcov-report/src/application/commands/index.html +0 -131
  74. package/__tests__/coverage/lcov-report/src/application/commands/store-memory.command.ts.html +0 -394
  75. package/__tests__/coverage/lcov-report/src/application/queries/index.html +0 -116
  76. package/__tests__/coverage/lcov-report/src/application/queries/search-memory.query.ts.html +0 -796
  77. package/__tests__/coverage/lcov-report/src/application/services/index.html +0 -116
  78. package/__tests__/coverage/lcov-report/src/application/services/memory-application-service.ts.html +0 -793
  79. package/__tests__/coverage/lcov-report/src/cache-manager.ts.html +0 -1633
  80. package/__tests__/coverage/lcov-report/src/database-provider.ts.html +0 -1618
  81. package/__tests__/coverage/lcov-report/src/domain/entities/index.html +0 -116
  82. package/__tests__/coverage/lcov-report/src/domain/entities/memory-entry.ts.html +0 -952
  83. package/__tests__/coverage/lcov-report/src/domain/services/index.html +0 -116
  84. package/__tests__/coverage/lcov-report/src/domain/services/memory-domain-service.ts.html +0 -1294
  85. package/__tests__/coverage/lcov-report/src/hnsw-index.ts.html +0 -3124
  86. package/__tests__/coverage/lcov-report/src/hybrid-backend.ts.html +0 -2167
  87. package/__tests__/coverage/lcov-report/src/index.html +0 -266
  88. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  89. package/__tests__/coverage/lcov-report/src/infrastructure/repositories/index.html +0 -116
  90. package/__tests__/coverage/lcov-report/src/migration.ts.html +0 -2092
  91. package/__tests__/coverage/lcov-report/src/query-builder.ts.html +0 -1711
  92. package/__tests__/coverage/lcov-report/src/sqlite-backend.ts.html +0 -2281
  93. package/__tests__/coverage/lcov-report/src/sqljs-backend.ts.html +0 -2374
  94. package/__tests__/coverage/lcov-report/src/types.ts.html +0 -2266
  95. package/__tests__/coverage/lcov.info +0 -10238
  96. package/__tests__/coverage/prettify.css +0 -1
  97. package/__tests__/coverage/prettify.js +0 -2
  98. package/__tests__/coverage/sort-arrow-sprite.png +0 -0
  99. package/__tests__/coverage/sorter.js +0 -210
  100. package/__tests__/coverage/src/agentdb-adapter.ts.html +0 -2737
  101. package/__tests__/coverage/src/agentdb-backend.ts.html +0 -3130
  102. package/__tests__/coverage/src/application/commands/delete-memory.command.ts.html +0 -601
  103. package/__tests__/coverage/src/application/commands/index.html +0 -131
  104. package/__tests__/coverage/src/application/commands/store-memory.command.ts.html +0 -394
  105. package/__tests__/coverage/src/application/queries/index.html +0 -116
  106. package/__tests__/coverage/src/application/queries/search-memory.query.ts.html +0 -796
  107. package/__tests__/coverage/src/application/services/index.html +0 -116
  108. package/__tests__/coverage/src/application/services/memory-application-service.ts.html +0 -793
  109. package/__tests__/coverage/src/cache-manager.ts.html +0 -1633
  110. package/__tests__/coverage/src/database-provider.ts.html +0 -1618
  111. package/__tests__/coverage/src/domain/entities/index.html +0 -116
  112. package/__tests__/coverage/src/domain/entities/memory-entry.ts.html +0 -952
  113. package/__tests__/coverage/src/domain/services/index.html +0 -116
  114. package/__tests__/coverage/src/domain/services/memory-domain-service.ts.html +0 -1294
  115. package/__tests__/coverage/src/hnsw-index.ts.html +0 -3124
  116. package/__tests__/coverage/src/hybrid-backend.ts.html +0 -2167
  117. package/__tests__/coverage/src/index.html +0 -266
  118. package/__tests__/coverage/src/infrastructure/repositories/hybrid-memory-repository.ts.html +0 -1633
  119. package/__tests__/coverage/src/infrastructure/repositories/index.html +0 -116
  120. package/__tests__/coverage/src/migration.ts.html +0 -2092
  121. package/__tests__/coverage/src/query-builder.ts.html +0 -1711
  122. package/__tests__/coverage/src/sqlite-backend.ts.html +0 -2281
  123. package/__tests__/coverage/src/sqljs-backend.ts.html +0 -2374
  124. package/__tests__/coverage/src/types.ts.html +0 -2266
  125. package/benchmarks/cache-hit-rate.bench.ts +0 -535
  126. package/benchmarks/hnsw-indexing.bench.ts +0 -552
  127. package/benchmarks/memory-write.bench.ts +0 -469
  128. package/benchmarks/vector-search.bench.ts +0 -449
  129. package/docs/AGENTDB-INTEGRATION.md +0 -388
  130. package/docs/CROSS_PLATFORM.md +0 -505
  131. package/docs/WINDOWS_SUPPORT.md +0 -422
  132. package/examples/agentdb-example.ts +0 -345
  133. package/examples/cross-platform-usage.ts +0 -326
  134. package/framework/benchmark.ts +0 -112
  135. package/src/agentdb-adapter.ts +0 -884
  136. package/src/agentdb-backend.test.ts +0 -339
  137. package/src/agentdb-backend.ts +0 -1016
  138. package/src/application/commands/delete-memory.command.ts +0 -172
  139. package/src/application/commands/store-memory.command.ts +0 -103
  140. package/src/application/index.ts +0 -36
  141. package/src/application/queries/search-memory.query.ts +0 -237
  142. package/src/application/services/memory-application-service.ts +0 -236
  143. package/src/cache-manager.ts +0 -516
  144. package/src/database-provider.test.ts +0 -364
  145. package/src/database-provider.ts +0 -511
  146. package/src/domain/entities/memory-entry.ts +0 -289
  147. package/src/domain/index.ts +0 -35
  148. package/src/domain/repositories/memory-repository.interface.ts +0 -120
  149. package/src/domain/services/memory-domain-service.ts +0 -403
  150. package/src/hnsw-index.ts +0 -1013
  151. package/src/hybrid-backend.test.ts +0 -399
  152. package/src/hybrid-backend.ts +0 -694
  153. package/src/index.ts +0 -515
  154. package/src/infrastructure/index.ts +0 -23
  155. package/src/infrastructure/repositories/hybrid-memory-repository.ts +0 -516
  156. package/src/migration.ts +0 -669
  157. package/src/query-builder.ts +0 -542
  158. package/src/sqlite-backend.ts +0 -732
  159. package/src/sqljs-backend.ts +0 -763
  160. package/src/types.ts +0 -727
  161. package/tsconfig.json +0 -9
  162. package/tsconfig.tsbuildinfo +0 -1
  163. package/verify-cross-platform.ts +0 -170
@@ -1,2092 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/migration.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> migration.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>0/669</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>0/669</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></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
736
- <span class="cline-any cline-no">&nbsp;</span>
737
- <span class="cline-any cline-no">&nbsp;</span>
738
- <span class="cline-any cline-no">&nbsp;</span>
739
- <span class="cline-any cline-no">&nbsp;</span>
740
- <span class="cline-any cline-no">&nbsp;</span>
741
- <span class="cline-any cline-no">&nbsp;</span>
742
- <span class="cline-any cline-no">&nbsp;</span>
743
- <span class="cline-any cline-no">&nbsp;</span>
744
- <span class="cline-any cline-no">&nbsp;</span>
745
- <span class="cline-any cline-no">&nbsp;</span>
746
- <span class="cline-any cline-no">&nbsp;</span>
747
- <span class="cline-any cline-no">&nbsp;</span>
748
- <span class="cline-any cline-no">&nbsp;</span>
749
- <span class="cline-any cline-no">&nbsp;</span>
750
- <span class="cline-any cline-no">&nbsp;</span>
751
- <span class="cline-any cline-no">&nbsp;</span>
752
- <span class="cline-any cline-no">&nbsp;</span>
753
- <span class="cline-any cline-no">&nbsp;</span>
754
- <span class="cline-any cline-no">&nbsp;</span>
755
- <span class="cline-any cline-no">&nbsp;</span>
756
- <span class="cline-any cline-no">&nbsp;</span>
757
- <span class="cline-any cline-no">&nbsp;</span>
758
- <span class="cline-any cline-no">&nbsp;</span>
759
- <span class="cline-any cline-no">&nbsp;</span>
760
- <span class="cline-any cline-no">&nbsp;</span>
761
- <span class="cline-any cline-no">&nbsp;</span>
762
- <span class="cline-any cline-no">&nbsp;</span>
763
- <span class="cline-any cline-no">&nbsp;</span>
764
- <span class="cline-any cline-no">&nbsp;</span>
765
- <span class="cline-any cline-no">&nbsp;</span>
766
- <span class="cline-any cline-no">&nbsp;</span>
767
- <span class="cline-any cline-no">&nbsp;</span>
768
- <span class="cline-any cline-no">&nbsp;</span>
769
- <span class="cline-any cline-no">&nbsp;</span>
770
- <span class="cline-any cline-no">&nbsp;</span>
771
- <span class="cline-any cline-no">&nbsp;</span>
772
- <span class="cline-any cline-no">&nbsp;</span>
773
- <span class="cline-any cline-no">&nbsp;</span>
774
- <span class="cline-any cline-no">&nbsp;</span>
775
- <span class="cline-any cline-no">&nbsp;</span>
776
- <span class="cline-any cline-no">&nbsp;</span>
777
- <span class="cline-any cline-no">&nbsp;</span>
778
- <span class="cline-any cline-no">&nbsp;</span>
779
- <span class="cline-any cline-no">&nbsp;</span>
780
- <span class="cline-any cline-no">&nbsp;</span>
781
- <span class="cline-any cline-no">&nbsp;</span>
782
- <span class="cline-any cline-no">&nbsp;</span>
783
- <span class="cline-any cline-no">&nbsp;</span>
784
- <span class="cline-any cline-no">&nbsp;</span>
785
- <span class="cline-any cline-no">&nbsp;</span>
786
- <span class="cline-any cline-no">&nbsp;</span>
787
- <span class="cline-any cline-no">&nbsp;</span>
788
- <span class="cline-any cline-no">&nbsp;</span>
789
- <span class="cline-any cline-no">&nbsp;</span>
790
- <span class="cline-any cline-no">&nbsp;</span>
791
- <span class="cline-any cline-no">&nbsp;</span>
792
- <span class="cline-any cline-no">&nbsp;</span>
793
- <span class="cline-any cline-no">&nbsp;</span>
794
- <span class="cline-any cline-no">&nbsp;</span>
795
- <span class="cline-any cline-no">&nbsp;</span>
796
- <span class="cline-any cline-no">&nbsp;</span>
797
- <span class="cline-any cline-no">&nbsp;</span>
798
- <span class="cline-any cline-no">&nbsp;</span>
799
- <span class="cline-any cline-no">&nbsp;</span>
800
- <span class="cline-any cline-no">&nbsp;</span>
801
- <span class="cline-any cline-no">&nbsp;</span>
802
- <span class="cline-any cline-no">&nbsp;</span>
803
- <span class="cline-any cline-no">&nbsp;</span>
804
- <span class="cline-any cline-no">&nbsp;</span>
805
- <span class="cline-any cline-no">&nbsp;</span>
806
- <span class="cline-any cline-no">&nbsp;</span>
807
- <span class="cline-any cline-no">&nbsp;</span>
808
- <span class="cline-any cline-no">&nbsp;</span>
809
- <span class="cline-any cline-no">&nbsp;</span>
810
- <span class="cline-any cline-no">&nbsp;</span>
811
- <span class="cline-any cline-no">&nbsp;</span>
812
- <span class="cline-any cline-no">&nbsp;</span>
813
- <span class="cline-any cline-no">&nbsp;</span>
814
- <span class="cline-any cline-no">&nbsp;</span>
815
- <span class="cline-any cline-no">&nbsp;</span>
816
- <span class="cline-any cline-no">&nbsp;</span>
817
- <span class="cline-any cline-no">&nbsp;</span>
818
- <span class="cline-any cline-no">&nbsp;</span>
819
- <span class="cline-any cline-no">&nbsp;</span>
820
- <span class="cline-any cline-no">&nbsp;</span>
821
- <span class="cline-any cline-no">&nbsp;</span>
822
- <span class="cline-any cline-no">&nbsp;</span>
823
- <span class="cline-any cline-no">&nbsp;</span>
824
- <span class="cline-any cline-no">&nbsp;</span>
825
- <span class="cline-any cline-no">&nbsp;</span>
826
- <span class="cline-any cline-no">&nbsp;</span>
827
- <span class="cline-any cline-no">&nbsp;</span>
828
- <span class="cline-any cline-no">&nbsp;</span>
829
- <span class="cline-any cline-no">&nbsp;</span>
830
- <span class="cline-any cline-no">&nbsp;</span>
831
- <span class="cline-any cline-no">&nbsp;</span>
832
- <span class="cline-any cline-no">&nbsp;</span>
833
- <span class="cline-any cline-no">&nbsp;</span>
834
- <span class="cline-any cline-no">&nbsp;</span>
835
- <span class="cline-any cline-no">&nbsp;</span>
836
- <span class="cline-any cline-no">&nbsp;</span>
837
- <span class="cline-any cline-no">&nbsp;</span>
838
- <span class="cline-any cline-no">&nbsp;</span>
839
- <span class="cline-any cline-no">&nbsp;</span>
840
- <span class="cline-any cline-no">&nbsp;</span>
841
- <span class="cline-any cline-no">&nbsp;</span>
842
- <span class="cline-any cline-no">&nbsp;</span>
843
- <span class="cline-any cline-no">&nbsp;</span>
844
- <span class="cline-any cline-no">&nbsp;</span>
845
- <span class="cline-any cline-no">&nbsp;</span>
846
- <span class="cline-any cline-no">&nbsp;</span>
847
- <span class="cline-any cline-no">&nbsp;</span>
848
- <span class="cline-any cline-no">&nbsp;</span>
849
- <span class="cline-any cline-no">&nbsp;</span>
850
- <span class="cline-any cline-no">&nbsp;</span>
851
- <span class="cline-any cline-no">&nbsp;</span>
852
- <span class="cline-any cline-no">&nbsp;</span>
853
- <span class="cline-any cline-no">&nbsp;</span>
854
- <span class="cline-any cline-no">&nbsp;</span>
855
- <span class="cline-any cline-no">&nbsp;</span>
856
- <span class="cline-any cline-no">&nbsp;</span>
857
- <span class="cline-any cline-no">&nbsp;</span>
858
- <span class="cline-any cline-no">&nbsp;</span>
859
- <span class="cline-any cline-no">&nbsp;</span>
860
- <span class="cline-any cline-no">&nbsp;</span>
861
- <span class="cline-any cline-no">&nbsp;</span>
862
- <span class="cline-any cline-no">&nbsp;</span>
863
- <span class="cline-any cline-no">&nbsp;</span>
864
- <span class="cline-any cline-no">&nbsp;</span>
865
- <span class="cline-any cline-no">&nbsp;</span>
866
- <span class="cline-any cline-no">&nbsp;</span>
867
- <span class="cline-any cline-no">&nbsp;</span>
868
- <span class="cline-any cline-no">&nbsp;</span>
869
- <span class="cline-any cline-no">&nbsp;</span>
870
- <span class="cline-any cline-no">&nbsp;</span>
871
- <span class="cline-any cline-no">&nbsp;</span>
872
- <span class="cline-any cline-no">&nbsp;</span>
873
- <span class="cline-any cline-no">&nbsp;</span>
874
- <span class="cline-any cline-no">&nbsp;</span>
875
- <span class="cline-any cline-no">&nbsp;</span>
876
- <span class="cline-any cline-no">&nbsp;</span>
877
- <span class="cline-any cline-no">&nbsp;</span>
878
- <span class="cline-any cline-no">&nbsp;</span>
879
- <span class="cline-any cline-no">&nbsp;</span>
880
- <span class="cline-any cline-no">&nbsp;</span>
881
- <span class="cline-any cline-no">&nbsp;</span>
882
- <span class="cline-any cline-no">&nbsp;</span>
883
- <span class="cline-any cline-no">&nbsp;</span>
884
- <span class="cline-any cline-no">&nbsp;</span>
885
- <span class="cline-any cline-no">&nbsp;</span>
886
- <span class="cline-any cline-no">&nbsp;</span>
887
- <span class="cline-any cline-no">&nbsp;</span>
888
- <span class="cline-any cline-no">&nbsp;</span>
889
- <span class="cline-any cline-no">&nbsp;</span>
890
- <span class="cline-any cline-no">&nbsp;</span>
891
- <span class="cline-any cline-no">&nbsp;</span>
892
- <span class="cline-any cline-no">&nbsp;</span>
893
- <span class="cline-any cline-no">&nbsp;</span>
894
- <span class="cline-any cline-no">&nbsp;</span>
895
- <span class="cline-any cline-no">&nbsp;</span>
896
- <span class="cline-any cline-no">&nbsp;</span>
897
- <span class="cline-any cline-no">&nbsp;</span>
898
- <span class="cline-any cline-no">&nbsp;</span>
899
- <span class="cline-any cline-no">&nbsp;</span>
900
- <span class="cline-any cline-no">&nbsp;</span>
901
- <span class="cline-any cline-no">&nbsp;</span>
902
- <span class="cline-any cline-no">&nbsp;</span>
903
- <span class="cline-any cline-no">&nbsp;</span>
904
- <span class="cline-any cline-no">&nbsp;</span>
905
- <span class="cline-any cline-no">&nbsp;</span>
906
- <span class="cline-any cline-no">&nbsp;</span>
907
- <span class="cline-any cline-no">&nbsp;</span>
908
- <span class="cline-any cline-no">&nbsp;</span>
909
- <span class="cline-any cline-no">&nbsp;</span>
910
- <span class="cline-any cline-no">&nbsp;</span>
911
- <span class="cline-any cline-no">&nbsp;</span>
912
- <span class="cline-any cline-no">&nbsp;</span>
913
- <span class="cline-any cline-no">&nbsp;</span>
914
- <span class="cline-any cline-no">&nbsp;</span>
915
- <span class="cline-any cline-no">&nbsp;</span>
916
- <span class="cline-any cline-no">&nbsp;</span>
917
- <span class="cline-any cline-no">&nbsp;</span>
918
- <span class="cline-any cline-no">&nbsp;</span>
919
- <span class="cline-any cline-no">&nbsp;</span>
920
- <span class="cline-any cline-no">&nbsp;</span>
921
- <span class="cline-any cline-no">&nbsp;</span>
922
- <span class="cline-any cline-no">&nbsp;</span>
923
- <span class="cline-any cline-no">&nbsp;</span>
924
- <span class="cline-any cline-no">&nbsp;</span>
925
- <span class="cline-any cline-no">&nbsp;</span>
926
- <span class="cline-any cline-no">&nbsp;</span>
927
- <span class="cline-any cline-no">&nbsp;</span>
928
- <span class="cline-any cline-no">&nbsp;</span>
929
- <span class="cline-any cline-no">&nbsp;</span>
930
- <span class="cline-any cline-no">&nbsp;</span>
931
- <span class="cline-any cline-no">&nbsp;</span>
932
- <span class="cline-any cline-no">&nbsp;</span>
933
- <span class="cline-any cline-no">&nbsp;</span>
934
- <span class="cline-any cline-no">&nbsp;</span>
935
- <span class="cline-any cline-no">&nbsp;</span>
936
- <span class="cline-any cline-no">&nbsp;</span>
937
- <span class="cline-any cline-no">&nbsp;</span>
938
- <span class="cline-any cline-no">&nbsp;</span>
939
- <span class="cline-any cline-no">&nbsp;</span>
940
- <span class="cline-any cline-no">&nbsp;</span>
941
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
945
- <span class="cline-any cline-no">&nbsp;</span>
946
- <span class="cline-any cline-no">&nbsp;</span>
947
- <span class="cline-any cline-no">&nbsp;</span>
948
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
952
- <span class="cline-any cline-no">&nbsp;</span>
953
- <span class="cline-any cline-no">&nbsp;</span>
954
- <span class="cline-any cline-no">&nbsp;</span>
955
- <span class="cline-any cline-no">&nbsp;</span>
956
- <span class="cline-any cline-no">&nbsp;</span>
957
- <span class="cline-any cline-no">&nbsp;</span>
958
- <span class="cline-any cline-no">&nbsp;</span>
959
- <span class="cline-any cline-no">&nbsp;</span>
960
- <span class="cline-any cline-no">&nbsp;</span>
961
- <span class="cline-any cline-no">&nbsp;</span>
962
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
966
- <span class="cline-any cline-no">&nbsp;</span>
967
- <span class="cline-any cline-no">&nbsp;</span>
968
- <span class="cline-any cline-no">&nbsp;</span>
969
- <span class="cline-any cline-no">&nbsp;</span>
970
- <span class="cline-any cline-no">&nbsp;</span>
971
- <span class="cline-any cline-no">&nbsp;</span>
972
- <span class="cline-any cline-no">&nbsp;</span>
973
- <span class="cline-any cline-no">&nbsp;</span>
974
- <span class="cline-any cline-no">&nbsp;</span>
975
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
979
- <span class="cline-any cline-no">&nbsp;</span>
980
- <span class="cline-any cline-no">&nbsp;</span>
981
- <span class="cline-any cline-no">&nbsp;</span>
982
- <span class="cline-any cline-no">&nbsp;</span>
983
- <span class="cline-any cline-no">&nbsp;</span>
984
- <span class="cline-any cline-no">&nbsp;</span>
985
- <span class="cline-any cline-no">&nbsp;</span>
986
- <span class="cline-any cline-no">&nbsp;</span>
987
- <span class="cline-any cline-no">&nbsp;</span>
988
- <span class="cline-any cline-no">&nbsp;</span>
989
- <span class="cline-any cline-no">&nbsp;</span>
990
- <span class="cline-any cline-no">&nbsp;</span>
991
- <span class="cline-any cline-no">&nbsp;</span>
992
- <span class="cline-any cline-no">&nbsp;</span>
993
- <span class="cline-any cline-no">&nbsp;</span>
994
- <span class="cline-any cline-no">&nbsp;</span>
995
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
999
- <span class="cline-any cline-no">&nbsp;</span>
1000
- <span class="cline-any cline-no">&nbsp;</span>
1001
- <span class="cline-any cline-no">&nbsp;</span>
1002
- <span class="cline-any cline-no">&nbsp;</span>
1003
- <span class="cline-any cline-no">&nbsp;</span>
1004
- <span class="cline-any cline-no">&nbsp;</span>
1005
- <span class="cline-any cline-no">&nbsp;</span>
1006
- <span class="cline-any cline-no">&nbsp;</span>
1007
- <span class="cline-any cline-no">&nbsp;</span>
1008
- <span class="cline-any cline-no">&nbsp;</span>
1009
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1018
- <span class="cline-any cline-no">&nbsp;</span>
1019
- <span class="cline-any cline-no">&nbsp;</span>
1020
- <span class="cline-any cline-no">&nbsp;</span>
1021
- <span class="cline-any cline-no">&nbsp;</span>
1022
- <span class="cline-any cline-no">&nbsp;</span>
1023
- <span class="cline-any cline-no">&nbsp;</span>
1024
- <span class="cline-any cline-no">&nbsp;</span>
1025
- <span class="cline-any cline-no">&nbsp;</span>
1026
- <span class="cline-any cline-no">&nbsp;</span>
1027
- <span class="cline-any cline-no">&nbsp;</span>
1028
- <span class="cline-any cline-no">&nbsp;</span>
1029
- <span class="cline-any cline-no">&nbsp;</span>
1030
- <span class="cline-any cline-no">&nbsp;</span>
1031
- <span class="cline-any cline-no">&nbsp;</span>
1032
- <span class="cline-any cline-no">&nbsp;</span>
1033
- <span class="cline-any cline-no">&nbsp;</span>
1034
- <span class="cline-any cline-no">&nbsp;</span>
1035
- <span class="cline-any cline-no">&nbsp;</span>
1036
- <span class="cline-any cline-no">&nbsp;</span>
1037
- <span class="cline-any cline-no">&nbsp;</span>
1038
- <span class="cline-any cline-no">&nbsp;</span>
1039
- <span class="cline-any cline-no">&nbsp;</span>
1040
- <span class="cline-any cline-no">&nbsp;</span>
1041
- <span class="cline-any cline-no">&nbsp;</span>
1042
- <span class="cline-any cline-no">&nbsp;</span>
1043
- <span class="cline-any cline-no">&nbsp;</span>
1044
- <span class="cline-any cline-no">&nbsp;</span>
1045
- <span class="cline-any cline-no">&nbsp;</span>
1046
- <span class="cline-any cline-no">&nbsp;</span>
1047
- <span class="cline-any cline-no">&nbsp;</span>
1048
- <span class="cline-any cline-no">&nbsp;</span>
1049
- <span class="cline-any cline-no">&nbsp;</span>
1050
- <span class="cline-any cline-no">&nbsp;</span>
1051
- <span class="cline-any cline-no">&nbsp;</span>
1052
- <span class="cline-any cline-no">&nbsp;</span>
1053
- <span class="cline-any cline-no">&nbsp;</span>
1054
- <span class="cline-any cline-no">&nbsp;</span>
1055
- <span class="cline-any cline-no">&nbsp;</span>
1056
- <span class="cline-any cline-no">&nbsp;</span>
1057
- <span class="cline-any cline-no">&nbsp;</span>
1058
- <span class="cline-any cline-no">&nbsp;</span>
1059
- <span class="cline-any cline-no">&nbsp;</span>
1060
- <span class="cline-any cline-no">&nbsp;</span>
1061
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1071
- <span class="cline-any cline-no">&nbsp;</span>
1072
- <span class="cline-any cline-no">&nbsp;</span>
1073
- <span class="cline-any cline-no">&nbsp;</span>
1074
- <span class="cline-any cline-no">&nbsp;</span>
1075
- <span class="cline-any cline-no">&nbsp;</span>
1076
- <span class="cline-any cline-no">&nbsp;</span>
1077
- <span class="cline-any cline-no">&nbsp;</span>
1078
- <span class="cline-any cline-no">&nbsp;</span>
1079
- <span class="cline-any cline-no">&nbsp;</span>
1080
- <span class="cline-any cline-no">&nbsp;</span>
1081
- <span class="cline-any cline-no">&nbsp;</span>
1082
- <span class="cline-any cline-no">&nbsp;</span>
1083
- <span class="cline-any cline-no">&nbsp;</span>
1084
- <span class="cline-any cline-no">&nbsp;</span>
1085
- <span class="cline-any cline-no">&nbsp;</span>
1086
- <span class="cline-any cline-no">&nbsp;</span>
1087
- <span class="cline-any cline-no">&nbsp;</span>
1088
- <span class="cline-any cline-no">&nbsp;</span>
1089
- <span class="cline-any cline-no">&nbsp;</span>
1090
- <span class="cline-any cline-no">&nbsp;</span>
1091
- <span class="cline-any cline-no">&nbsp;</span>
1092
- <span class="cline-any cline-no">&nbsp;</span>
1093
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1097
- <span class="cline-any cline-no">&nbsp;</span>
1098
- <span class="cline-any cline-no">&nbsp;</span>
1099
- <span class="cline-any cline-no">&nbsp;</span>
1100
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1104
- <span class="cline-any cline-no">&nbsp;</span>
1105
- <span class="cline-any cline-no">&nbsp;</span>
1106
- <span class="cline-any cline-no">&nbsp;</span>
1107
- <span class="cline-any cline-no">&nbsp;</span>
1108
- <span class="cline-any cline-no">&nbsp;</span>
1109
- <span class="cline-any cline-no">&nbsp;</span>
1110
- <span class="cline-any cline-no">&nbsp;</span>
1111
- <span class="cline-any cline-no">&nbsp;</span>
1112
- <span class="cline-any cline-no">&nbsp;</span>
1113
- <span class="cline-any cline-no">&nbsp;</span>
1114
- <span class="cline-any cline-no">&nbsp;</span>
1115
- <span class="cline-any cline-no">&nbsp;</span>
1116
- <span class="cline-any cline-no">&nbsp;</span>
1117
- <span class="cline-any cline-no">&nbsp;</span>
1118
- <span class="cline-any cline-no">&nbsp;</span>
1119
- <span class="cline-any cline-no">&nbsp;</span>
1120
- <span class="cline-any cline-no">&nbsp;</span>
1121
- <span class="cline-any cline-no">&nbsp;</span>
1122
- <span class="cline-any cline-no">&nbsp;</span>
1123
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1127
- <span class="cline-any cline-no">&nbsp;</span>
1128
- <span class="cline-any cline-no">&nbsp;</span>
1129
- <span class="cline-any cline-no">&nbsp;</span>
1130
- <span class="cline-any cline-no">&nbsp;</span>
1131
- <span class="cline-any cline-no">&nbsp;</span>
1132
- <span class="cline-any cline-no">&nbsp;</span>
1133
- <span class="cline-any cline-no">&nbsp;</span>
1134
- <span class="cline-any cline-no">&nbsp;</span>
1135
- <span class="cline-any cline-no">&nbsp;</span>
1136
- <span class="cline-any cline-no">&nbsp;</span>
1137
- <span class="cline-any cline-no">&nbsp;</span>
1138
- <span class="cline-any cline-no">&nbsp;</span>
1139
- <span class="cline-any cline-no">&nbsp;</span>
1140
- <span class="cline-any cline-no">&nbsp;</span>
1141
- <span class="cline-any cline-no">&nbsp;</span>
1142
- <span class="cline-any cline-no">&nbsp;</span>
1143
- <span class="cline-any cline-no">&nbsp;</span>
1144
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1148
- <span class="cline-any cline-no">&nbsp;</span>
1149
- <span class="cline-any cline-no">&nbsp;</span>
1150
- <span class="cline-any cline-no">&nbsp;</span>
1151
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1155
- <span class="cline-any cline-no">&nbsp;</span>
1156
- <span class="cline-any cline-no">&nbsp;</span>
1157
- <span class="cline-any cline-no">&nbsp;</span>
1158
- <span class="cline-any cline-no">&nbsp;</span>
1159
- <span class="cline-any cline-no">&nbsp;</span>
1160
- <span class="cline-any cline-no">&nbsp;</span>
1161
- <span class="cline-any cline-no">&nbsp;</span>
1162
- <span class="cline-any cline-no">&nbsp;</span>
1163
- <span class="cline-any cline-no">&nbsp;</span>
1164
- <span class="cline-any cline-no">&nbsp;</span>
1165
- <span class="cline-any cline-no">&nbsp;</span>
1166
- <span class="cline-any cline-no">&nbsp;</span>
1167
- <span class="cline-any cline-no">&nbsp;</span>
1168
- <span class="cline-any cline-no">&nbsp;</span>
1169
- <span class="cline-any cline-no">&nbsp;</span>
1170
- <span class="cline-any cline-no">&nbsp;</span>
1171
- <span class="cline-any cline-no">&nbsp;</span>
1172
- <span class="cline-any cline-no">&nbsp;</span>
1173
- <span class="cline-any cline-no">&nbsp;</span>
1174
- <span class="cline-any cline-no">&nbsp;</span>
1175
- <span class="cline-any cline-no">&nbsp;</span>
1176
- <span class="cline-any cline-no">&nbsp;</span>
1177
- <span class="cline-any cline-no">&nbsp;</span>
1178
- <span class="cline-any cline-no">&nbsp;</span>
1179
- <span class="cline-any cline-no">&nbsp;</span>
1180
- <span class="cline-any cline-no">&nbsp;</span>
1181
- <span class="cline-any cline-no">&nbsp;</span>
1182
- <span class="cline-any cline-no">&nbsp;</span>
1183
- <span class="cline-any cline-no">&nbsp;</span>
1184
- <span class="cline-any cline-no">&nbsp;</span>
1185
- <span class="cline-any cline-no">&nbsp;</span>
1186
- <span class="cline-any cline-no">&nbsp;</span>
1187
- <span class="cline-any cline-no">&nbsp;</span>
1188
- <span class="cline-any cline-no">&nbsp;</span>
1189
- <span class="cline-any cline-no">&nbsp;</span>
1190
- <span class="cline-any cline-no">&nbsp;</span>
1191
- <span class="cline-any cline-no">&nbsp;</span>
1192
- <span class="cline-any cline-no">&nbsp;</span>
1193
- <span class="cline-any cline-no">&nbsp;</span>
1194
- <span class="cline-any cline-no">&nbsp;</span>
1195
- <span class="cline-any cline-no">&nbsp;</span>
1196
- <span class="cline-any cline-no">&nbsp;</span>
1197
- <span class="cline-any cline-no">&nbsp;</span>
1198
- <span class="cline-any cline-no">&nbsp;</span>
1199
- <span class="cline-any cline-no">&nbsp;</span>
1200
- <span class="cline-any cline-no">&nbsp;</span>
1201
- <span class="cline-any cline-no">&nbsp;</span>
1202
- <span class="cline-any cline-no">&nbsp;</span>
1203
- <span class="cline-any cline-no">&nbsp;</span>
1204
- <span class="cline-any cline-no">&nbsp;</span>
1205
- <span class="cline-any cline-no">&nbsp;</span>
1206
- <span class="cline-any cline-no">&nbsp;</span>
1207
- <span class="cline-any cline-no">&nbsp;</span>
1208
- <span class="cline-any cline-no">&nbsp;</span>
1209
- <span class="cline-any cline-no">&nbsp;</span>
1210
- <span class="cline-any cline-no">&nbsp;</span>
1211
- <span class="cline-any cline-no">&nbsp;</span>
1212
- <span class="cline-any cline-no">&nbsp;</span>
1213
- <span class="cline-any cline-no">&nbsp;</span>
1214
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1218
- <span class="cline-any cline-no">&nbsp;</span>
1219
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1223
- <span class="cline-any cline-no">&nbsp;</span>
1224
- <span class="cline-any cline-no">&nbsp;</span>
1225
- <span class="cline-any cline-no">&nbsp;</span>
1226
- <span class="cline-any cline-no">&nbsp;</span>
1227
- <span class="cline-any cline-no">&nbsp;</span>
1228
- <span class="cline-any cline-no">&nbsp;</span>
1229
- <span class="cline-any cline-no">&nbsp;</span>
1230
- <span class="cline-any cline-no">&nbsp;</span>
1231
- <span class="cline-any cline-no">&nbsp;</span>
1232
- <span class="cline-any cline-no">&nbsp;</span>
1233
- <span class="cline-any cline-no">&nbsp;</span>
1234
- <span class="cline-any cline-no">&nbsp;</span>
1235
- <span class="cline-any cline-no">&nbsp;</span>
1236
- <span class="cline-any cline-no">&nbsp;</span>
1237
- <span class="cline-any cline-no">&nbsp;</span>
1238
- <span class="cline-any cline-no">&nbsp;</span>
1239
- <span class="cline-any cline-no">&nbsp;</span>
1240
- <span class="cline-any cline-no">&nbsp;</span>
1241
- <span class="cline-any cline-no">&nbsp;</span>
1242
- <span class="cline-any cline-no">&nbsp;</span>
1243
- <span class="cline-any cline-no">&nbsp;</span>
1244
- <span class="cline-any cline-no">&nbsp;</span>
1245
- <span class="cline-any cline-no">&nbsp;</span>
1246
- <span class="cline-any cline-no">&nbsp;</span>
1247
- <span class="cline-any cline-no">&nbsp;</span>
1248
- <span class="cline-any cline-no">&nbsp;</span>
1249
- <span class="cline-any cline-no">&nbsp;</span>
1250
- <span class="cline-any cline-no">&nbsp;</span>
1251
- <span class="cline-any cline-no">&nbsp;</span>
1252
- <span class="cline-any cline-no">&nbsp;</span>
1253
- <span class="cline-any cline-no">&nbsp;</span>
1254
- <span class="cline-any cline-no">&nbsp;</span>
1255
- <span class="cline-any cline-no">&nbsp;</span>
1256
- <span class="cline-any cline-no">&nbsp;</span>
1257
- <span class="cline-any cline-no">&nbsp;</span>
1258
- <span class="cline-any cline-no">&nbsp;</span>
1259
- <span class="cline-any cline-no">&nbsp;</span>
1260
- <span class="cline-any cline-no">&nbsp;</span>
1261
- <span class="cline-any cline-no">&nbsp;</span>
1262
- <span class="cline-any cline-no">&nbsp;</span>
1263
- <span class="cline-any cline-no">&nbsp;</span>
1264
- <span class="cline-any cline-no">&nbsp;</span>
1265
- <span class="cline-any cline-no">&nbsp;</span>
1266
- <span class="cline-any cline-no">&nbsp;</span>
1267
- <span class="cline-any cline-no">&nbsp;</span>
1268
- <span class="cline-any cline-no">&nbsp;</span>
1269
- <span class="cline-any cline-no">&nbsp;</span>
1270
- <span class="cline-any cline-no">&nbsp;</span>
1271
- <span class="cline-any cline-no">&nbsp;</span>
1272
- <span class="cline-any cline-no">&nbsp;</span>
1273
- <span class="cline-any cline-no">&nbsp;</span>
1274
- <span class="cline-any cline-no">&nbsp;</span>
1275
- <span class="cline-any cline-no">&nbsp;</span>
1276
- <span class="cline-any cline-no">&nbsp;</span>
1277
- <span class="cline-any cline-no">&nbsp;</span>
1278
- <span class="cline-any cline-no">&nbsp;</span>
1279
- <span class="cline-any cline-no">&nbsp;</span>
1280
- <span class="cline-any cline-no">&nbsp;</span>
1281
- <span class="cline-any cline-no">&nbsp;</span>
1282
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1286
- <span class="cline-any cline-no">&nbsp;</span>
1287
- <span class="cline-any cline-no">&nbsp;</span>
1288
- <span class="cline-any cline-no">&nbsp;</span>
1289
- <span class="cline-any cline-no">&nbsp;</span>
1290
- <span class="cline-any cline-no">&nbsp;</span>
1291
- <span class="cline-any cline-no">&nbsp;</span>
1292
- <span class="cline-any cline-no">&nbsp;</span>
1293
- <span class="cline-any cline-no">&nbsp;</span>
1294
- <span class="cline-any cline-no">&nbsp;</span>
1295
- <span class="cline-any cline-no">&nbsp;</span>
1296
- <span class="cline-any cline-no">&nbsp;</span>
1297
- <span class="cline-any cline-no">&nbsp;</span>
1298
- <span class="cline-any cline-no">&nbsp;</span>
1299
- <span class="cline-any cline-no">&nbsp;</span>
1300
- <span class="cline-any cline-no">&nbsp;</span>
1301
- <span class="cline-any cline-no">&nbsp;</span>
1302
- <span class="cline-any cline-no">&nbsp;</span>
1303
- <span class="cline-any cline-no">&nbsp;</span>
1304
- <span class="cline-any cline-no">&nbsp;</span>
1305
- <span class="cline-any cline-no">&nbsp;</span>
1306
- <span class="cline-any cline-no">&nbsp;</span>
1307
- <span class="cline-any cline-no">&nbsp;</span>
1308
- <span class="cline-any cline-no">&nbsp;</span>
1309
- <span class="cline-any cline-no">&nbsp;</span>
1310
- <span class="cline-any cline-no">&nbsp;</span>
1311
- <span class="cline-any cline-no">&nbsp;</span>
1312
- <span class="cline-any cline-no">&nbsp;</span>
1313
- <span class="cline-any cline-no">&nbsp;</span>
1314
- <span class="cline-any cline-no">&nbsp;</span>
1315
- <span class="cline-any cline-no">&nbsp;</span>
1316
- <span class="cline-any cline-no">&nbsp;</span>
1317
- <span class="cline-any cline-no">&nbsp;</span>
1318
- <span class="cline-any cline-no">&nbsp;</span>
1319
- <span class="cline-any cline-no">&nbsp;</span>
1320
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1324
- <span class="cline-any cline-no">&nbsp;</span>
1325
- <span class="cline-any cline-no">&nbsp;</span>
1326
- <span class="cline-any cline-no">&nbsp;</span>
1327
- <span class="cline-any cline-no">&nbsp;</span>
1328
- <span class="cline-any cline-no">&nbsp;</span>
1329
- <span class="cline-any cline-no">&nbsp;</span>
1330
- <span class="cline-any cline-no">&nbsp;</span>
1331
- <span class="cline-any cline-no">&nbsp;</span>
1332
- <span class="cline-any cline-no">&nbsp;</span>
1333
- <span class="cline-any cline-no">&nbsp;</span>
1334
- <span class="cline-any cline-no">&nbsp;</span>
1335
- <span class="cline-any cline-no">&nbsp;</span>
1336
- <span class="cline-any cline-no">&nbsp;</span>
1337
- <span class="cline-any cline-no">&nbsp;</span>
1338
- <span class="cline-any cline-no">&nbsp;</span>
1339
- <span class="cline-any cline-no">&nbsp;</span>
1340
- <span class="cline-any cline-no">&nbsp;</span>
1341
- <span class="cline-any cline-no">&nbsp;</span>
1342
- <span class="cline-any cline-no">&nbsp;</span>
1343
- <span class="cline-any cline-no">&nbsp;</span>
1344
- <span class="cline-any cline-no">&nbsp;</span>
1345
- <span class="cline-any cline-no">&nbsp;</span>
1346
- <span class="cline-any cline-no">&nbsp;</span>
1347
- <span class="cline-any cline-no">&nbsp;</span>
1348
- <span class="cline-any cline-no">&nbsp;</span>
1349
- <span class="cline-any cline-no">&nbsp;</span>
1350
- <span class="cline-any cline-no">&nbsp;</span>
1351
- <span class="cline-any cline-no">&nbsp;</span>
1352
- <span class="cline-any cline-no">&nbsp;</span>
1353
- <span class="cline-any cline-no">&nbsp;</span>
1354
- <span class="cline-any cline-no">&nbsp;</span>
1355
- <span class="cline-any cline-no">&nbsp;</span>
1356
- <span class="cline-any cline-no">&nbsp;</span>
1357
- <span class="cline-any cline-no">&nbsp;</span>
1358
- <span class="cline-any cline-no">&nbsp;</span>
1359
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1363
- <span class="cline-any cline-no">&nbsp;</span>
1364
- <span class="cline-any cline-no">&nbsp;</span>
1365
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
1369
- <span class="cline-any cline-no">&nbsp;</span>
1370
- <span class="cline-any cline-no">&nbsp;</span>
1371
- <span class="cline-any cline-no">&nbsp;</span>
1372
- <span class="cline-any cline-no">&nbsp;</span>
1373
- <span class="cline-any cline-no">&nbsp;</span>
1374
- <span class="cline-any cline-no">&nbsp;</span>
1375
- <span class="cline-any cline-no">&nbsp;</span>
1376
- <span class="cline-any cline-no">&nbsp;</span>
1377
- <span class="cline-any cline-no">&nbsp;</span>
1378
- <span class="cline-any cline-no">&nbsp;</span>
1379
- <span class="cline-any cline-no">&nbsp;</span>
1380
- <span class="cline-any cline-no">&nbsp;</span>
1381
- <span class="cline-any cline-no">&nbsp;</span>
1382
- <span class="cline-any cline-no">&nbsp;</span>
1383
- <span class="cline-any cline-no">&nbsp;</span>
1384
- <span class="cline-any cline-no">&nbsp;</span>
1385
- <span class="cline-any cline-no">&nbsp;</span>
1386
- <span class="cline-any cline-no">&nbsp;</span>
1387
- <span class="cline-any cline-no">&nbsp;</span>
1388
- <span class="cline-any cline-no">&nbsp;</span>
1389
- <span class="cline-any cline-no">&nbsp;</span>
1390
- <span class="cline-any cline-no">&nbsp;</span>
1391
- <span class="cline-any cline-no">&nbsp;</span>
1392
- <span class="cline-any cline-no">&nbsp;</span>
1393
- <span class="cline-any cline-no">&nbsp;</span>
1394
- <span class="cline-any cline-no">&nbsp;</span>
1395
- <span class="cline-any cline-no">&nbsp;</span>
1396
- <span class="cline-any cline-no">&nbsp;</span>
1397
- <span class="cline-any cline-no">&nbsp;</span>
1398
- <span class="cline-any cline-no">&nbsp;</span>
1399
- <span class="cline-any cline-no">&nbsp;</span>
1400
- <span class="cline-any cline-no">&nbsp;</span>
1401
- <span class="cline-any cline-no">&nbsp;</span>
1402
- <span class="cline-any cline-no">&nbsp;</span>
1403
- <span class="cline-any cline-no">&nbsp;</span>
1404
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >/**<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
1405
- <span class="cstat-no" title="statement not covered" > * V3 Memory Migration Utility</span>
1406
- <span class="cstat-no" title="statement not covered" > *</span>
1407
- <span class="cstat-no" title="statement not covered" > * Migrates data from legacy memory systems (SQLite, Markdown, JSON, etc.)</span>
1408
- <span class="cstat-no" title="statement not covered" > * to the unified AgentDB-backed memory system with HNSW indexing.</span>
1409
- <span class="cstat-no" title="statement not covered" > *</span>
1410
- <span class="cstat-no" title="statement not covered" > * @module v3/memory/migration</span>
1411
- <span class="cstat-no" title="statement not covered" > */</span>
1412
- <span class="cstat-no" title="statement not covered" ></span>
1413
- <span class="cstat-no" title="statement not covered" >import { EventEmitter } from 'node:events';</span>
1414
- <span class="cstat-no" title="statement not covered" >import { promises as fs } from 'node:fs';</span>
1415
- <span class="cstat-no" title="statement not covered" >import * as path from 'node:path';</span>
1416
- <span class="cstat-no" title="statement not covered" >import {</span>
1417
- <span class="cstat-no" title="statement not covered" > MigrationConfig,</span>
1418
- <span class="cstat-no" title="statement not covered" > MigrationProgress,</span>
1419
- <span class="cstat-no" title="statement not covered" > MigrationResult,</span>
1420
- <span class="cstat-no" title="statement not covered" > MigrationError,</span>
1421
- <span class="cstat-no" title="statement not covered" > MigrationSource,</span>
1422
- <span class="cstat-no" title="statement not covered" > MemoryEntry,</span>
1423
- <span class="cstat-no" title="statement not covered" > MemoryType,</span>
1424
- <span class="cstat-no" title="statement not covered" > MemoryEntryInput,</span>
1425
- <span class="cstat-no" title="statement not covered" > EmbeddingGenerator,</span>
1426
- <span class="cstat-no" title="statement not covered" > createDefaultEntry,</span>
1427
- <span class="cstat-no" title="statement not covered" >} from './types.js';</span>
1428
- <span class="cstat-no" title="statement not covered" >import { AgentDBAdapter } from './agentdb-adapter.js';</span>
1429
- <span class="cstat-no" title="statement not covered" ></span>
1430
- <span class="cstat-no" title="statement not covered" >/**</span>
1431
- <span class="cstat-no" title="statement not covered" > * Default migration configuration</span>
1432
- <span class="cstat-no" title="statement not covered" > */</span>
1433
- <span class="cstat-no" title="statement not covered" >const DEFAULT_MIGRATION_CONFIG: Partial&lt;MigrationConfig&gt; = {</span>
1434
- <span class="cstat-no" title="statement not covered" > batchSize: 100,</span>
1435
- <span class="cstat-no" title="statement not covered" > generateEmbeddings: true,</span>
1436
- <span class="cstat-no" title="statement not covered" > validateData: true,</span>
1437
- <span class="cstat-no" title="statement not covered" > continueOnError: true,</span>
1438
- <span class="cstat-no" title="statement not covered" >};</span>
1439
- <span class="cstat-no" title="statement not covered" ></span>
1440
- <span class="cstat-no" title="statement not covered" >/**</span>
1441
- <span class="cstat-no" title="statement not covered" > * Legacy entry format (common structure)</span>
1442
- <span class="cstat-no" title="statement not covered" > */</span>
1443
- <span class="cstat-no" title="statement not covered" >interface LegacyEntry {</span>
1444
- <span class="cstat-no" title="statement not covered" > id?: string;</span>
1445
- <span class="cstat-no" title="statement not covered" > key: string;</span>
1446
- <span class="cstat-no" title="statement not covered" > value: unknown;</span>
1447
- <span class="cstat-no" title="statement not covered" > namespace?: string;</span>
1448
- <span class="cstat-no" title="statement not covered" > tags?: string[];</span>
1449
- <span class="cstat-no" title="statement not covered" > metadata?: Record&lt;string, unknown&gt;;</span>
1450
- <span class="cstat-no" title="statement not covered" > timestamp?: number;</span>
1451
- <span class="cstat-no" title="statement not covered" > createdAt?: string | number;</span>
1452
- <span class="cstat-no" title="statement not covered" > updatedAt?: string | number;</span>
1453
- <span class="cstat-no" title="statement not covered" > created_at?: string | number;</span>
1454
- <span class="cstat-no" title="statement not covered" > updated_at?: string | number;</span>
1455
- <span class="cstat-no" title="statement not covered" >}</span>
1456
- <span class="cstat-no" title="statement not covered" ></span>
1457
- <span class="cstat-no" title="statement not covered" >/**</span>
1458
- <span class="cstat-no" title="statement not covered" > * Memory Migration Manager</span>
1459
- <span class="cstat-no" title="statement not covered" > *</span>
1460
- <span class="cstat-no" title="statement not covered" > * Handles migration from:</span>
1461
- <span class="cstat-no" title="statement not covered" > * - SQLite backends (.db files)</span>
1462
- <span class="cstat-no" title="statement not covered" > * - Markdown backends (.md files)</span>
1463
- <span class="cstat-no" title="statement not covered" > * - JSON memory stores (.json files)</span>
1464
- <span class="cstat-no" title="statement not covered" > * - MemoryManager instances</span>
1465
- <span class="cstat-no" title="statement not covered" > * - SwarmMemory instances</span>
1466
- <span class="cstat-no" title="statement not covered" > * - DistributedMemory instances</span>
1467
- <span class="cstat-no" title="statement not covered" > */</span>
1468
- <span class="cstat-no" title="statement not covered" >export class MemoryMigrator extends EventEmitter {</span>
1469
- <span class="cstat-no" title="statement not covered" > private config: MigrationConfig;</span>
1470
- <span class="cstat-no" title="statement not covered" > private target: AgentDBAdapter;</span>
1471
- <span class="cstat-no" title="statement not covered" > private embeddingGenerator?: EmbeddingGenerator;</span>
1472
- <span class="cstat-no" title="statement not covered" > private progress: MigrationProgress;</span>
1473
- <span class="cstat-no" title="statement not covered" ></span>
1474
- <span class="cstat-no" title="statement not covered" > constructor(</span>
1475
- <span class="cstat-no" title="statement not covered" > target: AgentDBAdapter,</span>
1476
- <span class="cstat-no" title="statement not covered" > config: Partial&lt;MigrationConfig&gt;,</span>
1477
- <span class="cstat-no" title="statement not covered" > embeddingGenerator?: EmbeddingGenerator</span>
1478
- <span class="cstat-no" title="statement not covered" > ) {</span>
1479
- <span class="cstat-no" title="statement not covered" > super();</span>
1480
- <span class="cstat-no" title="statement not covered" > this.target = target;</span>
1481
- <span class="cstat-no" title="statement not covered" > this.config = { ...DEFAULT_MIGRATION_CONFIG, ...config } as MigrationConfig;</span>
1482
- <span class="cstat-no" title="statement not covered" > this.embeddingGenerator = embeddingGenerator;</span>
1483
- <span class="cstat-no" title="statement not covered" > this.progress = this.initializeProgress();</span>
1484
- <span class="cstat-no" title="statement not covered" > }</span>
1485
- <span class="cstat-no" title="statement not covered" ></span>
1486
- <span class="cstat-no" title="statement not covered" > /**</span>
1487
- <span class="cstat-no" title="statement not covered" > * Run the migration</span>
1488
- <span class="cstat-no" title="statement not covered" > */</span>
1489
- <span class="cstat-no" title="statement not covered" > async migrate(): Promise&lt;MigrationResult&gt; {</span>
1490
- <span class="cstat-no" title="statement not covered" > const startTime = Date.now();</span>
1491
- <span class="cstat-no" title="statement not covered" > this.progress = this.initializeProgress();</span>
1492
- <span class="cstat-no" title="statement not covered" ></span>
1493
- <span class="cstat-no" title="statement not covered" > this.emit('migration:started', { source: this.config.source });</span>
1494
- <span class="cstat-no" title="statement not covered" ></span>
1495
- <span class="cstat-no" title="statement not covered" > try {</span>
1496
- <span class="cstat-no" title="statement not covered" > // Load entries from source</span>
1497
- <span class="cstat-no" title="statement not covered" > const entries = await this.loadFromSource();</span>
1498
- <span class="cstat-no" title="statement not covered" > this.progress.total = entries.length;</span>
1499
- <span class="cstat-no" title="statement not covered" > this.progress.totalBatches = Math.ceil(entries.length / this.config.batchSize);</span>
1500
- <span class="cstat-no" title="statement not covered" ></span>
1501
- <span class="cstat-no" title="statement not covered" > this.emit('migration:progress', { ...this.progress });</span>
1502
- <span class="cstat-no" title="statement not covered" ></span>
1503
- <span class="cstat-no" title="statement not covered" > // Process in batches</span>
1504
- <span class="cstat-no" title="statement not covered" > for (let i = 0; i &lt; entries.length; i += this.config.batchSize) {</span>
1505
- <span class="cstat-no" title="statement not covered" > const batch = entries.slice(i, i + this.config.batchSize);</span>
1506
- <span class="cstat-no" title="statement not covered" > this.progress.currentBatch = Math.floor(i / this.config.batchSize) + 1;</span>
1507
- <span class="cstat-no" title="statement not covered" ></span>
1508
- <span class="cstat-no" title="statement not covered" > await this.processBatch(batch);</span>
1509
- <span class="cstat-no" title="statement not covered" ></span>
1510
- <span class="cstat-no" title="statement not covered" > this.progress.percentage = Math.round(</span>
1511
- <span class="cstat-no" title="statement not covered" > (this.progress.migrated / this.progress.total) * 100</span>
1512
- <span class="cstat-no" title="statement not covered" > );</span>
1513
- <span class="cstat-no" title="statement not covered" > this.progress.estimatedTimeRemaining = this.estimateTimeRemaining(</span>
1514
- <span class="cstat-no" title="statement not covered" > startTime,</span>
1515
- <span class="cstat-no" title="statement not covered" > this.progress.migrated,</span>
1516
- <span class="cstat-no" title="statement not covered" > this.progress.total</span>
1517
- <span class="cstat-no" title="statement not covered" > );</span>
1518
- <span class="cstat-no" title="statement not covered" ></span>
1519
- <span class="cstat-no" title="statement not covered" > this.emit('migration:progress', { ...this.progress });</span>
1520
- <span class="cstat-no" title="statement not covered" > }</span>
1521
- <span class="cstat-no" title="statement not covered" ></span>
1522
- <span class="cstat-no" title="statement not covered" > const duration = Date.now() - startTime;</span>
1523
- <span class="cstat-no" title="statement not covered" ></span>
1524
- <span class="cstat-no" title="statement not covered" > const result: MigrationResult = {</span>
1525
- <span class="cstat-no" title="statement not covered" > success: this.progress.failed === 0 || this.config.continueOnError,</span>
1526
- <span class="cstat-no" title="statement not covered" > progress: { ...this.progress },</span>
1527
- <span class="cstat-no" title="statement not covered" > duration,</span>
1528
- <span class="cstat-no" title="statement not covered" > summary: this.generateSummary(),</span>
1529
- <span class="cstat-no" title="statement not covered" > };</span>
1530
- <span class="cstat-no" title="statement not covered" ></span>
1531
- <span class="cstat-no" title="statement not covered" > this.emit('migration:completed', result);</span>
1532
- <span class="cstat-no" title="statement not covered" > return result;</span>
1533
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1534
- <span class="cstat-no" title="statement not covered" > const duration = Date.now() - startTime;</span>
1535
- <span class="cstat-no" title="statement not covered" ></span>
1536
- <span class="cstat-no" title="statement not covered" > const result: MigrationResult = {</span>
1537
- <span class="cstat-no" title="statement not covered" > success: false,</span>
1538
- <span class="cstat-no" title="statement not covered" > progress: { ...this.progress },</span>
1539
- <span class="cstat-no" title="statement not covered" > duration,</span>
1540
- <span class="cstat-no" title="statement not covered" > summary: `Migration failed: ${(error as Error).message}`,</span>
1541
- <span class="cstat-no" title="statement not covered" > };</span>
1542
- <span class="cstat-no" title="statement not covered" ></span>
1543
- <span class="cstat-no" title="statement not covered" > this.emit('migration:failed', { error, result });</span>
1544
- <span class="cstat-no" title="statement not covered" > return result;</span>
1545
- <span class="cstat-no" title="statement not covered" > }</span>
1546
- <span class="cstat-no" title="statement not covered" > }</span>
1547
- <span class="cstat-no" title="statement not covered" ></span>
1548
- <span class="cstat-no" title="statement not covered" > /**</span>
1549
- <span class="cstat-no" title="statement not covered" > * Get current migration progress</span>
1550
- <span class="cstat-no" title="statement not covered" > */</span>
1551
- <span class="cstat-no" title="statement not covered" > getProgress(): MigrationProgress {</span>
1552
- <span class="cstat-no" title="statement not covered" > return { ...this.progress };</span>
1553
- <span class="cstat-no" title="statement not covered" > }</span>
1554
- <span class="cstat-no" title="statement not covered" ></span>
1555
- <span class="cstat-no" title="statement not covered" > // ===== Source Loaders =====</span>
1556
- <span class="cstat-no" title="statement not covered" ></span>
1557
- <span class="cstat-no" title="statement not covered" > private async loadFromSource(): Promise&lt;LegacyEntry[]&gt; {</span>
1558
- <span class="cstat-no" title="statement not covered" > switch (this.config.source) {</span>
1559
- <span class="cstat-no" title="statement not covered" > case 'sqlite':</span>
1560
- <span class="cstat-no" title="statement not covered" > return this.loadFromSQLite();</span>
1561
- <span class="cstat-no" title="statement not covered" > case 'markdown':</span>
1562
- <span class="cstat-no" title="statement not covered" > return this.loadFromMarkdown();</span>
1563
- <span class="cstat-no" title="statement not covered" > case 'json':</span>
1564
- <span class="cstat-no" title="statement not covered" > return this.loadFromJSON();</span>
1565
- <span class="cstat-no" title="statement not covered" > case 'memory-manager':</span>
1566
- <span class="cstat-no" title="statement not covered" > return this.loadFromMemoryManager();</span>
1567
- <span class="cstat-no" title="statement not covered" > case 'swarm-memory':</span>
1568
- <span class="cstat-no" title="statement not covered" > return this.loadFromSwarmMemory();</span>
1569
- <span class="cstat-no" title="statement not covered" > case 'distributed-memory':</span>
1570
- <span class="cstat-no" title="statement not covered" > return this.loadFromDistributedMemory();</span>
1571
- <span class="cstat-no" title="statement not covered" > default:</span>
1572
- <span class="cstat-no" title="statement not covered" > throw new Error(`Unknown migration source: ${this.config.source}`);</span>
1573
- <span class="cstat-no" title="statement not covered" > }</span>
1574
- <span class="cstat-no" title="statement not covered" > }</span>
1575
- <span class="cstat-no" title="statement not covered" ></span>
1576
- <span class="cstat-no" title="statement not covered" > private async loadFromSQLite(): Promise&lt;LegacyEntry[]&gt; {</span>
1577
- <span class="cstat-no" title="statement not covered" > const entries: LegacyEntry[] = [];</span>
1578
- <span class="cstat-no" title="statement not covered" > const dbPath = this.config.sourcePath;</span>
1579
- <span class="cstat-no" title="statement not covered" ></span>
1580
- <span class="cstat-no" title="statement not covered" > try {</span>
1581
- <span class="cstat-no" title="statement not covered" > // Dynamic import for better-sqlite3 or similar</span>
1582
- <span class="cstat-no" title="statement not covered" > // In production, would use actual SQLite library</span>
1583
- <span class="cstat-no" title="statement not covered" > const fileContent = await fs.readFile(dbPath);</span>
1584
- <span class="cstat-no" title="statement not covered" ></span>
1585
- <span class="cstat-no" title="statement not covered" > // Parse SQLite format (simplified - actual implementation would use SQLite library)</span>
1586
- <span class="cstat-no" title="statement not covered" > // For now, we'll try to read it as a JSON export format</span>
1587
- <span class="cstat-no" title="statement not covered" > if (dbPath.endsWith('.json')) {</span>
1588
- <span class="cstat-no" title="statement not covered" > const data = JSON.parse(fileContent.toString());</span>
1589
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(data)) {</span>
1590
- <span class="cstat-no" title="statement not covered" > return data;</span>
1591
- <span class="cstat-no" title="statement not covered" > } else if (data.entries) {</span>
1592
- <span class="cstat-no" title="statement not covered" > return data.entries;</span>
1593
- <span class="cstat-no" title="statement not covered" > }</span>
1594
- <span class="cstat-no" title="statement not covered" > }</span>
1595
- <span class="cstat-no" title="statement not covered" ></span>
1596
- <span class="cstat-no" title="statement not covered" > // SQLite parsing would go here using better-sqlite3 or sql.js</span>
1597
- <span class="cstat-no" title="statement not covered" > this.emit('migration:warning', {</span>
1598
- <span class="cstat-no" title="statement not covered" > message: 'Direct SQLite parsing requires additional setup. Using export format.',</span>
1599
- <span class="cstat-no" title="statement not covered" > });</span>
1600
- <span class="cstat-no" title="statement not covered" ></span>
1601
- <span class="cstat-no" title="statement not covered" > return entries;</span>
1602
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1603
- <span class="cstat-no" title="statement not covered" > throw new Error(`Failed to load SQLite: ${(error as Error).message}`);</span>
1604
- <span class="cstat-no" title="statement not covered" > }</span>
1605
- <span class="cstat-no" title="statement not covered" > }</span>
1606
- <span class="cstat-no" title="statement not covered" ></span>
1607
- <span class="cstat-no" title="statement not covered" > private async loadFromMarkdown(): Promise&lt;LegacyEntry[]&gt; {</span>
1608
- <span class="cstat-no" title="statement not covered" > const entries: LegacyEntry[] = [];</span>
1609
- <span class="cstat-no" title="statement not covered" > const basePath = this.config.sourcePath;</span>
1610
- <span class="cstat-no" title="statement not covered" ></span>
1611
- <span class="cstat-no" title="statement not covered" > try {</span>
1612
- <span class="cstat-no" title="statement not covered" > const files = await this.walkDirectory(basePath, '.md');</span>
1613
- <span class="cstat-no" title="statement not covered" ></span>
1614
- <span class="cstat-no" title="statement not covered" > for (const filePath of files) {</span>
1615
- <span class="cstat-no" title="statement not covered" > try {</span>
1616
- <span class="cstat-no" title="statement not covered" > const content = await fs.readFile(filePath, 'utf-8');</span>
1617
- <span class="cstat-no" title="statement not covered" > const entry = this.parseMarkdownEntry(filePath, content, basePath);</span>
1618
- <span class="cstat-no" title="statement not covered" > if (entry) {</span>
1619
- <span class="cstat-no" title="statement not covered" > entries.push(entry);</span>
1620
- <span class="cstat-no" title="statement not covered" > }</span>
1621
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1622
- <span class="cstat-no" title="statement not covered" > this.addError(filePath, (error as Error).message, 'PARSE_ERROR', true);</span>
1623
- <span class="cstat-no" title="statement not covered" > }</span>
1624
- <span class="cstat-no" title="statement not covered" > }</span>
1625
- <span class="cstat-no" title="statement not covered" ></span>
1626
- <span class="cstat-no" title="statement not covered" > return entries;</span>
1627
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1628
- <span class="cstat-no" title="statement not covered" > throw new Error(`Failed to load Markdown: ${(error as Error).message}`);</span>
1629
- <span class="cstat-no" title="statement not covered" > }</span>
1630
- <span class="cstat-no" title="statement not covered" > }</span>
1631
- <span class="cstat-no" title="statement not covered" ></span>
1632
- <span class="cstat-no" title="statement not covered" > private async loadFromJSON(): Promise&lt;LegacyEntry[]&gt; {</span>
1633
- <span class="cstat-no" title="statement not covered" > const filePath = this.config.sourcePath;</span>
1634
- <span class="cstat-no" title="statement not covered" ></span>
1635
- <span class="cstat-no" title="statement not covered" > try {</span>
1636
- <span class="cstat-no" title="statement not covered" > const content = await fs.readFile(filePath, 'utf-8');</span>
1637
- <span class="cstat-no" title="statement not covered" > const data = JSON.parse(content);</span>
1638
- <span class="cstat-no" title="statement not covered" ></span>
1639
- <span class="cstat-no" title="statement not covered" > // Handle different JSON formats</span>
1640
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(data)) {</span>
1641
- <span class="cstat-no" title="statement not covered" > return data;</span>
1642
- <span class="cstat-no" title="statement not covered" > } else if (data.entries) {</span>
1643
- <span class="cstat-no" title="statement not covered" > return data.entries;</span>
1644
- <span class="cstat-no" title="statement not covered" > } else if (typeof data === 'object') {</span>
1645
- <span class="cstat-no" title="statement not covered" > // Assume it's a namespace -&gt; entries map</span>
1646
- <span class="cstat-no" title="statement not covered" > const entries: LegacyEntry[] = [];</span>
1647
- <span class="cstat-no" title="statement not covered" > for (const [namespace, namespaceEntries] of Object.entries(data)) {</span>
1648
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(namespaceEntries)) {</span>
1649
- <span class="cstat-no" title="statement not covered" > for (const entry of namespaceEntries) {</span>
1650
- <span class="cstat-no" title="statement not covered" > entries.push({ ...entry, namespace });</span>
1651
- <span class="cstat-no" title="statement not covered" > }</span>
1652
- <span class="cstat-no" title="statement not covered" > }</span>
1653
- <span class="cstat-no" title="statement not covered" > }</span>
1654
- <span class="cstat-no" title="statement not covered" > return entries;</span>
1655
- <span class="cstat-no" title="statement not covered" > }</span>
1656
- <span class="cstat-no" title="statement not covered" ></span>
1657
- <span class="cstat-no" title="statement not covered" > return [];</span>
1658
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1659
- <span class="cstat-no" title="statement not covered" > throw new Error(`Failed to load JSON: ${(error as Error).message}`);</span>
1660
- <span class="cstat-no" title="statement not covered" > }</span>
1661
- <span class="cstat-no" title="statement not covered" > }</span>
1662
- <span class="cstat-no" title="statement not covered" ></span>
1663
- <span class="cstat-no" title="statement not covered" > private async loadFromMemoryManager(): Promise&lt;LegacyEntry[]&gt; {</span>
1664
- <span class="cstat-no" title="statement not covered" > // Would integrate with existing MemoryManager instance</span>
1665
- <span class="cstat-no" title="statement not covered" > // For now, try to load from common paths</span>
1666
- <span class="cstat-no" title="statement not covered" > const possiblePaths = [</span>
1667
- <span class="cstat-no" title="statement not covered" > './memory/memory-store.json',</span>
1668
- <span class="cstat-no" title="statement not covered" > './.swarm/memory.db',</span>
1669
- <span class="cstat-no" title="statement not covered" > './memory.json',</span>
1670
- <span class="cstat-no" title="statement not covered" > ];</span>
1671
- <span class="cstat-no" title="statement not covered" ></span>
1672
- <span class="cstat-no" title="statement not covered" > for (const p of possiblePaths) {</span>
1673
- <span class="cstat-no" title="statement not covered" > try {</span>
1674
- <span class="cstat-no" title="statement not covered" > const fullPath = path.resolve(this.config.sourcePath, p);</span>
1675
- <span class="cstat-no" title="statement not covered" > await fs.access(fullPath);</span>
1676
- <span class="cstat-no" title="statement not covered" > return this.loadFromJSON();</span>
1677
- <span class="cstat-no" title="statement not covered" > } catch {</span>
1678
- <span class="cstat-no" title="statement not covered" > continue;</span>
1679
- <span class="cstat-no" title="statement not covered" > }</span>
1680
- <span class="cstat-no" title="statement not covered" > }</span>
1681
- <span class="cstat-no" title="statement not covered" ></span>
1682
- <span class="cstat-no" title="statement not covered" > return [];</span>
1683
- <span class="cstat-no" title="statement not covered" > }</span>
1684
- <span class="cstat-no" title="statement not covered" ></span>
1685
- <span class="cstat-no" title="statement not covered" > private async loadFromSwarmMemory(): Promise&lt;LegacyEntry[]&gt; {</span>
1686
- <span class="cstat-no" title="statement not covered" > // Would integrate with SwarmMemory partitions</span>
1687
- <span class="cstat-no" title="statement not covered" > const entries: LegacyEntry[] = [];</span>
1688
- <span class="cstat-no" title="statement not covered" > const basePath = this.config.sourcePath;</span>
1689
- <span class="cstat-no" title="statement not covered" ></span>
1690
- <span class="cstat-no" title="statement not covered" > try {</span>
1691
- <span class="cstat-no" title="statement not covered" > // Check for swarm memory directory structure</span>
1692
- <span class="cstat-no" title="statement not covered" > const partitionsPath = path.join(basePath, '.swarm', 'memory');</span>
1693
- <span class="cstat-no" title="statement not covered" > const files = await this.walkDirectory(partitionsPath, '.json');</span>
1694
- <span class="cstat-no" title="statement not covered" ></span>
1695
- <span class="cstat-no" title="statement not covered" > for (const filePath of files) {</span>
1696
- <span class="cstat-no" title="statement not covered" > try {</span>
1697
- <span class="cstat-no" title="statement not covered" > const content = await fs.readFile(filePath, 'utf-8');</span>
1698
- <span class="cstat-no" title="statement not covered" > const data = JSON.parse(content);</span>
1699
- <span class="cstat-no" title="statement not covered" ></span>
1700
- <span class="cstat-no" title="statement not covered" > // Extract namespace from file path</span>
1701
- <span class="cstat-no" title="statement not covered" > const relativePath = path.relative(partitionsPath, filePath);</span>
1702
- <span class="cstat-no" title="statement not covered" > const namespace = path.dirname(relativePath).replace(/\\/g, '/');</span>
1703
- <span class="cstat-no" title="statement not covered" ></span>
1704
- <span class="cstat-no" title="statement not covered" > if (Array.isArray(data)) {</span>
1705
- <span class="cstat-no" title="statement not covered" > entries.push(...data.map((e: LegacyEntry) =&gt; ({ ...e, namespace })));</span>
1706
- <span class="cstat-no" title="statement not covered" > } else if (data.entries) {</span>
1707
- <span class="cstat-no" title="statement not covered" > entries.push(...data.entries.map((e: LegacyEntry) =&gt; ({ ...e, namespace })));</span>
1708
- <span class="cstat-no" title="statement not covered" > }</span>
1709
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1710
- <span class="cstat-no" title="statement not covered" > this.addError(filePath, (error as Error).message, 'PARSE_ERROR', true);</span>
1711
- <span class="cstat-no" title="statement not covered" > }</span>
1712
- <span class="cstat-no" title="statement not covered" > }</span>
1713
- <span class="cstat-no" title="statement not covered" ></span>
1714
- <span class="cstat-no" title="statement not covered" > return entries;</span>
1715
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1716
- <span class="cstat-no" title="statement not covered" > return [];</span>
1717
- <span class="cstat-no" title="statement not covered" > }</span>
1718
- <span class="cstat-no" title="statement not covered" > }</span>
1719
- <span class="cstat-no" title="statement not covered" ></span>
1720
- <span class="cstat-no" title="statement not covered" > private async loadFromDistributedMemory(): Promise&lt;LegacyEntry[]&gt; {</span>
1721
- <span class="cstat-no" title="statement not covered" > // Would integrate with DistributedMemorySystem nodes</span>
1722
- <span class="cstat-no" title="statement not covered" > return this.loadFromSwarmMemory(); // Similar structure</span>
1723
- <span class="cstat-no" title="statement not covered" > }</span>
1724
- <span class="cstat-no" title="statement not covered" ></span>
1725
- <span class="cstat-no" title="statement not covered" > // ===== Batch Processing =====</span>
1726
- <span class="cstat-no" title="statement not covered" ></span>
1727
- <span class="cstat-no" title="statement not covered" > private async processBatch(batch: LegacyEntry[]): Promise&lt;void&gt; {</span>
1728
- <span class="cstat-no" title="statement not covered" > for (const legacyEntry of batch) {</span>
1729
- <span class="cstat-no" title="statement not covered" > try {</span>
1730
- <span class="cstat-no" title="statement not covered" > // Validate if enabled</span>
1731
- <span class="cstat-no" title="statement not covered" > if (this.config.validateData) {</span>
1732
- <span class="cstat-no" title="statement not covered" > const validation = this.validateEntry(legacyEntry);</span>
1733
- <span class="cstat-no" title="statement not covered" > if (!validation.valid) {</span>
1734
- <span class="cstat-no" title="statement not covered" > if (this.config.continueOnError) {</span>
1735
- <span class="cstat-no" title="statement not covered" > this.addError(</span>
1736
- <span class="cstat-no" title="statement not covered" > legacyEntry.key || 'unknown',</span>
1737
- <span class="cstat-no" title="statement not covered" > validation.reason || 'Validation failed',</span>
1738
- <span class="cstat-no" title="statement not covered" > 'VALIDATION_ERROR',</span>
1739
- <span class="cstat-no" title="statement not covered" > false</span>
1740
- <span class="cstat-no" title="statement not covered" > );</span>
1741
- <span class="cstat-no" title="statement not covered" > this.progress.skipped++;</span>
1742
- <span class="cstat-no" title="statement not covered" > continue;</span>
1743
- <span class="cstat-no" title="statement not covered" > } else {</span>
1744
- <span class="cstat-no" title="statement not covered" > throw new Error(validation.reason);</span>
1745
- <span class="cstat-no" title="statement not covered" > }</span>
1746
- <span class="cstat-no" title="statement not covered" > }</span>
1747
- <span class="cstat-no" title="statement not covered" > }</span>
1748
- <span class="cstat-no" title="statement not covered" ></span>
1749
- <span class="cstat-no" title="statement not covered" > // Transform to new format</span>
1750
- <span class="cstat-no" title="statement not covered" > const newEntry = await this.transformEntry(legacyEntry);</span>
1751
- <span class="cstat-no" title="statement not covered" ></span>
1752
- <span class="cstat-no" title="statement not covered" > // Store in target</span>
1753
- <span class="cstat-no" title="statement not covered" > await this.target.store(newEntry);</span>
1754
- <span class="cstat-no" title="statement not covered" > this.progress.migrated++;</span>
1755
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1756
- <span class="cstat-no" title="statement not covered" > if (this.config.continueOnError) {</span>
1757
- <span class="cstat-no" title="statement not covered" > this.addError(</span>
1758
- <span class="cstat-no" title="statement not covered" > legacyEntry.key || 'unknown',</span>
1759
- <span class="cstat-no" title="statement not covered" > (error as Error).message,</span>
1760
- <span class="cstat-no" title="statement not covered" > 'STORE_ERROR',</span>
1761
- <span class="cstat-no" title="statement not covered" > true</span>
1762
- <span class="cstat-no" title="statement not covered" > );</span>
1763
- <span class="cstat-no" title="statement not covered" > this.progress.failed++;</span>
1764
- <span class="cstat-no" title="statement not covered" > } else {</span>
1765
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1766
- <span class="cstat-no" title="statement not covered" > }</span>
1767
- <span class="cstat-no" title="statement not covered" > }</span>
1768
- <span class="cstat-no" title="statement not covered" > }</span>
1769
- <span class="cstat-no" title="statement not covered" > }</span>
1770
- <span class="cstat-no" title="statement not covered" ></span>
1771
- <span class="cstat-no" title="statement not covered" > private async transformEntry(legacy: LegacyEntry): Promise&lt;MemoryEntry&gt; {</span>
1772
- <span class="cstat-no" title="statement not covered" > // Map namespace if configured</span>
1773
- <span class="cstat-no" title="statement not covered" > let namespace = legacy.namespace || 'default';</span>
1774
- <span class="cstat-no" title="statement not covered" > if (this.config.namespaceMapping &amp;&amp; this.config.namespaceMapping[namespace]) {</span>
1775
- <span class="cstat-no" title="statement not covered" > namespace = this.config.namespaceMapping[namespace];</span>
1776
- <span class="cstat-no" title="statement not covered" > }</span>
1777
- <span class="cstat-no" title="statement not covered" ></span>
1778
- <span class="cstat-no" title="statement not covered" > // Determine content</span>
1779
- <span class="cstat-no" title="statement not covered" > const content =</span>
1780
- <span class="cstat-no" title="statement not covered" > typeof legacy.value === 'string'</span>
1781
- <span class="cstat-no" title="statement not covered" > ? legacy.value</span>
1782
- <span class="cstat-no" title="statement not covered" > : JSON.stringify(legacy.value);</span>
1783
- <span class="cstat-no" title="statement not covered" ></span>
1784
- <span class="cstat-no" title="statement not covered" > // Map type if configured</span>
1785
- <span class="cstat-no" title="statement not covered" > let type: MemoryType = 'semantic';</span>
1786
- <span class="cstat-no" title="statement not covered" > if (legacy.metadata?.type &amp;&amp; typeof legacy.metadata.type === 'string') {</span>
1787
- <span class="cstat-no" title="statement not covered" > if (this.config.typeMapping &amp;&amp; this.config.typeMapping[legacy.metadata.type]) {</span>
1788
- <span class="cstat-no" title="statement not covered" > type = this.config.typeMapping[legacy.metadata.type];</span>
1789
- <span class="cstat-no" title="statement not covered" > } else if (this.isValidMemoryType(legacy.metadata.type)) {</span>
1790
- <span class="cstat-no" title="statement not covered" > type = legacy.metadata.type as MemoryType;</span>
1791
- <span class="cstat-no" title="statement not covered" > }</span>
1792
- <span class="cstat-no" title="statement not covered" > }</span>
1793
- <span class="cstat-no" title="statement not covered" ></span>
1794
- <span class="cstat-no" title="statement not covered" > // Parse timestamps</span>
1795
- <span class="cstat-no" title="statement not covered" > const createdAt = this.parseTimestamp(</span>
1796
- <span class="cstat-no" title="statement not covered" > legacy.createdAt || legacy.created_at || legacy.timestamp</span>
1797
- <span class="cstat-no" title="statement not covered" > );</span>
1798
- <span class="cstat-no" title="statement not covered" > const updatedAt = this.parseTimestamp(</span>
1799
- <span class="cstat-no" title="statement not covered" > legacy.updatedAt || legacy.updated_at || legacy.timestamp</span>
1800
- <span class="cstat-no" title="statement not covered" > );</span>
1801
- <span class="cstat-no" title="statement not covered" ></span>
1802
- <span class="cstat-no" title="statement not covered" > const input: MemoryEntryInput = {</span>
1803
- <span class="cstat-no" title="statement not covered" > key: legacy.key,</span>
1804
- <span class="cstat-no" title="statement not covered" > content,</span>
1805
- <span class="cstat-no" title="statement not covered" > type,</span>
1806
- <span class="cstat-no" title="statement not covered" > namespace,</span>
1807
- <span class="cstat-no" title="statement not covered" > tags: legacy.tags || [],</span>
1808
- <span class="cstat-no" title="statement not covered" > metadata: {</span>
1809
- <span class="cstat-no" title="statement not covered" > ...legacy.metadata,</span>
1810
- <span class="cstat-no" title="statement not covered" > migrated: true,</span>
1811
- <span class="cstat-no" title="statement not covered" > migrationSource: this.config.source,</span>
1812
- <span class="cstat-no" title="statement not covered" > migrationTimestamp: Date.now(),</span>
1813
- <span class="cstat-no" title="statement not covered" > originalValue: legacy.value,</span>
1814
- <span class="cstat-no" title="statement not covered" > },</span>
1815
- <span class="cstat-no" title="statement not covered" > };</span>
1816
- <span class="cstat-no" title="statement not covered" ></span>
1817
- <span class="cstat-no" title="statement not covered" > const entry = createDefaultEntry(input);</span>
1818
- <span class="cstat-no" title="statement not covered" > entry.createdAt = createdAt;</span>
1819
- <span class="cstat-no" title="statement not covered" > entry.updatedAt = updatedAt;</span>
1820
- <span class="cstat-no" title="statement not covered" ></span>
1821
- <span class="cstat-no" title="statement not covered" > // Generate embedding if configured</span>
1822
- <span class="cstat-no" title="statement not covered" > if (this.config.generateEmbeddings &amp;&amp; this.embeddingGenerator) {</span>
1823
- <span class="cstat-no" title="statement not covered" > try {</span>
1824
- <span class="cstat-no" title="statement not covered" > entry.embedding = await this.embeddingGenerator(content);</span>
1825
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1826
- <span class="cstat-no" title="statement not covered" > // Log but don't fail</span>
1827
- <span class="cstat-no" title="statement not covered" > this.emit('migration:warning', {</span>
1828
- <span class="cstat-no" title="statement not covered" > message: `Failed to generate embedding for ${legacy.key}: ${(error as Error).message}`,</span>
1829
- <span class="cstat-no" title="statement not covered" > });</span>
1830
- <span class="cstat-no" title="statement not covered" > }</span>
1831
- <span class="cstat-no" title="statement not covered" > }</span>
1832
- <span class="cstat-no" title="statement not covered" ></span>
1833
- <span class="cstat-no" title="statement not covered" > return entry;</span>
1834
- <span class="cstat-no" title="statement not covered" > }</span>
1835
- <span class="cstat-no" title="statement not covered" ></span>
1836
- <span class="cstat-no" title="statement not covered" > // ===== Helper Methods =====</span>
1837
- <span class="cstat-no" title="statement not covered" ></span>
1838
- <span class="cstat-no" title="statement not covered" > private initializeProgress(): MigrationProgress {</span>
1839
- <span class="cstat-no" title="statement not covered" > return {</span>
1840
- <span class="cstat-no" title="statement not covered" > total: 0,</span>
1841
- <span class="cstat-no" title="statement not covered" > migrated: 0,</span>
1842
- <span class="cstat-no" title="statement not covered" > failed: 0,</span>
1843
- <span class="cstat-no" title="statement not covered" > skipped: 0,</span>
1844
- <span class="cstat-no" title="statement not covered" > currentBatch: 0,</span>
1845
- <span class="cstat-no" title="statement not covered" > totalBatches: 0,</span>
1846
- <span class="cstat-no" title="statement not covered" > percentage: 0,</span>
1847
- <span class="cstat-no" title="statement not covered" > estimatedTimeRemaining: 0,</span>
1848
- <span class="cstat-no" title="statement not covered" > errors: [],</span>
1849
- <span class="cstat-no" title="statement not covered" > };</span>
1850
- <span class="cstat-no" title="statement not covered" > }</span>
1851
- <span class="cstat-no" title="statement not covered" ></span>
1852
- <span class="cstat-no" title="statement not covered" > private validateEntry(entry: LegacyEntry): { valid: boolean; reason?: string } {</span>
1853
- <span class="cstat-no" title="statement not covered" > if (!entry.key || typeof entry.key !== 'string') {</span>
1854
- <span class="cstat-no" title="statement not covered" > return { valid: false, reason: 'Missing or invalid key' };</span>
1855
- <span class="cstat-no" title="statement not covered" > }</span>
1856
- <span class="cstat-no" title="statement not covered" ></span>
1857
- <span class="cstat-no" title="statement not covered" > if (entry.value === undefined) {</span>
1858
- <span class="cstat-no" title="statement not covered" > return { valid: false, reason: 'Missing value' };</span>
1859
- <span class="cstat-no" title="statement not covered" > }</span>
1860
- <span class="cstat-no" title="statement not covered" ></span>
1861
- <span class="cstat-no" title="statement not covered" > if (entry.key.length &gt; 500) {</span>
1862
- <span class="cstat-no" title="statement not covered" > return { valid: false, reason: 'Key too long (max 500 chars)' };</span>
1863
- <span class="cstat-no" title="statement not covered" > }</span>
1864
- <span class="cstat-no" title="statement not covered" ></span>
1865
- <span class="cstat-no" title="statement not covered" > return { valid: true };</span>
1866
- <span class="cstat-no" title="statement not covered" > }</span>
1867
- <span class="cstat-no" title="statement not covered" ></span>
1868
- <span class="cstat-no" title="statement not covered" > private addError(</span>
1869
- <span class="cstat-no" title="statement not covered" > entryId: string,</span>
1870
- <span class="cstat-no" title="statement not covered" > message: string,</span>
1871
- <span class="cstat-no" title="statement not covered" > code: string,</span>
1872
- <span class="cstat-no" title="statement not covered" > recoverable: boolean</span>
1873
- <span class="cstat-no" title="statement not covered" > ): void {</span>
1874
- <span class="cstat-no" title="statement not covered" > const error: MigrationError = {</span>
1875
- <span class="cstat-no" title="statement not covered" > entryId,</span>
1876
- <span class="cstat-no" title="statement not covered" > message,</span>
1877
- <span class="cstat-no" title="statement not covered" > code,</span>
1878
- <span class="cstat-no" title="statement not covered" > recoverable,</span>
1879
- <span class="cstat-no" title="statement not covered" > };</span>
1880
- <span class="cstat-no" title="statement not covered" > this.progress.errors.push(error);</span>
1881
- <span class="cstat-no" title="statement not covered" > this.emit('migration:error', error);</span>
1882
- <span class="cstat-no" title="statement not covered" > }</span>
1883
- <span class="cstat-no" title="statement not covered" ></span>
1884
- <span class="cstat-no" title="statement not covered" > private parseTimestamp(value: string | number | undefined): number {</span>
1885
- <span class="cstat-no" title="statement not covered" > if (!value) return Date.now();</span>
1886
- <span class="cstat-no" title="statement not covered" ></span>
1887
- <span class="cstat-no" title="statement not covered" > if (typeof value === 'number') {</span>
1888
- <span class="cstat-no" title="statement not covered" > // Handle both milliseconds and seconds</span>
1889
- <span class="cstat-no" title="statement not covered" > return value &gt; 1e12 ? value : value * 1000;</span>
1890
- <span class="cstat-no" title="statement not covered" > }</span>
1891
- <span class="cstat-no" title="statement not covered" ></span>
1892
- <span class="cstat-no" title="statement not covered" > const parsed = Date.parse(value);</span>
1893
- <span class="cstat-no" title="statement not covered" > return isNaN(parsed) ? Date.now() : parsed;</span>
1894
- <span class="cstat-no" title="statement not covered" > }</span>
1895
- <span class="cstat-no" title="statement not covered" ></span>
1896
- <span class="cstat-no" title="statement not covered" > private isValidMemoryType(type: string): boolean {</span>
1897
- <span class="cstat-no" title="statement not covered" > return ['episodic', 'semantic', 'procedural', 'working', 'cache'].includes(type);</span>
1898
- <span class="cstat-no" title="statement not covered" > }</span>
1899
- <span class="cstat-no" title="statement not covered" ></span>
1900
- <span class="cstat-no" title="statement not covered" > private estimateTimeRemaining(</span>
1901
- <span class="cstat-no" title="statement not covered" > startTime: number,</span>
1902
- <span class="cstat-no" title="statement not covered" > completed: number,</span>
1903
- <span class="cstat-no" title="statement not covered" > total: number</span>
1904
- <span class="cstat-no" title="statement not covered" > ): number {</span>
1905
- <span class="cstat-no" title="statement not covered" > if (completed === 0) return 0;</span>
1906
- <span class="cstat-no" title="statement not covered" ></span>
1907
- <span class="cstat-no" title="statement not covered" > const elapsed = Date.now() - startTime;</span>
1908
- <span class="cstat-no" title="statement not covered" > const rate = completed / elapsed;</span>
1909
- <span class="cstat-no" title="statement not covered" > const remaining = total - completed;</span>
1910
- <span class="cstat-no" title="statement not covered" ></span>
1911
- <span class="cstat-no" title="statement not covered" > return Math.round(remaining / rate);</span>
1912
- <span class="cstat-no" title="statement not covered" > }</span>
1913
- <span class="cstat-no" title="statement not covered" ></span>
1914
- <span class="cstat-no" title="statement not covered" > private generateSummary(): string {</span>
1915
- <span class="cstat-no" title="statement not covered" > const { migrated, failed, skipped, total, errors } = this.progress;</span>
1916
- <span class="cstat-no" title="statement not covered" ></span>
1917
- <span class="cstat-no" title="statement not covered" > let summary = `Migrated ${migrated}/${total} entries`;</span>
1918
- <span class="cstat-no" title="statement not covered" ></span>
1919
- <span class="cstat-no" title="statement not covered" > if (failed &gt; 0) {</span>
1920
- <span class="cstat-no" title="statement not covered" > summary += `, ${failed} failed`;</span>
1921
- <span class="cstat-no" title="statement not covered" > }</span>
1922
- <span class="cstat-no" title="statement not covered" ></span>
1923
- <span class="cstat-no" title="statement not covered" > if (skipped &gt; 0) {</span>
1924
- <span class="cstat-no" title="statement not covered" > summary += `, ${skipped} skipped`;</span>
1925
- <span class="cstat-no" title="statement not covered" > }</span>
1926
- <span class="cstat-no" title="statement not covered" ></span>
1927
- <span class="cstat-no" title="statement not covered" > if (errors.length &gt; 0) {</span>
1928
- <span class="cstat-no" title="statement not covered" > const errorTypes = new Map&lt;string, number&gt;();</span>
1929
- <span class="cstat-no" title="statement not covered" > for (const error of errors) {</span>
1930
- <span class="cstat-no" title="statement not covered" > errorTypes.set(error.code, (errorTypes.get(error.code) || 0) + 1);</span>
1931
- <span class="cstat-no" title="statement not covered" > }</span>
1932
- <span class="cstat-no" title="statement not covered" ></span>
1933
- <span class="cstat-no" title="statement not covered" > const errorSummary = Array.from(errorTypes.entries())</span>
1934
- <span class="cstat-no" title="statement not covered" > .map(([code, count]) =&gt; `${code}: ${count}`)</span>
1935
- <span class="cstat-no" title="statement not covered" > .join(', ');</span>
1936
- <span class="cstat-no" title="statement not covered" ></span>
1937
- <span class="cstat-no" title="statement not covered" > summary += `. Errors: ${errorSummary}`;</span>
1938
- <span class="cstat-no" title="statement not covered" > }</span>
1939
- <span class="cstat-no" title="statement not covered" ></span>
1940
- <span class="cstat-no" title="statement not covered" > return summary;</span>
1941
- <span class="cstat-no" title="statement not covered" > }</span>
1942
- <span class="cstat-no" title="statement not covered" ></span>
1943
- <span class="cstat-no" title="statement not covered" > private async walkDirectory(dir: string, extension: string): Promise&lt;string[]&gt; {</span>
1944
- <span class="cstat-no" title="statement not covered" > const files: string[] = [];</span>
1945
- <span class="cstat-no" title="statement not covered" ></span>
1946
- <span class="cstat-no" title="statement not covered" > try {</span>
1947
- <span class="cstat-no" title="statement not covered" > const entries = await fs.readdir(dir, { withFileTypes: true });</span>
1948
- <span class="cstat-no" title="statement not covered" ></span>
1949
- <span class="cstat-no" title="statement not covered" > for (const entry of entries) {</span>
1950
- <span class="cstat-no" title="statement not covered" > const fullPath = path.join(dir, entry.name);</span>
1951
- <span class="cstat-no" title="statement not covered" ></span>
1952
- <span class="cstat-no" title="statement not covered" > if (entry.isDirectory()) {</span>
1953
- <span class="cstat-no" title="statement not covered" > const subFiles = await this.walkDirectory(fullPath, extension);</span>
1954
- <span class="cstat-no" title="statement not covered" > files.push(...subFiles);</span>
1955
- <span class="cstat-no" title="statement not covered" > } else if (entry.isFile() &amp;&amp; entry.name.endsWith(extension)) {</span>
1956
- <span class="cstat-no" title="statement not covered" > files.push(fullPath);</span>
1957
- <span class="cstat-no" title="statement not covered" > }</span>
1958
- <span class="cstat-no" title="statement not covered" > }</span>
1959
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1960
- <span class="cstat-no" title="statement not covered" > // Directory doesn't exist or isn't readable</span>
1961
- <span class="cstat-no" title="statement not covered" > }</span>
1962
- <span class="cstat-no" title="statement not covered" ></span>
1963
- <span class="cstat-no" title="statement not covered" > return files;</span>
1964
- <span class="cstat-no" title="statement not covered" > }</span>
1965
- <span class="cstat-no" title="statement not covered" ></span>
1966
- <span class="cstat-no" title="statement not covered" > private parseMarkdownEntry(</span>
1967
- <span class="cstat-no" title="statement not covered" > filePath: string,</span>
1968
- <span class="cstat-no" title="statement not covered" > content: string,</span>
1969
- <span class="cstat-no" title="statement not covered" > basePath: string</span>
1970
- <span class="cstat-no" title="statement not covered" > ): LegacyEntry | null {</span>
1971
- <span class="cstat-no" title="statement not covered" > // Extract frontmatter if present</span>
1972
- <span class="cstat-no" title="statement not covered" > const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);</span>
1973
- <span class="cstat-no" title="statement not covered" ></span>
1974
- <span class="cstat-no" title="statement not covered" > let metadata: Record&lt;string, unknown&gt; = {};</span>
1975
- <span class="cstat-no" title="statement not covered" > let body = content;</span>
1976
- <span class="cstat-no" title="statement not covered" ></span>
1977
- <span class="cstat-no" title="statement not covered" > if (frontmatterMatch) {</span>
1978
- <span class="cstat-no" title="statement not covered" > try {</span>
1979
- <span class="cstat-no" title="statement not covered" > // Simple YAML-like parsing</span>
1980
- <span class="cstat-no" title="statement not covered" > const frontmatter = frontmatterMatch[1];</span>
1981
- <span class="cstat-no" title="statement not covered" > for (const line of frontmatter.split('\n')) {</span>
1982
- <span class="cstat-no" title="statement not covered" > const colonIndex = line.indexOf(':');</span>
1983
- <span class="cstat-no" title="statement not covered" > if (colonIndex &gt; 0) {</span>
1984
- <span class="cstat-no" title="statement not covered" > const key = line.substring(0, colonIndex).trim();</span>
1985
- <span class="cstat-no" title="statement not covered" > let value: unknown = line.substring(colonIndex + 1).trim();</span>
1986
- <span class="cstat-no" title="statement not covered" ></span>
1987
- <span class="cstat-no" title="statement not covered" > // Parse common types</span>
1988
- <span class="cstat-no" title="statement not covered" > if (value === 'true') value = true;</span>
1989
- <span class="cstat-no" title="statement not covered" > else if (value === 'false') value = false;</span>
1990
- <span class="cstat-no" title="statement not covered" > else if (typeof value === 'string' &amp;&amp; /^\d+$/.test(value)) value = parseInt(value, 10);</span>
1991
- <span class="cstat-no" title="statement not covered" > else if (typeof value === 'string' &amp;&amp; value.startsWith('[') &amp;&amp; value.endsWith(']')) {</span>
1992
- <span class="cstat-no" title="statement not covered" > try {</span>
1993
- <span class="cstat-no" title="statement not covered" > value = JSON.parse(value.replace(/'/g, '"'));</span>
1994
- <span class="cstat-no" title="statement not covered" > } catch {</span>
1995
- <span class="cstat-no" title="statement not covered" > // Keep as string</span>
1996
- <span class="cstat-no" title="statement not covered" > }</span>
1997
- <span class="cstat-no" title="statement not covered" > }</span>
1998
- <span class="cstat-no" title="statement not covered" ></span>
1999
- <span class="cstat-no" title="statement not covered" > metadata[key] = value;</span>
2000
- <span class="cstat-no" title="statement not covered" > }</span>
2001
- <span class="cstat-no" title="statement not covered" > }</span>
2002
- <span class="cstat-no" title="statement not covered" > body = frontmatterMatch[2];</span>
2003
- <span class="cstat-no" title="statement not covered" > } catch {</span>
2004
- <span class="cstat-no" title="statement not covered" > // Failed to parse frontmatter, use whole content</span>
2005
- <span class="cstat-no" title="statement not covered" > }</span>
2006
- <span class="cstat-no" title="statement not covered" > }</span>
2007
- <span class="cstat-no" title="statement not covered" ></span>
2008
- <span class="cstat-no" title="statement not covered" > // Derive key from file path</span>
2009
- <span class="cstat-no" title="statement not covered" > const relativePath = path.relative(basePath, filePath);</span>
2010
- <span class="cstat-no" title="statement not covered" > const key = relativePath</span>
2011
- <span class="cstat-no" title="statement not covered" > .replace(/\\/g, '/')</span>
2012
- <span class="cstat-no" title="statement not covered" > .replace(/\.md$/, '')</span>
2013
- <span class="cstat-no" title="statement not covered" > .replace(/\//g, ':');</span>
2014
- <span class="cstat-no" title="statement not covered" ></span>
2015
- <span class="cstat-no" title="statement not covered" > // Derive namespace from directory structure</span>
2016
- <span class="cstat-no" title="statement not covered" > const namespace = path.dirname(relativePath).replace(/\\/g, '/') || 'default';</span>
2017
- <span class="cstat-no" title="statement not covered" ></span>
2018
- <span class="cstat-no" title="statement not covered" > return {</span>
2019
- <span class="cstat-no" title="statement not covered" > key,</span>
2020
- <span class="cstat-no" title="statement not covered" > value: body.trim(),</span>
2021
- <span class="cstat-no" title="statement not covered" > namespace,</span>
2022
- <span class="cstat-no" title="statement not covered" > tags: Array.isArray(metadata.tags) ? metadata.tags : [],</span>
2023
- <span class="cstat-no" title="statement not covered" > metadata,</span>
2024
- <span class="cstat-no" title="statement not covered" > timestamp: Date.now(),</span>
2025
- <span class="cstat-no" title="statement not covered" > };</span>
2026
- <span class="cstat-no" title="statement not covered" > }</span>
2027
- <span class="cstat-no" title="statement not covered" >}</span>
2028
- <span class="cstat-no" title="statement not covered" ></span>
2029
- <span class="cstat-no" title="statement not covered" >/**</span>
2030
- <span class="cstat-no" title="statement not covered" > * Convenience function to create a migrator</span>
2031
- <span class="cstat-no" title="statement not covered" > */</span>
2032
- <span class="cstat-no" title="statement not covered" >export function createMigrator(</span>
2033
- <span class="cstat-no" title="statement not covered" > target: AgentDBAdapter,</span>
2034
- <span class="cstat-no" title="statement not covered" > source: MigrationSource,</span>
2035
- <span class="cstat-no" title="statement not covered" > sourcePath: string,</span>
2036
- <span class="cstat-no" title="statement not covered" > options: Partial&lt;MigrationConfig&gt; = {},</span>
2037
- <span class="cstat-no" title="statement not covered" > embeddingGenerator?: EmbeddingGenerator</span>
2038
- <span class="cstat-no" title="statement not covered" >): MemoryMigrator {</span>
2039
- <span class="cstat-no" title="statement not covered" > return new MemoryMigrator(</span>
2040
- <span class="cstat-no" title="statement not covered" > target,</span>
2041
- <span class="cstat-no" title="statement not covered" > { source, sourcePath, ...options },</span>
2042
- <span class="cstat-no" title="statement not covered" > embeddingGenerator</span>
2043
- <span class="cstat-no" title="statement not covered" > );</span>
2044
- <span class="cstat-no" title="statement not covered" >}</span>
2045
- <span class="cstat-no" title="statement not covered" ></span>
2046
- <span class="cstat-no" title="statement not covered" >/**</span>
2047
- <span class="cstat-no" title="statement not covered" > * Migrate from multiple sources</span>
2048
- <span class="cstat-no" title="statement not covered" > */</span>
2049
- <span class="cstat-no" title="statement not covered" >export async function migrateMultipleSources(</span>
2050
- <span class="cstat-no" title="statement not covered" > target: AgentDBAdapter,</span>
2051
- <span class="cstat-no" title="statement not covered" > sources: Array&lt;{ source: MigrationSource; path: string }&gt;,</span>
2052
- <span class="cstat-no" title="statement not covered" > options: Partial&lt;MigrationConfig&gt; = {},</span>
2053
- <span class="cstat-no" title="statement not covered" > embeddingGenerator?: EmbeddingGenerator</span>
2054
- <span class="cstat-no" title="statement not covered" >): Promise&lt;MigrationResult[]&gt; {</span>
2055
- <span class="cstat-no" title="statement not covered" > const results: MigrationResult[] = [];</span>
2056
- <span class="cstat-no" title="statement not covered" ></span>
2057
- <span class="cstat-no" title="statement not covered" > for (const { source, path: sourcePath } of sources) {</span>
2058
- <span class="cstat-no" title="statement not covered" > const migrator = createMigrator(</span>
2059
- <span class="cstat-no" title="statement not covered" > target,</span>
2060
- <span class="cstat-no" title="statement not covered" > source,</span>
2061
- <span class="cstat-no" title="statement not covered" > sourcePath,</span>
2062
- <span class="cstat-no" title="statement not covered" > options,</span>
2063
- <span class="cstat-no" title="statement not covered" > embeddingGenerator</span>
2064
- <span class="cstat-no" title="statement not covered" > );</span>
2065
- <span class="cstat-no" title="statement not covered" > const result = await migrator.migrate();</span>
2066
- <span class="cstat-no" title="statement not covered" > results.push(result);</span>
2067
- <span class="cstat-no" title="statement not covered" > }</span>
2068
- <span class="cstat-no" title="statement not covered" ></span>
2069
- <span class="cstat-no" title="statement not covered" > return results;</span>
2070
- <span class="cstat-no" title="statement not covered" >}</span>
2071
- <span class="cstat-no" title="statement not covered" ></span>
2072
- <span class="cstat-no" title="statement not covered" >export default MemoryMigrator;</span>
2073
- &nbsp;</pre></td></tr></table></pre>
2074
-
2075
- <div class='push'></div><!-- for sticky footer -->
2076
- </div><!-- /wrapper -->
2077
- <div class='footer quiet pad2 space-top1 center small'>
2078
- Code coverage generated by
2079
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
2080
- at 2026-01-05T21:16:54.220Z
2081
- </div>
2082
- <script src="../prettify.js"></script>
2083
- <script>
2084
- window.onload = function () {
2085
- prettyPrint();
2086
- };
2087
- </script>
2088
- <script src="../sorter.js"></script>
2089
- <script src="../block-navigation.js"></script>
2090
- </body>
2091
- </html>
2092
-