Update ABI/API compatibility reports after commit ac375ac9f5

This commit is contained in:
OpenJPEG Travis CI 2017-08-09 09:52:41 +00:00
parent 956efb6718
commit c68d82b9b2
6 changed files with 94 additions and 81 deletions

View File

@ -207,7 +207,7 @@ $VAR1 = {
'Source' => 'cio.c', 'Source' => 'cio.c',
'SourceLine' => '271' 'SourceLine' => '271'
}, },
'152245' => { '152247' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Line' => '1059', 'Line' => '1059',
'Return' => '177', 'Return' => '177',
@ -215,13 +215,13 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '160' 'SourceLine' => '160'
}, },
'152548' => { '152550' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Line' => '1537', 'Line' => '1537',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'cstr_info', 'name' => 'cstr_info',
'type' => '152566' 'type' => '152568'
} }
}, },
'Reg' => { 'Reg' => {
@ -232,12 +232,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '924' 'SourceLine' => '924'
}, },
'214160' => { '214162' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_callback', 'name' => 'p_callback',
@ -258,12 +258,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '44' 'SourceLine' => '44'
}, },
'214258' => { '214260' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_callback', 'name' => 'p_callback',
@ -284,12 +284,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '59' 'SourceLine' => '59'
}, },
'214344' => { '214346' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_callback', 'name' => 'p_callback',
@ -310,23 +310,23 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '74' 'SourceLine' => '74'
}, },
'214459' => { '214461' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_format', 'name' => 'p_format',
'type' => '203513' 'type' => '203515'
} }
}, },
'Reg' => { 'Reg' => {
'0' => 'rdi' '0' => 'rdi'
}, },
'Return' => '214246', 'Return' => '214248',
'ShortName' => 'opj_create_decompress', 'ShortName' => 'opj_create_decompress',
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '168' 'SourceLine' => '168'
}, },
'214681' => { '214683' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
@ -342,12 +342,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '352' 'SourceLine' => '352'
}, },
'214812' => { '214814' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'num_threads', 'name' => 'num_threads',
@ -363,12 +363,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '375' 'SourceLine' => '375'
}, },
'214930' => { '214932' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'parameters', 'name' => 'parameters',
@ -384,7 +384,7 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '386' 'SourceLine' => '386'
}, },
'215072' => { '215074' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
@ -393,7 +393,7 @@ $VAR1 = {
}, },
'1' => { '1' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'2' => { '2' => {
'name' => 'p_image', 'name' => 'p_image',
@ -410,12 +410,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '406' 'SourceLine' => '406'
}, },
'215275' => { '215277' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_stream', 'name' => 'p_stream',
@ -436,12 +436,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '429' 'SourceLine' => '429'
}, },
'215429' => { '215431' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_image', 'name' => 'p_image',
@ -477,12 +477,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '450' 'SourceLine' => '450'
}, },
'215637' => { '215639' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_stream', 'name' => 'p_stream',
@ -538,12 +538,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '473' 'SourceLine' => '473'
}, },
'215855' => { '215857' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_tile_index', 'name' => 'p_tile_index',
@ -574,12 +574,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '504' 'SourceLine' => '504'
}, },
'216055' => { '216057' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_stream', 'name' => 'p_stream',
@ -605,12 +605,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '530' 'SourceLine' => '530'
}, },
'216232' => { '216234' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'res_factor', 'name' => 'res_factor',
@ -626,23 +626,23 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '554' 'SourceLine' => '554'
}, },
'216341' => { '216343' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_format', 'name' => 'p_format',
'type' => '203513' 'type' => '203515'
} }
}, },
'Reg' => { 'Reg' => {
'0' => 'rdi' '0' => 'rdi'
}, },
'Return' => '214246', 'Return' => '214248',
'ShortName' => 'opj_create_compress', 'ShortName' => 'opj_create_compress',
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '572' 'SourceLine' => '572'
}, },
'216566' => { '216568' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
@ -658,12 +658,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '670' 'SourceLine' => '670'
}, },
'216697' => { '216699' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'parameters', 'name' => 'parameters',
@ -684,12 +684,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '731' 'SourceLine' => '731'
}, },
'216835' => { '216837' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_image', 'name' => 'p_image',
@ -710,12 +710,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '749' 'SourceLine' => '749'
}, },
'216989' => { '216991' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_info', 'name' => 'p_info',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_stream', 'name' => 'p_stream',
@ -731,12 +731,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '768' 'SourceLine' => '768'
}, },
'217120' => { '217122' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_stream', 'name' => 'p_stream',
@ -752,12 +752,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '785' 'SourceLine' => '785'
}, },
'217251' => { '217253' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_stream', 'name' => 'p_stream',
@ -773,7 +773,7 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '802' 'SourceLine' => '802'
}, },
'217382' => { '217384' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
@ -804,12 +804,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '822' 'SourceLine' => '822'
}, },
'217728' => { '217730' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'p_tile_index', 'name' => 'p_tile_index',
@ -840,12 +840,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '852' 'SourceLine' => '852'
}, },
'217928' => { '217930' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
} }
}, },
'Reg' => { 'Reg' => {
@ -856,12 +856,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '879' 'SourceLine' => '879'
}, },
'218029' => { '218031' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
}, },
'1' => { '1' => {
'name' => 'info_flag', 'name' => 'info_flag',
@ -882,12 +882,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '897' 'SourceLine' => '897'
}, },
'218166' => { '218168' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
} }
}, },
'Reg' => { 'Reg' => {
@ -898,12 +898,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '913' 'SourceLine' => '913'
}, },
'218330' => { '218332' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_codec', 'name' => 'p_codec',
'type' => '214246' 'type' => '214248'
} }
}, },
'Reg' => { 'Reg' => {
@ -914,12 +914,12 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '941' 'SourceLine' => '941'
}, },
'218415' => { '218417' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
'name' => 'p_cstr_index', 'name' => 'p_cstr_index',
'type' => '218475' 'type' => '218477'
} }
}, },
'Reg' => { 'Reg' => {
@ -930,7 +930,7 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '952' 'SourceLine' => '952'
}, },
'218481' => { '218483' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
@ -956,7 +956,7 @@ $VAR1 = {
'Source' => 'openjpeg.c', 'Source' => 'openjpeg.c',
'SourceLine' => '967' 'SourceLine' => '967'
}, },
'218600' => { '218602' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Param' => { 'Param' => {
'0' => { '0' => {
@ -1371,7 +1371,7 @@ $VAR1 = {
'Size' => '1', 'Size' => '1',
'Type' => 'Intrinsic' 'Type' => 'Intrinsic'
}, },
'152566' => { '152568' => {
'BaseType' => '60952', 'BaseType' => '60952',
'Name' => 'opj_codestream_info_v2_t**', 'Name' => 'opj_codestream_info_v2_t**',
'Size' => '8', 'Size' => '8',
@ -1566,7 +1566,7 @@ $VAR1 = {
'Size' => '216', 'Size' => '216',
'Type' => 'Struct' 'Type' => 'Struct'
}, },
'203463' => { '203465' => {
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Line' => '292', 'Line' => '292',
'Memb' => { 'Memb' => {
@ -1599,15 +1599,15 @@ $VAR1 = {
'Size' => '4', 'Size' => '4',
'Type' => 'Enum' 'Type' => 'Enum'
}, },
'203513' => { '203515' => {
'BaseType' => '203463', 'BaseType' => '203465',
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Line' => '299', 'Line' => '299',
'Name' => 'OPJ_CODEC_FORMAT', 'Name' => 'OPJ_CODEC_FORMAT',
'Size' => '4', 'Size' => '4',
'Type' => 'Typedef' 'Type' => 'Typedef'
}, },
'205270' => { '205272' => {
'BaseType' => '141', 'BaseType' => '141',
'Header' => 'openjpeg.h', 'Header' => 'openjpeg.h',
'Line' => '575', 'Line' => '575',
@ -1615,13 +1615,13 @@ $VAR1 = {
'Size' => '8', 'Size' => '8',
'Type' => 'Typedef' 'Type' => 'Typedef'
}, },
'214246' => { '214248' => {
'BaseType' => '205270', 'BaseType' => '205272',
'Name' => 'opj_codec_t*', 'Name' => 'opj_codec_t*',
'Size' => '8', 'Size' => '8',
'Type' => 'Pointer' 'Type' => 'Pointer'
}, },
'218475' => { '218477' => {
'BaseType' => '58944', 'BaseType' => '58944',
'Name' => 'opj_codestream_index_t**', 'Name' => 'opj_codestream_index_t**',
'Size' => '8', 'Size' => '8',

View File

@ -20,7 +20,28 @@
<br/> <br/>
<h1>Changelog from Git</h1><br/><br/> <h1>Changelog from Git</h1><br/><br/>
<div class='changelog'> <div class='changelog'>
<pre class='wrap'>commit c38bdbef4f3a5888948903247532fc8cf4284c00 <pre class='wrap'>commit ac375ac9f5b4ae47501b60795e905e3d25dd00f8
Author: Even Rouault &lt;even.rouault@spatialys.com&gt;
Date: 2017-08-09 11:34:08 +0200
Partial revert BPC related check of #975 (#979)
PR #975 introduced a check that rejects images that have different bit depth/sign
per compoment in SIZ marker if the JP2 IHDR box has BPC != 255
This didn't work properly if decoding a .j2k file since the new bit added in
opj_cp_t wasn't initialized to the right value.
For clarity, tThis new bit has also been renamed to allow_different_bit_depth_sign
But looking closer at the code, it seems we were already tolerant to inconsistencies.
For example we parsed a JP2 BPCC box even if BPC != 255 (just a warning is emitted)
So failing hard in opj_j2k_read_siz() wouldn't be very inconsistent, and that
alone cannot protect against other issues, so just emit a warning if BPC != 255
and the SIZ marker contains different bit depth/sign per component.
Note: we could also check that the content of JP2 BPCC box is consistant with the one
of the SIZ marker.
commit c38bdbef4f3a5888948903247532fc8cf4284c00
Author: Even Rouault &lt;even.rouault@spatialys.com&gt; Author: Even Rouault &lt;even.rouault@spatialys.com&gt;
Date: 2017-08-09 10:03:59 +0200 Date: 2017-08-09 10:03:59 +0200
@ -586,14 +607,6 @@ Date: 2017-07-26 18:05:56 +0200
Fixes crash on id_000004,sig_06,src_000679,op_arith8,pos_49,val_-17 Fixes crash on id_000004,sig_06,src_000679,op_arith8,pos_49,val_-17
commit 80818c39f5bfbac37768fcee95b0ffeceaa77264
Author: Even Rouault &lt;even.rouault@spatialys.com&gt;
Date: 2017-07-26 12:24:26 +0200
Avoid index out of bounds access to pi-&gt;include[] (#938)
Fix id:000098,sig:11,src:005411,op:havoc,rep:2 test case
...</pre></div> ...</pre></div>
</body> </body>

View File

@ -496,7 +496,7 @@ $VAR1 = {
'2.1' => '2014-04-29 12:58', '2.1' => '2014-04-29 12:58',
'2.1.1' => '2016-07-05 14:54', '2.1.1' => '2016-07-05 14:54',
'2.1.2' => '2016-09-28 18:18', '2.1.2' => '2016-09-28 18:18',
'current' => '2017-08-09 10:03:59' 'current' => '2017-08-09 11:34:08'
}, },
'HeadersDiff' => { 'HeadersDiff' => {
'1.1' => { '1.1' => {
@ -574,7 +574,7 @@ $VAR1 = {
'Maintainer' => 'OpenJPEG team', 'Maintainer' => 'OpenJPEG team',
'MaintainerUrl' => 'http://www.openjpeg.org/', 'MaintainerUrl' => 'http://www.openjpeg.org/',
'PackageDiff' => {}, 'PackageDiff' => {},
'ScmUpdateTime' => '1502267071', 'ScmUpdateTime' => '1502272332',
'Soname' => { 'Soname' => {
'1.1' => { '1.1' => {
'lib/libopenjpeg.so' => 'libopenjpeg.so' 'lib/libopenjpeg.so' => 'libopenjpeg.so'

View File

@ -30,7 +30,7 @@
<th>Headers<br/>Diff</th> <th>Headers<br/>Diff</th>
</tr> </tr>
<tr id='current'><td>current</td> <tr id='current'><td>current</td>
<td>2017-08-09<br/>10:03</td> <td>2017-08-09<br/>11:34</td>
<td>7</td> <td>7</td>
<td><a href='../../changelog/openjpeg/current/log.html'>changelog</a></td> <td><a href='../../changelog/openjpeg/current/log.html'>changelog</a></td>
<td class='ok'><a href='../../objects_report/openjpeg/2.1.2/current/report.html'>100%</a></td> <td class='ok'><a href='../../objects_report/openjpeg/2.1.2/current/report.html'>100%</a></td>
@ -152,7 +152,7 @@
<td>N/A</td> <td>N/A</td>
<td>N/A</td> <td>N/A</td>
</tr> </tr>
</table><br/>Maintained by <a href='http://www.openjpeg.org/'>OpenJPEG team</a>. Last updated on Wed Aug 9 08:24:57 2017.<br/> </table><br/>Maintained by <a href='http://www.openjpeg.org/'>OpenJPEG team</a>. Last updated on Wed Aug 9 09:52:40 2017.<br/>
<br/> <br/>
<hr/> <hr/>
<div align='right'><a class='home' title="Andrey Ponomarenko's ABI laboratory" href='http://abi-laboratory.pro/'>abi-laboratory.pro</a></div> <div align='right'><a class='home' title="Andrey Ponomarenko's ABI laboratory" href='http://abi-laboratory.pro/'>abi-laboratory.pro</a></div>