Commit | Line | Data |
---|---|---|
54c5ebb1 PH |
1 | >>> host in hosts_connection_nolog? no (option unset) |
2 | >>> host in host_lookup? no (option unset) | |
3 | >>> host in host_reject_connection? no (option unset) | |
4 | >>> host in sender_unqualified_hosts? no (option unset) | |
5 | >>> host in recipient_unqualified_hosts? no (option unset) | |
6 | >>> host in helo_verify_hosts? no (option unset) | |
7 | >>> host in helo_try_verify_hosts? no (option unset) | |
8 | >>> host in helo_accept_junk_hosts? no (option unset) | |
c46782ef PH |
9 | >>> using ACL "check_connect" |
10 | >>> processing "warn" | |
11 | >>> check hosts = 10.0.0.6 | |
12 | >>> host in "10.0.0.6"? no (end of list) | |
13 | >>> warn: condition test failed | |
14 | >>> processing "accept" | |
15 | >>> accept: condition test succeeded | |
54c5ebb1 PH |
16 | >>> host in smtp_accept_max_nonmail_hosts? yes (matched "*") |
17 | >>> using ACL "check_vrfy" | |
18 | >>> processing "deny" | |
19 | >>> check hosts = +auth_hosts | |
20 | >>> host in "10.0.0.1"? no (end of list) | |
21 | >>> host in "+auth_hosts"? no (end of list) | |
22 | >>> deny: condition test failed | |
23 | >>> processing "accept" | |
24 | >>> accept: condition test succeeded | |
25 | >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | |
26 | >>> routing userx@test.ex | |
27 | >>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") | |
28 | >>> test.ex in "! +local_domains"? no (matched "! +local_domains") | |
29 | >>> userx in "userx"? yes (matched "userx") | |
30 | >>> calling localuser router | |
31 | >>> routed by localuser router | |
32 | >>> using ACL "check_expn" | |
33 | >>> processing "deny" | |
34 | >>> check hosts = +auth_hosts | |
35 | >>> host in "+auth_hosts"? no (end of list) | |
36 | >>> deny: condition test failed | |
37 | >>> processing "accept" | |
38 | >>> check hosts = 10.0.0.0/24 | |
39 | >>> host in "10.0.0.0/24"? yes (matched "10.0.0.0/24") | |
40 | >>> accept: condition test succeeded | |
41 | >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | |
42 | >>> routing list@test.ex | |
43 | >>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") | |
44 | >>> test.ex in "! +local_domains"? no (matched "! +local_domains") | |
45 | >>> list in "userx"? no (end of list) | |
46 | >>> no more routers | |
47 | LOG: ETRN #abcd received from [10.0.0.2] | |
48 | >>> using ACL "check_etrn" | |
49 | >>> processing "deny" | |
50 | >>> check hosts = +auth_hosts | |
51 | >>> host in "+auth_hosts"? no (end of list) | |
52 | >>> deny: condition test failed | |
53 | >>> processing "require" | |
54 | >>> check hosts = 10.0.0.0/24 | |
55 | >>> host in "10.0.0.0/24"? yes (matched "10.0.0.0/24") | |
56 | >>> require: condition test succeeded | |
57 | >>> processing "warn" | |
58 | >>> warn: condition test succeeded | |
59 | LOG: H=[10.0.0.2] Warning: accepted ETRN #abcd | |
60 | >>> processing "accept" | |
61 | >>> accept: condition test succeeded | |
62 | >>> ETRN command is: exim -R | |
63 | >>> ETRN command execution skipped | |
64 | >>> host in hosts_connection_nolog? no (option unset) | |
65 | >>> host in host_lookup? no (option unset) | |
66 | >>> host in host_reject_connection? no (option unset) | |
67 | >>> host in sender_unqualified_hosts? no (option unset) | |
68 | >>> host in recipient_unqualified_hosts? no (option unset) | |
69 | >>> host in helo_verify_hosts? no (option unset) | |
70 | >>> host in helo_try_verify_hosts? no (option unset) | |
71 | >>> host in helo_accept_junk_hosts? no (option unset) | |
c46782ef PH |
72 | >>> using ACL "check_connect" |
73 | >>> processing "warn" | |
74 | >>> check hosts = 10.0.0.6 | |
75 | >>> host in "10.0.0.6"? no (end of list) | |
76 | >>> warn: condition test failed | |
77 | >>> processing "accept" | |
78 | >>> accept: condition test succeeded | |
54c5ebb1 PH |
79 | >>> test.host in helo_lookup_domains? no (end of list) |
80 | >>> host in pipelining_advertise_hosts? yes (matched "*") | |
81 | >>> host in "10.0.0.1"? yes (matched "10.0.0.1") | |
82 | >>> host in auth_advertise_hosts? yes (matched "+auth_hosts") | |
83 | >>> host in smtp_accept_max_nonmail_hosts? yes (matched "*") | |
84 | >>> using ACL "check_vrfy" | |
85 | >>> processing "deny" | |
86 | >>> check hosts = +auth_hosts | |
87 | >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) | |
88 | >>> check !authenticated = * | |
89 | >>> deny: condition test succeeded | |
90 | LOG: H=(test.host) [10.0.0.1] rejected VRFY userx@test.ex: authentication required | |
91 | >>> using ACL "check_expn" | |
92 | >>> processing "deny" | |
93 | >>> check hosts = +auth_hosts | |
94 | >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) | |
95 | >>> check !authenticated = * | |
96 | >>> deny: condition test succeeded | |
97 | LOG: H=(test.host) [10.0.0.1] rejected EXPN list@test.ex: authentication required | |
98 | LOG: ETRN abcd received from (test.host) [10.0.0.1] | |
99 | >>> using ACL "check_etrn" | |
100 | >>> processing "deny" | |
101 | >>> check hosts = +auth_hosts | |
102 | >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) | |
103 | >>> check !authenticated = * | |
104 | >>> deny: condition test succeeded | |
105 | LOG: H=(test.host) [10.0.0.1] rejected ETRN abcd: authentication required | |
106 | >>> using ACL "check_recipient" | |
107 | >>> processing "warn" | |
108 | >>> check hosts = 10.0.0.5 | |
109 | >>> host in "10.0.0.5"? no (end of list) | |
110 | >>> warn: condition test failed | |
111 | >>> processing "accept" | |
112 | >>> check hosts = 10.0.0.5 | |
113 | >>> host in "10.0.0.5"? no (end of list) | |
114 | >>> accept: condition test failed | |
115 | >>> processing "accept" | |
116 | >>> check hosts = : | |
117 | >>> host in ":"? no (end of list) | |
118 | >>> accept: condition test failed | |
119 | >>> processing "deny" | |
120 | >>> check hosts = +auth_hosts | |
121 | >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) | |
122 | >>> check !authenticated = * | |
123 | >>> deny: condition test succeeded | |
124 | LOG: H=(test.host) [10.0.0.1] F=<junk@jink.jonk.test.ex> rejected RCPT <userx@test.ex>: authentication required | |
125 | >>> mylogin authenticator: | |
f78eb7c6 | 126 | >>> $auth1 = userx secret |
54c5ebb1 PH |
127 | >>> $1 = userx secret |
128 | >>> +++MYLOGIN $1="userx secret" $2="" $3="" | |
129 | >>> expanded string: yes | |
130 | >>> using ACL "check_recipient" | |
131 | >>> processing "warn" | |
132 | >>> check hosts = 10.0.0.5 | |
133 | >>> host in "10.0.0.5"? no (end of list) | |
134 | >>> warn: condition test failed | |
135 | >>> processing "accept" | |
136 | >>> check hosts = 10.0.0.5 | |
137 | >>> host in "10.0.0.5"? no (end of list) | |
138 | >>> accept: condition test failed | |
139 | >>> processing "accept" | |
140 | >>> check hosts = : | |
141 | >>> host in ":"? no (end of list) | |
142 | >>> accept: condition test failed | |
143 | >>> processing "deny" | |
144 | >>> check hosts = +auth_hosts | |
145 | >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) | |
146 | >>> check !authenticated = * | |
147 | >>> mylogin in "*"? yes (matched "*") | |
148 | >>> deny: condition test failed | |
149 | >>> processing "accept" | |
150 | >>> check domains = +local_domains | |
151 | >>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") | |
152 | >>> test.ex in "+local_domains"? yes (matched "+local_domains") | |
153 | >>> accept: condition test succeeded | |
154 | >>> using ACL "check_recipient" | |
155 | >>> processing "warn" | |
156 | >>> check hosts = 10.0.0.5 | |
157 | >>> host in "10.0.0.5"? no (end of list) | |
158 | >>> warn: condition test failed | |
159 | >>> processing "accept" | |
160 | >>> check hosts = 10.0.0.5 | |
161 | >>> host in "10.0.0.5"? no (end of list) | |
162 | >>> accept: condition test failed | |
163 | >>> processing "accept" | |
164 | >>> check hosts = : | |
165 | >>> host in ":"? no (end of list) | |
166 | >>> accept: condition test failed | |
167 | >>> processing "deny" | |
168 | >>> check hosts = +auth_hosts | |
169 | >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) | |
170 | >>> check !authenticated = * | |
171 | >>> mylogin in "*"? yes (matched "*") | |
172 | >>> deny: condition test failed | |
173 | >>> processing "accept" | |
174 | >>> check domains = +local_domains | |
175 | >>> cus.cam.ac.uk in "test.ex : *.test.ex"? no (end of list) | |
176 | >>> cus.cam.ac.uk in "+local_domains"? no (end of list) | |
177 | >>> accept: condition test failed | |
178 | >>> processing "accept" | |
179 | >>> check hosts = +relay_hosts | |
180 | >>> host in "10.0.0.4"? no (end of list) | |
181 | >>> host in "+relay_hosts"? no (end of list) | |
182 | >>> accept: condition test failed | |
183 | >>> processing "accept" | |
184 | >>> check hosts = +auth_relay_hosts | |
185 | >>> host in "10.0.0.3 : 10.0.0.4"? no (end of list) | |
186 | >>> host in "+auth_relay_hosts"? no (end of list) | |
187 | >>> accept: condition test failed | |
188 | >>> processing "deny" | |
189 | >>> deny: condition test succeeded | |
190 | LOG: H=(test.host) [10.0.0.1] F=<junk@jink.jonk.test.ex> rejected RCPT <userx@cus.cam.ac.uk>: relay not permitted | |
191 | >>> using ACL "check_vrfy" | |
192 | >>> processing "deny" | |
193 | >>> check hosts = +auth_hosts | |
194 | >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) | |
195 | >>> check !authenticated = * | |
196 | >>> mylogin in "*"? yes (matched "*") | |
197 | >>> deny: condition test failed | |
198 | >>> processing "accept" | |
199 | >>> accept: condition test succeeded | |
200 | >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | |
201 | >>> routing userx@test.ex | |
202 | >>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") | |
203 | >>> test.ex in "! +local_domains"? no (matched "! +local_domains") | |
204 | >>> userx in "userx"? yes (matched "userx") | |
205 | >>> calling localuser router | |
206 | >>> routed by localuser router | |
207 | >>> using ACL "check_expn" | |
208 | >>> processing "deny" | |
209 | >>> check hosts = +auth_hosts | |
210 | >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) | |
211 | >>> check !authenticated = * | |
212 | >>> mylogin in "*"? yes (matched "*") | |
213 | >>> deny: condition test failed | |
214 | >>> processing "accept" | |
215 | >>> check hosts = 10.0.0.0/24 | |
216 | >>> host in "10.0.0.0/24"? yes (matched "10.0.0.0/24") | |
217 | >>> accept: condition test succeeded | |
218 | >>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | |
219 | >>> routing list@test.ex | |
220 | >>> test.ex in "test.ex : *.test.ex"? yes (matched "test.ex") | |
221 | >>> test.ex in "! +local_domains"? no (matched "! +local_domains") | |
222 | >>> list in "userx"? no (end of list) | |
223 | >>> no more routers | |
224 | LOG: ETRN #abcd received from (test.host) [10.0.0.1] | |
225 | >>> using ACL "check_etrn" | |
226 | >>> processing "deny" | |
227 | >>> check hosts = +auth_hosts | |
228 | >>> host in "+auth_hosts"? yes (matched "+auth_hosts" - cached) | |
229 | >>> check !authenticated = * | |
230 | >>> mylogin in "*"? yes (matched "*") | |
231 | >>> deny: condition test failed | |
232 | >>> processing "require" | |
233 | >>> check hosts = 10.0.0.0/24 | |
234 | >>> host in "10.0.0.0/24"? yes (matched "10.0.0.0/24") | |
235 | >>> require: condition test succeeded | |
236 | >>> processing "warn" | |
237 | >>> warn: condition test succeeded | |
238 | LOG: H=(test.host) [10.0.0.1] Warning: accepted ETRN #abcd | |
239 | >>> processing "accept" | |
240 | >>> accept: condition test succeeded | |
241 | >>> ETRN command is: exim -R | |
242 | >>> ETRN command execution skipped | |
243 | >>> host in hosts_connection_nolog? no (option unset) | |
244 | >>> host in host_lookup? no (option unset) | |
245 | >>> host in host_reject_connection? no (option unset) | |
246 | >>> host in sender_unqualified_hosts? no (option unset) | |
247 | >>> host in recipient_unqualified_hosts? no (option unset) | |
248 | >>> host in helo_verify_hosts? no (option unset) | |
249 | >>> host in helo_try_verify_hosts? no (option unset) | |
250 | >>> host in helo_accept_junk_hosts? no (option unset) | |
c46782ef PH |
251 | >>> using ACL "check_connect" |
252 | >>> processing "warn" | |
253 | >>> check hosts = 10.0.0.6 | |
254 | >>> host in "10.0.0.6"? no (end of list) | |
255 | >>> warn: condition test failed | |
256 | >>> processing "accept" | |
257 | >>> accept: condition test succeeded | |
54c5ebb1 PH |
258 | >>> test.host in helo_lookup_domains? no (end of list) |
259 | >>> host in pipelining_advertise_hosts? yes (matched "*") | |
260 | >>> host in "10.0.0.1"? no (end of list) | |
261 | >>> host in "10.0.0.4"? no (end of list) | |
262 | >>> host in "10.0.0.3 : 10.0.0.4"? yes (matched "10.0.0.3") | |
263 | >>> host in auth_advertise_hosts? yes (matched "+auth_relay_hosts") | |
264 | >>> using ACL "check_recipient" | |
265 | >>> processing "warn" | |
266 | >>> check hosts = 10.0.0.5 | |
267 | >>> host in "10.0.0.5"? no (end of list) | |
268 | >>> warn: condition test failed | |
269 | >>> processing "accept" | |
270 | >>> check hosts = 10.0.0.5 | |
271 | >>> host in "10.0.0.5"? no (end of list) | |
272 | >>> accept: condition test failed | |
273 | >>> processing "accept" | |
274 | >>> check hosts = : | |
275 | >>> host in ":"? no (end of list) | |
276 | >>> accept: condition test failed | |
277 | >>> processing "deny" | |
278 | >>> check hosts = +auth_hosts | |
279 | >>> host in "+auth_hosts"? no (end of list) | |
280 | >>> deny: condition test failed | |
281 | >>> processing "accept" | |
282 | >>> check domains = +local_domains | |
283 | >>> cus.cam.ac.uk in "test.ex : *.test.ex"? no (end of list) | |
284 | >>> cus.cam.ac.uk in "+local_domains"? no (end of list) | |
285 | >>> accept: condition test failed | |
286 | >>> processing "accept" | |
287 | >>> check hosts = +relay_hosts | |
288 | >>> host in "+relay_hosts"? no (end of list) | |
289 | >>> accept: condition test failed | |
290 | >>> processing "accept" | |
291 | >>> check hosts = +auth_relay_hosts | |
292 | >>> host in "+auth_relay_hosts"? yes (matched "+auth_relay_hosts" - cached) | |
293 | >>> check authenticated = * | |
294 | >>> accept: condition test failed | |
295 | >>> accept: endpass encountered - denying access | |
296 | LOG: H=(test.host) [10.0.0.3] F=<junk@jink.jonk.test.ex> rejected RCPT <userx@cus.cam.ac.uk>: authentication required | |
297 | >>> mylogin authenticator: | |
f78eb7c6 | 298 | >>> $auth1 = userx secret |
54c5ebb1 PH |
299 | >>> $1 = userx secret |
300 | >>> +++MYLOGIN $1="userx secret" $2="" $3="" | |
301 | >>> expanded string: yes | |
302 | >>> using ACL "check_recipient" | |
303 | >>> processing "warn" | |
304 | >>> check hosts = 10.0.0.5 | |
305 | >>> host in "10.0.0.5"? no (end of list) | |
306 | >>> warn: condition test failed | |
307 | >>> processing "accept" | |
308 | >>> check hosts = 10.0.0.5 | |
309 | >>> host in "10.0.0.5"? no (end of list) | |
310 | >>> accept: condition test failed | |
311 | >>> processing "accept" | |
312 | >>> check hosts = : | |
313 | >>> host in ":"? no (end of list) | |
314 | >>> accept: condition test failed | |
315 | >>> processing "deny" | |
316 | >>> check hosts = +auth_hosts | |
317 | >>> host in "+auth_hosts"? no (end of list) | |
318 | >>> deny: condition test failed | |
319 | >>> processing "accept" | |
320 | >>> check domains = +local_domains | |
321 | >>> cus.cam.ac.uk in "test.ex : *.test.ex"? no (end of list) | |
322 | >>> cus.cam.ac.uk in "+local_domains"? no (end of list) | |
323 | >>> accept: condition test failed | |
324 | >>> processing "accept" | |
325 | >>> check hosts = +relay_hosts | |
326 | >>> host in "+relay_hosts"? no (end of list) | |
327 | >>> accept: condition test failed | |
328 | >>> processing "accept" | |
329 | >>> check hosts = +auth_relay_hosts | |
330 | >>> host in "+auth_relay_hosts"? yes (matched "+auth_relay_hosts" - cached) | |
331 | >>> check authenticated = * | |
332 | >>> mylogin in "*"? yes (matched "*") | |
333 | >>> accept: condition test succeeded | |
334 | >>> host in hosts_connection_nolog? no (option unset) | |
335 | >>> host in host_lookup? no (option unset) | |
336 | >>> host in host_reject_connection? no (option unset) | |
337 | >>> host in sender_unqualified_hosts? no (option unset) | |
338 | >>> host in recipient_unqualified_hosts? no (option unset) | |
339 | >>> host in helo_verify_hosts? no (option unset) | |
340 | >>> host in helo_try_verify_hosts? no (option unset) | |
341 | >>> host in helo_accept_junk_hosts? no (option unset) | |
c46782ef PH |
342 | >>> using ACL "check_connect" |
343 | >>> processing "warn" | |
344 | >>> check hosts = 10.0.0.6 | |
345 | >>> host in "10.0.0.6"? no (end of list) | |
346 | >>> warn: condition test failed | |
347 | >>> processing "accept" | |
348 | >>> accept: condition test succeeded | |
54c5ebb1 PH |
349 | >>> test.host in helo_lookup_domains? no (end of list) |
350 | >>> host in pipelining_advertise_hosts? yes (matched "*") | |
351 | >>> host in "10.0.0.1"? no (end of list) | |
352 | >>> host in "10.0.0.4"? yes (matched "10.0.0.4") | |
353 | >>> host in auth_advertise_hosts? no (matched "!+relay_hosts") | |
354 | Exim version x.yz .... | |
355 | changed uid/gid: forcing real = effective | |
356 | uid=uuuu gid=CALLER_GID pid=pppp | |
d8fe1c03 PH |
357 | seeking password data for user "CALLER": cache not available |
358 | getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID | |
54c5ebb1 PH |
359 | configuration file is TESTSUITE/test-config |
360 | trusted user | |
361 | admin user | |
362 | changed uid/gid: privilege not needed | |
363 | uid=EXIM_UID gid=EXIM_GID pid=pppp | |
d8fe1c03 PH |
364 | seeking password data for user "CALLER": using cached result |
365 | getpwnam() succeeded uid=CALLER_UID gid=CALLER_GID | |
54c5ebb1 PH |
366 | originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME |
367 | sender address = NULL | |
368 | sender_fullhost = [10.0.0.5] | |
369 | sender_rcvhost = [10.0.0.5] (ident=CALLER) | |
370 | set_process_info: pppp handling incoming connection from [10.0.0.5] via -oMa | |
371 | host in hosts_connection_nolog? no (option unset) | |
372 | LOG: smtp_connection MAIN | |
373 | SMTP connection from CALLER | |
374 | host in host_lookup? no (option unset) | |
375 | set_process_info: pppp handling incoming connection from [10.0.0.5] U=CALLER | |
376 | host in host_reject_connection? no (option unset) | |
377 | host in sender_unqualified_hosts? no (option unset) | |
378 | host in recipient_unqualified_hosts? no (option unset) | |
379 | host in helo_verify_hosts? no (option unset) | |
380 | host in helo_try_verify_hosts? no (option unset) | |
381 | host in helo_accept_junk_hosts? no (option unset) | |
c46782ef PH |
382 | using ACL "check_connect" |
383 | processing "warn" | |
384 | check hosts = 10.0.0.6 | |
385 | host in "10.0.0.6"? no (end of list) | |
386 | warn: condition test failed | |
387 | processing "accept" | |
388 | accept: condition test succeeded | |
898d150f | 389 | SMTP>> 220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 |
54c5ebb1 PH |
390 | smtp_setup_msg entered |
391 | SMTP<< ehlo testing.testing | |
392 | testing.testing in helo_lookup_domains? no (end of list) | |
393 | sender_fullhost = (testing.testing) [10.0.0.5] | |
394 | sender_rcvhost = [10.0.0.5] (helo=testing.testing ident=CALLER) | |
395 | set_process_info: pppp handling incoming connection from (testing.testing) [10.0.0.5] U=CALLER | |
396 | host in pipelining_advertise_hosts? yes (matched "*") | |
397 | host in "10.0.0.1"? no (end of list) | |
398 | host in "10.0.0.4"? no (end of list) | |
399 | host in "10.0.0.3 : 10.0.0.4"? no (end of list) | |
400 | host in auth_advertise_hosts? yes (matched "10.0.0.5") | |
898d150f PH |
401 | SMTP>> 250-myhost.test.ex Hello CALLER at testing.testing [10.0.0.5] |
402 | 250-SIZE 52428800 | |
403 | 250-ETRN | |
404 | 250-EXPN | |
405 | 250-PIPELINING | |
406 | 250-AUTH MYLOGIN PLAIN EXPLAIN EXPANDED EXPANDFAIL DEFER LOGIN | |
407 | 250 HELP | |
54c5ebb1 PH |
408 | SMTP<< auth mylogin dXNlcnggc2VjcmV0 |
409 | mylogin authenticator: | |
f78eb7c6 | 410 | $auth1 = userx secret |
54c5ebb1 PH |
411 | $1 = userx secret |
412 | +++MYLOGIN $1="userx secret" $2="" $3="" | |
413 | expanded string: yes | |
898d150f | 414 | SMTP>> 235 Authentication succeeded |
54c5ebb1 | 415 | SMTP<< quit |
898d150f | 416 | SMTP>> 221 myhost.test.ex closing connection |
54c5ebb1 PH |
417 | LOG: smtp_connection MAIN |
418 | SMTP connection from CALLER closed by QUIT | |
419 | search_tidyup called | |
420 | >>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> |