/mandos/release

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/release

« back to all changes in this revision

Viewing changes to mandos-ctl.xml

  • Committer: Björn Påhlsson
  • Date: 2008-07-20 02:52:20 UTC
  • Revision ID: belorn@braxen-20080720025220-r5u0388uy9iu23h6
Added following support:
Pluginbased client handler
rewritten Mandos client
       Avahi instead of udp server discovery
       openpgp encrypted key support
Passprompt stand alone application for direct console input
Added logging for Mandos server

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?xml version="1.0" encoding="UTF-8"?>
2
 
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3
 
        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4
 
<!ENTITY COMMANDNAME "mandos-ctl">
5
 
<!ENTITY TIMESTAMP "2016-06-27">
6
 
<!ENTITY % common SYSTEM "common.ent">
7
 
%common;
8
 
]>
9
 
 
10
 
<refentry xmlns:xi="http://www.w3.org/2001/XInclude">
11
 
  <refentryinfo>
12
 
    <title>Mandos Manual</title>
13
 
    <!-- NWalsh’s docbook scripts use this to generate the footer: -->
14
 
    <productname>Mandos</productname>
15
 
    <productnumber>&version;</productnumber>
16
 
    <date>&TIMESTAMP;</date>
17
 
    <authorgroup>
18
 
      <author>
19
 
        <firstname>Björn</firstname>
20
 
        <surname>Påhlsson</surname>
21
 
        <address>
22
 
          <email>belorn@recompile.se</email>
23
 
        </address>
24
 
      </author>
25
 
      <author>
26
 
        <firstname>Teddy</firstname>
27
 
        <surname>Hogeborn</surname>
28
 
        <address>
29
 
          <email>teddy@recompile.se</email>
30
 
        </address>
31
 
      </author>
32
 
    </authorgroup>
33
 
    <copyright>
34
 
      <year>2010</year>
35
 
      <year>2011</year>
36
 
      <year>2012</year>
37
 
      <year>2013</year>
38
 
      <year>2014</year>
39
 
      <year>2015</year>
40
 
      <year>2016</year>
41
 
      <holder>Teddy Hogeborn</holder>
42
 
      <holder>Björn Påhlsson</holder>
43
 
    </copyright>
44
 
    <xi:include href="legalnotice.xml"/>
45
 
  </refentryinfo>
46
 
  
47
 
  <refmeta>
48
 
    <refentrytitle>&COMMANDNAME;</refentrytitle>
49
 
    <manvolnum>8</manvolnum>
50
 
  </refmeta>
51
 
  
52
 
  <refnamediv>
53
 
    <refname><command>&COMMANDNAME;</command></refname>
54
 
    <refpurpose>
55
 
      Control or query the operation of the Mandos server
56
 
    </refpurpose>
57
 
  </refnamediv>
58
 
  
59
 
  <refsynopsisdiv>
60
 
    <cmdsynopsis>
61
 
      <command>&COMMANDNAME;</command>
62
 
      <group choice="req">
63
 
        <group>
64
 
          <arg choice="plain"><option>--enable</option></arg>
65
 
          <arg choice="plain"><option>-e</option></arg>
66
 
          <sbr/>
67
 
          <arg choice="plain"><option>--disable</option></arg>
68
 
          <arg choice="plain"><option>-d</option></arg>
69
 
        </group>
70
 
        <sbr/>
71
 
        <group>
72
 
          <arg choice="plain"><option>--bump-timeout</option></arg>
73
 
          <arg choice="plain"><option>-b</option></arg>
74
 
        </group>
75
 
        <sbr/>
76
 
        <group>
77
 
          <arg choice="plain"><option>--start-checker</option></arg>
78
 
        </group>
79
 
        <sbr/>
80
 
        <group>
81
 
          <arg choice="plain"><option>--stop-checker</option></arg>
82
 
        </group>
83
 
        <sbr/>
84
 
        <group>
85
 
          <arg choice="plain"><option>--remove</option></arg>
86
 
          <arg choice="plain"><option>-r</option></arg>
87
 
        </group>
88
 
        <sbr/>
89
 
        <group>
90
 
          <arg choice="plain"><option>--checker
91
 
          <replaceable>COMMAND</replaceable></option></arg>
92
 
          <arg choice="plain"><option>-c
93
 
          <replaceable>COMMAND</replaceable></option></arg>
94
 
        </group>
95
 
        <sbr/>
96
 
        <group>
97
 
          <arg choice="plain"><option>--timeout
98
 
          <replaceable>TIME</replaceable></option></arg>
99
 
          <arg choice="plain"><option>-t
100
 
          <replaceable>TIME</replaceable></option></arg>
101
 
        </group>
102
 
        <sbr/>
103
 
        <group>
104
 
          <arg choice="plain"><option>--extended-timeout
105
 
          <replaceable>TIME</replaceable></option></arg>
106
 
        </group>
107
 
        <sbr/>
108
 
        <group>
109
 
          <arg choice="plain"><option>--interval
110
 
          <replaceable>TIME</replaceable></option></arg>
111
 
          <arg choice="plain"><option>-i
112
 
          <replaceable>TIME</replaceable></option></arg>
113
 
        </group>
114
 
        <sbr/>
115
 
        <group>
116
 
          <arg choice="plain"><option>--approve-by-default</option
117
 
          ></arg>
118
 
          <sbr/>
119
 
          <arg choice="plain"><option>--deny-by-default</option></arg>
120
 
        </group>
121
 
        <sbr/>
122
 
        <group>
123
 
          <arg choice="plain"><option>--approval-delay
124
 
          <replaceable>TIME</replaceable></option></arg>
125
 
        </group>
126
 
        <sbr/>
127
 
        <group>
128
 
          <arg choice="plain"><option>--approval-duration
129
 
          <replaceable>TIME</replaceable></option></arg>
130
 
        </group>
131
 
        <sbr/>
132
 
        <group>
133
 
          <arg choice="plain"><option>--interval
134
 
          <replaceable>TIME</replaceable></option></arg>
135
 
          <arg choice="plain"><option>-i
136
 
          <replaceable>TIME</replaceable></option></arg>
137
 
        </group>
138
 
        <sbr/>
139
 
        <group>
140
 
          <arg choice="plain"><option>--host
141
 
          <replaceable>STRING</replaceable></option></arg>
142
 
          <arg choice="plain"><option>-H
143
 
          <replaceable>STRING</replaceable></option></arg>
144
 
        </group>
145
 
        <sbr/>
146
 
        <group>
147
 
          <arg choice="plain"><option>--secret
148
 
          <replaceable>FILENAME</replaceable></option></arg>
149
 
          <arg choice="plain"><option>-s
150
 
          <replaceable>FILENAME</replaceable></option></arg>
151
 
        </group>
152
 
        <sbr/>
153
 
        <group>
154
 
          <arg choice="plain"><option>--approve</option></arg>
155
 
          <arg choice="plain"><option>-A</option></arg>
156
 
          <sbr/>
157
 
          <arg choice="plain"><option>--deny</option></arg>
158
 
          <arg choice="plain"><option>-D</option></arg>
159
 
        </group>
160
 
      </group>
161
 
      <sbr/>
162
 
      <group choice="req">
163
 
        <arg choice="plain"><option>--all</option></arg>
164
 
        <arg choice="plain"><option>-a</option></arg>
165
 
        <arg rep='repeat' choice='plain'>
166
 
          <replaceable>CLIENT</replaceable>
167
 
        </arg>
168
 
      </group>
169
 
    </cmdsynopsis>
170
 
    <cmdsynopsis>
171
 
      <command>&COMMANDNAME;</command>
172
 
      <group>
173
 
          <arg choice="plain"><option>--verbose</option></arg>
174
 
          <arg choice="plain"><option>-v</option></arg>
175
 
          <sbr/>
176
 
          <arg choice="plain"><option>--dump-json</option></arg>
177
 
          <arg choice="plain"><option>-j</option></arg>
178
 
      </group>
179
 
      <group>
180
 
        <arg rep='repeat' choice='plain'>
181
 
          <replaceable>CLIENT</replaceable>
182
 
        </arg>
183
 
      </group>
184
 
    </cmdsynopsis>
185
 
    <cmdsynopsis>
186
 
      <command>&COMMANDNAME;</command>
187
 
      <group choice="req">
188
 
        <arg choice="plain"><option>--is-enabled</option></arg>
189
 
        <arg choice="plain"><option>-V</option></arg>
190
 
      </group>
191
 
      <arg choice='plain'><replaceable>CLIENT</replaceable></arg>
192
 
    </cmdsynopsis>
193
 
    <cmdsynopsis>
194
 
      <command>&COMMANDNAME;</command>
195
 
      <group choice="req">
196
 
        <arg choice="plain"><option>--help</option></arg>
197
 
        <arg choice="plain"><option>-h</option></arg>
198
 
      </group>
199
 
    </cmdsynopsis>
200
 
    <cmdsynopsis>
201
 
      <command>&COMMANDNAME;</command>
202
 
      <group choice="req">
203
 
        <arg choice="plain"><option>--version</option></arg>
204
 
        <arg choice="plain"><option>-v</option></arg>
205
 
      </group>
206
 
    </cmdsynopsis>
207
 
    <cmdsynopsis>
208
 
      <command>&COMMANDNAME;</command>
209
 
      <arg choice="plain"><option>--check</option></arg>
210
 
    </cmdsynopsis>
211
 
  </refsynopsisdiv>
212
 
  
213
 
  <refsect1 id="description">
214
 
    <title>DESCRIPTION</title>
215
 
    <para>
216
 
      <command>&COMMANDNAME;</command> is a program to control or
217
 
      query the operation of the Mandos server
218
 
      <citerefentry><refentrytitle>mandos</refentrytitle><manvolnum
219
 
      >8</manvolnum></citerefentry>.
220
 
    </para>
221
 
    <para>
222
 
      This program can be used to change client settings, approve or
223
 
      deny client requests, and to remove clients from the server.
224
 
    </para>
225
 
  </refsect1>
226
 
  
227
 
  <refsect1 id="purpose">
228
 
    <title>PURPOSE</title>
229
 
    <para>
230
 
      The purpose of this is to enable <emphasis>remote and unattended
231
 
      rebooting</emphasis> of client host computer with an
232
 
      <emphasis>encrypted root file system</emphasis>.  See <xref
233
 
      linkend="overview"/> for details.
234
 
    </para>
235
 
  </refsect1>
236
 
  
237
 
  <refsect1 id="options">
238
 
    <title>OPTIONS</title>
239
 
    
240
 
    <variablelist>
241
 
      <varlistentry>
242
 
        <term><option>--help</option></term>
243
 
        <term><option>-h</option></term>
244
 
        <listitem>
245
 
          <para>
246
 
            Show a help message and exit
247
 
          </para>
248
 
        </listitem>
249
 
      </varlistentry>
250
 
      
251
 
      <varlistentry>
252
 
        <term><option>--enable</option></term>
253
 
        <term><option>-e</option></term>
254
 
        <listitem>
255
 
          <para>
256
 
            Enable client(s).  An enabled client will be eligble to
257
 
            receive its secret.
258
 
          </para>
259
 
        </listitem>
260
 
      </varlistentry>
261
 
      
262
 
      <varlistentry>
263
 
        <term><option>--disable</option></term>
264
 
        <term><option>-d</option></term>
265
 
        <listitem>
266
 
          <para>
267
 
            Disable client(s).  A disabled client will not be eligble
268
 
            to receive its secret, and no checkers will be started for
269
 
            it.
270
 
          </para>
271
 
        </listitem>
272
 
      </varlistentry>
273
 
      
274
 
      <varlistentry>
275
 
        <term><option>--bump-timeout</option></term>
276
 
        <listitem>
277
 
          <para>
278
 
            Bump the timeout of the specified client(s), just as if a
279
 
            checker had completed successfully for it/them.
280
 
          </para>
281
 
        </listitem>
282
 
      </varlistentry>
283
 
      
284
 
      <varlistentry>
285
 
        <term><option>--start-checker</option></term>
286
 
        <listitem>
287
 
          <para>
288
 
            Start a new checker now for the specified client(s).
289
 
          </para>
290
 
        </listitem>
291
 
      </varlistentry>
292
 
      
293
 
      <varlistentry>
294
 
        <term><option>--stop-checker</option></term>
295
 
        <listitem>
296
 
          <para>
297
 
            Stop any running checker for the specified client(s).
298
 
          </para>
299
 
        </listitem>
300
 
      </varlistentry>
301
 
      
302
 
      <varlistentry>
303
 
        <term><option>--remove</option></term>
304
 
        <term><option>-r</option></term>
305
 
        <listitem>
306
 
          <para>
307
 
            Remove the specified client(s) from the server.
308
 
          </para>
309
 
        </listitem>
310
 
      </varlistentry>
311
 
      
312
 
      <varlistentry>
313
 
        <term><option>--checker
314
 
        <replaceable>COMMAND</replaceable></option></term>
315
 
        <term><option>-c
316
 
        <replaceable>COMMAND</replaceable></option></term>
317
 
        <listitem>
318
 
          <para>
319
 
            Set the <varname>checker</varname> option of the specified
320
 
            client(s); see <citerefentry><refentrytitle
321
 
            >mandos-clients.conf</refentrytitle><manvolnum
322
 
            >5</manvolnum></citerefentry>.
323
 
          </para>
324
 
        </listitem>
325
 
      </varlistentry>
326
 
      
327
 
      <varlistentry>
328
 
        <term><option>--timeout
329
 
        <replaceable>TIME</replaceable></option></term>
330
 
        <term><option>-t
331
 
        <replaceable>TIME</replaceable></option></term>
332
 
        <listitem>
333
 
          <para>
334
 
            Set the <varname>timeout</varname> option of the specified
335
 
            client(s); see <citerefentry><refentrytitle
336
 
            >mandos-clients.conf</refentrytitle><manvolnum
337
 
            >5</manvolnum></citerefentry>.
338
 
          </para>
339
 
        </listitem>
340
 
      </varlistentry>
341
 
 
342
 
      <varlistentry>
343
 
        <term><option>--extended-timeout
344
 
        <replaceable>TIME</replaceable></option></term>
345
 
        <listitem>
346
 
          <para>
347
 
            Set the <varname>extended_timeout</varname> option of the
348
 
            specified client(s); see <citerefentry><refentrytitle
349
 
            >mandos-clients.conf</refentrytitle><manvolnum
350
 
            >5</manvolnum></citerefentry>.
351
 
          </para>
352
 
        </listitem>
353
 
      </varlistentry>
354
 
      
355
 
      <varlistentry>
356
 
        <term><option>--interval
357
 
        <replaceable>TIME</replaceable></option></term>
358
 
        <term><option>-i
359
 
        <replaceable>TIME</replaceable></option></term>
360
 
        <listitem>
361
 
          <para>
362
 
            Set the <varname>interval</varname> option of the
363
 
            specified client(s); see <citerefentry><refentrytitle
364
 
            >mandos-clients.conf</refentrytitle><manvolnum
365
 
            >5</manvolnum></citerefentry>.
366
 
          </para>
367
 
        </listitem>
368
 
      </varlistentry>
369
 
      
370
 
      <varlistentry>
371
 
        <term><option>--approve-by-default</option></term>
372
 
        <term><option>--deny-by-default</option></term>
373
 
        <listitem>
374
 
          <para>
375
 
            Set the <varname>approved_by_default</varname> option of
376
 
            the specified client(s) to <literal>True</literal> or
377
 
            <literal>False</literal>, respectively; see
378
 
            <citerefentry><refentrytitle
379
 
            >mandos-clients.conf</refentrytitle><manvolnum
380
 
            >5</manvolnum></citerefentry>.
381
 
          </para>
382
 
        </listitem>
383
 
      </varlistentry>
384
 
      
385
 
      <varlistentry>
386
 
        <term><option>--approval-delay
387
 
        <replaceable>TIME</replaceable></option></term>
388
 
        <listitem>
389
 
          <para>
390
 
            Set the <varname>approval_delay</varname> option of the
391
 
            specified client(s); see <citerefentry><refentrytitle
392
 
            >mandos-clients.conf</refentrytitle><manvolnum
393
 
            >5</manvolnum></citerefentry>.
394
 
          </para>
395
 
        </listitem>
396
 
      </varlistentry>
397
 
      
398
 
      <varlistentry>
399
 
        <term><option>--approval-duration
400
 
        <replaceable>TIME</replaceable></option></term>
401
 
        <listitem>
402
 
          <para>
403
 
            Set the <varname>approval_duration</varname> option of the
404
 
            specified client(s); see <citerefentry><refentrytitle
405
 
            >mandos-clients.conf</refentrytitle><manvolnum
406
 
            >5</manvolnum></citerefentry>.
407
 
          </para>
408
 
        </listitem>
409
 
      </varlistentry>
410
 
      
411
 
      <varlistentry>
412
 
        <term><option>--host
413
 
        <replaceable>STRING</replaceable></option></term>
414
 
        <term><option>-H
415
 
        <replaceable>STRING</replaceable></option></term>
416
 
        <listitem>
417
 
          <para>
418
 
            Set the <varname>host</varname> option of the specified
419
 
            client(s); see <citerefentry><refentrytitle
420
 
            >mandos-clients.conf</refentrytitle><manvolnum
421
 
            >5</manvolnum></citerefentry>.
422
 
          </para>
423
 
        </listitem>
424
 
      </varlistentry>
425
 
      
426
 
      <varlistentry>
427
 
        <term><option>--secret
428
 
        <replaceable>FILENAME</replaceable></option></term>
429
 
        <term><option>-s
430
 
        <replaceable>FILENAME</replaceable></option></term>
431
 
        <listitem>
432
 
          <para>
433
 
            Set the <varname>secfile</varname> option of the specified
434
 
            client(s); see <citerefentry><refentrytitle
435
 
            >mandos-clients.conf</refentrytitle><manvolnum
436
 
            >5</manvolnum></citerefentry>.
437
 
          </para>
438
 
        </listitem>
439
 
      </varlistentry>
440
 
      
441
 
      <varlistentry>
442
 
        <term><option>--approve</option></term>
443
 
        <term><option>-A</option></term>
444
 
        <listitem>
445
 
          <para>
446
 
            Approve client(s) if currently waiting for approval.
447
 
          </para>
448
 
        </listitem>
449
 
      </varlistentry>
450
 
      
451
 
      <varlistentry>
452
 
        <term><option>--deny</option></term>
453
 
        <term><option>-D</option></term>
454
 
        <listitem>
455
 
          <para>
456
 
            Deny client(s) if currently waiting for approval.
457
 
          </para>
458
 
        </listitem>
459
 
      </varlistentry>
460
 
      
461
 
      <varlistentry>
462
 
        <term><option>--all</option></term>
463
 
        <term><option>-a</option></term>
464
 
        <listitem>
465
 
          <para>
466
 
            Make the client-modifying options modify <emphasis
467
 
            >all</emphasis> clients.
468
 
          </para>
469
 
        </listitem>
470
 
      </varlistentry>
471
 
      
472
 
      <varlistentry>
473
 
        <term><option>--verbose</option></term>
474
 
        <term><option>-v</option></term>
475
 
        <listitem>
476
 
          <para>
477
 
            Show all client settings, not just a subset.
478
 
          </para>
479
 
        </listitem>
480
 
      </varlistentry>
481
 
      
482
 
      <varlistentry>
483
 
        <term><option>--dump-json</option></term>
484
 
        <term><option>-j</option></term>
485
 
        <listitem>
486
 
          <para>
487
 
            Dump client settings as JSON to standard output.
488
 
          </para>
489
 
        </listitem>
490
 
      </varlistentry>
491
 
      
492
 
      <varlistentry>
493
 
        <term><option>--is-enabled</option></term>
494
 
        <term><option>-V</option></term>
495
 
        <listitem>
496
 
          <para>
497
 
            Check if a single client is enabled or not, and exit with
498
 
            a successful exit status only if the client is enabled.
499
 
          </para>
500
 
        </listitem>
501
 
      </varlistentry>
502
 
      
503
 
      <varlistentry>
504
 
        <term><option>--check</option></term>
505
 
        <listitem>
506
 
          <para>
507
 
            Run self-tests.  This includes any unit tests, etc.
508
 
          </para>
509
 
        </listitem>
510
 
      </varlistentry>
511
 
      
512
 
    </variablelist>
513
 
  </refsect1>
514
 
  
515
 
  <refsect1 id="overview">
516
 
    <title>OVERVIEW</title>
517
 
    <xi:include href="overview.xml"/>
518
 
    <para>
519
 
      This program is a small utility to generate new OpenPGP keys for
520
 
      new Mandos clients, and to generate sections for inclusion in
521
 
      <filename>clients.conf</filename> on the server.
522
 
    </para>
523
 
  </refsect1>
524
 
  
525
 
  <refsect1 id="exit_status">
526
 
    <title>EXIT STATUS</title>
527
 
    <para>
528
 
      If the <option>--is-enabled</option> option is used, the exit
529
 
      status will be 0 only if the specified client is enabled.
530
 
    </para>
531
 
  </refsect1>
532
 
  
533
 
  <refsect1 id="bugs">
534
 
    <title>BUGS</title>
535
 
    <xi:include href="bugs.xml"/>
536
 
  </refsect1>
537
 
  
538
 
  <refsect1 id="example">
539
 
    <title>EXAMPLE</title>
540
 
    <informalexample>
541
 
      <para>
542
 
        To list all clients:
543
 
      </para>
544
 
      <para>
545
 
        <userinput>&COMMANDNAME;</userinput>
546
 
      </para>
547
 
    </informalexample>
548
 
    
549
 
    <informalexample>
550
 
      <para>
551
 
        To list <emphasis>all</emphasis> settings for the clients
552
 
        named <quote>foo1.example.org</quote> and <quote
553
 
        >foo2.example.org</quote>:
554
 
      </para>
555
 
      <para>
556
 
 
557
 
<!-- do not wrap this line -->
558
 
<userinput>&COMMANDNAME; --verbose foo1.example.org foo2.example.org</userinput>
559
 
 
560
 
      </para>
561
 
    </informalexample>
562
 
    
563
 
    <informalexample>
564
 
      <para>
565
 
        To enable all clients:
566
 
      </para>
567
 
      <para>
568
 
        <userinput>&COMMANDNAME; --enable --all</userinput>
569
 
      </para>
570
 
    </informalexample>
571
 
    
572
 
    <informalexample>
573
 
      <para>
574
 
        To change timeout and interval value for the clients
575
 
        named <quote>foo1.example.org</quote> and <quote
576
 
        >foo2.example.org</quote>:
577
 
      </para>
578
 
      <para>
579
 
 
580
 
<!-- do not wrap this line -->
581
 
<userinput>&COMMANDNAME; --timeout="5m" --interval="1m" foo1.example.org foo2.example.org</userinput>
582
 
 
583
 
      </para>
584
 
    </informalexample>
585
 
    
586
 
    <informalexample>
587
 
      <para>
588
 
        To approve all clients currently waiting for it:
589
 
      </para>
590
 
      <para>
591
 
        <userinput>&COMMANDNAME; --approve --all</userinput>
592
 
      </para>
593
 
    </informalexample>
594
 
  </refsect1>
595
 
  
596
 
  <refsect1 id="security">
597
 
    <title>SECURITY</title>
598
 
    <para>
599
 
      This program must be permitted to access the Mandos server via
600
 
      the D-Bus interface.  This normally requires the root user, but
601
 
      could be configured otherwise by reconfiguring the D-Bus server.
602
 
    </para>
603
 
  </refsect1>
604
 
  
605
 
  <refsect1 id="see_also">
606
 
    <title>SEE ALSO</title>
607
 
    <para>
608
 
      <citerefentry><refentrytitle>intro</refentrytitle>
609
 
      <manvolnum>8mandos</manvolnum></citerefentry>,
610
 
      <citerefentry><refentrytitle>mandos</refentrytitle>
611
 
      <manvolnum>8</manvolnum></citerefentry>,
612
 
      <citerefentry><refentrytitle>mandos-clients.conf</refentrytitle>
613
 
      <manvolnum>5</manvolnum></citerefentry>,
614
 
      <citerefentry><refentrytitle>mandos-monitor</refentrytitle>
615
 
      <manvolnum>8</manvolnum></citerefentry>
616
 
    </para>
617
 
  </refsect1>
618
 
  
619
 
</refentry>
620
 
<!-- Local Variables: -->
621
 
<!-- time-stamp-start: "<!ENTITY TIMESTAMP [\"']" -->
622
 
<!-- time-stamp-end: "[\"']>" -->
623
 
<!-- time-stamp-format: "%:y-%02m-%02d" -->
624
 
<!-- End: -->