ADHOCw

Return to main ADHOCw menu

 


What is ADHOC ?

ADHOC is a free software developed by the Interferometry Group of Marseille's Observatory.

ADHOC is the main software developed and used by the Interferometric Group of Marseille's Observatory to reduce the 3D data coming from Photon Counting or CCD observations. It contains also general 2D modules useful for simple imagery. It is commonly used to reduce CIGALE, TIGER and PYTHEAS observations.

ADHOC is the acronym for Analyse et Dépouillement Homogčne des Observations Cigale. ADHOC software has been designed in 1987 in order to reduce data from the scanning Pérot-Fabry instrument CIGALE build in Marseille's Observatory. Up to 1998, the successive versions of ADHOC run on DOS operating systems. Since 1998, the software migrated to Windows environnement..

ADHOC is able to reduce data from a number of large telescopes : 3m60 CFHT (Hawaii), 3m60 ESO (Chile), 1m50 ESO (Chile), 6m SAO (Russia), 1m93 OHP (France), 2m60 Byurakan (Armenia), 2m San Pedro Martir (Mexico), 1m50 Bosque Allegre (Argentina), 1m60 Mt Megantic (Canada), ... In 2001, about 150 papers in international magazines with external referees could refer to ADHOC software.

ADHOC concept is to minimize the training time for users. All the user interface is graphical and a very friendly and complete HTML help is available at every moment.

ADHOC software has been written by J. BOULESTEIX (Observatoire de Marseille) : boulesteix@oamp.fr .

ADHOCw present version is working on Windows 32 bits systems (95/98/NT/2000), uses multi-tasking and manages completely file sharing on networks. Direct dialog or macros can be used. There are no size limitations in the 3D dimensions of the data that ADHOCw can reduce. ADHOCw works mainly on 4 bytes floating values, witch offers a large dynamics for the data.

ADHOCw software is free of use and can be duplicated. Information of the interest of users is welcome and a user list is maintained by boulesteix@oamp.fr who will inform regularly of the availability of the new releases.

ADHOCw (ADHOC for Windows) code source is written in C with the Borland C++ Builder tool using the classical Microsoft Windows primitives.

ADHOCw allows simultaneous computations at the same time (16 simultaneous tasks maximum) and on the same shared files.

ADHOCw accepts batch macros which can be easily edited by the users.

 

System and hardware requirements for the Windows version

ADHOCw (ADHOC for windows) must run on Windows 32 bits operating systems (Windows 95/98, Windows NT or Windows 2000).

Executable code is compatible with Intel 80386, Intel 80486, Intel Pentium, Intel Pentium Pro, Intel Pentium II, Intel Celeron, Intel Pentium III, Intel Pentium IV, AMD Duron, AMD Althon and other Intel, AMD or Cyrix equivalent chips. Executable code is optimized for speed execution.

16 Mb memory for Windows 95/98 and 32 Mb memory for Windows NT/2000 is a minimum. 32-48 Mb and 64-96 Mb are respectively recommended. Tiny memory increases the frequency of swaps on disk and therefore reduces the execution speed of the programs.

1024 x 768 x 256 screen is recommended for 2D display. 1280 x 1024 x 256 screen is recommended for 3D display. Nevertheless, the software runs always with reduced screen dimensions. The recommended screen parameters for the different ADHOCw programs  are :

program   screen size nb of colors pixels per inch
ADw2D 2D display program 1024x768 256 96
ADw3D 3D display program 1280x1024 256 96
ADwT1 data reduction program 800x600 16 96
ADwFT file translation program 640x480 16 96
ADwIPCS photon counting acquisition program 1280x1024 256 96

Printers available inside Windows are used by ADHOCw, but Window print screen programs (Pizzazp, Printscreen, ...) are recommended. One of these tools is available on the ADHOCw Internet access (http://www-obs.cnrs-mrs.fr)..

 

System and hardware requirements for the Linux version

The ADHOCl (ADHOC for Linux) version will be available at the end of the year 2001.

 

Running ADHOCw

The main program dispatches tasks on other programs and modules. So only one program gives the access to all functions : its name is ADHOCW.EXE. The best is to run it from the shortcuts created during installation.

You can run a program by double-clicking on its name or by selecting it (one clock only) and then clicking on the "Execute" button. The "Help" button gives you access to the global ADHOCw HTML help.
Note that the indication below the executable file names represents the optimal screen size and colors. If your system doesn't offer such a screen, or is the resolution is not 96 pixels per inch, a warning screen message will be displayed, but you will nevertheless be able to run the program in a reduced display mode.

 

 

Note that several ADHOCw, ADw2D, ADw3D, ADwT1 or ADwFT programs can run at the same time, on the same directory (same data) or on different directories (different simultaneous treatments).

 

Shared files and network access

The ADHOC software manages completely the Windows networks : you can access and write (if permitted by the manager) to any data file located on another computer. All the files are completely shared in reading but locked only to one writing user at the same time. A good example of the macro syntax for network input and output files can be seen in the ADwT1 function C04.

 

Batches

Data reduction program ADwT1 and File translation program ADwFT allow batches. Batches are operations (macros) which are stored in advance in an ASCII file in order to be sequentially executed later. ADwT1 macros are very easy to create : after filling the parameters box of a given function, you can choose either to execute immediately the function by pressing the "Execute" button , either to write/append the macro code onto a batch/macro ADM ASCII file by pressing the "Store macro" button. The main ADwT1 menu allows you to run a batch/macro ADM file instead of a function by pressing the "Exec a batch file" button.

The macros have a simple syntax (a code operation and parameters), as examples show it. Macro comment lines are allowed. The file in which macros can be stored is an ASCII file of ADM suffix (AHOHCw macro). This ADM file can be edited easily by the user in order to generate new sequences.

In addition, it is possible to chain different ADM macro files defined in different directories in a global macro batch (ADB file).

 

Null values

Null values are values which are not displayed and not taken in account during computations (for example pixels without valid measure). 2D and 3D files can have null values.
For files containing floating values (new ADHOC, floating FITS), the null value is -3.1E+38. All values less than -3.0E+38 are considered as null.
For files containing integer values (old ADHOC, integer FITS), the null value is -32768. All values less than -32000 are considered as null.

 

Coordinates

The coordinates are numbered from 1 (never from  0) in ADHOCw. For instance, in a 256 x 256 x 24 cube, the valid user coordinates are 1 to 256 in X and Y and 1 to 24 in Z.

 

Input and output data file types

Program Accepted input file types Created output file types
ADw2D new ADHOCw (AD2,AD3)
old ADHOC (DA2,DA3)
FITS (any type)
new ADHOCw (AD2,AD3)
ADw3D new ADHOCw (AD2,AD3)
FITS (any type)
new ADHOCw (AD2,AD3)
ADwT1 new ADHOCw (AD2,AD3)
old ADHOC (DA2, DA3)
new ADHOC (AD2,AD3)
ADwFT new ADHOCw (AD2,AD3)
old ADHOC (DA2,DA3)
FITS (any type)
IDL and binary (any type)
ElCcompressed (Chile)
new ADHOCw (AD2,AD3)
old ADHOC (DA2,DA3)
FITS (any type)
IDL and binary (any type)
ElC compressed (Chili)
ADwIPCS new ADHOCw (AD2,AD3)
old ADHOC (DA2,DA3)
FITS (any type)
IPCS coordinates (ADA, CIG)
new ADHOCw (AD2,AD3)

Read the new ADHOCw format characteristics, the old ADHOC format characteristics, the FITS format characteristics, the IDL/binary format characteristics.

 

ADHOCw files, formats and suffixes

All ADHOC files accept long names (up to 256 characters including the path). The extension must be less than 30 characters.

All ADHOC files can be shared and read or written from other computers through the network.

Suffix Type of file Type of data

Description

AD1 1D data (profile) ASCII click here for AD1 format
AD2 2D data (image) binary float click here for AD2 structure
AD3 3D data (cube) binary float click here for AD3 structure
ADA ADwIPCS photon counting acquisition binary int click here for ADA structure
ADB ADwT1 global batch macro command ASCII click here for ADB structure
ADC ADw2D context binary internal ADHOC system structure
ADH ADwT1 Pytheas work binary internal ADHOC system structure
ADJ ADw2D/ADw3D 16 colors user palette binary internal ADHOC system structure
ADK ADw2D kinematical parameters ASCII internal ADHOC system structure
ADL ADwT1 general logbook ASCII printable normal ASCII file
ADM ADwT1 macro ASCII click here for ADM format
ADP ADwT1 parameters ASCII click here for ADP format
ADQ ADwT1 parameters (spare) ASCII click here for ADQ format
ADR ADwT1 precession object list binary internal ADHOC system structure
ADS ADwT1 seeing correction parameters ASCII click here for ADS format
ADT ADwIPCS acquisition track logbook ASCII click here for ADT format
ADV ADw2D crowns parameters ASCII click here for ADV format
ADX ADwT1 photometric correction parameters ASCII click here for ADX format
ADZ ADwT1 zones coordinates ASCII click here for ADZ format

 

ADHOCw HTML help

All ADHOCw help is in HTML. An internal simple HTML browser is incorporated to ADHOC. But the ADHOCw HTML help can be directly accessible to your favorite HTML browser (Netscape, IExplorer, ...) for extended operations (extraction of text or images, special printings, ...). The ADHOCw HTML help is located in the \adhocw\help\adhocw.htm file..

The SWHTML software used is a standalone free shareware. The author is jerry@iss.u-net.com.

You can also easily print your complete copy of the User's Manual.

 


Additional information : structure of the ADHOCw files

This document describes the different formats which are managed by the program ADHOCw File Translator :
1) New ADHOCw format
2) Old ADHOC/Visu2/Visu3 format
3) Elc compressed format
4) IDL and binary formats. In this section examples to read or write
data are given for Fortran or C programmers.
5) FITS format
===================================================================
1) New ADHOCw data format :
The new ADHOCw data format will be the default files format for the new ADHOCw software (Windows95/WindowsNT).
The new ADHOCw structure has been defined in order to optimize the read/write operations from/to the hard disk.
a- Principle :
. the format is identical for 2-D and 3-D data
. data are stored as 4 bytes floating values (-3.4E381 to +3.4E381)
. parameters and comment are stored at the end of the file
. default suffixes for the new ADHOC files are *.AD2 (for 2-D) and *.AD3 (for 3-D)
b- Differences with the old ADHOC/VISU2/VISU3 format :
. data dynamics is no more limited to -32767 +32879
. comments can now be 127 characters (78 previously)
. separate parameter files are no more used
. size of the files is twice the previous
c- Compatibility :
. the structure is simple, in order to read easily ADHOCw files from user's programs written in Fortran or Basic (without parameters & comments)
. the structure is IDL compatible (without parameters & comments)
d- C library :
. a C++ (object oriented C) library is available for users (binary and C code)
e- Structure :
. data : lx*ly*lz*4 bytes (lx,ly and lz are the dimension of the cube) (lz=0 for 2-D)
. parameters : 128 bytes
. comment : 128 bytes
==> so, the total length of the file is (lx*ly*lz)*4+256 bytes
f- Coding :
. as coding is different from PC and UNIX machines, the 4 first bytes of the parameters (which contain an integer value representing the number of dimensions of the data) will be used as test.
g- Parameters :
. all values are 4 bytes (integers, floats or character blocks)
. all integers are long integers (4 bytes)
. 10 first values are common for 2-D and 3-D files
. other values are specific to these different files
. values are compatible with old ADHOC files (*.DA2 and *.DA3)

For all files (2D and 3D) :

location bytes type mnemo description default
0 0-3 integer nbdim nb of dimensions 3
1 4-7 character id1 identification 1/2 " "
2 7-11 character id2 identification 2/2 " "
3 12-15 integer lx dimension in X 256
4 16-19 integer ly dimension in Y 256
5 20-23 integer lz dimension in Z 24
6 24-27 float scale arcsec/pixel 1.
7 28-31 integer ix0 top-left corner 0
8 32-35 integer iy0 bottom-right corner 0
9 36-39 float zoom zoom 1.

Note : nbdim can be 2, 3, or -3
2 = 2-D
3 = 3-D ordered in spectra (Z*X*Y) [default for ADHOC]
-3 = 3-D ordered in channels (X*Y*Z)

For 2-D files :

location bytes type mnemo description default
10 40-43 integer modevis last visualization mode 0
11 44-47 float thrshld last threshold 0.
12 47-51 float step last step 1.
13 52-55 integer nbiso last nb of displayed isophotes 256
14 56-59 integer pal last displayed palette 1
15 60-127     unused  

Note : these values are just keeping the last displaying parameters (as for *.%%% VISU2 parameter files)

For 3-D files :

location bytes type mnemo description default
10 40-43 float xl1 lambda of the 1st channel (in Angstroems) 6600.
11 44-47 float xil interfringe (in Angstroems) 8.22
12 47-51 float vr0 mean radial velocity of the object (km/s) 0.
13 52-55 float corrv heliocentric RV correction (km/s) 0.
14 56-59 float p0 PF interference order 793.
15 60-63 float xlp reference lambda for p0 (in Angstroems) 6563.
16 64-67 float xl0 observed zero-velocity lambda (in Angstroems) 6563.
17 68-71 float vr1 radial velocity of the 1st channel (in km./s) 0.
18 72-75 float xik interfringe (in km/s) 386.
19 76-127     unused  

Note : these values are similar to *.%%3 ADHOC/VISU3 parameter files

h- Comments :
. 128 bytes
. when read or written, the 128th byte is automatically
forced to 0 (for C compatibility)


===================================================================
2) Old ADHOC-DOS/Visu2/Visu3 format :
a - structure des fichiers 2-D de type xxxxxxxx.DA2 : nl enregistrements (nl = dimension Y = ydim) de npl valeurs (npl = dimension X = xdim). 1 valeur = 2 octets (integer*2)
b - structure des fichiers 3-D de type xxxxxxxx.DA3 : n enregistrements (n = nl*npl = nb de pixels = xdim*ydim) de m valeurs (m = dimension Z = nb de canaux). 1 valeur = 2 octets (integer*2)
c - fichier parametre 2-D de type xxxxxxxx.%%% : Il est cree par VISU2 s'il n'existe pas. Ce fichier ASCII est imprimable et peut etre edite. Il contient 2 … 4 lignes :
. ligne 1 : dimension X, dimension Y (xdim, ydim) (format libre)
. ligne 2 : commentaire (78 caractŠres maxi) (format: a78 )
. ligne 3 : sauvegarde des niveaux de visualisation del'image par VISU2 (ligne eventuelle automatiquement creee si absente).Format libre : contient 12 valeurs :seuil, pas, palette, mode visualisation, mode logarithmique, zoom par rapport a 256, Xo coin HG fenetre, Yo coin HG fenetre, seuil isophotes superposees, pas isophotes superposees, nombre d'isophotes superposees, limite de qualite (masquage)
. ligne 4 : sauvegarde des inhibitions de niveaux de visualisation de VISU2 (ligne eventuelle automatiquement creee si absente). Format libre : contient 15 valeurs.
d - fichier parametre 3-D de type xxxxxxxx.%%3 : Il peut ‚ventuellement etre cree par la fonction ADHOC No 74 s'il n'existe pas. Ce fichier ASCII est imprimable et peut etre edite. Il contient 5 lignes :
. ligne 1 : idim, icarre, ix1, ix2, iy1, iy2, nc
. idim = dimension : TOUJOURS 3
. icarre = carre elementaire : TOUJOURS 1
. ix1 = TOUJOURS 1
. ix2 = dimension X
. iy1 = TOUJOURS 1
. iy2 = dimension Y
. nc = nombre de canaux
. ligne 2 : xikms, vr1, ckms, clamb, xlamb1, xilamb (format libre) ou:
. xikms = interfrange en km/s a la lambda observee
. vr1 = vitesse radiale du premier canal
. ckms = km/s par canal a la lambda observae
. clamb = A par canal a la lambda observee
. xlamb1 = longueur d'onde du premier canal
. xilamb = interfrange en A a la lambda observee
. ligne 3 : commentaire (78 caracteres maxi) (format: a78 )
. ligne 4 : identification (5 car.) et nom objet (20 car.) (format: a5,5x,a20 )
. ligne 5 : vitesse de correction au soleil (format libre). Cette cinquieme ligne ne sert (si elle existe) que pour VISU3 pour corriger le tic de la mesure en VR qui se positionne verticalement au dessus du profil trace. Cette cinquieme ligne peut etre absente, auquel cas, il n'y aura pas de decalage de tic dans VISU3.


===================================================================
3) ElC compressed format :
These formats are special and come from La Silla Survey or Mexico observations. The are also common on Sun-Unix data reduction software written by Etienne le Coarer.
Note that the begining of thses compressed files contains ASCII strings which indicate some precious information (size of the image, scanning wavelength, identification of the object). This information can be read easily from any ASCII text editor.


====================================================================
4) IDL and binary formats :
These formats are extremely simple : The 2D or 3D arrays are written in binary.
4 types of data formats are available :
. integers*2
. floats*4
. swapped integers*2 from Unix
. swapped floats*4 from Unix

Swapped UNix mode has 4 rules :
- bytes (and not bits) are swapped
- short int 16 values are looked in 4 bytes blocks (byte 1 [ab] and byte 2 [cd] are [abcd])
- 4 bytes blocks (2*int16, 1*int32 or 1*float32) are swapped like this : [abcd] -> [dcba]
- characters strings (for instance comments) are not swapped

Example of program in Fortran for 2D images and integers*2 and floats*4:
integer*2 itab(50)
dimension tab(50)
lx=50
ly=50
c opening output files
open (unit=21,file='int.idl',access='direct',
$recl=lx*2,status='unknown')
open (unit=22,file='float.idl',access='direct',
$recl=lx*4,status='unknown')
c array initialization
do 1 i=1,lx
itab(i)=i
tab(i)=i
1 continue
c writing the 2D data pixel
do 11 j=1,ly
write(21,rec=j)(itab(i),i=1,lx)
write(22,rec=j)(tab(i),i=1,lx)
11 continue
c closing files
close(21)
close(22)
end

Example of program in Fortran for 3D cubes and integers*2 and floats*4:
integer*2 itab(50,60)
dimension tab(50,60)
lx=50
ly=60
lz=24
c opening output files
open (unit=21,file='int.idl',access='direct',
$recl=lz*2,status='unknown')
open (unit=22,file='float.idl',access='direct',
$recl=lz*4,status='unknown')
c array initialization
do 1 k=1,lz
itab(k)=k
tab(k)=k
1 continue
c writing the 3D data profile
do 11 j=1,ly
do 11 i=1,lx
index=(j-1)*lx
write(21,rec=index)(itab(k),k=1,lz)
write(22,rec=index)(tab(k),k=1,lz)
11 continue
c closing files
close(21)
close(22)
end

Example of program in C++ for 2D images and integers*2 and floats*4:
{
int lx=50, ly=60, i, j;
float* tab;
short int* itab;
tab= new float [lx];
itab= new short int [lx];
// opening output files
lu_int=sopen("int.idl",O_BINARY,O_RDONLY,SH_DENYNONE);
lu_float=sopen("int.float",O_BINARY,O_RDONLY,SH_DENYNONE);
// array initialization
for (i=0; i<lx; i++)
{
itab[i]=i;
tab[i]=i;
}
// writing the 2D data pixel
for (j=0; j<ly; j++)
{
lseek(lu_int,2L*lx*j,SEEK_SET);
write(lu_int,itab,2L*lx);
lseek(lu_float,4L*lx*j,SEEK_SET);
write(lu_float,tab,4L*lx);
}
// closing files
close(lu_int);
close(lu_float);
delete [] itab;
delete [] tab;
}

Example of program in C++ for 3D cubes and integers*2 and floats*4:
{
int lx=50, ly=60, lz=24, i, j, k;
float* tab;
short int* itab;
tab= new float [lz];
itab= new short int [lz];
// opening output files
lu_int=sopen("int.idl",O_BINARY,O_RDONLY,SH_DENYNONE);
lu_float=sopen("int.float",O_BINARY,O_RDONLY,SH_DENYNONE);
// array initialization
for (k=0; k<lz; k++)
{
itab[k]=k;
tab[k]=k;
}
// writing the 3D data profile
for (j=0; j<ly; j++)
{
for (i=0; i<lx; i++)
{
lseek(lu_int,2L*(lx*j*lz+i*lz),SEEK_SET);
write(lu_int,itab,2L*lz);
lseek(lu_float,4L*(lx*j*lz+i*lz),SEEK_SET);
write(lu_float,tab,4L*lz);
}
}
// closing files
close(lu_int);
close(lu_float);
delete [] itab;
delete [] tab;
}


===================================================================
5) FITS format

ADHOCw File Translator accepts almost all of the FITS formats (floats 32 and 64, integers 8, 16 and 32).
FITS was first developed in the late 1970's as a standard data interchange format between various astronomical observatories. Since then FITS has become the defacto standard data format supported by most astronomical data analysis software packages.

A FITS file consists of one or more Header + Data Units (HDUs), where the first HDU is called the `Primary HDU', or `Primary Array'. The primary array contains an N-dimensional array of pixels, such as a 1-D spectrum, a 2-D image, or a 3-D data cube. Five different primary datatypes are supported: Unsigned 8-bit bytes, 16 and 32-bit signed integers, and 32 and 64-bit floating point reals.

Any number of additional HDUs may follow the primary array; these additional HDUs are called FITS `extensions'. There are currently 3 types of extensions defined by the FITS standard:
-
Image Extension - a N-dimensional array of pixels, like in a primary array

ASCII Table Extension - rows and columns of data in ASCII character format

Binary Table Extension - rows and columns of data in binary representation
-
In each case the HDU consists of an ASCII Header Unit followed by an optional Data Unit. For historical reasons, each Header or Data unit must be an exact multiple of 2880 8-bit bytes long. Any unused space is padded with fill characters (ASCII blanks or NULs depending on the type of unit).

Each Header Unit consists of any number of 80-character keyword records or `card images' (reminiscent of the 80-column punched cards which were prevalent when the FITS standard was developed) which have the general form:
-
KEYNAME = value / comment string
-
The keyword names may be up to 8 characters long and can only contain uppercase letters, the digits 0-9, the hyphen, and the underscore character. The keyword name is (usually) followed by an equals sign and a space character (= ) in columns 9 - 10 of the record, followed by the value of the keyword which may be either an integer, a floating point number, a character string (enclosed in single quotes), or a boolian value (the letter T or F). The last keyword in the header is always the `END' keyword which has no value or comment fields. There are many rules governing the exact format of a keyword record (see the NOST FITS Standard) so it is better to rely on standard interface software like FITSIO to correctly construct or to parse the keyword records rather than try to deal directly with the raw FITS formats.
Each Header Unit begins with a series of required keywords which depend on the type of HDU. These required keywords specify the size and format of the following Data Unit. The header many contain other optional keywords to describe other aspects of the data, such as the units or scaling values. Other COMMENT or HISTORY keywords are also frequently added to further document the data file.

The optional Data Unit immediately follows the last 2880-byte block in the Header Unit. Some HDUs do not have a Data Unit and only consist of the Header Unit.

If there is more than one HDU in the FITS file, then the Header Unit of the next HDU immediately follows the last 2880-byte block of the previous Data Unit (or Header Unit if there is no Data Unit).

===================================================================
6) ADA and ADT photon counting formats

The ADA format (ADHOC Acquisition) is connected the photon counting acquisition program ADwIPCS.
The format is binary. There are 3 possible modes, which are automat˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙