Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convolutional deep neural network module #265

Closed
wants to merge 103 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
2f6d743
Added dnn module with draft interface.
May 30, 2015
cfb9cfa
Added libprotobuf to CMake. Added some Caffe files.
Jun 3, 2015
a6963b4
Updated CMakeLists.txt to support protobuf Messages auto generation.
Jun 3, 2015
6e23d93
Added simple .prototxt Caffe importer.
Jun 6, 2015
77321e3
Added binary .caffemodel import support.
Jun 8, 2015
24a9eff
Merge branch 'master' of https://github.com/Itseez/opencv_contrib
Jun 8, 2015
62feeec
fixed compilation witn C++11 compiler
Jun 8, 2015
42b36fb
more compilation
Jun 8, 2015
10c3a13
umbrealla header
Jun 8, 2015
eb95846
some warnings disabled
Jun 8, 2015
1fd9304
Dnn API changes (removed NetConfiguration, added LayerRegister, impro…
Jun 9, 2015
cae0bd4
Merge branch 'master' of github.com:ludv1x/opencv_contrib
Jun 9, 2015
ee837c1
Updated CMakeLists.txt
Jun 9, 2015
194271d
Implemented allocation of DAG and it's forward pass.
Jun 14, 2015
ed1c569
[Bomb commit] Implemented 4 main layers. Changes in API. Added worked…
Jun 16, 2015
51df95d
Added GSTRB test data.
Jun 16, 2015
2638433
Merge branch 'master' of https://github.com/Itseez/opencv_contrib
Jun 16, 2015
eba62d5
Layers implementations divided onto separated files.
Jun 18, 2015
383715d
libprotobuf is optional dependency now
Jun 18, 2015
2c501f3
Replace CMake WARNING onto STATUS
Jun 18, 2015
29966ee
added HAVE_PROTOBUF macro
Jun 19, 2015
48ab440
Changed default parameter
Jun 19, 2015
09ffc43
Fixed CMake and CPP build errors
Jun 20, 2015
eef4d1d
Added LRN and SoftMax layers, some fixes
Jun 22, 2015
22272e8
Many fixes.
Jun 23, 2015
9cddccf
Added AlexNet sample. Removed big .caffemodel files from repo.
Jun 23, 2015
66fa1e1
Random changes in matlab/* module was reverted
Jun 23, 2015
d80c272
fixed stand alone link errors
Jun 24, 2015
0cd5459
added incdes to project so that it could be visible in some IDEs (ex.…
Jun 24, 2015
13edaaa
Added group param to convolution_layer.cpp
Jun 24, 2015
49b5e5e
Merge branch 'master' of github.com:ludv1x/opencv_contrib
Jun 24, 2015
99b8dac
Merge branch 'master' of https://github.com/Itseez/opencv_contrib
Jun 24, 2015
0f7907d
updated example
Jun 24, 2015
2717765
Fixed some warnings
Jun 24, 2015
d117983
Deleted trailing whitespaces
Jun 24, 2015
cfdf060
Fixed more warnings. Updated glog_emulator.hpp:
Jun 25, 2015
761b037
Fixed critical bug in dnn::Dict. Fixed LRN layer implementation. Adde…
Jun 26, 2015
6fd67d4
Updated test. Added and successfuly passed AlexNet reproducibility te…
Jul 1, 2015
9838234
Some layer fixes. Added concat layer and avg. pooling to sucesfully r…
Jul 2, 2015
6f8a73b
Replaced CMake if() condition for standalone build.
Jul 2, 2015
0ebe30a
Blob class was significantly refactored
Jul 4, 2015
d02bced
More refactoring over Blob.
Jul 5, 2015
85ad43d
Generalized Blob constructor and added vector of images support.
Jul 6, 2015
75e09fd
Implement ambiguous blobs naming scheme like: "layerName[.OutputName]".
Jul 8, 2015
b9e85ed
fixed sign type mismatch warnings in cnpy
Jul 8, 2015
9783bba
Merge branch 'master' into work
Jul 9, 2015
de4d800
Added .caffemodel files downloader for tests on post-build step.
Jul 12, 2015
ec74678
Added element-wise layers. Fixed downloader and ConcatLayer.
Jul 16, 2015
0362da9
Added array support for Dict.
Jul 17, 2015
3aa37d2
Array of parmaters support into caffe_importer.cpp
Jul 17, 2015
172419e
Added Reshape layer and altered importer to correctly handle its params.
Jul 19, 2015
71cfae4
Added Split and Slice layer.
Jul 20, 2015
527fa65
Rewrited concat_layer.cpp in OpenCV-style. Fixed slice layer, added t…
Jul 21, 2015
9b1e28e
Refactored ConvolutionLayer, added Deconvolution.
Jul 22, 2015
ff45c22
Fixed gcc build errors.
Jul 23, 2015
6548839
Added testdata images. Fixed Dict copy constructor.
Jul 25, 2015
db4ff21
Updated classification example
Jul 25, 2015
4da1046
Implemented draft Torch importer
Jul 28, 2015
7d795af
Fixed Torch parser
Jul 30, 2015
5e5cc96
Merge branch 'master' of https://github.com/Itseez/opencv_contrib
Aug 3, 2015
dd15521
Merge branch 'master' of github.com:ludv1x/opencv_contrib
Aug 3, 2015
c1f4410
cnpy warns fix
Aug 3, 2015
2905c03
Multiple layers support added into Torch importer.
Aug 4, 2015
8df8936
Added Torch blob reader and torch convolution test.
Aug 5, 2015
1c220cf
Added simple tests for Torch importer, fixed some importing issues.
Aug 6, 2015
436d929
Resolve reference counting problem in Torch importer.
Aug 6, 2015
b2f4ba3
Merge branch 'master' of https://github.com/Itseez/opencv_contrib
Aug 7, 2015
5b08053
Added ability to remove singleton dimensions in Reshape layer.
Aug 10, 2015
d0875b1
Fixed average pooling error
Aug 10, 2015
f8119ea
Fixed Deconvolution layer. Added more wide layers test coverage.
Aug 11, 2015
df5eec6
Added MVN layer. Renamed layer test data.
Aug 12, 2015
f28effb
Cleaned caffe dependencies
Aug 12, 2015
b3dcc39
Moved caffe.proto
Aug 12, 2015
7d2e745
Minor test changes
Aug 12, 2015
c65d032
Merge branch 'master' of https://github.com/ludv1x/opencv_contrib
Aug 12, 2015
160d864
Fixed small warn and example error
Aug 13, 2015
06f949a
Added initModule() procedure to explicitly init builtin layers
Aug 13, 2015
23d3ede
Added OpenCL im2col
Aug 17, 2015
7acfda2
Fixed im2col_ocl bug caused non-zero UMat offset
Aug 17, 2015
9d932af
Add new method to Net
Aug 17, 2015
0903d79
Added libprotobuf 2.5 as thridparty library
Aug 18, 2015
4929177
Add compiled caffe protobuf files
Aug 18, 2015
fc9795b
libprotobuf is a separate 3rdparty lib now
Aug 19, 2015
93a372f
Try fix msvc error and cmake error on android
Aug 19, 2015
44e52a0
Try fix msvc warnings
Aug 19, 2015
519167e
Refactored cmake and disabled AlexNet test
Aug 20, 2015
e644b5a
Changed Blob::ptr and Blob::offset methods
Aug 20, 2015
f07c564
Add test data for layers
Aug 20, 2015
fb66acb
API refactoring
Aug 20, 2015
f8715f3
Added licence headers
Aug 22, 2015
945094b
Update doc, small changes in Blob methods
Aug 23, 2015
c681508
Add more docs
Aug 23, 2015
bd242d1
Add docs for remaning functions
Aug 24, 2015
eced23c
Updated dnn example
Aug 24, 2015
57a2194
Add tutorial_dnn_build
Aug 25, 2015
efde664
Move binary testdata from opencv_contrib to opencv_extra
Aug 25, 2015
e52a7ee
Add bvlc_googlenet.prototxt to samples
Aug 25, 2015
3154fc0
Add googlenet tutorial
Aug 25, 2015
467cd96
Updated dnn build tutorial
Aug 26, 2015
83e39a9
Fix typos
Aug 26, 2015
0a64a9d
Changed Caffe googlenet tutorial
Aug 26, 2015
d2b6011
Fix documentation warning
Aug 27, 2015
248577a
fixed signed/unsigned cast warning
Sep 3, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
528 changes: 528 additions & 0 deletions modules/dnn/3rdparty/protobuf/CHANGES.txt

Large diffs are not rendered by default.

182 changes: 182 additions & 0 deletions modules/dnn/3rdparty/protobuf/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
project(libprotobuf)

include(CheckIncludeFiles)
include(cmake/CheckCxxHashset.cmake)
include(cmake/CheckCxxHashmap.cmake)

check_include_files("pthread.h" HAVE_PTHREAD)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
include(CheckIncludeFileCXX)
set(CMAKE_REQUIRED_FLAGS "-std=c++11")
check_include_file_cxx("unordered_map" HAVE_UNORDERED_MAP)
check_include_file_cxx("tr1/unordered_map" HAVE_TR1_UNORDERED_MAP)
set(CMAKE_REQUIRED_FLAGS )

if(HAVE_UNORDERED_MAP)
add_definitions("-std=c++11") # For unordered_map
set(HASH_MAP_H "<unordered_map>")
set(HASH_MAP_CLASS "unordered_map")
set(HASH_NAMESPACE "std")
set(HAVE_HASH_MAP 1)
elseif(HAVE_TR1_UNORDERED_MAP)
add_definitions("-std=c++11") # For unordered_map
set(HASH_MAP_H "<tr1/unordered_map>")
set(HASH_MAP_CLASS "unordered_map")
set(HASH_NAMESPACE "std::tr1")
set(HAVE_HASH_MAP 1)
else()
CHECK_HASHMAP()
if(HAVE_GNU_EXT_HASH_MAP)
set(HASH_MAP_H "<ext/hash_map>")
set(HASH_NAMESPACE "__gnu_cxx")
set(HASH_MAP_CLASS "hash_map")
set(HAVE_HASH_MAP 1)
elseif(HAVE_STD_EXT_HASH_MAP)
set(HASH_MAP_H "<ext/hash_map>")
set(HASH_NAMESPACE "std")
set(HASH_MAP_CLASS "hash_map")
set(HAVE_HASH_MAP 1)
elseif(HAVE_GLOBAL_HASH_MAP)
set(HASH_MAP_H "<ext/hash_map>")
set(HASH_NAMESPACE "")
set(HASH_MAP_CLASS "hash_map")
set(HAVE_HASH_MAP 1)
else()
set(HAVE_HASH_MAP 0)
endif()
endif()

set(CMAKE_REQUIRED_FLAGS "-std=c++11")
check_include_file_cxx("unordered_set" HAVE_UNORDERED_SET)
check_include_file_cxx("tr1/unordered_set" HAVE_TR1_UNORDERED_SET)
set(CMAKE_REQUIRED_FLAGS )

if(HAVE_UNORDERED_SET)
set(HASH_SET_H "<unordered_set>")
set(HASH_SET_CLASS "unordered_set")
set(HAVE_HASH_SET 1)
elseif(HAVE_TR1_UNORDERED_SET)
add_definitions("-std=c++11")
set(HASH_SET_H "<tr1/unordered_set>")
set(HASH_SET_CLASS "unordered_set")
set(HAVE_HASH_SET 1)
else()
CHECK_HASHSET()
if(HAVE_GNU_EXT_HASH_SET)
set(HASH_SET_H "<ext/hash_set>")
set(HASH_NAMESPACE "__gnu_cxx")
set(HASH_SET_CLASS "hash_set")
set(HAVE_HASH_SET 1)
elseif(HAVE_STD_EXT_HASH_SET)
set(HASH_SET_H "<ext/hash_set>")
set(HASH_NAMESPACE "std")
set(HASH_SET_CLASS "hash_set")
set(HAVE_HASH_SET 1)
elseif(HAVE_GLOBAL_HASH_SET)
set(HASH_SET_H "<hash_set>")
set(HASH_NAMESPACE "")
set(HASH_SET_CLASS "hash_set")
set(HAVE_HASH_SET 1)
else()
set(HAVE_HASH_SET 0)
endif()
endif()
endif()

if(WIN32 AND BUILD_SHARED_LIBS AND MSVC)
add_definitions(-DPROTOBUF_USE_DLLS)
add_definitions(-DLIBPROTOBUF_EXPORTS)
endif()

#add_definitions( -DGOOGLE_PROTOBUF_NO_THREAD_SAFETY ) #we don't need thread safety
add_definitions( -D_GNU_SOURCE=1 ) #it's maybe useful
add_definitions( -DHAVE_CONFIG_H ) #we will use config.h
configure_file("cmake/config.h.in" "config.h")

if(MSVC)
add_definitions( -D_CRT_SECURE_NO_WARNINGS=1 )
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 /wd4305 /wd4127 /wd4100 /wd4512 /wd4125 /wd4389 /wd4510 /wd4610 /wd4702)
else()
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-deprecated -Wmissing-prototypes -Wmissing-declarations -Wshadow -Wunused-parameter -Wunused-local-typedefs -Wsign-compare -Wsign-promo -Wundef)
endif()

# Easier to support different versions of protobufs
function(append_if_exist OUTPUT_LIST)
set(${OUTPUT_LIST})
foreach(fil ${ARGN})
if(EXISTS ${fil})
list(APPEND ${OUTPUT_LIST} "${fil}")
else()
message(WARNING "file missing: ${fil}")
endif()
endforeach()
set(${OUTPUT_LIST} ${${OUTPUT_LIST}} PARENT_SCOPE)
endfunction()

set(PROTOBUF_ROOT ${CMAKE_CURRENT_SOURCE_DIR})

if(MSVC)
set(ATOMICOPS_INTERNALS ${PROTOBUF_ROOT}/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc)
else()
set(ATOMICOPS_INTERNALS ${PROTOBUF_ROOT}/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc)
endif()

append_if_exist(PROTOBUF_SRCS
${PROTOBUF_ROOT}/src/google/protobuf/compiler/importer.cc
${PROTOBUF_ROOT}/src/google/protobuf/compiler/parser.cc
${PROTOBUF_ROOT}/src/google/protobuf/descriptor.cc
${PROTOBUF_ROOT}/src/google/protobuf/descriptor.pb.cc
${PROTOBUF_ROOT}/src/google/protobuf/descriptor_database.cc
${PROTOBUF_ROOT}/src/google/protobuf/dynamic_message.cc
${PROTOBUF_ROOT}/src/google/protobuf/extension_set.cc
${PROTOBUF_ROOT}/src/google/protobuf/extension_set_heavy.cc
${PROTOBUF_ROOT}/src/google/protobuf/generated_message_reflection.cc
${PROTOBUF_ROOT}/src/google/protobuf/generated_message_util.cc
${PROTOBUF_ROOT}/src/google/protobuf/io/coded_stream.cc
${PROTOBUF_ROOT}/src/google/protobuf/io/gzip_stream.cc
${PROTOBUF_ROOT}/src/google/protobuf/io/printer.cc
${PROTOBUF_ROOT}/src/google/protobuf/io/tokenizer.cc
${PROTOBUF_ROOT}/src/google/protobuf/io/zero_copy_stream.cc
${PROTOBUF_ROOT}/src/google/protobuf/io/zero_copy_stream_impl.cc
${PROTOBUF_ROOT}/src/google/protobuf/io/zero_copy_stream_impl_lite.cc
${PROTOBUF_ROOT}/src/google/protobuf/message.cc
${PROTOBUF_ROOT}/src/google/protobuf/message_lite.cc
${PROTOBUF_ROOT}/src/google/protobuf/reflection_ops.cc
${PROTOBUF_ROOT}/src/google/protobuf/repeated_field.cc
${PROTOBUF_ROOT}/src/google/protobuf/service.cc
${ATOMICOPS_INTERNALS}
${PROTOBUF_ROOT}/src/google/protobuf/stubs/common.cc
${PROTOBUF_ROOT}/src/google/protobuf/stubs/once.cc
${PROTOBUF_ROOT}/src/google/protobuf/stubs/stringprintf.cc
${PROTOBUF_ROOT}/src/google/protobuf/stubs/structurally_valid.cc
${PROTOBUF_ROOT}/src/google/protobuf/stubs/strutil.cc
${PROTOBUF_ROOT}/src/google/protobuf/stubs/substitute.cc
${PROTOBUF_ROOT}/src/google/protobuf/text_format.cc
${PROTOBUF_ROOT}/src/google/protobuf/unknown_field_set.cc
${PROTOBUF_ROOT}/src/google/protobuf/wire_format.cc
${PROTOBUF_ROOT}/src/google/protobuf/wire_format_lite.cc
#${PROTOBUF_ROOT}/src/google/protobuf/stubs/hash.cc
)

if(UNIX AND (CMAKE_COMPILER_IS_GNUCXX OR CV_ICC))
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
endif()

add_library(libprotobuf STATIC ${PROTOBUF_SRCS})
include_directories(${PROTOBUF_ROOT}/src ${CMAKE_CURRENT_BINARY_DIR})

set_target_properties(libprotobuf
PROPERTIES
OUTPUT_NAME libprotobuf
DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}"
ARCHIVE_OUTPUT_DIRECTORY ${3P_LIBRARY_OUTPUT_PATH}
)

if(ENABLE_SOLUTION_FOLDERS)
set_target_properties(libprotobuf PROPERTIES FOLDER "3rdparty")
endif()

if(NOT BUILD_SHARED_LIBS)
ocv_install_target(libprotobuf EXPORT OpenCVModules ARCHIVE DESTINATION ${OPENCV_3P_LIB_INSTALL_PATH} COMPONENT dev)
endif()
90 changes: 90 additions & 0 deletions modules/dnn/3rdparty/protobuf/CONTRIBUTORS.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
This file contains a list of people who have made large contributions
to the public version of Protocol Buffers.

Original Protocol Buffers design and implementation:
Sanjay Ghemawat <sanjay@google.com>
Jeff Dean <jeff@google.com>
Daniel Dulitz <daniel@google.com>
Craig Silverstein
Paul Haahr <haahr@google.com>
Corey Anderson <corin@google.com>
(and many others)

Proto2 C++ and Java primary author:
Kenton Varda <kenton@google.com>

Proto2 Python primary authors:
Will Robinson <robinson@google.com>
Petar Petrov <petar@google.com>

Large code contributions:
Jason Hsueh <jasonh@google.com>
Joseph Schorr <jschorr@google.com>
Wenbo Zhu <wenboz@google.com>

Large quantity of code reviews:
Scott Bruce <sbruce@google.com>
Frank Yellin
Neal Norwitz <nnorwitz@google.com>
Jeffrey Yasskin <jyasskin@google.com>
Ambrose Feinstein <ambrose@google.com>

Documentation:
Lisa Carey <lcarey@google.com>

Maven packaging:
Gregory Kick <gak@google.com>

Patch contributors:
Kevin Ko <kevin.s.ko@gmail.com>
* Small patch to handle trailing slashes in --proto_path flag.
Johan Euphrosine <proppy@aminche.com>
* Small patch to fix Python CallMethod().
Ulrich Kunitz <kune@deine-taler.de>
* Small optimizations to Python serialization.
Leandro Lucarella <llucax@gmail.com>
* VI syntax highlighting tweaks.
* Fix compiler to not make output executable.
Dilip Joseph <dilip.antony.joseph@gmail.com>
* Heuristic detection of sub-messages when printing unknown fields in
text format.
Brian Atkinson <nairb774@gmail.com>
* Added @Override annotation to generated Java code where appropriate.
Vincent Choini�re <Choiniere.Vincent@hydro.qc.ca>
* Tru64 support.
Monty Taylor <monty.taylor@gmail.com>
* Solaris 10 + Sun Studio fixes.
Alek Storm <alek.storm@gmail.com>
* Slicing support for repeated scalar fields for the Python API.
Oleg Smolsky <oleg.smolsky@gmail.com>
* MS Visual Studio error format option.
* Detect unordered_map in stl_hash.m4.
Brian Olson <brianolson@google.com>
* gzip/zlib I/O support.
Michael Poole <mdpoole@troilus.org>
* Fixed warnings about generated constructors not explicitly initializing
all fields (only present with certain compiler settings).
* Added generation of field number constants.
Wink Saville <wink@google.com>
* Fixed initialization ordering problem in logging code.
Will Pierce <willp@nuclei.com>
* Small patch improving performance of in Python serialization.
Alexandre Vassalotti <alexandre@peadrop.com>
* Emacs mode for Protocol Buffers (editors/protobuf-mode.el).
Scott Stafford <scott.stafford@gmail.com>
* Added Swap(), SwapElements(), and RemoveLast() to Reflection interface.
Alexander Melnikov <alm@sibmail.ru>
* HPUX support.
Oliver Jowett <oliver.jowett@gmail.com>
* Detect whether zlib is new enough in configure script.
* Fixes for Solaris 10 32/64-bit confusion.
Evan Jones <evanj@mit.edu>
* Optimize Java serialization code when writing a small message to a stream.
* Optimize Java serialization of strings so that UTF-8 encoding happens only
once per string per serialization call.
* Clean up some Java warnings.
* Fix bug with permanent callbacks that delete themselves when run.
Michael Kucharski <m.kucharski@gmail.com>
* Added CodedInputStream.getTotalBytesRead().
Kacper Kowalik <xarthisius.kk@gmail.com>
* Fixed m4/acx_pthread.m4 problem for some Linux distributions.
33 changes: 33 additions & 0 deletions modules/dnn/3rdparty/protobuf/COPYING.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
Copyright 2008, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Code generated by the Protocol Buffer compiler is owned by the owner
of the input file used when generating it. This code is not
standalone and requires a support library to be linked with it. This
support library is itself covered by the above license.
Loading