Skip to content
Permalink
Browse files

v1.0

  • Loading branch information...
netmeld committed Nov 3, 2017
0 parents commit ea00ebae88f824b819db492e2941b2d797d21c6e
Showing with 28,312 additions and 0 deletions.
  1. +2 −0 .gitignore
  2. +272 −0 CMakeLists.txt
  3. +84 −0 INSTALL.md
  4. +21 −0 LICENSE
  5. +595 −0 README.md
  6. +78 −0 clw/CMakeLists.txt
  7. +162 −0 clw/augment_args.cpp
  8. +42 −0 clw/augment_args.hpp
  9. +517 −0 clw/clw.cpp
  10. +84 −0 clw/clw.h2m
  11. +80 −0 common/CMakeLists.txt
  12. +282 −0 common/acls.cpp
  13. +133 −0 common/cve.cpp
  14. +157 −0 common/fork_exec.cpp
  15. +282 −0 common/networking.cpp
  16. +54 −0 common/parser_networking.cpp
  17. +62 −0 common/piped_input.cpp
  18. +1,259 −0 common/queries_common.cpp
  19. +144 −0 include/netmeld/common/acls.hpp
  20. +81 −0 include/netmeld/common/cve.hpp
  21. +67 −0 include/netmeld/common/fork_exec.hpp
  22. +200 −0 include/netmeld/common/impl/networking.ipp
  23. +131 −0 include/netmeld/common/networking.hpp
  24. +576 −0 include/netmeld/common/parser_networking.hpp
  25. +38 −0 include/netmeld/common/piped_input.hpp
  26. +162 −0 include/netmeld/common/queries_common.hpp
  27. +52 −0 man/CMakeLists.txt
  28. +54 −0 man/Template.h2m
  29. +135 −0 man/netmeld-man-page-from-readme.sh
  30. +48 −0 nm-fetch-ssh/CMakeLists.txt
  31. +57 −0 nm-fetch-ssh/commands-linux.txt
  32. +244 −0 nm-fetch-ssh/nm-fetch-ssh
  33. +29 −0 nm-fetch-ssh/nm-fetch-ssh.h2m
  34. +84 −0 nmdb-export-port-list/CMakeLists.txt
  35. +376 −0 nmdb-export-port-list/nmdb-export-port-list.cpp
  36. +40 −0 nmdb-export-port-list/nmdb-export-port-list.h2m
  37. +800 −0 nmdb-export-port-list/port-list.conf
  38. +76 −0 nmdb-export-tool-runs/CMakeLists.txt
  39. +291 −0 nmdb-export-tool-runs/nmdb-export-tool-runs.cpp
  40. +28 −0 nmdb-export-tool-runs/nmdb-export-tool-runs.h2m
  41. +74 −0 nmdb-graph-acls/CMakeLists.txt
  42. +495 −0 nmdb-graph-acls/nmdb-graph-acls.cpp
  43. +26 −0 nmdb-graph-acls/nmdb-graph-acls.h2m
  44. +75 −0 nmdb-graph-network/CMakeLists.txt
  45. +27 −0 nmdb-graph-network/images/cisco.svg
  46. +14 −0 nmdb-graph-network/images/desktop.svg
  47. +1 −0 nmdb-graph-network/images/docker.svg
  48. +82 −0 nmdb-graph-network/images/firewall.svg
  49. +64 −0 nmdb-graph-network/images/internet.svg
  50. +25 −0 nmdb-graph-network/images/juniper.svg
  51. +12 −0 nmdb-graph-network/images/router.svg
  52. +852 −0 nmdb-graph-network/images/server.svg
  53. +72 −0 nmdb-graph-network/images/switch.svg
  54. +60 −0 nmdb-graph-network/images/unknown.svg
  55. +1 −0 nmdb-graph-network/images/vm.svg
  56. +784 −0 nmdb-graph-network/nmdb-graph-network.cpp
  57. +33 −0 nmdb-graph-network/nmdb-graph-network.h2m
  58. +48 −0 nmdb-import-cisco/CMakeLists.txt
  59. +762 −0 nmdb-import-cisco/nmdb-import-cisco
  60. +38 −0 nmdb-import-cisco/nmdb-import-cisco.h2m
  61. +78 −0 nmdb-import-clw/CMakeLists.txt
  62. +312 −0 nmdb-import-clw/nmdb-import-clw.cpp
  63. +41 −0 nmdb-import-clw/nmdb-import-clw.h2m
  64. +77 −0 nmdb-import-hosts/CMakeLists.txt
  65. +352 −0 nmdb-import-hosts/nmdb-import-hosts.cpp
  66. +36 −0 nmdb-import-hosts/nmdb-import-hosts.h2m
  67. +77 −0 nmdb-import-ifconfig/CMakeLists.txt
  68. +652 −0 nmdb-import-ifconfig/nmdb-import-ifconfig.cpp
  69. +30 −0 nmdb-import-ifconfig/nmdb-import-ifconfig.h2m
  70. +77 −0 nmdb-import-ip-addr-show/CMakeLists.txt
  71. +514 −0 nmdb-import-ip-addr-show/nmdb-import-ip-addr-show.cpp
  72. +30 −0 nmdb-import-ip-addr-show/nmdb-import-ip-addr-show.h2m
  73. +77 −0 nmdb-import-ip-route-show/CMakeLists.txt
  74. +531 −0 nmdb-import-ip-route-show/nmdb-import-ip-route-show.cpp
  75. +30 −0 nmdb-import-ip-route-show/nmdb-import-ip-route-show.h2m
  76. +77 −0 nmdb-import-ipconfig/CMakeLists.txt
  77. +537 −0 nmdb-import-ipconfig/nmdb-import-ipconfig.cpp
  78. +28 −0 nmdb-import-ipconfig/nmdb-import-ipconfig.h2m
  79. +77 −0 nmdb-import-juniper-junos/CMakeLists.txt
  80. +944 −0 nmdb-import-juniper-junos/nmdb-import-juniper-junos.cpp
  81. +28 −0 nmdb-import-juniper-junos/nmdb-import-juniper-junos.h2m
  82. +77 −0 nmdb-import-juniper-screenos/CMakeLists.txt
  83. +1,299 −0 nmdb-import-juniper-screenos/nmdb-import-juniper-screenos.cpp
  84. +28 −0 nmdb-import-juniper-screenos/nmdb-import-juniper-screenos.h2m
  85. +78 −0 nmdb-import-nessus/CMakeLists.txt
  86. +498 −0 nmdb-import-nessus/nmdb-import-nessus.cpp
  87. +28 −0 nmdb-import-nessus/nmdb-import-nessus.h2m
  88. +78 −0 nmdb-import-nmap/CMakeLists.txt
  89. +657 −0 nmdb-import-nmap/nmdb-import-nmap.cpp
  90. +33 −0 nmdb-import-nmap/nmdb-import-nmap.h2m
  91. +78 −0 nmdb-import-pcap/CMakeLists.txt
  92. +459 −0 nmdb-import-pcap/nmdb-import-pcap.cpp
  93. +30 −0 nmdb-import-pcap/nmdb-import-pcap.h2m
  94. +77 −0 nmdb-import-ping/CMakeLists.txt
  95. +336 −0 nmdb-import-ping/nmdb-import-ping.cpp
  96. +34 −0 nmdb-import-ping/nmdb-import-ping.h2m
  97. +77 −0 nmdb-import-route/CMakeLists.txt
  98. +467 −0 nmdb-import-route/nmdb-import-route.cpp
  99. +33 −0 nmdb-import-route/nmdb-import-route.h2m
  100. +77 −0 nmdb-import-show-inventory/CMakeLists.txt
  101. +374 −0 nmdb-import-show-inventory/nmdb-import-show-inventory.cpp
  102. +29 −0 nmdb-import-show-inventory/nmdb-import-show-inventory.h2m
  103. +77 −0 nmdb-import-show-mac-address-table/CMakeLists.txt
  104. +394 −0 nmdb-import-show-mac-address-table/nmdb-import-show-mac-address-table.cpp
  105. +30 −0 nmdb-import-show-mac-address-table/nmdb-import-show-mac-address-table.h2m
  106. +77 −0 nmdb-import-windows-route/CMakeLists.txt
  107. +485 −0 nmdb-import-windows-route/nmdb-import-windows-route.cpp
  108. +29 −0 nmdb-import-windows-route/nmdb-import-windows-route.h2m
  109. +77 −0 nmdb-initialize/CMakeLists.txt
  110. +304 −0 nmdb-initialize/nmdb-initialize.cpp
  111. +52 −0 nmdb-initialize/nmdb-initialize.h2m
  112. +74 −0 nmdb-insert-acl/CMakeLists.txt
  113. +316 −0 nmdb-insert-acl/nmdb-insert-acl.cpp
  114. +30 −0 nmdb-insert-acl/nmdb-insert-acl.h2m
  115. +74 −0 nmdb-insert-address/CMakeLists.txt
  116. +183 −0 nmdb-insert-address/nmdb-insert-address.cpp
  117. +29 −0 nmdb-insert-address/nmdb-insert-address.h2m
  118. +74 −0 nmdb-insert-device/CMakeLists.txt
  119. +284 −0 nmdb-insert-device/nmdb-insert-device.cpp
  120. +30 −0 nmdb-insert-device/nmdb-insert-device.h2m
  121. +74 −0 nmdb-insert-network/CMakeLists.txt
  122. +216 −0 nmdb-insert-network/nmdb-insert-network.cpp
  123. +29 −0 nmdb-insert-network/nmdb-insert-network.h2m
  124. +77 −0 nmdb-remove-tool-run/CMakeLists.txt
  125. +133 −0 nmdb-remove-tool-run/nmdb-remove-tool-run.cpp
  126. +35 −0 nmdb-remove-tool-run/nmdb-remove-tool-run.h2m
  127. +52 −0 schema/000custom-types-create.sql
  128. +41 −0 schema/001mac-prefixes-tables-create.sql
  129. +189 −0 schema/002tool-runs-tables-create.sql
  130. +687 −0 schema/003tool-results-tables-create.sql
  131. +891 −0 schema/004device-tables-create.sql
  132. +46 −0 schema/005tool-runs-views-create.sql
  133. +529 −0 schema/006tool-results-views-create.sql
  134. +595 −0 schema/007device-views-create.sql
  135. +59 −0 schema/008tool-results-views-create.sql
  136. +43 −0 schema/009default-creds-tables-create.sql
  137. +57 −0 schema/010cve-tables-create.sql
  138. +55 −0 schema/Makefile
  139. +83 −0 schema/mac-prefixes-load
  140. +87 −0 test/CMakeLists.txt
  141. +136 −0 test/test_cve.cpp
  142. +125 −0 test/test_networking.cpp
  143. +578 −0 test/test_parser_networking.cpp
@@ -0,0 +1,2 @@
build
*~
@@ -0,0 +1,272 @@
# =============================================================================
# Copyright 2017 National Technology & Engineering Solutions of Sandia, LLC
# (NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S.
# Government retains certain rights in this software.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
# =============================================================================
# Maintained by Sandia National Laboratories <Netmeld@sandia.gov>
# =============================================================================

# ----------------------------------------------------------------------
# CMake Settings
# ----------------------------------------------------------------------


cmake_minimum_required(VERSION 2.8)

enable_testing()


# ----------------------------------------------------------------------
# Build Environment Settings
# ----------------------------------------------------------------------

set(PROJECT_GNU_COMMON_FLAGS
"-D_FORTIFY_SOURCE=2"
"-Os"
"-fdiagnostics-show-option"
"-pedantic-errors"
"-Wall"
"-Wextra"
"-Wformat=2"
"-Werror=format-security"
"-Wno-long-long"
"-Wfatal-errors"
"-Wcast-align"
"-Wcast-qual"
#"-Wconversion"
"-Wsign-conversion"
"-Wsign-compare"
"-Wfloat-equal"
"-Wlogical-op"
"-Wmissing-include-dirs"
"-Wmissing-declarations"
"-Wredundant-decls"
#"-Wshadow"
"-Wswitch-default"
#"-Wswitch-enum"
"-Wundef"
"-Wuninitialized"
"-Winit-self"
#"-Wunreachable-code"
"-Wwrite-strings"
#"-Winline"
"-Wpacked"
#"-Wpadded"
"-fstack-protector-all"
"-Wstack-protector"
"-ftrapv"
"-Wl,-z,relro"
"-Wl,-z,now"
)

set(PROJECT_GNU_C_FLAGS
"-std=c99"
"-Wbad-function-cast"
"-Wc++-compat"
"-Wmissing-prototypes"
"-Wstrict-prototypes"
"-Wnested-externs"
"-Wold-style-declaration"
"-Wold-style-definition"
"-Wtraditional-conversion"
)

set(PROJECT_GNU_CXX_FLAGS
"-std=c++14"
#"-Weffc++"
"-Wctor-dtor-privacy"
"-Wold-style-cast"
"-Woverloaded-virtual"
"-Wsign-promo"
"-Wstrict-null-sentinel"
#"-Wabi"
)


include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)

function(encode_compiler_flag_as_token string_value result_var)
string(STRIP "${string_value}" RESULT)
string(REPLACE " " "_" RESULT "${RESULT}")
string(REPLACE "," "_" RESULT "${RESULT}")
string(REPLACE "." "_" RESULT "${RESULT}")
string(REPLACE "=" "_" RESULT "${RESULT}")
string(REPLACE "/" "_" RESULT "${RESULT}")
string(REPLACE "-" "_" RESULT "${RESULT}")
string(REPLACE "+" "x" RESULT "${RESULT}")
set(${result_var} ${RESULT} PARENT_SCOPE)
endfunction()

function(set_pie_flags)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) # GNU C/C++
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE -pie" PARENT_SCOPE)
endif()
endfunction()

if(CMAKE_COMPILER_IS_GNUCC) # GNU C compiler (gcc)
foreach(LINE ${PROJECT_GNU_ASM_FLAGS})
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${LINE}")
endforeach(LINE)
endif()

if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) # GNU C/C++
set(CMAKE_EXE_LINKER_FLAGS_INIT "${CMAKE_EXE_LINKER_FLAGS_INIT} -fPIE")
endif()

if(CMAKE_COMPILER_IS_GNUCC) # GNU C compiler (gcc)
foreach(LINE ${PROJECT_GNU_MACHINE_FLAGS})
# Without checking, add each machine flag to CMAKE_C_FLAGS.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LINE}")
endforeach(LINE)
foreach(LINE ${PROJECT_GNU_COMMON_FLAGS} ${PROJECT_GNU_C_FLAGS})
# Check whether each requested flag is supported by this gcc.
encode_compiler_flag_as_token("${LINE}" FLAG)
check_c_compiler_flag("-Werror ${LINE}" GNUCC_SUPPORTS_FLAG_${FLAG})
if(GNUCC_SUPPORTS_FLAG_${FLAG})
# Add each supported flag to CMAKE_C_FLAGS.
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LINE}")
endif()
endforeach(LINE)
endif()

if(CMAKE_COMPILER_IS_GNUCXX) # GNU C++ compiler (g++)
foreach(LINE ${PROJECT_GNU_MACHINE_FLAGS})
# Without checking, add each machine flag to CMAKE_CXX_FLAGS.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LINE}")
endforeach(LINE)
foreach(LINE ${PROJECT_GNU_COMMON_FLAGS} ${PROJECT_GNU_CXX_FLAGS})
# Check whether each requested flag is supported by this g++.
encode_compiler_flag_as_token("${LINE}" FLAG)
check_cxx_compiler_flag("-Werror ${LINE}" GNUCXX_SUPPORTS_FLAG_${FLAG})
if(GNUCXX_SUPPORTS_FLAG_${FLAG})
# Add each supported flag to CMAKE_CXX_FLAGS.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LINE}")
endif()
endforeach(LINE)
endif()

# Print the compiler and linker flags for verification purposes.
message("CMAKE_C_FLAGS = ${CMAKE_C_FLAGS}")
message("CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}")

message("CMAKE_EXE_LINKER_FLAGS = ${CMAKE_EXE_LINKER_FLAGS}")
message("CMAKE_C_COMPILE_OPTIONS_PIE = ${CMAKE_C_COMPILE_OPTIONS_PIE}")
message("CMAKE_CXX_COMPILE_OPTIONS_PIE = ${CMAKE_CXX_COMPILE_OPTIONS_PIE}")

# ----------------------------------------------------------------------

set(NETMELD_CONF_DIR "${CMAKE_INSTALL_PREFIX}/etc/netmeld")
set(NETMELD_IMAGE_DIR "${CMAKE_INSTALL_PREFIX}/share/netmeld/images")

add_definitions(
-DNETMELD_CONF_DIR="${NETMELD_CONF_DIR}"
-DNETMELD_IMAGE_DIR="${NETMELD_IMAGE_DIR}"
-DDEFAULT_DB_NAME="site"
)

include_directories(
include
)


# ----------------------------------------------------------------------
# Libraries that everything needs to link against for various reasons
# ----------------------------------------------------------------------

find_package(Boost REQUIRED
date_time
)

find_program(HELP2MAN help2man)
if (NOT HELP2MAN)
message(FATAL_ERROR "help2man not found, aborting.")
endif()



# ----------------------------------------------------------------------

# Libraries
add_subdirectory(common)

# Executables
add_subdirectory(clw)

add_subdirectory(nmdb-export-port-list)
add_subdirectory(nmdb-export-tool-runs)

add_subdirectory(nmdb-graph-acls)
add_subdirectory(nmdb-graph-network)

add_subdirectory(nmdb-import-cisco)
add_subdirectory(nmdb-import-hosts)
add_subdirectory(nmdb-import-ifconfig)
add_subdirectory(nmdb-import-ipconfig)
add_subdirectory(nmdb-import-ip-addr-show)
add_subdirectory(nmdb-import-ip-route-show)
add_subdirectory(nmdb-import-juniper-junos)
add_subdirectory(nmdb-import-juniper-screenos)
add_subdirectory(nmdb-import-nessus)
add_subdirectory(nmdb-import-nmap)
add_subdirectory(nmdb-import-pcap)
add_subdirectory(nmdb-import-ping)
add_subdirectory(nmdb-import-route)
add_subdirectory(nmdb-import-windows-route)
add_subdirectory(nmdb-import-show-inventory)
add_subdirectory(nmdb-import-show-mac-address-table)
add_subdirectory(nmdb-import-clw)

add_subdirectory(nmdb-insert-acl)
add_subdirectory(nmdb-insert-address)
add_subdirectory(nmdb-insert-device)
add_subdirectory(nmdb-insert-network)

add_subdirectory(nmdb-initialize)

add_subdirectory(nmdb-remove-tool-run)

add_subdirectory(nm-fetch-ssh)

# Non-tool specific man page(s)
add_subdirectory(man)

# Unit tests
add_subdirectory(test)

# ----------------------------------------------------------------------

install(
FILES
schema/000custom-types-create.sql
schema/001mac-prefixes-tables-create.sql
schema/002tool-runs-tables-create.sql
schema/003tool-results-tables-create.sql
schema/004device-tables-create.sql
schema/005tool-runs-views-create.sql
schema/006tool-results-views-create.sql
schema/007device-views-create.sql
schema/008tool-results-views-create.sql
DESTINATION share/netmeld/schema/
)

# ----------------------------------------------------------------------

@@ -0,0 +1,84 @@
# Introduction

These instructions assume that you are installing Netmeld onto either
Kali 2.0, Debian stable/testing (currently 9/10). If you are using a different distribution,
package names and availability may differ. It has also been reported as
successfully installing and runnable on Ubuntu 16.04.

Netmeld depends on features in PostgreSQL 9.2 or later.
Kali 2.0 and Debian 8.x both include PostgreSQL 9.4, meeting this requirement.
If your system has an older version of PostgreSQL (such as 9.1),
you will need to upgrade to PostgreSQL 9.2 or later.


# Install the Dependencies

```
aptitude update
aptitude safe-upgrade
# Required to build
aptitude install \
build-essential cmake make gcc g++ help2man \
libboost-all-dev libboost-dev libpqxx-dev libpugixml-dev libpcap0.8-dev
# Required to run
aptitude install \
postgresql postgresql-client postgresql-contrib postgresql-autodoc \
python python-psycopg2 python-ipaddr python-setuptools \
python3 python3-psycopg2 python3-setuptools \
graphviz nmap
```

There are not yet Debian/Kali packages for the ciscoconfparse Python library.
Download and install the ciscoconfparse library from
https://pypi.python.org/pypi/ciscoconfparse. Ensure you follow install
procedures for the version mapped to `python` (probably version 2.7 by default).


# Make `root` a DB admin/superuser

```
su postgres
createuser -s root
exit
```


# Build and Install the Netmeld Software

```
cd netmeld
mkdir build
cd build
cmake ..
make
make test
make install
```
Note: On fresh bare installs, you may have to run `ldconfig` to configure the
dynamic linker run time bindings.

# Enable and Start the Postgres Database Service

```
systemctl enable postgresql
systemctl restart postgresql
```

# Create the Netmeld Database

The default database is named `site`.

```
nmdb-initialize
```

To create a non-default database, `nmdb-initialize --db-name [dbname]`.

To create a visualization to assist in understanding the database schema,
assuming using the default database name of `site`:
```
postgresql_autodoc -d site -t dot
dot -Granksep=3.0 -Gnodesep=0.5 -Tpng -o site.png site.dot
```
21 LICENSE
@@ -0,0 +1,21 @@
Copyright 2017 National Technology & Engineering Solutions of Sandia, LLC
(NTESS). Under the terms of Contract DE-NA0003525 with NTESS, the U.S.
Government retains certain rights in this software.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

0 comments on commit ea00eba

Please sign in to comment.
You can’t perform that action at this time.