306
|
1 <!doctype book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" []>
|
307
|
2
|
|
3 <!-- Note: I used the format of the GTK+ FAQ to build this document -->
|
|
4 <!-- Please let me know if there are other ways to improve upon this -->
|
|
5
|
306
|
6 <book>
|
|
7
|
|
8 <bookinfo>
|
853
|
9 <date>$Date: 2006/11/17 02:45:04 $</date>
|
306
|
10 <title>gFTP FAQ</title>
|
|
11 <authorgroup>
|
|
12 <author>
|
|
13 <firstname>Brian</firstname>
|
|
14 <surname>Masney</surname>
|
|
15 </author>
|
|
16 </authorgroup>
|
307
|
17
|
|
18 <abstract>
|
|
19 <para>This document is intended to answer questions that are
|
|
20 likely to be frequently asked by users of gFTP.</para>
|
|
21 </abstract>
|
|
22
|
306
|
23 </bookinfo>
|
|
24
|
|
25 <toc></toc>
|
|
26
|
|
27 <!-- ***************************************************************** -->
|
307
|
28
|
306
|
29 <chapter>
|
|
30 <title>General Information</title>
|
|
31
|
|
32 <!-- ----------------------------------------------------------------- -->
|
|
33
|
|
34 <sect1>
|
307
|
35 <title>What are the requirements to run gFTP?</title>
|
|
36
|
|
37 <para>
|
|
38 <itemizedlist>
|
|
39 <listitem><simpara>
|
|
40 GTK+ 1.2.3 or higher. GTK+/Glib is included with most systems now. If you
|
|
41 don't have it installed, you may want to check to see if your vendor has a
|
|
42 package available. If not, you can download the latest version of GTK+ and
|
|
43 Glib from
|
|
44 <ulink url="ftp://ftp.gtk.org/pub/gtk">ftp://ftp.gtk.org/pub/gtk</ulink>.
|
430
|
45 gFTP will work with either version 1.2 or 2.x of GTK+, but I would recommend
|
|
46 using GTK+ 2.x.
|
307
|
47 </simpara></listitem>
|
|
48 <listitem><simpara>
|
|
49 pthread libraries. Most systems already satisfy this requirement. If you are
|
|
50 on a platform other than Linux, you may want to take a look at the FSU
|
|
51 Pthreads library at <ulink url="http://www.informatik.hu-berlin.de/~mueller/pthreads">http://www.informatik.hu-berlin.de/~mueller/pthreads</ulink>.
|
|
52 </simpara></listitem>
|
|
53 </itemizedlist>
|
|
54 </para>
|
|
55
|
|
56 </sect1>
|
|
57
|
|
58 <!-- ----------------------------------------------------------------- -->
|
|
59
|
|
60 <sect1>
|
|
61 <title>How do I install gFTP?</title>
|
|
62
|
|
63 <para>
|
|
64 <itemizedlist>
|
|
65
|
|
66 <listitem><simpara>
|
|
67 If you do not want to compile gFTP yourself, you can check my webpage. I have
|
|
68 DEBs for Debian and RPMs for RedHat available. If you're looking for Solaris
|
|
69 binaries, check out <ulink url="http://www.sunfreeware.com">http://www.sunfreeware.com</ulink>.
|
|
70 </simpara></listitem>
|
|
71
|
|
72 <listitem><simpara>
|
|
73 If you are compiling gFTP yourself, extract the files from the distribution
|
|
74 with tar -zxvf gftp-<version>.tar.gz
|
|
75 </simpara></listitem>
|
|
76
|
|
77 <listitem><simpara>
|
|
78 Go to the gftp-<version> directory and type
|
|
79 </simpara>
|
|
80
|
|
81 <literallayout>
|
|
82 <literal>./configure</literal>
|
|
83 <literal>make</literal>
|
|
84 </literallayout>
|
|
85
|
|
86 <simpara>
|
|
87 The configure script will generate a Makefile for your machine, and make
|
|
88 will compile a binary for your machine. By default, when you run
|
|
89 configure, it will install gFTP with the prefix /usr/local, so the gFTP
|
|
90 binary will be /usr/local/bin/gftp. You can change this by typing
|
|
91 configure --prefix=/usr, and it will then install the gFTP binary to
|
|
92 /usr/bin/gftp.
|
|
93 </simpara>
|
|
94 </listitem>
|
|
95
|
|
96 <listitem><simpara>
|
|
97 If the compile suceeds without any errors, you can type make install to
|
|
98 install the binary. This will also copy some necessary
|
|
99 files to <install prefix>/share/gftp. If you do not have root on your
|
|
100 machine to install these files, copy the contents of the docs/sample.gftp/
|
|
101 directory to ~/.gftp.
|
|
102 </simpara></listitem>
|
|
103 <listitem><simpara>
|
|
104 You may want to glance at the USERS-GUIDE file that comes with this
|
|
105 distribution. It contains a little bit of information about how to use it.
|
|
106 </simpara></listitem>
|
|
107
|
|
108 </itemizedlist>
|
|
109 </para>
|
|
110
|
|
111 </sect1>
|
|
112
|
|
113 <!-- ----------------------------------------------------------------- -->
|
|
114
|
|
115 <sect1>
|
306
|
116 <title>What systems is gFTP known to run on?</title>
|
|
117
|
307
|
118 <para>I develop gFTP on a Debian GNU/Linux machine. It should run under
|
|
119 any other Linux distributions. Here is a list of other platforms I have
|
|
120 received successful compile reports:</para>
|
306
|
121
|
|
122 <itemizedlist>
|
|
123 <listitem><simpara>FreeBSD/NetBSD/OpenBSD/BSDI</simpara></listitem>
|
|
124 <listitem><simpara>Solaris</simpara></listitem>
|
|
125 <listitem><simpara>IRIX</simpara></listitem>
|
|
126 <listitem><simpara>Digital UNIX</simpara></listitem>
|
|
127 <listitem><simpara>HP/UX 11</simpara></listitem>
|
|
128 </itemizedlist>
|
|
129
|
|
130 <para>If gFTP compiles and runs on a platform not listed here, please email me
|
|
131 about it and I'll add it to this list. If you are having problems compiling
|
|
132 GTK+ or gFTP on another platform, try using GNU make instead of your vendor
|
|
133 supplied make.</para>
|
|
134 </sect1>
|
|
135
|
|
136 <!-- ----------------------------------------------------------------- -->
|
|
137
|
|
138 <sect1>
|
891
|
139 <title>Does gFTP have a SVN repository?</title>
|
307
|
140
|
891
|
141 <para>gFTP is stored in GNOME's SVN repository. For instructions on how to
|
|
142 setup your subversion client, visit the website
|
|
143 <ulink url="http://developer.gnome.org/tools/svn.html">http://developer.gnome.org/tools/svn.html</ulink>.
|
|
144 In a nutshell, you will need to run the following command to download the latest code:
|
|
145 </para>
|
307
|
146
|
|
147 <para>
|
|
148
|
|
149 <literallayout>
|
891
|
150 <literal>svn co http://svn.gnome.org/svn/gftp/trunk gftp</literal>
|
307
|
151 </literallayout>
|
306
|
152
|
307
|
153 </para>
|
306
|
154
|
307
|
155 <para>
|
891
|
156 To compile the SVN code, you will need <emphasis>autoconf</emphasis>,
|
|
157 <emphasis>automake</emphasis> and <emphasis>gettext</emphasis>
|
|
158 installed on your system. Once you have those packages installed, run
|
|
159 the following series of commands:
|
|
160 </para>
|
|
161
|
|
162 <itemizedlist>
|
|
163 <listitem><simpara>Run <emphasis>./autogen.sh</emphasis> to generate the configure scripts.</simpara></listitem>
|
|
164 <listitem><simpara>If that is successful, run <emphasis>./configure</emphasis> to generate the Makefiles. By default, the binaries will be installed in /usr/local/bin. You can change the install location by passing the <emphasis>--prefix</emphasis> argument to configure. For example, let's say you want to install the binaries in /usr/bin. Run <emphasis>configure --prefix=/usr</emphasis>.</simpara></listitem>
|
|
165 <listitem><simpara>If that is successful, run <emphasis>make</emphasis> to build the source.</simpara></listitem>
|
|
166 <listitem><simpara>Optional: If that is successful, run <emphasis>make install</emphasis> to install the binary on your computer.</simpara></listitem>
|
|
167 </itemizedlist>
|
306
|
168
|
307
|
169 </sect1>
|
306
|
170
|
307
|
171 <!-- ----------------------------------------------------------------- -->
|
|
172
|
|
173 <sect1>
|
|
174 <title>How do I report bugs in gFTP?</title>
|
306
|
175
|
307
|
176 <para>If you find ANY bugs in gFTP, please check to make sure that you are using
|
|
177 the latest version of gFTP. If you are, please submit all bug reports to
|
|
178 GNOME's Bugzilla. When sending in bug reports, please try to be as
|
|
179 descriptive as possible. Send me what OS/version you are running, what
|
|
180 compiler you are compiling with, the output of <emphasis>gftp --info</emphasis>
|
|
181 and any other important information. If you get gFTP to crash, it would be very
|
|
182 helpful if you could send me a backtrace. If you do not know how to do a
|
|
183 backtrace, download the source code from my website. Edit the Makefile, and
|
|
184 make sure that -g appears in the CFLAGS variable. Then recompile gFTP, but do
|
|
185 NOT run make install because it will install a stripped binary in $PREFIX/bin.
|
|
186 Then type gdb ./gftp. Once you have a (gdb) prompt, type r. When gFTP crashes,
|
|
187 go back to that terminal window, and type bt, and put that output in the bug
|
|
188 that you file with bugzilla.</para>
|
306
|
189
|
307
|
190 <para>I also have a gftp-users mailinglist setup. I have a link to the archives
|
|
191 on my main webpage. If it is strictly a bug report, please submit it to
|
|
192 Bugzilla instead of the mailinglist. Bugs that are submitted to bugzilla are
|
|
193 much easier for me to track.</para>
|
|
194
|
|
195 <para>Also, if you do not get a response back from me immediately, that is not
|
|
196 uncommon. I usually stay very busy and I don't get to work on gFTP all of the
|
|
197 time.</para>
|
306
|
198
|
|
199 </sect1>
|
|
200
|
|
201 <!-- ----------------------------------------------------------------- -->
|
|
202
|
|
203 <sect1>
|
|
204 <title>How do I force running the text or gtk+ version of gFTP?</title>
|
|
205
|
|
206 <para>
|
|
207 To run the text port, you can type gftp-text or to run the gtk+ port,
|
|
208 you can run the gftp-gtk. The gftp command is just a shell script that checks
|
|
209 if your DISPLAY variable is set, and if so it'll run the appropriate version.
|
|
210 </para>
|
|
211
|
|
212 </sect1>
|
|
213
|
|
214 <!-- ----------------------------------------------------------------- -->
|
|
215
|
|
216 <sect1>
|
|
217 <title>Is there a way for gFTP to download a bunch of files/directories and
|
|
218 then exit when it's completed?</title>
|
|
219
|
|
220 <para>Yes, the text port of gFTP supports this well. You can type:</para>
|
|
221
|
|
222 <para><literallayout><literal>
|
|
223 gftp-text -d ftp://ftp.somesite.com/someplace
|
|
224 </literal></literallayout></para>
|
|
225
|
|
226 <para>
|
|
227 If someplace is a directory, it'll automatically download all of its
|
|
228 subdirectories as well. If you want to transfer a file through ssh instead
|
|
229 of ftp, just change the <emphasis>ftp://</emphasis> to
|
|
230 <emphasis>ssh://</emphasis>.
|
|
231 </para>
|
|
232
|
|
233 </sect1>
|
|
234
|
|
235 <!-- ----------------------------------------------------------------- -->
|
|
236
|
|
237 <sect1>
|
|
238 <title>In the GTK+ version of gFTP, do I have to enter a port, username and
|
|
239 password to connect to a ftp server?</title>
|
|
240
|
|
241 <para>No you don't. If you leave the port blank, it'll default to the default
|
|
242 port for the protocol you selected (port 21 for FTP). If you leave the
|
|
243 username blank, it will default to logging in as anonymous.</para>
|
|
244
|
|
245 </sect1>
|
|
246
|
|
247 <!-- ----------------------------------------------------------------- -->
|
|
248
|
|
249 <sect1>
|
307
|
250 <title>Where does gFTP store it's options?</title>
|
306
|
251
|
307
|
252 <para>gFTP will automatically create a ~/.gftp directory when it is first run.
|
310
|
253 Your config file is <emphasis>~/.gftp/gftprc</emphasis>, and this is where
|
|
254 all of gFTP's settings are stored. The config file is well commented, so take
|
|
255 a glance at it and see if there is anything you want to change. Your bookmarks
|
|
256 are stored in the file <emphasis>~/.gftp/bookmarks</emphasis>.</para>
|
|
257
|
|
258 <para>Every time gFTP is run, it will log the contents of the log window
|
|
259 to <emphasis>~/.gftp/gftp.log</emphasis>. The contents of this file will be
|
|
260 automatically purged this file when gFTP is started up.</para>
|
|
261
|
|
262 </sect1>
|
|
263
|
|
264 <!-- ----------------------------------------------------------------- -->
|
|
265
|
|
266 <sect1>
|
|
267 <title>Why aren't the file sizes comma separated?</title>
|
|
268
|
|
269 <para>
|
|
270 If gFTP was compiled with _GNU_SOURCE defined (run
|
|
271 <emphasis>gftp --info</emphasis>), then gFTP will use the printf() modifier
|
|
272 %'ld. If your <emphasis>LANG</emphasis> environment is set to C, then no
|
|
273 commas will be inserted. If you are in the US, change your
|
|
274 <emphasis>LANG</emphasis> environment variable to <emphasis>en_US</emphasis>.
|
|
275 </para>
|
306
|
276
|
|
277 </sect1>
|
|
278
|
|
279 <!-- ----------------------------------------------------------------- -->
|
|
280
|
556
|
281 <sect1>
|
|
282 <title>When using an external editor, gFTP does not detect changes that are being made to the file.</title>
|
|
283
|
|
284 <para>
|
|
285 Look at the man page for the editor you are using and see if there is a
|
|
286 command line argument to have the editor run in the foreground (it won't
|
|
287 fork to detact from the current terminal). If you are using one of the
|
567
|
288 graphical VIM editors, you can add the <emphasis>--nofork</emphasis> argument.
|
556
|
289 </para>
|
|
290
|
|
291 </sect1>
|
|
292
|
|
293 <!-- ----------------------------------------------------------------- -->
|
|
294
|
597
|
295 <sect1>
|
|
296 <title>How can I increase the size of the fonts in gFTP?</title>
|
|
297
|
|
298 <para>
|
|
299 You can use the gnome-font-properties program to change the fonts used by
|
|
300 all GTK+ 2.x applications.
|
|
301 </para>
|
|
302
|
|
303 </sect1>
|
|
304
|
|
305 <!-- ----------------------------------------------------------------- -->
|
|
306
|
853
|
307 <sect1>
|
|
308 <title>I can't transfer certain file types in binary mode using the FTP protocol.</title>
|
|
309
|
|
310 <para>
|
|
311 Edit your ~/.gftp/gftprc file and look at the ext= lines towards the bottom of the file. These lines control what icon is used for each file type. It also controls what mode is used for the file transfer. For example, to transfer all HTML files as binary, change the following two lines:
|
|
312 </para>
|
|
313
|
|
314 <para><literallayout>
|
|
315 <literal>ext=.htm:world.xpm:A:</literal>
|
|
316 <literal>ext=.html:world.xpm:A:</literal>
|
|
317 </literallayout></para>
|
|
318
|
|
319 <para>
|
|
320 to the following:
|
|
321 </para>
|
|
322
|
|
323 <para><literallayout>
|
|
324 <literal>ext=.htm:world.xpm:B:</literal>
|
|
325 <literal>ext=.html:world.xpm:B:</literal>
|
|
326 </literallayout></para>
|
|
327
|
|
328 </sect1>
|
|
329
|
|
330 <!-- ----------------------------------------------------------------- -->
|
|
331
|
307
|
332 </chapter>
|
|
333
|
|
334 <!-- ***************************************************************** -->
|
|
335
|
|
336 <chapter>
|
|
337 <title>FTP Protocol</title>
|
|
338
|
306
|
339 <sect1>
|
|
340 <title>When gFTP tries to get the remote directory listing, the remote server
|
|
341 complains about either the -a or -L argument to LIST.</title>
|
|
342
|
|
343 <para>If the server is complaining about the -L option, go under
|
|
344 <emphasis>FTP->Options->FTP</emphasis> and disable resolve remote symlinks.
|
|
345 If it is complaining about the -a option, go to
|
|
346 <emphasis>FTP->Options->General</emphasis> and disable show hidden
|
|
347 files.</para>
|
|
348
|
|
349 </sect1>
|
|
350
|
|
351 <!-- ----------------------------------------------------------------- -->
|
|
352
|
|
353 <sect1>
|
|
354 <title>When gFTP tries to get the remote directory listing, I receive the
|
|
355 error: <emphasis>Cannot create a data connection: Connection
|
|
356 refused</emphasis></title>
|
|
357
|
|
358 <para>Go under <emphasis>FTP->Options->FTP</emphasis> and turn off passive
|
|
359 file transfers. Instead of sending the PASV command to open up the data
|
|
360 connection on the server side, the data connection will be opened up on the
|
|
361 client side, and the PORT command will be sent to the server instead.</para>
|
|
362
|
|
363 </sect1>
|
|
364
|
|
365 <!-- ----------------------------------------------------------------- -->
|
|
366
|
307
|
367 </chapter>
|
|
368
|
|
369 <!-- ***************************************************************** -->
|
|
370
|
|
371 <chapter>
|
|
372 <title>HTTP Protocol</title>
|
|
373
|
|
374 <sect1>
|
|
375 <title>How do I set up my HTTP Proxy server?</title>
|
|
376
|
|
377 <para>Go under <emphasis>FTP->Options</emphasis> and hit the FTP tab. Enter
|
|
378 HTTP as the proxy type and fill in your proxy server info on that screen.
|
|
379 Then hit the HTTP tab and enter your same proxy server info there.</para>
|
|
380
|
|
381 </sect1>
|
|
382
|
|
383 <!-- ----------------------------------------------------------------- -->
|
|
384
|
|
385 </chapter>
|
|
386
|
|
387 <!-- ***************************************************************** -->
|
|
388
|
|
389 <chapter>
|
554
|
390 <title>SSH Protocol</title>
|
|
391
|
|
392 <sect1>
|
|
393 <title>gFTP will not log into the remote SSH server when using a non-English
|
|
394 locale.</title>
|
|
395
|
567
|
396 <para>Note: This answer only applies to versions of gFTP >= 2.0.18</para>
|
|
397
|
554
|
398 <para>
|
|
399 You will need to download the source code to gFTP and edit the appropriate
|
|
400 po/<lang>.po file. You will need to make sure the following strings
|
|
401 are translated exactly as they appear in the SSH client.
|
|
402 </para>
|
|
403
|
|
404 <itemizedlist>
|
|
405 <listitem><simpara>Enter passphrase for RSA key</simpara></listitem>
|
|
406 <listitem><simpara>Enter passphrase for key</simpara></listitem>
|
|
407 <listitem><simpara>Password</simpara></listitem>
|
|
408 <listitem><simpara>password</simpara></listitem>
|
|
409 </itemizedlist>
|
|
410
|
|
411 <para>
|
891
|
412 Please upload the changes to the PO file to GNOME's SVN or email me the
|
554
|
413 updated PO file. If you email me the updates, please make sure that you
|
891
|
414 grab the latest PO file from SVN.
|
554
|
415 </para>
|
|
416
|
|
417 </sect1>
|
|
418
|
|
419 <!-- ----------------------------------------------------------------- -->
|
|
420
|
|
421 <sect1>
|
|
422 <title>I'm having problems getting SSH2 transfers to work. I keep getting the
|
567
|
423 error: <emphasis>Error: Message size XXXXXXXX too big from server</emphasis>
|
554
|
424 </title>
|
|
425
|
567
|
426 <para>Note: This answer only applies to versions of gFTP <= 2.0.17</para>
|
|
427
|
554
|
428 <para>What probably is the problem, sftp-server isn't in your path on the
|
|
429 remote server. When you try to connect to the remote server, you'll see the
|
|
430 command gFTP is trying to run, and it'll look something like:</para>
|
|
431
|
|
432 <para><literallayout><literal>ssh -e none -l username hostname "echo -n xsftp ; sftp-server"</literal></literallayout</para>
|
|
433
|
|
434 <para>Try running this command. If you get a prompt asking:</para>
|
|
435
|
|
436 <para><literallayout>
|
|
437 <literal>The authenticity of host 'hostname (###.###.###.###)' can't be established.</literal>
|
|
438 <literal>RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.</literal>
|
|
439 <literal>Are you sure you want to continue connecting (yes/no)?</literal>
|
|
440 </literallayout></para>
|
|
441
|
|
442 <para>Tell it yes. gFTP won't even try to answer this question for you at the
|
|
443 moment. Then, if you get the following output:</para>
|
|
444
|
|
445 <para><literallayout>
|
|
446 <literal>Enter passphrase for key '/home/brian/.ssh/id_dsa':</literal>
|
|
447 <literal>xsftp</literal>
|
|
448 <literal>bash: sftp-server: command not found</literal>
|
|
449 </literallayout></para>
|
|
450
|
|
451 <para>You'll have to set the path to the sftp-server program. Alternatively
|
|
452 you could go under FTP->Options->SSH and enable Use sftp subsys. If you enable
|
|
453 this, then you don't have to know the remote path to your sftp executable.
|
|
454 But if you enable this, gFTP won't be able to send your password over to
|
|
455 the ssh client. So if you're not using ssh-agent, then ssh will spawn the
|
|
456 ssh-askpass program to grab your password.</para>
|
|
457
|
|
458 </sect1>
|
|
459
|
|
460 <!-- ----------------------------------------------------------------- -->
|
|
461
|
|
462 <sect1>
|
567
|
463 <title>What is the difference between the SSH and SSH2 protocols?</title>
|
|
464
|
|
465 <para>Note: This answer only applies to versions of gFTP <= 2.0.15</para>
|
554
|
466
|
|
467 <para>The SSH protocol uses sftp >= 0.7 from
|
|
468 <ulink url="http://www.xbill.org/sftp">http://www.xbill.org/sftp</ulink>.
|
|
469 SSH2 uses the native file transfers found in the commercial SSH2 and in later
|
|
470 versions of OpenSSH. The SSH2 protocol uses the sftp-server executable on
|
|
471 the remote host and the SSH protocol uses the sftpserv executable.</para>
|
|
472
|
|
473 <para>Note: Due to confusion, the origional SSH protocol was removed in gFTP
|
|
474 2.0.15. It is not shown in gFTP 2.0.14, but there is a config option called
|
|
475 enable_old_ssh to enable this protocol.</para>
|
|
476
|
|
477 </sect1>
|
|
478
|
|
479 <!-- ----------------------------------------------------------------- -->
|
|
480
|
|
481 </chapter>
|
|
482
|
|
483 <!-- ***************************************************************** -->
|
|
484
|
|
485 <chapter>
|
430
|
486 <title>SSL Issues</title>
|
|
487
|
|
488 <sect1>
|
|
489 <title>When using the FTPS or HTTPS protocol, gFTP cannot connect if the remote
|
|
490 server uses a self signed certificate.</title>
|
|
491
|
|
492 <para>You must add the public key of your self signed CA to your OpenSSL
|
|
493 certs directory. On my Debian box, the OpenSSL certs are installed in
|
|
494 /usr/lib/ssl/certs.</para>
|
|
495
|
|
496 </sect1>
|
|
497
|
|
498 </chapter>
|
|
499
|
|
500 <!-- ***************************************************************** -->
|
|
501
|
|
502 <chapter>
|
307
|
503 <title>Compiling Problems</title>
|
|
504
|
|
505 <sect1>
|
|
506 <title>When I try to compile gFTP, I see undefined symbol
|
|
507 <emphasis>libintl_gettext</emphasis>. Or, another error is
|
|
508 <emphasis>undefined symbol LC_ALL.</emphasis></title>
|
306
|
509
|
|
510 <para>Try running
|
|
511
|
|
512 <para><literallayout><literal>
|
|
513 make distclean ; configure --with-included-gettext.
|
|
514 </literal></literallayout></para>
|
|
515
|
|
516 <para>You could alternatively pass
|
|
517
|
|
518 <literallayout><literal>
|
|
519 --disable-nls
|
|
520 </literal></literallayout>
|
|
521
|
|
522 to configure, and internationalization support will not be compiled in.</para>
|
|
523
|
|
524 </sect1>
|
|
525
|
307
|
526 </chapter>
|
|
527
|
306
|
528 </book>
|