root / src / blas / ctrsm.f @ 2
Historique | Voir | Annoter | Télécharger (13,46 ko)
1 | 1 | equemene | SUBROUTINE CTRSM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) |
---|---|---|---|
2 | 1 | equemene | * .. Scalar Arguments .. |
3 | 1 | equemene | COMPLEX ALPHA |
4 | 1 | equemene | INTEGER LDA,LDB,M,N |
5 | 1 | equemene | CHARACTER DIAG,SIDE,TRANSA,UPLO |
6 | 1 | equemene | * .. |
7 | 1 | equemene | * .. Array Arguments .. |
8 | 1 | equemene | COMPLEX A(LDA,*),B(LDB,*) |
9 | 1 | equemene | * .. |
10 | 1 | equemene | * |
11 | 1 | equemene | * Purpose |
12 | 1 | equemene | * ======= |
13 | 1 | equemene | * |
14 | 1 | equemene | * CTRSM solves one of the matrix equations |
15 | 1 | equemene | * |
16 | 1 | equemene | * op( A )*X = alpha*B, or X*op( A ) = alpha*B, |
17 | 1 | equemene | * |
18 | 1 | equemene | * where alpha is a scalar, X and B are m by n matrices, A is a unit, or |
19 | 1 | equemene | * non-unit, upper or lower triangular matrix and op( A ) is one of |
20 | 1 | equemene | * |
21 | 1 | equemene | * op( A ) = A or op( A ) = A' or op( A ) = conjg( A' ). |
22 | 1 | equemene | * |
23 | 1 | equemene | * The matrix X is overwritten on B. |
24 | 1 | equemene | * |
25 | 1 | equemene | * Arguments |
26 | 1 | equemene | * ========== |
27 | 1 | equemene | * |
28 | 1 | equemene | * SIDE - CHARACTER*1. |
29 | 1 | equemene | * On entry, SIDE specifies whether op( A ) appears on the left |
30 | 1 | equemene | * or right of X as follows: |
31 | 1 | equemene | * |
32 | 1 | equemene | * SIDE = 'L' or 'l' op( A )*X = alpha*B. |
33 | 1 | equemene | * |
34 | 1 | equemene | * SIDE = 'R' or 'r' X*op( A ) = alpha*B. |
35 | 1 | equemene | * |
36 | 1 | equemene | * Unchanged on exit. |
37 | 1 | equemene | * |
38 | 1 | equemene | * UPLO - CHARACTER*1. |
39 | 1 | equemene | * On entry, UPLO specifies whether the matrix A is an upper or |
40 | 1 | equemene | * lower triangular matrix as follows: |
41 | 1 | equemene | * |
42 | 1 | equemene | * UPLO = 'U' or 'u' A is an upper triangular matrix. |
43 | 1 | equemene | * |
44 | 1 | equemene | * UPLO = 'L' or 'l' A is a lower triangular matrix. |
45 | 1 | equemene | * |
46 | 1 | equemene | * Unchanged on exit. |
47 | 1 | equemene | * |
48 | 1 | equemene | * TRANSA - CHARACTER*1. |
49 | 1 | equemene | * On entry, TRANSA specifies the form of op( A ) to be used in |
50 | 1 | equemene | * the matrix multiplication as follows: |
51 | 1 | equemene | * |
52 | 1 | equemene | * TRANSA = 'N' or 'n' op( A ) = A. |
53 | 1 | equemene | * |
54 | 1 | equemene | * TRANSA = 'T' or 't' op( A ) = A'. |
55 | 1 | equemene | * |
56 | 1 | equemene | * TRANSA = 'C' or 'c' op( A ) = conjg( A' ). |
57 | 1 | equemene | * |
58 | 1 | equemene | * Unchanged on exit. |
59 | 1 | equemene | * |
60 | 1 | equemene | * DIAG - CHARACTER*1. |
61 | 1 | equemene | * On entry, DIAG specifies whether or not A is unit triangular |
62 | 1 | equemene | * as follows: |
63 | 1 | equemene | * |
64 | 1 | equemene | * DIAG = 'U' or 'u' A is assumed to be unit triangular. |
65 | 1 | equemene | * |
66 | 1 | equemene | * DIAG = 'N' or 'n' A is not assumed to be unit |
67 | 1 | equemene | * triangular. |
68 | 1 | equemene | * |
69 | 1 | equemene | * Unchanged on exit. |
70 | 1 | equemene | * |
71 | 1 | equemene | * M - INTEGER. |
72 | 1 | equemene | * On entry, M specifies the number of rows of B. M must be at |
73 | 1 | equemene | * least zero. |
74 | 1 | equemene | * Unchanged on exit. |
75 | 1 | equemene | * |
76 | 1 | equemene | * N - INTEGER. |
77 | 1 | equemene | * On entry, N specifies the number of columns of B. N must be |
78 | 1 | equemene | * at least zero. |
79 | 1 | equemene | * Unchanged on exit. |
80 | 1 | equemene | * |
81 | 1 | equemene | * ALPHA - COMPLEX . |
82 | 1 | equemene | * On entry, ALPHA specifies the scalar alpha. When alpha is |
83 | 1 | equemene | * zero then A is not referenced and B need not be set before |
84 | 1 | equemene | * entry. |
85 | 1 | equemene | * Unchanged on exit. |
86 | 1 | equemene | * |
87 | 1 | equemene | * A - COMPLEX array of DIMENSION ( LDA, k ), where k is m |
88 | 1 | equemene | * when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. |
89 | 1 | equemene | * Before entry with UPLO = 'U' or 'u', the leading k by k |
90 | 1 | equemene | * upper triangular part of the array A must contain the upper |
91 | 1 | equemene | * triangular matrix and the strictly lower triangular part of |
92 | 1 | equemene | * A is not referenced. |
93 | 1 | equemene | * Before entry with UPLO = 'L' or 'l', the leading k by k |
94 | 1 | equemene | * lower triangular part of the array A must contain the lower |
95 | 1 | equemene | * triangular matrix and the strictly upper triangular part of |
96 | 1 | equemene | * A is not referenced. |
97 | 1 | equemene | * Note that when DIAG = 'U' or 'u', the diagonal elements of |
98 | 1 | equemene | * A are not referenced either, but are assumed to be unity. |
99 | 1 | equemene | * Unchanged on exit. |
100 | 1 | equemene | * |
101 | 1 | equemene | * LDA - INTEGER. |
102 | 1 | equemene | * On entry, LDA specifies the first dimension of A as declared |
103 | 1 | equemene | * in the calling (sub) program. When SIDE = 'L' or 'l' then |
104 | 1 | equemene | * LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' |
105 | 1 | equemene | * then LDA must be at least max( 1, n ). |
106 | 1 | equemene | * Unchanged on exit. |
107 | 1 | equemene | * |
108 | 1 | equemene | * B - COMPLEX array of DIMENSION ( LDB, n ). |
109 | 1 | equemene | * Before entry, the leading m by n part of the array B must |
110 | 1 | equemene | * contain the right-hand side matrix B, and on exit is |
111 | 1 | equemene | * overwritten by the solution matrix X. |
112 | 1 | equemene | * |
113 | 1 | equemene | * LDB - INTEGER. |
114 | 1 | equemene | * On entry, LDB specifies the first dimension of B as declared |
115 | 1 | equemene | * in the calling (sub) program. LDB must be at least |
116 | 1 | equemene | * max( 1, m ). |
117 | 1 | equemene | * Unchanged on exit. |
118 | 1 | equemene | * |
119 | 1 | equemene | * |
120 | 1 | equemene | * Level 3 Blas routine. |
121 | 1 | equemene | * |
122 | 1 | equemene | * -- Written on 8-February-1989. |
123 | 1 | equemene | * Jack Dongarra, Argonne National Laboratory. |
124 | 1 | equemene | * Iain Duff, AERE Harwell. |
125 | 1 | equemene | * Jeremy Du Croz, Numerical Algorithms Group Ltd. |
126 | 1 | equemene | * Sven Hammarling, Numerical Algorithms Group Ltd. |
127 | 1 | equemene | * |
128 | 1 | equemene | * |
129 | 1 | equemene | * .. External Functions .. |
130 | 1 | equemene | LOGICAL LSAME |
131 | 1 | equemene | EXTERNAL LSAME |
132 | 1 | equemene | * .. |
133 | 1 | equemene | * .. External Subroutines .. |
134 | 1 | equemene | EXTERNAL XERBLA |
135 | 1 | equemene | * .. |
136 | 1 | equemene | * .. Intrinsic Functions .. |
137 | 1 | equemene | INTRINSIC CONJG,MAX |
138 | 1 | equemene | * .. |
139 | 1 | equemene | * .. Local Scalars .. |
140 | 1 | equemene | COMPLEX TEMP |
141 | 1 | equemene | INTEGER I,INFO,J,K,NROWA |
142 | 1 | equemene | LOGICAL LSIDE,NOCONJ,NOUNIT,UPPER |
143 | 1 | equemene | * .. |
144 | 1 | equemene | * .. Parameters .. |
145 | 1 | equemene | COMPLEX ONE |
146 | 1 | equemene | PARAMETER (ONE= (1.0E+0,0.0E+0)) |
147 | 1 | equemene | COMPLEX ZERO |
148 | 1 | equemene | PARAMETER (ZERO= (0.0E+0,0.0E+0)) |
149 | 1 | equemene | * .. |
150 | 1 | equemene | * |
151 | 1 | equemene | * Test the input parameters. |
152 | 1 | equemene | * |
153 | 1 | equemene | LSIDE = LSAME(SIDE,'L') |
154 | 1 | equemene | IF (LSIDE) THEN |
155 | 1 | equemene | NROWA = M |
156 | 1 | equemene | ELSE |
157 | 1 | equemene | NROWA = N |
158 | 1 | equemene | END IF |
159 | 1 | equemene | NOCONJ = LSAME(TRANSA,'T') |
160 | 1 | equemene | NOUNIT = LSAME(DIAG,'N') |
161 | 1 | equemene | UPPER = LSAME(UPLO,'U') |
162 | 1 | equemene | * |
163 | 1 | equemene | INFO = 0 |
164 | 1 | equemene | IF ((.NOT.LSIDE) .AND. (.NOT.LSAME(SIDE,'R'))) THEN |
165 | 1 | equemene | INFO = 1 |
166 | 1 | equemene | ELSE IF ((.NOT.UPPER) .AND. (.NOT.LSAME(UPLO,'L'))) THEN |
167 | 1 | equemene | INFO = 2 |
168 | 1 | equemene | ELSE IF ((.NOT.LSAME(TRANSA,'N')) .AND. |
169 | 1 | equemene | + (.NOT.LSAME(TRANSA,'T')) .AND. |
170 | 1 | equemene | + (.NOT.LSAME(TRANSA,'C'))) THEN |
171 | 1 | equemene | INFO = 3 |
172 | 1 | equemene | ELSE IF ((.NOT.LSAME(DIAG,'U')) .AND. (.NOT.LSAME(DIAG,'N'))) THEN |
173 | 1 | equemene | INFO = 4 |
174 | 1 | equemene | ELSE IF (M.LT.0) THEN |
175 | 1 | equemene | INFO = 5 |
176 | 1 | equemene | ELSE IF (N.LT.0) THEN |
177 | 1 | equemene | INFO = 6 |
178 | 1 | equemene | ELSE IF (LDA.LT.MAX(1,NROWA)) THEN |
179 | 1 | equemene | INFO = 9 |
180 | 1 | equemene | ELSE IF (LDB.LT.MAX(1,M)) THEN |
181 | 1 | equemene | INFO = 11 |
182 | 1 | equemene | END IF |
183 | 1 | equemene | IF (INFO.NE.0) THEN |
184 | 1 | equemene | CALL XERBLA('CTRSM ',INFO) |
185 | 1 | equemene | RETURN |
186 | 1 | equemene | END IF |
187 | 1 | equemene | * |
188 | 1 | equemene | * Quick return if possible. |
189 | 1 | equemene | * |
190 | 1 | equemene | IF (M.EQ.0 .OR. N.EQ.0) RETURN |
191 | 1 | equemene | * |
192 | 1 | equemene | * And when alpha.eq.zero. |
193 | 1 | equemene | * |
194 | 1 | equemene | IF (ALPHA.EQ.ZERO) THEN |
195 | 1 | equemene | DO 20 J = 1,N |
196 | 1 | equemene | DO 10 I = 1,M |
197 | 1 | equemene | B(I,J) = ZERO |
198 | 1 | equemene | 10 CONTINUE |
199 | 1 | equemene | 20 CONTINUE |
200 | 1 | equemene | RETURN |
201 | 1 | equemene | END IF |
202 | 1 | equemene | * |
203 | 1 | equemene | * Start the operations. |
204 | 1 | equemene | * |
205 | 1 | equemene | IF (LSIDE) THEN |
206 | 1 | equemene | IF (LSAME(TRANSA,'N')) THEN |
207 | 1 | equemene | * |
208 | 1 | equemene | * Form B := alpha*inv( A )*B. |
209 | 1 | equemene | * |
210 | 1 | equemene | IF (UPPER) THEN |
211 | 1 | equemene | DO 60 J = 1,N |
212 | 1 | equemene | IF (ALPHA.NE.ONE) THEN |
213 | 1 | equemene | DO 30 I = 1,M |
214 | 1 | equemene | B(I,J) = ALPHA*B(I,J) |
215 | 1 | equemene | 30 CONTINUE |
216 | 1 | equemene | END IF |
217 | 1 | equemene | DO 50 K = M,1,-1 |
218 | 1 | equemene | IF (B(K,J).NE.ZERO) THEN |
219 | 1 | equemene | IF (NOUNIT) B(K,J) = B(K,J)/A(K,K) |
220 | 1 | equemene | DO 40 I = 1,K - 1 |
221 | 1 | equemene | B(I,J) = B(I,J) - B(K,J)*A(I,K) |
222 | 1 | equemene | 40 CONTINUE |
223 | 1 | equemene | END IF |
224 | 1 | equemene | 50 CONTINUE |
225 | 1 | equemene | 60 CONTINUE |
226 | 1 | equemene | ELSE |
227 | 1 | equemene | DO 100 J = 1,N |
228 | 1 | equemene | IF (ALPHA.NE.ONE) THEN |
229 | 1 | equemene | DO 70 I = 1,M |
230 | 1 | equemene | B(I,J) = ALPHA*B(I,J) |
231 | 1 | equemene | 70 CONTINUE |
232 | 1 | equemene | END IF |
233 | 1 | equemene | DO 90 K = 1,M |
234 | 1 | equemene | IF (B(K,J).NE.ZERO) THEN |
235 | 1 | equemene | IF (NOUNIT) B(K,J) = B(K,J)/A(K,K) |
236 | 1 | equemene | DO 80 I = K + 1,M |
237 | 1 | equemene | B(I,J) = B(I,J) - B(K,J)*A(I,K) |
238 | 1 | equemene | 80 CONTINUE |
239 | 1 | equemene | END IF |
240 | 1 | equemene | 90 CONTINUE |
241 | 1 | equemene | 100 CONTINUE |
242 | 1 | equemene | END IF |
243 | 1 | equemene | ELSE |
244 | 1 | equemene | * |
245 | 1 | equemene | * Form B := alpha*inv( A' )*B |
246 | 1 | equemene | * or B := alpha*inv( conjg( A' ) )*B. |
247 | 1 | equemene | * |
248 | 1 | equemene | IF (UPPER) THEN |
249 | 1 | equemene | DO 140 J = 1,N |
250 | 1 | equemene | DO 130 I = 1,M |
251 | 1 | equemene | TEMP = ALPHA*B(I,J) |
252 | 1 | equemene | IF (NOCONJ) THEN |
253 | 1 | equemene | DO 110 K = 1,I - 1 |
254 | 1 | equemene | TEMP = TEMP - A(K,I)*B(K,J) |
255 | 1 | equemene | 110 CONTINUE |
256 | 1 | equemene | IF (NOUNIT) TEMP = TEMP/A(I,I) |
257 | 1 | equemene | ELSE |
258 | 1 | equemene | DO 120 K = 1,I - 1 |
259 | 1 | equemene | TEMP = TEMP - CONJG(A(K,I))*B(K,J) |
260 | 1 | equemene | 120 CONTINUE |
261 | 1 | equemene | IF (NOUNIT) TEMP = TEMP/CONJG(A(I,I)) |
262 | 1 | equemene | END IF |
263 | 1 | equemene | B(I,J) = TEMP |
264 | 1 | equemene | 130 CONTINUE |
265 | 1 | equemene | 140 CONTINUE |
266 | 1 | equemene | ELSE |
267 | 1 | equemene | DO 180 J = 1,N |
268 | 1 | equemene | DO 170 I = M,1,-1 |
269 | 1 | equemene | TEMP = ALPHA*B(I,J) |
270 | 1 | equemene | IF (NOCONJ) THEN |
271 | 1 | equemene | DO 150 K = I + 1,M |
272 | 1 | equemene | TEMP = TEMP - A(K,I)*B(K,J) |
273 | 1 | equemene | 150 CONTINUE |
274 | 1 | equemene | IF (NOUNIT) TEMP = TEMP/A(I,I) |
275 | 1 | equemene | ELSE |
276 | 1 | equemene | DO 160 K = I + 1,M |
277 | 1 | equemene | TEMP = TEMP - CONJG(A(K,I))*B(K,J) |
278 | 1 | equemene | 160 CONTINUE |
279 | 1 | equemene | IF (NOUNIT) TEMP = TEMP/CONJG(A(I,I)) |
280 | 1 | equemene | END IF |
281 | 1 | equemene | B(I,J) = TEMP |
282 | 1 | equemene | 170 CONTINUE |
283 | 1 | equemene | 180 CONTINUE |
284 | 1 | equemene | END IF |
285 | 1 | equemene | END IF |
286 | 1 | equemene | ELSE |
287 | 1 | equemene | IF (LSAME(TRANSA,'N')) THEN |
288 | 1 | equemene | * |
289 | 1 | equemene | * Form B := alpha*B*inv( A ). |
290 | 1 | equemene | * |
291 | 1 | equemene | IF (UPPER) THEN |
292 | 1 | equemene | DO 230 J = 1,N |
293 | 1 | equemene | IF (ALPHA.NE.ONE) THEN |
294 | 1 | equemene | DO 190 I = 1,M |
295 | 1 | equemene | B(I,J) = ALPHA*B(I,J) |
296 | 1 | equemene | 190 CONTINUE |
297 | 1 | equemene | END IF |
298 | 1 | equemene | DO 210 K = 1,J - 1 |
299 | 1 | equemene | IF (A(K,J).NE.ZERO) THEN |
300 | 1 | equemene | DO 200 I = 1,M |
301 | 1 | equemene | B(I,J) = B(I,J) - A(K,J)*B(I,K) |
302 | 1 | equemene | 200 CONTINUE |
303 | 1 | equemene | END IF |
304 | 1 | equemene | 210 CONTINUE |
305 | 1 | equemene | IF (NOUNIT) THEN |
306 | 1 | equemene | TEMP = ONE/A(J,J) |
307 | 1 | equemene | DO 220 I = 1,M |
308 | 1 | equemene | B(I,J) = TEMP*B(I,J) |
309 | 1 | equemene | 220 CONTINUE |
310 | 1 | equemene | END IF |
311 | 1 | equemene | 230 CONTINUE |
312 | 1 | equemene | ELSE |
313 | 1 | equemene | DO 280 J = N,1,-1 |
314 | 1 | equemene | IF (ALPHA.NE.ONE) THEN |
315 | 1 | equemene | DO 240 I = 1,M |
316 | 1 | equemene | B(I,J) = ALPHA*B(I,J) |
317 | 1 | equemene | 240 CONTINUE |
318 | 1 | equemene | END IF |
319 | 1 | equemene | DO 260 K = J + 1,N |
320 | 1 | equemene | IF (A(K,J).NE.ZERO) THEN |
321 | 1 | equemene | DO 250 I = 1,M |
322 | 1 | equemene | B(I,J) = B(I,J) - A(K,J)*B(I,K) |
323 | 1 | equemene | 250 CONTINUE |
324 | 1 | equemene | END IF |
325 | 1 | equemene | 260 CONTINUE |
326 | 1 | equemene | IF (NOUNIT) THEN |
327 | 1 | equemene | TEMP = ONE/A(J,J) |
328 | 1 | equemene | DO 270 I = 1,M |
329 | 1 | equemene | B(I,J) = TEMP*B(I,J) |
330 | 1 | equemene | 270 CONTINUE |
331 | 1 | equemene | END IF |
332 | 1 | equemene | 280 CONTINUE |
333 | 1 | equemene | END IF |
334 | 1 | equemene | ELSE |
335 | 1 | equemene | * |
336 | 1 | equemene | * Form B := alpha*B*inv( A' ) |
337 | 1 | equemene | * or B := alpha*B*inv( conjg( A' ) ). |
338 | 1 | equemene | * |
339 | 1 | equemene | IF (UPPER) THEN |
340 | 1 | equemene | DO 330 K = N,1,-1 |
341 | 1 | equemene | IF (NOUNIT) THEN |
342 | 1 | equemene | IF (NOCONJ) THEN |
343 | 1 | equemene | TEMP = ONE/A(K,K) |
344 | 1 | equemene | ELSE |
345 | 1 | equemene | TEMP = ONE/CONJG(A(K,K)) |
346 | 1 | equemene | END IF |
347 | 1 | equemene | DO 290 I = 1,M |
348 | 1 | equemene | B(I,K) = TEMP*B(I,K) |
349 | 1 | equemene | 290 CONTINUE |
350 | 1 | equemene | END IF |
351 | 1 | equemene | DO 310 J = 1,K - 1 |
352 | 1 | equemene | IF (A(J,K).NE.ZERO) THEN |
353 | 1 | equemene | IF (NOCONJ) THEN |
354 | 1 | equemene | TEMP = A(J,K) |
355 | 1 | equemene | ELSE |
356 | 1 | equemene | TEMP = CONJG(A(J,K)) |
357 | 1 | equemene | END IF |
358 | 1 | equemene | DO 300 I = 1,M |
359 | 1 | equemene | B(I,J) = B(I,J) - TEMP*B(I,K) |
360 | 1 | equemene | 300 CONTINUE |
361 | 1 | equemene | END IF |
362 | 1 | equemene | 310 CONTINUE |
363 | 1 | equemene | IF (ALPHA.NE.ONE) THEN |
364 | 1 | equemene | DO 320 I = 1,M |
365 | 1 | equemene | B(I,K) = ALPHA*B(I,K) |
366 | 1 | equemene | 320 CONTINUE |
367 | 1 | equemene | END IF |
368 | 1 | equemene | 330 CONTINUE |
369 | 1 | equemene | ELSE |
370 | 1 | equemene | DO 380 K = 1,N |
371 | 1 | equemene | IF (NOUNIT) THEN |
372 | 1 | equemene | IF (NOCONJ) THEN |
373 | 1 | equemene | TEMP = ONE/A(K,K) |
374 | 1 | equemene | ELSE |
375 | 1 | equemene | TEMP = ONE/CONJG(A(K,K)) |
376 | 1 | equemene | END IF |
377 | 1 | equemene | DO 340 I = 1,M |
378 | 1 | equemene | B(I,K) = TEMP*B(I,K) |
379 | 1 | equemene | 340 CONTINUE |
380 | 1 | equemene | END IF |
381 | 1 | equemene | DO 360 J = K + 1,N |
382 | 1 | equemene | IF (A(J,K).NE.ZERO) THEN |
383 | 1 | equemene | IF (NOCONJ) THEN |
384 | 1 | equemene | TEMP = A(J,K) |
385 | 1 | equemene | ELSE |
386 | 1 | equemene | TEMP = CONJG(A(J,K)) |
387 | 1 | equemene | END IF |
388 | 1 | equemene | DO 350 I = 1,M |
389 | 1 | equemene | B(I,J) = B(I,J) - TEMP*B(I,K) |
390 | 1 | equemene | 350 CONTINUE |
391 | 1 | equemene | END IF |
392 | 1 | equemene | 360 CONTINUE |
393 | 1 | equemene | IF (ALPHA.NE.ONE) THEN |
394 | 1 | equemene | DO 370 I = 1,M |
395 | 1 | equemene | B(I,K) = ALPHA*B(I,K) |
396 | 1 | equemene | 370 CONTINUE |
397 | 1 | equemene | END IF |
398 | 1 | equemene | 380 CONTINUE |
399 | 1 | equemene | END IF |
400 | 1 | equemene | END IF |
401 | 1 | equemene | END IF |
402 | 1 | equemene | * |
403 | 1 | equemene | RETURN |
404 | 1 | equemene | * |
405 | 1 | equemene | * End of CTRSM . |
406 | 1 | equemene | * |
407 | 1 | equemene | END |