Mercurial > hg > orthanc-book
annotate Sphinx/source/faq/troubleshooting.rst @ 1113:a588960a72e5 default tip
spelling
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Mon, 28 Oct 2024 09:23:08 +0100 |
parents | 2cc02026ecbf |
children |
rev | line source |
---|---|
0 | 1 .. _troubleshooting: |
2 | |
3 Troubleshooting | |
4 =============== | |
5 | |
16 | 6 As a general rule, when you encounter an issue, always make sure that |
7 you use the `most recent version | |
358
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
8 <https://www.orthanc-server.com/download.php>`__ of Orthanc. |
16 | 9 |
984
46e2941b57dd
replace link to google users group by link to discourse
Alain Mazy <am@osimis.io>
parents:
903
diff
changeset
|
10 Also make a search on the `Orthanc Users discussion forum |
46e2941b57dd
replace link to google users group by link to discourse
Alain Mazy <am@osimis.io>
parents:
903
diff
changeset
|
11 <https://discourse.orthanc-server.org>`__, and make a |
16 | 12 search in the present Orthanc Book (there is a search field at the top |
13 of this page). Your issue might indeed have already been discussed in | |
14 the past or in the FAQ. | |
15 | |
108 | 16 Startup |
17 ------- | |
654 | 18 |
108 | 19 * If **Orthanc fails to start** with the error "**The TCP port of the DICOM |
20 server is privileged or already in use**", this means another software is | |
21 already using the port Orthanc is trying to use. Usually, this means | |
22 that an other instance of Orthanc is running. However, note that, by default, | |
23 Orthanc uses port 4242 which might also be used by other software like | |
24 a `Juniper VPN client <https://www.file.net/process/dsncservice.exe.html>`__. | |
25 To determine which other process is using the port: | |
26 | |
27 On Windows, you may use the `Resource Monitor <https://en.wikipedia.org/wiki/Resource_Monitor>`__. | |
28 In the `Network` tab, check the `Listening Ports`. | |
29 | |
30 On Linux, you may use this command line: ``sudo ss --tcp --listen --numeric --processes``. | |
31 | |
32 Starting with version 1.3.0, the check at Orthanc startup is more robust | |
33 (it also checks for UDP socket using the same port) and Orthanc 1.3.0 might | |
34 display error messages that where not displayed by previous versions. | |
16 | 35 |
754
1e6ead2a9901
troubleshooting web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
659
diff
changeset
|
36 * If Orthanc **does not start anymore after a hard shutdown** and if |
755 | 37 you use the :ref:`Orthanc Web viewer plugin <webviewer>`, this might |
754
1e6ead2a9901
troubleshooting web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
659
diff
changeset
|
38 reflect a corruption in the cache of the Web viewer. In such a case, |
1e6ead2a9901
troubleshooting web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
659
diff
changeset
|
39 it is safe to remove the folder that contains the cache. By default, |
1e6ead2a9901
troubleshooting web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
659
diff
changeset
|
40 this folder is called ``OrthancStorage/WebViewerCache/`` |
1e6ead2a9901
troubleshooting web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
659
diff
changeset
|
41 (cf. :ref:`configuration option <configuration>` ``CachePath`` in |
1e6ead2a9901
troubleshooting web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
659
diff
changeset
|
42 the ``WebViewer`` section). Of course, don't remove the folder |
1e6ead2a9901
troubleshooting web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
659
diff
changeset
|
43 ``OrthancStorage/``, as it contains the DICOM files. |
1e6ead2a9901
troubleshooting web viewer
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
659
diff
changeset
|
44 |
654 | 45 |
1050
2cc02026ecbf
link to troubleshooting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1004
diff
changeset
|
46 DICOM networking |
2cc02026ecbf
link to troubleshooting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1004
diff
changeset
|
47 ---------------- |
2cc02026ecbf
link to troubleshooting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1004
diff
changeset
|
48 |
2cc02026ecbf
link to troubleshooting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1004
diff
changeset
|
49 * The troubleshooting of DICOM network protocol is covered in a |
2cc02026ecbf
link to troubleshooting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1004
diff
changeset
|
50 :ref:`separate FAQ entry <dicom>`. |
2cc02026ecbf
link to troubleshooting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1004
diff
changeset
|
51 |
2cc02026ecbf
link to troubleshooting
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1004
diff
changeset
|
52 |
654 | 53 Validating DICOM files |
54 ---------------------- | |
55 | |
56 * Invalid DICOM files are often encountered in practice. Such files | |
57 can cause failures in Orthanc, or can prevent DICOM network | |
58 transfers. You can validate DICOM files by using the ``dciodvfy`` | |
59 command-line tool (cf. `its documentation | |
60 <http://dclunie.com/dicom3tools/dciodvfy.html>`__) from the | |
61 `dicom3tools <https://www.dclunie.com/dicom3tools.html>`__ project | |
62 by David Clunie. | |
63 | |
64 The core team of Orthanc will **only provide support for DICOM files | |
65 that are reported as valid** by ``dciodvfy``. | |
66 | |
656
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
67 * Side-note: The default transfer syntax of DICOM is Little Endian |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
68 Implicit (``1.2.840.10008.1.2``). For DICOM files that include |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
69 private tags, **we recommend using Little Endian Explicit** |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
70 (``1.2.840.10008.1.2.1``) instead Little Endian Implicit whenever |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
71 possible. Instead, in Little Endian Explicit, each DICOM tag has an |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
72 explicit declaration of its value representation (type), which |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
73 contrasts with Little Endian Implicit that necessitates to configure |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
74 the dictionary of private tags to be properly handled in some |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
75 operations (cf. the ``Dictionary`` :ref:`configuration option |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
76 <configuration>`). |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
77 |
654 | 78 |
16 | 79 Orthanc Explorer |
80 ---------------- | |
81 | |
0 | 82 * **I cannot login to Orthanc Explorer**: For security reasons, access |
83 to Orthanc from remote hosts is disabled by default. Only the | |
84 localhost is allowed to access Orthanc. You have to set the | |
85 ``RemoteAccessAllowed`` option in the :ref:`configuration file | |
86 <configuration>` to ``true``. It is then strongly advised to set | |
87 ``AuthenticationEnabled`` to ``true`` and to add a user to the | |
88 ``RegisteredUsers`` option, also in the configuration file. | |
16 | 89 |
90 | |
91 Performance issues | |
92 ------------------ | |
93 | |
41 | 94 * **Run-time debug assertions**: If performance is important to you, |
95 make sure to add the option ``-DCMAKE_BUILD_TYPE=Release`` when | |
96 invoking ``cmake`` while :ref:`compiling Orthanc | |
97 <compiling>`. Indeed, by default, `run-time debug assertions | |
98 <https://en.wikipedia.org/wiki/Assertion_(software_development)#Assertions_for_run-time_checking>`_ | |
99 are enabled, which can seriously impact performance, especially if | |
100 your Orthanc server stores a lot of DICOM instances. | |
101 | |
102 Note that the `official Docker images | |
103 <https://github.com/jodogne/OrthancDocker>`__ of Orthanc <= 1.0.0 | |
104 were not compiled in ``Release`` mode. As a consequence, to improve | |
105 performance, make sure to use either the mainline version of the | |
43 | 106 container (run ``docker pull jodogne/orthanc`` to ensure you use the |
107 most recent version of the mainline), or versions more recent than | |
122 | 108 ``jodogne/orthanc:1.1.0``. |
41 | 109 |
44 | 110 * **Orthanc slows down if storing many files**: The default database |
111 engine that is built in Orthanc is `SQLite | |
358
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
112 <https://www.sqlite.org/index.html>`__. As SQLite is above all a |
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
113 lightweight database engine, it is not designed to `store very large |
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
114 datasets <https://www.sqlite.org/whentouse.html>`__. If you are sure |
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
115 that you have properly disabled run-time debug assertions |
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
116 (cf. above), but still experience degradation in performance over |
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
117 time, you should seriously consider switching to a more scalable |
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
118 database engine. To this end, you can notably check out the |
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
119 :ref:`official PostgreSQL plugin <postgresql>`. |
44 | 120 |
121 As a rule of thumb, the performance of the default SQLite engine | |
122 built in Orthanc should run fine up to about 50,000 DICOM instances. | |
188 | 123 However, we have seen Orthanc running fairly well with more than 2 |
124 millions of instances. This limit really depends upon your | |
125 application, and upon the patterns of access to the database. | |
126 | |
186 | 127 Also check out the section about the :ref:`scalability`. |
44 | 128 |
129 | |
18 | 130 * **Orthanc Explorer is slow under Windows on the localhost**: |
131 | |
132 - Favor ``127.0.0.1`` instead of ``localhost`` when specifying the | |
133 network address of a server. Users have reported that this minor | |
134 change `can massively improve performance | |
135 <https://groups.google.com/d/msg/orthanc-users/tTe28zR0nGk/Lvs0STJLAgAJ>`__ | |
136 on Windows. Starting with Orthanc 1.0.1, the samples from the | |
137 source distribution have been adapted in this way. | |
138 | |
139 - As an alternative, you can disable IPv6 support. This is a | |
140 Windows-specific problem that is discussed `here | |
358
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
141 <https://superuser.com/questions/43823/google-chrome-is-slow-to-localhost>`__ |
18 | 142 and `here |
358
011b01ccf52d
fixing external hyperlinks
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
193
diff
changeset
|
143 <https://stackoverflow.com/questions/1726585/firefox-and-chrome-slow-on-localhost-known-fix-doesnt-work-on-windows-7>`__. |
16 | 144 |
42 | 145 * If you experience **slow DICOM transfers under GNU/Linux**, please |
146 read the `following bug report | |
16 | 147 <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=785400>`__. This |
42 | 148 issue does *not* affect all the versions of GNU/Linux. A patch to |
149 this issue is shipped with the Orthanc source code. In order to take | |
150 advantage of this patch, you need to statically link Orthanc against | |
151 DCMTK by using the ``-DUSE_SYSTEM_DCMTK=OFF`` flag `when invoking | |
152 CMake | |
991
1316bc62b5d5
migration to UCLouvain servers
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
984
diff
changeset
|
153 <https://orthanc.uclouvain.be/hg/orthanc/file/default/LinuxCompilation.txt>`__. |
16 | 154 |
654 | 155 |
156 Checking integrity of the storage area | |
157 -------------------------------------- | |
158 | |
159 .. highlight:: bash | |
193
99ba212989cc
Added entry related to MD5 integrity file checking
bgo-osimis
parents:
188
diff
changeset
|
160 |
654 | 161 Orthanc stores, in its database, an `MD5 hash |
162 <https://en.wikipedia.org/wiki/MD5>`_ of the files stored in its | |
656
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
163 :ref:`storage area <orthanc-storage>` (which notably includes the |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
164 DICOM files), provided that the ``StoreMD5ForAttachments`` |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
165 configuration option is set to ``true``. |
193
99ba212989cc
Added entry related to MD5 integrity file checking
bgo-osimis
parents:
188
diff
changeset
|
166 |
656
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
167 This MD5 corresponds to the hash of the files in memory, before they |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
168 are written to the disk by Orthanc. This information is safely stored |
55a93745e874
use little endian explicit instead of implicit
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
654
diff
changeset
|
169 inside the database for any incoming file attachment. |
193
99ba212989cc
Added entry related to MD5 integrity file checking
bgo-osimis
parents:
188
diff
changeset
|
170 |
654 | 171 It is possible to ask Orthanc to check by itself whether some attachment |
172 file was corrupted (i.e. to check whether the MD5 hash stored in the | |
173 database corresponds to the hash of the file on the disk):: | |
193
99ba212989cc
Added entry related to MD5 integrity file checking
bgo-osimis
parents:
188
diff
changeset
|
174 |
654 | 175 $ curl -X POST http://localhost:8042/instances/f257b066-f3992cc4-ca6a5e5f-3f8dcf3a-d4958939/attachments/dicom/verify-md5 -d '' |
193
99ba212989cc
Added entry related to MD5 integrity file checking
bgo-osimis
parents:
188
diff
changeset
|
176 |
654 | 177 This MD5 may be different if errors occurred while the DICOM file was |
178 initially written to the storage, or if the file contents were | |
179 tampered with afterwards. | |
180 | |
181 You can retrieve the stored MD5 hash of a DICOM instance as follows:: | |
182 | |
183 $ curl http://localhost:8042/instances/f257b066-f3992cc4-ca6a5e5f-3f8dcf3a-d4958939/attachments/dicom/md5 | |
16 | 184 |
185 Windows-specific issues | |
186 ----------------------- | |
187 | |
0 | 188 * Under Windows, Orthanc creates the "OrthancStorage" folder, and |
189 crashes with the error "**SQLite: Unable to open the database**": | |
190 Your directory name is either too long, or it contains special | |
191 characters. Please try and run Orthanc in a folder with a simple | |
192 name such as ``C:\Orthanc``. | |
55 | 193 |
903
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
194 * If you run Orthanc as a Windows service, and if you want to store |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
195 the Orthanc database (or the :ref:`Orthanc Web Viewer plugin |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
196 <webviewer>`) onto a shared network drive, you might encounter an |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
197 error ``boost::filesystem::status: The specified server cannot |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
198 perform the requested operation``. This probably means that the |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
199 ``SYSTEM`` account is not allowed to access the **mapped network |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
200 drive**. The easiest approach to this end consists in configuring |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
201 the Windows service to **run as user** (instead of the default |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
202 ``SYSTEM`` account), `as explained in this thread |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
203 <https://groups.google.com/g/orthanc-users/c/axrJfgA-Enk/m/Zeg3iUPOAwAJ>`__ |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
204 on the Orthanc Users forum (cf. `additional reference |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
205 <https://docs.microfocus.com/SM/9.61/Hybrid/Content/serversetup/tasks/configure_the_service_manager_service_to_run_as_a_windows_user.htm>`__ |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
206 elsewhere on Internet). |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
207 |
55 | 208 * If **Orthanc crashes when handling one large DICOM file**, this most |
1004
17bf6fafb884
added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
991
diff
changeset
|
209 probably indicates a memory allocation error. Indeed, some |
17bf6fafb884
added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
991
diff
changeset
|
210 precompiled `official Windows binaries |
17bf6fafb884
added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
991
diff
changeset
|
211 <https://orthanc.uclouvain.be/downloads/windows-32/orthanc/index.html>`__ |
17bf6fafb884
added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
991
diff
changeset
|
212 are compiled using a 32bit compiler. As a consequence, Orthanc only |
17bf6fafb884
added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
991
diff
changeset
|
213 has access to less than 4GB of RAM. If this is an important |
17bf6fafb884
added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
991
diff
changeset
|
214 limitation for you, precompiled command-line versions of Orthanc for |
17bf6fafb884
added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
991
diff
changeset
|
215 Windows 64bit are `also available |
17bf6fafb884
added links to uclouvain
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
991
diff
changeset
|
216 <https://orthanc.uclouvain.be/downloads/windows-64/orthanc/index.html>`__. |
659 | 217 |
218 * Avoid installing Orthanc, its database or its storage area in | |
219 folders whose names contain **spaces or special characters**. | |
902
7f30e05a3319
note about Windows service
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
755
diff
changeset
|
220 |
7f30e05a3319
note about Windows service
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
755
diff
changeset
|
221 * If you run Orthanc as a Windows service, with the Python plugin |
7f30e05a3319
note about Windows service
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
755
diff
changeset
|
222 enabled, you might have to change your ``PATH`` environment variable |
903
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
223 for Orthanc to **find the Python DLL**. The easiest approach to this |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
224 end consists in configuring the Windows service to **run as user** |
902
7f30e05a3319
note about Windows service
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
755
diff
changeset
|
225 (instead of the default ``SYSTEM`` account), `as explained in this |
7f30e05a3319
note about Windows service
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
755
diff
changeset
|
226 thread |
7f30e05a3319
note about Windows service
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
755
diff
changeset
|
227 <https://groups.google.com/g/orthanc-users/c/axrJfgA-Enk/m/Zeg3iUPOAwAJ>`__ |
903
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
228 on the Orthanc Users forum (cf. `additional reference |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
229 <https://docs.microfocus.com/SM/9.61/Hybrid/Content/serversetup/tasks/configure_the_service_manager_service_to_run_as_a_windows_user.htm>`__ |
25bbeb754420
note about shared network drives
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
902
diff
changeset
|
230 elsewhere on Internet). |