diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..614b7fb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+build/
+.idea
+cmake-build-debug
+Lib
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..73f69e0
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..c7e59f5
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+pro
\ No newline at end of file
diff --git a/.idea/cids-server.iml b/.idea/cids-server.iml
new file mode 100644
index 0000000..f08604b
--- /dev/null
+++ b/.idea/cids-server.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..79b3c94
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..424a3a2
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..5445c04
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,60 @@
+cmake_minimum_required(VERSION 3.00)
+project(cids_server_new)
+
+#Global Setting
+SET(CMAKE_CXX_FLAGS -pthread)
+
+SET(CMAKE_CXX_STANDARD 14)
+
+#Thir Lib
+
+ #find- nanodbc
+if(NOT TARGET nanodbc)
+ find_package(nanodbc CONFIG REQUIRED)
+endif()
+
+ #find- rapidjson
+find_package(RapidJSON REQUIRED)
+
+ #already put muduo in the project
+
+#add include
+include_directories(Include)
+include_directories(Include/Third_Lib)
+
+include_directories(${RapidJSON_INCLUDE_DIR})
+#muduo in Include/Third_lib
+#nanodbc in Include/Third_lib
+
+#add lib
+link_directories(Lib)
+
+#My src
+aux_source_directory(Src/Center CENTER_SRC)
+aux_source_directory(Src/Mirror MIRROR_SRC)
+aux_source_directory(Src/Common COMMON_SRC)
+
+#生成可执行文件
+
+add_executable(center ${CENTER_SRC} ${COMMON_SRC})
+add_executable(mirror ${MIRROR_SRC} ${COMMON_SRC})
+
+#Center绑定包
+target_link_libraries(center libmuduo_base.a libmuduo_net.a) #绑定muduo包
+
+
+#Center修改输出属性
+set_target_properties(center PROPERTIES OUTPUT_NAME cids_Center)
+set_target_properties(center PROPERTIES PREFIX "")
+set_target_properties(center PROPERTIES SUFFIX "")
+
+
+#Mirror绑定包
+target_link_libraries(mirror libmuduo_base.a libmuduo_net.a) #绑定muduo包
+target_link_libraries(mirror ${RapidJSON_LIBS}) #绑定rapidjson包
+target_link_libraries(mirror nanodbc) #绑定nanodbc包
+
+#Mirror修改输出树形
+set_target_properties(mirror PROPERTIES OUTPUT_NAME cids_Mirror)
+set_target_properties(mirror PROPERTIES PREFIX "")
+set_target_properties(mirror PROPERTIES SUFFIX "")
diff --git a/README.md b/README.md
index f468905..9b4d484 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,176 @@
# cids-servers
+
center server ,mirror server and driver
+
+
+
+your project path and other library project path should be like this:
+
+
+
+- dir
+
+ - cids-server
+
+ - rapidjson
+ - nanodbc
+
+ - muduo
+
+
+
+after clone this project
+
+
+
+## Imporve projectPath
+
+```bash
+-- mkdir lib #to find libraries
+
+-- mkdir include #to find headers
+```
+
+------
+
+
+
+## Compile rapidJson
+
+```bash
+git clone #download rapidjson
+
+cd rapidjson #change to rapidjson dir
+
+mkdir build #Put compiler output in build file
+
+cd build #change to build dir
+
+cmake .. #generate Makefile
+
+make #generate other things you can add '-j4' after 'make' to make it faster
+
+sudo make install #generate lib files and put them in /usr/lib(maybe)
+```
+
+------
+
+
+
+## Compile nanodbc
+
+Before you compile nanodbc, you should download UnixOdbc:
+
+### download mariadb and configure
+
+### download unixodbc
+
+` sudo apt install unixodbc `
+
+### download unixODBC-2.3.0.tar.gz -> to download odbc_config
+
+Download unixODBC-2.3.0.tar.gz ,you can also use `sudo apt install unixodbc ` to download but it's unuseful to my system
+
+```bash
+tar -xzvf unixODBC-2.3.0.tar.gz
+
+cd unixODBC-2.3.0.tar.gz
+
+./configure --enable-gui=no
+
+make
+
+sudo make install
+
+odbc_config --version #check odbc_config is installed
+
+```
+
+### download odbc-mariadb
+{
+ `sudo apt install odbc-mariadb`
+
+}
+
+### configure odbc-mariadb
+
+see complete info on "https://mariadb.com/kb/en/creating-a-data-source-with-mariadb-connectorodbc/"
+
+[MariaDB ODBC 3.0 Driver]
+Description = MariaDB Connector/ODBC v.3.0
+Driver=/usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
+
+
+
+```bash
+git clone #download nanodbc
+
+cd nanodbc #change to nanodbc dir
+
+mkdir build #Put compiler output in build file
+
+cd build #change to build dir
+
+cmake .. #generate Makefile
+
+make #generate other things you can add '-j4' after 'make' to make it faster
+
+sudo make install #add lib to your env
+
+```
+add these statements to your CMakeLists.txt
+
+```cmake
+if (NOT TARGET nanodbc)
+ find_package(nanodbc CONFIG REQUIRED)
+endif()
+
+#add exe here
+
+target_link_libraries(SRC nanodbc)
+
+
+
+------
+
+
+
+## Compiler muduo
+
+```bash
+git clone #download muduo
+
+cd muduo #change to muduo dir
+
+cp -r muduo ../cids-servser/include #copy include file to projectPath/include
+
+mkdir build #Put compiler output in build file
+
+cd build #change to build dir
+
+cmake .. #generate Makefile
+
+make #generate other things you can add '-j4' after 'make' to make it faster
+
+cd lib #change to lib dir
+
+cp * ../../../cids-servsers/lib #put lib file to projectPath/lib
+
+```
+
+------
+
+
+
+## now your project will like this:
+
+- cids-servsers
+ - include
+ - muduo
+ - net
+ - base
+ - nanodbc
+ - lib
+ - libxxx.a #7/10 lib files
+
+
diff --git a/Src/Center/Center.cpp b/Src/Center/Center.cpp
new file mode 100644
index 0000000..ecf12bd
--- /dev/null
+++ b/Src/Center/Center.cpp
@@ -0,0 +1,450 @@
+#include
+
+void center::start()
+{
+ //任务队列最大数量
+ pool_.setMaxQueueSize(30);
+ //用std::hard_ware_concurrency()确定硬件支持的最大并发数量, 该数量 * 2为此程序运行时占用线程数
+ pool_.start(static_cast(2 * std::thread::hardware_concurrency()));
+ auto thd_start = [&](const char* info){
+ std::clog << "thread start: " << info << std::endl;
+ };
+ //提交定时读取配置文件的任务,监听cli登录, mir心跳的任务
+ this->pool_.run( [this](){ read_config(); });
+ thd_start("read config");
+ this->pool_.run( [this](){ wait_cli_login(); });
+ thd_start("wait cli login");
+ this->pool_.run( [this](){ listen_mir_beat(); });
+ thd_start("listen mir beat");
+ this->pool_.run( [this](){ clear_mirs_data(); });
+ thd_start("clear mir data");
+
+ //设置原子锁的值
+ this->atom_mutex_ = false;
+
+ //日志输出的文件和文件路径在telemeter命名空间下
+
+}
+
+void center::read_config()
+{
+ static std::string config_file_path {"CenterConfig.txt"};
+ static std::ifstream in {config_file_path, std::ios::in};
+ Setting set {}; memset(&set, 0, sizeof(Setting));
+ uint next_read_interval {15};
+
+ auto read_data = [&]() {
+ if(!in.is_open())
+ in.open(config_file_path, std::ios::in);
+ std::string line {};
+ while (in.good())
+ {
+ std::getline(in, line, '\n');
+ if(line.size() < 2 || line.front() == '/')
+ continue;
+ else if(line.find("next_read") != std::string::npos)
+ next_read_interval = std::stoi(std::string(line.begin() + line.find_first_of('[') + 1,line.begin() + line.find_first_of(']')));
+ else if(line.find("load_record") != std::string::npos)
+ set.mir_load_record_interval_ = std::stoi(std::string(line.begin() + line.find_first_of('[') + 1,line.begin() + line.find_first_of(']')));
+ else if(line.find("load_dblog") != std::string::npos)
+ set.mir_dblog_interval_ = std::stoi(std::string(line.begin() + line.find_first_of('[') + 1, line.begin() + line.find_first_of(']')));
+ else if(line.find("max_disbeat") != std::string::npos)
+ set.mir_max_disbeat_time_ = std::stoi(std::string(line.begin() + line.find_first_of('[') + 1,line.begin() + line.find_first_of(']')));
+ else if(line.find("login_cache") != std::string::npos)
+ set.cli_login_cache_time_ = std::stoi(std::string(line.begin() + line.find_first_of('[') + 1, line.begin() + line.find_first_of(']')));
+ else if(line.find("balance") != std::string::npos)
+ set.load_balance_interval_ = std::stoi(std::string(line.begin() + line.find_first_of('[') + 1, line.begin() + line.find_first_of(']')));
+ else if(line.find("clear_mirs") != std::string::npos)
+ set.clear_mirs_data_time_ = std::stoi(std::string(line.begin() + line.find_first_of('[') + 1, line.begin() + line.find_first_of(']')));
+ }
+ };
+
+ auto swap = [](Setting* src, Setting* dst){
+ Setting* tmp = dst;
+ dst = src;
+ src = tmp;
+ };
+
+ while(true)
+ {
+ //读取配置文件
+ read_data();
+
+ //复制到配置副本中
+ memcpy(telemeter::setting_copy, &set, sizeof(Setting));
+
+ //交换主副配置指针
+ swap(telemeter::setting_copy, telemeter::setting); //atomic operation
+
+ LOG_INFO << "read config, interval: " << next_read_interval << "s, current setting:";
+ LOG_INFO << "load record interval: " << telemeter::setting->mir_load_record_interval_;
+ LOG_INFO << "load database interval: " << telemeter::setting->mir_dblog_interval_;
+ LOG_INFO << "load balance interval: " << telemeter::setting->load_balance_interval_;
+ LOG_INFO << "max disbeat interval: " << telemeter::setting->mir_max_disbeat_time_;
+ LOG_INFO << "clear mirs data time: " << telemeter::setting->clear_mirs_data_time_;
+ LOG_INFO << "login cache time: " << telemeter::setting->cli_login_cache_time_;
+ //挂起该进程
+ sleep(next_read_interval);
+ }
+}
+
+void center::wait_cli_login()
+{
+ static IP available_mir {0};
+ static size_t login_count {0};
+ auto load_balance_warpper = [&]()
+ {
+ available_mir = this->load_balance();
+ };
+
+ //纠正树形结构中cli信息的任务, 将交给线程池异步执行
+ auto correct_tree_structure = [&](uuid cli_id){
+ LOG_INFO << "correct info in tree-like structure of client id: " << cli_id;
+ for(auto& kvp : mirs_data_)
+ {
+ if(kvp.second.contains(cli_id))
+ {
+ kvp.second.erase_cli(cli_id);
+ }
+ }
+
+ };
+
+ //用于接收数据的缓冲区
+ std::array packet {0};
+ std::array uidbuf {0};
+ std::array statebuf {0};
+ //创建socket
+ int sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
+ //服务端addr和客户端addr, 后者保存发送方的信息
+ struct sockaddr_in addr_serv, addr_cli;
+
+ //初始化addr_serv, 无需初始化addr_cli
+ memset(&addr_serv, 0, sizeof(sockaddr_in));
+ memset(&addr_cli, 0, sizeof(sockaddr_in));
+ addr_serv.sin_family = AF_INET; //使用IPV4地址
+ addr_serv.sin_port = htons(static_cast(port::kCLI_LOGIN_)); //端口
+ /* INADDR_ANY表示不管是哪个网卡接收到数据,只要目的端口是SERV_PORT,就会被该应用程序接收到 */
+ //int n = inet_aton("172.24.153.237", &addr_serv.sin_addr);
+ addr_serv.sin_addr.s_addr = htonl(INADDR_ANY); //自动获取IP地址
+ unsigned int place_holder_1 = sizeof(addr_cli);
+ //const int place_holder_2 = 1;
+
+ //进入循环前统一进行异常检测
+ if(sock_fd < 0)
+ throw std::runtime_error("Init socket failed in port::kCLI_LOGIN_");
+ //解决bind绑定失败的遗留
+ //setsockopt(sock_fd,SOL_SOCKET,SO_REUSEADDR,&place_holder_2,sizeof(place_holder_2));
+ int ret = bind(sock_fd, (sockaddr*)&addr_serv, sizeof(addr_serv));
+ if(ret < 0)
+ throw std::runtime_error("Bind socket failed in port::kCLI_LOGIN_");
+
+ //线程主循环
+ while(true)
+ {
+ char recv_buf[8];
+ memset(recv_buf, 0, sizeof(recv_buf));
+ int recv_num = recvfrom(sock_fd,recv_buf, protocol::kCLI_LOGIN_PACSIZE_, MSG_WAITALL, (sockaddr*)&addr_cli, &place_holder_1);
+ //MSG_WAITALL:要求阻塞操作,直到请求得到完整的满足。
+ //如果捕捉到信号,错误或者连接断开发生,或者下次被接收的数据类型不同,仍会返回少于请求量的数据。
+
+ //可能是阻塞超时, 进行下次循环
+ if(recv_num < 0){
+ LOG_WARN << "recv from client error";
+ continue;
+ }
+
+ for(int i = 0; i < 8; i++)
+ packet[i] = recv_buf[i];
+ //按照协议格式进行解析, 并且得到ip等其他信息
+ memcpy(uidbuf.data(), packet.data(), protocol::kCLI_LOGIN_UID_);
+ for(auto& ch :uidbuf)
+ ch += '0';
+ size_t uid = std::atol(uidbuf.data());
+ memcpy(statebuf.data(), packet.data() + protocol::kCLI_LOGIN_UID_, protocol::kCLI_LOGIN_STATE_);
+ size_t state = statebuf[0];
+ //state暂时不做处理
+
+ //是否在cookie中找到登陆记录
+ bool cached {false};
+
+ //登录或者重新连接
+ if(!this->cookie_.empty())
+ {
+ while(true)
+ {
+ //空闲状态可以使用
+ if(atom_mutex_ == false)
+ {
+ //进入临界区
+ atom_mutex_ = true;
+ for(uuid cache : cookie_)
+ {
+ //找到登陆痕迹直接掠过
+ if(cache == uid)
+ {
+ cached = true;
+ break;
+ }
+ }
+ //结束临界区
+ atom_mutex_ = false;
+ break;
+ }
+ else //锁被pop队头或者push任务的任务使用中
+ {
+ continue;
+ }
+ }
+ if(cached == true)
+ {
+ //此处应当分析包中state来统计网络不畅的情况, 暂时忽略
+ continue;
+ }
+ }
+
+ //cookie为空或者没有找到时, 记录cli登录信息
+ if(cached == false)
+ {
+ if(this->mirs_data_.size() == 0)
+ memset(&available_mir, 0, sizeof(IP));
+ else if(this->mirs_data_.size() == 1)
+ available_mir = (*mirs_data_.begin()).first;
+ //回复可用mir地址
+ char send_buf[4] = {available_mir.seg0,available_mir.seg1,available_mir.seg2,available_mir.seg3};
+ int send_num = sendto(sock_fd, send_buf, protocol::kCENT_RESPONSE_PACSIZE_, 0, (sockaddr*)&addr_cli, sizeof(addr_cli));
+ login_count++;
+
+ //数据库记录日志
+ //dblog(cli_login, uid);
+ LOG_INFO << "client login, uid: " << uid << ", reply mirs ip: " << available_mir.to_string();
+ if(this->all_cli_.count(uid) == 0)
+ this->all_cli_.insert(uid);
+ else
+ this->pool_.run(std::bind(correct_tree_structure, uid));
+ while(true)
+ {
+ //空闲状态可以使用
+ if(atom_mutex_ == false)
+ {
+ //进入临界区
+ atom_mutex_ = true;
+ //这个push操作似乎不需要上锁
+ cookie_.push_back(uid);
+ //结束临界区
+ atom_mutex_ = false;
+
+ //设置一段时间后pop掉队头的任务
+ this->pool_.run( [this, &uid](){
+ sleep(telemeter::setting->cli_login_cache_time_);
+ while(true)
+ {
+ if(atom_mutex_ == false)
+ {
+ atom_mutex_ = true;
+ uuid id = cookie_.front();
+ cookie_.pop_front();
+ atom_mutex_ = false;
+ LOG_INFO << "erase login cache of client: " << id;
+ }
+ else{
+ LOG_INFO << "cached client login, no reply for client: " << uid;
+ continue;
+ }
+
+ }
+ });
+ break;
+ }
+ else //锁被pop队头或者查询任务使用中
+ {
+ LOG_INFO << "cached client login, no reply for client : " << uid;
+ continue;
+ }
+ }
+ }
+ //重置输入缓冲区
+ packet.fill(0);
+
+ if(login_count >= telemeter::setting->load_balance_interval_)
+ {
+ //提交给线程池而不阻塞在io线程, 对available_mir的修改是跨线程操作变量
+ this->pool_.run(load_balance_warpper);
+ login_count = 0;
+ }
+ }
+}
+
+void center::listen_mir_beat()
+{
+ IP mir_ip {0}; //心跳的mir ip
+ size_t all_beat_count {0}; //用于判活算法
+
+ //用于接收数据的缓冲区
+ std::array packet {0};
+ std::array ipbuf {0};
+ std::array loadbuf {0};
+ //创建socket
+ int sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
+ //服务端addr和客户端addr, 后者保存发送方的信息
+ struct sockaddr_in addr_serv, addr_mir;
+
+ //初始化addr_serv, 无需初始化addr_cli
+ memset(&addr_serv, 0, sizeof(sockaddr_in));
+ memset(&addr_mir, 0, sizeof(sockaddr_in));
+ addr_serv.sin_family = AF_INET; //使用IPV4地址
+ addr_serv.sin_port = htons(port::kMIR_BEAT_); //端口
+ /* INADDR_ANY表示不管是哪个网卡接收到数据,只要目的端口是SERV_PORT,就会被该应用程序接收到 */
+ addr_serv.sin_addr.s_addr = htonl(INADDR_ANY); //自动获取IP地址
+ unsigned int place_holder_1 = sizeof(addr_mir);
+
+ //进入循环前统一进行异常检测
+ if(sock_fd < 0)
+ throw std::runtime_error("Init socket failed in port::kMIR_BEAT_");
+ if(bind(sock_fd, (sockaddr*)&addr_serv, sizeof(addr_serv)) < 0)
+ throw std::runtime_error("Bind socket failed in port::KMIR_BEAT_");
+
+
+ //线程主循环
+ while(true)
+ {
+ char recv_buf[8] = {0};
+ memset(recv_buf, 0, sizeof(recv_buf));
+ int recv_num = recvfrom(sock_fd, recv_buf, protocol::kMIR_BEAT_PACSIZE_, MSG_WAITALL, (sockaddr*)&addr_mir, &place_holder_1);
+ //MSG_WAITALL:要求阻塞操作,直到请求得到完整的满足。
+ //如果捕捉到信号,错误或者连接断开发生,或者下次被接收的数据类型不同,仍会返回少于请求量的数据。
+
+ //可能是阻塞超时, 进行下次循环
+ if(recv_num < 0) {
+ LOG_WARN << "recv from mirror error";
+ continue;
+ }
+
+ for(int i = 0; i < 8; i++)
+ packet[i] = recv_buf[i];
+ //按照协议格式进行解析, 并且得到ip等其他信息
+ memcpy(ipbuf.data(), packet.data(), protocol::kMIR_BEAT_IP_);
+
+ memcpy(loadbuf.data(), packet.data() + protocol::kMIR_BEAT_IP_, protocol::kMIR_BEAT_LOAD_);
+
+ mir_ip = IP(ipbuf[0], ipbuf[1], ipbuf[2], ipbuf[3]);
+ LOG_INFO << mir_ip.to_string() << " send packet " << packet.data();
+
+ if(mirs_data_.count(mir_ip) == 0)
+ {
+ mirs_data_.insert({mir_ip, MirDescript()});
+ //dblog(MIR_LIGIN);
+ }
+ else
+ {
+ mirs_data_[mir_ip].reset_beat(telemeter::setting->mir_max_disbeat_time_);
+ //记录负载情况到缓存
+ //mirs_data_[mir_ip].recordLoad();
+ all_beat_count++;
+ if(all_beat_count >= mirs_data_.size() - 1)
+ {
+// for(auto& kvp : mirs_data_)
+// {
+// if(kvp.second.decre_and_get_beat() <= 0);
+// {
+// //说明有mir掉线了
+// int i = 3; //占位避免编译器报warning
+// //dblog(MIR_DISCONECT);
+// mirs_data_.erase(kvp.first);
+// LOG_INFO << "mirror disconnect: " << const_cast(&kvp.first)->to_string();
+// }
+// }
+ }
+ }
+
+ }
+}
+
+void center::clear_mirs_data()
+{
+ auto get_next_zeropoint = [](){
+ time_t t = time(NULL);
+ struct tm * tm= localtime(&t);
+ tm->tm_mday += 1;
+ tm->tm_hour = 0;
+ tm->tm_min = 0;
+ tm->tm_sec = 0;
+ return mktime(tm);
+ };
+
+ while(true)
+ {
+ sleep(get_next_zeropoint() - time(NULL) + telemeter::setting->clear_mirs_data_time_);
+ mirs_data_.clear();
+ all_cli_.clear();
+ LOG_INFO << "clear mirrors data successfully";
+ }
+}
+
+IP center::load_balance()
+{
+ LOG_INFO << "load balance occurs";
+ //暂时不优化
+ for(auto& kvp : mirs_data_)
+ {
+ if(kvp.second.get_load_level() == LoadLevel::light)
+ return kvp.first;
+ }
+
+ for(auto& kvp : mirs_data_)
+ {
+ if(kvp.second.get_load_level() == LoadLevel::medium)
+ return kvp.first;
+ }
+
+ for(auto& kvp : mirs_data_)
+ {
+ if(kvp.second.get_load_level() == LoadLevel::untapped)
+ {
+ kvp.second.set_load_level(LoadLevel::light);
+ return kvp.first;
+ }
+ }
+
+ for(auto& kvp : mirs_data_)
+ {
+ if(kvp.second.get_load_level() == LoadLevel::heavy)
+ {
+ return kvp.first;
+ }
+ }
+
+ //没有任何一个可用的服务器
+ throw std::runtime_error("No available mir to dispatch");
+}
+
+void center::log_info(std::exception& e, const char* crush_file)
+{
+ //以后要改到json里面, 还缺详细个数的输出
+ static std::ofstream log(crush_file, std::ios::out);
+ if(!log.is_open())
+ log.open(crush_file, std::ios::out);
+ log <<"crush time: " << time(nullptr) <<"\nreason: " << e.what() << std::endl;
+
+ log << "Mirrors & dispatched client:\n";
+ for(auto& kvp : mirs_data_)
+ {
+ log << "ip: " << const_cast(&kvp.first)->to_string()
+ << " load state: " << tostring(kvp.second.get_load_level()) << '\n';
+ log << "dispatched client: \n";
+ for(auto uid : kvp.second.get_dispatched_cli())
+ {
+ log << uid << '\n';
+ }
+ }
+
+ log << "cookie mutex: " << atom_mutex_ << '\n';
+ if(cookie_.size() > 0)
+ {
+ log << "cookie :\n";
+ for(auto uid : cookie_)
+ {
+ log << uid << '\n';
+ }
+ }
+}
diff --git a/Src/Center/CenterMain.cpp b/Src/Center/CenterMain.cpp
new file mode 100644
index 0000000..ee6095e
--- /dev/null
+++ b/Src/Center/CenterMain.cpp
@@ -0,0 +1,19 @@
+#include
+
+#include
+
+int main()
+{
+ static const char* crush_log = "../crush.txt";
+
+ center ctr;
+ try
+ {
+ ctr.start();
+ }
+ catch(std::exception& e)
+ {
+ std::cerr << e.what() << '\n';
+ ctr.log_info(e, crush_log);
+ }
+}
diff --git a/Src/Center/MirDescript.cpp b/Src/Center/MirDescript.cpp
new file mode 100644
index 0000000..e69de29
diff --git a/Src/Common/ServerBase.cpp b/Src/Common/ServerBase.cpp
new file mode 100644
index 0000000..ee821af
--- /dev/null
+++ b/Src/Common/ServerBase.cpp
@@ -0,0 +1,59 @@
+#include
+
+bool scu_time::operator=(const scu_time &rhs) {
+ return this->hour == rhs.hour && this->minute == rhs.minute;
+}
+
+scu_time scu_time::operator-(const scu_time &rhs) const{
+ size_t lMinute;
+ if (*this < rhs)
+ lMinute = (this->hour + 24) * 60 + this->minute;
+ else
+ lMinute = this->hour * 60 + this->minute;
+ size_t rMinute = rhs.hour * 60 + rhs.minute;
+ size_t nHour = (lMinute - rMinute) % 60;
+ size_t nMinute = (lMinute - rMinute) - nHour * 60;
+ return scu_time(nHour, nMinute);
+}
+
+bool scu_time::operator<(const scu_time &rhs) const {
+ if (this->hour > rhs.hour) {
+ return false;
+ } else {
+ if (this->minute >= rhs.minute) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+}
+
+bool scu_time::operator<=(const scu_time &rhs) const {
+ if (this->hour > rhs.hour) {
+ return false;
+ } else {
+ if (this->minute > rhs.minute)
+ return false;
+ else
+ return true;
+ }
+}
+
+unsigned scu_time::toSeconds() {
+ return this->hour * 3600 + this->minute * 60;
+}
+
+
+scu_time scu_time::toScutime(const muduo::Timestamp ×tamp){
+ long allSeconds = std::stol(timestamp.toString());
+ int seconds = allSeconds % 86400;
+ size_t hour = seconds / 3600;
+ size_t minute = (seconds - hour * 3600) / 60;
+ if(hour >= 16)
+ hour -= 16;
+ else
+ hour += 8;
+ return scu_time(hour, minute);
+}
+
+
diff --git a/Src/Mirror/Mirror.cpp b/Src/Mirror/Mirror.cpp
new file mode 100644
index 0000000..086ac45
--- /dev/null
+++ b/Src/Mirror/Mirror.cpp
@@ -0,0 +1,759 @@
+#include
+
+//如果最后一节课.置空字符串+置零
+using std::placeholders::_1;
+using std::placeholders::_2;
+using std::placeholders::_3;
+
+void Mirror::init() {
+
+
+ auto judge_lesson_order = [this](const std::vector &time_table) -> size_t {
+ scu_time now{scu_time::toScutime(muduo::Timestamp::now())};
+ if (now < time_table[0])
+ return 0;
+ for (size_t i = 1; i < time_table.size(); i++) {
+ if (now < time_table[i])
+ return i;
+ }
+ return 12;
+ };
+
+ //读取配置文件
+ static std::string config_file_path = this->config_file_path;
+
+ static std::ifstream in{config_file_path, std::ios::in};
+
+ if (!in.is_open())
+ in.open(config_file_path, std::ios::in);
+
+ std::string line{};
+
+ while (in.good()) {
+ std::getline(in, line, '\n');
+ if (line.size() < 2 || line.front() == '/')
+ continue;
+ else if (line.find("mir_heart") != std::string::npos)
+ telemeter::setting->mir_heart_beat_interval = std::stoi(
+ std::string(line.begin() + line.find_first_of('[') + 1, line.begin() +line.find_first_of(']')));
+ else if (line.find("mir_load") != std::string::npos)
+ telemeter::setting->mir_load_report_interval = std::stoi(
+ std::string(line.begin() +line.find_first_of('[') + 1,line.begin() + line.find_first_of(']')));
+ else if (line.find("img_path") != std::string::npos)
+ telemeter::setting->img_path = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("db_source") != std::string::npos)
+ telemeter::setting->db_source = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("db_user") != std::string::npos)
+ telemeter::setting->db_user = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("db_password") != std::string::npos)
+ telemeter::setting->db_password = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("center_ip") != std::string::npos)
+ telemeter::setting->center_ip = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("this_ip") != std::string::npos)
+ telemeter::setting->this_ip = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("update_pic_interval") != std::string::npos)
+ telemeter::setting->update_pic_interval = std::stoi(
+ std::string(line.begin() +line.find_first_of('[') + 1,line.begin() + line.find_first_of(']')));
+ else if (line.find("utc_time") != std::string::npos)
+ telemeter::setting->utc_time = std::stoi(std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']')));
+ else if (line.find("update_calendar_time") != std::string::npos)
+ telemeter::setting->update_calendar_time = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("clear_clients_time") != std::string::npos)
+ telemeter::setting->clear_clients_time = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("course_interval") != std::string::npos)
+ telemeter::setting->course_interval = std::stoi(
+ std::string(line.begin() +line.find_first_of('[') + 1,line.begin() + line.find_first_of(']')));
+ }
+ //初始化数据库
+ this->conn = nanodbc::connection(telemeter::setting->db_source,telemeter::setting->db_user,telemeter::setting->db_password);
+
+ //更新section
+ this->wj_section = judge_lesson_order(this->wj_Time);
+ this->ja_section = judge_lesson_order(this->ja_Time);
+
+ //更新日期
+ muduo::Timestamp now(muduo::Timestamp::now());
+ std::string formattedTime = now.toFormattedString(false);
+ //获取年
+ int year = std::stoi(formattedTime.substr(0, 4));
+ //获取月
+ int month = std::stoi(formattedTime.substr(4, 2));
+ //获取日
+ int date = std::stoi(formattedTime.substr(6, 2));
+ //更新数据
+ scu_date scudate = db_control::update_calendar(this->conn, year, month, date);
+ //更新至原子量
+ this->day = scudate.day;
+ this->week = scudate.week;
+
+ //下载图片缓存
+
+
+
+ std::vector backgrounds;
+ db_control::query_background(conn, backgrounds);
+ //数据
+
+ //循环
+ for (auto iter = backgrounds.begin(); iter != backgrounds.end(); iter++) {
+ //解码 + 储存图片
+ //路径
+ std::string path = telemeter::setting->img_path + "/" + std::to_string(iter->PicId) + ".jpg";
+
+
+ codec::downPic(path, iter->PicCode);
+ }
+
+
+};
+
+void Mirror::start() {
+
+
+
+ //初始化配置文件及各数据
+ this->init();
+
+ LOG_INFO << "init success";
+ //任务队列最大数量
+ pool_.setMaxQueueSize(30);
+ //用std::hard_ware_concurrency()确定硬件支持的最大并发数量, 该数量 * 2为此程序运行时占用线程数
+ pool_.start(static_cast(2 * std::thread::hardware_concurrency()));
+ auto thd_start = [&](const char *info) {
+ std::clog << "thread start: " << info << std::endl;
+ };
+
+ //发送负载情况(Task2)
+ this->pool_.run([this]() { update_data_info(); });
+ thd_start("update data info");
+//
+// //更新数据缓存(Task3)
+// this->pool_.run([this]() { update_clis_data(); });
+// thd_start("update clients data");
+
+ //读取配置文件(Task4)
+ this->pool_.run([this]() { read_config(); });
+ thd_start("read config");
+
+
+ this->pool_.run([this]() { clear_cli_data(); });
+ thd_start("clear cli data");
+
+ this->pool_.run([this]() { update_course_section(); });
+ thd_start("update_course_section");
+
+ this->pool_.run([this]() { update_school_calendar(); });
+ thd_start("update school calendar");
+
+ this->pool_.run([this]() { update_pictures_info(); });
+ thd_start("update_pictures_info");
+
+ //TCP相关(Task6)
+ this->listen_cli_beat();
+ thd_start("listen client beat");
+ //输出日志
+}
+
+
+void Mirror::update_data_info() {
+
+ // 发送‘心跳包’
+ int sock;
+ if ((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
+ std::cerr << "sock error" << std::endl;
+ struct sockaddr_in servaddr;
+ memset(&servaddr, 0, sizeof(servaddr));
+ servaddr.sin_family = AF_INET;
+// 设置发送端口
+ servaddr.sin_port = htons(port::kMIR_BEAT_);
+// 设置发送ip
+/*修改:若发送失败,则沿用之前的ip*/
+ servaddr.sin_addr.s_addr = inet_addr((telemeter::setting->center_ip).c_str());
+
+ // 更新间隔
+ size_t time = 0;
+ // 发送消息
+ char send_buf[8] = {0};
+// 定义计算服务器负载情况的函数
+ auto cal_ser_load = [&]() -> uint8_t {
+ return '0';
+ };
+
+// 定义计算内存负载情况的函数
+ auto cal_mem_load = [&]() -> uint8_t {
+ std::ifstream in;
+ std::string filename = "";
+ return '0';
+ };
+
+// 定义计算网络负载情况的函数
+ auto cal_net_load = [&]() -> uint8_t {
+ return '0';
+ };
+
+ auto get_packet = [&]() {
+
+ IP this_ip(telemeter::setting->this_ip);
+
+ //calculate ServerLoad
+ unsigned char serverLoad = cal_ser_load();
+
+ // DtlLoadState.serve_load = serverLoad;
+ //calculate MemoryLoad
+ unsigned char memLoad = cal_mem_load();
+// DtlLoadState.mem_load = memLoad;
+ //calculate NetworkLoad
+ unsigned char netLoad = cal_net_load();
+// DtlLoadState.net_load_ = netLoad;
+
+//this_ip
+ std::vector ret;
+ ret.push_back(this_ip.seg0);
+ ret.push_back(this_ip.seg1);
+ ret.push_back(this_ip.seg2);
+ ret.push_back(this_ip.seg3);
+ ret.push_back(serverLoad); //服务器负载
+ ret.push_back(memLoad); //内存负载
+ ret.push_back(netLoad); //网络负载
+ ret.push_back('\0');
+ return ret;
+ };
+
+ //重置缓冲
+ memset(send_buf, 0, sizeof(send_buf));
+
+ //获取负载情况
+ std::vector info = get_packet();
+
+ //更新负载情况
+ for (int i = 0; i < 7; i++)
+ send_buf[i] = info[i];
+
+ //最后位填充0
+ send_buf[7] = '\0';
+
+ //重置time
+ time = 1;
+
+
+//线程主循环
+ while (true) {
+
+ if (time == telemeter::setting->mir_load_report_interval) {
+ //to_string(8byte) = 4+1+1+1+1 true/false
+ //重置缓冲
+ memset(send_buf, 0, sizeof(send_buf));
+ //获取负载情况
+ std::vector info = get_packet();
+ //更新负载情况
+ for (int i = 0; i < 7; i++)
+ send_buf[i] = info[i];
+ //最后位填充0
+ send_buf[7] = '\0';
+ //重置time
+ time = 1;
+
+ }
+
+// 发送缓存
+ sendto(sock, send_buf, protocol::kMIR_BEAT_PACSIZE_, 0, (struct sockaddr *) &servaddr, sizeof(servaddr));
+ // 统计发送心跳包次数
+ time++;
+ //心跳包频率
+ sleep(telemeter::setting->mir_heart_beat_interval);
+ }
+}
+//定时拉取数据库信息, 更新时间戳
+
+//读取配置文件
+void Mirror::read_config() {
+
+
+// 后可以考虑使用json格式
+ static std::string config_file_path = this->config_file_path;
+ static std::ifstream in{config_file_path, std::ios::in};
+ Setting set{};
+ size_t next_read_interval{0};
+
+ auto read_data = [&]() {
+ if (!in.is_open())
+ in.open(config_file_path, std::ios::in);
+ std::string line{};
+ while (in.good()) {
+ std::getline(in, line, '\n');
+ if (line.size() < 2 || line.front() == '/')
+ continue;
+ else if (line.find("next_read") != std::string::npos)
+ next_read_interval = std::stoi(std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']')));
+ else if (line.find("mir_heart") != std::string::npos)
+ set.mir_heart_beat_interval = std::stoi(
+ std::string(line.begin() +line.find_first_of('[') + 1,line.begin() + line.find_first_of(']')));
+ else if (line.find("mir_load") != std::string::npos)
+ set.mir_load_report_interval = std::stoi(
+ std::string(line.begin() +line.find_first_of('[') + 1,line.begin() + line.find_first_of(']')));
+ else if (line.find("img_path") != std::string::npos)
+ set.img_path = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("db_source") != std::string::npos)
+ set.db_source = std::string(line.begin() +line.find_first_of('[') + 1,line.begin() + line.find_first_of(']'));
+ else if (line.find("db_user") != std::string::npos)
+ set.db_user = std::string(line.begin() +line.find_first_of('[') + 1,line.begin() + line.find_first_of(']'));
+ else if (line.find("db_password") != std::string::npos)
+ set.db_password = std::string(line.begin() +line.find_first_of('[') + 1,line.begin() + line.find_first_of(']'));
+ else if (line.find("center_ip") != std::string::npos)
+ set.center_ip = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("this_ip") != std::string::npos)
+ telemeter::setting->this_ip = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("update_pic_interval") != std::string::npos)
+ set.update_pic_interval = std::stoi(std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']')));
+ else if (line.find("utc_time: ") != std::string::npos)
+ set.utc_time = std::stoi(std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']')));
+ else if (line.find("update_calendar_time:") != std::string::npos)
+ set.update_calendar_time = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("clear_clients_time:") != std::string::npos)
+ set.clear_clients_time = std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']'));
+ else if (line.find("course_interval:") != std::string::npos)
+ set.course_interval = std::stoi(std::string(line.begin() +line.find_first_of('[') + 1, line.begin() +line.find_first_of(']')));
+
+ }
+ };
+
+
+ auto swap = [](Setting *src, Setting *dst) {
+ Setting *tmp = dst;
+ dst = src;
+ src = tmp;
+ };
+
+ //主任务
+ while (true) {
+ //读取配置文件
+ read_data();
+
+ //复制到配置副本中
+ *telemeter::setting_copy = set;
+
+ //交换主副配置指针
+ swap(telemeter::setting_copy, telemeter::setting); //atomic operation
+
+ //挂起该进程
+ sleep(next_read_interval);
+ }
+}
+
+//清除mirror->client树信息
+void Mirror::clear_cli_data() {
+
+ auto get_seconds_from_now = [&](const scu_time &time) {
+ scu_time nowTime = scu_time::toScutime(muduo::Timestamp::now());
+ return time <= nowTime ? 0 : (time - nowTime).toSeconds();
+ };
+
+ while (true) {
+
+ //加锁
+ Class2Campus.clear();
+
+ cli_info_.clear();
+
+ //配置文件读取upload,time
+ std::string clear_time = telemeter::setting->clear_clients_time;
+ int index = clear_time.find_last_of(":");
+ //获取小时
+ int hour = std::stoi(clear_time.substr(0, index));
+ //获取分钟
+ int minute = std::stoi(clear_time.substr(index + 1));
+
+ sleep(get_seconds_from_now(scu_time(hour, minute)));
+ //每日24时更新
+ }
+}
+
+//定时 更新课程节次信息,包括江安与望江
+//更新course间隔
+void Mirror::update_course_section() {
+
+ auto judge_lesson_order = [this](const std::vector &time_table) -> size_t {
+ scu_time now{scu_time::toScutime(muduo::Timestamp::now())};
+ if (now < time_table[0])
+ return 0;
+ for (size_t i = 1; i < time_table.size(); i++) {
+ if (now < time_table[i])
+ return i;
+ }
+ return 12;
+ };
+
+
+ while (true) {
+ wj_section = judge_lesson_order(this->wj_Time);
+ ja_section = judge_lesson_order(this->ja_Time);
+
+ sleep(telemeter::setting->course_interval);
+ }
+}
+
+//定时 更新校历信息
+void Mirror::update_school_calendar() {
+ auto get_seconds_from_now = [&](const scu_time &time) {
+ scu_time nowTime = scu_time::toScutime(muduo::Timestamp::now());
+ return time <= nowTime ? 0 : (time - nowTime).toSeconds();
+ };
+ while (true) {
+ //获取当前时间
+ muduo::Timestamp now(muduo::Timestamp::now());
+ std::string formattedTime = now.toFormattedString(false);
+ //获取年
+ int year = std::stoi(formattedTime.substr(0, 4));
+ //获取月
+ int month = std::stoi(formattedTime.substr(4, 2));
+ //获取日
+ int date = std::stoi(formattedTime.substr(6, 2));
+ //更新数据
+ scu_date scudate = db_control::update_calendar(this->conn, year, month, date);
+ //更新至原子量
+ day = scudate.day;
+ week = scudate.week;
+ //配置文件读取upload,time
+
+ std::string update_time = telemeter::setting->update_calendar_time;
+ int index = update_time.find_last_of(":");
+ //获取小时
+ int hour = std::stoi(update_time.substr(0, index));
+ //获取分钟
+ int minute = std::stoi(update_time.substr(index + 1));
+
+ sleep(get_seconds_from_now(scu_time(hour, minute)));
+ //每日24时更新
+ }
+}
+
+//待修改配置文件
+void Mirror::update_pictures_info() {
+
+ scu_time nowtime = scu_time::toScutime(muduo::Timestamp::now());
+ //从6/12/18点开始更新
+ if (nowtime < scu_time(6, 0))
+ sleep((scu_time(6, 0) - nowtime).toSeconds());
+ else if (nowtime < scu_time(12, 0))
+ sleep((scu_time(12, 0) - nowtime).toSeconds());
+ else if (nowtime < scu_time(18, 0))
+ sleep((scu_time(18, 0) - nowtime).toSeconds());
+ else
+ sleep((scu_time(24, 0) - nowtime).toSeconds());
+
+ while (true) {
+ //查询数据库
+
+ std::vector backgrounds;
+
+ db_control::query_background(conn, backgrounds);
+ //图片信息与
+ //数据
+ //循环
+ for (auto iter = backgrounds.begin(); iter != backgrounds.end(); iter++) {
+ //解码 + 储存图片
+ //路径
+ std::string path = telemeter::setting->img_path + "/" + std::to_string(iter->PicId) + ".jpg";
+
+ codec::downPic(path, iter->PicCode);
+ }
+
+ sleep(telemeter::setting->update_pic_interval * 60 * 60);
+ }
+
+}
+
+//多并发
+void Mirror::listen_cli_beat() {
+ muduo::net::EventLoop loop_;
+ muduo::net::TcpServer server_(&loop_, muduo::net::InetAddress(port::kCLI_BEAT_), "");
+ //set server.onConnect 连接函数
+ server_.setMessageCallback(std::bind(&Mirror::on_message, this, _1, _2, _3));
+ server_.start();
+ loop_.loop();
+}
+
+//更新参数, 如Scu_date与scu_time->skjc
+
+
+//待修改配置时间
+void Mirror::on_message(const muduo::net::TcpConnectionPtr &connectionPtr,
+ muduo::net::Buffer *msg,
+ muduo::Timestamp time) {
+ std::string src = msg->retrieveAllAsString();
+ Cli::Uuid id;
+ std::string timeStamp;
+ json_control::getIdAndStamp(src, id, timeStamp);
+ OldHash old;
+ //查找到旧数据的哈希值
+ if (this->cli_info_.find(id) != this->cli_info_.end()) {
+ old = this->cli_info_[id];
+ } else {
+ std::deque msgs;
+ msgs.push_back(0);
+ OldHash temp_hush;
+ temp_hush.url_ = 0;
+ temp_hush.event_ = 0;
+ temp_hush.next_event_ = 0;
+ temp_hush.msgs_ = msgs;
+ this->cli_info_.insert(std::pair(id, temp_hush));
+ old = this->cli_info_[id];
+ }
+
+ //去数据库中查询新数据
+ std::string now_stamp = muduo::Timestamp::now().toString();
+ //分析当前的时间戳
+ unsigned long stamp = std::stoul(now_stamp);
+ stamp -= telemeter::setting->utc_time * 60 * 60;//(UTC+8h) //误差时间
+
+ int course_section;
+ if (Class2Campus.find(id) == Class2Campus.end()) {
+ CliDes new_des;
+ new_des.id = id;
+ new_des.campus = db_control::find_campus(this->conn, id);
+ new_des.stamp = now_stamp;
+ Class2Campus.insert(std::pair(id, new_des));
+ }
+
+ if (Class2Campus[id].campus == 3) { //江安校区
+ course_section = this->ja_section;
+ } else {
+ course_section = this->wj_section;
+ }
+
+ bool next_event = true;
+ if (course_section == 4 || course_section == 9 || course_section == 12)
+ next_event = false;
+
+
+ std::string pic_url = "http://" + telemeter::setting->this_ip + ":" + std::to_string(port::kMIR_HTTP_) + telemeter::setting->img_path + "/" + db_control::find_pic(this->conn, id) + ".jpg";
+
+ std::deque msgs = db_control::find_mes(this->conn, id, std::to_string(stamp)); //统一utc时间
+
+ Lesson lesson_1 = db_control::find_lesson(this->conn, id, course_section, scu_date(this->week, this->day));
+ Lesson lesson_2;
+ if (next_event) {
+ lesson_2 = db_control::find_lesson(this->conn, id, course_section + 1, scu_date(this->week, this->day));
+ }
+ OldHash new_hash;
+ new_hash.url_ = std::hash()(pic_url);
+ new_hash.event_ = std::hash()(lesson_1);
+ new_hash.next_event_ = std::hash()(lesson_2);
+ std::deque msgs_hash;
+ for (auto iter = msgs.begin(); iter != msgs.end(); iter++) {
+ msgs_hash.push_back(std::hash()(*iter));
+ }
+
+ if (new_hash == old) {
+ connectionPtr->send(json_control::no_need_update);
+
+ }else {
+ cli_info_[id] = new_hash;
+ ClassMes sendInfo;
+ sendInfo.image_url = pic_url;
+ sendInfo.messages = msgs;
+ sendInfo.lesson_1 = lesson_1;
+ sendInfo.lesson_2 = lesson_2;
+ std::string info = json_control::getJsonInfo(sendInfo, now_stamp);
+ connectionPtr->send(info);
+ }
+
+}
+
+
+//暂停该函数
+/*
+void Mirror::update_clis_data() {
+ //cli-classinfo缓存
+ std::unordered_map clis_data;
+
+// 校园日历
+ scu_date sD{1, 1};
+ scu_date sD_1{1, 1};
+ scu_date *scuDate = &sD;
+ scu_date *scuDate_copy = &sD_1;
+
+ scu_date scuDate_cache{};
+
+ scu_time nowTime{0, 0};
+
+ auto swap_scu_date_ptr = [&]() {
+ scu_date *tmp = scuDate;
+ scuDate_copy = scuDate;
+ scuDate = tmp;
+ };
+
+//写当日date(其实不会出现冲突.但为以后消费者模型做准备工作)
+ auto update_scu_date = [&]() {
+//更新当日上课信息
+ db_control::check_week_and_day(conn, scuDate_cache);
+//复制至副本
+ memcpy(scuDate_copy, &scuDate_cache, sizeof(scu_date));
+//交换指针
+ swap_scu_date_ptr();
+ };
+
+// 判断时间
+ auto at_middle = [&](const scu_time &lTime, const scu_time &rTime) {
+ return (lTime <= nowTime) && (nowTime < rTime);
+ };
+
+ auto get_seconds_from_now = [&](const scu_time &time) {
+ nowTime = scu_time::toScutime(muduo::Timestamp::now());
+ return time <= nowTime ? 0 : (time - nowTime).toSeconds();
+ };
+
+ auto query_scu_time = [&](int &xqh, int &jc) -> scu_time {
+// 获取迭代器,遍历时间表
+
+ auto iter1 = this->wj_Time.begin();
+ auto iter2 = this->ja_Time.begin();
+// 上课节次,用于返回
+ int skjc = 0;
+
+ nowTime = scu_time::toScutime(muduo::Timestamp::now());//获取当前时间,进行分析
+
+ for (; iter1 != wj_Time.end(); iter1++, iter2++) {
+ skjc++;
+ jc = skjc;
+ if (skjc <= 4) {
+ if (nowTime <= *iter1) {
+ xqh = 1;
+ return scu_time(0, 15);
+ } else {
+ if (nowTime <= *iter2) {
+ xqh = 3;
+ if (skjc == 4)
+ return scu_time(2, 40);
+ else
+ return scu_time(0, 40);
+ } else {
+ continue;
+ }
+ }
+ } else {
+ if (nowTime <= *iter2) {
+ xqh = 3;
+ return scu_time(0, 10);
+ } else {
+ if (nowTime <= *iter1) {
+ xqh = 1;
+ if (skjc == 9) //晚餐
+ return scu_time(1, 30);
+ else if (skjc == 7)
+ return scu_time(0, 55);
+ else if (skjc == 12)
+ return scu_time(0, 0);
+ else
+ return scu_time(0, 45);
+ } else {
+ continue;
+ }
+ }
+ }
+ }
+ return scu_time::toScutime(muduo::Timestamp::now());
+ };
+
+
+// 自动计算当前时间
+ auto query_clis_data = [&, this]() {
+ std::unordered_map clis_data_cache_;
+ bool two_lessons = true;
+ int xqh = 0; //校区号
+ int jc = 0; //时间
+
+ auto update_uC_map = [](const std::unordered_map &data_map,
+ std::unordered_map *origin_map,
+ std::unordered_map *copy_map) {
+ //赋值
+ *copy_map = data_map;
+// 交换指针
+ auto tmp = copy_map;
+ copy_map = origin_map;
+ origin_map = tmp;
+ };
+
+
+ //获取应当更新的校区号与节次
+ scu_time wait_time = query_scu_time(xqh, jc);
+
+ if (jc == 4 || jc == 9 || jc == 12)
+ two_lessons = false;
+ size_t wait_second = wait_time.toSeconds();
+ if (xqh == 1) {
+// 更新值
+// 参数: 连接参数, 这节课节次,查询两节课信息, 要查询的uuid集合
+ clis_data_cache_ = *(this->wj_clis_data_);
+// 参数: 连接参数, 这节课节次,查询两节课信息, 要查询的uuid集合
+ db_control::query_lessons(conn, jc, two_lessons, clis_data_cache_, scuDate);
+// 获取当前时间戳
+ muduo::Timestamp nTime = muduo::Timestamp::now();
+// 更新时间戳
+ update_timestamp(nTime, wj_timestamp_, wj_timestamp_copy);
+ // 交换指针
+
+ update_uC_map(clis_data_cache_, this->wj_clis_data_, this->wj_clis_data_copy);
+ } else if (xqh == 3) {
+// 更新值
+ clis_data_cache_ = *ja_clis_data_;
+// 参数: 连接参数, 这节课节次,查询两节课信息, 要查询的uuid集合
+ db_control::query_lessons(conn, jc, two_lessons, clis_data_cache_, scuDate);
+// 获取当前时间戳
+ muduo::Timestamp nTime = muduo::Timestamp::now();
+// 更新时间戳
+ update_timestamp(nTime, ja_timestamp_, ja_timestamp_copy);
+// 交换指针
+ update_uC_map(clis_data_cache_, this->ja_clis_data_, this->ja_clis_data_copy);
+ }
+
+ return wait_second;
+ };
+
+// mirror开机时,初始化当时时间
+ update_scu_date();
+ muduo::Timestamp nTime = muduo::Timestamp::now();
+ nowTime = scu_time::toScutime(nTime);
+
+
+// 进入任务线程阶段
+ while (true) {
+// 挂起. 7.55唤醒
+ sleep(get_seconds_from_now(scu_time(7, 55)));
+
+ while (true) {
+ nowTime = scu_time::toScutime(muduo::Timestamp::now());//记录当前时间
+ size_t sleepSeconds = 0;
+ sleepSeconds = query_clis_data(); //更新数据,在函数体内自动计算时间
+
+ if (sleepSeconds == 0)
+ break;
+ //休眠至下一次更新
+ sleep(sleepSeconds);
+ }
+ sleep(get_seconds_from_now(scu_time(24, 0)) ); //沉睡至24点
+// 24点更新当日上课信息
+ update_scu_date();
+ }
+
+
+}
+*/
+
+
+/*
+void Mirror::update_timestamp(const muduo::Timestamp &dataStamp, muduo::Timestamp *origin_campus_stamp,
+ muduo::Timestamp *copy_campus_stamp) {
+
+ // 赋值
+ *copy_campus_stamp = dataStamp;
+
+// 交换指针
+ auto swap = [](muduo::Timestamp *origin, muduo::Timestamp *copy) {
+ muduo::Timestamp *tmp = origin;
+ origin = copy;
+ copy = tmp;
+ };
+ swap(origin_campus_stamp, copy_campus_stamp);
+}
+*/
\ No newline at end of file
diff --git a/Src/Mirror/MirrorMain.cpp b/Src/Mirror/MirrorMain.cpp
new file mode 100644
index 0000000..fd29af6
--- /dev/null
+++ b/Src/Mirror/MirrorMain.cpp
@@ -0,0 +1,18 @@
+#include
+
+#include
+
+int main()
+{
+ static const char* crush_log = "../crush.txt";
+
+ Mirror mir;
+ try
+ {
+ mir.start();
+ }
+ catch(const std::exception& e)
+ {
+ LOG_WARN << "some error happens " << e.what() << '\n';
+ }
+}
diff --git a/Src/Mirror/codec_lib.cpp b/Src/Mirror/codec_lib.cpp
new file mode 100644
index 0000000..2eb9524
--- /dev/null
+++ b/Src/Mirror/codec_lib.cpp
@@ -0,0 +1,23 @@
+#include
+#include
+#include
+
+namespace codec {
+ using base64 = cppcodec::base64_rfc4648;
+
+ void downPic( const std::string &path,const std::string &code) {
+ //打开文件
+ std::ofstream ofs(path, std::ios::trunc | std::ios::binary);
+ //异常处理
+ if (!ofs) {
+ ofs.open(path, std::ios::trunc | std::ios::binary);
+ }
+ //解码
+ std::vector buff = base64::decode(code);
+ //写入文件
+ ofs.write(reinterpret_cast(buff.data()), buff.size());
+ //关闭文件
+ ofs.close();
+ }
+
+}
\ No newline at end of file
diff --git a/Src/Mirror/db_lib.cpp b/Src/Mirror/db_lib.cpp
new file mode 100644
index 0000000..7808ef6
--- /dev/null
+++ b/Src/Mirror/db_lib.cpp
@@ -0,0 +1,277 @@
+#include
+#include
+
+namespace db_control {
+
+ using Cli::Uuid;
+
+ /*
+ void check_week_and_day(nanodbc::connection conn, scu_date &date) {
+ if (date.day == 7) {
+ date.week += 1;
+ date.day = 1;
+ } else {
+ date.day += 1;
+ }
+ }
+*/
+ /*
+ * param CCmap uuid->ClassMes
+ * param skjc 上课节次
+ *
+ */
+/*暂停使用
+ void
+ query_lessons(nanodbc::connection conn, size_t skjc, bool two_lesson, std::unordered_map &CCmap,
+ scu_date *date, Uuid id) {
+ size_t week = date->week; //第几周
+ size_t day = date->day; //星期几
+ bool new_client = false;
+ std::string find_stmt{};
+
+ std::string uuid_stmt{};
+
+ if (id < 0) {
+ auto iter = CCmap.begin();
+ uuid_stmt += "( U.uuid = " + std::to_string(iter->first);
+ for (auto iter = CCmap.begin(); iter != CCmap.end(); iter++) {
+ uuid_stmt += " OR\n U.uuid = ";
+ uuid_stmt += std::to_string(iter->first);
+ }
+ uuid_stmt += ") AND\n";
+ } else {
+ uuid_stmt = std::string("U.uuid = " + std::to_string(id));
+ new_client = true;
+ }
+ auto get_find_stmt = [&](size_t skJc) {
+ find_stmt = std::string(std::string("SELECT\n"
+ "U.uuid AS uuid,\n"
+ "P.kch AS `kch`,\n"
+ "P.kxh AS `kxh`,\n"
+ "K.kcm AS `kcm`,\n"
+ "P.jsxm AS `jsxm`,\n"
+ "P.jxdd AS `jdxx`,\n"
+ "p.jsszxqh AS `jsszxqh`\n"
+ "FROM\n"
+ "uuid_jxdd AS U\n"
+ "INNER JOIN pksj AS P ON U.jxdd = P.jxdd AND U.jsszxqh = P.jsszxqh\n"
+ "INNER JOIN kcb AS K ON P.kch = K.kch\n"
+ "WHERE\n")
+ + uuid_stmt +
+ "P.sksj <= " + std::to_string(skJc) + " AND\n"
+ "P.sksj+P.cxjc\t >= " + std::to_string(skJc) +
+ " AND\n" +
+ "P.skxq = " + std::to_string(day) + " AND\n"
+ + "SUBSTR(qsz," +
+ std::to_string(week) + ",1)=\'1\'");
+ };
+
+ auto update_map = [&](size_t jc, bool first, bool new_cli = false) {
+ get_find_stmt(skjc);
+ try {
+ nanodbc::result find_row = nanodbc::execute(conn, find_stmt);
+ for (; find_row.next();) {
+ int uid = find_row.get(0);
+
+ if (new_cli) {
+ int xqh = find_row.get(6);
+ std::string dd = find_row.get(5);
+ ClassPlace cp;
+ cp.jxdd_ = dd;
+ cp.jsszxqh = xqh;
+ ClassMes ci;
+ ci.classPlace_ = cp;
+ CCmap.insert(std::make_pair(id, ci));
+ }
+
+ if (CCmap.find(uid) != CCmap.end()) {
+ Lesson les = Lesson(find_row.get(1), find_row.get(2),
+ find_row.get(3), find_row.get(4),
+ find_row.get(5));
+ if (first)
+ CCmap.at(uid).lesson_1 = les;
+ else
+ CCmap.at(uid).lesson_2 = les;
+ } else {
+ continue;
+ }
+ }
+ } catch (const std::exception &e) {
+ std::cerr << e.what() << std::endl; //更换为日志报错
+ }
+ };
+
+// 更新当前节次
+ update_map(skjc, true, new_client);
+ if (two_lesson) {
+// 更新下一节次
+ update_map(skjc + 1, false, new_client);
+ }
+
+ }
+*/
+ void query_background(nanodbc::connection &conn, std::vector &backgrounds) {
+ //查询所有
+ std::string sel_stmt = "SELECT * FROM backgrounds";
+ //执行语句
+ nanodbc::result find_row = nanodbc::execute(conn, sel_stmt);
+
+ for (; find_row.next();) {
+ int id = find_row.get(0);
+ std::string code = find_row.get(1);
+ std::string des = find_row.get(2);
+
+ backgrounds.emplace_back(id, code, des);
+ }
+
+ }
+
+ std::string find_pic(nanodbc::connection &conn, Cli::Uuid id) {
+ nanodbc::statement statement(conn);
+
+ nanodbc::prepare(statement, std::string("SELECT background FROM places WHERE UUID = ?"));
+
+ statement.bind(0, &id);
+
+ nanodbc::result row = nanodbc::execute(statement);
+
+ while (row.next()) {
+ return row.get(0);
+ }
+ return "";
+ }
+
+ std::deque find_mes(nanodbc::connection &conn, Cli::Uuid id, const std::string &stamp) {
+ //准备结果
+ std::deque res;
+
+ nanodbc::statement statement(conn);
+
+ nanodbc::prepare(statement,
+ std::string("SELECT title, expiretime, text FROM msg WHERE uuid = ? AND starttime = ? ;"));
+
+ statement.bind(0, &id);
+ statement.bind(1, stamp.c_str());
+
+ nanodbc::result row = nanodbc::execute(statement);
+
+ while (row.next()) {
+ Message mes;
+ mes.title = row.get(0);
+ mes.expireTime = row.get(1);
+ mes.text = row.get(2);
+ res.push_back(mes);
+ }
+
+ return res;
+ }
+
+ Lesson find_lesson(nanodbc::connection &conn, Cli::Uuid id, int skjc, const scu_date &date) {
+ //准备结果
+ Lesson ret;
+
+ std::string teacher_name;
+
+ nanodbc::statement statement(conn);
+
+ nanodbc::prepare(statement,
+ std::string("SELECT\n"
+ "U.UUID AS uuid,\n"
+ "P.kch AS kch,\n"
+ "P.kxh AS kxh,\n"
+ "K.kcm AS kcm,\n"
+ "P.jsxm AS jsxm,\n"
+ "P.jxdd AS jxdd,\n"
+ "P.jsszxqh AS jsszxqh\n"
+ "FROM\n"
+ "places AS U\n"
+ "INNER JOIN pksj AS P ON U.place = P.jxdd \n"
+ "INNER JOIN kcb AS K ON P.kch = K.kch\n"
+ "WHERE U.UUID = ?\n"
+ "AND \n"
+ "P.sksj <= ? AND\n"
+ "P.sksj + P.cxjc > ? AND\n"
+ "P.skxq = ? AND\n"
+ "SUBSTR(qsz,?,1)=1"));
+
+ statement.bind(0, &id);
+ statement.bind(1, &skjc);
+ statement.bind(2, &date.day);
+ statement.bind(3, &date.day);
+ statement.bind(4, &date.week);
+
+
+ nanodbc::result row = nanodbc::execute(statement);
+
+ for (int i = 0; row.next(); i++) {
+
+ if (i != 0) {
+ teacher_name += ",";
+ }
+ ret.kch_ = row.get(1);
+ ret.kxh_ = row.get(2);
+ ret.kcm_ = row.get(3);
+ teacher_name += row.get(4);
+ ret.jxdd_ = row.get(5);
+ }
+ ret.jsxm_ = teacher_name;
+
+ return ret;
+ }
+
+ int find_campus(nanodbc::connection &conn, Cli::Uuid id) {
+
+ int ret;
+
+ nanodbc::statement statement(conn);
+
+ nanodbc::prepare(statement, std::string("SELECT \n"
+ "distinct P.jsszxqh AS campus \n"
+ "FROM pksj AS P\n"
+ "INNER JOIN places AS PL ON P.jxdd = PL.place\n"
+ "WHERE PL.UUID = ?"));
+
+ statement.bind(0, &id);
+
+ nanodbc::result row = nanodbc::execute(statement);
+
+ while (row.next()) {
+ ret = row.get(0);
+ }
+
+ return ret;
+ }
+
+ scu_date update_calendar(nanodbc::connection &conn, int year, int month, int date) {
+
+ int week;
+ int day;
+
+ nanodbc::statement statement(conn);
+
+ nanodbc::prepare(statement, std::string("SELECT \n"
+ "now_week,\n"
+ "now_day\n"
+ "FROM\n"
+ "calendar\n"
+ "WHERE\n"
+ "year = ? AND\n"
+ "month = ? AND\n"
+ "date = ?"));
+
+ statement.bind(0, &year);
+ statement.bind(1, &month);
+ statement.bind(2, &date);
+
+ nanodbc::result row = nanodbc::execute(statement);
+
+ while (row.next()) {
+ week = row.get(0);
+ day = row.get(1);
+ }
+
+ return scu_date(week,day);
+ }
+
+
+}
diff --git a/Src/Mirror/json_lib.cpp b/Src/Mirror/json_lib.cpp
new file mode 100644
index 0000000..d610ce8
--- /dev/null
+++ b/Src/Mirror/json_lib.cpp
@@ -0,0 +1,120 @@
+#include
+
+namespace json_control {
+
+ std::string no_need_update = "{\"needUpdate\":false}";
+
+ void getJson(rapidjson::Writer &writer, const Message &mes) {
+ //开启对象
+ writer.StartObject();
+ //title
+ writer.Key("Title");
+ writer.String(mes.title.c_str());
+
+ //text
+ writer.Key("text");
+ writer.String(mes.text.c_str());
+
+ //expiretime
+ writer.Key("expireTime");
+ writer.Int(mes.expireTime);
+
+ //结束对象
+ writer.EndObject();
+ }
+
+ void getJson(rapidjson::Writer &writer, const Lesson &les) {
+ //开始对象
+ writer.StartObject();
+
+ //课程号
+ writer.Key("kch");
+ writer.String(les.kch_.c_str());
+
+ //课序号
+ writer.Key("kxh");
+ writer.Int(les.kxh_);
+
+ //课程名
+ writer.Key("kcm");
+ writer.String(les.kcm_.c_str());
+
+ //教师姓名
+ writer.Key("jsxm");
+ writer.String(les.jsxm_.c_str());
+
+ //教学地点
+ writer.Key("jxdd");
+ writer.String(les.jxdd_.c_str());
+
+ //结束对象
+ writer.EndObject();
+ }
+
+ std::string getJsonInfo(const ClassMes &mes, const std::string ×tamp) {
+ rapidjson::StringBuffer strBuf;
+ rapidjson::Writer writer(strBuf);
+ //声明strBuf与writer对象
+
+ //开启json对象
+ writer.StartObject();
+
+ //时间戳
+ writer.Key("time");
+ writer.String(timestamp.c_str());
+
+ //图像的url
+ writer.Key("image_url");
+ writer.String(mes.image_url.c_str());
+
+ //消息队列
+ writer.Key("message");
+ //开启数组
+ writer.StartArray();
+ for (auto iter = mes.messages.begin(); iter != mes.messages.end(); iter++) {
+ getJson(writer, *iter);
+ }
+ //结束数组
+ writer.EndArray();
+
+ //第一节课信息
+ writer.Key("event");
+
+ getJson(writer, mes.lesson_1);
+
+ //第二节课信息
+ writer.Key("next_event");
+
+ getJson(writer, mes.lesson_2);
+
+ //需要更新
+ writer.Key("needUpdate");
+ writer.Bool(true);
+
+ //结束json对象
+ writer.EndObject();
+
+ std::string json = strBuf.GetString();
+
+ return json;
+ }
+
+ void getIdAndStamp(const std::string &src, Cli::Uuid &id, std::string &stamp) {
+
+// 解析document
+ rapidjson::Document document;
+ document.Parse(src.c_str());
+
+// 分析获取id和stamp
+ rapidjson::Value::ConstMemberIterator iter = document.FindMember("UUID");
+ if (iter != document.MemberEnd()) {
+ id = std::stoi(iter->value.GetString());
+ }
+
+ iter = document.FindMember("time");
+ if (iter != document.MemberEnd()) {
+ stamp = iter->value.GetString();
+ }
+
+ }
+}//End namespace of json_control
diff --git a/cmake-build-debug/CMakeCache.txt b/cmake-build-debug/CMakeCache.txt
new file mode 100644
index 0000000..1962d1a
--- /dev/null
+++ b/cmake-build-debug/CMakeCache.txt
@@ -0,0 +1,423 @@
+# This is the CMakeCache file.
+# For build in directory: d:/2021_2/cids-server/cmake-build-debug
+# It was generated by CMake: C:/Users/XM/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/211.7142.21/bin/cmake/win/bin/cmake.exe
+# You can edit this file to change values found and used by cmake.
+# If you do not want to change any of the values, simply exit the editor.
+# If you do want to change a value, simply edit, save, and exit the editor.
+# The syntax for the file is as follows:
+# KEY:TYPE=VALUE
+# KEY is the name of a variable in the cache.
+# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
+# VALUE is the current value for the KEY.
+
+########################
+# EXTERNAL cache entries
+########################
+
+//Path to a program.
+CMAKE_ADDR2LINE:FILEPATH=C:/BC/C/mingw64/bin/addr2line.exe
+
+//Path to a program.
+CMAKE_AR:FILEPATH=C:/BC/C/mingw64/bin/ar.exe
+
+//Choose the type of build, options are: None Debug Release RelWithDebInfo
+// MinSizeRel ...
+CMAKE_BUILD_TYPE:STRING=Debug
+
+//Id string of the compiler for the CodeBlocks IDE. Automatically
+// detected when left empty
+CMAKE_CODEBLOCKS_COMPILER_ID:STRING=
+
+//The CodeBlocks executable
+CMAKE_CODEBLOCKS_EXECUTABLE:FILEPATH=CMAKE_CODEBLOCKS_EXECUTABLE-NOTFOUND
+
+//Additional command line arguments when CodeBlocks invokes make.
+// Enter e.g. -j to get parallel builds
+CMAKE_CODEBLOCKS_MAKE_ARGUMENTS:STRING=
+
+//Enable/Disable color output during build.
+CMAKE_COLOR_MAKEFILE:BOOL=ON
+
+//CXX compiler
+CMAKE_CXX_COMPILER:FILEPATH=C:/BC/C/mingw64/bin/g++.exe
+
+//A wrapper around 'ar' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_CXX_COMPILER_AR:FILEPATH=C:/BC/C/mingw64/bin/gcc-ar.exe
+
+//A wrapper around 'ranlib' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_CXX_COMPILER_RANLIB:FILEPATH=C:/BC/C/mingw64/bin/gcc-ranlib.exe
+
+//Flags used by the CXX compiler during all build types.
+CMAKE_CXX_FLAGS:STRING=
+
+//Flags used by the CXX compiler during DEBUG builds.
+CMAKE_CXX_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the CXX compiler during MINSIZEREL builds.
+CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the CXX compiler during RELEASE builds.
+CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the CXX compiler during RELWITHDEBINFO builds.
+CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//Libraries linked by default with all C++ applications.
+CMAKE_CXX_STANDARD_LIBRARIES:STRING=-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
+
+//C compiler
+CMAKE_C_COMPILER:FILEPATH=C:/BC/C/mingw64/bin/gcc.exe
+
+//A wrapper around 'ar' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_C_COMPILER_AR:FILEPATH=C:/BC/C/mingw64/bin/gcc-ar.exe
+
+//A wrapper around 'ranlib' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_C_COMPILER_RANLIB:FILEPATH=C:/BC/C/mingw64/bin/gcc-ranlib.exe
+
+//Flags used by the C compiler during all build types.
+CMAKE_C_FLAGS:STRING=
+
+//Flags used by the C compiler during DEBUG builds.
+CMAKE_C_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the C compiler during MINSIZEREL builds.
+CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the C compiler during RELEASE builds.
+CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the C compiler during RELWITHDEBINFO builds.
+CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//Libraries linked by default with all C applications.
+CMAKE_C_STANDARD_LIBRARIES:STRING=-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
+
+//Path to a program.
+CMAKE_DLLTOOL:FILEPATH=C:/BC/C/mingw64/bin/dlltool.exe
+
+//Flags used by the linker during all build types.
+CMAKE_EXE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during DEBUG builds.
+CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during MINSIZEREL builds.
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during RELEASE builds.
+CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during RELWITHDEBINFO builds.
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Convert GNU import libraries to MS format (requires Visual Studio)
+CMAKE_GNUtoMS:BOOL=OFF
+
+//Install path prefix, prepended onto install directories.
+CMAKE_INSTALL_PREFIX:PATH=C:/Program Files (x86)/pro
+
+//Path to a program.
+CMAKE_LINKER:FILEPATH=C:/BC/C/mingw64/bin/ld.exe
+
+//Path to a program.
+CMAKE_MAKE_PROGRAM:FILEPATH=C:/BC/C/mingw64/bin/mingw32-make.exe
+
+//Flags used by the linker during the creation of modules during
+// all build types.
+CMAKE_MODULE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of modules during
+// DEBUG builds.
+CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of modules during
+// MINSIZEREL builds.
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of modules during
+// RELEASE builds.
+CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of modules during
+// RELWITHDEBINFO builds.
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_NM:FILEPATH=C:/BC/C/mingw64/bin/nm.exe
+
+//Path to a program.
+CMAKE_OBJCOPY:FILEPATH=C:/BC/C/mingw64/bin/objcopy.exe
+
+//Path to a program.
+CMAKE_OBJDUMP:FILEPATH=C:/BC/C/mingw64/bin/objdump.exe
+
+//Value Computed by CMake
+CMAKE_PROJECT_DESCRIPTION:STATIC=
+
+//Value Computed by CMake
+CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
+
+//Value Computed by CMake
+CMAKE_PROJECT_NAME:STATIC=pro
+
+//Path to a program.
+CMAKE_RANLIB:FILEPATH=C:/BC/C/mingw64/bin/ranlib.exe
+
+//RC compiler
+CMAKE_RC_COMPILER:FILEPATH=C:/BC/C/mingw64/bin/windres.exe
+
+//Flags for Windows Resource Compiler during all build types.
+CMAKE_RC_FLAGS:STRING=
+
+//Flags for Windows Resource Compiler during DEBUG builds.
+CMAKE_RC_FLAGS_DEBUG:STRING=
+
+//Flags for Windows Resource Compiler during MINSIZEREL builds.
+CMAKE_RC_FLAGS_MINSIZEREL:STRING=
+
+//Flags for Windows Resource Compiler during RELEASE builds.
+CMAKE_RC_FLAGS_RELEASE:STRING=
+
+//Flags for Windows Resource Compiler during RELWITHDEBINFO builds.
+CMAKE_RC_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_READELF:FILEPATH=C:/BC/C/mingw64/bin/readelf.exe
+
+//Flags used by the linker during the creation of shared libraries
+// during all build types.
+CMAKE_SHARED_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during DEBUG builds.
+CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during MINSIZEREL builds.
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during RELEASE builds.
+CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during RELWITHDEBINFO builds.
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//If set, runtime paths are not added when installing shared libraries,
+// but are added when building.
+CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
+
+//If set, runtime paths are not added when using shared libraries.
+CMAKE_SKIP_RPATH:BOOL=NO
+
+//Flags used by the linker during the creation of static libraries
+// during all build types.
+CMAKE_STATIC_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during DEBUG builds.
+CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during MINSIZEREL builds.
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during RELEASE builds.
+CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during RELWITHDEBINFO builds.
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_STRIP:FILEPATH=C:/BC/C/mingw64/bin/strip.exe
+
+//If this value is on, makefiles will be generated without the
+// .SILENT directive, and all commands will be echoed to the console
+// during the make. This is useful for debugging only. With Visual
+// Studio IDE projects all commands are done without /nologo.
+CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
+
+//The directory containing a CMake configuration file for RapidJSON.
+RapidJSON_DIR:PATH=RapidJSON_DIR-NOTFOUND
+
+//Value Computed by CMake
+pro_BINARY_DIR:STATIC=D:/2021_2/cids-server/cmake-build-debug
+
+//Value Computed by CMake
+pro_SOURCE_DIR:STATIC=D:/2021_2/cids-server
+
+
+########################
+# INTERNAL cache entries
+########################
+
+//ADVANCED property for variable: CMAKE_ADDR2LINE
+CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_AR
+CMAKE_AR-ADVANCED:INTERNAL=1
+//This is the directory where this CMakeCache.txt was created
+CMAKE_CACHEFILE_DIR:INTERNAL=d:/2021_2/cids-server/cmake-build-debug
+//Major version of cmake used to create the current loaded cache
+CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
+//Minor version of cmake used to create the current loaded cache
+CMAKE_CACHE_MINOR_VERSION:INTERNAL=19
+//Patch version of cmake used to create the current loaded cache
+CMAKE_CACHE_PATCH_VERSION:INTERNAL=2
+//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
+CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
+//Path to CMake executable.
+CMAKE_COMMAND:INTERNAL=C:/Users/XM/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/211.7142.21/bin/cmake/win/bin/cmake.exe
+//Path to cpack program executable.
+CMAKE_CPACK_COMMAND:INTERNAL=C:/Users/XM/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/211.7142.21/bin/cmake/win/bin/cpack.exe
+//Path to ctest program executable.
+CMAKE_CTEST_COMMAND:INTERNAL=C:/Users/XM/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/211.7142.21/bin/cmake/win/bin/ctest.exe
+//ADVANCED property for variable: CMAKE_CXX_COMPILER
+CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR
+CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB
+CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS
+CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
+CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
+CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
+CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
+CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_STANDARD_LIBRARIES
+CMAKE_CXX_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER
+CMAKE_C_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER_AR
+CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB
+CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS
+CMAKE_C_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG
+CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL
+CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE
+CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO
+CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_STANDARD_LIBRARIES
+CMAKE_C_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_DLLTOOL
+CMAKE_DLLTOOL-ADVANCED:INTERNAL=1
+//Executable file format
+CMAKE_EXECUTABLE_FORMAT:INTERNAL=Unknown
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
+CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
+CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
+CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//Name of external makefile project generator.
+CMAKE_EXTRA_GENERATOR:INTERNAL=CodeBlocks
+//CXX compiler system defined macros
+CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS:INTERNAL=__STDC__;1;__STDC_VERSION__;201710L;__STDC_UTF_16__;1;__STDC_UTF_32__;1;__STDC_HOSTED__;1;__GNUC__;8;__GNUC_MINOR__;1;__GNUC_PATCHLEVEL__;0;__VERSION__;"8.1.0";__ATOMIC_RELAXED;0;__ATOMIC_SEQ_CST;5;__ATOMIC_ACQUIRE;2;__ATOMIC_RELEASE;3;__ATOMIC_ACQ_REL;4;__ATOMIC_CONSUME;1;__pic__;1;__PIC__;1;__FINITE_MATH_ONLY__;0;__SIZEOF_INT__;4;__SIZEOF_LONG__;4;__SIZEOF_LONG_LONG__;8;__SIZEOF_SHORT__;2;__SIZEOF_FLOAT__;4;__SIZEOF_DOUBLE__;8;__SIZEOF_LONG_DOUBLE__;16;__SIZEOF_SIZE_T__;8;__CHAR_BIT__;8;__BIGGEST_ALIGNMENT__;16;__ORDER_LITTLE_ENDIAN__;1234;__ORDER_BIG_ENDIAN__;4321;__ORDER_PDP_ENDIAN__;3412;__BYTE_ORDER__;__ORDER_LITTLE_ENDIAN__;__FLOAT_WORD_ORDER__;__ORDER_LITTLE_ENDIAN__;__SIZEOF_POINTER__;8;__SIZE_TYPE__;long long unsigned int;__PTRDIFF_TYPE__;long long int;__WCHAR_TYPE__;short unsigned int;__WINT_TYPE__;short unsigned int;__INTMAX_TYPE__;long long int;__UINTMAX_TYPE__;long long unsigned int;__CHAR16_TYPE__;short unsigned int;__CHAR32_TYPE__;unsigned int;__SIG_ATOMIC_TYPE__;int;__INT8_TYPE__;signed char;__INT16_TYPE__;short int;__INT32_TYPE__;int;__INT64_TYPE__;long long int;__UINT8_TYPE__;unsigned char;__UINT16_TYPE__;short unsigned int;__UINT32_TYPE__;unsigned int;__UINT64_TYPE__;long long unsigned int;__INT_LEAST8_TYPE__;signed char;__INT_LEAST16_TYPE__;short int;__INT_LEAST32_TYPE__;int;__INT_LEAST64_TYPE__;long long int;__UINT_LEAST8_TYPE__;unsigned char;__UINT_LEAST16_TYPE__;short unsigned int;__UINT_LEAST32_TYPE__;unsigned int;__UINT_LEAST64_TYPE__;long long unsigned int;__INT_FAST8_TYPE__;signed char;__INT_FAST16_TYPE__;short int;__INT_FAST32_TYPE__;int;__INT_FAST64_TYPE__;long long int;__UINT_FAST8_TYPE__;unsigned char;__UINT_FAST16_TYPE__;short unsigned int;__UINT_FAST32_TYPE__;unsigned int;__UINT_FAST64_TYPE__;long long unsigned int;__INTPTR_TYPE__;long long int;__UINTPTR_TYPE__;long long unsigned int;__has_include(STR);__has_include__(STR);__has_include_next(STR);__has_include_next__(STR);__GXX_ABI_VERSION;1012;__SCHAR_MAX__;0x7f;__SHRT_MAX__;0x7fff;__INT_MAX__;0x7fffffff;__LONG_MAX__;0x7fffffffL;__LONG_LONG_MAX__;0x7fffffffffffffffLL;__WCHAR_MAX__;0xffff;__WCHAR_MIN__;0;__WINT_MAX__;0xffff;__WINT_MIN__;0;__PTRDIFF_MAX__;0x7fffffffffffffffLL;__SIZE_MAX__;0xffffffffffffffffULL;__SCHAR_WIDTH__;8;__SHRT_WIDTH__;16;__INT_WIDTH__;32;__LONG_WIDTH__;32;__LONG_LONG_WIDTH__;64;__WCHAR_WIDTH__;16;__WINT_WIDTH__;16;__PTRDIFF_WIDTH__;64;__SIZE_WIDTH__;64;__INTMAX_MAX__;0x7fffffffffffffffLL;__INTMAX_C(c);c ## LL;__UINTMAX_MAX__;0xffffffffffffffffULL;__UINTMAX_C(c);c ## ULL;__INTMAX_WIDTH__;64;__SIG_ATOMIC_MAX__;0x7fffffff;__SIG_ATOMIC_MIN__;(-__SIG_ATOMIC_MAX__ - 1);__SIG_ATOMIC_WIDTH__;32;__INT8_MAX__;0x7f;__INT16_MAX__;0x7fff;__INT32_MAX__;0x7fffffff;__INT64_MAX__;0x7fffffffffffffffLL;__UINT8_MAX__;0xff;__UINT16_MAX__;0xffff;__UINT32_MAX__;0xffffffffU;__UINT64_MAX__;0xffffffffffffffffULL;__INT_LEAST8_MAX__;0x7f;__INT8_C(c);c;__INT_LEAST8_WIDTH__;8;__INT_LEAST16_MAX__;0x7fff;__INT16_C(c);c;__INT_LEAST16_WIDTH__;16;__INT_LEAST32_MAX__;0x7fffffff;__INT32_C(c);c;__INT_LEAST32_WIDTH__;32;__INT_LEAST64_MAX__;0x7fffffffffffffffLL;__INT64_C(c);c ## LL;__INT_LEAST64_WIDTH__;64;__UINT_LEAST8_MAX__;0xff;__UINT8_C(c);c;__UINT_LEAST16_MAX__;0xffff;__UINT16_C(c);c;__UINT_LEAST32_MAX__;0xffffffffU;__UINT32_C(c);c ## U;__UINT_LEAST64_MAX__;0xffffffffffffffffULL;__UINT64_C(c);c ## ULL;__INT_FAST8_MAX__;0x7f;__INT_FAST8_WIDTH__;8;__INT_FAST16_MAX__;0x7fff;__INT_FAST16_WIDTH__;16;__INT_FAST32_MAX__;0x7fffffff;__INT_FAST32_WIDTH__;32;__INT_FAST64_MAX__;0x7fffffffffffffffLL;__INT_FAST64_WIDTH__;64;__UINT_FAST8_MAX__;0xff;__UINT_FAST16_MAX__;0xffff;__UINT_FAST32_MAX__;0xffffffffU;__UINT_FAST64_MAX__;0xffffffffffffffffULL;__INTPTR_MAX__;0x7fffffffffffffffLL;__INTPTR_WIDTH__;64;__UINTPTR_MAX__;0xffffffffffffffffULL;__GCC_IEC_559;2;__GCC_IEC_559_COMPLEX;2;__FLT_EVAL_METHOD__;0;__FLT_EVAL_METHOD_TS_18661_3__;0;__DEC_EVAL_METHOD__;2;__FLT_RADIX__;2;__FLT_MANT_DIG__;24;__FLT_DIG__;6;__FLT_MIN_EXP__;(-125);__FLT_MIN_10_EXP__;(-37);__FLT_MAX_EXP__;128;__FLT_MAX_10_EXP__;38;__FLT_DECIMAL_DIG__;9;__FLT_MAX__;3.40282346638528859811704183484516925e+38F;__FLT_MIN__;1.17549435082228750796873653722224568e-38F;__FLT_EPSILON__;1.19209289550781250000000000000000000e-7F;__FLT_DENORM_MIN__;1.40129846432481707092372958328991613e-45F;__FLT_HAS_DENORM__;1;__FLT_HAS_INFINITY__;1;__FLT_HAS_QUIET_NAN__;1;__DBL_MANT_DIG__;53;__DBL_DIG__;15;__DBL_MIN_EXP__;(-1021);__DBL_MIN_10_EXP__;(-307);__DBL_MAX_EXP__;1024;__DBL_MAX_10_EXP__;308;__DBL_DECIMAL_DIG__;17;__DBL_MAX__;((double)1.79769313486231570814527423731704357e+308L);__DBL_MIN__;((double)2.22507385850720138309023271733240406e-308L);__DBL_EPSILON__;((double)2.22044604925031308084726333618164062e-16L);__DBL_DENORM_MIN__;((double)4.94065645841246544176568792868221372e-324L);__DBL_HAS_DENORM__;1;__DBL_HAS_INFINITY__;1;__DBL_HAS_QUIET_NAN__;1;__LDBL_MANT_DIG__;64;__LDBL_DIG__;18;__LDBL_MIN_EXP__;(-16381);__LDBL_MIN_10_EXP__;(-4931);__LDBL_MAX_EXP__;16384;__LDBL_MAX_10_EXP__;4932;__DECIMAL_DIG__;21;__LDBL_DECIMAL_DIG__;21;__LDBL_MAX__;1.18973149535723176502126385303097021e+4932L;__LDBL_MIN__;3.36210314311209350626267781732175260e-4932L;__LDBL_EPSILON__;1.08420217248550443400745280086994171e-19L;__LDBL_DENORM_MIN__;3.64519953188247460252840593361941982e-4951L;__LDBL_HAS_DENORM__;1;__LDBL_HAS_INFINITY__;1;__LDBL_HAS_QUIET_NAN__;1;__FLT32_MANT_DIG__;24;__FLT32_DIG__;6;__FLT32_MIN_EXP__;(-125);__FLT32_MIN_10_EXP__;(-37);__FLT32_MAX_EXP__;128;__FLT32_MAX_10_EXP__;38;__FLT32_DECIMAL_DIG__;9;__FLT32_MAX__;3.40282346638528859811704183484516925e+38F32;__FLT32_MIN__;1.17549435082228750796873653722224568e-38F32;__FLT32_EPSILON__;1.19209289550781250000000000000000000e-7F32;__FLT32_DENORM_MIN__;1.40129846432481707092372958328991613e-45F32;__FLT32_HAS_DENORM__;1;__FLT32_HAS_INFINITY__;1;__FLT32_HAS_QUIET_NAN__;1;__FLT64_MANT_DIG__;53;__FLT64_DIG__;15;__FLT64_MIN_EXP__;(-1021);__FLT64_MIN_10_EXP__;(-307);__FLT64_MAX_EXP__;1024;__FLT64_MAX_10_EXP__;308;__FLT64_DECIMAL_DIG__;17;__FLT64_MAX__;1.79769313486231570814527423731704357e+308F64;__FLT64_MIN__;2.22507385850720138309023271733240406e-308F64;__FLT64_EPSILON__;2.22044604925031308084726333618164062e-16F64;__FLT64_DENORM_MIN__;4.94065645841246544176568792868221372e-324F64;__FLT64_HAS_DENORM__;1;__FLT64_HAS_INFINITY__;1;__FLT64_HAS_QUIET_NAN__;1;__FLT128_MANT_DIG__;113;__FLT128_DIG__;33;__FLT128_MIN_EXP__;(-16381);__FLT128_MIN_10_EXP__;(-4931);__FLT128_MAX_EXP__;16384;__FLT128_MAX_10_EXP__;4932;__FLT128_DECIMAL_DIG__;36;__FLT128_MAX__;1.18973149535723176508575932662800702e+4932F128;__FLT128_MIN__;3.36210314311209350626267781732175260e-4932F128;__FLT128_EPSILON__;1.92592994438723585305597794258492732e-34F128;__FLT128_DENORM_MIN__;6.47517511943802511092443895822764655e-4966F128;__FLT128_HAS_DENORM__;1;__FLT128_HAS_INFINITY__;1;__FLT128_HAS_QUIET_NAN__;1;__FLT32X_MANT_DIG__;53;__FLT32X_DIG__;15;__FLT32X_MIN_EXP__;(-1021);__FLT32X_MIN_10_EXP__;(-307);__FLT32X_MAX_EXP__;1024;__FLT32X_MAX_10_EXP__;308;__FLT32X_DECIMAL_DIG__;17;__FLT32X_MAX__;1.79769313486231570814527423731704357e+308F32x;__FLT32X_MIN__;2.22507385850720138309023271733240406e-308F32x;__FLT32X_EPSILON__;2.22044604925031308084726333618164062e-16F32x;__FLT32X_DENORM_MIN__;4.94065645841246544176568792868221372e-324F32x;__FLT32X_HAS_DENORM__;1;__FLT32X_HAS_INFINITY__;1;__FLT32X_HAS_QUIET_NAN__;1;__FLT64X_MANT_DIG__;64;__FLT64X_DIG__;18;__FLT64X_MIN_EXP__;(-16381);__FLT64X_MIN_10_EXP__;(-4931);__FLT64X_MAX_EXP__;16384;__FLT64X_MAX_10_EXP__;4932;__FLT64X_DECIMAL_DIG__;21;__FLT64X_MAX__;1.18973149535723176502126385303097021e+4932F64x;__FLT64X_MIN__;3.36210314311209350626267781732175260e-4932F64x;__FLT64X_EPSILON__;1.08420217248550443400745280086994171e-19F64x;__FLT64X_DENORM_MIN__;3.64519953188247460252840593361941982e-4951F64x;__FLT64X_HAS_DENORM__;1;__FLT64X_HAS_INFINITY__;1;__FLT64X_HAS_QUIET_NAN__;1;__DEC32_MANT_DIG__;7;__DEC32_MIN_EXP__;(-94);__DEC32_MAX_EXP__;97;__DEC32_MIN__;1E-95DF;__DEC32_MAX__;9.999999E96DF;__DEC32_EPSILON__;1E-6DF;__DEC32_SUBNORMAL_MIN__;0.000001E-95DF;__DEC64_MANT_DIG__;16;__DEC64_MIN_EXP__;(-382);__DEC64_MAX_EXP__;385;__DEC64_MIN__;1E-383DD;__DEC64_MAX__;9.999999999999999E384DD;__DEC64_EPSILON__;1E-15DD;__DEC64_SUBNORMAL_MIN__;0.000000000000001E-383DD;__DEC128_MANT_DIG__;34;__DEC128_MIN_EXP__;(-6142);__DEC128_MAX_EXP__;6145;__DEC128_MIN__;1E-6143DL;__DEC128_MAX__;9.999999999999999999999999999999999E6144DL;__DEC128_EPSILON__;1E-33DL;__DEC128_SUBNORMAL_MIN__;0.000000000000000000000000000000001E-6143DL;__REGISTER_PREFIX__; ;__USER_LABEL_PREFIX__; ;__GNUC_STDC_INLINE__;1;__NO_INLINE__;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16;1;__GCC_ATOMIC_BOOL_LOCK_FREE;2;__GCC_ATOMIC_CHAR_LOCK_FREE;2;__GCC_ATOMIC_CHAR16_T_LOCK_FREE;2;__GCC_ATOMIC_CHAR32_T_LOCK_FREE;2;__GCC_ATOMIC_WCHAR_T_LOCK_FREE;2;__GCC_ATOMIC_SHORT_LOCK_FREE;2;__GCC_ATOMIC_INT_LOCK_FREE;2;__GCC_ATOMIC_LONG_LOCK_FREE;2;__GCC_ATOMIC_LLONG_LOCK_FREE;2;__GCC_ATOMIC_TEST_AND_SET_TRUEVAL;1;__GCC_ATOMIC_POINTER_LOCK_FREE;2;__PRAGMA_REDEFINE_EXTNAME;1;__SIZEOF_INT128__;16;__SIZEOF_WCHAR_T__;2;__SIZEOF_WINT_T__;2;__SIZEOF_PTRDIFF_T__;8;__amd64;1;__amd64__;1;__x86_64;1;__x86_64__;1;__SIZEOF_FLOAT80__;16;__SIZEOF_FLOAT128__;16;__ATOMIC_HLE_ACQUIRE;65536;__ATOMIC_HLE_RELEASE;131072;__GCC_ASM_FLAG_OUTPUTS__;1;__nocona;1;__nocona__;1;__tune_core2__;1;__code_model_medium__;1;__MMX__;1;__SSE__;1;__SSE2__;1;__SSE3__;1;__FXSR__;1;__SSE_MATH__;1;__SSE2_MATH__;1;__SEG_FS;1;__SEG_GS;1;__SEH__;1;__stdcall;__attribute__((__stdcall__));__fastcall;__attribute__((__fastcall__));__thiscall;__attribute__((__thiscall__));__cdecl;__attribute__((__cdecl__));_stdcall;__attribute__((__stdcall__));_fastcall;__attribute__((__fastcall__));_thiscall;__attribute__((__thiscall__));_cdecl;__attribute__((__cdecl__));__GXX_MERGED_TYPEINFO_NAMES;0;__GXX_TYPEINFO_EQUALITY_INLINE;0;__MSVCRT__;1;__MINGW32__;1;_WIN32;1;__WIN32;1;__WIN32__;1;WIN32;1;__WINNT;1;__WINNT__;1;WINNT;1;_INTEGRAL_MAX_BITS;64;__MINGW64__;1;__WIN64;1;__WIN64__;1;WIN64;1;_WIN64;1;__declspec(x);__attribute__((x));__DECIMAL_BID_FORMAT__;1;_REENTRANT;1;__STDC__;1;__cplusplus;201402L;__STDC_UTF_16__;1;__STDC_UTF_32__;1;__STDC_HOSTED__;1;__GNUC__;8;__GNUC_MINOR__;1;__GNUC_PATCHLEVEL__;0;__VERSION__;"8.1.0";__ATOMIC_RELAXED;0;__ATOMIC_SEQ_CST;5;__ATOMIC_ACQUIRE;2;__ATOMIC_RELEASE;3;__ATOMIC_ACQ_REL;4;__ATOMIC_CONSUME;1;__pic__;1;__PIC__;1;__FINITE_MATH_ONLY__;0;__SIZEOF_INT__;4;__SIZEOF_LONG__;4;__SIZEOF_LONG_LONG__;8;__SIZEOF_SHORT__;2;__SIZEOF_FLOAT__;4;__SIZEOF_DOUBLE__;8;__SIZEOF_LONG_DOUBLE__;16;__SIZEOF_SIZE_T__;8;__CHAR_BIT__;8;__BIGGEST_ALIGNMENT__;16;__ORDER_LITTLE_ENDIAN__;1234;__ORDER_BIG_ENDIAN__;4321;__ORDER_PDP_ENDIAN__;3412;__BYTE_ORDER__;__ORDER_LITTLE_ENDIAN__;__FLOAT_WORD_ORDER__;__ORDER_LITTLE_ENDIAN__;__SIZEOF_POINTER__;8;__GNUG__;8;__SIZE_TYPE__;long long unsigned int;__PTRDIFF_TYPE__;long long int;__WCHAR_TYPE__;short unsigned int;__WINT_TYPE__;short unsigned int;__INTMAX_TYPE__;long long int;__UINTMAX_TYPE__;long long unsigned int;__CHAR16_TYPE__;short unsigned int;__CHAR32_TYPE__;unsigned int;__SIG_ATOMIC_TYPE__;int;__INT8_TYPE__;signed char;__INT16_TYPE__;short int;__INT32_TYPE__;int;__INT64_TYPE__;long long int;__UINT8_TYPE__;unsigned char;__UINT16_TYPE__;short unsigned int;__UINT32_TYPE__;unsigned int;__UINT64_TYPE__;long long unsigned int;__INT_LEAST8_TYPE__;signed char;__INT_LEAST16_TYPE__;short int;__INT_LEAST32_TYPE__;int;__INT_LEAST64_TYPE__;long long int;__UINT_LEAST8_TYPE__;unsigned char;__UINT_LEAST16_TYPE__;short unsigned int;__UINT_LEAST32_TYPE__;unsigned int;__UINT_LEAST64_TYPE__;long long unsigned int;__INT_FAST8_TYPE__;signed char;__INT_FAST16_TYPE__;short int;__INT_FAST32_TYPE__;int;__INT_FAST64_TYPE__;long long int;__UINT_FAST8_TYPE__;unsigned char;__UINT_FAST16_TYPE__;short unsigned int;__UINT_FAST32_TYPE__;unsigned int;__UINT_FAST64_TYPE__;long long unsigned int;__INTPTR_TYPE__;long long int;__UINTPTR_TYPE__;long long unsigned int;__has_include(STR);__has_include__(STR);__has_include_next(STR);__has_include_next__(STR);__GXX_WEAK__;1;__DEPRECATED;1;__GXX_RTTI;1;__cpp_rtti;199711;__GXX_EXPERIMENTAL_CXX0X__;1;__cpp_binary_literals;201304;__cpp_hex_float;201603;__cpp_runtime_arrays;198712;__cpp_unicode_characters;200704;__cpp_raw_strings;200710;__cpp_unicode_literals;200710;__cpp_user_defined_literals;200809;__cpp_lambdas;200907;__cpp_range_based_for;200907;__cpp_static_assert;200410;__cpp_decltype;200707;__cpp_attributes;200809;__cpp_rvalue_reference;200610;__cpp_rvalue_references;200610;__cpp_variadic_templates;200704;__cpp_initializer_lists;200806;__cpp_delegating_constructors;200604;__cpp_nsdmi;200809;__cpp_inheriting_constructors;201511;__cpp_ref_qualifiers;200710;__cpp_alias_templates;200704;__cpp_return_type_deduction;201304;__cpp_init_captures;201304;__cpp_generic_lambdas;201304;__cpp_constexpr;201304;__cpp_decltype_auto;201304;__cpp_aggregate_nsdmi;201304;__cpp_variable_templates;201304;__cpp_digit_separators;201309;__cpp_sized_deallocation;201309;__cpp_threadsafe_static_init;200806;__EXCEPTIONS;1;__cpp_exceptions;199711;__GXX_ABI_VERSION;1012;__SCHAR_MAX__;0x7f;__SHRT_MAX__;0x7fff;__INT_MAX__;0x7fffffff;__LONG_MAX__;0x7fffffffL;__LONG_LONG_MAX__;0x7fffffffffffffffLL;__WCHAR_MAX__;0xffff;__WCHAR_MIN__;0;__WINT_MAX__;0xffff;__WINT_MIN__;0;__PTRDIFF_MAX__;0x7fffffffffffffffLL;__SIZE_MAX__;0xffffffffffffffffULL;__SCHAR_WIDTH__;8;__SHRT_WIDTH__;16;__INT_WIDTH__;32;__LONG_WIDTH__;32;__LONG_LONG_WIDTH__;64;__WCHAR_WIDTH__;16;__WINT_WIDTH__;16;__PTRDIFF_WIDTH__;64;__SIZE_WIDTH__;64;__GLIBCXX_TYPE_INT_N_0;__int128;__GLIBCXX_BITSIZE_INT_N_0;128;__INTMAX_MAX__;0x7fffffffffffffffLL;__INTMAX_C(c);c ## LL;__UINTMAX_MAX__;0xffffffffffffffffULL;__UINTMAX_C(c);c ## ULL;__INTMAX_WIDTH__;64;__SIG_ATOMIC_MAX__;0x7fffffff;__SIG_ATOMIC_MIN__;(-__SIG_ATOMIC_MAX__ - 1);__SIG_ATOMIC_WIDTH__;32;__INT8_MAX__;0x7f;__INT16_MAX__;0x7fff;__INT32_MAX__;0x7fffffff;__INT64_MAX__;0x7fffffffffffffffLL;__UINT8_MAX__;0xff;__UINT16_MAX__;0xffff;__UINT32_MAX__;0xffffffffU;__UINT64_MAX__;0xffffffffffffffffULL;__INT_LEAST8_MAX__;0x7f;__INT8_C(c);c;__INT_LEAST8_WIDTH__;8;__INT_LEAST16_MAX__;0x7fff;__INT16_C(c);c;__INT_LEAST16_WIDTH__;16;__INT_LEAST32_MAX__;0x7fffffff;__INT32_C(c);c;__INT_LEAST32_WIDTH__;32;__INT_LEAST64_MAX__;0x7fffffffffffffffLL;__INT64_C(c);c ## LL;__INT_LEAST64_WIDTH__;64;__UINT_LEAST8_MAX__;0xff;__UINT8_C(c);c;__UINT_LEAST16_MAX__;0xffff;__UINT16_C(c);c;__UINT_LEAST32_MAX__;0xffffffffU;__UINT32_C(c);c ## U;__UINT_LEAST64_MAX__;0xffffffffffffffffULL;__UINT64_C(c);c ## ULL;__INT_FAST8_MAX__;0x7f;__INT_FAST8_WIDTH__;8;__INT_FAST16_MAX__;0x7fff;__INT_FAST16_WIDTH__;16;__INT_FAST32_MAX__;0x7fffffff;__INT_FAST32_WIDTH__;32;__INT_FAST64_MAX__;0x7fffffffffffffffLL;__INT_FAST64_WIDTH__;64;__UINT_FAST8_MAX__;0xff;__UINT_FAST16_MAX__;0xffff;__UINT_FAST32_MAX__;0xffffffffU;__UINT_FAST64_MAX__;0xffffffffffffffffULL;__INTPTR_MAX__;0x7fffffffffffffffLL;__INTPTR_WIDTH__;64;__UINTPTR_MAX__;0xffffffffffffffffULL;__GCC_IEC_559;2;__GCC_IEC_559_COMPLEX;2;__FLT_EVAL_METHOD__;0;__FLT_EVAL_METHOD_TS_18661_3__;0;__DEC_EVAL_METHOD__;2;__FLT_RADIX__;2;__FLT_MANT_DIG__;24;__FLT_DIG__;6;__FLT_MIN_EXP__;(-125);__FLT_MIN_10_EXP__;(-37);__FLT_MAX_EXP__;128;__FLT_MAX_10_EXP__;38;__FLT_DECIMAL_DIG__;9;__FLT_MAX__;3.40282346638528859811704183484516925e+38F;__FLT_MIN__;1.17549435082228750796873653722224568e-38F;__FLT_EPSILON__;1.19209289550781250000000000000000000e-7F;__FLT_DENORM_MIN__;1.40129846432481707092372958328991613e-45F;__FLT_HAS_DENORM__;1;__FLT_HAS_INFINITY__;1;__FLT_HAS_QUIET_NAN__;1;__DBL_MANT_DIG__;53;__DBL_DIG__;15;__DBL_MIN_EXP__;(-1021);__DBL_MIN_10_EXP__;(-307);__DBL_MAX_EXP__;1024;__DBL_MAX_10_EXP__;308;__DBL_DECIMAL_DIG__;17;__DBL_MAX__;double(1.79769313486231570814527423731704357e+308L);__DBL_MIN__;double(2.22507385850720138309023271733240406e-308L);__DBL_EPSILON__;double(2.22044604925031308084726333618164062e-16L);__DBL_DENORM_MIN__;double(4.94065645841246544176568792868221372e-324L);__DBL_HAS_DENORM__;1;__DBL_HAS_INFINITY__;1;__DBL_HAS_QUIET_NAN__;1;__LDBL_MANT_DIG__;64;__LDBL_DIG__;18;__LDBL_MIN_EXP__;(-16381);__LDBL_MIN_10_EXP__;(-4931);__LDBL_MAX_EXP__;16384;__LDBL_MAX_10_EXP__;4932;__DECIMAL_DIG__;21;__LDBL_DECIMAL_DIG__;21;__LDBL_MAX__;1.18973149535723176502126385303097021e+4932L;__LDBL_MIN__;3.36210314311209350626267781732175260e-4932L;__LDBL_EPSILON__;1.08420217248550443400745280086994171e-19L;__LDBL_DENORM_MIN__;3.64519953188247460252840593361941982e-4951L;__LDBL_HAS_DENORM__;1;__LDBL_HAS_INFINITY__;1;__LDBL_HAS_QUIET_NAN__;1;__FLT32_MANT_DIG__;24;__FLT32_DIG__;6;__FLT32_MIN_EXP__;(-125);__FLT32_MIN_10_EXP__;(-37);__FLT32_MAX_EXP__;128;__FLT32_MAX_10_EXP__;38;__FLT32_DECIMAL_DIG__;9;__FLT32_MAX__;3.40282346638528859811704183484516925e+38F32;__FLT32_MIN__;1.17549435082228750796873653722224568e-38F32;__FLT32_EPSILON__;1.19209289550781250000000000000000000e-7F32;__FLT32_DENORM_MIN__;1.40129846432481707092372958328991613e-45F32;__FLT32_HAS_DENORM__;1;__FLT32_HAS_INFINITY__;1;__FLT32_HAS_QUIET_NAN__;1;__FLT64_MANT_DIG__;53;__FLT64_DIG__;15;__FLT64_MIN_EXP__;(-1021);__FLT64_MIN_10_EXP__;(-307);__FLT64_MAX_EXP__;1024;__FLT64_MAX_10_EXP__;308;__FLT64_DECIMAL_DIG__;17;__FLT64_MAX__;1.79769313486231570814527423731704357e+308F64;__FLT64_MIN__;2.22507385850720138309023271733240406e-308F64;__FLT64_EPSILON__;2.22044604925031308084726333618164062e-16F64;__FLT64_DENORM_MIN__;4.94065645841246544176568792868221372e-324F64;__FLT64_HAS_DENORM__;1;__FLT64_HAS_INFINITY__;1;__FLT64_HAS_QUIET_NAN__;1;__FLT128_MANT_DIG__;113;__FLT128_DIG__;33;__FLT128_MIN_EXP__;(-16381);__FLT128_MIN_10_EXP__;(-4931);__FLT128_MAX_EXP__;16384;__FLT128_MAX_10_EXP__;4932;__FLT128_DECIMAL_DIG__;36;__FLT128_MAX__;1.18973149535723176508575932662800702e+4932F128;__FLT128_MIN__;3.36210314311209350626267781732175260e-4932F128;__FLT128_EPSILON__;1.92592994438723585305597794258492732e-34F128;__FLT128_DENORM_MIN__;6.47517511943802511092443895822764655e-4966F128;__FLT128_HAS_DENORM__;1;__FLT128_HAS_INFINITY__;1;__FLT128_HAS_QUIET_NAN__;1;__FLT32X_MANT_DIG__;53;__FLT32X_DIG__;15;__FLT32X_MIN_EXP__;(-1021);__FLT32X_MIN_10_EXP__;(-307);__FLT32X_MAX_EXP__;1024;__FLT32X_MAX_10_EXP__;308;__FLT32X_DECIMAL_DIG__;17;__FLT32X_MAX__;1.79769313486231570814527423731704357e+308F32x;__FLT32X_MIN__;2.22507385850720138309023271733240406e-308F32x;__FLT32X_EPSILON__;2.22044604925031308084726333618164062e-16F32x;__FLT32X_DENORM_MIN__;4.94065645841246544176568792868221372e-324F32x;__FLT32X_HAS_DENORM__;1;__FLT32X_HAS_INFINITY__;1;__FLT32X_HAS_QUIET_NAN__;1;__FLT64X_MANT_DIG__;64;__FLT64X_DIG__;18;__FLT64X_MIN_EXP__;(-16381);__FLT64X_MIN_10_EXP__;(-4931);__FLT64X_MAX_EXP__;16384;__FLT64X_MAX_10_EXP__;4932;__FLT64X_DECIMAL_DIG__;21;__FLT64X_MAX__;1.18973149535723176502126385303097021e+4932F64x;__FLT64X_MIN__;3.36210314311209350626267781732175260e-4932F64x;__FLT64X_EPSILON__;1.08420217248550443400745280086994171e-19F64x;__FLT64X_DENORM_MIN__;3.64519953188247460252840593361941982e-4951F64x;__FLT64X_HAS_DENORM__;1;__FLT64X_HAS_INFINITY__;1;__FLT64X_HAS_QUIET_NAN__;1;__DEC32_MANT_DIG__;7;__DEC32_MIN_EXP__;(-94);__DEC32_MAX_EXP__;97;__DEC32_MIN__;1E-95DF;__DEC32_MAX__;9.999999E96DF;__DEC32_EPSILON__;1E-6DF;__DEC32_SUBNORMAL_MIN__;0.000001E-95DF;__DEC64_MANT_DIG__;16;__DEC64_MIN_EXP__;(-382);__DEC64_MAX_EXP__;385;__DEC64_MIN__;1E-383DD;__DEC64_MAX__;9.999999999999999E384DD;__DEC64_EPSILON__;1E-15DD;__DEC64_SUBNORMAL_MIN__;0.000000000000001E-383DD;__DEC128_MANT_DIG__;34;__DEC128_MIN_EXP__;(-6142);__DEC128_MAX_EXP__;6145;__DEC128_MIN__;1E-6143DL;__DEC128_MAX__;9.999999999999999999999999999999999E6144DL;__DEC128_EPSILON__;1E-33DL;__DEC128_SUBNORMAL_MIN__;0.000000000000000000000000000000001E-6143DL;__REGISTER_PREFIX__; ;__USER_LABEL_PREFIX__; ;__GNUC_STDC_INLINE__;1;__NO_INLINE__;1;__WCHAR_UNSIGNED__;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16;1;__GCC_ATOMIC_BOOL_LOCK_FREE;2;__GCC_ATOMIC_CHAR_LOCK_FREE;2;__GCC_ATOMIC_CHAR16_T_LOCK_FREE;2;__GCC_ATOMIC_CHAR32_T_LOCK_FREE;2;__GCC_ATOMIC_WCHAR_T_LOCK_FREE;2;__GCC_ATOMIC_SHORT_LOCK_FREE;2;__GCC_ATOMIC_INT_LOCK_FREE;2;__GCC_ATOMIC_LONG_LOCK_FREE;2;__GCC_ATOMIC_LLONG_LOCK_FREE;2;__GCC_ATOMIC_TEST_AND_SET_TRUEVAL;1;__GCC_ATOMIC_POINTER_LOCK_FREE;2;__PRAGMA_REDEFINE_EXTNAME;1;__SIZEOF_INT128__;16;__SIZEOF_WCHAR_T__;2;__SIZEOF_WINT_T__;2;__SIZEOF_PTRDIFF_T__;8;__amd64;1;__amd64__;1;__x86_64;1;__x86_64__;1;__SIZEOF_FLOAT80__;16;__SIZEOF_FLOAT128__;16;__ATOMIC_HLE_ACQUIRE;65536;__ATOMIC_HLE_RELEASE;131072;__GCC_ASM_FLAG_OUTPUTS__;1;__nocona;1;__nocona__;1;__tune_core2__;1;__code_model_medium__;1;__MMX__;1;__SSE__;1;__SSE2__;1;__SSE3__;1;__FXSR__;1;__SSE_MATH__;1;__SSE2_MATH__;1;__SEG_FS;1;__SEG_GS;1;__SEH__;1;__stdcall;__attribute__((__stdcall__));__fastcall;__attribute__((__fastcall__));__thiscall;__attribute__((__thiscall__));__cdecl;__attribute__((__cdecl__));_stdcall;__attribute__((__stdcall__));_fastcall;__attribute__((__fastcall__));_thiscall;__attribute__((__thiscall__));_cdecl;__attribute__((__cdecl__));__GXX_MERGED_TYPEINFO_NAMES;0;__GXX_TYPEINFO_EQUALITY_INLINE;0;__MSVCRT__;1;__MINGW32__;1;_WIN32;1;__WIN32;1;__WIN32__;1;WIN32;1;__WINNT;1;__WINNT__;1;WINNT;1;_INTEGRAL_MAX_BITS;64;__MINGW64__;1;__WIN64;1;__WIN64__;1;WIN64;1;_WIN64;1;__declspec(x);__attribute__((x));__DECIMAL_BID_FORMAT__;1;_REENTRANT;1
+//CXX compiler system include directories
+CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS:INTERNAL=C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include
+//C compiler system defined macros
+CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS:INTERNAL=__STDC__;1;__STDC_VERSION__;201710L;__STDC_UTF_16__;1;__STDC_UTF_32__;1;__STDC_HOSTED__;1;__GNUC__;8;__GNUC_MINOR__;1;__GNUC_PATCHLEVEL__;0;__VERSION__;"8.1.0";__ATOMIC_RELAXED;0;__ATOMIC_SEQ_CST;5;__ATOMIC_ACQUIRE;2;__ATOMIC_RELEASE;3;__ATOMIC_ACQ_REL;4;__ATOMIC_CONSUME;1;__pic__;1;__PIC__;1;__FINITE_MATH_ONLY__;0;__SIZEOF_INT__;4;__SIZEOF_LONG__;4;__SIZEOF_LONG_LONG__;8;__SIZEOF_SHORT__;2;__SIZEOF_FLOAT__;4;__SIZEOF_DOUBLE__;8;__SIZEOF_LONG_DOUBLE__;16;__SIZEOF_SIZE_T__;8;__CHAR_BIT__;8;__BIGGEST_ALIGNMENT__;16;__ORDER_LITTLE_ENDIAN__;1234;__ORDER_BIG_ENDIAN__;4321;__ORDER_PDP_ENDIAN__;3412;__BYTE_ORDER__;__ORDER_LITTLE_ENDIAN__;__FLOAT_WORD_ORDER__;__ORDER_LITTLE_ENDIAN__;__SIZEOF_POINTER__;8;__SIZE_TYPE__;long long unsigned int;__PTRDIFF_TYPE__;long long int;__WCHAR_TYPE__;short unsigned int;__WINT_TYPE__;short unsigned int;__INTMAX_TYPE__;long long int;__UINTMAX_TYPE__;long long unsigned int;__CHAR16_TYPE__;short unsigned int;__CHAR32_TYPE__;unsigned int;__SIG_ATOMIC_TYPE__;int;__INT8_TYPE__;signed char;__INT16_TYPE__;short int;__INT32_TYPE__;int;__INT64_TYPE__;long long int;__UINT8_TYPE__;unsigned char;__UINT16_TYPE__;short unsigned int;__UINT32_TYPE__;unsigned int;__UINT64_TYPE__;long long unsigned int;__INT_LEAST8_TYPE__;signed char;__INT_LEAST16_TYPE__;short int;__INT_LEAST32_TYPE__;int;__INT_LEAST64_TYPE__;long long int;__UINT_LEAST8_TYPE__;unsigned char;__UINT_LEAST16_TYPE__;short unsigned int;__UINT_LEAST32_TYPE__;unsigned int;__UINT_LEAST64_TYPE__;long long unsigned int;__INT_FAST8_TYPE__;signed char;__INT_FAST16_TYPE__;short int;__INT_FAST32_TYPE__;int;__INT_FAST64_TYPE__;long long int;__UINT_FAST8_TYPE__;unsigned char;__UINT_FAST16_TYPE__;short unsigned int;__UINT_FAST32_TYPE__;unsigned int;__UINT_FAST64_TYPE__;long long unsigned int;__INTPTR_TYPE__;long long int;__UINTPTR_TYPE__;long long unsigned int;__has_include(STR);__has_include__(STR);__has_include_next(STR);__has_include_next__(STR);__GXX_ABI_VERSION;1012;__SCHAR_MAX__;0x7f;__SHRT_MAX__;0x7fff;__INT_MAX__;0x7fffffff;__LONG_MAX__;0x7fffffffL;__LONG_LONG_MAX__;0x7fffffffffffffffLL;__WCHAR_MAX__;0xffff;__WCHAR_MIN__;0;__WINT_MAX__;0xffff;__WINT_MIN__;0;__PTRDIFF_MAX__;0x7fffffffffffffffLL;__SIZE_MAX__;0xffffffffffffffffULL;__SCHAR_WIDTH__;8;__SHRT_WIDTH__;16;__INT_WIDTH__;32;__LONG_WIDTH__;32;__LONG_LONG_WIDTH__;64;__WCHAR_WIDTH__;16;__WINT_WIDTH__;16;__PTRDIFF_WIDTH__;64;__SIZE_WIDTH__;64;__INTMAX_MAX__;0x7fffffffffffffffLL;__INTMAX_C(c);c ## LL;__UINTMAX_MAX__;0xffffffffffffffffULL;__UINTMAX_C(c);c ## ULL;__INTMAX_WIDTH__;64;__SIG_ATOMIC_MAX__;0x7fffffff;__SIG_ATOMIC_MIN__;(-__SIG_ATOMIC_MAX__ - 1);__SIG_ATOMIC_WIDTH__;32;__INT8_MAX__;0x7f;__INT16_MAX__;0x7fff;__INT32_MAX__;0x7fffffff;__INT64_MAX__;0x7fffffffffffffffLL;__UINT8_MAX__;0xff;__UINT16_MAX__;0xffff;__UINT32_MAX__;0xffffffffU;__UINT64_MAX__;0xffffffffffffffffULL;__INT_LEAST8_MAX__;0x7f;__INT8_C(c);c;__INT_LEAST8_WIDTH__;8;__INT_LEAST16_MAX__;0x7fff;__INT16_C(c);c;__INT_LEAST16_WIDTH__;16;__INT_LEAST32_MAX__;0x7fffffff;__INT32_C(c);c;__INT_LEAST32_WIDTH__;32;__INT_LEAST64_MAX__;0x7fffffffffffffffLL;__INT64_C(c);c ## LL;__INT_LEAST64_WIDTH__;64;__UINT_LEAST8_MAX__;0xff;__UINT8_C(c);c;__UINT_LEAST16_MAX__;0xffff;__UINT16_C(c);c;__UINT_LEAST32_MAX__;0xffffffffU;__UINT32_C(c);c ## U;__UINT_LEAST64_MAX__;0xffffffffffffffffULL;__UINT64_C(c);c ## ULL;__INT_FAST8_MAX__;0x7f;__INT_FAST8_WIDTH__;8;__INT_FAST16_MAX__;0x7fff;__INT_FAST16_WIDTH__;16;__INT_FAST32_MAX__;0x7fffffff;__INT_FAST32_WIDTH__;32;__INT_FAST64_MAX__;0x7fffffffffffffffLL;__INT_FAST64_WIDTH__;64;__UINT_FAST8_MAX__;0xff;__UINT_FAST16_MAX__;0xffff;__UINT_FAST32_MAX__;0xffffffffU;__UINT_FAST64_MAX__;0xffffffffffffffffULL;__INTPTR_MAX__;0x7fffffffffffffffLL;__INTPTR_WIDTH__;64;__UINTPTR_MAX__;0xffffffffffffffffULL;__GCC_IEC_559;2;__GCC_IEC_559_COMPLEX;2;__FLT_EVAL_METHOD__;0;__FLT_EVAL_METHOD_TS_18661_3__;0;__DEC_EVAL_METHOD__;2;__FLT_RADIX__;2;__FLT_MANT_DIG__;24;__FLT_DIG__;6;__FLT_MIN_EXP__;(-125);__FLT_MIN_10_EXP__;(-37);__FLT_MAX_EXP__;128;__FLT_MAX_10_EXP__;38;__FLT_DECIMAL_DIG__;9;__FLT_MAX__;3.40282346638528859811704183484516925e+38F;__FLT_MIN__;1.17549435082228750796873653722224568e-38F;__FLT_EPSILON__;1.19209289550781250000000000000000000e-7F;__FLT_DENORM_MIN__;1.40129846432481707092372958328991613e-45F;__FLT_HAS_DENORM__;1;__FLT_HAS_INFINITY__;1;__FLT_HAS_QUIET_NAN__;1;__DBL_MANT_DIG__;53;__DBL_DIG__;15;__DBL_MIN_EXP__;(-1021);__DBL_MIN_10_EXP__;(-307);__DBL_MAX_EXP__;1024;__DBL_MAX_10_EXP__;308;__DBL_DECIMAL_DIG__;17;__DBL_MAX__;((double)1.79769313486231570814527423731704357e+308L);__DBL_MIN__;((double)2.22507385850720138309023271733240406e-308L);__DBL_EPSILON__;((double)2.22044604925031308084726333618164062e-16L);__DBL_DENORM_MIN__;((double)4.94065645841246544176568792868221372e-324L);__DBL_HAS_DENORM__;1;__DBL_HAS_INFINITY__;1;__DBL_HAS_QUIET_NAN__;1;__LDBL_MANT_DIG__;64;__LDBL_DIG__;18;__LDBL_MIN_EXP__;(-16381);__LDBL_MIN_10_EXP__;(-4931);__LDBL_MAX_EXP__;16384;__LDBL_MAX_10_EXP__;4932;__DECIMAL_DIG__;21;__LDBL_DECIMAL_DIG__;21;__LDBL_MAX__;1.18973149535723176502126385303097021e+4932L;__LDBL_MIN__;3.36210314311209350626267781732175260e-4932L;__LDBL_EPSILON__;1.08420217248550443400745280086994171e-19L;__LDBL_DENORM_MIN__;3.64519953188247460252840593361941982e-4951L;__LDBL_HAS_DENORM__;1;__LDBL_HAS_INFINITY__;1;__LDBL_HAS_QUIET_NAN__;1;__FLT32_MANT_DIG__;24;__FLT32_DIG__;6;__FLT32_MIN_EXP__;(-125);__FLT32_MIN_10_EXP__;(-37);__FLT32_MAX_EXP__;128;__FLT32_MAX_10_EXP__;38;__FLT32_DECIMAL_DIG__;9;__FLT32_MAX__;3.40282346638528859811704183484516925e+38F32;__FLT32_MIN__;1.17549435082228750796873653722224568e-38F32;__FLT32_EPSILON__;1.19209289550781250000000000000000000e-7F32;__FLT32_DENORM_MIN__;1.40129846432481707092372958328991613e-45F32;__FLT32_HAS_DENORM__;1;__FLT32_HAS_INFINITY__;1;__FLT32_HAS_QUIET_NAN__;1;__FLT64_MANT_DIG__;53;__FLT64_DIG__;15;__FLT64_MIN_EXP__;(-1021);__FLT64_MIN_10_EXP__;(-307);__FLT64_MAX_EXP__;1024;__FLT64_MAX_10_EXP__;308;__FLT64_DECIMAL_DIG__;17;__FLT64_MAX__;1.79769313486231570814527423731704357e+308F64;__FLT64_MIN__;2.22507385850720138309023271733240406e-308F64;__FLT64_EPSILON__;2.22044604925031308084726333618164062e-16F64;__FLT64_DENORM_MIN__;4.94065645841246544176568792868221372e-324F64;__FLT64_HAS_DENORM__;1;__FLT64_HAS_INFINITY__;1;__FLT64_HAS_QUIET_NAN__;1;__FLT128_MANT_DIG__;113;__FLT128_DIG__;33;__FLT128_MIN_EXP__;(-16381);__FLT128_MIN_10_EXP__;(-4931);__FLT128_MAX_EXP__;16384;__FLT128_MAX_10_EXP__;4932;__FLT128_DECIMAL_DIG__;36;__FLT128_MAX__;1.18973149535723176508575932662800702e+4932F128;__FLT128_MIN__;3.36210314311209350626267781732175260e-4932F128;__FLT128_EPSILON__;1.92592994438723585305597794258492732e-34F128;__FLT128_DENORM_MIN__;6.47517511943802511092443895822764655e-4966F128;__FLT128_HAS_DENORM__;1;__FLT128_HAS_INFINITY__;1;__FLT128_HAS_QUIET_NAN__;1;__FLT32X_MANT_DIG__;53;__FLT32X_DIG__;15;__FLT32X_MIN_EXP__;(-1021);__FLT32X_MIN_10_EXP__;(-307);__FLT32X_MAX_EXP__;1024;__FLT32X_MAX_10_EXP__;308;__FLT32X_DECIMAL_DIG__;17;__FLT32X_MAX__;1.79769313486231570814527423731704357e+308F32x;__FLT32X_MIN__;2.22507385850720138309023271733240406e-308F32x;__FLT32X_EPSILON__;2.22044604925031308084726333618164062e-16F32x;__FLT32X_DENORM_MIN__;4.94065645841246544176568792868221372e-324F32x;__FLT32X_HAS_DENORM__;1;__FLT32X_HAS_INFINITY__;1;__FLT32X_HAS_QUIET_NAN__;1;__FLT64X_MANT_DIG__;64;__FLT64X_DIG__;18;__FLT64X_MIN_EXP__;(-16381);__FLT64X_MIN_10_EXP__;(-4931);__FLT64X_MAX_EXP__;16384;__FLT64X_MAX_10_EXP__;4932;__FLT64X_DECIMAL_DIG__;21;__FLT64X_MAX__;1.18973149535723176502126385303097021e+4932F64x;__FLT64X_MIN__;3.36210314311209350626267781732175260e-4932F64x;__FLT64X_EPSILON__;1.08420217248550443400745280086994171e-19F64x;__FLT64X_DENORM_MIN__;3.64519953188247460252840593361941982e-4951F64x;__FLT64X_HAS_DENORM__;1;__FLT64X_HAS_INFINITY__;1;__FLT64X_HAS_QUIET_NAN__;1;__DEC32_MANT_DIG__;7;__DEC32_MIN_EXP__;(-94);__DEC32_MAX_EXP__;97;__DEC32_MIN__;1E-95DF;__DEC32_MAX__;9.999999E96DF;__DEC32_EPSILON__;1E-6DF;__DEC32_SUBNORMAL_MIN__;0.000001E-95DF;__DEC64_MANT_DIG__;16;__DEC64_MIN_EXP__;(-382);__DEC64_MAX_EXP__;385;__DEC64_MIN__;1E-383DD;__DEC64_MAX__;9.999999999999999E384DD;__DEC64_EPSILON__;1E-15DD;__DEC64_SUBNORMAL_MIN__;0.000000000000001E-383DD;__DEC128_MANT_DIG__;34;__DEC128_MIN_EXP__;(-6142);__DEC128_MAX_EXP__;6145;__DEC128_MIN__;1E-6143DL;__DEC128_MAX__;9.999999999999999999999999999999999E6144DL;__DEC128_EPSILON__;1E-33DL;__DEC128_SUBNORMAL_MIN__;0.000000000000000000000000000000001E-6143DL;__REGISTER_PREFIX__; ;__USER_LABEL_PREFIX__; ;__GNUC_STDC_INLINE__;1;__NO_INLINE__;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8;1;__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16;1;__GCC_ATOMIC_BOOL_LOCK_FREE;2;__GCC_ATOMIC_CHAR_LOCK_FREE;2;__GCC_ATOMIC_CHAR16_T_LOCK_FREE;2;__GCC_ATOMIC_CHAR32_T_LOCK_FREE;2;__GCC_ATOMIC_WCHAR_T_LOCK_FREE;2;__GCC_ATOMIC_SHORT_LOCK_FREE;2;__GCC_ATOMIC_INT_LOCK_FREE;2;__GCC_ATOMIC_LONG_LOCK_FREE;2;__GCC_ATOMIC_LLONG_LOCK_FREE;2;__GCC_ATOMIC_TEST_AND_SET_TRUEVAL;1;__GCC_ATOMIC_POINTER_LOCK_FREE;2;__PRAGMA_REDEFINE_EXTNAME;1;__SIZEOF_INT128__;16;__SIZEOF_WCHAR_T__;2;__SIZEOF_WINT_T__;2;__SIZEOF_PTRDIFF_T__;8;__amd64;1;__amd64__;1;__x86_64;1;__x86_64__;1;__SIZEOF_FLOAT80__;16;__SIZEOF_FLOAT128__;16;__ATOMIC_HLE_ACQUIRE;65536;__ATOMIC_HLE_RELEASE;131072;__GCC_ASM_FLAG_OUTPUTS__;1;__nocona;1;__nocona__;1;__tune_core2__;1;__code_model_medium__;1;__MMX__;1;__SSE__;1;__SSE2__;1;__SSE3__;1;__FXSR__;1;__SSE_MATH__;1;__SSE2_MATH__;1;__SEG_FS;1;__SEG_GS;1;__SEH__;1;__stdcall;__attribute__((__stdcall__));__fastcall;__attribute__((__fastcall__));__thiscall;__attribute__((__thiscall__));__cdecl;__attribute__((__cdecl__));_stdcall;__attribute__((__stdcall__));_fastcall;__attribute__((__fastcall__));_thiscall;__attribute__((__thiscall__));_cdecl;__attribute__((__cdecl__));__GXX_MERGED_TYPEINFO_NAMES;0;__GXX_TYPEINFO_EQUALITY_INLINE;0;__MSVCRT__;1;__MINGW32__;1;_WIN32;1;__WIN32;1;__WIN32__;1;WIN32;1;__WINNT;1;__WINNT__;1;WINNT;1;_INTEGRAL_MAX_BITS;64;__MINGW64__;1;__WIN64;1;__WIN64__;1;WIN64;1;_WIN64;1;__declspec(x);__attribute__((x));__DECIMAL_BID_FORMAT__;1;_REENTRANT;1
+//C compiler system include directories
+CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS:INTERNAL=C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include
+//Name of generator.
+CMAKE_GENERATOR:INTERNAL=MinGW Makefiles
+//Generator instance identifier.
+CMAKE_GENERATOR_INSTANCE:INTERNAL=
+//Name of generator platform.
+CMAKE_GENERATOR_PLATFORM:INTERNAL=
+//Name of generator toolset.
+CMAKE_GENERATOR_TOOLSET:INTERNAL=
+//Source directory with the top level CMakeLists.txt file for this
+// project
+CMAKE_HOME_DIRECTORY:INTERNAL=D:/2021_2/cids-server
+//ADVANCED property for variable: CMAKE_LINKER
+CMAKE_LINKER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MAKE_PROGRAM
+CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
+CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
+CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
+CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_NM
+CMAKE_NM-ADVANCED:INTERNAL=1
+//number of local generators
+CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJCOPY
+CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJDUMP
+CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
+//Platform information initialized
+CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RANLIB
+CMAKE_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_COMPILER
+CMAKE_RC_COMPILER-ADVANCED:INTERNAL=1
+CMAKE_RC_COMPILER_WORKS:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS
+CMAKE_RC_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_DEBUG
+CMAKE_RC_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_MINSIZEREL
+CMAKE_RC_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_RELEASE
+CMAKE_RC_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_RELWITHDEBINFO
+CMAKE_RC_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_READELF
+CMAKE_READELF-ADVANCED:INTERNAL=1
+//Path to CMake installation.
+CMAKE_ROOT:INTERNAL=C:/Users/XM/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/211.7142.21/bin/cmake/win/share/cmake-3.19
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
+CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
+CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
+CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
+CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_RPATH
+CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
+CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
+CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
+CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STRIP
+CMAKE_STRIP-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
+CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
+
diff --git a/cmake-build-debug/CMakeFiles/3.19.2/CMakeCCompiler.cmake b/cmake-build-debug/CMakeFiles/3.19.2/CMakeCCompiler.cmake
new file mode 100644
index 0000000..67f5999
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/3.19.2/CMakeCCompiler.cmake
@@ -0,0 +1,77 @@
+set(CMAKE_C_COMPILER "C:/BC/C/mingw64/bin/gcc.exe")
+set(CMAKE_C_COMPILER_ARG1 "")
+set(CMAKE_C_COMPILER_ID "GNU")
+set(CMAKE_C_COMPILER_VERSION "8.1.0")
+set(CMAKE_C_COMPILER_VERSION_INTERNAL "")
+set(CMAKE_C_COMPILER_WRAPPER "")
+set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11")
+set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert")
+set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes")
+set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros")
+set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert")
+
+set(CMAKE_C_PLATFORM_ID "MinGW")
+set(CMAKE_C_SIMULATE_ID "")
+set(CMAKE_C_COMPILER_FRONTEND_VARIANT "")
+set(CMAKE_C_SIMULATE_VERSION "")
+
+
+
+
+set(CMAKE_AR "C:/BC/C/mingw64/bin/ar.exe")
+set(CMAKE_C_COMPILER_AR "C:/BC/C/mingw64/bin/gcc-ar.exe")
+set(CMAKE_RANLIB "C:/BC/C/mingw64/bin/ranlib.exe")
+set(CMAKE_C_COMPILER_RANLIB "C:/BC/C/mingw64/bin/gcc-ranlib.exe")
+set(CMAKE_LINKER "C:/BC/C/mingw64/bin/ld.exe")
+set(CMAKE_MT "")
+set(CMAKE_COMPILER_IS_GNUCC 1)
+set(CMAKE_C_COMPILER_LOADED 1)
+set(CMAKE_C_COMPILER_WORKS TRUE)
+set(CMAKE_C_ABI_COMPILED TRUE)
+set(CMAKE_COMPILER_IS_MINGW 1)
+set(CMAKE_COMPILER_IS_CYGWIN )
+if(CMAKE_COMPILER_IS_CYGWIN)
+ set(CYGWIN 1)
+ set(UNIX 1)
+endif()
+
+set(CMAKE_C_COMPILER_ENV_VAR "CC")
+
+if(CMAKE_COMPILER_IS_MINGW)
+ set(MINGW 1)
+endif()
+set(CMAKE_C_COMPILER_ID_RUN 1)
+set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)
+set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
+set(CMAKE_C_LINKER_PREFERENCE 10)
+
+# Save compiler ABI information.
+set(CMAKE_C_SIZEOF_DATA_PTR "8")
+set(CMAKE_C_COMPILER_ABI "")
+set(CMAKE_C_LIBRARY_ARCHITECTURE "")
+
+if(CMAKE_C_SIZEOF_DATA_PTR)
+ set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_C_COMPILER_ABI)
+ set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
+endif()
+
+if(CMAKE_C_LIBRARY_ARCHITECTURE)
+ set(CMAKE_LIBRARY_ARCHITECTURE "")
+endif()
+
+set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "")
+if(CMAKE_C_CL_SHOWINCLUDES_PREFIX)
+ set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+
+
+
+
+set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include;C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed;C:/BC/C/mingw64/x86_64-w64-mingw32/include")
+set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "mingw32;gcc;moldname;mingwex;pthread;advapi32;shell32;user32;kernel32;iconv;mingw32;gcc;moldname;mingwex")
+set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0;C:/BC/C/mingw64/lib/gcc;C:/BC/C/mingw64/x86_64-w64-mingw32/lib;C:/BC/C/mingw64/lib")
+set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
diff --git a/cmake-build-debug/CMakeFiles/3.19.2/CMakeCXXCompiler.cmake b/cmake-build-debug/CMakeFiles/3.19.2/CMakeCXXCompiler.cmake
new file mode 100644
index 0000000..1766f01
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/3.19.2/CMakeCXXCompiler.cmake
@@ -0,0 +1,89 @@
+set(CMAKE_CXX_COMPILER "C:/BC/C/mingw64/bin/g++.exe")
+set(CMAKE_CXX_COMPILER_ARG1 "")
+set(CMAKE_CXX_COMPILER_ID "GNU")
+set(CMAKE_CXX_COMPILER_VERSION "8.1.0")
+set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
+set(CMAKE_CXX_COMPILER_WRAPPER "")
+set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "14")
+set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20")
+set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
+set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
+set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
+set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
+set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20")
+
+set(CMAKE_CXX_PLATFORM_ID "MinGW")
+set(CMAKE_CXX_SIMULATE_ID "")
+set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "")
+set(CMAKE_CXX_SIMULATE_VERSION "")
+
+
+
+
+set(CMAKE_AR "C:/BC/C/mingw64/bin/ar.exe")
+set(CMAKE_CXX_COMPILER_AR "C:/BC/C/mingw64/bin/gcc-ar.exe")
+set(CMAKE_RANLIB "C:/BC/C/mingw64/bin/ranlib.exe")
+set(CMAKE_CXX_COMPILER_RANLIB "C:/BC/C/mingw64/bin/gcc-ranlib.exe")
+set(CMAKE_LINKER "C:/BC/C/mingw64/bin/ld.exe")
+set(CMAKE_MT "")
+set(CMAKE_COMPILER_IS_GNUCXX 1)
+set(CMAKE_CXX_COMPILER_LOADED 1)
+set(CMAKE_CXX_COMPILER_WORKS TRUE)
+set(CMAKE_CXX_ABI_COMPILED TRUE)
+set(CMAKE_COMPILER_IS_MINGW 1)
+set(CMAKE_COMPILER_IS_CYGWIN )
+if(CMAKE_COMPILER_IS_CYGWIN)
+ set(CYGWIN 1)
+ set(UNIX 1)
+endif()
+
+set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
+
+if(CMAKE_COMPILER_IS_MINGW)
+ set(MINGW 1)
+endif()
+set(CMAKE_CXX_COMPILER_ID_RUN 1)
+set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;CPP)
+set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
+
+foreach (lang C OBJC OBJCXX)
+ if (CMAKE_${lang}_COMPILER_ID_RUN)
+ foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
+ list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
+ endforeach()
+ endif()
+endforeach()
+
+set(CMAKE_CXX_LINKER_PREFERENCE 30)
+set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
+
+# Save compiler ABI information.
+set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
+set(CMAKE_CXX_COMPILER_ABI "")
+set(CMAKE_CXX_LIBRARY_ARCHITECTURE "")
+
+if(CMAKE_CXX_SIZEOF_DATA_PTR)
+ set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_CXX_COMPILER_ABI)
+ set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
+endif()
+
+if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
+ set(CMAKE_LIBRARY_ARCHITECTURE "")
+endif()
+
+set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
+if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
+ set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+
+
+
+
+set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++;C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32;C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward;C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include;C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed;C:/BC/C/mingw64/x86_64-w64-mingw32/include")
+set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;mingw32;gcc_s;gcc;moldname;mingwex;pthread;advapi32;shell32;user32;kernel32;iconv;mingw32;gcc_s;gcc;moldname;mingwex")
+set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0;C:/BC/C/mingw64/lib/gcc;C:/BC/C/mingw64/x86_64-w64-mingw32/lib;C:/BC/C/mingw64/lib")
+set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
diff --git a/cmake-build-debug/CMakeFiles/3.19.2/CMakeDetermineCompilerABI_C.bin b/cmake-build-debug/CMakeFiles/3.19.2/CMakeDetermineCompilerABI_C.bin
new file mode 100644
index 0000000..89ba4ac
Binary files /dev/null and b/cmake-build-debug/CMakeFiles/3.19.2/CMakeDetermineCompilerABI_C.bin differ
diff --git a/cmake-build-debug/CMakeFiles/3.19.2/CMakeDetermineCompilerABI_CXX.bin b/cmake-build-debug/CMakeFiles/3.19.2/CMakeDetermineCompilerABI_CXX.bin
new file mode 100644
index 0000000..f47a09a
Binary files /dev/null and b/cmake-build-debug/CMakeFiles/3.19.2/CMakeDetermineCompilerABI_CXX.bin differ
diff --git a/cmake-build-debug/CMakeFiles/3.19.2/CMakeRCCompiler.cmake b/cmake-build-debug/CMakeFiles/3.19.2/CMakeRCCompiler.cmake
new file mode 100644
index 0000000..9a9eb15
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/3.19.2/CMakeRCCompiler.cmake
@@ -0,0 +1,6 @@
+set(CMAKE_RC_COMPILER "C:/BC/C/mingw64/bin/windres.exe")
+set(CMAKE_RC_COMPILER_ARG1 "")
+set(CMAKE_RC_COMPILER_LOADED 1)
+set(CMAKE_RC_SOURCE_FILE_EXTENSIONS rc;RC)
+set(CMAKE_RC_OUTPUT_EXTENSION .obj)
+set(CMAKE_RC_COMPILER_ENV_VAR "RC")
diff --git a/cmake-build-debug/CMakeFiles/3.19.2/CMakeSystem.cmake b/cmake-build-debug/CMakeFiles/3.19.2/CMakeSystem.cmake
new file mode 100644
index 0000000..1bcc695
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/3.19.2/CMakeSystem.cmake
@@ -0,0 +1,15 @@
+set(CMAKE_HOST_SYSTEM "Windows-10.0.19041")
+set(CMAKE_HOST_SYSTEM_NAME "Windows")
+set(CMAKE_HOST_SYSTEM_VERSION "10.0.19041")
+set(CMAKE_HOST_SYSTEM_PROCESSOR "AMD64")
+
+
+
+set(CMAKE_SYSTEM "Windows-10.0.19041")
+set(CMAKE_SYSTEM_NAME "Windows")
+set(CMAKE_SYSTEM_VERSION "10.0.19041")
+set(CMAKE_SYSTEM_PROCESSOR "AMD64")
+
+set(CMAKE_CROSSCOMPILING "FALSE")
+
+set(CMAKE_SYSTEM_LOADED 1)
diff --git a/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdC/CMakeCCompilerId.c b/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdC/CMakeCCompilerId.c
new file mode 100644
index 0000000..c126ec7
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdC/CMakeCCompilerId.c
@@ -0,0 +1,691 @@
+#ifdef __cplusplus
+# error "A C++ compiler has been selected for C."
+#endif
+
+#if defined(__18CXX)
+# define ID_VOID_MAIN
+#endif
+#if defined(__CLASSIC_C__)
+/* cv-qualifiers did not exist in K&R C */
+# define const
+# define volatile
+#endif
+
+
+/* Version number components: V=Version, R=Revision, P=Patch
+ Version date components: YYYY=Year, MM=Month, DD=Day */
+
+#if defined(__INTEL_COMPILER) || defined(__ICC)
+# define COMPILER_ID "Intel"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# if defined(__GNUC__)
+# define SIMULATE_ID "GNU"
+# endif
+ /* __INTEL_COMPILER = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+# if defined(__INTEL_COMPILER_UPDATE)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+# else
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+ /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# if defined(__GNUC__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+# elif defined(__GNUG__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(__PATHCC__)
+# define COMPILER_ID "PathScale"
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
+
+#elif defined(__BORLANDC__)
+# define COMPILER_ID "Borland"
+ /* __BORLANDC__ = 0xVRR */
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
+
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
+# define COMPILER_ID "Watcom"
+ /* __WATCOMC__ = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__WATCOMC__)
+# define COMPILER_ID "OpenWatcom"
+ /* __WATCOMC__ = VVRP + 1100 */
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__SUNPRO_C)
+# define COMPILER_ID "SunPro"
+# if __SUNPRO_C >= 0x5100
+ /* __SUNPRO_C = 0xVRRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
+# else
+ /* __SUNPRO_CC = 0xVRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF)
+# endif
+
+#elif defined(__HP_cc)
+# define COMPILER_ID "HP"
+ /* __HP_cc = VVRRPP */
+# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
+# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100)
+
+#elif defined(__DECC)
+# define COMPILER_ID "Compaq"
+ /* __DECC_VER = VVRRTPPPP */
+# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)
+# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100)
+# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000)
+
+#elif defined(__IBMC__) && defined(__COMPILER_VER__)
+# define COMPILER_ID "zOS"
+ /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
+
+#elif defined(__ibmxl__) && defined(__clang__)
+# define COMPILER_ID "XLClang"
+# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
+# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
+# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
+
+
+#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
+# define COMPILER_ID "XL"
+ /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
+
+#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
+# define COMPILER_ID "VisualAge"
+ /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10)
+
+#elif defined(__PGI)
+# define COMPILER_ID "PGI"
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+
+#elif defined(__TI_COMPILER_VERSION__)
+# define COMPILER_ID "TI"
+ /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
+
+#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
+# define COMPILER_ID "Fujitsu"
+
+#elif defined(__ghs__)
+# define COMPILER_ID "GHS"
+/* __GHS_VERSION_NUMBER = VVVVRP */
+# ifdef __GHS_VERSION_NUMBER
+# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
+# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
+# endif
+
+#elif defined(__TINYC__)
+# define COMPILER_ID "TinyCC"
+
+#elif defined(__BCC__)
+# define COMPILER_ID "Bruce"
+
+#elif defined(__SCO_VERSION__)
+# define COMPILER_ID "SCO"
+
+#elif defined(__ARMCC_VERSION) && !defined(__clang__)
+# define COMPILER_ID "ARMCC"
+#if __ARMCC_VERSION >= 1000000
+ /* __ARMCC_VERSION = VRRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#else
+ /* __ARMCC_VERSION = VRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#endif
+
+
+#elif defined(__clang__) && defined(__apple_build_version__)
+# define COMPILER_ID "AppleClang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
+
+#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
+# define COMPILER_ID "ARMClang"
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
+# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
+
+#elif defined(__clang__)
+# define COMPILER_ID "Clang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__GNUC__)
+# define COMPILER_ID "GNU"
+# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# if defined(__GNUC_MINOR__)
+# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(_MSC_VER)
+# define COMPILER_ID "MSVC"
+ /* _MSC_VER = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
+# if defined(_MSC_FULL_VER)
+# if _MSC_VER >= 1400
+ /* _MSC_FULL_VER = VVRRPPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
+# else
+ /* _MSC_FULL_VER = VVRRPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
+# endif
+# endif
+# if defined(_MSC_BUILD)
+# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
+# endif
+
+#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
+# define COMPILER_ID "ADSP"
+#if defined(__VISUALDSPVERSION__)
+ /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
+# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
+# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
+#endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# define COMPILER_ID "IAR"
+# if defined(__VER__) && defined(__ICCARM__)
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
+# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
+# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__))
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
+# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
+# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# endif
+
+#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)
+# define COMPILER_ID "SDCC"
+# if defined(__SDCC_VERSION_MAJOR)
+# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)
+# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)
+# else
+ /* SDCC = VRP */
+# define COMPILER_VERSION_MAJOR DEC(SDCC/100)
+# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(SDCC % 10)
+# endif
+
+
+/* These compilers are either not known or too old to define an
+ identification macro. Try to identify the platform and guess that
+ it is the native compiler. */
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID "HP"
+
+#else /* unknown compiler */
+# define COMPILER_ID ""
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(_CRAYC) || defined(__cray__)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name. */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+# define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+# define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+# define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+# define PLATFORM_ID "Windows3x"
+
+# elif defined(__VXWORKS__)
+# define PLATFORM_ID "VxWorks"
+
+# else /* unknown platform */
+# define PLATFORM_ID
+# endif
+
+#elif defined(__INTEGRITY)
+# if defined(INT_178B)
+# define PLATFORM_ID "Integrity178"
+
+# else /* regular Integrity */
+# define PLATFORM_ID "Integrity"
+# endif
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+ the architecture of the compiler being used. This is because
+ the compilers do not have flags that can change the architecture,
+ but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+# define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+# define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+# if _M_ARM == 4
+# define ARCHITECTURE_ID "ARMV4I"
+# elif _M_ARM == 5
+# define ARCHITECTURE_ID "ARMV5I"
+# else
+# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+# endif
+
+# elif defined(_M_MIPS)
+# define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+# define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+# define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCRX__)
+# define ARCHITECTURE_ID "RX"
+
+# elif defined(__ICCRH850__)
+# define ARCHITECTURE_ID "RH850"
+
+# elif defined(__ICCRL78__)
+# define ARCHITECTURE_ID "RL78"
+
+# elif defined(__ICCRISCV__)
+# define ARCHITECTURE_ID "RISCV"
+
+# elif defined(__ICCAVR__)
+# define ARCHITECTURE_ID "AVR"
+
+# elif defined(__ICC430__)
+# define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__ICCV850__)
+# define ARCHITECTURE_ID "V850"
+
+# elif defined(__ICC8051__)
+# define ARCHITECTURE_ID "8051"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__ghs__)
+# if defined(__PPC64__)
+# define ARCHITECTURE_ID "PPC64"
+
+# elif defined(__ppc__)
+# define ARCHITECTURE_ID "PPC"
+
+# elif defined(__ARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__x86_64__)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(__i386__)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__TI_COMPILER_VERSION__)
+# if defined(__TI_ARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__MSP430__)
+# define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__TMS320C28XX__)
+# define ARCHITECTURE_ID "TMS320C28x"
+
+# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
+# define ARCHITECTURE_ID "TMS320C6x"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#else
+# define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals. */
+#define DEC(n) \
+ ('0' + (((n) / 10000000)%10)), \
+ ('0' + (((n) / 1000000)%10)), \
+ ('0' + (((n) / 100000)%10)), \
+ ('0' + (((n) / 10000)%10)), \
+ ('0' + (((n) / 1000)%10)), \
+ ('0' + (((n) / 100)%10)), \
+ ('0' + (((n) / 10)%10)), \
+ ('0' + ((n) % 10))
+
+/* Convert integer to hex digit literals. */
+#define HEX(n) \
+ ('0' + ((n)>>28 & 0xF)), \
+ ('0' + ((n)>>24 & 0xF)), \
+ ('0' + ((n)>>20 & 0xF)), \
+ ('0' + ((n)>>16 & 0xF)), \
+ ('0' + ((n)>>12 & 0xF)), \
+ ('0' + ((n)>>8 & 0xF)), \
+ ('0' + ((n)>>4 & 0xF)), \
+ ('0' + ((n) & 0xF))
+
+/* Construct a string literal encoding the version number components. */
+#ifdef COMPILER_VERSION_MAJOR
+char const info_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+ COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+ '.', COMPILER_VERSION_MINOR,
+# ifdef COMPILER_VERSION_PATCH
+ '.', COMPILER_VERSION_PATCH,
+# ifdef COMPILER_VERSION_TWEAK
+ '.', COMPILER_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+ 'i','n','t','e','r','n','a','l','[',
+ COMPILER_VERSION_INTERNAL,']','\0'};
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+ SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+ '.', SIMULATE_VERSION_MINOR,
+# ifdef SIMULATE_VERSION_PATCH
+ '.', SIMULATE_VERSION_PATCH,
+# ifdef SIMULATE_VERSION_TWEAK
+ '.', SIMULATE_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
+
+
+
+#if !defined(__STDC__)
+# if (defined(_MSC_VER) && !defined(__clang__)) \
+ || (defined(__ibmxl__) || defined(__IBMC__))
+# define C_DIALECT "90"
+# else
+# define C_DIALECT
+# endif
+#elif __STDC_VERSION__ >= 201000L
+# define C_DIALECT "11"
+#elif __STDC_VERSION__ >= 199901L
+# define C_DIALECT "99"
+#else
+# define C_DIALECT "90"
+#endif
+const char* info_language_dialect_default =
+ "INFO" ":" "dialect_default[" C_DIALECT "]";
+
+/*--------------------------------------------------------------------------*/
+
+#ifdef ID_VOID_MAIN
+void main() {}
+#else
+# if defined(__CLASSIC_C__)
+int main(argc, argv) int argc; char *argv[];
+# else
+int main(int argc, char* argv[])
+# endif
+{
+ int require = 0;
+ require += info_compiler[argc];
+ require += info_platform[argc];
+ require += info_arch[argc];
+#ifdef COMPILER_VERSION_MAJOR
+ require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+ require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+ require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+ require += info_simulate_version[argc];
+#endif
+#if defined(_CRAYC) || defined(__cray__)
+ require += info_cray[argc];
+#endif
+ require += info_language_dialect_default[argc];
+ (void)argv;
+ return require;
+}
+#endif
diff --git a/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdC/a.exe b/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdC/a.exe
new file mode 100644
index 0000000..b361293
Binary files /dev/null and b/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdC/a.exe differ
diff --git a/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdCXX/CMakeCXXCompilerId.cpp
new file mode 100644
index 0000000..0c63d62
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdCXX/CMakeCXXCompilerId.cpp
@@ -0,0 +1,680 @@
+/* This source file must have a .cpp extension so that all C++ compilers
+ recognize the extension without flags. Borland does not know .cxx for
+ example. */
+#ifndef __cplusplus
+# error "A C compiler has been selected for C++."
+#endif
+
+
+/* Version number components: V=Version, R=Revision, P=Patch
+ Version date components: YYYY=Year, MM=Month, DD=Day */
+
+#if defined(__COMO__)
+# define COMPILER_ID "Comeau"
+ /* __COMO_VERSION__ = VRR */
+# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100)
+# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100)
+
+#elif defined(__INTEL_COMPILER) || defined(__ICC)
+# define COMPILER_ID "Intel"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# if defined(__GNUC__)
+# define SIMULATE_ID "GNU"
+# endif
+ /* __INTEL_COMPILER = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+# if defined(__INTEL_COMPILER_UPDATE)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+# else
+# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+ /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# if defined(__GNUC__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+# elif defined(__GNUG__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(__PATHCC__)
+# define COMPILER_ID "PathScale"
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
+
+#elif defined(__BORLANDC__)
+# define COMPILER_ID "Borland"
+ /* __BORLANDC__ = 0xVRR */
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
+
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
+# define COMPILER_ID "Watcom"
+ /* __WATCOMC__ = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__WATCOMC__)
+# define COMPILER_ID "OpenWatcom"
+ /* __WATCOMC__ = VVRP + 1100 */
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__SUNPRO_CC)
+# define COMPILER_ID "SunPro"
+# if __SUNPRO_CC >= 0x5100
+ /* __SUNPRO_CC = 0xVRRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
+# else
+ /* __SUNPRO_CC = 0xVRP */
+# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
+# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
+# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
+# endif
+
+#elif defined(__HP_aCC)
+# define COMPILER_ID "HP"
+ /* __HP_aCC = VVRRPP */
+# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
+# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
+
+#elif defined(__DECCXX)
+# define COMPILER_ID "Compaq"
+ /* __DECCXX_VER = VVRRTPPPP */
+# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
+# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)
+# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
+
+#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
+# define COMPILER_ID "zOS"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__ibmxl__) && defined(__clang__)
+# define COMPILER_ID "XLClang"
+# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
+# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
+# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
+
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
+# define COMPILER_ID "XL"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
+# define COMPILER_ID "VisualAge"
+ /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
+
+#elif defined(__PGI)
+# define COMPILER_ID "PGI"
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+
+#elif defined(__TI_COMPILER_VERSION__)
+# define COMPILER_ID "TI"
+ /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
+
+#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version)
+# define COMPILER_ID "Fujitsu"
+
+#elif defined(__ghs__)
+# define COMPILER_ID "GHS"
+/* __GHS_VERSION_NUMBER = VVVVRP */
+# ifdef __GHS_VERSION_NUMBER
+# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
+# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
+# endif
+
+#elif defined(__SCO_VERSION__)
+# define COMPILER_ID "SCO"
+
+#elif defined(__ARMCC_VERSION) && !defined(__clang__)
+# define COMPILER_ID "ARMCC"
+#if __ARMCC_VERSION >= 1000000
+ /* __ARMCC_VERSION = VRRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#else
+ /* __ARMCC_VERSION = VRPPPP */
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
+#endif
+
+
+#elif defined(__clang__) && defined(__apple_build_version__)
+# define COMPILER_ID "AppleClang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
+
+#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
+# define COMPILER_ID "ARMClang"
+ # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
+ # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
+ # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000)
+# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
+
+#elif defined(__clang__)
+# define COMPILER_ID "Clang"
+# if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+ /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__GNUC__) || defined(__GNUG__)
+# define COMPILER_ID "GNU"
+# if defined(__GNUC__)
+# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# else
+# define COMPILER_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(_MSC_VER)
+# define COMPILER_ID "MSVC"
+ /* _MSC_VER = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
+# if defined(_MSC_FULL_VER)
+# if _MSC_VER >= 1400
+ /* _MSC_FULL_VER = VVRRPPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
+# else
+ /* _MSC_FULL_VER = VVRRPPPP */
+# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
+# endif
+# endif
+# if defined(_MSC_BUILD)
+# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
+# endif
+
+#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__)
+# define COMPILER_ID "ADSP"
+#if defined(__VISUALDSPVERSION__)
+ /* __VISUALDSPVERSION__ = 0xVVRRPP00 */
+# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24)
+# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF)
+# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF)
+#endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# define COMPILER_ID "IAR"
+# if defined(__VER__) && defined(__ICCARM__)
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
+# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
+# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__))
+# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
+# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
+# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
+# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# endif
+
+
+/* These compilers are either not known or too old to define an
+ identification macro. Try to identify the platform and guess that
+ it is the native compiler. */
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID "HP"
+
+#else /* unknown compiler */
+# define COMPILER_ID ""
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(_CRAYC) || defined(__cray__)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name. */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+# define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+# define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+# define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+# define PLATFORM_ID "Windows3x"
+
+# elif defined(__VXWORKS__)
+# define PLATFORM_ID "VxWorks"
+
+# else /* unknown platform */
+# define PLATFORM_ID
+# endif
+
+#elif defined(__INTEGRITY)
+# if defined(INT_178B)
+# define PLATFORM_ID "Integrity178"
+
+# else /* regular Integrity */
+# define PLATFORM_ID "Integrity"
+# endif
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+ the architecture of the compiler being used. This is because
+ the compilers do not have flags that can change the architecture,
+ but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+# define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+# define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+# if _M_ARM == 4
+# define ARCHITECTURE_ID "ARMV4I"
+# elif _M_ARM == 5
+# define ARCHITECTURE_ID "ARMV5I"
+# else
+# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+# endif
+
+# elif defined(_M_MIPS)
+# define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+# define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+# define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCRX__)
+# define ARCHITECTURE_ID "RX"
+
+# elif defined(__ICCRH850__)
+# define ARCHITECTURE_ID "RH850"
+
+# elif defined(__ICCRL78__)
+# define ARCHITECTURE_ID "RL78"
+
+# elif defined(__ICCRISCV__)
+# define ARCHITECTURE_ID "RISCV"
+
+# elif defined(__ICCAVR__)
+# define ARCHITECTURE_ID "AVR"
+
+# elif defined(__ICC430__)
+# define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__ICCV850__)
+# define ARCHITECTURE_ID "V850"
+
+# elif defined(__ICC8051__)
+# define ARCHITECTURE_ID "8051"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__ghs__)
+# if defined(__PPC64__)
+# define ARCHITECTURE_ID "PPC64"
+
+# elif defined(__ppc__)
+# define ARCHITECTURE_ID "PPC"
+
+# elif defined(__ARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__x86_64__)
+# define ARCHITECTURE_ID "x64"
+
+# elif defined(__i386__)
+# define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__TI_COMPILER_VERSION__)
+# if defined(__TI_ARM__)
+# define ARCHITECTURE_ID "ARM"
+
+# elif defined(__MSP430__)
+# define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__TMS320C28XX__)
+# define ARCHITECTURE_ID "TMS320C28x"
+
+# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
+# define ARCHITECTURE_ID "TMS320C6x"
+
+# else /* unknown architecture */
+# define ARCHITECTURE_ID ""
+# endif
+
+#else
+# define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals. */
+#define DEC(n) \
+ ('0' + (((n) / 10000000)%10)), \
+ ('0' + (((n) / 1000000)%10)), \
+ ('0' + (((n) / 100000)%10)), \
+ ('0' + (((n) / 10000)%10)), \
+ ('0' + (((n) / 1000)%10)), \
+ ('0' + (((n) / 100)%10)), \
+ ('0' + (((n) / 10)%10)), \
+ ('0' + ((n) % 10))
+
+/* Convert integer to hex digit literals. */
+#define HEX(n) \
+ ('0' + ((n)>>28 & 0xF)), \
+ ('0' + ((n)>>24 & 0xF)), \
+ ('0' + ((n)>>20 & 0xF)), \
+ ('0' + ((n)>>16 & 0xF)), \
+ ('0' + ((n)>>12 & 0xF)), \
+ ('0' + ((n)>>8 & 0xF)), \
+ ('0' + ((n)>>4 & 0xF)), \
+ ('0' + ((n) & 0xF))
+
+/* Construct a string literal encoding the version number components. */
+#ifdef COMPILER_VERSION_MAJOR
+char const info_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+ COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+ '.', COMPILER_VERSION_MINOR,
+# ifdef COMPILER_VERSION_PATCH
+ '.', COMPILER_VERSION_PATCH,
+# ifdef COMPILER_VERSION_TWEAK
+ '.', COMPILER_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+ 'i','n','t','e','r','n','a','l','[',
+ COMPILER_VERSION_INTERNAL,']','\0'};
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+ 'I', 'N', 'F', 'O', ':',
+ 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+ SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+ '.', SIMULATE_VERSION_MINOR,
+# ifdef SIMULATE_VERSION_PATCH
+ '.', SIMULATE_VERSION_PATCH,
+# ifdef SIMULATE_VERSION_TWEAK
+ '.', SIMULATE_VERSION_TWEAK,
+# endif
+# endif
+# endif
+ ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+ getting matched. Store it in a pointer rather than an array
+ because some compilers will just produce instructions to fill the
+ array rather than assigning a pointer to a static array. */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
+
+
+
+#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
+# if defined(__INTEL_CXX11_MODE__)
+# if defined(__cpp_aggregate_nsdmi)
+# define CXX_STD 201402L
+# else
+# define CXX_STD 201103L
+# endif
+# else
+# define CXX_STD 199711L
+# endif
+#elif defined(_MSC_VER) && defined(_MSVC_LANG)
+# define CXX_STD _MSVC_LANG
+#else
+# define CXX_STD __cplusplus
+#endif
+
+const char* info_language_dialect_default = "INFO" ":" "dialect_default["
+#if CXX_STD > 201703L
+ "20"
+#elif CXX_STD >= 201703L
+ "17"
+#elif CXX_STD >= 201402L
+ "14"
+#elif CXX_STD >= 201103L
+ "11"
+#else
+ "98"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+ int require = 0;
+ require += info_compiler[argc];
+ require += info_platform[argc];
+#ifdef COMPILER_VERSION_MAJOR
+ require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+ require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+ require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+ require += info_simulate_version[argc];
+#endif
+#if defined(_CRAYC) || defined(__cray__)
+ require += info_cray[argc];
+#endif
+ require += info_language_dialect_default[argc];
+ (void)argv;
+ return require;
+}
diff --git a/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdCXX/a.exe b/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdCXX/a.exe
new file mode 100644
index 0000000..d786dda
Binary files /dev/null and b/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdCXX/a.exe differ
diff --git a/cmake-build-debug/CMakeFiles/CMakeOutput.log b/cmake-build-debug/CMakeFiles/CMakeOutput.log
new file mode 100644
index 0000000..201400b
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/CMakeOutput.log
@@ -0,0 +1,498 @@
+The system is: Windows - 10.0.19041 - AMD64
+Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
+Compiler: C:/BC/C/mingw64/bin/gcc.exe
+Build flags:
+Id flags:
+
+The output was:
+0
+
+
+Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.exe"
+
+The C compiler identification is GNU, found in "D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdC/a.exe"
+
+Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
+Compiler: C:/BC/C/mingw64/bin/g++.exe
+Build flags:
+Id flags:
+
+The output was:
+0
+
+
+Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.exe"
+
+The CXX compiler identification is GNU, found in "D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/3.19.2/CompilerIdCXX/a.exe"
+
+Detecting C compiler ABI info compiled with the following output:
+Change Dir: D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/CMakeTmp
+
+Run Build Command(s):C:/BC/C/mingw64/bin/mingw32-make.exe cmTC_0d28b/fast && C:/BC/C/mingw64/bin/mingw32-make.exe -f CMakeFiles\cmTC_0d28b.dir\build.make CMakeFiles/cmTC_0d28b.dir/build
+mingw32-make.exe[1]: Entering directory 'D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/CMakeTmp'
+Building C object CMakeFiles/cmTC_0d28b.dir/CMakeCCompilerABI.c.obj
+C:\BC\C\mingw64\bin\gcc.exe -v -o CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj -c C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\share\cmake-3.19\Modules\CMakeCCompilerABI.c
+Using built-in specs.
+COLLECT_GCC=C:\BC\C\mingw64\bin\gcc.exe
+Target: x86_64-w64-mingw32
+Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '
+Thread model: posix
+gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
+COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj' '-c' '-mtune=core2' '-march=nocona'
+ C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/cc1.exe -quiet -v -iprefix C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/ -D_REENTRANT C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\share\cmake-3.19\Modules\CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=core2 -march=nocona -auxbase-strip CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj -version -o C:\Users\XM\AppData\Local\Temp\ccoWv3hA.s
+GNU C17 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) version 8.1.0 (x86_64-w64-mingw32)
+ compiled by GNU C version 8.1.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.18-GMP
+
+GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
+ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include"
+ignoring nonexistent directory "C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../include"
+ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed"
+ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"
+ignoring nonexistent directory "C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/mingw/include"
+#include "..." search starts here:
+#include <...> search starts here:
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include
+End of search list.
+GNU C17 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) version 8.1.0 (x86_64-w64-mingw32)
+ compiled by GNU C version 8.1.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.18-GMP
+
+GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
+Compiler executable checksum: 985ce7ae6dd3a696cd146ca9896b0035
+COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj' '-c' '-mtune=core2' '-march=nocona'
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj C:\Users\XM\AppData\Local\Temp\ccoWv3hA.s
+GNU assembler version 2.30 (x86_64-w64-mingw32) using BFD version (GNU Binutils) 2.30
+COMPILER_PATH=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/;C:/BC/C/mingw64/bin/../libexec/gcc/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/
+LIBRARY_PATH=C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/;C:/BC/C/mingw64/bin/../lib/gcc/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../
+COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj' '-c' '-mtune=core2' '-march=nocona'
+Linking C executable cmTC_0d28b.exe
+C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\bin\cmake.exe -E cmake_link_script CMakeFiles\cmTC_0d28b.dir\link.txt --verbose=1
+C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\bin\cmake.exe -E rm -f CMakeFiles\cmTC_0d28b.dir/objects.a
+C:\BC\C\mingw64\bin\ar.exe cr CMakeFiles\cmTC_0d28b.dir/objects.a @CMakeFiles\cmTC_0d28b.dir\objects1.rsp
+C:\BC\C\mingw64\bin\gcc.exe -v -Wl,--whole-archive CMakeFiles\cmTC_0d28b.dir/objects.a -Wl,--no-whole-archive -o cmTC_0d28b.exe -Wl,--out-implib,libcmTC_0d28b.dll.a -Wl,--major-image-version,0,--minor-image-version,0
+Using built-in specs.
+COLLECT_GCC=C:\BC\C\mingw64\bin\gcc.exe
+COLLECT_LTO_WRAPPER=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
+Target: x86_64-w64-mingw32
+Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '
+Thread model: posix
+gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
+COMPILER_PATH=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/;C:/BC/C/mingw64/bin/../libexec/gcc/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/
+LIBRARY_PATH=C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/;C:/BC/C/mingw64/bin/../lib/gcc/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../
+COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_0d28b.exe' '-mtune=core2' '-march=nocona'
+ C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/collect2.exe -plugin C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/liblto_plugin-0.dll -plugin-opt=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\XM\AppData\Local\Temp\ccTDRnSd.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-liconv -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt --sysroot=C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 -m i386pep -Bdynamic -o cmTC_0d28b.exe C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtbegin.o -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0 -LC:/BC/C/mingw64/bin/../lib/gcc -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../.. --whole-archive CMakeFiles\cmTC_0d28b.dir/objects.a --no-whole-archive --out-implib libcmTC_0d28b.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtend.o
+COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_0d28b.exe' '-mtune=core2' '-march=nocona'
+mingw32-make.exe[1]: Leaving directory 'D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/CMakeTmp'
+
+
+
+Parsed C implicit include dir info from above output: rv=done
+ found start of include info
+ found start of implicit include info
+ add: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include]
+ add: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed]
+ add: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include]
+ end of search list found
+ collapse include dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include] ==> [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include]
+ collapse include dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed] ==> [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed]
+ collapse include dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include] ==> [C:/BC/C/mingw64/x86_64-w64-mingw32/include]
+ implicit include dirs: [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include;C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed;C:/BC/C/mingw64/x86_64-w64-mingw32/include]
+
+
+Parsed C implicit link information from above output:
+ link line regex: [^( *|.*[/\])(ld\.exe|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)]
+ ignore line: [Change Dir: D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/CMakeTmp]
+ ignore line: []
+ ignore line: [Run Build Command(s):C:/BC/C/mingw64/bin/mingw32-make.exe cmTC_0d28b/fast && C:/BC/C/mingw64/bin/mingw32-make.exe -f CMakeFiles\cmTC_0d28b.dir\build.make CMakeFiles/cmTC_0d28b.dir/build]
+ ignore line: [mingw32-make.exe[1]: Entering directory 'D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/CMakeTmp']
+ ignore line: [Building C object CMakeFiles/cmTC_0d28b.dir/CMakeCCompilerABI.c.obj]
+ ignore line: [C:\BC\C\mingw64\bin\gcc.exe -v -o CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj -c C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\share\cmake-3.19\Modules\CMakeCCompilerABI.c]
+ ignore line: [Using built-in specs.]
+ ignore line: [COLLECT_GCC=C:\BC\C\mingw64\bin\gcc.exe]
+ ignore line: [Target: x86_64-w64-mingw32]
+ ignore line: [Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib ']
+ ignore line: [Thread model: posix]
+ ignore line: [gcc version 8.1.0 (x86_64-posix-seh-rev0 Built by MinGW-W64 project) ]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj' '-c' '-mtune=core2' '-march=nocona']
+ ignore line: [ C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/cc1.exe -quiet -v -iprefix C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/ -D_REENTRANT C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\share\cmake-3.19\Modules\CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=core2 -march=nocona -auxbase-strip CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj -version -o C:\Users\XM\AppData\Local\Temp\ccoWv3hA.s]
+ ignore line: [GNU C17 (x86_64-posix-seh-rev0 Built by MinGW-W64 project) version 8.1.0 (x86_64-w64-mingw32)]
+ ignore line: [ compiled by GNU C version 8.1.0 GMP version 6.1.2 MPFR version 4.0.1 MPC version 1.1.0 isl version isl-0.18-GMP]
+ ignore line: []
+ ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
+ ignore line: [ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include"]
+ ignore line: [ignoring nonexistent directory "C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../include"]
+ ignore line: [ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed"]
+ ignore line: [ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"]
+ ignore line: [ignoring nonexistent directory "C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/mingw/include"]
+ ignore line: [#include "..." search starts here:]
+ ignore line: [#include <...> search starts here:]
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include]
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed]
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include]
+ ignore line: [End of search list.]
+ ignore line: [GNU C17 (x86_64-posix-seh-rev0 Built by MinGW-W64 project) version 8.1.0 (x86_64-w64-mingw32)]
+ ignore line: [ compiled by GNU C version 8.1.0 GMP version 6.1.2 MPFR version 4.0.1 MPC version 1.1.0 isl version isl-0.18-GMP]
+ ignore line: []
+ ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
+ ignore line: [Compiler executable checksum: 985ce7ae6dd3a696cd146ca9896b0035]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj' '-c' '-mtune=core2' '-march=nocona']
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj C:\Users\XM\AppData\Local\Temp\ccoWv3hA.s]
+ ignore line: [GNU assembler version 2.30 (x86_64-w64-mingw32) using BFD version (GNU Binutils) 2.30]
+ ignore line: [COMPILER_PATH=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/]
+ ignore line: [C:/BC/C/mingw64/bin/../libexec/gcc/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/]
+ ignore line: [LIBRARY_PATH=C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_0d28b.dir\CMakeCCompilerABI.c.obj' '-c' '-mtune=core2' '-march=nocona']
+ ignore line: [Linking C executable cmTC_0d28b.exe]
+ ignore line: [C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\bin\cmake.exe -E cmake_link_script CMakeFiles\cmTC_0d28b.dir\link.txt --verbose=1]
+ ignore line: [C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\bin\cmake.exe -E rm -f CMakeFiles\cmTC_0d28b.dir/objects.a]
+ ignore line: [C:\BC\C\mingw64\bin\ar.exe cr CMakeFiles\cmTC_0d28b.dir/objects.a @CMakeFiles\cmTC_0d28b.dir\objects1.rsp]
+ ignore line: [C:\BC\C\mingw64\bin\gcc.exe -v -Wl --whole-archive CMakeFiles\cmTC_0d28b.dir/objects.a -Wl --no-whole-archive -o cmTC_0d28b.exe -Wl --out-implib libcmTC_0d28b.dll.a -Wl --major-image-version 0 --minor-image-version 0 ]
+ ignore line: [Using built-in specs.]
+ ignore line: [COLLECT_GCC=C:\BC\C\mingw64\bin\gcc.exe]
+ ignore line: [COLLECT_LTO_WRAPPER=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe]
+ ignore line: [Target: x86_64-w64-mingw32]
+ ignore line: [Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib ']
+ ignore line: [Thread model: posix]
+ ignore line: [gcc version 8.1.0 (x86_64-posix-seh-rev0 Built by MinGW-W64 project) ]
+ ignore line: [COMPILER_PATH=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/]
+ ignore line: [C:/BC/C/mingw64/bin/../libexec/gcc/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/]
+ ignore line: [LIBRARY_PATH=C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_0d28b.exe' '-mtune=core2' '-march=nocona']
+ link line: [ C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/collect2.exe -plugin C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/liblto_plugin-0.dll -plugin-opt=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\XM\AppData\Local\Temp\ccTDRnSd.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-liconv -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt --sysroot=C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 -m i386pep -Bdynamic -o cmTC_0d28b.exe C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtbegin.o -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0 -LC:/BC/C/mingw64/bin/../lib/gcc -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../.. --whole-archive CMakeFiles\cmTC_0d28b.dir/objects.a --no-whole-archive --out-implib libcmTC_0d28b.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtend.o]
+ arg [C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/collect2.exe] ==> ignore
+ arg [-plugin] ==> ignore
+ arg [C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/liblto_plugin-0.dll] ==> ignore
+ arg [-plugin-opt=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe] ==> ignore
+ arg [-plugin-opt=-fresolution=C:\Users\XM\AppData\Local\Temp\ccTDRnSd.res] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmingw32] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc_eh] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmoldname] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmingwex] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmsvcrt] ==> ignore
+ arg [-plugin-opt=-pass-through=-lpthread] ==> ignore
+ arg [-plugin-opt=-pass-through=-ladvapi32] ==> ignore
+ arg [-plugin-opt=-pass-through=-lshell32] ==> ignore
+ arg [-plugin-opt=-pass-through=-luser32] ==> ignore
+ arg [-plugin-opt=-pass-through=-lkernel32] ==> ignore
+ arg [-plugin-opt=-pass-through=-liconv] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmingw32] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc_eh] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmoldname] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmingwex] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmsvcrt] ==> ignore
+ arg [--sysroot=C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64] ==> ignore
+ arg [-m] ==> ignore
+ arg [i386pep] ==> ignore
+ arg [-Bdynamic] ==> ignore
+ arg [-o] ==> ignore
+ arg [cmTC_0d28b.exe] ==> ignore
+ arg [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o] ==> ignore
+ arg [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtbegin.o] ==> ignore
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0]
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc]
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib]
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib]
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib]
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../..] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../..]
+ arg [--whole-archive] ==> ignore
+ arg [CMakeFiles\cmTC_0d28b.dir/objects.a] ==> ignore
+ arg [--no-whole-archive] ==> ignore
+ arg [--out-implib] ==> ignore
+ arg [libcmTC_0d28b.dll.a] ==> ignore
+ arg [--major-image-version] ==> ignore
+ arg [0] ==> ignore
+ arg [--minor-image-version] ==> ignore
+ arg [0] ==> ignore
+ arg [-lmingw32] ==> lib [mingw32]
+ arg [-lgcc] ==> lib [gcc]
+ arg [-lgcc_eh] ==> lib [gcc_eh]
+ arg [-lmoldname] ==> lib [moldname]
+ arg [-lmingwex] ==> lib [mingwex]
+ arg [-lmsvcrt] ==> lib [msvcrt]
+ arg [-lpthread] ==> lib [pthread]
+ arg [-ladvapi32] ==> lib [advapi32]
+ arg [-lshell32] ==> lib [shell32]
+ arg [-luser32] ==> lib [user32]
+ arg [-lkernel32] ==> lib [kernel32]
+ arg [-liconv] ==> lib [iconv]
+ arg [-lmingw32] ==> lib [mingw32]
+ arg [-lgcc] ==> lib [gcc]
+ arg [-lgcc_eh] ==> lib [gcc_eh]
+ arg [-lmoldname] ==> lib [moldname]
+ arg [-lmingwex] ==> lib [mingwex]
+ arg [-lmsvcrt] ==> lib [msvcrt]
+ arg [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtend.o] ==> ignore
+ remove lib [gcc_eh]
+ remove lib [msvcrt]
+ remove lib [gcc_eh]
+ remove lib [msvcrt]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0] ==> [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc] ==> [C:/BC/C/mingw64/lib/gcc]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib] ==> [C:/BC/C/mingw64/x86_64-w64-mingw32/lib]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib] ==> [C:/BC/C/mingw64/lib]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib] ==> [C:/BC/C/mingw64/x86_64-w64-mingw32/lib]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../..] ==> [C:/BC/C/mingw64/lib]
+ implicit libs: [mingw32;gcc;moldname;mingwex;pthread;advapi32;shell32;user32;kernel32;iconv;mingw32;gcc;moldname;mingwex]
+ implicit dirs: [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0;C:/BC/C/mingw64/lib/gcc;C:/BC/C/mingw64/x86_64-w64-mingw32/lib;C:/BC/C/mingw64/lib]
+ implicit fwks: []
+
+
+Detecting CXX compiler ABI info compiled with the following output:
+Change Dir: D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/CMakeTmp
+
+Run Build Command(s):C:/BC/C/mingw64/bin/mingw32-make.exe cmTC_84b36/fast && C:/BC/C/mingw64/bin/mingw32-make.exe -f CMakeFiles\cmTC_84b36.dir\build.make CMakeFiles/cmTC_84b36.dir/build
+mingw32-make.exe[1]: Entering directory 'D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/CMakeTmp'
+Building CXX object CMakeFiles/cmTC_84b36.dir/CMakeCXXCompilerABI.cpp.obj
+C:\BC\C\mingw64\bin\g++.exe -v -o CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj -c C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\share\cmake-3.19\Modules\CMakeCXXCompilerABI.cpp
+Using built-in specs.
+COLLECT_GCC=C:\BC\C\mingw64\bin\g++.exe
+Target: x86_64-w64-mingw32
+Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '
+Thread model: posix
+gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
+COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=core2' '-march=nocona'
+ C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/cc1plus.exe -quiet -v -iprefix C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/ -D_REENTRANT C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\share\cmake-3.19\Modules\CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=core2 -march=nocona -auxbase-strip CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj -version -o C:\Users\XM\AppData\Local\Temp\ccj3lm8R.s
+GNU C++14 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) version 8.1.0 (x86_64-w64-mingw32)
+ compiled by GNU C version 8.1.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.18-GMP
+
+GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
+ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++"
+ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32"
+ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward"
+ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include"
+ignoring nonexistent directory "C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../include"
+ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed"
+ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"
+ignoring nonexistent directory "C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/mingw/include"
+#include "..." search starts here:
+#include <...> search starts here:
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include
+End of search list.
+GNU C++14 (x86_64-posix-seh-rev0, Built by MinGW-W64 project) version 8.1.0 (x86_64-w64-mingw32)
+ compiled by GNU C version 8.1.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.18-GMP
+
+GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
+Compiler executable checksum: 82f0c9785fd37a38ba7b7f8357369a82
+COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=core2' '-march=nocona'
+ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj C:\Users\XM\AppData\Local\Temp\ccj3lm8R.s
+GNU assembler version 2.30 (x86_64-w64-mingw32) using BFD version (GNU Binutils) 2.30
+COMPILER_PATH=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/;C:/BC/C/mingw64/bin/../libexec/gcc/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/
+LIBRARY_PATH=C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/;C:/BC/C/mingw64/bin/../lib/gcc/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../
+COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=core2' '-march=nocona'
+Linking CXX executable cmTC_84b36.exe
+C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\bin\cmake.exe -E cmake_link_script CMakeFiles\cmTC_84b36.dir\link.txt --verbose=1
+C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\bin\cmake.exe -E rm -f CMakeFiles\cmTC_84b36.dir/objects.a
+C:\BC\C\mingw64\bin\ar.exe cr CMakeFiles\cmTC_84b36.dir/objects.a @CMakeFiles\cmTC_84b36.dir\objects1.rsp
+C:\BC\C\mingw64\bin\g++.exe -v -Wl,--whole-archive CMakeFiles\cmTC_84b36.dir/objects.a -Wl,--no-whole-archive -o cmTC_84b36.exe -Wl,--out-implib,libcmTC_84b36.dll.a -Wl,--major-image-version,0,--minor-image-version,0
+Using built-in specs.
+COLLECT_GCC=C:\BC\C\mingw64\bin\g++.exe
+COLLECT_LTO_WRAPPER=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
+Target: x86_64-w64-mingw32
+Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '
+Thread model: posix
+gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
+COMPILER_PATH=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/;C:/BC/C/mingw64/bin/../libexec/gcc/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/
+LIBRARY_PATH=C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/;C:/BC/C/mingw64/bin/../lib/gcc/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/;C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../
+COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_84b36.exe' '-shared-libgcc' '-mtune=core2' '-march=nocona'
+ C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/collect2.exe -plugin C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/liblto_plugin-0.dll -plugin-opt=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\XM\AppData\Local\Temp\ccmeLhKb.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-liconv -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt --sysroot=C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 -m i386pep -Bdynamic -o cmTC_84b36.exe C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtbegin.o -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0 -LC:/BC/C/mingw64/bin/../lib/gcc -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../.. --whole-archive CMakeFiles\cmTC_84b36.dir/objects.a --no-whole-archive --out-implib libcmTC_84b36.dll.a --major-image-version 0 --minor-image-version 0 -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtend.o
+COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_84b36.exe' '-shared-libgcc' '-mtune=core2' '-march=nocona'
+mingw32-make.exe[1]: Leaving directory 'D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/CMakeTmp'
+
+
+
+Parsed CXX implicit include dir info from above output: rv=done
+ found start of include info
+ found start of implicit include info
+ add: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++]
+ add: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32]
+ add: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward]
+ add: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include]
+ add: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed]
+ add: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include]
+ end of search list found
+ collapse include dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++] ==> [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++]
+ collapse include dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32] ==> [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32]
+ collapse include dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward] ==> [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward]
+ collapse include dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include] ==> [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include]
+ collapse include dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed] ==> [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed]
+ collapse include dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include] ==> [C:/BC/C/mingw64/x86_64-w64-mingw32/include]
+ implicit include dirs: [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++;C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32;C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward;C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include;C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed;C:/BC/C/mingw64/x86_64-w64-mingw32/include]
+
+
+Parsed CXX implicit link information from above output:
+ link line regex: [^( *|.*[/\])(ld\.exe|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)]
+ ignore line: [Change Dir: D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/CMakeTmp]
+ ignore line: []
+ ignore line: [Run Build Command(s):C:/BC/C/mingw64/bin/mingw32-make.exe cmTC_84b36/fast && C:/BC/C/mingw64/bin/mingw32-make.exe -f CMakeFiles\cmTC_84b36.dir\build.make CMakeFiles/cmTC_84b36.dir/build]
+ ignore line: [mingw32-make.exe[1]: Entering directory 'D:/2021_2/cids-server/cmake-build-debug/CMakeFiles/CMakeTmp']
+ ignore line: [Building CXX object CMakeFiles/cmTC_84b36.dir/CMakeCXXCompilerABI.cpp.obj]
+ ignore line: [C:\BC\C\mingw64\bin\g++.exe -v -o CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj -c C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\share\cmake-3.19\Modules\CMakeCXXCompilerABI.cpp]
+ ignore line: [Using built-in specs.]
+ ignore line: [COLLECT_GCC=C:\BC\C\mingw64\bin\g++.exe]
+ ignore line: [Target: x86_64-w64-mingw32]
+ ignore line: [Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib ']
+ ignore line: [Thread model: posix]
+ ignore line: [gcc version 8.1.0 (x86_64-posix-seh-rev0 Built by MinGW-W64 project) ]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=core2' '-march=nocona']
+ ignore line: [ C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/cc1plus.exe -quiet -v -iprefix C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/ -D_REENTRANT C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\share\cmake-3.19\Modules\CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=core2 -march=nocona -auxbase-strip CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj -version -o C:\Users\XM\AppData\Local\Temp\ccj3lm8R.s]
+ ignore line: [GNU C++14 (x86_64-posix-seh-rev0 Built by MinGW-W64 project) version 8.1.0 (x86_64-w64-mingw32)]
+ ignore line: [ compiled by GNU C version 8.1.0 GMP version 6.1.2 MPFR version 4.0.1 MPC version 1.1.0 isl version isl-0.18-GMP]
+ ignore line: []
+ ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
+ ignore line: [ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++"]
+ ignore line: [ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32"]
+ ignore line: [ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward"]
+ ignore line: [ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include"]
+ ignore line: [ignoring nonexistent directory "C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64C:/msys64/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../include"]
+ ignore line: [ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed"]
+ ignore line: [ignoring duplicate directory "C:/BC/C/mingw64/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"]
+ ignore line: [ignoring nonexistent directory "C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/mingw/include"]
+ ignore line: [#include "..." search starts here:]
+ ignore line: [#include <...> search starts here:]
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++]
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32]
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward]
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include]
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed]
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include]
+ ignore line: [End of search list.]
+ ignore line: [GNU C++14 (x86_64-posix-seh-rev0 Built by MinGW-W64 project) version 8.1.0 (x86_64-w64-mingw32)]
+ ignore line: [ compiled by GNU C version 8.1.0 GMP version 6.1.2 MPFR version 4.0.1 MPC version 1.1.0 isl version isl-0.18-GMP]
+ ignore line: []
+ ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
+ ignore line: [Compiler executable checksum: 82f0c9785fd37a38ba7b7f8357369a82]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=core2' '-march=nocona']
+ ignore line: [ C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/as.exe -v -o CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj C:\Users\XM\AppData\Local\Temp\ccj3lm8R.s]
+ ignore line: [GNU assembler version 2.30 (x86_64-w64-mingw32) using BFD version (GNU Binutils) 2.30]
+ ignore line: [COMPILER_PATH=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/]
+ ignore line: [C:/BC/C/mingw64/bin/../libexec/gcc/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/]
+ ignore line: [LIBRARY_PATH=C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles\cmTC_84b36.dir\CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=core2' '-march=nocona']
+ ignore line: [Linking CXX executable cmTC_84b36.exe]
+ ignore line: [C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\bin\cmake.exe -E cmake_link_script CMakeFiles\cmTC_84b36.dir\link.txt --verbose=1]
+ ignore line: [C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\bin\cmake.exe -E rm -f CMakeFiles\cmTC_84b36.dir/objects.a]
+ ignore line: [C:\BC\C\mingw64\bin\ar.exe cr CMakeFiles\cmTC_84b36.dir/objects.a @CMakeFiles\cmTC_84b36.dir\objects1.rsp]
+ ignore line: [C:\BC\C\mingw64\bin\g++.exe -v -Wl --whole-archive CMakeFiles\cmTC_84b36.dir/objects.a -Wl --no-whole-archive -o cmTC_84b36.exe -Wl --out-implib libcmTC_84b36.dll.a -Wl --major-image-version 0 --minor-image-version 0 ]
+ ignore line: [Using built-in specs.]
+ ignore line: [COLLECT_GCC=C:\BC\C\mingw64\bin\g++.exe]
+ ignore line: [COLLECT_LTO_WRAPPER=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe]
+ ignore line: [Target: x86_64-w64-mingw32]
+ ignore line: [Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib ']
+ ignore line: [Thread model: posix]
+ ignore line: [gcc version 8.1.0 (x86_64-posix-seh-rev0 Built by MinGW-W64 project) ]
+ ignore line: [COMPILER_PATH=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/]
+ ignore line: [C:/BC/C/mingw64/bin/../libexec/gcc/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/]
+ ignore line: [LIBRARY_PATH=C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/]
+ ignore line: [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../]
+ ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_84b36.exe' '-shared-libgcc' '-mtune=core2' '-march=nocona']
+ link line: [ C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/collect2.exe -plugin C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/liblto_plugin-0.dll -plugin-opt=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\XM\AppData\Local\Temp\ccmeLhKb.res -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-liconv -plugin-opt=-pass-through=-lmingw32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lmoldname -plugin-opt=-pass-through=-lmingwex -plugin-opt=-pass-through=-lmsvcrt --sysroot=C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 -m i386pep -Bdynamic -o cmTC_84b36.exe C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtbegin.o -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0 -LC:/BC/C/mingw64/bin/../lib/gcc -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib -LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../.. --whole-archive CMakeFiles\cmTC_84b36.dir/objects.a --no-whole-archive --out-implib libcmTC_84b36.dll.a --major-image-version 0 --minor-image-version 0 -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtend.o]
+ arg [C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/collect2.exe] ==> ignore
+ arg [-plugin] ==> ignore
+ arg [C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/liblto_plugin-0.dll] ==> ignore
+ arg [-plugin-opt=C:/BC/C/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe] ==> ignore
+ arg [-plugin-opt=-fresolution=C:\Users\XM\AppData\Local\Temp\ccmeLhKb.res] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmingw32] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmoldname] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmingwex] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmsvcrt] ==> ignore
+ arg [-plugin-opt=-pass-through=-lpthread] ==> ignore
+ arg [-plugin-opt=-pass-through=-ladvapi32] ==> ignore
+ arg [-plugin-opt=-pass-through=-lshell32] ==> ignore
+ arg [-plugin-opt=-pass-through=-luser32] ==> ignore
+ arg [-plugin-opt=-pass-through=-lkernel32] ==> ignore
+ arg [-plugin-opt=-pass-through=-liconv] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmingw32] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore
+ arg [-plugin-opt=-pass-through=-lgcc] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmoldname] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmingwex] ==> ignore
+ arg [-plugin-opt=-pass-through=-lmsvcrt] ==> ignore
+ arg [--sysroot=C:/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64] ==> ignore
+ arg [-m] ==> ignore
+ arg [i386pep] ==> ignore
+ arg [-Bdynamic] ==> ignore
+ arg [-o] ==> ignore
+ arg [cmTC_84b36.exe] ==> ignore
+ arg [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o] ==> ignore
+ arg [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtbegin.o] ==> ignore
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0]
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc]
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib]
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib]
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib]
+ arg [-LC:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../..] ==> dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../..]
+ arg [--whole-archive] ==> ignore
+ arg [CMakeFiles\cmTC_84b36.dir/objects.a] ==> ignore
+ arg [--no-whole-archive] ==> ignore
+ arg [--out-implib] ==> ignore
+ arg [libcmTC_84b36.dll.a] ==> ignore
+ arg [--major-image-version] ==> ignore
+ arg [0] ==> ignore
+ arg [--minor-image-version] ==> ignore
+ arg [0] ==> ignore
+ arg [-lstdc++] ==> lib [stdc++]
+ arg [-lmingw32] ==> lib [mingw32]
+ arg [-lgcc_s] ==> lib [gcc_s]
+ arg [-lgcc] ==> lib [gcc]
+ arg [-lmoldname] ==> lib [moldname]
+ arg [-lmingwex] ==> lib [mingwex]
+ arg [-lmsvcrt] ==> lib [msvcrt]
+ arg [-lpthread] ==> lib [pthread]
+ arg [-ladvapi32] ==> lib [advapi32]
+ arg [-lshell32] ==> lib [shell32]
+ arg [-luser32] ==> lib [user32]
+ arg [-lkernel32] ==> lib [kernel32]
+ arg [-liconv] ==> lib [iconv]
+ arg [-lmingw32] ==> lib [mingw32]
+ arg [-lgcc_s] ==> lib [gcc_s]
+ arg [-lgcc] ==> lib [gcc]
+ arg [-lmoldname] ==> lib [moldname]
+ arg [-lmingwex] ==> lib [mingwex]
+ arg [-lmsvcrt] ==> lib [msvcrt]
+ arg [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/crtend.o] ==> ignore
+ remove lib [msvcrt]
+ remove lib [msvcrt]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0] ==> [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc] ==> [C:/BC/C/mingw64/lib/gcc]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib] ==> [C:/BC/C/mingw64/x86_64-w64-mingw32/lib]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib] ==> [C:/BC/C/mingw64/lib]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib] ==> [C:/BC/C/mingw64/x86_64-w64-mingw32/lib]
+ collapse library dir [C:/BC/C/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../..] ==> [C:/BC/C/mingw64/lib]
+ implicit libs: [stdc++;mingw32;gcc_s;gcc;moldname;mingwex;pthread;advapi32;shell32;user32;kernel32;iconv;mingw32;gcc_s;gcc;moldname;mingwex]
+ implicit dirs: [C:/BC/C/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0;C:/BC/C/mingw64/lib/gcc;C:/BC/C/mingw64/x86_64-w64-mingw32/lib;C:/BC/C/mingw64/lib]
+ implicit fwks: []
+
+
diff --git a/cmake-build-debug/CMakeFiles/clion-environment.txt b/cmake-build-debug/CMakeFiles/clion-environment.txt
new file mode 100644
index 0000000..bd31bb7
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/clion-environment.txt
@@ -0,0 +1,4 @@
+ToolSet: w64 6.0 (local)@C:\BC\C\mingw64
+Options:
+
+Options:
\ No newline at end of file
diff --git a/cmake-build-debug/CMakeFiles/clion-log.txt b/cmake-build-debug/CMakeFiles/clion-log.txt
new file mode 100644
index 0000000..8d31f15
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/clion-log.txt
@@ -0,0 +1,4 @@
+C:\Users\XM\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\211.7142.21\bin\cmake\win\bin\cmake.exe -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - MinGW Makefiles" D:\2021_2\cids-server
+-- Configuring done
+-- Generating done
+-- Build files have been written to: D:/2021_2/cids-server/cmake-build-debug
diff --git a/cmake-build-debug/CMakeFiles/cmake.check_cache b/cmake-build-debug/CMakeFiles/cmake.check_cache
new file mode 100644
index 0000000..3dccd73
--- /dev/null
+++ b/cmake-build-debug/CMakeFiles/cmake.check_cache
@@ -0,0 +1 @@
+# This file is generated by cmake for dependency checking of the CMakeCache.txt file
diff --git a/include/Common/ServerBase.hpp b/include/Common/ServerBase.hpp
new file mode 100644
index 0000000..cbfb213
--- /dev/null
+++ b/include/Common/ServerBase.hpp
@@ -0,0 +1,46 @@
+//
+// Created by XM on 2021/5/18.
+//
+
+#ifndef PRO_SERVERBASE_HPP
+#define PRO_SERVERBASE_HPP
+
+#pragma once
+
+#include
+
+struct scu_date {
+ int week;
+ int day;
+ scu_date(int w, int d): week(w), day(d) { };
+};
+
+class scu_time {
+
+private:
+ size_t hour;
+ size_t minute;
+
+public:
+
+ scu_time(size_t h, size_t m) : hour(h), minute(m) {}
+
+ scu_time(const scu_time &that) : hour(that.hour), minute(that.minute) {}
+
+ scu_time operator-(const scu_time &rhs) const;
+
+ bool operator<(const scu_time& rhs) const;
+
+ bool operator=(const scu_time &rhs);
+
+ bool operator<=(const scu_time &rhs) const;
+
+ unsigned toSeconds();
+
+ static scu_time toScutime(const muduo::Timestamp ×tamp) ;
+
+
+};
+
+
+#endif //PRO_SERVERBASE_HPP
diff --git a/include/Common/Telemeter.hpp b/include/Common/Telemeter.hpp
new file mode 100644
index 0000000..745f667
--- /dev/null
+++ b/include/Common/Telemeter.hpp
@@ -0,0 +1,128 @@
+#ifndef SRC_TELEMETER_H
+#define SRC_TELEMETER_H
+
+#pragma once
+
+#include
+
+#include
+#include
+
+enum class LoadLevel : uint8_t {
+ untapped = 0, //no client dispatched on this mirror
+ light = 1, //[0% - 50%]
+ medium = 2, //[50% - 80%]
+ heavy = 3, //[ >= 80%]
+};
+
+static std::string tostring(LoadLevel ll) {
+ switch (ll) {
+ case LoadLevel::untapped:
+ return "untapped";
+ case LoadLevel::light:
+ return "light";
+ case LoadLevel::medium:
+ return "medium";
+ case LoadLevel::heavy:
+ return "heavy";
+ default:
+ return "undefined";
+ }
+}
+
+
+//POD type
+struct DetailLoadState {
+ uint8_t mem_load, serve_load, net_load_, reserve_seg_;
+};
+
+#ifdef SRC_CENTER_H
+//center的setting, POD type
+struct Setting
+{
+ uint mir_load_record_interval_; //记录mirror负载到缓存的间隔(按照心跳包的个数来计数), 从配置文件中读
+ uint mir_dblog_interval_; //将mirror负载缓存更新到数据库(数据文件)的间隔(缓存了这么多之后打一次log), 从配置文件中读
+ uint mir_max_disbeat_time_; //多少个心跳轮无心跳视为断线
+ uint cli_login_cache_time_; //清空一个cli登录缓冲的时间
+ uint load_balance_interval_; //多少个cli启动后运行一次负载均衡调度算法
+ uint clear_mirs_data_time_; //自0点开始何时清空一次mir_data中的信息
+ //unsigned long reserve_seg_; //保留段
+};
+//第一字段为60表示一分钟(60个心跳包)记录一次mir的负载情况,
+//第二字段为5表示5分钟(缓存5次)输出到遥测数据库一次
+
+const constexpr uint _permanent_thread_num_ = 4U; //center的常驻线程数量
+
+#endif
+
+#ifdef SRC_MIRROR_H
+//mirror的setting, POD type
+struct Setting
+{
+ int mir_heart_beat_interval;
+ int mir_load_report_interval;
+ std::string img_path;
+ std::string db_source;
+ std::string db_user;
+ std::string db_password;
+ std::string center_ip;
+ std::string this_ip;
+ int update_pic_interval;
+ int utc_time;
+ std::string update_calendar_time;
+ std::string clear_clients_time;
+ int course_interval;
+ //数据库ip?
+};
+#endif
+
+#define RESERVE_SEGMENG_INIT_VALUE 0U
+
+namespace telemeter {
+ const constexpr char *klog_file = "TelemeterLog.txt"; //临时的遥测日志文件
+
+#ifdef SRC_CENTER_H
+ //双缓冲配置表解决一写多读线程安全问题
+
+ static Setting _set_cache_one = {60, 5, 15, 60, 20, 0};
+ static Setting _set_cache_two = {60, 5, 15, 60, 20, 0};
+ //主要使用这个指针获取当前配置, 每次读取数据到第二个指针中, 然后交换两个指针的值
+ static Setting* setting = &_set_cache_one;
+ static Setting* setting_copy = &_set_cache_two;
+
+ //将配置信息返回成一个字符串输出
+ // static auto settting_info = [](Setting* set = telemeter::setting) -> std::string
+ // {
+ // return fmt::format("mir load record interval: -{0}\n \
+ // nmir database log interval: -{1}\n \
+ // mir max disbeat time: -{2}\n \
+ // cli login cache time: -{3}\n \
+ // load balance interval: -{4}\n \
+ // clear mirs data time: -{5}",
+ // set->mir_load_record_interval_,
+ // set->mir_dblog_interval_,
+ // set->mir_max_disbeat_time_,
+ // set->cli_login_cache_time_,
+ // set->load_balance_interval_,
+ // set->clear_mirs_data_time_);
+ // };
+#endif
+
+#ifdef SRC_MIRROR_H
+ static Setting _set_cache_one = {1, 60, "/var/www/html/images", "Scucids-server","teacher","zhirui208+", "192.168.233.14","192.168.233.13", 6,8,"24:00","24:00",60};
+ static Setting _set_cache_two = {1, 60, "/var/www/html/images", "Scucids-server","teacher","zhirui208+", "192.168.233.14", "192.168.233.13",6,8,"24:00","24:00",60};
+ //主要使用这个指针获取当前配置, 每次读取数据到第二个指针中, 然后交换两个指针的值
+ static Setting* setting = &_set_cache_one;
+ static Setting* setting_copy = &_set_cache_two;
+
+#endif
+ //获取本机负载情况的函数, 需要统计空闲内存占比, cpu负载, 空闲磁盘占比
+ //LoadLevel getLocalLoadLevel();
+
+ //int getLocalMemLoad();
+ //int getLocalSevLoad();
+ //int getLocalNetLoad();
+}
+
+
+#endif //SRC_TELEMETER_H
\ No newline at end of file
diff --git a/include/Common/Udp.hpp b/include/Common/Udp.hpp
new file mode 100644
index 0000000..96b3624
--- /dev/null
+++ b/include/Common/Udp.hpp
@@ -0,0 +1,124 @@
+#ifndef SRC_UDP_H
+#define SRC_UDP_H
+
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+#include /* struct hostent */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+namespace port
+{
+ const constexpr size_t kCLI_LOGIN_ = 20800;
+ const constexpr size_t kCLI_BEAT_ = 20801;
+ const constexpr size_t kMIR_BEAT_ = 20802;
+ const constexpr size_t kMIR_HTTP_ = 20803;
+}
+
+namespace protocol
+{
+ //以字节计算的每个包的大小和协议中每一部分的大小, 二级缩进的和应该等于第一级缩进
+ const constexpr size_t kCLI_LOGIN_PACSIZE_ = 8;
+ const constexpr size_t kCLI_LOGIN_UID_ = 7;
+ const constexpr size_t kCLI_LOGIN_STATE_ = 1;
+
+ const constexpr size_t kCENT_RESPONSE_PACSIZE_ = 4;
+
+ const constexpr size_t kMIR_BEAT_PACSIZE_ = 8;
+ const constexpr size_t kMIR_BEAT_IP_ = 4;
+ const constexpr size_t kMIR_BEAT_LOAD_ = 4;
+}
+
+struct IP {
+ unsigned char seg0;
+ unsigned char seg1;
+ unsigned char seg2;
+ unsigned char seg3;
+
+ IP(int i0 = 0, int i1 = 0, int i2 = 0, int i3 = 0) : seg0(i0), seg1(i1), seg2(i2), seg3(i3) {};
+
+ IP(std::string addr) {
+ std::istringstream iss(addr);
+ std::string buffer;
+ std::vector res;
+ while (std::getline(iss, buffer, '.')) {
+ res.push_back((unsigned char) (std::stoi(buffer)));
+ }
+ if (res.size() != 4) {
+ //异常
+ }
+ this->seg0 = res[0];
+ this->seg1 = res[1];
+ this->seg2 = res[2];
+ this->seg3 = res[3];
+ }
+
+ std::string to_string()
+ {
+ return std::to_string(this->seg0) + '.' + std::to_string(this->seg1) + '.' + std::to_string(this->seg2) + '.' + std::to_string(this->seg3);
+ }
+
+ bool operator==(const IP& ip)const{
+ return this->seg0 == ip.seg0
+ && this->seg1 == ip.seg1
+ && this->seg2 == ip.seg2
+ && this->seg3 == ip.seg3;
+ }
+
+ IP& operator=(const IP& rhs){
+ if(this == &rhs)
+ return *this;
+ this->seg0 = rhs.seg0;
+ this->seg1 = rhs.seg1;
+ this->seg2 = rhs.seg2;
+ this->seg3 = rhs.seg3;
+ return *this;
+ }
+};
+
+namespace std {
+ template<>
+ struct hash : public __hash_base
+ {
+ size_t operator()(const IP &ip) const noexcept //这个const noexpect一定要写上去
+ {
+ return (((size_t)ip.seg0) << 24) + (((size_t)ip.seg1) << 16) + (((size_t)ip.seg2) << 8) + ((size_t)ip.seg3) ;
+ }
+ };
+}
+
+
+static bool GetHostInfo(std::string& hostName, std::string& Ip) {
+ char name[256];
+ gethostname(name, sizeof(name));
+ hostName = name;
+
+ struct hostent* host = gethostbyname(name);
+ char ipStr[32];
+ const char* ret = inet_ntop(host->h_addrtype, host->h_addr_list[0], ipStr, sizeof(ipStr));
+ if (NULL==ret) {
+// std::cout << "hostname transform to ip failed";
+ return false;
+ }
+ Ip = ipStr;
+ return true;
+}
+
+
+
+
+#endif //SRC_UDP_H
+
+
diff --git a/include/Third_Lib/boost/any.hpp b/include/Third_Lib/boost/any.hpp
new file mode 100644
index 0000000..892d47c
--- /dev/null
+++ b/include/Third_Lib/boost/any.hpp
@@ -0,0 +1,342 @@
+// See http://www.boost.org/libs/any for Documentation.
+
+#ifndef BOOST_ANY_INCLUDED
+#define BOOST_ANY_INCLUDED
+
+#if defined(_MSC_VER)
+# pragma once
+#endif
+
+// what: variant type boost::any
+// who: contributed by Kevlin Henney,
+// with features contributed and bugs found by
+// Antony Polukhin, Ed Brey, Mark Rodgers,
+// Peter Dimov, and James Curran
+// when: July 2001, April 2013 - 2020
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace boost
+{
+ class any
+ {
+ public: // structors
+
+ BOOST_CONSTEXPR any() BOOST_NOEXCEPT
+ : content(0)
+ {
+ }
+
+ template
+ any(const ValueType & value)
+ : content(new holder<
+ BOOST_DEDUCED_TYPENAME remove_cv::type>::type
+ >(value))
+ {
+ }
+
+ any(const any & other)
+ : content(other.content ? other.content->clone() : 0)
+ {
+ }
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ // Move constructor
+ any(any&& other) BOOST_NOEXCEPT
+ : content(other.content)
+ {
+ other.content = 0;
+ }
+
+ // Perfect forwarding of ValueType
+ template
+ any(ValueType&& value
+ , typename boost::disable_if >::type* = 0 // disable if value has type `any&`
+ , typename boost::disable_if >::type* = 0) // disable if value has type `const ValueType&&`
+ : content(new holder< typename decay::type >(static_cast(value)))
+ {
+ }
+#endif
+
+ ~any() BOOST_NOEXCEPT
+ {
+ delete content;
+ }
+
+ public: // modifiers
+
+ any & swap(any & rhs) BOOST_NOEXCEPT
+ {
+ placeholder* tmp = content;
+ content = rhs.content;
+ rhs.content = tmp;
+ return *this;
+ }
+
+
+#ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
+ template
+ any & operator=(const ValueType & rhs)
+ {
+ any(rhs).swap(*this);
+ return *this;
+ }
+
+ any & operator=(any rhs)
+ {
+ rhs.swap(*this);
+ return *this;
+ }
+
+#else
+ any & operator=(const any& rhs)
+ {
+ any(rhs).swap(*this);
+ return *this;
+ }
+
+ // move assignment
+ any & operator=(any&& rhs) BOOST_NOEXCEPT
+ {
+ rhs.swap(*this);
+ any().swap(rhs);
+ return *this;
+ }
+
+ // Perfect forwarding of ValueType
+ template
+ any & operator=(ValueType&& rhs)
+ {
+ any(static_cast(rhs)).swap(*this);
+ return *this;
+ }
+#endif
+
+ public: // queries
+
+ bool empty() const BOOST_NOEXCEPT
+ {
+ return !content;
+ }
+
+ void clear() BOOST_NOEXCEPT
+ {
+ any().swap(*this);
+ }
+
+ const boost::typeindex::type_info& type() const BOOST_NOEXCEPT
+ {
+ return content ? content->type() : boost::typeindex::type_id().type_info();
+ }
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+ private: // types
+#else
+ public: // types (public so any_cast can be non-friend)
+#endif
+
+ class BOOST_SYMBOL_VISIBLE placeholder
+ {
+ public: // structors
+
+ virtual ~placeholder()
+ {
+ }
+
+ public: // queries
+
+ virtual const boost::typeindex::type_info& type() const BOOST_NOEXCEPT = 0;
+
+ virtual placeholder * clone() const = 0;
+
+ };
+
+ template
+ class holder
+#ifndef BOOST_NO_CXX11_FINAL
+ final
+#endif
+ : public placeholder
+ {
+ public: // structors
+
+ holder(const ValueType & value)
+ : held(value)
+ {
+ }
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ holder(ValueType&& value)
+ : held(static_cast< ValueType&& >(value))
+ {
+ }
+#endif
+ public: // queries
+
+ const boost::typeindex::type_info& type() const BOOST_NOEXCEPT BOOST_OVERRIDE
+ {
+ return boost::typeindex::type_id().type_info();
+ }
+
+ placeholder * clone() const BOOST_OVERRIDE
+ {
+ return new holder(held);
+ }
+
+ public: // representation
+
+ ValueType held;
+
+ private: // intentionally left unimplemented
+ holder & operator=(const holder &);
+ };
+
+#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
+
+ private: // representation
+
+ template
+ friend ValueType * any_cast(any *) BOOST_NOEXCEPT;
+
+ template
+ friend ValueType * unsafe_any_cast(any *) BOOST_NOEXCEPT;
+
+#else
+
+ public: // representation (public so any_cast can be non-friend)
+
+#endif
+
+ placeholder * content;
+
+ };
+
+ inline void swap(any & lhs, any & rhs) BOOST_NOEXCEPT
+{
+ lhs.swap(rhs);
+}
+
+class BOOST_SYMBOL_VISIBLE bad_any_cast :
+#ifndef BOOST_NO_RTTI
+public std::bad_cast
+#else
+public std::exception
+#endif
+{
+public:
+const char * what() const BOOST_NOEXCEPT_OR_NOTHROW BOOST_OVERRIDE
+ {
+ return "boost::bad_any_cast: "
+ "failed conversion using boost::any_cast";
+ }
+};
+
+template
+ValueType * any_cast(any * operand) BOOST_NOEXCEPT
+{
+return operand && operand->type() == boost::typeindex::type_id()
+? boost::addressof(
+static_cast::type> *>(operand->content)->held
+)
+: 0;
+}
+
+template
+inline const ValueType * any_cast(const any * operand) BOOST_NOEXCEPT
+{
+return any_cast(const_cast(operand));
+}
+
+template
+ValueType any_cast(any & operand)
+{
+ typedef BOOST_DEDUCED_TYPENAME remove_reference::type nonref;
+
+
+ nonref * result = any_cast(boost::addressof(operand));
+ if(!result)
+ boost::throw_exception(bad_any_cast());
+
+ // Attempt to avoid construction of a temporary object in cases when
+ // `ValueType` is not a reference. Example:
+ // `static_cast(*result);`
+ // which is equal to `std::string(*result);`
+ typedef BOOST_DEDUCED_TYPENAME boost::conditional<
+ boost::is_reference::value,
+ ValueType,
+ BOOST_DEDUCED_TYPENAME boost::add_reference::type
+ >::type ref_type;
+
+#ifdef BOOST_MSVC
+ # pragma warning(push)
+# pragma warning(disable: 4172) // "returning address of local variable or temporary" but *result is not local!
+#endif
+ return static_cast(*result);
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+}
+
+template
+inline ValueType any_cast(const any & operand)
+{
+ typedef BOOST_DEDUCED_TYPENAME remove_reference::type nonref;
+ return any_cast(const_cast(operand));
+}
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+template
+inline ValueType any_cast(any&& operand)
+{
+ BOOST_STATIC_ASSERT_MSG(
+ boost::is_rvalue_reference::value /*true if ValueType is rvalue or just a value*/
+ || boost::is_const< typename boost::remove_reference::type >::value,
+ "boost::any_cast shall not be used for getting nonconst references to temporary objects"
+ );
+ return any_cast(operand);
+}
+#endif
+
+
+// Note: The "unsafe" versions of any_cast are not part of the
+// public interface and may be removed at any time. They are
+// required where we know what type is stored in the any and can't
+// use typeid() comparison, e.g., when our types may travel across
+// different shared libraries.
+template
+inline ValueType * unsafe_any_cast(any * operand) BOOST_NOEXCEPT
+{
+return boost::addressof(
+static_cast *>(operand->content)->held
+);
+}
+
+template
+inline const ValueType * unsafe_any_cast(const any * operand) BOOST_NOEXCEPT
+{
+return unsafe_any_cast(const_cast(operand));
+}
+}
+
+// Copyright Kevlin Henney, 2000, 2001, 2002. All rights reserved.
+// Copyright Antony Polukhin, 2013-2020.
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#endif
diff --git a/include/Third_Lib/cppcodec/base32_crockford.hpp b/include/Third_Lib/cppcodec/base32_crockford.hpp
new file mode 100644
index 0000000..6c2ae36
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base32_crockford.hpp
@@ -0,0 +1,91 @@
+/**
+ * Copyright (C) 2015 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE32_CROCKFORD
+#define CPPCODEC_BASE32_CROCKFORD
+
+#include "detail/codec.hpp"
+#include "detail/base32.hpp"
+
+namespace cppcodec {
+
+namespace detail {
+
+static constexpr const char base32_crockford_alphabet[] = {
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', // at index 10
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 18 - no I
+ 'J', 'K', // 20 - no L
+ 'M', 'N', // 22 - no O
+ 'P', 'Q', 'R', 'S', 'T', // 27 - no U
+ 'V', 'W', 'X', 'Y', 'Z' // 32
+};
+
+class base32_crockford_base
+{
+public:
+ static CPPCODEC_ALWAYS_INLINE constexpr size_t alphabet_size() {
+ static_assert(sizeof(base32_crockford_alphabet) == 32, "base32 alphabet must have 32 values");
+ return sizeof(base32_crockford_alphabet);
+ }
+ static CPPCODEC_ALWAYS_INLINE constexpr char symbol(alphabet_index_t idx)
+ {
+ return base32_crockford_alphabet[idx];
+ }
+ static CPPCODEC_ALWAYS_INLINE constexpr char normalized_symbol(char c)
+ {
+ // Hex decoding is always case-insensitive (even in RFC 4648), the question
+ // is only for encoding whether to use upper-case or lower-case letters.
+ return (c == 'O' || c == 'o') ? '0'
+ : (c == 'I' || c == 'i' || c == 'L' || c == 'l') ? '1'
+ : (c >= 'a' && c <= 'z') ? (c - 'a' + 'A')
+ : c;
+ }
+
+ static CPPCODEC_ALWAYS_INLINE constexpr bool generates_padding() { return false; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool requires_padding() { return false; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool is_padding_symbol(char) { return false; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool is_eof_symbol(char c) { return c == '\0'; }
+
+ static CPPCODEC_ALWAYS_INLINE constexpr bool should_ignore(char c) {
+ return c == '-'; // "Hyphens (-) can be inserted into strings [for readability]."
+ }
+};
+
+// base32_crockford is a concatenative iterative (i.e. streaming) interpretation of Crockford base32.
+// It interprets the statement "zero-extend the number to make its bit-length a multiple of 5"
+// to mean zero-extending it on the right.
+// (The other possible interpretation is base32_crockford_num, a place-based single number encoding system.
+// See http://merrigrove.blogspot.ca/2014/04/what-heck-is-base64-encoding-really.html for more info.)
+class base32_crockford : public base32_crockford_base
+{
+public:
+ template using codec_impl = stream_codec;
+};
+
+} // namespace detail
+
+using base32_crockford = detail::codec>;
+
+} // namespace cppcodec
+
+#endif // CPPCODEC_BASE32_CROCKFORD
diff --git a/include/Third_Lib/cppcodec/base32_default_crockford.hpp b/include/Third_Lib/cppcodec/base32_default_crockford.hpp
new file mode 100644
index 0000000..73e94eb
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base32_default_crockford.hpp
@@ -0,0 +1,31 @@
+/**
+ * Copyright (C) 2015 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE32_DEFAULT_CROCKFORD
+#define CPPCODEC_BASE32_DEFAULT_CROCKFORD
+
+#include "base32_crockford.hpp"
+
+using base32 = cppcodec::base32_crockford;
+
+#endif // CPPCODEC_BASE32_DEFAULT_CROCKFORD
diff --git a/include/Third_Lib/cppcodec/base32_default_hex.hpp b/include/Third_Lib/cppcodec/base32_default_hex.hpp
new file mode 100644
index 0000000..4cd8336
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base32_default_hex.hpp
@@ -0,0 +1,31 @@
+/**
+ * Copyright (C) 2015, 2016 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE32_DEFAULT_HEX
+#define CPPCODEC_BASE32_DEFAULT_HEX
+
+#include "base32_hex.hpp"
+
+using base32 = cppcodec::base32_hex;
+
+#endif // CPPCODEC_BASE32_DEFAULT_HEX
diff --git a/include/Third_Lib/cppcodec/base32_default_rfc4648.hpp b/include/Third_Lib/cppcodec/base32_default_rfc4648.hpp
new file mode 100644
index 0000000..75561bc
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base32_default_rfc4648.hpp
@@ -0,0 +1,31 @@
+/**
+ * Copyright (C) 2015 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE32_DEFAULT_RFC4648
+#define CPPCODEC_BASE32_DEFAULT_RFC4648
+
+#include "base32_rfc4648.hpp"
+
+using base32 = cppcodec::base32_rfc4648;
+
+#endif // CPPCODEC_BASE32_DEFAULT_RFC4648
diff --git a/include/Third_Lib/cppcodec/base32_hex.hpp b/include/Third_Lib/cppcodec/base32_hex.hpp
new file mode 100644
index 0000000..ce1d84d
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base32_hex.hpp
@@ -0,0 +1,76 @@
+/**
+ * Copyright (C) 2015, 2016 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE32_HEX
+#define CPPCODEC_BASE32_HEX
+
+#include "detail/codec.hpp"
+#include "detail/base32.hpp"
+
+namespace cppcodec {
+
+namespace detail {
+
+// RFC 4648 also specifies a hex encoding system which uses 0-9, then A-V.
+static constexpr const char base32_hex_alphabet[] = {
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K',
+ 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V'
+};
+
+class base32_hex
+{
+public:
+ template using codec_impl = stream_codec;
+
+ static CPPCODEC_ALWAYS_INLINE constexpr size_t alphabet_size() {
+ static_assert(sizeof(base32_hex_alphabet) == 32, "base32 alphabet must have 32 values");
+ return sizeof(base32_hex_alphabet);
+ }
+ static CPPCODEC_ALWAYS_INLINE constexpr char symbol(alphabet_index_t idx)
+ {
+ return base32_hex_alphabet[idx];
+ }
+ static CPPCODEC_ALWAYS_INLINE constexpr char normalized_symbol(char c)
+ {
+ // Lower-case letters are accepted, though not generally expected.
+ return (c >= 'a' && c <= 'v') ? (c - 'a' + 'A') : c;
+ }
+
+ static CPPCODEC_ALWAYS_INLINE constexpr bool generates_padding() { return true; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool requires_padding() { return true; }
+ static CPPCODEC_ALWAYS_INLINE constexpr char padding_symbol() { return '='; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool is_padding_symbol(char c) { return c == '='; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool is_eof_symbol(char c) { return c == '\0'; }
+
+ // RFC4648 does not specify any whitespace being allowed in base32 encodings.
+ static CPPCODEC_ALWAYS_INLINE constexpr bool should_ignore(char) { return false; }
+};
+
+} // namespace detail
+
+using base32_hex = detail::codec>;
+
+} // namespace cppcodec
+
+#endif // CPPCODEC_BASE32_HEX
diff --git a/include/Third_Lib/cppcodec/base32_rfc4648.hpp b/include/Third_Lib/cppcodec/base32_rfc4648.hpp
new file mode 100644
index 0000000..c039702
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base32_rfc4648.hpp
@@ -0,0 +1,76 @@
+/**
+ * Copyright (C) 2015 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE32_RFC4648
+#define CPPCODEC_BASE32_RFC4648
+
+#include "detail/codec.hpp"
+#include "detail/base32.hpp"
+
+namespace cppcodec {
+
+namespace detail {
+
+// RFC 4648 uses a simple alphabet: A-Z starting at index 0, then 2-7 starting at index 26.
+static constexpr const char base32_rfc4648_alphabet[] = {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', // at index 26
+ '2', '3', '4', '5', '6', '7'
+};
+
+class base32_rfc4648
+{
+public:
+ template using codec_impl = stream_codec;
+
+ static CPPCODEC_ALWAYS_INLINE constexpr size_t alphabet_size() {
+ static_assert(sizeof(base32_rfc4648_alphabet) == 32, "base32 alphabet must have 32 values");
+ return sizeof(base32_rfc4648_alphabet);
+ }
+ static CPPCODEC_ALWAYS_INLINE constexpr char symbol(alphabet_index_t idx)
+ {
+ return base32_rfc4648_alphabet[idx];
+ }
+ static CPPCODEC_ALWAYS_INLINE constexpr char normalized_symbol(char c)
+ {
+ // Lower-case letters are accepted, though not generally expected.
+ return (c >= 'a' && c <= 'z') ? (c - 'a' + 'A') : c;
+ }
+
+ static CPPCODEC_ALWAYS_INLINE constexpr bool generates_padding() { return true; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool requires_padding() { return true; }
+ static CPPCODEC_ALWAYS_INLINE constexpr char padding_symbol() { return '='; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool is_padding_symbol(char c) { return c == '='; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool is_eof_symbol(char c) { return c == '\0'; }
+
+ // RFC4648 does not specify any whitespace being allowed in base32 encodings.
+ static CPPCODEC_ALWAYS_INLINE constexpr bool should_ignore(char) { return false; }
+};
+
+} // namespace detail
+
+using base32_rfc4648 = detail::codec>;
+
+} // namespace cppcodec
+
+#endif // CPPCODEC_BASE32_RFC4648
diff --git a/include/Third_Lib/cppcodec/base64_default_rfc4648.hpp b/include/Third_Lib/cppcodec/base64_default_rfc4648.hpp
new file mode 100644
index 0000000..3b39a00
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base64_default_rfc4648.hpp
@@ -0,0 +1,31 @@
+/**
+ * Copyright (C) 2015 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE64_DEFAULT_RFC4648
+#define CPPCODEC_BASE64_DEFAULT_RFC4648
+
+#include "base64_rfc4648.hpp"
+
+using base64 = cppcodec::base64_rfc4648;
+
+#endif // CPPCODEC_BASE64_DEFAULT_RFC4648
diff --git a/include/Third_Lib/cppcodec/base64_default_url.hpp b/include/Third_Lib/cppcodec/base64_default_url.hpp
new file mode 100644
index 0000000..7db2a39
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base64_default_url.hpp
@@ -0,0 +1,31 @@
+/**
+ * Copyright (C) 2015 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE64_DEFAULT_URL
+#define CPPCODEC_BASE64_DEFAULT_URL
+
+#include "base64_url.hpp"
+
+using base64 = cppcodec::base64_url;
+
+#endif // CPPCODEC_BASE64_DEFAULT_URL
diff --git a/include/Third_Lib/cppcodec/base64_default_url_unpadded.hpp b/include/Third_Lib/cppcodec/base64_default_url_unpadded.hpp
new file mode 100644
index 0000000..3173966
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base64_default_url_unpadded.hpp
@@ -0,0 +1,31 @@
+/**
+ * Copyright (C) 2016 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE64_DEFAULT_URL_UNPADDED
+#define CPPCODEC_BASE64_DEFAULT_URL_UNPADDED
+
+#include "base64_url_unpadded.hpp"
+
+using base64 = cppcodec::base64_url_unpadded;
+
+#endif // CPPCODEC_BASE64_DEFAULT_URL_UNPADDED
diff --git a/include/Third_Lib/cppcodec/base64_rfc4648.hpp b/include/Third_Lib/cppcodec/base64_rfc4648.hpp
new file mode 100644
index 0000000..717dcec
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base64_rfc4648.hpp
@@ -0,0 +1,73 @@
+/**
+ * Copyright (C) 2015 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE64_RFC4648
+#define CPPCODEC_BASE64_RFC4648
+
+#include "detail/codec.hpp"
+#include "detail/base64.hpp"
+
+namespace cppcodec {
+
+namespace detail {
+
+static constexpr const char base64_rfc4648_alphabet[] = {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
+};
+
+class base64_rfc4648
+{
+public:
+ template using codec_impl = stream_codec;
+
+ static CPPCODEC_ALWAYS_INLINE constexpr size_t alphabet_size() {
+ static_assert(sizeof(base64_rfc4648_alphabet) == 64, "base64 alphabet must have 64 values");
+ return sizeof(base64_rfc4648_alphabet);
+ }
+ static CPPCODEC_ALWAYS_INLINE constexpr char symbol(alphabet_index_t idx)
+ {
+ return base64_rfc4648_alphabet[idx];
+ }
+ static CPPCODEC_ALWAYS_INLINE constexpr char normalized_symbol(char c) { return c; }
+
+ static CPPCODEC_ALWAYS_INLINE constexpr bool generates_padding() { return true; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool requires_padding() { return true; }
+ static CPPCODEC_ALWAYS_INLINE constexpr char padding_symbol() { return '='; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool is_padding_symbol(char c) { return c == '='; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool is_eof_symbol(char c) { return c == '\0'; }
+
+ // RFC4648 does not specify any whitespace being allowed in base64 encodings.
+ static CPPCODEC_ALWAYS_INLINE constexpr bool should_ignore(char) { return false; }
+};
+
+} // namespace detail
+
+using base64_rfc4648 = detail::codec>;
+
+} // namespace cppcodec
+
+#endif // CPPCODEC_BASE64_RFC4648
diff --git a/include/Third_Lib/cppcodec/base64_url.hpp b/include/Third_Lib/cppcodec/base64_url.hpp
new file mode 100644
index 0000000..04c2f8b
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base64_url.hpp
@@ -0,0 +1,75 @@
+/**
+ * Copyright (C) 2015 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE64_URL
+#define CPPCODEC_BASE64_URL
+
+#include "detail/codec.hpp"
+#include "detail/base64.hpp"
+
+namespace cppcodec {
+
+namespace detail {
+
+// The URL and filename safe alphabet is also specified by RFC4648, named "base64url".
+// We keep the underscore ("base64_url") for consistency with the other codec variants.
+static constexpr const char base64_url_alphabet[] = {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_'
+};
+
+class base64_url
+{
+public:
+ template using codec_impl = stream_codec;
+
+ static CPPCODEC_ALWAYS_INLINE constexpr size_t alphabet_size() {
+ static_assert(sizeof(base64_url_alphabet) == 64, "base64 alphabet must have 64 values");
+ return sizeof(base64_url_alphabet);
+ }
+ static CPPCODEC_ALWAYS_INLINE constexpr char symbol(alphabet_index_t idx)
+ {
+ return base64_url_alphabet[idx];
+ }
+ static CPPCODEC_ALWAYS_INLINE constexpr char normalized_symbol(char c) { return c; }
+
+ static CPPCODEC_ALWAYS_INLINE constexpr bool generates_padding() { return true; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool requires_padding() { return true; }
+ static CPPCODEC_ALWAYS_INLINE constexpr char padding_symbol() { return '='; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool is_padding_symbol(char c) { return c == '='; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool is_eof_symbol(char c) { return c == '\0'; }
+
+ // RFC4648 does not specify any whitespace being allowed in base64 encodings.
+ static CPPCODEC_ALWAYS_INLINE constexpr bool should_ignore(char) { return false; }
+};
+
+} // namespace detail
+
+using base64_url = detail::codec>;
+
+} // namespace cppcodec
+
+#endif // CPPCODEC_BASE64_URL
diff --git a/include/Third_Lib/cppcodec/base64_url_unpadded.hpp b/include/Third_Lib/cppcodec/base64_url_unpadded.hpp
new file mode 100644
index 0000000..e9a5d3f
--- /dev/null
+++ b/include/Third_Lib/cppcodec/base64_url_unpadded.hpp
@@ -0,0 +1,48 @@
+/**
+ * Copyright (C) 2016 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_BASE64_URL_UNPADDED
+#define CPPCODEC_BASE64_URL_UNPADDED
+
+#include "base64_url.hpp"
+
+namespace cppcodec {
+
+namespace detail {
+
+class base64_url_unpadded : public base64_url
+{
+public:
+ template using codec_impl = stream_codec;
+
+ static CPPCODEC_ALWAYS_INLINE constexpr bool generates_padding() { return false; }
+ static CPPCODEC_ALWAYS_INLINE constexpr bool requires_padding() { return false; }
+};
+
+} // namespace detail
+
+using base64_url_unpadded = detail::codec>;
+
+} // namespace cppcodec
+
+#endif // CPPCODEC_BASE64_URL_UNPADDED
diff --git a/include/Third_Lib/cppcodec/data/access.hpp b/include/Third_Lib/cppcodec/data/access.hpp
new file mode 100644
index 0000000..432a3c7
--- /dev/null
+++ b/include/Third_Lib/cppcodec/data/access.hpp
@@ -0,0 +1,328 @@
+/**
+ * Copyright (C) 2015 Topology LP
+ * Copyright (C) 2018 Jakob Petsovits
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_DETAIL_DATA_ACCESS
+#define CPPCODEC_DETAIL_DATA_ACCESS
+
+#include // for size_t
+#include // for static_assert() checking that string will be optimized
+#include // for std::enable_if, std::remove_reference, and such
+#include // for std::declval
+#include // for static_assert() checking that vector will be optimized
+
+#include "../detail/config.hpp" // for CPPCODEC_ALWAYS_INLINE
+
+namespace cppcodec {
+namespace data {
+
+// This file contains a number of templated data accessors that can be
+// implemented in the cppcodec::data namespace for types that don't fulfill
+// the default type requirements:
+// For result types: init(Result&, ResultState&, size_t capacity),
+// put(Result&, ResultState&, char), finish(Result&, State&)
+// For const (read-only) types: char_data(const T&)
+// For both const and result types: size(const T&)
+
+template
+CPPCODEC_ALWAYS_INLINE size_t size(const T& t) { return t.size(); }
+
+template
+CPPCODEC_ALWAYS_INLINE constexpr size_t size(const T (&t)[N]) noexcept {
+ return (void)t, N * sizeof(t[0]);
+}
+
+class general_t {};
+class specific_t : public general_t {};
+
+class empty_result_state {
+ template
+ CPPCODEC_ALWAYS_INLINE void size(const Result& result) { return size(result); }
+};
+
+// SFINAE: Generic fallback in case no specific state function applies.
+template
+CPPCODEC_ALWAYS_INLINE empty_result_state create_state(Result&, general_t)
+{
+ return empty_result_state();
+}
+
+//
+// Generic templates for containers: Use these init()/put()/finish()
+// implementations if no specialization was found.
+//
+
+template
+CPPCODEC_ALWAYS_INLINE void init(Result& result, empty_result_state&, size_t capacity)
+{
+ result.resize(0);
+ result.reserve(capacity);
+}
+
+template
+CPPCODEC_ALWAYS_INLINE void finish(Result&, empty_result_state&)
+{
+ // Default is to push_back(), which already increases the size.
+}
+
+// For the put() default implementation, we try calling push_back() with either uint8_t or char,
+// whichever compiles. Scary-fancy template magic from http://stackoverflow.com/a/1386390.
+namespace fallback {
+ struct flag { char c[2]; }; // sizeof > 1
+ flag put_uint8(...);
+
+ int operator,(flag, flag);
+ template void operator,(flag, T&); // map everything else to void
+ char operator,(int, flag); // sizeof 1
+}
+
+template inline void put_uint8(Result& result, uint8_t c) { result.push_back(c); }
+
+template struct put_impl;
+template <> struct put_impl { // put_uint8() available
+ template
+ static CPPCODEC_ALWAYS_INLINE void put(Result& result, uint8_t c)
+ {
+ put_uint8(result, c);
+ }
+};
+template <> struct put_impl { // put_uint8() not available
+ template
+ static CPPCODEC_ALWAYS_INLINE void put(Result& result, uint8_t c)
+ {
+ result.push_back(static_cast(c));
+ }
+};
+
+template
+CPPCODEC_ALWAYS_INLINE void put(Result& result, empty_result_state&, uint8_t c)
+{
+ using namespace fallback;
+ put_impl::put(result, c);
+}
+
+//
+// Specialization for container types with direct mutable data access,
+// e.g. std::vector.
+//
+// The expected way to specialize is to draft a new xyz_result_state type and
+// return an instance of it from a create_state() template specialization.
+// You can then create overloads for init(), put() and finish()
+// for the new result state type.
+//
+// If desired, a non-templated overload for both specific types
+// (result & state) can be added to tailor it to that particular result type.
+//
+
+template
+constexpr auto data_is_mutable(T* t) -> decltype(t->data()[size_t(0)] = 'x', bool())
+{
+ return (void)t, true;
+}
+constexpr bool data_is_mutable(...) { return false; }
+
+template
+class direct_data_access_result_state
+{
+public:
+ CPPCODEC_ALWAYS_INLINE void init(Result& result, size_t capacity)
+ {
+ // reserve() may not actually allocate the storage right away,
+ // and it isn't guaranteed that it will be untouched upon the
+ //.next resize(). In that light, resize from the start and
+ // slightly reduce the size at the end if necessary.
+ result.resize(capacity);
+
+ // result.data() may perform a calculation to retrieve the address.
+ // E.g. std::string (since C++11) will use small string optimization,
+ // so it needs to check if it's using allocated data or (ab)using
+ // its own member variables interpreted as char array.
+ // (This result_state is used for std::string starting with C++17.)
+ // Conditional code paths are slow so we only do it once, at the start.
+ m_buffer = result.data();
+ }
+ CPPCODEC_ALWAYS_INLINE void put(Result&, char c)
+ {
+ m_buffer[m_offset++] = c;
+ }
+ CPPCODEC_ALWAYS_INLINE void finish(Result& result)
+ {
+ result.resize(m_offset);
+ }
+ CPPCODEC_ALWAYS_INLINE size_t size(const Result&)
+ {
+ return m_offset;
+ }
+private:
+ // Make sure to get the mutable buffer decltype by using assignment.
+ typename std::remove_reference<
+ decltype(std::declval().data()[size_t(0)] = 'x')>::type* m_buffer;
+ size_t m_offset = 0;
+};
+
+// SFINAE: Select a specific state based on the result type and possible result state type.
+// Implement this if direct data access (`result.data()[0] = 'x') isn't already possible
+// and you want to specialize it for your own result type.
+// Note: The enable_if should ideally be part of the class declaration,
+// but Visual Studio C++ will not compile it that way.
+// Have it here in the factory function instead.
+template (nullptr))>::type>
+CPPCODEC_ALWAYS_INLINE direct_data_access_result_state create_state(Result&, specific_t)
+{
+ return direct_data_access_result_state();
+}
+
+static_assert(std::is_same<
+ decltype(create_state(*static_cast*>(nullptr), specific_t())),
+ direct_data_access_result_state>>::value,
+ "std::vector must be handled by direct_data_access_result_state");
+
+// Specialized init(), put() and finish() functions for direct_data_access_result_state.
+template
+CPPCODEC_ALWAYS_INLINE void init(Result& result, direct_data_access_result_state& state, size_t capacity)
+{
+ state.init(result, capacity);
+}
+
+template
+CPPCODEC_ALWAYS_INLINE void put(Result& result, direct_data_access_result_state& state, char c)
+{
+ state.put(result, c);
+}
+
+template
+CPPCODEC_ALWAYS_INLINE void finish(Result& result, direct_data_access_result_state& state)
+{
+ state.finish(result);
+}
+
+//
+// Specialization for container types with direct mutable array access,
+// e.g. std::string. This is generally faster because bound checks are
+// minimal and operator[] is more likely noexcept. In addition,
+// std::string::push_back() needs to write a null character on every
+// expansion, which should be more efficient when done in bulk by resize().
+//
+// Compared to the above, tracking an extra offset variable is cheap.
+//
+
+template
+constexpr auto array_access_is_mutable(T* t) -> decltype((*t)[size_t(0)] = 'x', bool())
+{
+ return (void)t, true;
+}
+constexpr bool array_access_is_mutable(...) { return false; }
+
+template
+class array_access_result_state
+{
+public:
+ CPPCODEC_ALWAYS_INLINE void init(Result& result, size_t capacity)
+ {
+ // reserve() may not actually allocate the storage right away,
+ // and it isn't guaranteed that it will be untouched upon the
+ //.next resize(). In that light, resize from the start and
+ // slightly reduce the size at the end if necessary.
+ result.resize(capacity);
+ }
+ CPPCODEC_ALWAYS_INLINE void put(Result& result, char c)
+ {
+ result[m_offset++] = c;
+ }
+ CPPCODEC_ALWAYS_INLINE void finish(Result& result)
+ {
+ result.resize(m_offset);
+ }
+ CPPCODEC_ALWAYS_INLINE size_t size(const Result&)
+ {
+ return m_offset;
+ }
+private:
+ size_t m_offset = 0;
+};
+
+// SFINAE: Select a specific state based on the result type and possible result state type.
+// Note: The enable_if should ideally be part of the class declaration,
+// but Visual Studio C++ will not compile it that way.
+// Have it here in the factory function instead.
+template (nullptr)) // no more than one template option
+ && array_access_is_mutable(static_cast(nullptr))>::type>
+CPPCODEC_ALWAYS_INLINE array_access_result_state create_state(Result&, specific_t)
+{
+ return array_access_result_state();
+}
+
+#if __cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG > 201703L)
+static_assert(std::is_same<
+ decltype(create_state(*static_cast(nullptr), specific_t())),
+ direct_data_access_result_state>::value,
+ "std::string (C++17 and later) must be handled by direct_data_access_result_state");
+#elif __cplusplus < 201703 && !defined(_MSVC_LANG) // we can't trust MSVC to set this right
+static_assert(std::is_same<
+ decltype(create_state(*static_cast(nullptr), specific_t())),
+ array_access_result_state>::value,
+ "std::string (pre-C++17) must be handled by array_access_result_state");
+#endif
+
+// Specialized init(), put() and finish() functions for array_access_result_state.
+template
+CPPCODEC_ALWAYS_INLINE void init(Result& result, array_access_result_state& state, size_t capacity)
+{
+ state.init(result, capacity);
+}
+
+template
+CPPCODEC_ALWAYS_INLINE void put(Result& result, array_access_result_state& state, char c)
+{
+ state.put(result, c);
+}
+
+template
+CPPCODEC_ALWAYS_INLINE void finish(Result& result, array_access_result_state& state)
+{
+ state.finish(result);
+}
+
+// char_data() is only used to read, not for result buffers.
+template inline const char* char_data(const T& t)
+{
+ return reinterpret_cast(t.data());
+}
+template inline const char* char_data(const T (&t)[N]) noexcept
+{
+ return reinterpret_cast(&(t[0]));
+}
+
+template inline const uint8_t* uchar_data(const T& t)
+{
+ return reinterpret_cast(char_data(t));
+}
+
+} // namespace data
+} // namespace cppcodec
+
+#endif
diff --git a/include/Third_Lib/cppcodec/data/raw_result_buffer.hpp b/include/Third_Lib/cppcodec/data/raw_result_buffer.hpp
new file mode 100644
index 0000000..65b0de5
--- /dev/null
+++ b/include/Third_Lib/cppcodec/data/raw_result_buffer.hpp
@@ -0,0 +1,70 @@
+/**
+ * Copyright (C) 2015 Topology LP
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef CPPCODEC_DETAIL_RAW_RESULT_BUFFER
+#define CPPCODEC_DETAIL_RAW_RESULT_BUFFER
+
+#include // for size_t
+#include // for abort()
+
+#include "access.hpp"
+
+namespace cppcodec {
+namespace data {
+
+class raw_result_buffer
+{
+public:
+ raw_result_buffer(char* data, size_t capacity)
+ : m_ptr(data + capacity)
+ , m_begin(data)
+ {
+ }
+
+ CPPCODEC_ALWAYS_INLINE void push_back(char c) { *m_ptr = c; ++m_ptr; }
+ CPPCODEC_ALWAYS_INLINE size_t size() const { return m_ptr - m_begin; }
+ CPPCODEC_ALWAYS_INLINE void resize(size_t size) { m_ptr = m_begin + size; }
+
+private:
+ char* m_ptr;
+ char* m_begin;
+};
+
+
+template <> inline void init(
+ raw_result_buffer& result, empty_result_state&, size_t capacity)
+{
+ // This version of init() doesn't do a reserve(), and instead checks whether the
+ // initial size (capacity) is enough before resetting m_ptr to m_begin.
+ // The codec is expected not to exceed this capacity.
+ if (capacity > result.size()) {
+ abort();
+ }
+ result.resize(0);
+}
+template <> inline void finish(raw_result_buffer&, empty_result_state&) { }
+
+} // namespace data
+} // namespace cppcodec
+
+#endif
diff --git a/include/Third_Lib/cppcodec/detail/base32.hpp b/include/Third_Lib/cppcodec/detail/base32.hpp
new file mode 100644
index 0000000..7113b7a
--- /dev/null
+++ b/include/Third_Lib/cppcodec/detail/base32.hpp
@@ -0,0 +1,166 @@
+/**
+ * Copyright (C) 2015 Trustifier Inc.
+ * Copyright (C) 2015 Ahmed Masud
+ * Copyright (C) 2015 Topology LP
+ * Copyright (C) 2018 Jakob Petsovits
+ * All rights reserved.
+ *
+ * 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.
+ *
+ * Adapted from https://github.com/ahmed-masud/libbase32,
+ * commit 79761b2b79b0545697945efe0987a8d3004512f9.
+ * Quite different now.
+ */
+
+#ifndef CPPCODEC_DETAIL_BASE32
+#define CPPCODEC_DETAIL_BASE32
+
+#include
+#include // for abort()
+
+#include "../data/access.hpp"
+#include "../parse_error.hpp"
+#include "config.hpp"
+#include "stream_codec.hpp"
+
+namespace cppcodec {
+namespace detail {
+
+template
+class base32 : public CodecVariant::template codec_impl>
+{
+public:
+ static inline constexpr uint8_t binary_block_size() { return 5; }
+ static inline constexpr uint8_t encoded_block_size() { return 8; }
+
+ static CPPCODEC_ALWAYS_INLINE constexpr uint8_t num_encoded_tail_symbols(uint8_t num_bytes)
+ {
+ return (num_bytes == 1) ? 2 // 2 symbols, 6 padding characters
+ : (num_bytes == 2) ? 4 // 4 symbols, 4 padding characters
+ : (num_bytes == 3) ? 5 // 5 symbols, 3 padding characters
+ : (num_bytes == 4) ? 7 // 7 symbols, 1 padding characters
+ : throw std::domain_error("invalid number of bytes in a tail block");
+ }
+
+ template
+ static CPPCODEC_ALWAYS_INLINE constexpr uint8_t index(
+ const uint8_t* b /*binary block*/) noexcept
+ {
+ static_assert(I >= 0 && I < encoded_block_size(),
+ "invalid encoding symbol index in a block");
+
+ return (I == 0) ? ((b[0] >> 3) & 0x1F) // first 5 bits
+ : (I == 1) ? (((b[0] << 2) & 0x1C) | ((b[1] >> 6) & 0x3))
+ : (I == 2) ? ((b[1] >> 1) & 0x1F)
+ : (I == 3) ? (((b[1] << 4) & 0x10) | ((b[2] >> 4) & 0xF))
+ : (I == 4) ? (((b[2] << 1) & 0x1E) | ((b[3] >> 7) & 0x1))
+ : (I == 5) ? ((b[3] >> 2) & 0x1F)
+ : (I == 6) ? (((b[3] << 3) & 0x18) | ((b[4] >> 5) & 0x7))
+ : /*I == 7*/ (b[4] & 0x1F); // last 5 bits;
+ }
+
+ template
+ using uint8_if = typename std::enable_if::type;
+
+ template
+ static CPPCODEC_ALWAYS_INLINE constexpr
+ uint8_if index_last(
+ const uint8_t* b /*binary block*/) noexcept
+ {
+ return (I == 1) ? ((b[0] << 2) & 0x1C) // abbreviated 2nd symbol
+ : (I == 3) ? ((b[1] << 4) & 0x10) // abbreviated 4th symbol
+ : (I == 4) ? ((b[2] << 1) & 0x1E) // abbreviated 5th symbol
+ : /*I == 6*/ ((b[3] << 3) & 0x18); // abbreviated 7th symbol
+ }
+
+ template
+ static CPPCODEC_ALWAYS_INLINE
+ uint8_if index_last(
+ const uint8_t* /*binary block*/)
+ {
+ throw std::domain_error("invalid last encoding symbol index in a tail");
+ }
+
+ template
+ static CPPCODEC_ALWAYS_INLINE void decode_block(
+ Result& decoded, ResultState&, const alphabet_index_t* idx);
+
+ template
+ static CPPCODEC_ALWAYS_INLINE void decode_tail(
+ Result& decoded, ResultState&, const alphabet_index_t* idx, size_t idx_len);
+};
+
+//
+// 11111111 10101010 10110011 10111100 10010100
+// => 11111 11110 10101 01011 00111 01111 00100 10100
+//
+
+template
+template
+CPPCODEC_ALWAYS_INLINE void base32